[
  {
    "path": ".github/ISSUE_TEMPLATE/bug.yaml",
    "content": "name: Bug\ndescription: Report a bug\nlabels:\n- bug\n- needs-triage\nbody:\n- type: markdown\n  attributes:\n    value: |\n      > [!IMPORTANT]\n      > If your issue is not specific to AWS, please cut a ticket in [kubernetes-sigs/karpenter](https://github.com/kubernetes-sigs/karpenter/issues/new/choose).\n- type: textarea\n  attributes:\n    label: Description\n    value: |\n      **Observed Behavior**:\n\n      **Expected Behavior**:\n\n      **Reproduction Steps** (Please include YAML):\n\n      **Versions**:\n      - Chart Version:\n      - Kubernetes Version (`kubectl version`):\n\n      * Please vote on this issue by adding a 👍 [reaction](https://blog.github.com/2016-03-10-add-reactions-to-pull-requests-issues-and-comments/) to the original issue to help the community and maintainers prioritize this request\n      * Please do not leave \"+1\" or \"me too\" comments, they generate extra noise for issue followers and do not help prioritize the request\n      * If you are interested in working on this issue or have submitted a pull request, please leave a comment\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/documentation.yaml",
    "content": "name: Documentation\ndescription: How the docs be improved?\nlabels:\n- documentation\n- needs-triage\nbody:\n- type: textarea\n  attributes:\n    label: Description\n    value: |\n      **How can the docs be improved?**\n\n      * Please vote on this issue by adding a 👍 [reaction](https://blog.github.com/2016-03-10-add-reactions-to-pull-requests-issues-and-comments/) to the original issue to help the community and maintainers prioritize this request\n      * Please do not leave \"+1\" or \"me too\" comments, they generate extra noise for issue followers and do not help prioritize the request\n      * If you are interested in working on this issue or have submitted a pull request, please leave a comment\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature.yaml",
    "content": "name: Feature\ndescription: Suggest an idea for a new feature\nlabels:\n- feature\n- needs-triage\nbody:\n- type: markdown\n  attributes:\n    value: |\n      > [!IMPORTANT]\n      > If your issue is not specific to AWS, please cut a ticket in [kubernetes-sigs/karpenter](https://github.com/kubernetes-sigs/karpenter/issues/new/choose).\n- type: textarea\n  attributes:\n    label: Description\n    value: |\n      **What problem are you trying to solve?**\n\n      **How important is this feature to you?**\n\n      * Please vote on this issue by adding a 👍 [reaction](https://blog.github.com/2016-03-10-add-reactions-to-pull-requests-issues-and-comments/) to the original issue to help the community and maintainers prioritize this request\n      * Please do not leave \"+1\" or \"me too\" comments, they generate extra noise for issue followers and do not help prioritize the request\n      * If you are interested in working on this issue or have submitted a pull request, please leave a comment\n"
  },
  {
    "path": ".github/actionlint-matcher.json",
    "content": "{\n  \"problemMatcher\": [\n    {\n      \"owner\": \"actionlint\",\n      \"pattern\": [\n        {\n          \"regexp\": \"^(?:\\\\x1b\\\\[\\\\d+m)?(.+?)(?:\\\\x1b\\\\[\\\\d+m)*:(?:\\\\x1b\\\\[\\\\d+m)*(\\\\d+)(?:\\\\x1b\\\\[\\\\d+m)*:(?:\\\\x1b\\\\[\\\\d+m)*(\\\\d+)(?:\\\\x1b\\\\[\\\\d+m)*: (?:\\\\x1b\\\\[\\\\d+m)*(.+?)(?:\\\\x1b\\\\[\\\\d+m)* \\\\[(.+?)\\\\]$\",\n          \"file\": 1,\n          \"line\": 2,\n          \"column\": 3,\n          \"message\": 4,\n          \"code\": 5\n        }\n      ]\n    }\n  ]\n}"
  },
  {
    "path": ".github/actions/commit-status/end/action.yaml",
    "content": "name: CommitStatusEnd\ndescription: 'Adds a commit status at the end of the test run based on success, failure, or cancelled'\ninputs:\n  name:\n    description: \"Name of the check\"\n    required: true\n  git_ref:\n    description: \"The git commit, tag, or branch to check out. Requires a corresponding Karpenter snapshot release\"\n    required: true\nruns:\n  using: \"composite\"\n  steps:\n    - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0\n      if: job.status == 'success'\n      env:\n        NAME: ${{ inputs.name }}\n        SHA: ${{ inputs.git_ref }}\n        REPO: ${{ github.repository }}\n        RUN_ID: ${{ github.run_id }}\n      with:\n        script: |\n          github.rest.repos.createCommitStatus({\n            owner: context.repo.owner,\n            repo: context.repo.repo,\n            context: process.env.NAME,\n            sha: process.env.SHA,\n            state: \"success\",\n            target_url: `https://github.com/${process.env.REPO}/actions/runs/${process.env.RUN_ID}`,\n          });\n    - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0\n      if: job.status == 'failure' || job.status == 'cancelled'\n      env:\n        NAME: ${{ inputs.name }}\n        SHA: ${{ inputs.git_ref }}\n        REPO: ${{ github.repository }}\n        RUN_ID: ${{ github.run_id }}\n      with:\n        script: |\n          github.rest.repos.createCommitStatus({\n            owner: context.repo.owner,\n            repo: context.repo.repo,\n            context: process.env.NAME,\n            sha: process.env.SHA,\n            state: \"failure\",\n            target_url: `https://github.com/${process.env.REPO}/actions/runs/${process.env.RUN_ID}`,\n          });\n"
  },
  {
    "path": ".github/actions/commit-status/start/action.yaml",
    "content": "name: CommitStatusStart\ndescription: 'Adds a commit status at the start of the test run to set the status to pending'\ninputs:\n  name:\n    description: \"Name of the check\"\n    required: true\n  git_ref:\n    description: \"The git commit, tag, or branch to check out. Requires a corresponding Karpenter snapshot release\"\n    required: true\nruns:\n  using: \"composite\"\n  steps:\n    - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0\n      if: always()\n      env:\n        NAME: ${{ inputs.name }}\n        SHA: ${{ inputs.git_ref }}\n        REPO: ${{ github.repository }}\n        RUN_ID: ${{ github.run_id }}\n      with:\n        script: |\n          github.rest.repos.createCommitStatus({\n            owner: context.repo.owner,\n            repo: context.repo.repo,\n            context: process.env.NAME,\n            sha: process.env.SHA,\n            state: \"pending\",\n            target_url: `https://github.com/${process.env.REPO}/actions/runs/${process.env.RUN_ID}`,\n          });\n"
  },
  {
    "path": ".github/actions/deploy-website/action.yml",
    "content": "name: 'Deploy Website to Amplify'\ndescription: 'Build Hugo site and deploy to AWS Amplify'\ninputs:\n  role:\n    description: 'AWS IAM role ARN to assume'\n    required: true\n  region:\n    description: 'AWS region for Amplify'\n    required: true\n  amplify-app-id:\n    description: 'AWS Amplify App ID'\n    required: true\n  amplify-branch-name:\n    description: 'AWS Amplify branch name'\n    required: true\n  s3-bucket:\n    description: 'S3 bucket for website files'\n    required: true\n  s3-prefix:\n    description: 'S3 prefix/path for website files'\n    required: false\n    default: ''\n  hugo-base-url:\n    description: 'Base URL for Hugo build'\n    required: false\n    default: ''\nruns:\n  using: 'composite'\n  steps:\n    - name: Install Go\n      uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0\n      with:\n        go-version-file: hack/docs/parse-redirects/go.mod\n        check-latest: true\n    - name: Install Hugo\n      uses: peaceiris/actions-hugo@16361eb4acea8698b220b76c0d4e84e1fd22c61d # v2.6.0\n      with:\n        hugo-version: '0.120.3'\n        extended: true\n    - name: Build Hugo site (preview)\n      working-directory: website\n      shell: bash\n      env:\n        HUGO_ENV: production\n        HUGO_ENABLEGITINFO: true\n        TZ: America/Los_Angeles\n        HUGO_CACHEDIR: ${{ github.workspace }}/.hugo\n        NPM_CONFIG_CACHE: ${{ github.workspace }}/.npm\n      if: github.event_name == 'workflow_run'\n      run: |\n        npm ci --prefer-offline\n        hugo --gc --minify --buildFuture -b \"${{ inputs.hugo-base-url }}\"\n    - name: Build Hugo site (production) \n      working-directory: website\n      shell: bash\n      env:\n        HUGO_ENV: production\n        HUGO_ENABLEGITINFO: true\n        TZ: America/Los_Angeles\n        HUGO_CACHEDIR: ${{ github.workspace }}/.hugo\n        NPM_CONFIG_CACHE: ${{ github.workspace }}/.npm\n      if: github.event_name == 'push'\n      run: |\n        npm ci --prefer-offline\n        hugo --gc --minify\n    - name: Configure AWS credentials\n      uses: aws-actions/configure-aws-credentials@b47578312673ae6fa5b5096b330d9fbac3d116df # v4.2.1\n      with:\n        role-to-assume: ${{ inputs.role }}\n        aws-region: ${{ inputs.region }}\n    - name: Upload to S3\n      shell: bash\n      run: |\n        S3_PATH=\"s3://${{ inputs.s3-bucket }}/${{ inputs.s3-prefix }}\"\n        aws s3 sync website/public/ \"$S3_PATH\" --delete\n    - name: Create Amplify branch (if preview and doesn't exist)\n      shell: bash\n      if: github.event_name == 'workflow_run'\n      run: |\n        if ! aws amplify get-branch --app-id ${{ inputs.amplify-app-id }} --branch-name \"${{ inputs.amplify-branch-name }}\" 2>/dev/null; then\n          aws amplify create-branch \\\n            --app-id ${{ inputs.amplify-app-id }} \\\n            --branch-name \"${{ inputs.amplify-branch-name }}\"\n        fi\n    - name: Configure redirects\n      shell: bash\n      run: |\n        REDIRECT_RULES=$(go run hack/docs/parse-redirects/main.go)\n        aws amplify update-app \\\n          --app-id ${{ inputs.amplify-app-id }} \\\n          --custom-rules \"$REDIRECT_RULES\"\n    - name: Deploy to Amplify\n      shell: bash\n      run: |\n        SOURCE_URL=\"s3://${{ inputs.s3-bucket }}/${{ inputs.s3-prefix }}\"\n        aws amplify start-deployment \\\n          --app-id ${{ inputs.amplify-app-id }} \\\n          --branch-name \"${{ inputs.amplify-branch-name }}\" \\\n          --source-url \"$SOURCE_URL\" \\\n          --source-url-type BUCKET_PREFIX\n"
  },
  {
    "path": ".github/actions/download-artifact/action.yaml",
    "content": "name: DownloadArtifacts\ndescription: 'Downloads and unarchives artifacts for a workflow that runs on workflow_run so that it can use its data'\nruns:\n  using: \"composite\"\n  steps:\n    - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0\n      with:\n        script: |\n          let allArtifacts = await github.rest.actions.listWorkflowRunArtifacts({\n             owner: context.repo.owner,\n             repo: context.repo.repo,\n             run_id: context.payload.workflow_run.id,\n          });\n          let matchArtifact = allArtifacts.data.artifacts.filter((artifact) => {\n            return artifact.name == \"artifacts\"\n          })[0];\n          let download = await github.rest.actions.downloadArtifact({\n             owner: context.repo.owner,\n             repo: context.repo.repo,\n             artifact_id: matchArtifact.id,\n             archive_format: 'zip',\n          });\n          let fs = require('fs');\n          fs.writeFileSync(`/tmp/artifacts.zip`, Buffer.from(download.data));\n    - run: |\n        mkdir -p /tmp/artifacts\n        unzip /tmp/artifacts.zip -d /tmp/artifacts\n      shell: bash\n    - run: |\n        echo \"Downloaded artifacts:\"\n        ls -ablh /tmp/artifacts\n      shell: bash\n"
  },
  {
    "path": ".github/actions/e2e/cleanup/action.yaml",
    "content": "name: Cleanup\ndescription: 'Runs all the cleanup tasks to cleanup resources deployed during E2E'\ninputs:\n  account_id:\n    description: \"Account ID to access AWS\"\n    required: true\n  role:\n    description: \"Role to access AWS\"\n    required: true\n  region:\n    description: \"Region to access AWS\"\n    required: true\n  cluster_name:\n    description: 'Name of the cluster to be launched by eksctl'\n    required: true\n  git_ref:\n    description: \"The git commit, tag, or branch to check out. Requires a corresponding Karpenter snapshot release\"\n  eksctl_version:\n    description: \"Version of eksctl to install\"\n    default: v0.202.0\n  private_cluster:\n    description: \"Whether the cluster that has to be deleted is private or not. Valid values are 'true' or 'false'\"\n    default: 'false'\nruns:\n  using: \"composite\"\n  steps:\n    - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1\n      with:\n        ref: ${{ inputs.git_ref }}\n    - uses: ./.github/actions/e2e/install-eksctl\n      with:\n        version: ${{ inputs.eksctl_version }}\n    - name: delete-cluster\n      if: ${{ inputs.private_cluster == 'false' }}\n      shell: bash\n      env:\n        CLUSTER_NAME: ${{ inputs.cluster_name }}\n      run: |\n        eksctl delete cluster --name \"$CLUSTER_NAME\" --timeout 60m --wait || true\n    - uses: actions/setup-go@7a3fe6cf4cb3a834922a1244abfce67bcef6a0c5 # v6.2.0\n      with:\n        go-version-file: test/hack/resource/go.mod\n        cache-dependency-path: test/hack/resource/go.sum\n        check-latest: true\n        cache: false\n    - name: \"Run cleanup script\"\n      shell: bash\n      env:\n        CLUSTER_NAME: ${{ inputs.cluster_name }}\n      run: |\n        go run main.go --cluster-name \"$CLUSTER_NAME\"\n      working-directory: ./test/hack/resource/clean\n"
  },
  {
    "path": ".github/actions/e2e/dump-logs/action.yaml",
    "content": "name: DumpLogs\ndescription: 'Dump logs and debug information from the cluster after a test run'\ninputs:\n  account_id:\n    description: \"Account ID to access AWS\"\n    required: true\n  role:\n    description: \"Role to access AWS\"\n    required: true\n  region:\n    description: \"Region to access AWS\"\n    required: true\n  cluster_name:\n    description: 'Name of the cluster to be launched by eksctl'\n    required: true\nruns:\n  using: \"composite\"\n  steps:\n    - name: configure aws credentials\n      uses: aws-actions/configure-aws-credentials@61815dcd50bd041e203e49132bacad1fd04d2708 # v5.1.1\n      with:\n        role-to-assume: arn:aws:iam::${{ inputs.account_id }}:role/${{ inputs.role }}\n        aws-region: ${{ inputs.region }}\n        role-duration-seconds: 21600\n    - name: update cluster context\n      shell: bash\n      env:\n        CLUSTER_NAME: ${{ inputs.cluster_name }}\n      run: |\n        aws eks update-kubeconfig --name \"$CLUSTER_NAME\"\n    - name: controller-logs\n      shell: bash\n      run: |\n        kubectl logs -n kube-system -l app.kubernetes.io/name=karpenter --all-containers --ignore-errors\n    - name: describe karpenter pods\n      shell: bash\n      run: |\n        kubectl describe pods -n kube-system -l app.kubernetes.io/name=karpenter\n    - name: describe nodes\n      shell: bash\n      run: |\n        kubectl describe nodes\n"
  },
  {
    "path": ".github/actions/e2e/install-eksctl/action.yaml",
    "content": "name: InstallEKSCTL\ndescription: 'Installs eksctl'\ninputs:\n  version:\n    description: \"Version of EKSCTL to use for the launched cluster\"\n    required: true\nruns:\n  using: \"composite\"\n  steps:\n    - shell: bash\n      env:\n        VERSION: ${{ inputs.version }}\n      run: |\n        # for ARM systems, set ARCH to: `arm64`, `armv6` or `armv7`\n        ARCH=amd64\n        PLATFORM=$(uname -s)_$ARCH\n        curl -sLO \"https://github.com/weaveworks/eksctl/releases/download/$VERSION/eksctl_$PLATFORM.tar.gz\"\n\n        # (Optional) Verify checksum\n        curl -sL \"https://github.com/weaveworks/eksctl/releases/download/$VERSION/eksctl_checksums.txt\" | grep $PLATFORM | sha256sum --check\n        tar -xzf eksctl_$PLATFORM.tar.gz -C /tmp && rm eksctl_$PLATFORM.tar.gz\n        sudo mv /tmp/eksctl /usr/local/bin\n"
  },
  {
    "path": ".github/actions/e2e/install-helm/action.yaml",
    "content": "name: InstallHelm\ndescription: 'Installs helm'\ninputs:\n  version:\n    description: \"Version of Helm to install\"\n    required: true\nruns:\n  using: \"composite\"\n  steps:\n    - name: install helm\n      shell: bash\n      env:\n        HELM_VERSION: ${{ inputs.version }}\n      run: |\n        ./test/hack/e2e_scripts/install_helm.sh\n    - name: install helm-diff\n      shell: bash\n      run: |\n        helm plugin install https://github.com/databus23/helm-diff || true"
  },
  {
    "path": ".github/actions/e2e/install-karpenter/action.yaml",
    "content": "name: InstallKarpenter\ndescription: 'Installs Go Downloads and installs Karpenter Dependencies'\ninputs:\n  account_id:\n    description: \"Account ID to access AWS\"\n    required: true\n  role:\n    description: \"Role to access AWS\"\n    required: true\n  region:\n    description: \"Region to access AWS\"\n    required: true\n  ecr_account_id:\n    description: \"Account ID for the ECR repo\"\n    required: true\n  ecr_region:\n    description: \"Region for the ECR repo\"\n    required: true\n  cluster_name:\n    description: 'Name of the cluster to be launched by eksctl'\n    required: true\n  k8s_version:\n    description: 'Version of Kubernetes to use for the launched cluster'\n    default: \"1.35\"\n  git_ref:\n    description: \"The git commit, tag, or branch to check out. Requires a corresponding Karpenter snapshot release\"\n  private_cluster:\n    description: \"Whether the cluster is private or not. Valid values are 'true' or 'false'\"\n    default: 'false'\nruns:\n  using: \"composite\"\n  steps:\n  - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1\n    with:\n      ref: ${{ inputs.git_ref }}\n  - uses: ./.github/actions/e2e/install-helm\n    with:\n      version: v3.18.6\n  # Label namespace to enforce security stranded and scrape prometheus metrics\n  # https://kubernetes.io/docs/concepts/security/pod-security-standards/\n  - name: add labels to kube-system namespace\n    shell: bash\n    run: |\n      kubectl label ns kube-system scrape=enabled --overwrite=true\n      kubectl label ns kube-system pod-security.kubernetes.io/warn=restricted --overwrite=true\n  - name: login to ecr via docker\n    uses: docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef # v3.6.0\n    with:\n      registry: ${{ inputs.ecr_account_id }}.dkr.ecr.${{ inputs.ecr_region }}.amazonaws.com\n      logout: true\n  - name: install-karpenter\n    shell: bash\n    env:\n      ECR_ACCOUNT_ID: ${{ inputs.ecr_account_id }}\n      ECR_REGION: ${{ inputs.ecr_region }}\n      ACCOUNT_ID: ${{ inputs.account_id }}\n      CLUSTER_NAME: ${{ inputs.cluster_name }}\n      PRIVATE_CLUSTER: ${{ inputs.private_cluster }}\n    run: |\n      output=$(./test/hack/e2e_scripts/install_karpenter.sh 2>&1)\n      if echo \"$output\" | grep -i \"warning.*violate.*podsecurity\"; then\n        echo \"ERROR: Karpenter does not respect restricted Pod Security Standard\"\n        exit 1\n      fi\n  - name: diff-karpenter\n    shell: bash\n    env:\n      ECR_ACCOUNT_ID: ${{ inputs.ecr_account_id }}\n      ECR_REGION: ${{ inputs.ecr_region }}\n    run: |\n      ./test/hack/e2e_scripts/diff_karpenter.sh\n"
  },
  {
    "path": ".github/actions/e2e/install-prometheus/action.yaml",
    "content": "name: InstallPrometheus\ndescription: 'Installs prometheus'\ninputs:\n  account_id:\n    description: \"Account ID to access AWS\"\n    required: true\n  role:\n    description: \"Role to access AWS\"\n    required: true\n  region:\n    description: \"Region to access AWS\"\n    required: true\n  prometheus_region:\n    description: \"Prometheus region\"\n    required: true\n  cluster_name:\n    description: 'Name of the cluster to be launched by eksctl'\n    required: true\n  workspace_id:\n    description: \"Id of the prometheus remote_write workspace\"\n    required: true\n  git_ref:\n    description: \"The git commit, tag, or branch to check out. Requires a corresponding Karpenter snapshot release\"\n  private_cluster:\n    description: \"Whether the cluster is private or not. Valid values are 'true' or 'false'\"\n    default: 'false'\nruns:\n  using: \"composite\"\n  steps:\n    - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1\n      with:\n        ref: ${{ inputs.git_ref }}\n    - uses: ./.github/actions/e2e/install-helm\n      with:\n        version: v3.18.6\n    - name: add prometheus repo\n      shell: bash\n      run: |\n        helm repo add prometheus-community https://prometheus-community.github.io/helm-charts\n    - name: create prometheus namespace\n      shell: bash\n      run: |\n        kubectl create ns prometheus || true\n        kubectl label ns prometheus scrape=enabled --overwrite=true\n    - name: install prometheus\n      shell: bash\n      env:\n        PROMETHEUS_REGION: ${{ inputs.prometheus_region }}\n        REGION: ${{ inputs.region }}\n        WORKSPACE_ID: ${{ inputs.workspace_id }}\n        ACCOUNT_ID: ${{ inputs.account_id }}\n        CLUSTER_NAME: ${{ inputs.cluster_name }}\n        PRIVATE_CLUSTER: ${{ inputs.private_cluster }}\n      run: |\n        ./test/hack/e2e_scripts/install_prometheus.sh\n"
  },
  {
    "path": ".github/actions/e2e/install-prometheus/values.yaml",
    "content": "prometheusOperator:\n  tolerations:\n    - key: CriticalAddonsOnly\n      operator: Exists\n  admissionWebhooks:\n    patch:\n      tolerations:\n        - key: CriticalAddonsOnly\n          operator: Exists\nprometheus-node-exporter:\n  tolerations:\n    - key: CriticalAddonsOnly\n      operator: Exists\nnodeExporter:\n  enabled: false\nkube-state-metrics:\n  tolerations:\n    - key: CriticalAddonsOnly\n      operator: Exists\ngrafana:\n  tolerations:\n    - key: CriticalAddonsOnly\n      operator: Exists\nalertmanager:\n  alertmanagerSpec:\n    tolerations:\n      - key: CriticalAddonsOnly\n        operator: Exists\nkubelet:\n  serviceMonitor:\n    # Enable CAdvisor metrics (this is enabled by default but explicitly specified for clarity)\n    # https://github.com/prometheus-community/helm-charts/blob/main/charts/kube-prometheus-stack/templates/exporters/kubelet/servicemonitor.yaml#L41\n    cAdvisor: true\n    # Disable probes scrape endpoint\n    # https://github.com/prometheus-community/helm-charts/blob/main/charts/kube-prometheus-stack/templates/exporters/kubelet/servicemonitor.yaml#L68\n    probes: false\n    # Disable resource scrape endpoint\n    # https://github.com/prometheus-community/helm-charts/blob/main/charts/kube-prometheus-stack/templates/exporters/kubelet/servicemonitor.yaml#L95\n    resource: false\n    additionalLabels:\n      scrape: enabled\nprometheus:\n  prometheusSpec:\n    tolerations:\n      - key: CriticalAddonsOnly\n        operator: Exists\n    resources:\n      requests:\n        cpu: 1\n        memory: 15Gi\n      limits:\n        cpu: 1\n        memory: 15Gi\n    serviceMonitorSelector:\n      matchLabels:\n        scrape: enabled\n    serviceMonitorNamespaceSelector:\n      matchLabels:\n        scrape: enabled\n    remoteWrite:\n      - queueConfig:\n          maxSamplesPerSend: 1000\n          maxShards: 200\n          capacity: 2500"
  },
  {
    "path": ".github/actions/e2e/run-tests-private-cluster/action.yaml",
    "content": "name: RunTestsPrivateCluster\ndescription: 'Installs Karpenter, Prometheus, runs tests on private cluster and performs clean up'\ninputs:\n  account_id:\n    description: \"Account ID to access AWS\"\n    required: true\n  suite:\n    description: \"Test suite to run\"\n    required: true\n  ecr_account_id:\n    description: \"Account ID to access ECR Repository\"\n    required: true\n  prometheus_workspace_id:\n    description: \"Workspace ID for the Prometheus workspace\"\n    required: true\n  metrics_region:\n    description: \"Metrics region\"\n    required: true\n  node_role:\n    description: \"Private cluster node role\"\n    required: true\n  region:\n    description: \"Region to access AWS\"\n    required: true\n  ecr_region:\n    description: \"Region to access ECR Repository\"\n    required: true\n  prometheus_region:\n    description: Region to access Prometheus\n    required: true\n  cluster_name:\n    description: 'Name of the cluster to be launched by eksctl'\n    required: true\n  k8s_version:\n    description: 'Version of Kubernetes to use for the launched cluster'\n    default: \"1.35\"\n  private_cluster:\n    description: \"Whether to create a private cluster which does not add access to the public internet. Valid values are 'true' or 'false'\"\n    default: 'false'\n  enable_metrics:\n    description: \"Whether to enable metrics for the cluster\"\n    default: 'false'\n  codebuild_sg:\n    description: \"Codebuild security group to run private cluster tests\"\n    required: true\n  codebuild_vpc:\n    description: \"Codebuild VPC to run private cluster tests\"\n    required: true\n  cleanup:\n    description: \"Whether to cleanup resources on failure\"\n    default: 'false'\nruns:\n  using: \"composite\"\n  steps:\n  - name: login to ecr via docker\n    uses: docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef # v3.6.0\n    with:\n      registry: ${{ inputs.account_id }}.dkr.ecr.${{ inputs.region }}.amazonaws.com\n      logout: true\n  - name: configure private cluster\n    if: ${{ inputs.private_cluster }}\n    shell: bash\n    env:\n      REGION: ${{ inputs.region }}\n      CLUSTER_NAME: ${{ inputs.cluster_name }}\n      ACCOUNT_ID: ${{ inputs.account_id }}\n      REPOSITORY: ${{ github.repository }}\n      RUN_ID: ${{ github.run_id }}\n      CODEBUILD_SG: ${{ inputs.codebuild_sg }}\n      CODEBUILD_VPC: ${{ inputs.codebuild_vpc }}\n    run: |\n      ./test/hack/e2e_scripts/configure_private_cluster.sh\n  - name: run private cluster tests on codebuild\n    env:\n      SUITE: ${{ inputs.suite }}\n      CLUSTER_NAME: ${{ inputs.cluster_name }}\n      INTERRUPTION_QUEUE: ${{ inputs.cluster_name }}\n      REGION: ${{ inputs.region }}\n      HELM_VERSION: v3.12.3 # Pinned to this version since v3.13.0 has issues with anonymous pulls: https://github.com/helm/helm/issues/12423\n      PROMETHEUS_REGION: ${{ inputs.prometheus_region }}\n      WORKSPACE_ID: ${{ inputs.prometheus_workspace_id }}\n      ACCOUNT_ID: ${{ inputs.account_id }}\n      K8S_VERSION: ${{ inputs.k8s_version }}\n      ECR_ACCOUNT_ID: ${{ inputs.ecr_account_id }}\n      ECR_REGION: ${{ inputs.ecr_region }}\n      PRIVATE_CLUSTER: ${{ inputs.private_cluster }}\n      ENABLE_METRICS: ${{ inputs.enable_metrics }}\n      METRICS_REGION: ${{ inputs.metrics_region }}\n      VPC_PEERING_CONNECTION_ID: ${{ env.VPC_PEERING_CONNECTION_ID }}\n      NODE_ROLE: ${{ env.NODE_ROLE }}\n      SG_CB: ${{ inputs.codebuild_sg }}\n      VPC_CB: ${{ inputs.codebuild_vpc }}\n      CLUSTER_VPC_ID: ${{ env.CLUSTER_VPC_ID }}\n      EKS_CLUSTER_SG: ${{ env.EKS_CLUSTER_SG }}\n      CLEANUP: ${{ inputs.cleanup }}\n    uses: aws-actions/aws-codebuild-run-build@4d15a47425739ac2296ba5e7eee3bdd4bfbdd767 # v1.0.18\n    with:\n      project-name: E2EPrivateClusterCodeBuildProject-us-east-1\n      buildspec-override: |\n        version: 0.2\n        phases:\n          install:\n            commands:\n              # Make sure goenv is up to date\n              - cd $HOME/.goenv && git pull --ff-only && cd -\n              # Install Go 1.22\n              - goenv install 1.22 && goenv global 1.22\n          build:\n            commands:\n              - aws eks update-kubeconfig --name $CLUSTER_NAME\n              - ./test/hack/e2e_scripts/noderole_bootstrap_permission.sh\n              - ./test/hack/e2e_scripts/install_helm.sh\n              - helm plugin install https://github.com/databus23/helm-diff || true\n              - aws ecr get-login-password --region $REGION | docker login --username AWS --password-stdin $ACCOUNT_ID.dkr.ecr.$REGION.amazonaws.com\n              - helm repo add prometheus-community https://prometheus-community.github.io/helm-charts\n              - helm pull prometheus-community/kube-prometheus-stack\n              - kubectl create ns prometheus || true\n              - kubectl label ns prometheus scrape=enabled --overwrite=true\n              - ./test/hack/e2e_scripts/install_prometheus.sh\n              - kubectl label ns kube-system scrape=enabled --overwrite=true\n              - kubectl label ns kube-system pod-security.kubernetes.io/warn=restricted --overwrite=true\n              - ./test/hack/e2e_scripts/install_karpenter.sh\n              - ./test/hack/e2e_scripts/diff_karpenter.sh\n              - kubectl delete nodepool --all\n              - kubectl delete ec2nodeclass --all\n              - kubectl delete deployment --all\n              - PRIVATE_CLUSTER=$CLUSTER_NAME TEST_SUITE=$SUITE ENABLE_METRICS=$ENABLE_METRICS METRICS_REGION=$METRICS_REGION GIT_REF=\"$(git rev-parse HEAD)\" CLUSTER_NAME=$CLUSTER_NAME CLUSTER_ENDPOINT=\"$(aws eks describe-cluster --name $CLUSTER_NAME --query \"cluster.endpoint\" --output text)\" INTERRUPTION_QUEUE=$CLUSTER_NAME make e2etests\n          post_build:\n            commands:\n              # Describe karpenter pods\n              - kubectl describe pods -n kube-system -l app.kubernetes.io/name=karpenter\n              # Describe nodes\n              - kubectl describe nodes\n              - |\n                if [ \"${CLEANUP}\" = true ]; then\n                  ./test/hack/e2e_scripts/clean_private_cluster.sh\n                fi\n      env-vars-for-codebuild: |\n        SUITE,\n        CLUSTER_NAME,\n        INTERRUPTION_QUEUE,\n        REGION,\n        HELM_VERSION,\n        PROMETHEUS_REGION,\n        WORKSPACE_ID,\n        ACCOUNT_ID,\n        K8S_VERSION,\n        ECR_ACCOUNT_ID,\n        ECR_REGION,\n        PRIVATE_CLUSTER,\n        ENABLE_METRICS,\n        METRICS_REGION,\n        VPC_PEERING_CONNECTION_ID,\n        NODE_ROLE,\n        SG_CB,\n        VPC_CB,\n        CLUSTER_VPC_ID,\n        EKS_CLUSTER_SG,\n        CLEANUP\n"
  },
  {
    "path": ".github/actions/e2e/setup-cluster/action.yaml",
    "content": "name: SetupCluster\ndescription: 'Installs Go Downloads and installs Karpenter Dependencies'\ninputs:\n  account_id:\n    description: \"Account ID to access AWS\"\n    required: true\n  ecr_account_id:\n    description: \"Account ID to access ECR Repository\"\n    required: true\n  prometheus_workspace_id:\n    description: Workspace ID for the Prometheus workspace\n    required: true\n  role:\n    description: \"Role to access AWS\"\n    required: true\n  region:\n    description: \"Region to access AWS\"\n    required: true\n  ecr_region:\n    description: \"Region to access ECR Repository\"\n    required: true\n  prometheus_region:\n    description: Region to access Prometheus\n    required: true\n  cluster_name:\n    description: 'Name of the cluster to be launched by eksctl'\n    required: true\n  k8s_version:\n    description: 'Version of Kubernetes to use for the launched cluster'\n    default: \"1.35\"\n  eksctl_version:\n    description: \"Version of eksctl to install\"\n    default: v0.202.0\n  ip_family:\n    description: \"IP Family of the cluster. Valid values are IPv4 or IPv6\"\n    default: \"IPv4\"\n  private_cluster:\n    description: \"Whether to create a private cluster which does not add access to the public internet. Valid values are 'true' or 'false'\"\n    default: 'false'\n  git_ref:\n    description: \"The git commit, tag, or branch to check out. Requires a corresponding Karpenter snapshot release\"\n  enable_local_zones:\n    description: \"Whether to include local zones in the VPC created for the cluster.\"\n    default: 'false'\n  cleanup:\n    description: \"Whether to cleanup resources on failure\"\n    default: 'false'\n  codebuild_role:\n    description: \"Codebuild Role that must be given an access entry in case of private cluster\"\nruns:\n  using: \"composite\"\n  steps:\n  - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1\n    with:\n      ref: ${{ inputs.git_ref }}\n  - uses: ./.github/actions/e2e/install-eksctl\n    with:\n      version: ${{ inputs.eksctl_version }}\n  - name: create iam policies\n    shell: bash\n    env:\n      ACCOUNT_ID: ${{ inputs.account_id }}\n      CLUSTER_NAME: ${{ inputs.cluster_name }}\n    run: |\n      # Resolve the cloudformation path with fallback\n      CLOUDFORMATION_PATH=website/content/en/preview/getting-started/getting-started-with-karpenter/cloudformation.yaml\n\n      # Update the Cloudformation policy to add the permissionBoundary to the NodeRole\n      yq -i \".Resources.KarpenterNodeRole.Properties.PermissionsBoundary = \\\"arn:aws:iam::$ACCOUNT_ID:policy/GithubActionsPermissionsBoundary\\\"\" $CLOUDFORMATION_PATH\n\n      # Update the PassRole resource to use wildcard\n      awk '{gsub(/\"Resource\": \"\\${KarpenterNodeRole.Arn}\"/, \"\\\"Resource\\\": \\\"arn:${AWS::Partition}:iam::${AWS::AccountId}:role/KarpenterNodeRole-*\\\"\")}1' $CLOUDFORMATION_PATH > $CLOUDFORMATION_PATH.tmp && mv $CLOUDFORMATION_PATH.tmp $CLOUDFORMATION_PATH\n\n      aws iam create-service-linked-role --aws-service-name spot.amazonaws.com || true\n      aws cloudformation deploy \\\n        --stack-name \"iam-$CLUSTER_NAME\" \\\n        --template-file $CLOUDFORMATION_PATH \\\n        --capabilities CAPABILITY_NAMED_IAM \\\n        --parameter-overrides \"ClusterName=$CLUSTER_NAME\" \\\n        --tags \"testing/type=e2e\" \"testing/cluster=$CLUSTER_NAME\" \"github.com/run-url=https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}\" \"karpenter.sh/discovery=$CLUSTER_NAME\"\n  - name: create or upgrade cluster\n    shell: bash\n    env:\n      ACCOUNT_ID: ${{ inputs.account_id }}\n      CLUSTER_NAME: ${{ inputs.cluster_name }}\n      REGION: ${{ inputs.region }}\n      K8S_VERSION: ${{ inputs.k8s_version }}\n      IP_FAMILY: ${{ inputs.ip_family }}\n      PRIVATE_CLUSTER: ${{ inputs.private_cluster }}\n      GIT_REF:  ${{ inputs.git_ref }}\n      ENABLE_LOCAL_ZONES: ${{ inputs.enable_local_zones }}\n      CLEANUP: ${{ inputs.cleanup }}\n      CODEBUILD_ROLE: ${{ inputs.codebuild_role }}\n    run: |\n      if [[ \"$GIT_REF\" == '' ]]; then\n        GIT_REF=$(git rev-parse HEAD)\n      fi\n\n      # Disable Pod Identity for Private Clusters\n      # https://docs.aws.amazon.com/eks/latest/userguide/pod-identities.html#pod-id-considerations\n      if [[ \"$PRIVATE_CLUSTER\" == 'true' ]]; then\n        KARPENTER_IAM=\"\"\"\n          - metadata:\n              name: karpenter\n              namespace: kube-system\n            attachPolicyARNs:\n              - \"arn:aws:iam::${{ inputs.account_id }}:policy/KarpenterControllerNodeLifecyclePolicy-${{ inputs.cluster_name }}\"\n              - \"arn:aws:iam::${{ inputs.account_id }}:policy/KarpenterControllerIAMIntegrationPolicy-${{ inputs.cluster_name }}\"\n              - \"arn:aws:iam::${{ inputs.account_id }}:policy/KarpenterControllerEKSIntegrationPolicy-${{ inputs.cluster_name }}\"\n              - \"arn:aws:iam::${{ inputs.account_id }}:policy/KarpenterControllerInterruptionPolicy-${{ inputs.cluster_name }}\"\n              - \"arn:aws:iam::${{ inputs.account_id }}:policy/KarpenterControllerResourceDiscoveryPolicy-${{ inputs.cluster_name }}\"\n            permissionsBoundary: \"arn:aws:iam::${{ inputs.account_id }}:policy/GithubActionsPermissionsBoundary\"\n            roleName: karpenter-irsa-${{ inputs.cluster_name }}\n            roleOnly: true\"\"\"\n      else\n        KARPENTER_IAM=\"\"\"podIdentityAssociations:\n          - namespace: kube-system\n            serviceAccountName: karpenter\n            roleName: karpenter-irsa-${{ inputs.cluster_name }}\n            permissionsBoundaryARN: \"arn:aws:iam::${{ inputs.account_id }}:policy/GithubActionsPermissionsBoundary\"\n            permissionPolicyARNs:\n              - \"arn:aws:iam::${{ inputs.account_id }}:policy/KarpenterControllerNodeLifecyclePolicy-${{ inputs.cluster_name }}\"\n              - \"arn:aws:iam::${{ inputs.account_id }}:policy/KarpenterControllerIAMIntegrationPolicy-${{ inputs.cluster_name }}\"\n              - \"arn:aws:iam::${{ inputs.account_id }}:policy/KarpenterControllerEKSIntegrationPolicy-${{ inputs.cluster_name }}\"\n              - \"arn:aws:iam::${{ inputs.account_id }}:policy/KarpenterControllerInterruptionPolicy-${{ inputs.cluster_name }}\"\n              - \"arn:aws:iam::${{ inputs.account_id }}:policy/KarpenterControllerResourceDiscoveryPolicy-${{ inputs.cluster_name }}\"\"\"\"\n        POD_IDENTITY=\"\"\"- name: eks-pod-identity-agent\n        permissionsBoundary: \"arn:aws:iam::$ACCOUNT_ID:policy/GithubActionsPermissionsBoundary\"\n        configurationValues: |\n          tolerations:\n            - operator: Exists\"\"\"\n      fi\n\n      # Create or Upgrade the cluster based on whether the cluster already exists\n      cmd=\"create\"\n      eksctl get cluster --name \"$CLUSTER_NAME\" && cmd=\"upgrade\"\n\n      cat << EOF >> clusterconfig.yaml\n      ---\n      apiVersion: eksctl.io/v1alpha5\n      kind: ClusterConfig\n      metadata:\n        name: \"$CLUSTER_NAME\"\n        region: \"$REGION\"\n        version: \"$K8S_VERSION\"\n        tags:\n          karpenter.sh/discovery: \"$CLUSTER_NAME\"\n          github.com/run-url: \"https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}\"\n          testing/type: \"e2e\"\n          testing/cluster: \"$CLUSTER_NAME\"\n          test/git_ref: \"$GIT_REF\"\n      kubernetesNetworkConfig:\n        ipFamily: \"$IP_FAMILY\"\n      managedNodeGroups:\n        - instanceType: c5.4xlarge\n          amiFamily: AmazonLinux2023\n          name: \"$CLUSTER_NAME-system-pool\"\n          desiredCapacity: 2\n          disableIMDSv1: true\n          minSize: 2\n          maxSize: 2\n          iam:\n            instanceRolePermissionsBoundary: \"arn:aws:iam::$ACCOUNT_ID:policy/GithubActionsPermissionsBoundary\"\n          taints:\n          - key: CriticalAddonsOnly\n            value: \"true\"\n            effect: NoSchedule\n      cloudWatch:\n        clusterLogging:\n          enableTypes: [\"*\"]\n          logRetentionInDays: 30\n      iam:\n        serviceRolePermissionsBoundary: \"arn:aws:iam::$ACCOUNT_ID:policy/GithubActionsPermissionsBoundary\"\n        serviceAccounts:\n          - metadata:\n              name: prometheus-kube-prometheus-prometheus\n              namespace: prometheus\n            attachPolicyARNs:\n              - \"arn:aws:iam::$ACCOUNT_ID:policy/PrometheusWorkspaceIngestionPolicy\"\n            permissionsBoundary: \"arn:aws:iam::$ACCOUNT_ID:policy/GithubActionsPermissionsBoundary\"\n            roleName: \"prometheus-irsa-$CLUSTER_NAME\"\n            roleOnly: true\n        $KARPENTER_IAM\n        withOIDC: true\n      addons:\n      - name: vpc-cni\n        permissionsBoundary: \"arn:aws:iam::$ACCOUNT_ID:policy/GithubActionsPermissionsBoundary\"\n      - name: coredns\n        permissionsBoundary: \"arn:aws:iam::$ACCOUNT_ID:policy/GithubActionsPermissionsBoundary\"\n      - name: kube-proxy\n        permissionsBoundary: \"arn:aws:iam::$ACCOUNT_ID:policy/GithubActionsPermissionsBoundary\"\n      - name: aws-ebs-csi-driver\n        permissionsBoundary: \"arn:aws:iam::$ACCOUNT_ID:policy/GithubActionsPermissionsBoundary\"\n        wellKnownPolicies:\n          ebsCSIController: true\n      $POD_IDENTITY\n      EOF\n\n      if [[ $ENABLE_LOCAL_ZONES == \"true\" ]]; then\n        local_zones=$(AWS_REGION=$REGION aws ec2 describe-availability-zones | yq '.AvailabilityZones | filter(.ZoneType == \"local-zone\") | [.[].ZoneName] | join(\" \")')\n        for zone in $local_zones; do\n          yq -i \".localZones += [\\\"$zone\\\"]\" clusterconfig.yaml\n        done\n      fi\n\n      if [[ $PRIVATE_CLUSTER == 'true' ]]; then\n        yq -i '.privateCluster.enabled=true' clusterconfig.yaml\n        yq -i '.managedNodeGroups[0].privateNetworking=true' clusterconfig.yaml\n        yq -i '.accessConfig.authenticationMode=\"API_AND_CONFIG_MAP\"' clusterconfig.yaml\n        CODEBUILD_ROLE_ARN=\"arn:aws:iam::$ACCOUNT_ID:role/$CODEBUILD_ROLE\"\n        yq -i \".accessConfig.accessEntries[0].principalARN=\\\"$CODEBUILD_ROLE_ARN\\\"\" clusterconfig.yaml\n        yq -i '.accessConfig.accessEntries[0].accessPolicies[0].policyARN=\"arn:aws:eks::aws:cluster-access-policy/AmazonEKSClusterAdminPolicy\"' clusterconfig.yaml\n        yq -i '.accessConfig.accessEntries[0].accessPolicies[0].accessScope.type=\"cluster\"' clusterconfig.yaml\n      fi\n\n      # Disable rollback of the CloudFormation on Create if we aren't cleaning up the run\n      if [[ $CLEANUP == 'false' ]] && [[ $cmd == 'create' ]]; then\n        eksctl ${cmd} cluster -f clusterconfig.yaml --cfn-disable-rollback\n      else\n        eksctl ${cmd} cluster -f clusterconfig.yaml\n      fi\n  - name: tag oidc provider of the cluster\n    if: always()\n    shell: bash\n    env:\n      ACCOUNT_ID: ${{ inputs.account_id }}\n      CLUSTER_NAME: ${{ inputs.cluster_name }}\n      GIT_REF: ${{ inputs.git_ref }}\n    run: |\n      if [[ \"$GIT_REF\" == '' ]]; then\n        GIT_REF=$(git rev-parse HEAD)\n      fi\n      oidc_id=$(aws eks describe-cluster --name \"$CLUSTER_NAME\" --query \"cluster.identity.oidc.issuer\" --output text | cut -d '/' -f 3,4,5)\n      arn=\"arn:aws:iam::$ACCOUNT_ID:oidc-provider/${oidc_id}\"\n      aws iam tag-open-id-connect-provider --open-id-connect-provider-arn $arn \\\n         --tags Key=test/git_ref,Value=$GIT_REF Key=testing/type,Value=e2e Key=testing/cluster,Value=$CLUSTER_NAME Key=github.com/run-url,Value=https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}\n  - name: give KarpenterNodeRole permission to bootstrap\n    if: ${{ inputs.private_cluster == 'false' }}\n    shell: bash\n    env:\n      ACCOUNT_ID: ${{ inputs.account_id }}\n      CLUSTER_NAME: ${{ inputs.cluster_name }}\n    run: |\n      ./test/hack/e2e_scripts/noderole_bootstrap_permission.sh\n  - name: cloudformation describe stack events\n    shell: bash\n    if: failure()\n    env:\n      CLUSTER_NAME: ${{ inputs.cluster_name }}\n    run: |\n      stack_names=$(aws cloudformation describe-stacks --query \"Stacks[?Tags[?Key == 'karpenter.sh/discovery' && Value == '$CLUSTER_NAME']].{StackName: StackName}\" --output text)\n      for stack_name in $stack_names; do\n        echo \"Stack Events for $stack_name:\"\n        aws cloudformation describe-stack-events --stack-name $stack_name\n      done\n  - name: install prometheus\n    if: ${{ inputs.private_cluster == 'false' }}\n    uses: ./.github/actions/e2e/install-prometheus\n    with:\n      account_id: ${{ inputs.account_id }}\n      role: ${{ inputs.role }}\n      prometheus_region: ${{ inputs.prometheus_region }}\n      region: ${{ inputs.region }}\n      cluster_name: ${{ inputs.cluster_name }}\n      workspace_id: ${{ inputs.prometheus_workspace_id }}\n      git_ref: ${{ inputs.git_ref }}\n  - name: install karpenter\n    if: ${{ inputs.private_cluster == 'false' }}\n    uses: ./.github/actions/e2e/install-karpenter\n    with:\n      account_id: ${{ inputs.account_id  }}\n      role: ${{ inputs.role }}\n      region: ${{ inputs.region }}\n      ecr_account_id: ${{ inputs.ecr_account_id }}\n      ecr_region: ${{ inputs.ecr_region }}\n      cluster_name: ${{ inputs.cluster_name }}\n      k8s_version: ${{ inputs.k8s_version }}\n      git_ref: ${{ inputs.git_ref }}\n      private_cluster: ${{ inputs.private_cluster }}\n"
  },
  {
    "path": ".github/actions/e2e/slack/notify/action.yaml",
    "content": "name: SlackNotify\ndescription: 'Notifies slack of the success or failure of the suite'\ninputs:\n  cluster_name:\n    description: \"Name of the cluster\"\n    required: false\n  suite:\n    description: \"Suite that's running\"\n    required: true\n  url:\n    description: \"Webhook URL to send the Slack notification to\"\n    required: true\n  git_ref:\n    description: \"The git commit, tag, or branch to check out. Requires a corresponding Karpenter snapshot release\"\n  workflow_trigger:\n    description: \"Workflow trigger for this run\"\nruns:\n  using: \"composite\"\n  steps:\n    - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1\n      with:\n        ref: ${{ inputs.git_ref }}\n    - id: get-run-name\n      shell: bash\n      env:\n        SUITE: ${{ inputs.suite }}\n        WORKFLOW: ${{ inputs.workflow_trigger }}\n      run: |\n        if [[ ${{ github.event_name }} == \"schedule\" && \"$WORKFLOW\" == 'private_cluster' ]]; then\n          RUN_NAME=\"privateCluster-periodic\"\n        elif [[ ${{ github.event_name }} == \"schedule\" && \"$WORKFLOW\" == 'soak' ]]; then\n          RUN_NAME=\"soak-periodic\"\n        elif [[ ${{ github.event_name }} == \"schedule\" ]]; then\n          RUN_NAME=\"$SUITE-periodic\"\n        else\n          RUN_NAME=\"$SUITE-${GITHUB_SHA::7}\"\n        fi\n\n        # Convert the RUN_NAME to all lowercase\n        echo RUN_NAME=${RUN_NAME,,} >> $GITHUB_OUTPUT\n    - uses: ./.github/actions/e2e/slack/send-message\n      if: ${{ job.status == 'success' }}\n      with:\n        url: ${{ inputs.url }}\n        message: \":white_check_mark: ${{ steps.get-run-name.outputs.RUN_NAME }} (https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }})\"\n    - uses: ./.github/actions/e2e/slack/send-message\n      if: ${{ job.status == 'failure' }}\n      with:\n        url: ${{ inputs.url }}\n        message: \":x: ${{ steps.get-run-name.outputs.RUN_NAME }} (https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }})\"\n"
  },
  {
    "path": ".github/actions/e2e/slack/send-message/action.yaml",
    "content": "name: SlackSendMessage\ndescription: 'Notifies slack of the success or failure of the suite'\ninputs:\n  message:\n    description: \"Message to send to the Slack webhook notification channel\"\n    required: true\n  url:\n    description: \"Webhook URL to send the Slack notification to\"\n    required: true\nruns:\n  using: \"composite\"\n  steps:\n    - shell: bash\n      env:\n        URL: ${{ inputs.url }}\n        MESSAGE: ${{ inputs.message }}\n      run: |\n        JSON=\"{'message': '$MESSAGE'}\"\n        curl -X POST -H 'Content-Type: application/json' --data \"${JSON}\" \"$(printf \"$URL\" | tr -d \"\\n\")\""
  },
  {
    "path": ".github/actions/e2e/upgrade-crds/action.yaml",
    "content": "name: UpgradeCRDs\ndescription: 'Installs Go Downloads and installs Karpenter Dependencies'\ninputs:\n  account_id:\n    description: \"Account ID to access AWS\"\n    required: true\n  role:\n    description: \"Role to access AWS\"\n    required: true\n  region:\n    description: \"Region to access AWS\"\n    required: true\n  cluster_name:\n    description: 'Name of the cluster to be launched by eksctl'\n    required: true\n  git_ref:\n    description: \"The git commit, tag, or branch to check out. Requires a corresponding Karpenter snapshot release\"\nruns:\n  using: \"composite\"\n  steps:\n    - name: configure aws credentials\n      uses: aws-actions/configure-aws-credentials@61815dcd50bd041e203e49132bacad1fd04d2708 # v5.1.1\n      with:\n        role-to-assume: arn:aws:iam::${{ inputs.account_id }}:role/${{ inputs.role }}\n        aws-region: ${{ inputs.region }}\n        role-duration-seconds: 21600\n    - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1\n      with:\n        ref: ${{ inputs.git_ref }}\n    - name: install-karpenter\n      shell: bash\n      env:\n        CLUSTER_NAME: ${{ inputs.cluster_name }}\n      run: |\n        aws eks update-kubeconfig --name \"$CLUSTER_NAME\"\n        kubectl apply -f pkg/apis/crds/\n"
  },
  {
    "path": ".github/actions/install-deps/action.yaml",
    "content": "name: InstallDependencies\ndescription: 'Installs Go Downloads and installs Karpenter Dependencies'\ninputs:\n  k8sVersion:\n    description: Kubernetes version to use when installing the toolchain\n    default: \"1.35.x\"\n  use-cache:\n    description: 'Whether to cache dependencies'\n    default: true\nruns:\n  using: \"composite\"\n  steps:\n    - uses: actions/setup-go@7a3fe6cf4cb3a834922a1244abfce67bcef6a0c5 # v6.2.0\n      id: setup-go\n      with:\n        cache: ${{ inputs.use-cache == 'true' }}\n        go-version-file: go.mod\n        check-latest: true\n        cache-dependency-path: \"**/go.sum\"\n    # Root path permission workaround for caching https://github.com/actions/cache/issues/845#issuecomment-1252594999\n    - run: sudo chown \"$USER\" /usr/local\n      shell: bash\n    - uses: actions/cache@8b402f58fbc84540c8b491a91e594a4576fec3d7 # v5.0.2\n      id: cache-toolchain\n      if: ${{ inputs.use-cache == 'true' }}\n      with:\n        path: |\n          /usr/local/kubebuilder/bin\n          ~/go/bin\n        # Added go version to compensate for this issue with govulncheck: https://github.com/golang/go/issues/65590. Could re-evaluate if this is necessary once the\n        # upstream go issue is corrected and if this is causing too many cache misses.\n        key: ${{ runner.os }}-${{ inputs.k8sVersion }}-${{ steps.setup-go.outputs.go-version }}-toolchain-cache-${{ hashFiles('hack/toolchain.sh') }}\n    - if: ${{ steps.cache-toolchain.outputs.cache-hit != 'true' }}\n      shell: bash\n      env:\n        K8S_VERSION: ${{ inputs.k8sVersion }}\n      run: make toolchain\n"
  },
  {
    "path": ".github/dependabot.yaml",
    "content": "# See https://docs.github.com/en/github/administering-a-repository/configuration-options-for-dependency-updates#package-ecosystem\nversion: 2\nupdates:\n  - package-ecosystem: \"gomod\"\n    directory: \"/\"\n    schedule:\n      interval: \"weekly\"\n    ignore:\n      # We are currently pinning to pseudo-version for sigs.k8s.io/karpenter package, so that we can take later changes into the AWS provider. \n      # This may change later, but this is how we have it configured right now.\n      # https://github.com/aws/karpenter-provider-aws/issues/7826\n      - dependency-name: sigs.k8s.io/karpenter\n    groups:\n      # Group updates together, so that they are all applied in a single PR.\n      # Grouped updates are currently in beta and is subject to change.\n      # xref: https://docs.github.com/en/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file#groups\n      k8s-go-deps:\n        patterns:\n          - \"k8s.io/*\"\n          - \"sigs.k8s.io/*\"\n          - \"knative.dev/*\"\n        exclude-patterns:\n          - \"sigs.k8s.io/karpenter\"\n      go-deps:\n        patterns:\n          - \"*\"\n        exclude-patterns:\n          - \"k8s.io/*\"\n          - \"sigs.k8s.io/*\"\n          - \"knative.dev/*\"\n  - package-ecosystem: \"github-actions\"\n    directory: \"/\"\n    schedule:\n      interval: \"weekly\"\n    groups:\n      # Group updates together, so that they are all applied in a single PR.\n      # Grouped updates are currently in beta and is subject to change.\n      # xref: https://docs.github.com/en/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file#groups\n      actions-deps:\n        patterns:\n          - \"*\"\n  - package-ecosystem: \"npm\"\n    directory: \"/website\"\n    schedule:\n      interval: \"weekly\"\n    groups:\n      # Group updates together, so that they are all applied in a single PR.\n      # Grouped updates are currently in beta and is subject to change.\n      # xref: https://docs.github.com/en/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file#groups\n      website-deps:\n        patterns:\n          - \"*\"\n  # Everything under this line is currently auto-generated by hack/github/dependabot.sh\n  # This needs to be generated since composite actions are currently not supported for auto-updates\n  # through dependabot without explicitly setting their directory: https://github.com/dependabot/dependabot-core/issues/6704\n  # If you need to make a change to this file, ensure that you make a change to hack/github/dependabot.sh first\n  # That script assumes that the number of elements above this line is static and bases the append operation on it\n  - package-ecosystem: github-actions\n    directory: .github/actions/commit-status/end\n    schedule:\n      interval: weekly\n    groups:\n      action-deps:\n        patterns:\n          - '*'\n  - package-ecosystem: github-actions\n    directory: .github/actions/commit-status/start\n    schedule:\n      interval: weekly\n    groups:\n      action-deps:\n        patterns:\n          - '*'\n  - package-ecosystem: github-actions\n    directory: .github/actions/download-artifact\n    schedule:\n      interval: weekly\n    groups:\n      action-deps:\n        patterns:\n          - '*'\n  - package-ecosystem: github-actions\n    directory: .github/actions/e2e/cleanup\n    schedule:\n      interval: weekly\n    groups:\n      action-deps:\n        patterns:\n          - '*'\n  - package-ecosystem: github-actions\n    directory: .github/actions/e2e/dump-logs\n    schedule:\n      interval: weekly\n    groups:\n      action-deps:\n        patterns:\n          - '*'\n  - package-ecosystem: github-actions\n    directory: .github/actions/e2e/install-eksctl\n    schedule:\n      interval: weekly\n    groups:\n      action-deps:\n        patterns:\n          - '*'\n  - package-ecosystem: github-actions\n    directory: .github/actions/e2e/install-helm\n    schedule:\n      interval: weekly\n    groups:\n      action-deps:\n        patterns:\n          - '*'\n  - package-ecosystem: github-actions\n    directory: .github/actions/e2e/install-karpenter\n    schedule:\n      interval: weekly\n    groups:\n      action-deps:\n        patterns:\n          - '*'\n  - package-ecosystem: github-actions\n    directory: .github/actions/e2e/install-prometheus\n    schedule:\n      interval: weekly\n    groups:\n      action-deps:\n        patterns:\n          - '*'\n  - package-ecosystem: github-actions\n    directory: .github/actions/e2e/run-tests-private-cluster\n    schedule:\n      interval: weekly\n    groups:\n      action-deps:\n        patterns:\n          - '*'\n  - package-ecosystem: github-actions\n    directory: .github/actions/e2e/setup-cluster\n    schedule:\n      interval: weekly\n    groups:\n      action-deps:\n        patterns:\n          - '*'\n  - package-ecosystem: github-actions\n    directory: .github/actions/e2e/slack/notify\n    schedule:\n      interval: weekly\n    groups:\n      action-deps:\n        patterns:\n          - '*'\n  - package-ecosystem: github-actions\n    directory: .github/actions/e2e/slack/send-message\n    schedule:\n      interval: weekly\n    groups:\n      action-deps:\n        patterns:\n          - '*'\n  - package-ecosystem: github-actions\n    directory: .github/actions/e2e/upgrade-crds\n    schedule:\n      interval: weekly\n    groups:\n      action-deps:\n        patterns:\n          - '*'\n  - package-ecosystem: github-actions\n    directory: .github/actions/install-deps\n    schedule:\n      interval: weekly\n    groups:\n      action-deps:\n        patterns:\n          - '*'\n"
  },
  {
    "path": ".github/pull-request-template.md",
    "content": "<!-- Please follow the guidelines at https://www.conventionalcommits.org/en/v1.0.0/ and use one of the following in your title:\nfeat:            <-- New features that require a MINOR version update\nfix:             <-- Bug fixes that require at PATCH version update\nchore:           <-- Smaller changes that impact behavior but aren't large enough to be features\nperf:            <-- Code changes that improve performance but do not impact behavior\ndocs:            <-- Documentation changes that do not impact code\ntest:            <-- Test changes that do not impact behavior\nci:              <-- Changes that affect test or rollout automation\n!${type}:        <-- Include ! if your change includes a backwards incompatible change.\n\nPlease review the Karpenter contribution docs at https://karpenter.sh/docs/contributing/ before submitting your pull request.\n-->\n\nFixes #N/A <!-- issue number -->\n\n**Description**\n\n**How was this change tested?**\n\n**Does this change impact docs?**\n- [ ] Yes, PR includes docs updates <!-- docs must be added to /preview to be included in future version releases -->\n- [ ] Yes, issue opened: # <!-- issue number -->\n- [x] No\n\nBy submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license."
  },
  {
    "path": ".github/security-notice.md",
    "content": "# Github Workflows Security Notice\n\nWriting security workflows that can be accessed by third parties outside of your repository is inherently dangerous. There is a full list of vulnerabilities that you can subject yourself to when you enable external users to interact with your workflows. These vulnerabilities are well-described here: https://docs.github.com/en/actions/security-guides/security-hardening-for-github-actions as well as detail on how to mitigate these risks.\n\nAs a rule-of-thumb within the Karpenter workflows, we have chosen to always assign any input that _might_ come from a user in either a Github workflow or a composite action into environment variables any we are using a bash or javascript script as a step in the workflow or action. An example of this can be seen below:\n\n```yaml\n- name: Save info about the review comment as an artifact for other workflows that run on workflow_run to download them\n  env:\n    # We store these values in environment variables to avoid bash script injection\n    # Specifically, it's important that we do this for github.event.review.body since this is user-controlled input\n    # https://docs.github.com/en/actions/security-guides/security-hardening-for-github-actions\n    REVIEW_BODY: ${{ github.event.review.body }}\n    PULL_REQUEST_NUMBER: ${{ github.event.pull_request.number }}\n    COMMIT_ID: ${{ github.event.review.commit_id }}\n  run: |\n    mkdir -p /tmp/artifacts\n    { echo \"$REVIEW_BODY\"; echo \"$PULL_REQUEST_NUMBER\"; echo \"$COMMIT_ID\"; } >> /tmp/artifacts/metadata.txt\n    cat /tmp/artifacts/metadata.txt\n```\n\nNote that, when you are writing Github workflows or composite actions to ensure to follow this code-style to reduce the attack surface could result from attempted script injection to the workflows."
  },
  {
    "path": ".github/workflows/approval-comment.yaml",
    "content": "name: ApprovalComment\non:\n  pull_request_review:\n    types: [submitted]\njobs:\n  approval-comment:\n    if: startsWith(github.event.review.body, '/karpenter snapshot') || startsWith(github.event.review.body, '/karpenter scale') || startsWith(github.event.review.body, '/karpenter versionCompatibility')\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1\n        with:\n          fetch-depth: 0\n      - name: Save info about the review comment as an artifact for other workflows that run on workflow_run to download them\n        env:\n          REVIEW_BODY: ${{ github.event.review.body }}\n          PULL_REQUEST_NUMBER: ${{ github.event.pull_request.number }}\n          COMMIT_ID: ${{ github.event.review.commit_id }}\n        run: |\n          mkdir -p /tmp/artifacts\n          { echo \"$REVIEW_BODY\"; echo \"$PULL_REQUEST_NUMBER\"; echo \"$COMMIT_ID\"; } >> /tmp/artifacts/metadata.txt\n          cat /tmp/artifacts/metadata.txt\n      - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0\n        with:\n          name: artifacts\n          path: /tmp/artifacts\n"
  },
  {
    "path": ".github/workflows/ci-test.yaml",
    "content": "name: CI-TEST\non:\n  push:\n    branches:\n      - 'main'\n      - 'release-v*'\n      - 'staging/*'\n  pull_request:\n  workflow_dispatch:\njobs:\n  ci-test:\n    runs-on: ubuntu-latest\n    if: github.repository == 'aws/karpenter-provider-aws'\n    strategy:\n        fail-fast: false\n        matrix:\n          k8sVersion: [\"1.29.x\", \"1.30.x\", \"1.31.x\", \"1.32.x\", \"1.33.x\", \"1.34.x\", \"1.35.x\"]\n    steps:\n    - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1\n    - uses: ./.github/actions/install-deps\n      with:\n        k8sVersion: ${{ matrix.k8sVersion }}\n    - run: K8S_VERSION=${{ matrix.k8sVersion }} make ci-test\n    - name: Send coverage\n      # should only send converage once https://docs.coveralls.io/parallel-builds\n      if: matrix.k8sVersion == '1.35.x'\n      env:\n        COVERALLS_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n      run: goveralls -coverprofile=coverage.out -service=github\n"
  },
  {
    "path": ".github/workflows/ci.yaml",
    "content": "name: CI\non:\n  push:\n    branches:\n      - 'main'\n      - 'release-v*'\n      - 'staging/*'\n  pull_request:\n  workflow_dispatch:\njobs:\n  ci:\n    runs-on: ubuntu-latest\n    if: github.repository == 'aws/karpenter-provider-aws'\n    steps:\n    - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1\n    - uses: ./.github/actions/install-deps\n    - name: Enable the actionlint matcher\n      run: echo \"::add-matcher::.github/actionlint-matcher.json\"\n    - run: make ci-non-test\n      shell: bash\n"
  },
  {
    "path": ".github/workflows/codegen.yaml",
    "content": "name: \"CodeGenCI\"\non:\n  workflow_dispatch:\n  schedule:\n    - cron: '0 13 * * MON'\njobs:\n  codegen:\n    permissions:\n      id-token: write # aws-actions/configure-aws-credentials@v4.0.1\n      pull-requests: write # name: Create Pull Request\n      contents: write # name: Create Pull Request\n    if: github.repository == 'aws/karpenter-provider-aws'\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1\n      - uses: ./.github/actions/install-deps\n        with:\n          use-cache: false\n      - run: |\n          git config user.name \"APICodeGen\"\n          git config user.email \"APICodeGen@users.noreply.github.com\"\n          git remote set-url origin https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }}\n          git config pull.rebase false\n      - uses: aws-actions/configure-aws-credentials@61815dcd50bd041e203e49132bacad1fd04d2708 # v5.1.1\n        with:\n          role-to-assume: 'arn:aws:iam::${{ vars.READONLY_ACCOUNT_ID }}:role/${{ vars.READONLY_ROLE_NAME }}'\n          aws-region: ${{ vars.READONLY_REGION }}\n      - run: make codegen\n        env:\n          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n          ENABLE_GIT_PUSH: true\n      - id: detect-changes\n        run: |\n          # If we have a committed change, mark that we committed with a variable\n          if [[ $(git rev-list --count main..codegen) != \"0\" ]]; then\n            echo APICodeGenUpdate=true >> \"$GITHUB_OUTPUT\"\n          fi\n      - name: Create Pull Request\n        if: steps.detect-changes.outputs.APICodeGenUpdate == 'true'\n        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0\n        with:\n          script: |\n            const { repo, owner } = context.repo;\n            const result = await github.rest.pulls.create({\n              title: 'chore: Update data from AWS APIs',\n              owner,\n              repo,\n              head: 'codegen',\n              base: 'main',\n              body: [\n                'Updates auto generated files with data from the AWS APIs for pricing and VPC limits. Please remove the branch after merging.',\n                'This PR is generated by [APICodeGen](https://github.com/aws/karpenter/actions/workflows/codegen.yml).'\n              ].join('\\n')\n            });\n            github.rest.issues.addLabels({\n              owner,\n              repo,\n              issue_number: result.data.number,\n              labels: ['aws', 'dependencies']\n            });\n      - name: notify slack of success or failure\n        uses: ./.github/actions/e2e/slack/notify\n        if: (success() || failure())\n        with:\n          url: ${{ secrets.SLACK_WEBHOOK_URL }}\n          suite: codegen"
  },
  {
    "path": ".github/workflows/codeql-analysis.yaml",
    "content": "name: \"CodeQL\"\non:\n  push:\n    branches:\n      - 'main'\n      - 'release-v*'\n      - 'staging/*'\n  pull_request:\n  schedule:\n    - cron: '0 12 * * *'\njobs:\n  analyze-go:\n    name: Analyze Go\n    if: github.repository == 'aws/karpenter-provider-aws'\n    runs-on: ubuntu-latest\n    permissions:\n      actions: read # github/codeql-action/init@v2\n      security-events: write # github/codeql-action/init@v2\n    steps:\n      - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1\n      - uses: ./.github/actions/install-deps\n      - run: make vulncheck\n      - uses: github/codeql-action/init@cdefb33c0f6224e58673d9004f47f7cb3e328b89 # v4.31.10\n        with:\n          languages: go\n      - uses: github/codeql-action/autobuild@cdefb33c0f6224e58673d9004f47f7cb3e328b89 # v4.31.10\n      - uses: github/codeql-action/analyze@cdefb33c0f6224e58673d9004f47f7cb3e328b89 # v4.31.10\n  # Javascript is added here for evaluating Github Action vulnerabilities\n  # https://github.blog/2023-08-09-four-tips-to-keep-your-github-actions-workflows-secure/#2-enable-code-scanning-for-workflows\n  analyze-github-actions:\n    name: Analyze Github Actions\n    if: github.repository == 'aws/karpenter-provider-aws'\n    runs-on: ubuntu-latest\n    permissions:\n      actions: read # github/codeql-action/init@v3\n      security-events: write # github/codeql-action/init@v3\n    steps:\n      - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1\n      - uses: github/codeql-action/init@cdefb33c0f6224e58673d9004f47f7cb3e328b89 # v4.31.10\n        with:\n          languages: actions\n      - uses: github/codeql-action/analyze@cdefb33c0f6224e58673d9004f47f7cb3e328b89 # v4.31.10\n"
  },
  {
    "path": ".github/workflows/dryrun-gen-pr.yaml",
    "content": "name: DryRunGenPR\non:\n  pull_request:\n  workflow_dispatch:\njobs:\n  dryrun-gen:\n    if: github.repository == 'aws/karpenter-provider-aws'\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1\n      - run: make prepare-website\n        env:\n          GIT_TAG: v0.10000.0 # Mock version for testing website generation\n"
  },
  {
    "path": ".github/workflows/dryrun-gen.yaml",
    "content": "name: DryRunGen\non:\n  push:\n    branches:\n      - 'main'\n      - 'release-v*'\n      - 'staging/*'\njobs:\n  dryrun-gen:\n    permissions:\n      id-token: write # aws-actions/configure-aws-credentials@v4.0.1\n    if: github.repository == 'aws/karpenter-provider-aws'\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1\n      - uses: ./.github/actions/install-deps\n        with:\n          use-cache: false\n      - uses: aws-actions/configure-aws-credentials@61815dcd50bd041e203e49132bacad1fd04d2708 # v5.1.1\n        with:\n          role-to-assume: 'arn:aws:iam::${{ vars.READONLY_ACCOUNT_ID }}:role/${{ vars.READONLY_ROLE_NAME }}'\n          aws-region: ${{ vars.READONLY_REGION }}\n      - run: make docgen\n      - run: make codegen\n        env:\n          ENABLE_GIT_PUSH: false\n      - run: make prepare-website\n        env:\n          GIT_TAG: v0.10000.0 # Mock version for testing website generation\n"
  },
  {
    "path": ".github/workflows/e2e-cleanup.yaml",
    "content": "name: E2ECleanup\non:\n  workflow_dispatch:\n    inputs:\n      cluster_name:\n        type: string\n        required: true\n      git_ref:\n        type: string\n      region:\n        type: choice\n        options:\n          - \"us-east-1\"\n          - \"us-east-2\"\n          - \"us-west-2\"\n          - \"eu-west-1\"\njobs:\n  cleanup:\n    permissions:\n      id-token: write # aws-actions/configure-aws-credentials@v4.0.1\n    name: cleanup-${{ inputs.cluster_name }}\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1\n        with:\n          ref: ${{ inputs.git_ref }}\n      - name: configure aws credentials\n        uses: aws-actions/configure-aws-credentials@61815dcd50bd041e203e49132bacad1fd04d2708 # v5.1.1\n        with:\n          role-to-assume: arn:aws:iam::${{ vars.CI_ACCOUNT_ID }}:role/${{ vars.CI_ROLE_NAME }}\n          aws-region: ${{ inputs.region }}\n          role-duration-seconds: 21600\n      - name: cleanup karpenter and cluster '${{ inputs.cluster_name }}' resources\n        uses: ./.github/actions/e2e/cleanup\n        with:\n          account_id: ${{ vars.CI_ACCOUNT_ID }}\n          role: ${{ vars.CI_ROLE_NAME }}\n          region: ${{ inputs.region }}\n          cluster_name: ${{ inputs.cluster_name }}\n          git_ref: ${{ inputs.git_ref }}\n          eksctl_version: v0.202.0\n"
  },
  {
    "path": ".github/workflows/e2e-matrix-trigger.yaml",
    "content": "name: E2EMatrixTrigger\non:\n  schedule:\n    - cron: '7 */8 * * *'\n  push:\n    branches:\n      - 'main'\n      - 'release-v*'\n      - 'staging/*'\n  workflow_run:\n    workflows:\n      - ApprovalComment\n    types:\n      - completed\n  workflow_dispatch:\n    inputs:\n      region:\n        required: true\n        default: 'us-east-2'\n        type: choice\n        options:\n          - \"us-east-1\"\n          - \"us-east-2\"\n      cleanup:\n        required: true\n        default: true\n        type: boolean\njobs:\n  resolve:\n    if: (github.repository == 'aws/karpenter-provider-aws' && (github.event_name != 'workflow_run' || github.event.workflow_run.conclusion == 'success')) || github.event_name == 'workflow_dispatch'\n    uses: ./.github/workflows/resolve-args.yaml\n    with:\n      allowed_comment: \"snapshot\"\n  e2e-matrix:\n    permissions:\n      id-token: write # aws-actions/configure-aws-credentials@v4.0.1\n      statuses: write # ./.github/actions/commit-status/start\n    needs: [resolve]\n    if: needs.resolve.outputs.SHOULD_RUN == 'true'\n    uses: ./.github/workflows/e2e-matrix.yaml\n    with:\n      git_ref: ${{ needs.resolve.outputs.GIT_REF }}\n      region: ${{ inputs.region || 'us-east-2' }}\n      workflow_trigger: \"matrix\"\n      # Default to true unless using a workflow_dispatch\n      cleanup: ${{ github.event_name != 'workflow_dispatch' && true || inputs.cleanup }}\n    secrets:\n      SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}\n"
  },
  {
    "path": ".github/workflows/e2e-matrix.yaml",
    "content": "name: E2EMatrix\non:\n  workflow_call:\n    inputs:\n      region:\n        type: string\n        default: \"us-east-2\"\n      k8s_version:\n        type: string\n        default: \"1.35\"\n      cleanup:\n        type: boolean\n        required: true\n      git_ref:\n        type: string\n      workflow_trigger:\n        type: string\n        required: true\n      parallelism:\n        type: number\n    secrets:\n      SLACK_WEBHOOK_URL:\n        required: true\n  workflow_dispatch:\n    inputs:\n      region:\n        type: choice\n        options:\n          - \"us-east-1\"\n          - \"us-east-2\"\n          - \"us-west-2\"\n          - \"eu-west-1\"\n        default: \"us-east-2\"\n      k8s_version:\n        type: choice\n        options:\n          - \"1.29\"\n          - \"1.30\"\n          - \"1.31\"\n          - \"1.32\"\n          - \"1.33\"\n          - \"1.34\"\n          - \"1.35\"\n        default: \"1.35\"\n      cleanup:\n        type: boolean\n        required: true\n        default: true\n# All jobs will run under the following conditions:\n#   1. Upstream Karpenter repo triggered the job by schedule, push, or dispatch\n#   2. Upstream Karpenter repo triggered the job by workflow_run, which requires maintainer check to succeed\n#   3. Downstream fork triggered the job through dispatch and has set 'ENABLE_E2E' in repo environment variables\njobs:\n  e2e:\n    permissions:\n      id-token: write # aws-actions/configure-aws-credentials@v4.0.1\n      statuses: write # ./.github/actions/commit-status/start\n    strategy:\n      fail-fast: false\n      max-parallel: ${{ inputs.parallelism || 100 }}\n      matrix:\n        suite:\n          - name: IPv6\n            region: ${{ inputs.region }}\n            source: aws\n          - name: AMI\n            region: ${{ inputs.region }}\n            source: aws\n          - name: Scheduling\n            region: ${{ inputs.region }}\n            source: aws\n          - name: Storage\n            region: ${{ inputs.region }}\n            source: aws\n          - name: Integration\n            region: ${{ inputs.region }}\n            source: all\n          - name: NodeClaim\n            region: ${{ inputs.region }}\n            source: all\n          - name: Consolidation\n            region: ${{ inputs.region }}\n            source: aws\n          - name: Interruption\n            region: ${{ inputs.region }}\n            source: aws\n          - name: Drift\n            region: ${{ inputs.region }}\n            source: all\n          - name: Expiration\n            region: ${{ inputs.region }}\n            source: upstream\n          - name: Chaos\n            region: ${{ inputs.region }}\n            source: upstream\n          - name: Termination\n            region: ${{ inputs.region }}\n            source: upstream\n          - name: LocalZone\n            # LAX is the only local zone available in the CI account, therefore only use us-west-2\n            region: us-west-2\n            source: aws\n    uses: ./.github/workflows/e2e.yaml\n    with:\n      suite: ${{ matrix.suite.name }}\n      git_ref: ${{ inputs.git_ref }}\n      region: ${{ matrix.suite.region }}\n      k8s_version: ${{ inputs.k8s_version }}\n      cleanup: ${{ inputs.cleanup }}\n      workflow_trigger: ${{ inputs.workflow_trigger }}\n      source: ${{ matrix.suite.source }}\n    secrets:\n      SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}\n  e2e-upgrade:\n    permissions:\n      id-token: write # aws-actions/configure-aws-credentials@v4.0.1\n      statuses: write # ./.github/actions/commit-status/start\n    uses: ./.github/workflows/e2e-upgrade.yaml\n    with:\n      from_git_ref: e169c8f9b56a7ce0b0c4b7f4ae233d5740365590\n      to_git_ref: ${{ inputs.git_ref }}\n      region: ${{ inputs.region }}\n      k8s_version: ${{ inputs.k8s_version }}\n      cleanup: ${{ inputs.cleanup }}\n      workflow_trigger: ${{ inputs.workflow_trigger }}\n      source: all\n    secrets:\n      SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}\n"
  },
  {
    "path": ".github/workflows/e2e-private-cluster-trigger.yaml",
    "content": "name: E2EPrivateClusterTrigger\non:\n  schedule:\n    - cron: '7 0 * * 4'\njobs:\n  private-cluster-trigger:\n    if: github.repository == 'aws/karpenter-provider-aws'\n    permissions:\n      id-token: write # aws-actions/configure-aws-credentials@v4.0.1\n      statuses: write # ./.github/actions/commit-status/start\n    uses: ./.github/workflows/e2e.yaml\n    with:\n      suite: Integration\n      region: us-east-1\n      workflow_trigger: \"private_cluster\"\n      cleanup: true\n      codebuild_region: US_EAST_1\n      source: aws\n    secrets:\n      SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}\n"
  },
  {
    "path": ".github/workflows/e2e-scale-trigger.yaml",
    "content": "name: E2EScaleTrigger\non:\n  schedule:\n    - cron: '7 18 * * *'\n  workflow_run:\n    workflows: [ApprovalComment]\n    types: [completed]\n  workflow_dispatch:\n    inputs:\n      region:\n        required: true\n        default: 'us-west-2'\n        type: choice\n        options:\n          - \"us-east-1\"\n          - \"us-west-2\"\n      cleanup:\n        required: true\n        default: true\n        type: boolean\n      enable_metrics:\n        required: true\n        default: false\n        type: boolean\njobs:\n  resolve:\n    if: (github.repository == 'aws/karpenter-provider-aws' && (github.event_name != 'workflow_run' || github.event.workflow_run.conclusion == 'success')) || github.event_name == 'workflow_dispatch'\n    uses: ./.github/workflows/resolve-args.yaml\n    with:\n      allowed_comment: \"scale\"\n  scale:\n    permissions:\n      id-token: write # aws-actions/configure-aws-credentials@v4.0.1\n      statuses: write # ./.github/actions/commit-status/start\n    needs: [resolve]\n    if: needs.resolve.outputs.SHOULD_RUN == 'true'\n    uses: ./.github/workflows/e2e.yaml\n    with:\n      suite: Scale\n      git_ref: ${{ needs.resolve.outputs.GIT_REF }}\n      region: ${{ inputs.region || 'us-west-2' }}\n      enable_metrics: ${{ inputs.enable_metrics || true }}\n      workflow_trigger: \"scale\"\n      source: aws\n      # Default to true unless using a workflow_dispatch\n      cleanup: ${{ github.event_name != 'workflow_dispatch' && true || inputs.cleanup }}\n    secrets:\n      SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}\n"
  },
  {
    "path": ".github/workflows/e2e-soak-trigger.yaml",
    "content": "name: E2ESoakTrigger\non:\n  schedule:\n    - cron: '0 */3 * * *'\njobs:\n  resolve_cluster:\n    permissions:\n      id-token: write # aws-actions/configure-aws-credentials@v4.0.1\n    if: github.repository == 'aws/karpenter-provider-aws'\n    runs-on: ubuntu-latest\n    outputs:\n      PREEXISTING_CLUSTERS: ${{ steps.list_clusters.outputs.PREEXISTING_CLUSTERS }}\n    steps:\n    - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1\n    - name: configure aws credentials\n      uses: aws-actions/configure-aws-credentials@61815dcd50bd041e203e49132bacad1fd04d2708\n      with:\n       role-to-assume: arn:aws:iam::${{ vars.CI_ACCOUNT_ID }}:role/${{ vars.CI_ROLE_NAME }}\n       aws-region: eu-north-1\n    - uses: actions/setup-go@7a3fe6cf4cb3a834922a1244abfce67bcef6a0c5 # v6.2.0\n      with:\n        go-version-file: test/hack/soak/go.mod\n        cache-dependency-path: test/hack/soak/go.sum\n        check-latest: true\n        cache: false\n    # Grab all the names of the soak testing clusters, and identify clusters that will need to be deleted\n    # Empty cluster_name will indicate that a new cluster will be created\n    - id: list_clusters \n      name: \"Run list clusters script\"\n      run: |\n        PREEXISTING_CLUSTERS=\"$(go run get_clusters.go)\" \n        echo PREEXISTING_CLUSTERS=\"$PREEXISTING_CLUSTERS\" >> \"$GITHUB_OUTPUT\"\n      working-directory: ./test/hack/soak\n      shell: bash\n  soak:\n    permissions:\n      id-token: write # aws-actions/configure-aws-credentials@v4.0.1\n      statuses: write # required by e2e.yaml\n    needs: [resolve_cluster]\n    strategy:\n      fail-fast: false\n      matrix: ${{ fromJson(needs.resolve_cluster.outputs.PREEXISTING_CLUSTERS) }}\n    uses: ./.github/workflows/e2e.yaml\n    with:\n      suite: Integration\n      region: eu-north-1\n      workflow_trigger: \"soak\"\n      cluster_name: ${{ matrix.cluster_name }}\n      cleanup: ${{ matrix.cluster_cleanup }}\n      git_ref: ${{ matrix.git_ref }}\n      source: aws\n    secrets:\n      SLACK_WEBHOOK_SOAK_URL: ${{ secrets.SLACK_WEBHOOK_SOAK_URL }}\n"
  },
  {
    "path": ".github/workflows/e2e-upgrade.yaml",
    "content": "name: E2EUpgrade\non:\n  workflow_dispatch:\n    inputs:\n      from_git_ref:\n        type: string\n        required: true\n      region:\n        type: choice\n        options:\n          - \"us-east-2\"\n          - \"us-west-2\"\n        default: \"us-east-2\"\n      to_git_ref:\n        type: string\n      k8s_version:\n        type: choice\n        options:\n          - \"1.29\"\n          - \"1.30\"\n          - \"1.31\"\n          - \"1.32\"\n          - \"1.33\"\n          - \"1.34\"\n          - \"1.35\"\n        default: \"1.35\"\n      cleanup:\n        required: true\n        default: true\n        type: boolean\n      source:\n        type: string\n        default: \"aws\" \n  workflow_call:\n    inputs:\n      from_git_ref:\n        type: string\n        required: true\n      to_git_ref:\n        type: string\n      region:\n        type: string\n        default: \"us-east-2\"\n      k8s_version:\n        type: string\n        default: \"1.35\"\n      cleanup:\n        required: true\n        type: boolean\n      workflow_trigger:\n        type: string\n      source:\n        type: string\n        default: \"aws\" \n    secrets:\n      SLACK_WEBHOOK_URL:\n        required: true\njobs:\n  run-suite:\n    permissions:\n      id-token: write # aws-actions/configure-aws-credentials@v4.0.1\n      statuses: write # ./.github/actions/commit-status/start\n    name: suite-upgrade\n    runs-on: ubuntu-latest\n    steps:\n      # This additional checkout can be removed when the commit status action is added to the from_git_ref version of Karpenter\n      - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1\n        with:\n          ref: ${{ inputs.to_git_ref }}\n      - if: always() && github.event_name == 'workflow_run'\n        uses: ./.github/actions/commit-status/start\n        with:\n          name: ${{ github.workflow }} (${{ inputs.k8s_version }}) / e2e (Upgrade)\n          git_ref: ${{ inputs.to_git_ref }}\n      - uses: ./.github/actions/install-deps\n      - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1\n        with:\n          ref: ${{ inputs.from_git_ref }}\n      - name: configure aws credentials\n        uses: aws-actions/configure-aws-credentials@61815dcd50bd041e203e49132bacad1fd04d2708 # v5.1.1\n        with:\n          role-to-assume: arn:aws:iam::${{ vars.CI_ACCOUNT_ID }}:role/${{ vars.CI_ROLE_NAME }}\n          aws-region: ${{ inputs.region }}\n          role-duration-seconds: 21600\n      - id: generate-cluster-name\n        name: generate cluster name\n        run: |\n          CLUSTER_NAME=\"upgrade-$RANDOM$RANDOM\"\n          echo \"Using cluster name \\\"$CLUSTER_NAME\\\"\"\n          echo CLUSTER_NAME=\"$CLUSTER_NAME\" >> \"$GITHUB_OUTPUT\"\n      - name: setup eks cluster '${{ steps.generate-cluster-name.outputs.CLUSTER_NAME }}'\n        uses: ./.github/actions/e2e/setup-cluster\n        with:\n          account_id: ${{ vars.CI_ACCOUNT_ID }}\n          role: ${{ vars.CI_ROLE_NAME }}\n          region: ${{ inputs.region }}\n          cluster_name: ${{ steps.generate-cluster-name.outputs.CLUSTER_NAME }}\n          k8s_version: ${{ inputs.k8s_version }}\n          eksctl_version: v0.202.0\n          ip_family: IPv4 # Set the value to IPv6 if IPv6 suite, else IPv4\n          git_ref: ${{ inputs.from_git_ref }}\n          ecr_account_id: ${{ vars.SNAPSHOT_ACCOUNT_ID }}\n          ecr_region: ${{ vars.SNAPSHOT_REGION }}\n          prometheus_workspace_id: ${{ vars.WORKSPACE_ID }}\n          prometheus_region: ${{ vars.PROMETHEUS_REGION }}\n      - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1\n        with:\n          ref: ${{ inputs.to_git_ref }}\n      - name: upgrade crds\n        uses: ./.github/actions/e2e/upgrade-crds\n        with:\n          account_id: ${{ vars.CI_ACCOUNT_ID }}\n          role: ${{ vars.CI_ROLE_NAME }}\n          region: ${{ inputs.region }}\n          cluster_name: ${{ steps.generate-cluster-name.outputs.CLUSTER_NAME }}\n          git_ref: ${{ inputs.to_git_ref }}\n      - name: upgrade eks cluster '${{ steps.generate-cluster-name.outputs.CLUSTER_NAME }}'\n        uses: ./.github/actions/e2e/setup-cluster\n        with:\n          account_id: ${{ vars.CI_ACCOUNT_ID }}\n          role: ${{ vars.CI_ROLE_NAME }}\n          region: ${{ inputs.region }}\n          cluster_name: ${{ steps.generate-cluster-name.outputs.CLUSTER_NAME }}\n          k8s_version: ${{ inputs.k8s_version }}\n          eksctl_version: v0.202.0\n          ip_family: IPv4 # Set the value to IPv6 if IPv6 suite, else IPv4\n          git_ref: ${{ inputs.to_git_ref }}\n          ecr_account_id: ${{ vars.SNAPSHOT_ACCOUNT_ID }}\n          ecr_region: ${{ vars.SNAPSHOT_REGION }}\n          prometheus_workspace_id: ${{ vars.WORKSPACE_ID }}\n          prometheus_region: ${{ vars.PROMETHEUS_REGION }}\n      - name: run the Upgrade test suite\n        env:\n          SOURCE: ${{ inputs.source }}\n        run: |\n          aws eks update-kubeconfig --name ${{ steps.generate-cluster-name.outputs.CLUSTER_NAME }}\n\n          if [[ \"$SOURCE\" == 'aws' ]]; then\n          CLUSTER_NAME=${{ steps.generate-cluster-name.outputs.CLUSTER_NAME }} INTERRUPTION_QUEUE=${{ steps.generate-cluster-name.outputs.CLUSTER_NAME }} CLUSTER_ENDPOINT=\"$(aws eks describe-cluster --name ${{ steps.generate-cluster-name.outputs.CLUSTER_NAME }} --query \"cluster.endpoint\" --output text)\" TEST_SUITE=\"Integration\" make e2etests\n          elif [[ \"$SOURCE\" == 'upstream' ]]; then\n            FOCUS=\"Integration\" CLUSTER_NAME=\"${{ steps.generate-cluster-name.outputs.CLUSTER_NAME }}\" make upstream-e2etests\n          elif [[ \"$SOURCE\" == 'all' ]]; then\n            CLUSTER_NAME=${{ steps.generate-cluster-name.outputs.CLUSTER_NAME }} INTERRUPTION_QUEUE=${{ steps.generate-cluster-name.outputs.CLUSTER_NAME }} CLUSTER_ENDPOINT=\"$(aws eks describe-cluster --name ${{ steps.generate-cluster-name.outputs.CLUSTER_NAME }} --query \"cluster.endpoint\" --output text)\" TEST_SUITE=\"Integration\" make e2etests\n            FOCUS=\"Integration\" CLUSTER_NAME=\"${{ steps.generate-cluster-name.outputs.CLUSTER_NAME }}\" make upstream-e2etests\n          fi\n      - name: notify slack of success or failure\n        uses: ./.github/actions/e2e/slack/notify\n        if: (success() || failure()) && github.event_name != 'workflow_run' && inputs.workflow_trigger != 'versionCompatibility'\n        with:\n          cluster_name:  ${{ steps.generate-cluster-name.outputs.CLUSTER_NAME }}\n          url: ${{ secrets.SLACK_WEBHOOK_URL }}\n          suite: Upgrade\n          git_ref: ${{ inputs.to_git_ref }}\n      - name: dump logs on failure\n        uses: ./.github/actions/e2e/dump-logs\n        if: failure() || cancelled()\n        with:\n          account_id: ${{ vars.CI_ACCOUNT_ID }}\n          role: ${{ vars.CI_ROLE_NAME }}\n          region: ${{ inputs.region }}\n          cluster_name: ${{ steps.generate-cluster-name.outputs.CLUSTER_NAME }}\n      - name: cleanup karpenter and cluster '${{ steps.generate-cluster-name.outputs.CLUSTER_NAME }}' resources\n        uses: ./.github/actions/e2e/cleanup\n        if: always() && inputs.cleanup\n        with:\n          account_id: ${{ vars.CI_ACCOUNT_ID }}\n          role: ${{ vars.CI_ROLE_NAME }}\n          region: ${{ inputs.region }}\n          cluster_name: ${{ steps.generate-cluster-name.outputs.CLUSTER_NAME }}\n          git_ref: ${{ inputs.to_git_ref }}\n          eksctl_version: v0.202.0\n      - if: always() && github.event_name == 'workflow_run'\n        uses: ./.github/actions/commit-status/end\n        with:\n          name: ${{ github.workflow }} (${{ inputs.k8s_version }}) / e2e (Upgrade)\n          git_ref: ${{ inputs.to_git_ref }}\n"
  },
  {
    "path": ".github/workflows/e2e-version-compatibility-trigger.yaml",
    "content": "name: E2EVersionCompatibilityTrigger\non:\n  schedule:\n    # The test will run every Monday, Thursday at 12:07 AM UTC\n    - cron: '7 0 * * 1,4'\n  workflow_run:\n    workflows: [ApprovalComment]\n    types: [completed]\n  workflow_dispatch:\n    inputs:\n      region:\n        required: true\n        default: 'eu-west-1'\n        type: choice\n        options:\n          - \"us-east-1\"\n          - \"eu-west-1\"\n      cleanup:\n        required: true\n        default: true\n        type: boolean\njobs:\n  resolve:\n    if: (github.repository == 'aws/karpenter-provider-aws' && (github.event_name != 'workflow_run' || github.event.workflow_run.conclusion == 'success')) || github.event_name == 'workflow_dispatch'\n    uses: ./.github/workflows/resolve-args.yaml\n    with:\n      allowed_comment: \"versionCompatibility\"\n  versionCompatibility:\n    permissions:\n      id-token: write # aws-actions/configure-aws-credentials@v4.0.1\n      statuses: write # ./.github/actions/commit-status/start\n    needs: [resolve]\n    if: needs.resolve.outputs.SHOULD_RUN == 'true'\n    strategy:\n      fail-fast: false\n      matrix:\n        k8s_version: [\"1.29\", \"1.30\", \"1.31\", \"1.32\", \"1.33\", \"1.34\", \"1.35\"]\n    uses: ./.github/workflows/e2e-matrix.yaml\n    with:\n      region: ${{ inputs.region || 'eu-west-1' }}\n      git_ref: ${{ needs.resolve.outputs.GIT_REF }}\n      k8s_version: ${{ matrix.k8s_version }}\n      workflow_trigger: \"versionCompatibility\"\n      # Default to true unless using a workflow_dispatch\n      cleanup: ${{ github.event_name != 'workflow_dispatch' && true || inputs.cleanup }}\n      parallelism: 1\n    secrets:\n      SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}\n"
  },
  {
    "path": ".github/workflows/e2e.yaml",
    "content": "name: E2E\non:\n  workflow_dispatch:\n    inputs:\n      git_ref:\n        type: string\n      region:\n        type: choice\n        options:\n          - \"us-east-1\"\n          - \"us-east-2\"\n          - \"us-west-2\"\n          - \"eu-west-1\"\n        default: \"us-east-2\"\n      suite:\n        type: choice\n        required: true\n        options:\n          - Integration\n          - NodeClaim\n          - Consolidation\n          - Interruption\n          - Drift\n          - Expiration\n          - Chaos\n          - IPv6\n          - Scale\n          - PrivateCluster\n          - LocalZone\n      k8s_version:\n        type: choice\n        options:\n          - \"1.29\"\n          - \"1.30\"\n          - \"1.31\"\n          - \"1.32\"\n          - \"1.33\"\n          - \"1.34\"\n          - \"1.35\"\n        default: \"1.35\"\n      cluster_name:\n        type: string\n      cleanup:\n        type: boolean\n        required: true\n        default: true\n      enable_metrics:\n        type: boolean\n        default: false\n      codebuild_region:\n        type: string\n      source:\n        type: string\n        default: \"aws\" \n  workflow_call:\n    inputs:\n      git_ref:\n        type: string\n      source:\n        type: string\n        default: \"aws\" \n      region:\n        type: string\n        default: \"us-east-2\"\n      suite:\n        type: string\n        required: true\n      k8s_version:\n        type: string\n        default: \"1.35\"\n      enable_metrics:\n        type: boolean\n        default: false\n      cleanup:\n        type: boolean\n        required: true\n      workflow_trigger:\n        type: string\n      codebuild_region:\n        type: string\n      cluster_name:\n        type: string\n        description: If cluster_name is empty, a new cluster will be created. Otherwise, tests will run on an existing cluster\n    secrets:\n      SLACK_WEBHOOK_URL:\n        required: false\n      SLACK_WEBHOOK_SOAK_URL:\n        required: false\njobs:\n  run-suite:\n    permissions:\n      id-token: write # aws-actions/configure-aws-credentials@v4.0.1\n      statuses: write # ./.github/actions/commit-status/start\n    name: suite-${{ inputs.suite }}\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1\n        with:\n          ref: ${{ inputs.git_ref }}\n      - if: always() && github.event_name == 'workflow_run'\n        uses: ./.github/actions/commit-status/start\n        with:\n          name: ${{ github.workflow }} (${{ inputs.k8s_version }}) / e2e (${{ inputs.suite }})\n          git_ref: ${{ inputs.git_ref }}\n      - uses: ./.github/actions/install-deps\n      - name: configure aws credentials\n        uses: aws-actions/configure-aws-credentials@61815dcd50bd041e203e49132bacad1fd04d2708 # v5.1.1\n        with:\n          role-to-assume: arn:aws:iam::${{ vars.CI_ACCOUNT_ID }}:role/${{ vars.CI_ROLE_NAME }}\n          aws-region: ${{ inputs.region }}\n          role-duration-seconds: 21600\n      - name: add jitter on cluster setup\n        if: github.repository == 'aws/karpenter-provider-aws'\n        run: |\n          # Creating jitter so that we can stagger cluster creation to avoid throttling\n          sleep $(( RANDOM % 300 + 1 ))\n      - id: generate-cluster-name\n        name: generate cluster name\n        env:\n          SUITE: ${{ inputs.suite }}\n          CLUSTER_NAME: ${{ inputs.cluster_name }}\n          WORKFLOW_TRIGGER: ${{ inputs.workflow_trigger }}\n        run: |\n          if [[ \"$CLUSTER_NAME\" == '' ]]; then\n            if [[ \"$WORKFLOW_TRIGGER\" == 'soak' ]]; then\n              CLUSTER_NAME=$(echo \"soak-periodic-$RANDOM$RANDOM\" | awk '{print tolower($0)}' | tr / -)\n            else\n              CLUSTER_NAME=$(echo \"$SUITE-$RANDOM$RANDOM\" | awk '{print tolower($0)}' | tr / -)\n            fi\n          fi\n          echo \"Using cluster name \\\"$CLUSTER_NAME\\\"\"\n          echo CLUSTER_NAME=\"$CLUSTER_NAME\" >> \"$GITHUB_OUTPUT\"\n      - name: setup eks cluster '${{ steps.generate-cluster-name.outputs.CLUSTER_NAME }}'\n        if: inputs.cluster_name == ''\n        uses: ./.github/actions/e2e/setup-cluster\n        with:\n          account_id: ${{ vars.CI_ACCOUNT_ID }}\n          role: ${{ vars.CI_ROLE_NAME }}\n          region: ${{ inputs.region }}\n          cluster_name: ${{ steps.generate-cluster-name.outputs.CLUSTER_NAME }}\n          k8s_version: ${{ inputs.k8s_version }}\n          eksctl_version: v0.202.0\n          ip_family: ${{ contains(inputs.suite, 'IPv6') && 'IPv6' || 'IPv4' }} # Set the value to IPv6 if IPv6 suite, else IPv4\n          private_cluster: ${{ inputs.workflow_trigger == 'private_cluster' }}\n          git_ref: ${{ inputs.git_ref }}\n          ecr_account_id: ${{ vars.SNAPSHOT_ACCOUNT_ID }}\n          ecr_region: ${{ vars.SNAPSHOT_REGION }}\n          prometheus_workspace_id: ${{ vars.WORKSPACE_ID }}\n          prometheus_region: ${{ vars.PROMETHEUS_REGION }}\n          enable_local_zones: ${{ inputs.suite == 'LocalZone' }}\n          cleanup: ${{ inputs.cleanup }}\n          codebuild_role: ${{ vars[format('{0}_CODEBUILD_ROLE', inputs.codebuild_region)] }}\n      - name: run tests for private cluster\n        if: ${{ inputs.workflow_trigger == 'private_cluster' }}\n        uses: ./.github/actions/e2e/run-tests-private-cluster\n        with:\n          cluster_name: ${{ steps.generate-cluster-name.outputs.CLUSTER_NAME }}\n          suite: ${{ inputs.suite }}\n          prometheus_region: ${{ vars.PROMETHEUS_REGION }}\n          prometheus_workspace_id: ${{ vars.WORKSPACE_ID }}\n          region: ${{ inputs.region }}\n          account_id: ${{ vars.CI_ACCOUNT_ID }}\n          k8s_version: ${{ inputs.k8s_version }}\n          ecr_account_id: ${{ vars.SNAPSHOT_ACCOUNT_ID }}\n          ecr_region: ${{ vars.SNAPSHOT_REGION }}\n          private_cluster: ${{ inputs.workflow_trigger == 'private_cluster' }}\n          enable_metrics: ${{ inputs.enable_metrics }}\n          metrics_region: ${{ vars.TIMESTREAM_REGION }}\n          node_role: ${{ env.NODE_ROLE }}\n          cleanup: ${{ inputs.cleanup }}\n          codebuild_sg: ${{ vars[format('{0}_CODEBUILD_SG', inputs.codebuild_region)] }}\n          codebuild_vpc: ${{ vars[format('{0}_CODEBUILD_VPC', inputs.codebuild_region)] }}\n      - name: run the ${{ inputs.suite }} test suite\n        if: ${{ inputs.workflow_trigger != 'private_cluster' }}\n        env:\n          SUITE: ${{ inputs.suite }}\n          ENABLE_METRICS: ${{ inputs.enable_metrics }}\n          SOURCE: ${{ inputs.source }}\n        run: |\n          aws eks update-kubeconfig --name ${{ steps.generate-cluster-name.outputs.CLUSTER_NAME }}\n          # Clean up the cluster before running all tests\n          kubectl delete nodepool --all\n          kubectl delete ec2nodeclass --all\n          kubectl delete deployment --all\n\n          if [[ \"$SOURCE\" == 'aws' ]]; then\n            TEST_SUITE=\"$SUITE\" ENABLE_METRICS=$ENABLE_METRICS METRICS_REGION=${{ vars.TIMESTREAM_REGION }} GIT_REF=\"$(git rev-parse HEAD)\" \\\n              CLUSTER_NAME=\"${{ steps.generate-cluster-name.outputs.CLUSTER_NAME }}\" CLUSTER_ENDPOINT=\"$(aws eks describe-cluster --name ${{ steps.generate-cluster-name.outputs.CLUSTER_NAME }} --query \"cluster.endpoint\" --output text)\" \\\n              INTERRUPTION_QUEUE=\"${{ steps.generate-cluster-name.outputs.CLUSTER_NAME }}\" make e2etests\n          elif [[ \"$SOURCE\" == 'upstream' ]]; then\n            FOCUS=\"$SUITE\" GIT_REF=\"$(git rev-parse HEAD)\" \\\n              CLUSTER_NAME=\"${{ steps.generate-cluster-name.outputs.CLUSTER_NAME }}\" make upstream-e2etests\n          elif [[ \"$SOURCE\" == 'all' ]]; then\n            TEST_SUITE=\"$SUITE\" ENABLE_METRICS=$ENABLE_METRICS METRICS_REGION=${{ vars.TIMESTREAM_REGION }} GIT_REF=\"$(git rev-parse HEAD)\" \\\n              CLUSTER_NAME=\"${{ steps.generate-cluster-name.outputs.CLUSTER_NAME }}\" CLUSTER_ENDPOINT=\"$(aws eks describe-cluster --name ${{ steps.generate-cluster-name.outputs.CLUSTER_NAME }} --query \"cluster.endpoint\" --output text)\" \\\n              INTERRUPTION_QUEUE=\"${{ steps.generate-cluster-name.outputs.CLUSTER_NAME }}\" make e2etests\n            FOCUS=\"$SUITE\" GIT_REF=\"$(git rev-parse HEAD)\" \\\n              CLUSTER_NAME=\"${{ steps.generate-cluster-name.outputs.CLUSTER_NAME }}\" make upstream-e2etests\n          fi\n      - name: notify slack of success or failure\n        uses: ./.github/actions/e2e/slack/notify\n        if: (success() || failure()) && github.event_name != 'workflow_run' && inputs.workflow_trigger != 'versionCompatibility'\n        with:\n          cluster_name: ${{ steps.generate-cluster-name.outputs.CLUSTER_NAME }}\n          url: ${{ inputs.workflow_trigger == 'soak' && secrets.SLACK_WEBHOOK_SOAK_URL || secrets.SLACK_WEBHOOK_URL }}\n          suite: ${{ inputs.suite }}\n          git_ref: ${{ inputs.git_ref }}\n          workflow_trigger: ${{ inputs.workflow_trigger }}\n      - name: dump logs on failure\n        uses: ./.github/actions/e2e/dump-logs\n        if: (failure() || cancelled()) && inputs.workflow_trigger != 'private_cluster'\n        with:\n          account_id: ${{ vars.CI_ACCOUNT_ID }}\n          role: ${{ vars.CI_ROLE_NAME }}\n          region: ${{ inputs.region }}\n          cluster_name: ${{ steps.generate-cluster-name.outputs.CLUSTER_NAME }}\n      - name: cleanup karpenter and cluster '${{ steps.generate-cluster-name.outputs.CLUSTER_NAME }}' resources\n        uses: ./.github/actions/e2e/cleanup\n        if: always() && inputs.cleanup\n        with:\n          account_id: ${{ vars.CI_ACCOUNT_ID }}\n          role: ${{ vars.CI_ROLE_NAME }}\n          region: ${{ inputs.region }}\n          cluster_name: ${{ steps.generate-cluster-name.outputs.CLUSTER_NAME }}\n          git_ref: ${{ inputs.git_ref }}\n          eksctl_version: v0.202.0\n          private_cluster: ${{ inputs.workflow_trigger == 'private_cluster' }}\n      - if: always() && github.event_name == 'workflow_run'\n        uses: ./.github/actions/commit-status/end\n        with:\n          name: ${{ github.workflow }} (${{ inputs.k8s_version }}) / e2e (${{ inputs.suite }})\n          git_ref: ${{ inputs.git_ref }}\n"
  },
  {
    "path": ".github/workflows/image-canary.yaml",
    "content": "name: ImageCanary\non:\n  workflow_dispatch:\n  schedule:\n  - cron: '0 */1 * * *'\njobs:\n  image-canary:\n    runs-on: ubuntu-latest\n    permissions:\n      id-token: write # aws-actions/configure-aws-credentials@v4.0.1\n    if: github.repository == 'aws/karpenter-provider-aws'\n    steps:\n    - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1\n    - name: Configure AWS credentials\n      uses: aws-actions/configure-aws-credentials@61815dcd50bd041e203e49132bacad1fd04d2708 # v5.1.1\n      with:\n        role-to-assume: arn:aws:iam::${{ vars.READONLY_ACCOUNT_ID }}:role/${{ vars.READONLY_ROLE_NAME }}\n        aws-region: ${{ vars.READONLY_REGION }}\n        role-duration-seconds: 900\n    # Authenticate to public ECR to prevent rate limiting\n    - uses: docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef # v3.6.0\n      with:\n        registry: public.ecr.aws\n        logout: true\n      env:\n        AWS_REGION: us-east-1\n    - name: Run image canary\n      env:\n        GH_TOKEN: ${{ github.token }}\n      run: ./hack/image_canary.sh\n    - name: Notify slack of failure\n      if: failure() && github.event_name != 'workflow_run'\n      uses: ./.github/actions/e2e/slack/send-message\n      with:\n        message: \":alert: image canary failure (https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}) @channel\"\n        url: ${{ secrets.SLACK_WEBHOOK_URL }}\n"
  },
  {
    "path": ".github/workflows/postsubmit.yaml",
    "content": "name: PostSubmit\non:\n  push:\n    branches:\n      - main\n  workflow_dispatch:\njobs:\n  postsubmit:\n    if: github.repository == 'aws/karpenter-provider-aws'\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1\n      - uses: ./.github/actions/install-deps\n      - name: hydrate-goproxy\n        run: |\n          mkdir -p hydrate-goproxy\n          cd hydrate-goproxy\n          go mod init hydrate-goproxy\n          go get \"github.com/${GITHUB_REPOSITORY}@${GITHUB_SHA}\""
  },
  {
    "path": ".github/workflows/release.yaml",
    "content": "name: Release\non:\n  push:\n    # Only release on supported semantic version tagging e.g. v0.0.1-rc.0\n    tags:\n      - 'v[0-9]+.[0-9]+.[0-9]+'\n      - 'v[0-9]+.[0-9]+.[0-9]+-rc.[0-9]+'\n      - 'v[0-9]+.[0-9]+.[0-9]+-alpha.[0-9]+'\n      - 'v[0-9]+.[0-9]+.[0-9]+-beta.[0-9]+'\njobs:\n  release:\n    permissions:\n      id-token: write # aws-actions/configure-aws-credentials@v4.0.1\n      contents: write # marvinpinto/action-automatic-releases@v1.2.1\n      pull-requests: write # name: Create PR\n    if: github.repository == 'aws/karpenter-provider-aws'\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1\n        with:\n          fetch-depth: 0\n      - name: Create GitHub Release\n        uses: marvinpinto/action-automatic-releases@919008cf3f741b179569b7a6fb4d8860689ab7f0 # v1.2.1\n        with:\n          repo_token: '${{ secrets.GITHUB_TOKEN }}'\n          prerelease: false\n      - uses: ./.github/actions/install-deps\n        with:\n          use-cache: false\n      - uses: ./.github/actions/e2e/install-helm\n        with:\n          version: v3.18.6\n      - uses: aws-actions/configure-aws-credentials@61815dcd50bd041e203e49132bacad1fd04d2708 # v5.1.1\n        with:\n          role-to-assume: 'arn:aws:iam::${{ vars.RELEASE_ACCOUNT_ID }}:role/${{ vars.RELEASE_ROLE_NAME }}'\n          aws-region: ${{ vars.RELEASE_REGION }}\n      - run: make release\n        env:\n          RELEASE_ACCOUNT_ID: ${{ vars.RELEASE_ACCOUNT_ID }}\n          CACHED_ECR_NAME: ${{ vars.CACHED_ECR_NAME }}\n      - uses: aws-actions/configure-aws-credentials@61815dcd50bd041e203e49132bacad1fd04d2708 # v5.1.1\n        with:\n          role-to-assume: 'arn:aws:iam::${{ vars.READONLY_ACCOUNT_ID }}:role/${{ vars.READONLY_ROLE_NAME }}'\n          aws-region: ${{ vars.READONLY_REGION }}\n      - run: make docgen\n      - run: make prepare-website\n      - run: make stable-release-pr\n        env:\n          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n          GITHUB_REPO: ${{ github.repository }}\n      - name: Create PR\n        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0\n        with:\n          script: |\n            const { repo, owner } = context.repo;\n            const tag = context.ref.replace(\"refs/tags/\", '');\n            const result = await github.rest.pulls.create({\n              title: `chore: Release ${tag}`,\n              owner,\n              repo,\n              head: `release-${tag}`,\n              base: 'main',\n              body: [\n                `Stable Release Changes for ${tag}.`,\n                'Please disregard this PR if it is for a patch release.',\n                'Please remove the branch after merging.',\n                'This PR is generated by [StableRelease](https://github.com/aws/karpenter-provider-aws/actions/workflows/stable-release.yml).'\n              ].join('\\n')\n            });\n            github.rest.issues.addLabels({\n              owner,\n              repo,\n              issue_number: result.data.number,\n              labels: ['stable-release','website','helm-charts']\n            });\n"
  },
  {
    "path": ".github/workflows/resolve-args.yaml",
    "content": "name: ResolveArgs\non:\n  workflow_call:\n    inputs:\n      allowed_comment:\n        type: string\n        required: true\n    outputs:\n      SHOULD_RUN:\n        value: ${{ jobs.resolve.outputs.SHOULD_RUN }}\n      GIT_REF:\n        value: ${{ jobs.resolve.outputs.GIT_REF }}\njobs:\n  resolve:\n    runs-on: ubuntu-latest\n    outputs:\n      SHOULD_RUN: ${{ steps.resolve-step.outputs.SHOULD_RUN }}\n      GIT_REF: ${{ steps.resolve-step.outputs.GIT_REF }}\n    steps:\n      # Download the artifact and resolve the commit if initiated by PR snapshot\n      # Otherwise, use the currently checked-out branch to run the E2E tests against\n      - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1\n      - if: github.event_name == 'workflow_run'\n        uses: ./.github/actions/download-artifact\n      - id: resolve-step\n        env:\n          ALLOWED_COMMENT: ${{ inputs.allowed_comment }}\n        run: |\n          if [[ \"${{ github.event_name }}\" == \"workflow_run\" ]]; then\n            if [[ \"$(head -n 1 /tmp/artifacts/metadata.txt)\" == *\"$ALLOWED_COMMENT\"* ]]; then\n               echo SHOULD_RUN=true >> \"$GITHUB_OUTPUT\"\n            else\n               echo SHOULD_RUN=false >> \"$GITHUB_OUTPUT\"\n            fi\n            echo GIT_REF=\"$(tail -n 1 /tmp/artifacts/metadata.txt)\" >> \"$GITHUB_OUTPUT\"\n          else\n            echo SHOULD_RUN=true >> \"$GITHUB_OUTPUT\"\n            echo GIT_REF=\"\" >> \"$GITHUB_OUTPUT\"\n          fi\n"
  },
  {
    "path": ".github/workflows/resource-count.yaml",
    "content": "name: ResourceCount\non:\n  schedule:\n    - cron: '3 */1 * * *' # every hour\n  workflow_dispatch:\npermissions:\n  id-token: write # aws-actions/configure-aws-credentials@v4.0.1\njobs:\n  counter:\n    if: vars.CI_ACCOUNT_ID != '' || github.event_name == 'workflow_dispatch'\n    strategy:\n      fail-fast: false\n      matrix:\n        region: [us-east-2, us-west-2, eu-west-1, eu-north-1, us-east-1]\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1\n      - name: configure aws credentials\n        uses: aws-actions/configure-aws-credentials@61815dcd50bd041e203e49132bacad1fd04d2708 # v5.1.1\n        with:\n          role-to-assume: arn:aws:iam::${{ vars.CI_ACCOUNT_ID }}:role/${{ vars.CI_ROLE_NAME }}\n          aws-region: ${{ matrix.region }}\n      - uses: actions/setup-go@7a3fe6cf4cb3a834922a1244abfce67bcef6a0c5 # v6.2.0\n        with:\n          go-version-file: test/hack/resource/go.mod\n          check-latest: true\n          cache-dependency-path: \"test/hack/resource/go.sum\"\n      - run: go run main.go\n        working-directory: ./test/hack/resource/count\n        name: \"Run resource count script\"\n"
  },
  {
    "path": ".github/workflows/snapshot-pr.yaml",
    "content": "name: SnapshotPR\non:\n  workflow_run:\n    workflows:\n      - ApprovalComment\n    types:\n      - completed\njobs:\n  snapshot:\n    permissions:\n      id-token: write\n      pull-requests: write\n      statuses: write\n    if: github.event.workflow_run.conclusion == 'success'\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1\n      - uses: ./.github/actions/download-artifact\n      - id: metadata\n        run: |\n          pr_number=\"$(head -n 2 /tmp/artifacts/metadata.txt | tail -n 1)\"\n          pr_commit=\"$(tail -n 1 /tmp/artifacts/metadata.txt)\"\n          echo PR_COMMIT=\"$pr_commit\" >> \"$GITHUB_ENV\"\n          echo PR_NUMBER=\"$pr_number\" >> \"$GITHUB_ENV\"\n      - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1\n        with:\n          ref: ${{ env.PR_COMMIT }}\n      - uses: ./.github/actions/commit-status/start\n        with:\n          name: \"${{ github.workflow }} / ${{ github.job }} (pull_request_review)\"\n          git_ref: ${{ env.PR_COMMIT }}\n      - uses: ./.github/actions/install-deps\n      - uses: aws-actions/configure-aws-credentials@61815dcd50bd041e203e49132bacad1fd04d2708 # v5.1.1\n        with:\n          role-to-assume: 'arn:aws:iam::${{ vars.SNAPSHOT_ACCOUNT_ID }}:role/${{ vars.SNAPSHOT_ROLE_NAME }}'\n          aws-region: ${{ vars.SNAPSHOT_REGION }}\n      - run: make snapshot\n      - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0\n        env:\n          SNAPSHOT_ACCOUNT_ID: ${{ vars.SNAPSHOT_ACCOUNT_ID }}\n          SNAPSHOT_REGION: ${{ vars.SNAPSHOT_REGION }}\n        with:\n          script: |\n            github.rest.issues.createComment({\n              issue_number: process.env.PR_NUMBER,\n              owner: context.repo.owner,\n              repo: context.repo.repo,\n              body: `Snapshot successfully published to \\`oci://${process.env.SNAPSHOT_ACCOUNT_ID}.dkr.ecr.${process.env.SNAPSHOT_REGION}.amazonaws.com/karpenter/snapshot/karpenter:0-${process.env.PR_COMMIT}\\`.\n            To install you must login to the ECR repo with an AWS account:\n            ~~~\n            aws ecr get-login-password --region ${process.env.SNAPSHOT_REGION} | docker login --username AWS --password-stdin ${process.env.SNAPSHOT_ACCOUNT_ID}.dkr.ecr.${process.env.SNAPSHOT_REGION}.amazonaws.com\n            \n            helm upgrade --install karpenter oci://${process.env.SNAPSHOT_ACCOUNT_ID}.dkr.ecr.${process.env.SNAPSHOT_REGION}.amazonaws.com/karpenter/snapshot/karpenter --version \"0-${process.env.PR_COMMIT}\" --namespace \"kube-system\" --create-namespace \\\\\n              --set \"settings.clusterName=\\${CLUSTER_NAME}\" \\\\\n              --set \"settings.interruptionQueue=\\${CLUSTER_NAME}\" \\\\\n              --set controller.resources.requests.cpu=1 \\\\\n              --set controller.resources.requests.memory=1Gi \\\\\n              --set controller.resources.limits.cpu=1 \\\\\n              --set controller.resources.limits.memory=1Gi \\\\\n              --wait\n            ~~~\n            `\n            })\n      - if: always()\n        uses: ./.github/actions/commit-status/end\n        with:\n          name: \"${{ github.workflow }} / ${{ github.job }} (pull_request_review)\"\n          git_ref: ${{ env.PR_COMMIT }}\n"
  },
  {
    "path": ".github/workflows/snapshot.yaml",
    "content": "name: Snapshot\non:\n  push:\n    branches:\n      - 'main'\n      - 'release-v*'\n      - 'staging/*'\njobs:\n  snapshot:\n    permissions:\n      id-token: write # aws-actions/configure-aws-credentials@v4.0.1\n    if: github.repository == 'aws/karpenter-provider-aws'\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1\n        with:\n          fetch-depth: 0\n      - uses: ./.github/actions/install-deps\n        with:\n          use-cache: false\n      - uses: aws-actions/configure-aws-credentials@61815dcd50bd041e203e49132bacad1fd04d2708 # v5.1.1\n        with:\n          role-to-assume: 'arn:aws:iam::${{ vars.SNAPSHOT_ACCOUNT_ID }}:role/${{ vars.SNAPSHOT_ROLE_NAME }}'\n          aws-region: ${{ vars.SNAPSHOT_REGION }}\n      - run: make snapshot\n"
  },
  {
    "path": ".github/workflows/stale.yaml",
    "content": "name: StaleBot\non:\n  workflow_dispatch:\n  schedule:\n    - cron: '0 12 * * *'\njobs:\n  StaleBot:\n    runs-on: ubuntu-latest\n    permissions:\n      issues: write # actions/stale@v8.0.0\n      pull-requests: write # actions/stale@v8.0.0\n    if: github.repository == 'aws/karpenter-provider-aws'\n    name: Stale issue bot\n    steps:\n      # Issue stale-out for \"triage/needs-information\"\n      - uses: actions/stale@997185467fa4f803885201cee163a9f38240193d # v10.1.1\n        with:\n          repo-token: ${{ secrets.GITHUB_TOKEN }}\n          stale-issue-message: 'This issue has been inactive for 14 days. StaleBot will close this stale issue after 14 more days of inactivity.'\n          only-issue-labels: 'triage/needs-information'\n          stale-issue-label: 'lifecycle/stale'\n          close-issue-label: 'lifecycle/closed'\n          only-pr-labels: 'ignore' # Ignore this step for PRs\n          days-before-stale: 14\n          days-before-close: 14\n          operations-per-run: 300\n      # Issue stale-out for \"triage/solved\"\n      - uses: actions/stale@997185467fa4f803885201cee163a9f38240193d # v10.1.1\n        with:\n          repo-token: ${{ secrets.GITHUB_TOKEN }}\n          stale-issue-message: 'This issue has been inactive for 7 days and is marked as \"triage/solved\". StaleBot will close this stale issue after 7 more days of inactivity.'\n          only-issue-labels: 'triage/solved'\n          stale-issue-label: 'lifecycle/stale'\n          close-issue-label: 'lifecycle/closed'\n          only-pr-labels: 'ignore' # Ignore this step for PRs\n          days-before-stale: 7\n          days-before-close: 7\n          operations-per-run: 300\n"
  },
  {
    "path": ".github/workflows/sweeper.yaml",
    "content": "name: Sweeper\non:\n  schedule:\n    - cron: '0 */12 * * *'\n  workflow_dispatch:\njobs:\n  sweeper:\n    permissions:\n      id-token: write # aws-actions/configure-aws-credentials@v4.0.1\n    if: vars.CI_ACCOUNT_ID != '' || github.event_name == 'workflow_dispatch'\n    strategy:\n      fail-fast: false\n      max-parallel: 1\n      matrix:\n        region: [us-east-2, us-west-2, eu-west-1, eu-north-1, us-east-1]\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1\n      - name: configure aws credentials\n        uses: aws-actions/configure-aws-credentials@61815dcd50bd041e203e49132bacad1fd04d2708 # v5.1.1\n        with:\n          role-to-assume: arn:aws:iam::${{ vars.CI_ACCOUNT_ID }}:role/${{ vars.CI_ROLE_NAME }}\n          aws-region: ${{ matrix.region }}\n      - uses: actions/setup-go@7a3fe6cf4cb3a834922a1244abfce67bcef6a0c5 # v6.2.0\n        with:\n          go-version-file: test/hack/resource/go.mod\n          check-latest: true\n          cache-dependency-path: \"test/hack/resource/go.sum\"\n      # eu-north-1 contains the soak tests and resources should be swept if they are older than 8 days\n      - run: |\n          if [[ \"${{ matrix.region }}\" == \"eu-north-1\" ]]; then\n            go run main.go --expiration 192h\n          else\n            go run main.go --expiration 12h\n          fi\n        working-directory: ./test/hack/resource/clean\n        name: \"Run cleanup script\"\n"
  },
  {
    "path": ".github/workflows/website-cleanup-preview.yaml",
    "content": "name: Cleanup Website PR Preview\non:\n  pull_request_target:\n    types: [ closed ]\njobs:\n  cleanup:\n    runs-on: ubuntu-latest\n    if: github.repository == 'aws/karpenter-provider-aws'\n    permissions:\n      id-token: write\n      contents: read\n    steps:\n      - id: metadata\n        run: |\n          pr_number=\"${{ github.event.number }}\"\n          echo PR_NUMBER=\"$pr_number\" >> \"$GITHUB_ENV\"\n          echo BRANCH_NAME=\"pr-$pr_number\" >> \"$GITHUB_ENV\"\n      - uses: aws-actions/configure-aws-credentials@61815dcd50bd041e203e49132bacad1fd04d2708 # v5.1.1\n        with:\n          role-to-assume: arn:aws:iam::${{ vars.RELEASE_PREVIEW_ACCOUNT_ID }}:role/${{ vars.WEBSITE_ROLE_NAME }}\n          aws-region: ${{ vars.AMPLIFY_REGION }}\n      - run: |\n          if aws amplify get-branch --app-id ${{ vars.AMPLIFY_APP_ID_PREVIEW }} --branch-name \"${{ env.BRANCH_NAME }}\" 2>/dev/null; then\n            aws amplify delete-branch --app-id ${{ vars.AMPLIFY_APP_ID_PREVIEW }} --branch-name \"${{ env.BRANCH_NAME }}\"\n          fi\n      - run: aws s3 rm s3://${{ vars.AMPLIFY_S3_BUCKET_BETA }}/pr-${{ env.PR_NUMBER }}/ --recursive\n"
  },
  {
    "path": ".github/workflows/website-deploy.yaml",
    "content": "name: Deploy Website to Amplify\non:\n  push:\n    branches: [ main ]\n    paths: [ website/** ]\njobs:\n  deploy:\n    runs-on: ubuntu-latest\n    if: github.repository == 'aws/karpenter-provider-aws'\n    permissions:\n      id-token: write\n      contents: read\n    steps:\n      - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1\n      - name: Deploy website\n        uses: ./.github/actions/deploy-website\n        with:\n          role: arn:aws:iam::${{ vars.RELEASE_ACCOUNT_ID }}:role/${{ vars.WEBSITE_ROLE_NAME }}\n          region: ${{ vars.AMPLIFY_REGION }}\n          amplify-app-id: ${{ vars.AMPLIFY_APP_ID }}\n          amplify-branch-name: ${{ vars.BRANCH_NAME }}\n          s3-bucket: ${{ vars.AMPLIFY_S3_BUCKET }}\n"
  },
  {
    "path": ".github/workflows/website-preview-trigger.yaml",
    "content": "name: WebsitePreviewTrigger\non:\n  pull_request:\n    types: [ opened, synchronize, reopened ]\njobs:\n  preview-trigger:\n    runs-on: ubuntu-latest\n    if: github.repository == 'aws/karpenter-provider-aws'\n    steps:\n      - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1\n        with:\n          fetch-depth: 0\n      - name: Save info about the PR as an artifact for other workflows that run on workflow_run to download them\n        env:\n          PULL_REQUEST_NUMBER: ${{ github.event.pull_request.number }}\n          COMMIT_ID: ${{ github.event.pull_request.head.sha }}\n        run: |\n          mkdir -p /tmp/artifacts\n          { echo \"$PULL_REQUEST_NUMBER\"; echo \"$COMMIT_ID\"; } >> /tmp/artifacts/website-metadata.txt\n          cat /tmp/artifacts/website-metadata.txt\n      - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0\n        with:\n          name: artifacts\n          path: /tmp/artifacts\n"
  },
  {
    "path": ".github/workflows/website-preview.yaml",
    "content": "name: Deploy Website Preview to Amplify\non:\n  workflow_run:\n    workflows: [ WebsitePreviewTrigger ]\n    types: [ completed ]\njobs:\n  preview:\n    permissions:\n      id-token: write\n      contents: read\n      pull-requests: write\n      statuses: write\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1\n      - uses: ./.github/actions/download-artifact\n      - id: website-metadata\n        run: |\n          pr_number=\"$(head -n 1 /tmp/artifacts/website-metadata.txt)\"\n          pr_commit=\"$(tail -n 1 /tmp/artifacts/website-metadata.txt)\"\n          {\n            echo PR_COMMIT=\"$pr_commit\"\n            echo PR_NUMBER=\"$pr_number\"\n            echo BRANCH_NAME=\"pr-$pr_number\"\n          } >> \"$GITHUB_ENV\"\n      - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1\n        with:\n          ref: ${{ env.PR_COMMIT }}\n      - uses: ./.github/actions/commit-status/start\n        with:\n          name: \"${{ github.workflow }} / ${{ github.job }} (pull_request_review)\"\n          git_ref: ${{ env.PR_COMMIT }}\n      - name: Configure AWS credentials\n        uses: aws-actions/configure-aws-credentials@61815dcd50bd041e203e49132bacad1fd04d2708 # v5.1.1\n        with:\n          role-to-assume: arn:aws:iam::${{ vars.RELEASE_PREVIEW_ACCOUNT_ID }}:role/${{ vars.WEBSITE_ROLE_NAME }}\n          aws-region: ${{ vars.AMPLIFY_REGION }}\n      - name: Get preview URL\n        run: |\n          APP_DOMAIN=$(aws amplify get-app --app-id ${{ vars.AMPLIFY_APP_ID_PREVIEW }} --query 'app.defaultDomain' --output text)\n          PREVIEW_URL=\"https://${{ env.BRANCH_NAME }}.$APP_DOMAIN\"\n          echo PREVIEW_URL=\"$PREVIEW_URL\" >> \"$GITHUB_ENV\"\n      - name: Deploy website\n        uses: ./.github/actions/deploy-website\n        with:\n          role: arn:aws:iam::${{ vars.RELEASE_PREVIEW_ACCOUNT_ID }}:role/${{ vars.WEBSITE_ROLE_NAME }}\n          region: ${{ vars.AMPLIFY_REGION }}\n          amplify-app-id: ${{ vars.AMPLIFY_APP_ID_PREVIEW }}\n          amplify-branch-name: ${{ env.BRANCH_NAME }}\n          s3-bucket: ${{ vars.AMPLIFY_S3_BUCKET_BETA }}\n          s3-prefix: pr-${{ env.PR_NUMBER }}/\n          hugo-base-url: ${{ env.PREVIEW_URL }}\n      - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0\n        env:\n          PREVIEW_URL: ${{ env.PREVIEW_URL }}\n          PR_COMMIT: ${{ env.PR_COMMIT }}\n        with:\n          script: |\n            const commentBody = `**Preview deployment ready!**\n            \n            **Preview URL:** ${process.env.PREVIEW_URL}\n            \n            Built from commit \\`${process.env.PR_COMMIT}\\``;\n            \n            const existingComment = (await github.rest.issues.listComments({\n              issue_number: process.env.PR_NUMBER,\n              owner: context.repo.owner,\n              repo: context.repo.repo,\n            })).data.find(comment => \n              comment.user.login === 'github-actions[bot]' && \n              comment.body.includes('**Preview deployment ready!**')\n            );\n            \n            if (existingComment) {\n              await github.rest.issues.updateComment({\n                comment_id: existingComment.id,\n                owner: context.repo.owner,\n                repo: context.repo.repo,\n                body: commentBody\n              });\n            } else {\n              await github.rest.issues.createComment({\n                issue_number: process.env.PR_NUMBER,\n                owner: context.repo.owner,\n                repo: context.repo.repo,\n                body: commentBody\n              });\n            }\n      - if: always()\n        uses: ./.github/actions/commit-status/end\n        with:\n          name: \"${{ github.workflow }} / ${{ github.job }} (pull_request_review)\"\n          git_ref: ${{ env.PR_COMMIT }}\n"
  },
  {
    "path": ".gitignore",
    "content": "# Go toolchain\ncoverage.out\ncoverage.html\n*.test\n*.cpuprofile\n*.heapprofile\ngo.work\ngo.work.sum\n\n# Environment\n.idea\n.vscode\n.DS_Store\n\n# Project Specific\n*.csv\n\n# Binary output\nkarpenter-provider-aws-*"
  },
  {
    "path": ".gitmodules",
    "content": ""
  },
  {
    "path": ".golangci.yaml",
    "content": "version: \"2\"\nrun:\n  tests: true\n  timeout: 5m\nlinters:\n  enable:\n    - asciicheck\n    - bidichk\n    - copyloopvar\n    - errorlint\n    - gocyclo\n    - goheader\n    - gosec\n    - misspell\n    - nilerr\n    - revive\n    - staticcheck\n    - tparallel\n    - unconvert\n    - unparam\n  disable:\n    - prealloc\n  settings:\n    gocyclo:\n      min-complexity: 11\n    goheader:\n      template: |-\n        Licensed under the Apache License, Version 2.0 (the \"License\");\n        you may not use this file except in compliance with the License.\n        You may obtain a copy of the License at\n\n            http://www.apache.org/licenses/LICENSE-2.0\n\n        Unless required by applicable law or agreed to in writing, software\n        distributed under the License is distributed on an \"AS IS\" BASIS,\n        WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n        See the License for the specific language governing permissions and\n        limitations under the License.\n    govet:\n      disable:\n        - fieldalignment\n      enable-all: true\n    misspell:\n      locale: US\n    revive:\n      rules:\n        - name: dot-imports\n          disabled: true\n    staticcheck:\n      dot-import-whitelist:\n        - github.com/onsi/ginkgo/v2\n        - github.com/onsi/gomega\n  exclusions:\n    generated: lax\n    presets:\n      - comments\n      - common-false-positives\n      - legacy\n      - std-error-handling\n    rules:\n      - linters:\n          - goheader\n        path: zz_(.+)\\.go\n      - path: (.+)\\.go$\n        text: declaration of \"(err|ctx)\" shadows declaration at\n    paths:\n      - tools\n      - website\n      - hack\n      - charts\n      - designs\n      - third_party$\n      - builtin$\n      - examples$\nissues:\n  fix: true\nformatters:\n  enable:\n    - goimports\n  settings:\n    goimports:\n      local-prefixes:\n        - github.com/aws/karpenter-provider-aws\n  exclusions:\n    generated: lax\n    paths:\n      - tools\n      - website\n      - hack\n      - charts\n      - designs\n      - third_party$\n      - builtin$\n      - examples$\n"
  },
  {
    "path": ".ko.yaml",
    "content": "defaultBaseImage: public.ecr.aws/eks-distro-build-tooling/eks-distro-minimal-base\ndefaultPlatforms:\n  - linux/arm64\n  - linux/amd64\n"
  },
  {
    "path": "ADOPTERS.md",
    "content": "# Who is using Karpenter?\nKarpenter has a variety of users and use cases for scaling Kubernetes.\nMany customers want to learn from others who have already implemented Karpenter in their environments.\n\nThe following is a self-reported list of users to help identify adoption and points of contact.\n\n## Community\nIf you would like to ask question from the community please join the [Karpenter slack channel in the Kubernetes Slack](https://kubernetes.slack.com/archives/C02SFFZSA2K) or join the [Karpenter working group](https://karpenter.sh/docs/contributing/working-group/) bi-weekly calls.\n\n## Add yourself\nIf you are using Karpenter please consider adding yourself as a user by opening a pull request to this file.\nIf you are open to others contacting you about your use of Karpenter on Slack, add your Slack name as well.\n\n## Adopters (Alphabetical)\n\n| Organization | Description | Contacts | Link |\n| --- | --- | --- | --- |\n| Amazon, Inc. | Scaling production workloads and batch jobs in all AWS regions | `@Alex Kestner`, `@Ellis Tarn` | [Introducing Karpenter](https://aws.amazon.com/blogs/aws/introducing-karpenter-an-open-source-high-performance-kubernetes-cluster-autoscaler/) |\n| Airtel Digital Ltd. | Karpenter for all kind of spiky and base workload and to increase spot coverage. | `@Sagar Arora` | [Homepage](https://www.wynk.in)\n| Anthropic | Better utilizing mixes of instance types for more reliable capacity | N/A | [Homepage](https://anthropic.com) |\n| AppsFlyer | Managing statefull workloads like Kafka and more | `@alicvsroxas` `@danielvrog`| [Homepage](https://www.appsflyer.com/)|\n| Astradot | Using Karpenter on all K8s clusters in production and staging | N/A | [Homepage](https://astradot.com) |\n| Beeswax | Using Karpenter to scale our high load AdTech platform efficiently | `@James Wojewoda` | [Homepage](https://www.beeswax.com) |\n| Cabify | Replace cluster-autoscaler in our EKS clusters | N/A | [Homepage](https://tech.cabify.com) |\n| Canva | Using Karpetner to scale CPU and GPU workloads on EKS | `@groodt` | [Canva](https://www.canva.com/) |\n| Cloud Posse, LLC | Karpenter ships out-of-the-box in our Terraform Blueprint for EKS and is offered as part of our comprehensive multi-account [AWS reference architecture](https://cloudposse.com/reference-architecture/). Everything is Open Source (APACHE2). | `@osterman` | [Karpenter : The Cloud Posse Developer Hub](https://docs.cloudposse.com/components/catalog/aws/eks/karpenter/) |\n| Codefresh | Juggling workloads for the SAAS CD/GitOps offering | `@Yonatan Koren`, `@Ilia Medvedev` | [Codefresh](https://codefresh.io/) |\n| Conveyor | Using karpenter to scale our customers data pipelines on EKS | `@stijndehaes` | [Conveyor](https://conveyordata.com/) |\n| Coralogix   | Using Karpenter on all of our EKS K8S Clusters in multi-tenant high scale production environments | `@doryer` | [Coralogix](https://coralogix.com/) |\n| Cordial   | Using Karpenter to scale multiple EKS clusters quickly | `@dschaaff` | [Cordial](https://cordial.com) |\n| 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/) |\n| Docker | Using Karpenter to scale Docker Hub on our EKS clusters | N/A | [Docker](https://www.docker.com) |\n| GlobalDots | Using Karpenter to scale Kubernetes clusters for a lot of our clients & for internal needs | `@vainkop` | [GlobalDots](https://globaldots.com) |\n| Grafana Labs | Using Karpenter as our Autoscaling tool on EKS | `@paulajulve`, `@logyball` | [Homepage](https://grafana.com/) & [Blog](https://grafana.com/blog/2023/11/09/how-grafana-labs-switched-to-karpenter-to-reduce-costs-and-complexities-in-amazon-eks/) |\n| Hazelcast | Running Hazelcast Cloud workloads on EKS with Karpenter—fast provisioning, intelligent consolidation, and resilience under spiky traffic. | `@atilsensalduz`, `@taylanerden` | [Hazelcast](https://hazelcast.com/) |\n| H2O.ai | Dynamically scaling CPU and GPU nodes for AI workloads  | `@Ophir Zahavi`, `@Asaf Oren` | [H2O.ai](https://h2o.ai/) |\n| HENNGE K.K. | Dynamically scaling production workloads in Tokyo region | `@furqan.habibi`, `@Hans Gunawan` | [HENNGE](https://hennge.com/global/) |\n| Homa | Using Karpenter to manage dynamically big instances and save cost effectively with disruptions | `@afreyermuth98`, `@alexbescond` | [Homa](https://www.homagames.com/) |\n| idealo | Scaling multi-arch IPv6 clusters hosting web and event-driven applications | `@Heiko Rothe` | [Homepage](https://www.idealo.de) |\n| Kaltura | Using karpenter to deliver video to millions of end users | `@Ido Ziv` | [Homepage](https://corp.kaltura.com/) |\n| Livspace | Replacement for cluster autoscaler on production and staging EKS clusters | `@praveen-livspace` | [Homepage](https://www.livspace.com) |\n| Nexxiot | Easier, Safer, Cleaner Global Transportation - Using Karpenter to manage EKS nodes | `@Alex Berger` | [Homepage](https://nexxiot.com/) |\n| OccMundial | Using karpenter to manage our production workloads, using the dynamic scaling according to workload that needs to scale.  | `@parraletz` | [Homepage](https://www.occ.com.mx) |\n| Omaze | Intelligently using Karpenter's autoscaling to power our platforms | `@devopsidiot` | [Homepage](https://www.omaze.com/) |\n| PITS Global Data Recovery Services | Used to manage continuous integration and continuous delivery/deployment workflows. | N/A | [PITS Global Data Recovery Services](https://www.pitsdatarecovery.net/) |\n| PlanetScale | Leveraging Karpenter to dynamically deploy serverless MySQL workloads. | `@jtcunning` | [Homepage](https://www.planetscale.com/) |\n| Postnord | Using Karpenter for Node Lifecycle Management & Autoscaling. | `@dhaval-vithalani`, `@christianOps`, `@sjam11`  | [Postnord](https://www.postnord.com/) |\n| QuestDB | Using Karpenter for the service nodes of the QuestBD Cloud (time-series database). | [questdb slack group](https://slack.questdb.io/) | [QuestDB](https://questdb.io/) |\n| Rapid7 | Using Karpenter across all of our Kubernetes infrastructure for efficient autoscaling, both in terms of speed and cost | `@arobinson`, `@Ross Kirk`, `@Ryan Williams` | [Homepage](https://www.rapid7.com/) |\n| Sendcloud | Using Karpenter to scale our k8s clusters for Europe’s #1 shipping automation platform  | N/A | [Homepage](https://www.sendcloud.com/) |\n| Sentra | Using Karpenter to scale our EKS clusters, running our platform and workflows while maximizing cost-efficiency with minimal operational overhead | `@Roei Jacobovich` | [Homepage](https://sentra.io/) |\n| Sophotech | We rely on Karpenter to keep our clients' Kubernetes clusters fast, efficient, and cost-optimized. It is an irreplaceable part of our infrastructure toolkit, instantly scaling nodes to match demand. Once you use Karpenter, there is no going back. | `@archy-rock3t-cloud` | [Homepage](https://sopho.tech) |\n| SternumIOT | Using Karpenter to efficiently autoscale & manage our EKS clusters with GitOps, optimizing node lifecycle management for both performance and cost-effectiveness across our Kubernetes workloads | `@itayvolo` `@amitde69` | [SternumIOT](https://sternumiot.com/) |\n| Stone Pagamentos | Using Karpenter to do smart sizing of our clusters  | `@fabiano-amaral` | [Stone Pagamentos](https://www.stone.com.br/) |\n| Stytch | Powering the scaling needs of Stytch's authentication and user-management APIs  | `@Elijah Chanakira`, `@Ovadia Harary` | [Homepage](https://www.stytch.com/) |\n| Superbexperience | Using Karpenter to scale the k8s clusters running our Guest Experience Management platform  | `@Wernich Bekker` | [Homepage](https://www.superbexperience.com/) |\n| Target Australia | Using Karpenter to manage (scale, auto update etc) the containerised (EKS) compute that powers much of the Target Online platform | `@gazal-k` | [Target Australia Online Shopping](https://www.target.com.au) |\n| The Scale Factory | Using Karpenter (controllers on EC2/Fargate) to efficiently scale K8s workloads and empowering our customer teams to do the same  | `@marko` | [Homepage](https://www.scalefactory.com) |\n| Tyk Cloud | Scaling workloads for the Cloud Free plan  | `@Artem Hluvchynskyi`, `@gowtham` | [Tyk Cloud](https://tyk.io/cloud/) |\n| VictoriaMetrics Cloud | Managed Time Series Database Services from VictoriaMetrics | `@Max G` | [VictoriaMetrics Cloud](https://victoriametrics.com/products/managed/) |\n| Wehkamp | Using Karpenter to scale the EKS clusters for our e-commerce platforms | `@ChrisV` | [Wehkamp](https://www.wehkamp.nl) & [Wehkamp Techblog](https://medium.com/wehkamp-techblog)|\n| Whoosh | Using Karpenter to scale the EKS clusters for many purposes | `@vainkop` | [Whoosh](https://whoosh.bike) |\n| Next Insurance | Using Karpenter to manage the nodes in all our EKS clusters, including dev and prod, on demand and spots | `@moshebs` | [Homepage](https://www.nextinsurance.com)|\n| Grover Group GmbH | We use Karpenter for efficient and cost effective scaling of our nodes in all of our EKS clusters | `@suraj2410` | [Homepage](https://www.grover.com/de-en) & [Engineering Techblog](https://engineering.grover.com)|\n| Legit Security | We run Karpenter across all our EKS clusters to ensure efficient and cost-effective scaling across our infrastructure | `@Tal Balash`, `@Matan Ryngler` | [Homepage](https://www.legitsecurity.com)|\n| Logz.io | Using Karpenter in all of our EKS clusters for efficient and cost effective scaling of all our K8s workloads | `@pincher95`, `@Samplify` | [Homepage](https://logz.io/)|\n| X3M ads | We have been using Karpenter for (almost) all our workloads since 2023 | `@mreparaz`, `@fmansilla`, `@mrmartinez95` | [Homepage](https://x3mads.com) |\n"
  },
  {
    "path": "CODEOWNERS",
    "content": "# Require approvals from someone in the owner team before merging\n# More information here: https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners\n\n* @aws/karpenter\n"
  },
  {
    "path": "CODE_OF_CONDUCT.md",
    "content": "# Code of Conduct\nThe Karpenter project follows the [CNCF Community Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md).\n"
  },
  {
    "path": "LICENSE",
    "content": "\n                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n"
  },
  {
    "path": "Makefile",
    "content": "CLUSTER_NAME ?= $(shell kubectl config view --minify -o jsonpath='{.clusters[].name}' | rev | cut -d\"/\" -f1 | rev | cut -d\".\" -f1)\n\n## Inject the app version into operator.Version\nLDFLAGS ?= -ldflags=-X=sigs.k8s.io/karpenter/pkg/operator.Version=$(shell git describe --tags --always | cut -d\"v\" -f2)\n\nGOFLAGS += $(LDFLAGS)\nWITH_GOFLAGS = GOFLAGS=\"$(GOFLAGS)\"\n\n## Extra helm options\nCLUSTER_ENDPOINT ?= $(shell kubectl config view --minify -o jsonpath='{.clusters[].cluster.server}')\nAWS_ACCOUNT_ID ?= $(shell aws sts get-caller-identity --query Account --output text)\nKARPENTER_IAM_ROLE_ARN ?= arn:aws:iam::${AWS_ACCOUNT_ID}:role/${CLUSTER_NAME}-karpenter\nHELM_OPTS ?= --set serviceAccount.annotations.eks\\\\.amazonaws\\\\.com/role-arn=${KARPENTER_IAM_ROLE_ARN} \\\n      \t\t--set settings.clusterName=${CLUSTER_NAME} \\\n\t\t\t--set settings.interruptionQueue=${CLUSTER_NAME} \\\n\t\t\t--set controller.resources.requests.cpu=1 \\\n\t\t\t--set controller.resources.requests.memory=1Gi \\\n\t\t\t--set controller.resources.limits.cpu=1 \\\n\t\t\t--set controller.resources.limits.memory=1Gi \\\n\t\t\t--set settings.featureGates.nodeRepair=true \\\n\t\t\t--set settings.featureGates.reservedCapacity=true \\\n\t\t\t--set settings.featureGates.spotToSpotConsolidation=true \\\n\t\t\t--set settings.featureGates.nodeOverlay=true \\\n\t\t\t--set settings.featureGates.staticCapacity=true \\\n\t\t\t--set settings.preferencePolicy=Ignore \\\n\t\t\t--set logLevel=debug \\\n\t\t\t--create-namespace\n\n# CR for local builds of Karpenter\nKARPENTER_NAMESPACE ?= kube-system\nKARPENTER_VERSION ?= $(shell git tag --sort=committerdate | tail -1 | cut -d\"v\" -f2)\nKO_DOCKER_REPO ?= ${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_DEFAULT_REGION}.amazonaws.com/dev\nKOCACHE ?= ~/.ko\n\n# Common Directories\nMOD_DIRS = $(shell find . -path \"./website\" -prune -o -name go.mod -type f -print | xargs dirname)\nKARPENTER_CORE_DIR = $(shell go list -m -f '{{ .Dir }}' sigs.k8s.io/karpenter)\n\n# TEST_SUITE enables you to select a specific test suite directory to run \"make e2etests\" against\nTEST_SUITE ?= \"...\"\nTMPFILE := $(shell mktemp)\n\n# Filename when building the binary controller only\nGOARCH ?= $(shell go env GOARCH)\nBINARY_FILENAME = karpenter-provider-aws-$(GOARCH)\n\nhelp: ## Display help\n\t@awk 'BEGIN {FS = \":.*##\"; printf \"Usage:\\n  make \\033[36m<target>\\033[0m\\n\"} /^[a-zA-Z_0-9-]+:.*?##/ { printf \"  \\033[36m%-15s\\033[0m %s\\n\", $$1, $$2 } /^##@/ { printf \"\\n\\033[1m%s\\033[0m\\n\", substr($$0, 5) } ' $(MAKEFILE_LIST)\n\npresubmit: verify test ## Run all steps in the developer loop\n\nci-test: test coverage ## Runs tests and submits coverage\n\nci-non-test: verify licenses vulncheck ## Runs checks other than tests\n\nrun: ## Run Karpenter controller binary against your local cluster with latest CRD's\n\tkubectl apply -f ./pkg/apis/crds/\n\tSYSTEM_NAMESPACE=${KARPENTER_NAMESPACE} \\\n\t\tKUBERNETES_MIN_VERSION=\"1.19.0-0\" \\\n\t\tDISABLE_LEADER_ELECTION=true \\\n\t\tCLUSTER_NAME=${CLUSTER_NAME} \\\n\t\tINTERRUPTION_QUEUE=${CLUSTER_NAME} \\\n\t\tFEATURE_GATES=\"SpotToSpotConsolidation=true,NodeOverlay=true,StaticCapacity=true\" \\\n\t\tLOG_LEVEL=\"debug\" \\\n\t\tgo run ./cmd/controller/main.go\n\ntest: ## Run tests\n\tgo test ./pkg/... \\\n\t\t-cover -coverprofile=coverage.out -outputdir=. -coverpkg=./... \\\n\t\t--ginkgo.focus=\"${FOCUS}\" \\\n\t\t--ginkgo.randomize-all \\\n\t\t--ginkgo.vv\n\ndeflake: ## Run randomized, racing tests until the test fails to catch flakes\n\tginkgo \\\n\t\t--race \\\n\t\t--focus=\"${FOCUS}\" \\\n\t\t--randomize-all \\\n\t\t--until-it-fails \\\n\t\t-v \\\n\t\t./pkg/...\n\ne2etests: ## Run the e2e suite against your local cluster\n\tcd test && CLUSTER_ENDPOINT=${CLUSTER_ENDPOINT} \\\n\t\tCLUSTER_NAME=${CLUSTER_NAME} \\\n\t\tINTERRUPTION_QUEUE=${CLUSTER_NAME} \\\n\t\tgo test \\\n\t\t-p 1 \\\n\t\t-count 1 \\\n\t\t-timeout 3.25h \\\n\t\t-v \\\n\t\t./suites/$(shell echo $(TEST_SUITE) | tr A-Z a-z)/... \\\n\t\t--ginkgo.focus=\"${FOCUS}\" \\\n\t\t--ginkgo.timeout=3h \\\n\t\t--ginkgo.grace-period=3m \\\n\t\t--ginkgo.vv\n\nupstream-e2etests: tidy download\n\tCLUSTER_NAME=${CLUSTER_NAME} envsubst < $(shell pwd)/test/pkg/environment/aws/default_ec2nodeclass.yaml > ${TMPFILE}\n\tcd $(KARPENTER_CORE_DIR) && go test \\\n\t\t-count 1 \\\n\t\t-timeout 3.25h \\\n\t\t-v \\\n\t\t./test/suites/regression/... \\\n\t\t--ginkgo.focus=\"${FOCUS}\" \\\n\t\t--ginkgo.timeout=3h \\\n\t\t--ginkgo.grace-period=5m \\\n\t\t--ginkgo.vv \\\n\t\t--default-nodeclass=\"$(TMPFILE)\"\\\n\t\t--default-nodepool=\"$(shell pwd)/test/pkg/environment/aws/default_nodepool.yaml\"\n\ne2etests-deflake: ## Run the e2e suite against your local cluster\n\tcd test && CLUSTER_NAME=${CLUSTER_NAME} ginkgo \\\n\t\t--focus=\"${FOCUS}\" \\\n\t\t--timeout=3h \\\n\t\t--grace-period=3m \\\n\t\t--until-it-fails \\\n\t\t--vv \\\n\t\t./suites/$(shell echo $(TEST_SUITE) | tr A-Z a-z) \\\n\nbenchmark:\n\tgo test -tags=test_performance -run=NoTests -bench=. ./...\n\ncoverage:\n\tgo tool cover -html coverage.out -o coverage.html\n\nverify: tidy download ## Verify code. Includes dependencies, linting, formatting, etc\n\tgo generate ./...\n\thack/boilerplate.sh\n\tcp  $(KARPENTER_CORE_DIR)/pkg/apis/crds/* pkg/apis/crds\n\thack/validation/kubelet.sh\n\tbash -c 'source ./hack/validation/requirements.sh && injectDomainRequirementRestrictions \"karpenter.k8s.aws\"'\n\tbash -c 'source ./hack/validation/labels.sh && injectDomainLabelRestrictions \"karpenter.k8s.aws\"'\n\tcp pkg/apis/crds/* charts/karpenter-crd/templates\n\thack/mutation/crd_annotations.sh\n\thack/github/dependabot.sh\n\t$(foreach dir,$(MOD_DIRS),cd $(dir) && golangci-lint run $(newline))\n\t@git diff --quiet ||\\\n\t\t{ echo \"New file modification detected in the Git working tree. Please check in before commit.\"; git --no-pager diff --name-only | uniq | awk '{print \"  - \" $$0}'; \\\n\t\tif [ \"${CI}\" = true ]; then\\\n\t\t\texit 1;\\\n\t\tfi;}\n\t@echo \"Validating codegen/docgen build scripts...\"\n\t@find hack/code hack/docs -name \"*.go\" -type f -print0 | xargs -0 -I {} go build -o /dev/null {}\n\tactionlint -oneline\n\nvulncheck: ## Verify code vulnerabilities\n\t@govulncheck ./pkg/...\n\nlicenses: download ## Verifies dependency licenses\n\t# TODO: remove nodeadm check once license is updated\n\t! go-licenses csv ./... | grep -v -e 'MIT' -e 'Apache-2.0' -e 'BSD-3-Clause' -e 'BSD-2-Clause' -e 'ISC' -e 'MPL-2.0' -e 'github.com/awslabs/amazon-eks-ami/nodeadm'\n\nimage: ## Build the Karpenter controller images using ko build\n\t$(eval CONTROLLER_IMG=$(shell $(WITH_GOFLAGS) KOCACHE=$(KOCACHE) KO_DOCKER_REPO=\"$(KO_DOCKER_REPO)\" ko build --bare github.com/aws/karpenter-provider-aws/cmd/controller))\n\t$(eval IMG_REPOSITORY=$(shell echo $(CONTROLLER_IMG) | cut -d \"@\" -f 1 | cut -d \":\" -f 1))\n\t$(eval IMG_TAG=$(shell echo $(CONTROLLER_IMG) | cut -d \"@\" -f 1 | cut -d \":\" -f 2 -s))\n\t$(eval IMG_DIGEST=$(shell echo $(CONTROLLER_IMG) | cut -d \"@\" -f 2))\n\nbinary: ## Build the Karpenter controller binary using go build\n\tgo build $(GOFLAGS) -o $(BINARY_FILENAME) ./cmd/controller/...\n\napply: verify image ## Deploy the controller from the current state of your git repository into your ~/.kube/config cluster\n\tkubectl apply -f ./pkg/apis/crds/\n\thelm upgrade --install karpenter charts/karpenter --namespace ${KARPENTER_NAMESPACE} \\\n        $(HELM_OPTS) \\\n        --set controller.image.repository=$(IMG_REPOSITORY) \\\n        --set controller.image.tag=$(IMG_TAG) \\\n        --set controller.image.digest=$(IMG_DIGEST)\n\ninstall:  ## Deploy the latest released version into your ~/.kube/config cluster\n\t@echo Upgrading to ${KARPENTER_VERSION}\n\thelm upgrade --install karpenter oci://public.ecr.aws/karpenter/karpenter --version ${KARPENTER_VERSION} --namespace ${KARPENTER_NAMESPACE} \\\n\t\t$(HELM_OPTS)\n\ndelete: ## Delete the controller from your ~/.kube/config cluster\n\thelm uninstall karpenter --namespace ${KARPENTER_NAMESPACE}\n\ndocgen: ## Generate docs\n\tKARPENTER_CORE_DIR=$(KARPENTER_CORE_DIR) $(WITH_GOFLAGS) ./hack/docgen.sh\n\ncodegen: ## Auto generate files based on AWS APIs response\n\t$(WITH_GOFLAGS) ./hack/codegen.sh\n\nstable-release-pr: ## Generate PR for stable release\n\t$(WITH_GOFLAGS) ./hack/release/stable-pr.sh\n\nsnapshot: ## Builds and publishes snapshot release\n\t$(WITH_GOFLAGS) ./hack/release/snapshot.sh\n\nrelease: ## Builds and publishes stable release\n\t$(WITH_GOFLAGS) ./hack/release/release.sh\n\nprepare-website: ## prepare the website for release\n\t./hack/release/prepare-website.sh\n\ntoolchain: ## Install developer toolchain\n\t./hack/toolchain.sh\n\nissues: ## Run GitHub issue analysis scripts\n\tpip install -r ./hack/github/requirements.txt\n\t@echo \"Set GH_TOKEN env variable to avoid being rate limited by Github\"\n\t./hack/github/feature_request_reactions.py > \"karpenter-feature-requests-$(shell date +\"%Y-%m-%d\").csv\"\n\t./hack/github/label_issue_count.py > \"karpenter-labels-$(shell date +\"%Y-%m-%d\").csv\"\n\nwebsite: ## Serve the docs website locally\n\tcd website && npm install && hugo mod tidy && hugo server\n\ntidy: ## Recursively \"go mod tidy\" on all directories where go.mod exists\n\t$(foreach dir,$(MOD_DIRS),cd $(dir) && go mod tidy $(newline))\n\ndownload: ## Recursively \"go mod download\" on all directories where go.mod exists\n\t$(foreach dir,$(MOD_DIRS),cd $(dir) && go mod download $(newline))\n\nupdate-karpenter: ## Update kubernetes-sigs/karpenter to latest\n\tgo get -u sigs.k8s.io/karpenter@HEAD\n\tgo mod tidy\n\n.PHONY: deploy-cfn\ndeploy-cfn: ## Deploys the cloudformation stack defined in the docs preview directory\n\taws cloudformation deploy \\\n\t\t--stack-name \"Karpenter-${CLUSTER_NAME}\" \\\n\t\t--template-file \"./website/content/en/preview/getting-started/getting-started-with-karpenter/cloudformation.yaml\" \\\n\t\t--capabilities CAPABILITY_NAMED_IAM \\\n\t\t--parameter-overrides \"ClusterName=${CLUSTER_NAME}\"\n\n\n.PHONY: help presubmit ci-test ci-non-test run test deflake e2etests e2etests-deflake benchmark coverage verify vulncheck licenses image apply install delete docgen codegen stable-release-pr snapshot release prepare-website toolchain issues website tidy download update-karpenter\n\ndefine newline\n\n\nendef\n"
  },
  {
    "path": "NOTICE",
    "content": "Karpenter\nCopyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n"
  },
  {
    "path": "README.md",
    "content": "[![CI](https://github.com/aws/karpenter-provider-aws/actions/workflows/ci.yaml/badge.svg?branch=main)](https://github.com/aws/karpenter/actions/workflows/ci.yaml)\n![GitHub stars](https://img.shields.io/github/stars/aws/karpenter-provider-aws)\n![GitHub forks](https://img.shields.io/github/forks/aws/karpenter-provider-aws)\n[![GitHub License](https://img.shields.io/badge/License-Apache%202.0-ff69b4.svg)](https://github.com/aws/karpenter-provider-aws/blob/main/LICENSE)\n[![Go Report Card](https://goreportcard.com/badge/github.com/aws/karpenter-provider-aws)](https://goreportcard.com/report/github.com/aws/karpenter)\n[![Coverage Status](https://coveralls.io/repos/github/aws/karpenter-provider-aws/badge.svg?branch=main)](https://coveralls.io/github/aws/karpenter?branch=main)\n[![contributions welcome](https://img.shields.io/badge/contributions-welcome-brightgreen.svg?style=flat)](https://github.com/aws/karpenter-provider-aws/issues)\n\n![](website/static/banner.png)\n\nKarpenter is an open-source node provisioning project built for Kubernetes.\nKarpenter improves the efficiency and cost of running workloads on Kubernetes clusters by:\n\n* **Watching** for pods that the Kubernetes scheduler has marked as unschedulable\n* **Evaluating** scheduling constraints (resource requests, nodeselectors, affinities, tolerations, and topology spread constraints) requested by the pods\n* **Provisioning** nodes that meet the requirements of the pods\n* **Removing** the nodes when the nodes are no longer needed\n\nCome discuss Karpenter in the [#karpenter](https://kubernetes.slack.com/archives/C02SFFZSA2K) channel, in the [Kubernetes slack](https://slack.k8s.io/) or join the [Karpenter working group](https://karpenter.sh/docs/contributing/community-meetings/#working-group-meetings) bi-weekly calls. If you want to contribute to the Karpenter project, please refer to the Karpenter docs.\n\nCheck out the [Docs](https://karpenter.sh/docs/) to learn more.\n\n## Talks\n- 03/19/2024 [Harnessing Karpenter: Transforming Kubernetes Clusters with Argo Workflows](https://www.youtube.com/watch?v=rq57liGu0H4)\n- 12/04/2023 [AWS re:Invent 2023 - Harness the power of Karpenter to scale, optimize & upgrade Kubernetes](https://www.youtube.com/watch?v=lkg_9ETHeks)\n- 09/08/2022 [Workload Consolidation with Karpenter](https://youtu.be/BnksdJ3oOEs)\n- 05/19/2022 [Scaling K8s Nodes Without Breaking the Bank or Your Sanity](https://www.youtube.com/watch?v=UBb8wbfSc34)\n- 03/25/2022 [Karpenter @ AWS Community Day 2022](https://youtu.be/sxDtmzbNHwE?t=3931)\n- 12/20/2021 [How To Auto-Scale Kubernetes Clusters With Karpenter](https://youtu.be/C-2v7HT-uSA)\n- 11/30/2021 [Karpenter vs Kubernetes Cluster Autoscaler](https://youtu.be/3QsVRHVdOnM)\n- 11/19/2021 [Karpenter @ Container Day](https://youtu.be/qxWJRUF6JJc)\n- 05/14/2021 [Groupless Autoscaling with Karpenter @ Kubecon](https://www.youtube.com/watch?v=43g8uPohTgc)\n- 05/04/2021 [Karpenter @ Container Day](https://youtu.be/MZ-4HzOC_ac?t=7137)\n"
  },
  {
    "path": "THIRD_PARTY_LICENSES",
    "content": "** go.uber.org/zap; v1.24.0 ---\n\n\nCopyright (c) 2016-2017 Uber Technologies, Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n------\n** sigs.k8s.io/json; v0.0.0-20220713155537-f223a00ba0e2 ---\n\n\nFiles other than internal/golang/* licensed under:\n\n\n                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"{}\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright {yyyy} {name of copyright owner}\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n\n\n------------------\n\ninternal/golang/* files licensed under:\n\n\nCopyright (c) 2009 The Go Authors. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n   * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n   * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n   * Neither the name of Google Inc. nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n------\n** github.com/aws/aws-sdk-go; v1.44.154 ---\n\n\nAWS SDK for Go\nCopyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved.\nCopyright 2014-2015 Stripe, Inc.\n\nApache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n------\n** github.com/aws/karpenter-core; v0.22.2-0.20230124174026-a2d4c9b50fdb ---\n\n\nKarpenter\nCopyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n\nApache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n------\n** github.com/grpc-ecosystem/grpc-gateway; v1.16.0 ---\n\n\nCopyright (c) 2015, Gengo, Inc.\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright notice,\n      this list of conditions and the following disclaimer.\n\n    * Redistributions in binary form must reproduce the above copyright notice,\n      this list of conditions and the following disclaimer in the documentation\n      and/or other materials provided with the distribution.\n\n    * Neither the name of Gengo, Inc. nor the names of its\n      contributors may be used to endorse or promote products derived from this\n      software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n------\n** github.com/kelseyhightower/envconfig; v1.4.0 ---\n\n\nCopyright (c) 2013 Kelsey Hightower\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\nof the Software, and to permit persons to whom the Software is furnished to do\nso, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n------\n** github.com/matttproud/golang_protobuf_extensions; v1.0.2-0.20181231171920-c182affec369 ---\n\n\nCopyright 2012 Matt T. Proud (matt.proud@gmail.com)\n\nApache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"{}\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright {yyyy} {name of copyright owner}\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n------\n** github.com/pkg/errors; v0.9.1 ---\n\n\nCopyright (c) 2015, Dave Cheney <dave@cheney.net>\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n* Redistributions of source code must retain the above copyright notice, this\n  list of conditions and the following disclaimer.\n\n* Redistributions in binary form must reproduce the above copyright notice,\n  this list of conditions and the following disclaimer in the documentation\n  and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\nSERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\nOR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n------\n** github.com/munnerz/goautoneg; v0.0.0-20191010083416-a7dc8b61c822 ---\n\n\nCopyright (c) 2011, Open Knowledge Foundation Ltd.\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n    Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n    Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in\n    the documentation and/or other materials provided with the\n    distribution.\n\n    Neither the name of the Open Knowledge Foundation Ltd. nor the\n    names of its contributors may be used to endorse or promote\n    products derived from this software without specific prior written\n    permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nHOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n------\n** github.com/PuerkitoBio/purell; v1.1.1 ---\n\n\nCopyright (c) 2012, Martin Angers\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\n\n* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\n\n* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\n\n* Neither the name of the author nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n------\n** github.com/PuerkitoBio/urlesc; v0.0.0-20170810143723-de5bf2ad4578 ---\n\n\nCopyright (c) 2012 The Go Authors. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n   * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n   * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n   * Neither the name of Google Inc. nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n------\n** github.com/deckarep/golang-set; v1.8.0 ---\n\n\nOpen Source Initiative OSI - The MIT License (MIT):Licensing\n\nThe MIT License (MIT)\nCopyright (c) 2013 Ralph Caraveo (deckarep@gmail.com)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\nof the Software, and to permit persons to whom the Software is furnished to do\nso, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n------\n** github.com/evanphx/json-patch/v5; v5.6.0 ---\n\n\nCopyright (c) 2014, Evan Phoenix\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without \nmodification, are permitted provided that the following conditions are met:\n\n* Redistributions of source code must retain the above copyright notice, this\n  list of conditions and the following disclaimer.\n* Redistributions in binary form must reproduce the above copyright notice,\n  this list of conditions and the following disclaimer in the documentation\n  and/or other materials provided with the distribution.\n* Neither the name of the Evan Phoenix nor the names of its contributors \n  may be used to endorse or promote products derived from this software \n  without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" \nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE \nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE \nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE \nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL \nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR \nSERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER \nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, \nOR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE \nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n------\n** github.com/go-playground/locales; v0.14.0 ---\n** github.com/go-playground/universal-translator; v0.18.0 ---\n\n\nThe MIT License (MIT)\n\nCopyright (c) 2016 Go Playground\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n------\n** github.com/go-playground/validator/v10; v10.11.1 ---\n\n\nThe MIT License (MIT)\n\nCopyright (c) 2015 Dean Karn\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n------\n** github.com/fsnotify/fsnotify; v1.5.4 ---\n\n\nCopyright (c) 2012 The Go Authors. All rights reserved.\nCopyright (c) 2012-2019 fsnotify Authors. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n   * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n   * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n   * Neither the name of Google Inc. nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n------\n** github.com/go-logr/logr; v1.2.3 ---\n** github.com/go-logr/zapr; v1.2.3 ---\n** gomodules.xyz/jsonpatch/v2; v2.2.0 ---\n** sigs.k8s.io/controller-runtime; v0.13.0 ---\n** sigs.k8s.io/structured-merge-diff/v4; v4.2.3 ---\n\n\nApache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"{}\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright {yyyy} {name of copyright owner}\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n------\n** github.com/mailru/easyjson; v0.7.7 ---\n\n\nCopyright (c) 2016 Mail.Ru Group\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n------\n** github.com/mitchellh/hashstructure/v2; v2.0.2 ---\n\n\nThe MIT License (MIT)\n\nCopyright (c) 2016 Mitchell Hashimoto\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n------\n** google.golang.org/api; v0.61.0 ---\n\n\nCopyright (c) 2011 Google Inc. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n   * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n   * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n   * Neither the name of Google Inc. nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n------\n** gopkg.in/inf.v0; v0.9.1 ---\n\n\nCopyright (c) 2012 Péter Surányi. Portions Copyright (c) 2009 The Go\nAuthors. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n   * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n   * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n   * Neither the name of Google Inc. nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n------\n** github.com/spf13/pflag; v1.0.5 ---\n\n\nCopyright (c) 2012 Alex Ogier. All rights reserved.\nCopyright (c) 2012 The Go Authors. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n   * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n   * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n   * Neither the name of Google Inc. nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n------\n** gopkg.in/yaml.v3; v3.0.1 ---\n\n\nCopyright 2011-2016 Canonical Ltd.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n\nThis project is covered by two different licenses: MIT and Apache.\n\n#### MIT License ####\n\nThe following files were ported to Go from C files of libyaml, and thus\nare still covered by their original MIT license, with the additional\ncopyright staring in 2011 when the project was ported over:\n\n    apic.go emitterc.go parserc.go readerc.go scannerc.go\n    writerc.go yamlh.go yamlprivateh.go\n\nCopyright (c) 2006-2010 Kirill Simonov\nCopyright (c) 2006-2011 Kirill Simonov\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\nof the Software, and to permit persons to whom the Software is furnished to do\nso, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n### Apache License ###\n\nAll the remaining project files are covered by the Apache license:\n\nCopyright (c) 2011-2019 Canonical Ltd\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n------\n** github.com/gogo/protobuf; v1.3.2 ---\n\n\nCopyright (c) 2013, The GoGo Authors. All rights reserved.\n\nProtocol Buffers for Go with Gadgets\n\nGo support for Protocol Buffers - Google's data interchange format\n\nCopyright 2010 The Go Authors.  All rights reserved.\nhttps://github.com/golang/protobuf\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n    * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n    * Neither the name of Google Inc. nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n------\n** github.com/imdario/mergo; v0.3.13 ---\n\n\nCopyright (c) 2013 Dario Castañé. All rights reserved.\nCopyright (c) 2012 The Go Authors. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n   * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n   * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n   * Neither the name of Google Inc. nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n------\n** github.com/jmespath/go-jmespath; v0.4.0 ---\n\n\nCopyright 2015 James Saryerwinnie\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n------\n** github.com/leodido/go-urn; v1.2.1 ---\n\n\nMIT License\n\nCopyright (c) 2018 Leonardo Di Donato\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n------\n** github.com/prometheus/common; v0.37.0 ---\n\n\nCommon libraries shared by Prometheus Go components.\nCopyright 2015 The Prometheus Authors\n\nThis product includes software developed at\nSoundCloud Ltd. (http://soundcloud.com/).\n\nApache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n------\n** go.uber.org/multierr; v1.9.0 ---\n\n\nCopyright (c) 2017-2021 Uber Technologies, Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n------\n** github.com/beorn7/perks; v1.0.1 ---\n\n\nCopyright (C) 2013 Blake Mizerany\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n------\n** github.com/hashicorp/golang-lru; v0.5.4 ---\n\n\nMozilla Public License, version 2.0\n\n1. Definitions\n\n1.1. \"Contributor\"\n\n     means each individual or legal entity that creates, contributes to the\n     creation of, or owns Covered Software.\n\n1.2. \"Contributor Version\"\n\n     means the combination of the Contributions of others (if any) used by a\n     Contributor and that particular Contributor's Contribution.\n\n1.3. \"Contribution\"\n\n     means Covered Software of a particular Contributor.\n\n1.4. \"Covered Software\"\n\n     means Source Code Form to which the initial Contributor has attached the\n     notice in Exhibit A, the Executable Form of such Source Code Form, and\n     Modifications of such Source Code Form, in each case including portions\n     thereof.\n\n1.5. \"Incompatible With Secondary Licenses\"\n     means\n\n     a. that the initial Contributor has attached the notice described in\n        Exhibit B to the Covered Software; or\n\n     b. that the Covered Software was made available under the terms of\n        version 1.1 or earlier of the License, but not also under the terms of\n        a Secondary License.\n\n1.6. \"Executable Form\"\n\n     means any form of the work other than Source Code Form.\n\n1.7. \"Larger Work\"\n\n     means a work that combines Covered Software with other material, in a\n     separate file or files, that is not Covered Software.\n\n1.8. \"License\"\n\n     means this document.\n\n1.9. \"Licensable\"\n\n     means having the right to grant, to the maximum extent possible, whether\n     at the time of the initial grant or subsequently, any and all of the\n     rights conveyed by this License.\n\n1.10. \"Modifications\"\n\n     means any of the following:\n\n     a. any file in Source Code Form that results from an addition to,\n        deletion from, or modification of the contents of Covered Software; or\n\n     b. any new file in Source Code Form that contains any Covered Software.\n\n1.11. \"Patent Claims\" of a Contributor\n\n      means any patent claim(s), including without limitation, method,\n      process, and apparatus claims, in any patent Licensable by such\n      Contributor that would be infringed, but for the grant of the License,\n      by the making, using, selling, offering for sale, having made, import,\n      or transfer of either its Contributions or its Contributor Version.\n\n1.12. \"Secondary License\"\n\n      means either the GNU General Public License, Version 2.0, the GNU Lesser\n      General Public License, Version 2.1, the GNU Affero General Public\n      License, Version 3.0, or any later versions of those licenses.\n\n1.13. \"Source Code Form\"\n\n      means the form of the work preferred for making modifications.\n\n1.14. \"You\" (or \"Your\")\n\n      means an individual or a legal entity exercising rights under this\n      License. For legal entities, \"You\" includes any entity that controls, is\n      controlled by, or is under common control with You. For purposes of this\n      definition, \"control\" means (a) the power, direct or indirect, to cause\n      the direction or management of such entity, whether by contract or\n      otherwise, or (b) ownership of more than fifty percent (50%) of the\n      outstanding shares or beneficial ownership of such entity.\n\n\n2. License Grants and Conditions\n\n2.1. Grants\n\n     Each Contributor hereby grants You a world-wide, royalty-free,\n     non-exclusive license:\n\n     a. under intellectual property rights (other than patent or trademark)\n        Licensable by such Contributor to use, reproduce, make available,\n        modify, display, perform, distribute, and otherwise exploit its\n        Contributions, either on an unmodified basis, with Modifications, or\n        as part of a Larger Work; and\n\n     b. under Patent Claims of such Contributor to make, use, sell, offer for\n        sale, have made, import, and otherwise transfer either its\n        Contributions or its Contributor Version.\n\n2.2. Effective Date\n\n     The licenses granted in Section 2.1 with respect to any Contribution\n     become effective for each Contribution on the date the Contributor first\n     distributes such Contribution.\n\n2.3. Limitations on Grant Scope\n\n     The licenses granted in this Section 2 are the only rights granted under\n     this License. No additional rights or licenses will be implied from the\n     distribution or licensing of Covered Software under this License.\n     Notwithstanding Section 2.1(b) above, no patent license is granted by a\n     Contributor:\n\n     a. for any code that a Contributor has removed from Covered Software; or\n\n     b. for infringements caused by: (i) Your and any other third party's\n        modifications of Covered Software, or (ii) the combination of its\n        Contributions with other software (except as part of its Contributor\n        Version); or\n\n     c. under Patent Claims infringed by Covered Software in the absence of\n        its Contributions.\n\n     This License does not grant any rights in the trademarks, service marks,\n     or logos of any Contributor (except as may be necessary to comply with\n     the notice requirements in Section 3.4).\n\n2.4. Subsequent Licenses\n\n     No Contributor makes additional grants as a result of Your choice to\n     distribute the Covered Software under a subsequent version of this\n     License (see Section 10.2) or under the terms of a Secondary License (if\n     permitted under the terms of Section 3.3).\n\n2.5. Representation\n\n     Each Contributor represents that the Contributor believes its\n     Contributions are its original creation(s) or it has sufficient rights to\n     grant the rights to its Contributions conveyed by this License.\n\n2.6. Fair Use\n\n     This License is not intended to limit any rights You have under\n     applicable copyright doctrines of fair use, fair dealing, or other\n     equivalents.\n\n2.7. Conditions\n\n     Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in\n     Section 2.1.\n\n\n3. Responsibilities\n\n3.1. Distribution of Source Form\n\n     All distribution of Covered Software in Source Code Form, including any\n     Modifications that You create or to which You contribute, must be under\n     the terms of this License. You must inform recipients that the Source\n     Code Form of the Covered Software is governed by the terms of this\n     License, and how they can obtain a copy of this License. You may not\n     attempt to alter or restrict the recipients' rights in the Source Code\n     Form.\n\n3.2. Distribution of Executable Form\n\n     If You distribute Covered Software in Executable Form then:\n\n     a. such Covered Software must also be made available in Source Code Form,\n        as described in Section 3.1, and You must inform recipients of the\n        Executable Form how they can obtain a copy of such Source Code Form by\n        reasonable means in a timely manner, at a charge no more than the cost\n        of distribution to the recipient; and\n\n     b. You may distribute such Executable Form under the terms of this\n        License, or sublicense it under different terms, provided that the\n        license for the Executable Form does not attempt to limit or alter the\n        recipients' rights in the Source Code Form under this License.\n\n3.3. Distribution of a Larger Work\n\n     You may create and distribute a Larger Work under terms of Your choice,\n     provided that You also comply with the requirements of this License for\n     the Covered Software. If the Larger Work is a combination of Covered\n     Software with a work governed by one or more Secondary Licenses, and the\n     Covered Software is not Incompatible With Secondary Licenses, this\n     License permits You to additionally distribute such Covered Software\n     under the terms of such Secondary License(s), so that the recipient of\n     the Larger Work may, at their option, further distribute the Covered\n     Software under the terms of either this License or such Secondary\n     License(s).\n\n3.4. Notices\n\n     You may not remove or alter the substance of any license notices\n     (including copyright notices, patent notices, disclaimers of warranty, or\n     limitations of liability) contained within the Source Code Form of the\n     Covered Software, except that You may alter any license notices to the\n     extent required to remedy known factual inaccuracies.\n\n3.5. Application of Additional Terms\n\n     You may choose to offer, and to charge a fee for, warranty, support,\n     indemnity or liability obligations to one or more recipients of Covered\n     Software. However, You may do so only on Your own behalf, and not on\n     behalf of any Contributor. You must make it absolutely clear that any\n     such warranty, support, indemnity, or liability obligation is offered by\n     You alone, and You hereby agree to indemnify every Contributor for any\n     liability incurred by such Contributor as a result of warranty, support,\n     indemnity or liability terms You offer. You may include additional\n     disclaimers of warranty and limitations of liability specific to any\n     jurisdiction.\n\n4. Inability to Comply Due to Statute or Regulation\n\n   If it is impossible for You to comply with any of the terms of this License\n   with respect to some or all of the Covered Software due to statute,\n   judicial order, or regulation then You must: (a) comply with the terms of\n   this License to the maximum extent possible; and (b) describe the\n   limitations and the code they affect. Such description must be placed in a\n   text file included with all distributions of the Covered Software under\n   this License. Except to the extent prohibited by statute or regulation,\n   such description must be sufficiently detailed for a recipient of ordinary\n   skill to be able to understand it.\n\n5. Termination\n\n5.1. The rights granted under this License will terminate automatically if You\n     fail to comply with any of its terms. However, if You become compliant,\n     then the rights granted under this License from a particular Contributor\n     are reinstated (a) provisionally, unless and until such Contributor\n     explicitly and finally terminates Your grants, and (b) on an ongoing\n     basis, if such Contributor fails to notify You of the non-compliance by\n     some reasonable means prior to 60 days after You have come back into\n     compliance. Moreover, Your grants from a particular Contributor are\n     reinstated on an ongoing basis if such Contributor notifies You of the\n     non-compliance by some reasonable means, this is the first time You have\n     received notice of non-compliance with this License from such\n     Contributor, and You become compliant prior to 30 days after Your receipt\n     of the notice.\n\n5.2. If You initiate litigation against any entity by asserting a patent\n     infringement claim (excluding declaratory judgment actions,\n     counter-claims, and cross-claims) alleging that a Contributor Version\n     directly or indirectly infringes any patent, then the rights granted to\n     You by any and all Contributors for the Covered Software under Section\n     2.1 of this License shall terminate.\n\n5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user\n     license agreements (excluding distributors and resellers) which have been\n     validly granted by You or Your distributors under this License prior to\n     termination shall survive termination.\n\n6. Disclaimer of Warranty\n\n   Covered Software is provided under this License on an \"as is\" basis,\n   without warranty of any kind, either expressed, implied, or statutory,\n   including, without limitation, warranties that the Covered Software is free\n   of defects, merchantable, fit for a particular purpose or non-infringing.\n   The entire risk as to the quality and performance of the Covered Software\n   is with You. Should any Covered Software prove defective in any respect,\n   You (not any Contributor) assume the cost of any necessary servicing,\n   repair, or correction. This disclaimer of warranty constitutes an essential\n   part of this License. No use of  any Covered Software is authorized under\n   this License except under this disclaimer.\n\n7. Limitation of Liability\n\n   Under no circumstances and under no legal theory, whether tort (including\n   negligence), contract, or otherwise, shall any Contributor, or anyone who\n   distributes Covered Software as permitted above, be liable to You for any\n   direct, indirect, special, incidental, or consequential damages of any\n   character including, without limitation, damages for lost profits, loss of\n   goodwill, work stoppage, computer failure or malfunction, or any and all\n   other commercial damages or losses, even if such party shall have been\n   informed of the possibility of such damages. This limitation of liability\n   shall not apply to liability for death or personal injury resulting from\n   such party's negligence to the extent applicable law prohibits such\n   limitation. Some jurisdictions do not allow the exclusion or limitation of\n   incidental or consequential damages, so this exclusion and limitation may\n   not apply to You.\n\n8. Litigation\n\n   Any litigation relating to this License may be brought only in the courts\n   of a jurisdiction where the defendant maintains its principal place of\n   business and such litigation shall be governed by laws of that\n   jurisdiction, without reference to its conflict-of-law provisions. Nothing\n   in this Section shall prevent a party's ability to bring cross-claims or\n   counter-claims.\n\n9. Miscellaneous\n\n   This License represents the complete agreement concerning the subject\n   matter hereof. If any provision of this License is held to be\n   unenforceable, such provision shall be reformed only to the extent\n   necessary to make it enforceable. Any law or regulation which provides that\n   the language of a contract shall be construed against the drafter shall not\n   be used to construe this License against a Contributor.\n\n\n10. Versions of the License\n\n10.1. New Versions\n\n      Mozilla Foundation is the license steward. Except as provided in Section\n      10.3, no one other than the license steward has the right to modify or\n      publish new versions of this License. Each version will be given a\n      distinguishing version number.\n\n10.2. Effect of New Versions\n\n      You may distribute the Covered Software under the terms of the version\n      of the License under which You originally received the Covered Software,\n      or under the terms of any subsequent version published by the license\n      steward.\n\n10.3. Modified Versions\n\n      If you create software not governed by this License, and you want to\n      create a new license for such software, you may create and use a\n      modified version of this License if you rename the license and remove\n      any references to the name of the license steward (except to note that\n      such modified license differs from this License).\n\n10.4. Distributing Source Code Form that is Incompatible With Secondary\n      Licenses If You choose to distribute Source Code Form that is\n      Incompatible With Secondary Licenses under the terms of this version of\n      the License, the notice described in Exhibit B of this License must be\n      attached.\n\nExhibit A - Source Code Form License Notice\n\n      This Source Code Form is subject to the\n      terms of the Mozilla Public License, v.\n      2.0. If a copy of the MPL was not\n      distributed with this file, You can\n      obtain one at\n      http://mozilla.org/MPL/2.0/.\n\nIf it is not possible or desirable to put the notice in a particular file,\nthen You may include the notice in a location (such as a LICENSE file in a\nrelevant directory) where a recipient would be likely to look for such a\nnotice.\n\nYou may add additional accurate notices of copyright ownership.\n\nExhibit B - \"Incompatible With Secondary Licenses\" Notice\n\n      This Source Code Form is \"Incompatible\n      With Secondary Licenses\", as defined by\n      the Mozilla Public License, v. 2.0.\n------\n** go.uber.org/atomic; v1.9.0 ---\n\n\nCopyright (c) 2016 Uber Technologies, Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n------\n** gopkg.in/yaml.v2; v2.4.0 ---\n\n\nCopyright 2011-2016 Canonical Ltd.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n\nApache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"{}\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright {yyyy} {name of copyright owner}\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n\nThe following files were ported to Go from C files of libyaml, and thus\nare still covered by their original copyright and license:\n\n    apic.go\n    emitterc.go\n    parserc.go\n    readerc.go\n    scannerc.go\n    writerc.go\n    yamlh.go\n    yamlprivateh.go\n\nCopyright (c) 2006 Kirill Simonov\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\nof the Software, and to permit persons to whom the Software is furnished to do\nso, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n------\n** github.com/golang/protobuf; v1.5.2 ---\n\n\nCopyright 2010 The Go Authors.  All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n    * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n    * Neither the name of Google Inc. nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n------\n** github.com/json-iterator/go; v1.1.12 ---\n\n\nMIT License\n\nCopyright (c) 2016 json-iterator\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n------\n** github.com/cespare/xxhash/v2; v2.1.2 ---\n\n\nCopyright (c) 2016 Caleb Spare\n\nMIT License\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n------\n** github.com/prometheus/statsd_exporter; v0.21.0 ---\n\n\nStatsD-to-Prometheus exporter\nCopyright 2013-2015 The Prometheus Authors\n\nThis product includes software developed at\nSoundCloud Ltd. (http://soundcloud.com/).\n\nApache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n------\n** github.com/google/go-cmp; v0.5.9 ---\n\n\nCopyright (c) 2017 The Go Authors. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n   * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n   * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n   * Neither the name of Google Inc. nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n------\n** google.golang.org/protobuf; v1.28.1 ---\n\n\nCopyright (c) 2018 The Go Authors. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n   * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n   * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n   * Neither the name of Google Inc. nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n------\n** github.com/blendle/zapdriver; v1.3.1 ---\n\n\nISC License\n\nCopyright (c) Blendle\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted, provided that the above\ncopyright notice and this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\nWITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\nANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\nACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\nOR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n------\n** github.com/go-kit/log; v0.2.0 ---\n\n\nMIT License\n\nCopyright (c) 2021 Go kit\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n------\n** go.uber.org/automaxprocs; v1.4.0 ---\n\n\nCopyright (c) 2017 Uber Technologies, Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n------\n** github.com/davecgh/go-spew; v1.1.1 ---\n\n\nISC License\n\nCopyright (c) 2012-2016 Dave Collins <dave@davec.name>\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted, provided that the above\ncopyright notice and this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\nWITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\nANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\nACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\nOR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n------\n** github.com/go-logfmt/logfmt; v0.5.1 ---\n\n\nThe MIT License (MIT)\n\nCopyright (c) 2015 go-logfmt\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n------\n** contrib.go.opencensus.io/exporter/ocagent; v0.7.1-0.20200907061046-05415f1de66d ---\n** contrib.go.opencensus.io/exporter/prometheus; v0.4.0 ---\n** github.com/census-instrumentation/opencensus-proto; v0.3.0 ---\n** github.com/go-openapi/jsonpointer; v0.19.5 ---\n** github.com/go-openapi/jsonreference; v0.19.5 ---\n** github.com/go-openapi/swag; v0.19.15 ---\n** github.com/google/gnostic; v0.5.7-v3refs ---\n** github.com/google/gofuzz; v1.2.0 ---\n** github.com/modern-go/concurrent; v0.0.0-20180306012644-bacd9c7ef1dd ---\n** github.com/modern-go/reflect2; v1.0.2 ---\n** go.opencensus.io; v0.23.0 ---\n** google.golang.org/genproto; v0.0.0-20220502173005-c8bf987b8c21 ---\n** k8s.io/api; v0.25.4 ---\n** k8s.io/apiextensions-apiserver; v0.25.4 ---\n** k8s.io/apimachinery; v0.25.4 ---\n** k8s.io/client-go; v0.25.4 ---\n** k8s.io/component-base; v0.25.4 ---\n** k8s.io/kube-openapi; v0.0.0-20220803162953-67bda5d908f1 ---\n** k8s.io/utils; v0.0.0-20221108210102-8e77b1f39fe2 ---\n** knative.dev/pkg; v0.0.0-20221123154742-05b694ec4d3a ---\n\n\nApache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n------\n** github.com/avast/retry-go; v3.0.0+incompatible ---\n\n\nMIT License\n\nCopyright (c) 2017 Avast\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n------\n** github.com/emicklei/go-restful/v3; v3.8.0 ---\n\n\nCopyright (c) 2012,2013 Ernest Micklei\n\nMIT License\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n------\n** github.com/google/uuid; v1.3.0 ---\n\n\nCopyright (c) 2009,2014 Google Inc. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n   * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n   * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n   * Neither the name of Google Inc. nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n------\n** sigs.k8s.io/yaml; v1.3.0 ---\n\n\nThe MIT License (MIT)\n\nCopyright (c) 2014 Sam Ghods\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n\nCopyright (c) 2012 The Go Authors. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n   * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n   * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n   * Neither the name of Google Inc. nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n------\n** github.com/patrickmn/go-cache; v2.1.0+incompatible ---\n\n\nCopyright (c) 2012-2017 Patrick Mylund Nielsen and the go-cache contributors\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n------\n** github.com/pelletier/go-toml/v2; v2.0.6 ---\n\n\nThe MIT License (MIT)\n\nCopyright (c) 2013 - 2022 Thomas Pelletier, Eric Anderton\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n------\n** github.com/blang/semver/v4; v4.0.0 ---\n\n\nThe MIT License\n\nCopyright (c) 2014 Benedikt Lang <github at benediktlang.de>\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n------\n** github.com/prometheus/client_model; v0.3.0 ---\n\n\nData model artifacts for Prometheus.\nCopyright 2012-2015 The Prometheus Authors\n\nThis product includes software developed at\nSoundCloud Ltd. (http://soundcloud.com/).\n\nApache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n------\n** github.com/golang/groupcache; v0.0.0-20210331224755-41bb18bfe9da ---\n** k8s.io/klog/v2; v2.80.2-0.20221028030830-9ae4992afb54 ---\n\n\nApache License\nVersion 2.0, January 2004\nhttp://www.apache.org/licenses/\n\nTERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n1. Definitions.\n\n\"License\" shall mean the terms and conditions for use, reproduction, and\ndistribution as defined by Sections 1 through 9 of this document.\n\n\"Licensor\" shall mean the copyright owner or entity authorized by the copyright\nowner that is granting the License.\n\n\"Legal Entity\" shall mean the union of the acting entity and all other entities\nthat control, are controlled by, or are under common control with that entity.\nFor the purposes of this definition, \"control\" means (i) the power, direct or\nindirect, to cause the direction or management of such entity, whether by\ncontract or otherwise, or (ii) ownership of fifty percent (50%) or more of the\noutstanding shares, or (iii) beneficial ownership of such entity.\n\n\"You\" (or \"Your\") shall mean an individual or Legal Entity exercising\npermissions granted by this License.\n\n\"Source\" form shall mean the preferred form for making modifications, including\nbut not limited to software source code, documentation source, and configuration\nfiles.\n\n\"Object\" form shall mean any form resulting from mechanical transformation or\ntranslation of a Source form, including but not limited to compiled object code,\ngenerated documentation, and conversions to other media types.\n\n\"Work\" shall mean the work of authorship, whether in Source or Object form, made\navailable under the License, as indicated by a copyright notice that is included\nin or attached to the work (an example is provided in the Appendix below).\n\n\"Derivative Works\" shall mean any work, whether in Source or Object form, that\nis based on (or derived from) the Work and for which the editorial revisions,\nannotations, elaborations, or other modifications represent, as a whole, an\noriginal work of authorship. For the purposes of this License, Derivative Works\nshall not include works that remain separable from, or merely link (or bind by\nname) to the interfaces of, the Work and Derivative Works thereof.\n\n\"Contribution\" shall mean any work of authorship, including the original version\nof the Work and any modifications or additions to that Work or Derivative Works\nthereof, that is intentionally submitted to Licensor for inclusion in the Work\nby the copyright owner or by an individual or Legal Entity authorized to submit\non behalf of the copyright owner. For the purposes of this definition,\n\"submitted\" means any form of electronic, verbal, or written communication sent\nto the Licensor or its representatives, including but not limited to\ncommunication on electronic mailing lists, source code control systems, and\nissue tracking systems that are managed by, or on behalf of, the Licensor for\nthe purpose of discussing and improving the Work, but excluding communication\nthat is conspicuously marked or otherwise designated in writing by the copyright\nowner as \"Not a Contribution.\"\n\n\"Contributor\" shall mean Licensor and any individual or Legal Entity on behalf\nof whom a Contribution has been received by Licensor and subsequently\nincorporated within the Work.\n\n2. Grant of Copyright License.\n\nSubject to the terms and conditions of this License, each Contributor hereby\ngrants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,\nirrevocable copyright license to reproduce, prepare Derivative Works of,\npublicly display, publicly perform, sublicense, and distribute the Work and such\nDerivative Works in Source or Object form.\n\n3. Grant of Patent License.\n\nSubject to the terms and conditions of this License, each Contributor hereby\ngrants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,\nirrevocable (except as stated in this section) patent license to make, have\nmade, use, offer to sell, sell, import, and otherwise transfer the Work, where\nsuch license applies only to those patent claims licensable by such Contributor\nthat are necessarily infringed by their Contribution(s) alone or by combination\nof their Contribution(s) with the Work to which such Contribution(s) was\nsubmitted. If You institute patent litigation against any entity (including a\ncross-claim or counterclaim in a lawsuit) alleging that the Work or a\nContribution incorporated within the Work constitutes direct or contributory\npatent infringement, then any patent licenses granted to You under this License\nfor that Work shall terminate as of the date such litigation is filed.\n\n4. Redistribution.\n\nYou may reproduce and distribute copies of the Work or Derivative Works thereof\nin any medium, with or without modifications, and in Source or Object form,\nprovided that You meet the following conditions:\n\nYou must give any other recipients of the Work or Derivative Works a copy of\nthis License; and\nYou must cause any modified files to carry prominent notices stating that You\nchanged the files; and\nYou must retain, in the Source form of any Derivative Works that You distribute,\nall copyright, patent, trademark, and attribution notices from the Source form\nof the Work, excluding those notices that do not pertain to any part of the\nDerivative Works; and\nIf the Work includes a \"NOTICE\" text file as part of its distribution, then any\nDerivative Works that You distribute must include a readable copy of the\nattribution notices contained within such NOTICE file, excluding those notices\nthat do not pertain to any part of the Derivative Works, in at least one of the\nfollowing places: within a NOTICE text file distributed as part of the\nDerivative Works; within the Source form or documentation, if provided along\nwith the Derivative Works; or, within a display generated by the Derivative\nWorks, if and wherever such third-party notices normally appear. The contents of\nthe NOTICE file are for informational purposes only and do not modify the\nLicense. You may add Your own attribution notices within Derivative Works that\nYou distribute, alongside or as an addendum to the NOTICE text from the Work,\nprovided that such additional attribution notices cannot be construed as\nmodifying the License.\nYou may add Your own copyright statement to Your modifications and may provide\nadditional or different license terms and conditions for use, reproduction, or\ndistribution of Your modifications, or for any such Derivative Works as a whole,\nprovided Your use, reproduction, and distribution of the Work otherwise complies\nwith the conditions stated in this License.\n\n5. Submission of Contributions.\n\nUnless You explicitly state otherwise, any Contribution intentionally submitted\nfor inclusion in the Work by You to the Licensor shall be under the terms and\nconditions of this License, without any additional terms or conditions.\nNotwithstanding the above, nothing herein shall supersede or modify the terms of\nany separate license agreement you may have executed with Licensor regarding\nsuch Contributions.\n\n6. Trademarks.\n\nThis License does not grant permission to use the trade names, trademarks,\nservice marks, or product names of the Licensor, except as required for\nreasonable and customary use in describing the origin of the Work and\nreproducing the content of the NOTICE file.\n\n7. Disclaimer of Warranty.\n\nUnless required by applicable law or agreed to in writing, Licensor provides the\nWork (and each Contributor provides its Contributions) on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied,\nincluding, without limitation, any warranties or conditions of TITLE,\nNON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are\nsolely responsible for determining the appropriateness of using or\nredistributing the Work and assume any risks associated with Your exercise of\npermissions under this License.\n\n8. Limitation of Liability.\n\nIn no event and under no legal theory, whether in tort (including negligence),\ncontract, or otherwise, unless required by applicable law (such as deliberate\nand grossly negligent acts) or agreed to in writing, shall any Contributor be\nliable to You for damages, including any direct, indirect, special, incidental,\nor consequential damages of any character arising as a result of this License or\nout of the use or inability to use the Work (including but not limited to\ndamages for loss of goodwill, work stoppage, computer failure or malfunction, or\nany and all other commercial damages or losses), even if such Contributor has\nbeen advised of the possibility of such damages.\n\n9. Accepting Warranty or Additional Liability.\n\nWhile redistributing the Work or Derivative Works thereof, You may choose to\noffer, and charge a fee for, acceptance of support, warranty, indemnity, or\nother liability obligations and/or rights consistent with this License. However,\nin accepting such obligations, You may act only on Your own behalf and on Your\nsole responsibility, not on behalf of any other Contributor, and only if You\nagree to indemnify, defend, and hold each Contributor harmless for any liability\nincurred by, or claims asserted against, such Contributor by reason of your\naccepting any such warranty or additional liability.\n\nEND OF TERMS AND CONDITIONS\n\nAPPENDIX: How to apply the Apache License to your work\n\nTo apply the Apache License to your work, attach the following boilerplate\nnotice, with the fields enclosed by brackets \"[]\" replaced with your own\nidentifying information. (Don't include the brackets!) The text should be\nenclosed in the appropriate comment syntax for the file format. We also\nrecommend that a file or class name and description of purpose be included on\nthe same \"printed page\" as the copyright notice for easier identification within\nthird-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n     http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n------\n** github.com/prometheus/client_golang; v1.14.0 ---\n\n\nPrometheus instrumentation library for Go applications\nCopyright 2012-2015 The Prometheus Authors\n\nThis product includes software developed at\nSoundCloud Ltd. (http://soundcloud.com/).\n\n\nThe following components are included in this product:\n\nperks - a fork of https://github.com/bmizerany/perks\nhttps://github.com/beorn7/perks\nCopyright 2013-2015 Blake Mizerany, Björn Rabenstein\nSee https://github.com/beorn7/perks/blob/master/README.md for license details.\n\nGo support for Protocol Buffers - Google's data interchange format\nhttp://github.com/golang/protobuf/\nCopyright 2010 The Go Authors\nSee source code for license details.\n\nSupport for streaming Protocol Buffer messages for the Go language (golang).\nhttps://github.com/matttproud/golang_protobuf_extensions\nCopyright 2013 Matt T. Proud\nLicensed under the Apache License, Version 2.0\n\nApache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n------\n** github.com/prometheus/procfs; v0.8.0 ---\n\n\nprocfs provides functions to retrieve system, kernel and process\nmetrics from the pseudo-filesystem proc.\n\nCopyright 2014-2015 The Prometheus Authors\n\nThis product includes software developed at\nSoundCloud Ltd. (http://soundcloud.com/).\n\nApache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n------\n** github.com/gobuffalo/flect; v0.2.4 ---\n\n\nThe MIT License (MIT)\n\nCopyright (c) 2019 Mark Bates\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n------\n** github.com/samber/lo; v1.37.0 ---\n\n\nMIT License\n\nCopyright (c) 2022 Samuel Berthe\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n------\n** golang.org/x/crypto; v0.0.0-20220315160706-3147a52a75dd ---\n** golang.org/x/exp; v0.0.0-20220303212507-bbda1eaf7a17 ---\n** golang.org/x/net; v0.3.0 ---\n** golang.org/x/oauth2; v0.0.0-20220223155221-ee480838109b ---\n** golang.org/x/sync; v0.0.0-20220722155255-886fb9371eb4 ---\n** golang.org/x/sys; v0.3.0 ---\n** golang.org/x/term; v0.3.0 ---\n** golang.org/x/text; v0.5.0 ---\n** golang.org/x/time; v0.0.0-20220609170525-579cf78fd858 ---\n\n\nCopyright (c) 2009 The Go Authors. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n   * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n   * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n   * Neither the name of Google Inc. nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n------\n** google.golang.org/grpc; v1.47.0 ---\n\n\nCopyright 2014 gRPC authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n\nApache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n------\n\n"
  },
  {
    "path": "charts/index.yaml",
    "content": "apiVersion: v1\nentries:\n  karpenter:\n  - apiVersion: v2\n    appVersion: 0.16.3\n    created: \"2022-09-27T14:35:08.091269-07:00\"\n    description: A Helm chart for Karpenter, an open-source node provisioning project\n      built for Kubernetes.\n    digest: bd60e546bf25071c64b94928d907baf6713f929e6336f2ed452689ca9f9176b3\n    home: https://karpenter.sh/\n    icon: https://repository-images.githubusercontent.com/278480393/dab059c8-caa1-4b55-aaa7-3d30e47a5616\n    keywords:\n    - cluster\n    - node\n    - scheduler\n    - autoscaling\n    - lifecycle\n    name: karpenter\n    sources:\n    - https://github.com/aws/karpenter/\n    type: application\n    urls:\n    - karpenter-0.16.3.tgz\n    version: 0.16.3\n  - apiVersion: v2\n    appVersion: 0.16.2\n    created: \"2022-09-27T14:35:08.090226-07:00\"\n    description: A Helm chart for Karpenter, an open-source node provisioning project\n      built for Kubernetes.\n    digest: c178898eeb8997b97bd8e8a4ed7e869bf91f6674c854ae9485c086eda9e3d8b1\n    home: https://karpenter.sh/\n    icon: https://repository-images.githubusercontent.com/278480393/dab059c8-caa1-4b55-aaa7-3d30e47a5616\n    keywords:\n    - cluster\n    - node\n    - scheduler\n    - autoscaling\n    - lifecycle\n    name: karpenter\n    sources:\n    - https://github.com/aws/karpenter/\n    type: application\n    urls:\n    - karpenter-0.16.2.tgz\n    version: 0.16.2\n  - apiVersion: v2\n    appVersion: 0.16.1\n    created: \"2022-09-27T14:35:08.088562-07:00\"\n    description: A Helm chart for Karpenter, an open-source node provisioning project\n      built for Kubernetes.\n    digest: 8410ac3bb7298d99282bd384fe853ebf14cf0eed310c39894e66a83bf1f31279\n    home: https://karpenter.sh/\n    icon: https://repository-images.githubusercontent.com/278480393/dab059c8-caa1-4b55-aaa7-3d30e47a5616\n    keywords:\n    - cluster\n    - node\n    - scheduler\n    - autoscaling\n    - lifecycle\n    name: karpenter\n    sources:\n    - https://github.com/aws/karpenter/\n    type: application\n    urls:\n    - karpenter-0.16.1.tgz\n    version: 0.16.1\n  - apiVersion: v2\n    appVersion: 0.16.0\n    created: \"2022-09-27T14:35:08.087296-07:00\"\n    description: A Helm chart for Karpenter, an open-source node provisioning project\n      built for Kubernetes.\n    digest: ae0b7da607cbcef4865b4c165edb9ea759fd21caa2a238f5d3cb94be4fd2379c\n    home: https://karpenter.sh/\n    icon: https://repository-images.githubusercontent.com/278480393/dab059c8-caa1-4b55-aaa7-3d30e47a5616\n    keywords:\n    - cluster\n    - node\n    - scheduler\n    - autoscaling\n    - lifecycle\n    name: karpenter\n    sources:\n    - https://github.com/aws/karpenter/\n    type: application\n    urls:\n    - karpenter-0.16.0.tgz\n    version: 0.16.0\n  - apiVersion: v2\n    appVersion: 0.15.0\n    created: \"2022-09-27T14:35:08.085954-07:00\"\n    description: A Helm chart for Karpenter, an open-source node provisioning project\n      built for Kubernetes.\n    digest: dffe8484f59d904963077274788fb30c66ab157fcbdf2f074e87f89c864002d3\n    home: https://karpenter.sh/\n    icon: https://repository-images.githubusercontent.com/278480393/dab059c8-caa1-4b55-aaa7-3d30e47a5616\n    keywords:\n    - cluster\n    - node\n    - scheduler\n    - autoscaling\n    - lifecycle\n    name: karpenter\n    sources:\n    - https://github.com/aws/karpenter/\n    type: application\n    urls:\n    - karpenter-0.15.0.tgz\n    version: 0.15.0\n  - apiVersion: v2\n    appVersion: 0.14.0\n    created: \"2022-09-27T14:35:08.083761-07:00\"\n    description: A Helm chart for Karpenter, an open-source node provisioning project\n      built for Kubernetes.\n    digest: 689a004b09441806b8a3653d85f54b6f1f20f08840349fd9a51821853a772d87\n    home: https://karpenter.sh/\n    icon: https://repository-images.githubusercontent.com/278480393/dab059c8-caa1-4b55-aaa7-3d30e47a5616\n    keywords:\n    - cluster\n    - node\n    - scheduler\n    - autoscaling\n    - lifecycle\n    name: karpenter\n    sources:\n    - https://github.com/aws/karpenter/\n    type: application\n    urls:\n    - karpenter-0.14.0.tgz\n    version: 0.14.0\n  - apiVersion: v2\n    appVersion: 0.14.0-rc.0\n    created: \"2022-09-27T14:35:08.082088-07:00\"\n    description: A Helm chart for Karpenter, an open-source node provisioning project\n      built for Kubernetes.\n    digest: 4a853db66e31d159fe4f61e9bb441bc7501e39d764d628539efdf83f7bf2d018\n    home: https://karpenter.sh/\n    icon: https://repository-images.githubusercontent.com/278480393/dab059c8-caa1-4b55-aaa7-3d30e47a5616\n    keywords:\n    - cluster\n    - node\n    - scheduler\n    - autoscaling\n    - lifecycle\n    name: karpenter\n    sources:\n    - https://github.com/aws/karpenter/\n    type: application\n    urls:\n    - karpenter-0.14.0-rc.0.tgz\n    version: 0.14.0-rc.0\n  - apiVersion: v2\n    appVersion: 0.13.2\n    created: \"2022-09-27T14:35:08.080443-07:00\"\n    description: A Helm chart for Karpenter, an open-source node provisioning project\n      built for Kubernetes.\n    digest: 5098d3f05ef2559fe724cc657ef90aafebcd85f1f2be2b34288c79635fb9815c\n    home: https://karpenter.sh/\n    icon: https://repository-images.githubusercontent.com/278480393/dab059c8-caa1-4b55-aaa7-3d30e47a5616\n    keywords:\n    - cluster\n    - node\n    - scheduler\n    - autoscaling\n    - lifecycle\n    name: karpenter\n    sources:\n    - https://github.com/aws/karpenter/\n    type: application\n    urls:\n    - karpenter-0.13.2.tgz\n    version: 0.13.2\n  - apiVersion: v2\n    appVersion: 0.13.1\n    created: \"2022-09-27T14:35:08.078421-07:00\"\n    description: A Helm chart for Karpenter, an open-source node provisioning project\n      built for Kubernetes.\n    digest: 5c6448bb50ae716e550048f008433e2b023094570c2141b483d6ca19060a6228\n    home: https://karpenter.sh/\n    icon: https://repository-images.githubusercontent.com/278480393/dab059c8-caa1-4b55-aaa7-3d30e47a5616\n    keywords:\n    - cluster\n    - node\n    - scheduler\n    - autoscaling\n    - lifecycle\n    name: karpenter\n    sources:\n    - https://github.com/aws/karpenter/\n    type: application\n    urls:\n    - karpenter-0.13.1.tgz\n    version: 0.13.1\n  - apiVersion: v2\n    appVersion: 0.13.0\n    created: \"2022-09-27T14:35:08.076738-07:00\"\n    description: A Helm chart for Karpenter, an open-source node provisioning project\n      built for Kubernetes.\n    digest: 91b868a41f06b1b6b6970d9324b3975103f6643224ac17acd0d8511755b4088a\n    home: https://karpenter.sh/\n    icon: https://repository-images.githubusercontent.com/278480393/dab059c8-caa1-4b55-aaa7-3d30e47a5616\n    keywords:\n    - cluster\n    - node\n    - scheduler\n    - autoscaling\n    - lifecycle\n    name: karpenter\n    sources:\n    - https://github.com/aws/karpenter/\n    type: application\n    urls:\n    - karpenter-0.13.0.tgz\n    version: 0.13.0\n  - apiVersion: v2\n    appVersion: 0.12.1\n    created: \"2022-09-27T14:35:08.075084-07:00\"\n    description: A Helm chart for Karpenter, an open-source node provisioning project\n      built for Kubernetes.\n    digest: cf488511e5702908999ba209146af7581736a6594054fbc163620a53dbeb46af\n    home: https://karpenter.sh/\n    icon: https://repository-images.githubusercontent.com/278480393/dab059c8-caa1-4b55-aaa7-3d30e47a5616\n    keywords:\n    - cluster\n    - node\n    - scheduler\n    - autoscaling\n    - lifecycle\n    name: karpenter\n    sources:\n    - https://github.com/aws/karpenter/\n    type: application\n    urls:\n    - karpenter-0.12.1.tgz\n    version: 0.12.1\n  - apiVersion: v2\n    appVersion: 0.12.0\n    created: \"2022-09-27T14:35:08.073244-07:00\"\n    description: A Helm chart for Karpenter, an open-source node provisioning project\n      built for Kubernetes.\n    digest: 6286e97a5433587f504331a894335b4e60360e6d68ba87e9909d18c95a62970a\n    home: https://karpenter.sh/\n    icon: https://repository-images.githubusercontent.com/278480393/dab059c8-caa1-4b55-aaa7-3d30e47a5616\n    keywords:\n    - cluster\n    - node\n    - scheduler\n    - autoscaling\n    - lifecycle\n    name: karpenter\n    sources:\n    - https://github.com/aws/karpenter/\n    type: application\n    urls:\n    - karpenter-0.12.0.tgz\n    version: 0.12.0\n  - apiVersion: v2\n    appVersion: 0.11.1\n    created: \"2022-09-27T14:35:08.0716-07:00\"\n    description: A Helm chart for Karpenter, an open-source node provisioning project\n      built for Kubernetes.\n    digest: f9e64621cfeac48e969e8ff8af0fc4ba25c03b45b1220f614cd7b4220828c52d\n    home: https://karpenter.sh/\n    icon: https://repository-images.githubusercontent.com/278480393/dab059c8-caa1-4b55-aaa7-3d30e47a5616\n    keywords:\n    - cluster\n    - node\n    - scheduler\n    - autoscaling\n    - lifecycle\n    name: karpenter\n    sources:\n    - https://github.com/aws/karpenter/\n    type: application\n    urls:\n    - karpenter-0.11.1.tgz\n    version: 0.11.1\n  - apiVersion: v2\n    appVersion: 0.11.0\n    created: \"2022-09-27T14:35:08.07016-07:00\"\n    description: A Helm chart for Karpenter, an open-source node provisioning project\n      built for Kubernetes.\n    digest: 9e364bf6fe08430fa4f79cb9cedb60989575a37036f47a5f25a44319482f351a\n    home: https://karpenter.sh/\n    icon: https://repository-images.githubusercontent.com/278480393/dab059c8-caa1-4b55-aaa7-3d30e47a5616\n    keywords:\n    - cluster\n    - node\n    - scheduler\n    - autoscaling\n    - lifecycle\n    name: karpenter\n    sources:\n    - https://github.com/aws/karpenter/\n    type: application\n    urls:\n    - karpenter-0.11.0.tgz\n    version: 0.11.0\n  - apiVersion: v2\n    appVersion: 0.10.1\n    created: \"2022-09-27T14:35:08.068621-07:00\"\n    description: A Helm chart for Karpenter, an open-source node provisioning project\n      built for Kubernetes.\n    digest: 148698c440b3d12bf3ed5d577c639b88aed801d664055266b93dc427c5340609\n    home: https://karpenter.sh/\n    icon: https://repository-images.githubusercontent.com/278480393/dab059c8-caa1-4b55-aaa7-3d30e47a5616\n    keywords:\n    - cluster\n    - node\n    - scheduler\n    - autoscaling\n    - lifecycle\n    name: karpenter\n    sources:\n    - https://github.com/aws/karpenter/\n    type: application\n    urls:\n    - karpenter-0.10.1.tgz\n    version: 0.10.1\n  - apiVersion: v2\n    appVersion: 0.10.0\n    created: \"2022-09-27T14:35:08.065681-07:00\"\n    description: A Helm chart for Karpenter, an open-source node provisioning project\n      built for Kubernetes.\n    digest: d02c55b08fa25bc49da5f3b44012a1ef6b2500df28289bfb44b9d33c96a307bc\n    home: https://karpenter.sh/\n    icon: https://repository-images.githubusercontent.com/278480393/dab059c8-caa1-4b55-aaa7-3d30e47a5616\n    keywords:\n    - cluster\n    - node\n    - scheduler\n    - autoscaling\n    - lifecycle\n    name: karpenter\n    sources:\n    - https://github.com/aws/karpenter/\n    type: application\n    urls:\n    - karpenter-0.10.0.tgz\n    version: 0.10.0\n  - apiVersion: v2\n    appVersion: 0.9.1\n    created: \"2022-09-27T14:35:08.133137-07:00\"\n    description: A Helm chart for Karpenter, an open-source node provisioning project\n      built for Kubernetes.\n    digest: 4cca63cce5a79ca1bc661f3c749620d003e6394cdf7208e1fb7c55674f6719ac\n    home: https://karpenter.sh/\n    icon: https://repository-images.githubusercontent.com/278480393/dab059c8-caa1-4b55-aaa7-3d30e47a5616\n    keywords:\n    - cluster\n    - node\n    - scheduler\n    - autoscaling\n    - lifecycle\n    name: karpenter\n    sources:\n    - https://github.com/aws/karpenter/\n    type: application\n    urls:\n    - karpenter-0.9.1.tgz\n    version: 0.9.1\n  - apiVersion: v2\n    appVersion: 0.9.0\n    created: \"2022-09-27T14:35:08.131591-07:00\"\n    description: A Helm chart for Karpenter, an open-source node provisioning project\n      built for Kubernetes.\n    digest: 94f034a1478cebdc14330dfe399a06d737bc681d8045a7bb340695cd87a1eb17\n    home: https://karpenter.sh/\n    icon: https://repository-images.githubusercontent.com/278480393/dab059c8-caa1-4b55-aaa7-3d30e47a5616\n    keywords:\n    - cluster\n    - node\n    - scheduler\n    - autoscaling\n    - lifecycle\n    name: karpenter\n    sources:\n    - https://github.com/aws/karpenter/\n    type: application\n    urls:\n    - karpenter-0.9.0.tgz\n    version: 0.9.0\n  - apiVersion: v2\n    appVersion: 0.9.0-rc.1\n    created: \"2022-09-27T14:35:08.13053-07:00\"\n    description: A Helm chart for Karpenter, an open-source node provisioning project\n      built for Kubernetes.\n    digest: b7ed19b4ae5333e1799e4017fc20bc7cb69d4b80d74ea1e7d8f4338f2aceeace\n    home: https://karpenter.sh/\n    icon: https://repository-images.githubusercontent.com/278480393/dab059c8-caa1-4b55-aaa7-3d30e47a5616\n    keywords:\n    - cluster\n    - node\n    - scheduler\n    - autoscaling\n    - lifecycle\n    name: karpenter\n    sources:\n    - https://github.com/aws/karpenter/\n    type: application\n    urls:\n    - karpenter-0.9.0-rc.1.tgz\n    version: 0.9.0-rc.1\n  - apiVersion: v2\n    appVersion: 0.9.0-rc.0\n    created: \"2022-09-27T14:35:08.129186-07:00\"\n    description: A Helm chart for Karpenter, an open-source node provisioning project\n      built for Kubernetes.\n    digest: adea3042e3a2212aa8376e6910ffa19af5d064691b60b055b2e7f84b05704878\n    home: https://karpenter.sh/\n    icon: https://repository-images.githubusercontent.com/278480393/dab059c8-caa1-4b55-aaa7-3d30e47a5616\n    keywords:\n    - cluster\n    - node\n    - scheduler\n    - autoscaling\n    - lifecycle\n    name: karpenter\n    sources:\n    - https://github.com/aws/karpenter/\n    type: application\n    urls:\n    - karpenter-0.9.0-rc.0.tgz\n    version: 0.9.0-rc.0\n  - apiVersion: v2\n    appVersion: 0.8.2\n    created: \"2022-09-27T14:35:08.127898-07:00\"\n    description: A Helm chart for Karpenter, an open-source node provisioning project\n      built for Kubernetes.\n    digest: 2afaf146bb5b02f8163a08f68d31281af13898c3b5fb3c61a1cbfcdf5c9899e7\n    home: https://karpenter.sh/\n    icon: https://repository-images.githubusercontent.com/278480393/dab059c8-caa1-4b55-aaa7-3d30e47a5616\n    keywords:\n    - cluster\n    - node\n    - scheduler\n    - autoscaling\n    - lifecycle\n    name: karpenter\n    sources:\n    - https://github.com/aws/karpenter/\n    type: application\n    urls:\n    - karpenter-0.8.2.tgz\n    version: 0.8.2\n  - apiVersion: v2\n    appVersion: 0.8.1\n    created: \"2022-09-27T14:35:08.126753-07:00\"\n    description: A Helm chart for Karpenter, an open-source node provisioning project\n      built for Kubernetes.\n    digest: ed1d87a265ba22bf57f13d4e0c6ab97f4046f156bf9292161a7612715f9b3170\n    home: https://karpenter.sh/\n    icon: https://repository-images.githubusercontent.com/278480393/dab059c8-caa1-4b55-aaa7-3d30e47a5616\n    keywords:\n    - cluster\n    - node\n    - scheduler\n    - autoscaling\n    - lifecycle\n    name: karpenter\n    sources:\n    - https://github.com/aws/karpenter/\n    type: application\n    urls:\n    - karpenter-0.8.1.tgz\n    version: 0.8.1\n  - apiVersion: v2\n    appVersion: 0.8.0\n    created: \"2022-09-27T14:35:08.125611-07:00\"\n    description: A Helm chart for Karpenter, an open-source node provisioning project\n      built for Kubernetes.\n    digest: f8c10f6e1f864a32ae5d36f30d2fefcf4a9faf4f38ad7b741dac3d151454ed05\n    home: https://karpenter.sh/\n    icon: https://repository-images.githubusercontent.com/278480393/dab059c8-caa1-4b55-aaa7-3d30e47a5616\n    keywords:\n    - cluster\n    - node\n    - scheduler\n    - autoscaling\n    - lifecycle\n    name: karpenter\n    sources:\n    - https://github.com/aws/karpenter/\n    type: application\n    urls:\n    - karpenter-0.8.0.tgz\n    version: 0.8.0\n  - apiVersion: v2\n    appVersion: 0.7.3\n    created: \"2022-09-27T14:35:08.124475-07:00\"\n    description: A Helm chart for Karpenter, an open-source node provisioning project\n      built for Kubernetes.\n    digest: ada37a3148ba9400ef7d1963b228bb43199a532d4d0fb85d0e561f95e83d4cb0\n    home: https://karpenter.sh/\n    icon: https://repository-images.githubusercontent.com/278480393/dab059c8-caa1-4b55-aaa7-3d30e47a5616\n    keywords:\n    - cluster\n    - node\n    - scheduler\n    - autoscaling\n    - lifecycle\n    name: karpenter\n    sources:\n    - https://github.com/aws/karpenter/\n    type: application\n    urls:\n    - karpenter-0.7.3.tgz\n    version: 0.7.3\n  - apiVersion: v2\n    appVersion: 0.7.2\n    created: \"2022-09-27T14:35:08.123632-07:00\"\n    description: A Helm chart for Karpenter, an open-source node provisioning project\n      built for Kubernetes.\n    digest: a0ead5002de823e70f0915297bd54a89e32afef43ba02920f322a983336edb56\n    home: https://karpenter.sh/\n    icon: https://repository-images.githubusercontent.com/278480393/dab059c8-caa1-4b55-aaa7-3d30e47a5616\n    keywords:\n    - cluster\n    - node\n    - scheduler\n    - autoscaling\n    - lifecycle\n    name: karpenter\n    sources:\n    - https://github.com/aws/karpenter/\n    type: application\n    urls:\n    - karpenter-0.7.2.tgz\n    version: 0.7.2\n  - apiVersion: v2\n    appVersion: 0.7.1\n    created: \"2022-09-27T14:35:08.122471-07:00\"\n    description: A Helm chart for Karpenter, an open-source node provisioning project\n      built for Kubernetes.\n    digest: 6afb62f6efac1ddc9f2eebb4ff27da25a774d8039ab32d8e9d366d9d4a8a8c0c\n    home: https://karpenter.sh/\n    icon: https://repository-images.githubusercontent.com/278480393/dab059c8-caa1-4b55-aaa7-3d30e47a5616\n    keywords:\n    - cluster\n    - node\n    - scheduler\n    - autoscaling\n    - lifecycle\n    name: karpenter\n    sources:\n    - https://github.com/aws/karpenter/\n    type: application\n    urls:\n    - karpenter-0.7.1.tgz\n    version: 0.7.1\n  - apiVersion: v2\n    appVersion: 0.7.0\n    created: \"2022-09-27T14:35:08.121621-07:00\"\n    description: A Helm chart for Karpenter, an open-source node provisioning project\n      built for Kubernetes.\n    digest: dbaec3f2aa4000a851156188bfcbcec1c5dec40467cbc1d8dca40c38cdd82bba\n    home: https://karpenter.sh/\n    icon: https://repository-images.githubusercontent.com/278480393/dab059c8-caa1-4b55-aaa7-3d30e47a5616\n    keywords:\n    - cluster\n    - node\n    - scheduler\n    - autoscaling\n    - lifecycle\n    name: karpenter\n    sources:\n    - https://github.com/aws/karpenter/\n    type: application\n    urls:\n    - karpenter-0.7.0.tgz\n    version: 0.7.0\n  - apiVersion: v2\n    appVersion: 0.6.5\n    created: \"2022-09-27T14:35:08.120441-07:00\"\n    description: A Helm chart for Karpenter, an open-source node provisioning project\n      built for Kubernetes.\n    digest: d762b94978f95743ebe84d6dd9a6d61da6d31b634bb72ef2bda8b3aa086bc139\n    home: https://karpenter.sh/\n    icon: https://repository-images.githubusercontent.com/278480393/dab059c8-caa1-4b55-aaa7-3d30e47a5616\n    keywords:\n    - cluster\n    - node\n    - scheduler\n    - autoscaling\n    - lifecycle\n    name: karpenter\n    sources:\n    - https://github.com/aws/karpenter/\n    type: application\n    urls:\n    - karpenter-0.6.5.tgz\n    version: 0.6.5\n  - apiVersion: v2\n    appVersion: 0.6.4\n    created: \"2022-09-27T14:35:08.119282-07:00\"\n    description: A Helm chart for Karpenter, an open-source node provisioning project\n      built for Kubernetes.\n    digest: e95407c59da890e93bb92f4717341bb7aca93b905254be06c112fbee8057ebbf\n    home: https://karpenter.sh/\n    icon: https://repository-images.githubusercontent.com/278480393/dab059c8-caa1-4b55-aaa7-3d30e47a5616\n    keywords:\n    - cluster\n    - node\n    - scheduler\n    - autoscaling\n    - lifecycle\n    name: karpenter\n    sources:\n    - https://github.com/aws/karpenter/\n    type: application\n    urls:\n    - karpenter-0.6.4.tgz\n    version: 0.6.4\n  - apiVersion: v2\n    appVersion: 0.6.3\n    created: \"2022-09-27T14:35:08.118109-07:00\"\n    description: A Helm chart for Karpenter, an open-source node provisioning project\n      built for Kubernetes.\n    digest: 9251ebd3c6ae4c5bcaa9e2ef23e357576b4c153ba8821113050400f6eb23a90f\n    home: https://karpenter.sh/\n    icon: https://repository-images.githubusercontent.com/278480393/dab059c8-caa1-4b55-aaa7-3d30e47a5616\n    keywords:\n    - cluster\n    - node\n    - scheduler\n    - autoscaling\n    - lifecycle\n    name: karpenter\n    sources:\n    - https://github.com/aws/karpenter/\n    type: application\n    urls:\n    - karpenter-0.6.3.tgz\n    version: 0.6.3\n  - apiVersion: v2\n    appVersion: 0.6.2\n    created: \"2022-09-27T14:35:08.116485-07:00\"\n    description: A Helm chart for Karpenter, an open-source node provisioning project\n      built for Kubernetes.\n    digest: 2d1853e5fcd1e2cd502c7c338b94a7789162f44238942b5cb6ff3567b2d0f63f\n    home: https://karpenter.sh/\n    icon: https://repository-images.githubusercontent.com/278480393/dab059c8-caa1-4b55-aaa7-3d30e47a5616\n    keywords:\n    - cluster\n    - node\n    - scheduler\n    - autoscaling\n    - lifecycle\n    name: karpenter\n    sources:\n    - https://github.com/aws/karpenter/\n    type: application\n    urls:\n    - karpenter-0.6.2.tgz\n    version: 0.6.2\n  - apiVersion: v2\n    appVersion: 0.6.1\n    created: \"2022-09-27T14:35:08.11561-07:00\"\n    description: A Helm chart for https://github.com/aws/karpenter/.\n    digest: 025184e9b0b36529501b3d20d1c87e629964d7cbb50400f486044922b7ace7bf\n    name: karpenter\n    type: application\n    urls:\n    - karpenter-0.6.1.tgz\n    version: 0.6.1\n  - apiVersion: v2\n    appVersion: 0.6.0\n    created: \"2022-09-27T14:35:08.114536-07:00\"\n    description: A Helm chart for https://github.com/aws/karpenter/.\n    digest: 351c364ad0a81dd52ffcc81d456b265e5e04cf355d03cdaf2003befe37a1550a\n    name: karpenter\n    type: application\n    urls:\n    - karpenter-0.6.0.tgz\n    version: 0.6.0\n  - apiVersion: v2\n    appVersion: 0.5.6\n    created: \"2022-09-27T14:35:08.113837-07:00\"\n    description: A Helm chart for https://github.com/aws/karpenter/.\n    digest: b52a3bbac517e9130c8bec587c411c81f49b38e4510fa45ce1f212377145705b\n    name: karpenter\n    type: application\n    urls:\n    - karpenter-0.5.6.tgz\n    version: 0.5.6\n  - apiVersion: v2\n    appVersion: 0.5.5\n    created: \"2022-09-27T14:35:08.112768-07:00\"\n    description: A Helm chart for https://github.com/aws/karpenter/.\n    digest: 2bd507dd53f10c82bdfe049f0bb4c0193ecf684d73b44ff1bbb5cf2f16f0fa25\n    name: karpenter\n    type: application\n    urls:\n    - karpenter-0.5.5.tgz\n    version: 0.5.5\n  - apiVersion: v2\n    appVersion: 0.5.4\n    created: \"2022-09-27T14:35:08.111652-07:00\"\n    description: A Helm chart for https://github.com/aws/karpenter/.\n    digest: 0c613878bc1827f2188a78b5d2a2945c417c29c699f8f9c5fa7f4e2cbdeefebb\n    name: karpenter\n    type: application\n    urls:\n    - karpenter-0.5.4.tgz\n    version: 0.5.4\n  - apiVersion: v2\n    created: \"2022-09-27T14:35:08.110957-07:00\"\n    description: A Helm chart for https://github.com/aws/karpenter/.\n    digest: f6bb831f6ceea8b90634f9a6841e77de97ad1e3350437cb66cc50f14b7c3becc\n    name: karpenter\n    type: application\n    urls:\n    - karpenter-0.5.3.tgz\n    version: 0.5.3\n  - apiVersion: v2\n    created: \"2022-09-27T14:35:08.109936-07:00\"\n    description: A Helm chart for https://github.com/aws/karpenter/.\n    digest: 45f6262a018c11c0c3068e29dc2e1cf337cba8c390ec269b9b36c6d8bdac581e\n    name: karpenter\n    type: application\n    urls:\n    - karpenter-0.5.2.tgz\n    version: 0.5.2\n  - apiVersion: v2\n    created: \"2022-09-27T14:35:08.108914-07:00\"\n    description: A Helm chart for https://github.com/aws/karpenter/.\n    digest: 4247c15ec571f82025c80ceaa9354ce3ee3b209e4ba15a0ca3c36a1f90a859ec\n    name: karpenter\n    type: application\n    urls:\n    - karpenter-0.5.1.tgz\n    version: 0.5.1\n  - apiVersion: v2\n    created: \"2022-09-27T14:35:08.107818-07:00\"\n    description: A Helm chart for https://github.com/aws/karpenter/.\n    digest: 6d49a00dca8a6f8d7938e9508228af085d85a2746e2f742c895b954fe71292df\n    name: karpenter\n    type: application\n    urls:\n    - karpenter-0.5.0.tgz\n    version: 0.5.0\n  - apiVersion: v2\n    created: \"2022-09-27T14:35:08.106873-07:00\"\n    description: A Helm chart for https://github.com/awslabs/karpenter/.\n    digest: 70c5bbea1016aa56da5227b7f5d7cf5700c4d38ff1814f8e28072c77d8a02c20\n    name: karpenter\n    type: application\n    urls:\n    - karpenter-0.4.3.tgz\n    version: 0.4.3\n  - apiVersion: v2\n    created: \"2022-09-27T14:35:08.105881-07:00\"\n    description: A Helm chart for https://github.com/awslabs/karpenter/.\n    digest: 558f26b8786384766407c5f86cff5180066c4fa68fe9e3cf7b782ec8564f04ff\n    name: karpenter\n    type: application\n    urls:\n    - karpenter-0.4.2.tgz\n    version: 0.4.2\n  - apiVersion: v2\n    created: \"2022-09-27T14:35:08.104938-07:00\"\n    description: A Helm chart for https://github.com/awslabs/karpenter/.\n    digest: ec4bcf2a7f279ad97b8749a7f1a8edd527a09f8c00614d911a773843bd44a58b\n    name: karpenter\n    type: application\n    urls:\n    - karpenter-0.4.1.tgz\n    version: 0.4.1\n  - apiVersion: v2\n    created: \"2022-09-27T14:35:08.10397-07:00\"\n    description: A Helm chart for https://github.com/awslabs/karpenter/.\n    digest: d4ea011979906ad22b2345d0eb4c941445e89c1b0561c6ae44bb71fdb641c161\n    name: karpenter\n    type: application\n    urls:\n    - karpenter-0.4.0.tgz\n    version: 0.4.0\n  - apiVersion: v2\n    created: \"2022-09-27T14:35:08.10302-07:00\"\n    description: A Helm chart for https://github.com/awslabs/karpenter/.\n    digest: e8b9b3dd447d0ab48b66156bf88ae924121e5780d741ee18cc9a43a90a6f4290\n    name: karpenter\n    type: application\n    urls:\n    - karpenter-0.3.4.tgz\n    version: 0.3.4\n  - apiVersion: v2\n    created: \"2022-09-27T14:35:08.101874-07:00\"\n    description: A Helm chart for https://github.com/awslabs/karpenter/.\n    digest: 0d8bc4c74416aeb5233a0a65c4b4fd678b7c961f1dca10604e33337715b585ff\n    name: karpenter\n    type: application\n    urls:\n    - karpenter-0.3.3.tgz\n    version: 0.3.3\n  - apiVersion: v2\n    created: \"2022-09-27T14:35:08.100697-07:00\"\n    description: A Helm chart for https://github.com/awslabs/karpenter/.\n    digest: e24d1ca8364e92d161f8295b552ec101a72491c62926dd67779d4e4a7e6b5756\n    name: karpenter\n    type: application\n    urls:\n    - karpenter-0.3.2.tgz\n    version: 0.3.2\n  - apiVersion: v2\n    created: \"2022-09-27T14:35:08.099497-07:00\"\n    description: A Helm chart for https://github.com/awslabs/karpenter/.\n    digest: 86c9a22a01247b2ed564baa12b88ed2df6556c9e8cb6aca9b990212c1e809c45\n    name: karpenter\n    type: application\n    urls:\n    - karpenter-0.3.1.tgz\n    version: 0.3.1\n  - apiVersion: v2\n    created: \"2022-09-27T14:35:08.098641-07:00\"\n    description: A Helm chart for https://github.com/awslabs/karpenter/.\n    digest: 6d86156704c2c7eac8094dbe57458a3b1334eb38626b6da4ccd60c5cd65e0250\n    name: karpenter\n    type: application\n    urls:\n    - karpenter-0.3.0.tgz\n    version: v0.3.0\n  - apiVersion: v2\n    created: \"2022-09-27T14:35:08.097873-07:00\"\n    description: A Helm chart for https://github.com/awslabs/karpenter/.\n    digest: 5b19f5da4dd3d3e147f3e93bf168d1cd24106e12eb7fe44ad88850f73ceb82f0\n    name: karpenter\n    type: application\n    urls:\n    - karpenter-0.2.9.tgz\n    version: v0.2.9\n  - apiVersion: v2\n    created: \"2022-09-27T14:35:08.097113-07:00\"\n    description: A Helm chart for https://github.com/awslabs/karpenter/.\n    digest: 8b704acc1a9c018da774f62c6be824e7389bb482437d318902d01237e3cacfc5\n    name: karpenter\n    type: application\n    urls:\n    - karpenter-0.2.8.tgz\n    version: v0.2.8\n  - apiVersion: v2\n    created: \"2022-09-27T14:35:08.096483-07:00\"\n    description: A Helm chart for https://github.com/awslabs/karpenter/.\n    digest: 048ec496d46d8ab534bc8af6090699fedd2aaf45c8e1658636c7a44afdb6e898\n    name: karpenter\n    type: application\n    urls:\n    - karpenter-0.2.7.tgz\n    version: v0.2.7\n  - apiVersion: v2\n    created: \"2022-09-27T14:35:08.095857-07:00\"\n    description: A Helm chart for https://github.com/awslabs/karpenter/.\n    digest: 48008ba427baa5206bd59abe9e25005b0b6673f03e705f2149717bb89156873d\n    name: karpenter\n    type: application\n    urls:\n    - karpenter-0.2.6.tgz\n    version: v0.2.6\n  - apiVersion: v2\n    created: \"2022-09-27T14:35:08.095209-07:00\"\n    description: A Helm chart for https://github.com/awslabs/karpenter/.\n    digest: 208d0c14d2cdbc8c387dc92a473b625f905e829486edd5fd007eb56c9f896682\n    name: karpenter\n    type: application\n    urls:\n    - karpenter-0.2.5.tgz\n    version: v0.2.5\n  - apiVersion: v2\n    created: \"2022-09-27T14:35:08.094418-07:00\"\n    description: A Helm chart for https://github.com/awslabs/karpenter/.\n    digest: ed7d1d08bde38f41a6bc8a4bf93b4dd85a3b6e5f526e44324483eadc9faeea6d\n    name: karpenter\n    type: application\n    urls:\n    - karpenter-0.2.4.tgz\n    version: v0.2.4\n  - apiVersion: v2\n    created: \"2022-09-27T14:35:08.093607-07:00\"\n    description: A Helm chart for https://github.com/awslabs/karpenter/.\n    digest: 902bd53be060893d4bfe3c0f57ae831448aa8790930d153666429ea5472d824b\n    name: karpenter\n    type: application\n    urls:\n    - karpenter-0.2.3.tgz\n    version: v0.2.3\n  - apiVersion: v2\n    created: \"2022-09-27T14:35:08.09317-07:00\"\n    description: A Helm chart for https://github.com/awslabs/karpenter/.\n    digest: 90d075cbc08871ffb56b2e530fdf304b6af32c76670fcdd299af87d3810d4651\n    name: karpenter\n    type: application\n    urls:\n    - karpenter-0.2.2.tgz\n    version: v0.2.2\n  - apiVersion: v2\n    created: \"2022-09-27T14:35:08.092445-07:00\"\n    description: A Helm chart for https://github.com/awslabs/karpenter/.\n    digest: 87e161d40c65dc58a3963f17d70cc165a5bf46155f723e487486f57d209e50d1\n    name: karpenter\n    type: application\n    urls:\n    - karpenter-0.2.1.tgz\n    version: v0.2.1\n  - apiVersion: v2\n    created: \"2022-09-27T14:35:08.091848-07:00\"\n    description: A Helm chart for https://github.com/awslabs/karpenter/.\n    digest: 552bdc17f5625e4696bb7419284026f4291428877092ec5d984f486a2b812d6f\n    name: karpenter\n    type: application\n    urls:\n    - karpenter-0.2.0.tgz\n    version: v0.2.0\n  - apiVersion: v2\n    created: \"2022-09-27T14:35:08.06389-07:00\"\n    description: A Helm chart for https://github.com/awslabs/karpenter/.\n    digest: 1a597c415201e61576b83ee6ec3e24b99281805b3be8141b0a344c6f014d4e15\n    name: karpenter\n    type: application\n    urls:\n    - karpenter-0.1.3.tgz\n    version: v0.1.3\n  - apiVersion: v2\n    created: \"2022-09-27T14:35:08.063122-07:00\"\n    description: A Helm chart for https://github.com/awslabs/karpenter/.\n    digest: 6a6753731aef19db2aae72b6bfc1535917053d87f706579e158cae98c23887b4\n    name: karpenter\n    type: application\n    urls:\n    - karpenter-0.1.2.tgz\n    version: v0.1.2\n  - apiVersion: v2\n    created: \"2022-09-27T14:35:08.062106-07:00\"\n    description: A Helm chart for https://github.com/awslabs/karpenter/.\n    digest: 39685c8cbe9a757ca48721aed08b49111fef18bc2a9f67d3223f19d0706f09f7\n    name: karpenter\n    type: application\n    urls:\n    - karpenter-0.1.1.tgz\n    version: v0.1.1\n  - apiVersion: v2\n    appVersion: 66626bc5e21dc14b2cceaaeb3ad5933c0b4e2046\n    created: \"2022-09-27T14:35:08.13434-07:00\"\n    description: A Helm chart for Karpenter, an open-source node provisioning project\n      built for Kubernetes.\n    digest: 6d81b61d634863321e141ed6e859b058215573d1fe28df9acd99d1b6adf33645\n    home: https://karpenter.sh/\n    icon: https://repository-images.githubusercontent.com/278480393/dab059c8-caa1-4b55-aaa7-3d30e47a5616\n    keywords:\n    - cluster\n    - node\n    - scheduler\n    - autoscaling\n    - lifecycle\n    name: karpenter\n    sources:\n    - https://github.com/aws/karpenter/\n    type: application\n    urls:\n    - karpenter-v0-66626bc5e21dc14b2cceaaeb3ad5933c0b4e2046.tgz\n    version: v0-66626bc5e21dc14b2cceaaeb3ad5933c0b4e2046\ngenerated: \"2022-09-27T14:35:08.060027-07:00\"\n"
  },
  {
    "path": "charts/karpenter/.helmignore",
    "content": "# Patterns to ignore when building packages.\n# This supports shell glob matching, relative path matching, and\n# negation (prefixed with !). Only one pattern per line.\n.DS_Store\n# Common VCS dirs\n.git/\n.gitignore\n.bzr/\n.bzrignore\n.hg/\n.hgignore\n.svn/\n# Common backup files\n*.swp\n*.bak\n*.tmp\n*.orig\n*~\n# Various IDEs\n.project\n.idea/\n*.tmproj\n.vscode/\n"
  },
  {
    "path": "charts/karpenter/Chart.yaml",
    "content": "apiVersion: v2\nname: karpenter\ndescription: A Helm chart for Karpenter, an open-source node provisioning project built for Kubernetes.\ntype: application\nversion: 1.10.0\nappVersion: 1.10.0\nkeywords:\n  - cluster\n  - node\n  - scheduler\n  - autoscaling\n  - lifecycle\nhome: https://karpenter.sh/\nicon: https://repository-images.githubusercontent.com/278480393/dab059c8-caa1-4b55-aaa7-3d30e47a5616\nsources:\n  - https://github.com/aws/karpenter-provider-aws/\nannotations:\n  artifacthub.io/alternativeName: karpenter-provider-aws\n  artifacthub.io/crds: |\n    - kind: EC2NodeClass\n      version: v1beta1\n      name: ec2nodeclasses.karpenter.k8s.aws\n      displayName: EC2NodeClass\n      description: EC2NodeClass is the Schema for the EC2NodeClass API.\n    - kind: NodeClaim\n      version: v1beta1\n      name: nodeclaims.karpenter.sh\n      displayName: NodeClaim\n      description: NodeClaim is the Schema for the NodeClaims API.\n    - kind: NodePool\n      version: v1beta1\n      name: nodepools.karpenter.sh\n      displayName: NodePool\n      description: NodePool is the Schema for the NodePools API.\n"
  },
  {
    "path": "charts/karpenter/README.md",
    "content": "# karpenter\n\nA Helm chart for Karpenter, an open-source node provisioning project built for Kubernetes.\n\n![Version: 1.10.0](https://img.shields.io/badge/Version-1.10.0-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 1.10.0](https://img.shields.io/badge/AppVersion-1.10.0-informational?style=flat-square)\n\n## Documentation\n\nFor full Karpenter documentation please checkout [https://karpenter.sh](https://karpenter.sh/docs/).\n\n## Installing the Chart\n\nYou can follow the detailed installation instruction in the [documentation](https://karpenter.sh/docs/getting-started/getting-started-with-karpenter) which covers the Karpenter prerequisites and installation options. The outcome of these instructions should result in something like the following command.\n\n```bash\nhelm upgrade --install --namespace karpenter --create-namespace \\\n  karpenter oci://public.ecr.aws/karpenter/karpenter \\\n  --version 1.10.0 \\\n  --set \"serviceAccount.annotations.eks\\.amazonaws\\.com/role-arn=${KARPENTER_IAM_ROLE_ARN}\" \\\n  --set settings.clusterName=${CLUSTER_NAME} \\\n  --set settings.interruptionQueue=${CLUSTER_NAME} \\\n  --wait\n```\n\n### Verification\n\nAs the OCI Helm chart is signed by [Cosign](https://github.com/sigstore/cosign) as part of the release process you can verify the chart before installing it by running the following command.\n\n```shell\ncosign verify public.ecr.aws/karpenter/karpenter:1.10.0 \\\n  --certificate-oidc-issuer=https://token.actions.githubusercontent.com \\\n  --certificate-identity-regexp='https://github\\.com/aws/karpenter-provider-aws/\\.github/workflows/release\\.yaml@.+' \\\n  --certificate-github-workflow-repository=aws/karpenter-provider-aws \\\n  --certificate-github-workflow-name=Release \\\n  --certificate-github-workflow-ref=refs/tags/v1.10.0 \\\n  --annotations version=1.10.0\n```\n\n## Values\n\n| Key | Type | Default | Description |\n|-----|------|---------|-------------|\n| additionalAnnotations | object | `{}` | Additional annotations to add into metadata. |\n| additionalClusterRoleRules | list | `[]` | Specifies additional rules for the core ClusterRole. |\n| additionalLabels | object | `{}` | Additional labels to add into metadata. |\n| affinity | object | `{\"nodeAffinity\":{\"requiredDuringSchedulingIgnoredDuringExecution\":{\"nodeSelectorTerms\":[{\"matchExpressions\":[{\"key\":\"karpenter.sh/nodepool\",\"operator\":\"DoesNotExist\"}]}]}},\"podAntiAffinity\":{\"requiredDuringSchedulingIgnoredDuringExecution\":[{\"topologyKey\":\"kubernetes.io/hostname\"}]}}` | Affinity rules for scheduling the pod. If an explicit label selector is not provided for pod affinity or pod anti-affinity one will be created from the pod selector labels. |\n| controller.containerName | string | `\"controller\"` | Distinguishing container name (containerName: karpenter-controller). |\n| controller.env | list | `[]` | Additional environment variables for the controller pod. |\n| controller.envFrom | list | `[]` |  |\n| controller.extraVolumeMounts | list | `[]` | Additional volumeMounts for the controller container. |\n| controller.healthProbe.port | int | `8081` | The container port to use for http health probe. |\n| controller.image.digest | string | `\"sha256:0c215133a37e0d8bc2515b75120d2fefa14be3f939aebc14020813cdc3c001a3\"` | SHA256 digest of the controller image. |\n| controller.image.repository | string | `\"public.ecr.aws/karpenter/controller\"` | Repository path to the controller image. |\n| controller.image.tag | string | `\"1.10.0\"` | Tag of the controller image. |\n| controller.metrics.port | int | `8080` | The container port to use for metrics. |\n| controller.resources | object | `{}` | Resources for the controller container. |\n| controller.securityContext.appArmorProfile | object | `{}` | AppArmor profile for the controller container. |\n| controller.securityContext.seLinuxOptions | object | `{}` | SELinux options for the controller container. |\n| controller.securityContext.seccompProfile | object | `{}` | Seccomp profile for the controller container. |\n| controller.sidecarContainer | list | `[]` | Additional sidecarContainer config |\n| controller.sidecarVolumeMounts | list | `[]` | Additional volumeMounts for the sidecar - this will be added to the volume mounts on top of extraVolumeMounts |\n| dnsConfig | object | `{}` | Configure DNS Config for the pod |\n| dnsPolicy | string | `\"ClusterFirst\"` | Configure the DNS Policy for the pod |\n| extraVolumes | list | `[]` | Additional volumes for the pod. |\n| fullnameOverride | string | `\"\"` | Overrides the chart's computed fullname. |\n| hostNetwork | bool | `false` | Bind the pod to the host network. This is required when using a custom CNI. |\n| imagePullPolicy | string | `\"IfNotPresent\"` | Image pull policy for Docker images. |\n| imagePullSecrets | list | `[]` | Image pull secrets for Docker images. |\n| initContainers | object | `{}` | add additional initContainers to run before karpenter container starts |\n| logErrorOutputPaths | list | `[\"stderr\"]` | Log errorOutputPaths - defaults to stderr only |\n| logLevel | string | `\"info\"` | Global log level, defaults to 'info' |\n| logOutputPaths | list | `[\"stdout\"]` | Log outputPaths - defaults to stdout only |\n| nameOverride | string | `\"\"` | Overrides the chart's name. |\n| nodeSelector | object | `{\"kubernetes.io/os\":\"linux\"}` | Node selectors to schedule the pod to nodes with labels. |\n| podAnnotations | object | `{}` | Additional annotations for the pod. |\n| podDisruptionBudget.maxUnavailable | int | `1` |  |\n| podDisruptionBudget.name | string | `\"karpenter\"` |  |\n| podLabels | object | `{}` | Additional labels for the pod. |\n| podSecurityContext | object | `{\"fsGroup\":65532,\"seccompProfile\":{\"type\":\"RuntimeDefault\"}}` | SecurityContext for the pod. |\n| priorityClassName | string | `\"system-cluster-critical\"` | PriorityClass name for the pod. |\n| replicas | int | `2` | Number of replicas. |\n| revisionHistoryLimit | int | `10` | The number of old ReplicaSets to retain to allow rollback. |\n| schedulerName | string | `\"default-scheduler\"` | Specify which Kubernetes scheduler should dispatch the pod. |\n| service.annotations | object | `{}` | Additional annotations for the Service. |\n| serviceAccount.annotations | object | `{}` | Additional annotations for the ServiceAccount. |\n| serviceAccount.create | bool | `true` | Specifies if a ServiceAccount should be created. |\n| serviceAccount.name | string | `\"\"` | The name of the ServiceAccount to use. If not set and create is true, a name is generated using the fullname template. |\n| serviceMonitor.additionalLabels | object | `{}` | Additional labels for the ServiceMonitor. |\n| serviceMonitor.enabled | bool | `false` | Specifies whether a ServiceMonitor should be created. |\n| serviceMonitor.endpointConfig | object | `{}` | Configuration on `http-metrics` endpoint for the ServiceMonitor. Not to be used to add additional endpoints. See the Prometheus operator documentation for configurable fields https://github.com/prometheus-operator/prometheus-operator/blob/main/Documentation/api-reference/api.md#endpoint |\n| serviceMonitor.metricRelabelings | list | `[]` | Metric relabelings for the `http-metrics` endpoint on the ServiceMonitor. For more details on metric relabelings, see: https://prometheus.io/docs/prometheus/latest/configuration/configuration/#metric_relabel_configs |\n| serviceMonitor.relabelings | list | `[]` | Relabelings for the `http-metrics` endpoint on the ServiceMonitor. For more details on relabelings, see: https://prometheus.io/docs/prometheus/latest/configuration/configuration/#relabel_config |\n| serviceMonitor.sampleLimit | string | `nil` | Specifies the sampleLimit for prometheus scrapes. Per-scrape limit on the number of scraped samples that will be accepted. If more than this number of samples are present after metric relabeling the entire scrape will be treated as failed. 0 means no limit. |\n| settings | object | `{\"batchIdleDuration\":\"1s\",\"batchMaxDuration\":\"10s\",\"clusterCABundle\":\"\",\"clusterEndpoint\":\"\",\"clusterName\":\"\",\"disableClusterStateObservability\":false,\"disableDryRun\":false,\"eksControlPlane\":false,\"featureGates\":{\"nodeOverlay\":false,\"nodeRepair\":false,\"reservedCapacity\":true,\"spotToSpotConsolidation\":false,\"staticCapacity\":false},\"ignoreDRARequests\":true,\"interruptionQueue\":\"\",\"isolatedVPC\":false,\"minValuesPolicy\":\"Strict\",\"preferencePolicy\":\"Respect\",\"reservedENIs\":\"0\",\"vmMemoryOverheadPercent\":0.075}` | Global Settings to configure Karpenter |\n| 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. |\n| 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. |\n| settings.clusterCABundle | string | `\"\"` | Cluster CA bundle for TLS configuration of provisioned nodes. If not set, this is taken from the controller's TLS configuration for the API server. |\n| settings.clusterEndpoint | string | `\"\"` | Cluster endpoint. If not set, will be discovered during startup (EKS only). |\n| settings.clusterName | string | `\"\"` | Cluster name. |\n| settings.disableClusterStateObservability | bool | `false` | Disable cluster state metrics and events. |\n| settings.disableDryRun | bool | `false` | Disable dry run validation for EC2NodeClasses. |\n| settings.eksControlPlane | bool | `false` | Marking this true means that your cluster is running with an EKS control plane and Karpenter should attempt to discover cluster details from the DescribeCluster API. |\n| settings.featureGates | object | `{\"nodeOverlay\":false,\"nodeRepair\":false,\"reservedCapacity\":true,\"spotToSpotConsolidation\":false,\"staticCapacity\":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. |\n| settings.featureGates.nodeOverlay | bool | `false` | nodeOverlay is ALPHA and is disabled by default. Setting this will allow the use of node overlay to impact scheduling decisions |\n| settings.featureGates.nodeRepair | bool | `false` | nodeRepair is ALPHA and is disabled by default. Setting this to true will enable node repair. |\n| settings.featureGates.reservedCapacity | bool | `true` | reservedCapacity is BETA and is enabled by default. Setting this will enable native on-demand capacity reservation support. |\n| settings.featureGates.spotToSpotConsolidation | bool | `false` | spotToSpotConsolidation is ALPHA and is disabled by default. Setting this to true will enable spot replacement consolidation for both single and multi-node consolidation. |\n| settings.featureGates.staticCapacity | bool | `false` | staticCapacity is ALPHA and is disabled by default. Setting this to true will enable static capacity provisioning. |\n| settings.ignoreDRARequests | bool | `true` | Ignore pods' DRA requests during scheduling simulations. |\n| settings.interruptionQueue | string | `\"\"` | Interruption queue is the name of the SQS queue used for processing interruption events from EC2. Interruption handling is disabled if not specified. Enabling interruption handling may require additional permissions on the controller service account. Additional permissions are outlined in the docs. |\n| settings.isolatedVPC | bool | `false` | 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. |\n| settings.minValuesPolicy | string | `\"Strict\"` | How the Karpenter scheduler treats min values. Options include 'Strict' (fails scheduling when min values can't be met) and 'BestEffort' (relaxes min values when they can't be met). |\n| settings.preferencePolicy | string | `\"Respect\"` | How the Karpenter scheduler should treat preferences. Preferences include preferredDuringSchedulingIgnoreDuringExecution node and pod affinities/anti-affinities and ScheduleAnyways topologySpreadConstraints. Can be one of 'Ignore' and 'Respect' |\n| settings.reservedENIs | string | `\"0\"` | Reserved ENIs are not included in the calculations for max-pods or kube-reserved. This is most often used in the VPC CNI custom networking setup https://docs.aws.amazon.com/eks/latest/userguide/cni-custom-network.html. |\n| settings.vmMemoryOverheadPercent | float | `0.075` | The VM memory overhead as a percent that will be subtracted from the total memory for all instance types. The value of `0.075` equals to 7.5%. |\n| strategy | object | `{\"rollingUpdate\":{\"maxUnavailable\":1}}` | Strategy for updating the pod. |\n| terminationGracePeriodSeconds | string | `nil` | Override the default termination grace period for the pod. |\n| tolerations | list | `[{\"key\":\"CriticalAddonsOnly\",\"operator\":\"Exists\"}]` | Tolerations to allow the pod to be scheduled to nodes with taints. |\n| topologySpreadConstraints | list | `[{\"maxSkew\":1,\"topologyKey\":\"topology.kubernetes.io/zone\",\"whenUnsatisfiable\":\"DoNotSchedule\"}]` | Topology spread constraints to increase the controller resilience by distributing pods across the cluster zones. If an explicit label selector is not provided one will be created from the pod selector labels. |\n\n----------------------------------------------\n\nAutogenerated from chart metadata using [helm-docs](https://github.com/norwoodj/helm-docs/).\n"
  },
  {
    "path": "charts/karpenter/README.md.gotmpl",
    "content": "{{ template \"chart.header\" . }}\n{{ template \"chart.description\" . }}\n\n{{ template \"chart.versionBadge\" . }}{{ template \"chart.typeBadge\" . }}{{ template \"chart.appVersionBadge\" . }}\n\n## Documentation\n\nFor full Karpenter documentation please checkout [https://karpenter.sh](https://karpenter.sh/docs/).\n\n## Installing the Chart\n\nYou can follow the detailed installation instruction in the [documentation](https://karpenter.sh/docs/getting-started/getting-started-with-karpenter) which covers the Karpenter prerequisites and installation options. The outcome of these instructions should result in something like the following command.\n\n```bash\nhelm upgrade --install --namespace karpenter --create-namespace \\\n  karpenter oci://public.ecr.aws/karpenter/{{ template \"chart.name\" . }} \\\n  --version {{ template \"chart.version\" . }} \\\n  --set \"serviceAccount.annotations.eks\\.amazonaws\\.com/role-arn=${KARPENTER_IAM_ROLE_ARN}\" \\\n  --set settings.clusterName=${CLUSTER_NAME} \\\n  --set settings.interruptionQueue=${CLUSTER_NAME} \\\n  --wait\n```\n\n### Verification\n\nAs the OCI Helm chart is signed by [Cosign](https://github.com/sigstore/cosign) as part of the release process you can verify the chart before installing it by running the following command.\n\n```shell\ncosign verify public.ecr.aws/karpenter/karpenter:{{ template \"chart.version\" . }} \\\n  --certificate-oidc-issuer=https://token.actions.githubusercontent.com \\\n  --certificate-identity-regexp='https://github\\.com/aws/karpenter-provider-aws/\\.github/workflows/release\\.yaml@.+' \\\n  --certificate-github-workflow-repository=aws/karpenter-provider-aws \\\n  --certificate-github-workflow-name=Release \\\n  --certificate-github-workflow-ref=refs/tags/v{{ template \"chart.version\" . }} \\\n  --annotations version={{ template \"chart.version\" . }}\n```\n\n{{ template \"chart.requirementsSection\" . }}\n\n{{ template \"chart.valuesSection\" . }}\n\n----------------------------------------------\n\nAutogenerated from chart metadata using [helm-docs](https://github.com/norwoodj/helm-docs/).\n"
  },
  {
    "path": "charts/karpenter/artifacthub-repo.yaml",
    "content": "repositoryID: 356cb63f-9ee3-4956-9c20-003e416715c7\nowners: []\n#   - name: awsadmin1\n#     email: artifacthub1@aws.com\nignore:\n  - name: karpenter\n    version: (?:^\\d+$)|(?:^v?0\\.0\\.0)|(?:^v?\\d+\\-)\n"
  },
  {
    "path": "charts/karpenter/templates/_helpers.tpl",
    "content": "{{/*\nExpand the name of the chart.\n*/}}\n{{- define \"karpenter.name\" -}}\n{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix \"-\" }}\n{{- end }}\n\n{{/*\nCreate a default fully qualified app name.\nWe truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).\nIf release name contains chart name it will be used as a full name.\n*/}}\n{{- define \"karpenter.fullname\" -}}\n{{- if .Values.fullnameOverride }}\n{{- .Values.fullnameOverride | trunc 63 | trimSuffix \"-\" }}\n{{- else }}\n{{- $name := default .Chart.Name .Values.nameOverride }}\n{{- if contains $name .Release.Name }}\n{{- .Release.Name | trunc 63 | trimSuffix \"-\" }}\n{{- else }}\n{{- printf \"%s-%s\" .Release.Name $name | trunc 63 | trimSuffix \"-\" }}\n{{- end }}\n{{- end }}\n{{- end }}\n\n{{/*\nCreate chart name and version as used by the chart label.\n*/}}\n{{- define \"karpenter.chart\" -}}\n{{- printf \"%s-%s\" .Chart.Name .Chart.Version | replace \"+\" \"_\" | trunc 63 | trimSuffix \"-\" }}\n{{- end }}\n\n{{/*\nCommon labels\n*/}}\n{{- define \"karpenter.labels\" -}}\nhelm.sh/chart: {{ include \"karpenter.chart\" . }}\n{{ include \"karpenter.selectorLabels\" . }}\n{{- if .Chart.AppVersion }}\napp.kubernetes.io/version: {{ .Chart.AppVersion | quote }}\n{{- end }}\napp.kubernetes.io/managed-by: {{ .Release.Service }}\n{{- with .Values.additionalLabels }}\n{{ toYaml . }}\n{{- end }}\n{{- end }}\n\n{{/*\nSelector labels\n*/}}\n{{- define \"karpenter.selectorLabels\" -}}\napp.kubernetes.io/name: {{ include \"karpenter.name\" . }}\napp.kubernetes.io/instance: {{ .Release.Name }}\n{{- end }}\n\n{{/*\nCreate the name of the service account to use\n*/}}\n{{- define \"karpenter.serviceAccountName\" -}}\n{{- if .Values.serviceAccount.create }}\n{{- default (include \"karpenter.fullname\" .) .Values.serviceAccount.name }}\n{{- else }}\n{{- default \"default\" .Values.serviceAccount.name }}\n{{- end }}\n{{- end }}\n\n{{/*\nKarpenter image to use\n*/}}\n{{- define \"karpenter.controller.image\" -}}\n{{- if .Values.controller.image.digest }}\n{{- printf \"%s:%s@%s\" .Values.controller.image.repository  (default (printf \"%s\" .Chart.AppVersion) .Values.controller.image.tag) .Values.controller.image.digest }}\n{{- else }}\n{{- printf \"%s:%s\" .Values.controller.image.repository  (default (printf \"%s\" .Chart.AppVersion) .Values.controller.image.tag) }}\n{{- end }}\n{{- end }}\n\n{{/*\nKarpenter controller container name\n*/}}\n{{- define \"karpenter.controller.containerName\" -}}\n{{- .Values.controller.containerName | default \"controller\" -}}\n{{- end -}}\n\n{{/* Get PodDisruptionBudget API Version */}}\n{{- define \"karpenter.pdb.apiVersion\" -}}\n{{- if and (.Capabilities.APIVersions.Has \"policy/v1\") (semverCompare \">= 1.21-0\" .Capabilities.KubeVersion.Version) -}}\n{{- print \"policy/v1\" -}}\n{{- else -}}\n{{- print \"policy/v1beta1\" -}}\n{{- end -}}\n{{- end -}}\n\n{{/*\nPatch the label selector on an object\nThis template will add a labelSelector using matchLabels to the object referenced at _target if there is no labelSelector specified.\nThe matchLabels are created with the selectorLabels template.\nThis works because Helm treats dictionaries as mutable objects and allows passing them by reference.\n*/}}\n{{- define \"karpenter.patchLabelSelector\" -}}\n{{- if not (hasKey ._target \"labelSelector\") }}\n{{- $selectorLabels := (include \"karpenter.selectorLabels\" .) | fromYaml }}\n{{- $_ := set ._target \"labelSelector\" (dict \"matchLabels\" $selectorLabels) }}\n{{- end }}\n{{- end }}\n\n{{/*\nPatch pod affinity\nThis template uses the patchLabelSelector template to add a labelSelector to pod affinity objects if there is no labelSelector specified.\nThis works because Helm treats dictionaries as mutable objects and allows passing them by reference.\n*/}}\n{{- define \"karpenter.patchPodAffinity\" -}}\n{{- if (hasKey ._podAffinity \"requiredDuringSchedulingIgnoredDuringExecution\") }}\n{{- range $term := ._podAffinity.requiredDuringSchedulingIgnoredDuringExecution }}\n{{- include \"karpenter.patchLabelSelector\" (merge (dict \"_target\" $term) $) }}\n{{- end }}\n{{- end }}\n{{- if (hasKey ._podAffinity \"preferredDuringSchedulingIgnoredDuringExecution\") }}\n{{- range $weightedTerm := ._podAffinity.preferredDuringSchedulingIgnoredDuringExecution }}\n{{- include \"karpenter.patchLabelSelector\" (merge (dict \"_target\" $weightedTerm.podAffinityTerm) $) }}\n{{- end }}\n{{- end }}\n{{- end }}\n\n{{/*\nPatch affinity\nThis template uses patchPodAffinity template to add a labelSelector to podAffinity & podAntiAffinity if one isn't specified.\nThis works because Helm treats dictionaries as mutable objects and allows passing them by reference.\n*/}}\n{{- define \"karpenter.patchAffinity\" -}}\n{{- if (hasKey .Values.affinity \"podAffinity\") }}\n{{- include \"karpenter.patchPodAffinity\" (merge (dict \"_podAffinity\" .Values.affinity.podAffinity) .) }}\n{{- end }}\n{{- if (hasKey .Values.affinity \"podAntiAffinity\") }}\n{{- include \"karpenter.patchPodAffinity\" (merge (dict \"_podAffinity\" .Values.affinity.podAntiAffinity) .) }}\n{{- end }}\n{{- end }}\n\n{{/*\nPatch topology spread constraints\nThis template uses the patchLabelSelector template to add a labelSelector to topologySpreadConstraints if one isn't specified.\nThis works because Helm treats dictionaries as mutable objects and allows passing them by reference.\n*/}}\n{{- define \"karpenter.patchTopologySpreadConstraints\" -}}\n{{- range $constraint := .Values.topologySpreadConstraints }}\n{{- include \"karpenter.patchLabelSelector\" (merge (dict \"_target\" $constraint) $) }}\n{{- end }}\n{{- end }}\n"
  },
  {
    "path": "charts/karpenter/templates/aggregate-clusterrole.yaml",
    "content": "apiVersion: rbac.authorization.k8s.io/v1\nkind: ClusterRole\nmetadata:\n  name: {{ include \"karpenter.fullname\" . }}-admin\n  labels:\n    rbac.authorization.k8s.io/aggregate-to-admin: \"true\"\n    {{- include \"karpenter.labels\" . | nindent 4 }}\n  {{- with .Values.additionalAnnotations }}\n  annotations:\n    {{- toYaml . | nindent 4 }}\n  {{- end }}\nrules:\n  - apiGroups: [\"karpenter.sh\"]\n    resources: [\"nodepools\", \"nodepools/status\", \"nodeclaims\", \"nodeclaims/status\"]\n    verbs: [\"get\", \"list\", \"watch\", \"create\", \"delete\", \"patch\"]\n  - apiGroups: [\"karpenter.k8s.aws\"]\n    resources: [\"ec2nodeclasses\"]\n    verbs: [\"get\", \"list\", \"watch\", \"create\", \"delete\", \"patch\"]\n"
  },
  {
    "path": "charts/karpenter/templates/clusterrole-core.yaml",
    "content": "apiVersion: rbac.authorization.k8s.io/v1\nkind: ClusterRoleBinding\nmetadata:\n  name: {{ include \"karpenter.fullname\" . }}-core\n  labels:\n    {{- include \"karpenter.labels\" . | nindent 4 }}\n  {{- with .Values.additionalAnnotations }}\n  annotations:\n    {{- toYaml . | nindent 4 }}\n  {{- end }}\nroleRef:\n  apiGroup: rbac.authorization.k8s.io\n  kind: ClusterRole\n  name: {{ include \"karpenter.fullname\" . }}-core\nsubjects:\n  - kind: ServiceAccount\n    name: {{ template \"karpenter.serviceAccountName\" . }}\n    namespace: {{ .Release.Namespace }}\n---\napiVersion: rbac.authorization.k8s.io/v1\nkind: ClusterRole\nmetadata:\n  name: {{ include \"karpenter.fullname\" . }}-core\n  labels:\n    {{- include \"karpenter.labels\" . | nindent 4 }}\n  {{- with .Values.additionalAnnotations }}\n  annotations:\n    {{- toYaml . | nindent 4 }}\n  {{- end }}\nrules:\n  # Read\n  - apiGroups: [\"karpenter.sh\"]\n    resources: [\"nodepools\", \"nodepools/status\", \"nodeclaims\", \"nodeclaims/status\", \"nodeoverlays\", \"nodeoverlays/status\"]\n    verbs: [\"get\", \"list\", \"watch\"]\n  - apiGroups: [\"\"]\n    resources: [\"pods\", \"nodes\", \"persistentvolumes\", \"persistentvolumeclaims\", \"replicationcontrollers\", \"namespaces\"]\n    verbs: [\"get\", \"list\", \"watch\"]\n  - apiGroups: [\"storage.k8s.io\"]\n    resources: [\"storageclasses\", \"csinodes\", \"volumeattachments\"]\n    verbs: [\"get\", \"watch\", \"list\"]\n  - apiGroups: [\"apps\"]\n    resources: [\"daemonsets\", \"deployments\", \"replicasets\", \"statefulsets\"]\n    verbs: [\"list\", \"watch\"]\n  - apiGroups: [\"policy\"]\n    resources: [\"poddisruptionbudgets\"]\n    verbs: [\"get\", \"list\", \"watch\"]\n  - apiGroups: [\"\"]\n    resources: [\"events\"]\n    verbs: [\"get\", list, \"watch\"]\n  # Write\n  - apiGroups: [\"karpenter.sh\"]\n    resources: [\"nodeclaims\", \"nodeclaims/status\"]\n    verbs: [\"create\", \"delete\", \"update\", \"patch\"]\n  - apiGroups: [\"karpenter.sh\"]\n    resources: [\"nodepools\", \"nodepools/status\", \"nodeoverlays/status\"]\n    verbs: [\"update\", \"patch\"]\n  - apiGroups: [\"\"]\n    resources: [\"events\"]\n    verbs: [\"create\", \"patch\"]\n  - apiGroups: [\"\"]\n    resources: [\"nodes\"]\n    verbs: [\"patch\", \"delete\", \"update\"]\n  - apiGroups: [\"\"]\n    resources: [\"pods/eviction\"]\n    verbs: [\"create\"]\n  - apiGroups: [\"\"]\n    resources: [\"pods\"]\n    verbs: [\"delete\"]\n  {{- with .Values.additionalClusterRoleRules -}}\n  {{ toYaml . | nindent 2 }}\n  {{- end -}}\n"
  },
  {
    "path": "charts/karpenter/templates/clusterrole.yaml",
    "content": "apiVersion: rbac.authorization.k8s.io/v1\nkind: ClusterRoleBinding\nmetadata:\n  name: {{ include \"karpenter.fullname\" . }}\n  labels:\n    {{- include \"karpenter.labels\" . | nindent 4 }}\n  {{- with .Values.additionalAnnotations }}\n  annotations:\n    {{- toYaml . | nindent 4 }}\n  {{- end }}\nroleRef:\n  apiGroup: rbac.authorization.k8s.io\n  kind: ClusterRole\n  name: {{ include \"karpenter.fullname\" . }}\nsubjects:\n  - kind: ServiceAccount\n    name: {{ template \"karpenter.serviceAccountName\" . }}\n    namespace: {{ .Release.Namespace }}\n---\napiVersion: rbac.authorization.k8s.io/v1\nkind: ClusterRole\nmetadata:\n  name: {{ include \"karpenter.fullname\" . }}\n  labels:\n    {{- include \"karpenter.labels\" . | nindent 4 }}\n  {{- with .Values.additionalAnnotations }}\n  annotations:\n    {{- toYaml . | nindent 4 }}\n  {{- end }}\nrules:\n  # Read\n  - apiGroups: [\"karpenter.k8s.aws\"]\n    resources: [\"ec2nodeclasses\"]\n    verbs: [\"get\", \"list\", \"watch\"]\n  # Write\n  - apiGroups: [\"karpenter.k8s.aws\"]\n    resources: [\"ec2nodeclasses\", \"ec2nodeclasses/status\"]\n    verbs: [\"patch\", \"update\"]"
  },
  {
    "path": "charts/karpenter/templates/deployment.yaml",
    "content": "apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: {{ include \"karpenter.fullname\" . }}\n  namespace: {{ .Release.Namespace }}\n  labels:\n    {{- include \"karpenter.labels\" . | nindent 4 }}\n  {{- with .Values.additionalAnnotations }}\n  annotations:\n    {{- toYaml . | nindent 4 }}\n  {{- end }}\nspec:\n  replicas: {{ .Values.replicas }}\n  revisionHistoryLimit: {{ .Values.revisionHistoryLimit }}\n  {{- with .Values.strategy }}\n  strategy:\n    {{- toYaml . | nindent 4 }}\n  {{- end }}\n  selector:\n    matchLabels:\n      {{- include \"karpenter.selectorLabels\" . | nindent 6 }}\n  template:\n    metadata:\n      labels:\n        {{- include \"karpenter.selectorLabels\" . | nindent 8 }}\n      {{- with .Values.podLabels }}\n        {{- toYaml . | nindent 8 }}\n      {{- end }}\n      annotations:\n        {{- with .Values.podAnnotations }}\n          {{- toYaml . | nindent 8 }}\n        {{- end }}\n    spec:\n      {{- with .Values.imagePullSecrets }}\n      imagePullSecrets:\n        {{- toYaml . | nindent 8 }}\n      {{- end }}\n      automountServiceAccountToken: true\n      serviceAccountName: {{ include \"karpenter.serviceAccountName\" . }}\n      {{- with .Values.podSecurityContext }}\n      securityContext:\n        {{- toYaml . | nindent 8 }}\n      {{- end }}\n      {{- with .Values.priorityClassName }}\n      priorityClassName: {{ . | quote }}\n      {{- end }}\n      {{- with .Values.terminationGracePeriodSeconds }}\n      terminationGracePeriodSeconds: {{ . }}\n      {{- end }}\n      {{- with .Values.dnsPolicy }}\n      dnsPolicy: {{ . }}\n      {{- end }}\n      {{- with .Values.dnsConfig }}\n      dnsConfig:\n        {{- toYaml . | nindent 8}}\n      {{- end }}\n      {{- if .Values.hostNetwork }}\n      hostNetwork: true\n      {{- end }}\n      {{- with .Values.schedulerName }}\n      schedulerName: {{ . | quote }}\n      {{- end }}\n      containers:\n        - name: {{ include \"karpenter.controller.containerName\" . }}\n          securityContext:\n            privileged: false\n            allowPrivilegeEscalation: false\n            readOnlyRootFilesystem: true\n            runAsNonRoot: true\n            runAsUser: 65532\n            runAsGroup: 65532\n            capabilities:\n              drop:\n                - ALL\n          {{- with .Values.controller.securityContext }}\n          {{- with .appArmorProfile }}\n            appArmorProfile:\n              {{- toYaml . | nindent 14}}\n          {{- end }}\n          {{- with .seLinuxOptions }}\n            seLinuxOptions:\n              {{- toYaml . | nindent 14}}\n          {{- end }}\n          {{- with .seccompProfile }}\n            seccompProfile:\n              {{- toYaml . | nindent 14}}\n          {{- end }}\n          {{- end }}\n          image: {{ include \"karpenter.controller.image\" . }}\n          imagePullPolicy: {{ .Values.imagePullPolicy }}\n          env:\n            - name: KUBERNETES_MIN_VERSION\n              value: \"1.19.0-0\"\n            - name: KARPENTER_SERVICE\n              value: {{ include \"karpenter.fullname\" . }}\n          {{- with .Values.logLevel }}\n            - name: LOG_LEVEL\n              value: \"{{ . }}\"\n          {{- end }}\n          {{- with .Values.logOutputPaths }}\n            - name: LOG_OUTPUT_PATHS\n              value: \"{{ join \",\" . }}\"\n          {{- end }}\n          {{- with .Values.logErrorOutputPaths }}\n            - name: LOG_ERROR_OUTPUT_PATHS\n              value: \"{{ join \",\" . }}\"\n          {{- end }}\n            - name: METRICS_PORT\n              value: \"{{ .Values.controller.metrics.port }}\"\n            - name: HEALTH_PROBE_PORT\n              value: \"{{ .Values.controller.healthProbe.port }}\"\n            - name: SYSTEM_NAMESPACE\n              valueFrom:\n                fieldRef:\n                  fieldPath: metadata.namespace\n            - name: CPU_REQUESTS\n              valueFrom:\n                resourceFieldRef:\n                  containerName: {{ include \"karpenter.controller.containerName\" . }}\n                  divisor: 1m\n                  resource: requests.cpu\n            - name: MEMORY_LIMIT\n              valueFrom:\n                resourceFieldRef:\n                  containerName: {{ include \"karpenter.controller.containerName\" . }}\n                  divisor: \"0\"\n                  resource: limits.memory\n            - name: FEATURE_GATES\n              value: \"ReservedCapacity={{ .Values.settings.featureGates.reservedCapacity }},SpotToSpotConsolidation={{ .Values.settings.featureGates.spotToSpotConsolidation }},NodeRepair={{ .Values.settings.featureGates.nodeRepair }},NodeOverlay={{ .Values.settings.featureGates.nodeOverlay }},StaticCapacity={{ .Values.settings.featureGates.staticCapacity }}\"\n          {{- with .Values.settings.batchMaxDuration }}\n            - name: BATCH_MAX_DURATION\n              value: \"{{ tpl (toString .) $ }}\"\n          {{- end }}\n          {{- with .Values.settings.batchIdleDuration }}\n            - name: BATCH_IDLE_DURATION\n              value: \"{{ tpl (toString .) $ }}\"\n          {{- end }}\n          {{- with .Values.settings.preferencePolicy }}\n            - name: PREFERENCE_POLICY\n              value: \"{{ . }}\"\n          {{- end }}\n          {{- with .Values.settings.minValuesPolicy }}\n            - name: MIN_VALUES_POLICY\n              value: \"{{ . }}\"\n          {{- end }}\n          {{- with .Values.settings.clusterCABundle }}\n            - name: CLUSTER_CA_BUNDLE\n              value: \"{{ tpl (toString .) $ }}\"\n          {{- end }}\n            - name: CLUSTER_NAME\n              value: \"{{ required \"Chart cannot be installed without a valid settings.clusterName!\" (tpl .Values.settings.clusterName .) }}\"\n          {{- with .Values.settings.clusterEndpoint }}\n            - name: CLUSTER_ENDPOINT\n              value: \"{{ tpl (toString .) $ }}\"\n          {{- end }}\n          {{- with .Values.settings.isolatedVPC }}\n            - name: ISOLATED_VPC\n              value: \"{{ tpl (toString .) $ }}\"\n          {{- end }}\n          {{- with .Values.settings.eksControlPlane }}\n            - name: EKS_CONTROL_PLANE\n              value: \"{{ tpl (toString .) $ }}\"\n          {{- end }}\n          {{- with .Values.settings.vmMemoryOverheadPercent }}\n            - name: VM_MEMORY_OVERHEAD_PERCENT\n              value: \"{{ tpl (toString .) $ }}\"\n          {{- end }}\n          {{- with .Values.settings.interruptionQueue }}\n            - name: INTERRUPTION_QUEUE\n              value: \"{{ tpl (toString .) $ }}\"\n          {{- end }}\n          {{- with .Values.settings.reservedENIs }}\n            - name: RESERVED_ENIS\n              value: \"{{ tpl (toString .) $ }}\"\n          {{- end }}\n          {{- with .Values.settings.ignoreDRARequests }}\n            - name: IGNORE_DRA_REQUESTS\n              value: \"{{ tpl (toString .) $ }}\"\n          {{- end }}\n          {{- with .Values.settings.disableClusterStateObservability }}\n            - name: DISABLE_CLUSTER_STATE_OBSERVABILITY\n              value: \"{{ tpl (toString .) $ }}\"\n          {{- end }}\n          {{- with .Values.settings.disableDryRun }}\n            - name: DISABLE_DRY_RUN\n              value: \"{{ tpl (toString .) $ }}\"\n          {{- end }}\n          {{- with .Values.controller.env }}\n            {{- toYaml . | nindent 12 }}\n          {{- end }}\n          {{- with .Values.controller.envFrom }}\n          envFrom:\n            {{- toYaml . | nindent 12 }}\n          {{- end }}\n          ports:\n            - name: http-metrics\n              containerPort: {{ .Values.controller.metrics.port }}\n              protocol: TCP\n            - name: http\n              containerPort: {{ .Values.controller.healthProbe.port }}\n              protocol: TCP\n          livenessProbe:\n            initialDelaySeconds: 30\n            timeoutSeconds: 30\n            httpGet:\n              path: /healthz\n              port: http\n          readinessProbe:\n            initialDelaySeconds: 5\n            timeoutSeconds: 30\n            httpGet:\n              path: /readyz\n              port: http\n          {{- with .Values.controller.resources }}\n          resources:\n            {{- toYaml . | nindent 12 }}\n          {{- end }}\n        {{- if .Values.controller.extraVolumeMounts }}\n          volumeMounts:\n          {{- with .Values.controller.extraVolumeMounts }}\n            {{- toYaml . | nindent 12 }}\n          {{- end }}\n        {{- end }}\n        {{- range .Values.controller.sidecarContainer }}\n        - {{- toYaml . | nindent 10 }}\n        {{- if or $.Values.controller.extraVolumeMounts $.Values.controller.sidecarVolumeMounts }}\n          volumeMounts:\n            {{- with $.Values.controller.extraVolumeMounts }}\n            {{- toYaml . | nindent 12 }}\n            {{- end }}\n            {{- with $.Values.controller.sidecarVolumeMounts }}\n            {{- toYaml . | nindent 12 }}\n            {{- end }}\n          {{- end }}\n        {{- end }}\n      {{- with .Values.initContainers }}\n      initContainers:\n        {{- toYaml . | nindent 8 }}\n      {{- end }}\n      {{- with .Values.nodeSelector }}\n      nodeSelector:\n        {{- toYaml . | nindent 8 }}\n      {{- end }}\n      {{- with .Values.affinity }}\n      # The template below patches the .Values.affinity to add a default label selector where not specificed\n      {{- $_ := include \"karpenter.patchAffinity\" $ }}\n      affinity:\n        {{- toYaml . | nindent 8 }}\n      {{- end }}\n      {{- with .Values.topologySpreadConstraints }}\n      # The template below patches the .Values.topologySpreadConstraints to add a default label selector where not specificed\n      {{- $_ := include \"karpenter.patchTopologySpreadConstraints\" $ }}\n      topologySpreadConstraints:\n        {{- toYaml . | nindent 8 }}\n      {{- end }}\n      {{- with .Values.tolerations }}\n      tolerations:\n        {{- toYaml . | nindent 8 }}\n      {{- end }}\n    {{- if .Values.extraVolumes }}\n      volumes:\n      {{- with .Values.extraVolumes }}\n        {{- toYaml . | nindent 8 }}\n      {{- end }}\n    {{- end }}\n"
  },
  {
    "path": "charts/karpenter/templates/poddisruptionbudget.yaml",
    "content": "apiVersion: {{ include \"karpenter.pdb.apiVersion\" . }}\nkind: PodDisruptionBudget\nmetadata:\n  name: {{ .Values.podDisruptionBudget.name }}\n  namespace: {{ .Release.Namespace }}\n  labels:\n    {{- include \"karpenter.labels\" . | nindent 4 }}\n  {{- with .Values.additionalAnnotations }}\n  annotations:\n    {{- toYaml . | nindent 4 }}\n  {{- end }}\nspec:\n  maxUnavailable: {{ .Values.podDisruptionBudget.maxUnavailable }}\n  selector:\n    matchLabels:\n    {{- include \"karpenter.selectorLabels\" . | nindent 6 }}\n"
  },
  {
    "path": "charts/karpenter/templates/role.yaml",
    "content": "apiVersion: rbac.authorization.k8s.io/v1\nkind: Role\nmetadata:\n  name: {{ include \"karpenter.fullname\" . }}\n  namespace: {{ .Release.Namespace }}\n  labels:\n    {{- include \"karpenter.labels\" . | nindent 4 }}\n  {{- with .Values.additionalAnnotations }}\n  annotations:\n    {{- toYaml . | nindent 4 }}\n  {{- end }}\nrules:\n  # Read\n  - apiGroups: [\"coordination.k8s.io\"]\n    resources: [\"leases\"]\n    verbs: [\"get\", \"watch\"]\n  # Write\n  - apiGroups: [\"coordination.k8s.io\"]\n    resources: [\"leases\"]\n    verbs: [\"patch\", \"update\"]\n    resourceNames:\n      - \"karpenter-leader-election\"\n  # Cannot specify resourceNames on create\n  # https://kubernetes.io/docs/reference/access-authn-authz/rbac/#referring-to-resources\n  - apiGroups: [\"coordination.k8s.io\"]\n    resources: [\"leases\"]\n    verbs: [\"create\"]\n---\napiVersion: rbac.authorization.k8s.io/v1\nkind: Role\nmetadata:\n  name: {{ include \"karpenter.fullname\" . }}-dns\n  namespace: kube-system\n  labels:\n    {{- include \"karpenter.labels\" . | nindent 4 }}\n  {{- with .Values.additionalAnnotations }}\n  annotations:\n    {{- toYaml . | nindent 4 }}\n  {{- end }}\nrules:\n  # Read\n  - apiGroups: [\"\"]\n    resources: [\"services\"]\n    resourceNames: [\"kube-dns\"]\n    verbs: [\"get\"]\n"
  },
  {
    "path": "charts/karpenter/templates/rolebinding.yaml",
    "content": "apiVersion: rbac.authorization.k8s.io/v1\nkind: RoleBinding\nmetadata:\n  name: {{ include \"karpenter.fullname\" . }}\n  namespace: {{ .Release.Namespace }}\n  labels:\n    {{- include \"karpenter.labels\" . | nindent 4 }}\n  {{- with .Values.additionalAnnotations }}\n  annotations:\n    {{- toYaml . | nindent 4 }}\n  {{- end }}\nroleRef:\n  apiGroup: rbac.authorization.k8s.io\n  kind: Role\n  name: {{ include \"karpenter.fullname\" . }}\nsubjects:\n  - kind: ServiceAccount\n    name: {{ template \"karpenter.serviceAccountName\" . }}\n    namespace: {{ .Release.Namespace }}\n---\napiVersion: rbac.authorization.k8s.io/v1\nkind: RoleBinding\nmetadata:\n  name: {{ include \"karpenter.fullname\" . }}-dns\n  namespace: kube-system\n  labels:\n    {{- include \"karpenter.labels\" . | nindent 4 }}\n  {{- with .Values.additionalAnnotations }}\n  annotations:\n    {{- toYaml . | nindent 4 }}\n  {{- end }}\nroleRef:\n  apiGroup: rbac.authorization.k8s.io\n  kind: Role\n  name: {{ include \"karpenter.fullname\" . }}-dns\nsubjects:\n  - kind: ServiceAccount\n    name: {{ template \"karpenter.serviceAccountName\" . }}\n    namespace: {{ .Release.Namespace }}"
  },
  {
    "path": "charts/karpenter/templates/service.yaml",
    "content": "apiVersion: v1\nkind: Service\nmetadata:\n  name: {{ include \"karpenter.fullname\" . }}\n  namespace: {{ .Release.Namespace }}\n  labels:\n    {{- include \"karpenter.labels\" . | nindent 4 }}\n  {{- if or .Values.additionalAnnotations .Values.service.annotations }}\n  annotations:\n  {{- with .Values.additionalAnnotations }}\n    {{- toYaml . | nindent 4 }}\n  {{- end }}\n  {{- with .Values.service.annotations }}\n    {{- toYaml . | nindent 4 }}\n  {{- end }}\n  {{- end }}\nspec:\n  type: ClusterIP\n  ports:\n    - name: http-metrics\n      port: {{ .Values.controller.metrics.port }}\n      targetPort: http-metrics\n      protocol: TCP\n  selector:\n    {{- include \"karpenter.selectorLabels\" . | nindent 4 }}\n"
  },
  {
    "path": "charts/karpenter/templates/serviceaccount.yaml",
    "content": "{{- if .Values.serviceAccount.create -}}\napiVersion: v1\nkind: ServiceAccount\nmetadata:\n  name: {{ include \"karpenter.serviceAccountName\" . }}\n  namespace: {{ .Release.Namespace }}\n  labels:\n    {{- include \"karpenter.labels\" . | nindent 4 }}\n  {{- if or .Values.additionalAnnotations .Values.serviceAccount.annotations }}\n  annotations:\n  {{- with .Values.additionalAnnotations }}\n    {{- toYaml . | nindent 4 }}\n  {{- end }}\n  {{- with .Values.serviceAccount.annotations }}\n    {{- toYaml . | nindent 4 }}\n  {{- end }}\n  {{- end }}\nautomountServiceAccountToken: false\n{{- end -}}\n"
  },
  {
    "path": "charts/karpenter/templates/servicemonitor.yaml",
    "content": "{{- if and .Values.serviceMonitor.enabled (.Capabilities.APIVersions.Has \"monitoring.coreos.com/v1\") -}}\napiVersion: monitoring.coreos.com/v1\nkind: ServiceMonitor\nmetadata:\n  name: {{ include \"karpenter.fullname\" . }}\n  namespace: {{ .Release.Namespace }}\n  labels:\n    {{- include \"karpenter.labels\" . | nindent 4 }}\n  {{- with .Values.serviceMonitor.additionalLabels }}\n    {{- toYaml . | nindent 4 }}\n  {{- end }}\n  {{- with .Values.additionalAnnotations }}\n  annotations:\n    {{- toYaml . | nindent 4 }}\n  {{- end }}\nspec:\n  namespaceSelector:\n    matchNames:\n      - {{ .Release.Namespace }}\n  selector:\n    matchLabels:\n      {{- include \"karpenter.selectorLabels\" . | nindent 6 }}\n  {{- if not (eq .Values.serviceMonitor.sampleLimit nil) }}\n  sampleLimit: {{ .Values.serviceMonitor.sampleLimit }}\n  {{- end }}\n  endpoints:\n    - port: http-metrics\n      path: /metrics\n      {{- with .Values.serviceMonitor.relabelings }}\n      relabelings:\n        {{- toYaml . | nindent 6 }}\n      {{- end }}\n      {{- with .Values.serviceMonitor.metricRelabelings }}\n      metricRelabelings:\n        {{- toYaml . | nindent 6 }}\n      {{- end }}\n    {{- with .Values.serviceMonitor.endpointConfig }}\n      {{- toYaml . | nindent 6 }}\n    {{- end }}\n{{- end -}}\n"
  },
  {
    "path": "charts/karpenter/values.yaml",
    "content": "# -- Overrides the chart's name.\nnameOverride: \"\"\n# -- Overrides the chart's computed fullname.\nfullnameOverride: \"\"\n# -- Additional labels to add into metadata.\nadditionalLabels: {}\n# app: karpenter\n\n# -- Additional annotations to add into metadata.\nadditionalAnnotations: {}\n# -- Image pull policy for Docker images.\nimagePullPolicy: IfNotPresent\n# -- Image pull secrets for Docker images.\nimagePullSecrets: []\nservice:\n  # -- Additional annotations for the Service.\n  annotations: {}\nserviceAccount:\n  # -- Specifies if a ServiceAccount should be created.\n  create: true\n  # -- The name of the ServiceAccount to use.\n  # If not set and create is true, a name is generated using the fullname template.\n  name: \"\"\n  # -- Additional annotations for the ServiceAccount.\n  annotations: {}\n# -- Specifies additional rules for the core ClusterRole.\nadditionalClusterRoleRules: []\nserviceMonitor:\n  # -- Specifies whether a ServiceMonitor should be created.\n  enabled: false\n  # -- Additional labels for the ServiceMonitor.\n  additionalLabels: {}\n  # -- Relabelings for the `http-metrics` endpoint on the ServiceMonitor.\n  # For more details on relabelings, see: https://prometheus.io/docs/prometheus/latest/configuration/configuration/#relabel_config\n  relabelings: []\n  # -- Metric relabelings for the `http-metrics` endpoint on the ServiceMonitor.\n  # For more details on metric relabelings, see: https://prometheus.io/docs/prometheus/latest/configuration/configuration/#metric_relabel_configs\n  metricRelabelings: []\n  # -- Configuration on `http-metrics` endpoint for the ServiceMonitor.\n  # Not to be used to add additional endpoints.\n  # See the Prometheus operator documentation for configurable fields https://github.com/prometheus-operator/prometheus-operator/blob/main/Documentation/api-reference/api.md#endpoint\n  endpointConfig: {}\n  # -- Specifies the sampleLimit for prometheus scrapes.\n  # Per-scrape limit on the number of scraped samples that will be accepted.\n  # If more than this number of samples are present after metric relabeling\n  # the entire scrape will be treated as failed. 0 means no limit.\n  sampleLimit: null\n# -- Number of replicas.\nreplicas: 2\n# -- The number of old ReplicaSets to retain to allow rollback.\nrevisionHistoryLimit: 10\n# -- Strategy for updating the pod.\nstrategy:\n  rollingUpdate:\n    maxUnavailable: 1\n# -- Additional labels for the pod.\npodLabels: {}\n# -- Additional annotations for the pod.\npodAnnotations: {}\npodDisruptionBudget:\n  name: karpenter\n  maxUnavailable: 1\n# -- SecurityContext for the pod.\npodSecurityContext:\n  fsGroup: 65532\n  seccompProfile:\n    type: RuntimeDefault\n# -- PriorityClass name for the pod.\npriorityClassName: system-cluster-critical\n# -- Override the default termination grace period for the pod.\nterminationGracePeriodSeconds:\n# -- Bind the pod to the host network.\n# This is required when using a custom CNI.\nhostNetwork: false\n# -- Specify which Kubernetes scheduler should dispatch the pod.\nschedulerName: default-scheduler\n# -- Configure the DNS Policy for the pod\ndnsPolicy: ClusterFirst\n# -- Configure DNS Config for the pod\ndnsConfig: {}\n#  options:\n#    - name: ndots\n#      value: \"1\"\n# -- add additional initContainers to run before karpenter container starts\ninitContainers: {}\n#  - name: list-ec2-instances\n#    image: amazon/aws-cli:latest\n#    command: [ 'aws', 'ec2', 'describe-instance-types']\n# -- Node selectors to schedule the pod to nodes with labels.\nnodeSelector:\n  kubernetes.io/os: linux\n# -- Affinity rules for scheduling the pod. If an explicit label selector is not provided for pod affinity or pod anti-affinity one will be created from the pod selector labels.\naffinity:\n  nodeAffinity:\n    requiredDuringSchedulingIgnoredDuringExecution:\n      nodeSelectorTerms:\n        - matchExpressions:\n            - key: karpenter.sh/nodepool\n              operator: DoesNotExist\n  podAntiAffinity:\n    requiredDuringSchedulingIgnoredDuringExecution:\n      - topologyKey: \"kubernetes.io/hostname\"\n# -- Topology spread constraints to increase the controller resilience by distributing pods across the cluster zones. If an explicit label selector is not provided one will be created from the pod selector labels.\ntopologySpreadConstraints:\n  - maxSkew: 1\n    topologyKey: topology.kubernetes.io/zone\n    whenUnsatisfiable: DoNotSchedule\n# -- Tolerations to allow the pod to be scheduled to nodes with taints.\ntolerations:\n  - key: CriticalAddonsOnly\n    operator: Exists\n# -- Additional volumes for the pod.\nextraVolumes: []\n# - name: aws-iam-token\n#   projected:\n#     defaultMode: 420\n#     sources:\n#     - serviceAccountToken:\n#         audience: sts.amazonaws.com\n#         expirationSeconds: 86400\n#         path: token\ncontroller:\n  # -- Distinguishing container name (containerName: karpenter-controller).\n  containerName: controller\n  image:\n    # -- Repository path to the controller image.\n    repository: public.ecr.aws/karpenter/controller\n    # -- Tag of the controller image.\n    tag: 1.10.0\n    # -- SHA256 digest of the controller image.\n    digest: sha256:0c215133a37e0d8bc2515b75120d2fefa14be3f939aebc14020813cdc3c001a3\n  # -- Additional environment variables for the controller pod.\n  env: []\n  # - name: AWS_REGION\n  #   value: eu-west-1\n  envFrom: []\n  securityContext:\n    # -- AppArmor profile for the controller container.\n    appArmorProfile: {}\n    # -- SELinux options for the controller container.\n    seLinuxOptions: {}\n    # -- Seccomp profile for the controller container.\n    seccompProfile: {}\n  # -- Resources for the controller container.\n  resources: {}\n  # We usually recommend not to specify default resources and to leave this as a conscious\n  # choice for the user. This also increases chances charts run on environments with little\n  # resources, such as Minikube. If you do want to specify resources, uncomment the following\n  # lines, adjust them as necessary, and remove the curly braces after 'resources:'.\n  #  requests:\n  #    cpu: 1\n  #    memory: 1Gi\n  #  limits:\n  #    cpu: 1\n  #    memory: 1Gi\n  # -- Additional volumeMounts for the controller container.\n  extraVolumeMounts: []\n  # - name: aws-iam-token\n  #   mountPath: /var/run/secrets/eks.amazonaws.com/serviceaccount\n  #   readOnly: true\n  # -- Additional sidecarContainer config\n  sidecarContainer: []\n  # -- Additional volumeMounts for the sidecar - this will be added to the volume mounts on top of extraVolumeMounts\n  sidecarVolumeMounts: []\n  metrics:\n    # -- The container port to use for metrics.\n    port: 8080\n  healthProbe:\n    # -- The container port to use for http health probe.\n    port: 8081\n# -- Global log level, defaults to 'info'\nlogLevel: info\n# -- Log outputPaths - defaults to stdout only\nlogOutputPaths:\n  - stdout\n# -- Log errorOutputPaths - defaults to stderr only\nlogErrorOutputPaths:\n  - stderr\n# -- Global Settings to configure Karpenter\nsettings:\n  # -- The maximum length of a batch window. The longer this is, the more pods we can consider for provisioning at one\n  # time which usually results in fewer but larger nodes.\n  batchMaxDuration: 10s\n  # -- The maximum amount of time with no new ending pods that if exceeded ends the current batching window. If pods arrive\n  # faster than this time, the batching window will be extended up to the maxDuration. If they arrive slower, the pods\n  # will be batched separately.\n  batchIdleDuration: 1s\n  # -- How the Karpenter scheduler should treat preferences. Preferences include preferredDuringSchedulingIgnoreDuringExecution\n  # node and pod affinities/anti-affinities and ScheduleAnyways topologySpreadConstraints. Can be one of 'Ignore' and 'Respect'\n  preferencePolicy: Respect\n  # -- How the Karpenter scheduler treats min values. Options include 'Strict' (fails scheduling when min values can't be met) and 'BestEffort' (relaxes min values when they can't be met).\n  minValuesPolicy: Strict\n  # -- Cluster CA bundle for TLS configuration of provisioned nodes. If not set, this is taken from the controller's TLS configuration for the API server.\n  clusterCABundle: \"\"\n  # -- Cluster name.\n  clusterName: \"\"\n  # -- Cluster endpoint. If not set, will be discovered during startup (EKS only).\n  clusterEndpoint: \"\"\n  # -- If true then assume we can't reach AWS services which don't have a VPC endpoint.\n  # This also has the effect of disabling look-ups to the AWS pricing endpoint.\n  isolatedVPC: false\n  # -- Marking this true means that your cluster is running with an EKS control plane and Karpenter should attempt to discover cluster details from the DescribeCluster API.\n  eksControlPlane: false\n  # -- The VM memory overhead as a percent that will be subtracted from the total memory for all instance types. The value of `0.075` equals to 7.5%.\n  vmMemoryOverheadPercent: 0.075\n  # -- Interruption queue is the name of the SQS queue used for processing interruption events from EC2.\n  # Interruption handling is disabled if not specified. Enabling interruption handling may\n  # require additional permissions on the controller service account. Additional permissions are outlined in the docs.\n  interruptionQueue: \"\"\n  # -- Reserved ENIs are not included in the calculations for max-pods or kube-reserved.\n  # This is most often used in the VPC CNI custom networking setup https://docs.aws.amazon.com/eks/latest/userguide/cni-custom-network.html.\n  reservedENIs: \"0\"\n  # -- Ignore pods' DRA requests during scheduling simulations.\n  ignoreDRARequests: true\n  # -- Disable cluster state metrics and events.\n  disableClusterStateObservability: false\n  # -- Disable dry run validation for EC2NodeClasses.\n  disableDryRun: false\n  # -- Feature Gate configuration values. Feature Gates will follow the same graduation process and requirements as feature gates\n  # in Kubernetes. More information here https://kubernetes.io/docs/reference/command-line-tools-reference/feature-gates/#feature-gates-for-alpha-or-beta-features.\n  featureGates:\n    # -- nodeRepair is ALPHA and is disabled by default.\n    # Setting this to true will enable node repair.\n    nodeRepair: false\n    # -- nodeOverlay is ALPHA and is disabled by default.\n    # Setting this will allow the use of node overlay to impact scheduling decisions\n    nodeOverlay: false\n    # -- reservedCapacity is BETA and is enabled by default.\n    # Setting this will enable native on-demand capacity reservation support.\n    reservedCapacity: true\n    # -- spotToSpotConsolidation is ALPHA and is disabled by default.\n    # Setting this to true will enable spot replacement consolidation for both single and multi-node consolidation.\n    spotToSpotConsolidation: false\n    # -- staticCapacity is ALPHA and is disabled by default.\n    # Setting this to true will enable static capacity provisioning.\n    staticCapacity: false\n"
  },
  {
    "path": "charts/karpenter-crd/.helmignore",
    "content": "# Patterns to ignore when building packages.\n# This supports shell glob matching, relative path matching, and\n# negation (prefixed with !). Only one pattern per line.\n.DS_Store\n# Common VCS dirs\n.git/\n.gitignore\n.bzr/\n.bzrignore\n.hg/\n.hgignore\n.svn/\n# Common backup files\n*.swp\n*.bak\n*.tmp\n*.orig\n*~\n# Various IDEs\n.project\n.idea/\n*.tmproj\n.vscode/\n"
  },
  {
    "path": "charts/karpenter-crd/Chart.yaml",
    "content": "apiVersion: v2\nname: karpenter-crd\ndescription: A Helm chart for Karpenter Custom Resource Definitions (CRDs).\ntype: application\nversion: 1.10.0\nappVersion: 1.10.0\nkeywords:\n  - cluster\n  - node\n  - scheduler\n  - autoscaling\n  - lifecycle\nhome: https://karpenter.sh/\nicon: https://repository-images.githubusercontent.com/278480393/dab059c8-caa1-4b55-aaa7-3d30e47a5616\nsources:\n  - https://github.com/aws/karpenter/\n"
  },
  {
    "path": "charts/karpenter-crd/README.md",
    "content": "# karpenter-crd\n\n![Version: 1.3.2](https://img.shields.io/badge/Version-1.3.2-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 1.3.2](https://img.shields.io/badge/AppVersion-1.3.2-informational?style=flat-square)\n\nA Helm chart for Karpenter Custom Resource Definitions (CRDs).\n\n**Homepage:** <https://karpenter.sh/>\n\n## Source Code\n\n* <https://github.com/aws/karpenter/>\n\n## Values\n\n| Key | Type | Default | Description |\n|-----|------|---------|-------------|\n| additionalAnnotations | object | `{}` | Additional annotations for the custom resource definitions. |\n\n----------------------------------------------\n\nAutogenerated from chart metadata using [helm-docs](https://github.com/norwoodj/helm-docs/).\n"
  },
  {
    "path": "charts/karpenter-crd/README.md.gotmpl",
    "content": "{{ template \"chart.header\" . }}\n{{ template \"chart.deprecationWarning\" . }}\n\n{{ template \"chart.badgesSection\" . }}\n\n{{ template \"chart.description\" . }}\n\n{{ template \"chart.homepageLine\" . }}\n\n{{ template \"chart.maintainersSection\" . }}\n\n{{ template \"chart.sourcesSection\" . }}\n\n{{ template \"chart.requirementsSection\" . }}\n\n{{ template \"chart.valuesSection\" . }}\n\n----------------------------------------------\n\nAutogenerated from chart metadata using [helm-docs](https://github.com/norwoodj/helm-docs/).\n"
  },
  {
    "path": "charts/karpenter-crd/artifacthub-repo.yaml",
    "content": "repositoryID: 2cfb6f76-afe1-447f-b036-cd2e230d07d7\nowners: []\n#   - name: awsadmin1\n#     email: artifacthub1@aws.com\nignore:\n  - name: karpenter-crd\n    version: (?:^\\d+$)|(?:^v?0\\.0\\.0)|(?:^v?\\d+\\-)\n"
  },
  {
    "path": "charts/karpenter-crd/templates/karpenter.k8s.aws_ec2nodeclasses.yaml",
    "content": "---\napiVersion: apiextensions.k8s.io/v1\nkind: CustomResourceDefinition\nmetadata:\n  annotations:\n    {{- with .Values.additionalAnnotations }}\n      {{- toYaml . | nindent 4 }}\n    {{- end }}\n    controller-gen.kubebuilder.io/version: v0.20.1\n  name: ec2nodeclasses.karpenter.k8s.aws\nspec:\n  group: karpenter.k8s.aws\n  names:\n    categories:\n      - karpenter\n    kind: EC2NodeClass\n    listKind: EC2NodeClassList\n    plural: ec2nodeclasses\n    shortNames:\n      - ec2nc\n      - ec2ncs\n    singular: ec2nodeclass\n  scope: Cluster\n  versions:\n    - additionalPrinterColumns:\n        - jsonPath: .status.conditions[?(@.type==\"Ready\")].status\n          name: Ready\n          type: string\n        - jsonPath: .metadata.creationTimestamp\n          name: Age\n          type: date\n        - jsonPath: .spec.role\n          name: Role\n          priority: 1\n          type: string\n      name: v1\n      schema:\n        openAPIV3Schema:\n          description: EC2NodeClass is the Schema for the EC2NodeClass API\n          properties:\n            apiVersion:\n              description: |-\n                APIVersion defines the versioned schema of this representation of an object.\n                Servers should convert recognized schemas to the latest internal value, and\n                may reject unrecognized values.\n                More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources\n              type: string\n            kind:\n              description: |-\n                Kind is a string value representing the REST resource this object represents.\n                Servers may infer this from the endpoint the client submits requests to.\n                Cannot be updated.\n                In CamelCase.\n                More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds\n              type: string\n            metadata:\n              type: object\n            spec:\n              description: |-\n                EC2NodeClassSpec is the top level specification for the AWS Karpenter Provider.\n                This will contain configuration necessary to launch instances in AWS.\n              properties:\n                amiFamily:\n                  description: |-\n                    AMIFamily dictates the UserData format and default BlockDeviceMappings used when generating launch templates.\n                    This field is optional when using an alias amiSelectorTerm, and the value will be inferred from the alias'\n                    family. When an alias is specified, this field may only be set to its corresponding family or 'Custom'. If no\n                    alias is specified, this field is required.\n                    NOTE: We ignore the AMIFamily for hashing here because we hash the AMIFamily dynamically by using the alias using\n                    the AMIFamily() helper function\n                  enum:\n                    - AL2\n                    - AL2023\n                    - Bottlerocket\n                    - Custom\n                    - Windows2019\n                    - Windows2022\n                    - Windows2025\n                  type: string\n                amiSelectorTerms:\n                  description: AMISelectorTerms is a list of or ami selector terms. The terms are ORed.\n                  items:\n                    description: |-\n                      AMISelectorTerm defines selection logic for an ami used by Karpenter to launch nodes.\n                      If multiple fields are used for selection, the requirements are ANDed.\n                    properties:\n                      alias:\n                        description: |-\n                          Alias specifies which EKS optimized AMI to select.\n                          Each alias consists of a family and an AMI version, specified as \"family@version\".\n                          Valid families include: al2, al2023, bottlerocket, windows2019, windows2022, windows2025.\n                          The version can either be pinned to a specific AMI release, with that AMIs version format (ex: \"al2023@v20240625\" or \"bottlerocket@v1.10.0\").\n                          The version can also be set to \"latest\" for any family. Setting the version to latest will result in drift when a new AMI is released. This is **not** recommended for production environments.\n                          Note: The Windows families do **not** support version pinning, and only latest may be used.\n                        maxLength: 30\n                        type: string\n                        x-kubernetes-validations:\n                          - message: '''alias'' is improperly formatted, must match the format ''family@version'''\n                            rule: self.matches('^[a-zA-Z0-9]+@.+$')\n                          - message: 'family is not supported, must be one of the following: ''al2'', ''al2023'', ''bottlerocket'', ''windows2019'', ''windows2022'', ''windows2025'''\n                            rule: self.split('@')[0] in ['al2','al2023','bottlerocket','windows2019','windows2022','windows2025']\n                          - message: windows families may only specify version 'latest'\n                            rule: 'self.split(''@'')[0] in [''windows2019'',''windows2022'',''windows2025''] ? self.split(''@'')[1] == ''latest'' : true'\n                      id:\n                        description: ID is the ami id in EC2\n                        pattern: ami-[0-9a-z]+\n                        type: string\n                      name:\n                        description: |-\n                          Name is the ami name in EC2.\n                          This value is the name field, which is different from the name tag.\n                        type: string\n                      owner:\n                        description: |-\n                          Owner is the owner for the ami.\n                          You can specify a combination of AWS account IDs, \"self\", \"amazon\", and \"aws-marketplace\"\n                        type: string\n                      ssmParameter:\n                        description: SSMParameter is the name (or ARN) of the SSM parameter containing the Image ID.\n                        type: string\n                      tags:\n                        additionalProperties:\n                          type: string\n                        description: |-\n                          Tags is a map of key/value tags used to select amis.\n                          Specifying '*' for a value selects all values for a given tag key.\n                        maxProperties: 20\n                        type: object\n                        x-kubernetes-validations:\n                          - message: empty tag keys or values aren't supported\n                            rule: self.all(k, k != '' && self[k] != '')\n                    type: object\n                  maxItems: 30\n                  minItems: 1\n                  type: array\n                  x-kubernetes-validations:\n                    - message: expected at least one, got none, ['tags', 'id', 'name', 'alias', 'ssmParameter']\n                      rule: self.all(x, has(x.tags) || has(x.id) || has(x.name) || has(x.alias) || has(x.ssmParameter))\n                    - message: '''id'' is mutually exclusive, cannot be set with a combination of other fields in amiSelectorTerms'\n                      rule: '!self.exists(x, has(x.id) && (has(x.alias) || has(x.tags) || has(x.name) || has(x.owner)))'\n                    - message: '''alias'' is mutually exclusive, cannot be set with a combination of other fields in amiSelectorTerms'\n                      rule: '!self.exists(x, has(x.alias) && (has(x.id) || has(x.tags) || has(x.name) || has(x.owner)))'\n                    - message: '''alias'' is mutually exclusive, cannot be set with a combination of other amiSelectorTerms'\n                      rule: '!(self.exists(x, has(x.alias)) && self.size() != 1)'\n                associatePublicIPAddress:\n                  description: AssociatePublicIPAddress controls if public IP addresses are assigned to instances that are launched with the nodeclass.\n                  type: boolean\n                blockDeviceMappings:\n                  description: BlockDeviceMappings to be applied to provisioned nodes.\n                  items:\n                    properties:\n                      deviceName:\n                        description: The device name (for example, /dev/sdh or xvdh).\n                        type: string\n                      ebs:\n                        description: EBS contains parameters used to automatically set up EBS volumes when an instance is launched.\n                        properties:\n                          deleteOnTermination:\n                            description: DeleteOnTermination indicates whether the EBS volume is deleted on instance termination.\n                            type: boolean\n                          encrypted:\n                            description: |-\n                              Encrypted indicates whether the EBS volume is encrypted. Encrypted volumes can only\n                              be attached to instances that support Amazon EBS encryption. If you are creating\n                              a volume from a snapshot, you can't specify an encryption value.\n                            type: boolean\n                          iops:\n                            description: |-\n                              IOPS is the number of I/O operations per second (IOPS). For gp3, io1, and io2 volumes,\n                              this represents the number of IOPS that are provisioned for the volume. For\n                              gp2 volumes, this represents the baseline performance of the volume and the\n                              rate at which the volume accumulates I/O credits for bursting.\n\n                              The following are the supported values for each volume type:\n\n                                 * gp3: 3,000-16,000 IOPS\n\n                                 * io1: 100-64,000 IOPS\n\n                                 * io2: 100-64,000 IOPS\n\n                              For io1 and io2 volumes, we guarantee 64,000 IOPS only for Instances built\n                              on the Nitro System (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances).\n                              Other instance families guarantee performance up to 32,000 IOPS.\n\n                              This parameter is supported for io1, io2, and gp3 volumes only. This parameter\n                              is not supported for gp2, st1, sc1, or standard volumes.\n                            format: int64\n                            type: integer\n                          kmsKeyID:\n                            description: Identifier (key ID, key alias, key ARN, or alias ARN) of the customer managed KMS key to use for EBS encryption.\n                            type: string\n                          snapshotID:\n                            description: SnapshotID is the ID of an EBS snapshot\n                            type: string\n                          throughput:\n                            description: |-\n                              Throughput to provision for a gp3 volume, with a maximum of 1,000 MiB/s.\n                              Valid Range: Minimum value of 125. Maximum value of 1000.\n                            format: int64\n                            type: integer\n                          volumeInitializationRate:\n                            description: |-\n                              VolumeInitializationRate specifies the Amazon EBS Provisioned Rate for Volume Initialization,\n                              in MiB/s, at which to download the snapshot blocks from Amazon S3 to the volume. This is also known as volume\n                              initialization. Specifying a volume initialization rate ensures that the volume is initialized at a\n                              predictable and consistent rate after creation. Only allowed if SnapshotID is set.\n                              Valid Range: Minimum value of 100. Maximum value of 300.\n                            format: int32\n                            maximum: 300\n                            minimum: 100\n                            type: integer\n                          volumeSize:\n                            description: |-\n                              VolumeSize in `Gi`, `G`, `Ti`, or `T`. You must specify either a snapshot ID or\n                              a volume size. The following are the supported volumes sizes for each volume\n                              type:\n\n                                 * gp2 and gp3: 1-16,384\n\n                                 * io1 and io2: 4-16,384\n\n                                 * st1 and sc1: 125-16,384\n\n                                 * standard: 1-1,024\n                            pattern: ^((?:[1-9][0-9]{0,3}|[1-4][0-9]{4}|[5][0-8][0-9]{3}|59000)Gi|(?:[1-9][0-9]{0,3}|[1-5][0-9]{4}|[6][0-3][0-9]{3}|64000)G|([1-9]||[1-5][0-7]|58)Ti|([1-9]||[1-5][0-9]|6[0-3]|64)T)$\n                            type: string\n                          volumeType:\n                            description: |-\n                              VolumeType of the block device.\n                              For more information, see Amazon EBS volume types (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html)\n                              in the Amazon Elastic Compute Cloud User Guide.\n                            enum:\n                              - standard\n                              - io1\n                              - io2\n                              - gp2\n                              - sc1\n                              - st1\n                              - gp3\n                            type: string\n                        type: object\n                        x-kubernetes-validations:\n                          - message: snapshotID or volumeSize must be defined\n                            rule: has(self.snapshotID) || has(self.volumeSize)\n                          - message: snapshotID must be set when volumeInitializationRate is set\n                            rule: '!has(self.volumeInitializationRate) || (has(self.snapshotID) && self.snapshotID != '''')'\n                      rootVolume:\n                        description: |-\n                          RootVolume is a flag indicating if this device is mounted as kubelet root dir. You can\n                          configure at most one root volume in BlockDeviceMappings.\n                        type: boolean\n                    type: object\n                  maxItems: 50\n                  type: array\n                  x-kubernetes-validations:\n                    - message: must have only one blockDeviceMappings with rootVolume\n                      rule: self.filter(x, has(x.rootVolume)?x.rootVolume==true:false).size() <= 1\n                capacityReservationSelectorTerms:\n                  description: |-\n                    CapacityReservationSelectorTerms is a list of capacity reservation selector terms. Each term is ORed together to\n                    determine the set of eligible capacity reservations.\n                  items:\n                    properties:\n                      id:\n                        description: ID is the capacity reservation id in EC2\n                        pattern: ^cr-[0-9a-z]+$\n                        type: string\n                      instanceMatchCriteria:\n                        description: InstanceMatchCriteria specifies how instances are matched to capacity reservations.\n                        enum:\n                          - open\n                          - targeted\n                        type: string\n                      ownerID:\n                        description: Owner is the owner id for the ami.\n                        pattern: ^[0-9]{12}$\n                        type: string\n                      tags:\n                        additionalProperties:\n                          type: string\n                        description: |-\n                          Tags is a map of key/value tags used to select capacity reservations.\n                          Specifying '*' for a value selects all values for a given tag key.\n                        maxProperties: 20\n                        type: object\n                        x-kubernetes-validations:\n                          - message: empty tag keys or values aren't supported\n                            rule: self.all(k, k != '' && self[k] != '')\n                    type: object\n                  maxItems: 30\n                  type: array\n                  x-kubernetes-validations:\n                    - message: expected at least one, got none, ['tags', 'id', 'instanceMatchCriteria']\n                      rule: self.all(x, has(x.tags) || has(x.id) || has(x.instanceMatchCriteria))\n                    - message: '''id'' is mutually exclusive, cannot be set along with other fields in a capacity reservation selector term'\n                      rule: '!self.all(x, has(x.id) && (has(x.tags) || has(x.ownerID) || has(x.instanceMatchCriteria)))'\n                context:\n                  description: |-\n                    Context is a Reserved field in EC2 APIs\n                    https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet.html\n                  type: string\n                detailedMonitoring:\n                  description: DetailedMonitoring controls if detailed monitoring is enabled for instances that are launched\n                  type: boolean\n                instanceProfile:\n                  description: |-\n                    InstanceProfile is the AWS entity that instances use.\n                    This field is mutually exclusive from role.\n                    The instance profile should already have a role assigned to it that Karpenter\n                     has PassRole permission on for instance launch using this instanceProfile to succeed.\n                  type: string\n                  x-kubernetes-validations:\n                    - message: instanceProfile cannot be empty\n                      rule: self != ''\n                instanceStorePolicy:\n                  description: InstanceStorePolicy specifies how to handle instance-store disks.\n                  enum:\n                    - RAID0\n                  type: string\n                ipPrefixCount:\n                  description: IPPrefixCount sets the number of IPv4 prefixes to be automatically assigned to the network interface.\n                  format: int32\n                  minimum: 0\n                  type: integer\n                kubelet:\n                  description: |-\n                    Kubelet defines args to be used when configuring kubelet on provisioned nodes.\n                    They are a subset of the upstream types, recognizing not all options may be supported.\n                    Wherever possible, the types and names should reflect the upstream kubelet types.\n                  properties:\n                    clusterDNS:\n                      description: |-\n                        clusterDNS is a list of IP addresses for the cluster DNS server.\n                        Note that not all providers may use all addresses.\n                      items:\n                        type: string\n                      type: array\n                    cpuCFSQuota:\n                      description: CPUCFSQuota enables CPU CFS quota enforcement for containers that specify CPU limits.\n                      type: boolean\n                    evictionHard:\n                      additionalProperties:\n                        type: string\n                        pattern: ^((\\d{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)%||(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?)$\n                      description: EvictionHard is the map of signal names to quantities that define hard eviction thresholds\n                      type: object\n                      x-kubernetes-validations:\n                        - message: valid keys for evictionHard are ['memory.available','nodefs.available','nodefs.inodesFree','imagefs.available','imagefs.inodesFree','pid.available']\n                          rule: self.all(x, x in ['memory.available','nodefs.available','nodefs.inodesFree','imagefs.available','imagefs.inodesFree','pid.available'])\n                    evictionMaxPodGracePeriod:\n                      description: |-\n                        EvictionMaxPodGracePeriod is the maximum allowed grace period (in seconds) to use when terminating pods in\n                        response to soft eviction thresholds being met.\n                      format: int32\n                      type: integer\n                    evictionSoft:\n                      additionalProperties:\n                        type: string\n                        pattern: ^((\\d{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)%||(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?)$\n                      description: EvictionSoft is the map of signal names to quantities that define soft eviction thresholds\n                      type: object\n                      x-kubernetes-validations:\n                        - message: valid keys for evictionSoft are ['memory.available','nodefs.available','nodefs.inodesFree','imagefs.available','imagefs.inodesFree','pid.available']\n                          rule: self.all(x, x in ['memory.available','nodefs.available','nodefs.inodesFree','imagefs.available','imagefs.inodesFree','pid.available'])\n                    evictionSoftGracePeriod:\n                      additionalProperties:\n                        type: string\n                      description: EvictionSoftGracePeriod is the map of signal names to quantities that define grace periods for each eviction signal\n                      type: object\n                      x-kubernetes-validations:\n                        - message: valid keys for evictionSoftGracePeriod are ['memory.available','nodefs.available','nodefs.inodesFree','imagefs.available','imagefs.inodesFree','pid.available']\n                          rule: self.all(x, x in ['memory.available','nodefs.available','nodefs.inodesFree','imagefs.available','imagefs.inodesFree','pid.available'])\n                    imageGCHighThresholdPercent:\n                      description: |-\n                        ImageGCHighThresholdPercent is the percent of disk usage after which image\n                        garbage collection is always run. The percent is calculated by dividing this\n                        field value by 100, so this field must be between 0 and 100, inclusive.\n                        When specified, the value must be greater than ImageGCLowThresholdPercent.\n                      format: int32\n                      maximum: 100\n                      minimum: 0\n                      type: integer\n                    imageGCLowThresholdPercent:\n                      description: |-\n                        ImageGCLowThresholdPercent is the percent of disk usage before which image\n                        garbage collection is never run. Lowest disk usage to garbage collect to.\n                        The percent is calculated by dividing this field value by 100,\n                        so the field value must be between 0 and 100, inclusive.\n                        When specified, the value must be less than imageGCHighThresholdPercent\n                      format: int32\n                      maximum: 100\n                      minimum: 0\n                      type: integer\n                    kubeReserved:\n                      additionalProperties:\n                        type: string\n                        pattern: ^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$\n                      description: KubeReserved contains resources reserved for Kubernetes system components.\n                      type: object\n                      x-kubernetes-validations:\n                        - message: valid keys for kubeReserved are ['cpu','memory','ephemeral-storage','pid']\n                          rule: self.all(x, x=='cpu' || x=='memory' || x=='ephemeral-storage' || x=='pid')\n                        - message: kubeReserved value cannot be a negative resource quantity\n                          rule: self.all(x, !self[x].startsWith('-'))\n                    maxPods:\n                      description: |-\n                        MaxPods is an override for the maximum number of pods that can run on\n                        a worker node instance.\n                      format: int32\n                      minimum: 0\n                      type: integer\n                    podsPerCore:\n                      description: |-\n                        PodsPerCore is an override for the number of pods that can run on a worker node\n                        instance based on the number of cpu cores. This value cannot exceed MaxPods, so, if\n                        MaxPods is a lower value, that value will be used.\n                      format: int32\n                      minimum: 0\n                      type: integer\n                    systemReserved:\n                      additionalProperties:\n                        type: string\n                        pattern: ^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$\n                      description: SystemReserved contains resources reserved for OS system daemons and kernel memory.\n                      type: object\n                      x-kubernetes-validations:\n                        - message: valid keys for systemReserved are ['cpu','memory','ephemeral-storage','pid']\n                          rule: self.all(x, x=='cpu' || x=='memory' || x=='ephemeral-storage' || x=='pid')\n                        - message: systemReserved value cannot be a negative resource quantity\n                          rule: self.all(x, !self[x].startsWith('-'))\n                  type: object\n                  x-kubernetes-validations:\n                    - message: imageGCHighThresholdPercent must be greater than imageGCLowThresholdPercent\n                      rule: 'has(self.imageGCHighThresholdPercent) && has(self.imageGCLowThresholdPercent) ?  self.imageGCHighThresholdPercent > self.imageGCLowThresholdPercent  : true'\n                    - message: evictionSoft OwnerKey does not have a matching evictionSoftGracePeriod\n                      rule: has(self.evictionSoft) ? self.evictionSoft.all(e, (e in self.evictionSoftGracePeriod)):true\n                    - message: evictionSoftGracePeriod OwnerKey does not have a matching evictionSoft\n                      rule: has(self.evictionSoftGracePeriod) ? self.evictionSoftGracePeriod.all(e, (e in self.evictionSoft)):true\n                metadataOptions:\n                  default:\n                    httpEndpoint: enabled\n                    httpProtocolIPv6: disabled\n                    httpPutResponseHopLimit: 1\n                    httpTokens: required\n                  description: |-\n                    MetadataOptions for the generated launch template of provisioned nodes.\n\n                    This specifies the exposure of the Instance Metadata Service to\n                    provisioned EC2 nodes. For more information,\n                    see Instance Metadata and User Data\n                    (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html)\n                    in the Amazon Elastic Compute Cloud User Guide.\n\n                    Refer to recommended, security best practices\n                    (https://aws.github.io/aws-eks-best-practices/security/docs/iam/#restrict-access-to-the-instance-profile-assigned-to-the-worker-node)\n                    for limiting exposure of Instance Metadata and User Data to pods.\n                    If omitted, defaults to httpEndpoint enabled, with httpProtocolIPv6\n                    disabled, with httpPutResponseLimit of 1, and with httpTokens\n                    required.\n                  properties:\n                    httpEndpoint:\n                      default: enabled\n                      description: |-\n                        HTTPEndpoint enables or disables the HTTP metadata endpoint on provisioned\n                        nodes. If metadata options is non-nil, but this parameter is not specified,\n                        the default state is \"enabled\".\n\n                        If you specify a value of \"disabled\", instance metadata will not be accessible\n                        on the node.\n                      enum:\n                        - enabled\n                        - disabled\n                      type: string\n                    httpProtocolIPv6:\n                      default: disabled\n                      description: |-\n                        HTTPProtocolIPv6 enables or disables the IPv6 endpoint for the instance metadata\n                        service on provisioned nodes. If metadata options is non-nil, but this parameter\n                        is not specified, the default state is \"disabled\".\n                      enum:\n                        - enabled\n                        - disabled\n                      type: string\n                    httpPutResponseHopLimit:\n                      default: 1\n                      description: |-\n                        HTTPPutResponseHopLimit is the desired HTTP PUT response hop limit for\n                        instance metadata requests. The larger the number, the further instance\n                        metadata requests can travel. Possible values are integers from 1 to 64.\n                        If metadata options is non-nil, but this parameter is not specified, the\n                        default value is 1.\n                      format: int64\n                      maximum: 64\n                      minimum: 1\n                      type: integer\n                    httpTokens:\n                      default: required\n                      description: |-\n                        HTTPTokens determines the state of token usage for instance metadata\n                        requests. If metadata options is non-nil, but this parameter is not\n                        specified, the default state is \"required\".\n\n                        If the state is optional, one can choose to retrieve instance metadata with\n                        or without a signed token header on the request. If one retrieves the IAM\n                        role credentials without a token, the version 1.0 role credentials are\n                        returned. If one retrieves the IAM role credentials using a valid signed\n                        token, the version 2.0 role credentials are returned.\n\n                        If the state is \"required\", one must send a signed token header with any\n                        instance metadata retrieval requests. In this state, retrieving the IAM\n                        role credentials always returns the version 2.0 credentials; the version\n                        1.0 credentials are not available.\n                      enum:\n                        - required\n                        - optional\n                      type: string\n                  type: object\n                role:\n                  description: |-\n                    Role is the AWS identity that nodes use.\n                    This field is mutually exclusive from instanceProfile.\n                  type: string\n                  x-kubernetes-validations:\n                    - message: role cannot be empty\n                      rule: self != ''\n                securityGroupSelectorTerms:\n                  description: SecurityGroupSelectorTerms is a list of security group selector terms. The terms are ORed.\n                  items:\n                    description: |-\n                      SecurityGroupSelectorTerm defines selection logic for a security group used by Karpenter to launch nodes.\n                      If multiple fields are used for selection, the requirements are ANDed.\n                    properties:\n                      id:\n                        description: ID is the security group id in EC2\n                        pattern: sg-[0-9a-z]+\n                        type: string\n                      name:\n                        description: |-\n                          Name is the security group name in EC2.\n                          This value is the name field, which is different from the name tag.\n                        type: string\n                      tags:\n                        additionalProperties:\n                          type: string\n                        description: |-\n                          Tags is a map of key/value tags used to select security groups.\n                          Specifying '*' for a value selects all values for a given tag key.\n                        maxProperties: 20\n                        type: object\n                        x-kubernetes-validations:\n                          - message: empty tag keys or values aren't supported\n                            rule: self.all(k, k != '' && self[k] != '')\n                    type: object\n                  maxItems: 30\n                  type: array\n                  x-kubernetes-validations:\n                    - message: securityGroupSelectorTerms cannot be empty\n                      rule: self.size() != 0\n                    - message: expected at least one, got none, ['tags', 'id', 'name']\n                      rule: self.all(x, has(x.tags) || has(x.id) || has(x.name))\n                    - message: '''id'' is mutually exclusive, cannot be set with a combination of other fields in a security group selector term'\n                      rule: '!self.all(x, has(x.id) && (has(x.tags) || has(x.name)))'\n                    - message: '''name'' is mutually exclusive, cannot be set with a combination of other fields in a security group selector term'\n                      rule: '!self.all(x, has(x.name) && (has(x.tags) || has(x.id)))'\n                subnetSelectorTerms:\n                  description: SubnetSelectorTerms is a list of subnet selector terms. The terms are ORed.\n                  items:\n                    description: |-\n                      SubnetSelectorTerm defines selection logic for a subnet used by Karpenter to launch nodes.\n                      If multiple fields are used for selection, the requirements are ANDed.\n                    properties:\n                      id:\n                        description: ID is the subnet id in EC2\n                        pattern: subnet-[0-9a-z]+\n                        type: string\n                      tags:\n                        additionalProperties:\n                          type: string\n                        description: |-\n                          Tags is a map of key/value tags used to select subnets\n                          Specifying '*' for a value selects all values for a given tag key.\n                        maxProperties: 20\n                        type: object\n                        x-kubernetes-validations:\n                          - message: empty tag keys or values aren't supported\n                            rule: self.all(k, k != '' && self[k] != '')\n                    type: object\n                  maxItems: 30\n                  type: array\n                  x-kubernetes-validations:\n                    - message: subnetSelectorTerms cannot be empty\n                      rule: self.size() != 0\n                    - message: expected at least one, got none, ['tags', 'id']\n                      rule: self.all(x, has(x.tags) || has(x.id))\n                    - message: '''id'' is mutually exclusive, cannot be set with a combination of other fields in a subnet selector term'\n                      rule: '!self.all(x, has(x.id) && has(x.tags))'\n                tags:\n                  additionalProperties:\n                    type: string\n                  description: Tags to be applied on ec2 resources like instances and launch templates.\n                  type: object\n                  x-kubernetes-validations:\n                    - message: empty tag keys aren't supported\n                      rule: self.all(k, k != '')\n                    - message: tag contains a restricted tag matching eks:eks-cluster-name\n                      rule: self.all(k, k !='eks:eks-cluster-name')\n                    - message: tag contains a restricted tag matching kubernetes.io/cluster/\n                      rule: self.all(k, !k.startsWith('kubernetes.io/cluster') )\n                    - message: tag contains a restricted tag matching karpenter.sh/nodepool\n                      rule: self.all(k, k != 'karpenter.sh/nodepool')\n                    - message: tag contains a restricted tag matching karpenter.sh/nodeclaim\n                      rule: self.all(k, k !='karpenter.sh/nodeclaim')\n                    - message: tag contains a restricted tag matching karpenter.k8s.aws/ec2nodeclass\n                      rule: self.all(k, k !='karpenter.k8s.aws/ec2nodeclass')\n                userData:\n                  description: |-\n                    UserData to be applied to the provisioned nodes.\n                    It must be in the appropriate format based on the AMIFamily in use. Karpenter will merge certain fields into\n                    this UserData to ensure nodes are being provisioned with the correct configuration.\n                  type: string\n              required:\n                - amiSelectorTerms\n                - securityGroupSelectorTerms\n                - subnetSelectorTerms\n              type: object\n              x-kubernetes-validations:\n                - message: must specify exactly one of ['role', 'instanceProfile']\n                  rule: (has(self.role) && !has(self.instanceProfile)) || (!has(self.role) && has(self.instanceProfile))\n                - message: if set, amiFamily must be 'AL2' or 'Custom' when using an AL2 alias\n                  rule: '!has(self.amiFamily) || (self.amiSelectorTerms.exists(x, has(x.alias) && x.alias.find(''^[^@]+'') == ''al2'') ? (self.amiFamily == ''Custom'' || self.amiFamily == ''AL2'') : true)'\n                - message: if set, amiFamily must be 'AL2023' or 'Custom' when using an AL2023 alias\n                  rule: '!has(self.amiFamily) || (self.amiSelectorTerms.exists(x, has(x.alias) && x.alias.find(''^[^@]+'') == ''al2023'') ? (self.amiFamily == ''Custom'' || self.amiFamily == ''AL2023'') : true)'\n                - message: if set, amiFamily must be 'Bottlerocket' or 'Custom' when using a Bottlerocket alias\n                  rule: '!has(self.amiFamily) || (self.amiSelectorTerms.exists(x, has(x.alias) && x.alias.find(''^[^@]+'') == ''bottlerocket'') ? (self.amiFamily == ''Custom'' || self.amiFamily == ''Bottlerocket'') : true)'\n                - message: if set, amiFamily must be 'Windows2019' or 'Custom' when using a Windows2019 alias\n                  rule: '!has(self.amiFamily) || (self.amiSelectorTerms.exists(x, has(x.alias) && x.alias.find(''^[^@]+'') == ''windows2019'') ? (self.amiFamily == ''Custom'' || self.amiFamily == ''Windows2019'') : true)'\n                - message: if set, amiFamily must be 'Windows2022' or 'Custom' when using a Windows2022 alias\n                  rule: '!has(self.amiFamily) || (self.amiSelectorTerms.exists(x, has(x.alias) && x.alias.find(''^[^@]+'') == ''windows2022'') ? (self.amiFamily == ''Custom'' || self.amiFamily == ''Windows2022'') : true)'\n                - message: if set, amiFamily must be 'Windows2025' or 'Custom' when using a Windows2025 alias\n                  rule: '!has(self.amiFamily) || (self.amiSelectorTerms.exists(x, has(x.alias) && x.alias.find(''^[^@]+'') == ''windows2025'') ? (self.amiFamily == ''Custom'' || self.amiFamily == ''Windows2025'') : true)'\n                - message: must specify amiFamily if amiSelectorTerms does not contain an alias\n                  rule: 'self.amiSelectorTerms.exists(x, has(x.alias)) ? true : has(self.amiFamily)'\n            status:\n              description: EC2NodeClassStatus contains the resolved state of the EC2NodeClass\n              properties:\n                amis:\n                  description: |-\n                    AMI contains the current AMI values that are available to the\n                    cluster under the AMI selectors.\n                  items:\n                    description: AMI contains resolved AMI selector values utilized for node launch\n                    properties:\n                      deprecated:\n                        description: Deprecation status of the AMI\n                        type: boolean\n                      id:\n                        description: ID of the AMI\n                        type: string\n                      name:\n                        description: Name of the AMI\n                        type: string\n                      requirements:\n                        description: Requirements of the AMI to be utilized on an instance type\n                        items:\n                          description: |-\n                            A node selector requirement is a selector that contains values, a key, and an operator\n                            that relates the key and values.\n                          properties:\n                            key:\n                              description: The label key that the selector applies to.\n                              type: string\n                            operator:\n                              description: |-\n                                Represents a key's relationship to a set of values.\n                                Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.\n                              type: string\n                            values:\n                              description: |-\n                                An array of string values. If the operator is In or NotIn,\n                                the values array must be non-empty. If the operator is Exists or DoesNotExist,\n                                the values array must be empty. If the operator is Gt or Lt, the values\n                                array must have a single element, which will be interpreted as an integer.\n                                This array is replaced during a strategic merge patch.\n                              items:\n                                type: string\n                              type: array\n                              x-kubernetes-list-type: atomic\n                          required:\n                            - key\n                            - operator\n                          type: object\n                        type: array\n                    required:\n                      - id\n                      - requirements\n                    type: object\n                  type: array\n                capacityReservations:\n                  description: |-\n                    CapacityReservations contains the current capacity reservation values that are available to this NodeClass under the\n                    CapacityReservation selectors.\n                  items:\n                    properties:\n                      availabilityZone:\n                        description: The availability zone the capacity reservation is available in.\n                        type: string\n                      endTime:\n                        description: |-\n                          The time at which the capacity reservation expires. Once expired, the reserved capacity is released and Karpenter\n                          will no longer be able to launch instances into that reservation.\n                        format: date-time\n                        type: string\n                      id:\n                        description: The id for the capacity reservation.\n                        pattern: ^cr-[0-9a-z]+$\n                        type: string\n                      instanceMatchCriteria:\n                        description: Indicates the type of instance launches the capacity reservation accepts.\n                        enum:\n                          - open\n                          - targeted\n                        type: string\n                      instanceType:\n                        description: The instance type for the capacity reservation.\n                        type: string\n                      interruptible:\n                        description: Indicates whether this capacity reservation is interruptible\n                        type: boolean\n                      ownerID:\n                        description: The ID of the AWS account that owns the capacity reservation.\n                        pattern: ^[0-9]{12}$\n                        type: string\n                      reservationType:\n                        default: default\n                        description: The type of capacity reservation.\n                        enum:\n                          - default\n                          - capacity-block\n                        type: string\n                      state:\n                        default: active\n                        description: |-\n                          The state of the capacity reservation. A capacity reservation is considered to be expiring if it is within the EC2\n                          reclaimation window. Only capacity-block reservations may be in this state.\n                        enum:\n                          - active\n                          - expiring\n                        type: string\n                    required:\n                      - availabilityZone\n                      - id\n                      - instanceMatchCriteria\n                      - instanceType\n                      - ownerID\n                    type: object\n                  type: array\n                conditions:\n                  description: Conditions contains signals for health and readiness\n                  items:\n                    description: Condition aliases the upstream type and adds additional helper methods\n                    properties:\n                      lastTransitionTime:\n                        description: |-\n                          lastTransitionTime is the last time the condition transitioned from one status to another.\n                          This should be when the underlying condition changed.  If that is not known, then using the time when the API field changed is acceptable.\n                        format: date-time\n                        type: string\n                      message:\n                        description: |-\n                          message is a human readable message indicating details about the transition.\n                          This may be an empty string.\n                        maxLength: 32768\n                        type: string\n                      observedGeneration:\n                        description: |-\n                          observedGeneration represents the .metadata.generation that the condition was set based upon.\n                          For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\n                          with respect to the current state of the instance.\n                        format: int64\n                        minimum: 0\n                        type: integer\n                      reason:\n                        description: |-\n                          reason contains a programmatic identifier indicating the reason for the condition's last transition.\n                          Producers of specific condition types may define expected values and meanings for this field,\n                          and whether the values are considered a guaranteed API.\n                          The value should be a CamelCase string.\n                          This field may not be empty.\n                        maxLength: 1024\n                        minLength: 1\n                        pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$\n                        type: string\n                      status:\n                        description: status of the condition, one of True, False, Unknown.\n                        enum:\n                          - \"True\"\n                          - \"False\"\n                          - Unknown\n                        type: string\n                      type:\n                        description: type of condition in CamelCase or in foo.example.com/CamelCase.\n                        maxLength: 316\n                        pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$\n                        type: string\n                    required:\n                      - lastTransitionTime\n                      - message\n                      - reason\n                      - status\n                      - type\n                    type: object\n                  type: array\n                instanceProfile:\n                  description: InstanceProfile contains the resolved instance profile for the role\n                  type: string\n                securityGroups:\n                  description: |-\n                    SecurityGroups contains the current security group values that are available to the\n                    cluster under the SecurityGroups selectors.\n                  items:\n                    description: SecurityGroup contains resolved SecurityGroup selector values utilized for node launch\n                    properties:\n                      id:\n                        description: ID of the security group\n                        type: string\n                      name:\n                        description: Name of the security group\n                        type: string\n                    required:\n                      - id\n                    type: object\n                  type: array\n                subnets:\n                  description: |-\n                    Subnets contains the current subnet values that are available to the\n                    cluster under the subnet selectors.\n                  items:\n                    description: Subnet contains resolved Subnet selector values utilized for node launch\n                    properties:\n                      id:\n                        description: ID of the subnet\n                        type: string\n                      zone:\n                        description: The associated availability zone\n                        type: string\n                      zoneID:\n                        description: The associated availability zone ID\n                        type: string\n                    required:\n                      - id\n                      - zone\n                    type: object\n                  type: array\n              type: object\n          type: object\n      served: true\n      storage: true\n      subresources:\n        status: {}\n"
  },
  {
    "path": "charts/karpenter-crd/templates/karpenter.sh_nodeclaims.yaml",
    "content": "---\napiVersion: apiextensions.k8s.io/v1\nkind: CustomResourceDefinition\nmetadata:\n  annotations:\n    {{- with .Values.additionalAnnotations }}\n      {{- toYaml . | nindent 4 }}\n    {{- end }}\n    controller-gen.kubebuilder.io/version: v0.19.0\n  name: nodeclaims.karpenter.sh\nspec:\n  group: karpenter.sh\n  names:\n    categories:\n      - karpenter\n    kind: NodeClaim\n    listKind: NodeClaimList\n    plural: nodeclaims\n    singular: nodeclaim\n  scope: Cluster\n  versions:\n    - additionalPrinterColumns:\n        - jsonPath: .metadata.labels.node\\.kubernetes\\.io/instance-type\n          name: Type\n          type: string\n        - jsonPath: .metadata.labels.karpenter\\.sh/capacity-type\n          name: Capacity\n          type: string\n        - jsonPath: .metadata.labels.topology\\.kubernetes\\.io/zone\n          name: Zone\n          type: string\n        - jsonPath: .status.nodeName\n          name: Node\n          type: string\n        - jsonPath: .status.conditions[?(@.type==\"Ready\")].status\n          name: Ready\n          type: string\n        - jsonPath: .metadata.creationTimestamp\n          name: Age\n          type: date\n        - jsonPath: .status.imageID\n          name: ImageID\n          priority: 1\n          type: string\n        - jsonPath: .status.providerID\n          name: ID\n          priority: 1\n          type: string\n        - jsonPath: .metadata.labels.karpenter\\.sh/nodepool\n          name: NodePool\n          priority: 1\n          type: string\n        - jsonPath: .spec.nodeClassRef.name\n          name: NodeClass\n          priority: 1\n          type: string\n        - jsonPath: .status.conditions[?(@.type==\"Drifted\")].status\n          name: Drifted\n          priority: 1\n          type: string\n      name: v1\n      schema:\n        openAPIV3Schema:\n          description: NodeClaim is the Schema for the NodeClaims API\n          properties:\n            apiVersion:\n              description: |-\n                APIVersion defines the versioned schema of this representation of an object.\n                Servers should convert recognized schemas to the latest internal value, and\n                may reject unrecognized values.\n                More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources\n              type: string\n            kind:\n              description: |-\n                Kind is a string value representing the REST resource this object represents.\n                Servers may infer this from the endpoint the client submits requests to.\n                Cannot be updated.\n                In CamelCase.\n                More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds\n              type: string\n            metadata:\n              type: object\n            spec:\n              description: NodeClaimSpec describes the desired state of the NodeClaim\n              properties:\n                expireAfter:\n                  default: 720h\n                  description: |-\n                    ExpireAfter is the duration the controller will wait\n                    before terminating a node, measured from when the node is created. This\n                    is useful to implement features like eventually consistent node upgrade,\n                    memory leak protection, and disruption testing.\n                  pattern: ^(([0-9]+(s|m|h))+|Never)$\n                  type: string\n                nodeClassRef:\n                  description: NodeClassRef is a reference to an object that defines provider specific configuration\n                  properties:\n                    group:\n                      description: API version of the referent\n                      pattern: ^[^/]*$\n                      type: string\n                      x-kubernetes-validations:\n                        - message: group may not be empty\n                          rule: self != ''\n                    kind:\n                      description: 'Kind of the referent; More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds\"'\n                      type: string\n                      x-kubernetes-validations:\n                        - message: kind may not be empty\n                          rule: self != ''\n                    name:\n                      description: 'Name of the referent; More info: http://kubernetes.io/docs/user-guide/identifiers#names'\n                      type: string\n                      x-kubernetes-validations:\n                        - message: name may not be empty\n                          rule: self != ''\n                  required:\n                    - group\n                    - kind\n                    - name\n                  type: object\n                requirements:\n                  description: Requirements are layered with GetLabels and applied to every node.\n                  items:\n                    description: |-\n                      A node selector requirement is a selector that contains values, a key, an operator that relates the key and values\n                      and minValues that represent the requirement to have at least that many values.\n                    properties:\n                      key:\n                        description: The label key that the selector applies to.\n                        type: string\n                        maxLength: 316\n                        pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*(\\/))?([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9]$\n                        x-kubernetes-validations:\n                          - message: label domain \"karpenter.sh\" is restricted\n                            rule: self in [\"karpenter.sh/capacity-type\", \"karpenter.sh/nodepool\"] || !self.find(\"^([^/]+)\").endsWith(\"karpenter.sh\")\n                          - message: label \"kubernetes.io/hostname\" is restricted\n                            rule: self != \"kubernetes.io/hostname\"\n                          - message: label domain \"karpenter.k8s.aws\" is restricted\n                            rule: self in [\"karpenter.k8s.aws/instance-tenancy\", \"karpenter.k8s.aws/capacity-reservation-type\", \"karpenter.k8s.aws/capacity-reservation-id\", \"karpenter.k8s.aws/capacity-reservation-interruptible\", \"karpenter.k8s.aws/ec2nodeclass\", \"karpenter.k8s.aws/instance-encryption-in-transit-supported\", \"karpenter.k8s.aws/instance-category\", \"karpenter.k8s.aws/instance-hypervisor\", \"karpenter.k8s.aws/instance-family\", \"karpenter.k8s.aws/instance-generation\", \"karpenter.k8s.aws/instance-local-nvme\", \"karpenter.k8s.aws/instance-size\", \"karpenter.k8s.aws/instance-cpu\", \"karpenter.k8s.aws/instance-cpu-manufacturer\", \"karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz\", \"karpenter.k8s.aws/instance-memory\", \"karpenter.k8s.aws/instance-ebs-bandwidth\", \"karpenter.k8s.aws/instance-network-bandwidth\", \"karpenter.k8s.aws/instance-gpu-name\", \"karpenter.k8s.aws/instance-gpu-manufacturer\", \"karpenter.k8s.aws/instance-gpu-count\", \"karpenter.k8s.aws/instance-gpu-memory\", \"karpenter.k8s.aws/instance-accelerator-name\", \"karpenter.k8s.aws/instance-accelerator-manufacturer\", \"karpenter.k8s.aws/instance-accelerator-count\", \"karpenter.k8s.aws/instance-capability-flex\"] || !self.find(\"^([^/]+)\").endsWith(\"karpenter.k8s.aws\")\n                      minValues:\n                        description: |-\n                          This field is ALPHA and can be dropped or replaced at any time\n                          MinValues is the minimum number of unique values required to define the flexibility of the specific requirement.\n                        maximum: 50\n                        minimum: 1\n                        type: integer\n                      operator:\n                        description: |-\n                          Represents a key's relationship to a set of values.\n                          Valid operators are In, NotIn, Exists, DoesNotExist. Gt, Lt, Gte, and Lte.\n                        enum:\n                          - Gte\n                          - Lte\n                          - In\n                          - NotIn\n                          - Exists\n                          - DoesNotExist\n                          - Gt\n                          - Lt\n                        type: string\n                      values:\n                        description: |-\n                          An array of string values. If the operator is In or NotIn,\n                          the values array must be non-empty. If the operator is Exists or DoesNotExist,\n                          the values array must be empty. If the operator is Gt, Lt, Gte, or Lte, the values\n                          array must have a single element, which will be interpreted as an integer.\n                          This array is replaced during a strategic merge patch.\n                        items:\n                          type: string\n                        type: array\n                        x-kubernetes-list-type: atomic\n                        maxLength: 63\n                        pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$\n                    required:\n                      - key\n                      - operator\n                    type: object\n                  maxItems: 100\n                  type: array\n                  x-kubernetes-validations:\n                    - message: requirements with operator 'In' must have a value defined\n                      rule: 'self.all(x, x.operator == ''In'' ? x.values.size() != 0 : true)'\n                    - message: requirements operator 'Gt', 'Lt', 'Gte', or 'Lte' must have a single positive integer value\n                      rule: 'self.all(x, (x.operator == ''Gt'' || x.operator == ''Lt'' || x.operator == ''Gte'' || x.operator == ''Lte'') ? (x.values.size() == 1 && int(x.values[0]) >= 0) : true)'\n                    - message: requirements with 'minValues' must have at least that many values specified in the 'values' field\n                      rule: 'self.all(x, (x.operator == ''In'' && has(x.minValues)) ? x.values.size() >= x.minValues : true)'\n                resources:\n                  description: Resources models the resource requirements for the NodeClaim to launch\n                  properties:\n                    requests:\n                      additionalProperties:\n                        anyOf:\n                          - type: integer\n                          - type: string\n                        pattern: ^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$\n                        x-kubernetes-int-or-string: true\n                      description: Requests describes the minimum required resources for the NodeClaim to launch\n                      type: object\n                  type: object\n                startupTaints:\n                  description: |-\n                    StartupTaints are taints that are applied to nodes upon startup which are expected to be removed automatically\n                    within a short period of time, typically by a DaemonSet that tolerates the taint. These are commonly used by\n                    daemonsets to allow initialization and enforce startup ordering.  StartupTaints are ignored for provisioning\n                    purposes in that pods are not required to tolerate a StartupTaint in order to have nodes provisioned for them.\n                  items:\n                    description: |-\n                      The node this Taint is attached to has the \"effect\" on\n                      any pod that does not tolerate the Taint.\n                    properties:\n                      effect:\n                        description: |-\n                          Required. The effect of the taint on pods\n                          that do not tolerate the taint.\n                          Valid effects are NoSchedule, PreferNoSchedule and NoExecute.\n                        type: string\n                        enum:\n                          - NoSchedule\n                          - PreferNoSchedule\n                          - NoExecute\n                      key:\n                        description: Required. The taint key to be applied to a node.\n                        type: string\n                        minLength: 1\n                        pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*(\\/))?([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9]$\n                      timeAdded:\n                        description: TimeAdded represents the time at which the taint was added.\n                        format: date-time\n                        type: string\n                      value:\n                        description: The taint value corresponding to the taint key.\n                        type: string\n                        pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*(\\/))?([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9]$\n                    required:\n                      - effect\n                      - key\n                    type: object\n                  type: array\n                taints:\n                  description: Taints will be applied to the NodeClaim's node.\n                  items:\n                    description: |-\n                      The node this Taint is attached to has the \"effect\" on\n                      any pod that does not tolerate the Taint.\n                    properties:\n                      effect:\n                        description: |-\n                          Required. The effect of the taint on pods\n                          that do not tolerate the taint.\n                          Valid effects are NoSchedule, PreferNoSchedule and NoExecute.\n                        type: string\n                        enum:\n                          - NoSchedule\n                          - PreferNoSchedule\n                          - NoExecute\n                      key:\n                        description: Required. The taint key to be applied to a node.\n                        type: string\n                        minLength: 1\n                        pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*(\\/))?([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9]$\n                      timeAdded:\n                        description: TimeAdded represents the time at which the taint was added.\n                        format: date-time\n                        type: string\n                      value:\n                        description: The taint value corresponding to the taint key.\n                        type: string\n                        pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*(\\/))?([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9]$\n                    required:\n                      - effect\n                      - key\n                    type: object\n                  type: array\n                terminationGracePeriod:\n                  description: |-\n                    TerminationGracePeriod is the maximum duration the controller will wait before forcefully deleting the pods on a node, measured from when deletion is first initiated.\n\n                    Warning: this feature takes precedence over a Pod's terminationGracePeriodSeconds value, and bypasses any blocked PDBs or the karpenter.sh/do-not-disrupt annotation.\n\n                    This field is intended to be used by cluster administrators to enforce that nodes can be cycled within a given time period.\n                    When set, drifted nodes will begin draining even if there are pods blocking eviction. Draining will respect PDBs and the do-not-disrupt annotation until the TGP is reached.\n\n                    Karpenter will preemptively delete pods so their terminationGracePeriodSeconds align with the node's terminationGracePeriod.\n                    If a pod would be terminated without being granted its full terminationGracePeriodSeconds prior to the node timeout,\n                    that pod will be deleted at T = node timeout - pod terminationGracePeriodSeconds.\n\n                    The feature can also be used to allow maximum time limits for long-running jobs which can delay node termination with preStop hooks.\n                    If left undefined, the controller will wait indefinitely for pods to be drained.\n                  pattern: ^([0-9]+(s|m|h))+$\n                  type: string\n              required:\n                - nodeClassRef\n                - requirements\n              type: object\n              x-kubernetes-validations:\n                - message: spec is immutable\n                  rule: self == oldSelf\n            status:\n              description: NodeClaimStatus defines the observed state of NodeClaim\n              properties:\n                allocatable:\n                  additionalProperties:\n                    anyOf:\n                      - type: integer\n                      - type: string\n                    pattern: ^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$\n                    x-kubernetes-int-or-string: true\n                  description: Allocatable is the estimated allocatable capacity of the node\n                  type: object\n                capacity:\n                  additionalProperties:\n                    anyOf:\n                      - type: integer\n                      - type: string\n                    pattern: ^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$\n                    x-kubernetes-int-or-string: true\n                  description: Capacity is the estimated full capacity of the node\n                  type: object\n                conditions:\n                  description: Conditions contains signals for health and readiness\n                  items:\n                    description: Condition aliases the upstream type and adds additional helper methods\n                    properties:\n                      lastTransitionTime:\n                        description: |-\n                          lastTransitionTime is the last time the condition transitioned from one status to another.\n                          This should be when the underlying condition changed.  If that is not known, then using the time when the API field changed is acceptable.\n                        format: date-time\n                        type: string\n                      message:\n                        description: |-\n                          message is a human readable message indicating details about the transition.\n                          This may be an empty string.\n                        maxLength: 32768\n                        type: string\n                      observedGeneration:\n                        description: |-\n                          observedGeneration represents the .metadata.generation that the condition was set based upon.\n                          For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\n                          with respect to the current state of the instance.\n                        format: int64\n                        minimum: 0\n                        type: integer\n                      reason:\n                        description: |-\n                          reason contains a programmatic identifier indicating the reason for the condition's last transition.\n                          Producers of specific condition types may define expected values and meanings for this field,\n                          and whether the values are considered a guaranteed API.\n                          The value should be a CamelCase string.\n                          This field may not be empty.\n                        maxLength: 1024\n                        pattern: ^([A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?|)$\n                        type: string\n                      status:\n                        description: status of the condition, one of True, False, Unknown.\n                        enum:\n                          - \"True\"\n                          - \"False\"\n                          - Unknown\n                        type: string\n                      type:\n                        description: type of condition in CamelCase or in foo.example.com/CamelCase.\n                        maxLength: 316\n                        pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$\n                        type: string\n                    required:\n                      - lastTransitionTime\n                      - status\n                      - type\n                    type: object\n                  type: array\n                imageID:\n                  description: ImageID is an identifier for the image that runs on the node\n                  type: string\n                lastPodEventTime:\n                  description: |-\n                    LastPodEventTime is updated with the last time a pod was scheduled\n                    or removed from the node. A pod going terminal or terminating\n                    is also considered as removed.\n                  format: date-time\n                  type: string\n                nodeName:\n                  description: NodeName is the name of the corresponding node object\n                  type: string\n                providerID:\n                  description: ProviderID of the corresponding node object\n                  type: string\n              type: object\n          required:\n            - spec\n          type: object\n      served: true\n      storage: true\n      subresources:\n        status: {}\n"
  },
  {
    "path": "charts/karpenter-crd/templates/karpenter.sh_nodeoverlays.yaml",
    "content": "---\napiVersion: apiextensions.k8s.io/v1\nkind: CustomResourceDefinition\nmetadata:\n  annotations:\n    {{- with .Values.additionalAnnotations }}\n      {{- toYaml . | nindent 4 }}\n    {{- end }}\n    controller-gen.kubebuilder.io/version: v0.19.0\n  name: nodeoverlays.karpenter.sh\nspec:\n  group: karpenter.sh\n  names:\n    categories:\n      - karpenter\n    kind: NodeOverlay\n    listKind: NodeOverlayList\n    plural: nodeoverlays\n    shortNames:\n      - overlays\n    singular: nodeoverlay\n  scope: Cluster\n  versions:\n    - additionalPrinterColumns:\n        - jsonPath: .status.conditions[?(@.type==\"Ready\")].status\n          name: Ready\n          type: string\n        - jsonPath: .metadata.creationTimestamp\n          name: Age\n          type: date\n        - jsonPath: .spec.weight\n          name: Weight\n          priority: 1\n          type: integer\n      name: v1alpha1\n      schema:\n        openAPIV3Schema:\n          properties:\n            apiVersion:\n              description: |-\n                APIVersion defines the versioned schema of this representation of an object.\n                Servers should convert recognized schemas to the latest internal value, and\n                may reject unrecognized values.\n                More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources\n              type: string\n            kind:\n              description: |-\n                Kind is a string value representing the REST resource this object represents.\n                Servers may infer this from the endpoint the client submits requests to.\n                Cannot be updated.\n                In CamelCase.\n                More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds\n              type: string\n            metadata:\n              type: object\n            spec:\n              properties:\n                capacity:\n                  additionalProperties:\n                    anyOf:\n                      - type: integer\n                      - type: string\n                    pattern: ^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$\n                    x-kubernetes-int-or-string: true\n                  description: |-\n                    Capacity adds extended resources only, and does not replace any existing resources.\n                    These extended resources are appended to the node's existing resource list.\n                    Note: This field does not modify or override standard resources like cpu, memory, ephemeral-storage, or pods.\n                  type: object\n                  x-kubernetes-validations:\n                    - message: invalid resource restricted\n                      rule: self.all(x, !(x in ['cpu', 'memory', 'ephemeral-storage', 'pods']))\n                price:\n                  description: Price specifies amount for an instance types that match the specified labels. Users can override prices using a signed float representing the price override\n                  pattern: ^\\d+(\\.\\d+)?$\n                  type: string\n                priceAdjustment:\n                  description: |-\n                    PriceAdjustment specifies the price change for matching instance types. Accepts either:\n                    - A fixed price modifier (e.g., -0.5, 1.2)\n                    - A percentage modifier (e.g., +10% for increase, -15% for decrease)\n                  pattern: ^(([+-]{1}(\\d*\\.?\\d+))|(\\+{1}\\d*\\.?\\d+%)|(^(-\\d{1,2}(\\.\\d+)?%)$)|(-100%))$\n                  type: string\n                requirements:\n                  description: |-\n                    Requirements constrain when this NodeOverlay is applied during scheduling simulations.\n                    These requirements can match:\n                    - Well-known labels (e.g., node.kubernetes.io/instance-type, karpenter.sh/nodepool)\n                    - Custom labels from NodePool's spec.template.labels\n                  items:\n                    description: |-\n                      A node selector requirement is a selector that contains values, a key, an operator that relates the key and values\n                      to have at least that many values.\n                    properties:\n                      key:\n                        description: The label key that the selector applies to.\n                        type: string\n                        maxLength: 316\n                        pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*(\\/))?([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9]$\n                        x-kubernetes-validations:\n                          - message: label domain \"karpenter.sh\" is restricted\n                            rule: self in [\"karpenter.sh/capacity-type\", \"karpenter.sh/nodepool\"] || !self.find(\"^([^/]+)\").endsWith(\"karpenter.sh\")\n                          - message: label \"kubernetes.io/hostname\" is restricted\n                            rule: self != \"kubernetes.io/hostname\"\n                          - message: label domain \"karpenter.k8s.aws\" is restricted\n                            rule: self in [\"karpenter.k8s.aws/ec2nodeclass\", \"karpenter.k8s.aws/instance-encryption-in-transit-supported\", \"karpenter.k8s.aws/instance-category\", \"karpenter.k8s.aws/instance-hypervisor\", \"karpenter.k8s.aws/instance-family\", \"karpenter.k8s.aws/instance-generation\", \"karpenter.k8s.aws/instance-local-nvme\", \"karpenter.k8s.aws/instance-size\", \"karpenter.k8s.aws/instance-cpu\", \"karpenter.k8s.aws/instance-cpu-manufacturer\", \"karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz\", \"karpenter.k8s.aws/instance-memory\", \"karpenter.k8s.aws/instance-ebs-bandwidth\", \"karpenter.k8s.aws/instance-network-bandwidth\", \"karpenter.k8s.aws/instance-gpu-name\", \"karpenter.k8s.aws/instance-gpu-manufacturer\", \"karpenter.k8s.aws/instance-gpu-count\", \"karpenter.k8s.aws/instance-gpu-memory\", \"karpenter.k8s.aws/instance-accelerator-name\", \"karpenter.k8s.aws/instance-accelerator-manufacturer\", \"karpenter.k8s.aws/instance-accelerator-count\", \"karpenter.k8s.aws/instance-capability-flex\"] || !self.find(\"^([^/]+)\").endsWith(\"karpenter.k8s.aws\")\n                      operator:\n                        description: |-\n                          Represents a key's relationship to a set of values.\n                          Valid operators are In, NotIn, Exists, DoesNotExist. Gt, Lt, Gte, and Lte.\n                        enum:\n                          - Gte\n                          - Lte\n                          - In\n                          - NotIn\n                          - Exists\n                          - DoesNotExist\n                          - Gt\n                          - Lt\n                        type: string\n                      values:\n                        description: |-\n                          An array of string values. If the operator is In or NotIn,\n                          the values array must be non-empty. If the operator is Exists or DoesNotExist,\n                          the values array must be empty. If the operator is Gt, Lt, Gte, or Lte, the values\n                          array must have a single element, which will be interpreted as an integer.\n                        items:\n                          type: string\n                        type: array\n                        x-kubernetes-list-type: atomic\n                        maxLength: 63\n                        pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$\n                    required:\n                      - key\n                      - operator\n                    type: object\n                  maxItems: 100\n                  type: array\n                  x-kubernetes-validations:\n                    - message: requirements with operator 'NotIn' must have a value defined\n                      rule: 'self.all(x, x.operator == ''NotIn'' ? x.values.size() != 0 : true)'\n                    - message: requirements with operator 'In' must have a value defined\n                      rule: 'self.all(x, x.operator == ''In'' ? x.values.size() != 0 : true)'\n                    - message: requirements operator 'Gt', 'Lt', 'Gte' or 'Lte' must have a single positive integer value\n                      rule: 'self.all(x, (x.operator == ''Gt'' || x.operator == ''Lt'' || x.operator == ''Gte'' || x.operator == ''Lte'') ? (x.values.size() == 1 && int(x.values[0]) >= 0) : true)'\n                weight:\n                  description: |-\n                    Weight defines the priority of this NodeOverlay when overriding node attributes.\n                    NodeOverlays with higher numerical weights take precedence over those with lower weights.\n                    If no weight is specified, the NodeOverlay is treated as having a weight of 0.\n                    When multiple NodeOverlays have identical weights, they are merged in alphabetical order.\n                  format: int32\n                  maximum: 10000\n                  minimum: 1\n                  type: integer\n              required:\n                - requirements\n              type: object\n              x-kubernetes-validations:\n                - message: cannot set both 'price' and 'priceAdjustment'\n                  rule: '!has(self.price) || !has(self.priceAdjustment)'\n            status:\n              description: NodeOverlayStatus defines the observed state of NodeOverlay\n              properties:\n                conditions:\n                  description: Conditions contains signals for health and readiness\n                  items:\n                    description: Condition aliases the upstream type and adds additional helper methods\n                    properties:\n                      lastTransitionTime:\n                        description: |-\n                          lastTransitionTime is the last time the condition transitioned from one status to another.\n                          This should be when the underlying condition changed.  If that is not known, then using the time when the API field changed is acceptable.\n                        format: date-time\n                        type: string\n                      message:\n                        description: |-\n                          message is a human readable message indicating details about the transition.\n                          This may be an empty string.\n                        maxLength: 32768\n                        type: string\n                      observedGeneration:\n                        description: |-\n                          observedGeneration represents the .metadata.generation that the condition was set based upon.\n                          For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\n                          with respect to the current state of the instance.\n                        format: int64\n                        minimum: 0\n                        type: integer\n                      reason:\n                        description: |-\n                          reason contains a programmatic identifier indicating the reason for the condition's last transition.\n                          Producers of specific condition types may define expected values and meanings for this field,\n                          and whether the values are considered a guaranteed API.\n                          The value should be a CamelCase string.\n                          This field may not be empty.\n                        maxLength: 1024\n                        minLength: 1\n                        pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$\n                        type: string\n                      status:\n                        description: status of the condition, one of True, False, Unknown.\n                        enum:\n                          - \"True\"\n                          - \"False\"\n                          - Unknown\n                        type: string\n                      type:\n                        description: type of condition in CamelCase or in foo.example.com/CamelCase.\n                        maxLength: 316\n                        pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$\n                        type: string\n                    required:\n                      - lastTransitionTime\n                      - message\n                      - reason\n                      - status\n                      - type\n                    type: object\n                  type: array\n              type: object\n          required:\n            - spec\n          type: object\n      served: true\n      storage: true\n      subresources:\n        status: {}\n"
  },
  {
    "path": "charts/karpenter-crd/templates/karpenter.sh_nodepools.yaml",
    "content": "---\napiVersion: apiextensions.k8s.io/v1\nkind: CustomResourceDefinition\nmetadata:\n  annotations:\n    {{- with .Values.additionalAnnotations }}\n      {{- toYaml . | nindent 4 }}\n    {{- end }}\n    controller-gen.kubebuilder.io/version: v0.19.0\n  name: nodepools.karpenter.sh\nspec:\n  group: karpenter.sh\n  names:\n    categories:\n      - karpenter\n    kind: NodePool\n    listKind: NodePoolList\n    plural: nodepools\n    singular: nodepool\n  scope: Cluster\n  versions:\n    - additionalPrinterColumns:\n        - jsonPath: .spec.template.spec.nodeClassRef.name\n          name: NodeClass\n          type: string\n        - jsonPath: .status.nodes\n          name: Nodes\n          type: string\n        - jsonPath: .status.conditions[?(@.type==\"Ready\")].status\n          name: Ready\n          type: string\n        - jsonPath: .metadata.creationTimestamp\n          name: Age\n          type: date\n        - jsonPath: .spec.weight\n          name: Weight\n          priority: 1\n          type: integer\n        - jsonPath: .status.resources.cpu\n          name: CPU\n          priority: 1\n          type: string\n        - jsonPath: .status.resources.memory\n          name: Memory\n          priority: 1\n          type: string\n      name: v1\n      schema:\n        openAPIV3Schema:\n          description: NodePool is the Schema for the NodePools API\n          properties:\n            apiVersion:\n              description: |-\n                APIVersion defines the versioned schema of this representation of an object.\n                Servers should convert recognized schemas to the latest internal value, and\n                may reject unrecognized values.\n                More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources\n              type: string\n            kind:\n              description: |-\n                Kind is a string value representing the REST resource this object represents.\n                Servers may infer this from the endpoint the client submits requests to.\n                Cannot be updated.\n                In CamelCase.\n                More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds\n              type: string\n            metadata:\n              type: object\n            spec:\n              description: |-\n                NodePoolSpec is the top level nodepool specification. Nodepools\n                launch nodes in response to pods that are unschedulable. A single nodepool\n                is capable of managing a diverse set of nodes. Node properties are determined\n                from a combination of nodepool and pod scheduling constraints.\n              properties:\n                disruption:\n                  default:\n                    consolidateAfter: 0s\n                  description: Disruption contains the parameters that relate to Karpenter's disruption logic\n                  properties:\n                    budgets:\n                      default:\n                        - nodes: 10%\n                      description: |-\n                        Budgets is a list of Budgets.\n                        If there are multiple active budgets, Karpenter uses\n                        the most restrictive value. If left undefined,\n                        this will default to one budget with a value to 10%.\n                      items:\n                        description: |-\n                          Budget defines when Karpenter will restrict the\n                          number of Node Claims that can be terminating simultaneously.\n                        properties:\n                          duration:\n                            description: |-\n                              Duration determines how long a Budget is active since each Schedule hit.\n                              Only minutes and hours are accepted, as cron does not work in seconds.\n                              If omitted, the budget is always active.\n                              This is required if Schedule is set.\n                              This regex has an optional 0s at the end since the duration.String() always adds\n                              a 0s at the end.\n                            pattern: ^((([0-9]+(h|m))|([0-9]+h[0-9]+m))(0s)?)$\n                            type: string\n                          nodes:\n                            default: 10%\n                            description: |-\n                              Nodes dictates the maximum number of NodeClaims owned by this NodePool\n                              that can be terminating at once. This is calculated by counting nodes that\n                              have a deletion timestamp set, or are actively being deleted by Karpenter.\n                              This field is required when specifying a budget.\n                              This cannot be of type intstr.IntOrString since kubebuilder doesn't support pattern\n                              checking for int nodes for IntOrString nodes.\n                              Ref: https://github.com/kubernetes-sigs/controller-tools/blob/55efe4be40394a288216dab63156b0a64fb82929/pkg/crd/markers/validation.go#L379-L388\n                            pattern: ^((100|[0-9]{1,2})%|[0-9]+)$\n                            type: string\n                          reasons:\n                            description: |-\n                              Reasons is a list of disruption methods that this budget applies to. If Reasons is not set, this budget applies to all methods.\n                              Otherwise, this will apply to each reason defined.\n                              allowed reasons are Underutilized, Empty, and Drifted.\n                            items:\n                              description: DisruptionReason defines valid reasons for disruption budgets.\n                              enum:\n                                - Underutilized\n                                - Empty\n                                - Drifted\n                              type: string\n                            maxItems: 50\n                            type: array\n                          schedule:\n                            description: |-\n                              Schedule specifies when a budget begins being active, following\n                              the upstream cronjob syntax. If omitted, the budget is always active.\n                              Timezones are not supported.\n                              This field is required if Duration is set.\n                            pattern: ^(@(annually|yearly|monthly|weekly|daily|midnight|hourly))|((.+)\\s(.+)\\s(.+)\\s(.+)\\s(.+))$\n                            type: string\n                        required:\n                          - nodes\n                        type: object\n                      maxItems: 50\n                      type: array\n                      x-kubernetes-validations:\n                        - message: '''schedule'' must be set with ''duration'''\n                          rule: self.all(x, has(x.schedule) == has(x.duration))\n                    consolidateAfter:\n                      description: |-\n                        ConsolidateAfter is the duration the controller will wait\n                        before attempting to terminate nodes that are underutilized.\n                        Refer to ConsolidationPolicy for how underutilization is considered.\n                        When replicas is set, ConsolidateAfter is simply ignored\n                      pattern: ^(([0-9]+(s|m|h))+|Never)$\n                      type: string\n                    consolidationPolicy:\n                      default: WhenEmptyOrUnderutilized\n                      description: |-\n                        ConsolidationPolicy describes which nodes Karpenter can disrupt through its consolidation\n                        algorithm. This policy defaults to \"WhenEmptyOrUnderutilized\" if not specified\n                        When replicas is set, ConsolidationPolicy is simply ignored\n                      enum:\n                        - WhenEmpty\n                        - WhenEmptyOrUnderutilized\n                      type: string\n                  required:\n                    - consolidateAfter\n                  type: object\n                limits:\n                  additionalProperties:\n                    anyOf:\n                      - type: integer\n                      - type: string\n                    pattern: ^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$\n                    x-kubernetes-int-or-string: true\n                  description: |-\n                    Limits define a set of bounds for provisioning capacity.\n                    Limits other than limits.nodes is not supported when replicas is set.\n                  type: object\n                replicas:\n                  description: |-\n                    Replicas is the desired number of nodes for the NodePool. When specified, the NodePool will\n                    maintain this fixed number of replicas rather than scaling based on pod demand.\n                    When replicas is set:\n                      - The following fields are ignored:\n                          * disruption.consolidationPolicy\n                          * disruption.consolidateAfter\n                      - Only limits.nodes is supported; other resource limits (e.g., CPU, memory) must not be specified.\n                      - Weight is not supported.\n                    Note: This field is alpha.\n                  format: int64\n                  minimum: 0\n                  type: integer\n                template:\n                  description: |-\n                    Template contains the template of possibilities for the provisioning logic to launch a NodeClaim with.\n                    NodeClaims launched from this NodePool will often be further constrained than the template specifies.\n                  properties:\n                    metadata:\n                      properties:\n                        annotations:\n                          additionalProperties:\n                            type: string\n                          description: |-\n                            Annotations is an unstructured key value map stored with a resource that may be\n                            set by external tools to store and retrieve arbitrary metadata. They are not\n                            queryable and should be preserved when modifying objects.\n                            More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations\n                          type: object\n                        labels:\n                          additionalProperties:\n                            type: string\n                            maxLength: 63\n                            pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$\n                          description: |-\n                            Map of string keys and values that can be used to organize and categorize\n                            (scope and select) objects. May match selectors of replication controllers\n                            and services.\n                            More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels\n                          type: object\n                          maxProperties: 100\n                          x-kubernetes-validations:\n                            - message: label domain \"karpenter.sh\" is restricted\n                              rule: self.all(x, x in [\"karpenter.sh/capacity-type\", \"karpenter.sh/nodepool\"] || !x.find(\"^([^/]+)\").endsWith(\"karpenter.sh\"))\n                            - message: label \"karpenter.sh/nodepool\" is restricted\n                              rule: self.all(x, x != \"karpenter.sh/nodepool\")\n                            - message: label \"kubernetes.io/hostname\" is restricted\n                              rule: self.all(x, x != \"kubernetes.io/hostname\")\n                            - message: label domain \"karpenter.k8s.aws\" is restricted\n                              rule: self.all(x, x in [\"karpenter.k8s.aws/instance-tenancy\", \"karpenter.k8s.aws/capacity-reservation-type\", \"karpenter.k8s.aws/capacity-reservation-id\", \"karpenter.k8s.aws/capacity-reservation-interruptible\", \"karpenter.k8s.aws/ec2nodeclass\", \"karpenter.k8s.aws/instance-encryption-in-transit-supported\", \"karpenter.k8s.aws/instance-category\", \"karpenter.k8s.aws/instance-hypervisor\", \"karpenter.k8s.aws/instance-family\", \"karpenter.k8s.aws/instance-generation\", \"karpenter.k8s.aws/instance-local-nvme\", \"karpenter.k8s.aws/instance-size\", \"karpenter.k8s.aws/instance-cpu\", \"karpenter.k8s.aws/instance-cpu-manufacturer\", \"karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz\", \"karpenter.k8s.aws/instance-memory\", \"karpenter.k8s.aws/instance-ebs-bandwidth\", \"karpenter.k8s.aws/instance-network-bandwidth\", \"karpenter.k8s.aws/instance-gpu-name\", \"karpenter.k8s.aws/instance-gpu-manufacturer\", \"karpenter.k8s.aws/instance-gpu-count\", \"karpenter.k8s.aws/instance-gpu-memory\", \"karpenter.k8s.aws/instance-accelerator-name\", \"karpenter.k8s.aws/instance-accelerator-manufacturer\", \"karpenter.k8s.aws/instance-accelerator-count\", \"karpenter.k8s.aws/instance-capability-flex\"] || !x.find(\"^([^/]+)\").endsWith(\"karpenter.k8s.aws\"))\n                      type: object\n                    spec:\n                      description: |-\n                        NodeClaimTemplateSpec describes the desired state of the NodeClaim in the Nodepool\n                        NodeClaimTemplateSpec is used in the NodePool's NodeClaimTemplate, with the resource requests omitted since\n                        users are not able to set resource requests in the NodePool.\n                      properties:\n                        expireAfter:\n                          default: 720h\n                          description: |-\n                            ExpireAfter is the duration the controller will wait\n                            before terminating a node, measured from when the node is created. This\n                            is useful to implement features like eventually consistent node upgrade,\n                            memory leak protection, and disruption testing.\n                          pattern: ^(([0-9]+(s|m|h))+|Never)$\n                          type: string\n                        nodeClassRef:\n                          description: NodeClassRef is a reference to an object that defines provider specific configuration\n                          properties:\n                            group:\n                              description: API version of the referent\n                              pattern: ^[^/]*$\n                              type: string\n                              x-kubernetes-validations:\n                                - message: group may not be empty\n                                  rule: self != ''\n                            kind:\n                              description: 'Kind of the referent; More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds\"'\n                              type: string\n                              x-kubernetes-validations:\n                                - message: kind may not be empty\n                                  rule: self != ''\n                            name:\n                              description: 'Name of the referent; More info: http://kubernetes.io/docs/user-guide/identifiers#names'\n                              type: string\n                              x-kubernetes-validations:\n                                - message: name may not be empty\n                                  rule: self != ''\n                          required:\n                            - group\n                            - kind\n                            - name\n                          type: object\n                          x-kubernetes-validations:\n                            - message: nodeClassRef.group is immutable\n                              rule: self.group == oldSelf.group\n                            - message: nodeClassRef.kind is immutable\n                              rule: self.kind == oldSelf.kind\n                        requirements:\n                          description: Requirements are layered with GetLabels and applied to every node.\n                          items:\n                            description: |-\n                              A node selector requirement is a selector that contains values, a key, an operator that relates the key and values\n                              and minValues that represent the requirement to have at least that many values.\n                            properties:\n                              key:\n                                description: The label key that the selector applies to.\n                                type: string\n                                maxLength: 316\n                                pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*(\\/))?([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9]$\n                                x-kubernetes-validations:\n                                  - message: label domain \"karpenter.sh\" is restricted\n                                    rule: self in [\"karpenter.sh/capacity-type\", \"karpenter.sh/nodepool\"] || !self.find(\"^([^/]+)\").endsWith(\"karpenter.sh\")\n                                  - message: label \"karpenter.sh/nodepool\" is restricted\n                                    rule: self != \"karpenter.sh/nodepool\"\n                                  - message: label \"kubernetes.io/hostname\" is restricted\n                                    rule: self != \"kubernetes.io/hostname\"\n                                  - message: label domain \"karpenter.k8s.aws\" is restricted\n                                    rule: self in [\"karpenter.k8s.aws/instance-tenancy\", \"karpenter.k8s.aws/capacity-reservation-type\", \"karpenter.k8s.aws/capacity-reservation-id\", \"karpenter.k8s.aws/capacity-reservation-interruptible\", \"karpenter.k8s.aws/ec2nodeclass\", \"karpenter.k8s.aws/instance-encryption-in-transit-supported\", \"karpenter.k8s.aws/instance-category\", \"karpenter.k8s.aws/instance-hypervisor\", \"karpenter.k8s.aws/instance-family\", \"karpenter.k8s.aws/instance-generation\", \"karpenter.k8s.aws/instance-local-nvme\", \"karpenter.k8s.aws/instance-size\", \"karpenter.k8s.aws/instance-cpu\", \"karpenter.k8s.aws/instance-cpu-manufacturer\", \"karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz\", \"karpenter.k8s.aws/instance-memory\", \"karpenter.k8s.aws/instance-ebs-bandwidth\", \"karpenter.k8s.aws/instance-network-bandwidth\", \"karpenter.k8s.aws/instance-gpu-name\", \"karpenter.k8s.aws/instance-gpu-manufacturer\", \"karpenter.k8s.aws/instance-gpu-count\", \"karpenter.k8s.aws/instance-gpu-memory\", \"karpenter.k8s.aws/instance-accelerator-name\", \"karpenter.k8s.aws/instance-accelerator-manufacturer\", \"karpenter.k8s.aws/instance-accelerator-count\", \"karpenter.k8s.aws/instance-capability-flex\"] || !self.find(\"^([^/]+)\").endsWith(\"karpenter.k8s.aws\")\n                              minValues:\n                                description: |-\n                                  This field is ALPHA and can be dropped or replaced at any time\n                                  MinValues is the minimum number of unique values required to define the flexibility of the specific requirement.\n                                maximum: 50\n                                minimum: 1\n                                type: integer\n                              operator:\n                                description: |-\n                                  Represents a key's relationship to a set of values.\n                                  Valid operators are In, NotIn, Exists, DoesNotExist. Gt, Lt, Gte, and Lte.\n                                enum:\n                                  - Gte\n                                  - Lte\n                                  - In\n                                  - NotIn\n                                  - Exists\n                                  - DoesNotExist\n                                  - Gt\n                                  - Lt\n                                type: string\n                              values:\n                                description: |-\n                                  An array of string values. If the operator is In or NotIn,\n                                  the values array must be non-empty. If the operator is Exists or DoesNotExist,\n                                  the values array must be empty. If the operator is Gt, Lt, Gte, or Lte, the values\n                                  array must have a single element, which will be interpreted as an integer.\n                                  This array is replaced during a strategic merge patch.\n                                items:\n                                  type: string\n                                type: array\n                                x-kubernetes-list-type: atomic\n                                maxLength: 63\n                                pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$\n                            required:\n                              - key\n                              - operator\n                            type: object\n                          maxItems: 100\n                          type: array\n                          x-kubernetes-validations:\n                            - message: requirements with operator 'In' must have a value defined\n                              rule: 'self.all(x, x.operator == ''In'' ? x.values.size() != 0 : true)'\n                            - message: requirements operator 'Gt', 'Lt', 'Gte', or 'Lte' must have a single positive integer value\n                              rule: 'self.all(x, (x.operator == ''Gt'' || x.operator == ''Lt'' || x.operator == ''Gte'' || x.operator == ''Lte'') ? (x.values.size() == 1 && int(x.values[0]) >= 0) : true)'\n                            - message: requirements with 'minValues' must have at least that many values specified in the 'values' field\n                              rule: 'self.all(x, (x.operator == ''In'' && has(x.minValues)) ? x.values.size() >= x.minValues : true)'\n                        startupTaints:\n                          description: |-\n                            StartupTaints are taints that are applied to nodes upon startup which are expected to be removed automatically\n                            within a short period of time, typically by a DaemonSet that tolerates the taint. These are commonly used by\n                            daemonsets to allow initialization and enforce startup ordering.  StartupTaints are ignored for provisioning\n                            purposes in that pods are not required to tolerate a StartupTaint in order to have nodes provisioned for them.\n                          items:\n                            description: |-\n                              The node this Taint is attached to has the \"effect\" on\n                              any pod that does not tolerate the Taint.\n                            properties:\n                              effect:\n                                description: |-\n                                  Required. The effect of the taint on pods\n                                  that do not tolerate the taint.\n                                  Valid effects are NoSchedule, PreferNoSchedule and NoExecute.\n                                type: string\n                                enum:\n                                  - NoSchedule\n                                  - PreferNoSchedule\n                                  - NoExecute\n                              key:\n                                description: Required. The taint key to be applied to a node.\n                                type: string\n                                minLength: 1\n                                pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*(\\/))?([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9]$\n                              timeAdded:\n                                description: TimeAdded represents the time at which the taint was added.\n                                format: date-time\n                                type: string\n                              value:\n                                description: The taint value corresponding to the taint key.\n                                type: string\n                                pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*(\\/))?([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9]$\n                            required:\n                              - effect\n                              - key\n                            type: object\n                          type: array\n                        taints:\n                          description: Taints will be applied to the NodeClaim's node.\n                          items:\n                            description: |-\n                              The node this Taint is attached to has the \"effect\" on\n                              any pod that does not tolerate the Taint.\n                            properties:\n                              effect:\n                                description: |-\n                                  Required. The effect of the taint on pods\n                                  that do not tolerate the taint.\n                                  Valid effects are NoSchedule, PreferNoSchedule and NoExecute.\n                                type: string\n                                enum:\n                                  - NoSchedule\n                                  - PreferNoSchedule\n                                  - NoExecute\n                              key:\n                                description: Required. The taint key to be applied to a node.\n                                type: string\n                                minLength: 1\n                                pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*(\\/))?([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9]$\n                              timeAdded:\n                                description: TimeAdded represents the time at which the taint was added.\n                                format: date-time\n                                type: string\n                              value:\n                                description: The taint value corresponding to the taint key.\n                                type: string\n                                pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*(\\/))?([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9]$\n                            required:\n                              - effect\n                              - key\n                            type: object\n                          type: array\n                        terminationGracePeriod:\n                          description: |-\n                            TerminationGracePeriod is the maximum duration the controller will wait before forcefully deleting the pods on a node, measured from when deletion is first initiated.\n\n                            Warning: this feature takes precedence over a Pod's terminationGracePeriodSeconds value, and bypasses any blocked PDBs or the karpenter.sh/do-not-disrupt annotation.\n\n                            This field is intended to be used by cluster administrators to enforce that nodes can be cycled within a given time period.\n                            When set, drifted nodes will begin draining even if there are pods blocking eviction. Draining will respect PDBs and the do-not-disrupt annotation until the TGP is reached.\n\n                            Karpenter will preemptively delete pods so their terminationGracePeriodSeconds align with the node's terminationGracePeriod.\n                            If a pod would be terminated without being granted its full terminationGracePeriodSeconds prior to the node timeout,\n                            that pod will be deleted at T = node timeout - pod terminationGracePeriodSeconds.\n\n                            The feature can also be used to allow maximum time limits for long-running jobs which can delay node termination with preStop hooks.\n                            If left undefined, the controller will wait indefinitely for pods to be drained.\n                          pattern: ^([0-9]+(s|m|h))+$\n                          type: string\n                      required:\n                        - nodeClassRef\n                        - requirements\n                      type: object\n                  required:\n                    - spec\n                  type: object\n                weight:\n                  description: |-\n                    Weight is the priority given to the nodepool during scheduling. A higher\n                    numerical weight indicates that this nodepool will be ordered\n                    ahead of other nodepools with lower weights. A nodepool with no weight\n                    will be treated as if it is a nodepool with a weight of 0.\n                    Weight is not supported when replicas is set.\n                  format: int32\n                  maximum: 100\n                  minimum: 1\n                  type: integer\n              required:\n                - template\n              type: object\n              x-kubernetes-validations:\n                - message: Cannot transition NodePool between static (replicas set) and dynamic (replicas unset) provisioning modes\n                  rule: has(self.replicas) == has(oldSelf.replicas)\n                - message: only 'limits.nodes' is supported on static NodePools\n                  rule: '!has(self.replicas) || (!has(self.limits) || size(self.limits) == 0 || (size(self.limits) == 1 && ''nodes'' in self.limits))'\n                - message: '''weight'' is not supported on static NodePools'\n                  rule: '!has(self.replicas) || !has(self.weight)'\n            status:\n              description: NodePoolStatus defines the observed state of NodePool\n              properties:\n                conditions:\n                  description: Conditions contains signals for health and readiness\n                  items:\n                    description: Condition aliases the upstream type and adds additional helper methods\n                    properties:\n                      lastTransitionTime:\n                        description: |-\n                          lastTransitionTime is the last time the condition transitioned from one status to another.\n                          This should be when the underlying condition changed.  If that is not known, then using the time when the API field changed is acceptable.\n                        format: date-time\n                        type: string\n                      message:\n                        description: |-\n                          message is a human readable message indicating details about the transition.\n                          This may be an empty string.\n                        maxLength: 32768\n                        type: string\n                      observedGeneration:\n                        description: |-\n                          observedGeneration represents the .metadata.generation that the condition was set based upon.\n                          For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\n                          with respect to the current state of the instance.\n                        format: int64\n                        minimum: 0\n                        type: integer\n                      reason:\n                        description: |-\n                          reason contains a programmatic identifier indicating the reason for the condition's last transition.\n                          Producers of specific condition types may define expected values and meanings for this field,\n                          and whether the values are considered a guaranteed API.\n                          The value should be a CamelCase string.\n                          This field may not be empty.\n                        maxLength: 1024\n                        minLength: 1\n                        pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$\n                        type: string\n                      status:\n                        description: status of the condition, one of True, False, Unknown.\n                        enum:\n                          - \"True\"\n                          - \"False\"\n                          - Unknown\n                        type: string\n                      type:\n                        description: type of condition in CamelCase or in foo.example.com/CamelCase.\n                        maxLength: 316\n                        pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$\n                        type: string\n                    required:\n                      - lastTransitionTime\n                      - message\n                      - reason\n                      - status\n                      - type\n                    type: object\n                  type: array\n                nodeClassObservedGeneration:\n                  description: |-\n                    NodeClassObservedGeneration represents the observed nodeClass generation for referenced nodeClass. If this does not match\n                    the actual NodeClass Generation, NodeRegistrationHealthy status condition on the NodePool will be reset\n                  format: int64\n                  type: integer\n                nodes:\n                  default: 0\n                  description: Nodes is the count of nodes associated with this NodePool\n                  format: int64\n                  type: integer\n                resources:\n                  additionalProperties:\n                    anyOf:\n                      - type: integer\n                      - type: string\n                    pattern: ^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$\n                    x-kubernetes-int-or-string: true\n                  description: Resources is the list of resources that have been provisioned.\n                  type: object\n              type: object\n          required:\n            - spec\n          type: object\n      served: true\n      storage: true\n      subresources:\n        scale:\n          specReplicasPath: .spec.replicas\n          statusReplicasPath: .status.nodes\n        status: {}\n"
  },
  {
    "path": "charts/karpenter-crd/values.yaml",
    "content": "# -- Additional annotations for the custom resource definitions.\nadditionalAnnotations: {}\n"
  },
  {
    "path": "cmd/controller/main.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage main\n\nimport (\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/cloudprovider\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/controllers\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/operator\"\n\n\t\"sigs.k8s.io/karpenter/pkg/cloudprovider/metrics\"\n\t\"sigs.k8s.io/karpenter/pkg/cloudprovider/overlay\"\n\tcorecontrollers \"sigs.k8s.io/karpenter/pkg/controllers\"\n\t\"sigs.k8s.io/karpenter/pkg/controllers/state\"\n\tcoreoperator \"sigs.k8s.io/karpenter/pkg/operator\"\n\tkarpoptions \"sigs.k8s.io/karpenter/pkg/operator/options\"\n)\n\nfunc main() {\n\tctx, op := operator.NewOperator(coreoperator.NewOperator())\n\n\tawsCloudProvider := cloudprovider.New(\n\t\top.InstanceTypesProvider,\n\t\top.InstanceProvider,\n\t\top.EventRecorder,\n\t\top.GetClient(),\n\t\top.AMIProvider,\n\t\top.SecurityGroupProvider,\n\t\top.CapacityReservationProvider,\n\t\top.InstanceTypeStore,\n\t)\n\toverlayUndecoratedCloudProvider := metrics.Decorate(awsCloudProvider)\n\tcloudProvider := overlay.Decorate(overlayUndecoratedCloudProvider, op.GetClient(), op.InstanceTypeStore)\n\tclusterState := state.NewCluster(op.Clock, op.GetClient(), cloudProvider)\n\n\tif karpoptions.FromContext(ctx).FeatureGates.ReservedCapacity {\n\t\tv1.CapacityReservationsEnabled = true\n\t}\n\n\top.\n\t\tWithControllers(ctx, corecontrollers.NewControllers(\n\t\t\tctx,\n\t\t\top.Manager,\n\t\t\top.Clock,\n\t\t\top.GetClient(),\n\t\t\top.EventRecorder,\n\t\t\tcloudProvider,\n\t\t\toverlayUndecoratedCloudProvider,\n\t\t\tclusterState,\n\t\t\top.InstanceTypeStore,\n\t\t)...).\n\t\tWithControllers(ctx, controllers.NewControllers(\n\t\t\tctx,\n\t\t\top.Manager,\n\t\t\top.Config,\n\t\t\top.Clock,\n\t\t\top.EC2API,\n\t\t\top.GetClient(),\n\t\t\top.EventRecorder,\n\t\t\top.UnavailableOfferingsCache,\n\t\t\top.SSMCache,\n\t\t\top.ValidationCache,\n\t\t\top.RecreationCache,\n\t\t\tcloudProvider,\n\t\t\top.SubnetProvider,\n\t\t\top.SecurityGroupProvider,\n\t\t\top.InstanceProfileProvider,\n\t\t\top.InstanceProvider,\n\t\t\top.PricingProvider,\n\t\t\top.AMIProvider,\n\t\t\top.LaunchTemplateProvider,\n\t\t\top.VersionProvider,\n\t\t\top.InstanceTypesProvider,\n\t\t\top.CapacityReservationProvider,\n\t\t\top.AMIResolver,\n\t\t)...).\n\t\tStart(ctx)\n}\n"
  },
  {
    "path": "designs/README.md",
    "content": "## Designs\n\nThe designs in this folder are merged RFCs. They are historical artifacts that demonstrate the designs of features when they were implemented. They are not kept up to date as changes are made. \n\n## Documentation\n\nThese documents are also not the source truth for the karpenter.sh website. The source for that lives [here](https://github.com/aws/karpenter-provider-aws/tree/main/website/content/en/preview).\n\n## Contributing\n\nIf you wish to work on a feature that requires an RFC, use the documents in this folder as a reference for structure or content. There is no template."
  },
  {
    "path": "designs/ami-selector.md",
    "content": "# Background\n\nThe `AMISelector` field of the [`v1alpha1` `AWSNodeTemplate` resource](/pkg/apis/v1alpha1/awsnodetemplate.go)\nis a key-value map with some special key handling (e.g. `aws-ids` is used to pass image IDs).\n\nMost relevant to this design document was the `name` field, which was passed as the `name` filter to\n[`DescribeImages` API](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeImages.html)\ncall. This field was removed as a special case in #2978, as there is a risk that without filtering\nby owner, AMI impersonation could happen with various risks (e.g. security vulnerabilities, malware\nsuch as mining, or cost implications).\n\nWhile the `Name` tag is still usable, AMI tags are private to an account (so if you want\nto use the AWS bottlerocket AMIs, you'd need to tag them yourself in each account that\nyou use)\n\n# Solutions\n\n1. Restore the previous `name` special case as `aws::name` and add a new `aws::owners`\nspecial case that is passed as the `Owners` argument to `DescribeImages` (this arguments supports both aliases\nsuch as `self` and `amazon` as well as AWS account IDs). Make `self,amazon` the default\nfor this solution. `aws-ids` also becomes available as `aws::ids` - the `aws::` prefixes\nensure that there won't be clashes with existing AMI tags.\n\n2. Create a v1alpha2 AMISelector with a much more flexible type than go's `map[string]string` and\ndeprecate v1alpha1. The new AMISelector could have an interface much closer to `DescribeImages`.\n\nAn example of this might be:\n\n```\namiSelector:\n  owners:\n    - self\n    - 1234567890\n  name: my-ami\n  imageids:\n    - ami-abcd1234\n    - ami-2345cdef\n  filters:\n    tag:Version: v1.2.3,v1.2.4\n    tag:ThisShouldExist:\n```\n\nI think there's still some discussion for what this should look like, and how closely it should\nmap to DescribeImages (here I've taken the approach that the top-level fields all map to an\nargument to DescribeImages)\n\n`owners` would default to `self,amazon`\n\n3. Add an `AMIOwners` list field to v1alpha1 (default `[\"self\",\"amazon\"])` and restore `name` as a special case.\n\n# Recommendations\n\nSolution 1 is pretty much already implemented with #3204 - it's very straightforward, but does\ncreate a new special case of `owners` that would conflict with any existing use of `owners` as\nan AMI tag.\n\nSolution 3 provides a workaround to the `owners` tag conflict but seems unnecessary and inelegant\njust to provide a way to avoid a theoretical conflict.\n\nSolution 2 is the most work, but removes any of the special cases, and provides a much more flexible\napproach to AMI filtering in general - by allowing filters other than `tag:`, users will gain\nmore power.\n\n# Decision from Working Group meeting\n\nImplement Option 1 as a short-term fix to the immediate problem, and implement Option 2 as part\nof a bigger API change that addresses similar improvements to security group and subnet selectors.\n"
  },
  {
    "path": "designs/aws-launch-templates-options.md",
    "content": "# AWS Launch Template Options\n*Authors: JacobGabrielson@*\n## Intro\n\nThis document presents some options for how the AWS-specific (cloud\nprovider) portions of the provisioner could handle [Launch\nTemplates](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html).\n\nPresently, the provisioner has the following shape:\n\n```yaml\napiVersion: provisioning.karpenter.sh/v1alpha2\nkind: Provisioner\nmetadata:\n  name:\nspec:\n  cluster:\n    name:\n    caBundle:\n    endpoint:\n  architecture:\n  taints:\n    - key:\n      effect:\n  zones:\n    -\n  instanceTypes:\n    -\n  ttlSeconds:\n  # Labels will be applied to every node launched by the Provisioner unless\n  # overridden by pod node selectors. Well known labels control provisioning\n  # behavior. Additional labels may be supported by your cloudprovider.\n  labels:\n    # These are AWS-specific\n    kubernetes.amazonaws.com/launchTemplateId:\n    kubernetes.amazonaws.com/launchTemplateVersion:\n    kubernetes.amazonaws.com/capacityType:\n```\n\nAs of Mar 2021, support for these labels in the AWS cloud provider is\nnot yet implemented, so before doing that work, this document presents\nsome alternatives. The next section outlines why we might want to do\nthis.\n\n## Potential Issues\n\n### Label Naming Convention\n\nThe [AWS Controllers for Kubernetes\n(ACK)](https://github.com/aws-controllers-k8s/community) project is\nusing the label naming convention of `*.k8s.aws/*`. The AWS cloud\nprovider portion of this project should consider following that\nconvention.\n\nAnother consideration is that, regardless of which suffix is\nultimately chosen, the node labels should possibly look like\n`node.<suffix>/something`, rather than `<suffix>/something`.\n\nLastly, a casual survey of other widely-used Kubernetes labels shows\nthat using dashes is more common than camel case, so the portion\nfollowing the `/` should probably look like `launch-template-id`.\n\n### Launch Templates and Architecture\n\nAt present, EC2 launch templates must specify an AMI-ID (`ImageId`)\n([docs](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RequestLaunchTemplateData.html)).\nAlthough the field is not, technically, required, in practice is\nactually is mandatory because\n[CreateFleet](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet.html)\ndoes not allow\n[overriding](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_FleetLaunchTemplateOverridesRequest.html)\nthe `ImageId`. Since AMIs are architecture-specific, this means that\nlaunch templates are, transitively, architecture-specific as well.\n\nOne problem is that this might be confusing due to the presence of the\n`architecture` field in the spec. The implication to a user, if they\ndo not specify `architecture`, is that the provisioner can handle all\narchitectures. But if they specify a launch template, their\nprovisioner is now architecture-specific.\n\nAnother potential issue is that the launch template label could\nconflict with the architecture. For example, imagine a customer\nspecified:\n\n```yaml\napiVersion: provisioning.karpenter.sh/v1alpha2\nkind: Provisioner\nspec:\n  architecture: arm64\n  labels:\n    kubernetes.amazonaws.com/launchTemplateId: id-of-x86_64-lt\n```\n\nIn this case, the provisioner will only launch ARM-based instances,\nwhich will fail because the AMI is for the other CPU architecture. This\nmight not come up often enough, in practice, to be worth changing the\ndesign. But it is worth discussion.\n\nSimilarly, with this scheme, there is no way to configure a\nprovisioner to support two different launch templates. If a user\nwanted to support both ARM and x86 in the same cluster, they'd have to\ncreate two separate provisioners.\n\nThe provisioner does not allow the customer to specify a\n`kubernetes.io/arch` label in the `labels` section, so there is no\nrisk of a conflict between that and the launch template.\n\nAnother problem users might run into is that their pod spec might\nspecify a node selector for an architecture that the provisioner\ndoesn't support.\n\n# Solutions\n\n## Label Naming\n\nIt seems like we should standardize on a label naming convention, and\nsince ACK is using it, and it's short, we should use `k8s.aws` as the\nroot suffix going forward. (Obviously while maintaining\nbackwards-compatibility with any extant labels.)\n\nFurthermore, in keeping with Kubernetes\n[convention](https://kubernetes.io/docs/reference/labels-annotations-taints/#nodekubernetesioinstance-type),\nwe should use `node.k8s.aws/` as the prefix for any node labels we\nchoose to use.\n\nIn keeping with another Kubernetes convention (such as\n`kubernetes.io/service-name`), we should use `lower-case-with-hyphens`,\nnot `camelCase` for words following the `/`.\n\nLastly, using launch template names, rather than ids, will be more\nfamiliar to Kubernetes users and should cut down on manual work and\nerrors. Since the EC2 APIs that use launch templates can take either\nnames or ids, it seems like names are an more useful choice. In the\nfuture we can consider adding id support as well, if there is demand\nfor it.\n\n## Architecture\n\nOne partial solution to the architecture issue brought up above would\nbe to remove the ability to specify the `architecture` in the\nprovisioner at all. However, this does not seem like a good idea\nbecause the provisioner is not specific to EC2, and therefore the\nspecific behavior of cloud provider behavior (such as launch\ntemplates) doesn't seem like it merits that kind of change.\n\nAnother solution would be to allow the user to specify architecture\nspecific labels:\n\n```yaml\napiVersion: provisioning.karpenter.sh/v1alpha2\nkind: Provisioner\nspec:\n  labels:\n    # applied only to arm64\n    arm64:\n      node.k8s.aws/launch-template-name: name-of-arm64-lt\n    x86_64:\n      node.k8s.aws/launch-template-name: name-of-x86_64-lt\n    # applied everywhere\n    other-label: other-value\n```\n\nOr:\n\n```yaml\napiVersion: provisioning.karpenter.sh/v1alpha2\nkind: Provisioner\nspec:\n  # applied everywhere\n  labels:\n     other-label: other-value\n  # applied only to arm64\n  arm64-labels:\n     node.k8s.aws/launch-template-name: name-of-arm64-based-lt\n  # applied only to x86_64\n  x86_64-labels:\n```\n\nAnother possibility is to add another \"path element\" to the label name\nto make it architecture specific:\n\n```yaml\napiVersion: provisioning.karpenter.sh/v1alpha2\nkind: Provisioner\nspec:\n  labels:\n      node.k8s.aws/launch-template-name/arm64: name-of-arm64-lt\n      # or?\n      node.k8s.aws/arm64/launch-template-name: name-of-arm64-lt\n```\n\nThis might be very non-standard however and defy expectations. Also,\nthere is no guarantee that the user correctly specified `arm64`; the\nlaunch template might still actually refer to an `x86_64` image.\n\nNote also that the provisioner could determine (through EC2 APIs) the\narchitecture of the `ImageId` referred to by a launch template, and\nthen ignore pod specs that specify and incompatible\n`kubernetes.io/arch` in a [node\nselector](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#nodeselector).\nFor example, imagine the pod spec of a pending pod contains:\n\n```yaml\napiVersion: v1\nkind: Pod\nspec:\n  nodeSelector:\n    kubernetes.io/arch: arm64\n```\n\nIf a provisioner is configured as follows:\n\n```yaml\napiVersion: provisioning.karpenter.sh/v1alpha2\nkind: Provisioner\nspec:\n  labels:\n      node.k8s.aws/launch-template-name: name-of-lt-with-x86_64-based-ami\n```\n\nThen it could ignore that pending pod since there is no way it could\npossibly work. Another possibility is that it could ignore the launch\ntemplate `node.k8s.aws/launch-template-name` for that pod and revert\nto the default, dynamically-generated launch template that would work\nfor that architecture.\n\n\n## Recommendation\n\nFor now the recommendation is to support the following in provisioner\n`spec.labels`:\n\n- `node.k8s.aws/launch-template-name`: (optional) id of launch template\n  and cannot be specified if `architecture`\n- `node.k8s.aws/launch-template-version`: version number or `$LATEST`\n  (optional, default `$LATEST`) (cannot be specified unless\n  `node.k8s.aws/launch-template-name` is present\n- `node.k8s.aws/capacity-type`: listed here for completeness\n\n### The Fine Print\n\n#### Validation\n\nIf the user specifies an incompatible `architecture` in the\nprovisioner spec, or incompatible `kubernetes.io/arch` in their pod\nspec, then the provisioner will instead use the default launch\ntemplate for that architecture. (Note this feature may not be\nimplemented in the first version; in the first version the provisioner\nwill ignore pods with incompatible architectures).\n\n#### Node Selectors and Capacity Pools\n\nIf two presently-unschedulable pods are defined like so (that is, one\nhas a launch template in a node selector and one does not):\n\n```yaml\napiVersion: v1\nkind: Pod\nmetadata:\n  name: podA\nspec:\n  nodeSelector:\n    node.k8s.aws/launch-template-name=x\n---\napiVersion: v1\nkind: Pod\nmetadata:\n  name: podB\nspec:\n```\n\nThen they will not launch on the same instance. In this case at least\ntwo instances would launch.\n\n#### Multiple Provisioners\n\nWhile specifying a `launch-template-name` on a provisioner will limit\nthat provisioner to a single default launch template (pod specs can\nstill override by specifying a launch template), it seems like the\ncomplexity of the other solutions that might allow multiple launch\ntemplates on a single provisioner aren't worth the code complexity\n(without more input from users).\n\n### Pros\n\n- Node labels are shorter\n- Node labels match the ACK project\n- Node labels conform to Kubernetes standard\n- Could theoretically be extended in some future date by adding\n  `/<arch>` into labels (assuming that would not violate\n  standards/expectations)\n- Simple and intuitive most of the time (that is, as long as users\n  aren't expecting the provisioner to support multiple architectures\n  and custom launch templates at the same time).\n- Obvious problems (such as specifying both `architecture` and a\n  launch template in the same provisioner spec) will be caught early,\n  such as when the user runs `kubectl`.\n\n### Cons\n\n- If the user specifies an incompatible `architecture` in the\n  provisioner spec, or incompatible `kubernetes.io/arch` in their pod\n  spec, then that launch template won't be used (or, in initial\n  versions of the provisioner, that pod would get ignored by\n  Karpenter). While this might usually be what the user intended,\n  sometimes it might be surprising.\n- Users who want to specify their own launch template may be confused\n  trying to figure out how to support multiple architectures in the\n  same cluster (that is, they may find it difficult to figure out that\n  they need two provisioners)\n- This does require the (generic) provisioner validating webhook to\n  \"reach in\" to the provider to do further validation, which is\n  additional complexity (that said, it doesn't sound like this is\n  unheard-of behavior in similar projects, either).\n\nCustomers can use multiple provisioners by differentiating in their\npod specs:\n\n```yaml\napiVersion: v1\nkind: Pod\nspec:\n  nodeSelector:\n    kubernetes.io/arch: arm64\n    provisioning.karpenter.sh/name: some-provisioner\n```\n\n# Open Questions\n\n## CAPI Integration\n\nIt would be nice if the AWS cloud provider for Karpenter could\nleverage and/or work smoothly with\n[CAPI](https://github.com/kubernetes-sigs/cluster-api). We will\naddress this in a separate document.\n\n## Launch Template Names\n\nWe could support something like:\n\n- `node.k8s.aws/launch-template-name`: (optional) name of launch template\n\nNames do not appear to be unique.\n"
  },
  {
    "path": "designs/aws-launch-templates-v2.md",
    "content": "## Karpenter and AWS LaunchTemplates\n\n\nThis document focuses on how to evolve Karpenter’s support for AWS LaunchTemplates.\n\n### **What is the problem?**\n\nKarpenter currently lets customers control several properties of the worker node that are being provisioned via the Provisioner. While this includes most core, required parameters like the instanceType, subnets, securityGroups, not all EC2 level parameters are supported.\n\nIf additional configuration is required (say to use a specific AMI), we ask that a complete LaunchTemplate is provided to the Karpenter provisioner. This route has had a few advantages -\n\n1. Users can fully customize their worker node and use any available EC2 feature that’s exposed via launch templates.\n2. Partially filled out launch templates are difficult to interpret. Anyone specifying a custom AMI to use will also need to explicitly specify how it needs to be bootstrapped via UserData. This is important because Karpenter cannot make guesses on how to start the kubelet on an unknown AMI.\n\nThe main, critical downside of this approach has been that a user needs to maintain a fully-formed launch template even when they’re only looking to customize a single property of their worker nodes. Consider these examples -\n\n1. In order to override [the root volume](https://github.com/aws/karpenter/issues/885), you’d need to author an entire launch template containing security groups, userData etc.\n2. In order to just have all statically provisioned [volumes be encrypted](https://github.com/aws/karpenter/issues/933), you need to author an entire launch template.\n\nWhile some users do like complete control over the launch template since they customize everything (kOps), most only need to override a few settings and would therefore like those to be present as knobs on the provisioner itself, and for all other settings to be figured out by Karpenter.\n\n\n### **Which parameters should we support in the providerSpec?**\n\nThe reason this question is important is because we don't want to bloat the AWS providerSpec by adding every EC2 property in there. Having said that, we’ve already made some changes to the v1alpha5 Provisioner API to support scenarios that could’ve been addressed by a custom launch template. This includes [overriding instanceProfiles](https://github.com/aws/karpenter/pull/914), flexibility to [change maxPods](https://github.com/aws/karpenter/pull/1032), configure [IMDS settings](https://github.com/aws/karpenter/commit/5bb3c3ab4ec840de15f05090761bc5f0733bda46), specify [clusterDNS](https://github.com/aws/karpenter/pull/1013), supporting [BlockDeviceMappings](https://github.com/aws/karpenter/pull/1420) and more.\n\nThe rationale we’ve stuck to so far is\n\n1. We only support basic use cases that should apply to most users. Categorizing a use case as basic has been somewhat arbitrary, but we’ve used upvotes on open issues and PRs to get that signal.\n2. At the minimum, functionality that other AWS provisioners like ManagedNodegroups give you without having to use a launch template should be available through Karpenter as well. Most of the parameters we’ve recently added fit this tenet.\n\n### How do we evolve LT usage?\n\nWe’ve considered a few different approaches for this so far.\n\n**Approach 1 - Continue as is. Inline fields as necessary and enforce complete launch templates otherwise.**\n\nWith this approach, we’ll continue to add overrides in our providerSpec based on user appetite, accepting PRs that solve a basic / common use case and asking all others to specify an entire launch template.\n\n\n*Pros*\n* Fastest path forward - we let users define which parameters are most important to them and let them unblock themselves with a PR if it should be beneficial to others.\n* Consider this as an example - EC2 has only added new fields twice in the last two years. Once for nitro enclaves, and the other for network index cards. Both of these aren't what we call a common use case, and even so it's not a lot to maintain. Network cards don't even apply to Karpenter (we tell customers to let the CNI configure network interfaces).\n  * Once we overcome the initial hump of missing fields, we shouldn't frequently encounter new fields that are needed for a base case.\n\n*Cons*\n* The Provider API starts to have too many configuration knobs and becomes difficult to document and use.\n* Difficult messaging for users - how do we define what is and isn't supported on the provisioner? Forcing a user to define an entire launch template as an alternative is a lot of friction.\n* Validating the provisionerSpec will become complex. Consider these examples -\n  * If a user specifies `provider.ImageId`, they'd necessarily also need to provide `provider.UserData` because Karpenter cannot guess how to bootstrap a worker node using an unknown AMI.\n  * If a user specifies both `provisionerSpec.kubeletConfiguration.clusterDNS` and `provider.UserData`, we'd have to fail the provisioner update because we can't honor the former unless we have complete control over the latter.\n\n\n**Approach 2 - Accept partial launch templates and fill in the rest.**\n\nThis approach is inspired by Managed Nodegroups  - we let a customer only specify a certain set of properties in their launch template and let Karpenter automatically figure out the rest. That way a customer needing to only update the sizes of their root volumes needs to specify a much smaller and easier to maintain launch template like -\n\n```\naws ec2 describe-launch-template-versions --launch-template-id lt-123\n{\n    \"LaunchTemplateVersions\": [\n        {\n            \"LaunchTemplateId\": \"lt-123\",\n            \"LaunchTemplateName\": \"karpenter-lt-example\",\n            \"VersionNumber\": 1,\n            \"CreateTime\": \"2022-02-02T23:41:05+00:00\",\n            \"CreatedBy\": \"arn:aws:sts::123:assumed-role/me\",\n            \"DefaultVersion\": true,\n            \"LaunchTemplateData\": {\n                \"BlockDeviceMappings\": [\n                    {\n                        \"DeviceName\": \"/dev/xvdb\",\n                        \"Ebs\": {\n                            \"Iops\": 3000,\n                            \"VolumeSize\": 30,\n                            \"VolumeType\": \"gp3\"\n                        }\n                    }\n                ]\n            }\n        }\n    ]\n}\n```\n\nIf a field that Karpenter normally specifies in the launch template is already filled in by the customer, we ignore it. If it hasn’t been filled in, Karpenter determines what value to use as normal (looking at defaults / providerSpec etc).\n\nWe can potentially expose a parameter like autofill which dictates whether Karpenter should hydrate the remaining fields of your launch template or use your launch template as is. That way we maintain backwards compatibility and customers don’t get surprised if Karpenter suddenly starts filling in a field that it would previously never touch.\n```\nkind: Provisioner\nspec:\n  provider:\n    launchTemplate: CustomKarpenterLaunchTemplateDemo\n     autofill: true\n```\n\n*Pros*\n* A smaller launch template is much easier to maintain for the user.\n* Our API shape remains clean and easier to use. This paradigm is well known across other AWS capacity providers like MNG, Batch etc.\n* If someone wants to customize the entire LaunchTemplate, they can continue to do so and specify `autofill: false`\n\n*Cons*\n* Our validation logic will start to look very messy due to odd scenarios.\nExample - if someone gives us a partial launch template with a custom AMI, the UserData cannot be autofilled by Karpenter.\nOur API shape remains clean and easier to use. This paradigm is well known across other AWS capacity providers like MNG, Batch etc.\n* The user still needs to maintain a launch template. For some, the pain of maintaining a launch template is invariant to how many fields they have to fill out.\n* Karpenter will need to periodically reconcile the provided LaunchTemplate with the Karpenter managed version, if the provided launch template is specified using a version alias like `$LATEST` rather than a fixed number. This can lead to eventual consistency issues - i.e a short time lag between Karpenter picking up that the `$LATEST` version of the provided LT has changed and making the corresponding updates to the Karpenter managed LT.\n\n\n**Approach 3 - Provide a more generic way to specify launch template contents in the Provider**\n\nThe Provider today is strongly typed and we only support a few fields. We can introduce a new field like launchTemplateOverride where we accept bytes and attempt to do deserialize it into a launch template field at runtime.\n\nEffectively, a customer writes the provider as such -\n\n```\nkind: Provisioner\nspec:\n  provider:\n    launchTemplateOverride:\n        BlockDeviceMappings:\n        - DeviceName: \"/dev/xvdb\"\n        Ebs:\n            Iops: 3000\n            VolumeSize: 30\n            VolumeType: gp3\n```\n\nand everything under launchTemplateOverride we try and deserialize [to the LaunchTemplateData](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RequestLaunchTemplateData.html) object using some form of reflection.\n\n\n*Pros*\n* You get the full ability of EC2 launch template right within your Provider\n* You don't need to maintain a launch template at all. Any new EC2 feature will work out of the box as long as the deserialization logic uses the latest AWS SDK i.e keep the controller up to date.\n* It most directly addresses what every customer is asking - let them configure EC2 properties from within the provisioner.\n\n*Cons*\n* APIs should really never accept weakly typed input. It's going to be very easy for a customer to get something wrong what went wrong break the deserialization. When that happens, it might be equally difficult to debug YAML.\n* If customers have to fill out the whole launch templates, it's going to make the provisionerSpec verbose. If they only fill it out partially, then you have the same cons as approach 2.\n\n\n**Approach 4 - Let all infrastructure configuration be expressed as a pod requirement**\n\nThe essence of this approach, is to represent each EC2 instance level feature as a well known label that the Karpenter provisioner recognizes. This is what we currently do with instanceTypes with the `node.kubernetes.io/instance-type` label. Using this approach, the provisioner can read off the podSpec to determine which ImageId it needs to use, which additional volumes need to be statically provisioned and so on.\n\n*Pros*\n* Karpenter supports a kube-native way to define node level configuration that is agnostic of the cloud provider.\n* Since each application is unique and may have unique infrastructure requirements, users will be otherwise forced to define multiple provisioners where each provisioner uses a distinct launch template. By moving the configuration to the pod level, we can continue to only necessitate a single / fewer provisioners.\n\n\n*Cons*\n* Labels aren't expressive enough for free-form fields like UserData or even complex fields like say volumes that have multiple nested attributes.\n* Karpenter uses layered constraints - is it possible to define a bound for UserData?\n  * Along the same lines, should the application developer always have complete control over their infrastructure? Some configuration like ImageIds might need to be enforced by the cluster administrator, so it would be beneficial to never expose ImageIds as a knob to the app developer at all.\n* By moving instance configuration from the provider label to the provisioner label, each separate cloud provider implementation will need to support that label which introduces unneeded complexity. The feature set across all cloud providers is unlikely to ever be homogenous.\n\n\n### Recommendation\n\nI recommend we continue with Approach 1, and give everyone the ability to customize a few select, commonly used fields in the provisionerSpec and ask them to configure all others via a complete LaunchTemplate. I think this keeps our API easy to use. The fields I expect us to add to the Provider in the short term are _ImageId and UserData._ The use cases for other fields either don’t apply to Karpenter, or they’re quite niche where it probably makes sense for the customer to manage all other aspects of the launch template in any case.\n\n* For example, I don’t expect Karpenter customers to need [any of these launch template options](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RequestLaunchTemplateData.html) - CapacityReservationSpecification, CpuOptions, CreditSpecification, DisableApiTermination, ElasticGpuSpecifications, HibernationOptions, InstanceInitiatedShutdownBehavior, InstanceMarketOptions, InstanceRequirements, InstanceType, NetworkInterfaces, PrivateDnsNameOptions so we shouldn’t get too concerned of ever increasing knobs in our Provider API."
  },
  {
    "path": "designs/bin-packing.md",
    "content": "# Bin Packing Design Considerations\n*Authors: prateekgogia@*\n\n> Note: this is not a final design; this is still in POC stage and\n> some things might change.\n\nKarpenter provisions EC2 instances based on the number of pending pods\nand their resource requirements (CPU and Memory). These requirements\nvary and are configured by the pod owners. Karpenter needs to make\nsure that there is sufficient capacity among the provisioned instances\nfor these pods to be scheduled.\n\nThe easiest way is to provision an instance per pending pod, however,\nthis is not very efficient and can incur infrastructure costs for the\nuser. In order to be able to schedule pods efficiently and be\ncost-effective, Karpenter packs these pods on to the available\ninstance types with the given set of constraints. Karpenter follows\nthe [First Fit Decreasing (FFD)](https://en.wikipedia.org/wiki/First-fit-decreasing_bin_packing)\nalgorithm for bin packing the pods. The FFD technique chosen is less\ncomplex and relatively faster considering the number of pods and\ninstance types available are not too high.\n\nAt a very high level, filter and group the pending pods into these\nsmaller groups which can be scheduled together in one or more nodes in\nthe same zone. Once these pods are grouped, the following steps are\ntaken to bin pack each group individually:\n\n1. Sort the pods in the group based on non-increasing order of the\n   resources requested.\n2. Filter all the instance types available, given the cloud provider\n   and node constraints (such as availability zones or architecture).\n3. Start with the largest pod and an instance type.\n    - If the pod doesn't fit this instance type, skip this instance\n      type and select next bigger instance type.\n    - If the pod fits this instance type, check all the remaining pods\n      from largest to smallest, and determining how many can also fit on\n      this given instance.\n    - Compare all the instance types starting with the largest pod in\n      step 3 and select the instance type into which the maximal\n      number of pods fit.\n4. Loop through the remaining pods; for any pod which was not packed\n   in previous iterations, follow the same procedure in step 3.\n"
  },
  {
    "path": "designs/capacity-block-support.md",
    "content": "# Capacity Block Support\n\n## Overview\n\nIn v1.3.0 Karpenter introduced formal support for on-demand capacity reservations.\nHowever, this did not include a subset of ODCRs: Capacity Blocks.\nCapacity Blocks enable users to “reserve highly sought-after GPU instances on a future date to support short duration ML workloads”.\nThis doc will focus on the extension to Karpenter’s existing ODCR feature to support Capacity Blocks.\n\n## Goals\n\n- Karpenter should enable users to select against Capacity Blocks when scheduling workloads\n- Karpenter should discover Capacity Blocks through `ec2nodeclass.spec.capacityReservationSelectorTerms`\n- Karpenter should gracefully handle Capacity Block expiration\n\n## API Updates\n\nWe will add the `karpenter.k8s.aws/capacity-reservation-type` label, which can take on the values `default` and `capacity-block`.\nThis mirrors the `reservationType` field in the `ec2:DescribeCapacityReservation` response and will enable users to select on capacity block nodes via NodePool requirements or node selector terms.\n\n```yaml\n# Configure a NodePool to only be compatible with instance types with active\n# capacity block reservations\nkind: NodePool\napiVersion: karpenter.sh/v1\nspec:\n  template:\n    spec:\n      requirements:\n      - key: karpenter.k8s.aws/capacity-reservation-type\n        operator: In\n        values: ['capacity-block']\n---\n# Configure a pod to only schedule against nodes backed by capacity blocks\nkind: Pod\napiVersion: v1\nspec:\n  nodeSelector:\n    karpenter.k8s.aws/capacity-reservation-type: capacity-block\n```\n\nAdditionally, we will update the NodeClass status to reflect the reservation type and state for a given capacity reservation:\n\n```yaml\nkind: EC2NodeClass\napiVersion: karpenter.k8s.aws/v1\nstatus:\n  capacityReservations:\n  - # ...\n    reservationType: Enum (default | capacity-block)\n    state: Enum (active | expiring)\n```\n\nNo changes are required for `ec2nodeclass.spec.capacityReservationSelectorTerms`.\n\n## Launch Behavior\n\nToday, when Karpenter creates a NodeClaim targeting reserved capacity, it ensures it is launched into one of the correct reservations by injecting a `karpenter.k8s.aws/capacity-reservation-id` requirement into the NodeClaim.\nBy injecting this requirement, we ensure Karpenter can maximize flexibility sent to CreateFleet (minimizing risk of ReservedCapacityExceeded errors) while also ensuring Karpenter doesn’t overlaunch into any given reservation.\n\n```yaml\nkind: NodeClaim\napiVersion: karpenter.sh/v1\nspec:\n  requirements:\n  - key: karpenter.k8s.aws/capacity-reservation-id\n    operator: In\n    values: ['cr-foo', 'cr-bar']\n  # ...\n```\n\nGiven the NodeClaim spec above, Karpenter will create launch templates for both `cr-foo` and `cr-bar`, providing both in the CreateFleet request.\nHowever, this breaks down when we begin to mix default and capacity-block ODCRs (e.g. `cr-foo` is a default capacity reservation, and `cr-bar` is a capacity-block).\nThis is because the `TargetCapacitySpecificationRequest.DefaultTargetCapacityType` field in the CreateFleet request needs to be set to on-demand or capacity-block, preventing us from mixing them in a single request.\nInstead, if a NodeClaim is compatible with both types of ODCRs, we must choose a subset of those ODCRs to include in the CreateFleet request.\nWe have the following options for prioritization when making this selection:\n\n- Prioritize price (the subset with the “cheapest” offering)\n- Prioritize flexibility (the subset with the greatest number of offerings)\n\nAlthough prioritizing flexibility is desireable to reduce the risk of ReservedCapacityExceeded errors, it won’t interact well with consolidation and result in additional node churn.\nFor that reason, we should prioritize the set of ODCRs with the “cheapest” offering when generating the CreateFleet request.\nIf there is a tie between a default and capacity-block offering, we will prioritize the capacity-block offering.\n\n## Interruption\n\nAlthough capacity blocks are modeled as ODCRs, their expiration behavior differs.\nAny capacity still in use when a default ODCR expires falls back to a standard on-demand instance.\nOn the other hand, instances in use from a capacity block reservation are terminated ahead of their end date.\n\nFrom the [EC2 documentation](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-capacity-blocks.html):\n\n> You can use all the instances you reserved until 30 minutes before the end time of the Capacity Block.\n> With 30 minutes left in your Capacity Block reservation, we begin terminating any instances that are running in the Capacity Block.\n> We use this time to clean up your instances before delivering the Capacity Block to the next customer.\n> We emit an event through EventBridge 10 minutes before the termination process begins.\n> For more information, see Monitor Capacity Blocks using EventBridge.\n\nKarpenter should gracefully handle this interruption by draining the nodes ahead of termination.\nWhile we could integrate with the EventBridge event referenced above, this introduces complications when rehydrating state after a controller restart.\nInstead, we will rely on the fact that interruption occurs at a fixed time relative to the end date of the capacity reservation, which is already discovered via `ec2:DescribeCapacityReservation`.\nMatching the time the expiration warning event is emmitted, Karpenter will begin to drain the node 10 minutes before EC2 begins reclaiming the capacity (40 minutes before the end date).\nOnce the reclaimation period begins, Karpenter will mark the capacity reservation as expiring in the EC2NodeClass' status.\n"
  },
  {
    "path": "designs/consolidation.md",
    "content": "# Cluster Consolidation\n\n## Consolidation Mechanisms\n\nKarpenter will implement two consolidation mechanisms for the first release, “node deletion” and “node replacement”.\n\n### Node Deletion\n\nThe simplest form of consolidation is to look at the pods on the node and if they all can be evicted, determine if all of the pods can run on other nodes already in the cluster.  This involves examining the pods on the nodes for conditions that can prevent eviction and then performing a simulated scheduling run against the existing nodes in the cluster.  If all of the pods can schedule against existing nodes, the node can be deleted.\n\nThe disruption cost here is calculated from the number of pods on the node to be deleted and the cost savings is the price of the deleted node.\n\n### Node Replacement\n\nNode Replacement is slightly more complex.  We need to perform the same calculations as in node deletion, however we also allow the scheduler to  consider creating an additional node in addition to considering the existing cluster capacity.  If some combination of existing capacity plus a single new cheaper node creation can support all of the pods, then we can launch the new cheaper node and *when it is ready* delete the existing more expensive node.\n\nThe complication to node replacement is that we need some concept of what the node we are considering replacing costs.  This lead to the recent introduction of accurate pricing information to Karpenter.\n\nTo support Node Replacement well, provisioners will need to allow a wide variety of instance sizes.  For example, if a provisioner only allows instance types that are \"shaped\" similarly with respect to resources, node replacement is unlikely to be able to take advantage of reduced resource usage by workloads via replacing a node with a cheaper variant.\n\nThe disruption cost for node replacement is calculated from the number of pods on the node to be deleted and the cost savings is the price of the deleted node minus the price of the replacement node.\n\n## Selecting Nodes for Consolidation\n\nWe intend to limit consolidation to making minimal changes to the cluster as we work towards reducing cluster cost. Making large changes (e.g. launch 5 replacement nodes and drain 6 existing nodes) is both expensive to compute and more likely to disrupt workloads. During consolidation there will be points where multiple nodes can be consolidated and we will need to choose a node. In testing, if you have roughly equivalent pods and node sizes, large numbers of nodes are all consolidatable at once. We will score consolidation options by computing a metric based on the number of workloads disrupted (excluding daemonsets, terminated pods, etc.), taking into consideration:\n\n* Number of pods to be evicted\n  * e.g. Two identical nodes can be deleted, one has 5 pods and the other has 100. We should delete the node with 5 pods to minimize the number of pods that will need to be rescheduled.\n* Pod deletion costs from the pod annotation controller.kubernetes.io/pod-deletion-cost\n  * e.g. Two identical nodes can be deleted, both with 5 pods.  One has pods with a larger sum of pod-deletion-cost specified, we should delete the node with the lower pod deletion costs.\n* Pod priorities\n  * e.g. Two identical nodes can be deleted, both with 5 pods.  One has pods with a higher priority specified, we should the delete the node with the pods with lower priority.\n* Node Age - The calculated disruption cost from above is weighted by the node lifetime remaining, 1.0 at node creation linearly to 0.0 at expiration.  If the ttlSecondsUntilExpired provisioner setting is not being used, this has no effect.\n  * e.g. Two identical nodes can be deleted, both with 5 pods.  One has 29 days of lifetime remaining and the other has 5 minutes.  We should delete the node with 5 minutes of lifetime left.\n\nThe considerations above are intended to avoid making bad decisions in circumstances when everything else is equal.  By blending them together into a single disruption cost, we can choose how we will make decisions that optimize for a) not disrupting workloads that customers have already indicated are important via standard Kubernetes mechanisms and b) disrupting workloads that will be disrupted soon regardless of our decision.  The concept is similar to the ideas behind Boids algorithm (https://en.wikipedia.org/wiki/Boids).\n\nEssentially we choose to delete nodes when that node's pods will run on other nodes in your cluster. If that isn't possible, we will replace a node with a cheaper node if the node's pods can run on a combination of the other nodes in your cluster and the cheaper replacement node. If there are multiple nodes that could be potentially deleted or replaced, we choose to consolidate the node that overall disrupts your workloads the least by preferring to terminate:\n\n* nodes with fewer pods\n* nodes that will expire soon\n* nodes with lower priority pods\n\n### Pods that Prevent Consolidation\n\nWe will not be able to consolidate nodes with:\n\n* Pods that have no controller owner (apart from those owned by the node)\n* Pods that have a PDB that would prevent their eviction (e.g. a PDB with a status of  disruptionsAllowed = 0)\n  * This only prevents consolidation of a node with pods that are currently at or exceeding the PDB threshold. If disruptionsAllowed is at least 1, we can assume we can delete the pod and a replacement will be rescheduling allowing us to drain the node a the pod replacement rate.\n* Pods with the karpenter.sh/do-not-evict annotation\n* Pods that can’t be moved due to scheduling constraints (e.g. affinity/anti-affinity, topology spread)\n\n\n## Other Considerations\n\n### Configuration\n\nAll configuration is currently hidden.  I’ve picked some values to test, but they will likely need tweaking based on customer feedback.\n\n### Internal Tunables\n\n* Order of Node Evaluation - We currently evaluate nodes in ascending order of disruption cost.  We could also evaluate them in descending order of savings if the node were to be removed/replaced.  I chose disruption cost as it biases for availability of customer workloads while working together with both native Kubernetes mechanisms (e.g. pod-deletion-cost) and Karpenter’s node expiration to allow customer input into which nodes we prefer to consolidate while making better decisions given our knowledge of node lifetime. Minimizing disruption cost also has some correlation to the likelihood of a given node being consolidatable.\n* Polling Period - This is how often we examine the cluster for consolidation.  Currently it’s set to a few seconds with an optimization built in that if we've examined the cluster and found no actions that can be performed, we will pause cluster examination for a period of time unless the cluster state has changed in some way (e.g. pods or nodes added/removed).\n* Stabilization Window - This is the time period after a node has been deleted before we consider consolidating again.  This is needed as controllers that replace evicted pods take a small amount of time to act.  As we are only looking at node capacities with respect to the pods bound to them, we need to wait for those pods to be recreated and bind. This value is currently dynamic and is set to 5 minutes if there are pending pods or un-ready standard controllers and zero seconds if there are no pending pods and all standard controllers are ready.\n* Pod Disruption Cost - We calculate a disruption cost per pod as described above.  This currently weighs a few factors including pod priorities and the pod-deletion-cost annotation to allow customer input using native Kubernetes concepts that influence our consolidation decisions.\n* Minimum Node Lifetime - We use a minimum node lifetime of five minutes. If the node has been initialized for less than this period of time, we don’t consider it for consolidation. This time period can’t be too small as it sometimes takes a few minutes for dynamic PVCs to bind.  If it is too large, then a rapid scale-up/scale-down will be delayed as empty nodes sit idle until they reach the minimum node lifetime.\n\n### Emptiness TTL\n\nThe existing ttlSecondsAfterEmpty settings is duplicative with consolidation. To avoid racing between consolidation and the existing empty node removal, we need one single mechanism that is responsible for for both general consolidation and eliminating empty nodes\n\nTo do this, we will treat ttlSecondsAfterEmpty  and consolidation as mutually exclusive and check this via our validation webhook.  If ttlSecondsAfterEmpty is set and consolidation is turned off, it continues to work as it does now.  If consolidation is turned on, then ttlSecondsAfterEmpty must not be set and consolidation is responsible for empty nodes.\n\nThis doesn’t break existing customers that use ttlSecondsAfterEmpty but don’t turn on consolidation. It also allows for customers that are concerned about workload disruption to continue to only have nodes removed if they are entirely unused for a period of time."
  },
  {
    "path": "designs/custom-user-data-and-amis.md",
    "content": "The goal of this document is to describe how custom user data and AMIs will be supported within Karpenter.\n\n### Current scenario\n\nAs of v0.8.1, Karpenter supports a limited set of instance configuration within the ProvisionerSpec. The most notable omissions being the lack of support for [UserData](https://github.com/aws/karpenter/issues/885) and [AMI](https://github.com/aws/karpenter/issues/1008). The prescribed workaround is a launchTemplate override within the provisioner’s definition, which will be used as-is to create worker nodes.\n\nWhile this pattern has given users the ability to fully customize their worker nodes, there have been several sharp edges.\n\n1. If a user is looking to make a small UserData edit, say to install a specific binary for security compliance, they now need to provide a fully filled out launch template complete with bootstrapping info, security groups, instanceProfiles etc.\n2. It forces users to continue to manage their infrastructure via some tooling like Terraform or CDK, and prevents them from going kube-native for everything except their EKS cluster.\n3. Node properties that Karpenter should own (labels, taints, maxPods, nodeAllocatable) are now dictated by the user. This can lead to surprises such as nodes being orphaned because of missing provisioner labels, inaccurate binpacking leading to evictions and so on.\n\nOur current API is versioned and we’re on `v1alpha5`. This gives us the flexibility to redefine the UX to better suit everyone, even if it were to be backwards incompatible with our GA experience.\n\n\nBefore we determine how the Provisioner API needs to change, we need to first agree on what the final user experience should be. As part of the [first draft](https://github.com/aws/karpenter/pull/1270) of the launch templates UX redefinition, we’ve already decided that we will not support partial launch templates, not express instance configuration requirements via the podSpec, and rather focus on strongly typing any required instance configuration within the provisionerSpec itself. This document now attempts to further dive into what the UserData, AMI and other EC2 property inline support will look like.\n\n------\n------\n\n\n### Supporting UserData\n\nWe have 16* upvotes for [this request](https://github.com/aws/karpenter/issues/885) currently and several more reachouts on Slack. Most userData customizations generally fall into the following two buckets:\n\n* _CASE 1_ - Installing some binaries on worker nodes. These are generally custom tooling, security daemons etc.\n* _CASE 2_ - Modifying the kubelet, container-runtime configuration or some system level property like ulimits.\n\n\nOnce we give users the ability to override the UserData, we need to determine how to merge their UserData contents with the contents that Karpenter wants to set. Look at this section in the [appendix](#appendix) for more information on why *it’s critical* that Karpenter always has control over the UserData and therefore merging is necessary.\n\nThe merging logic for UserData for AL2 AMIs and Bottlerocket AMIs is different. This is because the former uses cloud-init that executes UserData and the latter uses TOML which works in a different way.\n\n**For Bottlerocket AMFamily**\n\nBottlerocket AMIs rely on UserData being defined [as TOML](https://github.com/toml-lang/toml) which is a markup language that is a set of unique key-value pairs. Since TOML is essentially a large dictionary / hashTable, we can accept TOML and merge contents with whatever Karpenter wants to add in. For example, Karpenter will add whatever label  and taints it thinks are accurate to ensure that there is no invalid scheduling performed. Consider the following example:\n\nA user's BR Data -\n```toml\n[settings.kubernetes.eviction-hard]\n\"memory.available\" = \"15%\"\n\n[settings.kubernetes.node-labels]\n'karpenter.sh/provisioner-name' = 'my-prov'\n'foo' = 'bar'\n```\n\nFinal BR Data after Karpenter merges things in -\n\n```toml\n[settings]\n[settings.kubernetes]\napi-server = 'https://7EBA…'\ncluster-certificate = 'LS0tLS…'\ncluster-name = 'my-cluster'\nsettings.kubernetes.api-server = 'apiServerEndpoint'\n\n[settings.kubernetes.eviction-hard]\n\"memory.available\" = \"15%\"\n\n[settings.kubernetes.node-labels]\n'karpenter.sh/capacity-type' = 'on-demand'\n'karpenter.sh/provisioner-name' = 'default'\n'foo' = 'bar'\n```\n\nFrom the output of the merged output, you can see that Karpenter will override any fields that it considers necessary (`node-labels` based on what needs to be present as per the incoming pending pod, `cluster-certificate` etc). All other fields will be copied over as is from the user's TOML content.\n\n* You can address `CASE2` via this mode. `CASE1` isn’t very applicable to Bottlerocket nodes.\n* ManagedNodegroups performs a similar merge so there is precedence and is feasible.\n    * The merge is necessary because TOML doesn’t support [duplicate keys](https://github.com/toml-lang/toml/issues/697) as part of its spec, so you can’t just concatenate two TOML files.\n* To ensure that we don’t perform incorrect bin-packing, Karpenter might need to parse the UserData and extract `settings.kubernetes.system-reserved` and `settings.kubernetes.kube-reserved` which is needed to better estimate nodeAllocatable. This might mean Karpenter maintains state / a cache per Karpenter provisioner.\n    * Alternatively, we can introduce a new field to our provisioner that helps hint how to binpack. This is further discussed in the following section since this limitation applies to the EKS AL2 AMIs too.\n\n\n**For EKS-optimized AL2 AMIFamily**\n\nAL2 / Linux AMIs is more popularly used. UserData is executed by [cloud-init](https://cloudinit.readthedocs.io/en/latest/) and the user data is expected to be shell scripts / cloud-init directives. Merging shell scripts can be messy, so the default pattern used by other AWS services is to leverage MIME multi-part data.\n\nThere are different options we have here -\n\n*Option 1 - MIME parts are run in the order -  `UserManaged` → `Karpenter Managed`*\n\n```\nMIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"==MYBOUNDARY==\"\n\n--==MYBOUNDARY==\nContent-Type: text/x-shellscript; charset=\"us-ascii\"\n\n#!/bin/bash\necho \"Running custom user data script that was in the ProvisionerSpec\"\n\n--==MYBOUNDARY==\nContent-Type: text/x-shellscript; charset=\"us-ascii\"\n\n#!/bin/bash\nset -ex\nB64_CLUSTER_CA=base64data\nAPI_SERVER_URL=apiServerEndpoint\nK8S_CLUSTER_DNS_IP=k8sClusterDnsIp\n/etc/eks/bootstrap.sh clusterName\n  --kubelet-extra-args '--node-labels=karpenter.sh/provisioner-name=default,karpenter.sh/capacity-type=on-demand' \\\n  --b64-cluster-ca $B64_CLUSTER_CA \\\n  --apiserver-endpoint $API_SERVER_URL \\\n  --dns-cluster-ip $K8S_CLUSTER_DNS_IP\n\n--==MYBOUNDARY==--\n```\n\n* Users can address CASE1 very well through this mode. They can let Karpenter figure out how to bootstrap the worker node and focus on installing whatever they need on the worker node.\n* Users cannot address CASE2 via this mode. This is because of how the bootstrap worker node is currently architected - it creates and seeds the kubeletConfiguration at runtime based on the parameters to the script.\n    * If a user were to bootstrap the worker node themselves in their userdata MIME part, the worker node may join with the wrong labels that violates the bin-packing + scheduling logic Karpenter has used.\n* This is currently how [Managed Nodegroups operates](https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html#launch-template-user-data).\n* As part of this, we can also remove `spec.kubeletConfiguration`.\n\n*Option 2 - MIME parts are run in the order -  `UserManaged` → `Karpenter Managed` but `spec.kubeletConfiguration` will be honored*\n\nThis is just a variation of Option 1.\n\n* In this mode, we keep the [kubeletConfiguration field in the provisionerSpec](https://karpenter.sh/v0.8.1/provisioner/#speckubeletconfiguration) and you can set any required configuration here. When Karpenter generates UserData, it’ll make sure to include anything set in the spec.\n    * This helps with the bin-packing logic since it will probably be impossible to parse the user-data as a bash script.\n* Users can then address CASE2 for most cases. But this still leaves the door open for everyone to try and add more kubelet and container configuration within the provisioner which will bloat our API surface and make the provisioner more challenging to maintain.\n\n*[Recommended] Option 3 - MIME parts are run in the order - `Karpenter Managed` → `UserManaged` → `Karpenter Managed`*\n\n```\nMIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"==MYBOUNDARY==\"\n\n--==MYBOUNDARY==\nContent-Type: text/x-shellscript; charset=\"us-ascii\"\n\n#!/bin/bash\nset -ex\nB64_CLUSTER_CA=base64data\nAPI_SERVER_URL=apiServerEndpoint\nK8S_CLUSTER_DNS_IP=k8sClusterDnsIp\n/etc/eks/bootstrap.sh clusterName\n  --kubelet-extra-args '--node-labels=karpenter.sh/provisioner-name=default,karpenter.sh/capacity-type=on-demand' \\\n  --b64-cluster-ca $B64_CLUSTER_CA \\\n  --apiserver-endpoint $API_SERVER_URL \\\n  --dns-cluster-ip $K8S_CLUSTER_DNS_IP \\\n  --kubelet-disabled\n\n--==MYBOUNDARY==\nContent-Type: text/x-shellscript; charset=\"us-ascii\"\n#!/bin/bash\n\n# Running custom user data script that was in the ProvisionerSpec\n# At this point, the kubelet hasn't started so as a user I can make mutations\n# to any of the kubeletConfig / containerRuntime as needed.\n\n# To edit kubelet extra-args - /etc/systemd/system/kubelet.service.d/30-kubelet-extra-args.conf\n# To edit other kubelet args - /etc/systemd/system/kubelet.service.d/\n# To edit kubelet-config - /etc/kubernetes/kubelet/kubelet-config.json\n\n\n--==MYBOUNDARY==\nContent-Type: text/x-shellscript; charset=\"us-ascii\"\n\n#!/bin/bash\nsystemctl enable kubelet\nsystemctl restart kubelet\n\n--==MYBOUNDARY==--\n```\n\n* In this mode, Karpenter passes a new parameter to the bootstrap script called `kubelet-disabled`. The bootstrap script will function normally, except the kubelet systemd service will not be started. This final hook gives Karpenter users time to make any modifications they need to make.\n* Making modifications via bash in the UserData is *not easy*. Using jq _*is painful*_ because it doesn’t support in-place updates / json merges etc.\n    * Updating the `.conf` files that has the kubelet args is difficult since you'd need to sed / awk your way through.\n* Your options are now limitless - you have full control over the worker node's contents and can potentially make any changes you'd like. You can also see what Karpenter was planning to start the kubelet as.\n* We’re establishing a runtime-contract that the the kubelet configurations will always be in-place at specific file locations. We can’t change this runtime contract over time for backwards compatibility.\n* We can create variations of this approach. For example, we can establish a runtime contract where we tell users that they can give us a kubelet-config-custom.json in a specific directory, and do the merging for them as part of the final MIME part.\n* With this option, we give users the ability to do CASE1 and CASE2 bringing parity to the AL2 and BR experience.\n* There’s shared responsibility in the success of the kubelet. If users completely remove the labels Karpenter applies, or modify nodeAllocatable etc, then they're on the hook to debug failures. This is difficult to define outside of documentation.\n\n\nSince we're leaking the abstraction that the bootstrap script currently provides on EKS-optimized AMIs, we can consider two paths to make the UX easier while keeping the flexibility this option provides -\n1. Expose new tiny helper scripts which makes it easy for everyone to make modifications to kubelet configuration. Something like `set-container-runtime.sh`, `max-pods-calculator.sh` (this already exists), `merge-kubelet-params.sh` and so on.\n2. We continue to maintain `spec.kubeletConfiguration` in the Provisioner. For use cases where Karpenter cares about the kubelet config (node allocatable, max pods etc), you can specify it directly within the kubelet config. For everything else, you can modify the configuration directly via a UserData script.\n\nI'm leaning towards implementing *both* of the above.\n\n------\n------\n\n\n### Supporting Custom AMIs\n\nWhen someone passes in an AMI of their choice, it’s difficult for Karpenter to know how to bootstrap the worker node correctly. Different options we can consider are -\n\n_[Recommended] Option 1 - If you provide a custom AMI, you must provide UserData too which will be used as-is._\n\nThis experience mirrors the experience that Karpenter users have today. Essentially this will look like -\n\n```\nspec:\n  provider:\n    apiVersion: extensions.karpenter.sh/v1alpha1\n    kind: AWS\n    securityGroupSelector:\n      karpenter.sh/discovery: karp-cluster\n    subnetSelector:\n      karpenter.sh/discovery: karp-cluster\n    ami: ami-123456\n    userData: \"ba123bc..\" #base64 encoded\n```\n\n* The main problem with this approach is “How will Karpenter apply labels, taints on the worker nodes?”\n    * We’ll continue our existing approach where in Karpenter applies them on the node object that is created by Karpenter. Any labels specified via kubelet args, will just be merged in.\n* Since we also don’t control the rest of the kubeletConfig, we might need to potentially introduce a provisioner field to specify what the kubeReserved and sysReserved values are so Karpenter accurately bin packs. Karpenter isn’t concerned with any other kubelet parameter.  So something like this -\n    *\n    ```\n      spec:\n          binpacking:\n            kubeReserved:\n              memory:\n              cpu:\n            systemReserved:\n              memory:\n              cpu:\n    or...\n\n      spec:\n        kubeletConfiguration:\n          kubeReserved:\n            memory:\n            cpu:\n   ```\n\n* The main advantage of this approach is that we don’t need to try and determine what kind of OS that AMI has and then try and predict what kind of UserData might work. That’s extremely brittle.\n* Users are already doing this today in Karpenter (and in all nodegroups options too) and while there have been some sharp edges [see this](https://github.com/aws/karpenter/issues/1380), for the most part this does work and is simplest to reason about.\n\n\n_Option 2 - Let users indicate what bootstrapping logic to use by defining AMI class_\n\nIn this option, users tell Karpenter to use whatever bootstrapping logic they’d normally use for other AMIFamilies. Our APIs would evolve as -\n\n\nspec:\n  provider:\n    apiVersion: extensions.karpenter.sh/v1alpha1\n    kind: AWS\n    ami: ami-123456\n    amiFamily: AL2\n    userData: \"ba123bc..\" #base64 encoded\n\n* In such cases, Karpenter would operate the exact same way it does when the amiFamily is AL2. It will attempt to bootstrap the worker node as if it were an EKS optimized AL2 AMI.\n* This is helpful for users that build their AMIs using the packer scripts we’ve got (https://github.com/awslabs/amazon-eks-ami) and only perform minimal modifications.\n* This will not cover all use cases. It’s difficult for us to know the extent of customizations that users are currently doing, but we’re probably going to be excluding a set of use cases.\n* We’d have to be extremely careful modifying how Karpenter bootstraps worker nodes. While our new logic might work for new EKS AMIs, we may end up breaking custom AMIs.\n\n------\n------\n\n### Supporting other LaunchTemplate Parameters\n\nWe’ve heard of other instance parameters that users want to control, which Karpenter does not need any control over and can wire through completely.\n\n1. [Capacity Reservations](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_LaunchTemplateCapacityReservationSpecificationRequest.html) - RIs for higher instance availabilities where you’d want to wire these values down to the EC2 Fleet request.\n2. [Cpu Options](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_LaunchTemplateCpuOptionsRequest.html) - If you wanted to control the ratio of mem / CPU on every instance type that you get back. This can be useful if you want to force a certain mem / CPU ratio per instance.\n\nWe could potentially also add `ElasticInferenceAccelerators`, `ElasticGPUSpecifications` and some others if a use case arises.\n\n------\n------\n\n\n### Appendix\n\nWhy will Karpenter always assume responsibility to bootstrap worker nodes?\n\nOutside of custom launch templates, Karpenter today assumes full control over the contents of the UserData and therefore dictates the configuration of the container runtime and kubelet. When using EKS-optimized AMIs (AL2 or BR), Karpenter tends to rely on the AMI defaults for most config, while overriding a few others.\n\nCurrently, only [two kubeletConfiguration parameters](https://karpenter.sh/v0.8.0/provisioner/#speckubeletconfiguration) are configurable by users (clusterDNS and maxPods) and Karpenter dictates the remaining. The reason Karpenter needs to maintain tight control over the kubelet is because -\n\n1. It has to ensure that the labels and taints specified in the provisionerSpec are actually applied on the worker nodes, otherwise any binding decisions it takes may lead to an immediate eviction.\n2. It needs to control kube-reserved and system-reserved since those directly influence the amount of allocatable space a worker node has, which in turn affects Karpenter’s ability to bin pack accurately.\n\nGiven Karpenter’s needs to control some kubelet parameters, the natural question that occurs is - “how does launch templates with Karpenter even work today given users dictate everything?”. The reason that this integration mostly works today from a scheduling perspective, is because we create a node object with the expected labels, taints, maxPods and nodeAllocatable right after we launch the instance. When the kubelet comes alive, any labels or taints that the kubelet advertises will get merged. This pattern has led to a bunch of problems -\n\n1. If for some reason Karpenter fails to create the node object itself, then the node may not have the provisioner’s labels and the node will be orphaned. See this as [an example](https://github.com/aws/karpenter/issues/1380).\n2. Some users modified kube-reserved. This meant that the node allocatable on the worker node was different than what Karpenter calculates. As a result, the bin packing we did was inaccurate and led to evictions on node ready.\n\n"
  },
  {
    "path": "designs/deprecated-ami-observability.md",
    "content": "# Observability for Deprecated AMIs\n\n## Background\n\nWith the recent introduction of a significant feature through [PR #6500](https://github.com/aws/karpenter-provider-aws/pull/6500) Karpenter has enhanced its capability to identify and utilize deprecated Amazon Machine Images (AMIs). Karpenter remains effective in provisioning new nodes within production environments where specific AMI IDs are mandated, adhering to these [guidelines](https://karpenter.sh/docs/tasks/managing-amis/#option-2-lock-down-which-amis-are-selected) or when discovering AMIs based on `AMISelectorTerms`. Previously, if an AMI designated in an EC2NodeClass was deprecated, Karpenter faced challenges in launching new nodes, which could lead to potential service interruptions, especially in cases necessitating auto-scaling driven by Horizontal Pod Autoscalers (HPAs).\n\nThis new feature would also benefit from enhanced observability, allowing cluster admins to identify which EC2NodeClasses are utilizing deprecated AMIs and take action accordingly.\n\n## Options\n\n### Option 1: Update the EC2NodeClass CRD\n\nThis approach will modify the current CRD for the EC2NodeClass by adding a new `deprecated` field to the `status.amis` section, providing a clear and immediate indication of AMI deprecation directly within the resource configuration.\n\n#### Code Definition\n\n[`pkg/apis/v1/ec2nodeclass_status.go`](../pkg/apis/v1/ec2nodeclass_status.go#L53)\n\n```go\ntype AMI struct {\n    // ID of the AMI\n    // +required\n    ID string `json:\"id\"`\n    // Deprecation status of the AMI\n    // +optional\n    Deprecated bool `json:\"deprecated,omitempty\"`\n    // Name of the AMI\n    // +optional\n    Name string `json:\"name,omitempty\"`\n    // Requirements of the AMI to be utilized on an instance type\n    // +required\n    Requirements []corev1.NodeSelectorRequirement `json:\"requirements\"`\n}\n```\n\n#### Proposed Spec\n\n``` yaml\nstatus:\n  amis:\n    - id: ami-01234567890654321\n      name: custom-ami-amd64\n      deprecated: true\n      requirements:\n        - key: kubernetes.io/arch\n          operator: In\n          values:\n            - amd64\n    - id: ami-01234567890123456\n      name: custom-ami-arm64\n      requirements:\n        - key: kubernetes.io/arch\n          operator: In\n          values:\n            - arm64\n```\n\n#### Pros + Cons\n\n* 👍 This will provide cluster admins a clear, concise indication of which AMIs being utilized by the EC2NodeClass are deprecated.\n* 👎 This will add a dependency to require a CRD update for the EC2NodeClass along with the version bump for Karpenter.\n\n### Option 2: Add new status conditions to the EC2NodeClass CRD\n\nThis is an alternate approach to update the status conditions for the EC2NodeClass to provide information to cluster admins that deprecated AMIs were discovered as part of the `amiSelectorTerms`.\n\n#### Code Definition\n\n[`pkg/apis/v1/ec2nodeclass_status.go`](../pkg/apis/v1/ec2nodeclass_status.go#L22)\n\n``` go\n\nconst (\n    ConditionTypeSubnetsReady         = \"SubnetsReady\"\n    ConditionTypeSecurityGroupsReady  = \"SecurityGroupsReady\"\n    ConditionTypeAMIsReady            = \"AMIsReady\"\n    ConditionTypeAMIsDeprecated       = \"AMIsDeprecated\"\n    ConditionTypeInstanceProfileReady = \"InstanceProfileReady\"\n)\n\n```\n\n#### Proposed Spec\n\n``` yaml\nstatus:\n  amis:\n  - id: ami-01234567890654321\n    name: amazon-eks-node-1.29\n    requirements:\n    - key: kubernetes.io/arch\n      operator: In\n      values:\n      - amd64\n  - id: ami-01234567890123456\n    name: amazon-eks-arm64-node-1.29\n    requirements:\n    - key: kubernetes.io/arch\n      operator: In\n      values:\n      - arm64\n  conditions:\n  - lastTransitionTime: \"2024-09-09T04:32:55Z\"\n    message: \"\"\n    reason: AMIsDeprecated\n    status: \"True\"\n    type: AMIsDeprecated\n  - lastTransitionTime: \"2024-09-09T04:32:55Z\"\n    message: \"\"\n    reason: InstanceProfileReady\n    status: \"True\"\n    type: InstanceProfileReady\n  - lastTransitionTime: \"2024-09-09T04:32:55Z\"\n    message: \"\"\n    reason: Ready\n    status: \"True\"\n    type: Ready\n  - lastTransitionTime: \"2024-09-09T04:32:55Z\"\n    message: \"\"\n    reason: SecurityGroupsReady\n    status: \"True\"\n    type: SecurityGroupsReady\n  - lastTransitionTime: \"2024-09-09T04:32:55Z\"\n    message: \"\"\n    reason: SubnetsReady\n    status: \"True\"\n    type: SubnetsReady\n```\n\n#### Pros + Cons\n\n* 👍 This change will not warrant a change to the CRD for the EC2NodeClass, making the Karpenter upgrade seamless without CRD update dependencies\n* 👍 This can provide an metric out of the box `operator_status_condition_count` which can be used to check which `EC2NodeClass` are using deprecated AMIs\n* 👎 This may cause confusion and indicate to cluster admins that a EC2NodeClass is using deprecated AMIs, when in reality it could be that \"one of the AMIs discovered are deprecated\".\n* 👎 Users will have to do the leg work to figure out which AMIs from the discovered AMIs for the EC2NodeClass are deprecated.\n\n\n### Option 3: Best of both worlds\n\nThe final approach would be a combination of both i.e updates to the EC2NodeClass CRD as well as updates to the status condition combining both the approaches mentioned above.\n\n#### Proposed Spec\n\n``` yaml\nstatus:\n  amis:\n  - id: ami-01234567890654321\n    name: amazon-eks-node-1.29\n    deprecated: true\n    requirements:\n    - key: kubernetes.io/arch\n      operator: In\n      values:\n      - amd64\n  - id: ami-01234567890123456\n    name: amazon-eks-arm64-node-1.29\n    requirements:\n    - key: kubernetes.io/arch\n      operator: In\n      values:\n      - arm64\n  conditions:\n  - lastTransitionTime: \"2024-09-09T04:32:55Z\"\n    message: \"\"\n    reason: AMIsDeprecated\n    status: \"True\"\n    type: AMIsDeprecated\n  - lastTransitionTime: \"2024-09-09T04:32:55Z\"\n    message: \"\"\n    reason: InstanceProfileReady\n    status: \"True\"\n    type: InstanceProfileReady\n  - lastTransitionTime: \"2024-09-09T04:32:55Z\"\n    message: \"\"\n    reason: Ready\n    status: \"True\"\n    type: Ready\n  - lastTransitionTime: \"2024-09-09T04:32:55Z\"\n    message: \"\"\n    reason: SecurityGroupsReady\n    status: \"True\"\n    type: SecurityGroupsReady\n  - lastTransitionTime: \"2024-09-09T04:32:55Z\"\n    message: \"\"\n    reason: SubnetsReady\n    status: \"True\"\n    type: SubnetsReady\n```\n\n## Recommendation\n\nBased on the above approaches, the preferred solution would be to leverage [Option 3](#option-3-best-of-both-worlds)\n"
  },
  {
    "path": "designs/deprovisioning.md",
    "content": "# Karpenter - Deprovisioning Controller\n\nKarpenter will implement a mechanism to detect and reconcile nodes that drift from Provisioner and ProviderRef specs. Karpenter will merge all scale-down logic into a `Deprovisioning` controller. This will orchestrate Consolidation, Expiration, Emptiness, and Drift, and any future scale-down logic. The Deprovisioning controller will follow the same structure and build on the Consolidation controller.\n\n## Consolidation Background\n\nConsolidation computes `consolidationActions` to deprovision nodes to optimize resource utilization in the cluster. Consolidation will provision nodes if Karpenter will need to due to deprovisioning. Consolidation executes one `consolidationAction` per reconcile loop, deleting empty nodes first, then consolidating nodes in order of a disruption cost heuristic.\n\nKarpenter will not consolidate a cluster if capacity has changed recently, and will not consolidate a node if Karpenter cannot evict all the scheduled pods.\n\n## DeprovisioningActions\n\n`ConsolidationActions` will now be called `DeprovisioningActions`. The `delete` and `replace` actions will be renamed `deleteConsolidation` and `replaceConsolidation`. This renaming will only affect metrics.\n\nCurrently, after empty nodes, nodes closer to expiry are prioritized for consolidation. `DeprovisioningActions` will be suffixed by the reason, and will be prefixed as `replace` if Karpenter provisions a new node in response to the deprovisioning or `delete` if not. Karpenter's future scale down mechanisms will follow this pattern.\n\nAny action will be one of the following, where emptiness will be merged into an edge case of consolidation:\n- `deleteConsolidation`\n- `replaceConsolidation`\n- `deleteExpiration`\n- `replaceExpiration`\n- `deleteDrift`\n- `replaceDrift`\n\nAs more mechanisms\n\n### DeprovisioningAction Tunables\n\nWith `DeprovisioningActions`, Karpenter will expand the [Internal Tunables](https://github.com/aws/karpenter-provider-aws/blob/main/designs/consolidation.md#internal-tunables) for each of the new `DeprovisioningActions`.\n\n* Order of Node Evaluation - In order, Karpenter will deprovision expired nodes, drifted nodes, then consolidatable nodes. Karpenter will prioritize any custom provider deprovisioning mechanisms such as health checks before any other.\n* DeprovisioningTTL - Karpenter consolidation uses a Consolidation TTL per-node. Going forward Karpenter will use a DeprovisioningTTL of 15 seconds for all deprovisioning methods. These can be tuned to be more granular in the future.\n* Replacement Node Timeout - Currently this is [9.5 minutes](https://github.com/aws/karpenter-provider-aws/blob/main/pkg/controllers/consolidation/controller.go#L70). Karpenter will not change this.\n\n## Benefits of the Deprovisioning Controller\n\nMerging consolidation, drift, and expiration allows Karpenter to define coordinated behavior between the different mechanisms. Tunables applied to the deprovisioning controller will be applied to all deprovisioning methods. This could be further condensed under one API section within a Provisioner. Karpenter could also more efficiently execute a series of DeprovisioningActions by considering future actions.\n"
  },
  {
    "path": "designs/integration-testing.md",
    "content": "# Integration Testing\nauthor: @njtran\n\nCurrently, users can only test Karpenter by adding to a list of integration tests run in a mock environment or installing and testing Karpenter on a real cluster. Users who want to run more comprehensive tests are limited by the lack of test automation and configurability.\n\nTo increase testing of Karpenter, this document introduces plans to create infrastructure and tools to extend the current mechanisms and enable developers to contribute with more confidence.\n\n## Mediums of Testing\n\n__Code Contributions__ are currently tested with integration tests automated by GitHub Actions. Testing a contribution comprehensively is hard for a few reasons:\n\n* Testing all supported Kubernetes and Karpenter versions would be very tedious for one developer\n* Testing with real instances would incur unwanted costs to the contributor\n\n__On-demand testing__ is where a developer may need to test Karpenter independent of contribution. This testing may only be useful for a smaller subset of Karpenter users. Some use-cases include:\n\n* Scale tests to verify test workloads or dependencies\n* Benchmark performance of custom builds and changes\n\n__Periodic tests__ are meant to run on a pre-determined basis to monitor the health of the Karpenter project. These can be used to:\n\n* Track performance regressions/progressions over time\n* Validate that Karpenter functionally works for existing and future releases.\n\n## How Testing Will Impact the User Workflow\n\n__(To be implemented)__ When contributing, users will need to go through some steps to automatically test their changes.\n\n* When a user cuts a PR and is ready to test, a maintainer will need to approve testing by posting `/ok-to-test`\n* A robot watching the PR will kick off tests as configured in the testing folder. The tests will run in infrastructure owned by the respective cloud provider.\n* A link to the logs and metrics will be posted in the PR, whether it’s prow as used in the [kubernetes/test-infra](https://github.com/kubernetes/test-infra) or an alternative solution, such as Tekton.\n* After the tests are successful, the robot will report the results and a maintainer will merge it once approving the code.\n\n__(To be implemented)__ Users can follow instructions to replicate the infrastructure used to run the tests by the cloud provider. Contributors will be able to run tests on their own if they want to shorten the reviewer loop. The associated README will instruct users how to run tests as automated for a PR.\n\n__(To be implemented)__ Contributing to the list of test suites in the testing folder will include those tests in automated testing. As some contributions will only affect real instances, contributors will need to include new tests as well. A user will be able to follow a README in the testing folder to understand how to test their new tests as well.\n\n## Operational Excellence\n\n__(To be implemented)__ Periodic testing will be an important part of Karpenter’s testing history. Results and history will be visualized as a testgrid (https://testgrid.k8s.io/) where users can look at metrics and logs for each set of test runs.\n\n__(To be implemented)__ Upgrade instructions between releases as detailed in the Upgrade Guide (https://karpenter.sh/preview/upgrading/upgrade-guide/#how-do-we-break-incompatibility) will be tested as well. Additional tests will be included in the PR to create the release. As a result, releases will go through the same process as normal commits, and will ensure that upgrade instructions that introduce breaking changes are tested.\n"
  },
  {
    "path": "designs/interruption-handling.md",
    "content": "# Spot Interruption Handling in Karpenter\n\n**Author: Brandon Wagner (wagnerbm@)**\n\n## Goals\n\n* Gracefully drain EC2 instances when a Spot Interruption Notification is received\n\n## Background\n\n[Spot](https://aws.amazon.com/ec2/spot/) is an offering within EC2 where spare VM capacity is sold for steep discounts. Spot instances are the same underlying hardware as on-demand instances, however Spot instances can be interrupted with a 2-minute notification sent by EC2. Kubernetes (K8s) users generally handle interruptions by cordoning the node and draining pods from the node using the[K8s pod eviction API.](https://kubernetes.io/docs/concepts/scheduling-eviction/api-eviction/) \n\nThe eviction API respects Pod Disruption Budgets (PDBs) and the pod’s `terminationGracePeriod` which is the amount of time the pod requires to gracefully shut down. The pod shutdown process usually involves catching the SIGINT signal and performing connection draining or data checkpointing. The eviction API allows `terminationGracePeriod` to be overridden per pod. \n\nAnother Spot event that users receive is a Rebalance Recommendation, which is a signal indicating a Spot instance is at an increased risk of interruption.  Rebalance Recommendations are always sent, but in the worst case will be sent at the same time as a Spot Interruption Notification. Generally, Rebalance Recommendations are sent 10-20 minutes before an interruption. The main use-case is to provide applications that are interruption tolerant, but need a longer shutdown window than the 2-minutes that a Spot Interruption Notification gives. \n\nUsers generally handle Rebalance Recommendations in a couple of ways. One of which is to cordon and drain the node similar to a Spot Interruption Notification. Another way is to only cordon the node to prevent new workloads from scheduling on the capacity that is at higher risk for interruption, but leaving the existing workloads running so that they have a chance to finish before being interrupted. Alternatively, users can choose to completely ignore the recommendations.\n\nEKS Managed Node Groups (MNG) have built-in support for Spot interruptions and Rebalance Recommendation handling, via EC2 Auto-Scaling Group (ASG) lifecycle termination hooks and ASGs [capacity-rebalance](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-capacity-rebalancing.html) feature.   \n\nA popular tool to handle Spot interruptions within K8s that are not running on EKS MNG is the [aws-node-termination-handler](https://github.com/aws/aws-node-termination-handler) (NTH). NTH is vended as a helm chart, plain yaml manifests, and offered as an add-on within kOps. As of July 2022, NTH has 250M+ container pulls and 1.2k stars on Github, making it a popular choice for users not running on MNG.  \n\n## How are Spot Interruption Notifications and Rebalance Recommendations vended?\n\nThere are two ways in-which Spot interruption notifications and Rebalance Recommendations are vended:\n\n**1:  EC2 Instance Metadata Service** \n\nEC2 IMDS is an HTTP API that can only be locally accessed from an EC2 instance.\n\n```\n# Termination Check\ncurl 169.254.169.254/latest/meta-data/spot/instance-action\n{\n    \"action\": \"terminate\",\n    \"time\": \"2022-07-11T17:11:44Z\"\n}\n\n# Rebalance Check\ncurl 169.254.169.254/latest/meta-data/events/recommendations/rebalance\n{\n    \"noticeTime\": \"2022-07-16T19:18:24Z\"\n}\n\n```\n\n**2:  EventBridge**\n\nEventBridge is an Event Bus service within AWS that allows users to set rules on events to capture and then target destinations for those events. Relevant targets for Spot interruption notifications include SQS, Lambda, and EC2-Terminate-Instance.\n\n```\n# Example spot interruption notification EventBridge rule\naws events put-rule \\\n --name MyK8sSpotTermRule \\\n --event-pattern \"{\\\"source\\\": [\\\"aws.ec2\\\"],\\\"detail-type\\\": [\\\"EC2 Spot Instance Interruption\\\"]}\"\n\n# Example rebalance recommendation EventBridge rule\naws events put-rule \\\n --name MyK8sRebalanceRule \\\n --event-pattern \"{\\\"source\\\": [\\\"aws.ec2\\\"],\\\"detail-type\\\": [\\\"EC2 Instance Rebalance Recommendation\\\"]}\"\n\n# Example targeting an SQS queue\naws events put-targets --rule MyK8sSpotTermRule \\\n --targets \"Id=1,Arn=arn:aws:sqs:us-east-1:123456789012:MyK8sTermQueue\"\n```\n\n\n\n## Proposed  Solutions\n\n### Option 1 - Karpenter Managed Queueing  Infrastructure\n\n#### No API Changes.\n\nKarpenter dynamically provisions the queueing infrastructure to handle Spot Interruption Notifications, Rebalance Recommendations, and AWS Health Events. \n\nWe would need to setup:\n\n1. EventBridge Rules for Spot and Health events\n2. An SQS Queue for the rule target to send to\n\nKarpenter would monitor the Queue(s) for interruption notifications and perform a graceful cordon and drain of the interrupted node with the existing termination flow. The controller to setup the SQS queue, EventBridge rules, and fetch the events would need to reside within the AWS Cloud Provider. When a Spot Interruption Notification is received within the controller, it will emit a K8s event and delete the node triggering the finalizer to perform a graceful drain. \n\nAnother consideration with EventBridge rules is that it is not possible to filter Spot Interruption Notifications for instances with a specific tag, so Karpenter’s queue would receive all Spot interruption notifications within a region for the account it is deployed in. Karpenter would simply delete Spot Interruption Notifications on the queue that do not belong to a node it manages.\n\nRebalance Recommendations would be consumed but only emitted as a K8s Event, at least in the initial release. There’s not a safe default action when handling Rebalance Recommendations so it’s best that we default to off until we have some demand for it. We will likely need to add a parameter to the AWSNodeTemplate CRD to provide the action to take on a Rebalance Recommendation (cordon or drain). The implementation will be trivial at that point since Karpenter will already be consuming the Rebalance Recommendation events.   \n\nSQS Queues use a [consumption pricing model](https://aws.amazon.com/sqs/pricing/) where the first 1 million requests per month are free across all SQS API requests. It would be unlikely to breach this free tier by Karpenter alone. The next pricing tier of requests is priced at $0.40 per million requests, so the cost of this approach is fairly small.  EventBridge rules are [free](https://aws.amazon.com/eventbridge/pricing/) to be received from AWS systems.\n\nSQS exposes a VPC Endpoint which will fulfill the isolated VPC use-case. \n\n*Example EventBridge Spot Interruption Notification:*\n\n```\n{\n  \"version\": \"0\",\n  \"id\": \"1e5527d7-bb36-4607-3370-4164db56a40e\",\n  \"detail-type\": \"EC2 Spot Instance Interruption Warning\",\n  \"source\": \"aws.ec2\",\n  \"account\": \"123456789012\",\n  \"time\": \"2022-08-11T14:00:00Z\",\n  \"region\": \"us-east-2\",\n  \"resources\": [\n    \"arn:aws:ec2:us-east-2:instance/i-0123456789\"\n  ],\n  \"detail\": {\n    \"instance-id\": \"i-0123456789\",\n    \"instance-action\": \"terminate\"\n  }\n}\n```\n\n#### Security Implications:\n\nDynamically creating the SQS infrastructure and EventBridge rules means that Karpenter’s IAM role would need permissions to SQS and EventBridge:\n\n```\n\"sqs:GetQueueUrl\",\n\"sqs:ListQueues\",\n\"sqs:ReceiveMessage\",\n\"sqs:CreateQueue\",\n\"sqs:DeleteMessage\",\n\"events:ListRules\",\n\"events:DescribeRule\",\n\"events:PutRule\", \n\"events:PutTargets\",\n\"events:DeleteRule\",\n\"events:RemoveTargets\"\n```\n\nThe policy can be setup with a predefined name based on the cluster name. For example, `karpenter-events-${CLUSTER_NAME}` which would allow for a more constrained resource policy. \n\nWhen Karpenter is uninstalled, queue deletion should occur. This is difficult to achieve since we won’t know if the controller is being upgraded or Karpenter is legitimately being removed. One potential solution is to Delete the queue and EventBridge resources when all Provisioners have been deleted. \n\n### Option 2 - System Daemon\n\n**No API changes.**\n\nA small DaemonSet or system daemon can be deployed to all nodes, or only Spot nodes, that monitors the IMDS endpoint for Spot interruption notifications. When the IMDS endpoint returns a Spot interruption timestamp, the daemonset would trigger a cordon and drain for the node. This could also be a label or taint on the node that Karpenter reconciles to reuse Karpenter’s termination logic and use less rbac permissions. This is basically NTH running in IMDS mode. \n\nThere are several paths that could be taken with this approach outlined below:\n\n**3A: NTH IMDS mode as a Helm Chart Dependency**\n\nThe simplest option is to include [NTH IMDS mode](https://quip-amazon.com/EUgPAQpKMbAj/Spot-Interruption-Handling-in-Karpenter#temp:C:fAR987d60b057584fdf84525fba6) as a dependent helm chart to install alongside Karpenter with a node selector targeting `karpenter.sh/capacity-type: spot` . This would require minimal dev work and would give us access to the NTH team for support.\n\n**3B: Build a System Daemon (nthd)**\n\nAn option to transparently handle spot interruption notifications is to build a system daemon in a separate repo that performs the IMDS monitoring and triggers an instance shutdown when an interruption is observed. This would rely on K8s’ new [graceful shutdown](https://kubernetes.io/docs/concepts/cluster-administration/node-shutdown/#graceful-node-shutdown) feature which went beta in K8s 1.21.\n\nWith graceful shutdown, the kubelet registers [systemd-inhibitor-locks](https://www.freedesktop.org/wiki/Software/systemd/inhibit/) to stop the shutdown flow until locks are relinquished, which in this case would be when the kubelet has drained pods off of the node. Two parameters were added to the kubelet to tune the drain timeouts:  `shutdownGracePeriod` & `shutdownGracePeriodCriticalPods`\n\nUpon receiving a spot interruption notification, the system daemon would use the [dbus](https://www.freedesktop.org/wiki/Software/dbus/),  a mechanism for interprocess communication, to send a `power-off-multiple-sessions` to the operating system. The systemd-inhibitor locks would stop the shutdown flow while the kubelet cordons and gracefully drains the pods from the node.  \n\nThere are security considerations with a system daemon having permissions to shutdown the whole operating system. The daemon can run as an unprivileged user and gain permissions to send the `power-off-multiple-sessions` signal via [PolicyKit](https://www.freedesktop.org/software/polkit/docs/latest/polkit.8.html) (PolKit), which is an authorization API used for dbus. The attack surface is minimal though. An example attack would be a malicious actor replacing the IMDS response from the `/spot` path. But this would require root permissions to load an iptables rule and so the malicious actor would already have permissions to shutdown the instance.\n\nAnother consideration for running a system-daemon without K8s permissions is the observability of Spot related events. There would be no way to convey that a node was interrupted versus some sort of system failure. \n\nThe project would be in a stand-alone github repo or within the NTH repo and be a general purpose AWS Spot Interruption handling mechanism that could be installed via user-data or baked into AMIs. \n\nUnfortunately, AL2’s default version of systemd does not support inhibitor locks properly, so K8s graceful shutdown will not work.\n\n**3C: Build a Spot Interruption Node Problem Detector monitor**\n\nThe [Node Problem Detector](https://github.com/kubernetes/node-problem-detector) (NPD) is a DaemonSet within the Kubernetes github org that identifies common node problems like Kernel Deadlock, NTP issues, Kubelet health issues, etc. and then emits K8s `Events` or adds a `NodeCondition`. \n\nGKE uses NPD as a default add-on for all nodes.\n\nA daemon similar to nthd can be built to identify Spot interruption notifications and integrated w/ the NPD. Currently, NPD embeds the monitor daemons and runs them as go-routines. There’s a plan to break the monitors into separate containers and run within the context of a single pod, but this is not yet implemented. \n\nIf we go this route, I think it would make sense to build the aws-node-problem-detector which uses the upstream NPD, but adds AWS specific monitors, one of which would be Spot interruption notifications. Other monitors that could be built for AWS is scheduled maintenance events and rebalance recommendations. We can work with upstream to split into a cloud-provider model as well which would make this easier. \n\naws-NPD could be setup as a helm chart dependency or run within the aws-node DaemonSet. \n\nKarpenter would need to be updated to watch NodeConditions and terminate when a `SpotInterruption` condition is observed. Rebalance Recommendations would be emitted as a K8s Event. \n\n## Metrics\n\nUsers often track metrics around Spot interruptions and Rebalance Recommendations by capacity pool (instance type, zone). Karpenter will emit Prometheus metrics on those dimensions and provide an aggregate interruption rate for the cluster.  \n\n## Health Events \n\nWhen running K8s nodes within the context of an EC2 Auto-Scaling Group (ASG), health events for instances such as Status Checks, System Checks, and Scheduled Maintenance Events are handled automatically by ASG.  When the ASG observes one of these events, it will trigger a Termination of the instance, which you are able to setup a lifecycle hook to deal with gracefully. \n\nKarpenter does not currently receive health related events from EC2 for instances. Proposed solutions that monitor IMDS or EventBridge can receive Scheduled Maintenance Events only.\n\n## Recommendation\n\nI’d recommend *Option 1 - Karpenter Managed Queueing Infrastructure* since it is the most native Karpenter Spot Interruption Handling approach. There’s no additional daemons that users need to install on nodes and there is no infrastructure to setup. In addition, this approach solves for Spot events and health events. \n\n## EDIT\n\nDuring implementation we discovered that some users wanted to manage their own SQS and EventBridge infrastructure, so we opted to implement Option 1 but without creating and managing the infrastructure.\n"
  },
  {
    "path": "designs/limits.md",
    "content": "# Karpenter Limits\n\nThis document proposes an approach to limit the scaling that Karpenter will perform in order to control customer costs.\n\n## Problem\n\nKarpenter responds to unschedulable pods stuck in the pending status by launching new worker nodes that will satisfy its constraints.\n\nHowever, in certain situations new worker nodes may not be able to satisfy these pending pods. Consider the situation where the AMI being used to create the worker nodes is buggy, which prevents the kubelet from ever spinning up in a healthy state. As a result new worker nodes continue to remain in the `NotReady` state and the node lifecycle controller will eventually taint the worker node after a default wait of 5 minutes leading to the already bound pods getting stuck in `Terminating`. Karpenter won't terminate these nodes since they're not empty. When using a deployment, new replacement pods will be spun up which become stuck in `Pending` and the cycle repeats leading to new worker nodes being launched every 5 minutes indefinitely. Similar scenarios can be replicated by forcing worker nodes to be created in a subnet with a bad route table. For the remainder of this document, I'll refer to this as the `runaway-scaling` problem.\n\nThe next large problem is the inability to define a hard ceiling on cluster costs. When using AWS, the common pattern for setting up your infrastructure-level scaling is using EC2 AutoScaling groups with Cluster Autoscaler (CA). Typically, by limiting the maximum size of an autoscaling group we can enforce a ceiling on how expensive your cluster can get since CA will honor the bounds specified by the auto scaling group.\n\nWe need to provide similar functionality via Karpenter as well wherein there's a hard limit a customer can configure.\n\n## Current State\n\nTo address the runaway-scaling problem the current fix in place is to detect if the kubelet for a worker node has never reported its status to the K8s control plane. If it's been longer than 15 minutes, Karpenter assumes that there's a hard failure mode due to which this worker node will never become healthy and terminates the worker node. If the condition map of the node object in the API Server says `NodeStatusNeverUpdated` then we use that as an indicator of the node having never come up.\n\nThis fix ensures that if there are other scenarios where a worker node has become unhealthy due to a network partition or power outage in a availability zone, we don't terminate those worker nodes. It's important we don't make the static stability of a cluster worse during such an event. On the other hand, if there is an edge case where worker nodes come online and soon go offline, it will lead to runaway scaling again. This edge case should be unlikely to happen in the near term, so this document focuses on just the ability to limit costs within Karpenter. That way even if runaway scaling does occur there's a way to bound it. A longer-term solution to handle the runaway problem will be discussed separately.\n\n## Proposed Solution for Limits\n\nThere are two broad forms of limiting we could apply. The first is that we could introduce a limit to the number of in-flight worker node being provisioned at a point in time. A worker node that's in the `NotReady` state could be considered to be in-flight. The second form is an absolute limit of the number of resources Karpenter can provision.\n\n### **In-flight limit**\n\n```yaml\nspec:\n  limits:\n    unready: 20% # StringOrInt\n```\n\nIn the above example - `20%` indicates that if at any point in time, more than 20% (rounded up) of all worker nodes in the cluster are in an unready state, then the provisioner will stop scaling up.\n\nThe good bit about this approach is that we don't constrain how many total worker nodes can be spun up by Karpenter, while also making sure that if we keep launching worker nodes that aren't healthy, we stop the scaling and save costs.\n\nThe two main problems with this approach though are -\n\n1. This limit while meant to just constrain the number of unhealthy worker nodes in a cluster, will also inhibit the rate at which Karpenter can respond to pods that aren't schedulable. This somewhat goes against the goal of minimizing launch times of workers.\n2. While this helps ensure that costs don't increase due to runaway scaling, it won't help those who want a stricter cap on the amount of resources that's being provisioned even when nodes are otherwise healthy.\n\n### **Absolute limit**\n\nThis is a much simpler semantic to follow, where you provide an upper cap on the amount of resources being provisioned irrespective of their health. This is more in-line with alternative solutions like CA and should be easier to reason with. This is **the approach I recommend**.\n\nThe actual limit of the number of resources being spun up can be defined either through something similar to resource requests or just a flat count of instances.\n\n```yaml\nspec:\n  limits:\n    resources:\n      cpu: 1000\n      memory: 1000Gi\n      nvidia.com/gpu: 1\n```\n\nModeling your limit via CPU and Memory constraints aligns well with customers that use resource requests with their pods. This should give everyone a consistent interface to define the capacity requirements of their applications as well as their underlying infrastructure. There shouldn't be a need to think of the actual number and type of instances that are being chosen by Karpenter.\n\nAs a cost control mechanism, this requires a little more work from our users if they're looking for higher precision. Since some cloud providers like AWS charge differently per instance type rather than the actual resource request and consumption, a little more translation will be needed to estimate costs. There are other factors like reserved instances (varying duration / purchased up-front) which make the cost estimation even more tricky and therefore a simple aggregate limit will be more usable. The alternative of a flat count of instance types - say `spec.limits.resources.count`, doesn't help solve that problem either since the instance types of differing prices are chosen by Karpenter by default. In case overrides are defined via `kubernetes.io/instance-type`, you should be able to calculate the CPU and Memory bounds fairly trivially through some cloud provider API calls.\n\n[CPU limits](https://kubernetes.io/docs/tasks/configure-pod-container/assign-cpu-resource/#cpu-units), memory limits and GPU limits will be defined similar to resource requests and will not be required by default. Karpenter will also will not default to any limits itself.\n\nThe list of supported resource types is -\n\n- `cpu`\n- `memory`\n- `nvidia.com/gpu`\n- `amd.com/gpu`\n- `aws.amazon.com/neuron`\n- `aws.amazon.com/neuroncore`\n- `habana.ai/gaudi`\n\nLimits will be defined at the per-provisioner level. We'll rely on the `karpenter.sh/provisioner-name` node label when calculating resource usage by a specific provisioner. This is useful when multiple teams share a single cluster and use separate provisioners since each team's resource consumption will be limited separately.\n\nA global cluster-wide limit for all resources could be configured too. However, since we only expect a finite list of provisioners in the cluster, inferring the global limit from a sum of provisioner specific limits shouldn't be difficult for a cluster administrator to do either. I think this is another knob we should consider adding only if we find other compelling use cases.\n"
  },
  {
    "path": "designs/metrics.md",
    "content": "# Karpenter Metrics / Dashboard Design\n\n## Motivation\n\nWhile Karpenter already instruments several Prometheus metrics ([existing\nmetrics](#existing-metrics)), consumers have expressed interest in expanding the available metrics\n(exemplified by this [github issue](https://github.com/aws/karpenter/issues/612)). Additionally, an expanded set of\nmetrics would aid in debugging [baselining issues](https://github.com/aws/karpenter/issues/1639). Finally, expanding the\nset of metrics will bring feature-parity with other cluster auto-scaling solutions (e.g. [CAS'\nmetrics](https://github.com/kubernetes/autoscaler/blob/master/cluster-autoscaler/proposals/metrics.md)).\n\n## Goals\n\nDashboards will be targeted toward two types of users: those looking for detailed information on the performance like\ndevelopers and contributors, and those looking to evaluate Karpenter at a high-level, without requiring deep domain\nknowledge of Karpenter.\n\nFor high-level metrics, users will be able to:\n- View object distribution across various attributes (e.g. provisioner, capacity types, instance types, etc.)\n- Evaluate utilization of objects provisioned by Karpenter\n\nFor more in-depth metrics, users will be able to:\n- View various latencies, error rates, and execution rates of individual controllers and API calls\n- Evaluate scheduling statistics (e.g. node termination, and pod startup durations)\n\n## Karpenter Capacity Dashboard\n\nThe Karpenter Capacity dashboard serves as the high-level dashboard which describes object distribution and utilization.\n\nTo demonstrate object distribution, Grafana graphs / bar gauges will be used to demonstrate distribution of nodes and\npods over various labels, including provisioner, zone, architecture, instance type, and capacity type. The phase of pods\nand nodes will also be demonstrated in a similar way. Finally, gauges and line graphs will be used to demonstrate\noverall system resources (e.g. total memory in the cluster).\n\nAs for utilization, gauges will show the current resource requests and resource utilization rates. Additionally, there\nwill be a line graph to show overall resource utilization over time. Finally, there will be a table showing per-node\nutilization. All utilization metrics will be separated by available resource types (e.g. cpu, memory, pods, etc).\n\nThe following metrics will be instrumented to achieve these goals:\n\n| **Name**                                | **Type**  | **Labels**                                                                                             | **Description**\n|-----------------------------------------|-----------|--------------------------------------------------------------------------------------------------------|--------------------------------------------------------------\n| `karpenter_nodes_count`                 | Gauge     | `provisioner`, `zone`, `arch`, `capacity_type`, `instance_type`, `phase`                               | The number of nodes provisioned by Karpenter.\n| `karpenter_pods_count`                  | Gauge     | `provisioner`, `zone`, `arch`, `capacity_type`, `instance_type`, `phase`, `node_name`, `schedulable`   | The number of pods scheduled to Karpenter provisioned nodes.\n| `karpenter_nodes_allocatable`           | Gauge     | `resource_type`, `node_name`, `provisioner`, `zone`, `arch`, `capacity_type`, `instance_type`, `phase` | The resources allocatable by nodes\n| `karpenter_nodes_total_daemon_limits`   | Gauge     | `resource_type`, `node_name`, `provisioner`, `zone`, `arch`, `capacity_type`, `instance_type`, `phase` | The resources specified by DaemonSet pod limits\n| `karpenter_nodes_total_daemon_requests` | Gauge     | `resource_type`, `node_name`, `provisioner`, `zone`, `arch`, `capacity_type`, `instance_type`, `phase` | The resources requested by DaemonSet pods bound to nodes\n| `karpenter_nodes_total_pod_limits`      | Gauge     | `resource_type`, `node_name`, `provisioner`, `zone`, `arch`, `capacity_type`, `instance_type`, `phase` | The resources specified by non-DaemonSet pod limits\n| `karpenter_nodes_total_pod_requests`    | Gauge     | `resource_type`, `node_name`, `provisioner`, `zone`, `arch`, `capacity_type`, `instance_type`, `phase` | The resources requested by non-DaemonSet pods bound to nodes\n| `karpenter_provisioner_limit`           | Gauge     | `resource_type`, `provisioner_name`                                                                    | The specified limits on the provisioner\n| `karpenter_provisioner_usage`           | Gauge     | `resource_type`, `provisioner_name`                                                                    | The amount of resources that have been provisioned\n\n## Karpenter Performance Dashboard\n\nThe performance dashboard exists to give developers and contributors more detailed information. To do so it will\ndemonstrate statistics for individual [controllers](https://github.com/aws/karpenter/tree/main/pkg/controllers),\nscheduling, and API usage.\n\nIndividual controller performance will be visualized in two ways: reconcile latency and reconcile rate. Reconcile\nlatency will be visualized as a Grafana line graph which shows the p0, p50, p90, p99, and p100 latency over time.\nSimilarly, reconcile rate, or the number of reconciliations per second, will be graphed over time. Each of these graphs\nwill be filterable by controller. The metrics required to implement these are already instrumented by the\ncontroller-runtime.\n\n| **Name**                                     | **Type**  | **Labels**   | **Description**\n|----------------------------------------------|-----------|--------------|------------------------------------------------------\n| `controller_runtime_reconcile_errors_total`  | Counter   | `controller` | Total number of reconciliation errors per controller\n| `controller_runtime_reconcile_time_seconds`  | Histogram | `controller` | Length of time per reconciliation per controller\n| `controller_runtime_reconcile_total`         | Counter   | `controller` | Total number of reconciliations per controller\n\nScheduling statistics consist of actions not representable by a single controller reconciliation, such as node\ntermination and pod startup. The visualizations will be the same as those for individual controller performance. The\nfollowing metrics will be instrumented to implement these visualizations:\n\n| Name                                                   | Type      | Labels | Description                                        |\n|--------------------------------------------------------|-----------|--------|----------------------------------------------------|\n| `karpenter_nodes_termination_time_seconds`             | Summary   | None   | [Measurement Definitions](#measurement-definitions) | \n| `karpenter_pods_startup_time_seconds`                  | Summary   | None   | [Measurement Definitions](#measurement-definitions) |\n\nAPI statistics will consist of API call latency, call rate, call method, return code, and payload size. These statistics will be\nseparated into Kubernetes API and cloudprovider API statistics. Call latency and call rate will be represented the same\nas those for the individual controllers. Finally, payload size will be a histogram of payload sizes. All of these\nvisualizations can be filtered by call method and return code. The following metrics will be instrumented to implement\nthese visualizations.\n\n| **Name**                                          | **Type** | **Labels**               | **Description**                                                |\n|---------------------------------------------------|----------|--------------------------|----------------------------------------------------------------|\n| `karpenter_kube_api_time_seconds`                 | Summary  | `object`, `verb`, `code` | The duration of a call the API server                          |\n| `karpenter_kube_api_payload_total_bytes`          | Gauge    | `object`, `verb`, `code` | The total payload size transferred to/from the API server      |\n| `karpenter_cloudprovider_api_time_seconds`        | Summary  | `verb`, `code`           | The duration of an API call to a cloudprovider                 |\n| `karpenter_cloudprovider_api_payload_total_bytes` | Gauge    | `verb`, `code`           | The total payload size transferred to/from a cloudprovider API |\n\n## Implementation Considerations\n\n### Histogram vs Summary\n\nIn Prometheus, histograms and summaries often play similar roles. Both are frequently used to keep track of quantiles\n(e.g. p99 latency). Although histograms are simpler to implement and require less computation on the side instrumenting\nthe metrics, they are not without their faults. Histograms track a set of buckets, where each bucket is a counter which\nrepresents the number of occurrences that were less than that buckets value. Since the buckets are a fixed range,\nhistograms are a poor choice for unbounded data. Summaries instead directly track quantiles. This involves more\ncomputation but works better for unbounded data.\n\nPrometheus `Summary` metric types compute running quantiles for a given metric for given label values. Unlike \nhistograms, summaries cannot be aggregated since it can result in statistically non-sensical results. Theoretically,\nsummaries can be tracked for many labels, but we would need a number of summary metrics equal to the size of the \ncartesian product of all the labels, which is not viable.\n\n### Cluster State\n\nThe metrics used by the cluster capacity dashboard will not be populated by continuously polling objects in the cluster,\nbut will instead be based on Karpenter's internal cluster state representation. As objects are updated there, their\ncorresponding metrics will also be updated. By doing this, additional controllers will not be required reducing\ncomputation and network load.\n\n### API Monitoring\n\nAs API calls are made through client APIs, measuring them directly in Karpenter is difficult. Depending on the API,\nthere are solutions. For example, the AWS SDK supports custom HTTP clients. An alternate approach would be to implement\na proxy which Karpenter makes API calls through.\n\n## Appendix\n\n### Prometheus Concepts\n\n#### Metric Types\n\nThe Prometheus API has four metric types: **counters**, **gauges**, **histograms**, and **summaries**. Counters and gauges\nrepresent one value. Counters are monotonically increasing values and gauges have no restrictions. Histograms and\nsummaries are constructed from a series of counters to represent broader information trends.\n\n#### Metrics Model\n\nApplications which export prometheus metrics will expose an http endpoint, typically called `metrics`. This endpoint\ncontains a list of metrics and their **current** values (each application does not store a history of the metric).\nPrometheus then polls those endpoints at fixed intervals, appending the current value of the metrics to a history stored\nby Prometheus. These time-series can then be processed using PromQL in applications such as Grafana.\n\n#### PromQL\n\nPromQL is Prometheus’ integrated query language. It provides functionality such as label filtering with regex and metric\naggregation with keywords such as sum, median, min, and max.\n\n### Grafana Concepts\n\nGrafana integrates with Prometheus, among other sources, to aggregate metrics into visualizations.\n\n#### Visualizations\n\nA Grafana visualization is used to visualize PromQL queries. The following are some widgets that will be used in\nKarpenter's dashboards:\n\n\n| **Visualization**                                                                    | **Description**                                                                               |\n|--------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|\n| [Bar Gauge](https://grafana.com/docs/grafana/latest/visualizations/bar-gauge-panel/) | Shows one or more gauges reducing each field to a single value. Displayed as parallel bars.   |\n| [Candlestick](https://grafana.com/docs/grafana/latest/visualizations/candlestick/)   | A time series of box and whisker plots                                                        |\n| [Gauge](https://grafana.com/docs/grafana/latest/visualizations/gauge-panel/)         | Shows one or more gauges reducing each field to a single value. Displayed as circular gauges. |\n| [Histogram](https://grafana.com/docs/grafana/latest/visualizations/histogram/)       | A bar graph representing the distribution of values                                           |\n| [Table](https://grafana.com/docs/grafana/latest/visualizations/table/)               | A table consisting of rows and columns with various data fields                               |\n| [Time Series](https://grafana.com/docs/grafana/latest/visualizations/time-series/)   | Any visualization which represents the change in data over time (e.g. line graphs)            |\n\nThe following are some sample visualizations:\n\n<p align=\"center\">Percentile Line Graph</p>\n\n![](../website/static/metrics-percentile-graph.png)\n\n<p align=\"center\">Pod Summary</p>\n\n![](../website/static/metrics-pod-summary.png)\n\n<p align=\"center\">Node Utilization Table</p>\n\n![](../website/static/metrics-node-table.png)\n\n#### Dashboards\n\nDashboards consist of a collection of widgets. What makes dashboards powerful is the ability to apply global\nconfiguration across all widgets in a dashboard. Applications of this include selecting the same time window across all\nwidgets and selecting label values.\n\n#### Vending\n\nGrafana dashboards are vended as JSON objects. Currently users can import dashboards from [Grafana's\nwebsite](https://grafana.com/grafana/dashboards/16237) or through the Grafana Helm chart with a [custom values\nfile](https://github.com/aws/karpenter/blob/main/website/content/en/v0.12.0/getting-started/getting-started-with-karpenter/grafana-values.yaml).\n\n### Measurement Definitions\n\n**Pod Startup Latency:** Measures the time in seconds from the pod being created until the pod is ready.\n\n**Node Termination Latency:** Measures the time from an initial node termination request until the node object is\ndeleted. This differs from the termination controller latency since multiple reconciles may be required to terminate the\nnode.\n\n### Master List of Proposed Metrics\n\n| **Name**                                          | **Type**  | **Labels**                                                                                             | **Description**\n|---------------------------------------------------|-----------|--------------------------------------------------------------------------------------------------------|--------------------------------------------------------------\n| `karpenter_nodes_count`                           | Gauge     | `provisioner`, `zone`, `arch`, `capacity_type`, `instance_type`, `phase`                               | The number of nodes provisioned by Karpenter.\n| `karpenter_pods_count`                            | Gauge     | `provisioner`, `zone`, `arch`, `capacity_type`, `instance_type`, `phase`, `node_name`, `schedulable`   | The number of pods scheduled to Karpenter provisioned nodes.\n| `karpenter_nodes_allocatable`                     | Gauge     | `resource_type`, `node_name`, `provisioner`, `zone`, `arch`, `capacity_type`, `instance_type`, `phase` | The resources allocatable by nodes\n| `karpenter_nodes_total_daemon_limits`             | Gauge     | `resource_type`, `node_name`, `provisioner`, `zone`, `arch`, `capacity_type`, `instance_type`, `phase` | The resources specified by DaemonSet pod limits\n| `karpenter_nodes_total_daemon_requests`           | Gauge     | `resource_type`, `node_name`, `provisioner`, `zone`, `arch`, `capacity_type`, `instance_type`, `phase` | The resources requested by DaemonSet pods bound to nodes\n| `karpenter_nodes_total_pod_limits`                | Gauge     | `resource_type`, `node_name`, `provisioner`, `zone`, `arch`, `capacity_type`, `instance_type`, `phase` | The resources specified by non-DaemonSet pod limits\n| `karpenter_nodes_total_pod_requests`              | Gauge     | `resource_type`, `node_name`, `provisioner`, `zone`, `arch`, `capacity_type`, `instance_type`, `phase` | The resources requested by non-DaemonSet pods bound to nodes\n| `karpenter_provisioner_limit`                     | Gauge     | `resource_type`, `provisioner_name`                                                                    | The specified limits on the provisioner\n| `karpenter_provisioner_usage`                     | Gauge     | `resource_type`, `provisioner_name`                                                                    | The amount of resources that have been provisioned\n| `controller_runtime_reconcile_errors_total`       | Counter   | `controller`                                                                                           | Total number of reconciliation errors per controller\n| `controller_runtime_reconcile_time_seconds`       | Histogram | `controller`                                                                                           | Length of time per reconciliation per controller\n| `controller_runtime_reconcile_total`              | Counter   | `controller`                                                                                           | Total number of reconciliations per controller\n| `karpenter_nodes_termination_time_seconds`        | Summary   | None                                                                                                   | [Measurement Definitions](#measurement-definitions)\n| `karpenter_pods_startup_time_seconds`             | Summary   | None                                                                                                   | [Measurement Definitions](#measurement-definitions)\n| `karpenter_kube_api_time_seconds`                 | Summary   | `object`, `verb`, `code`                                                                               | The duration of a call the API server\n| `karpenter_kube_api_payload_total_bytes`          | Gauge     | `object`, `verb`, `code`                                                                               | The total payload size transferred to/from the API server\n| `karpenter_cloudprovider_api_time_seconds`        | Summary   | `verb`, `code`                                                                                         | The duration of an API call to a cloudprovider\n| `karpenter_cloudprovider_api_payload_total_bytes` | Gauge     | `verb`, `code`                                                                                         | The total payload size transferred to/from a cloudprovider API\n\n### Existing Metrics\n\n| **Name**                                                      | **Type**  | **Labels**                                                                                                     | **Description**\n|---------------------------------------------------------------|-----------|----------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------\n| `karpenter_provisioner_limit`                                 | Gauge     | `resourceType`, `provisionerName`                                                                              | The specified limits on the provisioner\n| `karpenter_provisioner_usage`                                 | Gauge     | `resourceType`, `provisionerName`                                                                              | The amount of resources that have been provisioned\n| `karpenter_provisioner_usage_pct`                             | Gauge     | `resourceType`, `provisionerName`                                                                              | The percentage of each resource used based on the resources provisioned and the limits that have been configured\n| `karpenter_nodes_allocatable`                                 | Gauge     | `resource_type`, `node_name`, `provisioner`, `zone`, `arch`, `capacity_type`, `instance_type`, `phase`         | The resources allocatable by nodes\n| `karpenter_nodes_system_overhead`                             | Gauge     | `resource_type`, `node_name`, `provisioner`, `zone`, `arch`, `capacity_type`, `instance_type`, `phase`         | The difference between the node's capacity and allocatable values\n| `karpenter_nodes_total_daemon_limits`                         | Gauge     | `resource_type`, `node_name`, `provisioner`, `zone`, `arch`, `capacity_type`, `instance_type`, `phase`         | The resources specified by DaemonSet pod limits\n| `karpenter_nodes_total_daemon_requests`                       | Gauge     | `resource_type`, `node_name`, `provisioner`, `zone`, `arch`, `capacity_type`, `instance_type`, `phase`         | The resources requested by DaemonSet pods bound to nodes\n| `karpenter_nodes_total_pod_limits`                            | Gauge     | `resource_type`, `node_name`, `provisioner`, `zone`, `arch`, `capacity_type`, `instance_type`, `phase`         | The resources specified by non-DaemonSet pod limits\n| `karpenter_nodes_total_pod_requests`                          | Gauge     | `resource_type`, `node_name`, `provisioner`, `zone`, `arch`, `capacity_type`, `instance_type`, `phase`         | The resources requested by non-DaemonSet pods bound to nodes\n| `karpenter_pods_state`                                        | Gauge     | `name`, `namespace`, `owner`, `node`, `provisioner`, `zone`, `arch`, `capacity_type`, `instance_type`, `phase` | The current state of the pods\n| `karpenter_cloudprovider_duration_seconds`                    | Histogram | `controller`, `method`, `provider`                                                                             | Duration of cloud provider method calls in seconds\n| `karpenter_allocation_controller_scheduling_duration_seconds` | Histogram | `provisioner`                                                                                                  | Duration of the scheduling process in seconds\n| `controller_runtime_active_workers`                           | Gauge     | `controller`                                                                                                   | Number of currently used workers per controller\n| `controller_runtime_max_concurrent_reconciles`                | Gauge     | `controller`                                                                                                   | Maximum number of concurrent reconciles per controller\n| `controller_runtime_reconcile_errors_total`                   | Counter   | `controller`                                                                                                   | Total number of reconciliation errors per controller\n| `controller_runtime_reconcile_time_seconds`                   | Histogram | `controller`                                                                                                   | Length of time per reconciliation per controller\n| `controller_runtime_reconcile_total`                          | Counter   | `controller`                                                                                                   | Total number of reconciliations per controller\n| `workqueue_adds_total`                                        | Counter   | `name`                                                                                                         | Total number of adds handled by workqueue\n| `workqueue_depth`                                             | Gauge     | `name`                                                                                                         | Current depth of workqueue\n| `workqueue_longest_running_processor_seconds`                 | Gauge     | `name`                                                                                                         | How many seconds has the longest running processor for workqueue been running\n| `workqueue_queue_duration_seconds`                            | Histogram | `name`                                                                                                         | How long in seconds an item stays in the workqueue before being requested\n| `workqueue_retries_total`                                     | Counter   | `name`                                                                                                         | Total number of retries handled by workqueue\n| `workqueue_unfinished_work_seconds`                           | Gauge     | `name`                                                                                                         | How many seconds of work has been done that is in progress and hasn't been observed by work_duration.\n| `workqueue_work_duration_seconds`                             | Histogram | `name`                                                                                                         | How long in seconds processing an item from workqueue takes\n"
  },
  {
    "path": "designs/node-ownership.md",
    "content": "# Karpenter Node Ownership\n\n_Provisioning is used throughout this doc to reference Karpenter scheduling and spinning up a node. This can apply to both the pending pod scheduling loop and also the consolidation scheduling loop. Essentially, any scheduling loop where Karpenter launches nodes._\n\n## 🔑  Summary\n\nKarpenter’s current node creation logic causes consistency issues as well as race conditions that lead to leaked instances and reduced node launch performance. With these changes, Karpenter will no longer create nodes, and instead allow the Kubelet and cloud controller managers to register and deregister the Node with the apiserver. As a result, Karpenter needs a new way to model in flight capacity: instances that have been launched, but have not yet been registered as a Node.\n\nThe recommendation is that this in-flight capacity should be modeled as an internal Machine CR that represents a Karpenter provisioner/consolidation scheduling decision. This has the following benefits:\n\n1. Karpenter stops creating the Node object, avoiding race conditions and conflicts with the kube-apiserver and the kubelet that are causing orphaned nodes and instances\n2. Karpenter does not need to know the node name at the end of its provisioning loop, shortening the provisioning loop for clouds that do not know the node name at instance launch time\n3. Karpenter ensures that provisioners own Machines and that this ownership can be reflected at creation time. This ensures that Machines and Nodes aren't unintentionally orphaned when provisioners are deleted.\n5. Karpenter makes its in-flight capacity observable to users through well-known Kubernetes APIs\n\n_Note: This internal Machine CR will come in as an alpha API and an internal design detail and should __not__ be relied upon for any dependent tooling until the API is stable._\n\n## Background\n\nKarpenter currently creates the node object on the Kubernetes api server immediately after creating the VM instance. Kubernetes cloud providers (EKS, AKS, GKE, etc.) assume that, ultimately, the kubelet will be the entity responsible for registering the node to the api-server. This is reflected [through the userData](https://github.com/awslabs/amazon-eks-ami/blob/master/files/bootstrap.sh) where KubeletConfig can be set [that is only properly propagated for all values when the kubelet is the node creator](https://github.com/kubernetes/kubernetes/blob/39c76ba2edeadb84a115cc3fbd9204a2177f1c28/pkg/kubelet/kubelet_node_status.go#L286). However, Karpenter’s current architecture necessitates that it both launches the VM instance and creates the node object on the Kubernetes API server in succession (more on this [below](#why-does-karpenter-createoperate-on-the-node-at-all)).\n\nThis document describes the current node creation flow for Karpenter as well as the rationale for why Karpenter originally created the node object. It then calls out the specific problems with this approach and recommends an alternative approach to creating the Node object that solves for the current approach’s problems.\n\n### Current Instance & Node Creation Flow\n\nKarpenter currently performs the following operations when it detect pending pods and launches capacity to the cluster:\n\n1. Performs a **CreateFleet** request against EC2 APIs which leads to VM Instance Creation\n2. Performs a **Create** against the `/core/v1/node` Kubernetes API\n   1. If there is a conflict in this **Create** call to the Node object, Karpenter assumes that Kubelet already created the node and does not add the Karpenter-managed node labels onto the node\n3. **Reconciles** the Node termination finalizer onto the node as soon as the node watch receives an Add/Update event for the node\n4. **Reconciles** the Provisioner ownerReference onto the node as soon as the node watch receives an Add/Update event for the node\n\n### Why does Karpenter create/operate on the node at all?\n\nKarpenter creates and operates on a node for a few core reasons:\n\n1. The Karpenter provisioner needs to be aware of the in-flight capacity before proceeding to provision additional capacity.\n2. Karpenter controllers need to be able to add a finalizer to a node so that they can handle the cordon, drain, and delete orchestration initiated on a `kubectl node delete` (or similar)\n3. Karpenter controllers need to communicate an owner relationship from the Provisioner → Node such that when a Provisioner is removed from the cluster, all Nodes provisioned on behalf of it will also be removed. In practice, this looks like Karpenter reconciling a Provisioner ownerReference onto the node.\n\n#### What is in-flight capacity?\n\nKarpenter considers in-flight capacity to be VM instances that we have launched but do not yet have a known exact allocatable capacity reported by the kubelet. When Karpenter launches VM instances and creates the node object, it considers that node to be in-flight (with approximated allocatable resources based on the GetInstanceTypes()) call until the kubelet has registered the allocatable resources to that node.\n\n### What if we just stopped creating the node outright?\n\nRemoving node creation outright has two major problems: Provisioner loop synchronization and Node Reconciliation\n\n#### Provisioner Loop Synchronization\n\nWithout in-flight capacity modeling and approximations, Karpenter would have to wait for all instances that it launched to be registered and to report their allocatable capacity before continuing on to the next round of provisioning for pending pods. In practicality, this process of waiting is far too slow (40s+) and requires synchronization between the Karpenter provisioning loop and the node registration.\n\nWe can get around waiting and get closer to a better solution here by modeling in-flight capacity in some way (e.g. storing nodes in memory, storing nodes on the cluster, etc.)\n\n#### Node Reconciliation\n\nKarpenter’s ownership model necessitates that it own the VM instances that it launches. We do not want to orphan instances that we launch as the user expects that there should be an easy deletion mechanism for deleting nodes that Karpenter launches (i.e. deleting the Provisioner deletes all VM instances associated with it or deleting a node deletes the VM instance associated with the node).\n\nWithout creating the node, we are fully contingent on node object reconciliation to add ownership references and termination finalizers. This is a precarious position to be in since it creates a host of other race conditions that can happen in between the time when Karpenter launches the instance and when the node is created at the api-server. As some examples:\n\n1. What happens if Karpenter controller is deleted in the middle of instance launch but before node creation?\n   1. Answer: the VM instance and node are orphaned\n2. What happens if Karpenter Provisioner is removed in the middle of instance launch but before node creation?\n   1. Answer: the VM instance and node are orphaned\n\n## Current Node Creation Problems\n\nThis section describes the primary issues that have arisen from users and from maintainer testing due to Karpenter creating the node object after launching the VM instance in the provisioning loop.\n\n### Synchronization\n\nNode objects currently capture the in-flight details for Karpenter’s scheduler to use (node name, allocatable resources and capacity resources for nodes). As a result, the node object *must* be created by the end of the provisioning loop before provisioning can continue. This means that there has to be some wait mechanism implemented at the end of the provisioning loop to continue to poll until these inflight details can be resolved. As a result, Karpenter is either dependent on the speed and consistency of the backing cloudprovider API or has to wait for the kubelet to register the node itself. Either result in slower provisioning times.\n\nOn top of the performance concerns of this, there is no guarantee that attempting to resolve these details after instance launch will succeed (crash, API failure, etc.), meaning that this capacity would be unknown to Karpenter for a short time, resulting in over-provisioning nodes for the required capacity.\n\n### Race Conditions\n\n#### Instance Orphaning Due to Node Creation Conflict\n\nWhile Karpenter performs creation at the end of the provisioning loop, it is possible for the node to already exist at the Kubernetes api-server for an instance. In the unhappy path, if Karpenter is particularly slow, it is possible for the kubelet to register the Node prior to Karpenter (i.e. we have a large scale-up and the kubelet registers the node before all VM instances resolve their IPs). In this case, [Karpenter receives a conflict error](https://github.com/aws/karpenter-core/blob/842731178a3b732b8ef63f20f7ebc243f00d85fa/pkg/controllers/provisioning/provisioner.go#L352) from the api-server and assumes that the node was already registered by the kubelet for this VM instance.\n\nThis becomes a problem specifically when the node object we receive a conflict for doesn’t actually represent the same node/instance registered by the kubelet. As an example, users have observed behavior where the VM instance is deleted in the background, without Karpenter’s knowledge, meaning that the node object for that instance still exists on the api-server. The node begins to report as unhealthy, pods are evicted and Karpenter launches additional capacity for the pods.\n\nSince Karpenter performs naming for nodes based on host naming (this is also the current default for EKS and can only be switched starting in [K8s v1.23](https://github.com/aws/containers-roadmap/issues/1723). Karpenter attempts to create the node for this instance; however, because the node will still exist for the old VM instance with the same node name, we will not perform node creation for this node, assuming that the kubelet has already registered it.\n\n**This is wrong, since it means that the node provider ID will map to the old instance and the termination finalizer logic will no longer handle deletion of the instance that Karpenter provisioned.**\n\nThis issue is primarily caused by a few issues:\n\n1. cloud-controller-manager that is responsible for cleaning up nodes that no longer have instances tied to it does not have a quick enough reconciliation loop to cleanup the node before Karpenter provisions the new capacity. *NOTE: In general, we shouldn’t rely on this timing anyways since Kubernetes is eventually consistent.*\n2. The subnet is highly constrained leading to IP hostname naming conflicts with the node\n3. EKS nodes rely on hostnaming, which ultimately causes this conflict. This problem could theoretically be circumvented by using [resource name-based naming](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-naming.html) that would ensure each node has a unique name, regardless of IP.\n\nUltimately, we can circumvent all of these issues if we avoid creating the node and allow the kubelet to fail to register with a conflict for new nodes until the cloud-controller-manager has time to cleanup the node object for the instance.\n\n***Relevant GH Issues***\n\n1. [Karpenter leaves orphaned ec2 instances](https://github.com/aws/karpenter/issues/2734)\n2. [Deregistered Node Not Terminated](https://github.com/aws/karpenter/issues/2832)\n\n#### Provisioner Ownership Not Added\n\nKarpenter’s ownership model currently implies that node objects (“own”) their VM instance through the termination finalizer as well as that the Provisioner own all nodes that it creates through a Kubernetes [ownerReference](https://kubernetes.io/docs/concepts/overview/working-with-objects/owners-dependents/#ownership-and-finalizers). Karpenter reconciles these ownerReferences onto the nodes by watching for the Add event on nodes and creating the ownerReference on the node based on the `karpenter.sh/provsioner-name` label on the node. **Importantly, ownerReferences cannot be added to objects when their owner is gone.**\n\nKarpenter grabs all Provisioners on the cluster at the beginning of its provisioning loop and reconciles the ownerReference onto the node after node creation. Suppose that in the middle of a provisioning loop for some pending pods we launch some set of nodes based on **Provisioner A.** If, in the middle of this provisioning loop, **Provisioner A** is deleted, the nodes will still be created and the VM instances will still be launched; **however, the reconciliation of the ownerReference will fail**. This is because the owning Provisioner has been deleted. In this case, the nodes launched during this provisioning loop and the associated VMinstances are orphaned.\n\n***Relevant GH Issues***\n\n1. [Deleting provisioner while draining a node orphans the node](https://github.com/aws/karpenter/issues/2831)\n\n#### Image Filesystem Reporting Insufficient Capacity\n\nNodes that are launched by Karpenter report no capacity on their image filesystems. This is observed for nodes starting in Kubernetes 1.23. Because Karpenter creates the node without reporting any details on the node capacity, control-planes staring in 1.23 are reporting NotReady and unhealthy events for the node around the image filesystem not having any capacity.\n\nThis error lasts until the kubelet begins reporting its ephemeral-stoarge, at which point this event is never re-fired and the node eventually goes into a Ready state. If Karpenter does not create these nodes and, instead, allows the kubelet to create them, the image filesystem capacity will be reported as soon as the node starts and no false error events will be reported on user’s clusters.\n\n***Relevant GH Issues***\n\n1. [Node provisioning invalid capacity 0 on image filesystem](https://github.com/aws/karpenter/issues/2385)\n\n### Ownership Conflicts with Kubelet\n\nEKS clusters [register themselves](https://github.com/awslabs/amazon-eks-ami/blob/master/files/bootstrap.sh#L321) to the kube-apiserver and the EKS control plane using the [kubelet —kubeconfig option](https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet/#options). In general, cloud providers have the VM register itself to the control-plane in an asynchronous, distributed manner so that the kubelet itself is responsible for providing all the information necessary for the node to be created, including any labels or taints the node might have at startup.\n\nWhen some other third-party is responsible for registering the node, kubelet only [performs updates on a fixed set of labels](https://github.com/kubernetes/kubernetes/blob/39c76ba2edeadb84a115cc3fbd9204a2177f1c28/pkg/kubelet/kubelet_node_status.go#L215), but does not update other labels which the user might have specified through KubeletConfig. For AWS, this prevents users who want to set dynamic labels through their userData from doing so.\n\n***Relevant GH Issues***\n\n1. [Karpenter ignores extra labels coming from kubelet-extra-args in launchtemplate](https://github.com/aws/karpenter/issues/1681)\n\n## Solutions\n\nUltimately, the issues listed above involving node creation aren’t exclusive to just creation of the node. The Node is a fundamental component that every Kubernetes user takes some dependency on. As such, it’s reasonable to assume that users have written logic for scheduling/health checks on their nodes that have direct dependency on how a node looks and acts. Fundamentally, it’s a dangerous proposition to mutate the node object in ways that a standard Kubernetes user wouldn’t expect.\n\nAs a result, all solutions that solve the node creation problem should:\n\n1. Do not create the Node object in the cluster, allow the kubelet to register the Node, and store scheduling decision state in some other persistent store\n2. Capture in-flight capacity in a way so that we can quickly complete Karpenter’s provisioning loops and continue to start the next round of provisioning while having a consistent view of cluster state\n3. Have little to no impact on cluster performance, including memory usage in etcd and query performance on the kube-apiserver.\n\nFundamentally, if we do not capture in-flight capacity in the Node object, we need some other place to capture capacity so that we can fulfill #1 listed above. This necessitates some kind of “store” to keep in-flight node data, whether this is an in-memory store or the Kubernetes api-server (etcd) store. The two options presented below highlight both options, including their tradeoffs related to the fundamentals mentioned above.\n\n### Kubernetes CRD Object Store (Machine CRD)\n\nKarpenter will no longer create node objects or launch instances as part of the provisioning loop, but, instead, will create Machine CRs at the completion of the provisioning loop. This machine CR will then be picked up by a separate controller that will launch capacity based on the requirements passed from the provisioning loop and will resolve the static values from the **CreateFleet** response into its status. After the instance is launched, the kubelet starts, and the node joins the cluster, machines will be mapped to nodes using the `spec.providerID` of the Node and the `status.providerID` of the Machine.\n\n#### Ownership Model\n\n![Node Ownership Model](./images/node_ownership_ownership_model.png)\n\n#### Impact\n\n1. Introduction of the Machine CR as a representation of a “scheduling decision” to launch by the CloudProvider\n2. Migration of the Node termination finalizer to Machine to orchestrate the cordoning, draining, and deletion\n   1. Note: Node termination finalizer (`karpenter.sh/termination`) would still exist on the Node for compatability support. This finalizer would check for the presence of a Machine and then perform Machine deletion if the Machine existed (triggering cordon, drain, termination flow as before).\n3. Liveness checks for Nodes that don’t register or become ready after a certain TTL to delete the backing Machine\n4. In-flight representations of Nodes for scheduling become the Machine `.metadata.labels` and `.status.allocatable` until the Node registers and initializes its `.status.allocatable`\n5. Mirroring Machine labels, taints, and annotations onto Nodes through a reconciliation mechanism after Node join\n\n### In-Memory Node Store\n\nAn alternative to storing persistent data on the Kubernetes API server is to utilize the cloud provider’s instance data from a **ListMachines** call and utilize the instance data that is stored in cloud provider’s instance store to understand our in-flight capacity. This remote store means we no longer need to create the node for inflight capacity, but we still need to operate on the node object for details like ownership and node termination/provisioner ownership.\n\n#### Impact\n\n1. In-memory cluster state will now track the node exclusively in in-memory cluster state and model this node as an in-flight node until the real representation of the node is registered on the api-server by the instance\n2. Adding ListMachines() to the CloudProvider interface to re-populate the Karpenter-owned instances onto the API-server when starting up Karpenter, similar to the List/Watch mechanism used by Kubernetes APIs\n3. Karpenter continues to operate on the Node object, including applying labels/annotations, status conditions, and finalizers to the Node\n4. Required Garbage Collection of any in-flight nodes that no longer have any backing instance\n5. Liveness checks for Nodes that don’t register or become ready after a certain time to delete the backing instance\n6. Scheduling decisions (including labels, annotations, and taints) would either have to be kept exclusively in userData (userData has no support for annotations at this point so this doesn't work for this case) or all labels, taints, and annotations that need to be applied to the node would need to be stored in cloud provider tags\n   1. Note: Many cloud providers have limits on the number of tags or extra data that you can apply to an instance so this quickly becomes infeasible in many situations\n\n## Considerations\n\n### **Persistent Scheduling Decision State**\n\nIn both the Machine CRD and the In-Memory case, we will continue to use the Node as our primary data model for scheduling simulation and deprovisioning. In the case of deprovisioning mechanisms (drift, expiration, emptiness), annotations or status conditions will be used on the Node to represent that the Node is a candidate for deprovisioning.\n\n#### Machine CRD\n\nThe Machine CRD will store its scheduling decisions (including labels, annotations, and taints/startupTaints) that need to appear on the Node until the Node registers. When the Node registers, the Machine will reconcile this state onto the Node on registration but make no further modifications to the Node. Since all of Karpenter's scheduling state is now represented outside the cloudprovider instance startup scripts (i.e. userData), the user is free to edit these scripts how they choose and Karpenter is guaranteed to reconcile the appropriate scheduling state (taints, label, annotations) onto the node when it registers.\n\n#### In-Memory\n\nKeeping details of in-flight nodes in-memory implies that we need some other persistent store to handle scheduling decisions that have been made so that when a node comes up, it has the correct labels, annotations, and taints. There are two options that we can use to represent this scheduling decision state:\n\n#### *CloudProvider Startup Scripts passed directly to the kubelet arguments*\n\nOne option for representing scheduling decision state is to pass scheduling decision data to a cloudprovider startup script (userData in AWS). Data from a scheduling decision (labels, annotations, and taints) would be passed through the startup script into kubelet arguments (`--node-labels`, `--register-with-taints`).\n\nThe downside of this solution is that there is no support for annotations in this model, so we would still need some reconciliation mechanism to support annotations or we would have to remove support for them outright. Additionally, a user specifying custom startup script data now becomes difficult to reason about since we will have to own at least a portion of the startup script data and perform some merge mechanism on it to ensure that the correct kubelet arguments are stored in the data.\n\n#### *CloudProvider Instance Tagging*\n\nAlternatively, we can store all scheduling decision state inside some cloudprovider store associated with the instance (such as tagging on the instance in EC2). In the case of tagging in AWS, we could store scheduling data with labels being denoted with the key `karpenter.sh/label/<label-name>`, annotations denoted with the key `karpenter.sh/annotation/<annotation-name>` and taints denoted with the key `karpenter.sh/taint/<taint-key>`.\n\nIf Karpenter ever crashed after launching an instance and making a scheduling decision, on restart, it would go to grab the instance from the cloudprovider, get the tagging details from the instance and hydrate those tagging details into the inflight instance that could be reconciled onto the Node when it registers.\n\nThe downside of this solution is that cloudproviders often impose limits on custom user tagging so this tagging mechanism is quite brittle. i.e. In the case of EC2, [tagging limits are set at 50 tags](https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html), which would limit scheduling decisions to at most 50 (not including user-defined tags that aren't managed by Karpenter but a user wants on their instances for details on cost center, billing, etc.) In reality, these limits make this type of solution infeasible for Karpenter to base its inflight node scheduling decisions on.\n\n### Observability\n\n#### Machine CRD\n\nThe Machine CRD is a CR that represents a scheduling decision from the provisioner. As such, as soon as the scheduling loop is done and decisions are made, Machines are provisioned on the cluster. This means that users have visibility into in-flight nodes and scheduling decisions made by the scheduler at all times by looking at the Machines on the cluster.\n\n#### In-Memory\n\nThere is no visibility into in-flight nodes. Users would not be aware of nodes that Karpenter chose to launch beyond the scheduling decisions that are marked on the pods through events and through Karpenter logs. this lack of visibility would extend until the Node was registered by the kubelet on the instance with the api-server. For AWS, this period is somewhere around 30-40s at present.\n\n### Performance\n\n#### Machine CRD\n\nNotably, adding a representation of a Node into the kube-apiserver will both add more QPS load on the kube-apiserver as well as more storage usage through etcd. Calculating for both of these considerations, we can see that the impact on performance for the kube-apiserver and etcd, given the addition of a Machine CR should be negligible.\n\n***kube-apiserver QPS***\n\nImpact to kube-apiserver should be minimal. We assume that for every scheduling decision that we make, we have one Create event for the Machine. Further, when the Node that backs the Machine becomes fully initialized, we will update the Machine again to mark it as initialized. So, at most, for the Node provisioning flow, we are performing 2 write operations/per created node.\n\nCurrently, we are performing a Write operation to the node when we first create the Node as well as reconciling: an ownerReference onto the node, a finalizer onto the node, and initialization label onto the Node in separate reconcile loops. Each of these contributes to separate Writes on the Node object which equate to the same amount of writes that we would perform on the Machine.\n\nThus, the impact on the kube-apiserver QPS writes should be equivalent or less than the number of writes that are performed on the kube-apiserver by Karpenter currently.\n\n***Etcd Storage***\n\nConservatively, we assume that the new Machine CR will take up approximately 3KB of storage per Machine CR (this is due to the label requirements that will be added to the Machine as well as any other details that represent the \"scheduling decision\"). For a cluster that is running 10,000 nodes, this puts the memory usage for the Machine CRs at around 30MB. Comparatively, an estimate for a node’s storage usage is at around 15KB, putting its total memory usage on the cluster at around 150MB. Reasonably, for an [8GB etcd](https://aws.github.io/aws-eks-best-practices/reliability/docs/controlplane/), this 30MB of storage usage is not going to be significant and should be considered a negligble impact for consideration.\n\n#### In-Memory\n\nThe changes to the in-memory node tracking should have a negligible impact on the Kubernetes control-plane, since all calculations and “writes” are performed in-memory.\n\n### 🔑  Recommendation\n\nThe recommendation is migrating all scheduling decision state and the inflight node representation to the Machine CR. Node creation and Node termination will be driven through the Machine CR with a Node termination finalizer remaining on the Node for compatability.\n\n## Related Projects/Documentation\n\n1. CAPI (Cluster API) MachinePools: https://cluster-api.sigs.k8s.io/tasks/experimental-features/machine-pools.html\n2. CAPA (Cluster API for AWS) Machines: https://github.com/kubernetes-sigs/cluster-api-provider-aws/blob/main/api/v1beta2/awsmachine_types.go\n\n"
  },
  {
    "path": "designs/node-upgrades.md",
    "content": "# Karpenter Node Upgrades - AMI Upgrades\n\n## Overview\n\nKarpenter users are requesting for Node Upgrades, generally asking for [more complex node control](https://github.com/aws/karpenter-provider-aws/issues/1738) (91 up-votes and counting). While early versions of Karpenter meant for Provisioners to dictate node provisioning requirements and simple termination methods, Provisioners are becoming more semantically aligned with Node Groups. This is seen with [Provisioners owning nodes](https://github.com/aws/karpenter/pull/1934) and [Consolidation](https://github.com/aws/karpenter/pull/2123), where Karpenter controls the cluster in more ways than provisioning nodes for pending pods. To further align the Provisioner to represent a desired state of both new and existing nodes, Karpenter will implement [Node AMI Upgrades](https://github.com/aws/karpenter/issues/1716) by detecting and remediating drifted nodes.\n\nFor the initial implementation, Karpenter's drift will reconcile when a node's AMI drifts from provisioning requirements. This mechanism will be scalable to other methods of drift reconciliation in the future. Addtionally, Karpenter can implement Imperative Upgrades or Maintenance Windows in the future.\n\nThis document will answer the following questions:\n\n* How will Karpenter upgrade nodes?\n* Which nodes should Karpenter upgrade?\n* What can interfere with upgrades?\n\n## User Stories\n\n* Karpenter will be able to automatically upgrade node AMIs to match their provisioning requirements.\n* Karpenter will be able to enable other providers to implement their own drift mechanisms.\n\n### Background - What is node drift?\n\nA drifted node is one whose spec and metadata does not match the spec of its Provisioner and ProviderRef. A node can drift when a user changes their Provisioner or ProviderRef. For example, if a user changes their architecture requirements to only `amd64` from `arm64`, any existing `arm64` nodes will drift. In another example, if a user changes the tags in the AWSNodeTemplate, their nodes will drift due to mis-matching tags. These are both actions done within the cluster.\n\nYet, a node can drift without modifying the Provisioner or ProviderRef. Underlying infrastructure in the Provider can be changed outside of the cluster. For example, using defaults in the `AWSNodeTemplate` `AMISelector` allows the AMI to change when a new AL2 EKS Optimized AMI is released, creating drifted nodes. Additionally, the same can happen if a user changes the tags on their AMIs and uses arbitrary tags in the `AWSNodeTemplate`.\n\n## How will Karpenter upgrade nodes?\n\nWhen upgrading a node, Karpenter will minimize the downtime of the applications on the node by initating provisioning logic for a replacement node before terminating drifted nodes. Once Karpenter has begun provisioning the replacement node, Karpenter will cordon and drain the old node, terminating it when it’s fully drained, then finishing the upgrade.\n\nKarpenter's currently does not have a dedicated controller for drift. With no rate-limiting, this means using the termination controller to scale down and the provisioning controller to scale back up. Since the termination controller asynchronously scales down the cluster as quick as possible, rate-limiting only happens at the pod level with user-controls. In creating a dedicated controller to orchestrate the logic, Karpenter can begin to rate-limit at the node level. Rate-limiting can be done serially and in parallel.\n\n### Option 1 - Upgrade Serially\n\nKarpenter will only upgrade one node at a time. Each node's upgrade will be complete when its replacement is ready and the old node is terminated. This naturally rate-limits node upgrades to node initialization and pod-rescheduling time and means that users will only have to worry about one node disruption at a time with upgrades.\n\nWith serial upgrades, new nodes that cannot become ready or old nodes that cannot fully drain can stop the upgrade process altogether. While Karpenter will not upgrade nodes with blocking PDBs or `do-not-evict` pods, provisioning a new node can fail for many reasons. For one, if the new AMI is incompatible with the cluster's applications, Karpenter should not upgrade more nodes as more upgrades to that AMI would likely fail. On the other hand, sometimes a newly provisioned node can succeed in other cases like with an [Outdated CNI](https://karpenter.sh/v0.16.3/troubleshooting/#nodes-stuck-in-pending-and-not-running-the-kubelet-due-to-outdated-cni) - where using a newer instance type could fail where an older instance type would succeed.\n\nIn order to not permanently block serial upgrades, upgrades will have timeout. Relying on Kubernetes native concepts, Karpenter will compute a drain timeout that respects the `GracefulTerminationPeriodSeconds` on the pods on the nodes by summing all remaining `GracefulTerminationPeriodSeconds` fields. This accounts for the worst case where Karpenter can only evict one pod at a time, taking as long as possible. If Karpenter fails to create a replacement node, Karpenter can terminate the unitialized upgraded node, where rolling back is already complete.\n\n### Option 2 - Upgrade in Parallel\n\nFor some use cases, upgrading serially may be too slow. To combat this, Karpenter can upgrade in parallel, allowing more than one node to upgrade at a time. In contrast to upgrading serially, upgrading in parallel requires opinionated hyper-parameters or allowing an API for users to configure them.\n\n#### Option 2a - In parallel with controls\n\nStarting with an API, Karpenter could implement a Node Disruption Budget. Similar to PDBs, NDBs rate-limit the termination process of nodes, gating termination requests from the controller or users. Similar to a restrictive PDB, a restrictive NDB can be used to stop termination altogether. Upgrading serially and using a NDB with maxUnavailable to 1 are equivalent.\n\n```\napiVersion: karpenter.sh/v1alpha1\nkind: NodeDisruptionBudget\nmetadata:\n  name: default\nspec:\n  # Merged labelSelectors for multiple provisioners\n  labelSelectors:\n    - karpenter.sh/provisioner-name: default\n    - karpenter.sh/provisioner-name: app-name\n  # Following two are mutually exclusive:\n  minAvailable: 10% # intOrString\n  maxUnavailable: 30 # intOrString\n```\n\nNode Disruption Budgets are conceptually extensible from PDBs. Users who already use PDBs will be able to easily reason with the concept. While conceptually similar, pods tend to have more homogenous resource requirements and usually work with ReplicationControllers to ensure a number of replicas. Instead, nodes are stand-alone objects and can have very heterogenous resource requirements. In fact, NDBs can act very differently depending on the distribution of node sizes. Check [NDB Examples](./node-upgrades.md#node-disruption-budget-examples) for more.\n\n#### Option 2b - In parallel with hard-coded hyper parameters and surface controls later\n\nWhile these defaults may make sense for some use-cases, it ultimately is tough to get right for others. This section could be a first step before implementing Node Disruption Budgets.\n\nKarpenter can upgrade nodes in parallel with a series of hard-coded defaults. Many of the proposed defaults are similar to [Cluster Autoscaler's](https://github.com/kubernetes/autoscaler/blob/master/cluster-autoscaler/FAQ.md#what-are-the-parameters-to-ca). Karpenter also uses [defaulted tunables in Consolidation](./consolidation.md#internal-tunables). For parllel upgrades, Karpenter proposes the following:\n\n* Polling Period - This is how often a node will scan the cluster for nodes that need upgrading. Karpenter can simply add the `AMI-ID` at provisioning time, where Karpenter falls back to an EC2 API call. The drift controller will poll drifted nodes every second, as this becomes very inexpensive.\n* Cooldown Period - How long Karpenter waits to upgrade instances after upgrading a batch. This may not be necessary as Karpenter will pre-spin nodes.\n    * This is similar to `scale-down-delay-after-add`, `scale-down-delay-after-delete`, and `scale-down-unneeded-time` in Cluster Autoscaler.\n* Minimum Node Lifetime - The minimum age a node must be before it is considered for upgrading. If a node is created and then a new AMI is released, it may be favorable to wait a bit before upgrading it as to not introduce unwanted churn. This can be mitigated with the following section, where upgrade ordering is discussed.\n* Max Upgrade Batch - How many nodes will be upgraded at a time. This will default to 5%. For a 1000 node cluster, 50 nodes could upgrade at the same time. For a cluster with 20 or less nodes, this will be 1, equivalent to upgrading serially.\n\n### Choice Recommendation\n\n*Upgrade serially*. If Karpenter upgrades in parallel and uses an API such as NDB, users will need to use NDBs to safely onboard to automatic updates. Newer users may find this too complicated and disable automatic upgrades altogether. If Karpenter hard-codes defaults into the process, some cases may end up working poorly for existing users.\n\nUpgrading serially requires no additional API or hard-coded hyper-parameters. It creates simple requirements on upgrades, and solves some of the existing problems of jitter (https://github.com/aws/karpenter-provider-aws/issues/1884), more granular expiration conditions (https://github.com/aws/karpenter/issues/903), and rate-limiting (https://github.com/aws/karpenter/issues/1018). Upgrading serially is additionally extendable to various forms of the parallel upgrades as called out in each of the sections. Should users want quicker upgrades in the future, Karpenter has a path forward to implementing parallel upgrades.\n\n## What can interfere with upgrades?\n\n### Provisioning Constraints\n\nDue to the fact that Karpenter will pre-spin nodes, it’s possible that upgrades will fail due to strict or incorrect provisioning constraints. In these cases, Karpenter will log the failures and try again later.\n\n#### Provisioner Limits or Other Limits\n\nUsers can specify resource limits on their Provisioner as a resource ceiling. If a replacement node cannot be created due to tight provisioner limits, the upgrade will fail. As this is set by the user, Karpenter will not modify the limits. Karpenter's best practices here are to leave some room on the Provisioner limits for nodes to upgrade.\n\nAdditionally, a user could fail to provision a node due to IP exhaustion or service quota limits. Since Karpenter will be upgrading serially, a user can be throttled if their usage is very close to their limits. Since Karpenter cannot change any limits outside of the cluster, Karpenter's best practice is to use resource limits that represent these \"out-of-cluster\" limits as best as possible.\n\n#### Unavailable Offerings (ICE)\n\nKarpenter caches offerings that maintain key information about recent API calls to EC2 about available instances. Offerings contain information about price, capacity type, and availability zone. To maximize the chance that all pods are able to reschedule, Karpenter will execute the provisioning logic to match the scheduling constraints and the resource requirements of the pods on the drifted nodes and all existing pending pods. If a user’s provisioner has restrictive instance requirements, Karpenter's scheduler may be unable to provision a node due to underlying instance availability. If Karpenter is unable to provision capacity due to an Insufficient Capacity Exception (ICE), Karpenter will try this node again later.\n\n#### Invalid Constraints\n\nIn the event that a user changes the `AMISelector` or underlying AMI and Karpenter cannot discover an AMI, Karpenter will not attempt to upgrade the node, as the upgrade will fail.\n\n### Concurrent Termination\n\nKarpenter’s termination is triggered by either the user or the controllers, specifically Consolidation, Emptiness, and Expiration. The termination controller executes the cordon and drain logic for each node that is requested to terminate, signaled by the finalizer that is present on all nodes.\n\nIn the case where Consolidation is disabled and Emptiness is enabled (they are mutually exclusive), emptiness does not create a replacement node. Expiration is also taken into account as a heuristic by Consolidation.\n\n#### Karpenter Controllers - Deprovisioning\n\nConsolidation currently implements node deletion and node replacement. It deletes a node if it finds that all pods on the node can fit on other existing nodes. It replaces a node if the pods on the node can be replaced with a cheaper node and the rest of the cluster. Boiled down, consolidation takes actions on the cluster prioritizing nodes that are closest to expiring and easiest to fully drain. More details [here](./consolidation.md#selecting-nodes-for-consolidation).\n\nIf consolidation and upgrades are executed concurrently, pods that are rescheduling due to consolidation could schedule onto the drifted node's replacement. Pods being drained as part of the upgrade could fail to schedule, requiring another to be provisioned, or failing rescheduling altogether. More detailed examples [here](./node-upgrades#scheduling-mishaps-with-consolidation). To handle this, Karpenter will merge consolidation, node drift, node expiration, and node emptiness into a `Deprovisioning` controller. Merging this logic allows Karpenter to be aware of all controller scale-down logic and orchestrate it together to minimize inefficient logic. Check [deprovisioning.md](./deprovisioning.md) for more.\n\n#### The User\n\nTaking advantage of finalizers present on all nodes, a user can decide to terminate their nodes at any time with `kubectl delete node`. If there are pods scheduled to these nodes, Karpenter will provision a replacement node if they cannot schedule elsewhere. If a user wants to upgrade a node, they can simply delete it. If upgrading serially, this means multiple nodes could be scaling down at once. If upgrading in parallel, this would plug into the existing controls. In either case, Karpenter will rely on the user to manually intervene with any failed scheduling actions, as they have already manually intervened.\n\n#### Kubernetes Concepts\n\nPDBs, the `do-not-evict` pod annotation, and other finalizers are ways that users in Kubernetes can slow down upgrades. With restrictive enough PDBs, upgrades may fail by exceeding their timeout period, where the node could take to long to fully drain. In addition, if the user uses finalizers and does not clean them up, the old node may never terminate. For this reason, the node could be fully upgraded but keep around old capacity. Since this may or may not block upgrades, Karpenter will incorporate this logic into the following section on prioritizations.\n\n## Which nodes should Karpenter upgrade?\n\nWhen provisioning a node, Karpenter generates a launch template and fills it with an AMI selected by the `AWSNodeTemplate` `AMISelector`. As hinted above, drifted nodes with AMIs not matching the `AWSNodeTemplate` `AMISelector` will be upgraded.\n\nKarpenter will not upgrade drifted nodes that have the `do-not-evict: true` annotation, [misconfigured PDBs, or blocking PDBs](https://kubernetes.io/docs/concepts/scheduling-eviction/api-eviction/#how-api-initiated-eviction-works). Karpenter's deprovisioning controller will respect this as well.\n\nOn top of this, Karpenter’s current AMI selection picks a random AMI out of a list of allowed AMIs. Karpenter will use latest AMI out of the discovered list of AMIs. If users need a method of not having the latest EKS Optimized AMI, Karpenter can implement native AMI Versioning controls in the future.\n\n## Appendix\n\n### Node Disruption Budget Examples\n\nNDBs can work in very different ways depending on the sizes of the nodes in the cluster.\n\n#### Homogenous Nodes\n\nTake a cluster with 10 nodes, all m5.xlarge, using one Provisioner default that only allows m5.xlarge instances to be provisioned. Let’s say each m5.xlarge has 3 allocatable vCPU and 14 allocatable GiB. We use the following NDB.\n\napiVersion: karpenter.sh/v1alpha1\nkind: NodeDisruptionBudget\nmetadata:\n  name: default\nspec:\n  labelSelectors:\n    - karpenter.sh/provisioner-name: default\n  minAvailable: 70% # all but 3 nodes will be upgrading at a time.\n\nIf we change the amiSelector to a new AMI and upgrade in parallel, we would first upgrade 3 nodes at a time, retaining an uptime of 70%. No matter which nodes we pick, the same amount of vCPU and GiB used in applications will be disrupted.\n\n#### Heterogenous Nodes\n\nTake a cluster with 4 nodes, with sizes m5.large, m5.2xlarge, m5.8xlarge, and m5.16xlarge.  Let’s say each instance has 1vCPU and 1GiB of overhead. Let’s also assume that all nodes are fully utilized by one deployment, meaning all pods on the instances share the same resource requirements. Use the following NDB.\n\napiVersion: karpenter.sh/v1alpha1\nkind: NodeDisruptionBudget\nmetadata:\n  name: default\nspec:\n  labelSelectors:\n    - karpenter.sh/provisioner-name: default\n  maxUnavailable: 2 # only 2 nodes will be upgrading at a time.\n\nKnowing that the allocatable resources of each of these vary by about a factor of 4 (m5.2xlarge is 1/4 the size of m5.8xlarge), upgrading the nodes by changing the amiSelector can vary how much disruption is created on the cluster. If we upgrade the 2 largest nodes, since these are the largest, there will be a proportionally higher amount of pods moving than any other two nodes. If we upgrade the 2 smallest nodes, a proportionally much smaller amount of pods will be disrupted.\n\nDoing the math, where x is the CPU requested by one of the pods, x + 4x + 16x + 64x, we can see that upgrading the two largest nodes will be 80x where the smallest two nodes will be 5x.  This means that depending on the order in this case, a user with this NDB could have 80/85 = 94% or even 5/80=6% of their cluster upgrading at one point, which is wildly erratic behavior.\n\n### Upgrade Interactions\n\n#### Scheduling Mishaps with Consolidation\n\nConsolidation is terminating node A of instance type m5.2xlarge, and replacing the node with a smaller A' of instance type m5.xlarge. Upgrade is upgrading node B to B’. Pods on A have pod anti-affinity with pods on B.\n\nSay that B' becomes ready before A' and pods from A schedule before any pods from B do. Due to the anti-affinity, the B pods cannot schedule, and the Provisioning controller must create a C node where the size is determined by the rate at which nodes are drained from the B node and the batching window used for provisioning. This could result in the following cases:\n\n* If the pods on B cannot fit on A'\n    * If limits allow a node C, we end up with three nodes, A', B', and C.\n        * This could be more costly than the original, which is not what we want.\n        * Introduces unnecessary churn to the pods upgrading, vastly slowing down the upgrade process.\n    * If limits do not allow a node C, Karpenter will be unable to schedule capacity for the upgraded pods, resulting in manual intervention and an undefined amount of downtime.\n* If the pods on B can fit on A', this means that consolidation is successful, but applications that needed an upgraded AMI may still be on the outdated AMI. This case has little harm on the cluster, but relies on a smaller subset of conditions on an already smaller subset of conditions created in this situation.\n"
  },
  {
    "path": "designs/odcr.md",
    "content": "# On-Demand Capacity Reservations\n\nThis document proposes supporting ODCR in Karpenter\n\n- [On-Demand Capacity Reservations](#on-demand-capacity-reservations)\n    * [Overview](#overview)\n        + [Capacity Reservations](#capacity-reservations)\n    * [Goals](#goals)\n    * [Non-Goals](#non-goals)\n    * [Capacity Reservation Selection](#capacity-reservation-selection)\n        + [EC2NodeClass API](#ec2nodeclass-api)\n        + [NodePool API](#nodepool-api)\n            - [Only launch ODCR instances](#only-launch-odcr-instances)\n            - [Launch ODCR instances with on-demand fallback](#launch-odcr-instances-with-on-demand-fallback)\n            - [Launch ODCR instances with spot and on-demand fallback](#launch-odcr-instances-with-spot-and-on-demand-fallback)\n    * [Scheduling Representation](#scheduling-representation)\n        + [Consider ODCR first during Scheduling](#consider-odcr-first-during-scheduling)\n        + [Adding ODCRs as Additional Instance Type Offerings](#adding-odcrs-as-additional-instance-type-offerings)\n        + [Representing ODCR Available Instance Counts in Instance Type Offerings](#representing-odcr-available-instance-counts-in-instance-type-offerings)\n    * [CloudProvider Launch Behavior](#cloudprovider-launch-behavior)\n        + [Capacity Reservation Targeting and CreateFleet Usage Strategy](#capacity-reservation-targeting-and-createfleet-usage-strategy)\n        + [Open Capacity Reservations](#open-capacity-reservations)\n    * [Capacity Reservation Expiration/Cancellation](#capacity-reservation-expirationcancellation)\n    * [Pricing/Consolidation](#pricingconsolidation)\n        + [Provisioning](#provisioning)\n        + [Consolidation](#consolidation)\n            - [Consolidating into Capacity Reserved Instances](#consolidating-into-capacity-reserved-instances)\n            - [Consolidating between Capacity Reservations](#consolidating-between-capacity-reservations)\n    * [Drift](#drift)\n        + [The NodePool selects on `karpenter.sh/capacity-type: reserved` but the instance is no longer in a reservation](#the-nodepool-selects-on-karpentershcapacity-type-reserved-but-the-instance-is-no-longer-in-a-reservation)\n        + [The `capacityReservationSelectorTerms` no longer selects an instance's capacity reservation](#the-capacityreservationselectorterms-no-longer-selects-an-instances-capacity-reservation)\n    * [Appendix](#appendix)\n        + [Input/Output for CreateFleet with CapacityReservations](#inputoutput-for-createfleet-with-capacityreservations)\n            - [Specifying Multiple ODCRs with the same Instance Type/Availability Zone Combination](#specifying-multiple-odcrs-with-the-same-instance-typeavailability-zone-combination)\n\n## Overview\n\nIn AWS [ODCR](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-capacity-reservations.html) allows users to reserve compute capacity to mitigate the risk of getting on-demand capacity. This is very helpful during seasonal holidays where higher traffic is expected or for reserving highly-desired instance types, like the `p5.48xlarge` or other large GPU instance types.\n\nThis RFC outlines the proposed API and implementation of support for On-Demand Capacity Reservations within Karpenter. Support for this feature and respective API would launch initially in alpha under the `CapacityReservations` feature gate. When enabled, this feature will allow users to select capacity reservations through `capacityReservationSelectorTerms` in their EC2NodeClasses. Karpenter will then discover and use these capacity reservations during scheduling and disruption (including consolidation) simulations to prioritize scheduling pods into the selected reservations.\n\n### Capacity Reservations\n\nEach [Capacity Reservation](https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/service/ec2@v1.162.1/types#CapacityReservation) is defined with:\n\n- The Availability Zone in which to reserve the capacity\n- The count of instances for which to reserve capacity\n- The instance attributes, including the instance type, tenancy, and platform/OS\n- Instance match criteria\n  - Targeted -- only accept instances that matches all attributes + explicitly targeted the capacity reservation\n  - Open -- if capacity reservation accepts all instances that matches all attributes\n- Reservation type\n  - [Default](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-capacity-reservations.html) -- standard capacity reservations, pre-reserved capacity for on-demand instances in arbitrary instance counts\n  - [Capacity Block](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/capacity-blocks-using.html) -- pre-reserved capacity in specific block sizes that is only allocated for a specific amount of time (up to 14 days in 1-day increments or up to 28 days in 7-day increments)\n- A start and end date (if applicable) for when the reservation of capacity is available\n\nAWS also supports grouping Capacity Reservation into [Capacity Reservation groups](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/create-cr-group.html). Both these entities are supported in Launch Template's CapacityReservationTarget [definitions](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-capacityreservationtarget.html).\n\n## Goals\n\n1. Allow selection of targeted and open ODCRs with Karpenter\n2. Ensure multiple ODCRs can be selected from a single NodePool\n3. Ensure that we only launch capacity into an ODCR in a cluster when an application requires the capacity, ensuring ODCR sharing between clusters and accounts\n4. Ensure ODCRs are prioritized over regular OD and spot capacity\n5. Ensure Karpenter consolidates regular OD and spot instances to ODCR capacity when it is available\n6. Ensure Karpenter consolidates between ODCRs when a smaller/cheaper ODCR is available\n7. Allow users to constrain a NodePool to only launch into ODCR capacity without fallback\n8. Allow users to fallback from ODCR to spot capacity and from ODCR to standard OD capacity\n9. Ensure OD capacity is not automatically drifted to new capacity when a capacity reservation expires or is canceled to reduce workload disruption\n\n## Non-Goals\n\nBelow lists the non-goals for _this RFC design._ Each of these items represents potential follow-ups for the initial implementation and are features we will consider based on feature requests.\n\n1. Ensure OD instances can be automatically attached to an ODCR after the fact rather than replaced/drifted if an ODCR has availability later\n2. Support [Capacity Blocks](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/capacity-blocks-using.html) as a capacity-type -- though capacity blocks are not supported with this design, they are a natural extension of it. We could support selection on capacity blocks through the `capacityReservationSelectorTerms`.\n3. Support [Capacity Reservation Groups](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/create-cr-group.html) -- though capacity reservation groups are not supported with this design, they are a natural extension of it. We could support an additional field `reservationGroup` in the `capacityReservationSelectorTerms`.\n\n## Capacity Reservation Selection\n\n### EC2NodeClass API\n\n- Add a new field under `spec` for `capacityReservationSelectorTerms` to `EC2NodeClass` for defining which Capacity Reservation to be used for a specific `EC2NodeClass`\n  - This will allow us to attach multiple Capacity Reservations across AZs and Instance Types to a single EC2NodeClass. This capability removes the need for `Capacity Reservation Groups` for this MVP.\n- Add a new field under `status` for the found Capacity Reservations by the `spec.capacityReservationSelectorTerms` for the `EC2NodeClass`\n\n```yaml\napiVersion: karpenter.k8s.aws/v1\nkind: EC2NodeClass\nmetadata:\n  name: example-node-class\nspec:\n  # capacityReservationSelectorTerms specify selectors which are ORed together to generate\n  # a list of filters against the EC2 DescribeCapacityReservation API\n  # ID cannot be specified with any other field within a single selector\n  # All other fields are not mutually exclusive and can be combined\n  capacityReservationSelectorTerms:\n    - # The id for the Capacity Reservation\n      id: String | None\n      # The id of the AWS account that owns the Capacity Reservation\n      # If no ownerID is specified, any ODCRs available to the current account will be used\n      ownerID: String | None\n      # Tags is a map of key/value tags used to select capacity reservations\n      # Specifying '*' for a value selects all values for a given tag key.\n      tags: Map | None\nstatus:\n  capacityReservations:\n    - # AvailabilityZone for the Capacity Reservation\n      availabilityZone: String\n      # The time at which the Capacity Reservation expires. When a Capacity\n      # Reservation expires, the reserved capacity is released and you can no longer\n      # launch instances into it. The Capacity Reservation's state changes to expired\n      # when it reaches its end date and time.\n      endTime: String | None\n      # id for the Capacity Reservation\n      id: String\n      # Indicates the instanceMatchCriteria of instance launches that the Capacity Reservation accepts. The options include:\n      #   - open:\n      #       The Capacity Reservation accepts all instances that have\n      #       matching attributes (instance type, platform, and Availability\n      #       Zone). Instances that have matching attributes launch into the\n      #       Capacity Reservation automatically without specifying any\n      #       additional parameters.\n      #   - targeted:\n      #       The Capacity Reservation only accepts instances that\n      #       have matching attributes (instance type, platform, and\n      #       Availability Zone), and explicitly target the Capacity\n      #       Reservation. This ensures that only permitted instances can use\n      #       the reserved capacity.\n      instanceMatchCriteria: String\n      # Instance Type for the Capacity Reservation\n      instanceType: String\n      # The id of the AWS account that owns the Capacity Reservation\n      ownerID: String\n```\n\nThis API follows closely with how [DescribeCapacityReservations](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeCapacityReservations.html) can filter capacity reservations -- allowing Karpenter to receive the server-side filtered version of the capacity reservations to store in its status.\n\n### NodePool API\n\nThe EC2NodeClass API allows selection on capacity reservations, which give additional options to the scheduler to choose from when launching instance types; however, it does not offer a mechanism to scope-down whether instances in a NodePool should only launch into an ODCR, fallback between a capacity reservation to on-demand if none is available, or fallback between a capacity reservation to spot and then finally to on-demand.\n\nThis RFC proposes the addition of a new `karpenter.sh/capacity-type` label value, called `reserved`. A cluster admin could then select to support only launching ODCR capacity and falling back between ODCR capacity to on-demand capacity respectively. _NOTE: This option requires any applications (pods) that are using node selection on `karpenter.sh/capacity-type: \"on-demand\"` to expand their selection to include `reserved` or to update it to perform a `NotIn` node affinity on `karpenter.sh/capacity-type: spot`_\n\n#### Only launch ODCR instances\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n name: default\nspec:\n requirements:\n - key: karpenter.sh/capacity-type\n   operator: In\n   values: [\"reserved\"]\n```\n\n#### Launch ODCR instances with on-demand fallback\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n name: default\nspec:\n requirements:\n   - key: karpenter.sh/capacity-type\n     operator: In\n     values: [\"on-demand\", \"reserved\"]\n```\n\n#### Launch ODCR instances with spot and on-demand fallback\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n name: default\nspec:\n # No additional requirements needed, launch all capacity types by default\n requirements: []\n```\n\n## Scheduling Representation\n\nSince ODCRs are a AWS-specific concept, there needs to be a mechanism to pass down these ODCR options down for the scheduler to reason about. Importantly, we need the scheduler to know to prioritize these ODCR options when a user has specified them in their EC2NodeClass. Further, we need the scheduler to be aware that it can't launch an unlimited amount of these instances into an ODCR.\n\n_Note: Updates to the scheduling representation of our offerings, including changes to how the core scheduling behavior works are going to require extensive performance benchmarking to ensure that we do not significantly trade-off performance when we support users selecting on ODCRs._\n\n### Consider ODCR first during Scheduling\n\nKarpenter's current scheduling algorithm uses [First-Fit Decreasing bin-packing](https://en.wikipedia.org/wiki/First-fit-decreasing_bin_packing#:~:text=First%2Dfit%2Ddecreasing%20FFD,is%20at%20most%20the%20capacity). as a heuristic to optimize pod scheduling to nodes. For a new node that Karpenter chooses to launch, it will continue packing pods onto this new node until there are no more available instances type offerings. This happens regardless of the remaining capacity types in the offerings AND regardless of the price as offerings are removed.\n\nThis presents a challenge for prioritizing ODCRs -- since this algorithm may remove `reserved` offerings to continue packing into `on-demand` and `spot` offerings, thus increasing the cost of the cluster and not fully utilizing the available capacity reservations.\n\nTo solve for this problem, Karpenter will implement special handling for `karpenter.sh/capacity-type: reserved`. If there are reserved offerings available, we will consider these offerings as \"free\" and uniquely prioritize them. This means that if we are about to remove the final `reserved` offering in our scheduling simulation such there are no more `reserved` offerings, rather than scheduling this pod to the same node, we will create a new node, retaining the `reserved` offering, ensuring these offerings are prioritized by the scheduler.\n\n### Adding ODCRs as Additional Instance Type Offerings\n\nWe can surface ODCR capacity as additional offerings attached to each instance type. Offerings currently allow us to track the pricing of variants of a specific instance type, primarily based on capacity type and availability zone today.\n\nTo track reservation capacity, we can add additional offerings to an instance type when there is a capacity reservation that is matched on by an EC2NodeClass's `capacityReservationSelectorTerms`. This offering will have a price near 0 to model the fact that the reservation is already paid-for and to ensure the offering is prioritized ahead of other offerings.\n\nWhen there are multiple capacity reservation offerings for an instance type for different AZs, we will produce separate offerings for these different zones. When there are multiple capacity reservation offerings for instance type in the same AZ, we will only produce a single offering. With this change, an example instance type offerings set will look like the following\n\n```yaml\nname: c5.large\nofferings:\n  - price: ....\n    available: ....\n    requirements:\n      - key: karpenter.sh/capacity-type\n        operator: In\n        values: [\"reserved\"]\n      - key: topology.kubernetes.io/zone\n        operator: In\n        values: [\"us-west-2a\"]\n      - key: topology.k8s.aws/zone-id\n        operator: In\n        values: [\"usw2-az1\"]\n  - price: ....\n    available: ....\n    requirements:\n      - key: karpenter.sh/capacity-type\n        operator: In\n        values: [\"on-demand\"]\n      - key: topology.kubernetes.io/zone\n        operator: In\n        values: [\"us-west-2a\"]\n      - key: topology.k8s.aws/zone-id\n        operator: In\n        values: [\"usw2-az1\"]\n  - price: ....\n    available: ....\n    requirements:\n      - key: karpenter.sh/capacity-type\n        operator: In\n        values: [\"spot\"]\n      - key: topology.kubernetes.io/zone\n        operator: In\n        values: [\"us-west-2a\"]\n      - key: topology.k8s.aws/zone-id\n        operator: In\n        values: [\"usw2-az1\"]\n```\n\n### Representing ODCR Available Instance Counts in Instance Type Offerings\n\nODCRs (unlike spot and on-demand capacity) have much more defined, constrained capacity ceilings. For instance, in an extreme example, a user may select on a capacity reservation with only a single available instance but launch 10,000 pods that contain hostname anti-affinity. The scheduler would do work to determine that it needs to launch 10,000 instances for these pods; however, without any kind of cap on the number of times the capacity reservation offering could be used, the scheduler would think that it could launch 10,000 instances into the capacity reservation offering.\n\nAttempting to launch this would result in a success for a single instance and an ICE error for the other 9,999. The next scheduling loop would remediate this, but this results in a lot of extra, unneeded work.\n\nA better way to model this would be to track the available instance count as a numerical value associated with an instance type offering. In this modeling, the scheduler could count the number of simulated NodeClaims that might use the offering and know that it can't simulate NodeClaims into particular offerings once they hit their cap.\n\nToday, we already have an [`available` field](https://github.com/kubernetes-sigs/karpenter/blob/bcd33e924905588b1bdecd5413dc7b268370ec4c/pkg/cloudprovider/types.go#L236) attached to instance type offerings. This field is binary and only tells us whether the instance is or isn't available. With the introduction of ODCR offerings, we could extend this field to be an integer rather than a boolean. This would allow us to exactly represent the number of available instances that can be launched into the offering. Existing spot and on-demand offerings would model this `available` field as `MAX_INT` for current `true` values and `0` for `false` values.\n\nAn updated version of the instance type offerings for an ODCR, on-demand, and spot capacity would look like\n\n```yaml\nname: c5.large\nofferings:\n  - price: 0.00000001\n    available: 5\n    requirements:\n      - key: karpenter.sh/capacity-type\n        operator: In\n        values: [\"reserved\"]\n      - key: topology.kubernetes.io/zone\n        operator: In\n        values: [\"us-west-2a\"]\n      - key: topology.k8s.aws/zone-id\n        operator: In\n        values: [\"usw2-az1\"]\n  - price: 0.085\n    available: 4294967295\n    requirements:\n      - key: karpenter.sh/capacity-type\n        operator: In\n        values: [\"on-demand\"]\n      - key: topology.kubernetes.io/zone\n        operator: In\n        values: [\"us-west-2a\"]\n      - key: topology.k8s.aws/zone-id\n        operator: In\n        values: [\"usw2-az1\"]\n  - price: 0.0315\n    available: 4294967295\n    requirements:\n      - key: karpenter.sh/capacity-type\n        operator: In\n        values: [\"spot\"]\n      - key: topology.kubernetes.io/zone\n        operator: In\n        values: [\"us-west-2a\"]\n      - key: topology.k8s.aws/zone-id\n        operator: In\n        values: [\"usw2-az1\"]\n```\n\n## CloudProvider Launch Behavior\n\nWhen a NodeClaim is passed to the CloudProvider `Create()` call that selects the `reserved` capacity type, the AWS Cloud Provider will prioritize launching into the `reserved` capacity type before attempting other capacity types.\n\nPractically, this means that when a NodeClaim allows for the `reserved` capacity type, Karpenter will know that this NodeClaim is requesting to launch into an ODCR and leverage available ODCR offerings from this NodePool that match the instance type and availability zone requirements passed through the NodeClaim.\n\nIn order to properly pass these ODCR options into `CreateFleet`, Karpenter will need to generate launch templates for the ODCR possibilities that we can launch into. Each ODCR id will need a separate launch template created during launch. Karpenter will then take each of these launch templates and pass them to `CreateFleet` as separate `launchTemplateConfig` options.\n\n_Note: `CreateFleet` does not currently support passing multiple launch templates that target the same instance type and availability zone. This means that different ODCRs that target the same instance type/availability zone combination cannot be passed-through at the same time. To avoid this, Karpenter will pick the ODCR with the greatest available instance count when choosing from ODCRs with the same instance type and avaialbility zone._\n\n### Capacity Reservation Targeting and CreateFleet Usage Strategy\n\n`CreateFleet` supports a parameter called [`usageStrategy`](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CapacityReservationOptionsRequest.html) within the `capacityReservationOptions` stanza of the `onDemandOptions`. This `usageStrategy` allows you to inform Fleet that you are using capacity reservations and to consider them first when launching. Currently, the only available enum for this field is `use-capacity-reservations-first`, which tells Fleet to use-up any available ODCRs (whether targeted or open) when launching and then fall-back to on-demand to fulfill the remaining capacity. This fall-back behavior isn't necessarily desired for an orchestrator like Karpenter where we might have used a different NodePool or a different instance type option entirely if Karpenter controlled the fallback.\n\nAs a result, Karpenter will not use this option when launching instances with `CreateFleet`. Instead, Karpenter will specifically target all ODCRs that are selected-on for a given launch request by passing the ID through the LaunchTemplate. `usageStrategy` will not be specified, but only ODCR launch templates will be included in a request that is targeting ODCRs. As a result, Fleet will choose the cheapest instance type from the available options based on the `lowest-price` allocation strategy and launch an instance the respective ODCR.\n\nIn some race condition scenarios, CreateFleet, when creating instances against targeted Capacity Reservations, will fail if all Reservations are already fully utilized, resulting in an `ReservationCapacityExceeded` error across the request. In these cases, Karpenter will throw an Insufficient Capacity error internally, delete the NodeClaim used for the request and attempt to reschedule capacity again given th remaining application pods.\n\n> For more information on how CreateFleet interacts with capacity reservations and `usageStrategy`, see https://docs.aws.amazon.com/emr/latest/ManagementGuide/on-demand-capacity-reservations.html.\n\n### Open Capacity Reservations\n\n\"Open\" is one of the `instanceMatchCriteria` options for a capacity reservation. This criteria allows EC2 to automatically assign a launched instance to an ODCR so long as the instance matches the instance type and availability zone of an available, open ODCR.\n\nBecause EC2 is in control of the assignment between instances and ODCRs and not Karpenter, open ODCRs interact poorly with Karpenter's drift mechanisms.\n\nAs an example, take an EC2NodeClass that is selecting on ODCR `cr-123456789`. This capacity reservation is completely utilize, so we launch a standard OD instance from the selected instance types in the NodePool. This launch _happens_ to match an open ODCR, so we see an assignment occur to a capacity reservation. Karpenter now recognizes that this instance is in an ODCR, but this ODCR doesn't match the selected ODCRs, so it begins to replace the instance due to drift. A new instance that is launched matches the ODCR again and this cycle continues.\n\nTo avoid this problem, when an EC2NodeClass uses the `capacityReservationSelectorTerms` block, we will opt-out of open matching in our LaunchTemplates by setting `capacityReservationPreference` as `none`. This means that it won't be possible for any instance launched from this EC2NodeClass to join an ODCR that hasn't been explicitly selected on, solving the drift problem.\n\n## Capacity Reservation Expiration/Cancellation\n\nCapacity reservations [support an option to expire the reservation at a specific date and time](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/capacity-reservations-using.html). When the reservation expires, any instances present in the reservation at the time will have their association with the reservation removed and the instances will be charged at the standard on-demand instance rate.\n\nWhen this occurs, we need to ensure two things in Karpenter:\n1. We no longer attempt to launch instances into this reservation (e.g. we ensure the offering is removed from the set of capacity reservation offerings)\n2. Instances which were marked as part of a capacity reservation have their label removed so we no longer treat their pricing as capacity reservation pricing\n\nTo ensure the first item, we can simply filter out non-active capacity reservations when storing capacity reservations in EC2NodeClass status. Ensuring the second item involves us polling the DescribeInstances API to validate the mapping between the capacity reservation and the instance, removing the mapping from the NodeClaim/Node if the instance is no longer in a reservation.\n\n## Pricing/Consolidation\n\n### Provisioning\n\nPricing is directly considered during provisioning and consolidation as capacity-reservation is prepaid. It is assumed to have a price of \"near 0\" during provisioning (see [Consolidating between Capacity Reservations](#consolidating-between-capacity-reservations) for more detail on why this is not just \"0\").\n\n### Consolidation\n\nDuring consolidation pricing does matter as it affects which candidate will be [prioritized](https://github.com/kubernetes-sigs/karpenter/blob/75826eb51589e546fffb594bfefa91f3850e6c82/pkg/controllers/disruption/consolidation.go#L156). Since all capacity instances are paid ahead of time, their cost is already incurred. Users would likely want to prioritize filling their reserved capacity.\nreservation first then fall back into other instances. Because of this reserved instances should likely show up as 0 dollar pricing when we calculate the instance pricing.\n\n#### Consolidating into Capacity Reserved Instances\n\nIf we track Capacity Reservation usage, we can optimize the cluster configuration by moving non-Capacity Reserved instances into\nCapacity Reserved instances. We would need to match the instance type, platform and availability zone prior to doing this.\n\nThis would be done by the standard consolidation algorithm and should work with minimal changes, since consolidation already optimizes for cost.\n\n#### Consolidating between Capacity Reservations\n\nTreating the price of all capacity reservation offerings as `0` sounds sensical but has some adverse interactions with consolidation. Most notably, if we launch an instance into a capacity reservation offering, we will _never_ consolidate out of that offering -- even if there is a smaller instance type that would work just as well for the pods on that node.\n\nIn practicality, that larger capacity reservation could have been used for other work -- perhaps on another cluster, but may have been held by a single pod that prevented Karpenter from consolidating it.\n\nTo solve for this edge case, we won't model the pricing of capacity reservations as `0` but as a \"near-0\" value. We'll divide the existing price of the on-demand offering by the most expensive hourly rate offering (e.g. $407.68 for the `u7in-32tb.224xlarge`) over the least expensive hourly rate offering for a spot instance (e.g. $0.0015 for `t4g.nano`). We'll then take this value and then further divide it by 1,000,000 to get a sufficiently small number that is significantly smaller than the least expensive offering.\n\nThis value will be calculated dynamically based on the pricing info that Karpeneter discovers at runtime. This allow us to represent a price that is less than every other instance type offering, but still maintains the relative ordering of on-demand instance types.\n\nIn practice, this means that if a user has two capacity reservation offerings available: one for a `c6a.48xlarge` and another for a `c6a.large`, where we launch into the `c6a.48xlarge` first, we will still be able to consolidate down to the `c6a.large` when pods are scaled back down.\n\n## Drift\n\nDue to capacity reservation expiration or due to changes from the user in their capacity reservation selection in their EC2NodeClass, instances can drift from the NodePool capacity reservation specification. Below outlines two ways that this drift can occur and how it will be re-reconciled.\n\n### The NodePool selects on `karpenter.sh/capacity-type: reserved` but the instance is no longer in a reservation\n\nAssuming we have a reconciler that we will build as part of this design proposal that will update the `karpenter.sh/capacity-type` label from `reserved` to `on-demand` when a node is no longer in a capacity reservation, Karpenter's dynamic requirement drift checking should cause drift reconciliation in this case.\n\nIn this case, since the NodePool is selecting on a label that does not exist on the NodeClaim, drift detection will recognize that the NodeClaim is invalid and will mark it as drifted to be replaced by another node.\n\n### The `capacityReservationSelectorTerms` no longer selects an instance's capacity reservation\n\nIn this case, there is no existing mechanism in Karpenter that would catch this. Karpenter will need to implement an additional mechanism that validates that an instance's capacity reservation falls within the valid set of reservations selected-on from the `capacityReservationSelectorTerms`. Specifically, it needs to validate that that id exists with the `capacityReservation` section of the EC2NodeClass status.\n\n## Appendix\n\n### Input/Output for CreateFleet with CapacityReservations\n\n| ODCR Targeting                      | `usageStrategy`                  | `capacityReservationPreference` | Result                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |\n|-------------------------------------|----------------------------------|---------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| Yes, targeting `targeted` or `open` | `use-capacity-reservation-first` | `null` (default `open`)         | CreateFleet will not use any launch templates that target capacity reservations when using `usageStrategy: use-capacity-reservation-first`.                                                                                                                                                                                                                                                                                                                                                |\n| No                                  | `use-capacity-reservation-first` | `null` (default `open`)         | CreateFleet will find available open ODCRs and prioritize launching into these before launching regular on-demand capacity. These ODCRs will be ordered by the `lowest-price` allocation strategy. Once all open ODCRs from passed-through instance type/availability zone combinations have been exhausted, Fleet will launch standard on-demand capacity -- even if targeted ODCRs are available.                                                                                        |\n| Yes, targeting `targeted` or `open` | `null`                           | `null` (default `open`)         | CreateFleet does not have any knowledge about ODCRs in this mode will use the `lowest-price` allocation strategy to order the instance types/availability zones. When specifying multiple ODCRs in separate launch templates and running out of capacity in one ODCR, CreateFleet will automatically select the other ODCR that has capacity. When all ODCRs are exhausted, CreateFleet will return `ReservationCapacityExceeded` rather than falling back to standard on-demand capacity. |\n| No                                  | `null`                           | `null` (default `open`)         | This is the current state today. CreateFleet has no knowledge about capacity reservations and will not specifically try to launch into them. If a user gets lucky and Fleet happens to launch into an instance type/availability zone combination that _happens_ to match an open ODCR, then the instance will be attached to this ODCR.                                                                                                                                                   |\n| No                                  | `null`                           | `none`                          | CreateFleet has no knowledge about capacity reservations and will not specifically try to launch into them. If a user gets lucky and Fleet happens to launch into an instance type/availability zone combination that _happens_ to match an open ODCR, __the instance will not join the ODCR and will become standard on-demand capacity due to the `capacityReservationPreference`.__                                                                                                     |\n| Yes, targeting `targeted` or `open` | `null`                           | `none`                          | Errors on launch. A capacity reservation preference of `none` cannot be used while targeting ODCRs in the launch template.                                                                                                                                                                                                                                                                                                                                                                 |\n\n#### Specifying Multiple ODCRs with the same Instance Type/Availability Zone Combination\n\nCreateFleet will reject the call outright since you are not allowed to specify duplicate instance type/availability zone combinations, even if the launch templates contain different data -- such as different capacity reservation ids.\n\n> For more information on CreateFleet's handling when specifying different `usageStrategy` and `capacityReservationPreference` values, see https://docs.aws.amazon.com/emr/latest/ManagementGuide/on-demand-capacity-reservations.html.\n"
  },
  {
    "path": "designs/provisioner-priority.md",
    "content": "# Prioritizing Provisioners\n\n## Goals\n\n- Allowing a user to describe a logical ordering to their provisioners\n- Allowing a user to set defaults and/or fallback orderings for their provisioners\n\n## Background\n\nCurrently, there is no logical ordering to how the Karpenter scheduling receives and processes Provisioners. Provisioners are processed in the order they are received from the Kubernetes LIST API, which is randomly. Like pod affinities, users want to convey a preferential relationship to some Provisioners over others. Rather than having to manually map a pod to a specific Provisioner through a `nodeSelector` or `affinity` (which could be cumbersome for clusters with large workloads), a user should be able to specify global preferences to pod assignment to provisioners.\n\n## Use Cases\n\n1. Users who have specific architecture requirements for workloads but can't or don't want to go through the process of retro-fitting `nodeSelectors` across these workloads. In this case, we can create a strongly preferred default provisioner that will always be attempted first, except when a specific `nodeSelector` or `nodeAffinity` is specified. \n\n   **Example**\n\n    ```yaml\n    # Default provisioner that will be attempted to be scheduled first\n\n    apiVersion: karpenter.sh/v1alpha5\n    kind: Provisioner\n    metadata:\n      name: default\n    spec:\n      weight: 100\n      requirements:\n      - key: kubernetes.io/arch\n        operator: In\n        values: [\"amd64\"]\n    ```\n\n    ```yaml\n    # ARM-64 specific provisioner that will be scheduled if the other provisioner does not fit the constraints for this provisioner\n\n    apiVersion: karpenter.sh/v1alpha5\n    kind: Provisioner\n    metadata:\n      name: arm64\n    spec:\n      weight: 50\n      requirements:\n      - key: kubernetes.io/arch\n        operator: Exists\n    ```\n\n2. Users who have a large set of stateful workloads that require on-demand instances. These users do not want to retrofit their workloads to add `nodeSelectors` that specify a capacity type. In this case, we want to default to on-demand instances and fallback to spot instances for workloads that can support spot.\n\n    **Example**\n\n    ```yaml\n    # Default on-demand capacity type \n    apiVersion: karpenter.sh/v1alpha5\n    kind: Provisioner\n    metadata:\n      name: on-demand\n    spec:\n      weight: 50\n      requirements:\n      - key: \"karpenter.sh/capacity-type\"\n        operator: In\n        values: [\"on-demand\"]\n   ```\n\n   ```yaml\n    # Spot capacity type for those that can use spot\n    apiVersion: karpenter.sh/v1alpha5\n      kind: Provisioner\n      metadata:\n        name: spot\n      spec:\n        requirements:\n        - key: \"karpenter.sh/capacity-type\"\n          operator: Exists\n   ```\n\n3. Creating a strongly preferred default provisioner for enterprise users that have `reserved` instance types and want to prefer having these instance types scheduled prior to other instance types. To ensure we don't over-provision to an instance type over what we have reserved, we can place a `.spec.limits.cpu` on the provisioner to stop after a given limit.\n\n   **Example**\n\n    ```yaml\n    # I have c5.large instance types as reserved instances, so I want to schedule to these nodes first\n\n    apiVersion: karpenter.sh/v1alpha5\n    kind: Provisioner\n    metadata:\n      name: reserved\n    spec:\n      weight: 50\n      requirements:\n      - key: \"node.kubernetes.io/instance-type\"\n        operator: In\n        values: [\"c5.large\"]\n      limits:\n        cpu: 20\n    ```\n\n    ```yaml\n    # For all other pods, we can use these other instance types\n\n    apiVersion: karpenter.sh/v1alpha5\n    kind: Provisioner\n    metadata:\n      name: fallback\n    spec:\n      requirements:\n      - key: \"node.kubernetes.io/instance-type\"\n        operator: In\n        values: [\"m5.large\", \"m5.2xlarge\"]\n    ```\n\n4. Preferring specific instance types for workloads where you are aware that a specific instance type is optimal for your needs but can define other instance types as backups\n\n    **Example**\n    \n    ```yaml\n    # Prefer p3 instance types for GPU workloads\n\n    apiVersion: karpenter.sh/v1alpha5\n    kind: Provisioner\n    metadata:\n      name: reserved\n    spec:\n      weight: 50\n      requirements:\n      - key: \"karpenter.k8s.aws/instance-family\"\n        operator: In\n        values: [\"p3\"]\n      - key: \"gpu-intensive\"\n        operator: Exists\n    ```\n\n    ```yaml\n    # GPU-intensive workloads can run optionally on these as a backup\n\n    apiVersion: karpenter.sh/v1alpha5\n    kind: Provisioner\n    metadata:\n      name: fallback\n    spec:\n      requirements:\n      - key: \"node.kubernetes.io/instance-type\"\n        operator: In\n        values: [\"g5\", \"g3\"]\n      - key: \"gpu-intensive\"\n        operator: Exists\n    ```\n\n4. Allowing provisioner with taints to be attempted first so that pods that have tolerations for these taints can be scheduled to specific instance types. Without this ordering, it is possible these pods will be scheduled to nodes that have no taints.\n\n   _Note: It is still possible that pods with tolerations may not be scheduled to nodes with taints even if they are preferred, since pods with tolerations can technically be scheduled anywhere they are tolerated (including nodes that contain no taints)._\n\n   **Example**\n\n    ```yaml\n    # Custom Workload for Pods that Tolerate these Taints should be attempted first\n\n    apiVersion: karpenter.sh/v1alpha5\n    kind: Provisioner\n    metadata:\n      name: \n    spec:\n      weight: 100\n      requirements:\n      - key: node.kubernetes.io/instance-type\n        operator: In\n        values: [\"p3.8xlarge\", \"p3.16xlarge\"]\n      taints:\n      - key: custom-workloads\n        value: \"true\"\n        effect: NoSchedule\n    ```\n\n    ```yaml\n    # Workloads that do not have any specific requirements can pick up this provisioner as the backup\n\n    apiVersion: karpenter.sh/v1alpha5\n    kind: Provisioner\n    metadata:\n      name: fallback\n    spec:\n      weight: 50\n      requirements:\n      - key: kubernetes.io/arch\n        operator: In\n        values: [\"amd64\"]\n    ```\n\n## Proposed Design\n\nTo enable the ability to define a user-defined relationship between provisioners that will be considered in scheduling, we introduce a `.spec.weight` value in the `karpenter.sh/v1alpha5/Karpenter` provisioner spec. This value will have the following constraints:\n\n1. The provisioner weight value will be an integer from 1-100 if specified\n2. A provisioner with no weight is considered to be a provisioner with weight 0\n3. Provisioners with the same weight have no guarantee on ordering and will be randomly ordered\n\nThese constraints are consistent with pod affinity/pod anti-affinity preference weights described [here](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#an-example-of-a-pod-that-uses-pod-affinity).\n\n## Considerations\n\n### Provisioner Scheduling Ordering\n\n__Current State__: Scheduling calls the Kubernetes LIST API for the `karpenter.sh/v1alpha5/Provisioner` and receives a random ordering of Provisioners back for scheduling. When processing pods, Karpenter will find the first provisioner that it is able to schedule the pod onto given the instance type options that are constrained by the pod scheduling requirements (affinity, anti-affinity, topology spread) and the provisioner requirements. This creates some randomness for users and leads to some unpredictability with respect to the provisioner that will be used for a given pod. Currently, the best practices that are recommended by the [Karpenter/EKS docs](https://aws.github.io/aws-eks-best-practices/karpenter/#create-provisioners-that-are-mutually-exclusive) recommend that we create mutually exclusive provisioners such that we reduce this unpredictability.\n\n**Improvement Options**\n\n1. User-Based Priority Ordering with Weights: Scheduling would receive a provisioner ordering based on a `.spec.weight` field, where higher weighted provisioners will be attempted to be scheduled first. In particular, there will be a strict ordering of weights for provisioners, such that higher-weighted provisioners that meet scheduling constraints will have pods scheduled to them first.\n\n2. Define a `karpenter.sh/preferred: true` annotation for Provisioners. Provisioners that have this annotation would be considered first when scheduling pods to provisioners but there would be no ordering among provisioners marked as `preferred` or those that were not marked as `preferred`.\n\n3. Define a `.spec.preferences` section of the `Provisioner`. This preferences section would have the same schema as requirements but with added `.spec.preferences.[].weight` parameter. Preferences would be treated as requirements and backed off if preferences are too strict to be attainable. Users would need to use mutually exclusive provisioners to have predictable results with this interface.\n\n    ```yaml\n    apiVersion: karpenter.sh/v1alpha5\n    kind: Provisioner\n    metadata:\n      name: preference\n    spec:\n      requirements:\n      - key: kubernetes.io/arch\n        operator: In\n        values: [\"amd64\", \"arm64\"]\n      preferences:\n      - key: kubernetes.io/arch\n        operator: In\n        values: [\"amd64\"]\n        weight: 100\n      \n    ```\n  \n    This implementation has some technical concerns related to how these preferences are understood in the following scenarios:\n\n    1. A node has been provisioned using preferences as part of the node requirements. Should this node be consolidated to a smaller instance during the consolidation loop if there is a smaller instance that meets the requirements but does not meet the preferences? In general, if the scheduling loop is performing the same during initial provisioning and consolidation, the preferences would be observed \n\n    2. A new node is being prepared to be created with a pod assigned to it. The node has preferences that it is treating as requirements. During the scheduling loop, another pod has to be scheduled but does not meet the new node preferences. Should we attempt to relax this node's preferences such that the pod could be scheduled to the node or create an entirely separate node that this pod can fit on? Basically, this comes down to the question of whether the node can have relaxed requirements after node \"creation\" has occurred in Karpenter scheduling loop.\n\n__Recommendation:__ Use a `.spec.weight` to enforce strict ordering of provisioners when scheduling\n\n### Pod Scheduling Ordering\n\nWhen pods are batched, they are not necessarily ordered in any particular way. This means that we may not actually consider the highest priority provisioner when attempting to schedule pods.\n\nAs an example, we could receive a pod that does not support a given node taint specified on the highest priority provisioner first. Thus, we would schedule using the second-highest priority or backup provisioner.\n\nBecause we scheduled with this provisioner and the node has capacity, all the other pods that were part of this batch may end up on that single node, even though there were some pods in this batch that would have tolerated the taints.\n\n**Options**\n\n1. Use a `karpenter.sh/weight` annotation on pods to tell Karpenter to order these pods first by weight ahead of any resource ordering that is performed for bin-packing.\n2. Do not change any of the existing logic and document that this is a consideration to take into account when prioritizing provisioners.\n\n**Recommendation:** Do not change the existing logic. In general, the fact that the scheduler may choose to schedule a second provisioner first due to constraints is a general concern with the kube-scheduler as we can't even guarantee which node each pod will end up on. Instead, document that provisioner weight is just a preference given in scheduling and may not actually mean that all pods that could be scheduled to a provisioner with higher weight will always end up on a provisioner with higher weight.\n\n### Consolidation\n\nThe consolidation algorithm requires that the same scheduling algorithm that is used for the initial scheduling should be used during the consolidation scheduling dry-run. This is important such that we do not spin up a new node based on a selected provisioner that is then spun down immediately after a first consolidation run due to the presence of a less expensive instance type on a different provisioner.\n\n**Recommendation:** Because of the requirement to use a consistent scheduling algorithm across initial scheduling and consolidation, we will choose the same ordering-based logic that is used in the initial scheduling in the consolidation algorithm.\n\n### Configuration Considerations\n\n**Creating Inflexible Provisioners**: There are scenarios where this user-based priority ordering could cause undesirable affects to the node provisioning. In particular, consider the scenario where a user has provided the following provisioners\n\n```yaml\napiVersion: karpenter.sh/v1alpha5\nkind: Provisioner\nmetadata:\n  name: expensive\nspec:\n  requirements:\n    - key: \"node.kubernetes.io/instance-type\"\n      operator: In\n      values: [\"p3.16xlarge\"]\n  weight: 100\n```\n\n```yaml\napiVersion: karpenter.sh/v1alpha5\nkind: Provisioner\nmetadata:\n   name: inexpensive\nspec:\n   requirements:\n      - key: \"node.kubernetes.io/instance-type\"\n        operator: In\n        values: [\"t3.small\"]\n```\n\nIn this scenario, since the first provisioner marked `expensive` has the highest weight, it will always be considered first. On a deployment with 20 replicas and strict pod anti-affinity, this will cause the `expensive` provisioner to always be considered for scheduling for this deployment and will deploy 20 new nodes all with the most expensive instance type when a cheaper/more available instance type could have fit the same number of pods across the same number of nodes.\n\nThis is an extreme example; however, it is worth noting that users who constrain their instance types with a hierarchical structure that prioritizes larger instances should take care when placing weights on these instance types that would order expensive instance types before less expensive ones.\n\n**Recommendation:** Document that placing a high number of constraints on your provisioners can lead to high cost for user nodes in certain scenarios."
  },
  {
    "path": "designs/runtime-defaulting.md",
    "content": "# Parameter Defaulting  \n(IP Family, Bare Metal, and Instance Types)\n\n## Goals\n\n* A consistent or understood approach to defaulting provisioner parameters\n* A path forward for Karpenter IPv6 support\n* A path forward for Karpenter Bare Metal support\n* Agree on Instance Types overrides\n\n\n**NOTE**: When you see 👀 , there’s a decision or discussion point. \n\n## Background\n\nThere have been several occurrences of adding a new field to the Provisioner where we have questioned whether the parameter should be defaulted at runtime (not mutated by our defaulting webhook) or if it should have a persisted default (mutated on provisioner create/update by the defaulting webhook). Based on previous parameter implementations such as `AMIFamily`,  `BlockDeviceMappings` and `MetadataOptions` in the AWS Cloud Provider, we have chosen runtime defaulting.  Outside of the AWS Cloud Provider spec, the Requirements section of the Provisioner Spec uses a mixture of runtime defaulting and persisted defaults. Both `[kubernetes.io/arch](http://kubernetes.io/arch)` and `[kubernetes.io/capacity-type](http://kubernetes.io/capacity-type)` requirements persist the defaults with amd64 and on-demand, respectively. The `node.kubernetes.io/instance-type` is runtime defaulted using an opinionated filter in the cloud provider that is currently not overridable. \n\n## Defaulting Examples\n\nIf a user does not provide an `AMIFamily` in their Provisioner, then Karpenter will default to using `AL2` without writing that default to the Provisioner. Likewise, if `MetadataOptions` is not specified in a Provisioner, then Karpenter will apply a set of default options that is not visible to the user in the Provisioner.  \n\n**Actual Spec:**\n\n```\nspec:\n   provider:\n     apiVersion: extensions.karpenter.sh/v1alpha1\n     instanceProfile: KarpenterNodeInstanceProfile-karpenter-demo\n     kind: AWS\n     securityGroupSelector:\n       kubernetes.io/cluster/karpenter-demo: '*'\n     subnetSelector:\n       kubernetes.io/cluster/karpenter-demo: '*'\n```\n\n**Inferred Spec (not persisted):**\n\n```\nspec:\n   provider:\n **amiFamily: AL2\n     metadataOptions:\n       httpEndpoint: enabled\n       httpProtocolIPv6: disabled\n       httpPutResponseHopLimit: 2\n       httpTokens: required**\n     apiVersion: extensions.karpenter.sh/v1alpha1\n     instanceProfile: KarpenterNodeInstanceProfile-karpenter-demo\n     kind: AWS\n     securityGroupSelector:\n       kubernetes.io/cluster/karpenter-demo: '*'\n     subnetSelector:\n       kubernetes.io/cluster/karpenter-demo: '*'\n```\n\n\nIn a more complex example, `BlockDeviceMappings` are runtime defaulted but a different default is applied depending on which `AMIFamily` is specified. If the `AL2` `AMIFamily` is specified in the Provisioner, then one block device mapping is defaulted. If the `Bottlerocket` `AMIFamily` is specified, then two block device mappings are defaulted.  If a user would elect to override Karpenter’s runtime defaults, they can specify `BlockDeviceMappings` in the Provisioner spec. However, once `BlockDeviceMappings` are explicitly provided, Karpenter will respect the exact mappings provided even if they would result in an invalid instance configuration.   \n\n**Actual Spec (AL2):**\n\n```\nspec:\n   provider:\n     amiFamily: AL2\n     apiVersion: extensions.karpenter.sh/v1alpha1\n     instanceProfile: KarpenterNodeInstanceProfile-karpenter-demo\n     kind: AWS\n     securityGroupSelector:\n       kubernetes.io/cluster/karpenter-demo: '*'\n     subnetSelector:\n       kubernetes.io/cluster/karpenter-demo: '*'\n```\n\n**Inferred Spec (AL2):**\n\n```\nspec:\n   provider:\n     amiFamily: AL2\n **blockDeviceMappings:\n     - deviceName: /dev/xvda\n       ebs:\n         volumeSize: 20G\n         volumeType: gp3\n         encrypted: true**\n     apiVersion: extensions.karpenter.sh/v1alpha1\n     instanceProfile: KarpenterNodeInstanceProfile-karpenter-demo\n     kind: AWS\n     securityGroupSelector:\n       kubernetes.io/cluster/karpenter-demo: '*'\n     subnetSelector:\n       kubernetes.io/cluster/karpenter-demo: '*'\n```\n\n**Actual Spec (Bottlerocket):**\n\n```\nspec:\n   provider:\n     amiFamily: Bottlerocket\n     apiVersion: extensions.karpenter.sh/v1alpha1\n     instanceProfile: KarpenterNodeInstanceProfile-karpenter-demo\n     kind: AWS\n     securityGroupSelector:\n       kubernetes.io/cluster/karpenter-demo: '*'\n     subnetSelector:\n       kubernetes.io/cluster/karpenter-demo: '*'\n```\n\n**Inferred Spec (Bottlerocket):**\n\n```\nspec:\n   provider:\n     amiFamily: Bottlerocket\n**     blockDeviceMappings****:**\n**     ****-**** deviceName****:**** ****/dev/****xvda**\n**       ebs****:**\n**         volumeSize****:**** 4****G**\n**         volumeType****:**** gp3**\n**         encrypted****:**** ****true\n     - deviceName: /dev/xvdb\n       ebs:\n         volumeSize: 20G\n         volumeType: gp3\n         encrypted: true**\n     apiVersion: extensions.karpenter.sh/v1alpha1\n     instanceProfile: KarpenterNodeInstanceProfile-karpenter-demo\n     kind: AWS\n     securityGroupSelector:\n       kubernetes.io/cluster/karpenter-demo: '*'\n     subnetSelector:\n       kubernetes.io/cluster/karpenter-demo: '*'\n```\n\n## Considerations:\n\nThere are several factors to consider when deciding on runtime defaulting and persistent defaults through defaulting webhooks.\n\n### 1.  Compatibility Between Karpenter Versions\n\nSince runtime defaults are reevaluated when Karpenter encounters a `Provisioner` during processing, the defaults could change between versions of the Karpenter binary. For example, today we default `AMIFamily` to `AL2` when it is not explicitly specified in the `Provisioner`. There is the possibility that a new version of Karpenter would change that default to `Bottlerocket`. A user may be surprised that the same `Provisioner` starts launching `Bottlerocket` nodes after the upgrade. \n\nIf persistent defaulting was used instead, Karpenter’s defaulting webhook would apply the default for the version of Karpenter that was currently running when the Provisioner was created. In this case, if we changed the default `AMIFamily` to `Bottlerocket` in a new version of Karpenter, any provisioners created before the upgrade would retain the `AL2` `AMIFamily` since it would not run the defaulting webhook because a value is already present for the field.\n\n👀  If we decide to change a runtime defaulted parameter, it may make sense to increment the `Provisioner` CRD version and migrate the `Provisioner` with a persisted default value that matches the previous runtime default.\n\n### 2. Provisioner Verbosity \n\nRuntime defaulting has the advantage that it keeps the `Provisioner` spec fairly clean looking. This is an important consideration for Karpenter since one of the value propositions with Karpenter is its ease of use. For users that don’t need to modify `MetadataOptions` or `BlockDeviceMappings` (or are not even aware of what those concepts are), the Provisioner spec is simple, readable, and just works ™️.   \n\nOn the other hand, if you are a user that needs to edit those parameters, it is difficult to figure out what the runtime defaults are since they are not written to the `Provisioner` spec. For example, if a user onboards to Karpenter with a simple use-case that does not require customizing a `Provisioner` parameter like `BlockDeviceMappings`, but then wants to onboard another ML workload that requires adjusting the `BlockDeviceMappings`, the modification is more difficult since you would need to understand how to configure `BlockDeviceMappings` for the specific AMI that you are using. If the defaults were persisted to the `Provisioner`, you could simply adjust the parameters you needed such as `volumeSize` and not need to worry about the `volumeType`. \n\n👀  A potential solution to making it easier to find the runtime defaults Karpenter is using is to show the full inferred parameters in the `Provisioner` status field. The other obvious solution is to ensure our documentation is up-to-date.   \n\nThere are limitations to how useful persisting defaults would actually be for users. If a user is bringing their own AMI, then they would need to understand how to configure the `BlockDeviceMappings` or any other AMI specific parameter since our persisted defaults would be specific to the AMI Families we offer. Also, since we are planning to expand the number of Launch Template parameters Karpenter supports natively, persistent defaulting could have serious implications on the readability of the `Provisioner` spec. \n\n## IP Family \n\nThere is currently a [PR](https://github.com/aws/karpenter/pull/1232) out to support IPv6 within Karpenter. Rather than adding a parameter to the Provisioner that would expose `IPFamily`, the PR attempts to auto-discover the IP Family by looking up the kube-dns service IP and checking if it is an IPv4 or IPv6 address. For EKS and kOps, this seems to work well since both k8s providers do not support dual stack clusters. The EKS bootstrap.sh script and the Bottlerocket configuration file only accept 1 cluster DNS IP that would definitively make the node an IPv4 node or an IPv6 node.  \n\n👀  **Options**:\n\n1. We can proceed with a completely auto-discovered approach where there is no `IPFamily` parameter in the Provisioner.\n2. An `IPFamily` field could be added to the `Provisioner` spec and we could auto-discover for runtime defaulting purposes. Users could then override the parameter if they wanted to force a certain IP configuration.\n3. An `IPFamily` field could be added to the Provisioner that we default to a static value and force users to override for the IPv6 case. \n\n**Recommendation:** \nI would lean towards option 2 where we do the right thing the vast majority of the time (auto-discover), but if for some reason we are not accounting for a specific setup and discover incorrectly, the user is empowered to manually override it. \n\n### Related Parameter Defaulting \n\nIf a cluster is discovered to be IPv6 by the mechanism mentioned previously, then some of Karpenter’s runtime defaulted parameters would not produce a valid node configuration. One parameter is the default instance types list. Only Nitro instance types (>= Gen 5) support IPv6 prefix delegation which limits the provisioner’s default instance types to bin-pack onto. Another parameter that would need to be adjusted is the `MetadataOptions`. Karpenter runtime defaults `MetadataOptions` to disable the IPv6 EC2 Instance Metadata Service (IMDS) because the IPv6 endpoint is only available on Nitro instance types and causes a CreateFleet API error if enabled for non-nitro instance types. \n\n👀  **Options**:\n\n1. We do nothing and expect the user to provide a compatible list of instance types with proper `MetadataOptions` when using IPv6. We could always help in docs and recommend tooling like the ec2-instance-selector for proper node selection.\n2. We dynamically adjust the runtime defaults based on the other parameters. In the IPv6 case, we would default `MetadataOptions` to enable the IPv6 endpoint and we would filter the instance types to only use Nitro. The options would be overridden if specified directly in the Provisioner spec.\n\n**Recommendation:** \nI would lean towards option 2 where runtime defaults are adjusted based on other parameters to present a “just works™️” experience. The thinking behind this recommendation is that users that are not setting parameters like `MetadataOptions` and `InstanceTypes` do not want to deal with the nitty gritty details of configuring dependent systems to fulfill their goal of an IPv6 cluster. If they have already conveyed opinions on these dependent parameters, then they assume full responsibility over them (i.e. setting instance type requirements).\n\n## Instance Types - Bare Metal\n\nAnother runtime defaulted parameter is the Instance Types Requirements field. Karpenter applies an opinionated filter (mostly M*, C*, R*, A*, T>2, and I* but not metal) over the universe of all instance types. Bare Metal instance types allow users to run their own hypervisors which non-metal instance types do not support. There is no difference between hardware specs and cost for bare-metal instance types compared to the largest instance type of an instance family (i.e. m5.24xlarge == m5.metal). However, bare-metal instance types boot significantly slower. \n\nWhen Karpenter provisions capacity with EC2 Fleet, it uses a “lowest-price” allocation strategy for on-demand instances and “capacity-optimized-prioritized” for spot instances. Since metal instance types are the same price as the largest non-metal instance type in the family, Fleet does not prefer the non-metal and may randomly choose which one to provision. In the “capacity-optimized-prioritized” case, Fleet could choose either one depending on how much EC2 capacity is available for each. \n\nUsers have expressed interest in using Firecracker VMs within k8s to strengthen the pod security boundary for multi-tenant PaaS use-cases. In order for Karpenter to support bare metal, we would need to allow instance types outside of our default filter. Currently, even if a user of Karpenter specified a metal instance type in the `Requirements` for instance-types, we will not use it. \n\n👀  Requirements operate differently than the other parameters discussed in this doc since operators like `In` and `NotIn` are supported. Since we runtime default Instance Types to the list provided by the Cloud Provider, a user would expect that adding a `NotIn` to exclude an instance type from the defaulted list would not add additional instance types (i.e. override the opinionated filter). On the other hand, if an `In` is specified, we should give control over the universe of instance types available even if it expands the defaulted, opinionated filter. \n\n👀  **Options****:**\n\n\n1. An Explicit Parameter on the Provisioner or Pod:\n    Karpenter could support a parameter that signals to provisioning that bare-metal instance types are required and would adjust the runtime default to use only bare metal instance types when packing. The parameter would need to be Karpenter specific similar to our `karpenter.sh/capacity-type` for `spot` and `on-demand`, since Kubernetes does not have a well-known label denoting a bare metal requirement.\n    \n2. Explicitly List Bare Metal Instance Types Requirements:\n    Karpenter could require a user to explicitly list the bare metal instance types in the provisioner’s requirements to override the runtime default that excludes bare metal instance types. This option is more in-line with how the other runtime defaulting parameters work today and discussed in previous sections of this document. \n\n**Recommendation:**\nI would lean towards option 2 and force the user to override the instance types in order to use bare metal. I think this use-case is special enough to warrant more work from the user to configure. There are other steps a user would need to take like labeling the nodes with a bare metal label and using a node selector on their pods in addition to setting up containerd-firecracker or some other special software to setup the hypervisor on the Karpenter provisioned nodes.\n\n\n## Discussion Notes and Action Items\n\n* Show runtime defaults in Status field of the Provisioner\n* Proceed w/ IPv6 auto-discovery w/o a parameter in the Provisioner (CP) \n    * This is a 2-way door, we can always add the field later\n* Bare Metal support by de-prioritizing in the CP (similar to GPU handling)\n* Allow for expansion of Instance Types via “IN” Requirements\n* Follow-up discussion on parameter default changes \n\n"
  },
  {
    "path": "designs/termination.md",
    "content": "# Karpenter Graceful Node Termination\n*Authors: njtran@*\n## Overview\nKarpenter's scale down implementation is currently a proof of concept. The reallocation controller implements two actions. First, nodes are elected for termination when there aren't any pods scheduled to them. Second, nodes are cordoned and drained and deleted. Node termination follows cordon and drain [best practices](https://kubernetes.io/docs/tasks/administer-cluster/safely-drain-node/).\n\nThis design explores improvements to the termination process and proposes the separation of this logic into a new termination controller, installed as part of Karpenter.\n\nThe existing reallocation controller will only be responsible for electing nodes for termination, which will be explored in future designs.\n\n## Requirements\n* Terminating a node with Karpenter will not leak the instance\n* If termination is requested, the node will eventually terminate\n* Users will be able to implement node deletion safeguards\n* Termination mechanisms will rate-limit at the pod evictions\n\n## Termination Controller\nThe termination controller is responsible for gracefully terminating instances. The termination controller draws ideas from the [aws-node-termination-handler](https://github.com/aws/aws-node-termination-handler), [Cluster Autoscaler](https://github.com/kubernetes/autoscaler/blob/master/cluster-autoscaler/FAQ.md#what-types-of-pods-can-prevent-ca-from-removing-a-node), and [best practices](https://kubernetes.io/docs/tasks/administer-cluster/safely-drain-node/) on drain given by the Kubernetes community.\n\n### Termination Workflow\nThe current termination workflow finds nodes with the label `karpenter.sh/lifecycle-phase: terminable` then cordons, drains, and deletes them. This naively handles a few error cases, has no user safeguards, and makes no effort to rate limit. The new workflow will improve these but continue to monitor nodes with the same labels.\n\nThe new termination process will begin with a node that receives a delete request. After Karpenter validates the request, a Karpenter mutating webhook will add the Karpenter [finalizer](https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/#finalizers) to the node. Then, we cordon and begin draining the node. After no pods remain, we terminate the instance in the cloud provider, then remove the Karpenter finalizer. This will result in the APIServer deleting the node object.\n![](../website/static/termination-state-machine.png)\n### Triggering Termination\n\nThe current termination process acts on a reconcile loop. We will change the termination controller to watch nodes and manage the Karpenter [finalizer](https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/#finalizers), making it responsible for all node termination and pod eviction logic.\n\nFinalizers allow controllers to implement asynchronous pre-deletion hooks and are commonly used with CRDs like Karpenter’s Provisioners. Today, a user can call `kubectl delete node` to delete a node object, but will end up leaking the underlying instance by only deleting the node object in the cluster. We will use finalizers to gracefully terminate underlying instances before Karpenter provisioned nodes are deleted, preventing instance leaking. Relying on `kubectl` for terminations gives the user more control over their cluster and a Kubernetes-native way of deleting nodes - as opposed to the status quo  of doing it manually in a cloud provider's console.\n\nWe will additionally implement a Karpenter [Webhook](https://kubernetes.io/docs/reference/access-authn-authz/extensible-admission-controllers/) to validate node deletion requests and add finalizers to nodes that have been cleared for deletion. If the request will not violate a Node Disruption Budget (discussed below) and Karpenter is installed, the webhook will add the Karpenter finalizer to nodes and then allow the deletion request to go through, triggering the workflow.\n\n### Eviction\n\nNode termination will only succeed when all pods are evicted. We use the [Kubernetes Eviction API](https://kubernetes.io/docs/tasks/administer-cluster/safely-drain-node/#eviction-api) to handle eviction logic and [Pod Disruption Budget (PDB)](https://kubernetes.io/docs/tasks/run-application/configure-pdb/) violation errors.\n\nThe Kubernetes Eviction API will only return a 200, 429, or 500 for each eviction call. A 200 indicates a successful request, requiring no error handling. A 429 indicates that this call would violate a PDB, and a 500 indicates a misconfiguration, such as multiple PDBs referring to the same pod. In the case of a 429 or 500, we will exponentially back off, sending a log in the Karpenter pod.  It’s possible (but very rare) that we violate a PDB with this API by sending multiple eviction requests to different master nodes simultaneously only if each eviction request would not violate a PDB individually but will when combined. This is an API Server limitation and motivated the decision to evict pods serially per PDB to further reduce this chance (discussed below).\n\nWhile there is the [rare case](https://kubernetes.io/docs/tasks/administer-cluster/safely-drain-node/#stuck-evictions) where stuck evictions require forceful termination, forcefully deleting a pod can have harsh repercussions in many cases. If evicting the pod would violate a PDB, it would mean not supporting PDBs. In addition, terminating pods that cannot afford downtime or [critical pods](https://kubernetes.io/docs/tasks/administer-cluster/guaranteed-scheduling-critical-addon-pods/#marking-pod-as-critical) can have adverse effects on production workloads. Also, if a pod is owned by a StatefulSet, there is never a reason to forcibly delete, as mentioned [here](https://kubernetes.io/docs/tasks/run-application/force-delete-stateful-set-pod/). In the case that a user wants to forcefully terminate a pod, the user can terminate it with `kubectl delete pod <PODNAME> --grace-period=0 --force --namespace <NAMESPACE>` with the information in the Karpenter logs.\n\nAfter all pods are evicted, we will attempt to terminate the node. If the cloud provider's API returns an error, preventing instance termination, we will log the error in the Karpenter pod and in the node status then exponentially back off and retry.\n\nIn the case where a user has enabled termination protection for their underlying instance, Karpenter will be unable to terminate the instance until the termination protection is removed. Since we only terminate instances corresponding to  Karpenter provisioned nodes, a user would have to manually set this protection after Karpenter creates it. In this case, we depend on the user to resolve this with the node status and Karpenter logs.\n\n### User Configuration\n\nThe termination controller and associated webhooks will come installed with Karpenter, requiring no additional configuration on the user’s part.\n\nWe will allow users to specify a `karpenter.sh/do-not-evict` label on their pods, guaranteeing that we will not evict certain pods. A node with `do-not-evict` pods will cordon but wait to drain until all `do-not-evict` pods are gone. This way, the cluster will continue to utilize its existing capacity until the `do-not-evict` pods terminate. Users can use Karpenter’s scheduling logic to colocate pods with this label onto similar nodes to load balance these pods.\n\n### Parallel Node Termination\n\nThe termination controller will be able to drain and terminate multiple nodes in parallel. We will expedite this process while rate limiting node termination to protect against throttling.\n\nWe introduce an optional cluster-scoped CRD, the Node Disruption Budget (NDB), a [Pod Disruption Budget (PDB)](https://kubernetes.io/docs/concepts/workloads/pods/disruptions/#pod-disruption-budgets) for nodes. A user can scope an NDB to Karpenter provisioned nodes through a label selector, since nodes are created with their Provisioner’s labels. `Unavailable` nodes will be `NotReady` or have `metadata.DeletionTimestamp` set. `Available` nodes will be `Ready`.\n\nA termination is allowed if at least minAvailable nodes selected by a selector will still be available after the termination. For example, you can prevent all terminations by specifying “100%”. A termination is also allowed if at most maxUnavailable nodes selected by selector are unavailable after the termination. For example, one can prevent all terminations by specifying 0. The `minAvailable` and `maxUnavailable` fields are mutually exclusive.\n\nNote that this is an experimental idea, and will require robustness improvements for future features such as defragmentation, over-provisioning, and more.\n\n[PodDisruptionBudgetSpec](https://pkg.go.dev/k8s.io/api/policy/v1beta1#PodDisruptionBudgetSpec) for reference.\n\n```{go}\n// .go\ntype NodeDisruptionBudget struct {\n   // +optional\n   MinAvailable   *intstr.IntOrString   `json:\"minAvailable,omitempty\" protobuf:\"bytes,1,opt,name=minAvailable\"`\n   // Node Selector\n   // Label query over nodes managed by the Disruption Budget\n   // A null selector selects no nodes.\n   // An empty selector ({}) also selects no nodes, which differs from standard behavior of selecting all nodes.\n   // +patchStrategy=replace\n   // +optional\n   Selector       *metav1.LabelSelector `json:\"selector,omitempty\" patchStrategy:\"replace\" protobuf:\"bytes,2,opt,name=selector\"`\n   // +optional\n   MaxUnavailable *intstr.IntOrString   `json:\"maxUnavailable,omitempty\" protobuf:\"bytes,1,opt,name=minAvailable\"`\n}\n```\n\n```{yaml}\n# .yaml\napiVersion: termination.karpenter.sh/v1alpha2\nkind: NodeDisruptionBudget\nmetadata:\n  name: nodeBudget\nspec:\n  minAvailable: 80%\n  selector:\n    matchLabels:\n      karpenter.sh/name: default\n      karpenter.sh/namespace: default\n  maxUnavailable: 5%\n```\n\nSince most eviction failures come from a PDB violation, we will queue up evictions serially per PDB. We will use the PDB’s selector to distinguish eviction queues. Evictions will run asynchronously and exponentially back off and retry if they fail. This way, evicting pods will only be limited by other evicting pods managed by the same PDB, since each pod can only belong to one PDB. Pods that have a `do-not-evict` label will not be queued up for eviction, as we prevent the node with a `do-not-evict` pod from draining.\n\n### Karpenter Availability and Termination Cases\n\nKarpenter is a node autoscaler, so it does not take responsibility for maintaining the states of the capacity it provisions. In this case, if a user deletes a Provisioner Spec, we will not delete its provisioned capacity. This is in direct contrast to the idea of node groups or pools, which delete managed nodes when the group or pool is deleted.\n\nIf a user wants to manually delete a Karpenter provisioned node, this design allows the user to do it safely if Karpenter is installed. Otherwise, the user will need to clean up their resources themselves.\n\nKubernetes is unable to delete nodes that have finalizers on them. For this reason, we chose to add the Karpenter finalizer only after a delete request is validated. Yet, in the rare case that Karpenter is uninstalled while a node deletion request is processing, to finish terminating the node, the user must either: reinstall Karpenter to resume the termination logic or remove the Karpenter finalizer from the node, allowing the API Server to delete then node.\n\nIf a node is unable to become ready for `15 minutes`, we will terminate the node. As we don’t have the ability or responsibility to diagnose the problem, we would worst case terminate a soon-to-be-healthy node. In this case, the orphaned pod(s) would trigger creation of another node.\n\n## Appendix\n\n### FAQ\n\n* How does Cluster Autoscaler handle terminations?\n    * By default, Cluster Autoscaler scales down nodes in a cluster if they have been underutilized (resource usage is <50%) for an extended period of time (10 minutes) and their pods can be placed on other existing nodes. [More configuration options](https://github.com/kubernetes/autoscaler/blob/master/cluster-autoscaler/FAQ.md#what-are-the-parameters-to-ca)\n* How can I migrate capacity from one Provisioner to another?\n    * You can do this manually by changing node labels to match a Provisioner's labels\n    * Or you can use Karpenter to create a new Provisioner, delete the old Provisioner, then delete undesired nodes. The new Provisioner will create capacity for the orphaned pending pods.\n* How can I tell when the termination controller is failing to execute some work?\n    * A node’s labels will dictate what the termination controller is doing. If a pod is failing to evict because of a misconfiguration, this will be in the Karpenter logs. In addition, if an instance is unable to be terminated, this will also be reflected in the Karpenter logs.\n\n### Potential Scale Down Features\n\nIn the future, we may implement the following to account for more scale down situations. These are not in scope, but are included to show how this can work.\n\n* Interruption: If a user is using preemptible instances and the instance is interrupted\n* Upgrade: If a node has an old version, and we want to upgrade it\n* Defragmentation: If we actively do bin-packing (not just on underutilized nodes) and find a better bin-packing solution\n* Garbage collection: If nodes become hanging or too old, and we decide to clean the resources up\n* Recycle: If users want to recycle their nodes regularly\n\n### Asynchronous Termination Clarifications\n\nWhen pods are requested to be evicted, they are put into an Eviction Queue specific to the PDB handling the pods. The controller will call evictions serially that run asynchronously and exponentially back off and retry if they fail.\n\nFinalizers are also handled asynchronously. Adding in a Karpenter finalizer doesn’t prevent or delay other controllers from executing finalizer logic on the same node.\n"
  },
  {
    "path": "designs/unmanaged-launch-template-removal.md",
    "content": "# RFC: Unmanaged LaunchTemplate Removal\n\n## Overview\n\nEC2 fleet requires a launch template to be created and referenced in the CreateFleet call prior to the launch of an instance. Karpenter supports two methods for the user to reference this launch template:\n\n1. Managed - Provisioned, maintained, and deleted by the Karpenter controllers\n2. Unmanaged (currently deprecated) - Provisioned, maintained, and deleted by the user\n\nKarpenter will shortly be promoting its api surface to v1beta1, which will result in a number of breaking changes that involve a user’s manual interaction with Karpenter’s configuration.  Because users are already having to go through a manual breaking change process with the API version promotion, it’s a natural time to look at the deprecation or full removal of fields within the current Karpenter Provisioner and AWSNodeTemplate. One of these fields is the `spec.launchTemplateName`, which allows users to reference their own, unmanaged launch templates.\n\nUnmanaged launch template support has been present in the project since the beginning of the project, but it proves to have sharp edges for some users as well as various incompatibilities with other AWSNodeTemplate API surface. These limitations are documented in the [Limitations](#limitations) section below.\n\n## Limitations\n\n1. 👎 [incompatibility] AMISelection logic doesn’t work, implying that AMI drift is not supported as well\n    1. [mitigation] CreateFleet supports AMI overrides so we could potentially workaround this limitation long-term\n2. 👎 [sharp edge] Multi-architecture support doesn’t work, meaning that it’s the responsibility of the user to enforce architecture compatibility on the Provisioner requirements manually\n    1. [mitigation] CreateFleet supports AMI overrides so we could potentially workaround this limitation long-term\n3. 👎 [incompatibility] SecurityGroup selection logic doesn’t work, implying that security group drift is also not supported\n4. 👎 [incompatibility] InstanceProfile isn’t known to Karpenter, meaning that the passed instance profile can’t be known by Karpenter and that the PassRole permission on the InstanceProfileRole has to be managed by the user\n5. 👎👎 [sharp edge] Ephemeral Storage blockDeviceMappings are currently not discovered or known, meaning that Karpenter can’t know how much ephemeral storage exists on the instance once it launches, implying that pod scheduling may be way off: [#3579](https://github.com/aws/karpenter/issues/3579)\n6. 👎👎 [incompatibility] Dynamic ephemeral storage won’t work with the current `launchTemplateName` implementation for the same reason as described in #5\n7. 👎 [incompatibility] Automatic userData injection doesn’t work, meaning that the user has to manage the userData as it changes between K8s versions\n8. 👎 [incompatibility] Reserved ENIs support doesn’t work to auto-reduce maxPods based on user-defined reserved ENIs for custom networking\n\n## Options\n\nWe need to come to consensus on whether we should keep, enhance, or remove the `spec.launchTemplateName` field in the AWSNodeTemplate. Below lays out the three options, including the considerations for pursuing each one.\n\n### Option 1: Keep `.spec.launchTemplateName` with no change\n\n#### Considerations\n\n1. 👎👎 The current externally-referenced `launchTemplateName` comes with inherent [Limitations](#limitations) as listed above\n2. 👎 The `spec.launchTemplateName` value has already been marked as deprecated (or supported for backwards compatibility) since Karpenter version `v0.7.0 `(released on May 14, 2022) so users have been told to get off of this field\n3. 👎 Drift for Launch Template details would have to be achieved through either changing the launch template name. Karpenter could potentially discover the launch template version, allowing there to be launch template version drift; however, this is not currently implemented as a feature.\n4. 👍 Users who are used to launch templates or have security organizations who have already approved and vetted their launch templates don’t have additional work to do\n\n### Option 2: Keep `.spec.launchTemplateName` and support discovery\n\nKarpenter could continue to support `.spec.launchTemplateName` while supporting discovery of some of the details that are currently listed in the [Limitations](#limitations) section above. Discoverable details would potentially include: AMIs used with architecture, security groups, launch template version, ephemeral block device mappings. Designing the details of how this would occur is out of scope of this document; however, this option should be mentioned as it would effectively cut down on some of the limitations listed above.\n\n#### Considerations\n\n1. 👎👎 The design for discovery of launch template details is not currently scoped for Karpenter v1. Adding this into scope would extend existing timelines to launch v1beta1\n2. 👎 Some aspects of Karpenter feature support are still not achievable, even with launch templates and discovery, such as dynamic ephemeral storage support\n3. 👍 Users who are used to launch templates or have security organizations who have already approved and vetted their launch templates don’t have additional work to do\n\n### [Recommended] Option 3: Remove `.spec.launchTemplateName`\n\n#### Considerations\n\n1. 👍👍 Removing `spec.launchTemplateName` allows us to add `launchTemplateName` back at a later time without making a breaking change. Keeping `launchTemplateName` in the spec causes us to have to make a breaking change to remove the field if we find we don't want to support this down the line\n2. 👍 Dropping `spec.launchTemplateName` down the line would require a bump to Karpenter CRDs `v2` and a breaking change\n3. 👍 Supporting `spec.launchTemplateName` as a deprecated field while not documenting it is a non-viable solution. This is because any API surface that we include in v1 should be considered supported.\n4. 👎 Some users are still asking for launch template support, due to existing infrastructure and automation built around the EC2 launch templates ([#3369](https://github.com/aws/karpenter/issues/3369)). These users would have to do the migration work to migrate off of these templates to the NodeTemplate\n    1. [mitigation] We could provide a tool that converts a launch template, referenced by name/id to be converted to the NodeTemplate representation of the same\n\n"
  },
  {
    "path": "designs/v1-api.md",
    "content": "# Karpenter v1 API\n\n_This RFC is an extension of the [v1 API RFC](https://github.com/kubernetes-sigs/karpenter/blob/main/designs/v1-api.md) that is merged in the [`kubernetes-sigs/karpenter` repo](https://github.com/kubernetes-sigs/karpenter)._\n\n## Overview\n\nKarpenter released the beta version of its APIs and features in October 2023. The intention behind this beta was that we would be able to determine the final set of changes and feature adds that we wanted to add to Karpenter before we considered Karpenter feature-complete. The list below details the features that Karpenter has on its roadmap before Karpenter becomes feature complete and stable at v1.\n\n### Categorization\n\nThis list represents the minimal set of changes that are needed to ensure proper operational excellence, feature completeness, and stability by v1. For a change to make it on this list, it must meet one of the following criteria:\n\n1. Breaking: The feature requires changes or removals from the API that would be considered breaking after a bump to v1\n2. Stability: The feature ensures proper operational excellence for behavior that is leaky or has race conditions in the beta state\n3. Planned Deprecations: The feature cleans-up deprecations that were previously planned the project\n\n## EC2NodeClass API\n\n```\napiVersion: karpenter.k8s.aws/v1\nkind: EC2NodeClass\nmetadata:\n  name: default\nspec:\n  kubelet:\n    podsPerCore: 2\n    maxPods: 20\n    systemReserved:\n        cpu: 100m\n        memory: 100Mi\n        ephemeral-storage: 1Gi\n    kubeReserved:\n        cpu: 200m\n        memory: 100Mi\n        ephemeral-storage: 3Gi\n    evictionHard:\n        memory.available: 5%\n        nodefs.available: 10%\n        nodefs.inodesFree: 10%\n    evictionSoft:\n        memory.available: 500Mi\n        nodefs.available: 15%\n        nodefs.inodesFree: 15%\n   evictionSoftGracePeriod:\n       memory.available: 1m\n       nodefs.available: 1m30s\n       nodefs.inodesFree: 2m\n   evictionMaxPodGracePeriod: 60\n   imageGCHighThresholdPercent: 85\n   imageGCLowThresholdPercent: 80\n   cpuCFSQuota: true\n   clusterDNS: [\"10.0.1.100\"]\n  subnetSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\"\n    - id: subnet-09fa4a0a8f233a921\n  securityGroupSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\"\n    - name: my-security-group\n    - id: sg-063d7acfb4b06c82c\n  amiFamily: AL2023\n  amiSelectorTerms:\n    - alias: al2023@v20240625\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\"\n    - name: my-ami\n    - id: ami-123\n  role: \"KarpenterNodeRole-${CLUSTER_NAME}\"\n  instanceProfile: \"KarpenterNodeInstanceProfile-${CLUSTER_NAME}\"\n  userData: |\n    echo \"Hello world\"\n  tags:\n    team: team-a\n    app: team-a-app\n  instanceStorePolicy: RAID0\n  metadataOptions:\n    httpEndpoint: enabled\n    httpProtocolIPv6: disabled\n    httpPutResponseHopLimit: 1 # This is changed to disable IMDS access from containers not on the host network\n    httpTokens: required\n  blockDeviceMappings:\n    - deviceName: /dev/xvda\n      ebs:\n        volumeSize: 100Gi\n        volumeType: gp3\n        iops: 10000\n        encrypted: true\n        kmsKeyID: \"1234abcd-12ab-34cd-56ef-1234567890ab\"\n        deleteOnTermination: true\n        throughput: 125\n        snapshotID: snap-0123456789\n  detailedMonitoring: **true**\nstatus:\n  subnets:\n    - id: subnet-0a462d98193ff9fac\n      zone: us-east-2b\n    - id: subnet-0322dfafd76a609b6\n      zone: us-east-2c\n    - id: subnet-0727ef01daf4ac9fe\n      zone: us-east-2b\n    - id: subnet-00c99aeafe2a70304\n      zone: us-east-2a\n    - id: subnet-023b232fd5eb0028e\n      zone: us-east-2c\n    - id: subnet-03941e7ad6afeaa72\n      zone: us-east-2a\n  securityGroups:\n    - id: sg-041513b454818610b\n      name: ClusterSharedNodeSecurityGroup\n    - id: sg-0286715698b894bca\n      name: ControlPlaneSecurityGroup-1AQ073TSAAPW\n  amis:\n    - id: ami-01234567890123456\n      name: custom-ami-amd64\n      requirements:\n        - key: kubernetes.io/arch\n          operator: In\n          values:\n            - amd64\n    - id: ami-01234567890123456\n      name: custom-ami-arm64\n      requirements:\n        - key: kubernetes.io/arch\n          operator: In\n          values:\n            - arm64\n  instanceProfile: \"${CLUSTER_NAME}-0123456778901234567789\"\n  conditions:\n    - lastTransitionTime: \"2024-02-02T19:54:34Z\"\n      status: \"True\"\n      type: InstanceProfileReady\n    - lastTransitionTime: \"2024-02-02T19:54:34Z\"\n      status: \"True\"\n      type: SubnetsReady\n    - lastTransitionTime: \"2024-02-02T19:54:34Z\"\n      status: \"True\"\n      type: SecurityGroupsReady\n    - lastTransitionTime: \"2024-02-02T19:54:34Z\"\n      status: \"True\"\n      type: AMIsReady\n    - lastTransitionTime: \"2024-02-02T19:54:34Z\"\n      status: \"True\"\n      type: Ready\n```\n\n### Printer Columns\n\n**Category:** Stability, Breaking\n\n#### Current\n\n```\n➜  karpenter git:(main) ✗ k get ec2nodeclasses -o wide\nNAME      AGE\ndefault   2d8h\n```\n\n#### Proposed\n\n```\n➜  karpenter git:(main) ✗ k get ec2nodeclasses -o wide\nNAME     READY  AGE    ROLE\ndefault  True   2d8h   KarpenterNodeRole-test-cluster\n```\n\n**Standard Columns**\n\n1. Name\n3. Ready - EC2NodeClasses now have status conditions that inform the user whether the EC2NodeClass has resolved all of its data and is “ready” to be used by a NodePool. This readiness should be easily viewable by users.\n4. Age\n\n**Wide Columns (-o wide)**\n\n1. Role - As a best practice, we are recommending that users use a Node role and let Karpenter create a managed instance profile on behalf of the customer. We should easily expose this role.\n\n#### Status Conditions\n\n**Category:** Stability\n\nDefining the complete set of status condition types that we will include on v1 launch is **out of scope** of this document and will be defined with more granularly in Karpenter’s Observability design. Minimally for v1, we will add a `Ready` condition so that we can determine whether a EC2NodeClass can be used by a NodePool during scheduling. More robustly, we will define status conditions that ensure that each required “concept” that’s needed for an instance launch is resolved e.g. InstanceProfile resolved, Subnet resolved, Security Groups resolved, etc.\n\n#### Require AMISelectorTerms\n\n**Category:** Stability, Breaking\n\nWhen specifying AMIFamily with no AMISelectorTerms, users are currently configured to automatically update AMIs when a new version of the EKS-optimized image in that family is released. Existing nodes on older versions of the AMI will drift to the newer version to meet the desired state of the EC2NodeClass.\n\nThis works well in pre-prod environments where it’s nice to get auto-upgraded to the latest version for testing but is extremely risky in production environments. [Karpenter now recommends to users to pin AMIs in their production environments](https://karpenter.sh/docs/tasks/managing-amis/#option-1-manage-how-amis-are-tested-and-rolled-out:~:text=The%20safest%20way%2C%20and%20the%20one%20we%20recommend%2C%20for%20ensuring%20that%20a%20new%20AMI%20doesn%E2%80%99t%20break%20your%20workloads%20is%20to%20test%20it%20before%20putting%20it%20into%20production); however, it’s still possible to be caught by surprise today that Karpenter has this behavior when you deploy a EC2NodeClass and NodePool with an AMIFamily. Most notably, this is different from eksctl and MNG, where they will get the latest AMI when you first deploy the node group, but will pin it at the point that you add it.\n\nWe no longer want to deal with potential confusion around whether nodes will get rolled or not when using an AMIFamily with no `amiSelectorTerms`. Instead, `amiSelectorTerms` will now be required and a new term type, `alias`, will be introduced which allows users to select an EKS optimized AMI. Each alias consists of an AMI family and a version. Users can set the version to `latest` to continue to get automatic upgrades, or pin to a specific version.\n\n#### Disable IMDS Access from Containers by Default\n\n**Category:** Stability, Breaking\n\nThe HTTPPutResponseHopLimit is [part of the instance metadata settings that are configured on the node on startup](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-options.html). This setting dictates how many hops a PUT request can take before it will be rejected by IMDS. For Kubernetes pods that live in another network namespace, this means that any pod that isn’t using `hostNetwork: true` [would need to have a HopLimit of 2 set in order to access IMDS](https://aws.amazon.com/about-aws/whats-new/2020/08/amazon-eks-supports-ec2-instance-metadata-service-v2/#:~:text=However%2C%20this%20limit%20is%20incompatible%20with%20containerized%20applications%20on%20Kubernetes%20that%20run%20in%20a%20separate%20network%20namespace%20from%20the%20instance). Opening up the node for pods to reach out to IMDS is an inherent security risk. If you are able to grab a token for IMDS, you can craft a request that gives the pod the same level of access as the instance profile which orchestrates the kubelet calls on the cluster.\n\nWe should constrain our pods to not have access to IMDS by default to not open up users to this security risk. This new default wouldn’t affect users who have already deployed EC2NodeClasses on their cluster. It would only affect new EC2NodeClasses.\n\n## Labels/Annotations/Tags\n\n#### karpenter.sh/managed-by (EC2 Instance Tag)\n\n**Category:** Planned Deprecations, Breaking\n\nKarpenter introduced the `karpenter.sh/managed-by` tag in v0.28.0 when migrating Karpenter over to NodeClaims (called Machines at the time). This migration was marked as “completed” when it tagged the instance in EC2 with the `karpenter.sh/managed-by` tag and stored the cluster name as the value. Since we have completed the NodeClaim migration, we no longer have a need for this tag; so, we can drop it.\n\nThis tag was only useful for scoping pod identity policies with ABAC, since it stored the cluster name in the value rather than `kubernetes.io/cluster/<cluser-name>` which stores the cluster name in the tag key. Session tags don’t work with tag keys, so we need some tag that we can recommend users to use to create pod identity policies with ABAC using OSS Karpenter.\n\nStarting in v1, Karpenter would use `eks:eks-cluster-name: <cluster-name>` for tagging and scoping instances, volumes, primary ENIs, etc. and would use `eks:eks-cluster-arn: <cluster-arn>` for tagging and scoping instance profiles that it creates."
  },
  {
    "path": "designs/v1-roadmap.md",
    "content": "# Karpenter v1 Roadmap\n\n_This RFC is an extension of the [v1 Roadmap RFC](https://github.com/kubernetes-sigs/karpenter/blob/main/designs/v1-roadmap.md) that is merged in the [`kubernetes-sigs/karpenter` repo](https://github.com/kubernetes-sigs/karpenter)._\n\n## Overview\n\nKarpenter released the beta version of its APIs and features in October 2023. The intention behind this beta was that we would be able to determine the final set of changes and feature adds that we wanted to add to Karpenter before we considered Karpenter feature-complete. The list below details the features that Karpenter has on its roadmap before Karpenter becomes feature complete and stable at v1.\n\n### Categorization\n\nThis list represents the minimal set of changes that are needed to ensure proper operational excellence, feature completeness, and stability by v1. For a change to make it on this list, it must meet one of the following criteria:\n\n1. Breaking: The feature requires changes or removals from the API that would be considered breaking after a bump to v1\n2. Stability: The feature ensures proper operational excellence for behavior that is leaky or has race conditions in the beta state\n3. Planned Deprecations: The feature cleans-up deprecations that were previously planned the project\n\n## Roadmap\n\n1. [v1 APIs](./v1-api)\n2. [Removing Ubuntu AMIFamily](#removing-ubuntu-amifamily)\n3. [Change default TopologySpreadConstraint policy for Deployment from `ScheduleAnyways` to `DoNotSchedule`](#change-default-topologyspreadconstraint-policy-for-karpenter-deployment-from-scheduleanyways-to-donotschedule)\n4. [Removing Implicit ENI Public IP Configuration](#removing-implicit-eni-public-ip-configuration)\n\n### v1 APIs\n\n**Issue Ref(s):** https://github.com/kubernetes-sigs/karpenter/issues/758, https://github.com/aws/karpenter-provider-aws/issues/5006\n\n**Category:** Breaking, Stability\n\nFor Karpenter to be considered v1, the CustomResources that are shipped with an installation of the project also need to be stable at v1. Changes to Karpenter’s API (including labels, annotations, and tags) in v1 are detailed in [Karpenter v1 API](./v1-api.md). The migration path for these changes will ensure that customers will not have to roll their nodes or manually convert their resources as they did at v1beta1. Instead, we will leverage Kubernetes [conversion webhooks](https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definition-versioning/#webhook-conversion) to automatically convert their resources to the new schema format in code. The API groups and Kind naming will remain unchanged.\n\n### Removing Ubuntu AMIFamily\n\n**Issue Ref(s):** https://github.com/aws/karpenter-provider-aws/issues/5572\n\n**Category:** Breaking\n\nKarpenter has supported the Ubuntu AMIFamily [since the v0.6.2 version of Karpenter](https://github.com/aws/karpenter-provider-aws/pull/1323). EKS does not have formal support for the Ubuntu AMIFamily for MNG or SMNG nodes (it's currently a third-party vendor AMI). As a result, there is no direct line-of-sight between changes in things like supported Kubernetes versions or kernel updates on the image.\n\nUsers who still want to use Ubuntu can still use a Custom AMIFamily with amiSelectorTerms pinned to the latest Ubuntu AMI ID. They can reference `bootstrapMode: AL2` to get the same userData configuration they received before.\n\n#### Tasks\n\n- [ ] Drop the Ubuntu AMIFamily from the set of enum values in the v1 CRD\n- [ ] Remove the Ubuntu bootstrapping logic from the Karpenter AMIFamily providers\n- [ ] Remove the Ubuntu-specific AMIFamily documentation in the karpenter.sh documentation\n\n### Change default TopologySpreadConstraint policy for Deployment from `ScheduleAnyways` to `DoNotSchedule`\n\n**Category:** Stability, Breaking\n\nKarpenter ships by default with multiple replicas and leader election enabled to ensure that it can run in HA (High Availability) mode. This ensures that if a pod goes down due to an outage, the other pod is able to recover quickly by shifting the leader election over.\n\nKarpenter currently uses the `ScheduleAnyways` zonal topologySpreadConstraint to spread its Karpenter deployment across zones. Because this is a preference, this doesn't guarantee that pods will end up in different zones, meaning that, if there is a zonal outage, multiple replicas won't increase resiliency.\n\n```yaml\ntopologySpreadConstraints:\n  - labelSelector:\n      matchLabels:\n        app.kubernetes.io/instance: karpenter\n        app.kubernetes.io/name: karpenter\n    maxSkew: 1\n    topologyKey: topology.kubernetes.io/zone\n    whenUnsatisfiable: ScheduleAnyways\n```\n\nAs part of v1, we are changing our default from `ScheduleAnyways` to `DoNotSchedule` to enforce stronger best practices by default to ensure that Karpenter can recover quickly in the event of a zonal outage. Users who still want the old behavior can opt back into `ScheduleAnyways` by overriding the default TopologySpreadConstraint.\n\n#### Tasks\n\n- [ ] Update Karpenter's zonal topologySpreadConstraint from `whenUnsatisfiable: ScheduleAnyways` to `whenUnsatisfiable: DoNotSchedule`\n\n### Removing Implicit ENI Public IP Configuration\n\n**Category:** Planned Deprecations, Breaking\n\nKarpenter currently supports checking the subnets that your instance request is attempting to launch into and explicitly configuring that `AssociatePublicIPAddress: false` when you are only launching into private subnets. This feature was supported because users had specifically requested for it in https://github.com/aws/karpenter-provider-aws/issues/3815, where users were writing deny policies on their EC2 instance launches through IRSA policies or SCP for instances that attempted to create network interfaces that associated an IP address. Now with https://github.com/aws/karpenter-provider-aws/pull/5437 merged, we have the ability to set the `associatePublicIPAddress` value explicitly on the EC2NodeClass. Users can directly set this value to `false` and we will no longer need to introspect the subnets when making instance launch requests.\n\n#### Tasks\n\n- [ ] Remove the [`CheckAnyPublicIPAssociations`](https://github.com/aws/karpenter-provider-aws/blob/ea8ea0ecb042f4143e2948d4e299e169671841fe/pkg/providers/subnet/subnet.go#L97) call in our launch template creation at v1"
  },
  {
    "path": "designs/v1alpha4-api.md",
    "content": "# v1alpha4 API Proposal\nThis document proposes comprehensive Provisioner API improvements prior to the v0.4 release. Due to minor backwards incompatible changes, this will result in a API version bump (v1alpha3 -> v1alpha4). This is in accordance with [Kubernetes API Deprecation Policy](https://kubernetes.io/docs/reference/using-api/deprecation-policy/). This API is not considered to be the final state of the Provisioner API, and is expected to evolve further as we explore more advanced scale down (defragmentation).\n\nThese changes recommend:\n1. Cloud Provider specific extensions under `spec.provider`.\n2. Removal of `spec.cluster`.\n3. Pluralization of `spec.architecture` and `spec.operatingSystem`.\n4. Provisioning limits for maximum cpu, memory, etc, under `spec.limits`.\n\n## Strongly Typed Vendor Specific Fields\nCloud Providers are currently limited to using well known `spec.labels` for configuration of vendor specific parameters. For example:\n- `spec.labels['node.k8s.aws/launch-template-name']`\n- `spec.labels['node.k8s.aws/subnet-name']`\n\nOne benefit of this approach is that pods may use corresponding `spec.nodeSelector[...]` to request additional constraints on provisioned nodes. This information must be communicated through Kubernetes label values, which is awkward for the following use cases:\n1. Parameters are a list (e.g. `subnets: [\"subneta\", \"subnetb\", \"subnetc\"]`)\n2. Parameters are a struct (e.g. `tags: { \"foo\" : \"bar\" }`)\n3. Parameters do not comply with [the label value character set](https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#syntax-and-character-set). See: [#646](https://github.com/aws/karpenter/issues/646).\n\nWe introduce a new `provider` field that enables strongly typed vendor specific parameters without violating vendor neutrality principles in the Karpenter codebase. We leverage Kubernetes `runtime.RawExtensions` to encapsulate these fields as raw bytes, which are then unmarshaled in vendor specific code. Vendors may implement arbitrary validation, defaulting, and provisioning behavior over the entire structure of these extensions. These structures are versioned separately from the Provisioner GVK to enable Cloud Providers to make backwards incompatible changes to provider specific configuration without requiring a version bump to the Provisioner CRD. If versioning is not specified by the user, it will be inferred and defaulted.\n\n```yaml\napiVersion: karpenter.sh/v1alpha4\nkind: Provisioner\nspec:\n  provider:\n    apiVersion: extensions.karpenter.sh/v1alpha1\n    kind: AWS\n    securityGroups: [\"abc\", \"def\"]\n    subnets: [\"123\", \"456\"]\n    launchTemplateName: \"foo\"\n```\n\nThe Cloud Provider *may* continue to support corresponding well known labels at the pod level (e.g. `node.k8s.aws/subnet-name`).\n\n```yaml\n# PodSpec: Simple key value constraints\nspec:\n  nodeSelector:\n    node.k8s.aws/subnet-name: \"123\" # Vendor Specific Field\n    kubernetes.io/instance-type: \"m5.large\" # Vendor Neutral Field\n```\n\n```yaml\n# PodSpec: More expressive than node selectors, can specify multiple or preferences\nspec:\n  affinity:\n    nodeAffinity:\n      requiredDuringSchedulingIgnoredDuringExecution:\n        nodeSelectorTerms:\n        - matchExpressions:\n          - key: node.k8s.aws/subnet-name\n            operator: In\n            values: [\"123\", \"456\"]\n```\n\n*Note: Not all `spec.provider` fields must have a corresponding well known label.*\n\n### Alternative: Inline vs Nested Parameters\nIt's possible to leverage inline json capabilities to collapse these parameters to the top level. For example\n```yaml\nspec:\n  zones: [\"us-west-2a\", \"us-west-2b\"] # Vendor neutral\n  securityGroups: [\"abc\", \"def\"] # Vendor specific, but sibling of zones\n```\n\n1. (+) Parameters that are natural siblings (e.g. `zones`, `securityGroups`) will be no longer be separated by `provider`.\n2. (-) It's not immediately clear to readers which parameters are vendor specific.\n3. (-) Key name conflicts may arise between provider and vendor fields.\n4. (-) `kind` and `apiVersion` are awkwardly placed at the top level of spec.\n\n### Alternative: Duck Typing\n\nIt's possible to follow [Knative's Duck Typing approach](https://www.youtube.com/watch?v=kldVg63Utuw) and build vendor specific CRDs that contain vendor neutral snippets (or ducks) that Karpenter can recognize. Cloud Providers would consume Karpenter generic controllers as libraries, which would behave against the generic API snippets. For example:\n\n```yaml\napiVersion: karpenter.k8s.aws/v1alpha1 # Vendor Specific\nkind: Provisioner\nspec:\n  limits: {} # Vendor neutral, recognized by Karpenter generic controllers\n  labels: {} # Vendor neutral, recognized by Karpenter generic controllers\n  taints: [] # Vendor neutral, recognized by Karpenter generic controllers\n  subnets: [] # Vendor specific, only recognized by AWS Cloud Provider code\n```\n\n1. (+) Versioning is only defined in one place\n2. (+) Vendors may change versions decoupled from each other.\n3. (+) Parameters that are natural siblings (e.g. `zones`, `securityGroups`) will be no longer be separated by `provider`.\n4. (-) Cloud Provider must do more than simply implementing an interface (they must define an CR, etc).\n5. (-) Potential for name collision as duck types evolve or confusion about what fields providers own.\n6. (-) Knative duck typing APIs are alpha, missing documentation, and not widely adopted.\n\n## Pluralizion for all Constraints\nWe expand the constraints of a Provisioner from a scalar to a vector in all cases. This will apply to both `operatingSystem` and `architecture` enabling the operator to specify greater flexibility. This supports use cases such as heterogenous architectures within a single provisioner, selected dynamically at runtime by the cloud provider. More importantly, this change creates a consistent and predictable semantic for all vendor neutral constraints. Similar to other constraints, the semantic of this change allows cloud providers to choose any value in the constraint slice, e.g. prioritizing arm64 for cost reasons.\n### Example\n```yaml\nspec:\n  operatingSystems: [\"linux\", \"windows\"] # operatingSystem -> operatingSystems\n  architectures: [\"amd64\", \"arm64\"] # architecture -> architectures\n```\n\n## Limits\n\nWe introduce a new field `spec.limits` that contains configuration parameters to limit scaling and control costs.\n\n### Example\n```yaml\nspec:\n  limits:\n    unready: 20% # Flat or Percentage. Karpenter will not launch additional capacity if current unready nodes exceeds this value\n    resources: # Karpenter will not launch additional capacity if current capacity exceeds this value\n      cpu: 1000\n      memory: 1000Gi\n```\n"
  },
  {
    "path": "designs/v1beta1-api.md",
    "content": "# Karpenter v1beta1 APIs\n\nThis document formalizes the [v1beta1 laundry list](https://github.com/aws/karpenter/issues/1327) and describes the high-level migration strategy for users moving to v1beta1. It shows the full API specs, including Group/Kind names and label names. This document does not go into explicit details on each of the individual changes in v1beta1. For details on these individual changes, see [Karpenter v1beta1  Full Change List](./v1beta1-full-changelist.md).\n\n## Bake Time\n\nAPI changes create a user migration burden that should be weighed against the benefits of the breaking changes. Batching breaking changes into a single version bump **helps to minimize this burden**. The v1alpha5 API has seen broad adoption over the last year, and resulted in a large amount of feedback. We see this period to have been a critical maturation process for the Karpenter project, and has given us confidence that the changes in v1beta1 will be sufficient to promote after a shorter feedback period.\n\n## Migration\n\nKubernetes custom resources have built-in support for API version compatibility. CRDs with multiple versions must define a “storage version”, which controls the data stored in etcd. Other versions are views onto this data and converted using [conversion webhooks](https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definition-versioning/#webhook-conversion). However, there is a fundamental limitation that [all versions must be safely round-trippable through each other](https://book.kubebuilder.io/multiversion-tutorial/api-changes.html)[.](https://book.kubebuilder.io/multiversion-tutorial/api-changes.html) This means that it must be possible to define a function that converts a v1alpha5 Provisioner into a v1beta1 Provisioner and vise versa.\n\nUnfortunately, multiple proposed changes in v1beta1 are not round-trippable. Below, we propose deprecations of legacy fields in favor more modern mechanisms that have seen adoption in v1alpha5. These changes remove sharp edges that regularly cause users surprises and production pain.\n\nTo workaround the limitation of round-trippability, we are proposing a rename of the Kinds (`NodePool`, `NodeClaim`, and `EC2NodeClass`) that the CRDs exist within. This allows both CRDs to exist alongside each other simultaneously and gives users a natural migration path to move through.\n\n### Migration Path\n\nBelow describes a few migration paths at a high-level. These paths are not comprehensive, but offer good guidance through which users might migrate between the v1alpha5 APIs and the v1beta1 APIs.\n\n#### Periodic Rolling with Drift\n\nFor each Provisioner in your cluster, perform the following actions:\n\n1. Create a NodePool/NodeClass in your cluster that is the v1beta1 equivalent of the v1alpha5 Provisioner/AWSNodeTemplate\n2. Add a taint to the old Provisioner such as `karpenter.sh/legacy=true:NoSchedule`\n3. Karpenter drift will mark all machines/nodes owned by that Provisioner as drifted\n4. Karpenter drift will launch replacements for the nodes in the new NodePool resource\n   1. Currently, Karpenter only supports rolling of one node at a time, which means that it may take some time for Karpenter to completely roll all nodes under a single Provisioner\n\n#### Forced Deletion\n\nFor each Provisioner in your cluster, perform the following actions:\n\n1. Create a NodePool/NodeClass in your cluster that is the v1beta1 equivalent of the v1alpha5 Provisioner/AWSNodeTemplate\n2. Delete the old Provisioner with `kubectl delete provisioner <provisioner-name> --cascade=foreground`\n   1. Karpenter will delete each Node that is owned by the Provisioner, draining all nodes simultaneously and will launch nodes for the newly pending pods as soon as the Nodes enter a draining state\n\n#### Manual Rolling\n\nFor each Provisioner in your cluster, perform the following actions:\n\n1. Create a NodePool/NodeClass in your cluster that is the v1beta1 equivalent of the v1alpha5 Provisioner/AWSNodeTemplate\n2. Add a taint to the old Provisioner such as `karpenter.sh/legacy=true:NoSchedule`\n3. Delete each node one-at-time owned by the Provisioner by running `kubectl delete node <node-name>`\n\n## APIs\n\nTo help clearly define where configuration should live within Karpenter’s API, we should define the logical boundary between each Kind in the project.\n\n1. `NodePool`\n    1. Neutral Node configuration-based fields that affect the **compatibility between Nodes and Pods during scheduling** (e.g. requirements, taints, labels)\n    2. Neutral behavior-based fields for configuring Karpenter’s scheduling and deprovisioning decision-making\n2. `EC2NodeClass`\n    1. Cloudprovider-specific Node configuration-based fields that affect launch and bootstrap process for that Node including: configuring startup scripts, volume mappings, metadata settings, etc.\n    2. Cloudprovider-specific behavior-based fields for configuring Karpenter’s scheduling and deprovisioning decision-making (e.g. interruption-based disruption, allocation strategy)\n3. `NodeClaim`\n    1. A Karpenter management object that fully manages the lifecycle of a single node including: configuring and launching the node, monitoring the node health (including disruption conditions), and handling the deprovisioning and termination of the node\n\nWith these boundaries defined, below shows each API, with all fields specified, with values filled in as examples.\n\n### `karpenter.sh/NodePool`\n\n```\napiVersion: karpenter.sh/v1beta1\nkind: NodePool\nmetadata:\n  name: default\nspec:\n  template:\n    metadata:\n      labels:\n        billing-team: my-team\n      annotations:\n        example.com/owner: \"my-team\"\n    spec:\n      nodeClass:\n        name: default\n        kind: EC2NodeClass\n        apiVersion: karpenter.k8s.aws/v1beta1\n      taints:\n        - key: example.com/special-taint\n          effect: NoSchedule\n      startupTaints:\n        - key: example.com/another-taint\n          effect: NoSchedule\n      requirements:\n        - key: \"karpenter.k8s.aws/instance-category\"\n          operator: In\n          values: [\"c\", \"m\", \"r\"]\n      resources:\n        requests:\n          cpu: \"1\"\n          memory: \"100Mi\"\n      kubeletConfiguration:\n        clusterDNS: [\"10.0.1.100\"]\n        containerRuntime: containerd\n        systemReserved:\n          cpu: 100m\n          memory: 100Mi\n          ephemeral-storage: 1Gi\n        kubeReserved:\n          cpu: 200m\n          memory: 100Mi\n          ephemeral-storage: 3Gi\n        evictionHard:\n          memory.available: 5%\n          nodefs.available: 10%\n          nodefs.inodesFree: 10%\n        evictionSoft:\n          memory.available: 500Mi\n          nodefs.available: 15%\n          nodefs.inodesFree: 15%\n        evictionSoftGracePeriod:\n          memory.available: 1m\n          nodefs.available: 1m30s\n          nodefs.inodesFree: 2m\n        evictionMaxPodGracePeriod: 60\n        imageGCHighThresholdPercent: 85\n        imageGCLowThresholdPercent: 80\n        cpuCFSQuota: true\n        podsPerCore: 2\n        maxPods: 20\n  disruption:\n    consolidateAfter: 10m\n    consolidationPolicy: WhenEmpty | WhenUnderutilized\n    expireAfter: 30d\n  weight: 10\n  limits:\n    cpu: \"1000\"\n    memory: 1000Gi\nstatus:\n  resources:\n     cpu: \"2\"\n     memory: \"100Mi\"\n     ephemeral-storage: \"100Gi\"\n```\n\n### `karpenter.k8s.aws/EC2NodeClass`\n\n```\napiVersion: karpenter.k8s.aws/v1beta1\nkind: EC2NodeClass\nmetadata:\n  name: default\nspec:\n  amiFamily: AL2\n  amiSelectorTerms:\n    - tags: \n        key: value\n    - id: abc-123\n    - name: foo\n      owner: amazon\n  subnetSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: cluster-name\n    - id: subnet-1234\n  securityGroupSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: cluster-name\n    - name: default-security-group\n  role: karpenter-node-role\n  userData: |\n    echo \"this is custom user data\"\n  tags:\n    custom-tag: custom-value\n  metadataOptions:\n    httpEndpoint: enabled\n    httpProtocolIPv6: disabled\n    httpPutResponseHopLimit: 2\n    httpTokens: required\n  blockDeviceMappings:\n    - deviceName: /dev/xvda\n      ebs:\n        volumeSize: 20Gi\n        volumeType: gp3\n        encrypted: true\n  detailedMonitoring: true\nstatus:\n  subnets:\n    - id: subnet-0a462d98193ff9fac\n      zone: us-east-2b\n    - id: subnet-0322dfafd76a609b6\n      zone: us-east-2c\n    - id: subnet-0727ef01daf4ac9fe\n      zone: us-east-2b\n    - id: subnet-00c99aeafe2a70304\n      zone: us-east-2a\n    - id: subnet-023b232fd5eb0028e\n      zone: us-east-2c\n    - id: subnet-03941e7ad6afeaa72\n      zone: us-east-2a\n  securityGroups:\n    - id: sg-041513b454818610b\n      name: ClusterSharedNodeSecurityGroup\n    - id: sg-0286715698b894bca\n      name: ControlPlaneSecurityGroup-1AQ073TSAAPW\n  amis:\n    - id: ami-05a05e85b17bb60d7\n      name: amazon-eks-node-1.24-v20230703\n      requirements:\n        - key: karpenter.k8s.aws/instance-accelerator-count\n          operator: DoesNotExist\n        - key: kubernetes.io/arch\n          operator: In\n          values:\n            - amd64\n        - key: karpenter.k8s.aws/instance-gpu-count\n          operator: DoesNotExist\n    - id: ami-0d849ef1e65103147\n      name: amazon-eks-gpu-node-1.24-v20230703\n      requirements:\n        - key: kubernetes.io/arch\n          operator: In\n          values:\n            - amd64\n        - key: karpenter.k8s.aws/instance-accelerator-count\n          operator: Exists\n    - id: ami-0d849ef1e65103147\n      name: amazon-eks-gpu-node-1.24-v20230703\n      requirements:\n        - key: kubernetes.io/arch\n          operator: In\n          values:\n           - amd64\n        - key: karpenter.k8s.aws/instance-gpu-count\n          operator: Exists\n    - id: ami-0c3487f30d003deb3\n      name: amazon-eks-arm64-node-1.24-v20230703\n      requirements:\n        - key: kubernetes.io/arch\n          operator: In\n          values:\n            - arm64\n        - key: karpenter.k8s.aws/instance-gpu-count\n          operator: DoesNotExist\n        - key: karpenter.k8s.aws/instance-accelerator-count\n          operator: DoesNotExist\n```\n\n### `karpenter.sh/NodeClaim`\n\n```\napiVersion: karpenter.sh/v1beta1\nkind: NodeClaim\nmetadata:\n  name: default\n  labels:\n    billing-team: my-team\n  annotations:\n    example.com/owner: \"my-team\"\nspec:\n  nodeClass:\n    name: default\n    kind: EC2NodeClass\n    apiVersion: karpenter.k8s.aws/v1beta1\n  taints:\n    - key: example.com/special-taint\n      effect: NoSchedule\n  startupTaints:\n    - key: example.com/another-taint\n      effect: NoSchedule\n  requirements:\n    - key: \"karpenter.k8s.aws/instance-category\"\n      operator: In\n      values: [\"c\", \"m\", \"r\"]\n  resources:\n    requests:\n      cpu: \"1\"\n      memory: \"100Mi\"\n  kubeletConfiguration:\n    clusterDNS: [\"10.0.1.100\"]\n    containerRuntime: containerd\n    systemReserved:\n      cpu: 100m\n      memory: 100Mi\n      ephemeral-storage: 1Gi\n    kubeReserved:\n      cpu: 200m\n      memory: 100Mi\n      ephemeral-storage: 3Gi\n    evictionHard:\n      memory.available: 5%\n      nodefs.available: 10%\n      nodefs.inodesFree: 10%\n    evictionSoft:\n      memory.available: 500Mi\n      nodefs.available: 15%\n      nodefs.inodesFree: 15%\n    evictionSoftGracePeriod:\n      memory.available: 1m\n      nodefs.available: 1m30s\n      nodefs.inodesFree: 2m\n    evictionMaxPodGracePeriod: 60\n    imageGCHighThresholdPercent: 85\n    imageGCLowThresholdPercent: 80\n    cpuCFSQuota: true\n    podsPerCore: 2\n    maxPods: 20\nstatus:\n  allocatable:\n    cpu: 1930m\n    ephemeral-storage: 17Gi\n    memory: 534108Ki\n    pods: \"4\"\n  capacity:\n    cpu: \"2\"\n    ephemeral-storage: 20Gi\n    memory: 942684Ki\n    pods: \"4\"\n  conditions:\n  - type: Drifted\n    status: \"True\"\n    severity: Warning\n  - status: \"True\"\n    type: Initialized\n  - status: \"True\"\n    type: Lanched\n  - status: \"True\"\n    type: Registered\n  - status: \"True\"\n    type: Ready\n  nodeName: ip-192-168-62-137.us-west-2.compute.internal\n  providerID: aws:///us-west-2a/i-08168021ae532fca3\n```\n\n### Labels/Annotations\n\n#### `karpenter.sh`\n\n1. `karpenter.sh/nodepool`\n2. `karpenter.sh/initialized`\n3. `karpenter.sh/registered`\n4. `karpenter.sh/capacity-type`\n5. `karpenter.sh/do-not-disrupt`\n\n#### `karpenter.k8s.aws`\n\n1. `karpenter.k8s.aws/instance-hypervisor`\n2. `karpenter.k8s.aws/instance-encryption-in-transit-supported`\n3. `karpenter.k8s.aws/instance-category`\n4. `karpenter.k8s.aws/instance-family`\n5. `karpenter.k8s.aws/instance-generation`\n6. `karpenter.k8s.aws/instance-local-nvme`\n7. `karpenter.k8s.aws/instance-size`\n8. `karpenter.k8s.aws/instance-cpu`\n9. `karpenter.k8s.aws/instance-cpu-manufacturer`\n10. `karpenter.k8s.aws/instance-memory`\n11. `karpenter.k8s.aws/instance-ebs-bandwidth`\n11. `karpenter.k8s.aws/instance-network-bandwidth`\n12. `karpenter.k8s.aws/instance-gpu-name`\n13. `karpenter.k8s.aws/instance-gpu-manufacturer`\n14. `karpenter.k8s.aws/instance-gpu-count`\n15. `karpenter.k8s.aws/instance-gpu-memory`\n16. `karpenter.k8s.aws/instance-accelerator-name`\n17. `karpenter.k8s.aws/instance-accelerator-manufacturer`\n18. `karpenter.k8s.aws/instance-accelerator-count`\n"
  },
  {
    "path": "designs/v1beta1-full-changelist.md",
    "content": "# Karpenter v1beta1 Full Change List\n\nThis document formalizes the [v1beta1 laundry list](https://github.com/aws/karpenter/issues/1327) into a full change list of items that are coming in the migration from the `v1alpha5` APIs of Karpenter to `v1beta1`. This document purely describes the necessary changes and the rationale behind the changes. For the high-level overview of the API specs, view the [Karpenter v1beta1 Graduation](./v1beta1-api.md) design doc.\n\n### Update Kind/Group Naming\n\nAs part of the bump to v1beta1, to allow the v1alpha5 APIs to exist alongside the v1beta1 APIs while users go through a migration process, the following kind names are being proposed:\n\n 1. `Provisioner` → `NodePool`\n 2. `Machine` -> `NodeClaim`\n 3. `AWSNodeTemplate` → `EC2NodeClass`\n\nWe see the renames as opportunities to better align our API groups and kinds with upstream concepts as well as reducing confusion between other Kubernetes API concepts. Specifically, the word `Provisioner` (on its own) has become overloaded in Kubernetes, [particularly in the area of storage provisioning](https://kubernetes.io/docs/concepts/storage/storage-classes/#the-storageclass-resource). We want to get completely away from this naming, while also prefixing all of our kinds that apply to nodes with `Node` for better alignment and clarity across the project. \n\nThis gives the following naming to API types within the Karpenter project\n\n1. `karpenter.sh/NodePool`\n2. `karpenter.sh/NodeClaim`\n3. `karpenter.k8s.aws/EC2NodeClass`\n\n### Remove Validation/Mutating Webhooks in favor of CEL (Common Expression Language)\n\nThe Karpenter maintainer team has seen an increase in the number of issues related to its webhooks ([#4415](https://github.com/aws/karpenter/issues/4415), [#3598](https://github.com/aws/karpenter/issues/3598), [#2902](https://github.com/aws/karpenter/issues/2902), [#4154](https://github.com/aws/karpenter/issues/4154), [#4106](https://github.com/aws/karpenter/issues/4016), [#3224](https://github.com/aws/karpenter/issues/3224), [#1729](https://github.com/aws/karpenter/issues/1729), ...) which lead us to believe that we should look for alternatives/ways to remove these webhooks from the project.\n\nKubernetes 1.23 introduced the `CustomResourceValidationExpressions` in alpha, followed by graduating the feature to beta in 1.25. This feature introduces the ability to write CRD validation expressions directly in the CRD OpenAPISpec without any need for validating webhooks to do custom validation. EKS supports CEL starting in Kubernetes version 1.25.\n\nKarpenter v1beta1 will introduce CEL into the CRD OpenAPISpec while maintaining the webhooks until support for EKS versions <= 1.24 is dropped. At this point, we will drop support for the webhooks and rely solely on CEL for validation.\n\n### Label Changes\n\n### `karpenter.sh/do-not-evict` →  `karpenter.sh/do-not-disrupt`\n\nKarpenter validates disruption across NodeClaims and determines which NodeClaims/Nodes it is allowed to disrupt as part of the disruption flow. While eviction is part of the termination process, it’s more accurate to say that the `karpenter.sh/do-not-evict` annotation actually prevents Karpenter’s disruption of the NodeClaim/Node rather than the eviction of it.\n\n###  `karpenter.sh/do-not-consolidate`  → `karpenter.sh/do-not-disrupt`\n\nKarpenter currently surfaces the `karpenter.sh/do-not-consolidate` annotation to block consolidation actions against individual nodes without having to make changes to the owning provisioner. We have found this is useful for users that have one-off scenarios for blocking consolidation, including debugging failures on nodes. \n\nWhile this feature is useful for consolidation, it should be expanded out to all disruption mechanisms, so that we have both pod-level and node-level control to block disruption using the `karpenter.sh/do-not-disrupt` annotation.\n\n### `NodePool` Changes\n\n####  `spec` → `spec.template`\n\nCurrently fields that control node properties, such as `Labels`, `Taints`, `StartupTaints`, `Requirements`, `KubeletConfiguration`, `ProviderRef,` are top level members of `provisioner.spec`. We can draw a nice line between:\n\n1. Behavior-based fields that dictate how Karpenter should act on nodes\n2. Configuration-based fields that dictate how NodeClaims/Nodes should look\n\nIn this case, behavior-based fields will live in the top-level of the `spec` of the `NodePool` and configuration-based fields live within the `spec.template`.\n\nOn top of this, this interface is very similar to the Deployment/StatefulSet/Job relationship, where a top-level object spawns templatized versions of lower-level objects. In our case, this top-level object is the `NodePool` and the lower-level object is the `NodeClaim` (with the `Node` joining the cluster as a side-effect of the `NodeClaim`).\n\n```\nspec:\n  weight: ...\n  limits: ...\n  template:\n    metadata:\n      labels: ...\n      annotations: ...\n    spec:\n      taints: ...\n      startupTaints: ...\n      requirements: ...\n      providerRef: ...\n  disruption:\n    expireAfter: ...\n    consolidateAfter: ...\n    consolidationPolicy: ...\n```\n\n#### `spec.ttl...` → `spec.disruption...`\n\nKarpenter plans to expand the amount of control that it gives users over both the aggressiveness of disruption and when disruption can take place. As part of these upcoming changes, more fields within the `NodePool` API will begin to pertain to the disruption configuration.\n\nWe can better delineate the fields that specifically pertain to this configuration from the other fields in the `spec` (global behavior-based fields, provisioning-specific fields, node static configuration fields) by moving these fields inside a `disruption` block. This will make it clearer to users which configuration options specifically pertain to scale-down when they are configuring their `NodePool` CRs.\n\n#### `spec.ttlSecondsAfterEmpty` → `spec.disruption.consolidationPolicy`\n\nCurrently, Karpenter has two mutually exclusive ways to deprovision nodes based on emptiness: `ttlSecondsAfterEmpty` and `consolidation`. If users are using `ttlSecondsAfterEmpty`, we have generally seen that users are configuring this field in one of two ways:\n\n1. `ttlSecondsAfterEmpty=0` → Users want to delete nodes as soon as they go empty and Karpenter sees that they are empty\n2. `ttlSecondsAfterEmpty >> 0` → Users want to delete nodes that are empty but want to reduce the amount of node churn as a result of high pod churn on a larger cluster\n\nWe anticipate that both of these scenarios can be captured through the consolidation disruption mechanism; however, we understand that there are use-cases where a user may want to reduce the aggressiveness of Karpenter disruption and only disrupt empty nodes. In this case, a user can configure the `consolidationPolicy` to be `WhenEmpty` which will tell the consolidation disruption mechanism to only deprovision empty nodes through consolidation. Alternatively, you can specify a `consolidationPolicy` of `WhenUnderutilized` which will allow consolidation to deprovision both empty and underutilized nodes.\n\nIf `consolidationPolicy` is not set, Karpenter will implicitly default to `WhenUnderutilized`.\n\n#### `spec.ttlSecondsAfterEmpty` → `spec.disruption.consolidateAfter`\n\nWhile the `consolidationPolicy` offers one mechanism for users to control the aggressiveness of disruption, users that enable a `consolidationPolicy` of `WhenEmpty` or `WhenUnderutilized` may still want to dictate the speed at which nodes are deemed underutilized. This is particularly true on clusters that are large and have a large amount of pod churn. To support this, Karpenter will surface a `consolidateAfter` field which will allow users to define a per-node TTL to define the time that Karpenter can begin disrupting the node after first seeing that the node is eligible for consolidation.\n\n#### `spec.ttlSecondsUntilExpired` → `spec.disruption.expireAfter`\n\nKarpenter will change the `ttlSecondsUntilExipred` field to `expireAfter` to align with the `consolidateAfter` field in the `disruption` block.\n\n#### Remove `spec.provider`\n\nWe’ve recommended that customers leverage `spec.providerRef` in favor of `spec.provider` since Q2 2022. Documentation for this feature has been removed since Q3 2022. We will take the opportunity to remove the feature entirely to minimize code bugs/complexity and user confusion.\n\n### `EC2NodeClass` Changes\n\n#### Update `spec.amiSelector`\n\nThe alpha API `amiSelector` has two primary limitations that restrict user’s ability to specify the AMIs that they want Karpenter to use:\n\n1. Users can only specify “ANDed” together requirements, meaning that if a user has an orthogonal set of tags that they want to match their images to, they have to specify them by `aws::ids` directly, since there is no way with the current tag-selection logic to specify those values\n2. Users want more flexibility to do things like specify a name/owner combination for images. Users have generally been asking Karpenter to more closely adhere to the EC2 APIs in our amiSelector design so that users can use more built-in filtering for AMIs, instead of having to use custom tagging to achieve the same outcome\n    1. To support *some* of these use-cases, Karpenter has begun effectively creating “system-tags” i.e. (`aws::ids`, `aws::owners`, `aws::name`). These are special-cased version of the standard user custom-tags that allow users to achieve the scenarios described in #2; however, they are not easily discoverable or understood and if we are beginning to support special-cases like this, it makes sense that we should begin to structure these fields.\n\n```\namiSelectorTerms:\n- name: foo\n  id: abc-123\n  owner: amazon\n  tags: \n    key: value\n# Selector Terms are ORed\n- name: foo\n  id: abc-123\n  owner: self\n  tags: \n    key: value\n```\n\n#### Update `spec.subnetSelector`\n\n`subnetSelectorTerms` should have a similar parity to the `amiSelectorTerms` in its design to improve the ease-of-use for users. As a result, we should design the `subnetSelectorTerms` in the same spirit as the `amiSelectorTerms` such that you can also specify multiple selectors through `tags` and `ids` that can be ORed together to produce the ultimate set of items that you want to use.\n\n```\nsubnetSelectorTerms:\n- id: abc-123\n  tags:\n    key: value\n# Selector Terms are ORed\n- id: abc-123\n  tags:\n    key: value\n```\n\n#### Update `spec.securityGroupSelector`\n\nThe same logic for `subnetSelectorTerms` applies to `securityGroupSelectorTerms`. We should have a similar parity to the `amiSelectorTerms` to improve the ease-of-use around this selector.\n\n```\nsecurityGroupSelectorTerms:\n- id: abc-123\n  tags:\n    use: private-subnet\n# Selector Terms are ORed\n- name: custom-security-group-b # not the same as the \"Name\" tag\n  tags:\n    use: private-subnet\n- tags:\n    use: private-subnet\n    Name: custom-security-group-c # not the same as the \"name\" field\n```\n\n#### Remove `spec.launchTemplate`\n\nDirect launch template support is problematic for many reasons, outlined in the design [Unmanaged LaunchTemplate Support for Karpenter](./unmanaged-launch-template-removal.md). Customers continue to run into issues when directly using launch templates. Rather than continue to maintain these sharp edges and give users a half-baked experience of Karpenter, we should remove this field, considering that we can always add it back later if there is enough ask from users to do so.\n\n#### `spec.instanceProfile` → `spec.role`\n\nCurrently, Karpenter uses an `instanceProfile` in the `AWSNodeTemplate` that is referenced to determine the profile that the EC2 node should launch with. Instance profiles are IAM entities that are specific to EC2 and do not have a lot of detail built around them (including console support); users are generally more familiar with the concept of IAM roles. As a result, we can support a `role` in the new `EC2NodeClass` and allow Karpenter to provision the instance profile `ad-hoc` with the `role`  specified attached to it.\n\n#### Remove tag-based AMI Requirements\n\n[Tag-based AMI requirements](https://karpenter.sh/docs/concepts/node-templates/#ami-selection) allowed users to tag their AMIs using EC2 tags to express “In” requirements on the images they selected on. This would allow a user to specify that a given AMI should be used *only* for a given instance type, instance size, etc. The downside of this feature is that there is no way to represent “NotIn”-based requirements in the current state, which means that there is no way to *exclude* an instance type, size, etc. from using a different AMI.\n\n#### Example\n\nTake the following example with AMI “a” and AMI “b”:\n\n1. AMI \"a\"\n    1. Tagged with `node.kubernetes.io/instance-type: c5.large`\n2. AMI “b”\n    1. No tags\n\nIf Karpenter were to launch a “c5.xlarge” in this example, I would be guaranteed to get AMI “b”, since AMI “a” does not satisfy the compatability requirement for the instance type; however, if Karpenter were to launch a “c5.large”, this instance type satisfies both AMI “a” and AMI “b”, meaning that which AMI it chooses could fluctuate based on the creation dates of the selected AMIs.\n\nThis functionality of Karpenter hasn’t been surfaced widely at this point in time and the **current state of the feature is effectively unusable and not well-tested**. We should remove this feature and consider adding a `requirements` key as part of the `spec.amiSelector` logic at some time in the future if users require this kind of requirement-based logic.\n\n### `karpenter-global-settings` Changes\n\n#### Deprecate `defaultInstanceProfile` in `karpenter-global-settings`\n\nInstanceProfile, SubnetSelector, and SecurityGroup are all required information to launch nodes. Currently InstanceProfile is set in default settings, but subnetSelector and securityGroupSelector aren't. This is awkward and [doesn't provide a consistent experience for users](https://github.com/aws/karpenter/issues/2973). We should align all of our configuration at the `EC2NodeClass` and `Provisioner` -level for users to streamline their experience.\n\n#### Deprecate `tags` from `karpenter-global-settings` in favor of `nodeClass.spec.tags`\n\nHaving `tags` inside of the `karpenter-global-settings` makes it difficult to detect drift when these tag values are changed. Since the primary reason this field exists inside the `karpenter-global-settings` is for ease-of-use, and there is a simple workaround for customers (setting consistent tags inside each `EC2NodeClass`), it makes natural sense to remove this from the `karpenter-global-settings` .\n\n#### Remove `aws.enablePodENI` from `karpenter-global-settings`\n\nThis value has no meaning anymore now that our initialization logic does not rely on it. This can be pulled out of the `karpenter-global-settings` without causing impact to users.\n\n#### Deprecate `aws.enableENILimitedPodDensity`  in `karpenter-global-settings`\n\nSetting static pod density is available through the `nodePool.spec.kubeletConfiguration.maxPods` so there is no need for this setting to be configured at a global level anymore.\n"
  },
  {
    "path": "examples/README.md",
    "content": "## Examples\n\nCheckout example Provisioner and workload specs to demo with Karpenter.\n\n## Usage:\n\nProvisioner specs expect a `CLUSTER_NAME` environment variable to be set to your cluster name. You can use the following command to substitute the environment variable and `kubectl apply` to your cluster:\n\n```\nCLUSTER_NAME=<my-cluster-name> envsubst < provisioner/spot.yaml | kubectl apply -f -\n```\n"
  },
  {
    "path": "examples/v1/100-cpu-limit.yaml",
    "content": "# This example NodePool limits the amount of compute managed by\n# Karpenter for this NodePool. Karpenter will not provision compute that\n# takes the pool over a total of 100 (virtual or physical) CPU cores.\n---\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: limitcpu100\n  annotations:\n    kubernetes.io/description: \"NodePool to restrict the number of cpus provisioned to 100\"\nspec:\n  template:\n    spec:\n      requirements:\n        - key: kubernetes.io/arch\n          operator: In\n          values: [\"amd64\"]\n        - key: kubernetes.io/os\n          operator: In\n          values: [\"linux\"]\n        - key: karpenter.sh/capacity-type\n          operator: In\n          values: [\"on-demand\"]\n        - key: karpenter.k8s.aws/instance-category\n          operator: In\n          values: [\"c\", \"m\", \"r\"]\n        - key: karpenter.k8s.aws/instance-generation\n          operator: Gt\n          values: [\"2\"]\n      nodeClassRef:\n        group: karpenter.k8s.aws\n        kind: EC2NodeClass\n        name: default\n  limits:\n    cpu: 100\n---\napiVersion: karpenter.k8s.aws/v1\nkind: EC2NodeClass\nmetadata:\n  name: default\n  annotations:\n    kubernetes.io/description: \"General purpose EC2NodeClass for running Amazon Linux 2 nodes\"\nspec:\n  role: \"KarpenterNodeRole-${CLUSTER_NAME}\" # replace with your cluster name\n  subnetSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\" # replace with your cluster name\n  securityGroupSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\" # replace with your cluster name\n  amiSelectorTerms:\n    - alias: al2023@latest # Amazon Linux 2023"
  },
  {
    "path": "examples/v1/al2-custom-ami.yaml",
    "content": "# This example NodePool will provision instances using a custom EKS-Optimized AMI that belongs to the\n# AL2 AMIFamily. If your AMIs are built off https://github.com/awslabs/amazon-eks-ami and can be bootstrapped\n# by Karpenter, this may be a good fit for you.\n---\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\n  annotations:\n    kubernetes.io/description: \"General purpose NodePool for generic workloads\"\nspec:\n  template:\n    spec:\n      requirements:\n        - key: kubernetes.io/arch\n          operator: In\n          values: [\"amd64\"]\n        - key: kubernetes.io/os\n          operator: In\n          values: [\"linux\"]\n        - key: karpenter.sh/capacity-type\n          operator: In\n          values: [\"on-demand\"]\n        - key: karpenter.k8s.aws/instance-category\n          operator: In\n          values: [\"c\", \"m\", \"r\"]\n        - key: karpenter.k8s.aws/instance-generation\n          operator: Gt\n          values: [\"2\"]\n      nodeClassRef:\n        group: karpenter.k8s.aws\n        kind: EC2NodeClass\n        name: al2\n---\napiVersion: karpenter.k8s.aws/v1\nkind: EC2NodeClass\nmetadata:\n  name: al2\n  annotations:\n    kubernetes.io/description: \"EC2NodeClass for running Amazon Linux 2 nodes with a custom AMI\"\nspec:\n  amiFamily: AL2 # Amazon Linux 2\n  role: \"KarpenterNodeRole-${CLUSTER_NAME}\" # replace with your cluster name\n  subnetSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\" # replace with your cluster name\n  securityGroupSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\" # replace with your cluster name\n  amiSelectorTerms:\n    - id: ami-123\n    - id: ami-456\n  userData: |\n    MIME-Version: 1.0\n    Content-Type: multipart/mixed; boundary=\"EXAMPLEBOUNDARY\"\n\n    --EXAMPLEBOUNDARY\n    Content-Type: text/x-shellscript; charset=\"us-ascii\"\n\n    #!/bin/bash\n    echo \"Running a custom user data script\"\n\n    --EXAMPLEBOUNDARY--\n"
  },
  {
    "path": "examples/v1/al2-custom-userdata.yaml",
    "content": "# This example NodePool will provision instances using the AL2 EKS-Optimized AMI.\n# The UserData defined in spec.UserData needs to be in the MIME-multipart format,\n# and will be prepended to a Karpenter managed section that will bootstrap the kubelet.\n---\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\n  annotations:\n    kubernetes.io/description: \"General purpose NodePool for generic workloads\"\nspec:\n  template:\n    spec:\n      requirements:\n        - key: kubernetes.io/arch\n          operator: In\n          values: [\"amd64\"]\n        - key: kubernetes.io/os\n          operator: In\n          values: [\"linux\"]\n        - key: karpenter.sh/capacity-type\n          operator: In\n          values: [\"on-demand\"]\n        - key: karpenter.k8s.aws/instance-category\n          operator: In\n          values: [\"c\", \"m\", \"r\"]\n        - key: karpenter.k8s.aws/instance-generation\n          operator: Gt\n          values: [\"2\"]\n      nodeClassRef:\n        group: karpenter.k8s.aws\n        kind: EC2NodeClass\n        name: al2\n---\napiVersion: karpenter.k8s.aws/v1\nkind: EC2NodeClass\nmetadata:\n  name: al2\n  annotations:\n    kubernetes.io/description: \"EC2NodeClass for running Amazon Linux 2 nodes with custom user data\"\nspec:\n  role: \"KarpenterNodeRole-${CLUSTER_NAME}\" # replace with your cluster name\n  subnetSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\" # replace with your cluster name\n  securityGroupSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\" # replace with your cluster name\n  amiSelectorTerms:\n    - alias: al2023@latest # Amazon Linux 2023\n  userData: |\n    MIME-Version: 1.0\n    Content-Type: multipart/mixed; boundary=\"BOUNDARY\"\n\n    --BOUNDARY\n    Content-Type: text/x-shellscript; charset=\"us-ascii\"\n\n    #!/bin/bash\n    echo \"Running a custom user data script\"\n\n    --BOUNDARY--\n"
  },
  {
    "path": "examples/v1/al2-kubelet-log-query.yaml",
    "content": "# This example NodePool will provision instances using the AL2 EKS-Optimized AMI\n# and will be prepended to a Karpenter managed section that will bootstrap the kubelet.\n---\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\n  annotations:\n    kubernetes.io/description: \"General purpose NodePool for generic workloads\"\nspec:\n  template:\n    spec:\n      requirements:\n        - key: kubernetes.io/arch\n          operator: In\n          values: [\"amd64\"]\n        - key: kubernetes.io/os\n          operator: In\n          values: [\"linux\"]\n        - key: karpenter.sh/capacity-type\n          operator: In\n          values: [\"on-demand\"]\n        - key: karpenter.k8s.aws/instance-category\n          operator: In\n          values: [\"c\", \"m\", \"r\"]\n        - key: karpenter.k8s.aws/instance-generation\n          operator: Gt\n          values: [\"2\"]\n      nodeClassRef:\n        group: karpenter.k8s.aws\n        kind: EC2NodeClass\n        name: al2\n---\napiVersion: karpenter.k8s.aws/v1\nkind: EC2NodeClass\nmetadata:\n  name: al2\n  annotations:\n    kubernetes.io/description: \"EC2NodeClass for running Amazon Linux 2 nodes with user data that enables the NodeLogQuery feature gate\"\nspec:\n  role: \"KarpenterNodeRole-${CLUSTER_NAME}\" # replace with your cluster name\n  subnetSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\" # replace with your cluster name\n  securityGroupSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\" # replace with your cluster name\n  amiSelectorTerms:\n    - alias: al2023@latest # Amazon Linux 2023\n  userData: |\n    MIME-Version: 1.0\n    Content-Type: multipart/mixed; boundary=\"BOUNDARY\"\n\n    --BOUNDARY\n    Content-Type: text/x-shellscript; charset=\"us-ascii\"\n\n    #!/bin/bash\n\n    set -e\n\n    # Add additional KUBELET_EXTRA_ARGS to the service\n    # Requires Kubernetes 1.27 (alpha feature)\n    cat << EOF > /etc/systemd/system/kubelet.service.d/90-kubelet-extra-args.conf\n    [Service]\n    Environment=\"KUBELET_EXTRA_ARGS=--feature-gates=NodeLogQuery=true $KUBELET_EXTRA_ARGS\"\n    EOF\n\n    # Enable log handler and log query to the kubelet configuration\n    echo \"$(jq '.enableSystemLogHandler=true' /etc/kubernetes/kubelet/kubelet-config.json)\" > /etc/kubernetes/kubelet/kubelet-config.json\n    echo \"$(jq '.enableSystemLogQuery=true' /etc/kubernetes/kubelet/kubelet-config.json)\" > /etc/kubernetes/kubelet/kubelet-config.json\n\n    --BOUNDARY--"
  },
  {
    "path": "examples/v1/al2023-custom-userdata.yaml",
    "content": "# This example NodePool will provision instances using the AL2023 EKS-Optimized AMI.\n---\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\n  annotations:\n    kubernetes.io/description: \"General purpose NodePool for generic workloads\"\nspec:\n  template:\n    spec:\n      requirements:\n        - key: kubernetes.io/arch\n          operator: In\n          values: [\"amd64\"]\n        - key: kubernetes.io/os\n          operator: In\n          values: [\"linux\"]\n        - key: karpenter.sh/capacity-type\n          operator: In\n          values: [\"on-demand\"]\n        - key: karpenter.k8s.aws/instance-category\n          operator: In\n          values: [\"c\", \"m\", \"r\"]\n        - key: karpenter.k8s.aws/instance-generation\n          operator: Gt\n          values: [\"2\"]\n      nodeClassRef:\n        group: karpenter.k8s.aws\n        kind: EC2NodeClass\n        name: al2023\n---\napiVersion: karpenter.k8s.aws/v1\nkind: EC2NodeClass\nmetadata:\n  name: al2023\n  annotations:\n    kubernetes.io/description: \"EC2NodeClass for running Amazon Linux 2023 nodes with custom user data\"\nspec:\n  role: \"KarpenterNodeRole-${CLUSTER_NAME}\" # replace with your cluster name\n  subnetSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\" # replace with your cluster name\n  securityGroupSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\" # replace with your cluster name\n  amiSelectorTerms:\n    - alias: al2023@latest # Amazon Linux 2023\n  userData: |\n    MIME-Version: 1.0\n    Content-Type: multipart/mixed; boundary=\"//\"\n\n    --//\n    Content-Type: application/node.eks.aws\n\n    # Example custom nodeconfig which mounts individual drives on an instance\n    apiVersion: node.eks.aws/v1alpha1\n    kind: NodeConfig\n    spec:\n      instance:\n        localStorage:\n          strategy: Mount\n\n    --//\n    Content-Type: text/x-shellscript; charset=\"us-ascii\"\n\n    #!/bin/bash\n    echo \"Hello, AL2023!\"\n    --//\n"
  },
  {
    "path": "examples/v1/bottlerocket.yaml",
    "content": "# This example NodePool will provision instances\n# running Bottlerocket OS\n---\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\n  annotations:\n    kubernetes.io/description: \"General purpose NodePool for generic workloads\"\nspec:\n  template:\n    spec:\n      requirements:\n        - key: kubernetes.io/arch\n          operator: In\n          values: [\"amd64\"]\n        - key: kubernetes.io/os\n          operator: In\n          values: [\"linux\"]\n        - key: karpenter.sh/capacity-type\n          operator: In\n          values: [\"on-demand\"]\n        - key: karpenter.k8s.aws/instance-category\n          operator: In\n          values: [\"c\", \"m\", \"r\"]\n        - key: karpenter.k8s.aws/instance-generation\n          operator: Gt\n          values: [\"2\"]\n      nodeClassRef:\n        group: karpenter.k8s.aws\n        kind: EC2NodeClass\n        name: bottlerocket\n---\napiVersion: karpenter.k8s.aws/v1\nkind: EC2NodeClass\nmetadata:\n  name: bottlerocket\n  annotations:\n    kubernetes.io/description: \"EC2NodeClass for running Bottlerocket nodes\"\nspec:\n  role: \"KarpenterNodeRole-${CLUSTER_NAME}\" # replace with your cluster name\n  subnetSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\" # replace with your cluster name\n  securityGroupSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\" # replace with your cluster name\n  amiSelectorTerms:\n    - alias: bottlerocket@latest # Bottlerocket\n  blockDeviceMappings:\n    - deviceName: /dev/xvda\n      ebs:\n        volumeType: gp3\n        volumeSize: 4Gi\n        deleteOnTermination: true\n    # Bottlerocket data volume\n    - deviceName: /dev/xvdb\n      ebs:\n        volumeType: gp3\n        volumeSize: 20Gi # replace with your required disk size\n        deleteOnTermination: true\n"
  },
  {
    "path": "examples/v1/br-custom-userdata.yaml",
    "content": "# This example NodePool will provision instances\n# running Bottlerocket OS and the user data settings specified in\n# this EC2NodeClass will be merged into Karpenter defaults.\n---\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\n  annotations:\n    kubernetes.io/description: \"General purpose NodePool for generic workloads\"\nspec:\n  template:\n    spec:\n      requirements:\n        - key: kubernetes.io/arch\n          operator: In\n          values: [\"amd64\"]\n        - key: kubernetes.io/os\n          operator: In\n          values: [\"linux\"]\n        - key: karpenter.sh/capacity-type\n          operator: In\n          values: [\"on-demand\"]\n        - key: karpenter.k8s.aws/instance-category\n          operator: In\n          values: [\"c\", \"m\", \"r\"]\n        - key: karpenter.k8s.aws/instance-generation\n          operator: Gt\n          values: [\"2\"]\n      nodeClassRef:\n        group: karpenter.k8s.aws\n        kind: EC2NodeClass\n        name: bottlerocket\n---\napiVersion: karpenter.k8s.aws/v1\nkind: EC2NodeClass\nmetadata:\n  name: bottlerocket\n  annotations:\n    kubernetes.io/description: \"EC2NodeClass for running Bottlerocket nodes with custom user data\"\nspec:\n  role: \"KarpenterNodeRole-${CLUSTER_NAME}\" # replace with your cluster name\n  subnetSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\" # replace with your cluster name\n  securityGroupSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\" # replace with your cluster name\n  amiSelectorTerms:\n    - alias: bottlerocket@latest # Bottlerocket\n  userData:  |\n    [settings.kubernetes]\n    kube-api-qps = 30\n"
  },
  {
    "path": "examples/v1/custom-family-with-alias.yaml",
    "content": "# This example NodePool provisions instances using an AMI that belongs to a custom AMIFamily with an Alisa\n# Keep in mind, that you're in charge of bootstrapping your worker nodes.\n---\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\n  annotations:\n    kubernetes.io/description: \"General purpose NodePool for generic workloads\"\nspec:\n  template:\n    spec:\n      requirements:\n        - key: kubernetes.io/arch\n          operator: In\n          values: [\"amd64\"]\n        - key: kubernetes.io/os\n          operator: In\n          values: [\"linux\"]\n        - key: karpenter.sh/capacity-type\n          operator: In\n          values: [\"on-demand\"]\n        - key: karpenter.k8s.aws/instance-category\n          operator: In\n          values: [\"c\", \"m\", \"r\"]\n        - key: karpenter.k8s.aws/instance-generation\n          operator: Gt\n          values: [\"2\"]\n      nodeClassRef:\n        group: karpenter.k8s.aws\n        kind: EC2NodeClass\n        name: custom-family\n---\napiVersion: karpenter.k8s.aws/v1\nkind: EC2NodeClass\nmetadata:\n  name: custom-family\n  annotations:\n    kubernetes.io/description: \"EC2NodeClass for running Custom AMIFamily with custom user data that doesn't conform to the other AMIFamilies\"\nspec:\n  amiFamily: Custom\n  role: \"KarpenterNodeRole-${CLUSTER_NAME}\" # replace with your cluster name\n  subnetSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\" # replace with your cluster name\n  securityGroupSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\" # replace with your cluster name\n  amiSelectorTerms:\n    - alias: bottlerocket@latest\n  userData: |\n    MIME-Version: 1.0\n    Content-Type: multipart/mixed; boundary=\"BOUNDARY\"\n\n    --BOUNDARY\n    Content-Type: text/x-shellscript; charset=\"us-ascii\"\n\n    #!/bin/bash\n    echo \"Running my custom set-up\"\n    \n    # Have the kubelet label the node\n    /etc/eks/bootstrap.sh my-cluster --kubelet-extra-args='--node-labels=foo=bar'\n\n    --BOUNDARY\n"
  },
  {
    "path": "examples/v1/custom-family.yaml",
    "content": "# This example NodePool provisions instances using an AMI that belongs to a custom AMIFamily\n# Keep in mind, that you're in charge of bootstrapping your worker nodes.\n---\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\n  annotations:\n    kubernetes.io/description: \"General purpose NodePool for generic workloads\"\nspec:\n  template:\n    spec:\n      requirements:\n        - key: kubernetes.io/arch\n          operator: In\n          values: [\"amd64\"]\n        - key: kubernetes.io/os\n          operator: In\n          values: [\"linux\"]\n        - key: karpenter.sh/capacity-type\n          operator: In\n          values: [\"on-demand\"]\n        - key: karpenter.k8s.aws/instance-category\n          operator: In\n          values: [\"c\", \"m\", \"r\"]\n        - key: karpenter.k8s.aws/instance-generation\n          operator: Gt\n          values: [\"2\"]\n      nodeClassRef:\n        group: karpenter.k8s.aws\n        kind: EC2NodeClass\n        name: custom-family\n---\napiVersion: karpenter.k8s.aws/v1\nkind: EC2NodeClass\nmetadata:\n  name: custom-family\n  annotations:\n    kubernetes.io/description: \"EC2NodeClass for running Custom AMIFamily with custom user data that doesn't conform to the other AMIFamilies\"\nspec:\n  amiFamily: Custom\n  role: \"KarpenterNodeRole-${CLUSTER_NAME}\" # replace with your cluster name\n  subnetSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\" # replace with your cluster name\n  securityGroupSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\" # replace with your cluster name\n  amiSelectorTerms:\n    - id: ami-123\n    - id: ami-456\n  userData: |\n    MIME-Version: 1.0\n    Content-Type: multipart/mixed; boundary=\"BOUNDARY\"\n\n    --BOUNDARY\n    Content-Type: text/x-shellscript; charset=\"us-ascii\"\n\n    #!/bin/bash\n    echo \"Running my custom set-up\"\n    \n    # Have the kubelet label the node\n    /etc/eks/bootstrap.sh my-cluster --kubelet-extra-args='--node-labels=foo=bar'\n\n    --BOUNDARY\n"
  },
  {
    "path": "examples/v1/general-purpose.yaml",
    "content": "# This example NodePool will provision general purpose instances\n---\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: general-purpose\n  annotations:\n    kubernetes.io/description: \"General purpose NodePool for generic workloads\"\nspec:\n  template:\n    spec:\n      requirements:\n        - key: kubernetes.io/arch\n          operator: In\n          values: [\"amd64\"]\n        - key: kubernetes.io/os\n          operator: In\n          values: [\"linux\"]\n        - key: karpenter.sh/capacity-type\n          operator: In\n          values: [\"on-demand\"]\n        - key: karpenter.k8s.aws/instance-category\n          operator: In\n          values: [\"c\", \"m\", \"r\"]\n        - key: karpenter.k8s.aws/instance-generation\n          operator: Gt\n          values: [\"2\"]\n      nodeClassRef:\n        group: karpenter.k8s.aws\n        kind: EC2NodeClass\n        name: default\n---\napiVersion: karpenter.k8s.aws/v1\nkind: EC2NodeClass\nmetadata:\n  name: default\n  annotations:\n    kubernetes.io/description: \"General purpose EC2NodeClass for running Amazon Linux 2 nodes\"\nspec:\n  role: \"KarpenterNodeRole-${CLUSTER_NAME}\" # replace with your cluster name\n  subnetSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\" # replace with your cluster name\n  securityGroupSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\" # replace with your cluster name\n  amiSelectorTerms:\n    - alias: al2023@latest # Amazon Linux 2023\n"
  },
  {
    "path": "examples/v1/instance-store-ephemeral-storage.yaml",
    "content": "# This example NodePool will provision AL2 instances with\n# local NVMe instance-store disks used for node ephemeral storage.\n---\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\n  annotations:\n    kubernetes.io/description: \"General purpose NodePool for generic workloads\"\nspec:\n  template:\n    spec:\n      requirements:\n        - key: kubernetes.io/arch\n          operator: In\n          values: [\"amd64\"]\n        - key: kubernetes.io/os\n          operator: In\n          values: [\"linux\"]\n        - key: karpenter.sh/capacity-type\n          operator: In\n          values: [\"on-demand\"]\n        - key: karpenter.k8s.aws/instance-category\n          operator: In\n          values: [\"c\", \"m\", \"r\"]\n        - key: karpenter.k8s.aws/instance-generation\n          operator: Gt\n          values: [\"2\"]\n        - key: karpenter.k8s.aws/instance-local-nvme\n          operator: Gt\n          values: [\"300\"]\n      nodeClassRef:\n        group: karpenter.k8s.aws\n        kind: EC2NodeClass\n        name: instance-store-ephemeral-storage\n---\napiVersion: karpenter.k8s.aws/v1\nkind: EC2NodeClass\nmetadata:\n  name: instance-store-ephemeral-storage\n  annotations:\n    kubernetes.io/description: \"EC2NodeClass to provision nodes with instance-store ephemeral storage\"\nspec:\n  instanceStorePolicy: \"RAID0\"\n  role: \"KarpenterNodeRole-${CLUSTER_NAME}\" # replace with your cluster name\n  subnetSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\" # replace with your cluster name\n  securityGroupSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\" # replace with your cluster name\n  amiSelectorTerms:\n    - alias: al2023@latest  # Amazon Linux 2023\n"
  },
  {
    "path": "examples/v1/large-instances.yaml",
    "content": "# This example NodePool will avoid small instance types in the cluster\n---\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: large-instances\n  annotations:\n    kubernetes.io/description: \"NodePool for provisioning larger instances using Gt/Lt requirements\"\nspec:\n  template:\n    spec:\n      requirements:\n          # exclude instances with < 4 cores and < 8GiB memory (8192 mebibytes)\n        - key: \"karpenter.k8s.aws/instance-cpu\"\n          operator: Gt\n          values: [\"3\"]\n        - key: \"karpenter.k8s.aws/instance-memory\"\n          operator: Gt\n          values: [\"8191\"]\n      nodeClassRef:\n        group: karpenter.k8s.aws\n        kind: EC2NodeClass\n        name: default\n---\napiVersion: karpenter.k8s.aws/v1\nkind: EC2NodeClass\nmetadata:\n  name: default\n  annotations:\n    kubernetes.io/description: \"General purpose EC2NodeClass for running Amazon Linux 2 nodes\"\nspec:\n  role: \"KarpenterNodeRole-${CLUSTER_NAME}\" # replace with your cluster name\n  subnetSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\" # replace with your cluster name\n  securityGroupSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\" # replace with your cluster name\n  amiSelectorTerms:\n    - alias: al2023@latest  # Amazon Linux 2023\n"
  },
  {
    "path": "examples/v1/max-node-lifetime.yaml",
    "content": "# This example NodePool will provision instances\n# that are replaced every 7 days and drain after 1 minute\n# with no workloads\n---\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\n  annotations:\n    kubernetes.io/description: \"General purpose NodePool for generic workloads\"\nspec:\n  template:\n    spec:\n      requirements:\n        - key: kubernetes.io/arch\n          operator: In\n          values: [\"amd64\"]\n        - key: kubernetes.io/os\n          operator: In\n          values: [\"linux\"]\n        - key: karpenter.sh/capacity-type\n          operator: In\n          values: [\"on-demand\"]\n        - key: karpenter.k8s.aws/instance-category\n          operator: In\n          values: [\"c\", \"m\", \"r\"]\n        - key: karpenter.k8s.aws/instance-generation\n          operator: Gt\n          values: [\"2\"]\n      nodeClassRef:\n        group: karpenter.k8s.aws\n        kind: EC2NodeClass\n        name: default\n      expireAfter: 168h # expire nodes after 7 days = 7 * 24h\n      terminationGracePeriod: 24h # grace period after 1 day = 7 * 24h, for a max node lifetime of 8 days\n  disruption:\n    consolidationPolicy: WhenEmpty\n    consolidateAfter: 60s # scale down nodes after 60 seconds without workloads (excluding daemons)\n---\napiVersion: karpenter.k8s.aws/v1\nkind: EC2NodeClass\nmetadata:\n  name: default\n  annotations:\n    kubernetes.io/description: \"General purpose EC2NodeClass for running Amazon Linux 2 nodes\"\nspec:\n  role: \"KarpenterNodeRole-${CLUSTER_NAME}\" # replace with your cluster name\n  subnetSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\" # replace with your cluster name\n  securityGroupSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\" # replace with your cluster name\n  amiSelectorTerms:\n    - alias: al2023@latest # Amazon Linux 2023\n"
  },
  {
    "path": "examples/v1/min-values-family.yaml",
    "content": "# This example will use spot instance type for all provisioned instances\n# and enforces minValues to instance families which means at least that number of unique instance\n# families is required by the scheduler for the NodeClaim creation.\n---\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: spot\n  annotations:\n    kubernetes.io/description: \"NodePool for provisioning spot capacity\"\nspec:\n  template:\n    spec:\n      requirements:\n        - key: karpenter.sh/capacity-type\n          operator: In\n          values: [\"spot\"]\n        - key: kubernetes.io/arch\n          operator: In\n          values: [\"amd64\"]\n        - key: kubernetes.io/os\n          operator: In\n          values: [\"linux\"]\n        - key: karpenter.k8s.aws/instance-category\n          operator: In\n          values: [\"c\", \"m\", \"r\"]\n        - key: karpenter.k8s.aws/instance-family\n          operator: Exists\n          minValues: 5\n        - key: karpenter.k8s.aws/instance-generation\n          operator: Gt\n          values: [\"2\"]\n      nodeClassRef:\n        group: karpenter.k8s.aws\n        kind: EC2NodeClass\n        name: default\n---\napiVersion: karpenter.k8s.aws/v1\nkind: EC2NodeClass\nmetadata:\n  name: default\n  annotations:\n    kubernetes.io/description: \"General purpose EC2NodeClass for running Amazon Linux 2 nodes\"\nspec:\n  role: \"KarpenterNodeRole-${CLUSTER_NAME}\" # replace with your cluster name\n  subnetSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\" # replace with your cluster name\n  securityGroupSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\" # replace with your cluster name\n  amiSelectorTerms:\n    - alias: al2023@v20240625 # Amazon Linux 2023"
  },
  {
    "path": "examples/v1/min-values-multiple-keys.yaml",
    "content": "# This example will use spot instance type for all provisioned instances and enforces minValues to various keys where it is defined i.e \n# at least 2 unique instance families from [c,m,r], 5 unique instance families [eg: \"m5\",\"m5d\",\"m5dn\",\"c5\",\"c5d\",\"c4\" etc], 2 unique instance types [eg: \"c5.2xlarge\",\"c4.xlarge\" etc] are required by the scheduler for the NodeClaim creation.\n# This ensures minimum flexiblity required to schedule pods into spot nodes.\n---\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: spot\n  annotations:\n    kubernetes.io/description: \"NodePool for provisioning spot capacity\"\nspec:\n  template:\n    spec:\n      requirements:\n        - key: karpenter.sh/capacity-type\n          operator: In\n          values: [\"spot\"]\n        - key: kubernetes.io/arch\n          operator: In\n          values: [\"amd64\"]\n        - key: kubernetes.io/os\n          operator: In\n          values: [\"linux\"]\n        - key: karpenter.k8s.aws/instance-category\n          operator: In\n          values: [\"c\", \"m\", \"r\"]\n          minValues: 2\n        - key: karpenter.k8s.aws/instance-family\n          operator: Exists\n          minValues: 5\n        - key: node.kubernetes.io/instance-type\n          operator: Exists\n          minValues: 2\n        - key: karpenter.k8s.aws/instance-generation\n          operator: Gt\n          values: [\"2\"]\n      nodeClassRef:\n        group: karpenter.k8s.aws\n        kind: EC2NodeClass\n        name: default\n---\napiVersion: karpenter.k8s.aws/v1\nkind: EC2NodeClass\nmetadata:\n  name: default\n  annotations:\n    kubernetes.io/description: \"General purpose EC2NodeClass for running Amazon Linux 2 nodes\"\nspec:\n  role: \"KarpenterNodeRole-${CLUSTER_NAME}\" # replace with your cluster name\n  subnetSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\" # replace with your cluster name\n  securityGroupSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\" # replace with your cluster name\n  amiSelectorTerms:\n    - alias: al2023@v20240625 # Amazon Linux 2023"
  },
  {
    "path": "examples/v1/multiple-arch.yaml",
    "content": "# This example allows you to create arm64 AND amd64 workloads\n# Karpenter will choose the NodePool that suits the workload requirements and\n# find an AMI automatically that matches the architecture requirements\n---\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: amd64\n  annotations:\n    kubernetes.io/description: \"NodePool for amd64 workloads\"\nspec:\n  template:\n    spec:\n      requirements:\n        - key: kubernetes.io/arch\n          operator: In\n          values: [\"amd64\"]\n        - key: kubernetes.io/os\n          operator: In\n          values: [\"linux\"]\n        - key: karpenter.sh/capacity-type\n          operator: In\n          values: [\"on-demand\"]\n        - key: karpenter.k8s.aws/instance-category\n          operator: In\n          values: [\"c\", \"m\", \"r\"]\n        - key: karpenter.k8s.aws/instance-generation\n          operator: Gt\n          values: [\"2\"]\n      nodeClassRef:\n        group: karpenter.k8s.aws\n        kind: EC2NodeClass\n        name: default\n---\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: arm64\n  annotations:\n    kubernetes.io/description: \"NodePool for arm64 workloads\"\nspec:\n  template:\n    spec:\n      requirements:\n        - key: kubernetes.io/arch\n          operator: In\n          values: [\"arm64\"]\n        - key: kubernetes.io/os\n          operator: In\n          values: [\"linux\"]\n        - key: karpenter.sh/capacity-type\n          operator: In\n          values: [\"on-demand\"]\n        - key: karpenter.k8s.aws/instance-category\n          operator: In\n          values: [\"c\", \"a\"]\n        - key: karpenter.k8s.aws/instance-generation\n          operator: Gt\n          values: [\"2\"]\n      nodeClassRef:\n        group: karpenter.k8s.aws\n        kind: EC2NodeClass\n        name: default\n---\napiVersion: karpenter.k8s.aws/v1\nkind: EC2NodeClass\nmetadata:\n  name: default\n  annotations:\n    kubernetes.io/description: \"General purpose EC2NodeClass for running Amazon Linux 2 nodes\"\nspec:\n  role: \"KarpenterNodeRole-${CLUSTER_NAME}\" # replace with your cluster name\n  subnetSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\" # replace with your cluster name\n  securityGroupSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\" # replace with your cluster name\n  amiSelectorTerms:\n    - alias: al2023@latest # Amazon Linux 2023"
  },
  {
    "path": "examples/v1/multiple-ebs.yaml",
    "content": "# This example NodePool will provision instances\n# with multiple EBS volumes attached\n---\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\n  annotations:\n    kubernetes.io/description: \"General purpose NodePool for generic workloads\"\nspec:\n  template:\n    spec:\n      requirements:\n        - key: kubernetes.io/arch\n          operator: In\n          values: [\"amd64\"]\n        - key: kubernetes.io/os\n          operator: In\n          values: [\"linux\"]\n        - key: karpenter.sh/capacity-type\n          operator: In\n          values: [\"on-demand\"]\n        - key: karpenter.k8s.aws/instance-category\n          operator: In\n          values: [\"c\", \"m\", \"r\"]\n        - key: karpenter.k8s.aws/instance-generation\n          operator: Gt\n          values: [\"2\"]\n      nodeClassRef:\n        group: karpenter.k8s.aws\n        kind: EC2NodeClass\n        name: multiple-ebs\n---\napiVersion: karpenter.k8s.aws/v1\nkind: EC2NodeClass\nmetadata:\n  name: multiple-ebs\n  annotations:\n    kubernetes.io/description: \"EC2NodeClass to provision multiple EBS volumes to attach to new nodes\"\nspec:\n  role: \"KarpenterNodeRole-${CLUSTER_NAME}\" # replace with your cluster name\n  subnetSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\" # replace with your cluster name\n  securityGroupSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\" # replace with your cluster name\n  amiSelectorTerms:\n    - alias: al2023@latest # Amazon Linux 2023\n  blockDeviceMappings:\n    - deviceName: /dev/xvda\n      ebs:\n        volumeType: gp3\n        volumeSize: 20Gi\n        deleteOnTermination: true\n    - deviceName: /dev/xvdb\n      ebs:\n        volumeType: gp3\n        volumeSize: 100Gi\n        deleteOnTermination: true\n    - deviceName: /dev/xvdc\n      ebs:\n        volumeType: gp3\n        volumeSize: 2000Gi\n        deleteOnTermination: true\n"
  },
  {
    "path": "examples/v1/spot.yaml",
    "content": "# This example will use spot instance type for all\n# provisioned instances\n---\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: spot\n  annotations:\n    kubernetes.io/description: \"NodePool for provisioning spot capacity\"\nspec:\n  template:\n    spec:\n      requirements:\n        - key: karpenter.sh/capacity-type\n          operator: In\n          values: [\"spot\"]\n        - key: kubernetes.io/arch\n          operator: In\n          values: [\"amd64\"]\n        - key: kubernetes.io/os\n          operator: In\n          values: [\"linux\"]\n        - key: karpenter.k8s.aws/instance-category\n          operator: In\n          values: [\"c\", \"m\", \"r\"]\n        - key: karpenter.k8s.aws/instance-generation\n          operator: Gt\n          values: [\"2\"]\n      nodeClassRef:\n        group: karpenter.k8s.aws\n        kind: EC2NodeClass\n        name: default\n---\napiVersion: karpenter.k8s.aws/v1\nkind: EC2NodeClass\nmetadata:\n  name: default\n  annotations:\n    kubernetes.io/description: \"General purpose EC2NodeClass for running Amazon Linux 2 nodes\"\nspec:\n  role: \"KarpenterNodeRole-${CLUSTER_NAME}\" # replace with your cluster name\n  subnetSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\" # replace with your cluster name\n  securityGroupSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\" # replace with your cluster name\n  amiSelectorTerms:\n    - alias: al2023@latest # Amazon Linux 2023\n"
  },
  {
    "path": "examples/v1/windows-2019.yaml",
    "content": "# This example NodePool will provision instances running Windows Server 2019\n---\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: windows2019\n  annotations:\n    kubernetes.io/description: \"General purpose NodePool for Windows workloads\"\nspec:\n  template:\n    spec:\n      requirements:\n        - key: kubernetes.io/os\n          operator: In\n          values: [\"windows\"]\n        - key: kubernetes.io/arch\n          operator: In\n          values: [\"amd64\"]\n        - key: karpenter.sh/capacity-type\n          operator: In\n          values: [\"on-demand\"]\n        - key: karpenter.k8s.aws/instance-category\n          operator: In\n          values: [\"c\", \"m\", \"r\"]\n        - key: karpenter.k8s.aws/instance-generation\n          operator: Gt\n          values: [\"2\"]\n      nodeClassRef:\n        group: karpenter.k8s.aws\n        kind: EC2NodeClass\n        name: windows2019\n---\napiVersion: karpenter.k8s.aws/v1\nkind: EC2NodeClass\nmetadata:\n  name: windows2019\n  annotations:\n    kubernetes.io/description: \"Nodes running Windows Server 2019\"\nspec:\n  role: \"KarpenterNodeRole-${CLUSTER_NAME}\" # replace with your cluster name\n  subnetSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\" # replace with your cluster name\n  securityGroupSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\" # replace with your cluster name\n  amiSelectorTerms:\n    - alias: windows2019@latest #Windows does not support pinning\n  metadataOptions:\n    httpProtocolIPv6: disabled\n    httpTokens: required"
  },
  {
    "path": "examples/v1/windows-2022.yaml",
    "content": "# This example NodePool will provision instances running Windows Server 2022\n---\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: windows2022\n  annotations:\n    kubernetes.io/description: \"General purpose NodePool for Windows workloads\"\nspec:\n  template:\n    spec:\n      requirements:\n        - key: kubernetes.io/os\n          operator: In\n          values: [\"windows\"]\n        - key: kubernetes.io/arch\n          operator: In\n          values: [\"amd64\"]\n        - key: karpenter.sh/capacity-type\n          operator: In\n          values: [\"on-demand\"]\n        - key: karpenter.k8s.aws/instance-category\n          operator: In\n          values: [\"c\", \"m\", \"r\"]\n        - key: karpenter.k8s.aws/instance-generation\n          operator: Gt\n          values: [\"2\"]\n      nodeClassRef:\n        group: karpenter.k8s.aws\n        kind: EC2NodeClass\n        name: windows2022\n---\napiVersion: karpenter.k8s.aws/v1\nkind: EC2NodeClass\nmetadata:\n  name: windows2022\n  annotations:\n    kubernetes.io/description: \"Nodes running Windows Server 2022\"\nspec:\n  role: \"KarpenterNodeRole-${CLUSTER_NAME}\" # replace with your cluster name\n  subnetSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\" # replace with your cluster name\n  securityGroupSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\" # replace with your cluster name\n  amiSelectorTerms:\n    - alias: windows2022@latest # Windows does not support pinning\n  metadataOptions:\n    httpProtocolIPv6: disabled\n    httpTokens: required"
  },
  {
    "path": "examples/v1/windows-2025.yaml",
    "content": "# This example NodePool will provision instances running Windows Server 2025\n---\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: windows2025\n  annotations:\n    kubernetes.io/description: \"General purpose NodePool for Windows workloads\"\nspec:\n  template:\n    spec:\n      requirements:\n        - key: kubernetes.io/os\n          operator: In\n          values: [\"windows\"]\n        - key: kubernetes.io/arch\n          operator: In\n          values: [\"amd64\"]\n        - key: karpenter.sh/capacity-type\n          operator: In\n          values: [\"on-demand\"]\n        - key: karpenter.k8s.aws/instance-category\n          operator: In\n          values: [\"c\", \"m\", \"r\"]\n        - key: karpenter.k8s.aws/instance-generation\n          operator: Gt\n          values: [\"2\"]\n      nodeClassRef:\n        group: karpenter.k8s.aws\n        kind: EC2NodeClass\n        name: windows2025\n---\napiVersion: karpenter.k8s.aws/v1\nkind: EC2NodeClass\nmetadata:\n  name: windows2025\n  annotations:\n    kubernetes.io/description: \"Nodes running Windows Server 2025\"\nspec:\n  role: \"KarpenterNodeRole-${CLUSTER_NAME}\" # replace with your cluster name\n  subnetSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\" # replace with your cluster name\n  securityGroupSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\" # replace with your cluster name\n  amiSelectorTerms:\n    - alias: windows2025@latest # Windows does not support pinning\n  metadataOptions:\n    httpProtocolIPv6: disabled\n    httpTokens: required"
  },
  {
    "path": "examples/v1/windows-custom-userdata.yaml",
    "content": "# This example NodePool provisions instances using the Windows 2022 EKS-Optimized AMI.\n# The UserData defined in spec.UserData should be PowerShell commands\n# and they will be prepended to a Karpenter managed section that will bootstrap the kubelet.\n# This example also applies to the Windows 2019 EKS-Optimized AMI.\n---\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: windows2022\n  annotations:\n    kubernetes.io/description: \"General purpose NodePool for Windows workloads\"\nspec:\n  template:\n    spec:\n      requirements:\n        - key: kubernetes.io/os\n          operator: In\n          values: [\"windows\"]\n        - key: kubernetes.io/arch\n          operator: In\n          values: [\"amd64\"]\n        - key: karpenter.sh/capacity-type\n          operator: In\n          values: [\"on-demand\"]\n        - key: karpenter.k8s.aws/instance-category\n          operator: In\n          values: [\"c\", \"m\", \"r\"]\n        - key: karpenter.k8s.aws/instance-generation\n          operator: Gt\n          values: [\"2\"]\n      nodeClassRef:\n        group: karpenter.k8s.aws/v1\n        kind: EC2NodeClass\n        name: windows2022\n---\napiVersion: karpenter.k8s.aws/v1\nkind: EC2NodeClass\nmetadata:\n  name: windows2022\n  annotations:\n    kubernetes.io/description: \"Nodes running Windows Server 2022\"\nspec:\n  amiFamily: Windows2022\n  role: \"KarpenterNodeRole-${CLUSTER_NAME}\" # replace with your cluster name\n  subnetSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\" # replace with your cluster name\n  securityGroupSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\" # replace with your cluster name\n  amiSelectorTerms:\n    - alias: windows2022@latest # Windows does not support pinning\n  metadataOptions:\n    httpProtocolIPv6: disabled\n    httpTokens: required\n  userData: |\n    New-Item -Path 'C:\\temp\\' -ItemType Directory\n    New-Item -Path 'C:\\temp\\sample.txt' -ItemType File"
  },
  {
    "path": "examples/workloads/arm64.yaml",
    "content": "apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: arm64\nspec:\n  replicas: 1\n  selector:\n    matchLabels:\n      app: arm64\n  template:\n    metadata:\n      labels:\n        app: arm64\n    spec:\n      securityContext:\n        runAsUser: 2000\n        runAsGroup: 3000\n        fsGroup: 2000\n      containers:\n      - image: public.ecr.aws/eks-distro/kubernetes/pause:3.2\n        name: arm64\n        resources:\n          requests:\n            cpu: \"1\"\n            memory: 256M\n        securityContext:\n          allowPrivilegedEscalation: false\n      nodeSelector:\n        kubernetes.io/arch: arm64"
  },
  {
    "path": "examples/workloads/disruption-budget.yaml",
    "content": "apiVersion: policy/v1\nkind: PodDisruptionBudget\nmetadata:\n  name: pdb\nspec:\n  minAvailable: \"80%\"\n  selector:\n    matchLabels:\n      app: pdb\n---\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: pdb\nspec:\n  replicas: 10\n  selector:\n    matchLabels:\n      app: pdb\n  template:\n    metadata:\n      labels:\n        app: pdb\n    spec:\n      securityContext:\n        runAsUser: 2000\n        runAsGroup: 3000\n        fsGroup: 2000\n      containers:\n      - image: public.ecr.aws/eks-distro/kubernetes/pause:3.2\n        name: pdb\n        resources:\n          requests:\n            cpu: \"1\"\n            memory: 256M\n        securityContext:\n          allowPrivilegedEscalation: false\n      nodeSelector:\n        kubernetes.io/arch: amd64"
  },
  {
    "path": "examples/workloads/gpu-amd.yaml",
    "content": "apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: gpu-amd\nspec:\n  replicas: 0\n  selector:\n    matchLabels:\n      app: gpu-amd\n  template:\n    metadata:\n      labels:\n        app: gpu-amd\n    spec:\n      securityContext:\n        runAsUser: 1000\n        runAsGroup: 3000\n        fsGroup: 2000\n      containers:\n      - image: public.ecr.aws/eks-distro/kubernetes/pause:3.2\n        name: gpu-amd\n        resources:\n          limits:\n            amd.com/gpu: \"1\"\n          requests:\n            cpu: \"1\"\n            memory: 256M\n        securityContext:\n          allowPrivilegedEscalation: false"
  },
  {
    "path": "examples/workloads/gpu-nvidia.yaml",
    "content": "apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: gpu-nvidia\nspec:\n  replicas: 0\n  selector:\n    matchLabels:\n      app: gpu-nvidia\n  template:\n    metadata:\n      labels:\n        app: gpu-nvidia\n    spec:\n      securityContext:\n        runAsUser: 1000\n        runAsGroup: 3000\n        fsGroup: 2000\n      containers:\n      - image: public.ecr.aws/eks-distro/kubernetes/pause:3.2\n        name: gpu-nvidia\n        resources:\n          limits:\n            nvidia.com/gpu: \"1\"\n          requests:\n            cpu: \"1\"\n            memory: 256M\n        securityContext:\n          allowPrivilegedEscalation: false"
  },
  {
    "path": "examples/workloads/inflate.yaml",
    "content": "apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: inflate\nspec:\n  selector:\n    matchLabels:\n      app: inflate\n  template:\n    metadata:\n      labels:\n        app: inflate\n    spec:\n      securityContext:\n        runAsUser: 1000\n        runAsGroup: 3000\n        fsGroup: 2000\n      containers:\n      - image: public.ecr.aws/eks-distro/kubernetes/pause:3.2\n        name: inflate\n        resources:\n          requests:\n            cpu: \"1\"\n            memory: 256M\n        securityContext:\n          allowPrivilegeEscalation: false\n"
  },
  {
    "path": "examples/workloads/neuron.yaml",
    "content": "apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: neuron\nspec:\n  replicas: 0\n  selector:\n    matchLabels:\n      app: neuron\n  template:\n    metadata:\n      labels:\n        app: neuron\n    spec:\n      securityContext:\n        runAsUser: 1000\n        runAsGroup: 3000\n        fsGroup: 2000\n      containers:\n      - image: public.ecr.aws/eks-distro/kubernetes/pause:3.2\n        name: neuron\n        resources:\n          limits:\n            aws.amazon.com/neuron: \"1\"\n          requests:\n            cpu: \"1\"\n            memory: 256M\n        securityContext:\n          allowPrivilegeEscalation: false\n"
  },
  {
    "path": "examples/workloads/prefer-arm.yaml",
    "content": "apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: prefer-arm\nspec:\n  replicas: 0\n  selector:\n    matchLabels:\n      app: prefer-arm\n  template:\n    metadata:\n      labels:\n        app: prefer-arm\n    spec:\n      securityContext:\n        runAsUser: 1000\n        runAsGroup: 3000\n        fsGroup: 2000\n      affinity:\n        nodeAffinity:\n          preferredDuringSchedulingIgnoredDuringExecution:\n          - weight: 1\n            preference:\n              matchExpressions:\n              - key: kubernetes.io/arch\n                operator: In\n                values:\n                - amd64\n          - weight: 50\n            preference:\n              matchExpressions:\n              - key: kubernetes.io/arch\n                operator: In\n                values:\n                - arm64\n      containers:\n      - image: public.ecr.aws/eks-distro/kubernetes/pause:3.2\n        name: prefer-arm\n        resources:\n          requests:\n            cpu: \"1\"\n            memory: 256M\n        securityContext:\n          allowPrivilegeEscalation: false"
  },
  {
    "path": "examples/workloads/spot.yaml",
    "content": "apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: spot\nspec:\n  replicas: 0\n  selector:\n    matchLabels:\n      app: spot\n  template:\n    metadata:\n      labels:\n        app: spot\n    spec:\n      securityContext:\n        runAsUser: 1000\n        runAsGroup: 3000\n        fsGroup: 2000\n      containers:\n      - image: public.ecr.aws/eks-distro/kubernetes/pause:3.2\n        name: spot\n        resources:\n          requests:\n            cpu: \"1\"\n            memory: 256M\n        securityContext:\n          allowPrivilegeEscalation: false\n      nodeSelector:\n        karpenter.sh/capacity-type: spot"
  },
  {
    "path": "examples/workloads/spread-hostname-zone.yaml",
    "content": "apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: host-zone-spread\nspec:\n  replicas: 50\n  selector:\n    matchLabels:\n      app: host-zone-spread\n  template:\n    metadata:\n      labels:\n        app: host-zone-spread\n    spec:\n      securityContext:\n        runAsUser: 1000\n        runAsGroup: 3000\n        fsGroup: 2000\n      containers:\n      - image: public.ecr.aws/eks-distro/kubernetes/pause:3.2\n        name: host-zone-spread\n        resources:\n          requests:\n            cpu: \"1\"\n            memory: 256M\n        securityContext:\n          allowPrivilegeEscalation: false\n      topologySpreadConstraints:\n      - labelSelector:\n          matchLabels:\n            app: host-zone-spread\n        maxSkew: 2\n        topologyKey: kubernetes.io/hostname\n        whenUnsatisfiable: DoNotSchedule\n      - labelSelector:\n          matchLabels:\n            app: host-zone-spread\n        maxSkew: 5\n        topologyKey: topology.kubernetes.io/zone\n        whenUnsatisfiable: DoNotSchedule\n"
  },
  {
    "path": "examples/workloads/spread-hostname.yaml",
    "content": "apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: host-spread\nspec:\n  replicas: 10\n  selector:\n    matchLabels:\n      app: host-spread\n  template:\n    metadata:\n      labels:\n        app: host-spread\n    spec:\n      securityContext:\n        runAsUser: 1000\n        runAsGroup: 3000\n        fsGroup: 2000\n      containers:\n      - image: public.ecr.aws/eks-distro/kubernetes/pause:3.2\n        name: host-spread\n        resources:\n          requests:\n            cpu: \"1\"\n            memory: 256M\n        securityContext:\n          allowPrivilegeEscalation: false\n      topologySpreadConstraints:\n      - labelSelector:\n          matchLabels:\n            app: host-spread\n        maxSkew: 2\n        topologyKey: kubernetes.io/hostname\n        whenUnsatisfiable: DoNotSchedule"
  },
  {
    "path": "examples/workloads/spread-zone.yaml",
    "content": "apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: zone-spread\nspec:\n  replicas: 0\n  selector:\n    matchLabels:\n      app: zone-spread\n  template:\n    metadata:\n      labels:\n        app: zone-spread\n    spec:\n      securityContext:\n        runAsUser: 1000\n        runAsGroup: 3000\n        fsGroup: 2000\n      containers:\n      - image: public.ecr.aws/eks-distro/kubernetes/pause:3.2\n        name: zone-spread\n        resources:\n          requests:\n            cpu: \"1\"\n            memory: 256M\n        securityContext:\n          allowPrivilegeEscalation: false\n      topologySpreadConstraints:\n      - labelSelector:\n          matchLabels:\n            app: zone-spread\n        maxSkew: 1\n        topologyKey: topology.kubernetes.io/zone\n        whenUnsatisfiable: DoNotSchedule\n"
  },
  {
    "path": "go.mod",
    "content": "module github.com/aws/karpenter-provider-aws\n\ngo 1.26.1\n\n// TODO: migrate tablewriter to v1.0.8\n// https://github.com/olekukonko/tablewriter/blob/c64d84b3ecc64a18cfc8ba10cdd8c52cc13a7d23/MIGRATION.md?plain=1#L661\nreplace github.com/olekukonko/tablewriter => github.com/olekukonko/tablewriter v0.0.5\n\nrequire (\n\tgithub.com/Pallinder/go-randomdata v1.2.0\n\tgithub.com/PuerkitoBio/goquery v1.11.0\n\tgithub.com/avast/retry-go v3.0.0+incompatible\n\tgithub.com/aws/amazon-vpc-resource-controller-k8s v1.7.18\n\tgithub.com/aws/aws-sdk-go-v2 v1.41.4\n\tgithub.com/aws/aws-sdk-go-v2/config v1.32.10\n\tgithub.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.18\n\tgithub.com/aws/aws-sdk-go-v2/service/ec2 v1.296.0\n\tgithub.com/aws/aws-sdk-go-v2/service/eks v1.80.1\n\tgithub.com/aws/aws-sdk-go-v2/service/fis v1.37.17\n\tgithub.com/aws/aws-sdk-go-v2/service/iam v1.53.3\n\tgithub.com/aws/aws-sdk-go-v2/service/pricing v1.40.12\n\tgithub.com/aws/aws-sdk-go-v2/service/sqs v1.42.22\n\tgithub.com/aws/aws-sdk-go-v2/service/ssm v1.68.1\n\tgithub.com/aws/aws-sdk-go-v2/service/sts v1.41.7\n\tgithub.com/aws/aws-sdk-go-v2/service/timestreamwrite v1.35.17\n\tgithub.com/aws/karpenter-provider-aws/tools/kompat v0.0.0-20240410220356-6b868db24881\n\tgithub.com/aws/smithy-go v1.24.2\n\tgithub.com/awslabs/amazon-eks-ami/nodeadm v0.0.0-20240229193347-cfab22a10647\n\tgithub.com/awslabs/operatorpkg v0.0.0-20251222193911-34e9a1898737\n\tgithub.com/awslabs/operatorpkg/aws v0.0.0-20250414225955-b47cd315ffe9\n\tgithub.com/docker/docker v28.5.2+incompatible\n\tgithub.com/go-logr/zapr v1.3.0\n\tgithub.com/google/uuid v1.6.0\n\tgithub.com/imdario/mergo v0.3.16\n\tgithub.com/jonathan-innis/aws-sdk-go-prometheus v0.1.1\n\tgithub.com/mitchellh/hashstructure/v2 v2.0.2\n\tgithub.com/onsi/ginkgo/v2 v2.28.1\n\tgithub.com/onsi/gomega v1.39.1\n\tgithub.com/patrickmn/go-cache v2.1.0+incompatible\n\tgithub.com/pelletier/go-toml/v2 v2.2.4\n\tgithub.com/prometheus/client_golang v1.23.2\n\tgithub.com/samber/lo v1.52.0\n\tgo.uber.org/multierr v1.11.0\n\tgo.uber.org/zap v1.27.1\n\tgolang.org/x/sync v0.19.0\n\tk8s.io/api v0.35.3\n\tk8s.io/apiextensions-apiserver v0.35.0\n\tk8s.io/apimachinery v0.35.3\n\tk8s.io/client-go v0.35.3\n\tk8s.io/klog/v2 v2.130.1\n\tk8s.io/utils v0.0.0-20251222233032-718f0e51e6d2\n\tsigs.k8s.io/controller-runtime v0.22.4\n\tsigs.k8s.io/karpenter v1.10.0\n\tsigs.k8s.io/yaml v1.6.0\n)\n\nrequire (\n\tgithub.com/Masterminds/semver/v3 v3.4.0 // indirect\n\tgithub.com/andybalholm/cascadia v1.3.3 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/credentials v1.19.10 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/internal/configsources v1.4.20 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.20 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/internal/ini v1.8.4 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.7 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.11.18 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.20 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/service/signin v1.0.6 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/service/sso v1.30.11 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.15 // indirect\n\tgithub.com/beorn7/perks v1.0.1 // indirect\n\tgithub.com/cespare/xxhash/v2 v2.3.0 // indirect\n\tgithub.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect\n\tgithub.com/emicklei/go-restful/v3 v3.13.0 // indirect\n\tgithub.com/evanphx/json-patch v5.9.11+incompatible // indirect\n\tgithub.com/evanphx/json-patch/v5 v5.9.11 // indirect\n\tgithub.com/fsnotify/fsnotify v1.9.0 // indirect\n\tgithub.com/fxamacker/cbor/v2 v2.9.0 // indirect\n\tgithub.com/go-logr/logr v1.4.3 // indirect\n\tgithub.com/go-openapi/jsonpointer v0.22.4 // indirect\n\tgithub.com/go-openapi/jsonreference v0.21.4 // indirect\n\tgithub.com/go-openapi/swag v0.25.4 // indirect\n\tgithub.com/go-openapi/swag/cmdutils v0.25.4 // indirect\n\tgithub.com/go-openapi/swag/conv v0.25.4 // indirect\n\tgithub.com/go-openapi/swag/fileutils v0.25.4 // indirect\n\tgithub.com/go-openapi/swag/jsonname v0.25.4 // indirect\n\tgithub.com/go-openapi/swag/jsonutils v0.25.4 // indirect\n\tgithub.com/go-openapi/swag/loading v0.25.4 // indirect\n\tgithub.com/go-openapi/swag/mangling v0.25.4 // indirect\n\tgithub.com/go-openapi/swag/netutils v0.25.4 // indirect\n\tgithub.com/go-openapi/swag/stringutils v0.25.4 // indirect\n\tgithub.com/go-openapi/swag/typeutils v0.25.4 // indirect\n\tgithub.com/go-openapi/swag/yamlutils v0.25.4 // indirect\n\tgithub.com/go-task/slim-sprig/v3 v3.0.0 // indirect\n\tgithub.com/google/btree v1.1.3 // indirect\n\tgithub.com/google/gnostic-models v0.7.1 // indirect\n\tgithub.com/google/go-cmp v0.7.0 // indirect\n\tgithub.com/google/pprof v0.0.0-20260115054156-294ebfa9ad83 // indirect\n\tgithub.com/gorilla/websocket v1.5.4-0.20250319132907-e064f32e3674 // indirect\n\tgithub.com/inconshreveable/mousetrap v1.1.0 // indirect\n\tgithub.com/json-iterator/go v1.1.12 // indirect\n\tgithub.com/klauspost/compress v1.18.1 // indirect\n\tgithub.com/mattn/go-runewidth v0.0.17 // indirect\n\tgithub.com/mitchellh/go-homedir v1.1.0 // indirect\n\tgithub.com/moby/spdystream v0.5.0 // indirect\n\tgithub.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect\n\tgithub.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // indirect\n\tgithub.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect\n\tgithub.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f // indirect\n\tgithub.com/olekukonko/tablewriter v1.1.0 // indirect\n\tgithub.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect\n\tgithub.com/prometheus/client_model v0.6.2 // indirect\n\tgithub.com/prometheus/common v0.67.4 // indirect\n\tgithub.com/prometheus/procfs v0.19.2 // indirect\n\tgithub.com/rivo/uniseg v0.4.7 // indirect\n\tgithub.com/robfig/cron/v3 v3.0.1 // indirect\n\tgithub.com/spf13/cobra v1.10.2 // indirect\n\tgithub.com/spf13/pflag v1.0.10 // indirect\n\tgithub.com/x448/float16 v0.8.4 // indirect\n\tgo.yaml.in/yaml/v2 v2.4.3 // indirect\n\tgo.yaml.in/yaml/v3 v3.0.4 // indirect\n\tgolang.org/x/mod v0.32.0 // indirect\n\tgolang.org/x/net v0.49.0 // indirect\n\tgolang.org/x/oauth2 v0.34.0 // indirect\n\tgolang.org/x/sys v0.40.0 // indirect\n\tgolang.org/x/term v0.39.0 // indirect\n\tgolang.org/x/text v0.34.0 // indirect\n\tgolang.org/x/time v0.14.0 // indirect\n\tgolang.org/x/tools v0.41.0 // indirect\n\tgomodules.xyz/jsonpatch/v2 v2.5.0 // indirect\n\tgoogle.golang.org/protobuf v1.36.11 // indirect\n\tgopkg.in/evanphx/json-patch.v4 v4.13.0 // indirect\n\tgopkg.in/inf.v0 v0.9.1 // indirect\n\tgopkg.in/yaml.v3 v3.0.1 // indirect\n\tk8s.io/cloud-provider v0.35.0 // indirect\n\tk8s.io/component-base v0.35.0 // indirect\n\tk8s.io/component-helpers v0.35.0 // indirect\n\tk8s.io/csi-translation-lib v0.35.0 // indirect\n\tk8s.io/kube-openapi v0.0.0-20251125145642-4e65d59e963e // indirect\n\tsigs.k8s.io/json v0.0.0-20250730193827-2d320260d730 // indirect\n\tsigs.k8s.io/randfill v1.0.0 // indirect\n\tsigs.k8s.io/structured-merge-diff/v6 v6.3.1 // indirect\n)\n"
  },
  {
    "path": "go.sum",
    "content": "github.com/Masterminds/semver/v3 v3.4.0 h1:Zog+i5UMtVoCU8oKka5P7i9q9HgrJeGzI9SA1Xbatp0=\ngithub.com/Masterminds/semver/v3 v3.4.0/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM=\ngithub.com/Pallinder/go-randomdata v1.2.0 h1:DZ41wBchNRb/0GfsePLiSwb0PHZmT67XY00lCDlaYPg=\ngithub.com/Pallinder/go-randomdata v1.2.0/go.mod h1:yHmJgulpD2Nfrm0cR9tI/+oAgRqCQQixsA8HyRZfV9Y=\ngithub.com/PuerkitoBio/goquery v1.11.0 h1:jZ7pwMQXIITcUXNH83LLk+txlaEy6NVOfTuP43xxfqw=\ngithub.com/PuerkitoBio/goquery v1.11.0/go.mod h1:wQHgxUOU3JGuj3oD/QFfxUdlzW6xPHfqyHre6VMY4DQ=\ngithub.com/andybalholm/cascadia v1.3.3 h1:AG2YHrzJIm4BZ19iwJ/DAua6Btl3IwJX+VI4kktS1LM=\ngithub.com/andybalholm/cascadia v1.3.3/go.mod h1:xNd9bqTn98Ln4DwST8/nG+H0yuB8Hmgu1YHNnWw0GeA=\ngithub.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio=\ngithub.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs=\ngithub.com/avast/retry-go v3.0.0+incompatible h1:4SOWQ7Qs+oroOTQOYnAHqelpCO0biHSxpiH9JdtuBj0=\ngithub.com/avast/retry-go v3.0.0+incompatible/go.mod h1:XtSnn+n/sHqQIpZ10K1qAevBhOOCWBLXXy3hyiqqBrY=\ngithub.com/aws/amazon-vpc-resource-controller-k8s v1.7.18 h1:V/h33TgtVkR/1hkYVWU8RFD8i8h5G+xZ6eX9Hr0zKpk=\ngithub.com/aws/amazon-vpc-resource-controller-k8s v1.7.18/go.mod h1:iZa92r5f6vu42hQhyzrQa9UnxieNWcYmQ9DEKYMuXWo=\ngithub.com/aws/aws-sdk-go-v2 v1.41.4 h1:10f50G7WyU02T56ox1wWXq+zTX9I1zxG46HYuG1hH/k=\ngithub.com/aws/aws-sdk-go-v2 v1.41.4/go.mod h1:mwsPRE8ceUUpiTgF7QmQIJ7lgsKUPQOUl3o72QBrE1o=\ngithub.com/aws/aws-sdk-go-v2/config v1.32.10 h1:9DMthfO6XWZYLfzZglAgW5Fyou2nRI5CuV44sTedKBI=\ngithub.com/aws/aws-sdk-go-v2/config v1.32.10/go.mod h1:2rUIOnA2JaiqYmSKYmRJlcMWy6qTj1vuRFscppSBMcw=\ngithub.com/aws/aws-sdk-go-v2/credentials v1.19.10 h1:EEhmEUFCE1Yhl7vDhNOI5OCL/iKMdkkYFTRpZXNw7m8=\ngithub.com/aws/aws-sdk-go-v2/credentials v1.19.10/go.mod h1:RnnlFCAlxQCkN2Q379B67USkBMu1PipEEiibzYN5UTE=\ngithub.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.18 h1:Ii4s+Sq3yDfaMLpjrJsqD6SmG/Wq/P5L/hw2qa78UAY=\ngithub.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.18/go.mod h1:6x81qnY++ovptLE6nWQeWrpXxbnlIex+4H4eYYGcqfc=\ngithub.com/aws/aws-sdk-go-v2/internal/configsources v1.4.20 h1:CNXO7mvgThFGqOFgbNAP2nol2qAWBOGfqR/7tQlvLmc=\ngithub.com/aws/aws-sdk-go-v2/internal/configsources v1.4.20/go.mod h1:oydPDJKcfMhgfcgBUZaG+toBbwy8yPWubJXBVERtI4o=\ngithub.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.20 h1:tN6W/hg+pkM+tf9XDkWUbDEjGLb+raoBMFsTodcoYKw=\ngithub.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.20/go.mod h1:YJ898MhD067hSHA6xYCx5ts/jEd8BSOLtQDL3iZsvbc=\ngithub.com/aws/aws-sdk-go-v2/internal/ini v1.8.4 h1:WKuaxf++XKWlHWu9ECbMlha8WOEGm0OUEZqm4K/Gcfk=\ngithub.com/aws/aws-sdk-go-v2/internal/ini v1.8.4/go.mod h1:ZWy7j6v1vWGmPReu0iSGvRiise4YI5SkR3OHKTZ6Wuc=\ngithub.com/aws/aws-sdk-go-v2/service/ec2 v1.296.0 h1:98Miqj16un1WLNyM1RjVDhXYumhqZrQfAeG8i4jPG6o=\ngithub.com/aws/aws-sdk-go-v2/service/ec2 v1.296.0/go.mod h1:T6ndRfdhnXLIY5oKBHjYZDVj706los2zGdpThppquvA=\ngithub.com/aws/aws-sdk-go-v2/service/eks v1.80.1 h1:Aivj88+23MYkW/B507eqsnLHTMmj4A/Us2AxKz+PDkM=\ngithub.com/aws/aws-sdk-go-v2/service/eks v1.80.1/go.mod h1:p30UgulgoiPvwWGGfVeiaCbOzD1PTObBVYn6MmCPHVg=\ngithub.com/aws/aws-sdk-go-v2/service/fis v1.37.17 h1:tydHMA8w6GU50ccUjG00T8eMnLupoTVtcroNFzLX7uU=\ngithub.com/aws/aws-sdk-go-v2/service/fis v1.37.17/go.mod h1:liGmRaU4U9KlRsDMO8E9LI1h9FryII92WTV/4xTbr30=\ngithub.com/aws/aws-sdk-go-v2/service/iam v1.53.3 h1:boKZv8dNdHznhAA68hb/dqFz5pxoWmRAOJr9LtscVCI=\ngithub.com/aws/aws-sdk-go-v2/service/iam v1.53.3/go.mod h1:E0QHh3aEwxYb7xshjvxYDELiOda7KBYJ77e/TvGhpcM=\ngithub.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.7 h1:5EniKhLZe4xzL7a+fU3C2tfUN4nWIqlLesfrjkuPFTY=\ngithub.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.7/go.mod h1:x0nZssQ3qZSnIcePWLvcoFisRXJzcTVvYpAAdYX8+GI=\ngithub.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.11.18 h1:J8H6iJPIb40gWCjAHfFCCergiy94TuJ5bFxaF+OGRcY=\ngithub.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.11.18/go.mod h1:59002AlnnGT2qznAiC0Hi+WhheaEWTiWyAeA9DQf0/w=\ngithub.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.20 h1:2HvVAIq+YqgGotK6EkMf+KIEqTISmTYh5zLpYyeTo1Y=\ngithub.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.20/go.mod h1:V4X406Y666khGa8ghKmphma/7C0DAtEQYhkq9z4vpbk=\ngithub.com/aws/aws-sdk-go-v2/service/pricing v1.40.12 h1:Cl4L3hkqUL1PCZR1ZZW0aG8EhV1St4HRKY5fx5PSc1Y=\ngithub.com/aws/aws-sdk-go-v2/service/pricing v1.40.12/go.mod h1:v1/GUNsQcf2bRXGq/VClqGymxJjSjBVjI0ExAOjC5NY=\ngithub.com/aws/aws-sdk-go-v2/service/signin v1.0.6 h1:MzORe+J94I+hYu2a6XmV5yC9huoTv8NRcCrUNedDypQ=\ngithub.com/aws/aws-sdk-go-v2/service/signin v1.0.6/go.mod h1:hXzcHLARD7GeWnifd8j9RWqtfIgxj4/cAtIVIK7hg8g=\ngithub.com/aws/aws-sdk-go-v2/service/sqs v1.42.22 h1:CVksqT2e8RFAixRTlDqu1nj174Vjb3VqG7wyZEAlYuA=\ngithub.com/aws/aws-sdk-go-v2/service/sqs v1.42.22/go.mod h1:n3/KSi68g5s54U9J1FV4fRz8oK+7ML2RJK+mDu6gGS0=\ngithub.com/aws/aws-sdk-go-v2/service/ssm v1.68.1 h1:kDgdZuYBWSsh3U/jZOXwcqfX6UsSzFcmtgKx7C0c5/E=\ngithub.com/aws/aws-sdk-go-v2/service/ssm v1.68.1/go.mod h1:xyao5chroDlX/9q/rKBxRKZPv9NdG5Pm9W5zS+wQJ84=\ngithub.com/aws/aws-sdk-go-v2/service/sso v1.30.11 h1:7oGD8KPfBOJGXiCoRKrrrQkbvCp8N++u36hrLMPey6o=\ngithub.com/aws/aws-sdk-go-v2/service/sso v1.30.11/go.mod h1:0DO9B5EUJQlIDif+XJRWCljZRKsAFKh3gpFz7UnDtOo=\ngithub.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.15 h1:edCcNp9eGIUDUCrzoCu1jWAXLGFIizeqkdkKgRlJwWc=\ngithub.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.15/go.mod h1:lyRQKED9xWfgkYC/wmmYfv7iVIM68Z5OQ88ZdcV1QbU=\ngithub.com/aws/aws-sdk-go-v2/service/sts v1.41.7 h1:NITQpgo9A5NrDZ57uOWj+abvXSb83BbyggcUBVksN7c=\ngithub.com/aws/aws-sdk-go-v2/service/sts v1.41.7/go.mod h1:sks5UWBhEuWYDPdwlnRFn1w7xWdH29Jcpe+/PJQefEs=\ngithub.com/aws/aws-sdk-go-v2/service/timestreamwrite v1.35.17 h1:Wlwn7YHQD3EWt1nQ9vSfeuQWZxI3BjDIRdzNF1rSeJQ=\ngithub.com/aws/aws-sdk-go-v2/service/timestreamwrite v1.35.17/go.mod h1:ENvCiX8Lsds2dgCXynL6PcPgxcdzmsG6BYH0RZ+xPng=\ngithub.com/aws/karpenter-provider-aws/tools/kompat v0.0.0-20240410220356-6b868db24881 h1:m9rhsGhdepdQV96tZgfy68oU75AWAjOH8u65OefTjwA=\ngithub.com/aws/karpenter-provider-aws/tools/kompat v0.0.0-20240410220356-6b868db24881/go.mod h1:+Mk5k0b6HpKobxNq+B56DOhZ+I/NiPhd5MIBhQMSTSs=\ngithub.com/aws/smithy-go v1.24.2 h1:FzA3bu/nt/vDvmnkg+R8Xl46gmzEDam6mZ1hzmwXFng=\ngithub.com/aws/smithy-go v1.24.2/go.mod h1:YE2RhdIuDbA5E5bTdciG9KrW3+TiEONeUWCqxX9i1Fc=\ngithub.com/awslabs/amazon-eks-ami/nodeadm v0.0.0-20240229193347-cfab22a10647 h1:8yRBVsjGmI7qQsPWtIrbWP+XfwHO9Wq7gdLVzjqiZFs=\ngithub.com/awslabs/amazon-eks-ami/nodeadm v0.0.0-20240229193347-cfab22a10647/go.mod h1:9NafTAUHL0FlMeL6Cu5PXnMZ1q/LnC9X2emLXHsVbM8=\ngithub.com/awslabs/operatorpkg v0.0.0-20251222193911-34e9a1898737 h1:hF8FFDPnboX/ABn1r8oS77t8tG4TVS8i99iPXMaL8Jk=\ngithub.com/awslabs/operatorpkg v0.0.0-20251222193911-34e9a1898737/go.mod h1:reUhRkYche5Vkz+ACdxho8smFwdAspzr8rpA2dNqsVQ=\ngithub.com/awslabs/operatorpkg/aws v0.0.0-20250414225955-b47cd315ffe9 h1:Li3ZDz/k5Ob9gRzBvZ5qP3zaE183FWaBTYKayURTub8=\ngithub.com/awslabs/operatorpkg/aws v0.0.0-20250414225955-b47cd315ffe9/go.mod h1:XuupixySxAZwqT/PRxIce7JqAI8NaKUer/TIdm3OMA4=\ngithub.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=\ngithub.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=\ngithub.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=\ngithub.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=\ngithub.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=\ngithub.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=\ngithub.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=\ngithub.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=\ngithub.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=\ngithub.com/docker/docker v28.5.2+incompatible h1:DBX0Y0zAjZbSrm1uzOkdr1onVghKaftjlSWt4AFexzM=\ngithub.com/docker/docker v28.5.2+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=\ngithub.com/emicklei/go-restful/v3 v3.13.0 h1:C4Bl2xDndpU6nJ4bc1jXd+uTmYPVUwkD6bFY/oTyCes=\ngithub.com/emicklei/go-restful/v3 v3.13.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=\ngithub.com/evanphx/json-patch v5.9.11+incompatible h1:ixHHqfcGvxhWkniF1tWxBHA0yb4Z+d1UQi45df52xW8=\ngithub.com/evanphx/json-patch v5.9.11+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=\ngithub.com/evanphx/json-patch/v5 v5.9.11 h1:/8HVnzMq13/3x9TPvjG08wUGqBTmZBsCWzjTM0wiaDU=\ngithub.com/evanphx/json-patch/v5 v5.9.11/go.mod h1:3j+LviiESTElxA4p3EMKAB9HXj3/XEtnUf6OZxqIQTM=\ngithub.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k=\ngithub.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0=\ngithub.com/fxamacker/cbor/v2 v2.9.0 h1:NpKPmjDBgUfBms6tr6JZkTHtfFGcMKsw3eGcmD/sapM=\ngithub.com/fxamacker/cbor/v2 v2.9.0/go.mod h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ=\ngithub.com/gkampitakis/ciinfo v0.3.2 h1:JcuOPk8ZU7nZQjdUhctuhQofk7BGHuIy0c9Ez8BNhXs=\ngithub.com/gkampitakis/ciinfo v0.3.2/go.mod h1:1NIwaOcFChN4fa/B0hEBdAb6npDlFL8Bwx4dfRLRqAo=\ngithub.com/gkampitakis/go-diff v1.3.2 h1:Qyn0J9XJSDTgnsgHRdz9Zp24RaJeKMUHg2+PDZZdC4M=\ngithub.com/gkampitakis/go-diff v1.3.2/go.mod h1:LLgOrpqleQe26cte8s36HTWcTmMEur6OPYerdAAS9tk=\ngithub.com/gkampitakis/go-snaps v0.5.15 h1:amyJrvM1D33cPHwVrjo9jQxX8g/7E2wYdZ+01KS3zGE=\ngithub.com/gkampitakis/go-snaps v0.5.15/go.mod h1:HNpx/9GoKisdhw9AFOBT1N7DBs9DiHo/hGheFGBZ+mc=\ngithub.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI=\ngithub.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=\ngithub.com/go-logr/zapr v1.3.0 h1:XGdV8XW8zdwFiwOA2Dryh1gj2KRQyOOoNmBy4EplIcQ=\ngithub.com/go-logr/zapr v1.3.0/go.mod h1:YKepepNBd1u/oyhd/yQmtjVXmm9uML4IXUgMOwR8/Gg=\ngithub.com/go-openapi/jsonpointer v0.22.4 h1:dZtK82WlNpVLDW2jlA1YCiVJFVqkED1MegOUy9kR5T4=\ngithub.com/go-openapi/jsonpointer v0.22.4/go.mod h1:elX9+UgznpFhgBuaMQ7iu4lvvX1nvNsesQ3oxmYTw80=\ngithub.com/go-openapi/jsonreference v0.21.4 h1:24qaE2y9bx/q3uRK/qN+TDwbok1NhbSmGjjySRCHtC8=\ngithub.com/go-openapi/jsonreference v0.21.4/go.mod h1:rIENPTjDbLpzQmQWCj5kKj3ZlmEh+EFVbz3RTUh30/4=\ngithub.com/go-openapi/swag v0.25.4 h1:OyUPUFYDPDBMkqyxOTkqDYFnrhuhi9NR6QVUvIochMU=\ngithub.com/go-openapi/swag v0.25.4/go.mod h1:zNfJ9WZABGHCFg2RnY0S4IOkAcVTzJ6z2Bi+Q4i6qFQ=\ngithub.com/go-openapi/swag/cmdutils v0.25.4 h1:8rYhB5n6WawR192/BfUu2iVlxqVR9aRgGJP6WaBoW+4=\ngithub.com/go-openapi/swag/cmdutils v0.25.4/go.mod h1:pdae/AFo6WxLl5L0rq87eRzVPm/XRHM3MoYgRMvG4A0=\ngithub.com/go-openapi/swag/conv v0.25.4 h1:/Dd7p0LZXczgUcC/Ikm1+YqVzkEeCc9LnOWjfkpkfe4=\ngithub.com/go-openapi/swag/conv v0.25.4/go.mod h1:3LXfie/lwoAv0NHoEuY1hjoFAYkvlqI/Bn5EQDD3PPU=\ngithub.com/go-openapi/swag/fileutils v0.25.4 h1:2oI0XNW5y6UWZTC7vAxC8hmsK/tOkWXHJQH4lKjqw+Y=\ngithub.com/go-openapi/swag/fileutils v0.25.4/go.mod h1:cdOT/PKbwcysVQ9Tpr0q20lQKH7MGhOEb6EwmHOirUk=\ngithub.com/go-openapi/swag/jsonname v0.25.4 h1:bZH0+MsS03MbnwBXYhuTttMOqk+5KcQ9869Vye1bNHI=\ngithub.com/go-openapi/swag/jsonname v0.25.4/go.mod h1:GPVEk9CWVhNvWhZgrnvRA6utbAltopbKwDu8mXNUMag=\ngithub.com/go-openapi/swag/jsonutils v0.25.4 h1:VSchfbGhD4UTf4vCdR2F4TLBdLwHyUDTd1/q4i+jGZA=\ngithub.com/go-openapi/swag/jsonutils v0.25.4/go.mod h1:7OYGXpvVFPn4PpaSdPHJBtF0iGnbEaTk8AvBkoWnaAY=\ngithub.com/go-openapi/swag/jsonutils/fixtures_test v0.25.4 h1:IACsSvBhiNJwlDix7wq39SS2Fh7lUOCJRmx/4SN4sVo=\ngithub.com/go-openapi/swag/jsonutils/fixtures_test v0.25.4/go.mod h1:Mt0Ost9l3cUzVv4OEZG+WSeoHwjWLnarzMePNDAOBiM=\ngithub.com/go-openapi/swag/loading v0.25.4 h1:jN4MvLj0X6yhCDduRsxDDw1aHe+ZWoLjW+9ZQWIKn2s=\ngithub.com/go-openapi/swag/loading v0.25.4/go.mod h1:rpUM1ZiyEP9+mNLIQUdMiD7dCETXvkkC30z53i+ftTE=\ngithub.com/go-openapi/swag/mangling v0.25.4 h1:2b9kBJk9JvPgxr36V23FxJLdwBrpijI26Bx5JH4Hp48=\ngithub.com/go-openapi/swag/mangling v0.25.4/go.mod h1:6dxwu6QyORHpIIApsdZgb6wBk/DPU15MdyYj/ikn0Hg=\ngithub.com/go-openapi/swag/netutils v0.25.4 h1:Gqe6K71bGRb3ZQLusdI8p/y1KLgV4M/k+/HzVSqT8H0=\ngithub.com/go-openapi/swag/netutils v0.25.4/go.mod h1:m2W8dtdaoX7oj9rEttLyTeEFFEBvnAx9qHd5nJEBzYg=\ngithub.com/go-openapi/swag/stringutils v0.25.4 h1:O6dU1Rd8bej4HPA3/CLPciNBBDwZj9HiEpdVsb8B5A8=\ngithub.com/go-openapi/swag/stringutils v0.25.4/go.mod h1:GTsRvhJW5xM5gkgiFe0fV3PUlFm0dr8vki6/VSRaZK0=\ngithub.com/go-openapi/swag/typeutils v0.25.4 h1:1/fbZOUN472NTc39zpa+YGHn3jzHWhv42wAJSN91wRw=\ngithub.com/go-openapi/swag/typeutils v0.25.4/go.mod h1:Ou7g//Wx8tTLS9vG0UmzfCsjZjKhpjxayRKTHXf2pTE=\ngithub.com/go-openapi/swag/yamlutils v0.25.4 h1:6jdaeSItEUb7ioS9lFoCZ65Cne1/RZtPBZ9A56h92Sw=\ngithub.com/go-openapi/swag/yamlutils v0.25.4/go.mod h1:MNzq1ulQu+yd8Kl7wPOut/YHAAU/H6hL91fF+E2RFwc=\ngithub.com/go-openapi/testify/enable/yaml/v2 v2.0.2 h1:0+Y41Pz1NkbTHz8NngxTuAXxEodtNSI1WG1c/m5Akw4=\ngithub.com/go-openapi/testify/enable/yaml/v2 v2.0.2/go.mod h1:kme83333GCtJQHXQ8UKX3IBZu6z8T5Dvy5+CW3NLUUg=\ngithub.com/go-openapi/testify/v2 v2.0.2 h1:X999g3jeLcoY8qctY/c/Z8iBHTbwLz7R2WXd6Ub6wls=\ngithub.com/go-openapi/testify/v2 v2.0.2/go.mod h1:HCPmvFFnheKK2BuwSA0TbbdxJ3I16pjwMkYkP4Ywn54=\ngithub.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI=\ngithub.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8=\ngithub.com/goccy/go-yaml v1.18.0 h1:8W7wMFS12Pcas7KU+VVkaiCng+kG8QiFeFwzFb+rwuw=\ngithub.com/goccy/go-yaml v1.18.0/go.mod h1:XBurs7gK8ATbW4ZPGKgcbrY1Br56PdM69F7LkFRi1kA=\ngithub.com/google/btree v1.1.3 h1:CVpQJjYgC4VbzxeGVHfvZrv1ctoYCAI8vbl07Fcxlyg=\ngithub.com/google/btree v1.1.3/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4=\ngithub.com/google/gnostic-models v0.7.1 h1:SisTfuFKJSKM5CPZkffwi6coztzzeYUhc3v4yxLWH8c=\ngithub.com/google/gnostic-models v0.7.1/go.mod h1:whL5G0m6dmc5cPxKc5bdKdEN3UjI7OUGxBlw57miDrQ=\ngithub.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=\ngithub.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=\ngithub.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=\ngithub.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=\ngithub.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0=\ngithub.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=\ngithub.com/google/pprof v0.0.0-20260115054156-294ebfa9ad83 h1:z2ogiKUYzX5Is6zr/vP9vJGqPwcdqsWjOt+V8J7+bTc=\ngithub.com/google/pprof v0.0.0-20260115054156-294ebfa9ad83/go.mod h1:MxpfABSjhmINe3F1It9d+8exIHFvUqtLIRCdOGNXqiI=\ngithub.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=\ngithub.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=\ngithub.com/gorilla/websocket v1.5.4-0.20250319132907-e064f32e3674 h1:JeSE6pjso5THxAzdVpqr6/geYxZytqFMBCOtn/ujyeo=\ngithub.com/gorilla/websocket v1.5.4-0.20250319132907-e064f32e3674/go.mod h1:r4w70xmWCQKmi1ONH4KIaBptdivuRPyosB9RmPlGEwA=\ngithub.com/imdario/mergo v0.3.16 h1:wwQJbIsHYGMUyLSPrEq1CT16AhnhNJQ51+4fdHUnCl4=\ngithub.com/imdario/mergo v0.3.16/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY=\ngithub.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=\ngithub.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=\ngithub.com/jonathan-innis/aws-sdk-go-prometheus v0.1.1 h1:gmpuckrozJ3lfKqSIia9YMGh0caoQmEY7mQP5MsnbTM=\ngithub.com/jonathan-innis/aws-sdk-go-prometheus v0.1.1/go.mod h1:168XvZFghCqo32ISSWnTXwdlMKzEq+x9TqdfswCjkrQ=\ngithub.com/joshdk/go-junit v1.0.0 h1:S86cUKIdwBHWwA6xCmFlf3RTLfVXYQfvanM5Uh+K6GE=\ngithub.com/joshdk/go-junit v1.0.0/go.mod h1:TiiV0PqkaNfFXjEiyjWM3XXrhVyCa1K4Zfga6W52ung=\ngithub.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=\ngithub.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=\ngithub.com/klauspost/compress v1.18.1 h1:bcSGx7UbpBqMChDtsF28Lw6v/G94LPrrbMbdC3JH2co=\ngithub.com/klauspost/compress v1.18.1/go.mod h1:ZQFFVG+MdnR0P+l6wpXgIL4NTtwiKIdBnrBd8Nrxr+0=\ngithub.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=\ngithub.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=\ngithub.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=\ngithub.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=\ngithub.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc=\ngithub.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=\ngithub.com/maruel/natural v1.1.1 h1:Hja7XhhmvEFhcByqDoHz9QZbkWey+COd9xWfCfn1ioo=\ngithub.com/maruel/natural v1.1.1/go.mod h1:v+Rfd79xlw1AgVBjbO0BEQmptqb5HvL/k9GRHB7ZKEg=\ngithub.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=\ngithub.com/mattn/go-runewidth v0.0.17 h1:78v8ZlW0bP43XfmAfPsdXcoNCelfMHsDmd/pkENfrjQ=\ngithub.com/mattn/go-runewidth v0.0.17/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=\ngithub.com/mfridman/tparse v0.18.0 h1:wh6dzOKaIwkUGyKgOntDW4liXSo37qg5AXbIhkMV3vE=\ngithub.com/mfridman/tparse v0.18.0/go.mod h1:gEvqZTuCgEhPbYk/2lS3Kcxg1GmTxxU7kTC8DvP0i/A=\ngithub.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=\ngithub.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=\ngithub.com/mitchellh/hashstructure/v2 v2.0.2 h1:vGKWl0YJqUNxE8d+h8f6NJLcCJrgbhC4NcD46KavDd4=\ngithub.com/mitchellh/hashstructure/v2 v2.0.2/go.mod h1:MG3aRVU/N29oo/V/IhBX8GR/zz4kQkprJgF2EVszyDE=\ngithub.com/moby/spdystream v0.5.0 h1:7r0J1Si3QO/kjRitvSLVVFUjxMEb/YLj6S9FF62JBCU=\ngithub.com/moby/spdystream v0.5.0/go.mod h1:xBAYlnt/ay+11ShkdFKNAG7LsyK/tmNBVvVOwrfMgdI=\ngithub.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=\ngithub.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=\ngithub.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=\ngithub.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=\ngithub.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee h1:W5t00kpgFdJifH4BDsTlE89Zl93FEloxaWZfGcifgq8=\ngithub.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=\ngithub.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=\ngithub.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=\ngithub.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f h1:y5//uYreIhSUg3J1GEMiLbxo1LJaP8RfCpH6pymGZus=\ngithub.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw=\ngithub.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec=\ngithub.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY=\ngithub.com/onsi/ginkgo/v2 v2.28.1 h1:S4hj+HbZp40fNKuLUQOYLDgZLwNUVn19N3Atb98NCyI=\ngithub.com/onsi/ginkgo/v2 v2.28.1/go.mod h1:CLtbVInNckU3/+gC8LzkGUb9oF+e8W8TdUsxPwvdOgE=\ngithub.com/onsi/gomega v1.39.1 h1:1IJLAad4zjPn2PsnhH70V4DKRFlrCzGBNrNaru+Vf28=\ngithub.com/onsi/gomega v1.39.1/go.mod h1:hL6yVALoTOxeWudERyfppUcZXjMwIMLnuSfruD2lcfg=\ngithub.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc=\ngithub.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ=\ngithub.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4=\ngithub.com/pelletier/go-toml/v2 v2.2.4/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY=\ngithub.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=\ngithub.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=\ngithub.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=\ngithub.com/prometheus/client_golang v1.23.2 h1:Je96obch5RDVy3FDMndoUsjAhG5Edi49h0RJWRi/o0o=\ngithub.com/prometheus/client_golang v1.23.2/go.mod h1:Tb1a6LWHB3/SPIzCoaDXI4I8UHKeFTEQ1YCr+0Gyqmg=\ngithub.com/prometheus/client_model v0.6.2 h1:oBsgwpGs7iVziMvrGhE53c/GrLUsZdHnqNwqPLxwZyk=\ngithub.com/prometheus/client_model v0.6.2/go.mod h1:y3m2F6Gdpfy6Ut/GBsUqTWZqCUvMVzSfMLjcu6wAwpE=\ngithub.com/prometheus/common v0.67.4 h1:yR3NqWO1/UyO1w2PhUvXlGQs/PtFmoveVO0KZ4+Lvsc=\ngithub.com/prometheus/common v0.67.4/go.mod h1:gP0fq6YjjNCLssJCQp0yk4M8W6ikLURwkdd/YKtTbyI=\ngithub.com/prometheus/procfs v0.19.2 h1:zUMhqEW66Ex7OXIiDkll3tl9a1ZdilUOd/F6ZXw4Vws=\ngithub.com/prometheus/procfs v0.19.2/go.mod h1:M0aotyiemPhBCM0z5w87kL22CxfcH05ZpYlu+b4J7mw=\ngithub.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=\ngithub.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ=\ngithub.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=\ngithub.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs=\ngithub.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro=\ngithub.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ=\ngithub.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc=\ngithub.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=\ngithub.com/samber/lo v1.52.0 h1:Rvi+3BFHES3A8meP33VPAxiBZX/Aws5RxrschYGjomw=\ngithub.com/samber/lo v1.52.0/go.mod h1:4+MXEGsJzbKGaUEQFKBq2xtfuznW9oz/WrgyzMzRoM0=\ngithub.com/spf13/cobra v1.10.2 h1:DMTTonx5m65Ic0GOoRY2c16WCbHxOOw6xxezuLaBpcU=\ngithub.com/spf13/cobra v1.10.2/go.mod h1:7C1pvHqHw5A4vrJfjNwvOdzYu0Gml16OCs2GRiTUUS4=\ngithub.com/spf13/pflag v1.0.9/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=\ngithub.com/spf13/pflag v1.0.10 h1:4EBh2KAYBwaONj6b2Ye1GiHfwjqyROoF4RwYO+vPwFk=\ngithub.com/spf13/pflag v1.0.10/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=\ngithub.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=\ngithub.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY=\ngithub.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=\ngithub.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=\ngithub.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=\ngithub.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=\ngithub.com/tidwall/gjson v1.18.0 h1:FIDeeyB800efLX89e5a8Y0BNH+LOngJyGrIWxG2FKQY=\ngithub.com/tidwall/gjson v1.18.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=\ngithub.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA=\ngithub.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM=\ngithub.com/tidwall/pretty v1.2.1 h1:qjsOFOWWQl+N3RsoF5/ssm1pHmJJwhjlSbZ51I6wMl4=\ngithub.com/tidwall/pretty v1.2.1/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU=\ngithub.com/tidwall/sjson v1.2.5 h1:kLy8mja+1c9jlljvWTlSazM7cKDRfJuR/bOJhcY5NcY=\ngithub.com/tidwall/sjson v1.2.5/go.mod h1:Fvgq9kS/6ociJEDnK0Fk1cpYF4FIW6ZF7LAe+6jwd28=\ngithub.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM=\ngithub.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg=\ngithub.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=\ngo.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=\ngo.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=\ngo.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=\ngo.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=\ngo.uber.org/zap v1.27.1 h1:08RqriUEv8+ArZRYSTXy1LeBScaMpVSTBhCeaZYfMYc=\ngo.uber.org/zap v1.27.1/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=\ngo.yaml.in/yaml/v2 v2.4.3 h1:6gvOSjQoTB3vt1l+CU+tSyi/HOjfOjRLJ4YwYZGwRO0=\ngo.yaml.in/yaml/v2 v2.4.3/go.mod h1:zSxWcmIDjOzPXpjlTTbAsKokqkDNAVtZO0WOMiT90s8=\ngo.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc=\ngo.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=\ngolang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=\ngolang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=\ngolang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc=\ngolang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU=\ngolang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8=\ngolang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk=\ngolang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=\ngolang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=\ngolang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=\ngolang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=\ngolang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=\ngolang.org/x/mod v0.32.0 h1:9F4d3PHLljb6x//jOyokMv3eX+YDeepZSEo3mFJy93c=\ngolang.org/x/mod v0.32.0/go.mod h1:SgipZ/3h2Ci89DlEtEXWUk/HteuRin+HHhN+WbNhguU=\ngolang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=\ngolang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=\ngolang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=\ngolang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=\ngolang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=\ngolang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk=\ngolang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44=\ngolang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM=\ngolang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4=\ngolang.org/x/net v0.49.0 h1:eeHFmOGUTtaaPSGNmjBKpbng9MulQsJURQUAfUwY++o=\ngolang.org/x/net v0.49.0/go.mod h1:/ysNB2EvaqvesRkuLAyjI1ycPZlQHM3q01F02UY/MV8=\ngolang.org/x/oauth2 v0.34.0 h1:hqK/t4AKgbqWkdkcAeI8XLmbK+4m4G5YeQRrmiotGlw=\ngolang.org/x/oauth2 v0.34.0/go.mod h1:lzm5WQJQwKZ3nwavOZ3IS5Aulzxi68dUSgRHujetwEA=\ngolang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\ngolang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\ngolang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\ngolang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=\ngolang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=\ngolang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=\ngolang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=\ngolang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4=\ngolang.org/x/sync v0.19.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=\ngolang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=\ngolang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=\ngolang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=\ngolang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=\ngolang.org/x/sys v0.40.0 h1:DBZZqJ2Rkml6QMQsZywtnjnnGvHza6BTfYFWY9kjEWQ=\ngolang.org/x/sys v0.40.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=\ngolang.org/x/telemetry v0.0.0-20240228155512-f48c80bd79b2/go.mod h1:TeRTkGYfJXctD9OcfyVLyj2J3IxLnKwHJR8f4D8a3YE=\ngolang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=\ngolang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=\ngolang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=\ngolang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=\ngolang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU=\ngolang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk=\ngolang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY=\ngolang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM=\ngolang.org/x/term v0.39.0 h1:RclSuaJf32jOqZz74CkPA9qFuVTX7vhLlpfj/IGWlqY=\ngolang.org/x/term v0.39.0/go.mod h1:yxzUCTP/U+FzoxfdKmLaA0RV1WgE0VY7hXBwKtY/4ww=\ngolang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=\ngolang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=\ngolang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=\ngolang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=\ngolang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=\ngolang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=\ngolang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=\ngolang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=\ngolang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=\ngolang.org/x/text v0.34.0 h1:oL/Qq0Kdaqxa1KbNeMKwQq0reLCCaFtqu2eNuSeNHbk=\ngolang.org/x/text v0.34.0/go.mod h1:homfLqTYRFyVYemLBFl5GgL/DWEiH5wcsQ5gSh1yziA=\ngolang.org/x/time v0.14.0 h1:MRx4UaLrDotUKUdCIqzPC48t1Y9hANFKIRpNx+Te8PI=\ngolang.org/x/time v0.14.0/go.mod h1:eL/Oa2bBBK0TkX57Fyni+NgnyQQN4LitPmob2Hjnqw4=\ngolang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=\ngolang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=\ngolang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=\ngolang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=\ngolang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58=\ngolang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk=\ngolang.org/x/tools v0.41.0 h1:a9b8iMweWG+S0OBnlU36rzLp20z1Rp10w+IY2czHTQc=\ngolang.org/x/tools v0.41.0/go.mod h1:XSY6eDqxVNiYgezAVqqCeihT4j1U2CCsqvH3WhQpnlg=\ngolang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=\ngomodules.xyz/jsonpatch/v2 v2.5.0 h1:JELs8RLM12qJGXU4u/TO3V25KW8GreMKl9pdkk14RM0=\ngomodules.xyz/jsonpatch/v2 v2.5.0/go.mod h1:AH3dM2RI6uoBZxn3LVrfvJ3E0/9dG4cSrbuBJT4moAY=\ngoogle.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE=\ngoogle.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco=\ngopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=\ngopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=\ngopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=\ngopkg.in/evanphx/json-patch.v4 v4.13.0 h1:czT3CmqEaQ1aanPc5SdlgQrrEIb8w/wwCvWWnfEbYzo=\ngopkg.in/evanphx/json-patch.v4 v4.13.0/go.mod h1:p8EYWUEYMpynmqDbY58zCKCFZw8pRWMG4EsWvDvM72M=\ngopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=\ngopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=\ngopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=\ngopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=\nk8s.io/api v0.35.3 h1:pA2fiBc6+N9PDf7SAiluKGEBuScsTzd2uYBkA5RzNWQ=\nk8s.io/api v0.35.3/go.mod h1:9Y9tkBcFwKNq2sxwZTQh1Njh9qHl81D0As56tu42GA4=\nk8s.io/apiextensions-apiserver v0.35.0 h1:3xHk2rTOdWXXJM+RDQZJvdx0yEOgC0FgQ1PlJatA5T4=\nk8s.io/apiextensions-apiserver v0.35.0/go.mod h1:E1Ahk9SADaLQ4qtzYFkwUqusXTcaV2uw3l14aqpL2LU=\nk8s.io/apimachinery v0.35.3 h1:MeaUwQCV3tjKP4bcwWGgZ/cp/vpsRnQzqO6J6tJyoF8=\nk8s.io/apimachinery v0.35.3/go.mod h1:jQCgFZFR1F4Ik7hvr2g84RTJSZegBc8yHgFWKn//hns=\nk8s.io/client-go v0.35.3 h1:s1lZbpN4uI6IxeTM2cpdtrwHcSOBML1ODNTCCfsP1pg=\nk8s.io/client-go v0.35.3/go.mod h1:RzoXkc0mzpWIDvBrRnD+VlfXP+lRzqQjCmKtiwZ8Q9c=\nk8s.io/cloud-provider v0.35.0 h1:syiBCQbKh2gho/S1BkIl006Dc44pV8eAtGZmv5NMe7M=\nk8s.io/cloud-provider v0.35.0/go.mod h1:7grN+/Nt5Hf7tnSGPT3aErt4K7aQpygyCrGpbrQbzNc=\nk8s.io/component-base v0.35.0 h1:+yBrOhzri2S1BVqyVSvcM3PtPyx5GUxCK2tinZz1G94=\nk8s.io/component-base v0.35.0/go.mod h1:85SCX4UCa6SCFt6p3IKAPej7jSnF3L8EbfSyMZayJR0=\nk8s.io/component-helpers v0.35.0 h1:wcXv7HJRksgVjM4VlXJ1CNFBpyDHruRI99RrBtrJceA=\nk8s.io/component-helpers v0.35.0/go.mod h1:ahX0m/LTYmu7fL3W8zYiIwnQ/5gT28Ex4o2pymF63Co=\nk8s.io/csi-translation-lib v0.35.0 h1:jdVC/9rv3lfHl5/MFQXqIVcEZEOXPbl4IPI8cczPdWw=\nk8s.io/csi-translation-lib v0.35.0/go.mod h1:/6R70QdDxBCrMkrLhIBLP4mdtL35hEoJ5a/c2s1k9z8=\nk8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk=\nk8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE=\nk8s.io/kube-openapi v0.0.0-20251125145642-4e65d59e963e h1:iW9ChlU0cU16w8MpVYjXk12dqQ4BPFBEgif+ap7/hqQ=\nk8s.io/kube-openapi v0.0.0-20251125145642-4e65d59e963e/go.mod h1:kdmbQkyfwUagLfXIad1y2TdrjPFWp2Q89B3qkRwf/pQ=\nk8s.io/utils v0.0.0-20251222233032-718f0e51e6d2 h1:OfgiEo21hGiwx1oJUU5MpEaeOEg6coWndBkZF/lkFuE=\nk8s.io/utils v0.0.0-20251222233032-718f0e51e6d2/go.mod h1:xDxuJ0whA3d0I4mf/C4ppKHxXynQ+fxnkmQH0vTHnuk=\nsigs.k8s.io/controller-runtime v0.22.4 h1:GEjV7KV3TY8e+tJ2LCTxUTanW4z/FmNB7l327UfMq9A=\nsigs.k8s.io/controller-runtime v0.22.4/go.mod h1:+QX1XUpTXN4mLoblf4tqr5CQcyHPAki2HLXqQMY6vh8=\nsigs.k8s.io/json v0.0.0-20250730193827-2d320260d730 h1:IpInykpT6ceI+QxKBbEflcR5EXP7sU1kvOlxwZh5txg=\nsigs.k8s.io/json v0.0.0-20250730193827-2d320260d730/go.mod h1:mdzfpAEoE6DHQEN0uh9ZbOCuHbLK5wOm7dK4ctXE9Tg=\nsigs.k8s.io/karpenter v1.10.0 h1:F8cupDXyn5c7TQDgTSj86nPmUJxFaV0wxu5HIdp+TJc=\nsigs.k8s.io/karpenter v1.10.0/go.mod h1:XQtYAxoCysLHjytci7Fx5zw2txgcW2Vxc+qq6DDiFX8=\nsigs.k8s.io/randfill v1.0.0 h1:JfjMILfT8A6RbawdsK2JXGBR5AQVfd+9TbzrlneTyrU=\nsigs.k8s.io/randfill v1.0.0/go.mod h1:XeLlZ/jmk4i1HRopwe7/aU3H5n1zNUcX6TM94b3QxOY=\nsigs.k8s.io/structured-merge-diff/v6 v6.3.1 h1:JrhdFMqOd/+3ByqlP2I45kTOZmTRLBUm5pvRjeheg7E=\nsigs.k8s.io/structured-merge-diff/v6 v6.3.1/go.mod h1:M3W8sfWvn2HhQDIbGWj3S099YozAsymCo/wrT5ohRUE=\nsigs.k8s.io/yaml v1.6.0 h1:G8fkbMSAFqgEFgh4b1wmtzDnioxFCUgTZhlbj5P9QYs=\nsigs.k8s.io/yaml v1.6.0/go.mod h1:796bPqUfzR/0jLAl6XjHl3Ck7MiyVv8dbTdyT3/pMf4=\n"
  },
  {
    "path": "hack/boilerplate.go.txt",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n"
  },
  {
    "path": "hack/boilerplate.sh",
    "content": "#!/bin/bash\nset -eu -o pipefail\n\nfor i in $(\n  find ./tools ./cmd ./pkg ./test ./hack -name \"*.go\"\n); do\n  if ! grep -q \"Apache License\" $i; then\n    cat hack/boilerplate.go.txt $i >$i.new && mv $i.new $i\n  fi\ndone\n"
  },
  {
    "path": "hack/code/bandwidth_gen/example/gp.html",
    "content": "<!DOCTYPE html>\n<html xmlns=\"http://www.w3.org/1999/xhtml\" lang=\"en-US\"><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" /><title>General purpose instances - Amazon EC2</title><meta name=\"viewport\" content=\"width=device-width,initial-scale=1\" /><meta name=\"assets_root\" content=\"/assets\" /><meta name=\"target_state\" content=\"gp\" /><meta name=\"default_state\" content=\"gp\" /><link rel=\"icon\" type=\"image/ico\" href=\"/assets/images/favicon.ico\" /><link rel=\"shortcut icon\" type=\"image/ico\" href=\"/assets/images/favicon.ico\" /><link rel=\"canonical\" href=\"https://docs.aws.amazon.com/ec2/latest/instancetypes/gp.html\" /><meta name=\"description\" content=\"Overview of Amazon EC2 general purpose instance types\" /><meta name=\"deployment_region\" content=\"IAD\" /><meta name=\"product\" content=\"Amazon EC2\" /><meta name=\"guide\" content=\"Instance Types\" /><meta name=\"abstract\" content=\"When you launch an instance, the instance type that you specify determines the hardware of the host computer used for your instance. Each instance type offers different compute, memory, and storage capabilities.\" /><meta name=\"guide-locale\" content=\"en_us\" /><meta name=\"tocs\" content=\"toc-contents.json\" /><link rel=\"canonical\" href=\"https://docs.aws.amazon.com/ec2/latest/instancetypes/gp.html\" /><link rel=\"alternative\" href=\"https://docs.aws.amazon.com/id_id/ec2/latest/instancetypes/gp.html\" hreflang=\"id-id\" /><link rel=\"alternative\" href=\"https://docs.aws.amazon.com/id_id/ec2/latest/instancetypes/gp.html\" hreflang=\"id\" /><link rel=\"alternative\" href=\"https://docs.aws.amazon.com/de_de/ec2/latest/instancetypes/gp.html\" hreflang=\"de-de\" /><link rel=\"alternative\" href=\"https://docs.aws.amazon.com/de_de/ec2/latest/instancetypes/gp.html\" hreflang=\"de\" /><link rel=\"alternative\" href=\"https://docs.aws.amazon.com/ec2/latest/instancetypes/gp.html\" hreflang=\"en-us\" /><link rel=\"alternative\" href=\"https://docs.aws.amazon.com/ec2/latest/instancetypes/gp.html\" hreflang=\"en\" /><link rel=\"alternative\" href=\"https://docs.aws.amazon.com/es_es/ec2/latest/instancetypes/gp.html\" hreflang=\"es-es\" /><link rel=\"alternative\" href=\"https://docs.aws.amazon.com/es_es/ec2/latest/instancetypes/gp.html\" hreflang=\"es\" /><link rel=\"alternative\" href=\"https://docs.aws.amazon.com/fr_fr/ec2/latest/instancetypes/gp.html\" hreflang=\"fr-fr\" /><link rel=\"alternative\" href=\"https://docs.aws.amazon.com/fr_fr/ec2/latest/instancetypes/gp.html\" hreflang=\"fr\" /><link rel=\"alternative\" href=\"https://docs.aws.amazon.com/it_it/ec2/latest/instancetypes/gp.html\" hreflang=\"it-it\" /><link rel=\"alternative\" href=\"https://docs.aws.amazon.com/it_it/ec2/latest/instancetypes/gp.html\" hreflang=\"it\" /><link rel=\"alternative\" href=\"https://docs.aws.amazon.com/ja_jp/ec2/latest/instancetypes/gp.html\" hreflang=\"ja-jp\" /><link rel=\"alternative\" href=\"https://docs.aws.amazon.com/ja_jp/ec2/latest/instancetypes/gp.html\" hreflang=\"ja\" /><link rel=\"alternative\" href=\"https://docs.aws.amazon.com/ko_kr/ec2/latest/instancetypes/gp.html\" hreflang=\"ko-kr\" /><link rel=\"alternative\" href=\"https://docs.aws.amazon.com/ko_kr/ec2/latest/instancetypes/gp.html\" hreflang=\"ko\" /><link rel=\"alternative\" href=\"https://docs.aws.amazon.com/pt_br/ec2/latest/instancetypes/gp.html\" hreflang=\"pt-br\" /><link rel=\"alternative\" href=\"https://docs.aws.amazon.com/pt_br/ec2/latest/instancetypes/gp.html\" hreflang=\"pt\" /><link rel=\"alternative\" href=\"https://docs.aws.amazon.com/zh_cn/ec2/latest/instancetypes/gp.html\" hreflang=\"zh-cn\" /><link rel=\"alternative\" href=\"https://docs.aws.amazon.com/zh_tw/ec2/latest/instancetypes/gp.html\" hreflang=\"zh-tw\" /><link rel=\"alternative\" href=\"https://docs.aws.amazon.com/ec2/latest/instancetypes/gp.html\" hreflang=\"x-default\" /><meta name=\"feedback-item\" content=\"EC2\" /><meta name=\"this_doc_product\" content=\"Amazon EC2\" /><meta name=\"this_doc_guide\" content=\"Instance Types\" /><script defer=\"\" src=\"/assets/r/vendor4.js?version=2021.12.02\"></script><script defer=\"\" src=\"/assets/r/vendor3.js?version=2021.12.02\"></script><script defer=\"\" src=\"/assets/r/vendor1.js?version=2021.12.02\"></script><script defer=\"\" src=\"/assets/r/awsdocs-common.js?version=2021.12.02\"></script><script defer=\"\" src=\"/assets/r/awsdocs-doc-page.js?version=2021.12.02\"></script><link href=\"/assets/r/vendor4.css?version=2021.12.02\" rel=\"stylesheet\" /><link href=\"/assets/r/awsdocs-common.css?version=2021.12.02\" rel=\"stylesheet\" /><link href=\"/assets/r/awsdocs-doc-page.css?version=2021.12.02\" rel=\"stylesheet\" /><script async=\"\" id=\"awsc-panorama-bundle\" type=\"text/javascript\" src=\"https://prod.pa.cdn.uis.awsstatic.com/panorama-nav-init.js\" data-config=\"{'appEntity':'aws-documentation','region':'us-east-1','service':'ec2'}\"></script><meta id=\"panorama-serviceSubSection\" value=\"Instance Types\" /><meta id=\"panorama-serviceConsolePage\" value=\"General purpose instances\" /></head><body class=\"awsdocs awsui\"><div class=\"awsdocs-container\"><awsdocs-header></awsdocs-header><awsui-app-layout id=\"app-layout\" class=\"awsui-util-no-gutters\" ng-controller=\"ContentController as $ctrl\" header-selector=\"awsdocs-header\" navigation-hide=\"false\" navigation-width=\"$ctrl.navWidth\" navigation-open=\"$ctrl.navOpen\" navigation-change=\"$ctrl.onNavChange($event)\" tools-hide=\"$ctrl.hideTools\" tools-width=\"$ctrl.toolsWidth\" tools-open=\"$ctrl.toolsOpen\" tools-change=\"$ctrl.onToolsChange($event)\"><div id=\"guide-toc\" dom-region=\"navigation\"><awsdocs-toc></awsdocs-toc></div><div id=\"main-column\" dom-region=\"content\" tabindex=\"-1\"><awsdocs-view class=\"awsdocs-view\"><div id=\"awsdocs-content\"><head><title>General purpose instances - Amazon EC2</title><meta name=\"pdf\" content=\"/pdfs/ec2/latest/instancetypes/ec2-types.pdf#gp\" /><meta name=\"rss\" content=\"ec2-types.rss\" /><meta name=\"feedback\" content=\"https://docs.aws.amazon.com/forms/aws-doc-feedback?hidden_service_name=EC2&amp;topic_url=https://docs.aws.amazon.com/en_us/ec2/latest/instancetypes/gp.html\" /><meta name=\"feedback-yes\" content=\"feedbackyes.html?topic_url=https://docs.aws.amazon.com/en_us/ec2/latest/instancetypes/gp.html\" /><meta name=\"feedback-no\" content=\"feedbackno.html?topic_url=https://docs.aws.amazon.com/en_us/ec2/latest/instancetypes/gp.html\" /><meta name=\"keywords\" content=\"Amazon EC2,ec2\" /><script type=\"application/ld+json\">\n    {\n        \"@context\" : \"https://schema.org\",\n        \"@type\" : \"BreadcrumbList\",\n        \"itemListElement\" : [\n            {\n                \"@type\" : \"ListItem\",\n                \"position\" : 1,\n                \"name\" : \"AWS\",\n                \"item\" : \"https://aws.amazon.com\"\n            },\n            {\n                \"@type\" : \"ListItem\",\n                \"position\" : 2,\n                \"name\" : \"Amazon EC2\",\n                \"item\" : \"https://docs.aws.amazon.com/ec2/index.html\"\n            },\n            {\n                \"@type\" : \"ListItem\",\n                \"position\" : 3,\n                \"name\" : \"Instance Types\",\n                \"item\" : \"https://docs.aws.amazon.com/ec2/latest/instancetypes\"\n            },\n            {\n                \"@type\" : \"ListItem\",\n                \"position\" : 4,\n                \"name\" : \"Amazon EC2 instance type specifications\",\n                \"item\" : \"https://docs.aws.amazon.com/ec2/latest/instancetypes/ec2-instance-type-specifications.html\"\n            },\n            {\n                \"@type\" : \"ListItem\",\n                \"position\" : 5,\n                \"name\" : \"General purpose instances\",\n                \"item\" : \"https://docs.aws.amazon.com/ec2/latest/instancetypes/ec2-instance-type-specifications.html\"\n            }\n        ]\n    }\n</script></head><body><div id=\"main\"><div style=\"display: none\"><a href=\"/pdfs/ec2/latest/instancetypes/ec2-types.pdf#gp\" target=\"_blank\" rel=\"noopener noreferrer\" title=\"Open PDF\"></a></div><div id=\"breadcrumbs\" class=\"breadcrumb\"><a href=\"https://aws.amazon.com\">AWS</a><a href=\"/index.html\">Documentation</a><a href=\"/ec2/index.html\">Amazon EC2</a><a href=\"instance-types.html\">Instance Types</a></div><div id=\"page-toc-src\"><a href=\"#gp_sizes\">Available sizes</a><a href=\"#gp_summary\">Platform summary</a><a href=\"#gp_hardware\">Performance specifications</a><a href=\"#gp_network\">Network specifications</a><a href=\"#gp_storage-ebs\">Amazon EBS specifications</a><a href=\"#gp_instance-store\">Instance store specifications</a><a href=\"#gp_security\">Security specifications</a></div><div id=\"main-content\" class=\"awsui-util-container\"><div id=\"main-col-body\"><awsdocs-language-banner data-service=\"$ctrl.pageService\"></awsdocs-language-banner><h1 class=\"topictitle\" id=\"gp\">General purpose instances</h1><div class=\"awsdocs-page-header-container\"><awsdocs-page-header></awsdocs-page-header><awsdocs-filter-selector id=\"awsdocs-filter-selector\"></awsdocs-filter-selector></div><p>General purpose instances provide a balance of compute, memory, and networking resources.\n    These instances are ideal for applications that use these resources in equal proportions,\n    such as web servers and code repositories.</p><div class=\"highlights\" id=\"inline-topiclist\"><h6>Contents</h6><ul><li><a href=\"#gp_sizes\">Available sizes</a></li><li><a href=\"#gp_summary\">Platform summary</a></li><li><a href=\"#gp_hardware\">Performance specifications</a></li><li><a href=\"#gp_network\">Network specifications</a></li><li><a href=\"#gp_storage-ebs\">Amazon EBS specifications</a></li><li><a href=\"#gp_instance-store\">Instance store specifications</a></li><li><a href=\"#gp_security\">Security specifications</a></li></ul></div>\n    <h2 id=\"gp_sizes\">Available sizes</h2>\n    <div class=\"table-container\"><div class=\"table-contents\"><table id=\"w170aab9c13b7b3\"><thead>\n    <tr>\n        <th>Instance type</th>\n        <th>Available sizes</th>\n    </tr>\n    </thead>\n        <tr>\n            <td tabindex=\"-1\">M5</td>\n            <td tabindex=\"-1\"><code class=\"code\">m5.large</code> | <code class=\"code\">m5.xlarge</code> | <code class=\"code\">m5.2xlarge</code> | <code class=\"code\">m5.4xlarge</code> | <code class=\"code\">m5.8xlarge</code> | <code class=\"code\">m5.12xlarge</code> | <code class=\"code\">m5.16xlarge</code> | <code class=\"code\">m5.24xlarge</code> | <code class=\"code\">m5.metal</code></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">M5a</td>\n            <td tabindex=\"-1\"><code class=\"code\">m5a.large</code> | <code class=\"code\">m5a.xlarge</code> | <code class=\"code\">m5a.2xlarge</code> | <code class=\"code\">m5a.4xlarge</code> | <code class=\"code\">m5a.8xlarge</code> | <code class=\"code\">m5a.12xlarge</code> | <code class=\"code\">m5a.16xlarge</code> | <code class=\"code\">m5a.24xlarge</code></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">M5ad</td>\n            <td tabindex=\"-1\"><code class=\"code\">m5ad.large</code> | <code class=\"code\">m5ad.xlarge</code> | <code class=\"code\">m5ad.2xlarge</code> | <code class=\"code\">m5ad.4xlarge</code> | <code class=\"code\">m5ad.8xlarge</code> | <code class=\"code\">m5ad.12xlarge</code> | <code class=\"code\">m5ad.16xlarge</code> | <code class=\"code\">m5ad.24xlarge</code></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">M5d</td>\n            <td tabindex=\"-1\"><code class=\"code\">m5d.large</code> | <code class=\"code\">m5d.xlarge</code> | <code class=\"code\">m5d.2xlarge</code> | <code class=\"code\">m5d.4xlarge</code> | <code class=\"code\">m5d.8xlarge</code> | <code class=\"code\">m5d.12xlarge</code> | <code class=\"code\">m5d.16xlarge</code> | <code class=\"code\">m5d.24xlarge</code> | <code class=\"code\">m5d.metal</code></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">M5dn</td>\n            <td tabindex=\"-1\"><code class=\"code\">m5dn.large</code> | <code class=\"code\">m5dn.xlarge</code> | <code class=\"code\">m5dn.2xlarge</code> | <code class=\"code\">m5dn.4xlarge</code> | <code class=\"code\">m5dn.8xlarge</code> | <code class=\"code\">m5dn.12xlarge</code> | <code class=\"code\">m5dn.16xlarge</code> | <code class=\"code\">m5dn.24xlarge</code> | <code class=\"code\">m5dn.metal</code></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">M5n</td>\n            <td tabindex=\"-1\"><code class=\"code\">m5n.large</code> | <code class=\"code\">m5n.xlarge</code> | <code class=\"code\">m5n.2xlarge</code> | <code class=\"code\">m5n.4xlarge</code> | <code class=\"code\">m5n.8xlarge</code> | <code class=\"code\">m5n.12xlarge</code> | <code class=\"code\">m5n.16xlarge</code> | <code class=\"code\">m5n.24xlarge</code> | <code class=\"code\">m5n.metal</code></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">M5zn</td>\n            <td tabindex=\"-1\"><code class=\"code\">m5zn.large</code> | <code class=\"code\">m5zn.xlarge</code> | <code class=\"code\">m5zn.2xlarge</code> | <code class=\"code\">m5zn.3xlarge</code> | <code class=\"code\">m5zn.6xlarge</code> | <code class=\"code\">m5zn.12xlarge</code> | <code class=\"code\">m5zn.metal</code></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">M6a</td>\n            <td tabindex=\"-1\"><code class=\"code\">m6a.large</code> | <code class=\"code\">m6a.xlarge</code> | <code class=\"code\">m6a.2xlarge</code> | <code class=\"code\">m6a.4xlarge</code> | <code class=\"code\">m6a.8xlarge</code> | <code class=\"code\">m6a.12xlarge</code> | <code class=\"code\">m6a.16xlarge</code> | <code class=\"code\">m6a.24xlarge</code> | <code class=\"code\">m6a.32xlarge</code> | <code class=\"code\">m6a.48xlarge</code> | <code class=\"code\">m6a.metal</code></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">M6g</td>\n            <td tabindex=\"-1\"><code class=\"code\">m6g.medium</code> | <code class=\"code\">m6g.large</code> | <code class=\"code\">m6g.xlarge</code> | <code class=\"code\">m6g.2xlarge</code> | <code class=\"code\">m6g.4xlarge</code> | <code class=\"code\">m6g.8xlarge</code> | <code class=\"code\">m6g.12xlarge</code> | <code class=\"code\">m6g.16xlarge</code> | <code class=\"code\">m6g.metal</code></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">M6gd</td>\n            <td tabindex=\"-1\"><code class=\"code\">m6gd.medium</code> | <code class=\"code\">m6gd.large</code> | <code class=\"code\">m6gd.xlarge</code> | <code class=\"code\">m6gd.2xlarge</code> | <code class=\"code\">m6gd.4xlarge</code> | <code class=\"code\">m6gd.8xlarge</code> | <code class=\"code\">m6gd.12xlarge</code> | <code class=\"code\">m6gd.16xlarge</code> | <code class=\"code\">m6gd.metal</code></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">M6i</td>\n            <td tabindex=\"-1\"><code class=\"code\">m6i.large</code> | <code class=\"code\">m6i.xlarge</code> | <code class=\"code\">m6i.2xlarge</code> | <code class=\"code\">m6i.4xlarge</code> | <code class=\"code\">m6i.8xlarge</code> | <code class=\"code\">m6i.12xlarge</code> | <code class=\"code\">m6i.16xlarge</code> | <code class=\"code\">m6i.24xlarge</code> | <code class=\"code\">m6i.32xlarge</code> | <code class=\"code\">m6i.metal</code></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">M6id</td>\n            <td tabindex=\"-1\"><code class=\"code\">m6id.large</code> | <code class=\"code\">m6id.xlarge</code> | <code class=\"code\">m6id.2xlarge</code> | <code class=\"code\">m6id.4xlarge</code> | <code class=\"code\">m6id.8xlarge</code> | <code class=\"code\">m6id.12xlarge</code> | <code class=\"code\">m6id.16xlarge</code> | <code class=\"code\">m6id.24xlarge</code> | <code class=\"code\">m6id.32xlarge</code> | <code class=\"code\">m6id.metal</code></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">M6idn</td>\n            <td tabindex=\"-1\"><code class=\"code\">m6idn.large</code> | <code class=\"code\">m6idn.xlarge</code> | <code class=\"code\">m6idn.2xlarge</code> | <code class=\"code\">m6idn.4xlarge</code> | <code class=\"code\">m6idn.8xlarge</code> | <code class=\"code\">m6idn.12xlarge</code> | <code class=\"code\">m6idn.16xlarge</code> | <code class=\"code\">m6idn.24xlarge</code> | <code class=\"code\">m6idn.32xlarge</code> | <code class=\"code\">m6idn.metal</code></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">M6in</td>\n            <td tabindex=\"-1\"><code class=\"code\">m6in.large</code> | <code class=\"code\">m6in.xlarge</code> | <code class=\"code\">m6in.2xlarge</code> | <code class=\"code\">m6in.4xlarge</code> | <code class=\"code\">m6in.8xlarge</code> | <code class=\"code\">m6in.12xlarge</code> | <code class=\"code\">m6in.16xlarge</code> | <code class=\"code\">m6in.24xlarge</code> | <code class=\"code\">m6in.32xlarge</code> | <code class=\"code\">m6in.metal</code></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">M7a</td>\n            <td tabindex=\"-1\"><code class=\"code\">m7a.medium</code> | <code class=\"code\">m7a.large</code> | <code class=\"code\">m7a.xlarge</code> | <code class=\"code\">m7a.2xlarge</code> | <code class=\"code\">m7a.4xlarge</code> | <code class=\"code\">m7a.8xlarge</code> | <code class=\"code\">m7a.12xlarge</code> | <code class=\"code\">m7a.16xlarge</code> | <code class=\"code\">m7a.24xlarge</code> | <code class=\"code\">m7a.32xlarge</code> | <code class=\"code\">m7a.48xlarge</code> | <code class=\"code\">m7a.metal-48xl</code></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">M7g</td>\n            <td tabindex=\"-1\"><code class=\"code\">m7g.medium</code> | <code class=\"code\">m7g.large</code> | <code class=\"code\">m7g.xlarge</code> | <code class=\"code\">m7g.2xlarge</code> | <code class=\"code\">m7g.4xlarge</code> | <code class=\"code\">m7g.8xlarge</code> | <code class=\"code\">m7g.12xlarge</code> | <code class=\"code\">m7g.16xlarge</code> | <code class=\"code\">m7g.metal</code></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">M7gd</td>\n            <td tabindex=\"-1\"><code class=\"code\">m7gd.medium</code> | <code class=\"code\">m7gd.large</code> | <code class=\"code\">m7gd.xlarge</code> | <code class=\"code\">m7gd.2xlarge</code> | <code class=\"code\">m7gd.4xlarge</code> | <code class=\"code\">m7gd.8xlarge</code> | <code class=\"code\">m7gd.12xlarge</code> | <code class=\"code\">m7gd.16xlarge</code> | <code class=\"code\">m7gd.metal</code></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">M7i</td>\n            <td tabindex=\"-1\"><code class=\"code\">m7i.large</code> | <code class=\"code\">m7i.xlarge</code> | <code class=\"code\">m7i.2xlarge</code> | <code class=\"code\">m7i.4xlarge</code> | <code class=\"code\">m7i.8xlarge</code> | <code class=\"code\">m7i.12xlarge</code> | <code class=\"code\">m7i.16xlarge</code> | <code class=\"code\">m7i.24xlarge</code> | <code class=\"code\">m7i.48xlarge</code> | <code class=\"code\">m7i.metal-24xl</code> | <code class=\"code\">m7i.metal-48xl</code></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">M7i-flex</td>\n            <td tabindex=\"-1\"><code class=\"code\">m7i-flex.large</code> | <code class=\"code\">m7i-flex.xlarge</code> | <code class=\"code\">m7i-flex.2xlarge</code> | <code class=\"code\">m7i-flex.4xlarge</code> | <code class=\"code\">m7i-flex.8xlarge</code></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">Mac1</td>\n            <td tabindex=\"-1\"><code class=\"code\">mac1.metal</code></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">Mac2</td>\n            <td tabindex=\"-1\"><code class=\"code\">mac2.metal</code></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">Mac2-m2</td>\n            <td tabindex=\"-1\"><code class=\"code\">mac2-m2.metal</code></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">Mac2-m2pro</td>\n            <td tabindex=\"-1\"><code class=\"code\">mac2-m2pro.metal</code></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">T2</td>\n            <td tabindex=\"-1\"><code class=\"code\">t2.nano</code> | <code class=\"code\">t2.micro</code> | <code class=\"code\">t2.small</code> | <code class=\"code\">t2.medium</code> | <code class=\"code\">t2.large</code> | <code class=\"code\">t2.xlarge</code> | <code class=\"code\">t2.2xlarge</code></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">T3</td>\n            <td tabindex=\"-1\"><code class=\"code\">t3.nano</code> | <code class=\"code\">t3.micro</code> | <code class=\"code\">t3.small</code> | <code class=\"code\">t3.medium</code> | <code class=\"code\">t3.large</code> | <code class=\"code\">t3.xlarge</code> | <code class=\"code\">t3.2xlarge</code></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">T3a</td>\n            <td tabindex=\"-1\"><code class=\"code\">t3a.nano</code> | <code class=\"code\">t3a.micro</code> | <code class=\"code\">t3a.small</code> | <code class=\"code\">t3a.medium</code> | <code class=\"code\">t3a.large</code> | <code class=\"code\">t3a.xlarge</code> | <code class=\"code\">t3a.2xlarge</code></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">T4g</td>\n            <td tabindex=\"-1\"><code class=\"code\">t4g.nano</code> | <code class=\"code\">t4g.micro</code> | <code class=\"code\">t4g.small</code> | <code class=\"code\">t4g.medium</code> | <code class=\"code\">t4g.large</code> | <code class=\"code\">t4g.xlarge</code> | <code class=\"code\">t4g.2xlarge</code></td>\n        </tr>\n\n    </table></div></div>\n\n    <h2 id=\"gp_summary\">Platform summary</h2>\n    <div class=\"table-container\"><div class=\"table-contents\"><table id=\"w170aab9c13b9b3\"><thead>\n    <tr>\n        <th>Instance type</th>\n        <th>Hypervisor</th>\n        <th>Processor type (architecture)</th>\n        <th>Metal instances available</th>\n        <th>Dedicated Hosts support</th>\n        <th>Spot support</th>\n        <th>Hibernation support</th>\n        <th>Supported operating systems</th>\n    </tr>\n    </thead>\n        <tr>\n            <td tabindex=\"-1\">M5</td>\n            <td tabindex=\"-1\">Nitro</td>\n            <td tabindex=\"-1\">Intel (x86_64)</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Windows | Linux</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">M5a</td>\n            <td tabindex=\"-1\">Nitro</td>\n            <td tabindex=\"-1\">AMD (x86_64)</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Windows | Linux</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">M5ad</td>\n            <td tabindex=\"-1\">Nitro</td>\n            <td tabindex=\"-1\">AMD (x86_64)</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Windows | Linux</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">M5d</td>\n            <td tabindex=\"-1\">Nitro</td>\n            <td tabindex=\"-1\">Intel (x86_64)</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Windows | Linux</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">M5dn</td>\n            <td tabindex=\"-1\">Nitro</td>\n            <td tabindex=\"-1\">Intel (x86_64)</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">Windows | Linux</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">M5n</td>\n            <td tabindex=\"-1\">Nitro</td>\n            <td tabindex=\"-1\">Intel (x86_64)</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">Windows | Linux</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">M5zn</td>\n            <td tabindex=\"-1\">Nitro</td>\n            <td tabindex=\"-1\">Intel (x86_64)</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">Windows | Linux</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">M6a</td>\n            <td tabindex=\"-1\">Nitro</td>\n            <td tabindex=\"-1\">AMD (x86_64)</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">Windows | Linux</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">M6g</td>\n            <td tabindex=\"-1\">Nitro</td>\n            <td tabindex=\"-1\">AWS Graviton (arm64)</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">Linux</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">M6gd</td>\n            <td tabindex=\"-1\">Nitro</td>\n            <td tabindex=\"-1\">AWS Graviton (arm64)</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">Linux</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">M6i</td>\n            <td tabindex=\"-1\">Nitro</td>\n            <td tabindex=\"-1\">Intel (x86_64)</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Windows | Linux</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">M6id</td>\n            <td tabindex=\"-1\">Nitro</td>\n            <td tabindex=\"-1\">Intel (x86_64)</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Windows | Linux</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">M6idn</td>\n            <td tabindex=\"-1\">Nitro</td>\n            <td tabindex=\"-1\">Intel (x86_64)</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">Windows | Linux</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">M6in</td>\n            <td tabindex=\"-1\">Nitro</td>\n            <td tabindex=\"-1\">Intel (x86_64)</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">Windows | Linux</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">M7a</td>\n            <td tabindex=\"-1\">Nitro</td>\n            <td tabindex=\"-1\">AMD (x86_64)</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">Windows | Linux</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">M7g</td>\n            <td tabindex=\"-1\">Nitro</td>\n            <td tabindex=\"-1\">AWS Graviton (arm64)</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">Linux</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">M7gd</td>\n            <td tabindex=\"-1\">Nitro</td>\n            <td tabindex=\"-1\">AWS Graviton (arm64)</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">Linux</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">M7i</td>\n            <td tabindex=\"-1\">Nitro</td>\n            <td tabindex=\"-1\">Intel (x86_64)</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Windows | Linux</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">M7i-flex</td>\n            <td tabindex=\"-1\">Nitro</td>\n            <td tabindex=\"-1\">Intel (x86_64)</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Windows | Linux</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">Mac1</td>\n            <td tabindex=\"-1\">Nitro</td>\n            <td tabindex=\"-1\">Intel (x86_64_mac)</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">Linux</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">Mac2</td>\n            <td tabindex=\"-1\">Nitro</td>\n            <td tabindex=\"-1\">Apple (arm64_mac)</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">Linux</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">Mac2-m2</td>\n            <td tabindex=\"-1\">Nitro</td>\n            <td tabindex=\"-1\">Apple (arm64_mac)</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">Linux</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">Mac2-m2pro</td>\n            <td tabindex=\"-1\">Nitro</td>\n            <td tabindex=\"-1\">Apple (arm64_mac)</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">Linux</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">T2</td>\n            <td tabindex=\"-1\">Xen</td>\n            <td tabindex=\"-1\">Intel (x86_64)</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Windows | Linux</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">T3</td>\n            <td tabindex=\"-1\">Nitro</td>\n            <td tabindex=\"-1\">Intel (x86_64)</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Windows | Linux</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">T3a</td>\n            <td tabindex=\"-1\">Nitro</td>\n            <td tabindex=\"-1\">AMD (x86_64)</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Windows | Linux</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">T4g</td>\n            <td tabindex=\"-1\">Nitro</td>\n            <td tabindex=\"-1\">AWS Graviton (arm64)</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">Linux</td>\n        </tr>\n\n    </table></div></div>\n\n    <h2 id=\"gp_hardware\">Performance specifications</h2>\n    <div class=\"table-container\"><div class=\"table-contents\"><table id=\"w170aab9c13c11b3\"><thead>\n    <tr>\n        <th>Instance type</th>\n        <th>Burstable</th>\n        <th>Memory (GiB)</th>\n        <th>Processor</th>\n        <th>vCPUs</th>\n        <th>CPU cores</th>\n        <th>Threads per core</th>\n        <th>Accelerators</th>\n    </tr>\n    </thead>\n        <tr>\n            <td colspan=\"8\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>M5</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5.large</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">8.00</td>\n            <td tabindex=\"-1\">Intel Xeon Platinum 8175</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5.xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">16.00</td>\n            <td tabindex=\"-1\">Intel Xeon Platinum 8175</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5.2xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">32.00</td>\n            <td tabindex=\"-1\">Intel Xeon Platinum 8175</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5.4xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">64.00</td>\n            <td tabindex=\"-1\">Intel Xeon Platinum 8175</td>\n            <td tabindex=\"-1\">16</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5.8xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">128.00</td>\n            <td tabindex=\"-1\">Intel Xeon Platinum 8175</td>\n            <td tabindex=\"-1\">32</td>\n            <td tabindex=\"-1\">16</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5.12xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">192.00</td>\n            <td tabindex=\"-1\">Intel Xeon Platinum 8175</td>\n            <td tabindex=\"-1\">48</td>\n            <td tabindex=\"-1\">24</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5.16xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">256.00</td>\n            <td tabindex=\"-1\">Intel Xeon Platinum 8175</td>\n            <td tabindex=\"-1\">64</td>\n            <td tabindex=\"-1\">32</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5.24xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">384.00</td>\n            <td tabindex=\"-1\">Intel Xeon Platinum 8175</td>\n            <td tabindex=\"-1\">96</td>\n            <td tabindex=\"-1\">48</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5.metal</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">384.00</td>\n            <td tabindex=\"-1\">Intel Xeon Platinum 8175</td>\n            <td tabindex=\"-1\">96</td>\n            <td tabindex=\"-1\">48</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td colspan=\"8\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>M5a</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5a.large</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">8.00</td>\n            <td tabindex=\"-1\">AMD EPYC 7571</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5a.xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">16.00</td>\n            <td tabindex=\"-1\">AMD EPYC 7571</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5a.2xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">32.00</td>\n            <td tabindex=\"-1\">AMD EPYC 7571</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5a.4xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">64.00</td>\n            <td tabindex=\"-1\">AMD EPYC 7571</td>\n            <td tabindex=\"-1\">16</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5a.8xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">128.00</td>\n            <td tabindex=\"-1\">AMD EPYC 7571</td>\n            <td tabindex=\"-1\">32</td>\n            <td tabindex=\"-1\">16</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5a.12xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">192.00</td>\n            <td tabindex=\"-1\">AMD EPYC 7571</td>\n            <td tabindex=\"-1\">48</td>\n            <td tabindex=\"-1\">24</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5a.16xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">256.00</td>\n            <td tabindex=\"-1\">AMD EPYC 7571</td>\n            <td tabindex=\"-1\">64</td>\n            <td tabindex=\"-1\">32</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5a.24xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">384.00</td>\n            <td tabindex=\"-1\">AMD EPYC 7571</td>\n            <td tabindex=\"-1\">96</td>\n            <td tabindex=\"-1\">48</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td colspan=\"8\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>M5ad</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5ad.large</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">8.00</td>\n            <td tabindex=\"-1\">AMD EPYC 7571</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5ad.xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">16.00</td>\n            <td tabindex=\"-1\">AMD EPYC 7571</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5ad.2xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">32.00</td>\n            <td tabindex=\"-1\">AMD EPYC 7571</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5ad.4xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">64.00</td>\n            <td tabindex=\"-1\">AMD EPYC 7571</td>\n            <td tabindex=\"-1\">16</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5ad.8xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">128.00</td>\n            <td tabindex=\"-1\">AMD EPYC 7571</td>\n            <td tabindex=\"-1\">32</td>\n            <td tabindex=\"-1\">16</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5ad.12xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">192.00</td>\n            <td tabindex=\"-1\">AMD EPYC 7571</td>\n            <td tabindex=\"-1\">48</td>\n            <td tabindex=\"-1\">24</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5ad.16xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">256.00</td>\n            <td tabindex=\"-1\">AMD EPYC 7571</td>\n            <td tabindex=\"-1\">64</td>\n            <td tabindex=\"-1\">32</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5ad.24xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">384.00</td>\n            <td tabindex=\"-1\">AMD EPYC 7571</td>\n            <td tabindex=\"-1\">96</td>\n            <td tabindex=\"-1\">48</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td colspan=\"8\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>M5d</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5d.large</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">8.00</td>\n            <td tabindex=\"-1\">Intel Xeon Platinum 8175</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5d.xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">16.00</td>\n            <td tabindex=\"-1\">Intel Xeon Platinum 8175</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5d.2xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">32.00</td>\n            <td tabindex=\"-1\">Intel Xeon Platinum 8175</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5d.4xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">64.00</td>\n            <td tabindex=\"-1\">Intel Xeon Platinum 8175</td>\n            <td tabindex=\"-1\">16</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5d.8xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">128.00</td>\n            <td tabindex=\"-1\">Intel Xeon Platinum 8175</td>\n            <td tabindex=\"-1\">32</td>\n            <td tabindex=\"-1\">16</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5d.12xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">192.00</td>\n            <td tabindex=\"-1\">Intel Xeon Platinum 8175</td>\n            <td tabindex=\"-1\">48</td>\n            <td tabindex=\"-1\">24</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5d.16xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">256.00</td>\n            <td tabindex=\"-1\">Intel Xeon Platinum 8175</td>\n            <td tabindex=\"-1\">64</td>\n            <td tabindex=\"-1\">32</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5d.24xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">384.00</td>\n            <td tabindex=\"-1\">Intel Xeon Platinum 8175</td>\n            <td tabindex=\"-1\">96</td>\n            <td tabindex=\"-1\">48</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5d.metal</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">384.00</td>\n            <td tabindex=\"-1\">Intel Xeon Platinum 8175</td>\n            <td tabindex=\"-1\">96</td>\n            <td tabindex=\"-1\">48</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td colspan=\"8\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>M5dn</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5dn.large</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">8.00</td>\n            <td tabindex=\"-1\">Intel Xeon Platinum 8259</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5dn.xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">16.00</td>\n            <td tabindex=\"-1\">Intel Xeon Platinum 8259</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5dn.2xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">32.00</td>\n            <td tabindex=\"-1\">Intel Xeon Platinum 8259</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5dn.4xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">64.00</td>\n            <td tabindex=\"-1\">Intel Xeon Platinum 8259</td>\n            <td tabindex=\"-1\">16</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5dn.8xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">128.00</td>\n            <td tabindex=\"-1\">Intel Xeon Platinum 8259</td>\n            <td tabindex=\"-1\">32</td>\n            <td tabindex=\"-1\">16</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5dn.12xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">192.00</td>\n            <td tabindex=\"-1\">Intel Xeon Platinum 8259</td>\n            <td tabindex=\"-1\">48</td>\n            <td tabindex=\"-1\">24</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5dn.16xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">256.00</td>\n            <td tabindex=\"-1\">Intel Xeon Platinum 8259</td>\n            <td tabindex=\"-1\">64</td>\n            <td tabindex=\"-1\">32</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5dn.24xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">384.00</td>\n            <td tabindex=\"-1\">Intel Xeon Platinum 8259</td>\n            <td tabindex=\"-1\">96</td>\n            <td tabindex=\"-1\">48</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5dn.metal</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">384.00</td>\n            <td tabindex=\"-1\">Intel Xeon Platinum 8259</td>\n            <td tabindex=\"-1\">96</td>\n            <td tabindex=\"-1\">48</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td colspan=\"8\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>M5n</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5n.large</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">8.00</td>\n            <td tabindex=\"-1\">Intel Xeon Platinum 8259</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5n.xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">16.00</td>\n            <td tabindex=\"-1\">Intel Xeon Platinum 8259</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5n.2xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">32.00</td>\n            <td tabindex=\"-1\">Intel Xeon Platinum 8259</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5n.4xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">64.00</td>\n            <td tabindex=\"-1\">Intel Xeon Platinum 8259</td>\n            <td tabindex=\"-1\">16</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5n.8xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">128.00</td>\n            <td tabindex=\"-1\">Intel Xeon Platinum 8259</td>\n            <td tabindex=\"-1\">32</td>\n            <td tabindex=\"-1\">16</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5n.12xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">192.00</td>\n            <td tabindex=\"-1\">Intel Xeon Platinum 8259</td>\n            <td tabindex=\"-1\">48</td>\n            <td tabindex=\"-1\">24</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5n.16xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">256.00</td>\n            <td tabindex=\"-1\">Intel Xeon Platinum 8259</td>\n            <td tabindex=\"-1\">64</td>\n            <td tabindex=\"-1\">32</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5n.24xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">384.00</td>\n            <td tabindex=\"-1\">Intel Xeon Platinum 8259</td>\n            <td tabindex=\"-1\">96</td>\n            <td tabindex=\"-1\">48</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5n.metal</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">384.00</td>\n            <td tabindex=\"-1\">Intel Xeon Platinum 8259</td>\n            <td tabindex=\"-1\">96</td>\n            <td tabindex=\"-1\">48</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td colspan=\"8\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>M5zn</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5zn.large</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">8.00</td>\n            <td tabindex=\"-1\">Intel Xeon Platinum 8252</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5zn.xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">16.00</td>\n            <td tabindex=\"-1\">Intel Xeon Platinum 8252</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5zn.2xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">32.00</td>\n            <td tabindex=\"-1\">Intel Xeon Platinum 8252</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5zn.3xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">48.00</td>\n            <td tabindex=\"-1\">Intel Xeon Platinum 8252</td>\n            <td tabindex=\"-1\">12</td>\n            <td tabindex=\"-1\">6</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5zn.6xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">96.00</td>\n            <td tabindex=\"-1\">Intel Xeon Platinum 8252</td>\n            <td tabindex=\"-1\">24</td>\n            <td tabindex=\"-1\">12</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5zn.12xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">192.00</td>\n            <td tabindex=\"-1\">Intel Xeon Platinum 8252</td>\n            <td tabindex=\"-1\">48</td>\n            <td tabindex=\"-1\">24</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5zn.metal</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">192.00</td>\n            <td tabindex=\"-1\">Intel Xeon Platinum 8252</td>\n            <td tabindex=\"-1\">48</td>\n            <td tabindex=\"-1\">24</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td colspan=\"8\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>M6a</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6a.large</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">8.00</td>\n            <td tabindex=\"-1\">AMD EPYC 7R13</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6a.xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">16.00</td>\n            <td tabindex=\"-1\">AMD EPYC 7R13</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6a.2xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">32.00</td>\n            <td tabindex=\"-1\">AMD EPYC 7R13</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6a.4xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">64.00</td>\n            <td tabindex=\"-1\">AMD EPYC 7R13</td>\n            <td tabindex=\"-1\">16</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6a.8xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">128.00</td>\n            <td tabindex=\"-1\">AMD EPYC 7R13</td>\n            <td tabindex=\"-1\">32</td>\n            <td tabindex=\"-1\">16</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6a.12xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">192.00</td>\n            <td tabindex=\"-1\">AMD EPYC 7R13</td>\n            <td tabindex=\"-1\">48</td>\n            <td tabindex=\"-1\">24</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6a.16xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">256.00</td>\n            <td tabindex=\"-1\">AMD EPYC 7R13</td>\n            <td tabindex=\"-1\">64</td>\n            <td tabindex=\"-1\">32</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6a.24xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">384.00</td>\n            <td tabindex=\"-1\">AMD EPYC 7R13</td>\n            <td tabindex=\"-1\">96</td>\n            <td tabindex=\"-1\">48</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6a.32xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">512.00</td>\n            <td tabindex=\"-1\">AMD EPYC 7R13</td>\n            <td tabindex=\"-1\">128</td>\n            <td tabindex=\"-1\">64</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6a.48xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">768.00</td>\n            <td tabindex=\"-1\">AMD EPYC 7R13</td>\n            <td tabindex=\"-1\">192</td>\n            <td tabindex=\"-1\">96</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6a.metal</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">768.00</td>\n            <td tabindex=\"-1\">AMD EPYC 7R13</td>\n            <td tabindex=\"-1\">192</td>\n            <td tabindex=\"-1\">96</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td colspan=\"8\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>M6g</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6g.medium</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">4.00</td>\n            <td tabindex=\"-1\">AWS Graviton2 Processor</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6g.large</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">8.00</td>\n            <td tabindex=\"-1\">AWS Graviton2 Processor</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6g.xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">16.00</td>\n            <td tabindex=\"-1\">AWS Graviton2 Processor</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6g.2xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">32.00</td>\n            <td tabindex=\"-1\">AWS Graviton2 Processor</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6g.4xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">64.00</td>\n            <td tabindex=\"-1\">AWS Graviton2 Processor</td>\n            <td tabindex=\"-1\">16</td>\n            <td tabindex=\"-1\">16</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6g.8xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">128.00</td>\n            <td tabindex=\"-1\">AWS Graviton2 Processor</td>\n            <td tabindex=\"-1\">32</td>\n            <td tabindex=\"-1\">32</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6g.12xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">192.00</td>\n            <td tabindex=\"-1\">AWS Graviton2 Processor</td>\n            <td tabindex=\"-1\">48</td>\n            <td tabindex=\"-1\">48</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6g.16xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">256.00</td>\n            <td tabindex=\"-1\">AWS Graviton2 Processor</td>\n            <td tabindex=\"-1\">64</td>\n            <td tabindex=\"-1\">64</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6g.metal</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">256.00</td>\n            <td tabindex=\"-1\">AWS Graviton2 Processor</td>\n            <td tabindex=\"-1\">64</td>\n            <td tabindex=\"-1\">64</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td colspan=\"8\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>M6gd</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6gd.medium</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">4.00</td>\n            <td tabindex=\"-1\">AWS Graviton2 Processor</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6gd.large</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">8.00</td>\n            <td tabindex=\"-1\">AWS Graviton2 Processor</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6gd.xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">16.00</td>\n            <td tabindex=\"-1\">AWS Graviton2 Processor</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6gd.2xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">32.00</td>\n            <td tabindex=\"-1\">AWS Graviton2 Processor</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6gd.4xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">64.00</td>\n            <td tabindex=\"-1\">AWS Graviton2 Processor</td>\n            <td tabindex=\"-1\">16</td>\n            <td tabindex=\"-1\">16</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6gd.8xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">128.00</td>\n            <td tabindex=\"-1\">AWS Graviton2 Processor</td>\n            <td tabindex=\"-1\">32</td>\n            <td tabindex=\"-1\">32</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6gd.12xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">192.00</td>\n            <td tabindex=\"-1\">AWS Graviton2 Processor</td>\n            <td tabindex=\"-1\">48</td>\n            <td tabindex=\"-1\">48</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6gd.16xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">256.00</td>\n            <td tabindex=\"-1\">AWS Graviton2 Processor</td>\n            <td tabindex=\"-1\">64</td>\n            <td tabindex=\"-1\">64</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6gd.metal</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">256.00</td>\n            <td tabindex=\"-1\">AWS Graviton2 Processor</td>\n            <td tabindex=\"-1\">64</td>\n            <td tabindex=\"-1\">64</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td colspan=\"8\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>M6i</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6i.large</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">8.00</td>\n            <td tabindex=\"-1\">Intel Xeon Ice Lake</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6i.xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">16.00</td>\n            <td tabindex=\"-1\">Intel Xeon Ice Lake</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6i.2xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">32.00</td>\n            <td tabindex=\"-1\">Intel Xeon Ice Lake</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6i.4xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">64.00</td>\n            <td tabindex=\"-1\">Intel Xeon Ice Lake</td>\n            <td tabindex=\"-1\">16</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6i.8xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">128.00</td>\n            <td tabindex=\"-1\">Intel Xeon Ice Lake</td>\n            <td tabindex=\"-1\">32</td>\n            <td tabindex=\"-1\">16</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6i.12xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">192.00</td>\n            <td tabindex=\"-1\">Intel Xeon Ice Lake</td>\n            <td tabindex=\"-1\">48</td>\n            <td tabindex=\"-1\">24</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6i.16xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">256.00</td>\n            <td tabindex=\"-1\">Intel Xeon Ice Lake</td>\n            <td tabindex=\"-1\">64</td>\n            <td tabindex=\"-1\">32</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6i.24xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">384.00</td>\n            <td tabindex=\"-1\">Intel Xeon Ice Lake</td>\n            <td tabindex=\"-1\">96</td>\n            <td tabindex=\"-1\">48</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6i.32xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">512.00</td>\n            <td tabindex=\"-1\">Intel Xeon Ice Lake</td>\n            <td tabindex=\"-1\">128</td>\n            <td tabindex=\"-1\">64</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6i.metal</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">512.00</td>\n            <td tabindex=\"-1\">Intel Xeon Ice Lake</td>\n            <td tabindex=\"-1\">128</td>\n            <td tabindex=\"-1\">64</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td colspan=\"8\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>M6id</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6id.large</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">8.00</td>\n            <td tabindex=\"-1\">Intel Xeon Ice Lake</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6id.xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">16.00</td>\n            <td tabindex=\"-1\">Intel Xeon Ice Lake</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6id.2xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">32.00</td>\n            <td tabindex=\"-1\">Intel Xeon Ice Lake</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6id.4xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">64.00</td>\n            <td tabindex=\"-1\">Intel Xeon Ice Lake</td>\n            <td tabindex=\"-1\">16</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6id.8xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">128.00</td>\n            <td tabindex=\"-1\">Intel Xeon Ice Lake</td>\n            <td tabindex=\"-1\">32</td>\n            <td tabindex=\"-1\">16</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6id.12xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">192.00</td>\n            <td tabindex=\"-1\">Intel Xeon Ice Lake</td>\n            <td tabindex=\"-1\">48</td>\n            <td tabindex=\"-1\">24</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6id.16xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">256.00</td>\n            <td tabindex=\"-1\">Intel Xeon Ice Lake</td>\n            <td tabindex=\"-1\">64</td>\n            <td tabindex=\"-1\">32</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6id.24xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">384.00</td>\n            <td tabindex=\"-1\">Intel Xeon Ice Lake</td>\n            <td tabindex=\"-1\">96</td>\n            <td tabindex=\"-1\">48</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6id.32xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">512.00</td>\n            <td tabindex=\"-1\">Intel Xeon Ice Lake</td>\n            <td tabindex=\"-1\">128</td>\n            <td tabindex=\"-1\">64</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6id.metal</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">512.00</td>\n            <td tabindex=\"-1\">Intel Xeon Ice Lake</td>\n            <td tabindex=\"-1\">128</td>\n            <td tabindex=\"-1\">64</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td colspan=\"8\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>M6idn</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6idn.large</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">8.00</td>\n            <td tabindex=\"-1\">Intel Xeon Ice Lake</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6idn.xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">16.00</td>\n            <td tabindex=\"-1\">Intel Xeon Ice Lake</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6idn.2xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">32.00</td>\n            <td tabindex=\"-1\">Intel Xeon Ice Lake</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6idn.4xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">64.00</td>\n            <td tabindex=\"-1\">Intel Xeon Ice Lake</td>\n            <td tabindex=\"-1\">16</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6idn.8xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">128.00</td>\n            <td tabindex=\"-1\">Intel Xeon Ice Lake</td>\n            <td tabindex=\"-1\">32</td>\n            <td tabindex=\"-1\">16</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6idn.12xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">192.00</td>\n            <td tabindex=\"-1\">Intel Xeon Ice Lake</td>\n            <td tabindex=\"-1\">48</td>\n            <td tabindex=\"-1\">24</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6idn.16xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">256.00</td>\n            <td tabindex=\"-1\">Intel Xeon Ice Lake</td>\n            <td tabindex=\"-1\">64</td>\n            <td tabindex=\"-1\">32</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6idn.24xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">384.00</td>\n            <td tabindex=\"-1\">Intel Xeon Ice Lake</td>\n            <td tabindex=\"-1\">96</td>\n            <td tabindex=\"-1\">48</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6idn.32xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">512.00</td>\n            <td tabindex=\"-1\">Intel Xeon Ice Lake</td>\n            <td tabindex=\"-1\">128</td>\n            <td tabindex=\"-1\">64</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6idn.metal</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">512.00</td>\n            <td tabindex=\"-1\">Intel Xeon Ice Lake</td>\n            <td tabindex=\"-1\">128</td>\n            <td tabindex=\"-1\">64</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td colspan=\"8\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>M6in</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6in.large</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">8.00</td>\n            <td tabindex=\"-1\">Intel Xeon Ice Lake</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6in.xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">16.00</td>\n            <td tabindex=\"-1\">Intel Xeon Ice Lake</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6in.2xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">32.00</td>\n            <td tabindex=\"-1\">Intel Xeon Ice Lake</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6in.4xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">64.00</td>\n            <td tabindex=\"-1\">Intel Xeon Ice Lake</td>\n            <td tabindex=\"-1\">16</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6in.8xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">128.00</td>\n            <td tabindex=\"-1\">Intel Xeon Ice Lake</td>\n            <td tabindex=\"-1\">32</td>\n            <td tabindex=\"-1\">16</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6in.12xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">192.00</td>\n            <td tabindex=\"-1\">Intel Xeon Ice Lake</td>\n            <td tabindex=\"-1\">48</td>\n            <td tabindex=\"-1\">24</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6in.16xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">256.00</td>\n            <td tabindex=\"-1\">Intel Xeon Ice Lake</td>\n            <td tabindex=\"-1\">64</td>\n            <td tabindex=\"-1\">32</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6in.24xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">384.00</td>\n            <td tabindex=\"-1\">Intel Xeon Ice Lake</td>\n            <td tabindex=\"-1\">96</td>\n            <td tabindex=\"-1\">48</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6in.32xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">512.00</td>\n            <td tabindex=\"-1\">Intel Xeon Ice Lake</td>\n            <td tabindex=\"-1\">128</td>\n            <td tabindex=\"-1\">64</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6in.metal</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">512.00</td>\n            <td tabindex=\"-1\">Intel Xeon Ice Lake</td>\n            <td tabindex=\"-1\">128</td>\n            <td tabindex=\"-1\">64</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td colspan=\"8\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>M7a</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7a.medium</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">4.00</td>\n            <td tabindex=\"-1\">AMD EPYC 9R14</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7a.large</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">8.00</td>\n            <td tabindex=\"-1\">AMD EPYC 9R14</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7a.xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">16.00</td>\n            <td tabindex=\"-1\">AMD EPYC 9R14</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7a.2xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">32.00</td>\n            <td tabindex=\"-1\">AMD EPYC 9R14</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7a.4xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">64.00</td>\n            <td tabindex=\"-1\">AMD EPYC 9R14</td>\n            <td tabindex=\"-1\">16</td>\n            <td tabindex=\"-1\">16</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7a.8xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">128.00</td>\n            <td tabindex=\"-1\">AMD EPYC 9R14</td>\n            <td tabindex=\"-1\">32</td>\n            <td tabindex=\"-1\">32</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7a.12xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">192.00</td>\n            <td tabindex=\"-1\">AMD EPYC 9R14</td>\n            <td tabindex=\"-1\">48</td>\n            <td tabindex=\"-1\">48</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7a.16xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">256.00</td>\n            <td tabindex=\"-1\">AMD EPYC 9R14</td>\n            <td tabindex=\"-1\">64</td>\n            <td tabindex=\"-1\">64</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7a.24xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">384.00</td>\n            <td tabindex=\"-1\">AMD EPYC 9R14</td>\n            <td tabindex=\"-1\">96</td>\n            <td tabindex=\"-1\">96</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7a.32xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">512.00</td>\n            <td tabindex=\"-1\">AMD EPYC 9R14</td>\n            <td tabindex=\"-1\">128</td>\n            <td tabindex=\"-1\">128</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7a.48xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">768.00</td>\n            <td tabindex=\"-1\">AMD EPYC 9R14</td>\n            <td tabindex=\"-1\">192</td>\n            <td tabindex=\"-1\">192</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7a.metal-48xl</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">768.00</td>\n            <td tabindex=\"-1\">AMD EPYC 9R14</td>\n            <td tabindex=\"-1\">192</td>\n            <td tabindex=\"-1\">192</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td colspan=\"8\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>M7g</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7g.medium</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">4.00</td>\n            <td tabindex=\"-1\">AWS Graviton3 Processor</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7g.large</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">8.00</td>\n            <td tabindex=\"-1\">AWS Graviton3 Processor</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7g.xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">16.00</td>\n            <td tabindex=\"-1\">AWS Graviton3 Processor</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7g.2xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">32.00</td>\n            <td tabindex=\"-1\">AWS Graviton3 Processor</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7g.4xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">64.00</td>\n            <td tabindex=\"-1\">AWS Graviton3 Processor</td>\n            <td tabindex=\"-1\">16</td>\n            <td tabindex=\"-1\">16</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7g.8xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">128.00</td>\n            <td tabindex=\"-1\">AWS Graviton3 Processor</td>\n            <td tabindex=\"-1\">32</td>\n            <td tabindex=\"-1\">32</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7g.12xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">192.00</td>\n            <td tabindex=\"-1\">AWS Graviton3 Processor</td>\n            <td tabindex=\"-1\">48</td>\n            <td tabindex=\"-1\">48</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7g.16xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">256.00</td>\n            <td tabindex=\"-1\">AWS Graviton3 Processor</td>\n            <td tabindex=\"-1\">64</td>\n            <td tabindex=\"-1\">64</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7g.metal</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">256.00</td>\n            <td tabindex=\"-1\">AWS Graviton3 Processor</td>\n            <td tabindex=\"-1\">64</td>\n            <td tabindex=\"-1\">64</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td colspan=\"8\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>M7gd</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7gd.medium</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">4.00</td>\n            <td tabindex=\"-1\">AWS Graviton3 Processor</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7gd.large</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">8.00</td>\n            <td tabindex=\"-1\">AWS Graviton3 Processor</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7gd.xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">16.00</td>\n            <td tabindex=\"-1\">AWS Graviton3 Processor</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7gd.2xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">32.00</td>\n            <td tabindex=\"-1\">AWS Graviton3 Processor</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7gd.4xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">64.00</td>\n            <td tabindex=\"-1\">AWS Graviton3 Processor</td>\n            <td tabindex=\"-1\">16</td>\n            <td tabindex=\"-1\">16</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7gd.8xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">128.00</td>\n            <td tabindex=\"-1\">AWS Graviton3 Processor</td>\n            <td tabindex=\"-1\">32</td>\n            <td tabindex=\"-1\">32</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7gd.12xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">192.00</td>\n            <td tabindex=\"-1\">AWS Graviton3 Processor</td>\n            <td tabindex=\"-1\">48</td>\n            <td tabindex=\"-1\">48</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7gd.16xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">256.00</td>\n            <td tabindex=\"-1\">AWS Graviton3 Processor</td>\n            <td tabindex=\"-1\">64</td>\n            <td tabindex=\"-1\">64</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7gd.metal</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">256.00</td>\n            <td tabindex=\"-1\">AWS Graviton3 Processor</td>\n            <td tabindex=\"-1\">64</td>\n            <td tabindex=\"-1\">64</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td colspan=\"8\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>M7i</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7i.large</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">8.00</td>\n            <td tabindex=\"-1\">Intel Xeon Sapphire Rapids</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7i.xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">16.00</td>\n            <td tabindex=\"-1\">Intel Xeon Sapphire Rapids</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7i.2xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">32.00</td>\n            <td tabindex=\"-1\">Intel Xeon Sapphire Rapids</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7i.4xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">64.00</td>\n            <td tabindex=\"-1\">Intel Xeon Sapphire Rapids</td>\n            <td tabindex=\"-1\">16</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7i.8xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">128.00</td>\n            <td tabindex=\"-1\">Intel Xeon Sapphire Rapids</td>\n            <td tabindex=\"-1\">32</td>\n            <td tabindex=\"-1\">16</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7i.12xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">192.00</td>\n            <td tabindex=\"-1\">Intel Xeon Sapphire Rapids</td>\n            <td tabindex=\"-1\">48</td>\n            <td tabindex=\"-1\">24</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7i.16xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">256.00</td>\n            <td tabindex=\"-1\">Intel Xeon Sapphire Rapids</td>\n            <td tabindex=\"-1\">64</td>\n            <td tabindex=\"-1\">32</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7i.24xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">384.00</td>\n            <td tabindex=\"-1\">Intel Xeon Sapphire Rapids</td>\n            <td tabindex=\"-1\">96</td>\n            <td tabindex=\"-1\">48</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7i.48xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">768.00</td>\n            <td tabindex=\"-1\">Intel Xeon Sapphire Rapids</td>\n            <td tabindex=\"-1\">192</td>\n            <td tabindex=\"-1\">96</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7i.metal-24xl</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">384.00</td>\n            <td tabindex=\"-1\">Intel Xeon Sapphire Rapids</td>\n            <td tabindex=\"-1\">96</td>\n            <td tabindex=\"-1\">48</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7i.metal-48xl</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">768.00</td>\n            <td tabindex=\"-1\">Intel Xeon Sapphire Rapids</td>\n            <td tabindex=\"-1\">192</td>\n            <td tabindex=\"-1\">96</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td colspan=\"8\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>M7i-flex</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7i-flex.large</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">8.00</td>\n            <td tabindex=\"-1\">Intel Xeon Sapphire Rapids</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7i-flex.xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">16.00</td>\n            <td tabindex=\"-1\">Intel Xeon Sapphire Rapids</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7i-flex.2xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">32.00</td>\n            <td tabindex=\"-1\">Intel Xeon Sapphire Rapids</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7i-flex.4xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">64.00</td>\n            <td tabindex=\"-1\">Intel Xeon Sapphire Rapids</td>\n            <td tabindex=\"-1\">16</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7i-flex.8xlarge</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">128.00</td>\n            <td tabindex=\"-1\">Intel Xeon Sapphire Rapids</td>\n            <td tabindex=\"-1\">32</td>\n            <td tabindex=\"-1\">16</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td colspan=\"8\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>Mac1</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">mac1.metal</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">32.00</td>\n            <td tabindex=\"-1\">Intel Core i7-8700B</td>\n            <td tabindex=\"-1\">12</td>\n            <td tabindex=\"-1\">6</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td colspan=\"8\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>Mac2</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">mac2.metal</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">16.00</td>\n            <td tabindex=\"-1\">Apple M1 chip with 8-core CPU</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td colspan=\"8\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>Mac2-m2</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">mac2-m2.metal</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">24.00</td>\n            <td tabindex=\"-1\">Apple M2 with 8‑core CPU</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td colspan=\"8\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>Mac2-m2pro</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">mac2-m2pro.metal</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">32.00</td>\n            <td tabindex=\"-1\">Apple M2 Pro with 12‑core CPU</td>\n            <td tabindex=\"-1\">12</td>\n            <td tabindex=\"-1\">12</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td colspan=\"8\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>T2</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t2.nano</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">0.50</td>\n            <td tabindex=\"-1\">Intel Xeon Family</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t2.micro</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">1.00</td>\n            <td tabindex=\"-1\">Intel Xeon Family</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t2.small</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">2.00</td>\n            <td tabindex=\"-1\">Intel Xeon Family</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t2.medium</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">4.00</td>\n            <td tabindex=\"-1\">Intel Broadwell E5-2686v4</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t2.large</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">8.00</td>\n            <td tabindex=\"-1\">Intel Broadwell E5-2686v4</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t2.xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">16.00</td>\n            <td tabindex=\"-1\">Intel Broadwell E5-2686v4</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t2.2xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">32.00</td>\n            <td tabindex=\"-1\">Intel Broadwell E5-2686v4</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td colspan=\"8\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>T3</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t3.nano</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">0.50</td>\n            <td tabindex=\"-1\">Intel Skylake P-8175</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t3.micro</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">1.00</td>\n            <td tabindex=\"-1\">Intel Skylake P-8175</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t3.small</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">2.00</td>\n            <td tabindex=\"-1\">Intel Skylake P-8175</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t3.medium</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">4.00</td>\n            <td tabindex=\"-1\">Intel Skylake P-8175</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t3.large</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">8.00</td>\n            <td tabindex=\"-1\">Intel Skylake P-8175</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t3.xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">16.00</td>\n            <td tabindex=\"-1\">Intel Skylake P-8175</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t3.2xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">32.00</td>\n            <td tabindex=\"-1\">Intel Skylake P-8175</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td colspan=\"8\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>T3a</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t3a.nano</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">0.50</td>\n            <td tabindex=\"-1\">AMD EPYC 7571</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t3a.micro</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">1.00</td>\n            <td tabindex=\"-1\">AMD EPYC 7571</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t3a.small</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">2.00</td>\n            <td tabindex=\"-1\">AMD EPYC 7571</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t3a.medium</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">4.00</td>\n            <td tabindex=\"-1\">AMD EPYC 7571</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t3a.large</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">8.00</td>\n            <td tabindex=\"-1\">AMD EPYC 7571</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t3a.xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">16.00</td>\n            <td tabindex=\"-1\">AMD EPYC 7571</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t3a.2xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">32.00</td>\n            <td tabindex=\"-1\">AMD EPYC 7571</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td colspan=\"8\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>T4g</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t4g.nano</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">0.50</td>\n            <td tabindex=\"-1\">AWS Graviton2 Processor</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t4g.micro</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">1.00</td>\n            <td tabindex=\"-1\">AWS Graviton2 Processor</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t4g.small</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">2.00</td>\n            <td tabindex=\"-1\">AWS Graviton2 Processor</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t4g.medium</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">4.00</td>\n            <td tabindex=\"-1\">AWS Graviton2 Processor</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t4g.large</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">8.00</td>\n            <td tabindex=\"-1\">AWS Graviton2 Processor</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t4g.xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">16.00</td>\n            <td tabindex=\"-1\">AWS Graviton2 Processor</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t4g.2xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">32.00</td>\n            <td tabindex=\"-1\">AWS Graviton2 Processor</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n\n    </table></div></div>\n\n    <h2 id=\"gp_network\">Network specifications</h2>\n\n    <div class=\"table-container\"><div class=\"table-contents\"><table id=\"w170aab9c13c13b3\"><thead>\n    <tr>\n        <th>Instance type</th>\n        <th>Baseline / Burst bandwidth (Gbps)</th>\n        <th>EFA</th>\n        <th>ENA</th>\n        <th>ENA Express</th>\n        <th>Network cards</th>\n        <th>Max. network interfaces</th>\n        <th>IP addresses per interface</th>\n        <th>IPv6</th>\n    </tr>\n    </thead>\n        <tr>\n            <td colspan=\"9\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>M5</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5.large <sup>1</sup></td>\n            <td tabindex=\"-1\">0.75 / 10.0</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">3</td>\n            <td tabindex=\"-1\">10</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5.xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">1.25 / 10.0</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5.2xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">2.5 / 10.0</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5.4xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">5.0 / 10.0</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">30</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5.8xlarge</td>\n            <td tabindex=\"-1\">10 Gigabit</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">30</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5.12xlarge</td>\n            <td tabindex=\"-1\">12 Gigabit</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">30</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5.16xlarge</td>\n            <td tabindex=\"-1\">20 Gigabit</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">50</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5.24xlarge</td>\n            <td tabindex=\"-1\">25 Gigabit</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">50</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5.metal</td>\n            <td tabindex=\"-1\">25 Gigabit</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">50</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td colspan=\"9\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>M5a</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5a.large <sup>1</sup></td>\n            <td tabindex=\"-1\">0.75 / 10.0</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">3</td>\n            <td tabindex=\"-1\">10</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5a.xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">1.25 / 10.0</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5a.2xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">2.5 / 10.0</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5a.4xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">5.0 / 10.0</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">30</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5a.8xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">7.5 / 10.0</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">30</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5a.12xlarge</td>\n            <td tabindex=\"-1\">10 Gigabit</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">30</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5a.16xlarge</td>\n            <td tabindex=\"-1\">12 Gigabit</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">50</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5a.24xlarge</td>\n            <td tabindex=\"-1\">20 Gigabit</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">50</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td colspan=\"9\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>M5ad</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5ad.large <sup>1</sup></td>\n            <td tabindex=\"-1\">0.75 / 10.0</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">3</td>\n            <td tabindex=\"-1\">10</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5ad.xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">1.25 / 10.0</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5ad.2xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">2.5 / 10.0</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5ad.4xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">5.0 / 10.0</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">30</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5ad.8xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">7.5 / 10.0</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">30</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5ad.12xlarge</td>\n            <td tabindex=\"-1\">10 Gigabit</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">30</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5ad.16xlarge</td>\n            <td tabindex=\"-1\">12 Gigabit</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">50</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5ad.24xlarge</td>\n            <td tabindex=\"-1\">20 Gigabit</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">50</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td colspan=\"9\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>M5d</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5d.large <sup>1</sup></td>\n            <td tabindex=\"-1\">0.75 / 10.0</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">3</td>\n            <td tabindex=\"-1\">10</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5d.xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">1.25 / 10.0</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5d.2xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">2.5 / 10.0</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5d.4xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">5.0 / 10.0</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">30</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5d.8xlarge</td>\n            <td tabindex=\"-1\">10 Gigabit</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">30</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5d.12xlarge</td>\n            <td tabindex=\"-1\">12 Gigabit</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">30</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5d.16xlarge</td>\n            <td tabindex=\"-1\">20 Gigabit</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">50</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5d.24xlarge</td>\n            <td tabindex=\"-1\">25 Gigabit</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">50</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5d.metal</td>\n            <td tabindex=\"-1\">25 Gigabit</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">50</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td colspan=\"9\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>M5dn</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5dn.large <sup>1</sup></td>\n            <td tabindex=\"-1\">2.1 / 25.0</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">3</td>\n            <td tabindex=\"-1\">10</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5dn.xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">4.1 / 25.0</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5dn.2xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">8.125 / 25.0</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5dn.4xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">16.25 / 25.0</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">30</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5dn.8xlarge</td>\n            <td tabindex=\"-1\">25 Gigabit</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">30</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5dn.12xlarge</td>\n            <td tabindex=\"-1\">50 Gigabit</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">30</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5dn.16xlarge</td>\n            <td tabindex=\"-1\">75 Gigabit</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">50</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5dn.24xlarge</td>\n            <td tabindex=\"-1\">100 Gigabit</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">50</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5dn.metal</td>\n            <td tabindex=\"-1\">100 Gigabit</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">50</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td colspan=\"9\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>M5n</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5n.large <sup>1</sup></td>\n            <td tabindex=\"-1\">2.1 / 25.0</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">3</td>\n            <td tabindex=\"-1\">10</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5n.xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">4.1 / 25.0</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5n.2xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">8.125 / 25.0</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5n.4xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">16.25 / 25.0</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">30</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5n.8xlarge</td>\n            <td tabindex=\"-1\">25 Gigabit</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">30</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5n.12xlarge</td>\n            <td tabindex=\"-1\">50 Gigabit</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">30</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5n.16xlarge</td>\n            <td tabindex=\"-1\">75 Gigabit</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">50</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5n.24xlarge</td>\n            <td tabindex=\"-1\">100 Gigabit</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">50</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5n.metal</td>\n            <td tabindex=\"-1\">100 Gigabit</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">50</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td colspan=\"9\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>M5zn</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5zn.large <sup>1</sup></td>\n            <td tabindex=\"-1\">3.0 / 25.0</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">3</td>\n            <td tabindex=\"-1\">10</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5zn.xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">5.0 / 25.0</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5zn.2xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">10.0 / 25.0</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5zn.3xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">15.0 / 25.0</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">30</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5zn.6xlarge</td>\n            <td tabindex=\"-1\">50 Gigabit</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">30</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5zn.12xlarge</td>\n            <td tabindex=\"-1\">100 Gigabit</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">50</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5zn.metal</td>\n            <td tabindex=\"-1\">100 Gigabit</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">50</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td colspan=\"9\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>M6a</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6a.large <sup>1</sup></td>\n            <td tabindex=\"-1\">0.781 / 12.5</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">3</td>\n            <td tabindex=\"-1\">10</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6a.xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">1.562 / 12.5</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6a.2xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">3.125 / 12.5</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6a.4xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">6.25 / 12.5</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">30</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6a.8xlarge</td>\n            <td tabindex=\"-1\">12.5 Gigabit</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">30</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6a.12xlarge</td>\n            <td tabindex=\"-1\">18.75 Gigabit</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">30</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6a.16xlarge</td>\n            <td tabindex=\"-1\">25 Gigabit</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">50</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6a.24xlarge</td>\n            <td tabindex=\"-1\">37.5 Gigabit</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">50</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6a.32xlarge</td>\n            <td tabindex=\"-1\">50 Gigabit</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">50</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6a.48xlarge</td>\n            <td tabindex=\"-1\">50 Gigabit</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">50</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6a.metal</td>\n            <td tabindex=\"-1\">50 Gigabit</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">50</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td colspan=\"9\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>M6g</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6g.medium <sup>1</sup></td>\n            <td tabindex=\"-1\">0.5 / 10.0</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6g.large <sup>1</sup></td>\n            <td tabindex=\"-1\">0.75 / 10.0</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">3</td>\n            <td tabindex=\"-1\">10</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6g.xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">1.25 / 10.0</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6g.2xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">2.5 / 10.0</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6g.4xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">5.0 / 10.0</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">30</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6g.8xlarge</td>\n            <td tabindex=\"-1\">12 Gigabit</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">30</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6g.12xlarge</td>\n            <td tabindex=\"-1\">20 Gigabit</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">30</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6g.16xlarge</td>\n            <td tabindex=\"-1\">25 Gigabit</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">50</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6g.metal</td>\n            <td tabindex=\"-1\">25 Gigabit</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">50</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td colspan=\"9\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>M6gd</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6gd.medium <sup>1</sup></td>\n            <td tabindex=\"-1\">0.5 / 10.0</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6gd.large <sup>1</sup></td>\n            <td tabindex=\"-1\">0.75 / 10.0</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">3</td>\n            <td tabindex=\"-1\">10</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6gd.xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">1.25 / 10.0</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6gd.2xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">2.5 / 10.0</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6gd.4xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">5.0 / 10.0</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">30</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6gd.8xlarge</td>\n            <td tabindex=\"-1\">12 Gigabit</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">30</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6gd.12xlarge</td>\n            <td tabindex=\"-1\">20 Gigabit</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">30</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6gd.16xlarge</td>\n            <td tabindex=\"-1\">25 Gigabit</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">50</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6gd.metal</td>\n            <td tabindex=\"-1\">25 Gigabit</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">50</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td colspan=\"9\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>M6i</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6i.large <sup>1</sup></td>\n            <td tabindex=\"-1\">0.781 / 12.5</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">3</td>\n            <td tabindex=\"-1\">10</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6i.xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">1.562 / 12.5</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6i.2xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">3.125 / 12.5</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6i.4xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">6.25 / 12.5</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">30</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6i.8xlarge</td>\n            <td tabindex=\"-1\">12.5 Gigabit</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">30</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6i.12xlarge</td>\n            <td tabindex=\"-1\">18.75 Gigabit</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">30</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6i.16xlarge</td>\n            <td tabindex=\"-1\">25 Gigabit</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">50</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6i.24xlarge</td>\n            <td tabindex=\"-1\">37.5 Gigabit</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">50</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6i.32xlarge</td>\n            <td tabindex=\"-1\">50 Gigabit</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">50</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6i.metal</td>\n            <td tabindex=\"-1\">50 Gigabit</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">50</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td colspan=\"9\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>M6id</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6id.large <sup>1</sup></td>\n            <td tabindex=\"-1\">0.781 / 12.5</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">3</td>\n            <td tabindex=\"-1\">10</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6id.xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">1.562 / 12.5</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6id.2xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">3.125 / 12.5</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6id.4xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">6.25 / 12.5</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">30</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6id.8xlarge</td>\n            <td tabindex=\"-1\">12.5 Gigabit</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">30</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6id.12xlarge</td>\n            <td tabindex=\"-1\">18.75 Gigabit</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">30</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6id.16xlarge</td>\n            <td tabindex=\"-1\">25 Gigabit</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">50</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6id.24xlarge</td>\n            <td tabindex=\"-1\">37.5 Gigabit</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">50</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6id.32xlarge</td>\n            <td tabindex=\"-1\">50 Gigabit</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">50</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6id.metal</td>\n            <td tabindex=\"-1\">50 Gigabit</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">50</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td colspan=\"9\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>M6idn</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6idn.large <sup>1</sup></td>\n            <td tabindex=\"-1\">3.125 / 25.0</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">3</td>\n            <td tabindex=\"-1\">10</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6idn.xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">6.25 / 30.0</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6idn.2xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">12.5 / 40.0</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6idn.4xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">25.0 / 50.0</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">30</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6idn.8xlarge</td>\n            <td tabindex=\"-1\">50 Gigabit</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">30</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6idn.12xlarge</td>\n            <td tabindex=\"-1\">75 Gigabit</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">30</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6idn.16xlarge</td>\n            <td tabindex=\"-1\">100 Gigabit</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">50</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6idn.24xlarge</td>\n            <td tabindex=\"-1\">150 Gigabit</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">50</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6idn.32xlarge</td>\n            <td tabindex=\"-1\">200 Gigabit</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">16</td>\n            <td tabindex=\"-1\">50</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6idn.metal</td>\n            <td tabindex=\"-1\">200 Gigabit</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">16</td>\n            <td tabindex=\"-1\">50</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td colspan=\"9\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>M6in</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6in.large <sup>1</sup></td>\n            <td tabindex=\"-1\">3.125 / 25.0</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">3</td>\n            <td tabindex=\"-1\">10</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6in.xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">6.25 / 30.0</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6in.2xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">12.5 / 40.0</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6in.4xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">25.0 / 50.0</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">30</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6in.8xlarge</td>\n            <td tabindex=\"-1\">50 Gigabit</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">30</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6in.12xlarge</td>\n            <td tabindex=\"-1\">75 Gigabit</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">30</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6in.16xlarge</td>\n            <td tabindex=\"-1\">100 Gigabit</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">50</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6in.24xlarge</td>\n            <td tabindex=\"-1\">150 Gigabit</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">50</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6in.32xlarge</td>\n            <td tabindex=\"-1\">200 Gigabit</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">16</td>\n            <td tabindex=\"-1\">50</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6in.metal</td>\n            <td tabindex=\"-1\">200 Gigabit</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">16</td>\n            <td tabindex=\"-1\">50</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td colspan=\"9\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>M7a</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7a.medium <sup>1</sup></td>\n            <td tabindex=\"-1\">0.39 / 12.5</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7a.large <sup>1</sup></td>\n            <td tabindex=\"-1\">0.781 / 12.5</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">3</td>\n            <td tabindex=\"-1\">10</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7a.xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">1.562 / 12.5</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7a.2xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">3.125 / 12.5</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7a.4xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">6.25 / 12.5</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">30</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7a.8xlarge</td>\n            <td tabindex=\"-1\">12.5 Gigabit</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">30</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7a.12xlarge</td>\n            <td tabindex=\"-1\">18.75 Gigabit</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">30</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7a.16xlarge</td>\n            <td tabindex=\"-1\">25 Gigabit</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">50</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7a.24xlarge</td>\n            <td tabindex=\"-1\">37.5 Gigabit</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">50</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7a.32xlarge</td>\n            <td tabindex=\"-1\">50 Gigabit</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">50</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7a.48xlarge</td>\n            <td tabindex=\"-1\">50 Gigabit</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">50</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7a.metal-48xl</td>\n            <td tabindex=\"-1\">50 Gigabit</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">50</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td colspan=\"9\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>M7g</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7g.medium <sup>1</sup></td>\n            <td tabindex=\"-1\">0.52 / 12.5</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7g.large <sup>1</sup></td>\n            <td tabindex=\"-1\">0.937 / 12.5</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">3</td>\n            <td tabindex=\"-1\">10</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7g.xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">1.876 / 12.5</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7g.2xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">3.75 / 15.0</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7g.4xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">7.5 / 15.0</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">30</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7g.8xlarge</td>\n            <td tabindex=\"-1\">15 Gigabit</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">30</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7g.12xlarge</td>\n            <td tabindex=\"-1\">22.5 Gigabit</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">30</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7g.16xlarge</td>\n            <td tabindex=\"-1\">30 Gigabit</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">50</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7g.metal</td>\n            <td tabindex=\"-1\">30 Gigabit</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">50</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td colspan=\"9\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>M7gd</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7gd.medium <sup>1</sup></td>\n            <td tabindex=\"-1\">0.52 / 12.5</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7gd.large <sup>1</sup></td>\n            <td tabindex=\"-1\">0.937 / 12.5</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">3</td>\n            <td tabindex=\"-1\">10</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7gd.xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">1.876 / 12.5</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7gd.2xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">3.75 / 15.0</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7gd.4xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">7.5 / 15.0</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">30</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7gd.8xlarge</td>\n            <td tabindex=\"-1\">15 Gigabit</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">30</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7gd.12xlarge</td>\n            <td tabindex=\"-1\">22.5 Gigabit</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">30</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7gd.16xlarge</td>\n            <td tabindex=\"-1\">30 Gigabit</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">50</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7gd.metal</td>\n            <td tabindex=\"-1\">30 Gigabit</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">50</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td colspan=\"9\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>M7i</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7i.large <sup>1</sup></td>\n            <td tabindex=\"-1\">0.781 / 12.5</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">3</td>\n            <td tabindex=\"-1\">10</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7i.xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">1.562 / 12.5</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7i.2xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">3.125 / 12.5</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7i.4xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">6.25 / 12.5</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">30</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7i.8xlarge</td>\n            <td tabindex=\"-1\">12.5 Gigabit</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">30</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7i.12xlarge</td>\n            <td tabindex=\"-1\">18.75 Gigabit</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">30</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7i.16xlarge</td>\n            <td tabindex=\"-1\">25 Gigabit</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">50</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7i.24xlarge</td>\n            <td tabindex=\"-1\">37.5 Gigabit</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">50</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7i.48xlarge</td>\n            <td tabindex=\"-1\">50 Gigabit</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">50</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7i.metal-24xl</td>\n            <td tabindex=\"-1\">37.5 Gigabit</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">50</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7i.metal-48xl</td>\n            <td tabindex=\"-1\">50 Gigabit</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">50</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td colspan=\"9\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>M7i-flex</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7i-flex.large <sup>1</sup></td>\n            <td tabindex=\"-1\">0.39 / 12.5</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">3</td>\n            <td tabindex=\"-1\">10</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7i-flex.xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">0.781 / 12.5</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7i-flex.2xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">1.562 / 12.5</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7i-flex.4xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">3.125 / 12.5</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">30</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7i-flex.8xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">6.25 / 12.5</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">30</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td colspan=\"9\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>Mac1</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">mac1.metal</td>\n            <td tabindex=\"-1\">25 Gigabit</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">30</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td colspan=\"9\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>Mac2</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">mac2.metal</td>\n            <td tabindex=\"-1\">10 Gigabit</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">30</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td colspan=\"9\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>Mac2-m2</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">mac2-m2.metal</td>\n            <td tabindex=\"-1\">10 Gigabit</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">30</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td colspan=\"9\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>Mac2-m2pro</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">mac2-m2pro.metal</td>\n            <td tabindex=\"-1\">10 Gigabit</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">8</td>\n            <td tabindex=\"-1\">30</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td colspan=\"9\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>T2</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t2.nano</td>\n            <td tabindex=\"-1\">Low to Moderate</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t2.micro</td>\n            <td tabindex=\"-1\">Low to Moderate</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t2.small</td>\n            <td tabindex=\"-1\">Low to Moderate</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">3</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t2.medium</td>\n            <td tabindex=\"-1\">Low to Moderate</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">3</td>\n            <td tabindex=\"-1\">6</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t2.large</td>\n            <td tabindex=\"-1\">Low to Moderate</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">3</td>\n            <td tabindex=\"-1\">12</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t2.xlarge</td>\n            <td tabindex=\"-1\">Moderate</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">3</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t2.2xlarge</td>\n            <td tabindex=\"-1\">Moderate</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">3</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td colspan=\"9\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>T3</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t3.nano <sup>1</sup></td>\n            <td tabindex=\"-1\">0.032 / 5.0</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t3.micro <sup>1</sup></td>\n            <td tabindex=\"-1\">0.064 / 5.0</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t3.small <sup>1</sup></td>\n            <td tabindex=\"-1\">0.128 / 5.0</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">3</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t3.medium <sup>1</sup></td>\n            <td tabindex=\"-1\">0.256 / 5.0</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">3</td>\n            <td tabindex=\"-1\">6</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t3.large <sup>1</sup></td>\n            <td tabindex=\"-1\">0.512 / 5.0</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">3</td>\n            <td tabindex=\"-1\">12</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t3.xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">1.024 / 5.0</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t3.2xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">2.048 / 5.0</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td colspan=\"9\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>T3a</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t3a.nano <sup>1</sup></td>\n            <td tabindex=\"-1\">0.032 / 5.0</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t3a.micro <sup>1</sup></td>\n            <td tabindex=\"-1\">0.064 / 5.0</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t3a.small <sup>1</sup></td>\n            <td tabindex=\"-1\">0.128 / 5.0</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t3a.medium <sup>1</sup></td>\n            <td tabindex=\"-1\">0.256 / 5.0</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">3</td>\n            <td tabindex=\"-1\">6</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t3a.large <sup>1</sup></td>\n            <td tabindex=\"-1\">0.512 / 5.0</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">3</td>\n            <td tabindex=\"-1\">12</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t3a.xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">1.024 / 5.0</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t3a.2xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">2.048 / 5.0</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td colspan=\"9\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>T4g</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t4g.nano <sup>1</sup></td>\n            <td tabindex=\"-1\">0.032 / 5.0</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t4g.micro <sup>1</sup></td>\n            <td tabindex=\"-1\">0.064 / 5.0</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">2</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t4g.small <sup>1</sup></td>\n            <td tabindex=\"-1\">0.128 / 5.0</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">3</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t4g.medium <sup>1</sup></td>\n            <td tabindex=\"-1\">0.256 / 5.0</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">3</td>\n            <td tabindex=\"-1\">6</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t4g.large <sup>1</sup></td>\n            <td tabindex=\"-1\">0.512 / 5.0</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">3</td>\n            <td tabindex=\"-1\">12</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t4g.xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">1.024 / 5.0</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t4g.2xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">2.048 / 5.0</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">1</td>\n            <td tabindex=\"-1\">4</td>\n            <td tabindex=\"-1\">15</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n\n    </table></div></div>\n    <div class=\"awsdocs-note\"><div class=\"awsdocs-note-title\"><awsui-icon name=\"status-info\" variant=\"link\"></awsui-icon><h6>Note</h6></div><div class=\"awsdocs-note-text\"><p><sup>1</sup> These instances have a baseline bandwidth and can\n        use a network I/O credit mechanism to burst beyond their baseline bandwidth on a best effort basis.\n        Other instances types can sustain their maximum performance indefinitely. For more information,\n        see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-network-bandwidth.html\">\n            instance network bandwidth</a>.</p><p>For <code class=\"code\">32xlarge</code> and <code class=\"code\">metal</code> instance types that\n        support 200 Gbps, at least 2 ENIs, each attached to a different network card, are required on the instance to achieve\n        200 Gbps throughput. Each ENI attached to a network card can achieve a max of 170 Gbps.</p></div></div>\n\n    <h2 id=\"gp_storage-ebs\">Amazon EBS specifications</h2>\n\n    <div class=\"table-container\"><div class=\"table-contents\"><table id=\"w170aab9c13c15b3\"><thead>\n    <tr>\n        <th>Instance type</th>\n        <th>Baseline / Maximum bandwidth (Mbps)</th>\n        <th>Baseline / Maximum throughput (MB/s, 128 KiB I/O)</th>\n        <th>Baseline / Maximum IOPS (16 KiB I/O)</th>\n        <th>NVMe</th>\n        <th>EBS optimization <sup>2</sup></th>\n    </tr>\n    </thead>\n        <tr>\n            <td colspan=\"6\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>M5</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5.large <sup>1</sup></td>\n            <td tabindex=\"-1\">650.00 / 4750.00</td>\n            <td tabindex=\"-1\">81.25 / 593.75</td>\n            <td tabindex=\"-1\">3600.00 / 18750.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5.xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">1150.00 / 4750.00</td>\n            <td tabindex=\"-1\">143.75 / 593.75</td>\n            <td tabindex=\"-1\">6000.00 / 18750.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5.2xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">2300.00 / 4750.00</td>\n            <td tabindex=\"-1\">287.50 / 593.75</td>\n            <td tabindex=\"-1\">12000.00 / 18750.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5.4xlarge</td>\n            <td tabindex=\"-1\">4750.00</td>\n            <td tabindex=\"-1\">593.75</td>\n            <td tabindex=\"-1\">18750.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5.8xlarge</td>\n            <td tabindex=\"-1\">6800.00</td>\n            <td tabindex=\"-1\">850.00</td>\n            <td tabindex=\"-1\">30000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5.12xlarge</td>\n            <td tabindex=\"-1\">9500.00</td>\n            <td tabindex=\"-1\">1187.50</td>\n            <td tabindex=\"-1\">40000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5.16xlarge</td>\n            <td tabindex=\"-1\">13600.00</td>\n            <td tabindex=\"-1\">1700.00</td>\n            <td tabindex=\"-1\">60000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5.24xlarge</td>\n            <td tabindex=\"-1\">19000.00</td>\n            <td tabindex=\"-1\">2375.00</td>\n            <td tabindex=\"-1\">80000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5.metal</td>\n            <td tabindex=\"-1\">19000.00</td>\n            <td tabindex=\"-1\">2375.00</td>\n            <td tabindex=\"-1\">80000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td colspan=\"6\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>M5a</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5a.large <sup>1</sup></td>\n            <td tabindex=\"-1\">650.00 / 2880.00</td>\n            <td tabindex=\"-1\">81.25 / 360.00</td>\n            <td tabindex=\"-1\">3600.00 / 16000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5a.xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">1085.00 / 2880.00</td>\n            <td tabindex=\"-1\">135.62 / 360.00</td>\n            <td tabindex=\"-1\">6000.00 / 16000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5a.2xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">1580.00 / 2880.00</td>\n            <td tabindex=\"-1\">197.50 / 360.00</td>\n            <td tabindex=\"-1\">8333.00 / 16000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5a.4xlarge</td>\n            <td tabindex=\"-1\">2880.00</td>\n            <td tabindex=\"-1\">360.00</td>\n            <td tabindex=\"-1\">16000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5a.8xlarge</td>\n            <td tabindex=\"-1\">4750.00</td>\n            <td tabindex=\"-1\">593.75</td>\n            <td tabindex=\"-1\">20000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5a.12xlarge</td>\n            <td tabindex=\"-1\">6780.00</td>\n            <td tabindex=\"-1\">847.50</td>\n            <td tabindex=\"-1\">30000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5a.16xlarge</td>\n            <td tabindex=\"-1\">9500.00</td>\n            <td tabindex=\"-1\">1187.50</td>\n            <td tabindex=\"-1\">40000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5a.24xlarge</td>\n            <td tabindex=\"-1\">13750.00</td>\n            <td tabindex=\"-1\">1718.75</td>\n            <td tabindex=\"-1\">60000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td colspan=\"6\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>M5ad</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5ad.large <sup>1</sup></td>\n            <td tabindex=\"-1\">650.00 / 2880.00</td>\n            <td tabindex=\"-1\">81.25 / 360.00</td>\n            <td tabindex=\"-1\">3600.00 / 16000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5ad.xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">1085.00 / 2880.00</td>\n            <td tabindex=\"-1\">135.62 / 360.00</td>\n            <td tabindex=\"-1\">6000.00 / 16000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5ad.2xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">1580.00 / 2880.00</td>\n            <td tabindex=\"-1\">197.50 / 360.00</td>\n            <td tabindex=\"-1\">8333.00 / 16000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5ad.4xlarge</td>\n            <td tabindex=\"-1\">2880.00</td>\n            <td tabindex=\"-1\">360.00</td>\n            <td tabindex=\"-1\">16000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5ad.8xlarge</td>\n            <td tabindex=\"-1\">4750.00</td>\n            <td tabindex=\"-1\">593.75</td>\n            <td tabindex=\"-1\">20000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5ad.12xlarge</td>\n            <td tabindex=\"-1\">6780.00</td>\n            <td tabindex=\"-1\">847.50</td>\n            <td tabindex=\"-1\">30000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5ad.16xlarge</td>\n            <td tabindex=\"-1\">9500.00</td>\n            <td tabindex=\"-1\">1187.50</td>\n            <td tabindex=\"-1\">40000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5ad.24xlarge</td>\n            <td tabindex=\"-1\">13750.00</td>\n            <td tabindex=\"-1\">1718.75</td>\n            <td tabindex=\"-1\">60000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td colspan=\"6\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>M5d</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5d.large <sup>1</sup></td>\n            <td tabindex=\"-1\">650.00 / 4750.00</td>\n            <td tabindex=\"-1\">81.25 / 593.75</td>\n            <td tabindex=\"-1\">3600.00 / 18750.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5d.xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">1150.00 / 4750.00</td>\n            <td tabindex=\"-1\">143.75 / 593.75</td>\n            <td tabindex=\"-1\">6000.00 / 18750.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5d.2xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">2300.00 / 4750.00</td>\n            <td tabindex=\"-1\">287.50 / 593.75</td>\n            <td tabindex=\"-1\">12000.00 / 18750.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5d.4xlarge</td>\n            <td tabindex=\"-1\">4750.00</td>\n            <td tabindex=\"-1\">593.75</td>\n            <td tabindex=\"-1\">18750.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5d.8xlarge</td>\n            <td tabindex=\"-1\">6800.00</td>\n            <td tabindex=\"-1\">850.00</td>\n            <td tabindex=\"-1\">30000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5d.12xlarge</td>\n            <td tabindex=\"-1\">9500.00</td>\n            <td tabindex=\"-1\">1187.50</td>\n            <td tabindex=\"-1\">40000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5d.16xlarge</td>\n            <td tabindex=\"-1\">13600.00</td>\n            <td tabindex=\"-1\">1700.00</td>\n            <td tabindex=\"-1\">60000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5d.24xlarge</td>\n            <td tabindex=\"-1\">19000.00</td>\n            <td tabindex=\"-1\">2375.00</td>\n            <td tabindex=\"-1\">80000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5d.metal</td>\n            <td tabindex=\"-1\">19000.00</td>\n            <td tabindex=\"-1\">2375.00</td>\n            <td tabindex=\"-1\">80000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td colspan=\"6\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>M5dn</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5dn.large <sup>1</sup></td>\n            <td tabindex=\"-1\">650.00 / 4750.00</td>\n            <td tabindex=\"-1\">81.25 / 593.75</td>\n            <td tabindex=\"-1\">3600.00 / 18750.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5dn.xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">1150.00 / 4750.00</td>\n            <td tabindex=\"-1\">143.75 / 593.75</td>\n            <td tabindex=\"-1\">6000.00 / 18750.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5dn.2xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">2300.00 / 4750.00</td>\n            <td tabindex=\"-1\">287.50 / 593.75</td>\n            <td tabindex=\"-1\">12000.00 / 18750.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5dn.4xlarge</td>\n            <td tabindex=\"-1\">4750.00</td>\n            <td tabindex=\"-1\">593.75</td>\n            <td tabindex=\"-1\">18750.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5dn.8xlarge</td>\n            <td tabindex=\"-1\">6800.00</td>\n            <td tabindex=\"-1\">850.00</td>\n            <td tabindex=\"-1\">30000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5dn.12xlarge</td>\n            <td tabindex=\"-1\">9500.00</td>\n            <td tabindex=\"-1\">1187.50</td>\n            <td tabindex=\"-1\">40000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5dn.16xlarge</td>\n            <td tabindex=\"-1\">13600.00</td>\n            <td tabindex=\"-1\">1700.00</td>\n            <td tabindex=\"-1\">60000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5dn.24xlarge</td>\n            <td tabindex=\"-1\">19000.00</td>\n            <td tabindex=\"-1\">2375.00</td>\n            <td tabindex=\"-1\">80000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5dn.metal</td>\n            <td tabindex=\"-1\">19000.00</td>\n            <td tabindex=\"-1\">2375.00</td>\n            <td tabindex=\"-1\">80000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td colspan=\"6\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>M5n</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5n.large <sup>1</sup></td>\n            <td tabindex=\"-1\">650.00 / 4750.00</td>\n            <td tabindex=\"-1\">81.25 / 593.75</td>\n            <td tabindex=\"-1\">3600.00 / 18750.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5n.xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">1150.00 / 4750.00</td>\n            <td tabindex=\"-1\">143.75 / 593.75</td>\n            <td tabindex=\"-1\">6000.00 / 18750.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5n.2xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">2300.00 / 4750.00</td>\n            <td tabindex=\"-1\">287.50 / 593.75</td>\n            <td tabindex=\"-1\">12000.00 / 18750.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5n.4xlarge</td>\n            <td tabindex=\"-1\">4750.00</td>\n            <td tabindex=\"-1\">593.75</td>\n            <td tabindex=\"-1\">18750.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5n.8xlarge</td>\n            <td tabindex=\"-1\">6800.00</td>\n            <td tabindex=\"-1\">850.00</td>\n            <td tabindex=\"-1\">30000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5n.12xlarge</td>\n            <td tabindex=\"-1\">9500.00</td>\n            <td tabindex=\"-1\">1187.50</td>\n            <td tabindex=\"-1\">40000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5n.16xlarge</td>\n            <td tabindex=\"-1\">13600.00</td>\n            <td tabindex=\"-1\">1700.00</td>\n            <td tabindex=\"-1\">60000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5n.24xlarge</td>\n            <td tabindex=\"-1\">19000.00</td>\n            <td tabindex=\"-1\">2375.00</td>\n            <td tabindex=\"-1\">80000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5n.metal</td>\n            <td tabindex=\"-1\">19000.00</td>\n            <td tabindex=\"-1\">2375.00</td>\n            <td tabindex=\"-1\">80000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td colspan=\"6\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>M5zn</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5zn.large <sup>1</sup></td>\n            <td tabindex=\"-1\">800.00 / 3170.00</td>\n            <td tabindex=\"-1\">100.00 / 396.25</td>\n            <td tabindex=\"-1\">3333.00 / 13333.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5zn.xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">1564.00 / 3170.00</td>\n            <td tabindex=\"-1\">195.50 / 396.25</td>\n            <td tabindex=\"-1\">6667.00 / 13333.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5zn.2xlarge</td>\n            <td tabindex=\"-1\">3170.00</td>\n            <td tabindex=\"-1\">396.25</td>\n            <td tabindex=\"-1\">13333.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5zn.3xlarge</td>\n            <td tabindex=\"-1\">4750.00</td>\n            <td tabindex=\"-1\">593.75</td>\n            <td tabindex=\"-1\">20000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5zn.6xlarge</td>\n            <td tabindex=\"-1\">9500.00</td>\n            <td tabindex=\"-1\">1187.50</td>\n            <td tabindex=\"-1\">40000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5zn.12xlarge</td>\n            <td tabindex=\"-1\">19000.00</td>\n            <td tabindex=\"-1\">2375.00</td>\n            <td tabindex=\"-1\">80000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5zn.metal</td>\n            <td tabindex=\"-1\">19000.00</td>\n            <td tabindex=\"-1\">2375.00</td>\n            <td tabindex=\"-1\">80000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td colspan=\"6\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>M6a</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6a.large <sup>1</sup></td>\n            <td tabindex=\"-1\">650.00 / 10000.00</td>\n            <td tabindex=\"-1\">81.25 / 1250.00</td>\n            <td tabindex=\"-1\">3600.00 / 40000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6a.xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">1250.00 / 10000.00</td>\n            <td tabindex=\"-1\">156.25 / 1250.00</td>\n            <td tabindex=\"-1\">6000.00 / 40000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6a.2xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">2500.00 / 10000.00</td>\n            <td tabindex=\"-1\">312.50 / 1250.00</td>\n            <td tabindex=\"-1\">12000.00 / 40000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6a.4xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">5000.00 / 10000.00</td>\n            <td tabindex=\"-1\">625.00 / 1250.00</td>\n            <td tabindex=\"-1\">20000.00 / 40000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6a.8xlarge</td>\n            <td tabindex=\"-1\">10000.00</td>\n            <td tabindex=\"-1\">1250.00</td>\n            <td tabindex=\"-1\">40000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6a.12xlarge</td>\n            <td tabindex=\"-1\">15000.00</td>\n            <td tabindex=\"-1\">1875.00</td>\n            <td tabindex=\"-1\">60000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6a.16xlarge</td>\n            <td tabindex=\"-1\">20000.00</td>\n            <td tabindex=\"-1\">2500.00</td>\n            <td tabindex=\"-1\">80000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6a.24xlarge</td>\n            <td tabindex=\"-1\">30000.00</td>\n            <td tabindex=\"-1\">3750.00</td>\n            <td tabindex=\"-1\">120000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6a.32xlarge</td>\n            <td tabindex=\"-1\">40000.00</td>\n            <td tabindex=\"-1\">5000.00</td>\n            <td tabindex=\"-1\">160000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6a.48xlarge</td>\n            <td tabindex=\"-1\">40000.00</td>\n            <td tabindex=\"-1\">5000.00</td>\n            <td tabindex=\"-1\">240000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6a.metal</td>\n            <td tabindex=\"-1\">40000.00</td>\n            <td tabindex=\"-1\">5000.00</td>\n            <td tabindex=\"-1\">240000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td colspan=\"6\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>M6g</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6g.medium <sup>1</sup></td>\n            <td tabindex=\"-1\">315.00 / 4750.00</td>\n            <td tabindex=\"-1\">39.38 / 593.75</td>\n            <td tabindex=\"-1\">2500.00 / 20000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6g.large <sup>1</sup></td>\n            <td tabindex=\"-1\">630.00 / 4750.00</td>\n            <td tabindex=\"-1\">78.75 / 593.75</td>\n            <td tabindex=\"-1\">3600.00 / 20000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6g.xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">1188.00 / 4750.00</td>\n            <td tabindex=\"-1\">148.50 / 593.75</td>\n            <td tabindex=\"-1\">6000.00 / 20000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6g.2xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">2375.00 / 4750.00</td>\n            <td tabindex=\"-1\">296.88 / 593.75</td>\n            <td tabindex=\"-1\">12000.00 / 20000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6g.4xlarge</td>\n            <td tabindex=\"-1\">4750.00</td>\n            <td tabindex=\"-1\">593.75</td>\n            <td tabindex=\"-1\">20000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6g.8xlarge</td>\n            <td tabindex=\"-1\">9500.00</td>\n            <td tabindex=\"-1\">1187.50</td>\n            <td tabindex=\"-1\">40000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6g.12xlarge</td>\n            <td tabindex=\"-1\">14250.00</td>\n            <td tabindex=\"-1\">1781.25</td>\n            <td tabindex=\"-1\">50000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6g.16xlarge</td>\n            <td tabindex=\"-1\">19000.00</td>\n            <td tabindex=\"-1\">2375.00</td>\n            <td tabindex=\"-1\">80000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6g.metal</td>\n            <td tabindex=\"-1\">19000.00</td>\n            <td tabindex=\"-1\">2375.00</td>\n            <td tabindex=\"-1\">80000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td colspan=\"6\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>M6gd</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6gd.medium <sup>1</sup></td>\n            <td tabindex=\"-1\">315.00 / 4750.00</td>\n            <td tabindex=\"-1\">39.38 / 593.75</td>\n            <td tabindex=\"-1\">2500.00 / 20000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6gd.large <sup>1</sup></td>\n            <td tabindex=\"-1\">630.00 / 4750.00</td>\n            <td tabindex=\"-1\">78.75 / 593.75</td>\n            <td tabindex=\"-1\">3600.00 / 20000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6gd.xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">1188.00 / 4750.00</td>\n            <td tabindex=\"-1\">148.50 / 593.75</td>\n            <td tabindex=\"-1\">6000.00 / 20000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6gd.2xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">2375.00 / 4750.00</td>\n            <td tabindex=\"-1\">296.88 / 593.75</td>\n            <td tabindex=\"-1\">12000.00 / 20000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6gd.4xlarge</td>\n            <td tabindex=\"-1\">4750.00</td>\n            <td tabindex=\"-1\">593.75</td>\n            <td tabindex=\"-1\">20000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6gd.8xlarge</td>\n            <td tabindex=\"-1\">9500.00</td>\n            <td tabindex=\"-1\">1187.50</td>\n            <td tabindex=\"-1\">40000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6gd.12xlarge</td>\n            <td tabindex=\"-1\">14250.00</td>\n            <td tabindex=\"-1\">1781.25</td>\n            <td tabindex=\"-1\">50000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6gd.16xlarge</td>\n            <td tabindex=\"-1\">19000.00</td>\n            <td tabindex=\"-1\">2375.00</td>\n            <td tabindex=\"-1\">80000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6gd.metal</td>\n            <td tabindex=\"-1\">19000.00</td>\n            <td tabindex=\"-1\">2375.00</td>\n            <td tabindex=\"-1\">80000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td colspan=\"6\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>M6i</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6i.large <sup>1</sup></td>\n            <td tabindex=\"-1\">650.00 / 10000.00</td>\n            <td tabindex=\"-1\">81.25 / 1250.00</td>\n            <td tabindex=\"-1\">3600.00 / 40000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6i.xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">1250.00 / 10000.00</td>\n            <td tabindex=\"-1\">156.25 / 1250.00</td>\n            <td tabindex=\"-1\">6000.00 / 40000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6i.2xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">2500.00 / 10000.00</td>\n            <td tabindex=\"-1\">312.50 / 1250.00</td>\n            <td tabindex=\"-1\">12000.00 / 40000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6i.4xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">5000.00 / 10000.00</td>\n            <td tabindex=\"-1\">625.00 / 1250.00</td>\n            <td tabindex=\"-1\">20000.00 / 40000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6i.8xlarge</td>\n            <td tabindex=\"-1\">10000.00</td>\n            <td tabindex=\"-1\">1250.00</td>\n            <td tabindex=\"-1\">40000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6i.12xlarge</td>\n            <td tabindex=\"-1\">15000.00</td>\n            <td tabindex=\"-1\">1875.00</td>\n            <td tabindex=\"-1\">60000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6i.16xlarge</td>\n            <td tabindex=\"-1\">20000.00</td>\n            <td tabindex=\"-1\">2500.00</td>\n            <td tabindex=\"-1\">80000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6i.24xlarge</td>\n            <td tabindex=\"-1\">30000.00</td>\n            <td tabindex=\"-1\">3750.00</td>\n            <td tabindex=\"-1\">120000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6i.32xlarge</td>\n            <td tabindex=\"-1\">40000.00</td>\n            <td tabindex=\"-1\">5000.00</td>\n            <td tabindex=\"-1\">160000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6i.metal</td>\n            <td tabindex=\"-1\">40000.00</td>\n            <td tabindex=\"-1\">5000.00</td>\n            <td tabindex=\"-1\">160000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td colspan=\"6\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>M6id</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6id.large <sup>1</sup></td>\n            <td tabindex=\"-1\">650.00 / 10000.00</td>\n            <td tabindex=\"-1\">81.25 / 1250.00</td>\n            <td tabindex=\"-1\">3600.00 / 40000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6id.xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">1250.00 / 10000.00</td>\n            <td tabindex=\"-1\">156.25 / 1250.00</td>\n            <td tabindex=\"-1\">6000.00 / 40000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6id.2xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">2500.00 / 10000.00</td>\n            <td tabindex=\"-1\">312.50 / 1250.00</td>\n            <td tabindex=\"-1\">12000.00 / 40000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6id.4xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">5000.00 / 10000.00</td>\n            <td tabindex=\"-1\">625.00 / 1250.00</td>\n            <td tabindex=\"-1\">20000.00 / 40000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6id.8xlarge</td>\n            <td tabindex=\"-1\">10000.00</td>\n            <td tabindex=\"-1\">1250.00</td>\n            <td tabindex=\"-1\">40000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6id.12xlarge</td>\n            <td tabindex=\"-1\">15000.00</td>\n            <td tabindex=\"-1\">1875.00</td>\n            <td tabindex=\"-1\">60000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6id.16xlarge</td>\n            <td tabindex=\"-1\">20000.00</td>\n            <td tabindex=\"-1\">2500.00</td>\n            <td tabindex=\"-1\">80000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6id.24xlarge</td>\n            <td tabindex=\"-1\">30000.00</td>\n            <td tabindex=\"-1\">3750.00</td>\n            <td tabindex=\"-1\">120000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6id.32xlarge</td>\n            <td tabindex=\"-1\">40000.00</td>\n            <td tabindex=\"-1\">5000.00</td>\n            <td tabindex=\"-1\">160000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6id.metal</td>\n            <td tabindex=\"-1\">40000.00</td>\n            <td tabindex=\"-1\">5000.00</td>\n            <td tabindex=\"-1\">160000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td colspan=\"6\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>M6idn</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6idn.large <sup>1</sup></td>\n            <td tabindex=\"-1\">1562.00 / 25000.00</td>\n            <td tabindex=\"-1\">195.31 / 3125.00</td>\n            <td tabindex=\"-1\">6250.00 / 100000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6idn.xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">3125.00 / 25000.00</td>\n            <td tabindex=\"-1\">390.62 / 3125.00</td>\n            <td tabindex=\"-1\">12500.00 / 100000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6idn.2xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">6250.00 / 25000.00</td>\n            <td tabindex=\"-1\">781.25 / 3125.00</td>\n            <td tabindex=\"-1\">25000.00 / 100000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6idn.4xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">12500.00 / 25000.00</td>\n            <td tabindex=\"-1\">1562.50 / 3125.00</td>\n            <td tabindex=\"-1\">50000.00 / 100000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6idn.8xlarge</td>\n            <td tabindex=\"-1\">25000.00</td>\n            <td tabindex=\"-1\">3125.00</td>\n            <td tabindex=\"-1\">100000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6idn.12xlarge</td>\n            <td tabindex=\"-1\">37500.00</td>\n            <td tabindex=\"-1\">4687.50</td>\n            <td tabindex=\"-1\">150000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6idn.16xlarge</td>\n            <td tabindex=\"-1\">50000.00</td>\n            <td tabindex=\"-1\">6250.00</td>\n            <td tabindex=\"-1\">200000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6idn.24xlarge</td>\n            <td tabindex=\"-1\">75000.00</td>\n            <td tabindex=\"-1\">9375.00</td>\n            <td tabindex=\"-1\">300000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6idn.32xlarge</td>\n            <td tabindex=\"-1\">100000.00</td>\n            <td tabindex=\"-1\">12500.00</td>\n            <td tabindex=\"-1\">400000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6idn.metal</td>\n            <td tabindex=\"-1\">100000.00</td>\n            <td tabindex=\"-1\">12500.00</td>\n            <td tabindex=\"-1\">400000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td colspan=\"6\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>M6in</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6in.large <sup>1</sup></td>\n            <td tabindex=\"-1\">1562.00 / 25000.00</td>\n            <td tabindex=\"-1\">195.31 / 3125.00</td>\n            <td tabindex=\"-1\">6250.00 / 100000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6in.xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">3125.00 / 25000.00</td>\n            <td tabindex=\"-1\">390.62 / 3125.00</td>\n            <td tabindex=\"-1\">12500.00 / 100000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6in.2xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">6250.00 / 25000.00</td>\n            <td tabindex=\"-1\">781.25 / 3125.00</td>\n            <td tabindex=\"-1\">25000.00 / 100000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6in.4xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">12500.00 / 25000.00</td>\n            <td tabindex=\"-1\">1562.50 / 3125.00</td>\n            <td tabindex=\"-1\">50000.00 / 100000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6in.8xlarge</td>\n            <td tabindex=\"-1\">25000.00</td>\n            <td tabindex=\"-1\">3125.00</td>\n            <td tabindex=\"-1\">100000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6in.12xlarge</td>\n            <td tabindex=\"-1\">37500.00</td>\n            <td tabindex=\"-1\">4687.50</td>\n            <td tabindex=\"-1\">150000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6in.16xlarge</td>\n            <td tabindex=\"-1\">50000.00</td>\n            <td tabindex=\"-1\">6250.00</td>\n            <td tabindex=\"-1\">200000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6in.24xlarge</td>\n            <td tabindex=\"-1\">75000.00</td>\n            <td tabindex=\"-1\">9375.00</td>\n            <td tabindex=\"-1\">300000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6in.32xlarge</td>\n            <td tabindex=\"-1\">100000.00</td>\n            <td tabindex=\"-1\">12500.00</td>\n            <td tabindex=\"-1\">400000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6in.metal</td>\n            <td tabindex=\"-1\">100000.00</td>\n            <td tabindex=\"-1\">12500.00</td>\n            <td tabindex=\"-1\">400000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td colspan=\"6\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>M7a</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7a.medium <sup>1</sup></td>\n            <td tabindex=\"-1\">325.00 / 10000.00</td>\n            <td tabindex=\"-1\">40.62 / 1250.00</td>\n            <td tabindex=\"-1\">2500.00 / 40000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7a.large <sup>1</sup></td>\n            <td tabindex=\"-1\">650.00 / 10000.00</td>\n            <td tabindex=\"-1\">81.25 / 1250.00</td>\n            <td tabindex=\"-1\">3600.00 / 40000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7a.xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">1250.00 / 10000.00</td>\n            <td tabindex=\"-1\">156.25 / 1250.00</td>\n            <td tabindex=\"-1\">6000.00 / 40000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7a.2xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">2500.00 / 10000.00</td>\n            <td tabindex=\"-1\">312.50 / 1250.00</td>\n            <td tabindex=\"-1\">12000.00 / 40000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7a.4xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">5000.00 / 10000.00</td>\n            <td tabindex=\"-1\">625.00 / 1250.00</td>\n            <td tabindex=\"-1\">20000.00 / 40000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7a.8xlarge</td>\n            <td tabindex=\"-1\">10000.00</td>\n            <td tabindex=\"-1\">1250.00</td>\n            <td tabindex=\"-1\">40000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7a.12xlarge</td>\n            <td tabindex=\"-1\">15000.00</td>\n            <td tabindex=\"-1\">1875.00</td>\n            <td tabindex=\"-1\">60000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7a.16xlarge</td>\n            <td tabindex=\"-1\">20000.00</td>\n            <td tabindex=\"-1\">2500.00</td>\n            <td tabindex=\"-1\">80000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7a.24xlarge</td>\n            <td tabindex=\"-1\">30000.00</td>\n            <td tabindex=\"-1\">3750.00</td>\n            <td tabindex=\"-1\">120000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7a.32xlarge</td>\n            <td tabindex=\"-1\">40000.00</td>\n            <td tabindex=\"-1\">5000.00</td>\n            <td tabindex=\"-1\">160000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7a.48xlarge</td>\n            <td tabindex=\"-1\">40000.00</td>\n            <td tabindex=\"-1\">5000.00</td>\n            <td tabindex=\"-1\">240000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7a.metal-48xl</td>\n            <td tabindex=\"-1\">40000.00</td>\n            <td tabindex=\"-1\">5000.00</td>\n            <td tabindex=\"-1\">240000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td colspan=\"6\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>M7g</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7g.medium <sup>1</sup></td>\n            <td tabindex=\"-1\">315.00 / 10000.00</td>\n            <td tabindex=\"-1\">39.38 / 1250.00</td>\n            <td tabindex=\"-1\">2500.00 / 40000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7g.large <sup>1</sup></td>\n            <td tabindex=\"-1\">630.00 / 10000.00</td>\n            <td tabindex=\"-1\">78.75 / 1250.00</td>\n            <td tabindex=\"-1\">3600.00 / 40000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7g.xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">1250.00 / 10000.00</td>\n            <td tabindex=\"-1\">156.25 / 1250.00</td>\n            <td tabindex=\"-1\">6000.00 / 40000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7g.2xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">2500.00 / 10000.00</td>\n            <td tabindex=\"-1\">312.50 / 1250.00</td>\n            <td tabindex=\"-1\">12000.00 / 40000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7g.4xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">5000.00 / 10000.00</td>\n            <td tabindex=\"-1\">625.00 / 1250.00</td>\n            <td tabindex=\"-1\">20000.00 / 40000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7g.8xlarge</td>\n            <td tabindex=\"-1\">10000.00</td>\n            <td tabindex=\"-1\">1250.00</td>\n            <td tabindex=\"-1\">40000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7g.12xlarge</td>\n            <td tabindex=\"-1\">15000.00</td>\n            <td tabindex=\"-1\">1875.00</td>\n            <td tabindex=\"-1\">60000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7g.16xlarge</td>\n            <td tabindex=\"-1\">20000.00</td>\n            <td tabindex=\"-1\">2500.00</td>\n            <td tabindex=\"-1\">80000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7g.metal</td>\n            <td tabindex=\"-1\">20000.00</td>\n            <td tabindex=\"-1\">2500.00</td>\n            <td tabindex=\"-1\">80000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td colspan=\"6\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>M7gd</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7gd.medium <sup>1</sup></td>\n            <td tabindex=\"-1\">315.00 / 10000.00</td>\n            <td tabindex=\"-1\">39.38 / 1250.00</td>\n            <td tabindex=\"-1\">2500.00 / 40000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7gd.large <sup>1</sup></td>\n            <td tabindex=\"-1\">630.00 / 10000.00</td>\n            <td tabindex=\"-1\">78.75 / 1250.00</td>\n            <td tabindex=\"-1\">3600.00 / 40000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7gd.xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">1250.00 / 10000.00</td>\n            <td tabindex=\"-1\">156.25 / 1250.00</td>\n            <td tabindex=\"-1\">6000.00 / 40000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7gd.2xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">2500.00 / 10000.00</td>\n            <td tabindex=\"-1\">312.50 / 1250.00</td>\n            <td tabindex=\"-1\">12000.00 / 40000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7gd.4xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">5000.00 / 10000.00</td>\n            <td tabindex=\"-1\">625.00 / 1250.00</td>\n            <td tabindex=\"-1\">20000.00 / 40000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7gd.8xlarge</td>\n            <td tabindex=\"-1\">10000.00</td>\n            <td tabindex=\"-1\">1250.00</td>\n            <td tabindex=\"-1\">40000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7gd.12xlarge</td>\n            <td tabindex=\"-1\">15000.00</td>\n            <td tabindex=\"-1\">1875.00</td>\n            <td tabindex=\"-1\">60000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7gd.16xlarge</td>\n            <td tabindex=\"-1\">20000.00</td>\n            <td tabindex=\"-1\">2500.00</td>\n            <td tabindex=\"-1\">80000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7gd.metal</td>\n            <td tabindex=\"-1\">20000.00</td>\n            <td tabindex=\"-1\">2500.00</td>\n            <td tabindex=\"-1\">80000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td colspan=\"6\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>M7i</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7i.large <sup>1</sup></td>\n            <td tabindex=\"-1\">650.00 / 10000.00</td>\n            <td tabindex=\"-1\">81.25 / 1250.00</td>\n            <td tabindex=\"-1\">3600.00 / 40000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7i.xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">1250.00 / 10000.00</td>\n            <td tabindex=\"-1\">156.25 / 1250.00</td>\n            <td tabindex=\"-1\">6000.00 / 40000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7i.2xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">2500.00 / 10000.00</td>\n            <td tabindex=\"-1\">312.50 / 1250.00</td>\n            <td tabindex=\"-1\">12000.00 / 40000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7i.4xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">5000.00 / 10000.00</td>\n            <td tabindex=\"-1\">625.00 / 1250.00</td>\n            <td tabindex=\"-1\">20000.00 / 40000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7i.8xlarge</td>\n            <td tabindex=\"-1\">10000.00</td>\n            <td tabindex=\"-1\">1250.00</td>\n            <td tabindex=\"-1\">40000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7i.12xlarge</td>\n            <td tabindex=\"-1\">15000.00</td>\n            <td tabindex=\"-1\">1875.00</td>\n            <td tabindex=\"-1\">60000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7i.16xlarge</td>\n            <td tabindex=\"-1\">20000.00</td>\n            <td tabindex=\"-1\">2500.00</td>\n            <td tabindex=\"-1\">80000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7i.24xlarge</td>\n            <td tabindex=\"-1\">30000.00</td>\n            <td tabindex=\"-1\">3750.00</td>\n            <td tabindex=\"-1\">120000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7i.48xlarge</td>\n            <td tabindex=\"-1\">40000.00</td>\n            <td tabindex=\"-1\">5000.00</td>\n            <td tabindex=\"-1\">240000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7i.metal-24xl</td>\n            <td tabindex=\"-1\">30000.00</td>\n            <td tabindex=\"-1\">3750.00</td>\n            <td tabindex=\"-1\">120000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7i.metal-48xl</td>\n            <td tabindex=\"-1\">40000.00</td>\n            <td tabindex=\"-1\">5000.00</td>\n            <td tabindex=\"-1\">240000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td colspan=\"6\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>M7i-flex</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7i-flex.large <sup>1</sup></td>\n            <td tabindex=\"-1\">312.00 / 10000.00</td>\n            <td tabindex=\"-1\">39.06 / 1250.00</td>\n            <td tabindex=\"-1\">2500.00 / 40000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7i-flex.xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">625.00 / 10000.00</td>\n            <td tabindex=\"-1\">78.12 / 1250.00</td>\n            <td tabindex=\"-1\">3600.00 / 40000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7i-flex.2xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">1250.00 / 10000.00</td>\n            <td tabindex=\"-1\">156.25 / 1250.00</td>\n            <td tabindex=\"-1\">6000.00 / 40000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7i-flex.4xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">2500.00 / 10000.00</td>\n            <td tabindex=\"-1\">312.50 / 1250.00</td>\n            <td tabindex=\"-1\">12000.00 / 40000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7i-flex.8xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">5000.00 / 10000.00</td>\n            <td tabindex=\"-1\">625.00 / 1250.00</td>\n            <td tabindex=\"-1\">20000.00 / 40000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td colspan=\"6\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>Mac1</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">mac1.metal</td>\n            <td tabindex=\"-1\">14000.00</td>\n            <td tabindex=\"-1\">1750.00</td>\n            <td tabindex=\"-1\">80000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td colspan=\"6\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>Mac2</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">mac2.metal</td>\n            <td tabindex=\"-1\">10000.00</td>\n            <td tabindex=\"-1\">1250.00</td>\n            <td tabindex=\"-1\">55000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td colspan=\"6\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>Mac2-m2</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">mac2-m2.metal</td>\n            <td tabindex=\"-1\">8000.00</td>\n            <td tabindex=\"-1\">1000.00</td>\n            <td tabindex=\"-1\">55000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td colspan=\"6\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>Mac2-m2pro</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">mac2-m2pro.metal</td>\n            <td tabindex=\"-1\">8000.00</td>\n            <td tabindex=\"-1\">1000.00</td>\n            <td tabindex=\"-1\">55000.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td colspan=\"6\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>T2</b></td>\n        </tr>\n        <tr>\n            <td colspan=\"6\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>T3</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t3.nano <sup>1</sup></td>\n            <td tabindex=\"-1\">43.00 / 2085.00</td>\n            <td tabindex=\"-1\">5.38 / 260.62</td>\n            <td tabindex=\"-1\">250.00 / 11800.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t3.micro <sup>1</sup></td>\n            <td tabindex=\"-1\">87.00 / 2085.00</td>\n            <td tabindex=\"-1\">10.88 / 260.62</td>\n            <td tabindex=\"-1\">500.00 / 11800.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t3.small <sup>1</sup></td>\n            <td tabindex=\"-1\">174.00 / 2085.00</td>\n            <td tabindex=\"-1\">21.75 / 260.62</td>\n            <td tabindex=\"-1\">1000.00 / 11800.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t3.medium <sup>1</sup></td>\n            <td tabindex=\"-1\">347.00 / 2085.00</td>\n            <td tabindex=\"-1\">43.38 / 260.62</td>\n            <td tabindex=\"-1\">2000.00 / 11800.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t3.large <sup>1</sup></td>\n            <td tabindex=\"-1\">695.00 / 2780.00</td>\n            <td tabindex=\"-1\">86.88 / 347.50</td>\n            <td tabindex=\"-1\">4000.00 / 15700.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t3.xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">695.00 / 2780.00</td>\n            <td tabindex=\"-1\">86.88 / 347.50</td>\n            <td tabindex=\"-1\">4000.00 / 15700.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t3.2xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">695.00 / 2780.00</td>\n            <td tabindex=\"-1\">86.88 / 347.50</td>\n            <td tabindex=\"-1\">4000.00 / 15700.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td colspan=\"6\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>T3a</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t3a.nano <sup>1</sup></td>\n            <td tabindex=\"-1\">45.00 / 2085.00</td>\n            <td tabindex=\"-1\">5.62 / 260.62</td>\n            <td tabindex=\"-1\">250.00 / 11800.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t3a.micro <sup>1</sup></td>\n            <td tabindex=\"-1\">90.00 / 2085.00</td>\n            <td tabindex=\"-1\">11.25 / 260.62</td>\n            <td tabindex=\"-1\">500.00 / 11800.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t3a.small <sup>1</sup></td>\n            <td tabindex=\"-1\">175.00 / 2085.00</td>\n            <td tabindex=\"-1\">21.88 / 260.62</td>\n            <td tabindex=\"-1\">1000.00 / 11800.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t3a.medium <sup>1</sup></td>\n            <td tabindex=\"-1\">350.00 / 2085.00</td>\n            <td tabindex=\"-1\">43.75 / 260.62</td>\n            <td tabindex=\"-1\">2000.00 / 11800.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t3a.large <sup>1</sup></td>\n            <td tabindex=\"-1\">695.00 / 2780.00</td>\n            <td tabindex=\"-1\">86.88 / 347.50</td>\n            <td tabindex=\"-1\">4000.00 / 15700.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t3a.xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">695.00 / 2780.00</td>\n            <td tabindex=\"-1\">86.88 / 347.50</td>\n            <td tabindex=\"-1\">4000.00 / 15700.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t3a.2xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">695.00 / 2780.00</td>\n            <td tabindex=\"-1\">86.88 / 347.50</td>\n            <td tabindex=\"-1\">4000.00 / 15700.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td colspan=\"6\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>T4g</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t4g.nano <sup>1</sup></td>\n            <td tabindex=\"-1\">43.00 / 2085.00</td>\n            <td tabindex=\"-1\">5.38 / 260.62</td>\n            <td tabindex=\"-1\">250.00 / 11800.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t4g.micro <sup>1</sup></td>\n            <td tabindex=\"-1\">87.00 / 2085.00</td>\n            <td tabindex=\"-1\">10.88 / 260.62</td>\n            <td tabindex=\"-1\">500.00 / 11800.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t4g.small <sup>1</sup></td>\n            <td tabindex=\"-1\">174.00 / 2085.00</td>\n            <td tabindex=\"-1\">21.75 / 260.62</td>\n            <td tabindex=\"-1\">1000.00 / 11800.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t4g.medium <sup>1</sup></td>\n            <td tabindex=\"-1\">347.00 / 2085.00</td>\n            <td tabindex=\"-1\">43.38 / 260.62</td>\n            <td tabindex=\"-1\">2000.00 / 11800.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t4g.large <sup>1</sup></td>\n            <td tabindex=\"-1\">695.00 / 2780.00</td>\n            <td tabindex=\"-1\">86.88 / 347.50</td>\n            <td tabindex=\"-1\">4000.00 / 15700.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t4g.xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">695.00 / 2780.00</td>\n            <td tabindex=\"-1\">86.88 / 347.50</td>\n            <td tabindex=\"-1\">4000.00 / 15700.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t4g.2xlarge <sup>1</sup></td>\n            <td tabindex=\"-1\">695.00 / 2780.00</td>\n            <td tabindex=\"-1\">86.88 / 347.50</td>\n            <td tabindex=\"-1\">4000.00 / 15700.00</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">default</td>\n        </tr>\n\n    </table></div></div>\n    <div class=\"awsdocs-note\"><div class=\"awsdocs-note-title\"><awsui-icon name=\"status-info\" variant=\"link\"></awsui-icon><h6>Note</h6></div><div class=\"awsdocs-note-text\"><p><sup>1</sup> These instances can support maximum performance for 30 minutes at\n        least once every 24 hours, after which they revert to their baseline performance.\n        Other instances can sustain the maximum performance indefinitely. If your workload requires\n        sustained maximum performance for longer than 30 minutes, use one of these instances.</p><p><sup>2</sup> <code class=\"code\">default</code> indicates that instances are enabled\n        for EBS optimization by default. <code class=\"code\">supported</code> indicates that instances can optionally\n        be enabled for EBS optimization For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-optimized.html\">Amazon EBS–optimized instances</a>.</p></div></div>\n\n    <h2 id=\"gp_instance-store\">Instance store specifications</h2>\n\n    <div class=\"table-container\"><div class=\"table-contents\"><table id=\"w170aab9c13c17b3\"><thead>\n    <tr>\n        <th>Instance type</th>\n        <th>Instance store volumes</th>\n        <th>Instance store type</th>\n        <th>Read / Write performance (IOPS)</th>\n        <th>Needs initialization <sup>1</sup></th>\n        <th>TRIM support <sup>2</sup></th>\n    </tr>\n    </thead>\n        <tr>\n            <td colspan=\"6\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>M5ad</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5ad.large</td>\n            <td tabindex=\"-1\">1 x 75 GB</td>\n            <td tabindex=\"-1\">NVMe SSD</td>\n            <td tabindex=\"-1\">30,000 / 15,000</td>\n            <td tabindex=\"-1\"> </td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5ad.xlarge</td>\n            <td tabindex=\"-1\">1 x 150 GB</td>\n            <td tabindex=\"-1\">NVMe SSD</td>\n            <td tabindex=\"-1\">59,000 / 29,000</td>\n            <td tabindex=\"-1\"> </td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5ad.2xlarge</td>\n            <td tabindex=\"-1\">1 x 300 GB</td>\n            <td tabindex=\"-1\">NVMe SSD</td>\n            <td tabindex=\"-1\">117,000 / 57,000</td>\n            <td tabindex=\"-1\"> </td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5ad.4xlarge</td>\n            <td tabindex=\"-1\">2 x 300 GB</td>\n            <td tabindex=\"-1\">NVMe SSD</td>\n            <td tabindex=\"-1\">234,000 / 114,000</td>\n            <td tabindex=\"-1\"> </td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5ad.8xlarge</td>\n            <td tabindex=\"-1\">2 x 600 GB</td>\n            <td tabindex=\"-1\">NVMe SSD</td>\n            <td tabindex=\"-1\">466,666 / 233,334</td>\n            <td tabindex=\"-1\"> </td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5ad.12xlarge</td>\n            <td tabindex=\"-1\">2 x 900 GB</td>\n            <td tabindex=\"-1\">NVMe SSD</td>\n            <td tabindex=\"-1\">700,000 / 340,000</td>\n            <td tabindex=\"-1\"> </td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5ad.16xlarge</td>\n            <td tabindex=\"-1\">4 x 600 GB</td>\n            <td tabindex=\"-1\">NVMe SSD</td>\n            <td tabindex=\"-1\">933,332 / 466,668</td>\n            <td tabindex=\"-1\"> </td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5ad.24xlarge</td>\n            <td tabindex=\"-1\">4 x 900 GB</td>\n            <td tabindex=\"-1\">NVMe SSD</td>\n            <td tabindex=\"-1\">1,400,000 / 680,000</td>\n            <td tabindex=\"-1\"> </td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td colspan=\"6\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>M5d</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5d.large</td>\n            <td tabindex=\"-1\">1 x 75 GB</td>\n            <td tabindex=\"-1\">NVMe SSD</td>\n            <td tabindex=\"-1\">30,000 / 15,000</td>\n            <td tabindex=\"-1\"> </td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5d.xlarge</td>\n            <td tabindex=\"-1\">1 x 150 GB</td>\n            <td tabindex=\"-1\">NVMe SSD</td>\n            <td tabindex=\"-1\">59,000 / 29,000</td>\n            <td tabindex=\"-1\"> </td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5d.2xlarge</td>\n            <td tabindex=\"-1\">1 x 300 GB</td>\n            <td tabindex=\"-1\">NVMe SSD</td>\n            <td tabindex=\"-1\">117,000 / 57,000</td>\n            <td tabindex=\"-1\"> </td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5d.4xlarge</td>\n            <td tabindex=\"-1\">2 x 300 GB</td>\n            <td tabindex=\"-1\">NVMe SSD</td>\n            <td tabindex=\"-1\">234,000 / 114,000</td>\n            <td tabindex=\"-1\"> </td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5d.8xlarge</td>\n            <td tabindex=\"-1\">2 x 600 GB</td>\n            <td tabindex=\"-1\">NVMe SSD</td>\n            <td tabindex=\"-1\">466,666 / 233,334</td>\n            <td tabindex=\"-1\"> </td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5d.12xlarge</td>\n            <td tabindex=\"-1\">2 x 900 GB</td>\n            <td tabindex=\"-1\">NVMe SSD</td>\n            <td tabindex=\"-1\">700,000 / 340,000</td>\n            <td tabindex=\"-1\"> </td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5d.16xlarge</td>\n            <td tabindex=\"-1\">4 x 600 GB</td>\n            <td tabindex=\"-1\">NVMe SSD</td>\n            <td tabindex=\"-1\">933,332 / 466,668</td>\n            <td tabindex=\"-1\"> </td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5d.24xlarge</td>\n            <td tabindex=\"-1\">4 x 900 GB</td>\n            <td tabindex=\"-1\">NVMe SSD</td>\n            <td tabindex=\"-1\">1,400,000 / 680,000</td>\n            <td tabindex=\"-1\"> </td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5d.metal</td>\n            <td tabindex=\"-1\">4 x 900 GB</td>\n            <td tabindex=\"-1\">NVMe SSD</td>\n            <td tabindex=\"-1\">1,400,000 / 680,000</td>\n            <td tabindex=\"-1\"> </td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td colspan=\"6\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>M5dn</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5dn.large</td>\n            <td tabindex=\"-1\">1 x 75 GB</td>\n            <td tabindex=\"-1\">NVMe SSD</td>\n            <td tabindex=\"-1\">29,000 / 14,500</td>\n            <td tabindex=\"-1\"> </td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5dn.xlarge</td>\n            <td tabindex=\"-1\">1 x 150 GB</td>\n            <td tabindex=\"-1\">NVMe SSD</td>\n            <td tabindex=\"-1\">58,000 / 29,000</td>\n            <td tabindex=\"-1\"> </td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5dn.2xlarge</td>\n            <td tabindex=\"-1\">1 x 300 GB</td>\n            <td tabindex=\"-1\">NVMe SSD</td>\n            <td tabindex=\"-1\">116,000 / 58,000</td>\n            <td tabindex=\"-1\"> </td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5dn.4xlarge</td>\n            <td tabindex=\"-1\">2 x 300 GB</td>\n            <td tabindex=\"-1\">NVMe SSD</td>\n            <td tabindex=\"-1\">232,000 / 116,000</td>\n            <td tabindex=\"-1\"> </td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5dn.8xlarge</td>\n            <td tabindex=\"-1\">2 x 600 GB</td>\n            <td tabindex=\"-1\">NVMe SSD</td>\n            <td tabindex=\"-1\">464,000 / 232,000</td>\n            <td tabindex=\"-1\"> </td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5dn.12xlarge</td>\n            <td tabindex=\"-1\">2 x 900 GB</td>\n            <td tabindex=\"-1\">NVMe SSD</td>\n            <td tabindex=\"-1\">700,000 / 350,000</td>\n            <td tabindex=\"-1\"> </td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5dn.16xlarge</td>\n            <td tabindex=\"-1\">4 x 600 GB</td>\n            <td tabindex=\"-1\">NVMe SSD</td>\n            <td tabindex=\"-1\">930,000 / 465,000</td>\n            <td tabindex=\"-1\"> </td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5dn.24xlarge</td>\n            <td tabindex=\"-1\">4 x 900 GB</td>\n            <td tabindex=\"-1\">NVMe SSD</td>\n            <td tabindex=\"-1\">1,400,000 / 700,000</td>\n            <td tabindex=\"-1\"> </td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5dn.metal</td>\n            <td tabindex=\"-1\">4 x 900 GB</td>\n            <td tabindex=\"-1\">NVMe SSD</td>\n            <td tabindex=\"-1\">1,400,000 / 700,000</td>\n            <td tabindex=\"-1\"> </td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td colspan=\"6\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>M6gd</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6gd.medium</td>\n            <td tabindex=\"-1\">1 x 59 GB</td>\n            <td tabindex=\"-1\">NVMe SSD</td>\n            <td tabindex=\"-1\">13,438 / 5,625</td>\n            <td tabindex=\"-1\"> </td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6gd.large</td>\n            <td tabindex=\"-1\">1 x 118 GB</td>\n            <td tabindex=\"-1\">NVMe SSD</td>\n            <td tabindex=\"-1\">26,875 / 11,250</td>\n            <td tabindex=\"-1\"> </td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6gd.xlarge</td>\n            <td tabindex=\"-1\">1 x 237 GB</td>\n            <td tabindex=\"-1\">NVMe SSD</td>\n            <td tabindex=\"-1\">53,750 / 22,500</td>\n            <td tabindex=\"-1\"> </td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6gd.2xlarge</td>\n            <td tabindex=\"-1\">1 x 474 GB</td>\n            <td tabindex=\"-1\">NVMe SSD</td>\n            <td tabindex=\"-1\">107,500 / 45,000</td>\n            <td tabindex=\"-1\"> </td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6gd.4xlarge</td>\n            <td tabindex=\"-1\">1 x 950 GB</td>\n            <td tabindex=\"-1\">NVMe SSD</td>\n            <td tabindex=\"-1\">215,000 / 90,000</td>\n            <td tabindex=\"-1\"> </td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6gd.8xlarge</td>\n            <td tabindex=\"-1\">1 x 1900 GB</td>\n            <td tabindex=\"-1\">NVMe SSD</td>\n            <td tabindex=\"-1\">430,000 / 180,000</td>\n            <td tabindex=\"-1\"> </td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6gd.12xlarge</td>\n            <td tabindex=\"-1\">2 x 1425 GB</td>\n            <td tabindex=\"-1\">NVMe SSD</td>\n            <td tabindex=\"-1\">645,000 / 270,000</td>\n            <td tabindex=\"-1\"> </td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6gd.16xlarge</td>\n            <td tabindex=\"-1\">2 x 1900 GB</td>\n            <td tabindex=\"-1\">NVMe SSD</td>\n            <td tabindex=\"-1\">860,000 / 360,000</td>\n            <td tabindex=\"-1\"> </td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6gd.metal</td>\n            <td tabindex=\"-1\">2 x 1900 GB</td>\n            <td tabindex=\"-1\">NVMe SSD</td>\n            <td tabindex=\"-1\">860,000 / 360,000</td>\n            <td tabindex=\"-1\"> </td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td colspan=\"6\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>M6id</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6id.large</td>\n            <td tabindex=\"-1\">1 x 118 GB</td>\n            <td tabindex=\"-1\">NVMe SSD</td>\n            <td tabindex=\"-1\">33,542 / 16,771</td>\n            <td tabindex=\"-1\"> </td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6id.xlarge</td>\n            <td tabindex=\"-1\">1 x 237 GB</td>\n            <td tabindex=\"-1\">NVMe SSD</td>\n            <td tabindex=\"-1\">67,083 / 33,542</td>\n            <td tabindex=\"-1\"> </td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6id.2xlarge</td>\n            <td tabindex=\"-1\">1 x 474 GB</td>\n            <td tabindex=\"-1\">NVMe SSD</td>\n            <td tabindex=\"-1\">134,167 / 67,084</td>\n            <td tabindex=\"-1\"> </td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6id.4xlarge</td>\n            <td tabindex=\"-1\">1 x 950 GB</td>\n            <td tabindex=\"-1\">NVMe SSD</td>\n            <td tabindex=\"-1\">268,333 / 134,167</td>\n            <td tabindex=\"-1\"> </td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6id.8xlarge</td>\n            <td tabindex=\"-1\">1 x 1900 GB</td>\n            <td tabindex=\"-1\">NVMe SSD</td>\n            <td tabindex=\"-1\">536,666 / 268,334</td>\n            <td tabindex=\"-1\"> </td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6id.12xlarge</td>\n            <td tabindex=\"-1\">2 x 1425 GB</td>\n            <td tabindex=\"-1\">NVMe SSD</td>\n            <td tabindex=\"-1\">804,998 / 402,500</td>\n            <td tabindex=\"-1\"> </td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6id.16xlarge</td>\n            <td tabindex=\"-1\">2 x 1900 GB</td>\n            <td tabindex=\"-1\">NVMe SSD</td>\n            <td tabindex=\"-1\">1,073,332 / 536,668</td>\n            <td tabindex=\"-1\"> </td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6id.24xlarge</td>\n            <td tabindex=\"-1\">4 x 1425 GB</td>\n            <td tabindex=\"-1\">NVMe SSD</td>\n            <td tabindex=\"-1\">1,609,996 / 805,000</td>\n            <td tabindex=\"-1\"> </td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6id.32xlarge</td>\n            <td tabindex=\"-1\">4 x 1900 GB</td>\n            <td tabindex=\"-1\">NVMe SSD</td>\n            <td tabindex=\"-1\">2,146,664 / 1,073,336</td>\n            <td tabindex=\"-1\"> </td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6id.metal</td>\n            <td tabindex=\"-1\">4 x 1900 GB</td>\n            <td tabindex=\"-1\">NVMe SSD</td>\n            <td tabindex=\"-1\">2,146,664 / 1,073,336</td>\n            <td tabindex=\"-1\"> </td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td colspan=\"6\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>M6idn</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6idn.large</td>\n            <td tabindex=\"-1\">1 x 118 GB</td>\n            <td tabindex=\"-1\">NVMe SSD</td>\n            <td tabindex=\"-1\">33,542 / 16,771</td>\n            <td tabindex=\"-1\"> </td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6idn.xlarge</td>\n            <td tabindex=\"-1\">1 x 237 GB</td>\n            <td tabindex=\"-1\">NVMe SSD</td>\n            <td tabindex=\"-1\">67,083 / 33,542</td>\n            <td tabindex=\"-1\"> </td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6idn.2xlarge</td>\n            <td tabindex=\"-1\">1 x 474 GB</td>\n            <td tabindex=\"-1\">NVMe SSD</td>\n            <td tabindex=\"-1\">134,167 / 67,084</td>\n            <td tabindex=\"-1\"> </td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6idn.4xlarge</td>\n            <td tabindex=\"-1\">1 x 950 GB</td>\n            <td tabindex=\"-1\">NVMe SSD</td>\n            <td tabindex=\"-1\">268,333 / 134,167</td>\n            <td tabindex=\"-1\"> </td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6idn.8xlarge</td>\n            <td tabindex=\"-1\">1 x 1900 GB</td>\n            <td tabindex=\"-1\">NVMe SSD</td>\n            <td tabindex=\"-1\">536,666 / 268,334</td>\n            <td tabindex=\"-1\"> </td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6idn.12xlarge</td>\n            <td tabindex=\"-1\">2 x 1425 GB</td>\n            <td tabindex=\"-1\">NVMe SSD</td>\n            <td tabindex=\"-1\">804,998 / 402,500</td>\n            <td tabindex=\"-1\"> </td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6idn.16xlarge</td>\n            <td tabindex=\"-1\">2 x 1900 GB</td>\n            <td tabindex=\"-1\">NVMe SSD</td>\n            <td tabindex=\"-1\">1,073,332 / 536,668</td>\n            <td tabindex=\"-1\"> </td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6idn.24xlarge</td>\n            <td tabindex=\"-1\">4 x 1425 GB</td>\n            <td tabindex=\"-1\">NVMe SSD</td>\n            <td tabindex=\"-1\">1,609,996 / 805,000</td>\n            <td tabindex=\"-1\"> </td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6idn.32xlarge</td>\n            <td tabindex=\"-1\">4 x 1900 GB</td>\n            <td tabindex=\"-1\">NVMe SSD</td>\n            <td tabindex=\"-1\">2,146,664 / 1,073,336</td>\n            <td tabindex=\"-1\"> </td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6idn.metal</td>\n            <td tabindex=\"-1\">4 x 1900 GB</td>\n            <td tabindex=\"-1\">NVMe SSD</td>\n            <td tabindex=\"-1\">2,146,664 / 1,073,336</td>\n            <td tabindex=\"-1\"> </td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td colspan=\"6\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>M7gd</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7gd.medium</td>\n            <td tabindex=\"-1\">1 x 59 GB</td>\n            <td tabindex=\"-1\">NVMe SSD</td>\n            <td tabindex=\"-1\">16,771 / 8,385</td>\n            <td tabindex=\"-1\"> </td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7gd.large</td>\n            <td tabindex=\"-1\">1 x 118 GB</td>\n            <td tabindex=\"-1\">NVMe SSD</td>\n            <td tabindex=\"-1\">33,542 / 16,771</td>\n            <td tabindex=\"-1\"> </td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7gd.xlarge</td>\n            <td tabindex=\"-1\">1 x 237 GB</td>\n            <td tabindex=\"-1\">NVMe SSD</td>\n            <td tabindex=\"-1\">67,083 / 33,542</td>\n            <td tabindex=\"-1\"> </td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7gd.2xlarge</td>\n            <td tabindex=\"-1\">1 x 474 GB</td>\n            <td tabindex=\"-1\">NVMe SSD</td>\n            <td tabindex=\"-1\">134,167 / 67,084</td>\n            <td tabindex=\"-1\"> </td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7gd.4xlarge</td>\n            <td tabindex=\"-1\">1 x 950 GB</td>\n            <td tabindex=\"-1\">NVMe SSD</td>\n            <td tabindex=\"-1\">268,333 / 134,167</td>\n            <td tabindex=\"-1\"> </td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7gd.8xlarge</td>\n            <td tabindex=\"-1\">1 x 1900 GB</td>\n            <td tabindex=\"-1\">NVMe SSD</td>\n            <td tabindex=\"-1\">536,666 / 268,334</td>\n            <td tabindex=\"-1\"> </td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7gd.12xlarge</td>\n            <td tabindex=\"-1\">2 x 1425 GB</td>\n            <td tabindex=\"-1\">NVMe SSD</td>\n            <td tabindex=\"-1\">804,998 / 402,500</td>\n            <td tabindex=\"-1\"> </td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7gd.16xlarge</td>\n            <td tabindex=\"-1\">2 x 1900 GB</td>\n            <td tabindex=\"-1\">NVMe SSD</td>\n            <td tabindex=\"-1\">1,073,332 / 536,668</td>\n            <td tabindex=\"-1\"> </td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7gd.metal</td>\n            <td tabindex=\"-1\">2 x 1900 GB</td>\n            <td tabindex=\"-1\">NVMe SSD</td>\n            <td tabindex=\"-1\">1,073,332 / 536,668</td>\n            <td tabindex=\"-1\"> </td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n\n    </table></div></div>\n    <p><sup>1</sup> Volumes attached to certain instances suffer a first-write\n        penalty unless initialized. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/disk-performance.html\">Optimize disk performance for\n            instance store volumes</a>.</p>\n    <p><sup>2</sup> For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ssd-instance-store.html#InstanceStoreTrimSupport\">Instance\n        store volume TRIM support</a>.</p>\n\n    <h2 id=\"gp_security\">Security specifications</h2>\n    <div class=\"table-container\"><div class=\"table-contents\"><table id=\"w170aab9c13c19b3\"><thead>\n    <tr>\n        <th>Instance type</th>\n        <th>EBS encryption</th>\n        <th>Instance store encryption</th>\n        <th>Encryption in transit</th>\n        <th>AMD SEV-SNP</th>\n        <th>NitroTPM</th>\n        <th>Nitro Enclaves</th>\n    </tr>\n    </thead>\n        <tr>\n            <td colspan=\"7\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>M5</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5.large</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5.xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5.2xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5.4xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5.8xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5.12xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5.16xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5.24xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5.metal</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td colspan=\"7\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>M5a</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5a.large</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5a.xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5a.2xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5a.4xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5a.8xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5a.12xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5a.16xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5a.24xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td colspan=\"7\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>M5ad</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5ad.large</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5ad.xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5ad.2xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5ad.4xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5ad.8xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5ad.12xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5ad.16xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5ad.24xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td colspan=\"7\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>M5d</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5d.large</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5d.xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5d.2xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5d.4xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5d.8xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5d.12xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5d.16xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5d.24xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5d.metal</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td colspan=\"7\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>M5dn</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5dn.large</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5dn.xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5dn.2xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5dn.4xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5dn.8xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5dn.12xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5dn.16xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5dn.24xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5dn.metal</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td colspan=\"7\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>M5n</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5n.large</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5n.xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5n.2xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5n.4xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5n.8xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5n.12xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5n.16xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5n.24xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5n.metal</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td colspan=\"7\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>M5zn</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5zn.large</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5zn.xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5zn.2xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5zn.3xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5zn.6xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5zn.12xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m5zn.metal</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td colspan=\"7\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>M6a</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6a.large</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6a.xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6a.2xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6a.4xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6a.8xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6a.12xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6a.16xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6a.24xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6a.32xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6a.48xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6a.metal</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td colspan=\"7\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>M6g</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6g.medium</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6g.large</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6g.xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6g.2xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6g.4xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6g.8xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6g.12xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6g.16xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6g.metal</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td colspan=\"7\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>M6gd</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6gd.medium</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6gd.large</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6gd.xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6gd.2xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6gd.4xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6gd.8xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6gd.12xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6gd.16xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6gd.metal</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td colspan=\"7\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>M6i</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6i.large</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6i.xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6i.2xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6i.4xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6i.8xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6i.12xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6i.16xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6i.24xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6i.32xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6i.metal</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td colspan=\"7\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>M6id</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6id.large</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6id.xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6id.2xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6id.4xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6id.8xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6id.12xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6id.16xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6id.24xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6id.32xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6id.metal</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td colspan=\"7\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>M6idn</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6idn.large</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6idn.xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6idn.2xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6idn.4xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6idn.8xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6idn.12xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6idn.16xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6idn.24xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6idn.32xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6idn.metal</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td colspan=\"7\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>M6in</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6in.large</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6in.xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6in.2xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6in.4xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6in.8xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6in.12xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6in.16xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6in.24xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6in.32xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m6in.metal</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td colspan=\"7\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>M7a</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7a.medium</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7a.large</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7a.xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7a.2xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7a.4xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7a.8xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7a.12xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7a.16xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7a.24xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7a.32xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7a.48xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7a.metal-48xl</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td colspan=\"7\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>M7g</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7g.medium</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7g.large</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7g.xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7g.2xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7g.4xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7g.8xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7g.12xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7g.16xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7g.metal</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td colspan=\"7\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>M7gd</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7gd.medium</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7gd.large</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7gd.xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7gd.2xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7gd.4xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7gd.8xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7gd.12xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7gd.16xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7gd.metal</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td colspan=\"7\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>M7i</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7i.large</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7i.xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7i.2xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7i.4xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7i.8xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7i.12xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7i.16xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7i.24xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7i.48xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7i.metal-24xl</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7i.metal-48xl</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td colspan=\"7\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>M7i-flex</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7i-flex.large</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7i-flex.xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7i-flex.2xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7i-flex.4xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">m7i-flex.8xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td colspan=\"7\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>Mac1</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">mac1.metal</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td colspan=\"7\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>Mac2</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">mac2.metal</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td colspan=\"7\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>Mac2-m2</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">mac2-m2.metal</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td colspan=\"7\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>Mac2-m2pro</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">mac2-m2pro.metal</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td colspan=\"7\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>T2</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t2.nano</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t2.micro</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t2.small</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t2.medium</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t2.large</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t2.xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t2.2xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td colspan=\"7\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>T3</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t3.nano</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t3.micro</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t3.small</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t3.medium</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t3.large</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t3.xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t3.2xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td colspan=\"7\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>T3a</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t3a.nano</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t3a.micro</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t3a.small</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t3a.medium</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t3a.large</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t3a.xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t3a.2xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td colspan=\"7\" align=\"center\" style=\"text-align: center;\" tabindex=\"-1\"><b>T4g</b></td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t4g.nano</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t4g.micro</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t4g.small</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t4g.medium</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t4g.large</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t4g.xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n        <tr>\n            <td tabindex=\"-1\">t4g.2xlarge</td>\n            <td tabindex=\"-1\">✓</td>\n            <td tabindex=\"-1\">Instance store not supported</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n            <td tabindex=\"-1\">✗</td>\n        </tr>\n\n    </table></div></div>\n    <awsdocs-copyright class=\"copyright-print\"></awsdocs-copyright><awsdocs-thumb-feedback right-edge=\"{{$ctrl.thumbFeedbackRightEdge}}\"></awsdocs-thumb-feedback></div><noscript><div><div><div><div id=\"js_error_message\"><p><img src=\"https://d1ge0kk1l5kms0.cloudfront.net/images/G/01/webservices/console/warning.png\" alt=\"Warning\" /> <strong>Javascript is disabled or is unavailable in your browser.</strong></p><p>To use the Amazon Web Services Documentation, Javascript must be enabled. Please refer to your browser's Help pages for instructions.</p></div></div></div></div></noscript><div id=\"main-col-footer\" class=\"awsui-util-font-size-0\"><div id=\"doc-conventions\"><a target=\"_top\" href=\"/general/latest/gr/docconventions.html\">Document Conventions</a></div><div class=\"prev-next\"><div id=\"previous\" class=\"prev-link\" accesskey=\"p\" href=\"./ec2-instance-type-specifications.html\">Specifications</div><div id=\"next\" class=\"next-link\" accesskey=\"n\" href=\"./co.html\">Compute optimized</div></div></div><awsdocs-page-utilities></awsdocs-page-utilities></div><div id=\"quick-feedback-yes\" style=\"display: none;\"><div class=\"title\">Did this page help you? - Yes</div><div class=\"content\"><p>Thanks for letting us know we're doing a good job!</p><p>If you've got a moment, please tell us what we did right so we can do more of it.</p><p><awsui-button id=\"fblink\" rel=\"noopener noreferrer\" target=\"_blank\" text=\"Feedback\" click=\"linkClick($event)\" href=\"https://docs.aws.amazon.com/forms/aws-doc-feedback?hidden_service_name=EC2&amp;topic_url=https://docs.aws.amazon.com/en_us/ec2/latest/instancetypes/gp.html\"></awsui-button></p></div></div><div id=\"quick-feedback-no\" style=\"display: none;\"><div class=\"title\">Did this page help you? - No</div><div class=\"content\"><p>Thanks for letting us know this page needs work. We're sorry we let you down.</p><p>If you've got a moment, please tell us how we can make the documentation better.</p><p><awsui-button id=\"fblink\" rel=\"noopener noreferrer\" target=\"_blank\" text=\"Feedback\" click=\"linkClick($event)\" href=\"https://docs.aws.amazon.com/forms/aws-doc-feedback?hidden_service_name=EC2&amp;topic_url=https://docs.aws.amazon.com/en_us/ec2/latest/instancetypes/gp.html\"></awsui-button></p></div></div></div></body></div></awsdocs-view><div class=\"page-loading-indicator\" id=\"page-loading-indicator\"><awsui-spinner size=\"large\"></awsui-spinner></div></div><div id=\"tools-panel\" dom-region=\"tools\"><awsdocs-tools-panel id=\"awsdocs-tools-panel\"></awsdocs-tools-panel></div></awsui-app-layout><awsdocs-cookie-banner class=\"doc-cookie-banner\"></awsdocs-cookie-banner></div></body></html>"
  },
  {
    "path": "hack/code/bandwidth_gen/main.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage main\n\nimport (\n\t\"context\"\n\t\"flag\"\n\t\"fmt\"\n\t\"go/format\"\n\t\"log\"\n\t\"net/http\"\n\t\"os\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/PuerkitoBio/goquery\"\n\t\"github.com/aws/aws-sdk-go-v2/config\"\n\t\"github.com/aws/aws-sdk-go-v2/service/ec2\"\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\t\"github.com/samber/lo\"\n)\n\nvar uriSelectors = map[string]string{\n\t\"https://docs.aws.amazon.com/ec2/latest/instancetypes/gp.html\":  \"#gp_network\",\n\t\"https://docs.aws.amazon.com/ec2/latest/instancetypes/co.html\":  \"#co_network\",\n\t\"https://docs.aws.amazon.com/ec2/latest/instancetypes/mo.html\":  \"#mo_network\",\n\t\"https://docs.aws.amazon.com/ec2/latest/instancetypes/so.html\":  \"#so_network\",\n\t\"https://docs.aws.amazon.com/ec2/latest/instancetypes/ac.html\":  \"#ac_network\",\n\t\"https://docs.aws.amazon.com/ec2/latest/instancetypes/hpc.html\": \"#hpc_network\",\n\t\"https://docs.aws.amazon.com/ec2/latest/instancetypes/pg.html\":  \"#pg_network\",\n}\n\nconst fileFormat = `\n%s\npackage instancetype\n\n// GENERATED FILE. DO NOT EDIT DIRECTLY.\n// Update hack/code/bandwidth_gen.go and re-generate to edit\n// You can add instance types by adding to the --instance-types CLI flag\n\nvar (\n\tInstanceTypeBandwidthMegabits = map[string]int64{\n\t\t%s\n\t}\n)\n`\n\nfunc main() {\n\tflag.Parse()\n\tif flag.NArg() != 1 {\n\t\tlog.Fatalf(\"Usage: `bandwidth_gen.go pkg/providers/instancetype/zz_generated.bandwidth.go`\")\n\t}\n\n\tbandwidth := map[ec2types.InstanceType]int64{}\n\tvagueBandwidth := map[ec2types.InstanceType]string{}\n\n\tfor uri, selector := range uriSelectors {\n\t\tfunc() {\n\t\t\tresponse := lo.Must(http.Get(uri))\n\t\t\tdefer response.Body.Close()\n\n\t\t\tdoc := lo.Must(goquery.NewDocumentFromReader(response.Body))\n\n\t\t\t// grab the table that contains the network performance values. Some instance types will have vague\n\t\t\t// description for bandwidth such as \"Very Low\", \"Low\", \"Low to Moderate\", etc. These instance types\n\t\t\t// will be ignored since we don't know the exact bandwidth for these instance types\n\t\t\tfor _, row := range doc.Find(selector).NextAllFiltered(\".table-container\").Eq(0).Find(\"tbody\").Find(\"tr\").Nodes {\n\t\t\t\tinstanceTypeName := strings.TrimSpace(row.FirstChild.NextSibling.FirstChild.Data)\n\t\t\t\tif !strings.ContainsAny(instanceTypeName, \".\") {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tbandwidthData := row.FirstChild.NextSibling.NextSibling.NextSibling.FirstChild.Data\n\t\t\t\t// exclude all rows that contain any of the following strings\n\t\t\t\tif containsAny(bandwidthData, \"Low\", \"Moderate\", \"High\", \"Up to\") {\n\t\t\t\t\tvagueBandwidth[ec2types.InstanceType(instanceTypeName)] = bandwidthData\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tbandwidthSlice := strings.Split(bandwidthData, \" \")\n\t\t\t\t// if the first value contains a multiplier i.e. (4x 100 Gigabit)\n\t\t\t\tif strings.HasSuffix(bandwidthSlice[0], \"x\") {\n\t\t\t\t\tmultiplier := lo.Must(strconv.ParseFloat(bandwidthSlice[0][:len(bandwidthSlice[0])-1], 64))\n\t\t\t\t\tbandwidth[ec2types.InstanceType(instanceTypeName)] = int64(lo.Must(strconv.ParseFloat(bandwidthSlice[1], 64)) * 1000 * multiplier)\n\t\t\t\t\t// Check row for instancetype for described network performance value i.e (2 Gigabit)\n\t\t\t\t} else {\n\t\t\t\t\tbandwidth[ec2types.InstanceType(instanceTypeName)] = int64(lo.Must(strconv.ParseFloat(bandwidthSlice[0], 64)) * 1000)\n\t\t\t\t}\n\t\t\t}\n\t\t}()\n\t}\n\tallInstanceTypes := getAllInstanceTypes()\n\tinstanceTypes := lo.Keys(bandwidth)\n\t// 2d sort for readability\n\tsort.SliceStable(allInstanceTypes, func(i, j int) bool {\n\t\treturn allInstanceTypes[i] < allInstanceTypes[j]\n\t})\n\tsort.SliceStable(instanceTypes, func(i, j int) bool {\n\t\treturn instanceTypes[i] < instanceTypes[j]\n\t})\n\tsort.SliceStable(instanceTypes, func(i, j int) bool {\n\t\treturn bandwidth[instanceTypes[i]] < bandwidth[instanceTypes[j]]\n\t})\n\n\t// Generate body\n\tvar body strings.Builder\n\tfor _, instanceType := range lo.Without(allInstanceTypes, instanceTypes...) {\n\t\tif _, ok := vagueBandwidth[instanceType]; ok {\n\t\t\tfmt.Fprintf(&body, \"// %s has vague bandwidth information, bandwidth is %s\\n\", instanceType, vagueBandwidth[instanceType])\n\t\t\tcontinue\n\t\t}\n\t\tfmt.Fprintf(&body, \"// %s is not available in https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-network-bandwidth.html\\n\", instanceType)\n\t}\n\tfor _, instanceType := range instanceTypes {\n\t\tfmt.Fprintf(&body, \"\\t\\\"%s\\\": %d,\\n\", instanceType, bandwidth[instanceType])\n\t}\n\n\tlicense := lo.Must(os.ReadFile(\"hack/boilerplate.go.txt\"))\n\n\t// Format and print to the file\n\tformatted := lo.Must(format.Source(fmt.Appendf([]byte{}, fileFormat, license, body.String())))\n\tfile := lo.Must(os.Create(flag.Args()[0]))\n\tlo.Must(file.Write(formatted))\n\tfile.Close()\n}\n\nfunc containsAny(value string, excludedSubstrings ...string) bool {\n\tfor _, str := range excludedSubstrings {\n\t\tif strings.Contains(value, str) {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\nfunc getAllInstanceTypes() []ec2types.InstanceType {\n\tif err := os.Setenv(\"AWS_SDK_LOAD_CONFIG\", \"true\"); err != nil {\n\t\tlog.Fatalf(\"setting AWS_SDK_LOAD_CONFIG, %s\", err)\n\t}\n\tif err := os.Setenv(\"AWS_REGION\", \"us-east-1\"); err != nil {\n\t\tlog.Fatalf(\"setting AWS_REGION, %s\", err)\n\t}\n\tctx := context.Background()\n\tcfg := lo.Must(config.LoadDefaultConfig(ctx))\n\tec2api := ec2.NewFromConfig(cfg)\n\tvar allInstanceTypes []ec2types.InstanceType\n\n\tparams := &ec2.DescribeInstanceTypesInput{}\n\t// Retrieve the instance types in a loop using NextToken\n\tfor {\n\t\tresult := lo.Must(ec2api.DescribeInstanceTypes(ctx, params))\n\t\tallInstanceTypes = append(allInstanceTypes, lo.Map(result.InstanceTypes, func(info ec2types.InstanceTypeInfo, _ int) ec2types.InstanceType { return info.InstanceType })...)\n\t\t// Check if they are any instances left\n\t\tif result.NextToken != nil {\n\t\t\tparams.NextToken = result.NextToken\n\t\t} else {\n\t\t\tbreak\n\t\t}\n\t}\n\treturn allInstanceTypes\n}\n"
  },
  {
    "path": "hack/code/instancetype_testdata_gen/main.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage main\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"flag\"\n\t\"fmt\"\n\t\"go/format\"\n\t\"log\"\n\t\"os\"\n\t\"sort\"\n\t\"strings\"\n\n\t\"github.com/aws/aws-sdk-go-v2/config\"\n\t\"github.com/aws/aws-sdk-go-v2/service/ec2\"\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\t\"github.com/samber/lo\"\n\n\tsdk \"github.com/aws/karpenter-provider-aws/pkg/aws\"\n)\n\nconst packageHeader = `\npackage fake\n\nimport (\n\t\"github.com/aws/aws-sdk-go-v2/aws\"\n\t\"github.com/aws/aws-sdk-go-v2/service/ec2\"\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\t\"github.com/samber/lo\"\n)\n\n// GENERATED FILE. DO NOT EDIT DIRECTLY.\n// Update hack/code/instancetype_testdata_gen.go and re-generate to edit\n// You can add instance types by adding to the --instance-types CLI flag\n\n`\n\nvar instanceTypesStr string\nvar outFile string\n\nfunc init() {\n\tflag.StringVar(&instanceTypesStr, \"instance-types\", \"\", \"comma-separated list of instance types to auto-generate static test data from\")\n\tflag.StringVar(&outFile, \"out-file\", \"zz_generated.describe_instance_types.go\", \"file to output the generated data\")\n\tflag.Parse()\n}\n\nfunc main() {\n\tif err := os.Setenv(\"AWS_SDK_LOAD_CONFIG\", \"true\"); err != nil {\n\t\tlog.Fatalf(\"setting AWS_SDK_LOAD_CONFIG, %s\", err)\n\t}\n\tif err := os.Setenv(\"AWS_REGION\", \"us-east-1\"); err != nil {\n\t\tlog.Fatalf(\"setting AWS_REGION, %s\", err)\n\t}\n\tctx := context.Background()\n\tcfg := lo.Must(config.LoadDefaultConfig(ctx))\n\tec2api := ec2.NewFromConfig(cfg)\n\tinstanceTypes := strings.Split(instanceTypesStr, \",\")\n\n\tsrc := &bytes.Buffer{}\n\tfmt.Fprintln(src, \"//go:build !ignore_autogenerated\")\n\tlicense := lo.Must(os.ReadFile(\"hack/boilerplate.go.txt\"))\n\tfmt.Fprintln(src, string(license))\n\tfmt.Fprint(src, packageHeader)\n\tfmt.Fprintln(src, getDescribeInstanceTypesOutput(ctx, ec2api, instanceTypes))\n\tfmt.Fprintln(src, getDescribeInstanceTypeOfferingsOutput())\n\n\t// Format and print to the file\n\tformatted, err := format.Source(src.Bytes())\n\tif err != nil {\n\t\tlog.Fatalf(\"formatting generated source, %s\", err)\n\t}\n\tif err := os.WriteFile(outFile, formatted, 0644); err != nil {\n\t\tlog.Fatalf(\"writing output, %s\", err)\n\t}\n}\n\nfunc getDescribeInstanceTypesOutput(ctx context.Context, ec2api sdk.EC2API, instanceTypes []string) string {\n\tinstanceTypeValues := lo.Map(instanceTypes, func(it string, _ int) ec2types.InstanceType {\n\t\treturn ec2types.InstanceType(it)\n\t})\n\n\tout, err := ec2api.DescribeInstanceTypes(ctx, &ec2.DescribeInstanceTypesInput{\n\t\tInstanceTypes: instanceTypeValues,\n\t})\n\n\tif err != nil {\n\t\tlog.Fatalf(\"describing instance types, %s\", err)\n\t}\n\t// Sort them by name so that we get a consistent ordering\n\tsort.SliceStable(out.InstanceTypes, func(i, j int) bool {\n\t\treturn out.InstanceTypes[i].InstanceType < out.InstanceTypes[j].InstanceType\n\t})\n\n\tsrc := &bytes.Buffer{}\n\tfmt.Fprintln(src, \"var defaultDescribeInstanceTypesOutput = &ec2.DescribeInstanceTypesOutput{\")\n\tfmt.Fprintln(src, \"InstanceTypes: []ec2types.InstanceTypeInfo{\")\n\tfor _, elem := range out.InstanceTypes {\n\t\tfmt.Fprintln(src, \"{\")\n\t\tdata := getInstanceTypeInfo(elem)\n\t\tfmt.Fprintln(src, data)\n\t\tfmt.Fprintln(src, \"},\")\n\t}\n\tfmt.Fprintln(src, \"},\")\n\tfmt.Fprintln(src, \"}\")\n\treturn src.String()\n}\n\nfunc getDescribeInstanceTypeOfferingsOutput() string {\n\tsrc := &bytes.Buffer{}\n\tinstanceTypeToZones := map[string][]string{\n\t\t\"m5.large\":       {\"test-zone-1a\", \"test-zone-1b\", \"test-zone-1c\", \"test-zone-1a-local\"},\n\t\t\"m5.xlarge\":      {\"test-zone-1a\", \"test-zone-1b\"},\n\t\t\"m5.2xlarge\":     {\"test-zone-1a\"},\n\t\t\"m5.4xlarge\":     {\"test-zone-1a\"},\n\t\t\"m5.8xlarge\":     {\"test-zone-1a\"},\n\t\t\"p3.8xlarge\":     {\"test-zone-1a\", \"test-zone-1b\"},\n\t\t\"dl1.24xlarge\":   {\"test-zone-1a\", \"test-zone-1b\"},\n\t\t\"g4dn.8xlarge\":   {\"test-zone-1a\", \"test-zone-1b\"},\n\t\t\"g4ad.16xlarge\":  {\"test-zone-1a\", \"test-zone-1b\"},\n\t\t\"t3.large\":       {\"test-zone-1a\", \"test-zone-1b\"},\n\t\t\"inf2.xlarge\":    {\"test-zone-1a\"},\n\t\t\"inf2.24xlarge\":  {\"test-zone-1a\"},\n\t\t\"trn1.2xlarge\":   {\"test-zone-1a\"},\n\t\t\"c6g.large\":      {\"test-zone-1a\"},\n\t\t\"m5.metal\":       {\"test-zone-1a\", \"test-zone-1b\"},\n\t\t\"m6idn.32xlarge\": {\"test-zone-1a\", \"test-zone-1b\", \"test-zone-1c\"},\n\t\t\"m7i-flex.large\": {\"test-zone-1a\"},\n\t}\n\n\tfmt.Fprintln(src, \"var defaultDescribeInstanceTypeOfferingsOutput = &ec2.DescribeInstanceTypeOfferingsOutput{\")\n\tfmt.Fprintln(src, \"InstanceTypeOfferings: []ec2types.InstanceTypeOffering{\")\n\tinstanceTypes := lo.Keys(instanceTypeToZones)\n\tsort.Strings(instanceTypes)\n\tfor _, elem := range lo.Flatten(lo.Map(instanceTypes, func(it string, _ int) []lo.Tuple2[string, string] {\n\t\treturn lo.Map(instanceTypeToZones[it], func(z string, _ int) lo.Tuple2[string, string] { return lo.Tuple2[string, string]{A: it, B: z} })\n\t})) {\n\t\tfmt.Fprintln(src, \"{\")\n\t\tfmt.Fprintf(src, \"InstanceType: \\\"%s\\\",\\n\", elem.A)\n\t\tfmt.Fprintf(src, \"Location: lo.ToPtr(\\\"%s\\\"),\\n\", elem.B)\n\t\tfmt.Fprintln(src, \"},\")\n\t}\n\tfmt.Fprintln(src, \"},\")\n\tfmt.Fprintln(src, \"}\")\n\treturn src.String()\n}\n\nfunc getInstanceTypeInfo(info ec2types.InstanceTypeInfo) string {\n\tsrc := &bytes.Buffer{}\n\n\tfmt.Fprintf(src, \"InstanceType: \\\"%s\\\",\\n\", info.InstanceType)\n\tfmt.Fprintf(src, \"SupportedUsageClasses:[]ec2types.UsageClassType{%s},\\n\", getStringSliceData(info.SupportedUsageClasses))\n\tfmt.Fprintf(src, \"SupportedVirtualizationTypes: []ec2types.VirtualizationType{%s},\\n\", getStringSliceData(info.SupportedVirtualizationTypes))\n\tfmt.Fprintf(src, \"BurstablePerformanceSupported: aws.Bool(%t),\\n\", lo.FromPtr(info.BurstablePerformanceSupported))\n\tfmt.Fprintf(src, \"BareMetal: aws.Bool(%t),\\n\", lo.FromPtr(info.BareMetal))\n\tfmt.Fprintf(src, \"Hypervisor: \\\"%s\\\",\\n\", info.Hypervisor)\n\n\tfmt.Fprintf(src, \"ProcessorInfo: &ec2types.ProcessorInfo{\\n\")\n\tfmt.Fprintf(src, \"Manufacturer: aws.String(\\\"%s\\\"),\\n\", lo.FromPtr(info.ProcessorInfo.Manufacturer))\n\tfmt.Fprintf(src, \"SupportedArchitectures: []ec2types.ArchitectureType{%s},\\n\", getStringSliceData(info.ProcessorInfo.SupportedArchitectures))\n\tfmt.Fprintf(src, \"SustainedClockSpeedInGhz: aws.Float64(%f),\\n\", lo.FromPtr(info.ProcessorInfo.SustainedClockSpeedInGhz))\n\tfmt.Fprintf(src, \"},\\n\")\n\tfmt.Fprintf(src, \"VCpuInfo: &ec2types.VCpuInfo{\\n\")\n\tfmt.Fprintf(src, \"DefaultCores: aws.Int32(%d),\\n\", lo.FromPtr(info.VCpuInfo.DefaultCores))\n\tfmt.Fprintf(src, \"DefaultVCpus: aws.Int32(%d),\\n\", lo.FromPtr(info.VCpuInfo.DefaultVCpus))\n\tfmt.Fprintf(src, \"},\\n\")\n\tfmt.Fprintf(src, \"MemoryInfo: &ec2types.MemoryInfo{\\n\")\n\tfmt.Fprintf(src, \"SizeInMiB: aws.Int64(%d),\\n\", lo.FromPtr(info.MemoryInfo.SizeInMiB))\n\tfmt.Fprintf(src, \"},\\n\")\n\tif info.EbsInfo != nil {\n\t\tfmt.Fprintf(src, \"EbsInfo: &ec2types.EbsInfo{\\n\")\n\t\tif info.EbsInfo.EbsOptimizedInfo != nil {\n\t\t\tfmt.Fprintf(src, \"EbsOptimizedInfo: &ec2types.EbsOptimizedInfo{\\n\")\n\t\t\tfmt.Fprintf(src, \"BaselineBandwidthInMbps: aws.Int32(%d),\\n\", lo.FromPtr(info.EbsInfo.EbsOptimizedInfo.BaselineBandwidthInMbps))\n\t\t\tfmt.Fprintf(src, \"BaselineIops: aws.Int32(%d),\\n\", lo.FromPtr(info.EbsInfo.EbsOptimizedInfo.BaselineIops))\n\t\t\tfmt.Fprintf(src, \"BaselineThroughputInMBps: aws.Float64(%.2f),\\n\", lo.FromPtr(info.EbsInfo.EbsOptimizedInfo.BaselineThroughputInMBps))\n\t\t\tfmt.Fprintf(src, \"MaximumBandwidthInMbps: aws.Int32(%d),\\n\", lo.FromPtr(info.EbsInfo.EbsOptimizedInfo.MaximumBandwidthInMbps))\n\t\t\tfmt.Fprintf(src, \"MaximumIops: aws.Int32(%d),\\n\", lo.FromPtr(info.EbsInfo.EbsOptimizedInfo.MaximumIops))\n\t\t\tfmt.Fprintf(src, \"MaximumThroughputInMBps: aws.Float64(%.2f),\\n\", lo.FromPtr(info.EbsInfo.EbsOptimizedInfo.MaximumThroughputInMBps))\n\t\t\tfmt.Fprintf(src, \"},\\n\")\n\t\t}\n\t\tfmt.Fprintf(src, \"EbsOptimizedSupport: \\\"%s\\\",\\n\", info.EbsInfo.EbsOptimizedSupport)\n\t\tfmt.Fprintf(src, \"EncryptionSupport: \\\"%s\\\",\\n\", info.EbsInfo.EncryptionSupport)\n\t\tfmt.Fprintf(src, \"NvmeSupport: \\\"%s\\\",\\n\", info.EbsInfo.NvmeSupport)\n\t\tfmt.Fprintf(src, \"},\\n\")\n\t}\n\tif info.NeuronInfo != nil {\n\t\tfmt.Fprintf(src, \"NeuronInfo: &ec2types.NeuronInfo{\\n\")\n\t\tfmt.Fprintf(src, \"NeuronDevices: []ec2types.NeuronDeviceInfo{\\n\")\n\t\tfor _, elem := range info.NeuronInfo.NeuronDevices {\n\t\t\tfmt.Fprint(src, getNeuronDeviceInfo(elem))\n\t\t}\n\t\tfmt.Fprintf(src, \"},\\n\")\n\t\tfmt.Fprintf(src, \"},\\n\")\n\t}\n\tif info.GpuInfo != nil {\n\t\tfmt.Fprintf(src, \"GpuInfo: &ec2types.GpuInfo{\\n\")\n\t\tfmt.Fprintf(src, \"Gpus: []ec2types.GpuDeviceInfo{\\n\")\n\t\tfor _, elem := range info.GpuInfo.Gpus {\n\t\t\tfmt.Fprint(src, getGPUDeviceInfo(elem))\n\t\t}\n\t\tfmt.Fprintf(src, \"},\\n\")\n\t\tfmt.Fprintf(src, \"},\\n\")\n\t}\n\tif info.InstanceStorageInfo != nil {\n\t\tfmt.Fprintf(src, \"InstanceStorageInfo: &ec2types.InstanceStorageInfo{\")\n\t\tfmt.Fprintf(src, \"NvmeSupport: \\\"%s\\\",\\n\", string(info.InstanceStorageInfo.NvmeSupport))\n\t\tfmt.Fprintf(src, \"TotalSizeInGB: aws.Int64(%d),\\n\", lo.FromPtr(info.InstanceStorageInfo.TotalSizeInGB))\n\t\tfmt.Fprintf(src, \"},\\n\")\n\t}\n\tfmt.Fprintf(src, \"NetworkInfo: &ec2types.NetworkInfo{\\n\")\n\tif info.NetworkInfo.EfaInfo != nil {\n\t\tfmt.Fprintf(src, \"EfaInfo: &ec2types.EfaInfo{\\n\")\n\t\tfmt.Fprintf(src, \"MaximumEfaInterfaces: aws.Int32(%d),\\n\", lo.FromPtr(info.NetworkInfo.EfaInfo.MaximumEfaInterfaces))\n\t\tfmt.Fprintf(src, \"},\\n\")\n\t}\n\tfmt.Fprintf(src, \"MaximumNetworkInterfaces: aws.Int32(%d),\\n\", lo.FromPtr(info.NetworkInfo.MaximumNetworkInterfaces))\n\tfmt.Fprintf(src, \"Ipv4AddressesPerInterface: aws.Int32(%d),\\n\", lo.FromPtr(info.NetworkInfo.Ipv4AddressesPerInterface))\n\tfmt.Fprintf(src, \"EncryptionInTransitSupported: aws.Bool(%t),\\n\", lo.FromPtr(info.NetworkInfo.EncryptionInTransitSupported))\n\tfmt.Fprintf(src, \"DefaultNetworkCardIndex: aws.Int32(%d),\\n\", lo.FromPtr(info.NetworkInfo.DefaultNetworkCardIndex))\n\tfmt.Fprintf(src, \"NetworkCards: []ec2types.NetworkCardInfo{\\n\")\n\tfor _, networkCard := range info.NetworkInfo.NetworkCards {\n\t\tfmt.Fprint(src, getNetworkCardInfo(networkCard))\n\t}\n\tfmt.Fprintf(src, \"},\\n\")\n\tfmt.Fprintf(src, \"},\\n\")\n\treturn src.String()\n}\n\nfunc getNetworkCardInfo(info ec2types.NetworkCardInfo) string {\n\tsrc := &bytes.Buffer{}\n\tfmt.Fprintf(src, \"{\\n\")\n\tfmt.Fprintf(src, \"NetworkCardIndex: aws.Int32(%d),\\n\", lo.FromPtr(info.NetworkCardIndex))\n\tfmt.Fprintf(src, \"MaximumNetworkInterfaces: aws.Int32(%d),\\n\", lo.FromPtr(info.MaximumNetworkInterfaces))\n\tfmt.Fprintf(src, \"},\\n\")\n\treturn src.String()\n}\n\nfunc getNeuronDeviceInfo(info ec2types.NeuronDeviceInfo) string {\n\n\tsrc := &bytes.Buffer{}\n\tfmt.Fprintf(src, \"{\\n\")\n\tfmt.Fprintf(src, \"Count: aws.Int32(%d),\\n\", lo.FromPtr(info.Count))\n\tfmt.Fprintf(src, \"Name: aws.String(\\\"%s\\\"),\\n\", lo.FromPtr(info.Name))\n\tfmt.Fprintf(src, \"CoreInfo: &ec2types.NeuronDeviceCoreInfo{\\n\")\n\tfmt.Fprintf(src, \"Count: aws.Int32(%d),\\n\", lo.FromPtr(info.CoreInfo.Count))\n\tfmt.Fprintf(src, \"Version: aws.Int32(%d),\\n\", lo.FromPtr(info.CoreInfo.Version))\n\tfmt.Fprintf(src, \"},\\n\")\n\tfmt.Fprintf(src, \"MemoryInfo: &ec2types.NeuronDeviceMemoryInfo{\\n\")\n\tfmt.Fprintf(src, \"SizeInMiB: aws.Int32(%d),\\n\", lo.FromPtr(info.MemoryInfo.SizeInMiB))\n\tfmt.Fprintf(src, \"},\\n\")\n\tfmt.Fprintf(src, \"},\\n\")\n\treturn src.String()\n}\n\nfunc getGPUDeviceInfo(info ec2types.GpuDeviceInfo) string {\n\tsrc := &bytes.Buffer{}\n\tfmt.Fprintf(src, \"{\\n\")\n\tfmt.Fprintf(src, \"Name: aws.String(\\\"%s\\\"),\\n\", lo.FromPtr(info.Name))\n\tfmt.Fprintf(src, \"Manufacturer: aws.String(\\\"%s\\\"),\\n\", lo.FromPtr(info.Manufacturer))\n\tfmt.Fprintf(src, \"Count: aws.Int32(%d),\\n\", lo.FromPtr(info.Count))\n\tfmt.Fprintf(src, \"MemoryInfo: &ec2types.GpuDeviceMemoryInfo{\\n\")\n\tfmt.Fprintf(src, \"SizeInMiB: aws.Int32(%d),\\n\", lo.FromPtr(info.MemoryInfo.SizeInMiB))\n\tfmt.Fprintf(src, \"},\\n\")\n\tfmt.Fprintf(src, \"},\\n\")\n\treturn src.String()\n}\n\nfunc getStringSliceData[T ec2types.UsageClassType | ec2types.VirtualizationType | ec2types.ArchitectureType](slice []T) string {\n\treturn strings.Join(lo.Map(slice, func(s T, _ int) string { return fmt.Sprintf(`\"%s\"`, s) }), \",\")\n}\n"
  },
  {
    "path": "hack/code/prices_gen/main.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage main\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"flag\"\n\t\"fmt\"\n\t\"go/format\"\n\t\"log\"\n\t\"os\"\n\t\"runtime\"\n\t\"runtime/pprof\"\n\t\"sort\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go-v2/config\"\n\n\t\"github.com/aws/aws-sdk-go-v2/service/ec2\"\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\t\"github.com/samber/lo\"\n\n\tcontrollerspricing \"github.com/aws/karpenter-provider-aws/pkg/controllers/providers/pricing\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/operator/options\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/pricing\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/test\"\n)\n\nfunc getAWSRegions(partition string) []string {\n\tswitch partition {\n\tcase \"aws\":\n\t\treturn []string{\"us-east-1\"}\n\tcase \"aws-us-gov\":\n\t\treturn []string{\"us-gov-east-1\", \"us-gov-west-1\"}\n\tcase \"aws-cn\":\n\t\treturn []string{\"cn-north-1\"}\n\tdefault:\n\t\tpanic(\"invalid partition\")\n\t}\n}\n\nfunc getPartitionSuffix(partition string) string {\n\tswitch partition {\n\tcase \"aws\":\n\t\treturn \"AWS\"\n\tcase \"aws-us-gov\":\n\t\treturn \"USGov\"\n\tcase \"aws-cn\":\n\t\treturn \"CN\"\n\tdefault:\n\t\tpanic(\"invalid partition\")\n\t}\n}\n\ntype Options struct {\n\tpartition string\n\toutput    string\n}\n\nfunc NewOptions() *Options {\n\to := &Options{}\n\tflag.StringVar(&o.partition, \"partition\", \"aws\", \"The partition to generate prices for. Valid options are \\\"aws\\\", \\\"aws-us-gov\\\", and \\\"aws-cn\\\".\")\n\tflag.StringVar(&o.output, \"output\", \"pkg/providers/pricing/zz_generated.pricing_aws.go\", \"The destination for the generated go file.\")\n\tflag.Parse()\n\tif !lo.Contains([]string{\"aws\", \"aws-us-gov\", \"aws-cn\"}, o.partition) {\n\t\tlog.Fatal(\"invalid partition: must be \\\"aws\\\", \\\"aws-us-gov\\\", or \\\"aws-cn\\\"\")\n\t}\n\treturn o\n}\n\nfunc main() {\n\topts := NewOptions()\n\tf, err := os.Create(\"pricing.heapprofile\")\n\tif err != nil {\n\t\tlog.Fatal(\"could not create memory profile: \", err)\n\t}\n\tdefer f.Close() // error handling omitted for example\n\n\tconst region = \"us-east-1\"\n\tos.Setenv(\"AWS_SDK_LOAD_CONFIG\", \"true\")\n\tos.Setenv(\"AWS_REGION\", region)\n\tctx := context.Background()\n\tctx = options.ToContext(ctx, test.Options())\n\tcfg := lo.Must(config.LoadDefaultConfig(ctx, config.WithRegion(region)))\n\tec2api := ec2.NewFromConfig(cfg)\n\tsrc := &bytes.Buffer{}\n\tfmt.Fprintln(src, \"//go:build !ignore_autogenerated\")\n\tlicense := lo.Must(os.ReadFile(\"hack/boilerplate.go.txt\"))\n\tfmt.Fprintln(src, string(license))\n\tfmt.Fprintln(src, \"package pricing\")\n\tnow := time.Now().UTC().Format(time.RFC3339)\n\tfmt.Fprintf(src, \"// generated at %s for %s\\n\\n\\n\", now, region)\n\tfmt.Fprintln(src, \"import ec2types \\\"github.com/aws/aws-sdk-go-v2/service/ec2/types\\\"\")\n\tfmt.Fprintf(src, \"var InitialOnDemandPrices%s = map[string]map[ec2types.InstanceType]float64{\\n\", getPartitionSuffix(opts.partition))\n\t// record prices for each region we are interested in\n\tfor _, region := range getAWSRegions(opts.partition) {\n\t\tlog.Println(\"fetching for\", region)\n\t\tpricingProvider := pricing.NewDefaultProvider(pricing.NewAPI(cfg), ec2api, region, false)\n\t\tcontroller := controllerspricing.NewController(pricingProvider)\n\t\t_, err := controller.Reconcile(ctx)\n\t\tif err != nil {\n\t\t\tlog.Fatalf(\"failed to initialize pricing provider %s\", err)\n\t\t}\n\t\tinstanceTypes := pricingProvider.InstanceTypes()\n\t\tsort.SliceStable(instanceTypes, func(i, j int) bool {\n\t\t\treturn instanceTypes[i] < instanceTypes[j]\n\t\t})\n\n\t\twritePricing(src, instanceTypes, region, pricingProvider.OnDemandPrice)\n\t}\n\tfmt.Fprintln(src, \"}\")\n\tformatted, err := format.Source(src.Bytes())\n\tif err != nil {\n\t\tif err := os.WriteFile(opts.output, src.Bytes(), 0644); err != nil {\n\t\t\tlog.Fatalf(\"writing output, %s\", err)\n\t\t}\n\t\tlog.Fatalf(\"formatting generated source, %s\", err)\n\t}\n\n\tif err := os.WriteFile(opts.output, formatted, 0644); err != nil {\n\t\tlog.Fatalf(\"writing output, %s\", err)\n\t}\n\truntime.GC()\n\tif err := pprof.WriteHeapProfile(f); err != nil {\n\t\tlog.Fatal(\"could not write memory profile: \", err)\n\t}\n}\n\nfunc writePricing(src *bytes.Buffer, instanceNames []ec2types.InstanceType, region string, getPrice func(instanceType ec2types.InstanceType) (float64, bool)) {\n\tfmt.Fprintf(src, \"// %s\\n\", region)\n\tfmt.Fprintf(src, \"%q: {\\n\", region)\n\tlineLen := 0\n\tsort.SliceStable(instanceNames, func(i, j int) bool {\n\t\treturn instanceNames[i] < instanceNames[j]\n\t})\n\tpreviousFamily := \"\"\n\tfor _, instanceName := range instanceNames {\n\t\tsegs := strings.Split(string(instanceName), \".\")\n\t\tif len(segs) != 2 {\n\t\t\tlog.Fatalf(\"parsing instance family %s, got %v\", instanceName, segs)\n\t\t}\n\t\tprice, ok := getPrice(instanceName)\n\t\tif !ok {\n\t\t\tcontinue\n\t\t}\n\n\t\t// separating by family should lead to smaller diffs instead of just breaking at line endings only\n\t\tfamily := segs[0]\n\t\tif family != previousFamily {\n\t\t\tpreviousFamily = family\n\t\t\tnewline(src)\n\t\t\tfmt.Fprintf(src, \"// %s family\\n\", family)\n\t\t\tlineLen = 0\n\t\t}\n\n\t\tn, err := fmt.Fprintf(src, `\"%s\":%f, `, instanceName, price)\n\t\tif err != nil {\n\t\t\tlog.Fatalf(\"error writing, %s\", err)\n\t\t}\n\t\tlineLen += n\n\t\tif lineLen > 80 {\n\t\t\tlineLen = 0\n\t\t\tfmt.Fprintln(src)\n\t\t}\n\t}\n\tfmt.Fprintln(src, \"\\n},\")\n\tfmt.Fprintln(src)\n}\n\n// newline adds a newline to src, if it does not currently already end with a newline\nfunc newline(src *bytes.Buffer) {\n\tcontents := src.Bytes()\n\t// no content yet, so create the new line\n\tif len(contents) == 0 {\n\t\tfmt.Println(src)\n\t\treturn\n\t}\n\t// already has a newline, so don't write a new one\n\tif contents[len(contents)-1] == '\\n' {\n\t\treturn\n\t}\n\tfmt.Fprintln(src)\n}\n"
  },
  {
    "path": "hack/code/vpc_limits_gen/main.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage main\n\nimport (\n\t\"flag\"\n\t\"fmt\"\n\t\"io\"\n\t\"log\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"os\"\n\t\"strings\"\n\t\"time\"\n)\n\ntype Options struct {\n\tsourceOutput string\n\turlInput     string\n}\n\nfunc main() {\n\topts := Options{}\n\tflag.StringVar(&opts.urlInput, \"url\", \"https://raw.githubusercontent.com/aws/amazon-vpc-resource-controller-k8s/master/pkg/aws/vpc/limits.go\",\n\t\t\"url of the raw vpc/limits.go file in the github.com/aws/amazon-vpc-resource-controller-k8s repo\")\n\tflag.StringVar(&opts.sourceOutput, \"output\", \"pkg/providers/instancetype/zz_generated.vpclimits.go\", \"output location for the generated go source file\")\n\tflag.Parse()\n\n\tlimitsURL, err := url.Parse(opts.urlInput)\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\n\tout, err := os.Create(opts.sourceOutput)\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\n\tclient := http.Client{Timeout: time.Second * 10}\n\tresp, err := client.Get(limitsURL.String())\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\tdefer resp.Body.Close()\n\trespData, err := io.ReadAll(resp.Body)\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\tnewRespData := strings.Replace(string(respData), \"package vpc\", \"package instancetype\", 1)\n\tout.WriteString(newRespData)\n\tdefer out.Close()\n\n\tfmt.Printf(\"Downloaded vpc/limits.go from \\\"%s\\\" to file \\\"%s\\\"\\n\", limitsURL.String(), out.Name())\n}\n"
  },
  {
    "path": "hack/codegen.sh",
    "content": "#!/usr/bin/env bash\nset -euo pipefail\n\nif [ -z ${ENABLE_GIT_PUSH+x} ]; then\n  ENABLE_GIT_PUSH=false\nfi\n\necho \"codegen running ENABLE_GIT_PUSH: ${ENABLE_GIT_PUSH}\"\n\nbandwidth() {\n  GENERATED_FILE=\"pkg/providers/instancetype/zz_generated.bandwidth.go\"\n\n  go run hack/code/bandwidth_gen/main.go -- \"${GENERATED_FILE}\"\n\n  checkForUpdates \"${GENERATED_FILE}\"\n}\n\npricing() {\n  declare -a PARTITIONS=(\n    \"aws\"\n    \"aws-us-gov\"\n    # \"aws-cn\"\n  )\n\n  for partition in \"${PARTITIONS[@]}\"; do\n    GENERATED_FILE=\"pkg/providers/pricing/zz_generated.pricing_${partition//-/_}.go\"\n\n    go run hack/code/prices_gen/main.go --partition \"$partition\" --output \"$GENERATED_FILE\"\n\n    IGNORE_PATTERN=\"// generated at\"\n    checkForUpdates \"${GENERATED_FILE}\" \"${IGNORE_PATTERN}\"\n  done\n}\n\nvpcLimits() {\n  GENERATED_FILE=\"pkg/providers/instancetype/zz_generated.vpclimits.go\"\n\n  go run hack/code/vpc_limits_gen/main.go -- \\\n    --url=https://raw.githubusercontent.com/aws/amazon-vpc-resource-controller-k8s/master/pkg/aws/vpc/limits.go \\\n    --output=\"${GENERATED_FILE}\"\n\n  checkForUpdates \"${GENERATED_FILE}\"\n}\n\ninstanceTypeTestData() {\n  GENERATED_FILE=\"pkg/fake/zz_generated.describe_instance_types.go\"\n\n  go run hack/code/instancetype_testdata_gen/main.go --out-file ${GENERATED_FILE} \\\n    --instance-types t3.large,m5.large,m5.xlarge,p3.8xlarge,g4dn.8xlarge,c6g.large,inf2.xlarge,inf2.24xlarge,trn1.2xlarge,m5.metal,dl1.24xlarge,m6idn.32xlarge,t4g.small,t4g.xlarge,t4g.medium,g4ad.16xlarge,m7i-flex.large\n\n  checkForUpdates \"${GENERATED_FILE}\"\n}\n\n# checkForUpdates is a helper function that takes in a file and an optional ignore pattern\n# to determine if there is a diff between the previous iteration of the file and the newly generated data\n# If it fines a difference between the new and the old file and the ENABLE_GIT_PUSH environment variable is set,\n# it will push the updated file with an automatic commit to the \"codegen\" branch\n# USAGE:\n#   checkForUpdates \"pkg/providers/pricing/zz_generated.pricing_aws.go\" \"// generated at\"\ncheckForUpdates() {\n  GENERATED_FILE=$1\n  IGNORE_PATTERN=${2:-\"\"}\n\n  if [[ -z \"$IGNORE_PATTERN\" ]]; then\n    GIT_DIFF=$(git diff --stat --ignore-blank-lines \"${GENERATED_FILE}\")\n  else\n    GIT_DIFF=$(git diff --stat --ignore-blank-lines --ignore-matching-lines=\"${IGNORE_PATTERN}\" \"${GENERATED_FILE}\")\n  fi\n\n  echo \"Checking git diff for updates...\"\n  if [[ -n \"${GIT_DIFF}\" ]]; then\n    echo \"$GIT_DIFF\"\n    if [[ $ENABLE_GIT_PUSH == true ]]; then\n      gitCommitAndPush \"${GENERATED_FILE}\"\n    fi\n  else\n    noUpdates \"${GENERATED_FILE}\"\n    git checkout \"${GENERATED_FILE}\"\n  fi\n}\n\ngitOpenAndPullBranch() {\n  git fetch origin\n  git checkout -b codegen\n}\n\ngitCommitAndPush() {\n  GENERATED_FILE=$1\n  git add \"${GENERATED_FILE}\"\n  git commit -m \"CodeGen updates from AWS API for ${GENERATED_FILE}\"\n  # Force push the branch since we might have left the branch around from the last codegen\n  git push --set-upstream origin codegen --force\n}\n\nnoUpdates() {\n  GENERATED_FILE=$1\n  echo \"No updates from AWS API for ${GENERATED_FILE}\"\n}\n\nif [[ $ENABLE_GIT_PUSH == true ]]; then\n  gitOpenAndPullBranch\nfi\n\necho \"Updating bandwidth...\"\nbandwidth\necho \"Updating pricing...\"\npricing\necho \"Updating VPC limits...\"\nvpcLimits\necho \"Updating instance type data...\"\ninstanceTypeTestData\necho \"Finished codegen\"\n"
  },
  {
    "path": "hack/docgen.sh",
    "content": "#!/usr/bin/env bash\nset -euo pipefail\n\ncompatibilitymatrix() {\n    # versionCount is the number of K8s versions to display in the compatibility matrix\n    versionCount=7\n    go run hack/docs/version_compatibility_gen/main.go hack/docs/compatibilitymatrix_gen/compatibility.yaml \"$(git describe --exact-match --tags || echo \"no tag\")\"\n    go run hack/docs/compatibilitymatrix_gen/main.go website/content/en/preview/upgrading/compatibility.md hack/docs/compatibilitymatrix_gen/compatibility.yaml $versionCount\n}\n\nCONTROLLER_RUNTIME_DIR=$(go list -m -f '{{ .Dir }}' sigs.k8s.io/controller-runtime)\nAWS_SDK_GO_PROMETHEUS_DIR=$(go list -m -f '{{ .Dir }}' github.com/jonathan-innis/aws-sdk-go-prometheus)\nOPERATORPKG_DIR=$(go list -m -f '{{ .Dir }}' github.com/awslabs/operatorpkg)\n\ncompatibilitymatrix\ngo run hack/docs/metrics_gen/main.go pkg/ \"${KARPENTER_CORE_DIR}/pkg\" \"${CONTROLLER_RUNTIME_DIR}/pkg\" \"${AWS_SDK_GO_PROMETHEUS_DIR}\" \"${OPERATORPKG_DIR}\" website/content/en/preview/reference/metrics.md\ngo run hack/docs/instancetypes_gen/main.go website/content/en/preview/reference/instance-types.md\ngo run hack/docs/configuration_gen/main.go website/content/en/preview/reference/settings.md\ncd charts/karpenter && helm-docs\n"
  },
  {
    "path": "hack/docs/compatibilitymatrix_gen/compatibility.yaml",
    "content": "name: \"karpenter\"\ncompatibility:\n  - appVersion: 0.21.x\n    minK8sVersion: 1.21\n    maxK8sVersion: 1.24\n  - appVersion: 0.22.x\n    minK8sVersion: 1.21\n    maxK8sVersion: 1.24\n  - appVersion: 0.23.x\n    minK8sVersion: 1.21\n    maxK8sVersion: 1.24\n  - appVersion: 0.24.x\n    minK8sVersion: 1.21\n    maxK8sVersion: 1.24\n  - appVersion: 0.25.x\n    minK8sVersion: 1.21\n    maxK8sVersion: 1.25\n  - appVersion: 0.26.x\n    minK8sVersion: 1.21\n    maxK8sVersion: 1.25\n  - appVersion: 0.27.x\n    minK8sVersion: 1.21\n    maxK8sVersion: 1.25\n  - appVersion: 0.28.x\n    minK8sVersion: 1.23\n    maxK8sVersion: 1.27\n  - appVersion: 0.29.x\n    minK8sVersion: 1.23\n    maxK8sVersion: 1.27\n  - appVersion: 0.30.x\n    minK8sVersion: 1.23\n    maxK8sVersion: 1.27\n  - appVersion: 0.31.x\n    minK8sVersion: 1.23\n    maxK8sVersion: 1.28\n  - appVersion: 0.32.x\n    minK8sVersion: 1.23\n    maxK8sVersion: 1.28\n  - appVersion: 0.33.x\n    minK8sVersion: 1.23\n    maxK8sVersion: 1.28\n  - appVersion: 0.34.x\n    minK8sVersion: 1.23\n    maxK8sVersion: 1.29\n  - appVersion: 0.35.x\n    minK8sVersion: 1.23\n    maxK8sVersion: 1.29\n  - appVersion: 0.36.x\n    minK8sVersion: 1.23\n    maxK8sVersion: 1.29\n  - appVersion: 0.37.x\n    minK8sVersion: 1.23\n    maxK8sVersion: 1.30\n  - appVersion: 1.0.x\n    minK8sVersion: 1.25\n    maxK8sVersion: 1.30\n  - appVersion: 1.0.5\n    minK8sVersion: 1.25\n    maxK8sVersion: 1.31\n  - appVersion: 1.1.x\n    minK8sVersion: 1.25\n    maxK8sVersion: 1.31\n  - appVersion: 1.2.x\n    minK8sVersion: 1.25\n    maxK8sVersion: 1.32\n  - appVersion: 1.3.x\n    minK8sVersion: 1.25\n    maxK8sVersion: 1.32\n  - appVersion: 1.4.x\n    minK8sVersion: 1.25\n    maxK8sVersion: 1.32\n  - appVersion: 1.5.x\n    minK8sVersion: 1.26\n    maxK8sVersion: 1.33\n  - appVersion: 1.6.x\n    minK8sVersion: 1.26\n    maxK8sVersion: 1.34\n  - appVersion: 1.7.x\n    minK8sVersion: 1.26\n    maxK8sVersion: 1.34\n  - appVersion: 1.8.x\n    minK8sVersion: 1.26\n    maxK8sVersion: 1.34\n\n  - appVersion: 1.9.x\n    minK8sVersion: 1.26\n    maxK8sVersion: 1.35\n  - appVersion: 1.10.x\n    minK8sVersion: 1.26\n    maxK8sVersion: 1.35"
  },
  {
    "path": "hack/docs/compatibilitymatrix_gen/main.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage main\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"os\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/aws/karpenter-provider-aws/tools/kompat/pkg/kompat\"\n)\n\nfunc main() {\n\toutputFileName := os.Args[1]\n\tmdFile, err := os.ReadFile(outputFileName)\n\tif err != nil {\n\t\tlog.Printf(\"Can't read %s file: %v\", os.Args[1], err)\n\t\tos.Exit(1)\n\t}\n\n\tgenStart := \"[comment]: <> (the content below is generated from hack/docs/compatibilitymatrix_gen/main.go)\"\n\tgenEnd := \"[comment]: <> (end docs generated content from hack/docs/compatibilitymatrix_gen/main.go)\"\n\tstartDocSections := strings.Split(string(mdFile), genStart)\n\tif len(startDocSections) != 2 {\n\t\tlog.Fatalf(\"expected one generated comment block start but got %d\", len(startDocSections)-1)\n\t}\n\tendDocSections := strings.Split(string(mdFile), genEnd)\n\tif len(endDocSections) != 2 {\n\t\tlog.Fatalf(\"expected one generated comment block end but got %d\", len(endDocSections)-1)\n\t}\n\ttopDoc := fmt.Sprintf(\"%s%s\\n\\n\", startDocSections[0], genStart)\n\tbottomDoc := fmt.Sprintf(\"\\n%s%s\", genEnd, endDocSections[1])\n\n\tbaseText, err := kompat.Parse(os.Args[2])\n\tif err != nil {\n\t\tlog.Fatalf(\"unable to generate compatibility matrix\")\n\t}\n\n\tlog.Println(\"writing output to\", outputFileName)\n\tf, err := os.Create(outputFileName)\n\tif err != nil {\n\t\tlog.Fatalf(\"unable to open %s to write generated output: %v\", outputFileName, err)\n\t}\n\tnumOfk8sVersion, _ := strconv.Atoi(os.Args[3])\n\tf.WriteString(topDoc + baseText.Markdown(kompat.Options{LastN: numOfk8sVersion}) + bottomDoc)\n}\n"
  },
  {
    "path": "hack/docs/configuration_gen/main.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage main\n\nimport (\n\t\"flag\"\n\t\"fmt\"\n\t\"log\"\n\t\"os\"\n\t\"strings\"\n\n\tcoreoptions \"sigs.k8s.io/karpenter/pkg/operator/options\"\n\n\t\"github.com/aws/karpenter-provider-aws/pkg/operator/options\"\n)\n\nfunc main() {\n\tif len(os.Args) != 2 {\n\t\tlog.Fatalf(\"Usage: %s path/to/markdown.md\", os.Args[0])\n\t}\n\toutputFileName := os.Args[1]\n\tmdFile, err := os.ReadFile(outputFileName)\n\tif err != nil {\n\t\tlog.Printf(\"Can't read %s file: %v\", os.Args[1], err)\n\t\tos.Exit(2)\n\t}\n\n\tgenStart := \"[comment]: <> (the content below is generated from hack/docs/configuration_gen/main.go)\"\n\tgenEnd := \"[comment]: <> (end docs generated content from hack/docs/configuration_gen/main.go)\"\n\tstartDocSections := strings.Split(string(mdFile), genStart)\n\tif len(startDocSections) != 2 {\n\t\tlog.Fatalf(\"expected one generated comment block start but got %d\", len(startDocSections)-1)\n\t}\n\tendDocSections := strings.Split(string(mdFile), genEnd)\n\tif len(endDocSections) != 2 {\n\t\tlog.Fatalf(\"expected one generated comment block end but got %d\", len(endDocSections)-1)\n\t}\n\ttopDoc := fmt.Sprintf(\"%s%s\\n\\n\", startDocSections[0], genStart)\n\tbottomDoc := fmt.Sprintf(\"\\n%s%s\", genEnd, endDocSections[1])\n\n\tfs := &coreoptions.FlagSet{\n\t\tFlagSet: flag.NewFlagSet(\"karpenter\", flag.ContinueOnError),\n\t}\n\t(&coreoptions.Options{}).AddFlags(fs)\n\t(&options.Options{}).AddFlags(fs)\n\n\tenvVarsBlock := \"| Environment Variable | CLI Flag | Description |\\n\"\n\tenvVarsBlock += \"|--|--|--|\\n\"\n\tfs.VisitAll(func(f *flag.Flag) {\n\t\tif f.DefValue == \"\" {\n\t\t\tenvVarsBlock += fmt.Sprintf(\"| %s | %s | %s|\\n\", strings.ReplaceAll(strings.ToUpper(f.Name), \"-\", \"_\"), \"\\\\-\\\\-\"+f.Name, f.Usage)\n\t\t} else {\n\t\t\tenvVarsBlock += fmt.Sprintf(\"| %s | %s | %s (default = %s)|\\n\", strings.ReplaceAll(strings.ToUpper(f.Name), \"-\", \"_\"), \"\\\\-\\\\-\"+f.Name, f.Usage, f.DefValue)\n\t\t}\n\t})\n\n\tlog.Println(\"writing output to\", outputFileName)\n\tf, err := os.Create(outputFileName)\n\tif err != nil {\n\t\tlog.Fatalf(\"unable to open %s to write generated output: %v\", outputFileName, err)\n\t}\n\tf.WriteString(topDoc + envVarsBlock + bottomDoc)\n}\n"
  },
  {
    "path": "hack/docs/instancetypes_gen/main.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage main\n\nimport (\n\t\"context\"\n\t\"flag\"\n\t\"fmt\"\n\t\"log\"\n\t\"os\"\n\t\"sort\"\n\t\"strings\"\n\n\t\"github.com/aws/aws-sdk-go-v2/config\"\n\t\"github.com/aws/aws-sdk-go-v2/service/ec2\"\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\n\t\"github.com/patrickmn/go-cache\"\n\t\"github.com/samber/lo\"\n\tcorev1 \"k8s.io/api/core/v1\"\n\t\"k8s.io/apimachinery/pkg/api/resource\"\n\t\"k8s.io/apimachinery/pkg/util/sets\"\n\t\"k8s.io/client-go/rest\"\n\t\"sigs.k8s.io/controller-runtime/pkg/client\"\n\t\"sigs.k8s.io/controller-runtime/pkg/client/fake\"\n\t\"sigs.k8s.io/controller-runtime/pkg/manager\"\n\tkarpv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n\n\tcoreoptions \"sigs.k8s.io/karpenter/pkg/operator/options\"\n\tcoretest \"sigs.k8s.io/karpenter/pkg/test\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\tawscache \"github.com/aws/karpenter-provider-aws/pkg/cache\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/operator/options\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/instancetype\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/pricing\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/subnet\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/test\"\n\n\t\"sigs.k8s.io/karpenter/pkg/cloudprovider\"\n\t\"sigs.k8s.io/karpenter/pkg/utils/resources\"\n)\n\n// FakeManager is a manager that takes all the utilized calls from the operator setup\ntype FakeManager struct {\n\tmanager.Manager\n}\n\nfunc (m *FakeManager) GetClient() client.Client {\n\treturn fake.NewClientBuilder().Build()\n}\n\nfunc (m *FakeManager) GetConfig() *rest.Config {\n\treturn &rest.Config{}\n}\n\nfunc (m *FakeManager) GetFieldIndexer() client.FieldIndexer {\n\treturn &FakeFieldIndexer{}\n}\n\nfunc (m *FakeManager) Elected() <-chan struct{} {\n\treturn make(chan struct{}, 1)\n}\n\ntype FakeFieldIndexer struct{}\n\nfunc (f *FakeFieldIndexer) IndexField(_ context.Context, _ client.Object, _ string, _ client.IndexerFunc) error {\n\treturn nil\n}\n\nfunc main() {\n\tflag.Parse()\n\tif flag.NArg() != 1 {\n\t\tlog.Fatalf(\"Usage: %s path/to/markdown.md\", os.Args[0])\n\t}\n\n\tlo.Must0(os.Setenv(\"SYSTEM_NAMESPACE\", \"karpenter\"))\n\tlo.Must0(os.Setenv(\"AWS_SDK_LOAD_CONFIG\", \"true\"))\n\n\tctx := coreoptions.ToContext(context.Background(), coretest.Options(coretest.OptionsFields{\n\t\tFeatureGates: coretest.FeatureGates{ReservedCapacity: lo.ToPtr(false)},\n\t}))\n\tctx = options.ToContext(ctx, test.Options(test.OptionsFields{\n\t\tClusterName:     lo.ToPtr(\"docs-gen\"),\n\t\tClusterEndpoint: lo.ToPtr(\"https://docs-gen.aws\"),\n\t}))\n\n\toutputFileName := flag.Arg(0)\n\tf, err := os.Create(outputFileName)\n\tif err != nil {\n\t\tlog.Fatalf(\"error creating output file %s, %s\", outputFileName, err)\n\t}\n\n\tlog.Println(\"writing output to\", outputFileName)\n\tfmt.Fprintf(f, `---\ntitle: \"Instance Types\"\nlinkTitle: \"Instance Types\"\nweight: 100\n\ndescription: >\n  Evaluate Instance Type Resources\n---\n`)\n\tfmt.Fprintln(f, \"<!-- this document is generated from hack/docs/instancetypes_gen/main.go -->\")\n\tfmt.Fprintln(f, `AWS instance types offer varying resources and can be selected by labels. The values provided\nbelow are the resources available with some assumptions and after the instance overhead has been subtracted:\n- `+\"`blockDeviceMappings` are not configured\"+`\n- `+\"`amiFamily` is set to `AL2023`\")\n\n\t// generate a map of family -> map[instance type name]instance types along with some other sorted lists.  The sorted lists ensure we\n\t// generate consistent docs every run.\n\tfamilies := map[string]map[string]*cloudprovider.InstanceType{}\n\tlabelNameMap := sets.New[string]()\n\tresourceNameMap := sets.New[string]()\n\n\t// Iterate through regions and take the union of instance types we discover across both\n\tfor _, region := range []string{\"us-east-1\", \"us-east-2\", \"us-west-2\"} {\n\t\tcfg := lo.Must(config.LoadDefaultConfig(ctx, config.WithRegion(region)))\n\t\tec2api := ec2.NewFromConfig(cfg)\n\t\tsubnetProvider := subnet.NewDefaultProvider(ec2api, cache.New(awscache.DefaultTTL, awscache.DefaultCleanupInterval), cache.New(awscache.AvailableIPAddressTTL, awscache.DefaultCleanupInterval), cache.New(awscache.AssociatePublicIPAddressTTL, awscache.DefaultCleanupInterval))\n\t\tinstanceTypeProvider := instancetype.NewDefaultProvider(\n\t\t\tcache.New(awscache.InstanceTypesZonesAndOfferingsTTL, awscache.DefaultCleanupInterval),\n\t\t\tcache.New(awscache.InstanceTypesZonesAndOfferingsTTL, awscache.DefaultCleanupInterval),\n\t\t\tcache.New(awscache.DiscoveredCapacityCacheTTL, awscache.DefaultCleanupInterval),\n\t\t\tec2api,\n\t\t\tsubnetProvider,\n\t\t\tpricing.NewDefaultProvider(\n\t\t\t\tpricing.NewAPI(cfg),\n\t\t\t\tec2api,\n\t\t\t\tcfg.Region,\n\t\t\t\ttrue,\n\t\t\t),\n\t\t\tnil,\n\t\t\tawscache.NewUnavailableOfferings(),\n\t\t\tinstancetype.NewDefaultResolver(\n\t\t\t\tregion,\n\t\t\t),\n\t\t)\n\t\tif err = instanceTypeProvider.UpdateInstanceTypes(ctx); err != nil {\n\t\t\tlog.Fatalf(\"updating instance types, %s\", err)\n\t\t}\n\t\tif err = instanceTypeProvider.UpdateInstanceTypeOfferings(ctx); err != nil {\n\t\t\tlog.Fatalf(\"updating instance types offerings, %s\", err)\n\t\t}\n\t\t// Fake a NodeClass so we can use it to get InstanceTypes\n\t\tnodeClass := &v1.EC2NodeClass{\n\t\t\tSpec: v1.EC2NodeClassSpec{\n\t\t\t\tAMISelectorTerms: []v1.AMISelectorTerm{{\n\t\t\t\t\tAlias: \"al2023@latest\",\n\t\t\t\t}},\n\t\t\t\tSubnetSelectorTerms: []v1.SubnetSelectorTerm{\n\t\t\t\t\t{\n\t\t\t\t\t\tTags: map[string]string{\n\t\t\t\t\t\t\t\"*\": \"*\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}\n\t\tsubnets, err := subnetProvider.List(ctx, nodeClass)\n\t\tif err != nil {\n\t\t\tlog.Fatalf(\"listing subnets, %s\", err)\n\t\t}\n\t\tnodeClass.Status.Subnets = lo.Map(subnets, func(ec2subnet ec2types.Subnet, _ int) v1.Subnet {\n\t\t\treturn v1.Subnet{\n\t\t\t\tID:   *ec2subnet.SubnetId,\n\t\t\t\tZone: *ec2subnet.AvailabilityZone,\n\t\t\t}\n\t\t})\n\t\tinstanceTypes, err := instanceTypeProvider.List(ctx, nodeClass)\n\t\tif err != nil {\n\t\t\tlog.Fatalf(\"listing instance types, %s\", err)\n\t\t}\n\t\tfor _, it := range instanceTypes {\n\t\t\tfamilyName := strings.Split(string(it.Name), \".\")[0]\n\t\t\tif _, ok := families[familyName]; !ok {\n\t\t\t\tfamilies[familyName] = map[string]*cloudprovider.InstanceType{}\n\t\t\t}\n\t\t\tfamilies[familyName][string(it.Name)] = it\n\t\t\tfor labelName := range it.Requirements {\n\t\t\t\tlabelNameMap.Insert(labelName)\n\t\t\t}\n\t\t\tfor resourceName := range it.Capacity {\n\t\t\t\tresourceNameMap.Insert(string(resourceName))\n\t\t\t}\n\t\t}\n\t}\n\n\tfamilyNames := lo.Keys(families)\n\tsort.Strings(familyNames)\n\n\t// we don't want to show a few labels that will vary amongst regions\n\tdelete(labelNameMap, corev1.LabelTopologyZone)\n\tdelete(labelNameMap, v1.LabelTopologyZoneID)\n\tdelete(labelNameMap, karpv1.CapacityTypeLabelKey)\n\n\tlabelNames := lo.Keys(labelNameMap)\n\n\tsort.Strings(labelNames)\n\tresourceNames := lo.Keys(resourceNameMap)\n\tsort.Strings(resourceNames)\n\n\tfor _, familyName := range familyNames {\n\t\tfmt.Fprintf(f, \"## %s Family\\n\", familyName)\n\n\t\tinstanceTypes := lo.MapToSlice(families[familyName], func(_ string, it *cloudprovider.InstanceType) *cloudprovider.InstanceType { return it })\n\t\t// sort the instance types within the family, we sort by CPU and memory which should be a pretty good ordering\n\t\tsort.Slice(instanceTypes, func(a, b int) bool {\n\t\t\tlhs := instanceTypes[a]\n\t\t\trhs := instanceTypes[b]\n\t\t\tlhsResources := lhs.Capacity\n\t\t\trhsResources := rhs.Capacity\n\t\t\tif cpuCmp := resources.Cmp(*lhsResources.Cpu(), *rhsResources.Cpu()); cpuCmp != 0 {\n\t\t\t\treturn cpuCmp < 0\n\t\t\t}\n\t\t\tif memCmp := resources.Cmp(*lhsResources.Memory(), *rhsResources.Memory()); memCmp != 0 {\n\t\t\t\treturn memCmp < 0\n\t\t\t}\n\t\t\treturn lhs.Name < rhs.Name\n\t\t})\n\n\t\tfor _, it := range instanceTypes {\n\t\t\tfmt.Fprintf(f, \"### `%s`\\n\", it.Name)\n\t\t\tminusOverhead := resources.Subtract(it.Capacity, it.Overhead.Total())\n\t\t\tfmt.Fprintln(f, \"#### Labels\")\n\t\t\tfmt.Fprintln(f, \" | Label | Value |\")\n\t\t\tfmt.Fprintln(f, \" |--|--|\")\n\t\t\tfor _, label := range labelNames {\n\t\t\t\treq, ok := it.Requirements[label]\n\t\t\t\tif !ok {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif req.Key == corev1.LabelTopologyRegion {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif len(req.Values()) == 1 {\n\t\t\t\t\tfmt.Fprintf(f, \" |%s|%s|\\n\", label, req.Values()[0])\n\t\t\t\t}\n\t\t\t}\n\t\t\tfmt.Fprintln(f, \"#### Resources\")\n\t\t\tfmt.Fprintln(f, \" | Resource | Quantity |\")\n\t\t\tfmt.Fprintln(f, \" |--|--|\")\n\t\t\tfor _, resourceName := range resourceNames {\n\t\t\t\tquantity := minusOverhead[corev1.ResourceName(resourceName)]\n\t\t\t\tif quantity.IsZero() {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif corev1.ResourceName(resourceName) == corev1.ResourceEphemeralStorage {\n\t\t\t\t\ti64, _ := quantity.AsInt64()\n\t\t\t\t\tquantity = *resource.NewQuantity(i64, resource.BinarySI)\n\t\t\t\t}\n\t\t\t\tfmt.Fprintf(f, \" |%s|%s|\\n\", resourceName, quantity.String())\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "hack/docs/metrics_gen/main.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage main\n\nimport (\n\t\"flag\"\n\t\"fmt\"\n\t\"go/ast\"\n\t\"go/parser\"\n\t\"go/token\"\n\t\"io/fs\"\n\t\"log\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"slices\"\n\t\"sort\"\n\t\"strings\"\n\n\t\"github.com/awslabs/operatorpkg/serrors\"\n\t\"github.com/samber/lo\"\n\n\t\"sigs.k8s.io/karpenter/pkg/metrics\"\n)\n\ntype metricInfo struct {\n\tnamespace string\n\tsubsystem string\n\tname      string\n\thelp      string\n}\n\nvar (\n\tstableMetrics = []string{\"controller_runtime\", \"aws_sdk_go\", \"client_go\", \"leader_election\", \"interruption\", \"cluster_state\", \"workqueue\", \"karpenter_build_info\", \"karpenter_nodepool_usage\", \"karpenter_nodepool_limit\",\n\t\t\"karpenter_nodeclaims_terminated_total\", \"karpenter_nodeclaims_created_total\", \"karpenter_nodes_terminated_total\", \"karpenter_nodes_created_total\", \"karpenter_pods_startup_duration_seconds\",\n\t\t\"karpenter_scheduler_scheduling_duration_seconds\", \"karpenter_provisioner_scheduling_duration_seconds\", \"karpenter_nodepool_allowed_disruptions\", \"karpenter_voluntary_disruption_decisions_total\"}\n\tbetaMetrics = []string{\"status_condition\", \"cloudprovider\", \"cloudprovider_batcher\", \"karpenter_nodeclaims_termination_duration_seconds\", \"karpenter_nodeclaims_instance_termination_duration_seconds\",\n\t\t\"karpenter_nodes_total_pod_requests\", \"karpenter_nodes_total_pod_limits\", \"karpenter_nodes_total_daemon_requests\", \"karpenter_nodes_total_daemon_limits\", \"karpenter_nodes_termination_duration_seconds\",\n\t\t\"karpenter_nodes_system_overhead\", \"karpenter_nodes_allocatable\", \"karpenter_pods_state\", \"karpenter_scheduler_queue_depth\", \"karpenter_voluntary_disruption_queue_failures_total\",\n\t\t\"karpenter_voluntary_disruption_decision_evaluation_duration_seconds\", \"karpenter_voluntary_disruption_eligible_nodes\", \"karpenter_voluntary_disruption_consolidation_timeouts_total\"}\n)\n\nfunc (i metricInfo) qualifiedName() string {\n\treturn strings.Join(lo.Compact([]string{i.namespace, i.subsystem, i.name}), \"_\")\n}\n\n// metrics_gen_docs is used to parse the source code for Prometheus metrics and automatically generate markdown documentation\n// based on the naming and help provided in the source code.\n\nfunc main() {\n\tflag.Parse()\n\tif flag.NArg() < 2 {\n\t\tlog.Fatalf(\"Usage: %s path/to/metrics/controller path/to/metrics/controller2 path/to/markdown.md\", os.Args[0])\n\t}\n\tvar allMetrics []metricInfo\n\tfor i := 0; i < flag.NArg()-1; i++ {\n\t\tpackages := getPackages(flag.Arg(i))\n\t\tallMetrics = append(allMetrics, getMetricsFromPackages(packages...)...)\n\t}\n\n\t// Dedupe metrics\n\tallMetrics = lo.UniqBy(allMetrics, func(m metricInfo) string {\n\t\treturn fmt.Sprintf(\"%s/%s/%s\", m.namespace, m.subsystem, m.name)\n\t})\n\n\t// Drop some metrics\n\tfor _, subsystem := range []string{\"rest_client\", \"certwatcher_read\", \"controller_runtime_webhook\"} {\n\t\tallMetrics = lo.Reject(allMetrics, func(m metricInfo, _ int) bool {\n\t\t\treturn strings.HasPrefix(m.name, subsystem)\n\t\t})\n\t}\n\n\t// Controller Runtime and AWS SDK Go for Prometheus naming is different in that they don't specify a namespace or subsystem\n\t// Getting the metrics requires special parsing logic\n\tfor _, subsystem := range []string{\"controller_runtime\", \"aws_sdk_go\", \"client_go\", \"leader_election\"} {\n\t\tfor i := range allMetrics {\n\t\t\tif allMetrics[i].subsystem == \"\" && strings.HasPrefix(allMetrics[i].name, fmt.Sprintf(\"%s_\", subsystem)) {\n\t\t\t\tallMetrics[i].subsystem = subsystem\n\t\t\t\tallMetrics[i].name = strings.TrimPrefix(allMetrics[i].name, fmt.Sprintf(\"%s_\", subsystem))\n\t\t\t}\n\t\t}\n\t}\n\tsort.Slice(allMetrics, bySubsystem(allMetrics))\n\n\toutputFileName := flag.Arg(flag.NArg() - 1)\n\tf, err := os.Create(outputFileName)\n\tif err != nil {\n\t\tlog.Fatalf(\"error creating output file %s, %s\", outputFileName, err)\n\t}\n\n\tlog.Println(\"writing output to\", outputFileName)\n\tfmt.Fprintf(f, `---\ntitle: \"Metrics\"\nlinkTitle: \"Metrics\"\nweight: 7\n\ndescription: >\n  Inspect Karpenter Metrics\n---\n`)\n\tfmt.Fprintf(f, \"<!-- this document is generated from hack/docs/metrics_gen/main.go -->\\n\")\n\tfmt.Fprintf(f, \"Karpenter makes several metrics available in Prometheus format to allow monitoring cluster provisioning status. \"+\n\t\t\"These metrics are available by default at `karpenter.kube-system.svc.cluster.local:8080/metrics` configurable via the `METRICS_PORT` environment variable documented [here](../settings)\\n\")\n\tpreviousSubsystem := \"\"\n\n\tfor _, metric := range allMetrics {\n\t\tif metric.subsystem != previousSubsystem {\n\t\t\tif metric.subsystem != \"\" {\n\t\t\t\tsubsystemTitle := strings.Join(lo.Map(strings.Split(metric.subsystem, \"_\"), func(s string, _ int) string {\n\t\t\t\t\tif s == \"sdk\" || s == \"aws\" {\n\t\t\t\t\t\treturn strings.ToUpper(s)\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn fmt.Sprintf(\"%s%s\", strings.ToUpper(s[0:1]), s[1:])\n\t\t\t\t\t}\n\t\t\t\t}), \" \")\n\t\t\t\tfmt.Fprintf(f, \"## %s Metrics\\n\", subsystemTitle)\n\t\t\t\tfmt.Fprintln(f)\n\t\t\t}\n\t\t\tpreviousSubsystem = metric.subsystem\n\t\t}\n\t\tfmt.Fprintf(f, \"### `%s`\\n\", metric.qualifiedName())\n\t\tfmt.Fprintf(f, \"%s\\n\", metric.help)\n\t\tswitch {\n\t\tcase slices.Contains(stableMetrics, metric.subsystem) || slices.Contains(stableMetrics, metric.qualifiedName()):\n\t\t\tfmt.Fprintf(f, \"- Stability Level: %s\\n\", \"STABLE\")\n\t\tcase slices.Contains(betaMetrics, metric.subsystem) || slices.Contains(betaMetrics, metric.qualifiedName()):\n\t\t\tfmt.Fprintf(f, \"- Stability Level: %s\\n\", \"BETA\")\n\t\tdefault:\n\t\t\tfmt.Fprintf(f, \"- Stability Level: %s\\n\", \"ALPHA\")\n\t\t}\n\t\tfmt.Fprintln(f)\n\t}\n\n}\n\nfunc getPackages(root string) []*ast.Package {\n\tvar packages []*ast.Package\n\tfset := token.NewFileSet()\n\n\t// walk our metrics controller directory\n\tlog.Println(\"parsing code in\", root)\n\tfilepath.WalkDir(root, func(path string, d fs.DirEntry, err error) error {\n\t\tif d == nil {\n\t\t\treturn nil\n\t\t}\n\t\tif !d.IsDir() {\n\t\t\treturn nil\n\t\t}\n\t\t// parse the packagers that we find\n\t\tpkgs, err := parser.ParseDir(fset, path, func(info fs.FileInfo) bool {\n\t\t\treturn true\n\t\t}, parser.AllErrors)\n\t\tif err != nil {\n\t\t\tlog.Fatalf(\"error parsing, %s\", err)\n\t\t}\n\t\tfor _, pkg := range pkgs {\n\t\t\tif strings.HasSuffix(pkg.Name, \"_test\") {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tpackages = append(packages, pkg)\n\t\t}\n\t\treturn nil\n\t})\n\treturn packages\n}\n\nfunc getMetricsFromPackages(packages ...*ast.Package) []metricInfo {\n\t// metrics are all package global variables\n\tvar allMetrics []metricInfo\n\tfor _, pkg := range packages {\n\t\tfor _, file := range pkg.Files {\n\t\t\tfor _, decl := range file.Decls {\n\t\t\t\tswitch v := decl.(type) {\n\t\t\t\tcase *ast.FuncDecl:\n\t\t\t\t// ignore\n\t\t\t\tcase *ast.GenDecl:\n\t\t\t\t\tif v.Tok == token.VAR {\n\t\t\t\t\t\tallMetrics = append(allMetrics, handleVariableDeclaration(v)...)\n\t\t\t\t\t}\n\t\t\t\tdefault:\n\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn allMetrics\n}\n\nfunc bySubsystem(metrics []metricInfo) func(i int, j int) bool {\n\t// Higher ordering comes first. If a value isn't designated here then the subsystem will be given a default of 0.\n\t// Metrics without a subsystem come first since there is no designation for the bucket they fall under\n\tsubSystemSortOrder := map[string]int{\n\t\t\"\":                 100,\n\t\t\"nodepool\":         10,\n\t\t\"nodeclaims\":       9,\n\t\t\"nodes\":            8,\n\t\t\"pods\":             7,\n\t\t\"status_condition\": -1,\n\t\t\"workqueue\":        -1,\n\t\t\"client_go\":        -1,\n\t\t\"aws_sdk_go\":       -1,\n\t\t\"leader_election\":  -2,\n\t}\n\n\treturn func(i, j int) bool {\n\t\tlhs := metrics[i]\n\t\trhs := metrics[j]\n\t\tif subSystemSortOrder[lhs.subsystem] != subSystemSortOrder[rhs.subsystem] {\n\t\t\treturn subSystemSortOrder[lhs.subsystem] > subSystemSortOrder[rhs.subsystem]\n\t\t}\n\t\treturn lhs.qualifiedName() > rhs.qualifiedName()\n\t}\n}\n\nfunc handleVariableDeclaration(v *ast.GenDecl) []metricInfo {\n\tvar promMetrics []metricInfo\n\tfor _, spec := range v.Specs {\n\t\tvs, ok := spec.(*ast.ValueSpec)\n\t\tif !ok {\n\t\t\tcontinue\n\t\t}\n\t\tfor _, v := range vs.Values {\n\t\t\tce, ok := v.(*ast.CallExpr)\n\t\t\tif !ok {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tfuncPkg := getFuncPackage(ce.Fun)\n\t\t\tif funcPkg != \"prometheus\" {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif len(ce.Args) == 0 {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\targ := ce.Args[0].(*ast.CompositeLit)\n\t\t\tkeyValuePairs := map[string]string{}\n\t\t\tfor _, el := range arg.Elts {\n\t\t\t\tkv := el.(*ast.KeyValueExpr)\n\t\t\t\tkey := fmt.Sprintf(\"%s\", kv.Key)\n\t\t\t\tswitch key {\n\t\t\t\tcase \"Namespace\", \"Subsystem\", \"Name\", \"Help\":\n\t\t\t\tdefault:\n\t\t\t\t\t// skip any keys we don't care about\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tvalue := \"\"\n\t\t\t\tswitch val := kv.Value.(type) {\n\t\t\t\tcase *ast.BasicLit:\n\t\t\t\t\tvalue = val.Value\n\t\t\t\tcase *ast.SelectorExpr:\n\t\t\t\t\tselector := fmt.Sprintf(\"%s.%s\", val.X, val.Sel)\n\t\t\t\t\tif v, err := getIdentMapping(selector); err != nil {\n\t\t\t\t\t\tlog.Fatalf(\"unsupported selector %s, %s\", selector, err)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvalue = v\n\t\t\t\t\t}\n\t\t\t\tcase *ast.Ident:\n\t\t\t\t\tif v, err := getIdentMapping(val.String()); err != nil {\n\t\t\t\t\t\tlog.Fatal(err)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvalue = v\n\t\t\t\t\t}\n\t\t\t\tcase *ast.BinaryExpr:\n\t\t\t\t\tvalue = getBinaryExpr(val)\n\t\t\t\tdefault:\n\t\t\t\t\tlog.Fatalf(\"unsupported value %T %v\", kv.Value, kv.Value)\n\t\t\t\t}\n\t\t\t\tkeyValuePairs[key] = strings.TrimFunc(value, func(r rune) bool {\n\t\t\t\t\treturn r == '\"'\n\t\t\t\t})\n\t\t\t}\n\t\t\tpromMetrics = append(promMetrics, metricInfo{\n\t\t\t\tnamespace: keyValuePairs[\"Namespace\"],\n\t\t\t\tsubsystem: keyValuePairs[\"Subsystem\"],\n\t\t\t\tname:      keyValuePairs[\"Name\"],\n\t\t\t\thelp:      keyValuePairs[\"Help\"],\n\t\t\t})\n\t\t}\n\t}\n\treturn promMetrics\n}\n\nfunc getFuncPackage(fun ast.Expr) string {\n\tif pexpr, ok := fun.(*ast.ParenExpr); ok {\n\t\treturn getFuncPackage(pexpr.X)\n\t}\n\tif sexpr, ok := fun.(*ast.StarExpr); ok {\n\t\treturn getFuncPackage(sexpr.X)\n\t}\n\tif sel, ok := fun.(*ast.SelectorExpr); ok {\n\t\treturn fmt.Sprintf(\"%s\", sel.X)\n\t}\n\tif ident, ok := fun.(*ast.Ident); ok {\n\t\treturn ident.String()\n\t}\n\tif iexpr, ok := fun.(*ast.IndexExpr); ok {\n\t\treturn getFuncPackage(iexpr.X)\n\t}\n\tif _, ok := fun.(*ast.FuncLit); ok {\n\t\treturn \"\"\n\t}\n\tlog.Fatalf(\"unsupported func expression %T, %v\", fun, fun)\n\treturn \"\"\n}\n\nfunc getBinaryExpr(b *ast.BinaryExpr) string {\n\tvar x, y string\n\tswitch val := b.X.(type) {\n\tcase *ast.BasicLit:\n\t\tx = strings.Trim(val.Value, `\"`)\n\tcase *ast.BinaryExpr:\n\t\tx = getBinaryExpr(val)\n\tdefault:\n\t\tlog.Fatalf(\"unsupported value %T %v\", val, val)\n\t}\n\tswitch val := b.Y.(type) {\n\tcase *ast.BasicLit:\n\t\ty = strings.Trim(val.Value, `\"`)\n\tcase *ast.BinaryExpr:\n\t\ty = getBinaryExpr(val)\n\tdefault:\n\t\tlog.Fatalf(\"unsupported value %T %v\", val, val)\n\t}\n\treturn x + y\n}\n\n// we cannot get the value of an Identifier directly so we map it manually instead\nfunc getIdentMapping(identName string) (string, error) {\n\tidentMapping := map[string]string{\n\t\t\"metrics.Namespace\": metrics.Namespace,\n\t\t\"Namespace\":         metrics.Namespace,\n\n\t\t\"MetricNamespace\":            \"operator\",\n\t\t\"MetricSubsystem\":            \"status_condition\",\n\t\t\"TerminationSubsystem\":       \"termination\",\n\t\t\"WorkQueueSubsystem\":         \"workqueue\",\n\t\t\"DepthKey\":                   \"depth\",\n\t\t\"AddsKey\":                    \"adds_total\",\n\t\t\"QueueLatencyKey\":            \"queue_duration_seconds\",\n\t\t\"WorkDurationKey\":            \"work_duration_seconds\",\n\t\t\"UnfinishedWorkKey\":          \"unfinished_work_seconds\",\n\t\t\"LongestRunningProcessorKey\": \"longest_running_processor_seconds\",\n\t\t\"RetriesKey\":                 \"retries_total\",\n\n\t\t\"metrics.PodSubsystem\":       \"pods\",\n\t\t\"NodeSubsystem\":              \"nodes\",\n\t\t\"metrics.NodeSubsystem\":      \"nodes\",\n\t\t\"machineSubsystem\":           \"machines\",\n\t\t\"NodeClaimSubsystem\":         \"nodeclaims\",\n\t\t\"metrics.NodeClaimSubsystem\": \"nodeclaims\",\n\t\t// TODO @joinnis: We should eventually change this subsystem to be\n\t\t// plural so that it aligns with the other subsystems\n\t\t\"nodePoolSubsystem\":            \"nodepools\",\n\t\t\"metrics.NodePoolSubsystem\":    \"nodepools\",\n\t\t\"interruptionSubsystem\":        \"interruption\",\n\t\t\"deprovisioningSubsystem\":      \"deprovisioning\",\n\t\t\"voluntaryDisruptionSubsystem\": \"voluntary_disruption\",\n\t\t\"batcherSubsystem\":             \"cloudprovider_batcher\",\n\t\t\"cloudProviderSubsystem\":       \"cloudprovider\",\n\t\t\"stateSubsystem\":               \"cluster_state\",\n\t\t\"schedulerSubsystem\":           \"scheduler\",\n\t}\n\tif v, ok := identMapping[identName]; ok {\n\t\treturn v, nil\n\t}\n\treturn \"\", serrors.Wrap(fmt.Errorf(\"no identifier mapping exists\"), \"identifier\", identName)\n}\n"
  },
  {
    "path": "hack/docs/parse-redirects/go.mod",
    "content": "module github.com/aws/karpenter-provider-aws/hack/docs/parse-redirects\n\ngo 1.24.4\n"
  },
  {
    "path": "hack/docs/parse-redirects/main.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage main\n\nimport (\n\t\"bufio\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"log\"\n\t\"os\"\n\t\"strings\"\n)\n\ntype RedirectRule struct {\n\tSource string `json:\"source\"`\n\tTarget string `json:\"target\"`\n\tStatus string `json:\"status\"`\n}\n\nfunc getAvailableKarpenterVersions() []string {\n\t// scans the website content directory to find available for wildcard redirect expansion\n\tcontentDir := \"website/content/en\"\n\tentries, err := os.ReadDir(contentDir)\n\tif err != nil {\n\t\tlog.Fatalf(\"Error: Failed to read content directory: %v\\n\", err)\n\t}\n\tvar versions []string\n\tfor _, entry := range entries {\n\t\tif entry.IsDir() {\n\t\t\tname := entry.Name()\n\t\t\tversions = append(versions, name)\n\t\t}\n\t}\n\treturn versions\n}\n\nfunc getRule(source string, target string, versions []string) []RedirectRule {\n\tvar rules []RedirectRule\n\n\tif !strings.Contains(source, \"*\") {\n\t\treturn []RedirectRule{{\n\t\t\tSource: source,\n\t\t\tTarget: target,\n\t\t\tStatus: \"301\",\n\t\t}}\n\t}\n\n\t// Expand wildcard for each version\n\tfor _, version := range versions {\n\t\tif strings.Contains(target, version) { // ensure non-looping redirects\n\t\t\tcontinue\n\t\t}\n\t\texpandedSource := strings.ReplaceAll(source, \"*\", version)\n\t\trules = append(rules, RedirectRule{\n\t\t\tSource: expandedSource,\n\t\t\tTarget: target,\n\t\t\tStatus: \"301\",\n\t\t})\n\t}\n\n\treturn rules\n}\n\nfunc main() {\n\tredirectsFile := \"website/static/_redirects\"\n\tversions := getAvailableKarpenterVersions()\n\tfile, err := os.Open(redirectsFile)\n\tif err != nil {\n\t\tlog.Fatalf(\"Error reading %s: %v\\n\", redirectsFile, err)\n\t}\n\tdefer file.Close()\n\n\tvar rules []RedirectRule\n\tscanner := bufio.NewScanner(file)\n\tlineNum := 0\n\tfor scanner.Scan() {\n\t\tlineNum++\n\t\tline := strings.TrimSpace(scanner.Text())\n\n\t\tif line == \"\" || strings.HasPrefix(line, \"#\") {\n\t\t\tcontinue\n\t\t}\n\t\tparts := strings.Fields(line)\n\t\tif len(parts) == 2 {\n\t\t\texpandedRules := getRule(parts[0], parts[1], versions)\n\t\t\trules = append(rules, expandedRules...)\n\t\t} else {\n\t\t\tlog.Fatalf(\"Error: Invalid redirect format on line %d: %s\\n\", lineNum, line)\n\t\t}\n\t}\n\n\tif err := scanner.Err(); err != nil {\n\t\tlog.Fatalf(\"Error reading %s: %v\\n\", redirectsFile, err)\n\t}\n\trules = append(rules, RedirectRule{\n\t\tSource: \"/\",\n\t\tTarget: \"/index.html\",\n\t\tStatus: \"200\",\n\t})\n\tjsonData, err := json.Marshal(rules)\n\tif err != nil {\n\t\tlog.Fatalf(\"Error marshaling JSON: %v\\n\", err)\n\t}\n\tfmt.Println(string(jsonData))\n}\n"
  },
  {
    "path": "hack/docs/version_compatibility_gen/main.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage main\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"os\"\n\t\"strings\"\n\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/version\"\n)\n\nfunc main() {\n\tif len(os.Args) != 3 {\n\t\tlog.Fatalf(\"Usage: %s karpenter version\", os.Args[0])\n\t}\n\tif os.Args[2] == \"no tag\" {\n\t\tlog.Printf(\"No version\")\n\t\tos.Exit(0)\n\t}\n\n\tv := strings.TrimSuffix(strings.TrimPrefix(os.Args[2], \"v\"), \".0\")\n\tappendVersion := fmt.Sprintf(\n\t\t`\n  - appVersion: %s.x\n    minK8sVersion: %s\n    maxK8sVersion: %s`,\n\t\tv,\n\t\tversion.MinK8sVersion,\n\t\tversion.MaxK8sVersion)\n\n\tyamlFile, err := os.ReadFile(os.Args[1])\n\tif err != nil {\n\t\tlog.Printf(\"Can't read %s file: %v\", os.Args[1], err)\n\t\tos.Exit(1)\n\t}\n\n\tlog.Println(\"writing output to\", os.Args[1])\n\tf, err := os.Create(os.Args[1])\n\tif err != nil {\n\t\tlog.Fatalf(\"unable to open %s to write generated output: %v\", os.Args[1], err)\n\t}\n\tf.WriteString(string(yamlFile) + appendVersion)\n}\n"
  },
  {
    "path": "hack/github/community-contributors.sh",
    "content": "#!/usr/bin/env bash\nset -euo pipefail\n\nUSAGE='Usage: '.$0.' [<previous release> <latest release>]'\nTOKEN=$(gh auth token)\n\nif [ ! $# -gt 0 ]; then\n    RELEASES=$(\n        curl -s \\\n            -H \"Accept: application/vnd.github+json\" \\\n            -H \"Authorization: token $TOKEN\" \\\n            https://api.github.com/repos/aws/karpenter-provider-aws/releases\n    )\n    LATEST=$(echo $RELEASES | jq -r \".[0].tag_name\")\n    PREVIOUS=$(echo $RELEASES | jq -r \".[1].tag_name\")\nelif [ $# -eq 2 ]; then\n    PREVIOUS=$1\n    LATEST=$2\nelse\n    echo $USAGE\n    exit\nfi\n\nCOMMITS_PER_PAGE=500\nRESPONSE=$(\n    gh api \\\n        -H \"Accept: application/vnd.github+json\" \\\n        /repos/aws/karpenter-provider-aws/compare/$PREVIOUS...$LATEST?per_page=$COMMITS_PER_PAGE\n)\nTOTAL_COMMITS=$(echo $RESPONSE | jq -r \".total_commits\")\nPAGES=$(echo $((($TOTAL_COMMITS + $COMMITS_PER_PAGE - 1) / $COMMITS_PER_PAGE)))\n\nCOMMITS=\"\"\nfor i in $(seq 1 $PAGES); do\n    NEXT=$(\n        gh api \\\n            -H \"Accept: application/vnd.github+json\" \\\n            /repos/aws/karpenter-provider-aws/compare/$PREVIOUS...$LATEST?per_page=$COMMITS_PER_PAGE\\&page=$i | jq -r \".commits\"\n    )\n    COMMITS=$(jq -s 'add' <(echo \"$COMMITS\") <(echo \"$NEXT\"))\ndone\n\nCONTRIBUTIONS=$(\n    echo $COMMITS | jq -r '\n    sort_by(.commit.author.date)\n    | .[].commit\n    | {author: .author.name, message: (.message | split(\"\\n\")[0])}\n' | jq -s\n)\nNUM_CONTRIBUTIONS=$(echo $CONTRIBUTIONS | jq length)\n\nCOMMUNITY_CONTRIBUTIONS=$(\n    echo $CONTRIBUTIONS | jq -r '\n    .[]\n    | select(\n        .author != \"Ellis Tarn\" and\n        .author != \"Suket Sharma\" and\n        .author != \"Todd Neal\" and\n        .author != \"Todd\" and\n        .author != \"Nick Tran\" and\n        .author != \"Jason Deal\" and\n        .author != \"Ryan Maleki\" and\n        .author != \"Jonathan Innis\" and\n        .author != \"Amanuel Engeda\" and\n        .author != \"Brandon Wagner\" and\n        .author != \"Brandon\" and\n        .author != \"Chris Negus\" and\n        .author != \"Jim DeWaard\" and\n        .author != \"Felix Zhe Huang\" and\n        .author != \"Raghav Tripathi\" and\n        .author != \"Justin Garrison\" and\n        .author != \"Alex Kestner\" and\n        .author != \"Geoffrey Cline\" and\n        .author != \"Bill Rayburn\" and\n        .author != \"Elton\" and\n        .author != \"Prateek Gogia\" and\n        .author != \"njtran\" and\n        .author != \"dewjam\" and\n        .author != \"suket22\" and\n        .author != \"Jigisha Patil\" and\n        .author != \"jigisha620\" and\n        .author != \"nikmohan123\" and\n        .author != \"StableRelease\" and\n        .author != \"dependabot[bot]\" and\n        .author != \"github-actions[bot]\" and\n        .author != \"APICodeGen\"\n    )\n' | jq -s\n)\n\nNUM_COMMUNITY_CONTRIBUTIONS=$(echo $COMMUNITY_CONTRIBUTIONS | jq length)\n\necho \"Comparing $PREVIOUS and $LATEST\"\necho $COMMUNITY_CONTRIBUTIONS | jq\necho \"Community members contributed $NUM_COMMUNITY_CONTRIBUTIONS/$NUM_CONTRIBUTIONS ($(awk \"BEGIN {print (100*$NUM_COMMUNITY_CONTRIBUTIONS/$NUM_CONTRIBUTIONS)}\")%) commits\"\n"
  },
  {
    "path": "hack/github/count-flakes.sh",
    "content": "#!/usr/bin/env bash\n# Count test flakes in karpenter PRs using GraphQL for efficiency\n# Flake = matrix run with at least 1 failure AND at least 1 success\n\nset -euo pipefail\n\nDAYS=${1:-7}\nREPOS=(\"kubernetes-sigs/karpenter\" \"aws/karpenter-provider-aws\")\nSINCE=$(date -v-${DAYS}d +%Y-%m-%dT00:00:00Z 2>/dev/null || date -d \"$DAYS days ago\" +%Y-%m-%dT00:00:00Z)\n\nfor REPO in \"${REPOS[@]}\"; do\n    OWNER=\"${REPO%/*}\"\n    NAME=\"${REPO#*/}\"\n    echo \"=== $REPO (since ${SINCE%T*}) ===\"\n    \n    result=$(gh api graphql -f query='\n    query($owner: String!, $name: String!) {\n      repository(owner: $owner, name: $name) {\n        pullRequests(first: 50, states: [OPEN, MERGED, CLOSED], orderBy: {field: UPDATED_AT, direction: DESC}) {\n          nodes {\n            number\n            updatedAt\n            commits(last: 1) {\n              nodes {\n                commit {\n                  checkSuites(first: 5) {\n                    nodes {\n                      workflowRun { databaseId }\n                      checkRuns(first: 10) {\n                        nodes { name conclusion }\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    }' -f owner=\"$OWNER\" -f name=\"$NAME\")\n\n    flake_count=0\n    flaky_pr_count=0\n    total_prs=0\n\n    while IFS=$'\\t' read -r pr_num updated_at check_suites; do\n        [[ -z \"$pr_num\" ]] && continue\n        [[ \"$updated_at\" < \"$SINCE\" ]] && continue\n        ((total_prs++))\n        \n        flake_lines=()\n        while IFS=$'\\t' read -r run_id check_runs; do\n            [[ -z \"$run_id\" || \"$run_id\" == \"null\" ]] && continue\n            \n            failed=$(echo \"$check_runs\" | jq '[.[] | select(.name | test(\"presubmit|ci-test\"; \"i\")) | select(.conclusion == \"FAILURE\")] | length')\n            passed=$(echo \"$check_runs\" | jq '[.[] | select(.name | test(\"presubmit|ci-test\"; \"i\")) | select(.conclusion == \"SUCCESS\")] | length')\n            total=$((failed + passed))\n            \n            # Flake: at least 1 failure AND at least 1 success\n            if [[ \"$failed\" -ge 1 && \"$passed\" -ge 1 ]]; then\n                failed_names=$(echo \"$check_runs\" | jq -r '.[] | select(.name | test(\"presubmit|ci-test\"; \"i\")) | select(.conclusion == \"FAILURE\") | .name' | tr '\\n' ',' | sed 's/,$//')\n                flake_lines+=(\"    └─ [$failed/$total failed] https://github.com/$REPO/actions/runs/$run_id ($failed_names)\")\n            fi\n        done < <(echo \"$check_suites\" | jq -r '.[] | \"\\(.workflowRun.databaseId)\\t\\(.checkRuns.nodes | tojson)\"')\n        \n        if [[ ${#flake_lines[@]} -gt 0 ]]; then\n            echo \"✗ #$pr_num https://github.com/$REPO/pull/$pr_num\"\n            printf '%s\\n' \"${flake_lines[@]}\"\n            ((flaky_pr_count++))\n            ((flake_count+=${#flake_lines[@]}))\n        else\n            echo \"✓ #$pr_num https://github.com/$REPO/pull/$pr_num\"\n        fi\n    done < <(echo \"$result\" | jq -r '.data.repository.pullRequests.nodes[] | \"\\(.number)\\t\\(.updatedAt)\\t\\(.commits.nodes[0].commit.checkSuites.nodes | tojson)\"')\n\n    pct=$(awk \"BEGIN {printf \\\"%.1f\\\", ($total_prs > 0) ? $flaky_pr_count * 100 / $total_prs : 0}\")\n    echo \"Summary: $flaky_pr_count/$total_prs PRs with flakes ($pct%) ($flake_count total)\"\n    echo \"\"\ndone\n"
  },
  {
    "path": "hack/github/dependabot.sh",
    "content": "#!/usr/bin/env bash\nset -euo pipefail\n\n# This script ensures that we get all the directories that contain an \"action.yaml\" composite action\n# and make sure that we have a dependabot entry for them. Currently, dependabot doesn't support wildcarding\n# composite actions in a way that enables us to set a single entry for them. Instead, you need to grab all directories\n# that contain actions that you want to auto-update and add an entry for each one in \"dependabot.yaml\"\n# https://github.com/dependabot/dependabot-core/issues/6704\n\nDIRS=($(find .github/actions -name \"action.yaml\" -type f -print0 | xargs -0 dirname | sort))\ni=3 # Set the index to the starting index after all of the manually configured dependabot entries\nfor DIR in \"${DIRS[@]}\"; do\n  i=$i dir=$DIR yq -i '.updates[env(i)] = {\"package-ecosystem\": \"github-actions\", \"directory\": env(dir), \"schedule\": {\"interval\": \"weekly\"}, \"groups\": {\"action-deps\": {\"patterns\": [\"*\"]}}}' .github/dependabot.yaml\n  i=$((i+1))\ndone"
  },
  {
    "path": "hack/github/feature_request_reactions.py",
    "content": "#!/usr/bin/env python3\n\nimport csv\nimport os\nimport sys\nfrom operator import itemgetter\nfrom typing import Union\n\n# This script requires the python GitHub client:\n# pip install PyGithub\nfrom github import Github\nfrom github.Repository import Repository\n\nprint('Getting popular feature requests...')\n\n# To create a GitHub token, see below (the token doesn't need to include any scopes):\n# https://help.github.com/en/github/authenticating-to-github/creating-a-personal-access-token-for-the-command-line\ngithub = Github(os.environ.get('GH_TOKEN'))\n\nissue_reaction_count: list[dict[str, Union[int, str]]] = []\nPLUS_ONE_REACTION_STRINGS = ['+1', 'heart', 'hooray', 'rocket', 'eyes']\nISSUE_LABELS = ['feature']\n\nrepo: Repository = github.get_repo('aws/karpenter-provider-aws')\nopen_issues = repo.get_issues(state='open', labels=ISSUE_LABELS)\nfor issue in open_issues:\n  # count unique +1s\n  usernames: set[str] = set()\n  plus_ones = 0\n  for reaction in issue.get_reactions():\n    username = reaction.user.login\n    if reaction.content in PLUS_ONE_REACTION_STRINGS and username not in usernames:\n      usernames.add(reaction.user.login)\n      plus_ones += 1\n\n  issue_reaction_count.append({\n    'title': issue.title,\n    'url': issue.html_url,\n    'reactions': plus_ones\n  })\n\nissue_row_list = [['Title', 'Url', 'Plus Ones']]\nfor issue in sorted(issue_reaction_count, key=itemgetter('reactions'), reverse=True):\n  issue_row_list.append([\n    issue['title'],\n    issue['url'],\n    issue['reactions']\n  ])\n\n# Write CSV data to STDOUT, redirect to file to persist, e.g.\n# ./hack/feature_request_reactions.py > \"karpenter-feature-requests-$(date +\"%Y-%m-%d\").csv\"\nwriter = csv.writer(sys.stdout)\nwriter.writerows(issue_row_list)\n\nprint('Done!')\n"
  },
  {
    "path": "hack/github/label_issue_count.py",
    "content": "#!/usr/bin/env python3\n\nimport csv\nimport os\nimport sys\n\n# This script requires the python GitHub client:\n# pip install PyGithub\nfrom github import Github\nfrom github.Repository import Repository\n\nprint('Getting popular issue labels...')\n\n# To create a GitHub token, see below (the token doesn't need to include any scopes):\n# https://help.github.com/en/github/authenticating-to-github/creating-a-personal-access-token-for-the-command-line\ngithub = Github(os.environ.get('GH_TOKEN'))\n\nissue_label_counts: dict[str, int] = {}\nPLUS_ONE_REACTION_STRINGS = {'+1', 'heart', 'hooray', 'rocket', 'eyes'}\n\nrepo: Repository = github.get_repo('aws/karpenter-provider-aws')\nopen_issues = repo.get_issues(state='open')\nfor issue in open_issues:\n  for label in issue.get_labels():\n    if label.name not in issue_label_counts.keys():\n      issue_label_counts[label.name] = 1\n    else:\n      issue_label_counts[label.name] += 1\n\nlabel_row_list = [['Label', 'Issue Count']]\nfor label in sorted(issue_label_counts, key=issue_label_counts.get, reverse=True):\n  label_row_list.append([label, issue_label_counts[label]])\n\n# Write CSV data to STDOUT, redirect to file to persist, e.g.\n# ./hack/label_issue_count.py > \"karpenter-labels-$(date +\"%Y-%m-%d\").csv\"\nwriter = csv.writer(sys.stdout)\nwriter.writerows(label_row_list)\n\nprint('Done!')\n"
  },
  {
    "path": "hack/github/requirements.txt",
    "content": "PyGithub==1.55\n"
  },
  {
    "path": "hack/image_canary.sh",
    "content": "#!/usr/bin/env bash\n\nGH_REPO=\"${GH_REPO:-aws/karpenter-provider-aws}\"\nRELEASE_COUNT=\"${RELEASE_COUNT:-10}\"\n\n# Translates a git tag to the corresponding ECR tag. Starting with Karpenter v0.35.0 the leading v is dropped in the ECR tag.\nfunction getECRTag() {\n  tag=\"${1}\"\n  major=$(echo \"${tag}\" | sed -E 's/v([[:digit:]]+).*/\\1/')\n  minor=$(echo \"${tag}\" | sed -E 's/v[[:digit:]]+\\.([[:digit:]]+).*/\\1/')\n  if [ \"${major}\" -gt \"0\" ] || [ \"${minor}\" -gt \"34\" ]; then\n    tag=$(echo \"${tag}\" | tr -d 'v')\n  fi\n  echo \"${tag}\"\n}\n\n# Pull the OCI artifacts / controller images for the latest releases\nwhile IFS= read -r tag; do\n  tag=\"$(getECRTag \"${tag}\")\"\n  for artifact in \"karpenter\" \"karpenter-crd\"; do\n    if ! helm pull \"oci://public.ecr.aws/karpenter/${artifact}\" --version \"${tag}\"; then\n      printf \"failed to pull OCI artifact from ECR (artifact: %s, tag: %s)\\n\" \"${image}\" \"${tag}\"\n      exit 1\n    fi\n  done\n  if ! docker pull \"public.ecr.aws/karpenter/controller:${tag}\"; then\n    printf \"failed to pull controller image from ECR (tag: %s)\\n\" \"${tag}\"\n    exit 1\n  fi\ndone < <(gh release list --repo \"${GH_REPO}\" --json tagName -L \"${RELEASE_COUNT}\" | yq '.[].tagName')\n\n# Check that the charts.karpenter.sh repo is still working until removed\nhelm repo add karpenter https://charts.karpenter.sh/\nhelm repo update\nif ! helm pull karpenter/karpenter; then\n  printf \"failed to pull chart from charts.karpenter.sh\"\n  exit 1\nfi\n"
  },
  {
    "path": "hack/mutation/crd_annotations.sh",
    "content": "#!/usr/bin/env bash\n\n# Add additional annotations variable to the CRDS\n\nCRDS=\"charts/karpenter-crd/templates/*.yaml\"\nfor CRD in $CRDS\ndo\n  awk '{print} /  annotations:/ && !n {print \"    {{- with .Values.additionalAnnotations }}\\n      {{- toYaml . | nindent 4 }}\\n    {{- end }}\"; n++}' \"$CRD\" > \"$CRD.new\" && mv \"$CRD.new\" \"$CRD\"\ndone\n"
  },
  {
    "path": "hack/release/common.sh",
    "content": "#!/usr/bin/env bash\nset -euo pipefail\n\nECR_GALLERY_NAME=\"karpenter\"\nRELEASE_REPO_ECR=\"public.ecr.aws/${ECR_GALLERY_NAME}/\"\n\nSNAPSHOT_ECR=\"021119463062.dkr.ecr.us-east-1.amazonaws.com\"\nSNAPSHOT_REPO_ECR=\"${SNAPSHOT_ECR}/karpenter/snapshot/\"\n\nCACHED_REPO_ECR=\"${RELEASE_ACCOUNT_ID:-}.dkr.ecr.us-east-1.amazonaws.com\"\nCACHED_REPO_NAME=\"${CACHED_ECR_NAME:-}\"\n\nCURRENT_MAJOR_VERSION=\"0\"\n\nsnapshot() {\n  local commit_sha version helm_chart_version\n\n  commit_sha=\"${1}\"\n  version=\"${commit_sha}\"\n  helm_chart_version=\"${CURRENT_MAJOR_VERSION}-${commit_sha}\"\n\n  echo \"Release Type: snapshot\nRelease Version: ${version}\nCommit: ${commit_sha}\nHelm Chart Version ${helm_chart_version}\"\n\n  authenticateSnapshotRepo\n  build \"${SNAPSHOT_REPO_ECR}\" \"${version}\" \"${helm_chart_version}\" \"${commit_sha}\"\n}\n\nrelease() {\n  local commit_sha version helm_chart_version\n\n  commit_sha=\"${1}\"\n  version=\"${2}\"\n  helm_chart_version=\"${version}\"\n\n  echo \"Release Type: stable\nRelease Version: ${version}\nCommit: ${commit_sha}\nHelm Chart Version ${helm_chart_version}\"\n\n  authenticate\n  build \"${RELEASE_REPO_ECR}\" \"${version}\" \"${helm_chart_version}\" \"${commit_sha}\"\n\n  authenticateCachedRepo\n  pullImages \"${version}\"\n}\n\nauthenticate() {\n  aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin \"${RELEASE_REPO_ECR}\"\n}\n\nauthenticateCachedRepo() {\n  aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin \"${CACHED_REPO_ECR}\"\n}\n\nauthenticateSnapshotRepo() {\n  aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin \"${SNAPSHOT_ECR}\"\n}\n\nbuild() {\n  local oci_repo version helm_chart_version commit_sha date_epoch build_date img img_repo img_tag img_digest\n\n  oci_repo=\"${1}\"\n  version=\"${2}\"\n  helm_chart_version=\"${3}\"\n  commit_sha=\"${4}\"\n\n  date_epoch=\"$(dateEpoch)\"\n  build_date=\"$(buildDate \"${date_epoch}\")\"\n\n  img=\"$(GOFLAGS=${GOFLAGS:-} SOURCE_DATE_EPOCH=\"${date_epoch}\" KO_DATA_DATE_EPOCH=\"${date_epoch}\" KO_DOCKER_REPO=\"${oci_repo}\" ko publish -B -t \"${version}\" ./cmd/controller)\"\n  img_repo=\"$(echo \"${img}\" | cut -d \"@\" -f 1 | cut -d \":\" -f 1)\"\n  img_tag=\"$(echo \"${img}\" | cut -d \"@\" -f 1 | cut -d \":\" -f 2 -s)\"\n  img_digest=\"$(echo \"${img}\" | cut -d \"@\" -f 2)\"\n\n  cosignOciArtifact \"${version}\" \"${commit_sha}\" \"${build_date}\" \"${img}\"\n\n  yq e -i \".controller.image.repository = \\\"${img_repo}\\\"\" charts/karpenter/values.yaml\n  yq e -i \".controller.image.tag = \\\"${img_tag}\\\"\" charts/karpenter/values.yaml\n  yq e -i \".controller.image.digest = \\\"${img_digest}\\\"\" charts/karpenter/values.yaml\n\n  publishHelmChart \"${oci_repo}\" \"karpenter\" \"${helm_chart_version}\" \"${commit_sha}\" \"${build_date}\"\n  publishHelmChart \"${oci_repo}\" \"karpenter-crd\" \"${helm_chart_version}\" \"${commit_sha}\" \"${build_date}\"\n}\n\npublishHelmChart() {\n  local oci_repo helm_chart version commit_sha build_date ah_config_file_name helm_chart_artifact helm_chart_digest\n\n  oci_repo=\"${1}\"\n  helm_chart=\"${2}\"\n  version=\"${3}\"\n  commit_sha=\"${4}\"\n  build_date=\"${5}\"\n\n  ah_config_file_name=\"${helm_chart}/artifacthub-repo.yaml\"\n  helm_chart_artifact=\"${helm_chart}-${version}.tgz\"\n\n  yq e -i \".appVersion = \\\"${version}\\\"\" \"charts/${helm_chart}/Chart.yaml\"\n  yq e -i \".version = \\\"${version}\\\"\" \"charts/${helm_chart}/Chart.yaml\"\n\n  cd charts\n  if [[ -s \"${ah_config_file_name}\" ]] && [[ \"$oci_repo\" == \"${RELEASE_REPO_ECR}\" ]]; then\n    # ECR requires us to create an empty config file for an alternative\n    # media type artifact push rather than /dev/null\n    # https://github.com/aws/containers-roadmap/issues/1074\n    temp=$(mktemp)\n    echo {} > \"${temp}\"\n    oras push \"${oci_repo}${helm_chart}:artifacthub.io\" --config \"${temp}:application/vnd.cncf.artifacthub.config.v1+yaml\" \"${ah_config_file_name}:application/vnd.cncf.artifacthub.repository-metadata.layer.v1.yaml\"\n  fi\n  helm dependency update \"${helm_chart}\"\n  helm lint \"${helm_chart}\"\n  helm package \"${helm_chart}\" --version \"${version}\"\n  helm push \"${helm_chart_artifact}\" \"oci://${oci_repo}\"\n  rm \"${helm_chart_artifact}\"\n  cd ..\n\n  helm_chart_digest=\"$(crane digest \"${oci_repo}/${helm_chart}:${version}\")\"\n  cosignOciArtifact \"${version}\" \"${commit_sha}\" \"${build_date}\" \"${oci_repo}${helm_chart}:${version}@${helm_chart_digest}\"\n}\n\ncosignOciArtifact() {\n  local version commit_sha build_date artifact\n\n  version=\"${1}\"\n  commit_sha=\"${2}\"\n  build_date=\"${3}\"\n  artifact=\"${4}\"\n\n  cosign sign --yes -a version=\"${version}\" -a commitSha=\"${commit_sha}\" -a buildDate=\"${build_date}\" \"${artifact}\"\n}\n\ndateEpoch() {\n  git log -1 --format='%ct'\n}\n\nbuildDate() {\n  local date_epoch\n\n  date_epoch=\"${1}\"\n\n  date -u --date=\"@${date_epoch}\" \"+%Y-%m-%dT%H:%M:%SZ\" 2>/dev/null\n}\n\npullImages() {\n  local tag=\"${1}\"\n\n  docker pull \"${CACHED_REPO_ECR}\"/\"${CACHED_REPO_NAME}\"/controller:\"${tag}\"\n}\n\nprepareWebsite() {\n  local version version_parts short_version\n\n  version=\"${1}\"\n  # shellcheck disable=SC2206\n  version_parts=(${version//./ })\n  short_version=\"${version_parts[0]}.${version_parts[1]}\"\n\n  createNewWebsiteDirectory \"${short_version}\" \"${version}\"\n  removeOldWebsiteDirectories\n  editWebsiteConfig \"${version}\"\n  editWebsiteVersionsMenu\n}\n\ncreateNewWebsiteDirectory() {\n  local short_version version\n\n  short_version=\"${1}\"\n  version=\"${2}\"\n\n  mkdir -p \"website/content/en/v${short_version}\"\n  cp -r website/content/en/preview/* \"website/content/en/v${short_version}/\"\n\n  # Update parameterized variables in the preview documentation to be statically set in the versioned documentation\n  # shellcheck disable=SC2038\n  find \"website/content/en/v${short_version}/\" -type f -print | xargs perl -i -p -e \"s/{{< param \\\"latest_release_version\\\" >}}/${version}/g;\"\n  # shellcheck disable=SC2038\n  find \"website/content/en/v${short_version}/\" -type f | xargs perl -i -p -e \"s/{{< param \\\"latest_k8s_version\\\" >}}/$(yq .params.latest_k8s_version website/hugo.yaml)/g;\"\n  # shellcheck disable=SC2038\n  find \"website/content/en/v${short_version}/\"*/*/*.yaml -type f | xargs perl -i -p -e \"s/preview/v${short_version}/g;\"\n  # shellcheck disable=SC2038\n  find \"website/content/en/v${short_version}/\" -type f | xargs perl -i -p -e \"s/{{< githubRelRef >}}/\\/v${version}\\//g;\"\n\n  rm -rf website/content/en/docs\n  mkdir -p website/content/en/docs\n  cp -r \"website/content/en/v${short_version}/\"* website/content/en/docs/\n}\n\nremoveOldWebsiteDirectories() {\n  local n=3 last_n_versions all\n\n  # Get all the directories except the last n directories sorted from earliest to latest version\n  # preview, docs, and v1.0 are special directories that we always propagate into the set of directory options\n  # Keep the v1.0 version around while we are supporting v1beta1 migration\n  # Drop it once we no longer want to maintain the v1.00 version in the docs\n  last_n_versions=$(find website/content/en/* -maxdepth 0 -type d -name \"*\" | grep -v \"preview\\|docs\\|v1.0\" | sort | tail -n \"${n}\")\n  last_n_versions+=$(echo -e \"\\nwebsite/content/en/preview\")\n  last_n_versions+=$(echo -e \"\\nwebsite/content/en/docs\")\n  last_n_versions+=$(echo -e \"\\nwebsite/content/en/v1.0\")\n  all=$(find website/content/en/* -maxdepth 0 -type d -name \"*\")\n\n  ## symmetric difference\n  # shellcheck disable=SC2086\n  comm -3 <(sort <<< ${last_n_versions}) <(sort <<< ${all}) | tr -d '\\t' | xargs -r -n 1 rm -r\n}\n\neditWebsiteConfig() {\n  local version=\"${1}\"\n\n  yq -i \".params.latest_release_version = \\\"${version}\\\"\" website/hugo.yaml\n}\n\n# editWebsiteVersionsMenu sets relevant releases in the version dropdown menu of the website\n# without increasing the size of the set.\n# It uses the current version directories (ignoring the docs directory) to generate this list\neditWebsiteVersionsMenu() {\n  local versions version\n\n  # shellcheck disable=SC2207\n  versions=($(find website/content/en/* -maxdepth 0 -type d -name \"*\" -print0 | xargs -0 -r -n 1 basename | grep -v \"docs\\|preview\" | sort -r))\n  versions+=('preview')\n\n  yq -i '.params.versions = []' website/hugo.yaml\n\n  for version in \"${versions[@]}\"; do\n    yq -i \".params.versions += \\\"${version}\\\"\" website/hugo.yaml\n  done\n}\n"
  },
  {
    "path": "hack/release/prepare-website.sh",
    "content": "#!/usr/bin/env bash\nset -euo pipefail\n\nSCRIPT_DIR=\"$(cd -- \"$(dirname -- \"${BASH_SOURCE[0]}\")\" &>/dev/null && pwd)\"\n# shellcheck source=hack/release/common.sh\nsource \"${SCRIPT_DIR}/common.sh\"\n\ngit_tag=\"${GIT_TAG:-$(git describe --exact-match --tags || echo \"none\")}\"\nif [[ \"${git_tag}\" != v* ]]; then\n  echo \"Not a stable release. Missing required git tag.\"\n  exit 1\nfi\necho \"RenderingPrep website files for ${git_tag}\"\n\nprepareWebsite \"${git_tag#v}\"\n"
  },
  {
    "path": "hack/release/release.sh",
    "content": "#!/usr/bin/env bash\nset -euo pipefail\n\nSCRIPT_DIR=\"$(cd -- \"$(dirname -- \"${BASH_SOURCE[0]}\")\" &>/dev/null && pwd)\"\n# shellcheck source=hack/release/common.sh\nsource \"${SCRIPT_DIR}/common.sh\"\n\ngit_tag=\"$(git describe --exact-match --tags || echo \"no tag\")\"\nif [[ \"${git_tag}\" == \"no tag\" ]]; then\n  echo \"Failed to release: commit is untagged\"\n  exit 1\nfi\ncommit_sha=\"$(git rev-parse HEAD)\"\n\n# Don't release with a dirty commit!\nif [[ \"$(git status --porcelain)\" != \"\" ]]; then\n  exit 1\nfi\n\nrelease \"${commit_sha}\" \"${git_tag#v}\"\n"
  },
  {
    "path": "hack/release/snapshot.sh",
    "content": "#!/usr/bin/env bash\nset -euo pipefail\n\nSCRIPT_DIR=\"$(cd -- \"$(dirname -- \"${BASH_SOURCE[0]}\")\" &>/dev/null && pwd)\"\n# shellcheck source=hack/release/common.sh\nsource \"${SCRIPT_DIR}/common.sh\"\n\ncommit_sha=\"$(git rev-parse HEAD)\"\n\n# Don't release with a dirty commit!\nif [[ \"$(git status --porcelain)\" != \"\" ]]; then\n  exit 1\nfi\n\nsnapshot \"${commit_sha}\"\n"
  },
  {
    "path": "hack/release/stable-pr.sh",
    "content": "#!/usr/bin/env bash\nset -euo pipefail\n\nSCRIPT_DIR=\"$(cd -- \"$(dirname -- \"${BASH_SOURCE[0]}\")\" &>/dev/null && pwd)\"\n# shellcheck source=hack/release/common.sh\nsource \"${SCRIPT_DIR}/common.sh\"\n\ngit_tag=\"$(git describe --exact-match --tags || echo \"none\")\"\nif [[ \"${git_tag}\" != v* ]]; then\n  echo \"Not a stable release. Missing required git tag.\"\n  exit 1\nfi\n\ngit config user.name \"StableRelease\"\ngit config user.email \"StableRelease@users.noreply.github.com\"\ngit remote set-url origin \"https://x-access-token:${GITHUB_TOKEN}@github.com/${GITHUB_REPO}\"\ngit config pull.rebase false\n\nbranch_name=\"release-${git_tag}\"\ngit checkout -b \"${branch_name}\"\ngit add go.mod\ngit add go.sum\ngit add hack/docs\ngit add website\ngit add charts/karpenter-crd/Chart.yaml\ngit add charts/karpenter/Chart.yaml\ngit add charts/karpenter/Chart.lock\ngit add charts/karpenter/values.yaml\ngit add charts/karpenter/README.md\ngit commit -m \"Stable Release updates Release ${git_tag}.\"\ngit push --set-upstream origin \"${branch_name}\"\n"
  },
  {
    "path": "hack/toolchain.sh",
    "content": "#!/usr/bin/env bash\nset -euo pipefail\n\nK8S_VERSION=\"${K8S_VERSION:=\"1.34.x\"}\"\nKUBEBUILDER_ASSETS=\"${KUBEBUILDER_ASSETS:-/usr/local/kubebuilder/bin}\"\n\n\nmain() {\n    tools\n    kubebuilder\n}\n\ntools() {\n    go install github.com/google/go-licenses@latest\n    # asciicheck is a dependency of golangci-lint that got removed so golangci changed their go.mod to use the forked version\n    # fix - https://github.com/golangci/golangci-lint/issues/6017\n    # change to latest once golangci releases new version with the fix\n    go install github.com/golangci/golangci-lint/v2/cmd/golangci-lint@main\n    go install github.com/google/ko@latest\n    go install github.com/mikefarah/yq/v4@latest\n    go install github.com/norwoodj/helm-docs/cmd/helm-docs@latest\n    go install sigs.k8s.io/controller-runtime/tools/setup-envtest@b9bccfd419149d26d14130887a5e5819e4a3b2be\n    go install sigs.k8s.io/controller-tools/cmd/controller-gen@latest\n    go install github.com/sigstore/cosign/v2/cmd/cosign@latest\n    go install -tags extended github.com/gohugoio/hugo@v0.110.0\n    go install golang.org/x/vuln/cmd/govulncheck@latest\n    go install github.com/onsi/ginkgo/v2/ginkgo@latest\n    go install github.com/rhysd/actionlint/cmd/actionlint@latest\n    go install github.com/mattn/goveralls@latest\n    go install github.com/google/go-containerregistry/cmd/crane@latest\n    go install oras.land/oras/cmd/oras@v1.2.3 # Pin to this version since the latest version requires go 1.25\n\n    if ! echo \"$PATH\" | grep -q \"${GOPATH:-undefined}/bin\\|$HOME/go/bin\"; then\n        echo \"Go workspace's \\\"bin\\\" directory is not in PATH. Run 'export PATH=\\\"\\$PATH:\\${GOPATH:-\\$HOME/go}/bin\\\"'.\"\n    fi\n}\n\nkubebuilder() {\n    if ! mkdir -p ${KUBEBUILDER_ASSETS}; then\n      sudo mkdir -p ${KUBEBUILDER_ASSETS}\n      sudo chown $(whoami) ${KUBEBUILDER_ASSETS}\n    fi\n    arch=$(go env GOARCH)\n    ln -sf $(setup-envtest use -p path \"${K8S_VERSION}\" --arch=\"${arch}\" --bin-dir=\"${KUBEBUILDER_ASSETS}\")/* ${KUBEBUILDER_ASSETS}\n    find $KUBEBUILDER_ASSETS\n}\n\nmain \"$@\"\n"
  },
  {
    "path": "hack/tools/allocatable_diff/README.md",
    "content": "# Allocatable Diff Tool\n\nThe allocatable diff tool iterates through your list of currently deployed nodes and compares them to Karpenter's expectation of the capacity and allocatable on these nodes. It outputs a CSV file that can be used for further analysis to compare the values like expected capacity and allocatable capacity to determine values like vmMemoryOverheadPercent in the AWS cloudprovider.\n\n## Usage\n\n```bash\nexport CLUSTER_NAME=karpenter-demo\n./allocatable-diff --cluster-name=$CLUSTER_NAME --out-file=allocatable-diff.csv\n```"
  },
  {
    "path": "hack/tools/allocatable_diff/main.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage main\n\nimport (\n\t\"context\"\n\t\"encoding/csv\"\n\t\"flag\"\n\t\"fmt\"\n\t\"log\"\n\t\"os\"\n\t\"sort\"\n\n\t\"github.com/samber/lo\"\n\tv1 \"k8s.io/api/core/v1\"\n\t\"k8s.io/client-go/kubernetes\"\n\t\"sigs.k8s.io/controller-runtime/pkg/client\"\n\t\"sigs.k8s.io/controller-runtime/pkg/client/config\"\n\t\"sigs.k8s.io/controller-runtime/pkg/manager\"\n\n\tcorecloudprovider \"sigs.k8s.io/karpenter/pkg/cloudprovider\"\n\tcoreoperator \"sigs.k8s.io/karpenter/pkg/operator\"\n\n\t\"github.com/aws/karpenter-provider-aws/pkg/cloudprovider\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/operator\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/operator/options\"\n)\n\nvar clusterName string\nvar outFile string\nvar overheadPercent float64\n\nfunc init() {\n\tflag.StringVar(&clusterName, \"cluster-name\", \"\", \"cluster name to use when passing subnets into GetInstanceTypes()\")\n\tflag.StringVar(&outFile, \"out-file\", \"allocatable-diff.csv\", \"file to output the generated data\")\n\tflag.Float64Var(&overheadPercent, \"overhead-percent\", 0, \"overhead percentage to use for calculations\")\n\tflag.Parse()\n}\n\nfunc main() {\n\tif clusterName == \"\" {\n\t\tlog.Fatalf(\"cluster name cannot be empty\")\n\t}\n\trestConfig := config.GetConfigOrDie()\n\tkubeClient := lo.Must(client.New(restConfig, client.Options{}))\n\tctx := context.Background()\n\tctx = options.ToContext(ctx, &options.Options{ClusterName: clusterName, IsolatedVPC: true, VMMemoryOverheadPercent: overheadPercent})\n\n\tfile := lo.Must(os.OpenFile(outFile, os.O_RDWR|os.O_CREATE, 0777))\n\tdefer file.Close()\n\n\tw := csv.NewWriter(file)\n\tdefer w.Flush()\n\n\tnodeList := &v1.NodeList{}\n\tlo.Must0(kubeClient.List(ctx, nodeList))\n\n\tctx, op := operator.NewOperator(ctx, &coreoperator.Operator{\n\t\tManager:             lo.Must(manager.New(restConfig, manager.Options{})),\n\t\tKubernetesInterface: kubernetes.NewForConfigOrDie(restConfig),\n\t})\n\tcloudProvider := cloudprovider.New(\n\t\top.InstanceTypesProvider,\n\t\top.InstanceProvider,\n\t\top.EventRecorder,\n\t\top.GetClient(),\n\t\top.AMIProvider,\n\t\top.SecurityGroupProvider,\n\t\top.CapacityReservationProvider,\n\t\top.InstanceTypeStore,\n\t)\n\tinstanceTypes := lo.Must(cloudProvider.GetInstanceTypes(ctx, nil))\n\n\t// Write the header information into the CSV\n\tlo.Must0(w.Write([]string{\"Instance Type\", \"Expected Capacity\", \"\", \"\", \"Expected Allocatable\", \"\", \"\", \"Actual Capacity\", \"\", \"\", \"Actual Allocatable\", \"\"}))\n\tlo.Must0(w.Write([]string{\"\", \"Memory (Mi)\", \"CPU (m)\", \"Storage (Mi)\", \"Memory (Mi)\", \"CPU (m)\", \"Storage (Mi)\", \"Memory (Mi)\", \"CPU (m)\", \"Storage (Mi)\", \"Memory (Mi)\", \"CPU (m)\", \"Storage (Mi)\"}))\n\n\tnodeList.Items = lo.Filter(nodeList.Items, func(n v1.Node, _ int) bool {\n\t\treturn n.Labels[\"karpenter.sh/provisioner-name\"] != \"\" && n.Status.Allocatable.Memory().Value() != 0\n\t})\n\tsort.Slice(nodeList.Items, func(i, j int) bool {\n\t\treturn nodeList.Items[i].Labels[v1.LabelInstanceTypeStable] < nodeList.Items[j].Labels[v1.LabelInstanceTypeStable]\n\t})\n\tfor _, node := range nodeList.Items {\n\t\tinstanceType, ok := lo.Find(instanceTypes, func(i *corecloudprovider.InstanceType) bool {\n\t\t\treturn i.Name == node.Labels[v1.LabelInstanceTypeStable]\n\t\t})\n\t\tif !ok {\n\t\t\tlog.Fatalf(\"retrieving instance type for instance %s\", node.Labels[v1.LabelInstanceTypeStable])\n\t\t}\n\t\tallocatable := instanceType.Allocatable()\n\n\t\t// Write the details of the expected instance and the actual instance into a CSV line format\n\t\tlo.Must0(w.Write([]string{\n\t\t\tstring(instanceType.Name),\n\t\t\tfmt.Sprintf(\"%d\", instanceType.Capacity.Memory().Value()/1024/1024),\n\t\t\tfmt.Sprintf(\"%d\", instanceType.Capacity.Cpu().MilliValue()),\n\t\t\tfmt.Sprintf(\"%d\", instanceType.Capacity.StorageEphemeral().Value()/1024/1024),\n\t\t\tfmt.Sprintf(\"%d\", allocatable.Memory().Value()/1024/1024),\n\t\t\tfmt.Sprintf(\"%d\", allocatable.Cpu().MilliValue()),\n\t\t\tfmt.Sprintf(\"%d\", allocatable.StorageEphemeral().Value()/1024/1024),\n\t\t\tfmt.Sprintf(\"%d\", node.Status.Capacity.Memory().Value()/1024/1024),\n\t\t\tfmt.Sprintf(\"%d\", node.Status.Capacity.Cpu().MilliValue()),\n\t\t\tfmt.Sprintf(\"%d\", node.Status.Capacity.StorageEphemeral().Value()/1024/1024),\n\t\t\tfmt.Sprintf(\"%d\", node.Status.Allocatable.Memory().Value()/1024/1024),\n\t\t\tfmt.Sprintf(\"%d\", node.Status.Allocatable.Cpu().MilliValue()),\n\t\t\tfmt.Sprintf(\"%d\", node.Status.Allocatable.StorageEphemeral().Value()/1024/1024),\n\t\t}))\n\t}\n}\n"
  },
  {
    "path": "hack/tools/launchtemplate_counter/main.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage main\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"log\"\n\t\"os\"\n\n\t\"github.com/aws/aws-sdk-go-v2/config\"\n\t\"github.com/aws/aws-sdk-go-v2/service/ec2\"\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\t\"github.com/patrickmn/go-cache\"\n\t\"github.com/samber/lo\"\n\tcorev1 \"k8s.io/api/core/v1\"\n\tkarpv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n\t\"sigs.k8s.io/karpenter/pkg/cloudprovider\"\n\tcoreoptions \"sigs.k8s.io/karpenter/pkg/operator/options\"\n\t\"sigs.k8s.io/karpenter/pkg/scheduling\"\n\tcoretest \"sigs.k8s.io/karpenter/pkg/test\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\tawscache \"github.com/aws/karpenter-provider-aws/pkg/cache\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/operator/options\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/amifamily\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/instancetype\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/pricing\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/subnet\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/test\"\n)\n\nfunc main() {\n\tlo.Must0(os.Setenv(\"AWS_SDK_LOAD_CONFIG\", \"true\"))\n\n\tctx := coreoptions.ToContext(context.Background(), coretest.Options(coretest.OptionsFields{\n\t\tFeatureGates: coretest.FeatureGates{ReservedCapacity: lo.ToPtr(false)},\n\t}))\n\tctx = options.ToContext(ctx, test.Options(test.OptionsFields{\n\t\tClusterName:     lo.ToPtr(\"docs-gen\"),\n\t\tClusterEndpoint: lo.ToPtr(\"https://docs-gen.aws\"),\n\t}))\n\n\tregion := \"us-west-2\"\n\tcfg := lo.Must(config.LoadDefaultConfig(ctx, config.WithRegion(region)))\n\tec2api := ec2.NewFromConfig(cfg)\n\tsubnetProvider := subnet.NewDefaultProvider(ec2api, cache.New(awscache.DefaultTTL, awscache.DefaultCleanupInterval), cache.New(awscache.AvailableIPAddressTTL, awscache.DefaultCleanupInterval), cache.New(awscache.AssociatePublicIPAddressTTL, awscache.DefaultCleanupInterval))\n\tinstanceTypeProvider := instancetype.NewDefaultProvider(\n\t\tcache.New(awscache.InstanceTypesZonesAndOfferingsTTL, awscache.DefaultCleanupInterval),\n\t\tcache.New(awscache.InstanceTypesZonesAndOfferingsTTL, awscache.DefaultCleanupInterval),\n\t\tcache.New(awscache.DiscoveredCapacityCacheTTL, awscache.DefaultCleanupInterval),\n\t\tec2api,\n\t\tsubnetProvider,\n\t\tpricing.NewDefaultProvider(\n\t\t\tpricing.NewAPI(cfg),\n\t\t\tec2api,\n\t\t\tcfg.Region,\n\t\t\ttrue,\n\t\t),\n\t\tnil,\n\t\tawscache.NewUnavailableOfferings(),\n\t\tinstancetype.NewDefaultResolver(\n\t\t\tregion,\n\t\t),\n\t)\n\tif err := instanceTypeProvider.UpdateInstanceTypes(ctx); err != nil {\n\t\tlog.Fatalf(\"updating instance types, %s\", err)\n\t}\n\tif err := instanceTypeProvider.UpdateInstanceTypeOfferings(ctx); err != nil {\n\t\tlog.Fatalf(\"updating instance types offerings, %s\", err)\n\t}\n\t// Fake a NodeClass, so we can use it to get InstanceTypes\n\tnodeClass := &v1.EC2NodeClass{\n\t\tSpec: v1.EC2NodeClassSpec{\n\t\t\tAMISelectorTerms: []v1.AMISelectorTerm{{\n\t\t\t\tAlias: \"al2023@latest\",\n\t\t\t}},\n\t\t\tSubnetSelectorTerms: []v1.SubnetSelectorTerm{\n\t\t\t\t{\n\t\t\t\t\tTags: map[string]string{\n\t\t\t\t\t\t\"*\": \"*\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\tsubnets, err := subnetProvider.List(ctx, nodeClass)\n\tif err != nil {\n\t\tlog.Fatalf(\"listing subnets, %s\", err)\n\t}\n\tnodeClass.Status.Subnets = lo.Map(subnets, func(ec2subnet ec2types.Subnet, _ int) v1.Subnet {\n\t\treturn v1.Subnet{\n\t\t\tID:   *ec2subnet.SubnetId,\n\t\t\tZone: *ec2subnet.AvailabilityZone,\n\t\t}\n\t})\n\tnodeClass.Status.AMIs = []v1.AMI{\n\t\t{\n\t\t\tID:   coretest.RandomName(),\n\t\t\tName: coretest.RandomName(),\n\t\t\tRequirements: []corev1.NodeSelectorRequirement{\n\t\t\t\t{\n\t\t\t\t\tKey:      corev1.LabelArchStable,\n\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\tValues:   []string{karpv1.ArchitectureAmd64},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tID:   coretest.RandomName(),\n\t\t\tName: coretest.RandomName(),\n\t\t\tRequirements: []corev1.NodeSelectorRequirement{\n\t\t\t\t{\n\t\t\t\t\tKey:      corev1.LabelArchStable,\n\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\tValues:   []string{karpv1.ArchitectureArm64},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\tinstanceTypes := lo.Must(instanceTypeProvider.List(ctx, nodeClass))\n\n\t// See how many launch templates we get by constraining our instance types to just be \"c\", \"m\", and \"r\"\n\treqs := scheduling.NewRequirements(scheduling.NewRequirement(v1.LabelInstanceCategory, corev1.NodeSelectorOpIn, \"c\", \"m\", \"r\"))\n\tinstanceTypes = lo.Filter(instanceTypes, func(it *cloudprovider.InstanceType, _ int) bool {\n\t\treturn it.Requirements.Compatible(reqs) == nil\n\t})\n\tfmt.Printf(\"Got %d instance types after filtering\\n\", len(instanceTypes))\n\n\tresolver := amifamily.NewDefaultResolver(region)\n\tlaunchTemplates, err := resolver.Resolve(nodeClass, &karpv1.NodeClaim{}, lo.Slice(instanceTypes, 0, 60), karpv1.CapacityTypeOnDemand, string(ec2types.TenancyDefault), &amifamily.Options{InstanceStorePolicy: lo.ToPtr(v1.InstanceStorePolicyRAID0)})\n\n\tif err != nil {\n\t\tlog.Fatalf(\"resolving launchTemplates, %s\", err)\n\t}\n\tfmt.Printf(\"Got %d launch templates back from the resolver\\n\", len(launchTemplates))\n}\n"
  },
  {
    "path": "hack/validation/kubelet.sh",
    "content": "# Kubelet Validation \n\n# The regular expression adds validation for kubelet.kubeReserved and kubelet.systemReserved values of the map are resource.Quantity\n# Quantity: https://github.com/kubernetes/apimachinery/blob/d82afe1e363acae0e8c0953b1bc230d65fdb50e2/pkg/api/resource/quantity.go#L100\n# EC2NodeClass Validation:\nyq eval '.spec.versions[0].schema.openAPIV3Schema.properties.spec.properties.kubelet.properties.kubeReserved.additionalProperties.pattern = \"^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$\"' -i pkg/apis/crds/karpenter.k8s.aws_ec2nodeclasses.yaml\nyq eval '.spec.versions[0].schema.openAPIV3Schema.properties.spec.properties.kubelet.properties.systemReserved.additionalProperties.pattern = \"^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$\"' -i pkg/apis/crds/karpenter.k8s.aws_ec2nodeclasses.yaml \n\n# The regular expression is a validation for kubelet.evictionHard and kubelet.evictionSoft are percentage or a resource.Quantity\n# Quantity: https://github.com/kubernetes/apimachinery/blob/d82afe1e363acae0e8c0953b1bc230d65fdb50e2/pkg/api/resource/quantity.go#L100\n# EC2NodeClass Validation:\nyq eval '.spec.versions[0].schema.openAPIV3Schema.properties.spec.properties.kubelet.properties.evictionHard.additionalProperties.pattern = \"^((\\d{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)%||(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?)$\"' -i pkg/apis/crds/karpenter.k8s.aws_ec2nodeclasses.yaml \nyq eval '.spec.versions[0].schema.openAPIV3Schema.properties.spec.properties.kubelet.properties.evictionSoft.additionalProperties.pattern = \"^((\\d{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)%||(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?)$\"' -i pkg/apis/crds/karpenter.k8s.aws_ec2nodeclasses.yaml \n"
  },
  {
    "path": "hack/validation/labels.sh",
    "content": "# Labels Validation\n\nfunction injectDomainLabelRestrictions() {\n    domain=$1\n\trule=\"self.all(x, x in [\\\"${domain}/instance-tenancy\\\", \\\"${domain}/capacity-reservation-type\\\", \\\"${domain}/capacity-reservation-id\\\", \\\"${domain}/capacity-reservation-interruptible\\\", \\\"${domain}/ec2nodeclass\\\", \\\"${domain}/instance-encryption-in-transit-supported\\\", \\\"${domain}/instance-category\\\", \\\"${domain}/instance-hypervisor\\\", \\\"${domain}/instance-family\\\", \\\"${domain}/instance-generation\\\", \\\"${domain}/instance-local-nvme\\\", \\\"${domain}/instance-size\\\", \\\"${domain}/instance-cpu\\\", \\\"${domain}/instance-cpu-manufacturer\\\", \\\"${domain}/instance-cpu-sustained-clock-speed-mhz\\\", \\\"${domain}/instance-memory\\\", \\\"${domain}/instance-ebs-bandwidth\\\", \\\"${domain}/instance-network-bandwidth\\\", \\\"${domain}/instance-gpu-name\\\", \\\"${domain}/instance-gpu-manufacturer\\\", \\\"${domain}/instance-gpu-count\\\", \\\"${domain}/instance-gpu-memory\\\", \\\"${domain}/instance-accelerator-name\\\", \\\"${domain}/instance-accelerator-manufacturer\\\", \\\"${domain}/instance-accelerator-count\\\", \\\"${domain}/instance-capability-flex\\\"] || !x.find(\\\"^([^/]+)\\\").endsWith(\\\"${domain}\\\"))\"\n    message=\"label domain \\\"${domain}\\\" is restricted\"\n    MSG=\"${message}\" RULE=\"${rule}\" yq eval '.spec.versions[0].schema.openAPIV3Schema.properties.spec.properties.template.properties.metadata.properties.labels.x-kubernetes-validations += [{\"message\": strenv(MSG), \"rule\": strenv(RULE)}]' -i pkg/apis/crds/karpenter.sh_nodepools.yaml\n}\n"
  },
  {
    "path": "hack/validation/requirements.sh",
    "content": "# Requirements Validation\n\nfunction injectDomainRequirementRestrictions() {\n    domain=$1\n    rule=\"self in [\\\"${domain}/instance-tenancy\\\", \\\"${domain}/capacity-reservation-type\\\", \\\"${domain}/capacity-reservation-id\\\", \\\"${domain}/capacity-reservation-interruptible\\\", \\\"${domain}/ec2nodeclass\\\", \\\"${domain}/instance-encryption-in-transit-supported\\\", \\\"${domain}/instance-category\\\", \\\"${domain}/instance-hypervisor\\\", \\\"${domain}/instance-family\\\", \\\"${domain}/instance-generation\\\", \\\"${domain}/instance-local-nvme\\\", \\\"${domain}/instance-size\\\", \\\"${domain}/instance-cpu\\\", \\\"${domain}/instance-cpu-manufacturer\\\", \\\"${domain}/instance-cpu-sustained-clock-speed-mhz\\\", \\\"${domain}/instance-memory\\\", \\\"${domain}/instance-ebs-bandwidth\\\", \\\"${domain}/instance-network-bandwidth\\\", \\\"${domain}/instance-gpu-name\\\", \\\"${domain}/instance-gpu-manufacturer\\\", \\\"${domain}/instance-gpu-count\\\", \\\"${domain}/instance-gpu-memory\\\", \\\"${domain}/instance-accelerator-name\\\", \\\"${domain}/instance-accelerator-manufacturer\\\", \\\"${domain}/instance-accelerator-count\\\", \\\"${domain}/instance-capability-flex\\\"] || !self.find(\\\"^([^/]+)\\\").endsWith(\\\"${domain}\\\")\"\n    message=\"label domain \\\"${domain}\\\" is restricted\"\n    MSG=\"${message}\" RULE=\"${rule}\" yq eval '.spec.versions[0].schema.openAPIV3Schema.properties.spec.properties.requirements.items.properties.key.x-kubernetes-validations += [{\"message\": strenv(MSG), \"rule\": strenv(RULE)}]' -i pkg/apis/crds/karpenter.sh_nodeclaims.yaml\n    MSG=\"${message}\" RULE=\"${rule}\" yq eval '.spec.versions[0].schema.openAPIV3Schema.properties.spec.properties.template.properties.spec.properties.requirements.items.properties.key.x-kubernetes-validations += [{\"message\": strenv(MSG), \"rule\": strenv(RULE)}]' -i pkg/apis/crds/karpenter.sh_nodepools.yaml\n    # Drop the capacity-reservation labels, since node overlays will not support that label\n    rule=\"self in [\\\"${domain}/ec2nodeclass\\\", \\\"${domain}/instance-encryption-in-transit-supported\\\", \\\"${domain}/instance-category\\\", \\\"${domain}/instance-hypervisor\\\", \\\"${domain}/instance-family\\\", \\\"${domain}/instance-generation\\\", \\\"${domain}/instance-local-nvme\\\", \\\"${domain}/instance-size\\\", \\\"${domain}/instance-cpu\\\", \\\"${domain}/instance-cpu-manufacturer\\\", \\\"${domain}/instance-cpu-sustained-clock-speed-mhz\\\", \\\"${domain}/instance-memory\\\", \\\"${domain}/instance-ebs-bandwidth\\\", \\\"${domain}/instance-network-bandwidth\\\", \\\"${domain}/instance-gpu-name\\\", \\\"${domain}/instance-gpu-manufacturer\\\", \\\"${domain}/instance-gpu-count\\\", \\\"${domain}/instance-gpu-memory\\\", \\\"${domain}/instance-accelerator-name\\\", \\\"${domain}/instance-accelerator-manufacturer\\\", \\\"${domain}/instance-accelerator-count\\\", \\\"${domain}/instance-capability-flex\\\"] || !self.find(\\\"^([^/]+)\\\").endsWith(\\\"${domain}\\\")\"\n    MSG=\"${message}\" RULE=\"${rule}\" yq eval '.spec.versions[0].schema.openAPIV3Schema.properties.spec.properties.requirements.items.properties.key.x-kubernetes-validations += [{\"message\": strenv(MSG), \"rule\": strenv(RULE)}]' -i pkg/apis/crds/karpenter.sh_nodeoverlays.yaml\n}\n"
  },
  {
    "path": "kwok/Makefile",
    "content": "KARPENTER_NAMESPACE ?= kube-system\nKO_DOCKER_REPO ?= ${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_DEFAULT_REGION}.amazonaws.com/kwok-karpenter\nCPU_RESOURCES ?= \"2\"\nMEMORY_RESOURCES ?= \"4Gi\"\n\n## Extra helm options\nCLUSTER_NAME ?= $(shell kubectl config view --minify -o jsonpath='{.clusters[].name}' | rev | cut -d\"/\" -f1 | rev | cut -d\".\" -f1)\nCLUSTER_ENDPOINT ?= $(shell kubectl config view --minify -o jsonpath='{.clusters[].cluster.server}')\nAWS_ACCOUNT_ID ?= $(shell aws sts get-caller-identity --query Account --output text)\nKARPENTER_IAM_ROLE_ARN ?= arn:aws:iam::${AWS_ACCOUNT_ID}:role/${CLUSTER_NAME}-karpenter\nHELM_OPTS ?= --set serviceAccount.annotations.eks\\\\.amazonaws\\\\.com/role-arn=${KARPENTER_IAM_ROLE_ARN} \\\n      \t\t--set settings.clusterName=${CLUSTER_NAME} \\\n\t\t\t--set settings.interruptionQueue=${CLUSTER_NAME} \\\n\t\t\t--set controller.resources.requests.cpu=${CPU_RESOURCES} \\\n\t\t\t--set controller.resources.requests.memory=${MEMORY_RESOURCES} \\\n\t\t\t--set controller.resources.limits.cpu=${CPU_RESOURCES} \\\n\t\t\t--set controller.resources.limits.memory=${MEMORY_RESOURCES} \\\n\t\t\t--set settings.featureGates.nodeRepair=true \\\n\t\t\t--set settings.featureGates.reservedCapacity=true \\\n\t\t\t--set settings.featureGates.spotToSpotConsolidation=true \\\n\t\t\t--set settings.preferencePolicy=Ignore \\\n\t\t\t--create-namespace\n\nKARPENTER_CORE_DIR = $(shell go list -m -f '{{ .Dir }}' sigs.k8s.io/karpenter)\n\n.PHONY: image\nimage: ## Build the KWOK controller images using ko build\n\t$(eval CONTROLLER_IMG=$(shell KOCACHE=$(KOCACHE) KO_DOCKER_REPO=\"$(KO_DOCKER_REPO)\" ko build --bare github.com/aws/karpenter-provider-aws/kwok))\n\t$(eval IMG_REPOSITORY=$(shell echo $(CONTROLLER_IMG) | cut -d \"@\" -f 1 | cut -d \":\" -f 1))\n\t$(eval IMG_TAG=$(shell echo $(CONTROLLER_IMG) | cut -d \"@\" -f 1 | cut -d \":\" -f 2 -s))\n\t$(eval IMG_DIGEST=$(shell echo $(CONTROLLER_IMG) | cut -d \"@\" -f 2))\n\n.PHONY: apply\napply: image\n\tkubectl apply -f ../pkg/apis/crds/\n\tKARPENTER_NAMESPACE=$(KARPENTER_NAMESPACE) envsubst < ./manifests/clusterrole.yaml | kubectl apply -f -\n\thelm upgrade --install kwok-karpenter ../charts/karpenter --namespace ${KARPENTER_NAMESPACE} \\\n        $(HELM_OPTS) \\\n        --set logLevel=debug \\\n        --set controller.image.repository=$(IMG_REPOSITORY) \\\n        --set controller.image.tag=$(IMG_TAG) \\\n        --set controller.image.digest=$(IMG_DIGEST) \\\n        --set-string controller.env[0].name=ENABLE_PROFILING \\\n        --set-string controller.env[0].value=true\n\n.PHONY: delete\ndelete:\n\thelm uninstall karpenter --namespace ${KARPENTER_NAMESPACE}\n\n.PHONY: apply-kwok\napply-kwok:\n\tchmod +x $(KARPENTER_CORE_DIR)/hack/install-kwok.sh\n\tUNINSTALL_KWOK=false $(KARPENTER_CORE_DIR)/hack/install-kwok.sh\n\n.PHONY: delete-kwok\ndelete-kwok:\n\tchmod +x $(KARPENTER_CORE_DIR)/hack/install-kwok.sh\n\tUNINSTALL_KWOK=true $(KARPENTER_CORE_DIR)/hack/install-kwok.sh\n\n"
  },
  {
    "path": "kwok/README.md",
    "content": "# AWS KWOK Provider\n\nBefore using the aws kwok provider, make sure that you don't have an installed version of Karpenter in your cluster.\n\n## Requirements\n- Have an image repository that you can build, push, and pull images from.\n    - For an example on how to set up an image repository refer to [karpenter.sh](https://karpenter.sh/docs/contributing/development-guide/#environment-specific-setup)\n- Have a cluster that you can install Karpenter on to.\n    - For an example on how to make a cluster in AWS, refer to [karpenter.sh](https://karpenter.sh/docs/getting-started/getting-started-with-karpenter/)\n\nIf you use a kind cluster, please set the the following environment variables:\n```bash\nexport KO_DOCKER_REPO=kind.local\nexport KIND_CLUSTER_NAME=<kind cluster name, for example, chart-testing>\n```\n\n## Installing\n```bash\nmake apply-kwok\nmake apply # Run this command again to redeploy if the code has changed\n```\n\n## Create a NodePool\n\nOnce kwok is installed and Karpenter successfully applies to the cluster, you should now be able to create a NodePool.\n\n```bash\nexport CLUSTER_NAME=<cluster-name>\n\ncat <<EOF | envsubst | kubectl apply -f -\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\nspec:\n  template:\n    spec:\n      requirements:\n        - key: kubernetes.io/arch\n          operator: In\n          values: [\"amd64\"]\n        - key: kubernetes.io/os\n          operator: In\n          values: [\"linux\"]\n        - key: karpenter.sh/capacity-type\n          operator: In\n          values: [\"on-demand\"]\n        - key: karpenter.k8s.aws/instance-category\n          operator: In\n          values: [\"c\", \"m\", \"r\"]\n        - key: karpenter.k8s.aws/instance-generation\n          operator: Gt\n          values: [\"2\"]\n      nodeClassRef:\n        group: karpenter.k8s.aws\n        kind: EC2NodeClass\n        name: default\n      expireAfter: 720h # 30 * 24h = 720h\n  limits:\n    cpu: 1000\n  disruption:\n    consolidationPolicy: WhenEmptyOrUnderutilized\n    consolidateAfter: 1m\n---\napiVersion: karpenter.k8s.aws/v1\nkind: EC2NodeClass\nmetadata:\n  name: default\nspec:\n  role: \"KarpenterNodeRole-${CLUSTER_NAME}\" # replace with your cluster name\n  amiSelectorTerms:\n    - alias: \"al2023@latest\"\n  subnetSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\" # replace with your cluster name\n  securityGroupSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\" # replace with your cluster name\nEOF\n```\n\n## Taint the existing nodes\n\n```bash\nkubectl taint nodes <existing node name> CriticalAddonsOnly:NoSchedule\n```\nAfter doing this, you can create a deployment to test node scaling with kwok provider.\n\n## Uninstalling\n```bash\nmake delete\nmake delete-kwok\n```\n"
  },
  {
    "path": "kwok/cloudprovider/cloudprovider.go",
    "content": "// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage cloudprovider\n\nimport (\n\t\"context\"\n\t\"strings\"\n\n\t\"sigs.k8s.io/controller-runtime/pkg/client\"\n\tkarpv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n\t\"sigs.k8s.io/karpenter/pkg/controllers/nodeoverlay\"\n\t\"sigs.k8s.io/karpenter/pkg/events\"\n\n\t\"github.com/aws/karpenter-provider-aws/pkg/cloudprovider\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/amifamily\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/capacityreservation\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/instance\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/instancetype\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/securitygroup\"\n)\n\ntype CloudProvider struct {\n\t*cloudprovider.CloudProvider\n}\n\nfunc New(\n\tinstanceTypeProvider instancetype.Provider,\n\tinstanceProvider instance.Provider,\n\trecorder events.Recorder,\n\tkubeClient client.Client,\n\tamiProvider amifamily.Provider,\n\tsecurityGroupProvider securitygroup.Provider,\n\tcapacityReservationProvider capacityreservation.Provider,\n\tinstanceTypeStore *nodeoverlay.InstanceTypeStore,\n) *CloudProvider {\n\treturn &CloudProvider{\n\t\tCloudProvider: cloudprovider.New(\n\t\t\tinstanceTypeProvider,\n\t\t\tinstanceProvider,\n\t\t\trecorder,\n\t\t\tkubeClient,\n\t\t\tamiProvider,\n\t\t\tsecurityGroupProvider,\n\t\t\tcapacityReservationProvider,\n\t\t\tinstanceTypeStore,\n\t\t),\n\t}\n}\n\nfunc (c *CloudProvider) Create(ctx context.Context, nodeClaim *karpv1.NodeClaim) (*karpv1.NodeClaim, error) {\n\tout, err := c.CloudProvider.Create(ctx, nodeClaim)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tout.Status.ProviderID = strings.Replace(out.Status.ProviderID, \"aws\", \"kwok-aws\", 1)\n\treturn out, nil\n}\n\nfunc (c *CloudProvider) List(ctx context.Context) ([]*karpv1.NodeClaim, error) {\n\tout, err := c.CloudProvider.List(ctx)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tfor _, elem := range out {\n\t\telem.Status.ProviderID = strings.Replace(elem.Status.ProviderID, \"aws\", \"kwok-aws\", 1)\n\t}\n\treturn out, nil\n}\n\nfunc (c *CloudProvider) Get(ctx context.Context, providerID string) (*karpv1.NodeClaim, error) {\n\telem, err := c.CloudProvider.Get(ctx, providerID)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\telem.Status.ProviderID = strings.Replace(elem.Status.ProviderID, \"aws\", \"kwok-aws\", 1)\n\treturn elem, nil\n}\n"
  },
  {
    "path": "kwok/ec2/ec2.go",
    "content": "// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage ec2\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"math\"\n\t\"math/rand\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n\t\"time\"\n\n\t\"github.com/Pallinder/go-randomdata\"\n\t\"github.com/aws/aws-sdk-go-v2/aws\"\n\t\"github.com/aws/aws-sdk-go-v2/service/ec2\"\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\t\"github.com/aws/smithy-go\"\n\t\"github.com/docker/docker/pkg/namesgenerator\"\n\t\"github.com/samber/lo\"\n\t\"go.uber.org/multierr\"\n\tcorev1 \"k8s.io/api/core/v1\"\n\t\"k8s.io/apimachinery/pkg/api/equality\"\n\tmetav1 \"k8s.io/apimachinery/pkg/apis/meta/v1\"\n\t\"k8s.io/client-go/util/retry\"\n\t\"k8s.io/client-go/util/workqueue\"\n\t\"k8s.io/klog/v2\"\n\t\"k8s.io/utils/clock\"\n\t\"k8s.io/utils/set\"\n\t\"sigs.k8s.io/controller-runtime/pkg/client\"\n\t\"sigs.k8s.io/controller-runtime/pkg/log\"\n\t\"sigs.k8s.io/karpenter/kwok/apis/v1alpha1\"\n\tv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n\n\tk8serrors \"k8s.io/apimachinery/pkg/api/errors\"\n\n\t\"github.com/aws/karpenter-provider-aws/kwok/strategy\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/errors\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/instancetype\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/utils\"\n)\n\ntype Client struct {\n\tec2.Client\n\trateLimiterProvider RateLimiterProvider\n\tkubeClient          client.Client\n\tclock               clock.Clock\n\n\tregion        string\n\tnamespace     string\n\tinstanceTypes []ec2types.InstanceTypeInfo\n\tsubnets       []ec2types.Subnet\n\tstrategy      strategy.Strategy\n\n\tinstances             sync.Map\n\tinstanceLaunchCancels sync.Map\n\n\treadBackupCompleted chan struct{}\n\n\tlaunchTemplates        sync.Map\n\tlaunchTemplateNameToID sync.Map\n}\n\nfunc NewClient(region, namespace string, ec2Client *ec2.Client, rateLimiterProvider RateLimiterProvider, strategy strategy.Strategy, kubeClient client.Client, clk clock.Clock) *Client {\n\tvar instanceTypes []ec2types.InstanceTypeInfo\n\tinstanceTypesPaginator := ec2.NewDescribeInstanceTypesPaginator(ec2Client, &ec2.DescribeInstanceTypesInput{\n\t\tMaxResults: aws.Int32(100),\n\t})\n\tfor instanceTypesPaginator.HasMorePages() {\n\t\toutput := lo.Must(instanceTypesPaginator.NextPage(context.Background()))\n\t\tinstanceTypes = append(instanceTypes, output.InstanceTypes...)\n\t}\n\tvar subnets []ec2types.Subnet\n\tsubnetsPaginator := ec2.NewDescribeSubnetsPaginator(ec2Client, &ec2.DescribeSubnetsInput{\n\t\tMaxResults: aws.Int32(100),\n\t})\n\tfor subnetsPaginator.HasMorePages() {\n\t\toutput := lo.Must(subnetsPaginator.NextPage(context.Background()))\n\t\tsubnets = append(subnets, output.Subnets...)\n\t}\n\n\tc := &Client{\n\t\tClient:              *ec2Client,\n\t\trateLimiterProvider: rateLimiterProvider,\n\t\tkubeClient:          kubeClient,\n\t\tclock:               clk,\n\n\t\tregion:        region,\n\t\tnamespace:     namespace,\n\t\tinstanceTypes: instanceTypes,\n\t\tsubnets:       subnets,\n\t\tstrategy:      strategy,\n\n\t\tinstances:             sync.Map{},\n\t\tinstanceLaunchCancels: sync.Map{},\n\n\t\treadBackupCompleted: make(chan struct{}),\n\n\t\tlaunchTemplates:        sync.Map{},\n\t\tlaunchTemplateNameToID: sync.Map{},\n\t}\n\treturn c\n}\n\nfunc (c *Client) ReadBackup(ctx context.Context) {\n\tconfigMaps := &corev1.ConfigMapList{}\n\tlo.Must0(c.kubeClient.List(ctx, configMaps, client.InNamespace(c.namespace)))\n\n\tnodeList := &corev1.NodeList{}\n\tlo.Must0(c.kubeClient.List(ctx, nodeList, client.MatchingLabels{v1alpha1.KwokLabelKey: v1alpha1.KwokLabelValue}))\n\n\tinstanceIDs := set.New[string](lo.Map(nodeList.Items, func(n corev1.Node, _ int) string { return lo.Must(utils.ParseInstanceID(n.Spec.ProviderID)) })...)\n\n\tconfigMaps.Items = lo.Filter(configMaps.Items, func(c corev1.ConfigMap, _ int) bool {\n\t\treturn strings.Contains(c.Name, \"kwok-aws-instances-\")\n\t})\n\ttotal := 0\n\tfor _, cm := range configMaps.Items {\n\t\tif cm.Data[\"instances\"] != \"\" {\n\t\t\tvar instances []ec2types.Instance\n\t\t\tlo.Must0(json.Unmarshal([]byte(cm.Data[\"instances\"]), &instances))\n\t\t\tfor _, instance := range instances {\n\t\t\t\tc.instances.Store(lo.FromPtr(instance.InstanceId), instance)\n\t\t\t\t// Register nodes immediately if we killed the KWOK controller before actually registering the node\n\t\t\t\tif !instanceIDs.Has(lo.FromPtr(instance.InstanceId)) {\n\t\t\t\t\tlog.FromContext(ctx).WithValues(\"instance-id\", lo.FromPtr(instance.InstanceId)).Info(\"creating node for instance id\")\n\t\t\t\t\tlo.Must0(c.kubeClient.Create(ctx, c.toNode(ctx, instance)))\n\t\t\t\t}\n\t\t\t}\n\t\t\ttotal += len(instances)\n\t\t}\n\t}\n\tlog.FromContext(ctx).WithValues(\"count\", total).Info(\"loaded instances from backup\")\n\tclose(c.readBackupCompleted)\n}\n\n//nolint:gocyclo\nfunc (c *Client) backupInstances(ctx context.Context) error {\n\tvar instances []ec2types.Instance\n\tc.instances.Range(func(k, v any) bool {\n\t\tinstances = append(instances, v.(ec2types.Instance))\n\t\treturn true\n\t})\n\tsort.Slice(instances, func(i, j int) bool {\n\t\treturn lo.FromPtr(instances[i].LaunchTime).Before(lo.FromPtr(instances[j].LaunchTime))\n\t})\n\n\t// TODO: We could consider reducing memory consumption by using nextTokens and continue\n\tconfigMaps := &corev1.ConfigMapList{}\n\tif err := c.kubeClient.List(ctx, configMaps, client.InNamespace(c.namespace)); err != nil {\n\t\treturn fmt.Errorf(\"listing configmaps, %w\", err)\n\t}\n\tconfigMaps.Items = lo.Filter(configMaps.Items, func(c corev1.ConfigMap, _ int) bool {\n\t\treturn strings.Contains(c.Name, \"kwok-aws-instances-\")\n\t})\n\t// Sort all the ConfigMaps by their numerical value\n\t// This ensures that we delete the higher numerical ConfigMaps first\n\tsort.SliceStable(configMaps.Items, func(i, j int) bool {\n\t\trawI := strings.Split(configMaps.Items[i].Name, \"kwok-aws-instances-\")\n\t\tif len(rawI) != 2 {\n\t\t\treturn false\n\t\t}\n\t\trawJ := strings.Split(configMaps.Items[j].Name, \"kwok-aws-instances-\")\n\t\tif len(rawJ) != 2 {\n\t\t\treturn false\n\t\t}\n\t\tiNum, err := strconv.Atoi(rawI[1])\n\t\tif err != nil {\n\t\t\treturn false\n\t\t}\n\t\tjNum, err := strconv.Atoi(rawJ[1])\n\t\tif err != nil {\n\t\t\treturn false\n\t\t}\n\t\treturn iNum < jNum\n\t})\n\t// Clean-up any ConfigMaps that don't need to be there because of the count\n\t// We store 500 instances per ConfigMap\n\tnumConfigMaps := int(math.Ceil(float64(len(instances)) / float64(500)))\n\tif numConfigMaps < len(configMaps.Items) {\n\t\terrs := make([]error, numConfigMaps)\n\t\tworkqueue.ParallelizeUntil(ctx, len(configMaps.Items)-numConfigMaps, len(configMaps.Items)-numConfigMaps, func(i int) {\n\t\t\tif err := c.kubeClient.Delete(ctx, &configMaps.Items[len(configMaps.Items)-i-1]); client.IgnoreNotFound(err) != nil {\n\t\t\t\terrs[i] = fmt.Errorf(\"deleting configmap %q, %w\", configMaps.Items[len(configMaps.Items)-i-1].Name, err)\n\t\t\t}\n\t\t})\n\t\tif err := multierr.Combine(errs...); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\terrs := make([]error, numConfigMaps)\n\tworkqueue.ParallelizeUntil(ctx, numConfigMaps, numConfigMaps, func(i int) {\n\t\tcm := &corev1.ConfigMap{\n\t\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\t\tName:      fmt.Sprintf(\"kwok-aws-instances-%d\", i),\n\t\t\t\tNamespace: c.namespace,\n\t\t\t},\n\t\t}\n\t\tif err := c.kubeClient.Get(ctx, client.ObjectKeyFromObject(cm), cm); err != nil {\n\t\t\tif k8serrors.IsNotFound(err) {\n\t\t\t\tif err = c.kubeClient.Create(ctx, cm); err != nil {\n\t\t\t\t\terrs[i] = fmt.Errorf(\"creating configmap %q, %w\", cm.Name, err)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\terrs[i] = fmt.Errorf(\"getting configmap %q, %w\", cm.Name, err)\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t\tstored := cm.DeepCopy()\n\t\t//nolint:gosec\n\t\tcm.Data = map[string]string{\"instances\": string(removeNullFields(lo.Must(json.Marshal(lo.Slice(instances, i*500, (i+1)*500)))))}\n\t\tif !equality.Semantic.DeepEqual(cm, stored) {\n\t\t\tif err := c.kubeClient.Patch(ctx, cm, client.MergeFrom(stored)); err != nil {\n\t\t\t\terrs[i] = fmt.Errorf(\"patching configmap %q, %w\", cm.Name, err)\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t})\n\treturn multierr.Combine(errs...)\n}\n\n// StartBackupThread initiates the thread that is responsible for storing instances in ConfigMaps on the cluster\nfunc (c *Client) StartBackupThread(ctx context.Context) {\n\t<-c.readBackupCompleted\n\tfor {\n\t\tif err := c.backupInstances(ctx); err != nil {\n\t\t\tlog.FromContext(ctx).Error(err, \"unable to backup instances\")\n\t\t\tcontinue\n\t\t}\n\t\tselect {\n\t\tcase <-time.After(time.Second):\n\t\tcase <-ctx.Done():\n\t\t\treturn\n\t\t}\n\t}\n}\n\n// StartKillNodeThread initiates the thread that is responsible for killing nodes on the cluster that no longer have an instance representation (similar to CCM)\nfunc (c *Client) StartKillNodeThread(ctx context.Context) {\n\t<-c.readBackupCompleted\n\tfor {\n\t\tnodes := &corev1.NodeList{}\n\t\tif err := c.kubeClient.List(ctx, nodes, client.MatchingLabels{v1alpha1.KwokLabelKey: v1alpha1.KwokLabelValue}); err != nil {\n\t\t\tlog.FromContext(ctx).Error(err, \"unable to list nodes\")\n\t\t\tcontinue\n\t\t}\n\t\tfor _, node := range nodes.Items {\n\t\t\tid, err := utils.ParseInstanceID(node.Spec.ProviderID)\n\t\t\tif err != nil {\n\t\t\t\tlog.FromContext(ctx).WithValues(\"Node\", klog.KObj(&node)).Error(err, \"unable to parse instance id\")\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif _, ok := c.instances.Load(id); !ok && node.DeletionTimestamp.IsZero() {\n\t\t\t\tif err = c.kubeClient.Delete(ctx, &node); client.IgnoreNotFound(err) != nil {\n\t\t\t\t\tlog.FromContext(ctx).WithValues(\"Node\", klog.KObj(&node)).Error(err, \"unable to delete due to gone instance\")\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tselect {\n\t\tcase <-time.After(time.Second * 5):\n\t\tcase <-ctx.Done():\n\t\t\treturn\n\t\t}\n\t}\n}\n\nfunc removeNullFields(bytes []byte) []byte {\n\tvar mapSlice []map[string]any\n\tlo.Must0(json.Unmarshal(bytes, &mapSlice))\n\tfor _, elem := range mapSlice {\n\t\tfor k, v := range elem {\n\t\t\tif v == nil {\n\t\t\t\tdelete(elem, k)\n\t\t\t}\n\t\t}\n\t}\n\treturn lo.Must(json.Marshal(mapSlice))\n}\n\n//nolint:gocyclo\nfunc (c *Client) DescribeLaunchTemplates(_ context.Context, input *ec2.DescribeLaunchTemplatesInput, _ ...func(*ec2.Options)) (*ec2.DescribeLaunchTemplatesOutput, error) {\n\t<-c.readBackupCompleted\n\tif !c.rateLimiterProvider.DescribeLaunchTemplates().TryAccept() {\n\t\treturn nil, &smithy.GenericAPIError{\n\t\t\tCode:    errors.RateLimitingErrorCode,\n\t\t\tMessage: \"Request limit exceeded.\",\n\t\t}\n\t}\n\t// TODO: Eventually do more rigorous validations and auth checks for dry-run\n\tif lo.FromPtr(input.DryRun) {\n\t\treturn nil, &smithy.GenericAPIError{\n\t\t\tCode:    errors.DryRunOperationErrorCode,\n\t\t\tMessage: \"Request would have succeeded, but DryRun flag is set\",\n\t\t}\n\t}\n\n\tout := &ec2.DescribeLaunchTemplatesOutput{}\n\tids := input.LaunchTemplateIds\n\tfor _, name := range input.LaunchTemplateNames {\n\t\traw, ok := c.launchTemplateNameToID.Load(name)\n\t\tif !ok {\n\t\t\treturn nil, &smithy.GenericAPIError{\n\t\t\t\tCode:    \"InvalidLaunchTemplateName.NotFoundException\",\n\t\t\t\tMessage: \"At least one of the launch templates specified in the request does not exist\",\n\t\t\t}\n\t\t}\n\t\tids = append(ids, raw.(string))\n\t}\n\n\tfor _, id := range ids {\n\t\traw, ok := c.launchTemplates.Load(id)\n\t\tif !ok {\n\t\t\treturn nil, &smithy.GenericAPIError{\n\t\t\t\tCode:    \"InvalidLaunchTemplateId.NotFoundException\",\n\t\t\t\tMessage: \"At least one of the launch templates specified in the request does not exist\",\n\t\t\t}\n\t\t}\n\t\tlt := raw.(lo.Tuple2[*ec2types.LaunchTemplate, *ec2types.RequestLaunchTemplateData])\n\t\tout.LaunchTemplates = append(out.LaunchTemplates, *lt.A)\n\t}\n\n\tfor _, filter := range input.Filters {\n\t\tswitch lo.FromPtr(filter.Name) {\n\t\tcase \"create-time\":\n\t\t\tc.launchTemplates.Range(func(k, v any) bool {\n\t\t\t\tlt := v.(lo.Tuple2[*ec2types.LaunchTemplate, *ec2types.RequestLaunchTemplateData])\n\t\t\t\tfor _, value := range filter.Values {\n\t\t\t\t\tif lo.FromPtr(lt.A.CreateTime).Equal(lo.Must(time.Parse(time.RFC3339, value))) {\n\t\t\t\t\t\tout.LaunchTemplates = append(out.LaunchTemplates, *lt.A)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn true\n\t\t\t})\n\t\tcase \"launch-template-name\":\n\t\t\tc.launchTemplates.Range(func(k, v any) bool {\n\t\t\t\tlt := v.(lo.Tuple2[*ec2types.LaunchTemplate, *ec2types.RequestLaunchTemplateData])\n\t\t\t\tfor _, value := range filter.Values {\n\t\t\t\t\tif lo.FromPtr(lt.A.LaunchTemplateName) == value {\n\t\t\t\t\t\tout.LaunchTemplates = append(out.LaunchTemplates, *lt.A)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn true\n\t\t\t})\n\t\tcase \"tag-key\":\n\t\t\tc.launchTemplates.Range(func(k, v any) bool {\n\t\t\t\tlt := v.(lo.Tuple2[*ec2types.LaunchTemplate, *ec2types.RequestLaunchTemplateData])\n\t\t\t\tfor _, value := range filter.Values {\n\t\t\t\t\tfor _, t := range lt.A.Tags {\n\t\t\t\t\t\tif value == lo.FromPtr(t.Key) {\n\t\t\t\t\t\t\tout.LaunchTemplates = append(out.LaunchTemplates, *lt.A)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn true\n\t\t\t})\n\t\tdefault:\n\t\t\t// This looks for a tag with a specific value\n\t\t\tif strings.Contains(lo.FromPtr(filter.Name), \"tag:\") {\n\t\t\t\tkey := strings.Split(lo.FromPtr(filter.Name), \"tag:\")[1]\n\t\t\t\tc.launchTemplates.Range(func(k, v any) bool {\n\t\t\t\t\tlt := v.(lo.Tuple2[*ec2types.LaunchTemplate, *ec2types.RequestLaunchTemplateData])\n\t\t\t\t\tfor _, value := range filter.Values {\n\t\t\t\t\t\tfor _, t := range lt.A.Tags {\n\t\t\t\t\t\t\tif key == lo.FromPtr(t.Key) && value == lo.FromPtr(t.Value) {\n\t\t\t\t\t\t\t\tout.LaunchTemplates = append(out.LaunchTemplates, *lt.A)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn true\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t}\n\treturn out, nil\n}\n\n//nolint:gocyclo\nfunc (c *Client) CreateFleet(ctx context.Context, input *ec2.CreateFleetInput, _ ...func(*ec2.Options)) (*ec2.CreateFleetOutput, error) {\n\t<-c.readBackupCompleted\n\tif !c.rateLimiterProvider.CreateFleet().TryAccept() {\n\t\treturn nil, &smithy.GenericAPIError{\n\t\t\tCode:    errors.RateLimitingErrorCode,\n\t\t\tMessage: \"Request limit exceeded.\",\n\t\t}\n\t}\n\t// TODO: Eventually do more rigorous validations and auth checks for dry-run\n\tif lo.FromPtr(input.DryRun) {\n\t\treturn nil, &smithy.GenericAPIError{\n\t\t\tCode:    errors.DryRunOperationErrorCode,\n\t\t\tMessage: \"Request would have succeeded, but DryRun flag is set\",\n\t\t}\n\t}\n\tif input.TargetCapacitySpecification == nil {\n\t\treturn nil, fmt.Errorf(\"target capacity specification is required\")\n\t}\n\n\tvar fleetInstances []ec2types.CreateFleetInstance\n\tfor range lo.FromPtr(input.TargetCapacitySpecification.TotalTargetCapacity) {\n\t\tltConfig := input.LaunchTemplateConfigs[0]\n\t\tltID := lo.FromPtr(ltConfig.LaunchTemplateSpecification.LaunchTemplateId)\n\t\tif ltConfig.LaunchTemplateSpecification.LaunchTemplateName != nil {\n\t\t\traw, ok := c.launchTemplateNameToID.Load(lo.FromPtr(ltConfig.LaunchTemplateSpecification.LaunchTemplateName))\n\t\t\tif !ok {\n\t\t\t\t// TODO: Eventually we should make this a real NotFound error returned by the AWS API\n\t\t\t\treturn nil, fmt.Errorf(\"launch template not found\")\n\t\t\t}\n\t\t\tltID = raw.(string)\n\t\t}\n\t\traw, ok := c.launchTemplates.Load(ltID)\n\t\tif !ok {\n\t\t\t// TODO: Eventually we should make this a real NotFound error returned by the AWS API\n\t\t\treturn nil, fmt.Errorf(\"launch template not found\")\n\t\t}\n\t\tlt := raw.(lo.Tuple2[*ec2types.LaunchTemplate, *ec2types.RequestLaunchTemplateData])\n\n\t\tselectedOverride := lo.MinBy(ltConfig.Overrides, func(a, b ec2types.FleetLaunchTemplateOverridesRequest) bool {\n\t\t\tvar capacityType string\n\t\t\tswitch input.TargetCapacitySpecification.DefaultTargetCapacityType {\n\t\t\tcase ec2types.DefaultTargetCapacityTypeSpot:\n\t\t\t\tcapacityType = v1.CapacityTypeSpot\n\t\t\tcase ec2types.DefaultTargetCapacityTypeOnDemand:\n\t\t\t\tcapacityType = v1.CapacityTypeOnDemand\n\t\t\tdefault:\n\t\t\t\tpanic(fmt.Sprintf(\"unknown target capacity type: %v\", input.TargetCapacitySpecification.DefaultTargetCapacityType))\n\t\t\t}\n\n\t\t\tvar aScore, bScore float64\n\t\t\tif subnet, subnetOk := lo.Find(c.subnets, func(s ec2types.Subnet) bool {\n\t\t\t\treturn lo.FromPtr(s.SubnetId) == lo.FromPtr(a.SubnetId)\n\t\t\t}); subnetOk {\n\t\t\t\taScore = c.strategy.GetScore(string(a.InstanceType), capacityType, lo.FromPtr(subnet.AvailabilityZone))\n\t\t\t}\n\t\t\tif subnet, subnetOk := lo.Find(c.subnets, func(s ec2types.Subnet) bool {\n\t\t\t\treturn lo.FromPtr(s.SubnetId) == lo.FromPtr(b.SubnetId)\n\t\t\t}); subnetOk {\n\t\t\t\tbScore = c.strategy.GetScore(string(b.InstanceType), capacityType, lo.FromPtr(subnet.AvailabilityZone))\n\t\t\t}\n\t\t\tif lo.IsEmpty(bScore) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\tif lo.IsEmpty(aScore) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\treturn aScore < bScore\n\t\t})\n\t\tinstanceTags, _ := lo.Find(lt.B.TagSpecifications, func(t ec2types.LaunchTemplateTagSpecificationRequest) bool {\n\t\t\treturn t.ResourceType == ec2types.ResourceTypeInstance\n\t\t})\n\t\tsubnet, ok := lo.Find(c.subnets, func(s ec2types.Subnet) bool {\n\t\t\treturn lo.FromPtr(s.SubnetId) == lo.FromPtr(selectedOverride.SubnetId)\n\t\t})\n\t\tif !ok {\n\t\t\treturn nil, fmt.Errorf(\"subnet %q not found\", lo.FromPtr(selectedOverride.SubnetId))\n\t\t}\n\t\tinstanceTypeInfo := lo.Must(lo.Find(c.instanceTypes, func(i ec2types.InstanceTypeInfo) bool {\n\t\t\treturn i.InstanceType == selectedOverride.InstanceType\n\t\t}))\n\t\tinstance := ec2types.Instance{\n\t\t\tAmiLaunchIndex: nil,\n\t\t\tArchitecture:   lo.Ternary(lo.Contains(instanceTypeInfo.ProcessorInfo.SupportedArchitectures, ec2types.ArchitectureTypeX8664), ec2types.ArchitectureValuesX8664, ec2types.ArchitectureValuesArm64),\n\t\t\t// TODO: The block device mappings here don't have any data on the ephemeral storage size\n\t\t\tBlockDeviceMappings: lo.Map(lt.B.BlockDeviceMappings, func(b ec2types.LaunchTemplateBlockDeviceMappingRequest, _ int) ec2types.InstanceBlockDeviceMapping {\n\t\t\t\treturn ec2types.InstanceBlockDeviceMapping{\n\t\t\t\t\tDeviceName: b.DeviceName,\n\t\t\t\t\tEbs: &ec2types.EbsInstanceBlockDevice{\n\t\t\t\t\t\tAssociatedResource:  nil,\n\t\t\t\t\t\tAttachTime:          nil,\n\t\t\t\t\t\tDeleteOnTermination: b.Ebs.DeleteOnTermination,\n\t\t\t\t\t\tOperator:            nil,\n\t\t\t\t\t\tStatus:              ec2types.AttachmentStatusAttached,\n\t\t\t\t\t\tVolumeId:            lo.ToPtr(fmt.Sprintf(\"vol-%s\", randomdata.Alphanumeric(17))),\n\t\t\t\t\t\tVolumeOwnerId:       nil,\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t}),\n\t\t\tBootMode: ec2types.BootModeValuesUefi,\n\t\t\t// Don't support ODCR yet\n\t\t\tCapacityReservationId:                   nil,\n\t\t\tCapacityReservationSpecification:        nil,\n\t\t\tClientToken:                             nil,\n\t\t\tCpuOptions:                              nil,\n\t\t\tCurrentInstanceBootMode:                 ec2types.InstanceBootModeValuesUefi,\n\t\t\tEbsOptimized:                            lo.ToPtr(true),\n\t\t\tElasticGpuAssociations:                  nil,\n\t\t\tElasticInferenceAcceleratorAssociations: nil,\n\t\t\tEnaSupport:                              lo.ToPtr(false),\n\t\t\tEnclaveOptions:                          nil,\n\t\t\tHibernationOptions:                      nil,\n\t\t\tHypervisor:                              ec2types.HypervisorTypeXen,\n\t\t\tIamInstanceProfile: &ec2types.IamInstanceProfile{\n\t\t\t\tArn: lt.B.IamInstanceProfile.Arn,\n\t\t\t\tId:  lt.B.IamInstanceProfile.Name,\n\t\t\t},\n\t\t\tImageId:    selectedOverride.ImageId,\n\t\t\tInstanceId: lo.ToPtr(fmt.Sprintf(\"i-%s\", randomdata.Alphanumeric(17))),\n\t\t\t// TODO: Eventually handle LifecycleCapacityBlock\n\t\t\tInstanceLifecycle:  lo.Ternary(input.TargetCapacitySpecification.DefaultTargetCapacityType == ec2types.DefaultTargetCapacityTypeSpot, ec2types.InstanceLifecycleTypeSpot, ec2types.InstanceLifecycleTypeScheduled),\n\t\t\tInstanceType:       selectedOverride.InstanceType,\n\t\t\tIpv6Address:        nil,\n\t\t\tKernelId:           nil,\n\t\t\tKeyName:            nil,\n\t\t\tLaunchTime:         lo.ToPtr(c.clock.Now()),\n\t\t\tLicenses:           nil,\n\t\t\tMaintenanceOptions: nil,\n\t\t\tMetadataOptions: &ec2types.InstanceMetadataOptionsResponse{\n\t\t\t\tHttpEndpoint:            ec2types.InstanceMetadataEndpointState(lt.B.MetadataOptions.HttpEndpoint),\n\t\t\t\tHttpProtocolIpv6:        ec2types.InstanceMetadataProtocolState(lt.B.MetadataOptions.HttpProtocolIpv6),\n\t\t\t\tHttpPutResponseHopLimit: lt.B.MetadataOptions.HttpPutResponseHopLimit,\n\t\t\t\tHttpTokens:              ec2types.HttpTokensState(lt.B.MetadataOptions.HttpTokens),\n\t\t\t\tInstanceMetadataTags:    ec2types.InstanceMetadataTagsState(lt.B.MetadataOptions.InstanceMetadataTags),\n\t\t\t\tState:                   ec2types.InstanceMetadataOptionsStateApplied,\n\t\t\t},\n\t\t\tMonitoring: &ec2types.Monitoring{\n\t\t\t\tState: lo.Ternary(lo.FromPtr(lt.B.Monitoring.Enabled), ec2types.MonitoringStateEnabled, ec2types.MonitoringStateDisabled),\n\t\t\t},\n\t\t\t// TODO: We may need to auto-gen these network interfaces too\n\t\t\t// TODO: We should eventually pass the network interfaces from the launch template\n\t\t\tNetworkInterfaces:         nil,\n\t\t\tNetworkPerformanceOptions: nil,\n\t\t\tOperator:                  nil,\n\t\t\tOutpostArn:                nil,\n\t\t\tPlacement: &ec2types.Placement{\n\t\t\t\tAffinity:             nil,\n\t\t\t\tAvailabilityZone:     subnet.AvailabilityZone,\n\t\t\t\tGroupId:              nil,\n\t\t\t\tGroupName:            nil,\n\t\t\t\tHostId:               nil,\n\t\t\t\tHostResourceGroupArn: nil,\n\t\t\t\tPartitionNumber:      nil,\n\t\t\t\tSpreadDomain:         nil,\n\t\t\t\tTenancy:              \"\",\n\t\t\t},\n\t\t\tPlatform:        \"\",\n\t\t\tPlatformDetails: nil,\n\t\t\t// TODO: We may eventually need to fill-in this private DNS name\n\t\t\tPrivateDnsName:        nil,\n\t\t\tPrivateDnsNameOptions: nil,\n\t\t\t// TODO: We may eventually need to fill-in this private IP address\n\t\t\tPrivateIpAddress: nil,\n\t\t\tProductCodes:     nil,\n\t\t\t// TODO: We may eventually need to fill-in this public DNS name\n\t\t\tPublicDnsName: nil,\n\t\t\t// TODO: We may eventually need to fill-in this public IP address\n\t\t\tPublicIpAddress: nil,\n\t\t\tRamdiskId:       nil,\n\t\t\tRootDeviceName:  nil,\n\t\t\tRootDeviceType:  ec2types.DeviceTypeEbs,\n\t\t\t// TODO: Pull the security groups from passed-through network interfaces\n\t\t\t// If we don't specify network interfaces directly, we just get it from the SecurityGroupIDs in the LT\n\t\t\tSecurityGroups: lo.Map(lo.Ternary(len(lt.B.NetworkInterfaces) == 0, lt.B.SecurityGroupIds, lt.B.NetworkInterfaces[0].Groups), func(s string, _ int) ec2types.GroupIdentifier {\n\t\t\t\treturn ec2types.GroupIdentifier{\n\t\t\t\t\tGroupId: lo.ToPtr(s),\n\t\t\t\t}\n\t\t\t}),\n\t\t\tSourceDestCheck:       nil,\n\t\t\tSpotInstanceRequestId: lo.Ternary(input.TargetCapacitySpecification.DefaultTargetCapacityType == ec2types.DefaultTargetCapacityTypeSpot, lo.ToPtr(fmt.Sprintf(\"spot-%s\", randomdata.Alphanumeric(17))), nil),\n\t\t\tSriovNetSupport:       nil,\n\t\t\tState: &ec2types.InstanceState{\n\t\t\t\tCode: lo.ToPtr[int32](16),\n\t\t\t\tName: ec2types.InstanceStateNameRunning,\n\t\t\t},\n\t\t\t// TODO: We may eventually need to fill this in\n\t\t\tStateReason: nil,\n\t\t\t// TODO: We may eventually need to fill this in\n\t\t\tStateTransitionReason:    nil,\n\t\t\tSubnetId:                 selectedOverride.SubnetId,\n\t\t\tTags:                     instanceTags.Tags,\n\t\t\tTpmSupport:               nil,\n\t\t\tUsageOperation:           nil,\n\t\t\tUsageOperationUpdateTime: nil,\n\t\t\tVirtualizationType:       ec2types.VirtualizationTypeHvm,\n\t\t\tVpcId:                    subnet.VpcId,\n\t\t}\n\t\tc.instances.Store(lo.FromPtr(instance.InstanceId), instance)\n\t\tlaunchCtx, cancel := context.WithCancel(ctx)\n\t\tc.instanceLaunchCancels.Store(lo.FromPtr(instance.InstanceId), cancel)\n\n\t\tgo func() {\n\t\t\tselect {\n\t\t\tcase <-launchCtx.Done():\n\t\t\t\treturn\n\t\t\t// This is meant to simulate instance startup time\n\t\t\tcase <-c.clock.After(30 * time.Second):\n\t\t\t}\n\t\t\tif err := retry.OnError(retry.DefaultBackoff, func(_ error) bool { return true }, func() error {\n\t\t\t\treturn c.kubeClient.Create(launchCtx, c.toNode(ctx, instance))\n\t\t\t}); err != nil {\n\t\t\t\tc.instances.Delete(lo.FromPtr(instance.InstanceId))\n\t\t\t\tc.instanceLaunchCancels.Delete(lo.FromPtr(instance.InstanceId))\n\t\t\t}\n\t\t}()\n\t\tfleetInstances = append(fleetInstances, ec2types.CreateFleetInstance{\n\t\t\tInstanceIds:  []string{lo.FromPtr(instance.InstanceId)},\n\t\t\tInstanceType: instance.InstanceType,\n\t\t\tLaunchTemplateAndOverrides: &ec2types.LaunchTemplateAndOverridesResponse{\n\t\t\t\tLaunchTemplateSpecification: &ec2types.FleetLaunchTemplateSpecification{\n\t\t\t\t\tLaunchTemplateId:   lt.A.LaunchTemplateId,\n\t\t\t\t\tLaunchTemplateName: lt.A.LaunchTemplateName,\n\t\t\t\t\tVersion:            lo.ToPtr(fmt.Sprint(lo.FromPtr(lt.A.LatestVersionNumber))),\n\t\t\t\t},\n\t\t\t\tOverrides: &ec2types.FleetLaunchTemplateOverrides{\n\t\t\t\t\tAvailabilityZone:    subnet.AvailabilityZone,\n\t\t\t\t\tBlockDeviceMappings: nil, // For now, we don't support blockDeviceMapping overrides\n\t\t\t\t\tImageId:             selectedOverride.ImageId,\n\t\t\t\t\tInstanceType:        lt.B.InstanceType,\n\t\t\t\t\tMaxPrice:            selectedOverride.MaxPrice,\n\t\t\t\t\tPlacement:           nil,\n\t\t\t\t\tPriority:            selectedOverride.Priority,\n\t\t\t\t\tSubnetId:            selectedOverride.SubnetId,\n\t\t\t\t\tWeightedCapacity:    selectedOverride.WeightedCapacity,\n\t\t\t\t},\n\t\t\t},\n\t\t\tLifecycle: lo.Ternary(instance.InstanceLifecycle == ec2types.InstanceLifecycleTypeSpot, ec2types.InstanceLifecycleSpot, ec2types.InstanceLifecycleOnDemand),\n\t\t})\n\t}\n\treturn &ec2.CreateFleetOutput{\n\t\t// TODO: We can eventually send back ICE errors through this section\n\t\tErrors:    nil,\n\t\tFleetId:   lo.ToPtr(fmt.Sprintf(\"fleet-%s\", randomdata.Alphanumeric(17))),\n\t\tInstances: fleetInstances,\n\t}, nil\n}\n\nfunc (c *Client) TerminateInstances(_ context.Context, input *ec2.TerminateInstancesInput, _ ...func(*ec2.Options)) (*ec2.TerminateInstancesOutput, error) {\n\t<-c.readBackupCompleted\n\tif !c.rateLimiterProvider.TerminateInstances().TryAccept() {\n\t\treturn nil, &smithy.GenericAPIError{\n\t\t\tCode:    errors.RateLimitingErrorCode,\n\t\t\tMessage: \"Request was rate limited\",\n\t\t}\n\t}\n\t// TODO: Eventually do more rigorous validations and auth checks for dry-run\n\tif lo.FromPtr(input.DryRun) {\n\t\treturn nil, &smithy.GenericAPIError{\n\t\t\tCode:    errors.DryRunOperationErrorCode,\n\t\t\tMessage: \"Request would have succeeded, but DryRun flag is set\",\n\t\t}\n\t}\n\n\tfor _, id := range input.InstanceIds {\n\t\tc.instances.Delete(id)\n\t\tif cancel, ok := c.instanceLaunchCancels.LoadAndDelete(id); ok {\n\t\t\tcancel.(context.CancelFunc)()\n\t\t}\n\t}\n\treturn &ec2.TerminateInstancesOutput{\n\t\tTerminatingInstances: lo.Map(input.InstanceIds, func(id string, _ int) ec2types.InstanceStateChange {\n\t\t\treturn ec2types.InstanceStateChange{\n\t\t\t\tCurrentState: &ec2types.InstanceState{\n\t\t\t\t\tCode: lo.ToPtr[int32](48),\n\t\t\t\t\tName: ec2types.InstanceStateNameTerminated,\n\t\t\t\t},\n\t\t\t\tInstanceId: lo.ToPtr(id),\n\t\t\t\tPreviousState: &ec2types.InstanceState{\n\t\t\t\t\tCode: lo.ToPtr[int32](16),\n\t\t\t\t\tName: ec2types.InstanceStateNameRunning,\n\t\t\t\t},\n\t\t\t}\n\t\t}),\n\t}, nil\n}\n\nfunc (c *Client) DescribeInstances(_ context.Context, input *ec2.DescribeInstancesInput, _ ...func(*ec2.Options)) (*ec2.DescribeInstancesOutput, error) {\n\t<-c.readBackupCompleted\n\tif !c.rateLimiterProvider.DescribeInstances().TryAccept() {\n\t\treturn nil, &smithy.GenericAPIError{\n\t\t\tCode:    errors.RateLimitingErrorCode,\n\t\t\tMessage: \"Request limit exceeded.\",\n\t\t}\n\t}\n\t// TODO: Eventually do more rigorous validations and auth checks for dry-run\n\tif lo.FromPtr(input.DryRun) {\n\t\treturn nil, &smithy.GenericAPIError{\n\t\t\tCode:    errors.DryRunOperationErrorCode,\n\t\t\tMessage: \"Request would have succeeded, but DryRun flag is set\",\n\t\t}\n\t}\n\n\t// TODO: Eventually we can consider supporting DescribeInstances filters\n\tvar instances []ec2types.Instance\n\tif len(input.InstanceIds) > 0 {\n\t\tfor _, id := range input.InstanceIds {\n\t\t\traw, ok := c.instances.Load(id)\n\t\t\tif !ok {\n\t\t\t\treturn nil, &smithy.GenericAPIError{\n\t\t\t\t\tCode: \"InvalidInstanceID.NotFound\",\n\t\t\t\t\t// TODO: we can eventually expand this to list out every id\n\t\t\t\t\tMessage: fmt.Sprintf(\"The instance IDs '%s' do not exist\", id),\n\t\t\t\t}\n\t\t\t}\n\t\t\tinstances = append(instances, raw.(ec2types.Instance))\n\t\t}\n\t} else {\n\t\tc.instances.Range(func(k, v any) bool {\n\t\t\tinstances = append(instances, v.(ec2types.Instance))\n\t\t\treturn true\n\t\t})\n\t}\n\n\treturn &ec2.DescribeInstancesOutput{\n\t\tReservations: []ec2types.Reservation{\n\t\t\t{\n\t\t\t\tGroups:    nil,\n\t\t\t\tInstances: instances,\n\t\t\t\t// TODO: Consider adding these values but they aren't necessary\n\t\t\t\tOwnerId:       nil,\n\t\t\t\tRequesterId:   nil,\n\t\t\t\tReservationId: nil,\n\t\t\t},\n\t\t},\n\t}, nil\n}\n\nfunc (c *Client) RunInstances(_ context.Context, input *ec2.RunInstancesInput, _ ...func(*ec2.Options)) (*ec2.RunInstancesOutput, error) {\n\t<-c.readBackupCompleted\n\tif !c.rateLimiterProvider.RunInstances().TryAccept() {\n\t\treturn nil, &smithy.GenericAPIError{\n\t\t\tCode:    errors.RateLimitingErrorCode,\n\t\t\tMessage: \"Request limit exceeded.\",\n\t\t}\n\t}\n\tif lo.FromPtr(input.DryRun) {\n\t\treturn nil, &smithy.GenericAPIError{\n\t\t\tCode:    errors.DryRunOperationErrorCode,\n\t\t\tMessage: \"Request would have succeeded, but DryRun flag is set\",\n\t\t}\n\t}\n\n\t// TODO: Implement RunInstances completely\n\t// For now, this is only used for validation\n\tpanic(\"implement me\")\n}\n\n//nolint:gocyclo\nfunc (c *Client) CreateTags(_ context.Context, input *ec2.CreateTagsInput, _ ...func(*ec2.Options)) (*ec2.CreateTagsOutput, error) {\n\t<-c.readBackupCompleted\n\tif !c.rateLimiterProvider.CreateTags().TryAccept() {\n\t\treturn nil, &smithy.GenericAPIError{\n\t\t\tCode:    errors.RateLimitingErrorCode,\n\t\t\tMessage: \"Request limit exceeded.\",\n\t\t}\n\t}\n\t// TODO: Eventually do more rigorous validations and auth checks for dry-run\n\tif lo.FromPtr(input.DryRun) {\n\t\treturn nil, &smithy.GenericAPIError{\n\t\t\tCode:    errors.DryRunOperationErrorCode,\n\t\t\tMessage: \"Request would have succeeded, but DryRun flag is set\",\n\t\t}\n\t}\n\n\tfor _, resource := range input.Resources {\n\t\tswitch {\n\t\tcase strings.Contains(resource, \"i-\"):\n\t\t\traw, ok := c.instances.Load(resource)\n\t\t\tif !ok {\n\t\t\t\t// For now, we just ignore if the resource doesn't exist\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tinstance := raw.(ec2types.Instance)\n\t\t\tinstance.Tags = lo.Reject(instance.Tags, func(t ec2types.Tag, _ int) bool {\n\t\t\t\tfor _, tag := range instance.Tags {\n\t\t\t\t\tif tag.Key == t.Key {\n\t\t\t\t\t\treturn true\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn false\n\t\t\t})\n\t\t\tinstance.Tags = append(instance.Tags, input.Tags...)\n\t\t\tc.instances.Store(resource, instance)\n\t\tcase strings.Contains(resource, \"lt-\"):\n\t\t\traw, ok := c.launchTemplates.Load(resource)\n\t\t\tif !ok {\n\t\t\t\t// For now, we just ignore if the resource doesn't exist\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tlt := raw.(lo.Tuple2[*ec2types.LaunchTemplate, *ec2types.RequestLaunchTemplateData])\n\t\t\tlt.A.Tags = lo.Reject(lt.A.Tags, func(t ec2types.Tag, _ int) bool {\n\t\t\t\tfor _, tag := range lt.A.Tags {\n\t\t\t\t\tif tag.Key == t.Key {\n\t\t\t\t\t\treturn true\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn false\n\t\t\t})\n\t\t\tlt.A.Tags = append(lt.A.Tags, input.Tags...)\n\t\t\tc.launchTemplates.Store(resource, lt)\n\t\tdefault:\n\t\t\treturn nil, fmt.Errorf(\"unknown resource type %q\", resource)\n\t\t}\n\t}\n\treturn &ec2.CreateTagsOutput{}, nil\n}\n\nfunc (c *Client) CreateLaunchTemplate(_ context.Context, input *ec2.CreateLaunchTemplateInput, _ ...func(*ec2.Options)) (*ec2.CreateLaunchTemplateOutput, error) {\n\t<-c.readBackupCompleted\n\tif !c.rateLimiterProvider.CreateLaunchTemplate().TryAccept() {\n\t\treturn nil, &smithy.GenericAPIError{\n\t\t\tCode:    errors.RateLimitingErrorCode,\n\t\t\tMessage: \"Request limit exceeded.\",\n\t\t}\n\t}\n\t// TODO: Eventually do more rigorous validations and auth checks for dry-run\n\tif lo.FromPtr(input.DryRun) {\n\t\treturn nil, &smithy.GenericAPIError{\n\t\t\tCode:    errors.DryRunOperationErrorCode,\n\t\t\tMessage: \"Request would have succeeded, but DryRun flag is set\",\n\t\t}\n\t}\n\n\tlaunchTemplateID := fmt.Sprintf(\"lt-%s\", randomdata.Alphanumeric(17))\n\tltTags, _ := lo.Find(input.TagSpecifications, func(t ec2types.TagSpecification) bool {\n\t\treturn t.ResourceType == ec2types.ResourceTypeLaunchTemplate\n\t})\n\tlt := &ec2types.LaunchTemplate{\n\t\tCreateTime:           lo.ToPtr(c.clock.Now()),\n\t\tDefaultVersionNumber: lo.ToPtr[int64](0),\n\t\tLatestVersionNumber:  lo.ToPtr[int64](0),\n\t\tLaunchTemplateId:     lo.ToPtr(launchTemplateID),\n\t\tLaunchTemplateName:   input.LaunchTemplateName,\n\t\tTags:                 ltTags.Tags,\n\t}\n\tc.launchTemplates.Store(launchTemplateID, lo.Tuple2[*ec2types.LaunchTemplate, *ec2types.RequestLaunchTemplateData]{A: lt, B: input.LaunchTemplateData})\n\tc.launchTemplateNameToID.Store(lo.FromPtr(input.LaunchTemplateName), launchTemplateID)\n\treturn &ec2.CreateLaunchTemplateOutput{LaunchTemplate: lt}, nil\n}\n\nfunc (c *Client) DeleteLaunchTemplate(_ context.Context, input *ec2.DeleteLaunchTemplateInput, _ ...func(*ec2.Options)) (*ec2.DeleteLaunchTemplateOutput, error) {\n\t<-c.readBackupCompleted\n\tif !c.rateLimiterProvider.DeleteLaunchTemplate().TryAccept() {\n\t\treturn nil, &smithy.GenericAPIError{\n\t\t\tCode:    errors.RateLimitingErrorCode,\n\t\t\tMessage: \"Request limit exceeded.\",\n\t\t}\n\t}\n\t// TODO: Eventually do more rigorous validations and auth checks for dry-run\n\tif lo.FromPtr(input.DryRun) {\n\t\treturn nil, &smithy.GenericAPIError{\n\t\t\tCode:    errors.DryRunOperationErrorCode,\n\t\t\tMessage: \"Request would have succeeded, but DryRun flag is set\",\n\t\t}\n\t}\n\n\tlaunchTemplateID := lo.FromPtr(input.LaunchTemplateId)\n\tif input.LaunchTemplateName != nil {\n\t\traw, ok := c.launchTemplateNameToID.Load(lo.FromPtr(input.LaunchTemplateName))\n\t\tif !ok {\n\t\t\treturn nil, &smithy.GenericAPIError{\n\t\t\t\tCode:    \"InvalidLaunchTemplateName.NotFoundException\",\n\t\t\t\tMessage: fmt.Sprintf(\"The specified launch template, with template name %s, does not exist.\", lo.FromPtr(input.LaunchTemplateName)),\n\t\t\t}\n\t\t}\n\t\tlaunchTemplateID = raw.(string)\n\t}\n\traw, ok := c.launchTemplates.LoadAndDelete(launchTemplateID)\n\tif !ok {\n\t\treturn nil, &smithy.GenericAPIError{\n\t\t\tCode:    \"InvalidLaunchTemplateId.NotFoundException\",\n\t\t\tMessage: fmt.Sprintf(\"The specified launch template, with template id %s, does not exist.\", launchTemplateID),\n\t\t}\n\t}\n\tlt := raw.(lo.Tuple2[*ec2types.LaunchTemplate, *ec2types.RequestLaunchTemplateData])\n\tc.launchTemplateNameToID.Delete(lo.FromPtr(lt.A.LaunchTemplateName))\n\treturn &ec2.DeleteLaunchTemplateOutput{\n\t\tLaunchTemplate: lt.A,\n\t}, nil\n}\n\nfunc (c *Client) toNode(ctx context.Context, instance ec2types.Instance) *corev1.Node {\n\tnodePoolNameTag, _ := lo.Find(instance.Tags, func(t ec2types.Tag) bool {\n\t\treturn lo.FromPtr(t.Key) == v1.NodePoolLabelKey\n\t})\n\tsubnet := lo.Must(lo.Find(c.subnets, func(s ec2types.Subnet) bool {\n\t\treturn lo.FromPtr(s.SubnetId) == lo.FromPtr(instance.SubnetId)\n\t}))\n\tinstanceTypeInfo := lo.Must(lo.Find(c.instanceTypes, func(i ec2types.InstanceTypeInfo) bool {\n\t\treturn i.InstanceType == instance.InstanceType\n\t}))\n\t// TODO: We need to get the capacity and allocatable information from the userData\n\tit := instancetype.NewInstanceType(\n\t\tctx,\n\t\tinstanceTypeInfo,\n\t\tc.region,\n\t\tnil,\n\t\tnil,\n\t\tnil,\n\t\tnil,\n\t\tnil,\n\t\tnil,\n\t\tnil,\n\t\tnil,\n\t\tnil,\n\t\tnil,\n\t\t// TODO: Eventually support different AMIFamilies from userData\n\t\t\"al2023\",\n\t\tnil,\n\t)\n\tnodeName := fmt.Sprintf(\"%s-%d\", strings.ReplaceAll(namesgenerator.GetRandomName(0), \"_\", \"-\"), rand.Uint32()) //nolint:gosec\n\treturn &corev1.Node{\n\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\tName: nodeName,\n\t\t\tAnnotations: map[string]string{\n\t\t\t\tv1alpha1.KwokLabelKey: v1alpha1.KwokLabelValue,\n\t\t\t},\n\t\t\t// TODO: We can eventually add all the labels from the userData but for now we just add the NodePool labels\n\t\t\tLabels: map[string]string{\n\t\t\t\tcorev1.LabelInstanceTypeStable: it.Name,\n\t\t\t\tcorev1.LabelHostname:           nodeName,\n\t\t\t\tcorev1.LabelTopologyRegion:     it.Requirements.Get(corev1.LabelTopologyRegion).Any(),\n\t\t\t\tcorev1.LabelTopologyZone:       lo.FromPtr(subnet.AvailabilityZone),\n\t\t\t\tv1.CapacityTypeLabelKey:        v1.CapacityTypeOnDemand,\n\t\t\t\tcorev1.LabelArchStable:         it.Requirements.Get(corev1.LabelArchStable).Any(),\n\t\t\t\tcorev1.LabelOSStable:           string(corev1.Linux),\n\t\t\t\tv1.NodePoolLabelKey:            lo.FromPtr(nodePoolNameTag.Value),\n\t\t\t\tv1alpha1.KwokLabelKey:          v1alpha1.KwokLabelValue,\n\t\t\t\tv1alpha1.KwokPartitionLabelKey: \"a\",\n\t\t\t},\n\t\t},\n\t\tSpec: corev1.NodeSpec{\n\t\t\tProviderID: fmt.Sprintf(\"kwok-aws:///%s/%s\", lo.FromPtr(subnet.AvailabilityZone), lo.FromPtr(instance.InstanceId)),\n\t\t\tTaints:     []corev1.Taint{v1.UnregisteredNoExecuteTaint},\n\t\t},\n\t\tStatus: corev1.NodeStatus{\n\t\t\tCapacity:    it.Capacity,\n\t\t\tAllocatable: it.Allocatable(),\n\t\t\tPhase:       corev1.NodePending,\n\t\t},\n\t}\n}\n"
  },
  {
    "path": "kwok/ec2/ratelimiting.go",
    "content": "// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage ec2\n\nimport (\n\t\"math\"\n\n\t\"k8s.io/client-go/util/flowcontrol\"\n)\n\ntype RateLimiterProvider interface {\n\tDescribeLaunchTemplates() flowcontrol.PassiveRateLimiter\n\tCreateFleet() flowcontrol.PassiveRateLimiter\n\tTerminateInstances() flowcontrol.PassiveRateLimiter\n\tDescribeInstances() flowcontrol.PassiveRateLimiter\n\tRunInstances() flowcontrol.PassiveRateLimiter\n\tCreateTags() flowcontrol.PassiveRateLimiter\n\tCreateLaunchTemplate() flowcontrol.PassiveRateLimiter\n\tDeleteLaunchTemplate() flowcontrol.PassiveRateLimiter\n}\n\ntype NopRateLimiter struct{}\n\nfunc (*NopRateLimiter) TryAccept() bool {\n\treturn true\n}\n\nfunc (*NopRateLimiter) Stop() {}\n\nfunc (*NopRateLimiter) QPS() float32 {\n\treturn math.MaxFloat32\n}\n\ntype NopRateLimiterProvider struct {\n\tnopRateLimiter flowcontrol.PassiveRateLimiter\n}\n\nfunc NewNopRateLimiterProvider() *NopRateLimiterProvider {\n\treturn &NopRateLimiterProvider{\n\t\tnopRateLimiter: &NopRateLimiter{},\n\t}\n}\n\nfunc (p NopRateLimiterProvider) DescribeLaunchTemplates() flowcontrol.PassiveRateLimiter {\n\treturn p.nopRateLimiter\n}\n\nfunc (p NopRateLimiterProvider) CreateFleet() flowcontrol.PassiveRateLimiter {\n\treturn p.nopRateLimiter\n}\n\nfunc (p NopRateLimiterProvider) TerminateInstances() flowcontrol.PassiveRateLimiter {\n\treturn p.nopRateLimiter\n}\n\nfunc (p NopRateLimiterProvider) DescribeInstances() flowcontrol.PassiveRateLimiter {\n\treturn p.nopRateLimiter\n}\n\nfunc (p NopRateLimiterProvider) RunInstances() flowcontrol.PassiveRateLimiter {\n\treturn p.nopRateLimiter\n}\n\nfunc (p NopRateLimiterProvider) CreateTags() flowcontrol.PassiveRateLimiter {\n\treturn p.nopRateLimiter\n}\n\nfunc (p NopRateLimiterProvider) CreateLaunchTemplate() flowcontrol.PassiveRateLimiter {\n\treturn p.nopRateLimiter\n}\n\nfunc (p NopRateLimiterProvider) DeleteLaunchTemplate() flowcontrol.PassiveRateLimiter {\n\treturn p.nopRateLimiter\n}\n\ntype DefaultRateLimiterProvider struct {\n\tnonMutating flowcontrol.PassiveRateLimiter\n\tmutating    flowcontrol.PassiveRateLimiter\n\n\trunInstances       flowcontrol.PassiveRateLimiter\n\tcreateTags         flowcontrol.PassiveRateLimiter\n\tterminateInstances flowcontrol.PassiveRateLimiter\n}\n\nfunc NewDefaultRateLimiterProvider() *DefaultRateLimiterProvider {\n\treturn &DefaultRateLimiterProvider{\n\t\tnonMutating: flowcontrol.NewTokenBucketPassiveRateLimiter(20, 100),\n\t\tmutating:    flowcontrol.NewTokenBucketPassiveRateLimiter(5, 50),\n\n\t\trunInstances:       flowcontrol.NewTokenBucketPassiveRateLimiter(2, 5),\n\t\tterminateInstances: flowcontrol.NewTokenBucketPassiveRateLimiter(5, 100),\n\t\tcreateTags:         flowcontrol.NewTokenBucketPassiveRateLimiter(10, 100),\n\t}\n}\n\nfunc (p *DefaultRateLimiterProvider) DescribeLaunchTemplates() flowcontrol.PassiveRateLimiter {\n\treturn p.nonMutating\n}\n\nfunc (p *DefaultRateLimiterProvider) CreateFleet() flowcontrol.PassiveRateLimiter {\n\treturn p.mutating\n}\n\nfunc (p *DefaultRateLimiterProvider) TerminateInstances() flowcontrol.PassiveRateLimiter {\n\treturn p.terminateInstances\n}\n\nfunc (p *DefaultRateLimiterProvider) DescribeInstances() flowcontrol.PassiveRateLimiter {\n\treturn p.nonMutating\n}\n\nfunc (p *DefaultRateLimiterProvider) RunInstances() flowcontrol.PassiveRateLimiter {\n\treturn p.runInstances\n}\n\nfunc (p *DefaultRateLimiterProvider) CreateTags() flowcontrol.PassiveRateLimiter {\n\treturn p.createTags\n}\n\nfunc (p *DefaultRateLimiterProvider) CreateLaunchTemplate() flowcontrol.PassiveRateLimiter {\n\treturn p.mutating\n}\n\nfunc (p *DefaultRateLimiterProvider) DeleteLaunchTemplate() flowcontrol.PassiveRateLimiter {\n\treturn p.mutating\n}\n"
  },
  {
    "path": "kwok/main.go",
    "content": "// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage main\n\nimport (\n\t\"sync\"\n\n\t\"sigs.k8s.io/karpenter/pkg/cloudprovider/metrics\"\n\tcorecontrollers \"sigs.k8s.io/karpenter/pkg/controllers\"\n\t\"sigs.k8s.io/karpenter/pkg/controllers/state\"\n\tcoreoperator \"sigs.k8s.io/karpenter/pkg/operator\"\n\tkarpoptions \"sigs.k8s.io/karpenter/pkg/operator/options\"\n\n\t\"sigs.k8s.io/karpenter/pkg/cloudprovider/overlay\"\n\n\t\"github.com/aws/karpenter-provider-aws/kwok/cloudprovider\"\n\t\"github.com/aws/karpenter-provider-aws/kwok/operator\"\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/controllers\"\n)\n\nfunc main() {\n\tctx, op := operator.NewOperator(coreoperator.NewOperator())\n\n\tkwokAWSCloudProvider := cloudprovider.New(\n\t\top.InstanceTypesProvider,\n\t\top.InstanceProvider,\n\t\top.EventRecorder,\n\t\top.GetClient(),\n\t\top.AMIProvider,\n\t\top.SecurityGroupProvider,\n\t\top.CapacityReservationProvider,\n\t\top.InstanceTypeStore,\n\t)\n\toverlayUndecoratedCloudProvider := metrics.Decorate(kwokAWSCloudProvider)\n\tcloudProvider := overlay.Decorate(overlayUndecoratedCloudProvider, op.GetClient(), op.InstanceTypeStore)\n\tclusterState := state.NewCluster(op.Clock, op.GetClient(), cloudProvider)\n\n\tif karpoptions.FromContext(ctx).FeatureGates.ReservedCapacity {\n\t\tv1.CapacityReservationsEnabled = true\n\t}\n\n\twg := &sync.WaitGroup{}\n\twg.Go(func() {\n\t\t<-op.Elected()\n\t\top.EC2API.StartBackupThread(ctx)\n\t})\n\twg.Go(func() {\n\t\t<-op.Elected()\n\t\top.EC2API.StartKillNodeThread(ctx)\n\t})\n\twg.Go(func() {\n\t\t<-op.Elected()\n\t\top.EC2API.ReadBackup(ctx)\n\t})\n\n\top.\n\t\tWithControllers(ctx, corecontrollers.NewControllers(\n\t\t\tctx,\n\t\t\top.Manager,\n\t\t\top.Clock,\n\t\t\top.GetClient(),\n\t\t\top.EventRecorder,\n\t\t\tcloudProvider,\n\t\t\toverlayUndecoratedCloudProvider,\n\t\t\tclusterState,\n\t\t\top.InstanceTypeStore,\n\t\t)...).\n\t\tWithControllers(ctx, controllers.NewControllers(\n\t\t\tctx,\n\t\t\top.Manager,\n\t\t\top.Config,\n\t\t\top.Clock,\n\t\t\top.EC2API,\n\t\t\top.GetClient(),\n\t\t\top.EventRecorder,\n\t\t\top.UnavailableOfferingsCache,\n\t\t\top.SSMCache,\n\t\t\top.ValidationCache,\n\t\t\top.RecreationCache,\n\t\t\tcloudProvider,\n\t\t\top.SubnetProvider,\n\t\t\top.SecurityGroupProvider,\n\t\t\top.InstanceProfileProvider,\n\t\t\top.InstanceProvider,\n\t\t\top.PricingProvider,\n\t\t\top.AMIProvider,\n\t\t\top.LaunchTemplateProvider,\n\t\t\top.VersionProvider,\n\t\t\top.InstanceTypesProvider,\n\t\t\top.CapacityReservationProvider,\n\t\t\top.AMIResolver,\n\t\t)...).\n\t\tStart(ctx)\n\twg.Wait()\n}\n"
  },
  {
    "path": "kwok/manifests/clusterrole.yaml",
    "content": "apiVersion: rbac.authorization.k8s.io/v1\nkind: ClusterRole\nmetadata:\n  name: kwok-karpenter-extra\nrules:\n  - apiGroups: [\"\"]\n    resources: [\"configmaps\", \"nodes\"]\n    verbs: [\"get\", \"watch\", \"list\", \"create\", \"patch\", \"delete\"]\n---\napiVersion: rbac.authorization.k8s.io/v1\nkind: ClusterRoleBinding\nmetadata:\n  name: kwok-karpenter-extra\nroleRef:\n  apiGroup: rbac.authorization.k8s.io\n  kind: ClusterRole\n  name: kwok-karpenter-extra\nsubjects:\n  - kind: ServiceAccount\n    name: kwok-karpenter\n    namespace: $KARPENTER_NAMESPACE"
  },
  {
    "path": "kwok/operator/operator.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage operator\n\nimport (\n\t\"context\"\n\t\"encoding/base64\"\n\t\"errors\"\n\t\"fmt\"\n\t\"net\"\n\n\t\"github.com/aws/aws-sdk-go-v2/aws\"\n\tawsmiddleware \"github.com/aws/aws-sdk-go-v2/aws/middleware\"\n\t\"github.com/aws/aws-sdk-go-v2/config\"\n\t\"github.com/aws/aws-sdk-go-v2/feature/ec2/imds\"\n\t\"github.com/aws/aws-sdk-go-v2/service/ec2\"\n\t\"github.com/aws/aws-sdk-go-v2/service/eks\"\n\t\"github.com/aws/aws-sdk-go-v2/service/iam\"\n\t\"github.com/aws/aws-sdk-go-v2/service/ssm\"\n\t\"github.com/awslabs/operatorpkg/aws/middleware\"\n\t\"github.com/awslabs/operatorpkg/option\"\n\t\"sigs.k8s.io/controller-runtime/pkg/manager\"\n\n\t\"github.com/aws/smithy-go\"\n\t\"github.com/patrickmn/go-cache\"\n\t\"github.com/samber/lo\"\n\tcorev1 \"k8s.io/api/core/v1\"\n\tmetav1 \"k8s.io/apimachinery/pkg/apis/meta/v1\"\n\t\"k8s.io/client-go/kubernetes\"\n\t\"k8s.io/client-go/rest\"\n\t\"k8s.io/client-go/transport\"\n\t\"sigs.k8s.io/controller-runtime/pkg/client\"\n\t\"sigs.k8s.io/controller-runtime/pkg/log\"\n\tcrmetrics \"sigs.k8s.io/controller-runtime/pkg/metrics\"\n\n\tkarpv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n\t\"sigs.k8s.io/karpenter/pkg/operator\"\n\n\tprometheusv2 \"github.com/jonathan-innis/aws-sdk-go-prometheus/v2\"\n\n\tkwokec2 \"github.com/aws/karpenter-provider-aws/kwok/ec2\"\n\t\"github.com/aws/karpenter-provider-aws/kwok/strategy\"\n\tsdk \"github.com/aws/karpenter-provider-aws/pkg/aws\"\n\tawscache \"github.com/aws/karpenter-provider-aws/pkg/cache\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/operator/options\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/amifamily\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/capacityreservation\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/instance\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/instanceprofile\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/instancetype\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/launchtemplate\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/pricing\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/securitygroup\"\n\tssmp \"github.com/aws/karpenter-provider-aws/pkg/providers/ssm\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/subnet\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/version\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/utils\"\n)\n\nfunc init() {\n\tkarpv1.NormalizedLabels = lo.Assign(karpv1.NormalizedLabels, map[string]string{\"topology.ebs.csi.aws.com/zone\": corev1.LabelTopologyZone})\n}\n\n// Operator is injected into the AWS CloudProvider's factories\ntype Operator struct {\n\t*operator.Operator\n\tConfig                      aws.Config\n\tUnavailableOfferingsCache   *awscache.UnavailableOfferings\n\tSSMCache                    *cache.Cache\n\tValidationCache             *cache.Cache\n\tRecreationCache             *cache.Cache\n\tSubnetProvider              subnet.Provider\n\tSecurityGroupProvider       securitygroup.Provider\n\tInstanceProfileProvider     instanceprofile.Provider\n\tAMIProvider                 amifamily.Provider\n\tAMIResolver                 amifamily.Resolver\n\tLaunchTemplateProvider      launchtemplate.Provider\n\tPricingProvider             pricing.Provider\n\tVersionProvider             *version.DefaultProvider\n\tInstanceTypesProvider       *instancetype.DefaultProvider\n\tInstanceProvider            instance.Provider\n\tSSMProvider                 ssmp.Provider\n\tCapacityReservationProvider capacityreservation.Provider\n\tEC2API                      *kwokec2.Client\n}\n\nfunc NewOperator(ctx context.Context, operator *operator.Operator) (context.Context, *Operator) {\n\tcfg := prometheusv2.WithPrometheusMetrics(WithUserAgent(lo.Must(config.LoadDefaultConfig(ctx))), crmetrics.Registry)\n\tcfg.APIOptions = append(cfg.APIOptions, middleware.StructuredErrorHandler)\n\tif cfg.Region == \"\" {\n\t\tlog.FromContext(ctx).V(1).Info(\"retrieving region from IMDS\")\n\t\tregion := lo.Must(imds.NewFromConfig(cfg).GetRegion(ctx, nil))\n\t\tcfg.Region = region.Region\n\t}\n\tec2api := kwokec2.NewClient(cfg.Region, option.MustGetEnv(\"SYSTEM_NAMESPACE\"), ec2.NewFromConfig(cfg), kwokec2.NewNopRateLimiterProvider(), strategy.NewLowestPrice(pricing.NewAPI(cfg), ec2.NewFromConfig(cfg), cfg.Region), operator.GetClient(), operator.Clock)\n\n\teksapi := eks.NewFromConfig(cfg)\n\tlog.FromContext(ctx).WithValues(\"region\", cfg.Region).V(1).Info(\"discovered region\")\n\tclusterEndpoint := lo.Must(ResolveClusterEndpoint(ctx, eksapi))\n\tlog.FromContext(ctx).WithValues(\"cluster-endpoint\", clusterEndpoint).V(1).Info(\"discovered cluster endpoint\")\n\tkubeDNSIP, err := KubeDNSIP(ctx, operator.KubernetesInterface)\n\tif err != nil {\n\t\t// If we fail to get the kube-dns IP, we don't want to crash because this causes issues with custom DNS setups\n\t\t// https://github.com/aws/karpenter-provider-aws/issues/2787\n\t\tlog.FromContext(ctx).V(1).Info(fmt.Sprintf(\"unable to detect the IP of the kube-dns service, %s\", err))\n\t} else {\n\t\tlog.FromContext(ctx).WithValues(\"kube-dns-ip\", kubeDNSIP).V(1).Info(\"discovered kube dns\")\n\t}\n\tunavailableOfferingsCache := awscache.NewUnavailableOfferings()\n\tssmCache := cache.New(awscache.SSMCacheTTL, awscache.DefaultCleanupInterval)\n\tvalidationCache := cache.New(awscache.ValidationTTL, awscache.DefaultCleanupInterval)\n\trecreationCache := cache.New(awscache.RecreationTTL, awscache.DefaultCleanupInterval)\n\n\tsubnetProvider := subnet.NewDefaultProvider(ec2api, cache.New(awscache.DefaultTTL, awscache.DefaultCleanupInterval), cache.New(awscache.AvailableIPAddressTTL, awscache.DefaultCleanupInterval), cache.New(awscache.AssociatePublicIPAddressTTL, awscache.DefaultCleanupInterval))\n\tsecurityGroupProvider := securitygroup.NewDefaultProvider(ec2api, cache.New(awscache.DefaultTTL, awscache.DefaultCleanupInterval))\n\tinstanceProfileProvider := instanceprofile.NewDefaultProvider(\n\t\tiam.NewFromConfig(cfg),\n\t\tcache.New(awscache.InstanceProfileTTL, awscache.DefaultCleanupInterval),\n\t\tcache.New(awscache.DefaultTTL, awscache.DefaultCleanupInterval),\n\t\tcache.New(awscache.ProtectedProfilesTTL, awscache.DefaultCleanupInterval),\n\t\tcfg.Region,\n\t)\n\tpricingProvider := pricing.NewDefaultProvider(\n\t\tpricing.NewAPI(cfg),\n\t\tec2api,\n\t\tcfg.Region,\n\t\tfalse,\n\t)\n\tversionProvider := version.NewDefaultProvider(operator.KubernetesInterface, eksapi)\n\t// Ensure we're able to hydrate the version before starting any reliant controllers.\n\t// Version updates are hydrated asynchronously after this, in the event of a failure\n\t// the previously resolved value will be used.\n\tlo.Must0(versionProvider.UpdateVersion(ctx))\n\tssmProvider := ssmp.NewDefaultProvider(ssm.NewFromConfig(cfg), ssmCache)\n\tamiProvider := amifamily.NewDefaultProvider(operator.Clock, versionProvider, ssmProvider, ec2api, cache.New(awscache.DefaultTTL, awscache.DefaultCleanupInterval))\n\tamiResolver := amifamily.NewDefaultResolver(cfg.Region)\n\tlaunchTemplateProvider := launchtemplate.NewDefaultProvider(\n\t\tctx,\n\t\tcache.New(awscache.DefaultTTL, awscache.DefaultCleanupInterval),\n\t\tec2api,\n\t\teksapi,\n\t\tamiResolver,\n\t\tsecurityGroupProvider,\n\t\tsubnetProvider,\n\t\tlo.Must(GetCABundle(ctx, operator.GetConfig())),\n\t\toperator.Elected(),\n\t\tkubeDNSIP,\n\t\tclusterEndpoint,\n\t)\n\tcapacityReservationProvider := capacityreservation.NewProvider(\n\t\tec2api,\n\t\toperator.Clock,\n\t\tcache.New(awscache.DefaultTTL, awscache.DefaultCleanupInterval),\n\t\tcache.New(awscache.CapacityReservationAvailabilityTTL, awscache.DefaultCleanupInterval),\n\t)\n\tinstanceTypeProvider := instancetype.NewDefaultProvider(\n\t\tcache.New(awscache.InstanceTypesZonesAndOfferingsTTL, awscache.DefaultCleanupInterval),\n\t\tcache.New(awscache.InstanceTypesZonesAndOfferingsTTL, awscache.DefaultCleanupInterval),\n\t\tcache.New(awscache.DiscoveredCapacityCacheTTL, awscache.DefaultCleanupInterval),\n\t\tec2api,\n\t\tsubnetProvider,\n\t\tpricingProvider,\n\t\tcapacityReservationProvider,\n\t\tunavailableOfferingsCache,\n\t\tinstancetype.NewDefaultResolver(cfg.Region),\n\t)\n\t// Ensure we're able to hydrate instance types before starting any reliant controllers.\n\t// Instance type updates are hydrated asynchronously after this by controllers.\n\tlo.Must0(instanceTypeProvider.UpdateInstanceTypes(ctx))\n\tlo.Must0(instanceTypeProvider.UpdateInstanceTypeOfferings(ctx))\n\tinstanceProvider := instance.NewDefaultProvider(\n\t\tctx,\n\t\tcfg.Region,\n\t\toperator.EventRecorder,\n\t\tec2api,\n\t\tunavailableOfferingsCache,\n\t\tsubnetProvider,\n\t\tlaunchTemplateProvider,\n\t\tcapacityReservationProvider,\n\t\tcache.New(awscache.DefaultTTL, awscache.DefaultCleanupInterval),\n\t)\n\n\t// Setup field indexers on instanceID -- specifically for the interruption controller\n\tif options.FromContext(ctx).InterruptionQueue != \"\" {\n\t\tSetupIndexers(ctx, operator.Manager)\n\t}\n\treturn ctx, &Operator{\n\t\tOperator:                    operator,\n\t\tConfig:                      cfg,\n\t\tUnavailableOfferingsCache:   unavailableOfferingsCache,\n\t\tSSMCache:                    ssmCache,\n\t\tValidationCache:             validationCache,\n\t\tRecreationCache:             recreationCache,\n\t\tSubnetProvider:              subnetProvider,\n\t\tSecurityGroupProvider:       securityGroupProvider,\n\t\tInstanceProfileProvider:     instanceProfileProvider,\n\t\tAMIProvider:                 amiProvider,\n\t\tAMIResolver:                 amiResolver,\n\t\tVersionProvider:             versionProvider,\n\t\tLaunchTemplateProvider:      launchTemplateProvider,\n\t\tPricingProvider:             pricingProvider,\n\t\tInstanceTypesProvider:       instanceTypeProvider,\n\t\tInstanceProvider:            instanceProvider,\n\t\tSSMProvider:                 ssmProvider,\n\t\tCapacityReservationProvider: capacityReservationProvider,\n\t\tEC2API:                      ec2api,\n\t}\n}\n\n// WithUserAgent adds a karpenter specific user-agent string to AWS session\nfunc WithUserAgent(cfg aws.Config) aws.Config {\n\tuserAgent := fmt.Sprintf(\"karpenter.sh-%s\", operator.Version)\n\tcfg.APIOptions = append(cfg.APIOptions,\n\t\tawsmiddleware.AddUserAgentKey(userAgent),\n\t)\n\treturn cfg\n}\n\n// CheckEC2Connectivity makes a dry-run call to DescribeInstanceTypes.  If it fails, we provide an early indicator that we\n// are having issues connecting to the EC2 API.\nfunc CheckEC2Connectivity(ctx context.Context, api sdk.EC2API) error {\n\t_, err := api.DescribeInstanceTypes(ctx, &ec2.DescribeInstanceTypesInput{\n\t\tDryRun: aws.Bool(true),\n\t})\n\tvar apiErr smithy.APIError\n\tif errors.As(err, &apiErr) && apiErr.ErrorCode() == \"DryRunOperation\" {\n\t\treturn nil\n\t}\n\treturn err\n}\n\nfunc ResolveClusterEndpoint(ctx context.Context, eksAPI sdk.EKSAPI) (string, error) {\n\tclusterEndpointFromOptions := options.FromContext(ctx).ClusterEndpoint\n\tif clusterEndpointFromOptions != \"\" {\n\t\treturn clusterEndpointFromOptions, nil // cluster endpoint is explicitly set\n\t}\n\tout, err := eksAPI.DescribeCluster(ctx, &eks.DescribeClusterInput{\n\t\tName: aws.String(options.FromContext(ctx).ClusterName),\n\t})\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"failed to resolve cluster endpoint, %w\", err)\n\t}\n\treturn *out.Cluster.Endpoint, nil\n}\n\nfunc GetCABundle(ctx context.Context, restConfig *rest.Config) (*string, error) {\n\t// Discover CA Bundle from the REST client. We could alternatively\n\t// have used the simpler client-go InClusterConfig() method.\n\t// However, that only works when Karpenter is running as a Pod\n\t// within the same cluster it's managing.\n\tif caBundle := options.FromContext(ctx).ClusterCABundle; caBundle != \"\" {\n\t\treturn lo.ToPtr(caBundle), nil\n\t}\n\ttransportConfig, err := restConfig.TransportConfig()\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"discovering caBundle, loading transport config, %w\", err)\n\t}\n\t_, err = transport.TLSConfigFor(transportConfig) // fills in CAData!\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"discovering caBundle, loading TLS config, %w\", err)\n\t}\n\treturn lo.ToPtr(base64.StdEncoding.EncodeToString(transportConfig.TLS.CAData)), nil\n}\n\nfunc KubeDNSIP(ctx context.Context, kubernetesInterface kubernetes.Interface) (net.IP, error) {\n\tif kubernetesInterface == nil {\n\t\treturn nil, fmt.Errorf(\"no K8s client provided\")\n\t}\n\tdnsService, err := kubernetesInterface.CoreV1().Services(\"kube-system\").Get(ctx, \"kube-dns\", metav1.GetOptions{})\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tkubeDNSIP := net.ParseIP(dnsService.Spec.ClusterIP)\n\tif kubeDNSIP == nil {\n\t\treturn nil, fmt.Errorf(\"parsing cluster IP\")\n\t}\n\treturn kubeDNSIP, nil\n}\n\nfunc SetupIndexers(ctx context.Context, mgr manager.Manager) {\n\tlo.Must0(mgr.GetFieldIndexer().IndexField(ctx, &karpv1.NodeClaim{}, \"status.instanceID\", func(o client.Object) []string {\n\t\tif o.(*karpv1.NodeClaim).Status.ProviderID == \"\" {\n\t\t\treturn nil\n\t\t}\n\t\tid, e := utils.ParseInstanceID(o.(*karpv1.NodeClaim).Status.ProviderID)\n\t\tif e != nil || id == \"\" {\n\t\t\treturn nil\n\t\t}\n\t\treturn []string{id}\n\t}), \"failed to setup nodeclaim instanceID indexer\")\n\tlo.Must0(mgr.GetFieldIndexer().IndexField(ctx, &corev1.Node{}, \"spec.instanceID\", func(o client.Object) []string {\n\t\tif o.(*corev1.Node).Spec.ProviderID == \"\" {\n\t\t\treturn nil\n\t\t}\n\t\tid, e := utils.ParseInstanceID(o.(*corev1.Node).Spec.ProviderID)\n\t\tif e != nil || id == \"\" {\n\t\t\treturn nil\n\t\t}\n\t\treturn []string{id}\n\t}), \"failed to setup node instanceID indexer\")\n}\n"
  },
  {
    "path": "kwok/strategy/strategy.go",
    "content": "// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage strategy\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"math\"\n\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\t\"github.com/samber/lo\"\n\tv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n\n\tsdk \"github.com/aws/karpenter-provider-aws/pkg/aws\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/pricing\"\n)\n\ntype Strategy interface {\n\tGetScore(instanceType, capacityType, availabilityZone string) float64\n}\n\ntype LowestPrice struct {\n\tpricingProvider pricing.Provider\n}\n\nfunc NewLowestPrice(pricingAPI sdk.PricingAPI, ec2API sdk.EC2API, region string) *LowestPrice {\n\tpricingProvider := pricing.NewDefaultProvider(pricingAPI, ec2API, region, false)\n\tlo.Must0(pricingProvider.UpdateOnDemandPricing(context.Background()))\n\tlo.Must0(pricingProvider.UpdateSpotPricing(context.Background()))\n\treturn &LowestPrice{\n\t\tpricingProvider: pricingProvider,\n\t}\n}\n\nfunc (p *LowestPrice) GetScore(instanceType, capacityType, availabilityZone string) float64 {\n\tswitch capacityType {\n\tcase v1.CapacityTypeSpot:\n\t\tif score, ok := p.pricingProvider.SpotPrice(ec2types.InstanceType(instanceType), availabilityZone); ok {\n\t\t\treturn score\n\t\t}\n\t\treturn math.MaxFloat64\n\tcase v1.CapacityTypeOnDemand:\n\t\tif score, ok := p.pricingProvider.OnDemandPrice(ec2types.InstanceType(instanceType)); ok {\n\t\t\treturn score\n\t\t}\n\t\treturn math.MaxFloat64\n\tdefault:\n\t\tpanic(fmt.Sprintf(\"Unsupported capacity type: %s\", capacityType))\n\t}\n}\n"
  },
  {
    "path": "pkg/apis/apis.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n// Package apis contains Kubernetes API groups.\npackage apis\n\nimport (\n\t_ \"embed\"\n\n\t\"github.com/awslabs/operatorpkg/object\"\n\tapiextensionsv1 \"k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1\"\n)\n\n//go:generate controller-gen crd object:headerFile=\"../../hack/boilerplate.go.txt\" paths=\"./...\" output:crd:artifacts:config=crds\nvar (\n\tGroup              = \"karpenter.k8s.aws\"\n\tCompatibilityGroup = \"compatibility.\" + Group\n\t//go:embed crds/karpenter.k8s.aws_ec2nodeclasses.yaml\n\tEC2NodeClassCRD []byte\n\t//go:embed crds/karpenter.sh_nodepools.yaml\n\tNodePoolCRD []byte\n\t//go:embed crds/karpenter.sh_nodeclaims.yaml\n\tNodeClaimCRD []byte\n\t//go:embed crds/karpenter.sh_nodeoverlays.yaml\n\tNodeOverlayCRD []byte\n\tCRDs           = []*apiextensionsv1.CustomResourceDefinition{\n\t\tobject.Unmarshal[apiextensionsv1.CustomResourceDefinition](EC2NodeClassCRD),\n\t\tobject.Unmarshal[apiextensionsv1.CustomResourceDefinition](NodeClaimCRD),\n\t\tobject.Unmarshal[apiextensionsv1.CustomResourceDefinition](NodePoolCRD),\n\t\tobject.Unmarshal[apiextensionsv1.CustomResourceDefinition](NodeOverlayCRD),\n\t}\n)\n"
  },
  {
    "path": "pkg/apis/crds/karpenter.k8s.aws_ec2nodeclasses.yaml",
    "content": "---\napiVersion: apiextensions.k8s.io/v1\nkind: CustomResourceDefinition\nmetadata:\n  annotations:\n    controller-gen.kubebuilder.io/version: v0.20.1\n  name: ec2nodeclasses.karpenter.k8s.aws\nspec:\n  group: karpenter.k8s.aws\n  names:\n    categories:\n      - karpenter\n    kind: EC2NodeClass\n    listKind: EC2NodeClassList\n    plural: ec2nodeclasses\n    shortNames:\n      - ec2nc\n      - ec2ncs\n    singular: ec2nodeclass\n  scope: Cluster\n  versions:\n    - additionalPrinterColumns:\n        - jsonPath: .status.conditions[?(@.type==\"Ready\")].status\n          name: Ready\n          type: string\n        - jsonPath: .metadata.creationTimestamp\n          name: Age\n          type: date\n        - jsonPath: .spec.role\n          name: Role\n          priority: 1\n          type: string\n      name: v1\n      schema:\n        openAPIV3Schema:\n          description: EC2NodeClass is the Schema for the EC2NodeClass API\n          properties:\n            apiVersion:\n              description: |-\n                APIVersion defines the versioned schema of this representation of an object.\n                Servers should convert recognized schemas to the latest internal value, and\n                may reject unrecognized values.\n                More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources\n              type: string\n            kind:\n              description: |-\n                Kind is a string value representing the REST resource this object represents.\n                Servers may infer this from the endpoint the client submits requests to.\n                Cannot be updated.\n                In CamelCase.\n                More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds\n              type: string\n            metadata:\n              type: object\n            spec:\n              description: |-\n                EC2NodeClassSpec is the top level specification for the AWS Karpenter Provider.\n                This will contain configuration necessary to launch instances in AWS.\n              properties:\n                amiFamily:\n                  description: |-\n                    AMIFamily dictates the UserData format and default BlockDeviceMappings used when generating launch templates.\n                    This field is optional when using an alias amiSelectorTerm, and the value will be inferred from the alias'\n                    family. When an alias is specified, this field may only be set to its corresponding family or 'Custom'. If no\n                    alias is specified, this field is required.\n                    NOTE: We ignore the AMIFamily for hashing here because we hash the AMIFamily dynamically by using the alias using\n                    the AMIFamily() helper function\n                  enum:\n                    - AL2\n                    - AL2023\n                    - Bottlerocket\n                    - Custom\n                    - Windows2019\n                    - Windows2022\n                    - Windows2025\n                  type: string\n                amiSelectorTerms:\n                  description: AMISelectorTerms is a list of or ami selector terms. The terms are ORed.\n                  items:\n                    description: |-\n                      AMISelectorTerm defines selection logic for an ami used by Karpenter to launch nodes.\n                      If multiple fields are used for selection, the requirements are ANDed.\n                    properties:\n                      alias:\n                        description: |-\n                          Alias specifies which EKS optimized AMI to select.\n                          Each alias consists of a family and an AMI version, specified as \"family@version\".\n                          Valid families include: al2, al2023, bottlerocket, windows2019, windows2022, windows2025.\n                          The version can either be pinned to a specific AMI release, with that AMIs version format (ex: \"al2023@v20240625\" or \"bottlerocket@v1.10.0\").\n                          The version can also be set to \"latest\" for any family. Setting the version to latest will result in drift when a new AMI is released. This is **not** recommended for production environments.\n                          Note: The Windows families do **not** support version pinning, and only latest may be used.\n                        maxLength: 30\n                        type: string\n                        x-kubernetes-validations:\n                          - message: '''alias'' is improperly formatted, must match the format ''family@version'''\n                            rule: self.matches('^[a-zA-Z0-9]+@.+$')\n                          - message: 'family is not supported, must be one of the following: ''al2'', ''al2023'', ''bottlerocket'', ''windows2019'', ''windows2022'', ''windows2025'''\n                            rule: self.split('@')[0] in ['al2','al2023','bottlerocket','windows2019','windows2022','windows2025']\n                          - message: windows families may only specify version 'latest'\n                            rule: 'self.split(''@'')[0] in [''windows2019'',''windows2022'',''windows2025''] ? self.split(''@'')[1] == ''latest'' : true'\n                      id:\n                        description: ID is the ami id in EC2\n                        pattern: ami-[0-9a-z]+\n                        type: string\n                      name:\n                        description: |-\n                          Name is the ami name in EC2.\n                          This value is the name field, which is different from the name tag.\n                        type: string\n                      owner:\n                        description: |-\n                          Owner is the owner for the ami.\n                          You can specify a combination of AWS account IDs, \"self\", \"amazon\", and \"aws-marketplace\"\n                        type: string\n                      ssmParameter:\n                        description: SSMParameter is the name (or ARN) of the SSM parameter containing the Image ID.\n                        type: string\n                      tags:\n                        additionalProperties:\n                          type: string\n                        description: |-\n                          Tags is a map of key/value tags used to select amis.\n                          Specifying '*' for a value selects all values for a given tag key.\n                        maxProperties: 20\n                        type: object\n                        x-kubernetes-validations:\n                          - message: empty tag keys or values aren't supported\n                            rule: self.all(k, k != '' && self[k] != '')\n                    type: object\n                  maxItems: 30\n                  minItems: 1\n                  type: array\n                  x-kubernetes-validations:\n                    - message: expected at least one, got none, ['tags', 'id', 'name', 'alias', 'ssmParameter']\n                      rule: self.all(x, has(x.tags) || has(x.id) || has(x.name) || has(x.alias) || has(x.ssmParameter))\n                    - message: '''id'' is mutually exclusive, cannot be set with a combination of other fields in amiSelectorTerms'\n                      rule: '!self.exists(x, has(x.id) && (has(x.alias) || has(x.tags) || has(x.name) || has(x.owner)))'\n                    - message: '''alias'' is mutually exclusive, cannot be set with a combination of other fields in amiSelectorTerms'\n                      rule: '!self.exists(x, has(x.alias) && (has(x.id) || has(x.tags) || has(x.name) || has(x.owner)))'\n                    - message: '''alias'' is mutually exclusive, cannot be set with a combination of other amiSelectorTerms'\n                      rule: '!(self.exists(x, has(x.alias)) && self.size() != 1)'\n                associatePublicIPAddress:\n                  description: AssociatePublicIPAddress controls if public IP addresses are assigned to instances that are launched with the nodeclass.\n                  type: boolean\n                blockDeviceMappings:\n                  description: BlockDeviceMappings to be applied to provisioned nodes.\n                  items:\n                    properties:\n                      deviceName:\n                        description: The device name (for example, /dev/sdh or xvdh).\n                        type: string\n                      ebs:\n                        description: EBS contains parameters used to automatically set up EBS volumes when an instance is launched.\n                        properties:\n                          deleteOnTermination:\n                            description: DeleteOnTermination indicates whether the EBS volume is deleted on instance termination.\n                            type: boolean\n                          encrypted:\n                            description: |-\n                              Encrypted indicates whether the EBS volume is encrypted. Encrypted volumes can only\n                              be attached to instances that support Amazon EBS encryption. If you are creating\n                              a volume from a snapshot, you can't specify an encryption value.\n                            type: boolean\n                          iops:\n                            description: |-\n                              IOPS is the number of I/O operations per second (IOPS). For gp3, io1, and io2 volumes,\n                              this represents the number of IOPS that are provisioned for the volume. For\n                              gp2 volumes, this represents the baseline performance of the volume and the\n                              rate at which the volume accumulates I/O credits for bursting.\n\n                              The following are the supported values for each volume type:\n\n                                 * gp3: 3,000-16,000 IOPS\n\n                                 * io1: 100-64,000 IOPS\n\n                                 * io2: 100-64,000 IOPS\n\n                              For io1 and io2 volumes, we guarantee 64,000 IOPS only for Instances built\n                              on the Nitro System (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances).\n                              Other instance families guarantee performance up to 32,000 IOPS.\n\n                              This parameter is supported for io1, io2, and gp3 volumes only. This parameter\n                              is not supported for gp2, st1, sc1, or standard volumes.\n                            format: int64\n                            type: integer\n                          kmsKeyID:\n                            description: Identifier (key ID, key alias, key ARN, or alias ARN) of the customer managed KMS key to use for EBS encryption.\n                            type: string\n                          snapshotID:\n                            description: SnapshotID is the ID of an EBS snapshot\n                            type: string\n                          throughput:\n                            description: |-\n                              Throughput to provision for a gp3 volume, with a maximum of 1,000 MiB/s.\n                              Valid Range: Minimum value of 125. Maximum value of 1000.\n                            format: int64\n                            type: integer\n                          volumeInitializationRate:\n                            description: |-\n                              VolumeInitializationRate specifies the Amazon EBS Provisioned Rate for Volume Initialization,\n                              in MiB/s, at which to download the snapshot blocks from Amazon S3 to the volume. This is also known as volume\n                              initialization. Specifying a volume initialization rate ensures that the volume is initialized at a\n                              predictable and consistent rate after creation. Only allowed if SnapshotID is set.\n                              Valid Range: Minimum value of 100. Maximum value of 300.\n                            format: int32\n                            maximum: 300\n                            minimum: 100\n                            type: integer\n                          volumeSize:\n                            description: |-\n                              VolumeSize in `Gi`, `G`, `Ti`, or `T`. You must specify either a snapshot ID or\n                              a volume size. The following are the supported volumes sizes for each volume\n                              type:\n\n                                 * gp2 and gp3: 1-16,384\n\n                                 * io1 and io2: 4-16,384\n\n                                 * st1 and sc1: 125-16,384\n\n                                 * standard: 1-1,024\n                            pattern: ^((?:[1-9][0-9]{0,3}|[1-4][0-9]{4}|[5][0-8][0-9]{3}|59000)Gi|(?:[1-9][0-9]{0,3}|[1-5][0-9]{4}|[6][0-3][0-9]{3}|64000)G|([1-9]||[1-5][0-7]|58)Ti|([1-9]||[1-5][0-9]|6[0-3]|64)T)$\n                            type: string\n                          volumeType:\n                            description: |-\n                              VolumeType of the block device.\n                              For more information, see Amazon EBS volume types (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html)\n                              in the Amazon Elastic Compute Cloud User Guide.\n                            enum:\n                              - standard\n                              - io1\n                              - io2\n                              - gp2\n                              - sc1\n                              - st1\n                              - gp3\n                            type: string\n                        type: object\n                        x-kubernetes-validations:\n                          - message: snapshotID or volumeSize must be defined\n                            rule: has(self.snapshotID) || has(self.volumeSize)\n                          - message: snapshotID must be set when volumeInitializationRate is set\n                            rule: '!has(self.volumeInitializationRate) || (has(self.snapshotID) && self.snapshotID != '''')'\n                      rootVolume:\n                        description: |-\n                          RootVolume is a flag indicating if this device is mounted as kubelet root dir. You can\n                          configure at most one root volume in BlockDeviceMappings.\n                        type: boolean\n                    type: object\n                  maxItems: 50\n                  type: array\n                  x-kubernetes-validations:\n                    - message: must have only one blockDeviceMappings with rootVolume\n                      rule: self.filter(x, has(x.rootVolume)?x.rootVolume==true:false).size() <= 1\n                capacityReservationSelectorTerms:\n                  description: |-\n                    CapacityReservationSelectorTerms is a list of capacity reservation selector terms. Each term is ORed together to\n                    determine the set of eligible capacity reservations.\n                  items:\n                    properties:\n                      id:\n                        description: ID is the capacity reservation id in EC2\n                        pattern: ^cr-[0-9a-z]+$\n                        type: string\n                      instanceMatchCriteria:\n                        description: InstanceMatchCriteria specifies how instances are matched to capacity reservations.\n                        enum:\n                          - open\n                          - targeted\n                        type: string\n                      ownerID:\n                        description: Owner is the owner id for the ami.\n                        pattern: ^[0-9]{12}$\n                        type: string\n                      tags:\n                        additionalProperties:\n                          type: string\n                        description: |-\n                          Tags is a map of key/value tags used to select capacity reservations.\n                          Specifying '*' for a value selects all values for a given tag key.\n                        maxProperties: 20\n                        type: object\n                        x-kubernetes-validations:\n                          - message: empty tag keys or values aren't supported\n                            rule: self.all(k, k != '' && self[k] != '')\n                    type: object\n                  maxItems: 30\n                  type: array\n                  x-kubernetes-validations:\n                    - message: expected at least one, got none, ['tags', 'id', 'instanceMatchCriteria']\n                      rule: self.all(x, has(x.tags) || has(x.id) || has(x.instanceMatchCriteria))\n                    - message: '''id'' is mutually exclusive, cannot be set along with other fields in a capacity reservation selector term'\n                      rule: '!self.all(x, has(x.id) && (has(x.tags) || has(x.ownerID) || has(x.instanceMatchCriteria)))'\n                context:\n                  description: |-\n                    Context is a Reserved field in EC2 APIs\n                    https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet.html\n                  type: string\n                detailedMonitoring:\n                  description: DetailedMonitoring controls if detailed monitoring is enabled for instances that are launched\n                  type: boolean\n                instanceProfile:\n                  description: |-\n                    InstanceProfile is the AWS entity that instances use.\n                    This field is mutually exclusive from role.\n                    The instance profile should already have a role assigned to it that Karpenter\n                     has PassRole permission on for instance launch using this instanceProfile to succeed.\n                  type: string\n                  x-kubernetes-validations:\n                    - message: instanceProfile cannot be empty\n                      rule: self != ''\n                instanceStorePolicy:\n                  description: InstanceStorePolicy specifies how to handle instance-store disks.\n                  enum:\n                    - RAID0\n                  type: string\n                ipPrefixCount:\n                  description: IPPrefixCount sets the number of IPv4 prefixes to be automatically assigned to the network interface.\n                  format: int32\n                  minimum: 0\n                  type: integer\n                kubelet:\n                  description: |-\n                    Kubelet defines args to be used when configuring kubelet on provisioned nodes.\n                    They are a subset of the upstream types, recognizing not all options may be supported.\n                    Wherever possible, the types and names should reflect the upstream kubelet types.\n                  properties:\n                    clusterDNS:\n                      description: |-\n                        clusterDNS is a list of IP addresses for the cluster DNS server.\n                        Note that not all providers may use all addresses.\n                      items:\n                        type: string\n                      type: array\n                    cpuCFSQuota:\n                      description: CPUCFSQuota enables CPU CFS quota enforcement for containers that specify CPU limits.\n                      type: boolean\n                    evictionHard:\n                      additionalProperties:\n                        type: string\n                        pattern: ^((\\d{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)%||(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?)$\n                      description: EvictionHard is the map of signal names to quantities that define hard eviction thresholds\n                      type: object\n                      x-kubernetes-validations:\n                        - message: valid keys for evictionHard are ['memory.available','nodefs.available','nodefs.inodesFree','imagefs.available','imagefs.inodesFree','pid.available']\n                          rule: self.all(x, x in ['memory.available','nodefs.available','nodefs.inodesFree','imagefs.available','imagefs.inodesFree','pid.available'])\n                    evictionMaxPodGracePeriod:\n                      description: |-\n                        EvictionMaxPodGracePeriod is the maximum allowed grace period (in seconds) to use when terminating pods in\n                        response to soft eviction thresholds being met.\n                      format: int32\n                      type: integer\n                    evictionSoft:\n                      additionalProperties:\n                        type: string\n                        pattern: ^((\\d{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)%||(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?)$\n                      description: EvictionSoft is the map of signal names to quantities that define soft eviction thresholds\n                      type: object\n                      x-kubernetes-validations:\n                        - message: valid keys for evictionSoft are ['memory.available','nodefs.available','nodefs.inodesFree','imagefs.available','imagefs.inodesFree','pid.available']\n                          rule: self.all(x, x in ['memory.available','nodefs.available','nodefs.inodesFree','imagefs.available','imagefs.inodesFree','pid.available'])\n                    evictionSoftGracePeriod:\n                      additionalProperties:\n                        type: string\n                      description: EvictionSoftGracePeriod is the map of signal names to quantities that define grace periods for each eviction signal\n                      type: object\n                      x-kubernetes-validations:\n                        - message: valid keys for evictionSoftGracePeriod are ['memory.available','nodefs.available','nodefs.inodesFree','imagefs.available','imagefs.inodesFree','pid.available']\n                          rule: self.all(x, x in ['memory.available','nodefs.available','nodefs.inodesFree','imagefs.available','imagefs.inodesFree','pid.available'])\n                    imageGCHighThresholdPercent:\n                      description: |-\n                        ImageGCHighThresholdPercent is the percent of disk usage after which image\n                        garbage collection is always run. The percent is calculated by dividing this\n                        field value by 100, so this field must be between 0 and 100, inclusive.\n                        When specified, the value must be greater than ImageGCLowThresholdPercent.\n                      format: int32\n                      maximum: 100\n                      minimum: 0\n                      type: integer\n                    imageGCLowThresholdPercent:\n                      description: |-\n                        ImageGCLowThresholdPercent is the percent of disk usage before which image\n                        garbage collection is never run. Lowest disk usage to garbage collect to.\n                        The percent is calculated by dividing this field value by 100,\n                        so the field value must be between 0 and 100, inclusive.\n                        When specified, the value must be less than imageGCHighThresholdPercent\n                      format: int32\n                      maximum: 100\n                      minimum: 0\n                      type: integer\n                    kubeReserved:\n                      additionalProperties:\n                        type: string\n                        pattern: ^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$\n                      description: KubeReserved contains resources reserved for Kubernetes system components.\n                      type: object\n                      x-kubernetes-validations:\n                        - message: valid keys for kubeReserved are ['cpu','memory','ephemeral-storage','pid']\n                          rule: self.all(x, x=='cpu' || x=='memory' || x=='ephemeral-storage' || x=='pid')\n                        - message: kubeReserved value cannot be a negative resource quantity\n                          rule: self.all(x, !self[x].startsWith('-'))\n                    maxPods:\n                      description: |-\n                        MaxPods is an override for the maximum number of pods that can run on\n                        a worker node instance.\n                      format: int32\n                      minimum: 0\n                      type: integer\n                    podsPerCore:\n                      description: |-\n                        PodsPerCore is an override for the number of pods that can run on a worker node\n                        instance based on the number of cpu cores. This value cannot exceed MaxPods, so, if\n                        MaxPods is a lower value, that value will be used.\n                      format: int32\n                      minimum: 0\n                      type: integer\n                    systemReserved:\n                      additionalProperties:\n                        type: string\n                        pattern: ^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$\n                      description: SystemReserved contains resources reserved for OS system daemons and kernel memory.\n                      type: object\n                      x-kubernetes-validations:\n                        - message: valid keys for systemReserved are ['cpu','memory','ephemeral-storage','pid']\n                          rule: self.all(x, x=='cpu' || x=='memory' || x=='ephemeral-storage' || x=='pid')\n                        - message: systemReserved value cannot be a negative resource quantity\n                          rule: self.all(x, !self[x].startsWith('-'))\n                  type: object\n                  x-kubernetes-validations:\n                    - message: imageGCHighThresholdPercent must be greater than imageGCLowThresholdPercent\n                      rule: 'has(self.imageGCHighThresholdPercent) && has(self.imageGCLowThresholdPercent) ?  self.imageGCHighThresholdPercent > self.imageGCLowThresholdPercent  : true'\n                    - message: evictionSoft OwnerKey does not have a matching evictionSoftGracePeriod\n                      rule: has(self.evictionSoft) ? self.evictionSoft.all(e, (e in self.evictionSoftGracePeriod)):true\n                    - message: evictionSoftGracePeriod OwnerKey does not have a matching evictionSoft\n                      rule: has(self.evictionSoftGracePeriod) ? self.evictionSoftGracePeriod.all(e, (e in self.evictionSoft)):true\n                metadataOptions:\n                  default:\n                    httpEndpoint: enabled\n                    httpProtocolIPv6: disabled\n                    httpPutResponseHopLimit: 1\n                    httpTokens: required\n                  description: |-\n                    MetadataOptions for the generated launch template of provisioned nodes.\n\n                    This specifies the exposure of the Instance Metadata Service to\n                    provisioned EC2 nodes. For more information,\n                    see Instance Metadata and User Data\n                    (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html)\n                    in the Amazon Elastic Compute Cloud User Guide.\n\n                    Refer to recommended, security best practices\n                    (https://aws.github.io/aws-eks-best-practices/security/docs/iam/#restrict-access-to-the-instance-profile-assigned-to-the-worker-node)\n                    for limiting exposure of Instance Metadata and User Data to pods.\n                    If omitted, defaults to httpEndpoint enabled, with httpProtocolIPv6\n                    disabled, with httpPutResponseLimit of 1, and with httpTokens\n                    required.\n                  properties:\n                    httpEndpoint:\n                      default: enabled\n                      description: |-\n                        HTTPEndpoint enables or disables the HTTP metadata endpoint on provisioned\n                        nodes. If metadata options is non-nil, but this parameter is not specified,\n                        the default state is \"enabled\".\n\n                        If you specify a value of \"disabled\", instance metadata will not be accessible\n                        on the node.\n                      enum:\n                        - enabled\n                        - disabled\n                      type: string\n                    httpProtocolIPv6:\n                      default: disabled\n                      description: |-\n                        HTTPProtocolIPv6 enables or disables the IPv6 endpoint for the instance metadata\n                        service on provisioned nodes. If metadata options is non-nil, but this parameter\n                        is not specified, the default state is \"disabled\".\n                      enum:\n                        - enabled\n                        - disabled\n                      type: string\n                    httpPutResponseHopLimit:\n                      default: 1\n                      description: |-\n                        HTTPPutResponseHopLimit is the desired HTTP PUT response hop limit for\n                        instance metadata requests. The larger the number, the further instance\n                        metadata requests can travel. Possible values are integers from 1 to 64.\n                        If metadata options is non-nil, but this parameter is not specified, the\n                        default value is 1.\n                      format: int64\n                      maximum: 64\n                      minimum: 1\n                      type: integer\n                    httpTokens:\n                      default: required\n                      description: |-\n                        HTTPTokens determines the state of token usage for instance metadata\n                        requests. If metadata options is non-nil, but this parameter is not\n                        specified, the default state is \"required\".\n\n                        If the state is optional, one can choose to retrieve instance metadata with\n                        or without a signed token header on the request. If one retrieves the IAM\n                        role credentials without a token, the version 1.0 role credentials are\n                        returned. If one retrieves the IAM role credentials using a valid signed\n                        token, the version 2.0 role credentials are returned.\n\n                        If the state is \"required\", one must send a signed token header with any\n                        instance metadata retrieval requests. In this state, retrieving the IAM\n                        role credentials always returns the version 2.0 credentials; the version\n                        1.0 credentials are not available.\n                      enum:\n                        - required\n                        - optional\n                      type: string\n                  type: object\n                role:\n                  description: |-\n                    Role is the AWS identity that nodes use.\n                    This field is mutually exclusive from instanceProfile.\n                  type: string\n                  x-kubernetes-validations:\n                    - message: role cannot be empty\n                      rule: self != ''\n                securityGroupSelectorTerms:\n                  description: SecurityGroupSelectorTerms is a list of security group selector terms. The terms are ORed.\n                  items:\n                    description: |-\n                      SecurityGroupSelectorTerm defines selection logic for a security group used by Karpenter to launch nodes.\n                      If multiple fields are used for selection, the requirements are ANDed.\n                    properties:\n                      id:\n                        description: ID is the security group id in EC2\n                        pattern: sg-[0-9a-z]+\n                        type: string\n                      name:\n                        description: |-\n                          Name is the security group name in EC2.\n                          This value is the name field, which is different from the name tag.\n                        type: string\n                      tags:\n                        additionalProperties:\n                          type: string\n                        description: |-\n                          Tags is a map of key/value tags used to select security groups.\n                          Specifying '*' for a value selects all values for a given tag key.\n                        maxProperties: 20\n                        type: object\n                        x-kubernetes-validations:\n                          - message: empty tag keys or values aren't supported\n                            rule: self.all(k, k != '' && self[k] != '')\n                    type: object\n                  maxItems: 30\n                  type: array\n                  x-kubernetes-validations:\n                    - message: securityGroupSelectorTerms cannot be empty\n                      rule: self.size() != 0\n                    - message: expected at least one, got none, ['tags', 'id', 'name']\n                      rule: self.all(x, has(x.tags) || has(x.id) || has(x.name))\n                    - message: '''id'' is mutually exclusive, cannot be set with a combination of other fields in a security group selector term'\n                      rule: '!self.all(x, has(x.id) && (has(x.tags) || has(x.name)))'\n                    - message: '''name'' is mutually exclusive, cannot be set with a combination of other fields in a security group selector term'\n                      rule: '!self.all(x, has(x.name) && (has(x.tags) || has(x.id)))'\n                subnetSelectorTerms:\n                  description: SubnetSelectorTerms is a list of subnet selector terms. The terms are ORed.\n                  items:\n                    description: |-\n                      SubnetSelectorTerm defines selection logic for a subnet used by Karpenter to launch nodes.\n                      If multiple fields are used for selection, the requirements are ANDed.\n                    properties:\n                      id:\n                        description: ID is the subnet id in EC2\n                        pattern: subnet-[0-9a-z]+\n                        type: string\n                      tags:\n                        additionalProperties:\n                          type: string\n                        description: |-\n                          Tags is a map of key/value tags used to select subnets\n                          Specifying '*' for a value selects all values for a given tag key.\n                        maxProperties: 20\n                        type: object\n                        x-kubernetes-validations:\n                          - message: empty tag keys or values aren't supported\n                            rule: self.all(k, k != '' && self[k] != '')\n                    type: object\n                  maxItems: 30\n                  type: array\n                  x-kubernetes-validations:\n                    - message: subnetSelectorTerms cannot be empty\n                      rule: self.size() != 0\n                    - message: expected at least one, got none, ['tags', 'id']\n                      rule: self.all(x, has(x.tags) || has(x.id))\n                    - message: '''id'' is mutually exclusive, cannot be set with a combination of other fields in a subnet selector term'\n                      rule: '!self.all(x, has(x.id) && has(x.tags))'\n                tags:\n                  additionalProperties:\n                    type: string\n                  description: Tags to be applied on ec2 resources like instances and launch templates.\n                  type: object\n                  x-kubernetes-validations:\n                    - message: empty tag keys aren't supported\n                      rule: self.all(k, k != '')\n                    - message: tag contains a restricted tag matching eks:eks-cluster-name\n                      rule: self.all(k, k !='eks:eks-cluster-name')\n                    - message: tag contains a restricted tag matching kubernetes.io/cluster/\n                      rule: self.all(k, !k.startsWith('kubernetes.io/cluster') )\n                    - message: tag contains a restricted tag matching karpenter.sh/nodepool\n                      rule: self.all(k, k != 'karpenter.sh/nodepool')\n                    - message: tag contains a restricted tag matching karpenter.sh/nodeclaim\n                      rule: self.all(k, k !='karpenter.sh/nodeclaim')\n                    - message: tag contains a restricted tag matching karpenter.k8s.aws/ec2nodeclass\n                      rule: self.all(k, k !='karpenter.k8s.aws/ec2nodeclass')\n                userData:\n                  description: |-\n                    UserData to be applied to the provisioned nodes.\n                    It must be in the appropriate format based on the AMIFamily in use. Karpenter will merge certain fields into\n                    this UserData to ensure nodes are being provisioned with the correct configuration.\n                  type: string\n              required:\n                - amiSelectorTerms\n                - securityGroupSelectorTerms\n                - subnetSelectorTerms\n              type: object\n              x-kubernetes-validations:\n                - message: must specify exactly one of ['role', 'instanceProfile']\n                  rule: (has(self.role) && !has(self.instanceProfile)) || (!has(self.role) && has(self.instanceProfile))\n                - message: if set, amiFamily must be 'AL2' or 'Custom' when using an AL2 alias\n                  rule: '!has(self.amiFamily) || (self.amiSelectorTerms.exists(x, has(x.alias) && x.alias.find(''^[^@]+'') == ''al2'') ? (self.amiFamily == ''Custom'' || self.amiFamily == ''AL2'') : true)'\n                - message: if set, amiFamily must be 'AL2023' or 'Custom' when using an AL2023 alias\n                  rule: '!has(self.amiFamily) || (self.amiSelectorTerms.exists(x, has(x.alias) && x.alias.find(''^[^@]+'') == ''al2023'') ? (self.amiFamily == ''Custom'' || self.amiFamily == ''AL2023'') : true)'\n                - message: if set, amiFamily must be 'Bottlerocket' or 'Custom' when using a Bottlerocket alias\n                  rule: '!has(self.amiFamily) || (self.amiSelectorTerms.exists(x, has(x.alias) && x.alias.find(''^[^@]+'') == ''bottlerocket'') ? (self.amiFamily == ''Custom'' || self.amiFamily == ''Bottlerocket'') : true)'\n                - message: if set, amiFamily must be 'Windows2019' or 'Custom' when using a Windows2019 alias\n                  rule: '!has(self.amiFamily) || (self.amiSelectorTerms.exists(x, has(x.alias) && x.alias.find(''^[^@]+'') == ''windows2019'') ? (self.amiFamily == ''Custom'' || self.amiFamily == ''Windows2019'') : true)'\n                - message: if set, amiFamily must be 'Windows2022' or 'Custom' when using a Windows2022 alias\n                  rule: '!has(self.amiFamily) || (self.amiSelectorTerms.exists(x, has(x.alias) && x.alias.find(''^[^@]+'') == ''windows2022'') ? (self.amiFamily == ''Custom'' || self.amiFamily == ''Windows2022'') : true)'\n                - message: if set, amiFamily must be 'Windows2025' or 'Custom' when using a Windows2025 alias\n                  rule: '!has(self.amiFamily) || (self.amiSelectorTerms.exists(x, has(x.alias) && x.alias.find(''^[^@]+'') == ''windows2025'') ? (self.amiFamily == ''Custom'' || self.amiFamily == ''Windows2025'') : true)'\n                - message: must specify amiFamily if amiSelectorTerms does not contain an alias\n                  rule: 'self.amiSelectorTerms.exists(x, has(x.alias)) ? true : has(self.amiFamily)'\n            status:\n              description: EC2NodeClassStatus contains the resolved state of the EC2NodeClass\n              properties:\n                amis:\n                  description: |-\n                    AMI contains the current AMI values that are available to the\n                    cluster under the AMI selectors.\n                  items:\n                    description: AMI contains resolved AMI selector values utilized for node launch\n                    properties:\n                      deprecated:\n                        description: Deprecation status of the AMI\n                        type: boolean\n                      id:\n                        description: ID of the AMI\n                        type: string\n                      name:\n                        description: Name of the AMI\n                        type: string\n                      requirements:\n                        description: Requirements of the AMI to be utilized on an instance type\n                        items:\n                          description: |-\n                            A node selector requirement is a selector that contains values, a key, and an operator\n                            that relates the key and values.\n                          properties:\n                            key:\n                              description: The label key that the selector applies to.\n                              type: string\n                            operator:\n                              description: |-\n                                Represents a key's relationship to a set of values.\n                                Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.\n                              type: string\n                            values:\n                              description: |-\n                                An array of string values. If the operator is In or NotIn,\n                                the values array must be non-empty. If the operator is Exists or DoesNotExist,\n                                the values array must be empty. If the operator is Gt or Lt, the values\n                                array must have a single element, which will be interpreted as an integer.\n                                This array is replaced during a strategic merge patch.\n                              items:\n                                type: string\n                              type: array\n                              x-kubernetes-list-type: atomic\n                          required:\n                            - key\n                            - operator\n                          type: object\n                        type: array\n                    required:\n                      - id\n                      - requirements\n                    type: object\n                  type: array\n                capacityReservations:\n                  description: |-\n                    CapacityReservations contains the current capacity reservation values that are available to this NodeClass under the\n                    CapacityReservation selectors.\n                  items:\n                    properties:\n                      availabilityZone:\n                        description: The availability zone the capacity reservation is available in.\n                        type: string\n                      endTime:\n                        description: |-\n                          The time at which the capacity reservation expires. Once expired, the reserved capacity is released and Karpenter\n                          will no longer be able to launch instances into that reservation.\n                        format: date-time\n                        type: string\n                      id:\n                        description: The id for the capacity reservation.\n                        pattern: ^cr-[0-9a-z]+$\n                        type: string\n                      instanceMatchCriteria:\n                        description: Indicates the type of instance launches the capacity reservation accepts.\n                        enum:\n                          - open\n                          - targeted\n                        type: string\n                      instanceType:\n                        description: The instance type for the capacity reservation.\n                        type: string\n                      interruptible:\n                        description: Indicates whether this capacity reservation is interruptible\n                        type: boolean\n                      ownerID:\n                        description: The ID of the AWS account that owns the capacity reservation.\n                        pattern: ^[0-9]{12}$\n                        type: string\n                      reservationType:\n                        default: default\n                        description: The type of capacity reservation.\n                        enum:\n                          - default\n                          - capacity-block\n                        type: string\n                      state:\n                        default: active\n                        description: |-\n                          The state of the capacity reservation. A capacity reservation is considered to be expiring if it is within the EC2\n                          reclaimation window. Only capacity-block reservations may be in this state.\n                        enum:\n                          - active\n                          - expiring\n                        type: string\n                    required:\n                      - availabilityZone\n                      - id\n                      - instanceMatchCriteria\n                      - instanceType\n                      - ownerID\n                    type: object\n                  type: array\n                conditions:\n                  description: Conditions contains signals for health and readiness\n                  items:\n                    description: Condition aliases the upstream type and adds additional helper methods\n                    properties:\n                      lastTransitionTime:\n                        description: |-\n                          lastTransitionTime is the last time the condition transitioned from one status to another.\n                          This should be when the underlying condition changed.  If that is not known, then using the time when the API field changed is acceptable.\n                        format: date-time\n                        type: string\n                      message:\n                        description: |-\n                          message is a human readable message indicating details about the transition.\n                          This may be an empty string.\n                        maxLength: 32768\n                        type: string\n                      observedGeneration:\n                        description: |-\n                          observedGeneration represents the .metadata.generation that the condition was set based upon.\n                          For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\n                          with respect to the current state of the instance.\n                        format: int64\n                        minimum: 0\n                        type: integer\n                      reason:\n                        description: |-\n                          reason contains a programmatic identifier indicating the reason for the condition's last transition.\n                          Producers of specific condition types may define expected values and meanings for this field,\n                          and whether the values are considered a guaranteed API.\n                          The value should be a CamelCase string.\n                          This field may not be empty.\n                        maxLength: 1024\n                        minLength: 1\n                        pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$\n                        type: string\n                      status:\n                        description: status of the condition, one of True, False, Unknown.\n                        enum:\n                          - \"True\"\n                          - \"False\"\n                          - Unknown\n                        type: string\n                      type:\n                        description: type of condition in CamelCase or in foo.example.com/CamelCase.\n                        maxLength: 316\n                        pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$\n                        type: string\n                    required:\n                      - lastTransitionTime\n                      - message\n                      - reason\n                      - status\n                      - type\n                    type: object\n                  type: array\n                instanceProfile:\n                  description: InstanceProfile contains the resolved instance profile for the role\n                  type: string\n                securityGroups:\n                  description: |-\n                    SecurityGroups contains the current security group values that are available to the\n                    cluster under the SecurityGroups selectors.\n                  items:\n                    description: SecurityGroup contains resolved SecurityGroup selector values utilized for node launch\n                    properties:\n                      id:\n                        description: ID of the security group\n                        type: string\n                      name:\n                        description: Name of the security group\n                        type: string\n                    required:\n                      - id\n                    type: object\n                  type: array\n                subnets:\n                  description: |-\n                    Subnets contains the current subnet values that are available to the\n                    cluster under the subnet selectors.\n                  items:\n                    description: Subnet contains resolved Subnet selector values utilized for node launch\n                    properties:\n                      id:\n                        description: ID of the subnet\n                        type: string\n                      zone:\n                        description: The associated availability zone\n                        type: string\n                      zoneID:\n                        description: The associated availability zone ID\n                        type: string\n                    required:\n                      - id\n                      - zone\n                    type: object\n                  type: array\n              type: object\n          type: object\n      served: true\n      storage: true\n      subresources:\n        status: {}\n"
  },
  {
    "path": "pkg/apis/crds/karpenter.sh_nodeclaims.yaml",
    "content": "---\napiVersion: apiextensions.k8s.io/v1\nkind: CustomResourceDefinition\nmetadata:\n  annotations:\n    controller-gen.kubebuilder.io/version: v0.19.0\n  name: nodeclaims.karpenter.sh\nspec:\n  group: karpenter.sh\n  names:\n    categories:\n      - karpenter\n    kind: NodeClaim\n    listKind: NodeClaimList\n    plural: nodeclaims\n    singular: nodeclaim\n  scope: Cluster\n  versions:\n    - additionalPrinterColumns:\n        - jsonPath: .metadata.labels.node\\.kubernetes\\.io/instance-type\n          name: Type\n          type: string\n        - jsonPath: .metadata.labels.karpenter\\.sh/capacity-type\n          name: Capacity\n          type: string\n        - jsonPath: .metadata.labels.topology\\.kubernetes\\.io/zone\n          name: Zone\n          type: string\n        - jsonPath: .status.nodeName\n          name: Node\n          type: string\n        - jsonPath: .status.conditions[?(@.type==\"Ready\")].status\n          name: Ready\n          type: string\n        - jsonPath: .metadata.creationTimestamp\n          name: Age\n          type: date\n        - jsonPath: .status.imageID\n          name: ImageID\n          priority: 1\n          type: string\n        - jsonPath: .status.providerID\n          name: ID\n          priority: 1\n          type: string\n        - jsonPath: .metadata.labels.karpenter\\.sh/nodepool\n          name: NodePool\n          priority: 1\n          type: string\n        - jsonPath: .spec.nodeClassRef.name\n          name: NodeClass\n          priority: 1\n          type: string\n        - jsonPath: .status.conditions[?(@.type==\"Drifted\")].status\n          name: Drifted\n          priority: 1\n          type: string\n      name: v1\n      schema:\n        openAPIV3Schema:\n          description: NodeClaim is the Schema for the NodeClaims API\n          properties:\n            apiVersion:\n              description: |-\n                APIVersion defines the versioned schema of this representation of an object.\n                Servers should convert recognized schemas to the latest internal value, and\n                may reject unrecognized values.\n                More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources\n              type: string\n            kind:\n              description: |-\n                Kind is a string value representing the REST resource this object represents.\n                Servers may infer this from the endpoint the client submits requests to.\n                Cannot be updated.\n                In CamelCase.\n                More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds\n              type: string\n            metadata:\n              type: object\n            spec:\n              description: NodeClaimSpec describes the desired state of the NodeClaim\n              properties:\n                expireAfter:\n                  default: 720h\n                  description: |-\n                    ExpireAfter is the duration the controller will wait\n                    before terminating a node, measured from when the node is created. This\n                    is useful to implement features like eventually consistent node upgrade,\n                    memory leak protection, and disruption testing.\n                  pattern: ^(([0-9]+(s|m|h))+|Never)$\n                  type: string\n                nodeClassRef:\n                  description: NodeClassRef is a reference to an object that defines provider specific configuration\n                  properties:\n                    group:\n                      description: API version of the referent\n                      pattern: ^[^/]*$\n                      type: string\n                      x-kubernetes-validations:\n                        - message: group may not be empty\n                          rule: self != ''\n                    kind:\n                      description: 'Kind of the referent; More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds\"'\n                      type: string\n                      x-kubernetes-validations:\n                        - message: kind may not be empty\n                          rule: self != ''\n                    name:\n                      description: 'Name of the referent; More info: http://kubernetes.io/docs/user-guide/identifiers#names'\n                      type: string\n                      x-kubernetes-validations:\n                        - message: name may not be empty\n                          rule: self != ''\n                  required:\n                    - group\n                    - kind\n                    - name\n                  type: object\n                requirements:\n                  description: Requirements are layered with GetLabels and applied to every node.\n                  items:\n                    description: |-\n                      A node selector requirement is a selector that contains values, a key, an operator that relates the key and values\n                      and minValues that represent the requirement to have at least that many values.\n                    properties:\n                      key:\n                        description: The label key that the selector applies to.\n                        type: string\n                        maxLength: 316\n                        pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*(\\/))?([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9]$\n                        x-kubernetes-validations:\n                          - message: label domain \"karpenter.sh\" is restricted\n                            rule: self in [\"karpenter.sh/capacity-type\", \"karpenter.sh/nodepool\"] || !self.find(\"^([^/]+)\").endsWith(\"karpenter.sh\")\n                          - message: label \"kubernetes.io/hostname\" is restricted\n                            rule: self != \"kubernetes.io/hostname\"\n                          - message: label domain \"karpenter.k8s.aws\" is restricted\n                            rule: self in [\"karpenter.k8s.aws/instance-tenancy\", \"karpenter.k8s.aws/capacity-reservation-type\", \"karpenter.k8s.aws/capacity-reservation-id\", \"karpenter.k8s.aws/capacity-reservation-interruptible\", \"karpenter.k8s.aws/ec2nodeclass\", \"karpenter.k8s.aws/instance-encryption-in-transit-supported\", \"karpenter.k8s.aws/instance-category\", \"karpenter.k8s.aws/instance-hypervisor\", \"karpenter.k8s.aws/instance-family\", \"karpenter.k8s.aws/instance-generation\", \"karpenter.k8s.aws/instance-local-nvme\", \"karpenter.k8s.aws/instance-size\", \"karpenter.k8s.aws/instance-cpu\", \"karpenter.k8s.aws/instance-cpu-manufacturer\", \"karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz\", \"karpenter.k8s.aws/instance-memory\", \"karpenter.k8s.aws/instance-ebs-bandwidth\", \"karpenter.k8s.aws/instance-network-bandwidth\", \"karpenter.k8s.aws/instance-gpu-name\", \"karpenter.k8s.aws/instance-gpu-manufacturer\", \"karpenter.k8s.aws/instance-gpu-count\", \"karpenter.k8s.aws/instance-gpu-memory\", \"karpenter.k8s.aws/instance-accelerator-name\", \"karpenter.k8s.aws/instance-accelerator-manufacturer\", \"karpenter.k8s.aws/instance-accelerator-count\", \"karpenter.k8s.aws/instance-capability-flex\"] || !self.find(\"^([^/]+)\").endsWith(\"karpenter.k8s.aws\")\n                      minValues:\n                        description: |-\n                          This field is ALPHA and can be dropped or replaced at any time\n                          MinValues is the minimum number of unique values required to define the flexibility of the specific requirement.\n                        maximum: 50\n                        minimum: 1\n                        type: integer\n                      operator:\n                        description: |-\n                          Represents a key's relationship to a set of values.\n                          Valid operators are In, NotIn, Exists, DoesNotExist. Gt, Lt, Gte, and Lte.\n                        enum:\n                          - Gte\n                          - Lte\n                          - In\n                          - NotIn\n                          - Exists\n                          - DoesNotExist\n                          - Gt\n                          - Lt\n                        type: string\n                      values:\n                        description: |-\n                          An array of string values. If the operator is In or NotIn,\n                          the values array must be non-empty. If the operator is Exists or DoesNotExist,\n                          the values array must be empty. If the operator is Gt, Lt, Gte, or Lte, the values\n                          array must have a single element, which will be interpreted as an integer.\n                          This array is replaced during a strategic merge patch.\n                        items:\n                          type: string\n                        type: array\n                        x-kubernetes-list-type: atomic\n                        maxLength: 63\n                        pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$\n                    required:\n                      - key\n                      - operator\n                    type: object\n                  maxItems: 100\n                  type: array\n                  x-kubernetes-validations:\n                    - message: requirements with operator 'In' must have a value defined\n                      rule: 'self.all(x, x.operator == ''In'' ? x.values.size() != 0 : true)'\n                    - message: requirements operator 'Gt', 'Lt', 'Gte', or 'Lte' must have a single positive integer value\n                      rule: 'self.all(x, (x.operator == ''Gt'' || x.operator == ''Lt'' || x.operator == ''Gte'' || x.operator == ''Lte'') ? (x.values.size() == 1 && int(x.values[0]) >= 0) : true)'\n                    - message: requirements with 'minValues' must have at least that many values specified in the 'values' field\n                      rule: 'self.all(x, (x.operator == ''In'' && has(x.minValues)) ? x.values.size() >= x.minValues : true)'\n                resources:\n                  description: Resources models the resource requirements for the NodeClaim to launch\n                  properties:\n                    requests:\n                      additionalProperties:\n                        anyOf:\n                          - type: integer\n                          - type: string\n                        pattern: ^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$\n                        x-kubernetes-int-or-string: true\n                      description: Requests describes the minimum required resources for the NodeClaim to launch\n                      type: object\n                  type: object\n                startupTaints:\n                  description: |-\n                    StartupTaints are taints that are applied to nodes upon startup which are expected to be removed automatically\n                    within a short period of time, typically by a DaemonSet that tolerates the taint. These are commonly used by\n                    daemonsets to allow initialization and enforce startup ordering.  StartupTaints are ignored for provisioning\n                    purposes in that pods are not required to tolerate a StartupTaint in order to have nodes provisioned for them.\n                  items:\n                    description: |-\n                      The node this Taint is attached to has the \"effect\" on\n                      any pod that does not tolerate the Taint.\n                    properties:\n                      effect:\n                        description: |-\n                          Required. The effect of the taint on pods\n                          that do not tolerate the taint.\n                          Valid effects are NoSchedule, PreferNoSchedule and NoExecute.\n                        type: string\n                        enum:\n                          - NoSchedule\n                          - PreferNoSchedule\n                          - NoExecute\n                      key:\n                        description: Required. The taint key to be applied to a node.\n                        type: string\n                        minLength: 1\n                        pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*(\\/))?([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9]$\n                      timeAdded:\n                        description: TimeAdded represents the time at which the taint was added.\n                        format: date-time\n                        type: string\n                      value:\n                        description: The taint value corresponding to the taint key.\n                        type: string\n                        pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*(\\/))?([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9]$\n                    required:\n                      - effect\n                      - key\n                    type: object\n                  type: array\n                taints:\n                  description: Taints will be applied to the NodeClaim's node.\n                  items:\n                    description: |-\n                      The node this Taint is attached to has the \"effect\" on\n                      any pod that does not tolerate the Taint.\n                    properties:\n                      effect:\n                        description: |-\n                          Required. The effect of the taint on pods\n                          that do not tolerate the taint.\n                          Valid effects are NoSchedule, PreferNoSchedule and NoExecute.\n                        type: string\n                        enum:\n                          - NoSchedule\n                          - PreferNoSchedule\n                          - NoExecute\n                      key:\n                        description: Required. The taint key to be applied to a node.\n                        type: string\n                        minLength: 1\n                        pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*(\\/))?([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9]$\n                      timeAdded:\n                        description: TimeAdded represents the time at which the taint was added.\n                        format: date-time\n                        type: string\n                      value:\n                        description: The taint value corresponding to the taint key.\n                        type: string\n                        pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*(\\/))?([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9]$\n                    required:\n                      - effect\n                      - key\n                    type: object\n                  type: array\n                terminationGracePeriod:\n                  description: |-\n                    TerminationGracePeriod is the maximum duration the controller will wait before forcefully deleting the pods on a node, measured from when deletion is first initiated.\n\n                    Warning: this feature takes precedence over a Pod's terminationGracePeriodSeconds value, and bypasses any blocked PDBs or the karpenter.sh/do-not-disrupt annotation.\n\n                    This field is intended to be used by cluster administrators to enforce that nodes can be cycled within a given time period.\n                    When set, drifted nodes will begin draining even if there are pods blocking eviction. Draining will respect PDBs and the do-not-disrupt annotation until the TGP is reached.\n\n                    Karpenter will preemptively delete pods so their terminationGracePeriodSeconds align with the node's terminationGracePeriod.\n                    If a pod would be terminated without being granted its full terminationGracePeriodSeconds prior to the node timeout,\n                    that pod will be deleted at T = node timeout - pod terminationGracePeriodSeconds.\n\n                    The feature can also be used to allow maximum time limits for long-running jobs which can delay node termination with preStop hooks.\n                    If left undefined, the controller will wait indefinitely for pods to be drained.\n                  pattern: ^([0-9]+(s|m|h))+$\n                  type: string\n              required:\n                - nodeClassRef\n                - requirements\n              type: object\n              x-kubernetes-validations:\n                - message: spec is immutable\n                  rule: self == oldSelf\n            status:\n              description: NodeClaimStatus defines the observed state of NodeClaim\n              properties:\n                allocatable:\n                  additionalProperties:\n                    anyOf:\n                      - type: integer\n                      - type: string\n                    pattern: ^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$\n                    x-kubernetes-int-or-string: true\n                  description: Allocatable is the estimated allocatable capacity of the node\n                  type: object\n                capacity:\n                  additionalProperties:\n                    anyOf:\n                      - type: integer\n                      - type: string\n                    pattern: ^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$\n                    x-kubernetes-int-or-string: true\n                  description: Capacity is the estimated full capacity of the node\n                  type: object\n                conditions:\n                  description: Conditions contains signals for health and readiness\n                  items:\n                    description: Condition aliases the upstream type and adds additional helper methods\n                    properties:\n                      lastTransitionTime:\n                        description: |-\n                          lastTransitionTime is the last time the condition transitioned from one status to another.\n                          This should be when the underlying condition changed.  If that is not known, then using the time when the API field changed is acceptable.\n                        format: date-time\n                        type: string\n                      message:\n                        description: |-\n                          message is a human readable message indicating details about the transition.\n                          This may be an empty string.\n                        maxLength: 32768\n                        type: string\n                      observedGeneration:\n                        description: |-\n                          observedGeneration represents the .metadata.generation that the condition was set based upon.\n                          For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\n                          with respect to the current state of the instance.\n                        format: int64\n                        minimum: 0\n                        type: integer\n                      reason:\n                        description: |-\n                          reason contains a programmatic identifier indicating the reason for the condition's last transition.\n                          Producers of specific condition types may define expected values and meanings for this field,\n                          and whether the values are considered a guaranteed API.\n                          The value should be a CamelCase string.\n                          This field may not be empty.\n                        maxLength: 1024\n                        pattern: ^([A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?|)$\n                        type: string\n                      status:\n                        description: status of the condition, one of True, False, Unknown.\n                        enum:\n                          - \"True\"\n                          - \"False\"\n                          - Unknown\n                        type: string\n                      type:\n                        description: type of condition in CamelCase or in foo.example.com/CamelCase.\n                        maxLength: 316\n                        pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$\n                        type: string\n                    required:\n                      - lastTransitionTime\n                      - status\n                      - type\n                    type: object\n                  type: array\n                imageID:\n                  description: ImageID is an identifier for the image that runs on the node\n                  type: string\n                lastPodEventTime:\n                  description: |-\n                    LastPodEventTime is updated with the last time a pod was scheduled\n                    or removed from the node. A pod going terminal or terminating\n                    is also considered as removed.\n                  format: date-time\n                  type: string\n                nodeName:\n                  description: NodeName is the name of the corresponding node object\n                  type: string\n                providerID:\n                  description: ProviderID of the corresponding node object\n                  type: string\n              type: object\n          required:\n            - spec\n          type: object\n      served: true\n      storage: true\n      subresources:\n        status: {}\n"
  },
  {
    "path": "pkg/apis/crds/karpenter.sh_nodeoverlays.yaml",
    "content": "---\napiVersion: apiextensions.k8s.io/v1\nkind: CustomResourceDefinition\nmetadata:\n  annotations:\n    controller-gen.kubebuilder.io/version: v0.19.0\n  name: nodeoverlays.karpenter.sh\nspec:\n  group: karpenter.sh\n  names:\n    categories:\n      - karpenter\n    kind: NodeOverlay\n    listKind: NodeOverlayList\n    plural: nodeoverlays\n    shortNames:\n      - overlays\n    singular: nodeoverlay\n  scope: Cluster\n  versions:\n    - additionalPrinterColumns:\n        - jsonPath: .status.conditions[?(@.type==\"Ready\")].status\n          name: Ready\n          type: string\n        - jsonPath: .metadata.creationTimestamp\n          name: Age\n          type: date\n        - jsonPath: .spec.weight\n          name: Weight\n          priority: 1\n          type: integer\n      name: v1alpha1\n      schema:\n        openAPIV3Schema:\n          properties:\n            apiVersion:\n              description: |-\n                APIVersion defines the versioned schema of this representation of an object.\n                Servers should convert recognized schemas to the latest internal value, and\n                may reject unrecognized values.\n                More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources\n              type: string\n            kind:\n              description: |-\n                Kind is a string value representing the REST resource this object represents.\n                Servers may infer this from the endpoint the client submits requests to.\n                Cannot be updated.\n                In CamelCase.\n                More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds\n              type: string\n            metadata:\n              type: object\n            spec:\n              properties:\n                capacity:\n                  additionalProperties:\n                    anyOf:\n                      - type: integer\n                      - type: string\n                    pattern: ^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$\n                    x-kubernetes-int-or-string: true\n                  description: |-\n                    Capacity adds extended resources only, and does not replace any existing resources.\n                    These extended resources are appended to the node's existing resource list.\n                    Note: This field does not modify or override standard resources like cpu, memory, ephemeral-storage, or pods.\n                  type: object\n                  x-kubernetes-validations:\n                    - message: invalid resource restricted\n                      rule: self.all(x, !(x in ['cpu', 'memory', 'ephemeral-storage', 'pods']))\n                price:\n                  description: Price specifies amount for an instance types that match the specified labels. Users can override prices using a signed float representing the price override\n                  pattern: ^\\d+(\\.\\d+)?$\n                  type: string\n                priceAdjustment:\n                  description: |-\n                    PriceAdjustment specifies the price change for matching instance types. Accepts either:\n                    - A fixed price modifier (e.g., -0.5, 1.2)\n                    - A percentage modifier (e.g., +10% for increase, -15% for decrease)\n                  pattern: ^(([+-]{1}(\\d*\\.?\\d+))|(\\+{1}\\d*\\.?\\d+%)|(^(-\\d{1,2}(\\.\\d+)?%)$)|(-100%))$\n                  type: string\n                requirements:\n                  description: |-\n                    Requirements constrain when this NodeOverlay is applied during scheduling simulations.\n                    These requirements can match:\n                    - Well-known labels (e.g., node.kubernetes.io/instance-type, karpenter.sh/nodepool)\n                    - Custom labels from NodePool's spec.template.labels\n                  items:\n                    description: |-\n                      A node selector requirement is a selector that contains values, a key, an operator that relates the key and values\n                      to have at least that many values.\n                    properties:\n                      key:\n                        description: The label key that the selector applies to.\n                        type: string\n                        maxLength: 316\n                        pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*(\\/))?([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9]$\n                        x-kubernetes-validations:\n                          - message: label domain \"karpenter.sh\" is restricted\n                            rule: self in [\"karpenter.sh/capacity-type\", \"karpenter.sh/nodepool\"] || !self.find(\"^([^/]+)\").endsWith(\"karpenter.sh\")\n                          - message: label \"kubernetes.io/hostname\" is restricted\n                            rule: self != \"kubernetes.io/hostname\"\n                          - message: label domain \"karpenter.k8s.aws\" is restricted\n                            rule: self in [\"karpenter.k8s.aws/ec2nodeclass\", \"karpenter.k8s.aws/instance-encryption-in-transit-supported\", \"karpenter.k8s.aws/instance-category\", \"karpenter.k8s.aws/instance-hypervisor\", \"karpenter.k8s.aws/instance-family\", \"karpenter.k8s.aws/instance-generation\", \"karpenter.k8s.aws/instance-local-nvme\", \"karpenter.k8s.aws/instance-size\", \"karpenter.k8s.aws/instance-cpu\", \"karpenter.k8s.aws/instance-cpu-manufacturer\", \"karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz\", \"karpenter.k8s.aws/instance-memory\", \"karpenter.k8s.aws/instance-ebs-bandwidth\", \"karpenter.k8s.aws/instance-network-bandwidth\", \"karpenter.k8s.aws/instance-gpu-name\", \"karpenter.k8s.aws/instance-gpu-manufacturer\", \"karpenter.k8s.aws/instance-gpu-count\", \"karpenter.k8s.aws/instance-gpu-memory\", \"karpenter.k8s.aws/instance-accelerator-name\", \"karpenter.k8s.aws/instance-accelerator-manufacturer\", \"karpenter.k8s.aws/instance-accelerator-count\", \"karpenter.k8s.aws/instance-capability-flex\"] || !self.find(\"^([^/]+)\").endsWith(\"karpenter.k8s.aws\")\n                      operator:\n                        description: |-\n                          Represents a key's relationship to a set of values.\n                          Valid operators are In, NotIn, Exists, DoesNotExist. Gt, Lt, Gte, and Lte.\n                        enum:\n                          - Gte\n                          - Lte\n                          - In\n                          - NotIn\n                          - Exists\n                          - DoesNotExist\n                          - Gt\n                          - Lt\n                        type: string\n                      values:\n                        description: |-\n                          An array of string values. If the operator is In or NotIn,\n                          the values array must be non-empty. If the operator is Exists or DoesNotExist,\n                          the values array must be empty. If the operator is Gt, Lt, Gte, or Lte, the values\n                          array must have a single element, which will be interpreted as an integer.\n                        items:\n                          type: string\n                        type: array\n                        x-kubernetes-list-type: atomic\n                        maxLength: 63\n                        pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$\n                    required:\n                      - key\n                      - operator\n                    type: object\n                  maxItems: 100\n                  type: array\n                  x-kubernetes-validations:\n                    - message: requirements with operator 'NotIn' must have a value defined\n                      rule: 'self.all(x, x.operator == ''NotIn'' ? x.values.size() != 0 : true)'\n                    - message: requirements with operator 'In' must have a value defined\n                      rule: 'self.all(x, x.operator == ''In'' ? x.values.size() != 0 : true)'\n                    - message: requirements operator 'Gt', 'Lt', 'Gte' or 'Lte' must have a single positive integer value\n                      rule: 'self.all(x, (x.operator == ''Gt'' || x.operator == ''Lt'' || x.operator == ''Gte'' || x.operator == ''Lte'') ? (x.values.size() == 1 && int(x.values[0]) >= 0) : true)'\n                weight:\n                  description: |-\n                    Weight defines the priority of this NodeOverlay when overriding node attributes.\n                    NodeOverlays with higher numerical weights take precedence over those with lower weights.\n                    If no weight is specified, the NodeOverlay is treated as having a weight of 0.\n                    When multiple NodeOverlays have identical weights, they are merged in alphabetical order.\n                  format: int32\n                  maximum: 10000\n                  minimum: 1\n                  type: integer\n              required:\n                - requirements\n              type: object\n              x-kubernetes-validations:\n                - message: cannot set both 'price' and 'priceAdjustment'\n                  rule: '!has(self.price) || !has(self.priceAdjustment)'\n            status:\n              description: NodeOverlayStatus defines the observed state of NodeOverlay\n              properties:\n                conditions:\n                  description: Conditions contains signals for health and readiness\n                  items:\n                    description: Condition aliases the upstream type and adds additional helper methods\n                    properties:\n                      lastTransitionTime:\n                        description: |-\n                          lastTransitionTime is the last time the condition transitioned from one status to another.\n                          This should be when the underlying condition changed.  If that is not known, then using the time when the API field changed is acceptable.\n                        format: date-time\n                        type: string\n                      message:\n                        description: |-\n                          message is a human readable message indicating details about the transition.\n                          This may be an empty string.\n                        maxLength: 32768\n                        type: string\n                      observedGeneration:\n                        description: |-\n                          observedGeneration represents the .metadata.generation that the condition was set based upon.\n                          For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\n                          with respect to the current state of the instance.\n                        format: int64\n                        minimum: 0\n                        type: integer\n                      reason:\n                        description: |-\n                          reason contains a programmatic identifier indicating the reason for the condition's last transition.\n                          Producers of specific condition types may define expected values and meanings for this field,\n                          and whether the values are considered a guaranteed API.\n                          The value should be a CamelCase string.\n                          This field may not be empty.\n                        maxLength: 1024\n                        minLength: 1\n                        pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$\n                        type: string\n                      status:\n                        description: status of the condition, one of True, False, Unknown.\n                        enum:\n                          - \"True\"\n                          - \"False\"\n                          - Unknown\n                        type: string\n                      type:\n                        description: type of condition in CamelCase or in foo.example.com/CamelCase.\n                        maxLength: 316\n                        pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$\n                        type: string\n                    required:\n                      - lastTransitionTime\n                      - message\n                      - reason\n                      - status\n                      - type\n                    type: object\n                  type: array\n              type: object\n          required:\n            - spec\n          type: object\n      served: true\n      storage: true\n      subresources:\n        status: {}\n"
  },
  {
    "path": "pkg/apis/crds/karpenter.sh_nodepools.yaml",
    "content": "---\napiVersion: apiextensions.k8s.io/v1\nkind: CustomResourceDefinition\nmetadata:\n  annotations:\n    controller-gen.kubebuilder.io/version: v0.19.0\n  name: nodepools.karpenter.sh\nspec:\n  group: karpenter.sh\n  names:\n    categories:\n      - karpenter\n    kind: NodePool\n    listKind: NodePoolList\n    plural: nodepools\n    singular: nodepool\n  scope: Cluster\n  versions:\n    - additionalPrinterColumns:\n        - jsonPath: .spec.template.spec.nodeClassRef.name\n          name: NodeClass\n          type: string\n        - jsonPath: .status.nodes\n          name: Nodes\n          type: string\n        - jsonPath: .status.conditions[?(@.type==\"Ready\")].status\n          name: Ready\n          type: string\n        - jsonPath: .metadata.creationTimestamp\n          name: Age\n          type: date\n        - jsonPath: .spec.weight\n          name: Weight\n          priority: 1\n          type: integer\n        - jsonPath: .status.resources.cpu\n          name: CPU\n          priority: 1\n          type: string\n        - jsonPath: .status.resources.memory\n          name: Memory\n          priority: 1\n          type: string\n      name: v1\n      schema:\n        openAPIV3Schema:\n          description: NodePool is the Schema for the NodePools API\n          properties:\n            apiVersion:\n              description: |-\n                APIVersion defines the versioned schema of this representation of an object.\n                Servers should convert recognized schemas to the latest internal value, and\n                may reject unrecognized values.\n                More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources\n              type: string\n            kind:\n              description: |-\n                Kind is a string value representing the REST resource this object represents.\n                Servers may infer this from the endpoint the client submits requests to.\n                Cannot be updated.\n                In CamelCase.\n                More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds\n              type: string\n            metadata:\n              type: object\n            spec:\n              description: |-\n                NodePoolSpec is the top level nodepool specification. Nodepools\n                launch nodes in response to pods that are unschedulable. A single nodepool\n                is capable of managing a diverse set of nodes. Node properties are determined\n                from a combination of nodepool and pod scheduling constraints.\n              properties:\n                disruption:\n                  default:\n                    consolidateAfter: 0s\n                  description: Disruption contains the parameters that relate to Karpenter's disruption logic\n                  properties:\n                    budgets:\n                      default:\n                        - nodes: 10%\n                      description: |-\n                        Budgets is a list of Budgets.\n                        If there are multiple active budgets, Karpenter uses\n                        the most restrictive value. If left undefined,\n                        this will default to one budget with a value to 10%.\n                      items:\n                        description: |-\n                          Budget defines when Karpenter will restrict the\n                          number of Node Claims that can be terminating simultaneously.\n                        properties:\n                          duration:\n                            description: |-\n                              Duration determines how long a Budget is active since each Schedule hit.\n                              Only minutes and hours are accepted, as cron does not work in seconds.\n                              If omitted, the budget is always active.\n                              This is required if Schedule is set.\n                              This regex has an optional 0s at the end since the duration.String() always adds\n                              a 0s at the end.\n                            pattern: ^((([0-9]+(h|m))|([0-9]+h[0-9]+m))(0s)?)$\n                            type: string\n                          nodes:\n                            default: 10%\n                            description: |-\n                              Nodes dictates the maximum number of NodeClaims owned by this NodePool\n                              that can be terminating at once. This is calculated by counting nodes that\n                              have a deletion timestamp set, or are actively being deleted by Karpenter.\n                              This field is required when specifying a budget.\n                              This cannot be of type intstr.IntOrString since kubebuilder doesn't support pattern\n                              checking for int nodes for IntOrString nodes.\n                              Ref: https://github.com/kubernetes-sigs/controller-tools/blob/55efe4be40394a288216dab63156b0a64fb82929/pkg/crd/markers/validation.go#L379-L388\n                            pattern: ^((100|[0-9]{1,2})%|[0-9]+)$\n                            type: string\n                          reasons:\n                            description: |-\n                              Reasons is a list of disruption methods that this budget applies to. If Reasons is not set, this budget applies to all methods.\n                              Otherwise, this will apply to each reason defined.\n                              allowed reasons are Underutilized, Empty, and Drifted.\n                            items:\n                              description: DisruptionReason defines valid reasons for disruption budgets.\n                              enum:\n                                - Underutilized\n                                - Empty\n                                - Drifted\n                              type: string\n                            maxItems: 50\n                            type: array\n                          schedule:\n                            description: |-\n                              Schedule specifies when a budget begins being active, following\n                              the upstream cronjob syntax. If omitted, the budget is always active.\n                              Timezones are not supported.\n                              This field is required if Duration is set.\n                            pattern: ^(@(annually|yearly|monthly|weekly|daily|midnight|hourly))|((.+)\\s(.+)\\s(.+)\\s(.+)\\s(.+))$\n                            type: string\n                        required:\n                          - nodes\n                        type: object\n                      maxItems: 50\n                      type: array\n                      x-kubernetes-validations:\n                        - message: '''schedule'' must be set with ''duration'''\n                          rule: self.all(x, has(x.schedule) == has(x.duration))\n                    consolidateAfter:\n                      description: |-\n                        ConsolidateAfter is the duration the controller will wait\n                        before attempting to terminate nodes that are underutilized.\n                        Refer to ConsolidationPolicy for how underutilization is considered.\n                        When replicas is set, ConsolidateAfter is simply ignored\n                      pattern: ^(([0-9]+(s|m|h))+|Never)$\n                      type: string\n                    consolidationPolicy:\n                      default: WhenEmptyOrUnderutilized\n                      description: |-\n                        ConsolidationPolicy describes which nodes Karpenter can disrupt through its consolidation\n                        algorithm. This policy defaults to \"WhenEmptyOrUnderutilized\" if not specified\n                        When replicas is set, ConsolidationPolicy is simply ignored\n                      enum:\n                        - WhenEmpty\n                        - WhenEmptyOrUnderutilized\n                      type: string\n                  required:\n                    - consolidateAfter\n                  type: object\n                limits:\n                  additionalProperties:\n                    anyOf:\n                      - type: integer\n                      - type: string\n                    pattern: ^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$\n                    x-kubernetes-int-or-string: true\n                  description: |-\n                    Limits define a set of bounds for provisioning capacity.\n                    Limits other than limits.nodes is not supported when replicas is set.\n                  type: object\n                replicas:\n                  description: |-\n                    Replicas is the desired number of nodes for the NodePool. When specified, the NodePool will\n                    maintain this fixed number of replicas rather than scaling based on pod demand.\n                    When replicas is set:\n                      - The following fields are ignored:\n                          * disruption.consolidationPolicy\n                          * disruption.consolidateAfter\n                      - Only limits.nodes is supported; other resource limits (e.g., CPU, memory) must not be specified.\n                      - Weight is not supported.\n                    Note: This field is alpha.\n                  format: int64\n                  minimum: 0\n                  type: integer\n                template:\n                  description: |-\n                    Template contains the template of possibilities for the provisioning logic to launch a NodeClaim with.\n                    NodeClaims launched from this NodePool will often be further constrained than the template specifies.\n                  properties:\n                    metadata:\n                      properties:\n                        annotations:\n                          additionalProperties:\n                            type: string\n                          description: |-\n                            Annotations is an unstructured key value map stored with a resource that may be\n                            set by external tools to store and retrieve arbitrary metadata. They are not\n                            queryable and should be preserved when modifying objects.\n                            More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations\n                          type: object\n                        labels:\n                          additionalProperties:\n                            type: string\n                            maxLength: 63\n                            pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$\n                          description: |-\n                            Map of string keys and values that can be used to organize and categorize\n                            (scope and select) objects. May match selectors of replication controllers\n                            and services.\n                            More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels\n                          type: object\n                          maxProperties: 100\n                          x-kubernetes-validations:\n                            - message: label domain \"karpenter.sh\" is restricted\n                              rule: self.all(x, x in [\"karpenter.sh/capacity-type\", \"karpenter.sh/nodepool\"] || !x.find(\"^([^/]+)\").endsWith(\"karpenter.sh\"))\n                            - message: label \"karpenter.sh/nodepool\" is restricted\n                              rule: self.all(x, x != \"karpenter.sh/nodepool\")\n                            - message: label \"kubernetes.io/hostname\" is restricted\n                              rule: self.all(x, x != \"kubernetes.io/hostname\")\n                            - message: label domain \"karpenter.k8s.aws\" is restricted\n                              rule: self.all(x, x in [\"karpenter.k8s.aws/instance-tenancy\", \"karpenter.k8s.aws/capacity-reservation-type\", \"karpenter.k8s.aws/capacity-reservation-id\", \"karpenter.k8s.aws/capacity-reservation-interruptible\", \"karpenter.k8s.aws/ec2nodeclass\", \"karpenter.k8s.aws/instance-encryption-in-transit-supported\", \"karpenter.k8s.aws/instance-category\", \"karpenter.k8s.aws/instance-hypervisor\", \"karpenter.k8s.aws/instance-family\", \"karpenter.k8s.aws/instance-generation\", \"karpenter.k8s.aws/instance-local-nvme\", \"karpenter.k8s.aws/instance-size\", \"karpenter.k8s.aws/instance-cpu\", \"karpenter.k8s.aws/instance-cpu-manufacturer\", \"karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz\", \"karpenter.k8s.aws/instance-memory\", \"karpenter.k8s.aws/instance-ebs-bandwidth\", \"karpenter.k8s.aws/instance-network-bandwidth\", \"karpenter.k8s.aws/instance-gpu-name\", \"karpenter.k8s.aws/instance-gpu-manufacturer\", \"karpenter.k8s.aws/instance-gpu-count\", \"karpenter.k8s.aws/instance-gpu-memory\", \"karpenter.k8s.aws/instance-accelerator-name\", \"karpenter.k8s.aws/instance-accelerator-manufacturer\", \"karpenter.k8s.aws/instance-accelerator-count\", \"karpenter.k8s.aws/instance-capability-flex\"] || !x.find(\"^([^/]+)\").endsWith(\"karpenter.k8s.aws\"))\n                      type: object\n                    spec:\n                      description: |-\n                        NodeClaimTemplateSpec describes the desired state of the NodeClaim in the Nodepool\n                        NodeClaimTemplateSpec is used in the NodePool's NodeClaimTemplate, with the resource requests omitted since\n                        users are not able to set resource requests in the NodePool.\n                      properties:\n                        expireAfter:\n                          default: 720h\n                          description: |-\n                            ExpireAfter is the duration the controller will wait\n                            before terminating a node, measured from when the node is created. This\n                            is useful to implement features like eventually consistent node upgrade,\n                            memory leak protection, and disruption testing.\n                          pattern: ^(([0-9]+(s|m|h))+|Never)$\n                          type: string\n                        nodeClassRef:\n                          description: NodeClassRef is a reference to an object that defines provider specific configuration\n                          properties:\n                            group:\n                              description: API version of the referent\n                              pattern: ^[^/]*$\n                              type: string\n                              x-kubernetes-validations:\n                                - message: group may not be empty\n                                  rule: self != ''\n                            kind:\n                              description: 'Kind of the referent; More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds\"'\n                              type: string\n                              x-kubernetes-validations:\n                                - message: kind may not be empty\n                                  rule: self != ''\n                            name:\n                              description: 'Name of the referent; More info: http://kubernetes.io/docs/user-guide/identifiers#names'\n                              type: string\n                              x-kubernetes-validations:\n                                - message: name may not be empty\n                                  rule: self != ''\n                          required:\n                            - group\n                            - kind\n                            - name\n                          type: object\n                          x-kubernetes-validations:\n                            - message: nodeClassRef.group is immutable\n                              rule: self.group == oldSelf.group\n                            - message: nodeClassRef.kind is immutable\n                              rule: self.kind == oldSelf.kind\n                        requirements:\n                          description: Requirements are layered with GetLabels and applied to every node.\n                          items:\n                            description: |-\n                              A node selector requirement is a selector that contains values, a key, an operator that relates the key and values\n                              and minValues that represent the requirement to have at least that many values.\n                            properties:\n                              key:\n                                description: The label key that the selector applies to.\n                                type: string\n                                maxLength: 316\n                                pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*(\\/))?([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9]$\n                                x-kubernetes-validations:\n                                  - message: label domain \"karpenter.sh\" is restricted\n                                    rule: self in [\"karpenter.sh/capacity-type\", \"karpenter.sh/nodepool\"] || !self.find(\"^([^/]+)\").endsWith(\"karpenter.sh\")\n                                  - message: label \"karpenter.sh/nodepool\" is restricted\n                                    rule: self != \"karpenter.sh/nodepool\"\n                                  - message: label \"kubernetes.io/hostname\" is restricted\n                                    rule: self != \"kubernetes.io/hostname\"\n                                  - message: label domain \"karpenter.k8s.aws\" is restricted\n                                    rule: self in [\"karpenter.k8s.aws/instance-tenancy\", \"karpenter.k8s.aws/capacity-reservation-type\", \"karpenter.k8s.aws/capacity-reservation-id\", \"karpenter.k8s.aws/capacity-reservation-interruptible\", \"karpenter.k8s.aws/ec2nodeclass\", \"karpenter.k8s.aws/instance-encryption-in-transit-supported\", \"karpenter.k8s.aws/instance-category\", \"karpenter.k8s.aws/instance-hypervisor\", \"karpenter.k8s.aws/instance-family\", \"karpenter.k8s.aws/instance-generation\", \"karpenter.k8s.aws/instance-local-nvme\", \"karpenter.k8s.aws/instance-size\", \"karpenter.k8s.aws/instance-cpu\", \"karpenter.k8s.aws/instance-cpu-manufacturer\", \"karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz\", \"karpenter.k8s.aws/instance-memory\", \"karpenter.k8s.aws/instance-ebs-bandwidth\", \"karpenter.k8s.aws/instance-network-bandwidth\", \"karpenter.k8s.aws/instance-gpu-name\", \"karpenter.k8s.aws/instance-gpu-manufacturer\", \"karpenter.k8s.aws/instance-gpu-count\", \"karpenter.k8s.aws/instance-gpu-memory\", \"karpenter.k8s.aws/instance-accelerator-name\", \"karpenter.k8s.aws/instance-accelerator-manufacturer\", \"karpenter.k8s.aws/instance-accelerator-count\", \"karpenter.k8s.aws/instance-capability-flex\"] || !self.find(\"^([^/]+)\").endsWith(\"karpenter.k8s.aws\")\n                              minValues:\n                                description: |-\n                                  This field is ALPHA and can be dropped or replaced at any time\n                                  MinValues is the minimum number of unique values required to define the flexibility of the specific requirement.\n                                maximum: 50\n                                minimum: 1\n                                type: integer\n                              operator:\n                                description: |-\n                                  Represents a key's relationship to a set of values.\n                                  Valid operators are In, NotIn, Exists, DoesNotExist. Gt, Lt, Gte, and Lte.\n                                enum:\n                                  - Gte\n                                  - Lte\n                                  - In\n                                  - NotIn\n                                  - Exists\n                                  - DoesNotExist\n                                  - Gt\n                                  - Lt\n                                type: string\n                              values:\n                                description: |-\n                                  An array of string values. If the operator is In or NotIn,\n                                  the values array must be non-empty. If the operator is Exists or DoesNotExist,\n                                  the values array must be empty. If the operator is Gt, Lt, Gte, or Lte, the values\n                                  array must have a single element, which will be interpreted as an integer.\n                                  This array is replaced during a strategic merge patch.\n                                items:\n                                  type: string\n                                type: array\n                                x-kubernetes-list-type: atomic\n                                maxLength: 63\n                                pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$\n                            required:\n                              - key\n                              - operator\n                            type: object\n                          maxItems: 100\n                          type: array\n                          x-kubernetes-validations:\n                            - message: requirements with operator 'In' must have a value defined\n                              rule: 'self.all(x, x.operator == ''In'' ? x.values.size() != 0 : true)'\n                            - message: requirements operator 'Gt', 'Lt', 'Gte', or 'Lte' must have a single positive integer value\n                              rule: 'self.all(x, (x.operator == ''Gt'' || x.operator == ''Lt'' || x.operator == ''Gte'' || x.operator == ''Lte'') ? (x.values.size() == 1 && int(x.values[0]) >= 0) : true)'\n                            - message: requirements with 'minValues' must have at least that many values specified in the 'values' field\n                              rule: 'self.all(x, (x.operator == ''In'' && has(x.minValues)) ? x.values.size() >= x.minValues : true)'\n                        startupTaints:\n                          description: |-\n                            StartupTaints are taints that are applied to nodes upon startup which are expected to be removed automatically\n                            within a short period of time, typically by a DaemonSet that tolerates the taint. These are commonly used by\n                            daemonsets to allow initialization and enforce startup ordering.  StartupTaints are ignored for provisioning\n                            purposes in that pods are not required to tolerate a StartupTaint in order to have nodes provisioned for them.\n                          items:\n                            description: |-\n                              The node this Taint is attached to has the \"effect\" on\n                              any pod that does not tolerate the Taint.\n                            properties:\n                              effect:\n                                description: |-\n                                  Required. The effect of the taint on pods\n                                  that do not tolerate the taint.\n                                  Valid effects are NoSchedule, PreferNoSchedule and NoExecute.\n                                type: string\n                                enum:\n                                  - NoSchedule\n                                  - PreferNoSchedule\n                                  - NoExecute\n                              key:\n                                description: Required. The taint key to be applied to a node.\n                                type: string\n                                minLength: 1\n                                pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*(\\/))?([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9]$\n                              timeAdded:\n                                description: TimeAdded represents the time at which the taint was added.\n                                format: date-time\n                                type: string\n                              value:\n                                description: The taint value corresponding to the taint key.\n                                type: string\n                                pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*(\\/))?([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9]$\n                            required:\n                              - effect\n                              - key\n                            type: object\n                          type: array\n                        taints:\n                          description: Taints will be applied to the NodeClaim's node.\n                          items:\n                            description: |-\n                              The node this Taint is attached to has the \"effect\" on\n                              any pod that does not tolerate the Taint.\n                            properties:\n                              effect:\n                                description: |-\n                                  Required. The effect of the taint on pods\n                                  that do not tolerate the taint.\n                                  Valid effects are NoSchedule, PreferNoSchedule and NoExecute.\n                                type: string\n                                enum:\n                                  - NoSchedule\n                                  - PreferNoSchedule\n                                  - NoExecute\n                              key:\n                                description: Required. The taint key to be applied to a node.\n                                type: string\n                                minLength: 1\n                                pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*(\\/))?([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9]$\n                              timeAdded:\n                                description: TimeAdded represents the time at which the taint was added.\n                                format: date-time\n                                type: string\n                              value:\n                                description: The taint value corresponding to the taint key.\n                                type: string\n                                pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*(\\/))?([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9]$\n                            required:\n                              - effect\n                              - key\n                            type: object\n                          type: array\n                        terminationGracePeriod:\n                          description: |-\n                            TerminationGracePeriod is the maximum duration the controller will wait before forcefully deleting the pods on a node, measured from when deletion is first initiated.\n\n                            Warning: this feature takes precedence over a Pod's terminationGracePeriodSeconds value, and bypasses any blocked PDBs or the karpenter.sh/do-not-disrupt annotation.\n\n                            This field is intended to be used by cluster administrators to enforce that nodes can be cycled within a given time period.\n                            When set, drifted nodes will begin draining even if there are pods blocking eviction. Draining will respect PDBs and the do-not-disrupt annotation until the TGP is reached.\n\n                            Karpenter will preemptively delete pods so their terminationGracePeriodSeconds align with the node's terminationGracePeriod.\n                            If a pod would be terminated without being granted its full terminationGracePeriodSeconds prior to the node timeout,\n                            that pod will be deleted at T = node timeout - pod terminationGracePeriodSeconds.\n\n                            The feature can also be used to allow maximum time limits for long-running jobs which can delay node termination with preStop hooks.\n                            If left undefined, the controller will wait indefinitely for pods to be drained.\n                          pattern: ^([0-9]+(s|m|h))+$\n                          type: string\n                      required:\n                        - nodeClassRef\n                        - requirements\n                      type: object\n                  required:\n                    - spec\n                  type: object\n                weight:\n                  description: |-\n                    Weight is the priority given to the nodepool during scheduling. A higher\n                    numerical weight indicates that this nodepool will be ordered\n                    ahead of other nodepools with lower weights. A nodepool with no weight\n                    will be treated as if it is a nodepool with a weight of 0.\n                    Weight is not supported when replicas is set.\n                  format: int32\n                  maximum: 100\n                  minimum: 1\n                  type: integer\n              required:\n                - template\n              type: object\n              x-kubernetes-validations:\n                - message: Cannot transition NodePool between static (replicas set) and dynamic (replicas unset) provisioning modes\n                  rule: has(self.replicas) == has(oldSelf.replicas)\n                - message: only 'limits.nodes' is supported on static NodePools\n                  rule: '!has(self.replicas) || (!has(self.limits) || size(self.limits) == 0 || (size(self.limits) == 1 && ''nodes'' in self.limits))'\n                - message: '''weight'' is not supported on static NodePools'\n                  rule: '!has(self.replicas) || !has(self.weight)'\n            status:\n              description: NodePoolStatus defines the observed state of NodePool\n              properties:\n                conditions:\n                  description: Conditions contains signals for health and readiness\n                  items:\n                    description: Condition aliases the upstream type and adds additional helper methods\n                    properties:\n                      lastTransitionTime:\n                        description: |-\n                          lastTransitionTime is the last time the condition transitioned from one status to another.\n                          This should be when the underlying condition changed.  If that is not known, then using the time when the API field changed is acceptable.\n                        format: date-time\n                        type: string\n                      message:\n                        description: |-\n                          message is a human readable message indicating details about the transition.\n                          This may be an empty string.\n                        maxLength: 32768\n                        type: string\n                      observedGeneration:\n                        description: |-\n                          observedGeneration represents the .metadata.generation that the condition was set based upon.\n                          For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\n                          with respect to the current state of the instance.\n                        format: int64\n                        minimum: 0\n                        type: integer\n                      reason:\n                        description: |-\n                          reason contains a programmatic identifier indicating the reason for the condition's last transition.\n                          Producers of specific condition types may define expected values and meanings for this field,\n                          and whether the values are considered a guaranteed API.\n                          The value should be a CamelCase string.\n                          This field may not be empty.\n                        maxLength: 1024\n                        minLength: 1\n                        pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$\n                        type: string\n                      status:\n                        description: status of the condition, one of True, False, Unknown.\n                        enum:\n                          - \"True\"\n                          - \"False\"\n                          - Unknown\n                        type: string\n                      type:\n                        description: type of condition in CamelCase or in foo.example.com/CamelCase.\n                        maxLength: 316\n                        pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$\n                        type: string\n                    required:\n                      - lastTransitionTime\n                      - message\n                      - reason\n                      - status\n                      - type\n                    type: object\n                  type: array\n                nodeClassObservedGeneration:\n                  description: |-\n                    NodeClassObservedGeneration represents the observed nodeClass generation for referenced nodeClass. If this does not match\n                    the actual NodeClass Generation, NodeRegistrationHealthy status condition on the NodePool will be reset\n                  format: int64\n                  type: integer\n                nodes:\n                  default: 0\n                  description: Nodes is the count of nodes associated with this NodePool\n                  format: int64\n                  type: integer\n                resources:\n                  additionalProperties:\n                    anyOf:\n                      - type: integer\n                      - type: string\n                    pattern: ^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$\n                    x-kubernetes-int-or-string: true\n                  description: Resources is the list of resources that have been provisioned.\n                  type: object\n              type: object\n          required:\n            - spec\n          type: object\n      served: true\n      storage: true\n      subresources:\n        scale:\n          specReplicasPath: .spec.replicas\n          statusReplicasPath: .status.nodes\n        status: {}\n"
  },
  {
    "path": "pkg/apis/v1/doc.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n// +k8s:openapi-gen=true\n// +k8s:deepcopy-gen=package,register\n// +k8s:defaulter-gen=TypeMeta\n// +groupName=karpenter.k8s.aws\npackage v1 // doc.go is discovered by codegen\n\nimport (\n\tcorev1 \"k8s.io/apimachinery/pkg/apis/meta/v1\"\n\t\"k8s.io/apimachinery/pkg/runtime/schema\"\n\t\"k8s.io/client-go/kubernetes/scheme\"\n\t\"sigs.k8s.io/karpenter/pkg/cloudprovider\"\n\n\t\"github.com/aws/karpenter-provider-aws/pkg/apis\"\n)\n\nfunc init() {\n\tgv := schema.GroupVersion{Group: apis.Group, Version: \"v1\"}\n\tcorev1.AddToGroupVersion(scheme.Scheme, gv)\n\tscheme.Scheme.AddKnownTypes(gv,\n\t\t&EC2NodeClass{},\n\t\t&EC2NodeClassList{},\n\t)\n\n\tcloudprovider.ReservationIDLabel = LabelCapacityReservationID\n\tcloudprovider.ReservedCapacityLabels.Insert(LabelCapacityReservationID, LabelCapacityReservationType)\n}\n"
  },
  {
    "path": "pkg/apis/v1/ec2nodeclass.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage v1\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"strings\"\n\n\t\"github.com/google/uuid\"\n\t\"github.com/mitchellh/hashstructure/v2\"\n\t\"github.com/samber/lo\"\n\tv1 \"k8s.io/api/core/v1\"\n\t\"k8s.io/apimachinery/pkg/api/resource\"\n\tmetav1 \"k8s.io/apimachinery/pkg/apis/meta/v1\"\n)\n\n// EC2NodeClassSpec is the top level specification for the AWS Karpenter Provider.\n// This will contain configuration necessary to launch instances in AWS.\ntype EC2NodeClassSpec struct {\n\t// SubnetSelectorTerms is a list of subnet selector terms. The terms are ORed.\n\t// +kubebuilder:validation:XValidation:message=\"subnetSelectorTerms cannot be empty\",rule=\"self.size() != 0\"\n\t// +kubebuilder:validation:XValidation:message=\"expected at least one, got none, ['tags', 'id']\",rule=\"self.all(x, has(x.tags) || has(x.id))\"\n\t// +kubebuilder:validation:XValidation:message=\"'id' is mutually exclusive, cannot be set with a combination of other fields in a subnet selector term\",rule=\"!self.all(x, has(x.id) && has(x.tags))\"\n\t// +kubebuilder:validation:MaxItems:=30\n\t// +required\n\tSubnetSelectorTerms []SubnetSelectorTerm `json:\"subnetSelectorTerms\" hash:\"ignore\"`\n\t// SecurityGroupSelectorTerms is a list of security group selector terms. The terms are ORed.\n\t// +kubebuilder:validation:XValidation:message=\"securityGroupSelectorTerms cannot be empty\",rule=\"self.size() != 0\"\n\t// +kubebuilder:validation:XValidation:message=\"expected at least one, got none, ['tags', 'id', 'name']\",rule=\"self.all(x, has(x.tags) || has(x.id) || has(x.name))\"\n\t// +kubebuilder:validation:XValidation:message=\"'id' is mutually exclusive, cannot be set with a combination of other fields in a security group selector term\",rule=\"!self.all(x, has(x.id) && (has(x.tags) || has(x.name)))\"\n\t// +kubebuilder:validation:XValidation:message=\"'name' is mutually exclusive, cannot be set with a combination of other fields in a security group selector term\",rule=\"!self.all(x, has(x.name) && (has(x.tags) || has(x.id)))\"\n\t// +kubebuilder:validation:MaxItems:=30\n\t// +required\n\tSecurityGroupSelectorTerms []SecurityGroupSelectorTerm `json:\"securityGroupSelectorTerms\" hash:\"ignore\"`\n\t// CapacityReservationSelectorTerms is a list of capacity reservation selector terms. Each term is ORed together to\n\t// determine the set of eligible capacity reservations.\n\t// +kubebuilder:validation:XValidation:message=\"expected at least one, got none, ['tags', 'id', 'instanceMatchCriteria']\",rule=\"self.all(x, has(x.tags) || has(x.id) || has(x.instanceMatchCriteria))\"\n\t// +kubebuilder:validation:XValidation:message=\"'id' is mutually exclusive, cannot be set along with other fields in a capacity reservation selector term\",rule=\"!self.all(x, has(x.id) && (has(x.tags) || has(x.ownerID) || has(x.instanceMatchCriteria)))\"\n\t// +kubebuilder:validation:MaxItems:=30\n\t// +optional\n\tCapacityReservationSelectorTerms []CapacityReservationSelectorTerm `json:\"capacityReservationSelectorTerms\" hash:\"ignore\"`\n\t// AssociatePublicIPAddress controls if public IP addresses are assigned to instances that are launched with the nodeclass.\n\t// +optional\n\tAssociatePublicIPAddress *bool `json:\"associatePublicIPAddress,omitempty\"`\n\t// IPPrefixCount sets the number of IPv4 prefixes to be automatically assigned to the network interface.\n\t// +kubebuilder:validation:Minimum:=0\n\t// +optional\n\tIPPrefixCount *int32 `json:\"ipPrefixCount,omitempty\" hash:\"ignore\"`\n\t// AMISelectorTerms is a list of or ami selector terms. The terms are ORed.\n\t// +kubebuilder:validation:XValidation:message=\"expected at least one, got none, ['tags', 'id', 'name', 'alias', 'ssmParameter']\",rule=\"self.all(x, has(x.tags) || has(x.id) || has(x.name) || has(x.alias) || has(x.ssmParameter))\"\n\t// +kubebuilder:validation:XValidation:message=\"'id' is mutually exclusive, cannot be set with a combination of other fields in amiSelectorTerms\",rule=\"!self.exists(x, has(x.id) && (has(x.alias) || has(x.tags) || has(x.name) || has(x.owner)))\"\n\t// +kubebuilder:validation:XValidation:message=\"'alias' is mutually exclusive, cannot be set with a combination of other fields in amiSelectorTerms\",rule=\"!self.exists(x, has(x.alias) && (has(x.id) || has(x.tags) || has(x.name) || has(x.owner)))\"\n\t// +kubebuilder:validation:XValidation:message=\"'alias' is mutually exclusive, cannot be set with a combination of other amiSelectorTerms\",rule=\"!(self.exists(x, has(x.alias)) && self.size() != 1)\"\n\t// +kubebuilder:validation:MinItems:=1\n\t// +kubebuilder:validation:MaxItems:=30\n\t// +required\n\tAMISelectorTerms []AMISelectorTerm `json:\"amiSelectorTerms\" hash:\"ignore\"`\n\t// AMIFamily dictates the UserData format and default BlockDeviceMappings used when generating launch templates.\n\t// This field is optional when using an alias amiSelectorTerm, and the value will be inferred from the alias'\n\t// family. When an alias is specified, this field may only be set to its corresponding family or 'Custom'. If no\n\t// alias is specified, this field is required.\n\t// NOTE: We ignore the AMIFamily for hashing here because we hash the AMIFamily dynamically by using the alias using\n\t// the AMIFamily() helper function\n\t// +kubebuilder:validation:Enum:={AL2,AL2023,Bottlerocket,Custom,Windows2019,Windows2022,Windows2025}\n\t// +optional\n\tAMIFamily *string `json:\"amiFamily,omitempty\" hash:\"ignore\"`\n\t// UserData to be applied to the provisioned nodes.\n\t// It must be in the appropriate format based on the AMIFamily in use. Karpenter will merge certain fields into\n\t// this UserData to ensure nodes are being provisioned with the correct configuration.\n\t// +optional\n\tUserData *string `json:\"userData,omitempty\"`\n\t// Role is the AWS identity that nodes use.\n\t// This field is mutually exclusive from instanceProfile.\n\t// +kubebuilder:validation:XValidation:rule=\"self != ''\",message=\"role cannot be empty\"\n\t// +optional\n\tRole string `json:\"role,omitempty\"`\n\t// InstanceProfile is the AWS entity that instances use.\n\t// This field is mutually exclusive from role.\n\t// The instance profile should already have a role assigned to it that Karpenter\n\t//  has PassRole permission on for instance launch using this instanceProfile to succeed.\n\t// +kubebuilder:validation:XValidation:rule=\"self != ''\",message=\"instanceProfile cannot be empty\"\n\t// +optional\n\tInstanceProfile *string `json:\"instanceProfile,omitempty\"`\n\t// Tags to be applied on ec2 resources like instances and launch templates.\n\t// +kubebuilder:validation:XValidation:message=\"empty tag keys aren't supported\",rule=\"self.all(k, k != '')\"\n\t// +kubebuilder:validation:XValidation:message=\"tag contains a restricted tag matching eks:eks-cluster-name\",rule=\"self.all(k, k !='eks:eks-cluster-name')\"\n\t// +kubebuilder:validation:XValidation:message=\"tag contains a restricted tag matching kubernetes.io/cluster/\",rule=\"self.all(k, !k.startsWith('kubernetes.io/cluster') )\"\n\t// +kubebuilder:validation:XValidation:message=\"tag contains a restricted tag matching karpenter.sh/nodepool\",rule=\"self.all(k, k != 'karpenter.sh/nodepool')\"\n\t// +kubebuilder:validation:XValidation:message=\"tag contains a restricted tag matching karpenter.sh/nodeclaim\",rule=\"self.all(k, k !='karpenter.sh/nodeclaim')\"\n\t// +kubebuilder:validation:XValidation:message=\"tag contains a restricted tag matching karpenter.k8s.aws/ec2nodeclass\",rule=\"self.all(k, k !='karpenter.k8s.aws/ec2nodeclass')\"\n\t// +optional\n\tTags map[string]string `json:\"tags,omitempty\"`\n\t// Kubelet defines args to be used when configuring kubelet on provisioned nodes.\n\t// They are a subset of the upstream types, recognizing not all options may be supported.\n\t// Wherever possible, the types and names should reflect the upstream kubelet types.\n\t// +kubebuilder:validation:XValidation:message=\"imageGCHighThresholdPercent must be greater than imageGCLowThresholdPercent\",rule=\"has(self.imageGCHighThresholdPercent) && has(self.imageGCLowThresholdPercent) ?  self.imageGCHighThresholdPercent > self.imageGCLowThresholdPercent  : true\"\n\t// +kubebuilder:validation:XValidation:message=\"evictionSoft OwnerKey does not have a matching evictionSoftGracePeriod\",rule=\"has(self.evictionSoft) ? self.evictionSoft.all(e, (e in self.evictionSoftGracePeriod)):true\"\n\t// +kubebuilder:validation:XValidation:message=\"evictionSoftGracePeriod OwnerKey does not have a matching evictionSoft\",rule=\"has(self.evictionSoftGracePeriod) ? self.evictionSoftGracePeriod.all(e, (e in self.evictionSoft)):true\"\n\t// +optional\n\tKubelet *KubeletConfiguration `json:\"kubelet,omitempty\"`\n\t// BlockDeviceMappings to be applied to provisioned nodes.\n\t// +kubebuilder:validation:XValidation:message=\"must have only one blockDeviceMappings with rootVolume\",rule=\"self.filter(x, has(x.rootVolume)?x.rootVolume==true:false).size() <= 1\"\n\t// +kubebuilder:validation:MaxItems:=50\n\t// +optional\n\tBlockDeviceMappings []*BlockDeviceMapping `json:\"blockDeviceMappings,omitempty\"`\n\t// InstanceStorePolicy specifies how to handle instance-store disks.\n\t// +optional\n\tInstanceStorePolicy *InstanceStorePolicy `json:\"instanceStorePolicy,omitempty\"`\n\t// DetailedMonitoring controls if detailed monitoring is enabled for instances that are launched\n\t// +optional\n\tDetailedMonitoring *bool `json:\"detailedMonitoring,omitempty\"`\n\t// MetadataOptions for the generated launch template of provisioned nodes.\n\t//\n\t// This specifies the exposure of the Instance Metadata Service to\n\t// provisioned EC2 nodes. For more information,\n\t// see Instance Metadata and User Data\n\t// (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html)\n\t// in the Amazon Elastic Compute Cloud User Guide.\n\t//\n\t// Refer to recommended, security best practices\n\t// (https://aws.github.io/aws-eks-best-practices/security/docs/iam/#restrict-access-to-the-instance-profile-assigned-to-the-worker-node)\n\t// for limiting exposure of Instance Metadata and User Data to pods.\n\t// If omitted, defaults to httpEndpoint enabled, with httpProtocolIPv6\n\t// disabled, with httpPutResponseLimit of 1, and with httpTokens\n\t// required.\n\t// +kubebuilder:default={\"httpEndpoint\":\"enabled\",\"httpProtocolIPv6\":\"disabled\",\"httpPutResponseHopLimit\":1,\"httpTokens\":\"required\"}\n\t// +optional\n\tMetadataOptions *MetadataOptions `json:\"metadataOptions,omitempty\"`\n\t// Context is a Reserved field in EC2 APIs\n\t// https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet.html\n\t// +optional\n\tContext *string `json:\"context,omitempty\"`\n}\n\n// SubnetSelectorTerm defines selection logic for a subnet used by Karpenter to launch nodes.\n// If multiple fields are used for selection, the requirements are ANDed.\ntype SubnetSelectorTerm struct {\n\t// Tags is a map of key/value tags used to select subnets\n\t// Specifying '*' for a value selects all values for a given tag key.\n\t// +kubebuilder:validation:XValidation:message=\"empty tag keys or values aren't supported\",rule=\"self.all(k, k != '' && self[k] != '')\"\n\t// +kubebuilder:validation:MaxProperties:=20\n\t// +optional\n\tTags map[string]string `json:\"tags,omitempty\"`\n\t// ID is the subnet id in EC2\n\t// +kubebuilder:validation:Pattern=\"subnet-[0-9a-z]+\"\n\t// +optional\n\tID string `json:\"id,omitempty\"`\n}\n\n// SecurityGroupSelectorTerm defines selection logic for a security group used by Karpenter to launch nodes.\n// If multiple fields are used for selection, the requirements are ANDed.\ntype SecurityGroupSelectorTerm struct {\n\t// Tags is a map of key/value tags used to select security groups.\n\t// Specifying '*' for a value selects all values for a given tag key.\n\t// +kubebuilder:validation:XValidation:message=\"empty tag keys or values aren't supported\",rule=\"self.all(k, k != '' && self[k] != '')\"\n\t// +kubebuilder:validation:MaxProperties:=20\n\t// +optional\n\tTags map[string]string `json:\"tags,omitempty\"`\n\t// ID is the security group id in EC2\n\t// +kubebuilder:validation:Pattern:=\"sg-[0-9a-z]+\"\n\t// +optional\n\tID string `json:\"id,omitempty\"`\n\t// Name is the security group name in EC2.\n\t// This value is the name field, which is different from the name tag.\n\tName string `json:\"name,omitempty\"`\n}\n\ntype CapacityReservationSelectorTerm struct {\n\t// Tags is a map of key/value tags used to select capacity reservations.\n\t// Specifying '*' for a value selects all values for a given tag key.\n\t// +kubebuilder:validation:XValidation:message=\"empty tag keys or values aren't supported\",rule=\"self.all(k, k != '' && self[k] != '')\"\n\t// +kubebuilder:validation:MaxProperties:=20\n\t// +optional\n\tTags map[string]string `json:\"tags,omitempty\"`\n\t// ID is the capacity reservation id in EC2\n\t// +kubebuilder:validation:Pattern:=\"^cr-[0-9a-z]+$\"\n\t// +optional\n\tID string `json:\"id,omitempty\"`\n\t// Owner is the owner id for the ami.\n\t// +kubebuilder:validation:Pattern:=\"^[0-9]{12}$\"\n\t// +optional\n\tOwnerID string `json:\"ownerID,omitempty\"`\n\t// InstanceMatchCriteria specifies how instances are matched to capacity reservations.\n\t// +kubebuilder:validation:Enum:={open,targeted}\n\t// +optional\n\tInstanceMatchCriteria string `json:\"instanceMatchCriteria,omitempty\"`\n}\n\n// AMISelectorTerm defines selection logic for an ami used by Karpenter to launch nodes.\n// If multiple fields are used for selection, the requirements are ANDed.\ntype AMISelectorTerm struct {\n\t// Alias specifies which EKS optimized AMI to select.\n\t// Each alias consists of a family and an AMI version, specified as \"family@version\".\n\t// Valid families include: al2, al2023, bottlerocket, windows2019, windows2022, windows2025.\n\t// The version can either be pinned to a specific AMI release, with that AMIs version format (ex: \"al2023@v20240625\" or \"bottlerocket@v1.10.0\").\n\t// The version can also be set to \"latest\" for any family. Setting the version to latest will result in drift when a new AMI is released. This is **not** recommended for production environments.\n\t// Note: The Windows families do **not** support version pinning, and only latest may be used.\n\t// +kubebuilder:validation:XValidation:message=\"'alias' is improperly formatted, must match the format 'family@version'\",rule=\"self.matches('^[a-zA-Z0-9]+@.+$')\"\n\t// +kubebuilder:validation:XValidation:message=\"family is not supported, must be one of the following: 'al2', 'al2023', 'bottlerocket', 'windows2019', 'windows2022', 'windows2025'\",rule=\"self.split('@')[0] in ['al2','al2023','bottlerocket','windows2019','windows2022','windows2025']\"\n\t// +kubebuilder:validation:XValidation:message=\"windows families may only specify version 'latest'\",rule=\"self.split('@')[0] in ['windows2019','windows2022','windows2025'] ? self.split('@')[1] == 'latest' : true\"\n\t// +kubebuilder:validation:MaxLength=30\n\t// +optional\n\tAlias string `json:\"alias,omitempty\"`\n\t// Tags is a map of key/value tags used to select amis.\n\t// Specifying '*' for a value selects all values for a given tag key.\n\t// +kubebuilder:validation:XValidation:message=\"empty tag keys or values aren't supported\",rule=\"self.all(k, k != '' && self[k] != '')\"\n\t// +kubebuilder:validation:MaxProperties:=20\n\t// +optional\n\tTags map[string]string `json:\"tags,omitempty\"`\n\t// ID is the ami id in EC2\n\t// +kubebuilder:validation:Pattern:=\"ami-[0-9a-z]+\"\n\t// +optional\n\tID string `json:\"id,omitempty\"`\n\t// Name is the ami name in EC2.\n\t// This value is the name field, which is different from the name tag.\n\t// +optional\n\tName string `json:\"name,omitempty\"`\n\t// Owner is the owner for the ami.\n\t// You can specify a combination of AWS account IDs, \"self\", \"amazon\", and \"aws-marketplace\"\n\t// +optional\n\tOwner string `json:\"owner,omitempty\"`\n\t//SSMParameter is the name (or ARN) of the SSM parameter containing the Image ID.\n\t// +optional\n\tSSMParameter string `json:\"ssmParameter,omitempty\"`\n}\n\n// KubeletConfiguration defines args to be used when configuring kubelet on provisioned nodes.\n// They are a subset of the upstream types, recognizing not all options may be supported.\n// Wherever possible, the types and names should reflect the upstream kubelet types.\n// https://pkg.go.dev/k8s.io/kubelet/config/v1beta1#KubeletConfiguration\n// https://github.com/kubernetes/kubernetes/blob/9f82d81e55cafdedab619ea25cabf5d42736dacf/cmd/kubelet/app/options/options.go#L53\ntype KubeletConfiguration struct {\n\t// clusterDNS is a list of IP addresses for the cluster DNS server.\n\t// Note that not all providers may use all addresses.\n\t//+optional\n\tClusterDNS []string `json:\"clusterDNS,omitempty\"`\n\t// MaxPods is an override for the maximum number of pods that can run on\n\t// a worker node instance.\n\t// +kubebuilder:validation:Minimum:=0\n\t// +optional\n\tMaxPods *int32 `json:\"maxPods,omitempty\"`\n\t// PodsPerCore is an override for the number of pods that can run on a worker node\n\t// instance based on the number of cpu cores. This value cannot exceed MaxPods, so, if\n\t// MaxPods is a lower value, that value will be used.\n\t// +kubebuilder:validation:Minimum:=0\n\t// +optional\n\tPodsPerCore *int32 `json:\"podsPerCore,omitempty\"`\n\t// SystemReserved contains resources reserved for OS system daemons and kernel memory.\n\t// +kubebuilder:validation:XValidation:message=\"valid keys for systemReserved are ['cpu','memory','ephemeral-storage','pid']\",rule=\"self.all(x, x=='cpu' || x=='memory' || x=='ephemeral-storage' || x=='pid')\"\n\t// +kubebuilder:validation:XValidation:message=\"systemReserved value cannot be a negative resource quantity\",rule=\"self.all(x, !self[x].startsWith('-'))\"\n\t// +optional\n\tSystemReserved map[string]string `json:\"systemReserved,omitempty\"`\n\t// KubeReserved contains resources reserved for Kubernetes system components.\n\t// +kubebuilder:validation:XValidation:message=\"valid keys for kubeReserved are ['cpu','memory','ephemeral-storage','pid']\",rule=\"self.all(x, x=='cpu' || x=='memory' || x=='ephemeral-storage' || x=='pid')\"\n\t// +kubebuilder:validation:XValidation:message=\"kubeReserved value cannot be a negative resource quantity\",rule=\"self.all(x, !self[x].startsWith('-'))\"\n\t// +optional\n\tKubeReserved map[string]string `json:\"kubeReserved,omitempty\"`\n\t// EvictionHard is the map of signal names to quantities that define hard eviction thresholds\n\t// +kubebuilder:validation:XValidation:message=\"valid keys for evictionHard are ['memory.available','nodefs.available','nodefs.inodesFree','imagefs.available','imagefs.inodesFree','pid.available']\",rule=\"self.all(x, x in ['memory.available','nodefs.available','nodefs.inodesFree','imagefs.available','imagefs.inodesFree','pid.available'])\"\n\t// +optional\n\tEvictionHard map[string]string `json:\"evictionHard,omitempty\"`\n\t// EvictionSoft is the map of signal names to quantities that define soft eviction thresholds\n\t// +kubebuilder:validation:XValidation:message=\"valid keys for evictionSoft are ['memory.available','nodefs.available','nodefs.inodesFree','imagefs.available','imagefs.inodesFree','pid.available']\",rule=\"self.all(x, x in ['memory.available','nodefs.available','nodefs.inodesFree','imagefs.available','imagefs.inodesFree','pid.available'])\"\n\t// +optional\n\tEvictionSoft map[string]string `json:\"evictionSoft,omitempty\"`\n\t// EvictionSoftGracePeriod is the map of signal names to quantities that define grace periods for each eviction signal\n\t// +kubebuilder:validation:XValidation:message=\"valid keys for evictionSoftGracePeriod are ['memory.available','nodefs.available','nodefs.inodesFree','imagefs.available','imagefs.inodesFree','pid.available']\",rule=\"self.all(x, x in ['memory.available','nodefs.available','nodefs.inodesFree','imagefs.available','imagefs.inodesFree','pid.available'])\"\n\t// +optional\n\tEvictionSoftGracePeriod map[string]metav1.Duration `json:\"evictionSoftGracePeriod,omitempty\"`\n\t// EvictionMaxPodGracePeriod is the maximum allowed grace period (in seconds) to use when terminating pods in\n\t// response to soft eviction thresholds being met.\n\t// +optional\n\tEvictionMaxPodGracePeriod *int32 `json:\"evictionMaxPodGracePeriod,omitempty\"`\n\t// ImageGCHighThresholdPercent is the percent of disk usage after which image\n\t// garbage collection is always run. The percent is calculated by dividing this\n\t// field value by 100, so this field must be between 0 and 100, inclusive.\n\t// When specified, the value must be greater than ImageGCLowThresholdPercent.\n\t// +kubebuilder:validation:Minimum:=0\n\t// +kubebuilder:validation:Maximum:=100\n\t// +optional\n\tImageGCHighThresholdPercent *int32 `json:\"imageGCHighThresholdPercent,omitempty\"`\n\t// ImageGCLowThresholdPercent is the percent of disk usage before which image\n\t// garbage collection is never run. Lowest disk usage to garbage collect to.\n\t// The percent is calculated by dividing this field value by 100,\n\t// so the field value must be between 0 and 100, inclusive.\n\t// When specified, the value must be less than imageGCHighThresholdPercent\n\t// +kubebuilder:validation:Minimum:=0\n\t// +kubebuilder:validation:Maximum:=100\n\t// +optional\n\tImageGCLowThresholdPercent *int32 `json:\"imageGCLowThresholdPercent,omitempty\"`\n\t// CPUCFSQuota enables CPU CFS quota enforcement for containers that specify CPU limits.\n\t// +optional\n\tCPUCFSQuota *bool `json:\"cpuCFSQuota,omitempty\"`\n}\n\n// MetadataOptions contains parameters for specifying the exposure of the\n// Instance Metadata Service to provisioned EC2 nodes.\ntype MetadataOptions struct {\n\t// HTTPEndpoint enables or disables the HTTP metadata endpoint on provisioned\n\t// nodes. If metadata options is non-nil, but this parameter is not specified,\n\t// the default state is \"enabled\".\n\t//\n\t// If you specify a value of \"disabled\", instance metadata will not be accessible\n\t// on the node.\n\t// +kubebuilder:default=enabled\n\t// +kubebuilder:validation:Enum:={enabled,disabled}\n\t// +optional\n\tHTTPEndpoint *string `json:\"httpEndpoint,omitempty\"`\n\t// HTTPProtocolIPv6 enables or disables the IPv6 endpoint for the instance metadata\n\t// service on provisioned nodes. If metadata options is non-nil, but this parameter\n\t// is not specified, the default state is \"disabled\".\n\t// +kubebuilder:default=disabled\n\t// +kubebuilder:validation:Enum:={enabled,disabled}\n\t// +optional\n\tHTTPProtocolIPv6 *string `json:\"httpProtocolIPv6,omitempty\"`\n\t// HTTPPutResponseHopLimit is the desired HTTP PUT response hop limit for\n\t// instance metadata requests. The larger the number, the further instance\n\t// metadata requests can travel. Possible values are integers from 1 to 64.\n\t// If metadata options is non-nil, but this parameter is not specified, the\n\t// default value is 1.\n\t// +kubebuilder:default=1\n\t// +kubebuilder:validation:Minimum:=1\n\t// +kubebuilder:validation:Maximum:=64\n\t// +optional\n\tHTTPPutResponseHopLimit *int64 `json:\"httpPutResponseHopLimit,omitempty\"`\n\t// HTTPTokens determines the state of token usage for instance metadata\n\t// requests. If metadata options is non-nil, but this parameter is not\n\t// specified, the default state is \"required\".\n\t//\n\t// If the state is optional, one can choose to retrieve instance metadata with\n\t// or without a signed token header on the request. If one retrieves the IAM\n\t// role credentials without a token, the version 1.0 role credentials are\n\t// returned. If one retrieves the IAM role credentials using a valid signed\n\t// token, the version 2.0 role credentials are returned.\n\t//\n\t// If the state is \"required\", one must send a signed token header with any\n\t// instance metadata retrieval requests. In this state, retrieving the IAM\n\t// role credentials always returns the version 2.0 credentials; the version\n\t// 1.0 credentials are not available.\n\t// +kubebuilder:default=required\n\t// +kubebuilder:validation:Enum:={required,optional}\n\t// +optional\n\tHTTPTokens *string `json:\"httpTokens,omitempty\"`\n}\n\ntype BlockDeviceMapping struct {\n\t// The device name (for example, /dev/sdh or xvdh).\n\t// +optional\n\tDeviceName *string `json:\"deviceName,omitempty\"`\n\t// EBS contains parameters used to automatically set up EBS volumes when an instance is launched.\n\t// +kubebuilder:validation:XValidation:message=\"snapshotID or volumeSize must be defined\",rule=\"has(self.snapshotID) || has(self.volumeSize)\"\n\t// +kubebuilder:validation:XValidation:message=\"snapshotID must be set when volumeInitializationRate is set\",rule=\"!has(self.volumeInitializationRate) || (has(self.snapshotID) && self.snapshotID != '')\"\n\t// +optional\n\tEBS *BlockDevice `json:\"ebs,omitempty\"`\n\t// RootVolume is a flag indicating if this device is mounted as kubelet root dir. You can\n\t// configure at most one root volume in BlockDeviceMappings.\n\t// +optional\n\tRootVolume bool `json:\"rootVolume,omitempty\"`\n}\n\ntype BlockDevice struct {\n\t// DeleteOnTermination indicates whether the EBS volume is deleted on instance termination.\n\t// +optional\n\tDeleteOnTermination *bool `json:\"deleteOnTermination,omitempty\"`\n\t// Encrypted indicates whether the EBS volume is encrypted. Encrypted volumes can only\n\t// be attached to instances that support Amazon EBS encryption. If you are creating\n\t// a volume from a snapshot, you can't specify an encryption value.\n\t// +optional\n\tEncrypted *bool `json:\"encrypted,omitempty\"`\n\t// IOPS is the number of I/O operations per second (IOPS). For gp3, io1, and io2 volumes,\n\t// this represents the number of IOPS that are provisioned for the volume. For\n\t// gp2 volumes, this represents the baseline performance of the volume and the\n\t// rate at which the volume accumulates I/O credits for bursting.\n\t//\n\t// The following are the supported values for each volume type:\n\t//\n\t//    * gp3: 3,000-16,000 IOPS\n\t//\n\t//    * io1: 100-64,000 IOPS\n\t//\n\t//    * io2: 100-64,000 IOPS\n\t//\n\t// For io1 and io2 volumes, we guarantee 64,000 IOPS only for Instances built\n\t// on the Nitro System (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances).\n\t// Other instance families guarantee performance up to 32,000 IOPS.\n\t//\n\t// This parameter is supported for io1, io2, and gp3 volumes only. This parameter\n\t// is not supported for gp2, st1, sc1, or standard volumes.\n\t// +optional\n\tIOPS *int64 `json:\"iops,omitempty\"`\n\t// Identifier (key ID, key alias, key ARN, or alias ARN) of the customer managed KMS key to use for EBS encryption.\n\t// +optional\n\tKMSKeyID *string `json:\"kmsKeyID,omitempty\"`\n\t// SnapshotID is the ID of an EBS snapshot\n\t// +optional\n\tSnapshotID *string `json:\"snapshotID,omitempty\"`\n\t// Throughput to provision for a gp3 volume, with a maximum of 1,000 MiB/s.\n\t// Valid Range: Minimum value of 125. Maximum value of 1000.\n\t// +optional\n\tThroughput *int64 `json:\"throughput,omitempty\"`\n\t// VolumeInitializationRate specifies the Amazon EBS Provisioned Rate for Volume Initialization,\n\t// in MiB/s, at which to download the snapshot blocks from Amazon S3 to the volume. This is also known as volume\n\t// initialization. Specifying a volume initialization rate ensures that the volume is initialized at a\n\t// predictable and consistent rate after creation. Only allowed if SnapshotID is set.\n\t// Valid Range: Minimum value of 100. Maximum value of 300.\n\t// +kubebuilder:validation:Minimum:=100\n\t// +kubebuilder:validation:Maximum:=300\n\t// +optional\n\tVolumeInitializationRate *int32 `json:\"volumeInitializationRate,omitempty\"`\n\t// VolumeSize in `Gi`, `G`, `Ti`, or `T`. You must specify either a snapshot ID or\n\t// a volume size. The following are the supported volumes sizes for each volume\n\t// type:\n\t//\n\t//    * gp2 and gp3: 1-16,384\n\t//\n\t//    * io1 and io2: 4-16,384\n\t//\n\t//    * st1 and sc1: 125-16,384\n\t//\n\t//    * standard: 1-1,024\n\t// + TODO: Add the CEL resources.quantity type after k8s 1.29\n\t// + https://github.com/kubernetes/apiserver/commit/b137c256373aec1c5d5810afbabb8932a19ecd2a#diff-838176caa5882465c9d6061febd456397a3e2b40fb423ed36f0cabb1847ecb4dR190\n\t// +kubebuilder:validation:Pattern:=\"^((?:[1-9][0-9]{0,3}|[1-4][0-9]{4}|[5][0-8][0-9]{3}|59000)Gi|(?:[1-9][0-9]{0,3}|[1-5][0-9]{4}|[6][0-3][0-9]{3}|64000)G|([1-9]||[1-5][0-7]|58)Ti|([1-9]||[1-5][0-9]|6[0-3]|64)T)$\"\n\t// +kubebuilder:validation:Schemaless\n\t// +kubebuilder:validation:Type:=string\n\t// +optional\n\tVolumeSize *resource.Quantity `json:\"volumeSize,omitempty\" hash:\"string\"`\n\t// VolumeType of the block device.\n\t// For more information, see Amazon EBS volume types (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html)\n\t// in the Amazon Elastic Compute Cloud User Guide.\n\t// +kubebuilder:validation:Enum:={standard,io1,io2,gp2,sc1,st1,gp3}\n\t// +optional\n\tVolumeType *string `json:\"volumeType,omitempty\"`\n}\n\n// InstanceStorePolicy enumerates options for configuring instance store disks.\n// +kubebuilder:validation:Enum={RAID0}\ntype InstanceStorePolicy string\n\nconst (\n\t// InstanceStorePolicyRAID0 configures a RAID-0 array that includes all ephemeral NVMe instance storage disks.\n\t// The containerd and kubelet state directories (`/var/lib/containerd` and `/var/lib/kubelet`) will then use the\n\t// ephemeral storage for more and faster node ephemeral-storage. The node's ephemeral storage can be shared among\n\t// pods that request ephemeral storage and container images that are downloaded to the node.\n\tInstanceStorePolicyRAID0 InstanceStorePolicy = \"RAID0\"\n)\n\n// EC2NodeClass is the Schema for the EC2NodeClass API\n// +kubebuilder:object:root=true\n// +kubebuilder:printcolumn:name=\"Ready\",type=\"string\",JSONPath=\".status.conditions[?(@.type==\\\"Ready\\\")].status\",description=\"\"\n// +kubebuilder:printcolumn:name=\"Age\",type=\"date\",JSONPath=\".metadata.creationTimestamp\",description=\"\"\n// +kubebuilder:printcolumn:name=\"Role\",type=\"string\",JSONPath=\".spec.role\",priority=1,description=\"\"\n// +kubebuilder:resource:path=ec2nodeclasses,scope=Cluster,categories=karpenter,shortName={ec2nc,ec2ncs}\n// +kubebuilder:storageversion\n// +kubebuilder:subresource:status\ntype EC2NodeClass struct {\n\tmetav1.TypeMeta   `json:\",inline\"`\n\tmetav1.ObjectMeta `json:\"metadata,omitempty\"`\n\n\t// +kubebuilder:validation:XValidation:message=\"must specify exactly one of ['role', 'instanceProfile']\",rule=\"(has(self.role) && !has(self.instanceProfile)) || (!has(self.role) && has(self.instanceProfile))\"\n\t// +kubebuilder:validation:XValidation:message=\"if set, amiFamily must be 'AL2' or 'Custom' when using an AL2 alias\",rule=\"!has(self.amiFamily) || (self.amiSelectorTerms.exists(x, has(x.alias) && x.alias.find('^[^@]+') == 'al2') ? (self.amiFamily == 'Custom' || self.amiFamily == 'AL2') : true)\"\n\t// +kubebuilder:validation:XValidation:message=\"if set, amiFamily must be 'AL2023' or 'Custom' when using an AL2023 alias\",rule=\"!has(self.amiFamily) || (self.amiSelectorTerms.exists(x, has(x.alias) && x.alias.find('^[^@]+') == 'al2023') ? (self.amiFamily == 'Custom' || self.amiFamily == 'AL2023') : true)\"\n\t// +kubebuilder:validation:XValidation:message=\"if set, amiFamily must be 'Bottlerocket' or 'Custom' when using a Bottlerocket alias\",rule=\"!has(self.amiFamily) || (self.amiSelectorTerms.exists(x, has(x.alias) && x.alias.find('^[^@]+') == 'bottlerocket') ? (self.amiFamily == 'Custom' || self.amiFamily == 'Bottlerocket') : true)\"\n\t// +kubebuilder:validation:XValidation:message=\"if set, amiFamily must be 'Windows2019' or 'Custom' when using a Windows2019 alias\",rule=\"!has(self.amiFamily) || (self.amiSelectorTerms.exists(x, has(x.alias) && x.alias.find('^[^@]+') == 'windows2019') ? (self.amiFamily == 'Custom' || self.amiFamily == 'Windows2019') : true)\"\n\t// +kubebuilder:validation:XValidation:message=\"if set, amiFamily must be 'Windows2022' or 'Custom' when using a Windows2022 alias\",rule=\"!has(self.amiFamily) || (self.amiSelectorTerms.exists(x, has(x.alias) && x.alias.find('^[^@]+') == 'windows2022') ? (self.amiFamily == 'Custom' || self.amiFamily == 'Windows2022') : true)\"\n\t// +kubebuilder:validation:XValidation:message=\"if set, amiFamily must be 'Windows2025' or 'Custom' when using a Windows2025 alias\",rule=\"!has(self.amiFamily) || (self.amiSelectorTerms.exists(x, has(x.alias) && x.alias.find('^[^@]+') == 'windows2025') ? (self.amiFamily == 'Custom' || self.amiFamily == 'Windows2025') : true)\"\n\t// +kubebuilder:validation:XValidation:message=\"must specify amiFamily if amiSelectorTerms does not contain an alias\",rule=\"self.amiSelectorTerms.exists(x, has(x.alias)) ? true : has(self.amiFamily)\"\n\tSpec   EC2NodeClassSpec   `json:\"spec,omitempty\"`\n\tStatus EC2NodeClassStatus `json:\"status,omitempty\"`\n}\n\n// We need to bump the EC2NodeClassHashVersion when we make an update to the EC2NodeClass CRD under these conditions:\n// 1. A field changes its default value for an existing field that is already hashed\n// 2. A field is added to the hash calculation with an already-set value\n// 3. A field is removed from the hash calculations\nconst EC2NodeClassHashVersion = \"v4\"\n\nfunc (in *EC2NodeClass) Hash() string {\n\treturn fmt.Sprint(lo.Must(hashstructure.Hash([]any{\n\t\tin.Spec,\n\t\t// AMIFamily should be hashed using the dynamically resolved value rather than the literal value of the field.\n\t\t// This ensures that scenarios such as changing the field from nil to AL2023 with the alias \"al2023@latest\"\n\t\t// doesn't trigger drift.\n\t\tin.AMIFamily(),\n\t}, hashstructure.FormatV2, &hashstructure.HashOptions{\n\t\tSlicesAsSets:    true,\n\t\tIgnoreZeroValue: true,\n\t\tZeroNil:         true,\n\t})))\n}\n\nfunc (in *EC2NodeClass) LegacyInstanceProfileName(clusterName, region string) string {\n\treturn fmt.Sprintf(\"%s_%d\", clusterName, lo.Must(hashstructure.Hash(fmt.Sprintf(\"%s%s\", region, in.Name), hashstructure.FormatV2, nil)))\n}\n\nfunc (in *EC2NodeClass) InstanceProfileName(clusterName, region string) string {\n\treturn fmt.Sprintf(\"%s_%d\", clusterName, lo.Must(hashstructure.Hash(fmt.Sprintf(\"%s%s%s\", region, in.Name, uuid.New().String()), hashstructure.FormatV2, nil)))\n}\n\nfunc (in *EC2NodeClass) InstanceProfileRole() string {\n\treturn in.Spec.Role\n}\n\nfunc (in *EC2NodeClass) InstanceProfileTags(clusterName string, region string) map[string]string {\n\treturn lo.Assign(in.Spec.Tags, map[string]string{\n\t\tfmt.Sprintf(\"kubernetes.io/cluster/%s\", clusterName): \"owned\",\n\t\tEKSClusterNameTagKey:   clusterName,\n\t\tLabelNodeClass:         in.Name,\n\t\tv1.LabelTopologyRegion: region,\n\t})\n}\n\nfunc (in *EC2NodeClass) BlockDeviceMappings() []*BlockDeviceMapping {\n\treturn in.Spec.BlockDeviceMappings\n}\n\nfunc (in *EC2NodeClass) InstanceStorePolicy() *InstanceStorePolicy {\n\treturn in.Spec.InstanceStorePolicy\n}\n\nfunc (in *EC2NodeClass) KubeletConfiguration() *KubeletConfiguration {\n\treturn in.Spec.Kubelet\n}\n\n// AMIFamily returns the family for a NodePool based on the following items, in order of precdence:\n//   - ec2nodeclass.spec.amiFamily\n//   - ec2nodeclass.spec.amiSelectorTerms[].alias\n//\n// If an alias is specified, ec2nodeclass.spec.amiFamily must match that alias, or be 'Custom' (enforced via validation).\nfunc (in *EC2NodeClass) AMIFamily() string {\n\tif in.Spec.AMIFamily != nil {\n\t\treturn *in.Spec.AMIFamily\n\t}\n\tif alias := in.Alias(); alias != nil {\n\t\treturn alias.Family\n\t}\n\t// Unreachable: validation enforces that one of the above conditions must be met\n\treturn AMIFamilyCustom\n}\n\ntype Alias struct {\n\tFamily  string\n\tVersion string\n}\n\nconst (\n\tAliasVersionLatest = \"latest\"\n)\n\nfunc (a *Alias) String() string {\n\treturn fmt.Sprintf(\"%s@%s\", a.Family, a.Version)\n}\n\nfunc (in *EC2NodeClass) Alias() *Alias {\n\tterm, ok := lo.Find(in.Spec.AMISelectorTerms, func(term AMISelectorTerm) bool {\n\t\treturn term.Alias != \"\"\n\t})\n\tif !ok {\n\t\treturn nil\n\t}\n\treturn &Alias{\n\t\tFamily:  amiFamilyFromAlias(term.Alias),\n\t\tVersion: amiVersionFromAlias(term.Alias),\n\t}\n}\n\nfunc amiFamilyFromAlias(alias string) string {\n\tcomponents := strings.Split(alias, \"@\")\n\tif len(components) != 2 {\n\t\tlog.Fatalf(\"failed to parse AMI alias %q, invalid format\", alias)\n\t}\n\tfamily, ok := lo.Find([]string{\n\t\tAMIFamilyAL2,\n\t\tAMIFamilyAL2023,\n\t\tAMIFamilyBottlerocket,\n\t\tAMIFamilyWindows2019,\n\t\tAMIFamilyWindows2022,\n\t\tAMIFamilyWindows2025,\n\t}, func(family string) bool {\n\t\treturn strings.ToLower(family) == components[0]\n\t})\n\tif !ok {\n\t\tlog.Fatalf(\"%q is an invalid alias family\", components[0])\n\t}\n\treturn family\n}\n\nfunc amiVersionFromAlias(alias string) string {\n\tcomponents := strings.Split(alias, \"@\")\n\tif len(components) != 2 {\n\t\tlog.Fatalf(\"failed to parse AMI alias %q, invalid format\", alias)\n\t}\n\treturn components[1]\n}\n\n// EC2NodeClassList contains a list of EC2NodeClass\n// +kubebuilder:object:root=true\ntype EC2NodeClassList struct {\n\tmetav1.TypeMeta `json:\",inline\"`\n\tmetav1.ListMeta `json:\"metadata,omitempty\"`\n\tItems           []EC2NodeClass `json:\"items\"`\n}\n"
  },
  {
    "path": "pkg/apis/v1/ec2nodeclass_defaults.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage v1\n\nimport (\n\t\"context\"\n)\n\n// SetDefaults for the EC2NodeClass\nfunc (in *EC2NodeClass) SetDefaults(_ context.Context) {}\n"
  },
  {
    "path": "pkg/apis/v1/ec2nodeclass_hash_test.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage v1_test\n\nimport (\n\t\"github.com/imdario/mergo\"\n\t\"github.com/samber/lo\"\n\t\"k8s.io/apimachinery/pkg/api/resource\"\n\tmetav1 \"k8s.io/apimachinery/pkg/apis/meta/v1\"\n\t\"sigs.k8s.io/karpenter/pkg/test\"\n\n\t\"github.com/aws/aws-sdk-go-v2/aws\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n)\n\nvar _ = Describe(\"Hash\", func() {\n\tconst staticHash = \"4950366118253097694\"\n\tvar nodeClass *v1.EC2NodeClass\n\tBeforeEach(func() {\n\t\tnodeClass = &v1.EC2NodeClass{\n\t\t\tObjectMeta: test.ObjectMeta(metav1.ObjectMeta{}),\n\t\t\tSpec: v1.EC2NodeClassSpec{\n\t\t\t\tRole: \"role-1\",\n\t\t\t\tTags: map[string]string{\n\t\t\t\t\t\"keyTag-1\": \"valueTag-1\",\n\t\t\t\t\t\"keyTag-2\": \"valueTag-2\",\n\t\t\t\t},\n\t\t\t\tContext:                  lo.ToPtr(\"fake-context\"),\n\t\t\t\tDetailedMonitoring:       lo.ToPtr(false),\n\t\t\t\tAssociatePublicIPAddress: lo.ToPtr(false),\n\t\t\t\tMetadataOptions: &v1.MetadataOptions{\n\t\t\t\t\tHTTPEndpoint:            lo.ToPtr(\"disabled\"),\n\t\t\t\t\tHTTPProtocolIPv6:        lo.ToPtr(\"disabled\"),\n\t\t\t\t\tHTTPPutResponseHopLimit: lo.ToPtr(int64(1)),\n\t\t\t\t\tHTTPTokens:              lo.ToPtr(\"optional\"),\n\t\t\t\t},\n\t\t\t\tBlockDeviceMappings: []*v1.BlockDeviceMapping{\n\t\t\t\t\t{\n\t\t\t\t\t\tDeviceName: lo.ToPtr(\"map-device-1\"),\n\t\t\t\t\t\tRootVolume: false,\n\t\t\t\t\t\tEBS: &v1.BlockDevice{\n\t\t\t\t\t\t\tDeleteOnTermination: lo.ToPtr(false),\n\t\t\t\t\t\t\tEncrypted:           lo.ToPtr(false),\n\t\t\t\t\t\t\tIOPS:                lo.ToPtr(int64(0)),\n\t\t\t\t\t\t\tKMSKeyID:            lo.ToPtr(\"fakeKMSKeyID\"),\n\t\t\t\t\t\t\tSnapshotID:          lo.ToPtr(\"fakeSnapshot\"),\n\t\t\t\t\t\t\tThroughput:          lo.ToPtr(int64(0)),\n\t\t\t\t\t\t\tVolumeSize:          resource.NewScaledQuantity(2, resource.Giga),\n\t\t\t\t\t\t\tVolumeType:          lo.ToPtr(\"standard\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tDeviceName: lo.ToPtr(\"map-device-2\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tUserData: aws.String(\"userdata-test-1\"),\n\t\t\t},\n\t\t}\n\t})\n\tDescribeTable(\n\t\t\"should match static hash on field value change\",\n\t\tfunc(hash string, changes v1.EC2NodeClass) {\n\t\t\tExpect(mergo.Merge(nodeClass, changes, mergo.WithOverride, mergo.WithSliceDeepCopy)).To(Succeed())\n\t\t\tExpect(nodeClass.Hash()).To(Equal(hash))\n\t\t},\n\t\tEntry(\"Base EC2NodeClass\", staticHash, v1.EC2NodeClass{}),\n\t\t// Static fields, expect changed hash from base\n\n\t\tEntry(\"UserData\", \"9034828637236670345\", v1.EC2NodeClass{Spec: v1.EC2NodeClassSpec{UserData: aws.String(\"userdata-test-2\")}}),\n\t\tEntry(\"Tags\", \"6878220270322275255\", v1.EC2NodeClass{Spec: v1.EC2NodeClassSpec{Tags: map[string]string{\"keyTag-test-3\": \"valueTag-test-3\"}}}),\n\t\tEntry(\"Context\", \"13953931752662869657\", v1.EC2NodeClass{Spec: v1.EC2NodeClassSpec{Context: aws.String(\"context-2\")}}),\n\t\tEntry(\"DetailedMonitoring\", \"14187487647319890991\", v1.EC2NodeClass{Spec: v1.EC2NodeClassSpec{DetailedMonitoring: aws.Bool(true)}}),\n\t\tEntry(\"InstanceStorePolicy\", \"4160809219257698490\", v1.EC2NodeClass{Spec: v1.EC2NodeClassSpec{InstanceStorePolicy: lo.ToPtr(v1.InstanceStorePolicyRAID0)}}),\n\t\tEntry(\"AssociatePublicIPAddress\", \"4469320567057431454\", v1.EC2NodeClass{Spec: v1.EC2NodeClassSpec{AssociatePublicIPAddress: lo.ToPtr(true)}}),\n\t\tEntry(\"MetadataOptions HTTPEndpoint\", \"1277386558528601282\", v1.EC2NodeClass{Spec: v1.EC2NodeClassSpec{MetadataOptions: &v1.MetadataOptions{HTTPEndpoint: lo.ToPtr(\"enabled\")}}}),\n\t\tEntry(\"MetadataOptions HTTPProtocolIPv6\", \"14697047633165484196\", v1.EC2NodeClass{Spec: v1.EC2NodeClassSpec{MetadataOptions: &v1.MetadataOptions{HTTPProtocolIPv6: lo.ToPtr(\"enabled\")}}}),\n\t\tEntry(\"MetadataOptions HTTPPutResponseHopLimit\", \"2086799014304536137\", v1.EC2NodeClass{Spec: v1.EC2NodeClassSpec{MetadataOptions: &v1.MetadataOptions{HTTPPutResponseHopLimit: lo.ToPtr(int64(10))}}}),\n\t\tEntry(\"MetadataOptions HTTPTokens\", \"14750841460622248593\", v1.EC2NodeClass{Spec: v1.EC2NodeClassSpec{MetadataOptions: &v1.MetadataOptions{HTTPTokens: lo.ToPtr(\"required\")}}}),\n\t\tEntry(\"BlockDeviceMapping DeviceName\", \"11716516558705174498\", v1.EC2NodeClass{Spec: v1.EC2NodeClassSpec{BlockDeviceMappings: []*v1.BlockDeviceMapping{{DeviceName: lo.ToPtr(\"map-device-test-3\")}}}}),\n\t\tEntry(\"BlockDeviceMapping RootVolume\", \"11900810786014401721\", v1.EC2NodeClass{Spec: v1.EC2NodeClassSpec{BlockDeviceMappings: []*v1.BlockDeviceMapping{{RootVolume: true}}}}),\n\t\tEntry(\"BlockDeviceMapping DeleteOnTermination\", \"14586255897156659742\", v1.EC2NodeClass{Spec: v1.EC2NodeClassSpec{BlockDeviceMappings: []*v1.BlockDeviceMapping{{EBS: &v1.BlockDevice{DeleteOnTermination: lo.ToPtr(true)}}}}}),\n\t\tEntry(\"BlockDeviceMapping Encrypted\", \"10872029821841773628\", v1.EC2NodeClass{Spec: v1.EC2NodeClassSpec{BlockDeviceMappings: []*v1.BlockDeviceMapping{{EBS: &v1.BlockDevice{Encrypted: lo.ToPtr(true)}}}}}),\n\t\tEntry(\"BlockDeviceMapping IOPS\", \"9202874311950700210\", v1.EC2NodeClass{Spec: v1.EC2NodeClassSpec{BlockDeviceMappings: []*v1.BlockDeviceMapping{{EBS: &v1.BlockDevice{IOPS: lo.ToPtr(int64(10))}}}}}),\n\t\tEntry(\"BlockDeviceMapping KMSKeyID\", \"14601456769467439478\", v1.EC2NodeClass{Spec: v1.EC2NodeClassSpec{BlockDeviceMappings: []*v1.BlockDeviceMapping{{EBS: &v1.BlockDevice{KMSKeyID: lo.ToPtr(\"test\")}}}}}),\n\t\tEntry(\"BlockDeviceMapping SnapshotID\", \"8031059801598053215\", v1.EC2NodeClass{Spec: v1.EC2NodeClassSpec{BlockDeviceMappings: []*v1.BlockDeviceMapping{{EBS: &v1.BlockDevice{SnapshotID: lo.ToPtr(\"test\")}}}}}),\n\t\tEntry(\"BlockDeviceMapping Throughput\", \"14410045481146650034\", v1.EC2NodeClass{Spec: v1.EC2NodeClassSpec{BlockDeviceMappings: []*v1.BlockDeviceMapping{{EBS: &v1.BlockDevice{Throughput: lo.ToPtr(int64(10))}}}}}),\n\t\tEntry(\"BlockDeviceMapping VolumeType\", \"9480251663542054235\", v1.EC2NodeClass{Spec: v1.EC2NodeClassSpec{BlockDeviceMappings: []*v1.BlockDeviceMapping{{EBS: &v1.BlockDevice{VolumeType: lo.ToPtr(\"io1\")}}}}}),\n\n\t\t// Behavior / Dynamic fields, expect same hash as base\n\t\tEntry(\"Modified AMISelector\", staticHash, v1.EC2NodeClass{Spec: v1.EC2NodeClassSpec{AMISelectorTerms: []v1.AMISelectorTerm{{Tags: map[string]string{\"\": \"ami-test-value\"}}}}}),\n\t\tEntry(\"Modified SubnetSelector\", staticHash, v1.EC2NodeClass{Spec: v1.EC2NodeClassSpec{SubnetSelectorTerms: []v1.SubnetSelectorTerm{{Tags: map[string]string{\"subnet-test-key\": \"subnet-test-value\"}}}}}),\n\t\tEntry(\"Modified SecurityGroupSelector\", staticHash, v1.EC2NodeClass{Spec: v1.EC2NodeClassSpec{SecurityGroupSelectorTerms: []v1.SecurityGroupSelectorTerm{{Tags: map[string]string{\"security-group-test-key\": \"security-group-test-value\"}}}}}),\n\t)\n\t// We create a separate test for updating blockDeviceMapping volumeSize, since resource.Quantity is a struct, and mergo.WithSliceDeepCopy\n\t// doesn't work well with unexported fields, like the ones that are present in resource.Quantity\n\tIt(\"should match static hash when updating blockDeviceMapping volumeSize\", func() {\n\t\tnodeClass.Spec.BlockDeviceMappings[0].EBS.VolumeSize = resource.NewScaledQuantity(10, resource.Giga)\n\t\tExpect(nodeClass.Hash()).To(Equal(\"5906178522470964189\"))\n\t})\n\tIt(\"should match static hash for instanceProfile\", func() {\n\t\tnodeClass.Spec.Role = \"\"\n\t\tnodeClass.Spec.InstanceProfile = lo.ToPtr(\"test-instance-profile\")\n\t\tExpect(nodeClass.Hash()).To(Equal(\"5855570904022890593\"))\n\t})\n\tIt(\"should match static hash when reordering tags\", func() {\n\t\tnodeClass.Spec.Tags = map[string]string{\"keyTag-2\": \"valueTag-2\", \"keyTag-1\": \"valueTag-1\"}\n\t\tExpect(nodeClass.Hash()).To(Equal(staticHash))\n\t})\n\tIt(\"should match static hash when reordering blockDeviceMappings\", func() {\n\t\tnodeClass.Spec.BlockDeviceMappings[0], nodeClass.Spec.BlockDeviceMappings[1] = nodeClass.Spec.BlockDeviceMappings[1], nodeClass.Spec.BlockDeviceMappings[0]\n\t\tExpect(nodeClass.Hash()).To(Equal(staticHash))\n\t})\n\tDescribeTable(\"should change hash when static fields are updated\", func(changes v1.EC2NodeClass) {\n\t\thash := nodeClass.Hash()\n\t\tExpect(mergo.Merge(nodeClass, changes, mergo.WithOverride, mergo.WithSliceDeepCopy)).To(Succeed())\n\t\tupdatedHash := nodeClass.Hash()\n\t\tExpect(hash).ToNot(Equal(updatedHash))\n\t},\n\t\tEntry(\"UserData\", v1.EC2NodeClass{Spec: v1.EC2NodeClassSpec{UserData: aws.String(\"userdata-test-2\")}}),\n\t\tEntry(\"Tags\", v1.EC2NodeClass{Spec: v1.EC2NodeClassSpec{Tags: map[string]string{\"keyTag-test-3\": \"valueTag-test-3\"}}}),\n\t\tEntry(\"Context\", v1.EC2NodeClass{Spec: v1.EC2NodeClassSpec{Context: aws.String(\"context-2\")}}),\n\t\tEntry(\"DetailedMonitoring\", v1.EC2NodeClass{Spec: v1.EC2NodeClassSpec{DetailedMonitoring: aws.Bool(true)}}),\n\t\tEntry(\"InstanceStorePolicy\", v1.EC2NodeClass{Spec: v1.EC2NodeClassSpec{InstanceStorePolicy: lo.ToPtr(v1.InstanceStorePolicyRAID0)}}),\n\t\tEntry(\"AssociatePublicIPAddress\", v1.EC2NodeClass{Spec: v1.EC2NodeClassSpec{AssociatePublicIPAddress: lo.ToPtr(true)}}),\n\t\tEntry(\"MetadataOptions HTTPEndpoint\", v1.EC2NodeClass{Spec: v1.EC2NodeClassSpec{MetadataOptions: &v1.MetadataOptions{HTTPEndpoint: lo.ToPtr(\"enabled\")}}}),\n\t\tEntry(\"MetadataOptions HTTPProtocolIPv6\", v1.EC2NodeClass{Spec: v1.EC2NodeClassSpec{MetadataOptions: &v1.MetadataOptions{HTTPProtocolIPv6: lo.ToPtr(\"enabled\")}}}),\n\t\tEntry(\"MetadataOptions HTTPPutResponseHopLimit\", v1.EC2NodeClass{Spec: v1.EC2NodeClassSpec{MetadataOptions: &v1.MetadataOptions{HTTPPutResponseHopLimit: lo.ToPtr(int64(10))}}}),\n\t\tEntry(\"MetadataOptions HTTPTokens\", v1.EC2NodeClass{Spec: v1.EC2NodeClassSpec{MetadataOptions: &v1.MetadataOptions{HTTPTokens: lo.ToPtr(\"required\")}}}),\n\t\tEntry(\"BlockDeviceMapping DeviceName\", v1.EC2NodeClass{Spec: v1.EC2NodeClassSpec{BlockDeviceMappings: []*v1.BlockDeviceMapping{{DeviceName: lo.ToPtr(\"map-device-test-3\")}}}}),\n\t\tEntry(\"BlockDeviceMapping RootVolume\", v1.EC2NodeClass{Spec: v1.EC2NodeClassSpec{BlockDeviceMappings: []*v1.BlockDeviceMapping{{RootVolume: true}}}}),\n\t\tEntry(\"BlockDeviceMapping DeleteOnTermination\", v1.EC2NodeClass{Spec: v1.EC2NodeClassSpec{BlockDeviceMappings: []*v1.BlockDeviceMapping{{EBS: &v1.BlockDevice{DeleteOnTermination: lo.ToPtr(true)}}}}}),\n\t\tEntry(\"BlockDeviceMapping Encrypted\", v1.EC2NodeClass{Spec: v1.EC2NodeClassSpec{BlockDeviceMappings: []*v1.BlockDeviceMapping{{EBS: &v1.BlockDevice{Encrypted: lo.ToPtr(true)}}}}}),\n\t\tEntry(\"BlockDeviceMapping IOPS\", v1.EC2NodeClass{Spec: v1.EC2NodeClassSpec{BlockDeviceMappings: []*v1.BlockDeviceMapping{{EBS: &v1.BlockDevice{IOPS: lo.ToPtr(int64(10))}}}}}),\n\t\tEntry(\"BlockDeviceMapping KMSKeyID\", v1.EC2NodeClass{Spec: v1.EC2NodeClassSpec{BlockDeviceMappings: []*v1.BlockDeviceMapping{{EBS: &v1.BlockDevice{KMSKeyID: lo.ToPtr(\"test\")}}}}}),\n\t\tEntry(\"BlockDeviceMapping SnapshotID\", v1.EC2NodeClass{Spec: v1.EC2NodeClassSpec{BlockDeviceMappings: []*v1.BlockDeviceMapping{{EBS: &v1.BlockDevice{SnapshotID: lo.ToPtr(\"test\")}}}}}),\n\t\tEntry(\"BlockDeviceMapping Throughput\", v1.EC2NodeClass{Spec: v1.EC2NodeClassSpec{BlockDeviceMappings: []*v1.BlockDeviceMapping{{EBS: &v1.BlockDevice{Throughput: lo.ToPtr(int64(10))}}}}}),\n\t\tEntry(\"BlockDeviceMapping VolumeType\", v1.EC2NodeClass{Spec: v1.EC2NodeClassSpec{BlockDeviceMappings: []*v1.BlockDeviceMapping{{EBS: &v1.BlockDevice{VolumeType: lo.ToPtr(\"io1\")}}}}}),\n\t)\n\t// We create a separate test for updating blockDeviceMapping volumeSize, since resource.Quantity is a struct, and mergo.WithSliceDeepCopy\n\t// doesn't work well with unexported fields, like the ones that are present in resource.Quantity\n\tIt(\"should change hash blockDeviceMapping volumeSize is updated\", func() {\n\t\thash := nodeClass.Hash()\n\t\tnodeClass.Spec.BlockDeviceMappings[0].EBS.VolumeSize = resource.NewScaledQuantity(10, resource.Giga)\n\t\tupdatedHash := nodeClass.Hash()\n\t\tExpect(hash).ToNot(Equal(updatedHash))\n\t})\n\tIt(\"should change hash when instanceProfile is updated\", func() {\n\t\tnodeClass.Spec.Role = \"\"\n\t\tnodeClass.Spec.InstanceProfile = lo.ToPtr(\"test-instance-profile\")\n\t\thash := nodeClass.Hash()\n\t\tnodeClass.Spec.InstanceProfile = lo.ToPtr(\"other-instance-profile\")\n\t\tupdatedHash := nodeClass.Hash()\n\t\tExpect(hash).ToNot(Equal(updatedHash))\n\t})\n\tIt(\"should not change hash when tags are re-ordered\", func() {\n\t\thash := nodeClass.Hash()\n\t\tnodeClass.Spec.Tags = map[string]string{\"keyTag-2\": \"valueTag-2\", \"keyTag-1\": \"valueTag-1\"}\n\t\tupdatedHash := nodeClass.Hash()\n\t\tExpect(hash).To(Equal(updatedHash))\n\t})\n\tIt(\"should not change hash when blockDeviceMappings are re-ordered\", func() {\n\t\thash := nodeClass.Hash()\n\t\tnodeClass.Spec.BlockDeviceMappings[0], nodeClass.Spec.BlockDeviceMappings[1] = nodeClass.Spec.BlockDeviceMappings[1], nodeClass.Spec.BlockDeviceMappings[0]\n\t\tupdatedHash := nodeClass.Hash()\n\t\tExpect(hash).To(Equal(updatedHash))\n\t})\n\tIt(\"should not change hash when behavior/dynamic fields are updated\", func() {\n\t\thash := nodeClass.Hash()\n\n\t\t// Update a behavior/dynamic field\n\t\tnodeClass.Spec.SubnetSelectorTerms = []v1.SubnetSelectorTerm{{\n\t\t\tTags: map[string]string{\"subnet-test-key\": \"subnet-test-value\"},\n\t\t}}\n\t\tnodeClass.Spec.SecurityGroupSelectorTerms = []v1.SecurityGroupSelectorTerm{{\n\t\t\tTags: map[string]string{\"sg-test-key\": \"sg-test-value\"},\n\t\t}}\n\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{\n\t\t\tTags: map[string]string{\"ami-test-key\": \"ami-test-value\"},\n\t\t}}\n\t\tnodeClass.Spec.CapacityReservationSelectorTerms = []v1.CapacityReservationSelectorTerm{{\n\t\t\tTags: map[string]string{\"cr-test-key\": \"cr-test-value\"},\n\t\t}}\n\t\tupdatedHash := nodeClass.Hash()\n\t\tExpect(hash).To(Equal(updatedHash))\n\t})\n\tIt(\"should expect two EC2NodeClasses with the same spec to have the same hash\", func() {\n\t\totherNodeClass := &v1.EC2NodeClass{\n\t\t\tSpec: nodeClass.Spec,\n\t\t}\n\t\tExpect(nodeClass.Hash()).To(Equal(otherNodeClass.Hash()))\n\t})\n})\n"
  },
  {
    "path": "pkg/apis/v1/ec2nodeclass_status.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage v1\n\nimport (\n\t\"fmt\"\n\t\"time\"\n\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\t\"github.com/awslabs/operatorpkg/serrors\"\n\t\"github.com/awslabs/operatorpkg/status\"\n\t\"github.com/samber/lo\"\n\tcorev1 \"k8s.io/api/core/v1\"\n\tmetav1 \"k8s.io/apimachinery/pkg/apis/meta/v1\"\n\t\"k8s.io/utils/clock\"\n)\n\nvar (\n\tCapacityReservationsEnabled = false\n)\n\nconst (\n\tConditionTypeSubnetsReady              = \"SubnetsReady\"\n\tConditionTypeSecurityGroupsReady       = \"SecurityGroupsReady\"\n\tConditionTypeAMIsReady                 = \"AMIsReady\"\n\tConditionTypeInstanceProfileReady      = \"InstanceProfileReady\"\n\tConditionTypeCapacityReservationsReady = \"CapacityReservationsReady\"\n\tConditionTypeValidationSucceeded       = \"ValidationSucceeded\"\n)\n\n// Subnet contains resolved Subnet selector values utilized for node launch\ntype Subnet struct {\n\t// ID of the subnet\n\t// +required\n\tID string `json:\"id\"`\n\t// The associated availability zone\n\t// +required\n\tZone string `json:\"zone\"`\n\t// The associated availability zone ID\n\t// +optional\n\tZoneID string `json:\"zoneID,omitempty\"`\n}\n\n// SecurityGroup contains resolved SecurityGroup selector values utilized for node launch\ntype SecurityGroup struct {\n\t// ID of the security group\n\t// +required\n\tID string `json:\"id\"`\n\t// Name of the security group\n\t// +optional\n\tName string `json:\"name,omitempty\"`\n}\n\n// AMI contains resolved AMI selector values utilized for node launch\ntype AMI struct {\n\t// ID of the AMI\n\t// +required\n\tID string `json:\"id\"`\n\t// Deprecation status of the AMI\n\t// +optional\n\tDeprecated bool `json:\"deprecated,omitempty\"`\n\t// Name of the AMI\n\t// +optional\n\tName string `json:\"name,omitempty\"`\n\t// Requirements of the AMI to be utilized on an instance type\n\t// +required\n\tRequirements []corev1.NodeSelectorRequirement `json:\"requirements\"`\n}\n\ntype CapacityReservation struct {\n\t// The availability zone the capacity reservation is available in.\n\t// +required\n\tAvailabilityZone string `json:\"availabilityZone\"`\n\t// The time at which the capacity reservation expires. Once expired, the reserved capacity is released and Karpenter\n\t// will no longer be able to launch instances into that reservation.\n\t// +optional\n\tEndTime *metav1.Time `json:\"endTime,omitempty\" hash:\"ignore\"`\n\t// The id for the capacity reservation.\n\t// +kubebuilder:validation:Pattern:=\"^cr-[0-9a-z]+$\"\n\t// +required\n\tID string `json:\"id\"`\n\t// Indicates the type of instance launches the capacity reservation accepts.\n\t// +kubebuilder:validation:Enum:={open,targeted}\n\t// +required\n\tInstanceMatchCriteria string `json:\"instanceMatchCriteria\"`\n\t// The instance type for the capacity reservation.\n\t// +required\n\tInstanceType string `json:\"instanceType\"`\n\t// The ID of the AWS account that owns the capacity reservation.\n\t// +kubebuilder:validation:Pattern:=\"^[0-9]{12}$\"\n\t// +required\n\tOwnerID string `json:\"ownerID\"`\n\t// The type of capacity reservation.\n\t// +kubebuilder:validation:Enum:={default,capacity-block}\n\t// +kubebuilder:default=default\n\t// +optional\n\tReservationType CapacityReservationType `json:\"reservationType\"`\n\t// Indicates whether this capacity reservation is interruptible\n\t// +optional\n\tInterruptible bool `json:\"interruptible\"`\n\t// The state of the capacity reservation. A capacity reservation is considered to be expiring if it is within the EC2\n\t// reclaimation window. Only capacity-block reservations may be in this state.\n\t// +kubebuilder:validation:Enum:={active,expiring}\n\t// +kubebuilder:default=active\n\t// +optional\n\tState CapacityReservationState `json:\"state\"`\n}\n\ntype CapacityReservationType string\n\nconst (\n\tCapacityReservationTypeDefault       CapacityReservationType = \"default\"\n\tCapacityReservationTypeCapacityBlock CapacityReservationType = \"capacity-block\"\n)\n\nfunc (CapacityReservationType) Values() []CapacityReservationType {\n\treturn []CapacityReservationType{\n\t\tCapacityReservationTypeDefault,\n\t\tCapacityReservationTypeCapacityBlock,\n\t}\n}\n\ntype CapacityReservationState string\n\nconst (\n\tCapacityReservationStateActive   CapacityReservationState = \"active\"\n\tCapacityReservationStateExpiring CapacityReservationState = \"expiring\"\n)\n\n// EC2NodeClassStatus contains the resolved state of the EC2NodeClass\ntype EC2NodeClassStatus struct {\n\t// Subnets contains the current subnet values that are available to the\n\t// cluster under the subnet selectors.\n\t// +optional\n\tSubnets []Subnet `json:\"subnets,omitempty\"`\n\t// SecurityGroups contains the current security group values that are available to the\n\t// cluster under the SecurityGroups selectors.\n\t// +optional\n\tSecurityGroups []SecurityGroup `json:\"securityGroups,omitempty\"`\n\t// CapacityReservations contains the current capacity reservation values that are available to this NodeClass under the\n\t// CapacityReservation selectors.\n\t// +optional\n\tCapacityReservations []CapacityReservation `json:\"capacityReservations,omitempty\"`\n\t// AMI contains the current AMI values that are available to the\n\t// cluster under the AMI selectors.\n\t// +optional\n\tAMIs []AMI `json:\"amis,omitempty\"`\n\t// InstanceProfile contains the resolved instance profile for the role\n\t// +optional\n\tInstanceProfile string `json:\"instanceProfile,omitempty\"`\n\t// Conditions contains signals for health and readiness\n\t// +optional\n\tConditions []status.Condition `json:\"conditions,omitempty\"`\n}\n\nfunc (in *EC2NodeClass) StatusConditions() status.ConditionSet {\n\tconds := []string{\n\t\tConditionTypeAMIsReady,\n\t\tConditionTypeSubnetsReady,\n\t\tConditionTypeSecurityGroupsReady,\n\t\tConditionTypeInstanceProfileReady,\n\t\tConditionTypeValidationSucceeded,\n\t}\n\tif CapacityReservationsEnabled {\n\t\tconds = append(conds, ConditionTypeCapacityReservationsReady)\n\t}\n\treturn status.NewReadyConditions(conds...).For(in)\n}\n\nfunc (in *EC2NodeClass) GetConditions() []status.Condition {\n\treturn in.Status.Conditions\n}\n\nfunc (in *EC2NodeClass) SetConditions(conditions []status.Condition) {\n\tin.Status.Conditions = conditions\n}\n\nfunc (in *EC2NodeClass) AMIs() []AMI {\n\treturn in.Status.AMIs\n}\n\nfunc (in *EC2NodeClass) CapacityReservations() []CapacityReservation {\n\treturn in.Status.CapacityReservations\n}\n\ntype ZoneInfo struct {\n\tZone   string\n\tZoneID string\n}\n\nfunc (in *EC2NodeClass) ZoneInfo() []ZoneInfo {\n\treturn lo.Map(in.Status.Subnets, func(_ Subnet, i int) ZoneInfo {\n\t\treturn ZoneInfo{\n\t\t\tZone:   in.Status.Subnets[i].Zone,\n\t\t\tZoneID: in.Status.Subnets[i].ZoneID,\n\t\t}\n\t})\n}\n\nfunc CapacityReservationTypeFromEC2(capacityReservationType ec2types.CapacityReservationType) (CapacityReservationType, error) {\n\tif capacityReservationType == \"\" {\n\t\treturn CapacityReservationTypeDefault, nil\n\t}\n\tresolvedType, ok := lo.Find(CapacityReservationType(\"\").Values(), func(crt CapacityReservationType) bool {\n\t\treturn string(crt) == string(capacityReservationType)\n\t})\n\tif !ok {\n\t\treturn \"\", serrors.Wrap(\n\t\t\tfmt.Errorf(\"received capacity reservation with unsupported reservation type from ec2\"),\n\t\t\t\"reservation-type\", string(capacityReservationType),\n\t\t)\n\t}\n\treturn resolvedType, nil\n}\n\nfunc CapacityReservationFromEC2(clk clock.Clock, cr *ec2types.CapacityReservation) (CapacityReservation, error) {\n\tconst capacityReservationExpirationPeriod = time.Minute * 40\n\t// Guard against new instance match criteria added in the future. See https://github.com/kubernetes-sigs/karpenter/issues/806\n\t// for a similar issue.\n\tif !lo.Contains([]ec2types.InstanceMatchCriteria{\n\t\tec2types.InstanceMatchCriteriaOpen,\n\t\tec2types.InstanceMatchCriteriaTargeted,\n\t}, cr.InstanceMatchCriteria) {\n\t\treturn CapacityReservation{}, serrors.Wrap(\n\t\t\tfmt.Errorf(\"received capacity reservation with unsupported instance match criteria from ec2\"),\n\t\t\t\"capacity-reservation\", *cr.CapacityReservationId,\n\t\t\t\"instance-match-criteria\", cr.InstanceMatchCriteria,\n\t\t)\n\t}\n\treservationType, err := CapacityReservationTypeFromEC2(cr.ReservationType)\n\tif err != nil {\n\t\treturn CapacityReservation{}, serrors.Wrap(err, \"capacity-reservation\", *cr.CapacityReservationId)\n\t}\n\tvar endTime *metav1.Time\n\tif cr.EndDate != nil {\n\t\tendTime = lo.ToPtr(metav1.NewTime(*cr.EndDate))\n\t}\n\tvar state CapacityReservationState\n\tif reservationType != CapacityReservationTypeCapacityBlock || endTime == nil || clk.Now().Before(endTime.Add(-capacityReservationExpirationPeriod)) {\n\t\tstate = CapacityReservationStateActive\n\t} else {\n\t\tstate = CapacityReservationStateExpiring\n\t}\n\treturn CapacityReservation{\n\t\tAvailabilityZone:      *cr.AvailabilityZone,\n\t\tEndTime:               endTime,\n\t\tID:                    *cr.CapacityReservationId,\n\t\tInstanceMatchCriteria: string(cr.InstanceMatchCriteria),\n\t\tInstanceType:          *cr.InstanceType,\n\t\tOwnerID:               *cr.OwnerId,\n\t\tReservationType:       reservationType,\n\t\tInterruptible:         lo.Ternary(cr.Interruptible == nil, false, *cr.Interruptible),\n\t\tState:                 state,\n\t}, nil\n}\n"
  },
  {
    "path": "pkg/apis/v1/ec2nodeclass_validation_cel_test.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage v1_test\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/imdario/mergo\"\n\t\"github.com/samber/lo\"\n\tcorev1 \"k8s.io/api/core/v1\"\n\t\"k8s.io/apimachinery/pkg/api/resource\"\n\tmetav1 \"k8s.io/apimachinery/pkg/apis/meta/v1\"\n\tkarpv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n\t\"sigs.k8s.io/karpenter/pkg/test\"\n\n\t\"github.com/aws/aws-sdk-go-v2/aws\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n)\n\nvar _ = Describe(\"CEL/Validation\", func() {\n\tvar nc *v1.EC2NodeClass\n\n\tBeforeEach(func() {\n\t\tnc = &v1.EC2NodeClass{\n\t\t\tObjectMeta: test.ObjectMeta(metav1.ObjectMeta{}),\n\t\t\tSpec: v1.EC2NodeClassSpec{\n\t\t\t\tAMIFamily:        &v1.AMIFamilyAL2023,\n\t\t\t\tAMISelectorTerms: []v1.AMISelectorTerm{{Alias: \"al2023@latest\"}},\n\t\t\t\tRole:             \"role-1\",\n\t\t\t\tSecurityGroupSelectorTerms: []v1.SecurityGroupSelectorTerm{\n\t\t\t\t\t{\n\t\t\t\t\t\tTags: map[string]string{\n\t\t\t\t\t\t\t\"*\": \"*\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tSubnetSelectorTerms: []v1.SubnetSelectorTerm{\n\t\t\t\t\t{\n\t\t\t\t\t\tTags: map[string]string{\n\t\t\t\t\t\t\t\"*\": \"*\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}\n\t})\n\tIt(\"should succeed if just specifying role\", func() {\n\t\tExpect(env.Client.Create(ctx, nc)).To(Succeed())\n\t})\n\tIt(\"should succeed if just specifying instance profile\", func() {\n\t\tnc.Spec.InstanceProfile = lo.ToPtr(\"test-instance-profile\")\n\t\tnc.Spec.Role = \"\"\n\t\tExpect(env.Client.Create(ctx, nc)).To(Succeed())\n\t})\n\tIt(\"should fail if specifying both instance profile and role\", func() {\n\t\tnc.Spec.InstanceProfile = lo.ToPtr(\"test-instance-profile\")\n\t\tExpect(env.Client.Create(ctx, nc)).ToNot(Succeed())\n\t})\n\tIt(\"should fail if not specifying one of instance profile and role\", func() {\n\t\tnc.Spec.Role = \"\"\n\t\tExpect(env.Client.Create(ctx, nc)).ToNot(Succeed())\n\t})\n\tContext(\"UserData\", func() {\n\t\tIt(\"should succeed if user data is empty\", func() {\n\t\t\tExpect(env.Client.Create(ctx, nc)).To(Succeed())\n\t\t})\n\t})\n\tContext(\"AMIFamily\", func() {\n\t\tamiFamilies := []string{v1.AMIFamilyAL2, v1.AMIFamilyAL2023, v1.AMIFamilyBottlerocket, v1.AMIFamilyWindows2019, v1.AMIFamilyWindows2022, v1.AMIFamilyWindows2025, v1.AMIFamilyCustom}\n\t\tDescribeTable(\"should succeed with valid families\", func() []interface{} {\n\t\t\tf := func(amiFamily string) {\n\t\t\t\t// Set a custom AMI family so it's compatible with all ami family types\n\t\t\t\tnc.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{ID: \"ami-0123456789abcdef\"}}\n\t\t\t\tnc.Spec.AMIFamily = lo.ToPtr(amiFamily)\n\t\t\t\tExpect(env.Client.Create(ctx, nc)).To(Succeed())\n\t\t\t}\n\t\t\tentries := lo.Map(amiFamilies, func(family string, _ int) any {\n\t\t\t\treturn Entry(family, family)\n\t\t\t})\n\t\t\treturn append([]any{f}, entries...)\n\t\t}()...)\n\t\tIt(\"should fail with the ubuntu family\", func() {\n\t\t\t// Set a custom AMI family so it's compatible with all ami family types\n\t\t\tnc.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{ID: \"ami-0123456789abcdef\"}}\n\t\t\tnc.Spec.AMIFamily = lo.ToPtr(v1.AMIFamilyUbuntu)\n\t\t\tExpect(env.Client.Create(ctx, nc)).ToNot(Succeed())\n\t\t})\n\t\tDescribeTable(\"should succeed when the amiFamily matches amiSelectorTerms[].alias\", func() []any {\n\t\t\tf := func(amiFamily, alias string) {\n\t\t\t\tnc.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{Alias: alias}}\n\t\t\t\tnc.Spec.AMIFamily = lo.ToPtr(amiFamily)\n\t\t\t\tExpect(env.Client.Create(ctx, nc)).To(Succeed())\n\t\t\t}\n\t\t\tentries := lo.FilterMap(amiFamilies, func(family string, _ int) (any, bool) {\n\t\t\t\tif family == v1.AMIFamilyCustom {\n\t\t\t\t\treturn nil, false\n\t\t\t\t}\n\t\t\t\talias := fmt.Sprintf(\"%s@latest\", strings.ToLower(family))\n\t\t\t\treturn Entry(\n\t\t\t\t\tfmt.Sprintf(\"family %q with alias %q\", family, alias),\n\t\t\t\t\tfamily,\n\t\t\t\t\talias,\n\t\t\t\t), true\n\t\t\t})\n\t\t\treturn append([]any{f}, entries...)\n\t\t}()...)\n\t\tDescribeTable(\"should succeed when the amiFamily is custom with amiSelectorTerms[].alias\", func() []any {\n\t\t\tf := func(alias string) {\n\t\t\t\tnc.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{Alias: alias}}\n\t\t\t\tnc.Spec.AMIFamily = lo.ToPtr(v1.AMIFamilyCustom)\n\t\t\t\tExpect(env.Client.Create(ctx, nc)).To(Succeed())\n\t\t\t}\n\t\t\tentries := lo.FilterMap(amiFamilies, func(family string, _ int) (any, bool) {\n\t\t\t\tif family == v1.AMIFamilyCustom {\n\t\t\t\t\treturn nil, false\n\t\t\t\t}\n\t\t\t\talias := fmt.Sprintf(\"%s@latest\", strings.ToLower(family))\n\t\t\t\treturn Entry(\n\t\t\t\t\tfmt.Sprintf(`family \"Custom\" with alias %q`, alias),\n\t\t\t\t\talias,\n\t\t\t\t), true\n\t\t\t})\n\t\t\treturn append([]any{f}, entries...)\n\t\t}()...)\n\t\tDescribeTable(\"should fail when then amiFamily does not match amiSelectorTerms[].alias\", func() []any {\n\t\t\tf := func(amiFamily, alias string) {\n\t\t\t\tnc.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{Alias: alias}}\n\t\t\t\tnc.Spec.AMIFamily = lo.ToPtr(amiFamily)\n\t\t\t\tExpect(env.Client.Create(ctx, nc)).ToNot(Succeed())\n\t\t\t}\n\t\t\tentries := []any{}\n\t\t\tfamilies := lo.Reject(amiFamilies, func(family string, _ int) bool {\n\t\t\t\treturn family == v1.AMIFamilyCustom\n\t\t\t})\n\t\t\tfor i := range families {\n\t\t\t\tfor j := range families {\n\t\t\t\t\tif i == j {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\talias := fmt.Sprintf(\"%s@latest\", strings.ToLower(families[j]))\n\t\t\t\t\tentries = append(entries, Entry(\n\t\t\t\t\t\tfmt.Sprintf(\"family %q with alias %q\", families[i], alias),\n\t\t\t\t\t\tfamilies[i],\n\t\t\t\t\t\talias,\n\t\t\t\t\t))\n\t\t\t\t}\n\n\t\t\t}\n\t\t\treturn append([]any{f}, entries...)\n\t\t}()...)\n\t\tIt(\"should fail when neither amiFamily nor an alias are specified\", func() {\n\t\t\tnc.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{ID: \"ami-01234567890abcdef\"}}\n\t\t\tnc.Spec.AMIFamily = nil\n\t\t\tExpect(env.Client.Create(ctx, nc)).ToNot(Succeed())\n\t\t})\n\t})\n\tContext(\"Tags\", func() {\n\t\tIt(\"should succeed when tags are empty\", func() {\n\t\t\tnc.Spec.Tags = map[string]string{}\n\t\t\tExpect(env.Client.Create(ctx, nc)).To(Succeed())\n\t\t})\n\t\tIt(\"should succeed if tags aren't in restricted tag keys\", func() {\n\t\t\tnc.Spec.Tags = map[string]string{\n\t\t\t\t\"karpenter.sh/custom-key\": \"value\",\n\t\t\t\t\"karpenter.sh/managed\":    \"true\",\n\t\t\t\t\"kubernetes.io/role/key\":  \"value\",\n\t\t\t}\n\t\t\tExpect(env.Client.Create(ctx, nc)).To(Succeed())\n\t\t})\n\t\tIt(\"should fail if tags contain a restricted domain key\", func() {\n\t\t\tnc.Spec.Tags = map[string]string{\n\t\t\t\tkarpv1.NodePoolLabelKey: \"value\",\n\t\t\t}\n\t\t\tExpect(env.Client.Create(ctx, nc)).To(Not(Succeed()))\n\t\t\tnc.Spec.Tags = map[string]string{\n\t\t\t\t\"kubernetes.io/cluster/test\": \"value\",\n\t\t\t}\n\t\t\tExpect(env.Client.Create(ctx, nc)).To(Not(Succeed()))\n\t\t\tnc.Spec.Tags = map[string]string{\n\t\t\t\tv1.EKSClusterNameTagKey: \"test\",\n\t\t\t}\n\t\t\tExpect(env.Client.Create(ctx, nc)).To(Not(Succeed()))\n\t\t\tnc.Spec.Tags = map[string]string{\n\t\t\t\tv1.LabelNodeClass: \"test\",\n\t\t\t}\n\t\t\tExpect(env.Client.Create(ctx, nc)).To(Not(Succeed()))\n\t\t\tnc.Spec.Tags = map[string]string{\n\t\t\t\t\"karpenter.sh/nodeclaim\": \"test\",\n\t\t\t}\n\t\t\tExpect(env.Client.Create(ctx, nc)).To(Not(Succeed()))\n\t\t})\n\t})\n\tContext(\"SubnetSelectorTerms\", func() {\n\t\tIt(\"should succeed with a valid subnet selector on tags\", func() {\n\t\t\tnc.Spec.SubnetSelectorTerms = []v1.SubnetSelectorTerm{\n\t\t\t\t{\n\t\t\t\t\tTags: map[string]string{\n\t\t\t\t\t\t\"test\": \"testvalue\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}\n\t\t\tExpect(env.Client.Create(ctx, nc)).To(Succeed())\n\t\t})\n\t\tIt(\"should succeed with a valid subnet selector on id\", func() {\n\t\t\tnc.Spec.SubnetSelectorTerms = []v1.SubnetSelectorTerm{\n\t\t\t\t{\n\t\t\t\t\tID: \"subnet-12345749\",\n\t\t\t\t},\n\t\t\t}\n\t\t\tExpect(env.Client.Create(ctx, nc)).To(Succeed())\n\t\t})\n\t\tIt(\"should fail when subnet selector terms is set to nil\", func() {\n\t\t\tnc.Spec.SubnetSelectorTerms = nil\n\t\t\tExpect(env.Client.Create(ctx, nc)).ToNot(Succeed())\n\t\t})\n\t\tIt(\"should fail when no subnet selector terms exist\", func() {\n\t\t\tnc.Spec.SubnetSelectorTerms = []v1.SubnetSelectorTerm{}\n\t\t\tExpect(env.Client.Create(ctx, nc)).ToNot(Succeed())\n\t\t})\n\t\tIt(\"should fail when a subnet selector term has no values\", func() {\n\t\t\tnc.Spec.SubnetSelectorTerms = []v1.SubnetSelectorTerm{\n\t\t\t\t{},\n\t\t\t}\n\t\t\tExpect(env.Client.Create(ctx, nc)).ToNot(Succeed())\n\t\t})\n\t\tIt(\"should fail when a subnet selector term has no tag map values\", func() {\n\t\t\tnc.Spec.SubnetSelectorTerms = []v1.SubnetSelectorTerm{\n\t\t\t\t{\n\t\t\t\t\tTags: map[string]string{},\n\t\t\t\t},\n\t\t\t}\n\t\t\tExpect(env.Client.Create(ctx, nc)).ToNot(Succeed())\n\t\t})\n\t\tIt(\"should fail when a subnet selector term has a tag map key that is empty\", func() {\n\t\t\tnc.Spec.SubnetSelectorTerms = []v1.SubnetSelectorTerm{\n\t\t\t\t{\n\t\t\t\t\tTags: map[string]string{\n\t\t\t\t\t\t\"test\": \"\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}\n\t\t\tExpect(env.Client.Create(ctx, nc)).ToNot(Succeed())\n\t\t})\n\t\tIt(\"should fail when a subnet selector term has a tag map value that is empty\", func() {\n\t\t\tnc.Spec.SubnetSelectorTerms = []v1.SubnetSelectorTerm{\n\t\t\t\t{\n\t\t\t\t\tTags: map[string]string{\n\t\t\t\t\t\t\"\": \"testvalue\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}\n\t\t\tExpect(env.Client.Create(ctx, nc)).ToNot(Succeed())\n\t\t})\n\t\tIt(\"should fail when the last subnet selector is invalid\", func() {\n\t\t\tnc.Spec.SubnetSelectorTerms = []v1.SubnetSelectorTerm{\n\t\t\t\t{\n\t\t\t\t\tTags: map[string]string{\n\t\t\t\t\t\t\"test\": \"testvalue\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tTags: map[string]string{\n\t\t\t\t\t\t\"test2\": \"testvalue2\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tTags: map[string]string{\n\t\t\t\t\t\t\"test3\": \"testvalue3\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tTags: map[string]string{\n\t\t\t\t\t\t\"\": \"testvalue4\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}\n\t\t\tExpect(env.Client.Create(ctx, nc)).ToNot(Succeed())\n\t\t})\n\t\tIt(\"should fail when specifying id with tags\", func() {\n\t\t\tnc.Spec.SubnetSelectorTerms = []v1.SubnetSelectorTerm{\n\t\t\t\t{\n\t\t\t\t\tID: \"subnet-12345749\",\n\t\t\t\t\tTags: map[string]string{\n\t\t\t\t\t\t\"test\": \"testvalue\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}\n\t\t\tExpect(env.Client.Create(ctx, nc)).ToNot(Succeed())\n\t\t})\n\t})\n\tContext(\"SecurityGroupSelectorTerms\", func() {\n\t\tIt(\"should succeed with a valid security group selector on tags\", func() {\n\t\t\tnc.Spec.SecurityGroupSelectorTerms = []v1.SecurityGroupSelectorTerm{\n\t\t\t\t{\n\t\t\t\t\tTags: map[string]string{\n\t\t\t\t\t\t\"test\": \"testvalue\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}\n\t\t\tExpect(env.Client.Create(ctx, nc)).To(Succeed())\n\t\t})\n\t\tIt(\"should succeed with a valid security group selector on id\", func() {\n\t\t\tnc.Spec.SecurityGroupSelectorTerms = []v1.SecurityGroupSelectorTerm{\n\t\t\t\t{\n\t\t\t\t\tID: \"sg-12345749\",\n\t\t\t\t},\n\t\t\t}\n\t\t\tExpect(env.Client.Create(ctx, nc)).To(Succeed())\n\t\t})\n\t\tIt(\"should succeed with a valid security group selector on name\", func() {\n\t\t\tnc.Spec.SecurityGroupSelectorTerms = []v1.SecurityGroupSelectorTerm{\n\t\t\t\t{\n\t\t\t\t\tName: \"testname\",\n\t\t\t\t},\n\t\t\t}\n\t\t\tExpect(env.Client.Create(ctx, nc)).To(Succeed())\n\t\t})\n\t\tIt(\"should fail when security group selector terms is set to nil\", func() {\n\t\t\tnc.Spec.SecurityGroupSelectorTerms = nil\n\t\t\tExpect(env.Client.Create(ctx, nc)).ToNot(Succeed())\n\t\t})\n\t\tIt(\"should fail when no security group selector terms exist\", func() {\n\t\t\tnc.Spec.SecurityGroupSelectorTerms = []v1.SecurityGroupSelectorTerm{}\n\t\t\tExpect(env.Client.Create(ctx, nc)).ToNot(Succeed())\n\t\t})\n\t\tIt(\"should fail when a security group selector term has no values\", func() {\n\t\t\tnc.Spec.SecurityGroupSelectorTerms = []v1.SecurityGroupSelectorTerm{\n\t\t\t\t{},\n\t\t\t}\n\t\t\tExpect(env.Client.Create(ctx, nc)).ToNot(Succeed())\n\t\t})\n\t\tIt(\"should fail when a security group selector term has no tag map values\", func() {\n\t\t\tnc.Spec.SecurityGroupSelectorTerms = []v1.SecurityGroupSelectorTerm{\n\t\t\t\t{\n\t\t\t\t\tTags: map[string]string{},\n\t\t\t\t},\n\t\t\t}\n\t\t\tExpect(env.Client.Create(ctx, nc)).ToNot(Succeed())\n\t\t})\n\t\tIt(\"should fail when a security group selector term has a tag map key that is empty\", func() {\n\t\t\tnc.Spec.SecurityGroupSelectorTerms = []v1.SecurityGroupSelectorTerm{\n\t\t\t\t{\n\t\t\t\t\tTags: map[string]string{\n\t\t\t\t\t\t\"test\": \"\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}\n\t\t\tExpect(env.Client.Create(ctx, nc)).ToNot(Succeed())\n\t\t})\n\t\tIt(\"should fail when a security group selector term has a tag map value that is empty\", func() {\n\t\t\tnc.Spec.SecurityGroupSelectorTerms = []v1.SecurityGroupSelectorTerm{\n\t\t\t\t{\n\t\t\t\t\tTags: map[string]string{\n\t\t\t\t\t\t\"\": \"testvalue\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}\n\t\t\tExpect(env.Client.Create(ctx, nc)).ToNot(Succeed())\n\t\t})\n\t\tIt(\"should fail when the last security group selector is invalid\", func() {\n\t\t\tnc.Spec.SecurityGroupSelectorTerms = []v1.SecurityGroupSelectorTerm{\n\t\t\t\t{\n\t\t\t\t\tTags: map[string]string{\n\t\t\t\t\t\t\"test\": \"testvalue\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tTags: map[string]string{\n\t\t\t\t\t\t\"test2\": \"testvalue2\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tTags: map[string]string{\n\t\t\t\t\t\t\"test3\": \"testvalue3\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tTags: map[string]string{\n\t\t\t\t\t\t\"\": \"testvalue4\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}\n\t\t\tExpect(env.Client.Create(ctx, nc)).ToNot(Succeed())\n\t\t})\n\t\tIt(\"should fail when specifying id with tags\", func() {\n\t\t\tnc.Spec.SecurityGroupSelectorTerms = []v1.SecurityGroupSelectorTerm{\n\t\t\t\t{\n\t\t\t\t\tID: \"sg-12345749\",\n\t\t\t\t\tTags: map[string]string{\n\t\t\t\t\t\t\"test\": \"testvalue\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}\n\t\t\tExpect(env.Client.Create(ctx, nc)).ToNot(Succeed())\n\t\t})\n\t\tIt(\"should fail when specifying id with name\", func() {\n\t\t\tnc.Spec.SecurityGroupSelectorTerms = []v1.SecurityGroupSelectorTerm{\n\t\t\t\t{\n\t\t\t\t\tID:   \"sg-12345749\",\n\t\t\t\t\tName: \"my-security-group\",\n\t\t\t\t},\n\t\t\t}\n\t\t\tExpect(env.Client.Create(ctx, nc)).ToNot(Succeed())\n\t\t})\n\t\tIt(\"should fail when specifying name with tags\", func() {\n\t\t\tnc.Spec.SecurityGroupSelectorTerms = []v1.SecurityGroupSelectorTerm{\n\t\t\t\t{\n\t\t\t\t\tName: \"my-security-group\",\n\t\t\t\t\tTags: map[string]string{\n\t\t\t\t\t\t\"test\": \"testvalue\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}\n\t\t\tExpect(env.Client.Create(ctx, nc)).ToNot(Succeed())\n\t\t})\n\t})\n\tContext(\"CapacityReservationSelectorTerms\", func() {\n\t\tIt(\"should succeed with a valid capacity reservation selector on tags\", func() {\n\t\t\tnc.Spec.CapacityReservationSelectorTerms = []v1.CapacityReservationSelectorTerm{{\n\t\t\t\tTags: map[string]string{\n\t\t\t\t\t\"test\": \"testvalue\",\n\t\t\t\t},\n\t\t\t}}\n\t\t\tExpect(env.Client.Create(ctx, nc)).To(Succeed())\n\t\t})\n\t\tIt(\"should succeed with a valid capacity reservation selector on id\", func() {\n\t\t\tnc.Spec.CapacityReservationSelectorTerms = []v1.CapacityReservationSelectorTerm{{\n\t\t\t\tID: \"cr-12345749\",\n\t\t\t}}\n\t\t\tExpect(env.Client.Create(ctx, nc)).To(Succeed())\n\t\t})\n\t\tIt(\"should succeed for a valid ownerID\", func() {\n\t\t\tnc.Spec.CapacityReservationSelectorTerms = []v1.CapacityReservationSelectorTerm{{\n\t\t\t\tOwnerID: \"012345678901\",\n\t\t\t\tTags: map[string]string{\n\t\t\t\t\t\"test\": \"testvalue\",\n\t\t\t\t},\n\t\t\t}}\n\t\t\tExpect(env.Client.Create(ctx, nc)).To(Succeed())\n\t\t})\n\t\tIt(\"should fail with a capacity reservation selector on a malformed id\", func() {\n\t\t\tnc.Spec.CapacityReservationSelectorTerms = []v1.CapacityReservationSelectorTerm{{\n\t\t\t\tID: \"r-12345749\",\n\t\t\t}}\n\t\t\tExpect(env.Client.Create(ctx, nc)).ToNot(Succeed())\n\t\t})\n\t\tIt(\"should succeed when capacity group selector terms is set to nil\", func() {\n\t\t\tnc.Spec.CapacityReservationSelectorTerms = nil\n\t\t\tExpect(env.Client.Create(ctx, nc)).To(Succeed())\n\t\t})\n\t\tIt(\"should fail when a capacity reservation selector term has no values\", func() {\n\t\t\tnc.Spec.CapacityReservationSelectorTerms = []v1.CapacityReservationSelectorTerm{{}}\n\t\t\tExpect(env.Client.Create(ctx, nc)).ToNot(Succeed())\n\t\t})\n\t\tIt(\"should fail when a capacity reservation selector term has no tag map values\", func() {\n\t\t\tnc.Spec.CapacityReservationSelectorTerms = []v1.CapacityReservationSelectorTerm{{\n\t\t\t\tTags: map[string]string{},\n\t\t\t}}\n\t\t\tExpect(env.Client.Create(ctx, nc)).ToNot(Succeed())\n\t\t})\n\t\tIt(\"should fail when a capacity reservation selector term has a tag map key that is empty\", func() {\n\t\t\tnc.Spec.CapacityReservationSelectorTerms = []v1.CapacityReservationSelectorTerm{{\n\t\t\t\tTags: map[string]string{\n\t\t\t\t\t\"test\": \"\",\n\t\t\t\t},\n\t\t\t}}\n\t\t\tExpect(env.Client.Create(ctx, nc)).ToNot(Succeed())\n\t\t})\n\t\tIt(\"should fail when a capacity reservation selector term has a tag map value that is empty\", func() {\n\t\t\tnc.Spec.CapacityReservationSelectorTerms = []v1.CapacityReservationSelectorTerm{{\n\t\t\t\tTags: map[string]string{\n\t\t\t\t\t\"\": \"testvalue\",\n\t\t\t\t},\n\t\t\t}}\n\t\t\tExpect(env.Client.Create(ctx, nc)).ToNot(Succeed())\n\t\t})\n\t\tIt(\"should fail when the last capacity reservation selector is invalid\", func() {\n\t\t\tnc.Spec.CapacityReservationSelectorTerms = []v1.CapacityReservationSelectorTerm{\n\t\t\t\t{\n\t\t\t\t\tTags: map[string]string{\n\t\t\t\t\t\t\"test\": \"testvalue\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tTags: map[string]string{\n\t\t\t\t\t\t\"test2\": \"testvalue2\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tTags: map[string]string{\n\t\t\t\t\t\t\"test3\": \"testvalue3\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tTags: map[string]string{\n\t\t\t\t\t\t\"\": \"testvalue4\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}\n\t\t\tExpect(env.Client.Create(ctx, nc)).ToNot(Succeed())\n\t\t})\n\t\tIt(\"should fail when specifying id with tags in a single term\", func() {\n\t\t\tnc.Spec.CapacityReservationSelectorTerms = []v1.CapacityReservationSelectorTerm{{\n\t\t\t\tID: \"cr-12345749\",\n\t\t\t\tTags: map[string]string{\n\t\t\t\t\t\"test\": \"testvalue\",\n\t\t\t\t},\n\t\t\t}}\n\t\t\tExpect(env.Client.Create(ctx, nc)).ToNot(Succeed())\n\t\t})\n\t\tIt(\"should fail when specifying id with ownerID in a single term\", func() {\n\t\t\tnc.Spec.CapacityReservationSelectorTerms = []v1.CapacityReservationSelectorTerm{{\n\t\t\t\tOwnerID: \"012345678901\",\n\t\t\t\tID:      \"cr-12345749\",\n\t\t\t}}\n\t\t\tExpect(env.Client.Create(ctx, nc)).ToNot(Succeed())\n\t\t})\n\t\tIt(\"should fail when the ownerID is malformed\", func() {\n\t\t\tnc.Spec.CapacityReservationSelectorTerms = []v1.CapacityReservationSelectorTerm{{\n\t\t\t\tOwnerID: \"01234567890\", // OwnerID must be 12 digits, this is 11\n\t\t\t\tTags: map[string]string{\n\t\t\t\t\t\"test\": \"testvalue\",\n\t\t\t\t},\n\t\t\t}}\n\t\t\tExpect(env.Client.Create(ctx, nc)).ToNot(Succeed())\n\t\t})\n\t\tIt(\"should fail when the ownerID is set by itself\", func() {\n\t\t\tnc.Spec.CapacityReservationSelectorTerms = []v1.CapacityReservationSelectorTerm{{\n\t\t\t\tOwnerID: \"012345678901\",\n\t\t\t}}\n\t\t\tExpect(env.Client.Create(ctx, nc)).ToNot(Succeed())\n\t\t})\n\t\tIt(\"should succeed with a valid instanceMatchCriteria 'open'\", func() {\n\t\t\tnc.Spec.CapacityReservationSelectorTerms = []v1.CapacityReservationSelectorTerm{{\n\t\t\t\tInstanceMatchCriteria: \"open\",\n\t\t\t}}\n\t\t\tExpect(env.Client.Create(ctx, nc)).To(Succeed())\n\t\t})\n\t\tIt(\"should succeed with a valid instanceMatchCriteria 'targeted'\", func() {\n\t\t\tnc.Spec.CapacityReservationSelectorTerms = []v1.CapacityReservationSelectorTerm{{\n\t\t\t\tInstanceMatchCriteria: \"targeted\",\n\t\t\t}}\n\t\t\tExpect(env.Client.Create(ctx, nc)).To(Succeed())\n\t\t})\n\t\tIt(\"should succeed with instanceMatchCriteria combined with tags\", func() {\n\t\t\tnc.Spec.CapacityReservationSelectorTerms = []v1.CapacityReservationSelectorTerm{{\n\t\t\t\tInstanceMatchCriteria: \"open\",\n\t\t\t\tTags: map[string]string{\n\t\t\t\t\t\"test\": \"testvalue\",\n\t\t\t\t},\n\t\t\t}}\n\t\t\tExpect(env.Client.Create(ctx, nc)).To(Succeed())\n\t\t})\n\t\tIt(\"should succeed with instanceMatchCriteria combined with ownerID and tags\", func() {\n\t\t\tnc.Spec.CapacityReservationSelectorTerms = []v1.CapacityReservationSelectorTerm{{\n\t\t\t\tInstanceMatchCriteria: \"targeted\",\n\t\t\t\tOwnerID:               \"012345678901\",\n\t\t\t\tTags: map[string]string{\n\t\t\t\t\t\"test\": \"testvalue\",\n\t\t\t\t},\n\t\t\t}}\n\t\t\tExpect(env.Client.Create(ctx, nc)).To(Succeed())\n\t\t})\n\t\tIt(\"should fail with invalid instanceMatchCriteria value\", func() {\n\t\t\tnc.Spec.CapacityReservationSelectorTerms = []v1.CapacityReservationSelectorTerm{{\n\t\t\t\tInstanceMatchCriteria: \"invalid\",\n\t\t\t}}\n\t\t\tExpect(env.Client.Create(ctx, nc)).ToNot(Succeed())\n\t\t})\n\t\tIt(\"should fail when specifying id with instanceMatchCriteria\", func() {\n\t\t\tnc.Spec.CapacityReservationSelectorTerms = []v1.CapacityReservationSelectorTerm{{\n\t\t\t\tID:                    \"cr-12345749\",\n\t\t\t\tInstanceMatchCriteria: \"open\",\n\t\t\t}}\n\t\t\tExpect(env.Client.Create(ctx, nc)).ToNot(Succeed())\n\t\t})\n\t})\n\tContext(\"AMISelectorTerms\", func() {\n\t\tIt(\"should succeed with a valid ami selector on alias\", func() {\n\t\t\tnc.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{\n\t\t\t\tAlias: \"al2023@latest\",\n\t\t\t}}\n\t\t\tExpect(env.Client.Create(ctx, nc)).To(Succeed())\n\t\t})\n\t\tIt(\"should succeed with a valid ami selector on tags\", func() {\n\t\t\tnc.Spec.AMISelectorTerms = []v1.AMISelectorTerm{\n\t\t\t\t{\n\t\t\t\t\tTags: map[string]string{\n\t\t\t\t\t\t\"test\": \"testvalue\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}\n\t\t\tExpect(env.Client.Create(ctx, nc)).To(Succeed())\n\t\t})\n\t\tIt(\"should succeed with a valid ami selector on id\", func() {\n\t\t\tnc.Spec.AMISelectorTerms = []v1.AMISelectorTerm{\n\t\t\t\t{\n\t\t\t\t\tID: \"ami-12345749\",\n\t\t\t\t},\n\t\t\t}\n\t\t\tExpect(env.Client.Create(ctx, nc)).To(Succeed())\n\t\t})\n\t\tIt(\"should succeed with a valid ami selector on name\", func() {\n\t\t\tnc.Spec.AMISelectorTerms = []v1.AMISelectorTerm{\n\t\t\t\t{\n\t\t\t\t\tName: \"testname\",\n\t\t\t\t},\n\t\t\t}\n\t\t\tExpect(env.Client.Create(ctx, nc)).To(Succeed())\n\t\t})\n\t\tIt(\"should succeed with a valid ami selector on name and owner\", func() {\n\t\t\tnc.Spec.AMISelectorTerms = []v1.AMISelectorTerm{\n\t\t\t\t{\n\t\t\t\t\tName:  \"testname\",\n\t\t\t\t\tOwner: \"testowner\",\n\t\t\t\t},\n\t\t\t}\n\t\t\tExpect(env.Client.Create(ctx, nc)).To(Succeed())\n\t\t})\n\t\tIt(\"should succeed when an ami selector term has an owner key with tags\", func() {\n\t\t\tnc.Spec.AMISelectorTerms = []v1.AMISelectorTerm{\n\t\t\t\t{\n\t\t\t\t\tOwner: \"testowner\",\n\t\t\t\t\tTags: map[string]string{\n\t\t\t\t\t\t\"test\": \"testvalue\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}\n\t\t\tExpect(env.Client.Create(ctx, nc)).To(Succeed())\n\t\t})\n\t\tIt(\"should fail when a ami selector term has no values\", func() {\n\t\t\tnc.Spec.AMISelectorTerms = []v1.AMISelectorTerm{\n\t\t\t\t{},\n\t\t\t}\n\t\t\tExpect(env.Client.Create(ctx, nc)).ToNot(Succeed())\n\t\t})\n\t\tIt(\"should fail when a ami selector term has no tag map values\", func() {\n\t\t\tnc.Spec.AMISelectorTerms = []v1.AMISelectorTerm{\n\t\t\t\t{\n\t\t\t\t\tTags: map[string]string{},\n\t\t\t\t},\n\t\t\t}\n\t\t\tExpect(env.Client.Create(ctx, nc)).ToNot(Succeed())\n\t\t})\n\t\tIt(\"should fail when a ami selector term has a tag map key that is empty\", func() {\n\t\t\tnc.Spec.AMISelectorTerms = []v1.AMISelectorTerm{\n\t\t\t\t{\n\t\t\t\t\tTags: map[string]string{\n\t\t\t\t\t\t\"test\": \"\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}\n\t\t\tExpect(env.Client.Create(ctx, nc)).ToNot(Succeed())\n\t\t})\n\t\tIt(\"should fail when a ami selector term has a tag map value that is empty\", func() {\n\t\t\tnc.Spec.AMISelectorTerms = []v1.AMISelectorTerm{\n\t\t\t\t{\n\t\t\t\t\tTags: map[string]string{\n\t\t\t\t\t\t\"\": \"testvalue\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}\n\t\t\tExpect(env.Client.Create(ctx, nc)).ToNot(Succeed())\n\t\t})\n\t\tIt(\"should fail when the last ami selector is invalid\", func() {\n\t\t\tnc.Spec.AMISelectorTerms = []v1.AMISelectorTerm{\n\t\t\t\t{\n\t\t\t\t\tTags: map[string]string{\n\t\t\t\t\t\t\"test\": \"testvalue\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tTags: map[string]string{\n\t\t\t\t\t\t\"test2\": \"testvalue2\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tTags: map[string]string{\n\t\t\t\t\t\t\"test3\": \"testvalue3\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tTags: map[string]string{\n\t\t\t\t\t\t\"\": \"testvalue4\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}\n\t\t\tExpect(env.Client.Create(ctx, nc)).ToNot(Succeed())\n\t\t})\n\t\tDescribeTable(\n\t\t\t\"should fail when specifying id with other fields\",\n\t\t\tfunc(mutation v1.AMISelectorTerm) {\n\t\t\t\tterm := v1.AMISelectorTerm{ID: \"ami-1234749\"}\n\t\t\t\tExpect(mergo.Merge(&term, &mutation)).To(Succeed())\n\t\t\t\tnc.Spec.AMISelectorTerms = []v1.AMISelectorTerm{term}\n\t\t\t\tExpect(env.Client.Create(ctx, nc)).ToNot(Succeed())\n\t\t\t},\n\t\t\tEntry(\"alias\", v1.AMISelectorTerm{Alias: \"al2023@latest\"}),\n\t\t\tEntry(\"tags\", v1.AMISelectorTerm{\n\t\t\t\tTags: map[string]string{\"test\": \"testvalue\"},\n\t\t\t}),\n\t\t\tEntry(\"name\", v1.AMISelectorTerm{Name: \"my-custom-ami\"}),\n\t\t\tEntry(\"owner\", v1.AMISelectorTerm{Owner: \"123456789\"}),\n\t\t)\n\t\tDescribeTable(\n\t\t\t\"should fail when specifying alias with other fields\",\n\t\t\tfunc(mutation v1.AMISelectorTerm) {\n\t\t\t\tterm := v1.AMISelectorTerm{Alias: \"al2023@latest\"}\n\t\t\t\tExpect(mergo.Merge(&term, &mutation)).To(Succeed())\n\t\t\t\tnc.Spec.AMISelectorTerms = []v1.AMISelectorTerm{term}\n\t\t\t\tExpect(env.Client.Create(ctx, nc)).ToNot(Succeed())\n\t\t\t},\n\t\t\tEntry(\"id\", v1.AMISelectorTerm{ID: \"ami-1234749\"}),\n\t\t\tEntry(\"tags\", v1.AMISelectorTerm{\n\t\t\t\tTags: map[string]string{\"test\": \"testvalue\"},\n\t\t\t}),\n\t\t\tEntry(\"name\", v1.AMISelectorTerm{Name: \"my-custom-ami\"}),\n\t\t\tEntry(\"owner\", v1.AMISelectorTerm{Owner: \"123456789\"}),\n\t\t)\n\t\tIt(\"should fail when specifying alias with other terms\", func() {\n\t\t\tnc.Spec.AMISelectorTerms = []v1.AMISelectorTerm{\n\t\t\t\t{Alias: \"al2023@latest\"},\n\t\t\t\t{ID: \"ami-1234749\"},\n\t\t\t}\n\t\t\tExpect(env.Client.Create(ctx, nc)).ToNot(Succeed())\n\t\t})\n\t\tDescribeTable(\n\t\t\t\"should succeed for valid aliases\",\n\t\t\tfunc(alias, family string) {\n\t\t\t\tnc.Spec.AMIFamily = lo.ToPtr(family)\n\t\t\t\tnc.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{Alias: alias}}\n\t\t\t\tExpect(env.Client.Create(ctx, nc)).To(Succeed())\n\t\t\t},\n\t\t\tEntry(\"al2 (latest)\", \"al2@latest\", v1.AMIFamilyAL2),\n\t\t\tEntry(\"al2 (pinned)\", \"al2@v20240625\", v1.AMIFamilyAL2),\n\t\t\tEntry(\"al2023 (latest)\", \"al2023@latest\", v1.AMIFamilyAL2023),\n\t\t\tEntry(\"al2023 (pinned)\", \"al2023@v20240625\", v1.AMIFamilyAL2023),\n\t\t\tEntry(\"bottlerocket (latest)\", \"bottlerocket@latest\", v1.AMIFamilyBottlerocket),\n\t\t\tEntry(\"bottlerocket (pinned)\", \"bottlerocket@1.10.0\", v1.AMIFamilyBottlerocket),\n\t\t\tEntry(\"windows2019 (latest)\", \"windows2019@latest\", v1.AMIFamilyWindows2019),\n\t\t\tEntry(\"windows2022 (latest)\", \"windows2022@latest\", v1.AMIFamilyWindows2022),\n\t\t\tEntry(\"windows2025 (latest)\", \"windows2025@latest\", v1.AMIFamilyWindows2025),\n\t\t)\n\t\tDescribeTable(\n\t\t\t\"should fail for incorrectly formatted aliases\",\n\t\t\tfunc(aliases ...string) {\n\t\t\t\tfor _, alias := range aliases {\n\t\t\t\t\tnc.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{Alias: alias}}\n\t\t\t\t\tExpect(env.Client.Create(ctx, nc)).ToNot(Succeed())\n\t\t\t\t}\n\t\t\t},\n\t\t\tEntry(\"missing family\", \"@latest\"),\n\t\t\tEntry(\"missing version\", \"al2023\", \"al2023@\"),\n\t\t\tEntry(\"invalid separator\", \"al2023-latest\"),\n\t\t)\n\t\tIt(\"should fail for an alias with an invalid family\", func() {\n\t\t\tnc.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{Alias: \"ubuntu@latest\"}}\n\t\t\tExpect(env.Client.Create(ctx, nc)).ToNot(Succeed())\n\t\t})\n\t\tDescribeTable(\n\t\t\t\"should fail when specifying non-latest versions with Windows aliases\",\n\t\t\tfunc(alias string) {\n\t\t\t\tnc.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{Alias: alias}}\n\t\t\t\tExpect(env.Client.Create(ctx, nc)).ToNot(Succeed())\n\t\t\t},\n\t\t\tEntry(\"Windows2019\", \"windows2019@v1.0.0\"),\n\t\t\tEntry(\"Windows2022\", \"windows2022@v1.0.0\"),\n\t\t\tEntry(\"Windows2025\", \"windows2025@v1.0.0\"),\n\t\t)\n\t})\n\tContext(\"Kubelet\", func() {\n\t\tIt(\"should fail on kubeReserved with invalid keys\", func() {\n\t\t\tnc.Spec.Kubelet = &v1.KubeletConfiguration{\n\t\t\t\tKubeReserved: map[string]string{\n\t\t\t\t\tstring(corev1.ResourcePods): \"2\",\n\t\t\t\t},\n\t\t\t}\n\t\t\tExpect(env.Client.Create(ctx, nc)).ToNot(Succeed())\n\t\t})\n\t\tIt(\"should fail on systemReserved with invalid keys\", func() {\n\t\t\tnc.Spec.Kubelet = &v1.KubeletConfiguration{\n\t\t\t\tSystemReserved: map[string]string{\n\t\t\t\t\tstring(corev1.ResourcePods): \"2\",\n\t\t\t\t},\n\t\t\t}\n\t\t\tExpect(env.Client.Create(ctx, nc)).ToNot(Succeed())\n\t\t})\n\t\tContext(\"Eviction Signals\", func() {\n\t\t\tContext(\"Eviction Hard\", func() {\n\t\t\t\tIt(\"should succeed on evictionHard with valid keys\", func() {\n\t\t\t\t\tnc.Spec.Kubelet = &v1.KubeletConfiguration{\n\t\t\t\t\t\tEvictionHard: map[string]string{\n\t\t\t\t\t\t\t\"memory.available\":   \"5%\",\n\t\t\t\t\t\t\t\"nodefs.available\":   \"10%\",\n\t\t\t\t\t\t\t\"nodefs.inodesFree\":  \"15%\",\n\t\t\t\t\t\t\t\"imagefs.available\":  \"5%\",\n\t\t\t\t\t\t\t\"imagefs.inodesFree\": \"5%\",\n\t\t\t\t\t\t\t\"pid.available\":      \"5%\",\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\t\t\t\t\tExpect(env.Client.Create(ctx, nc)).To(Succeed())\n\t\t\t\t})\n\t\t\t\tIt(\"should fail on evictionHard with invalid keys\", func() {\n\t\t\t\t\tnc.Spec.Kubelet = &v1.KubeletConfiguration{\n\t\t\t\t\t\tEvictionHard: map[string]string{\n\t\t\t\t\t\t\t\"memory\": \"5%\",\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\t\t\t\t\tExpect(env.Client.Create(ctx, nc)).ToNot(Succeed())\n\t\t\t\t})\n\t\t\t\tIt(\"should fail on invalid formatted percentage value in evictionHard\", func() {\n\t\t\t\t\tnc.Spec.Kubelet = &v1.KubeletConfiguration{\n\t\t\t\t\t\tEvictionHard: map[string]string{\n\t\t\t\t\t\t\t\"memory.available\": \"5%3\",\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\t\t\t\t\tExpect(env.Client.Create(ctx, nc)).ToNot(Succeed())\n\t\t\t\t})\n\t\t\t\tIt(\"should fail on invalid percentage value (too large) in evictionHard\", func() {\n\t\t\t\t\tnc.Spec.Kubelet = &v1.KubeletConfiguration{\n\t\t\t\t\t\tEvictionHard: map[string]string{\n\t\t\t\t\t\t\t\"memory.available\": \"110%\",\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\t\t\t\t\tExpect(env.Client.Create(ctx, nc)).ToNot(Succeed())\n\t\t\t\t})\n\t\t\t\tIt(\"should fail on invalid quantity value in evictionHard\", func() {\n\t\t\t\t\tnc.Spec.Kubelet = &v1.KubeletConfiguration{\n\t\t\t\t\t\tEvictionHard: map[string]string{\n\t\t\t\t\t\t\t\"memory.available\": \"110GB\",\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\t\t\t\t\tExpect(env.Client.Create(ctx, nc)).ToNot(Succeed())\n\t\t\t\t})\n\t\t\t})\n\t\t})\n\t\tContext(\"Eviction Soft\", func() {\n\t\t\tIt(\"should succeed on evictionSoft with valid keys\", func() {\n\t\t\t\tnc.Spec.Kubelet = &v1.KubeletConfiguration{\n\t\t\t\t\tEvictionSoft: map[string]string{\n\t\t\t\t\t\t\"memory.available\":   \"5%\",\n\t\t\t\t\t\t\"nodefs.available\":   \"10%\",\n\t\t\t\t\t\t\"nodefs.inodesFree\":  \"15%\",\n\t\t\t\t\t\t\"imagefs.available\":  \"5%\",\n\t\t\t\t\t\t\"imagefs.inodesFree\": \"5%\",\n\t\t\t\t\t\t\"pid.available\":      \"5%\",\n\t\t\t\t\t},\n\t\t\t\t\tEvictionSoftGracePeriod: map[string]metav1.Duration{\n\t\t\t\t\t\t\"memory.available\":   {Duration: time.Minute},\n\t\t\t\t\t\t\"nodefs.available\":   {Duration: time.Second * 90},\n\t\t\t\t\t\t\"nodefs.inodesFree\":  {Duration: time.Minute * 5},\n\t\t\t\t\t\t\"imagefs.available\":  {Duration: time.Hour},\n\t\t\t\t\t\t\"imagefs.inodesFree\": {Duration: time.Hour * 24},\n\t\t\t\t\t\t\"pid.available\":      {Duration: time.Minute},\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t\tExpect(env.Client.Create(ctx, nc)).To(Succeed())\n\t\t\t})\n\t\t\tIt(\"should fail on evictionSoft with invalid keys\", func() {\n\t\t\t\tnc.Spec.Kubelet = &v1.KubeletConfiguration{\n\t\t\t\t\tEvictionSoft: map[string]string{\n\t\t\t\t\t\t\"memory\": \"5%\",\n\t\t\t\t\t},\n\t\t\t\t\tEvictionSoftGracePeriod: map[string]metav1.Duration{\n\t\t\t\t\t\t\"memory\": {Duration: time.Minute},\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t\tExpect(env.Client.Create(ctx, nc)).ToNot(Succeed())\n\t\t\t})\n\t\t\tIt(\"should fail on invalid formatted percentage value in evictionSoft\", func() {\n\t\t\t\tnc.Spec.Kubelet = &v1.KubeletConfiguration{\n\t\t\t\t\tEvictionSoft: map[string]string{\n\t\t\t\t\t\t\"memory.available\": \"5%3\",\n\t\t\t\t\t},\n\t\t\t\t\tEvictionSoftGracePeriod: map[string]metav1.Duration{\n\t\t\t\t\t\t\"memory.available\": {Duration: time.Minute},\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t\tExpect(env.Client.Create(ctx, nc)).ToNot(Succeed())\n\t\t\t})\n\t\t\tIt(\"should fail on invalid percentage value (too large) in evictionSoft\", func() {\n\t\t\t\tnc.Spec.Kubelet = &v1.KubeletConfiguration{\n\t\t\t\t\tEvictionSoft: map[string]string{\n\t\t\t\t\t\t\"memory.available\": \"110%\",\n\t\t\t\t\t},\n\t\t\t\t\tEvictionSoftGracePeriod: map[string]metav1.Duration{\n\t\t\t\t\t\t\"memory.available\": {Duration: time.Minute},\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t\tExpect(env.Client.Create(ctx, nc)).ToNot(Succeed())\n\t\t\t})\n\t\t\tIt(\"should fail on invalid quantity value in evictionSoft\", func() {\n\t\t\t\tnc.Spec.Kubelet = &v1.KubeletConfiguration{\n\t\t\t\t\tEvictionSoft: map[string]string{\n\t\t\t\t\t\t\"memory.available\": \"110GB\",\n\t\t\t\t\t},\n\t\t\t\t\tEvictionSoftGracePeriod: map[string]metav1.Duration{\n\t\t\t\t\t\t\"memory.available\": {Duration: time.Minute},\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t\tExpect(env.Client.Create(ctx, nc)).ToNot(Succeed())\n\t\t\t})\n\t\t\tIt(\"should fail when eviction soft doesn't have matching grace period\", func() {\n\t\t\t\tnc.Spec.Kubelet = &v1.KubeletConfiguration{\n\t\t\t\t\tEvictionSoft: map[string]string{\n\t\t\t\t\t\t\"memory.available\": \"200Mi\",\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t\tExpect(env.Client.Create(ctx, nc)).ToNot(Succeed())\n\t\t\t})\n\t\t})\n\t\tContext(\"GCThresholdPercent\", func() {\n\t\t\tIt(\"should succeed on a valid imageGCHighThresholdPercent\", func() {\n\t\t\t\tnc.Spec.Kubelet = &v1.KubeletConfiguration{\n\t\t\t\t\tImageGCHighThresholdPercent: lo.ToPtr(int32(10)),\n\t\t\t\t}\n\t\t\t\tExpect(env.Client.Create(ctx, nc)).To(Succeed())\n\t\t\t})\n\t\t\tIt(\"should fail when imageGCHighThresholdPercent is less than imageGCLowThresholdPercent\", func() {\n\t\t\t\tnc.Spec.Kubelet = &v1.KubeletConfiguration{\n\t\t\t\t\tImageGCHighThresholdPercent: lo.ToPtr(int32(50)),\n\t\t\t\t\tImageGCLowThresholdPercent:  lo.ToPtr(int32(60)),\n\t\t\t\t}\n\t\t\t\tExpect(env.Client.Create(ctx, nc)).ToNot(Succeed())\n\t\t\t})\n\t\t\tIt(\"should fail when imageGCLowThresholdPercent is greather than imageGCHighThresheldPercent\", func() {\n\t\t\t\tnc.Spec.Kubelet = &v1.KubeletConfiguration{\n\t\t\t\t\tImageGCHighThresholdPercent: lo.ToPtr(int32(50)),\n\t\t\t\t\tImageGCLowThresholdPercent:  lo.ToPtr(int32(60)),\n\t\t\t\t}\n\t\t\t\tExpect(env.Client.Create(ctx, nc)).ToNot(Succeed())\n\t\t\t})\n\t\t})\n\t\tContext(\"Eviction Soft Grace Period\", func() {\n\t\t\tIt(\"should succeed on evictionSoftGracePeriod with valid keys\", func() {\n\t\t\t\tnc.Spec.Kubelet = &v1.KubeletConfiguration{\n\t\t\t\t\tEvictionSoft: map[string]string{\n\t\t\t\t\t\t\"memory.available\":   \"5%\",\n\t\t\t\t\t\t\"nodefs.available\":   \"10%\",\n\t\t\t\t\t\t\"nodefs.inodesFree\":  \"15%\",\n\t\t\t\t\t\t\"imagefs.available\":  \"5%\",\n\t\t\t\t\t\t\"imagefs.inodesFree\": \"5%\",\n\t\t\t\t\t\t\"pid.available\":      \"5%\",\n\t\t\t\t\t},\n\t\t\t\t\tEvictionSoftGracePeriod: map[string]metav1.Duration{\n\t\t\t\t\t\t\"memory.available\":   {Duration: time.Minute},\n\t\t\t\t\t\t\"nodefs.available\":   {Duration: time.Second * 90},\n\t\t\t\t\t\t\"nodefs.inodesFree\":  {Duration: time.Minute * 5},\n\t\t\t\t\t\t\"imagefs.available\":  {Duration: time.Hour},\n\t\t\t\t\t\t\"imagefs.inodesFree\": {Duration: time.Hour * 24},\n\t\t\t\t\t\t\"pid.available\":      {Duration: time.Minute},\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t\tExpect(env.Client.Create(ctx, nc)).To(Succeed())\n\t\t\t})\n\t\t\tIt(\"should fail on evictionSoftGracePeriod with invalid keys\", func() {\n\t\t\t\tnc.Spec.Kubelet = &v1.KubeletConfiguration{\n\t\t\t\t\tEvictionSoftGracePeriod: map[string]metav1.Duration{\n\t\t\t\t\t\t\"memory\": {Duration: time.Minute},\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t\tExpect(env.Client.Create(ctx, nc)).ToNot(Succeed())\n\t\t\t})\n\t\t\tIt(\"should fail when eviction soft grace period doesn't have matching threshold\", func() {\n\t\t\t\tnc.Spec.Kubelet = &v1.KubeletConfiguration{\n\t\t\t\t\tEvictionSoftGracePeriod: map[string]metav1.Duration{\n\t\t\t\t\t\t\"memory.available\": {Duration: time.Minute},\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t\tExpect(env.Client.Create(ctx, nc)).ToNot(Succeed())\n\t\t\t})\n\t\t})\n\t})\n\tContext(\"MetadataOptions\", func() {\n\t\tIt(\"should succeed for valid inputs\", func() {\n\t\t\tnc.Spec.MetadataOptions = &v1.MetadataOptions{\n\t\t\t\tHTTPEndpoint:            aws.String(\"disabled\"),\n\t\t\t\tHTTPProtocolIPv6:        aws.String(\"enabled\"),\n\t\t\t\tHTTPPutResponseHopLimit: aws.Int64(34),\n\t\t\t\tHTTPTokens:              aws.String(\"optional\"),\n\t\t\t}\n\t\t\tExpect(env.Client.Create(ctx, nc)).To(Succeed())\n\t\t})\n\t\tIt(\"should fail for invalid for HTTPEndpoint\", func() {\n\t\t\tnc.Spec.MetadataOptions = &v1.MetadataOptions{\n\t\t\t\tHTTPEndpoint: aws.String(\"test\"),\n\t\t\t}\n\t\t\tExpect(env.Client.Create(ctx, nc)).ToNot(Succeed())\n\t\t})\n\t\tIt(\"should fail for invalid for HTTPProtocolIPv6\", func() {\n\t\t\tnc.Spec.MetadataOptions = &v1.MetadataOptions{\n\t\t\t\tHTTPProtocolIPv6: aws.String(\"test\"),\n\t\t\t}\n\t\t\tExpect(env.Client.Create(ctx, nc)).ToNot(Succeed())\n\t\t})\n\t\tIt(\"should fail for invalid for HTTPPutResponseHopLimit\", func() {\n\t\t\tnc.Spec.MetadataOptions = &v1.MetadataOptions{\n\t\t\t\tHTTPPutResponseHopLimit: aws.Int64(-5),\n\t\t\t}\n\t\t\tExpect(env.Client.Create(ctx, nc)).ToNot(Succeed())\n\t\t})\n\t\tIt(\"should fail for invalid for HTTPTokens\", func() {\n\t\t\tnc.Spec.MetadataOptions = &v1.MetadataOptions{\n\t\t\t\tHTTPTokens: aws.String(\"test\"),\n\t\t\t}\n\t\t\tExpect(env.Client.Create(ctx, nc)).ToNot(Succeed())\n\t\t})\n\t})\n\tContext(\"BlockDeviceMappings\", func() {\n\t\tIt(\"should succeed if more than one root volume is specified\", func() {\n\t\t\tnodeClass := &v1.EC2NodeClass{\n\t\t\t\tObjectMeta: test.ObjectMeta(metav1.ObjectMeta{}),\n\t\t\t\tSpec: v1.EC2NodeClassSpec{\n\t\t\t\t\tAMISelectorTerms:           nc.Spec.AMISelectorTerms,\n\t\t\t\t\tSubnetSelectorTerms:        nc.Spec.SubnetSelectorTerms,\n\t\t\t\t\tSecurityGroupSelectorTerms: nc.Spec.SecurityGroupSelectorTerms,\n\t\t\t\t\tRole:                       nc.Spec.Role,\n\t\t\t\t\tBlockDeviceMappings: []*v1.BlockDeviceMapping{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tDeviceName: aws.String(\"map-device-1\"),\n\t\t\t\t\t\t\tEBS: &v1.BlockDevice{\n\t\t\t\t\t\t\t\tVolumeSize: resource.NewScaledQuantity(500, resource.Giga),\n\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\tRootVolume: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tDeviceName: aws.String(\"map-device-2\"),\n\t\t\t\t\t\t\tEBS: &v1.BlockDevice{\n\t\t\t\t\t\t\t\tVolumeSize: resource.NewScaledQuantity(50, resource.Tera),\n\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\tRootVolume: false,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}\n\t\t\tExpect(env.Client.Create(ctx, nodeClass)).To(Succeed())\n\t\t})\n\t\tIt(\"should succeed for valid VolumeSize in G\", func() {\n\t\t\tnodeClass := &v1.EC2NodeClass{\n\t\t\t\tObjectMeta: test.ObjectMeta(metav1.ObjectMeta{}),\n\t\t\t\tSpec: v1.EC2NodeClassSpec{\n\t\t\t\t\tAMISelectorTerms:           nc.Spec.AMISelectorTerms,\n\t\t\t\t\tSubnetSelectorTerms:        nc.Spec.SubnetSelectorTerms,\n\t\t\t\t\tSecurityGroupSelectorTerms: nc.Spec.SecurityGroupSelectorTerms,\n\t\t\t\t\tRole:                       nc.Spec.Role,\n\t\t\t\t\tBlockDeviceMappings: []*v1.BlockDeviceMapping{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tDeviceName: aws.String(\"map-device-1\"),\n\t\t\t\t\t\t\tEBS: &v1.BlockDevice{\n\t\t\t\t\t\t\t\tVolumeSize: resource.NewScaledQuantity(58, resource.Giga),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tRootVolume: false,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}\n\t\t\tExpect(env.Client.Create(ctx, nodeClass)).To(Succeed())\n\t\t})\n\t\tIt(\"should succeed for valid VolumeSize in T\", func() {\n\t\t\tnodeClass := &v1.EC2NodeClass{\n\t\t\t\tObjectMeta: test.ObjectMeta(metav1.ObjectMeta{}),\n\t\t\t\tSpec: v1.EC2NodeClassSpec{\n\t\t\t\t\tAMISelectorTerms:           nc.Spec.AMISelectorTerms,\n\t\t\t\t\tSubnetSelectorTerms:        nc.Spec.SubnetSelectorTerms,\n\t\t\t\t\tSecurityGroupSelectorTerms: nc.Spec.SecurityGroupSelectorTerms,\n\t\t\t\t\tRole:                       nc.Spec.Role,\n\t\t\t\t\tBlockDeviceMappings: []*v1.BlockDeviceMapping{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tDeviceName: aws.String(\"map-device-1\"),\n\t\t\t\t\t\t\tEBS: &v1.BlockDevice{\n\t\t\t\t\t\t\t\tVolumeSize: resource.NewScaledQuantity(45, resource.Tera),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tRootVolume: false,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}\n\t\t\tExpect(env.Client.Create(ctx, nodeClass)).To(Succeed())\n\t\t})\n\t\tIt(\"should fail if more than one root volume is specified\", func() {\n\t\t\tnodeClass := &v1.EC2NodeClass{\n\t\t\t\tObjectMeta: test.ObjectMeta(metav1.ObjectMeta{}),\n\t\t\t\tSpec: v1.EC2NodeClassSpec{\n\t\t\t\t\tAMISelectorTerms:           nc.Spec.AMISelectorTerms,\n\t\t\t\t\tSubnetSelectorTerms:        nc.Spec.SubnetSelectorTerms,\n\t\t\t\t\tSecurityGroupSelectorTerms: nc.Spec.SecurityGroupSelectorTerms,\n\t\t\t\t\tRole:                       nc.Spec.Role,\n\t\t\t\t\tBlockDeviceMappings: []*v1.BlockDeviceMapping{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tDeviceName: aws.String(\"map-device-1\"),\n\t\t\t\t\t\t\tEBS: &v1.BlockDevice{\n\t\t\t\t\t\t\t\tVolumeSize: resource.NewScaledQuantity(50, resource.Giga),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tRootVolume: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tDeviceName: aws.String(\"map-device-2\"),\n\t\t\t\t\t\t\tEBS: &v1.BlockDevice{\n\t\t\t\t\t\t\t\tVolumeSize: resource.NewScaledQuantity(50, resource.Giga),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tRootVolume: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}\n\t\t\tExpect(env.Client.Create(ctx, nodeClass)).To(Not(Succeed()))\n\t\t})\n\t\tIt(\"should fail VolumeSize is less then 1Gi/1G\", func() {\n\t\t\tnodeClass := &v1.EC2NodeClass{\n\t\t\t\tObjectMeta: test.ObjectMeta(metav1.ObjectMeta{}),\n\t\t\t\tSpec: v1.EC2NodeClassSpec{\n\t\t\t\t\tAMISelectorTerms:           nc.Spec.AMISelectorTerms,\n\t\t\t\t\tSubnetSelectorTerms:        nc.Spec.SubnetSelectorTerms,\n\t\t\t\t\tSecurityGroupSelectorTerms: nc.Spec.SecurityGroupSelectorTerms,\n\t\t\t\t\tRole:                       nc.Spec.Role,\n\t\t\t\t\tBlockDeviceMappings: []*v1.BlockDeviceMapping{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tDeviceName: aws.String(\"map-device-1\"),\n\t\t\t\t\t\t\tEBS: &v1.BlockDevice{\n\t\t\t\t\t\t\t\tVolumeSize: resource.NewScaledQuantity(1, resource.Milli),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tRootVolume: false,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}\n\t\t\tExpect(env.Client.Create(ctx, nodeClass)).To(Not(Succeed()))\n\t\t})\n\t\tIt(\"should fail VolumeSize is greater then 64T\", func() {\n\t\t\tnodeClass := &v1.EC2NodeClass{\n\t\t\t\tObjectMeta: test.ObjectMeta(metav1.ObjectMeta{}),\n\t\t\t\tSpec: v1.EC2NodeClassSpec{\n\t\t\t\t\tAMISelectorTerms:           nc.Spec.AMISelectorTerms,\n\t\t\t\t\tSubnetSelectorTerms:        nc.Spec.SubnetSelectorTerms,\n\t\t\t\t\tSecurityGroupSelectorTerms: nc.Spec.SecurityGroupSelectorTerms,\n\t\t\t\t\tRole:                       nc.Spec.Role,\n\t\t\t\t\tBlockDeviceMappings: []*v1.BlockDeviceMapping{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tDeviceName: aws.String(\"map-device-1\"),\n\t\t\t\t\t\t\tEBS: &v1.BlockDevice{\n\t\t\t\t\t\t\t\tVolumeSize: resource.NewScaledQuantity(100, resource.Tera),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tRootVolume: false,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}\n\t\t\tExpect(env.Client.Create(ctx, nodeClass)).To(Not(Succeed()))\n\t\t})\n\t\tIt(\"should fail for VolumeSize that do not parse into quantity values\", func() {\n\t\t\tnodeClass := &v1.EC2NodeClass{\n\t\t\t\tObjectMeta: test.ObjectMeta(metav1.ObjectMeta{}),\n\t\t\t\tSpec: v1.EC2NodeClassSpec{\n\t\t\t\t\tAMISelectorTerms:           nc.Spec.AMISelectorTerms,\n\t\t\t\t\tSubnetSelectorTerms:        nc.Spec.SubnetSelectorTerms,\n\t\t\t\t\tSecurityGroupSelectorTerms: nc.Spec.SecurityGroupSelectorTerms,\n\t\t\t\t\tRole:                       nc.Spec.Role,\n\t\t\t\t\tBlockDeviceMappings: []*v1.BlockDeviceMapping{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tDeviceName: aws.String(\"map-device-1\"),\n\t\t\t\t\t\t\tEBS: &v1.BlockDevice{\n\t\t\t\t\t\t\t\tVolumeSize: &resource.Quantity{},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tRootVolume: false,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}\n\t\t\tExpect(env.Client.Create(ctx, nodeClass)).To(Not(Succeed()))\n\t\t})\n\t\tIt(\"should fail if VolumeInitializationRate set but SnapshotID not specified\", func() {\n\t\t\tnodeClass := &v1.EC2NodeClass{\n\t\t\t\tObjectMeta: test.ObjectMeta(metav1.ObjectMeta{}),\n\t\t\t\tSpec: v1.EC2NodeClassSpec{\n\t\t\t\t\tAMISelectorTerms:           nc.Spec.AMISelectorTerms,\n\t\t\t\t\tSubnetSelectorTerms:        nc.Spec.SubnetSelectorTerms,\n\t\t\t\t\tSecurityGroupSelectorTerms: nc.Spec.SecurityGroupSelectorTerms,\n\t\t\t\t\tRole:                       nc.Spec.Role,\n\t\t\t\t\tBlockDeviceMappings: []*v1.BlockDeviceMapping{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tDeviceName: aws.String(\"map-device-1\"),\n\t\t\t\t\t\t\tEBS: &v1.BlockDevice{\n\t\t\t\t\t\t\t\tVolumeSize:               &resource.Quantity{},\n\t\t\t\t\t\t\t\tVolumeInitializationRate: aws.Int32(100),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tRootVolume: false,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}\n\t\t\tExpect(env.Client.Create(ctx, nodeClass)).To(Not(Succeed()))\n\t\t})\n\t\tIt(\"should fail if VolumeInitializationRate too low\", func() {\n\t\t\tnodeClass := &v1.EC2NodeClass{\n\t\t\t\tObjectMeta: test.ObjectMeta(metav1.ObjectMeta{}),\n\t\t\t\tSpec: v1.EC2NodeClassSpec{\n\t\t\t\t\tAMISelectorTerms:           nc.Spec.AMISelectorTerms,\n\t\t\t\t\tSubnetSelectorTerms:        nc.Spec.SubnetSelectorTerms,\n\t\t\t\t\tSecurityGroupSelectorTerms: nc.Spec.SecurityGroupSelectorTerms,\n\t\t\t\t\tRole:                       nc.Spec.Role,\n\t\t\t\t\tBlockDeviceMappings: []*v1.BlockDeviceMapping{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tDeviceName: aws.String(\"map-device-1\"),\n\t\t\t\t\t\t\tEBS: &v1.BlockDevice{\n\t\t\t\t\t\t\t\tVolumeSize:               &resource.Quantity{},\n\t\t\t\t\t\t\t\tSnapshotID:               aws.String(\"snap-1\"),\n\t\t\t\t\t\t\t\tVolumeInitializationRate: aws.Int32(99),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tRootVolume: false,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}\n\t\t\tExpect(env.Client.Create(ctx, nodeClass)).To(Not(Succeed()))\n\t\t})\n\t\tIt(\"should fail if VolumeInitializationRate too high\", func() {\n\t\t\tnodeClass := &v1.EC2NodeClass{\n\t\t\t\tObjectMeta: test.ObjectMeta(metav1.ObjectMeta{}),\n\t\t\t\tSpec: v1.EC2NodeClassSpec{\n\t\t\t\t\tAMISelectorTerms:           nc.Spec.AMISelectorTerms,\n\t\t\t\t\tSubnetSelectorTerms:        nc.Spec.SubnetSelectorTerms,\n\t\t\t\t\tSecurityGroupSelectorTerms: nc.Spec.SecurityGroupSelectorTerms,\n\t\t\t\t\tRole:                       nc.Spec.Role,\n\t\t\t\t\tBlockDeviceMappings: []*v1.BlockDeviceMapping{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tDeviceName: aws.String(\"map-device-1\"),\n\t\t\t\t\t\t\tEBS: &v1.BlockDevice{\n\t\t\t\t\t\t\t\tVolumeSize:               &resource.Quantity{},\n\t\t\t\t\t\t\t\tSnapshotID:               aws.String(\"snap-1\"),\n\t\t\t\t\t\t\t\tVolumeInitializationRate: aws.Int32(888),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tRootVolume: false,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}\n\t\t\tExpect(env.Client.Create(ctx, nodeClass)).To(Not(Succeed()))\n\t\t})\n\t})\n\tContext(\"Role Immutability\", func() {\n\t\tIt(\"should fail if role is not defined\", func() {\n\t\t\tnc.Spec.Role = \"\"\n\t\t\tExpect(env.Client.Create(ctx, nc)).ToNot(Succeed())\n\t\t})\n\t\tIt(\"should succeed when updating the role\", func() {\n\t\t\tnc.Spec.Role = \"test-role\"\n\t\t\tExpect(env.Client.Create(ctx, nc)).To(Succeed())\n\n\t\t\tnc.Spec.Role = \"test-role2\"\n\t\t\tExpect(env.Client.Update(ctx, nc)).To(Succeed())\n\t\t})\n\t\tIt(\"should succeed to switch between an unmanaged and managed instance profile\", func() {\n\t\t\tnc.Spec.Role = \"\"\n\t\t\tnc.Spec.InstanceProfile = lo.ToPtr(\"test-instance-profile\")\n\t\t\tExpect(env.Client.Create(ctx, nc)).To(Succeed())\n\n\t\t\tnc.Spec.Role = \"test-role\"\n\t\t\tnc.Spec.InstanceProfile = nil\n\t\t\tExpect(env.Client.Update(ctx, nc)).To(Succeed())\n\t\t})\n\t\tIt(\"should succeed to switch between a managed and unmanaged instance profile\", func() {\n\t\t\tnc.Spec.Role = \"test-role\"\n\t\t\tnc.Spec.InstanceProfile = nil\n\t\t\tExpect(env.Client.Create(ctx, nc)).To(Succeed())\n\n\t\t\tnc.Spec.Role = \"\"\n\t\t\tnc.Spec.InstanceProfile = lo.ToPtr(\"test-instance-profile\")\n\t\t\tExpect(env.Client.Update(ctx, nc)).To(Succeed())\n\t\t})\n\t})\n})\n"
  },
  {
    "path": "pkg/apis/v1/labels.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage v1\n\nimport (\n\t\"fmt\"\n\t\"regexp\"\n\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\n\tcorev1 \"k8s.io/api/core/v1\"\n\t\"k8s.io/apimachinery/pkg/util/sets\"\n\tcoreapis \"sigs.k8s.io/karpenter/pkg/apis\"\n\tkarpv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n\n\t\"github.com/aws/karpenter-provider-aws/pkg/apis\"\n)\n\nfunc init() {\n\tkarpv1.RestrictedLabelDomains = karpv1.RestrictedLabelDomains.Insert(RestrictedLabelDomains...)\n\tkarpv1.WellKnownLabels = karpv1.WellKnownLabels.Insert(\n\t\tLabelCapacityReservationID,\n\t\tLabelCapacityReservationType,\n\t\tLabelCapacityReservationInterruptible,\n\t\tLabelInstanceHypervisor,\n\t\tLabelInstanceEncryptionInTransitSupported,\n\t\tLabelInstanceCategory,\n\t\tLabelInstanceCapabilityFlex,\n\t\tLabelInstanceFamily,\n\t\tLabelInstanceGeneration,\n\t\tLabelInstanceSize,\n\t\tLabelInstanceLocalNVME,\n\t\tLabelInstanceCPU,\n\t\tLabelInstanceCPUManufacturer,\n\t\tLabelInstanceCPUSustainedClockSpeedMhz,\n\t\tLabelInstanceMemory,\n\t\tLabelInstanceEBSBandwidth,\n\t\tLabelInstanceNetworkBandwidth,\n\t\tLabelInstanceGPUName,\n\t\tLabelInstanceGPUManufacturer,\n\t\tLabelInstanceGPUCount,\n\t\tLabelInstanceGPUMemory,\n\t\tLabelInstanceAcceleratorName,\n\t\tLabelInstanceAcceleratorManufacturer,\n\t\tLabelInstanceAcceleratorCount,\n\t\tLabelTopologyZoneID,\n\t\tLabelInstanceTenancy,\n\t\tcorev1.LabelWindowsBuild,\n\t)\n\n\tkarpv1.WellKnownValuesForRequirements[LabelInstanceTenancy] = sets.New(string(ec2types.TenancyDedicated), string(ec2types.TenancyDefault))\n\n\tkarpv1.WellKnownResources.Insert(\n\t\tResourceAWSPodENI,\n\t\tResourceAWSNeuron,\n\t\tResourceAWSNeuronCore,\n\t\tResourceHabanaGaudi,\n\t\tResourceEFA,\n\t)\n}\n\nvar (\n\tTerminationFinalizer   = apis.Group + \"/termination\"\n\tAWSToKubeArchitectures = map[string]string{\n\t\t\"x86_64\":                 karpv1.ArchitectureAmd64,\n\t\tkarpv1.ArchitectureArm64: karpv1.ArchitectureArm64,\n\t}\n\tWellKnownArchitectures = sets.NewString(\n\t\tkarpv1.ArchitectureAmd64,\n\t\tkarpv1.ArchitectureArm64,\n\t)\n\tWellKnownResources = sets.New[corev1.ResourceName](\n\t\tcorev1.ResourceCPU,\n\t\tcorev1.ResourceMemory,\n\t\tcorev1.ResourceEphemeralStorage,\n\t\tcorev1.ResourcePods,\n\t\tResourceAWSPodENI,\n\t\tResourceNVIDIAGPU,\n\t\tResourceAMDGPU,\n\t\tResourceAWSNeuron,\n\t\tResourceAWSNeuronCore,\n\t\tResourceHabanaGaudi,\n\t\tResourceEFA,\n\t)\n\tWellKnownExoticResources = sets.New[corev1.ResourceName](\n\t\tResourceNVIDIAGPU,\n\t\tResourceAMDGPU,\n\t\tResourceAWSNeuron,\n\t\tResourceAWSNeuronCore,\n\t\tResourceHabanaGaudi,\n\t)\n\tRestrictedLabelDomains = []string{\n\t\tapis.Group,\n\t}\n\tRestrictedTagPatterns = []*regexp.Regexp{\n\t\t// Adheres to cluster name pattern matching as specified in the API spec\n\t\t// https://docs.aws.amazon.com/eks/latest/APIReference/API_CreateCluster.html\n\t\tregexp.MustCompile(`^kubernetes\\.io/cluster/[0-9A-Za-z][A-Za-z0-9\\-_]*$`),\n\t\tregexp.MustCompile(fmt.Sprintf(\"^%s$\", regexp.QuoteMeta(NodePoolTagKey))),\n\t\tregexp.MustCompile(fmt.Sprintf(\"^%s$\", regexp.QuoteMeta(EKSClusterNameTagKey))),\n\t\tregexp.MustCompile(fmt.Sprintf(\"^%s$\", regexp.QuoteMeta(NodeClassTagKey))),\n\t\tregexp.MustCompile(fmt.Sprintf(\"^%s$\", regexp.QuoteMeta(NodeClaimTagKey))),\n\t}\n\tAMIFamilyBottlerocket                          = \"Bottlerocket\"\n\tAMIFamilyAL2                                   = \"AL2\"\n\tAMIFamilyAL2023                                = \"AL2023\"\n\tAMIFamilyUbuntu                                = \"Ubuntu\"\n\tAMIFamilyWindows2019                           = \"Windows2019\"\n\tAMIFamilyWindows2022                           = \"Windows2022\"\n\tAMIFamilyWindows2025                           = \"Windows2025\"\n\tAMIFamilyCustom                                = \"Custom\"\n\tWindows2019                                    = \"2019\"\n\tWindows2022                                    = \"2022\"\n\tWindows2025                                    = \"2025\"\n\tWindowsCore                                    = \"Core\"\n\tWindows2019Build                               = \"10.0.17763\"\n\tWindows2022Build                               = \"10.0.20348\"\n\tWindows2025Build                               = \"10.0.26100\"\n\tResourceNVIDIAGPU          corev1.ResourceName = \"nvidia.com/gpu\"\n\tResourceAMDGPU             corev1.ResourceName = \"amd.com/gpu\"\n\tResourceAWSNeuron          corev1.ResourceName = \"aws.amazon.com/neuron\"\n\tResourceAWSNeuronCore      corev1.ResourceName = \"aws.amazon.com/neuroncore\"\n\tResourceHabanaGaudi        corev1.ResourceName = \"habana.ai/gaudi\"\n\tResourceAWSPodENI          corev1.ResourceName = \"vpc.amazonaws.com/pod-eni\"\n\tResourcePrivateIPv4Address corev1.ResourceName = \"vpc.amazonaws.com/PrivateIPv4Address\"\n\tResourceEFA                corev1.ResourceName = \"vpc.amazonaws.com/efa\"\n\n\tLabelCapacityReservationID                = apis.Group + \"/capacity-reservation-id\"\n\tLabelCapacityReservationType              = apis.Group + \"/capacity-reservation-type\"\n\tLabelCapacityReservationInterruptible     = apis.Group + \"/capacity-reservation-interruptible\"\n\tLabelInstanceHypervisor                   = apis.Group + \"/instance-hypervisor\"\n\tLabelInstanceEncryptionInTransitSupported = apis.Group + \"/instance-encryption-in-transit-supported\"\n\tLabelInstanceCategory                     = apis.Group + \"/instance-category\"\n\tLabelInstanceCapabilityFlex               = apis.Group + \"/instance-capability-flex\"\n\tLabelInstanceFamily                       = apis.Group + \"/instance-family\"\n\tLabelInstanceGeneration                   = apis.Group + \"/instance-generation\"\n\tLabelInstanceLocalNVME                    = apis.Group + \"/instance-local-nvme\"\n\tLabelInstanceSize                         = apis.Group + \"/instance-size\"\n\tLabelInstanceCPU                          = apis.Group + \"/instance-cpu\"\n\tLabelInstanceCPUManufacturer              = apis.Group + \"/instance-cpu-manufacturer\"\n\tLabelInstanceCPUSustainedClockSpeedMhz    = apis.Group + \"/instance-cpu-sustained-clock-speed-mhz\"\n\tLabelInstanceMemory                       = apis.Group + \"/instance-memory\"\n\tLabelInstanceEBSBandwidth                 = apis.Group + \"/instance-ebs-bandwidth\"\n\tLabelInstanceNetworkBandwidth             = apis.Group + \"/instance-network-bandwidth\"\n\tLabelInstanceGPUName                      = apis.Group + \"/instance-gpu-name\"\n\tLabelInstanceGPUManufacturer              = apis.Group + \"/instance-gpu-manufacturer\"\n\tLabelInstanceGPUCount                     = apis.Group + \"/instance-gpu-count\"\n\tLabelInstanceGPUMemory                    = apis.Group + \"/instance-gpu-memory\"\n\tLabelInstanceAcceleratorName              = apis.Group + \"/instance-accelerator-name\"\n\tLabelInstanceAcceleratorManufacturer      = apis.Group + \"/instance-accelerator-manufacturer\"\n\tLabelInstanceAcceleratorCount             = apis.Group + \"/instance-accelerator-count\"\n\tLabelNodeClass                            = apis.Group + \"/ec2nodeclass\"\n\tLabelInstanceTenancy                      = apis.Group + \"/instance-tenancy\"\n\n\tLabelTopologyZoneID = \"topology.k8s.aws/zone-id\"\n\n\tAnnotationEC2NodeClassHash               = apis.Group + \"/ec2nodeclass-hash\"\n\tAnnotationClusterNameTaggedCompatability = apis.CompatibilityGroup + \"/cluster-name-tagged\"\n\tAnnotationEC2NodeClassHashVersion        = apis.Group + \"/ec2nodeclass-hash-version\"\n\tAnnotationInstanceTagged                 = apis.Group + \"/tagged\"\n\tAnnotationInstanceProfile                = apis.Group + \"/instance-profile-name\"\n\n\tNodeClaimTagKey          = coreapis.Group + \"/nodeclaim\"\n\tNameTagKey               = \"Name\"\n\tNodePoolTagKey           = karpv1.NodePoolLabelKey\n\tNodeClassTagKey          = LabelNodeClass\n\tLaunchTemplateNamePrefix = apis.Group\n\tEKSClusterNameTagKey     = \"eks:eks-cluster-name\"\n)\n"
  },
  {
    "path": "pkg/apis/v1/nodepool_validation_cel_test.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage v1_test\n\nimport (\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n\tcorev1 \"k8s.io/api/core/v1\"\n\tmetav1 \"k8s.io/apimachinery/pkg/apis/meta/v1\"\n\t\"k8s.io/apimachinery/pkg/util/sets\"\n\n\tkarpv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n\t\"sigs.k8s.io/karpenter/pkg/test\"\n)\n\nvar _ = Describe(\"CEL/Validation\", func() {\n\tvar nodePool *karpv1.NodePool\n\n\tBeforeEach(func() {\n\t\tnodePool = &karpv1.NodePool{\n\t\t\tObjectMeta: metav1.ObjectMeta{Name: test.RandomName()},\n\t\t\tSpec: karpv1.NodePoolSpec{\n\t\t\t\tTemplate: karpv1.NodeClaimTemplate{\n\t\t\t\t\tSpec: karpv1.NodeClaimTemplateSpec{\n\t\t\t\t\t\tNodeClassRef: &karpv1.NodeClassReference{\n\t\t\t\t\t\t\tGroup: \"karpenter.k8s.aws\",\n\t\t\t\t\t\t\tKind:  \"EC2NodeClass\",\n\t\t\t\t\t\t\tName:  \"default\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tRequirements: []karpv1.NodeSelectorRequirementWithMinValues{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tKey:      karpv1.CapacityTypeLabelKey,\n\t\t\t\t\t\t\t\tOperator: corev1.NodeSelectorOpExists,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}\n\t})\n\tContext(\"Requirements\", func() {\n\t\tIt(\"should allow well known label exceptions\", func() {\n\t\t\toldNodePool := nodePool.DeepCopy()\n\t\t\tfor label := range karpv1.WellKnownLabels.Difference(sets.New(karpv1.NodePoolLabelKey, karpv1.CapacityTypeLabelKey, v1.LabelInstanceTenancy)) {\n\t\t\t\tnodePool.Spec.Template.Spec.Requirements = []karpv1.NodeSelectorRequirementWithMinValues{\n\t\t\t\t\t{Key: label, Operator: corev1.NodeSelectorOpIn, Values: []string{\"test\"}},\n\t\t\t\t}\n\t\t\t\tExpect(env.Client.Create(ctx, nodePool)).To(Succeed())\n\t\t\t\tExpect(nodePool.RuntimeValidate(ctx)).To(Succeed())\n\t\t\t\tExpect(env.Client.Delete(ctx, nodePool)).To(Succeed())\n\t\t\t\tnodePool = oldNodePool.DeepCopy()\n\t\t\t}\n\t\t})\n\t\tIt(\"should fail validation with only invalid capacity types\", func() {\n\t\t\toldNodePool := nodePool.DeepCopy()\n\t\t\ttest.ReplaceRequirements(nodePool, karpv1.NodeSelectorRequirementWithMinValues{\n\t\t\t\tKey:      karpv1.CapacityTypeLabelKey,\n\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\tValues:   []string{\"xspot\"}, // Invalid value\n\t\t\t})\n\t\t\tExpect(env.Client.Create(ctx, nodePool)).To(Succeed())\n\t\t\tExpect(nodePool.RuntimeValidate(ctx)).ToNot(Succeed())\n\t\t\tExpect(env.Client.Delete(ctx, nodePool)).To(Succeed())\n\t\t\tnodePool = oldNodePool.DeepCopy()\n\t\t})\n\t\tIt(\"should pass validation with valid capacity types\", func() {\n\t\t\toldNodePool := nodePool.DeepCopy()\n\t\t\ttest.ReplaceRequirements(nodePool, karpv1.NodeSelectorRequirementWithMinValues{\n\t\t\t\tKey:      karpv1.CapacityTypeLabelKey,\n\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\tValues:   []string{karpv1.CapacityTypeOnDemand}, // Valid value\n\t\t\t})\n\t\t\tExpect(env.Client.Create(ctx, nodePool)).To(Succeed())\n\t\t\tExpect(nodePool.RuntimeValidate(ctx)).To(Succeed())\n\t\t\tExpect(env.Client.Delete(ctx, nodePool)).To(Succeed())\n\t\t\tnodePool = oldNodePool.DeepCopy()\n\t\t})\n\t\tIt(\"should fail open if invalid and valid capacity types are present\", func() {\n\t\t\toldNodePool := nodePool.DeepCopy()\n\t\t\ttest.ReplaceRequirements(nodePool, karpv1.NodeSelectorRequirementWithMinValues{\n\t\t\t\tKey:      karpv1.CapacityTypeLabelKey,\n\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\tValues:   []string{karpv1.CapacityTypeOnDemand, \"xspot\"}, // Valid and invalid value\n\t\t\t})\n\t\t\tExpect(env.Client.Create(ctx, nodePool)).To(Succeed())\n\t\t\tExpect(nodePool.RuntimeValidate(ctx)).To(Succeed())\n\t\t\tExpect(env.Client.Delete(ctx, nodePool)).To(Succeed())\n\t\t\tnodePool = oldNodePool.DeepCopy()\n\t\t})\n\n\t\tIt(\"should fail validation with only invalid tenancy types\", func() {\n\t\t\toldNodePool := nodePool.DeepCopy()\n\t\t\ttest.ReplaceRequirements(nodePool, karpv1.NodeSelectorRequirementWithMinValues{\n\t\t\t\tKey:      v1.LabelInstanceTenancy,\n\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\tValues:   []string{\"xdedicated\"}, // Invalid value\n\t\t\t})\n\t\t\tExpect(env.Client.Create(ctx, nodePool)).To(Succeed())\n\t\t\tExpect(nodePool.RuntimeValidate(ctx)).ToNot(Succeed())\n\t\t\tExpect(env.Client.Delete(ctx, nodePool)).To(Succeed())\n\t\t\tnodePool = oldNodePool.DeepCopy()\n\t\t})\n\t\tIt(\"should pass validation with valid tenancy types\", func() {\n\t\t\toldNodePool := nodePool.DeepCopy()\n\t\t\ttest.ReplaceRequirements(nodePool, karpv1.NodeSelectorRequirementWithMinValues{\n\t\t\t\tKey:      v1.LabelInstanceTenancy,\n\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\tValues:   []string{string(ec2types.TenancyDefault)}, // Valid value\n\t\t\t})\n\t\t\tExpect(env.Client.Create(ctx, nodePool)).To(Succeed())\n\t\t\tExpect(nodePool.RuntimeValidate(ctx)).To(Succeed())\n\t\t\tExpect(env.Client.Delete(ctx, nodePool)).To(Succeed())\n\t\t\tnodePool = oldNodePool.DeepCopy()\n\t\t})\n\t\tIt(\"should fail open if invalid and valid tenancy types are present\", func() {\n\t\t\toldNodePool := nodePool.DeepCopy()\n\t\t\ttest.ReplaceRequirements(nodePool, karpv1.NodeSelectorRequirementWithMinValues{\n\t\t\t\tKey:      v1.LabelInstanceTenancy,\n\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\tValues:   []string{string(ec2types.TenancyDefault), \"xdedicated\"}, // Valid and invalid value\n\t\t\t})\n\t\t\tExpect(env.Client.Create(ctx, nodePool)).To(Succeed())\n\t\t\tExpect(nodePool.RuntimeValidate(ctx)).To(Succeed())\n\t\t\tExpect(env.Client.Delete(ctx, nodePool)).To(Succeed())\n\t\t\tnodePool = oldNodePool.DeepCopy()\n\t\t})\n\n\t})\n\tContext(\"Labels\", func() {\n\t\tIt(\"should allow well known label exceptions\", func() {\n\t\t\toldNodePool := nodePool.DeepCopy()\n\t\t\tfor label := range karpv1.WellKnownLabels.Difference(sets.New(karpv1.NodePoolLabelKey)) {\n\t\t\t\tnodePool.Spec.Template.Labels = map[string]string{\n\t\t\t\t\tlabel: \"test\",\n\t\t\t\t}\n\t\t\t\tExpect(env.Client.Create(ctx, nodePool)).To(Succeed())\n\t\t\t\tExpect(nodePool.RuntimeValidate(ctx)).To(Succeed())\n\t\t\t\tExpect(env.Client.Delete(ctx, nodePool)).To(Succeed())\n\t\t\t\tnodePool = oldNodePool.DeepCopy()\n\t\t\t}\n\t\t})\n\t})\n})\n"
  },
  {
    "path": "pkg/apis/v1/suite_test.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage v1_test\n\nimport (\n\t\"context\"\n\t\"testing\"\n\n\t\"sigs.k8s.io/karpenter/pkg/test/v1alpha1\"\n\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n\t. \"sigs.k8s.io/karpenter/pkg/utils/testing\"\n\n\t. \"sigs.k8s.io/karpenter/pkg/test/expectations\"\n\n\tcoretest \"sigs.k8s.io/karpenter/pkg/test\"\n\n\t\"github.com/aws/karpenter-provider-aws/pkg/apis\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/operator/options\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/test\"\n)\n\nvar ctx context.Context\nvar env *coretest.Environment\nvar awsEnv *test.Environment\n\nfunc TestAPIs(t *testing.T) {\n\tctx = TestContextWithLogger(t)\n\tRegisterFailHandler(Fail)\n\tRunSpecs(t, \"Validation\")\n}\n\nvar _ = BeforeSuite(func() {\n\tctx = options.ToContext(ctx, test.Options())\n\tenv = coretest.NewEnvironment(coretest.WithCRDs(apis.CRDs...), coretest.WithCRDs(v1alpha1.CRDs...))\n\tawsEnv = test.NewEnvironment(ctx, env)\n})\n\nvar _ = AfterEach(func() {\n\tExpectCleanedUp(ctx, env.Client)\n})\n\nvar _ = AfterSuite(func() {\n\tExpect(env.Stop()).To(Succeed(), \"Failed to stop environment\")\n})\n"
  },
  {
    "path": "pkg/apis/v1/zz_generated.deepcopy.go",
    "content": "//go:build !ignore_autogenerated\n\n/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n// Code generated by controller-gen. DO NOT EDIT.\n\npackage v1\n\nimport (\n\t\"github.com/awslabs/operatorpkg/status\"\n\tcorev1 \"k8s.io/api/core/v1\"\n\tmetav1 \"k8s.io/apimachinery/pkg/apis/meta/v1\"\n\truntime \"k8s.io/apimachinery/pkg/runtime\"\n)\n\n// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.\nfunc (in *AMI) DeepCopyInto(out *AMI) {\n\t*out = *in\n\tif in.Requirements != nil {\n\t\tin, out := &in.Requirements, &out.Requirements\n\t\t*out = make([]corev1.NodeSelectorRequirement, len(*in))\n\t\tfor i := range *in {\n\t\t\t(*in)[i].DeepCopyInto(&(*out)[i])\n\t\t}\n\t}\n}\n\n// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AMI.\nfunc (in *AMI) DeepCopy() *AMI {\n\tif in == nil {\n\t\treturn nil\n\t}\n\tout := new(AMI)\n\tin.DeepCopyInto(out)\n\treturn out\n}\n\n// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.\nfunc (in *AMISelectorTerm) DeepCopyInto(out *AMISelectorTerm) {\n\t*out = *in\n\tif in.Tags != nil {\n\t\tin, out := &in.Tags, &out.Tags\n\t\t*out = make(map[string]string, len(*in))\n\t\tfor key, val := range *in {\n\t\t\t(*out)[key] = val\n\t\t}\n\t}\n}\n\n// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AMISelectorTerm.\nfunc (in *AMISelectorTerm) DeepCopy() *AMISelectorTerm {\n\tif in == nil {\n\t\treturn nil\n\t}\n\tout := new(AMISelectorTerm)\n\tin.DeepCopyInto(out)\n\treturn out\n}\n\n// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.\nfunc (in *Alias) DeepCopyInto(out *Alias) {\n\t*out = *in\n}\n\n// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Alias.\nfunc (in *Alias) DeepCopy() *Alias {\n\tif in == nil {\n\t\treturn nil\n\t}\n\tout := new(Alias)\n\tin.DeepCopyInto(out)\n\treturn out\n}\n\n// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.\nfunc (in *BlockDevice) DeepCopyInto(out *BlockDevice) {\n\t*out = *in\n\tif in.DeleteOnTermination != nil {\n\t\tin, out := &in.DeleteOnTermination, &out.DeleteOnTermination\n\t\t*out = new(bool)\n\t\t**out = **in\n\t}\n\tif in.Encrypted != nil {\n\t\tin, out := &in.Encrypted, &out.Encrypted\n\t\t*out = new(bool)\n\t\t**out = **in\n\t}\n\tif in.IOPS != nil {\n\t\tin, out := &in.IOPS, &out.IOPS\n\t\t*out = new(int64)\n\t\t**out = **in\n\t}\n\tif in.KMSKeyID != nil {\n\t\tin, out := &in.KMSKeyID, &out.KMSKeyID\n\t\t*out = new(string)\n\t\t**out = **in\n\t}\n\tif in.SnapshotID != nil {\n\t\tin, out := &in.SnapshotID, &out.SnapshotID\n\t\t*out = new(string)\n\t\t**out = **in\n\t}\n\tif in.Throughput != nil {\n\t\tin, out := &in.Throughput, &out.Throughput\n\t\t*out = new(int64)\n\t\t**out = **in\n\t}\n\tif in.VolumeInitializationRate != nil {\n\t\tin, out := &in.VolumeInitializationRate, &out.VolumeInitializationRate\n\t\t*out = new(int32)\n\t\t**out = **in\n\t}\n\tif in.VolumeSize != nil {\n\t\tin, out := &in.VolumeSize, &out.VolumeSize\n\t\tx := (*in).DeepCopy()\n\t\t*out = &x\n\t}\n\tif in.VolumeType != nil {\n\t\tin, out := &in.VolumeType, &out.VolumeType\n\t\t*out = new(string)\n\t\t**out = **in\n\t}\n}\n\n// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BlockDevice.\nfunc (in *BlockDevice) DeepCopy() *BlockDevice {\n\tif in == nil {\n\t\treturn nil\n\t}\n\tout := new(BlockDevice)\n\tin.DeepCopyInto(out)\n\treturn out\n}\n\n// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.\nfunc (in *BlockDeviceMapping) DeepCopyInto(out *BlockDeviceMapping) {\n\t*out = *in\n\tif in.DeviceName != nil {\n\t\tin, out := &in.DeviceName, &out.DeviceName\n\t\t*out = new(string)\n\t\t**out = **in\n\t}\n\tif in.EBS != nil {\n\t\tin, out := &in.EBS, &out.EBS\n\t\t*out = new(BlockDevice)\n\t\t(*in).DeepCopyInto(*out)\n\t}\n}\n\n// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BlockDeviceMapping.\nfunc (in *BlockDeviceMapping) DeepCopy() *BlockDeviceMapping {\n\tif in == nil {\n\t\treturn nil\n\t}\n\tout := new(BlockDeviceMapping)\n\tin.DeepCopyInto(out)\n\treturn out\n}\n\n// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.\nfunc (in *CapacityReservation) DeepCopyInto(out *CapacityReservation) {\n\t*out = *in\n\tif in.EndTime != nil {\n\t\tin, out := &in.EndTime, &out.EndTime\n\t\t*out = (*in).DeepCopy()\n\t}\n}\n\n// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CapacityReservation.\nfunc (in *CapacityReservation) DeepCopy() *CapacityReservation {\n\tif in == nil {\n\t\treturn nil\n\t}\n\tout := new(CapacityReservation)\n\tin.DeepCopyInto(out)\n\treturn out\n}\n\n// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.\nfunc (in *CapacityReservationSelectorTerm) DeepCopyInto(out *CapacityReservationSelectorTerm) {\n\t*out = *in\n\tif in.Tags != nil {\n\t\tin, out := &in.Tags, &out.Tags\n\t\t*out = make(map[string]string, len(*in))\n\t\tfor key, val := range *in {\n\t\t\t(*out)[key] = val\n\t\t}\n\t}\n}\n\n// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CapacityReservationSelectorTerm.\nfunc (in *CapacityReservationSelectorTerm) DeepCopy() *CapacityReservationSelectorTerm {\n\tif in == nil {\n\t\treturn nil\n\t}\n\tout := new(CapacityReservationSelectorTerm)\n\tin.DeepCopyInto(out)\n\treturn out\n}\n\n// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.\nfunc (in *EC2NodeClass) DeepCopyInto(out *EC2NodeClass) {\n\t*out = *in\n\tout.TypeMeta = in.TypeMeta\n\tin.ObjectMeta.DeepCopyInto(&out.ObjectMeta)\n\tin.Spec.DeepCopyInto(&out.Spec)\n\tin.Status.DeepCopyInto(&out.Status)\n}\n\n// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new EC2NodeClass.\nfunc (in *EC2NodeClass) DeepCopy() *EC2NodeClass {\n\tif in == nil {\n\t\treturn nil\n\t}\n\tout := new(EC2NodeClass)\n\tin.DeepCopyInto(out)\n\treturn out\n}\n\n// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.\nfunc (in *EC2NodeClass) DeepCopyObject() runtime.Object {\n\tif c := in.DeepCopy(); c != nil {\n\t\treturn c\n\t}\n\treturn nil\n}\n\n// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.\nfunc (in *EC2NodeClassList) DeepCopyInto(out *EC2NodeClassList) {\n\t*out = *in\n\tout.TypeMeta = in.TypeMeta\n\tin.ListMeta.DeepCopyInto(&out.ListMeta)\n\tif in.Items != nil {\n\t\tin, out := &in.Items, &out.Items\n\t\t*out = make([]EC2NodeClass, len(*in))\n\t\tfor i := range *in {\n\t\t\t(*in)[i].DeepCopyInto(&(*out)[i])\n\t\t}\n\t}\n}\n\n// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new EC2NodeClassList.\nfunc (in *EC2NodeClassList) DeepCopy() *EC2NodeClassList {\n\tif in == nil {\n\t\treturn nil\n\t}\n\tout := new(EC2NodeClassList)\n\tin.DeepCopyInto(out)\n\treturn out\n}\n\n// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.\nfunc (in *EC2NodeClassList) DeepCopyObject() runtime.Object {\n\tif c := in.DeepCopy(); c != nil {\n\t\treturn c\n\t}\n\treturn nil\n}\n\n// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.\nfunc (in *EC2NodeClassSpec) DeepCopyInto(out *EC2NodeClassSpec) {\n\t*out = *in\n\tif in.SubnetSelectorTerms != nil {\n\t\tin, out := &in.SubnetSelectorTerms, &out.SubnetSelectorTerms\n\t\t*out = make([]SubnetSelectorTerm, len(*in))\n\t\tfor i := range *in {\n\t\t\t(*in)[i].DeepCopyInto(&(*out)[i])\n\t\t}\n\t}\n\tif in.SecurityGroupSelectorTerms != nil {\n\t\tin, out := &in.SecurityGroupSelectorTerms, &out.SecurityGroupSelectorTerms\n\t\t*out = make([]SecurityGroupSelectorTerm, len(*in))\n\t\tfor i := range *in {\n\t\t\t(*in)[i].DeepCopyInto(&(*out)[i])\n\t\t}\n\t}\n\tif in.CapacityReservationSelectorTerms != nil {\n\t\tin, out := &in.CapacityReservationSelectorTerms, &out.CapacityReservationSelectorTerms\n\t\t*out = make([]CapacityReservationSelectorTerm, len(*in))\n\t\tfor i := range *in {\n\t\t\t(*in)[i].DeepCopyInto(&(*out)[i])\n\t\t}\n\t}\n\tif in.AssociatePublicIPAddress != nil {\n\t\tin, out := &in.AssociatePublicIPAddress, &out.AssociatePublicIPAddress\n\t\t*out = new(bool)\n\t\t**out = **in\n\t}\n\tif in.IPPrefixCount != nil {\n\t\tin, out := &in.IPPrefixCount, &out.IPPrefixCount\n\t\t*out = new(int32)\n\t\t**out = **in\n\t}\n\tif in.AMISelectorTerms != nil {\n\t\tin, out := &in.AMISelectorTerms, &out.AMISelectorTerms\n\t\t*out = make([]AMISelectorTerm, len(*in))\n\t\tfor i := range *in {\n\t\t\t(*in)[i].DeepCopyInto(&(*out)[i])\n\t\t}\n\t}\n\tif in.AMIFamily != nil {\n\t\tin, out := &in.AMIFamily, &out.AMIFamily\n\t\t*out = new(string)\n\t\t**out = **in\n\t}\n\tif in.UserData != nil {\n\t\tin, out := &in.UserData, &out.UserData\n\t\t*out = new(string)\n\t\t**out = **in\n\t}\n\tif in.InstanceProfile != nil {\n\t\tin, out := &in.InstanceProfile, &out.InstanceProfile\n\t\t*out = new(string)\n\t\t**out = **in\n\t}\n\tif in.Tags != nil {\n\t\tin, out := &in.Tags, &out.Tags\n\t\t*out = make(map[string]string, len(*in))\n\t\tfor key, val := range *in {\n\t\t\t(*out)[key] = val\n\t\t}\n\t}\n\tif in.Kubelet != nil {\n\t\tin, out := &in.Kubelet, &out.Kubelet\n\t\t*out = new(KubeletConfiguration)\n\t\t(*in).DeepCopyInto(*out)\n\t}\n\tif in.BlockDeviceMappings != nil {\n\t\tin, out := &in.BlockDeviceMappings, &out.BlockDeviceMappings\n\t\t*out = make([]*BlockDeviceMapping, len(*in))\n\t\tfor i := range *in {\n\t\t\tif (*in)[i] != nil {\n\t\t\t\tin, out := &(*in)[i], &(*out)[i]\n\t\t\t\t*out = new(BlockDeviceMapping)\n\t\t\t\t(*in).DeepCopyInto(*out)\n\t\t\t}\n\t\t}\n\t}\n\tif in.InstanceStorePolicy != nil {\n\t\tin, out := &in.InstanceStorePolicy, &out.InstanceStorePolicy\n\t\t*out = new(InstanceStorePolicy)\n\t\t**out = **in\n\t}\n\tif in.DetailedMonitoring != nil {\n\t\tin, out := &in.DetailedMonitoring, &out.DetailedMonitoring\n\t\t*out = new(bool)\n\t\t**out = **in\n\t}\n\tif in.MetadataOptions != nil {\n\t\tin, out := &in.MetadataOptions, &out.MetadataOptions\n\t\t*out = new(MetadataOptions)\n\t\t(*in).DeepCopyInto(*out)\n\t}\n\tif in.Context != nil {\n\t\tin, out := &in.Context, &out.Context\n\t\t*out = new(string)\n\t\t**out = **in\n\t}\n}\n\n// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new EC2NodeClassSpec.\nfunc (in *EC2NodeClassSpec) DeepCopy() *EC2NodeClassSpec {\n\tif in == nil {\n\t\treturn nil\n\t}\n\tout := new(EC2NodeClassSpec)\n\tin.DeepCopyInto(out)\n\treturn out\n}\n\n// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.\nfunc (in *EC2NodeClassStatus) DeepCopyInto(out *EC2NodeClassStatus) {\n\t*out = *in\n\tif in.Subnets != nil {\n\t\tin, out := &in.Subnets, &out.Subnets\n\t\t*out = make([]Subnet, len(*in))\n\t\tcopy(*out, *in)\n\t}\n\tif in.SecurityGroups != nil {\n\t\tin, out := &in.SecurityGroups, &out.SecurityGroups\n\t\t*out = make([]SecurityGroup, len(*in))\n\t\tcopy(*out, *in)\n\t}\n\tif in.CapacityReservations != nil {\n\t\tin, out := &in.CapacityReservations, &out.CapacityReservations\n\t\t*out = make([]CapacityReservation, len(*in))\n\t\tfor i := range *in {\n\t\t\t(*in)[i].DeepCopyInto(&(*out)[i])\n\t\t}\n\t}\n\tif in.AMIs != nil {\n\t\tin, out := &in.AMIs, &out.AMIs\n\t\t*out = make([]AMI, len(*in))\n\t\tfor i := range *in {\n\t\t\t(*in)[i].DeepCopyInto(&(*out)[i])\n\t\t}\n\t}\n\tif in.Conditions != nil {\n\t\tin, out := &in.Conditions, &out.Conditions\n\t\t*out = make([]status.Condition, len(*in))\n\t\tfor i := range *in {\n\t\t\t(*in)[i].DeepCopyInto(&(*out)[i])\n\t\t}\n\t}\n}\n\n// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new EC2NodeClassStatus.\nfunc (in *EC2NodeClassStatus) DeepCopy() *EC2NodeClassStatus {\n\tif in == nil {\n\t\treturn nil\n\t}\n\tout := new(EC2NodeClassStatus)\n\tin.DeepCopyInto(out)\n\treturn out\n}\n\n// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.\nfunc (in *KubeletConfiguration) DeepCopyInto(out *KubeletConfiguration) {\n\t*out = *in\n\tif in.ClusterDNS != nil {\n\t\tin, out := &in.ClusterDNS, &out.ClusterDNS\n\t\t*out = make([]string, len(*in))\n\t\tcopy(*out, *in)\n\t}\n\tif in.MaxPods != nil {\n\t\tin, out := &in.MaxPods, &out.MaxPods\n\t\t*out = new(int32)\n\t\t**out = **in\n\t}\n\tif in.PodsPerCore != nil {\n\t\tin, out := &in.PodsPerCore, &out.PodsPerCore\n\t\t*out = new(int32)\n\t\t**out = **in\n\t}\n\tif in.SystemReserved != nil {\n\t\tin, out := &in.SystemReserved, &out.SystemReserved\n\t\t*out = make(map[string]string, len(*in))\n\t\tfor key, val := range *in {\n\t\t\t(*out)[key] = val\n\t\t}\n\t}\n\tif in.KubeReserved != nil {\n\t\tin, out := &in.KubeReserved, &out.KubeReserved\n\t\t*out = make(map[string]string, len(*in))\n\t\tfor key, val := range *in {\n\t\t\t(*out)[key] = val\n\t\t}\n\t}\n\tif in.EvictionHard != nil {\n\t\tin, out := &in.EvictionHard, &out.EvictionHard\n\t\t*out = make(map[string]string, len(*in))\n\t\tfor key, val := range *in {\n\t\t\t(*out)[key] = val\n\t\t}\n\t}\n\tif in.EvictionSoft != nil {\n\t\tin, out := &in.EvictionSoft, &out.EvictionSoft\n\t\t*out = make(map[string]string, len(*in))\n\t\tfor key, val := range *in {\n\t\t\t(*out)[key] = val\n\t\t}\n\t}\n\tif in.EvictionSoftGracePeriod != nil {\n\t\tin, out := &in.EvictionSoftGracePeriod, &out.EvictionSoftGracePeriod\n\t\t*out = make(map[string]metav1.Duration, len(*in))\n\t\tfor key, val := range *in {\n\t\t\t(*out)[key] = val\n\t\t}\n\t}\n\tif in.EvictionMaxPodGracePeriod != nil {\n\t\tin, out := &in.EvictionMaxPodGracePeriod, &out.EvictionMaxPodGracePeriod\n\t\t*out = new(int32)\n\t\t**out = **in\n\t}\n\tif in.ImageGCHighThresholdPercent != nil {\n\t\tin, out := &in.ImageGCHighThresholdPercent, &out.ImageGCHighThresholdPercent\n\t\t*out = new(int32)\n\t\t**out = **in\n\t}\n\tif in.ImageGCLowThresholdPercent != nil {\n\t\tin, out := &in.ImageGCLowThresholdPercent, &out.ImageGCLowThresholdPercent\n\t\t*out = new(int32)\n\t\t**out = **in\n\t}\n\tif in.CPUCFSQuota != nil {\n\t\tin, out := &in.CPUCFSQuota, &out.CPUCFSQuota\n\t\t*out = new(bool)\n\t\t**out = **in\n\t}\n}\n\n// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KubeletConfiguration.\nfunc (in *KubeletConfiguration) DeepCopy() *KubeletConfiguration {\n\tif in == nil {\n\t\treturn nil\n\t}\n\tout := new(KubeletConfiguration)\n\tin.DeepCopyInto(out)\n\treturn out\n}\n\n// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.\nfunc (in *MetadataOptions) DeepCopyInto(out *MetadataOptions) {\n\t*out = *in\n\tif in.HTTPEndpoint != nil {\n\t\tin, out := &in.HTTPEndpoint, &out.HTTPEndpoint\n\t\t*out = new(string)\n\t\t**out = **in\n\t}\n\tif in.HTTPProtocolIPv6 != nil {\n\t\tin, out := &in.HTTPProtocolIPv6, &out.HTTPProtocolIPv6\n\t\t*out = new(string)\n\t\t**out = **in\n\t}\n\tif in.HTTPPutResponseHopLimit != nil {\n\t\tin, out := &in.HTTPPutResponseHopLimit, &out.HTTPPutResponseHopLimit\n\t\t*out = new(int64)\n\t\t**out = **in\n\t}\n\tif in.HTTPTokens != nil {\n\t\tin, out := &in.HTTPTokens, &out.HTTPTokens\n\t\t*out = new(string)\n\t\t**out = **in\n\t}\n}\n\n// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MetadataOptions.\nfunc (in *MetadataOptions) DeepCopy() *MetadataOptions {\n\tif in == nil {\n\t\treturn nil\n\t}\n\tout := new(MetadataOptions)\n\tin.DeepCopyInto(out)\n\treturn out\n}\n\n// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.\nfunc (in *SecurityGroup) DeepCopyInto(out *SecurityGroup) {\n\t*out = *in\n}\n\n// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SecurityGroup.\nfunc (in *SecurityGroup) DeepCopy() *SecurityGroup {\n\tif in == nil {\n\t\treturn nil\n\t}\n\tout := new(SecurityGroup)\n\tin.DeepCopyInto(out)\n\treturn out\n}\n\n// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.\nfunc (in *SecurityGroupSelectorTerm) DeepCopyInto(out *SecurityGroupSelectorTerm) {\n\t*out = *in\n\tif in.Tags != nil {\n\t\tin, out := &in.Tags, &out.Tags\n\t\t*out = make(map[string]string, len(*in))\n\t\tfor key, val := range *in {\n\t\t\t(*out)[key] = val\n\t\t}\n\t}\n}\n\n// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SecurityGroupSelectorTerm.\nfunc (in *SecurityGroupSelectorTerm) DeepCopy() *SecurityGroupSelectorTerm {\n\tif in == nil {\n\t\treturn nil\n\t}\n\tout := new(SecurityGroupSelectorTerm)\n\tin.DeepCopyInto(out)\n\treturn out\n}\n\n// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.\nfunc (in *Subnet) DeepCopyInto(out *Subnet) {\n\t*out = *in\n}\n\n// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Subnet.\nfunc (in *Subnet) DeepCopy() *Subnet {\n\tif in == nil {\n\t\treturn nil\n\t}\n\tout := new(Subnet)\n\tin.DeepCopyInto(out)\n\treturn out\n}\n\n// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.\nfunc (in *SubnetSelectorTerm) DeepCopyInto(out *SubnetSelectorTerm) {\n\t*out = *in\n\tif in.Tags != nil {\n\t\tin, out := &in.Tags, &out.Tags\n\t\t*out = make(map[string]string, len(*in))\n\t\tfor key, val := range *in {\n\t\t\t(*out)[key] = val\n\t\t}\n\t}\n}\n\n// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SubnetSelectorTerm.\nfunc (in *SubnetSelectorTerm) DeepCopy() *SubnetSelectorTerm {\n\tif in == nil {\n\t\treturn nil\n\t}\n\tout := new(SubnetSelectorTerm)\n\tin.DeepCopyInto(out)\n\treturn out\n}\n\n// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.\nfunc (in *ZoneInfo) DeepCopyInto(out *ZoneInfo) {\n\t*out = *in\n}\n\n// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ZoneInfo.\nfunc (in *ZoneInfo) DeepCopy() *ZoneInfo {\n\tif in == nil {\n\t\treturn nil\n\t}\n\tout := new(ZoneInfo)\n\tin.DeepCopyInto(out)\n\treturn out\n}\n"
  },
  {
    "path": "pkg/aws/sdk.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage sdk\n\nimport (\n\t\"context\"\n\n\t\"github.com/aws/aws-sdk-go-v2/service/ec2\"\n\t\"github.com/aws/aws-sdk-go-v2/service/eks\"\n\t\"github.com/aws/aws-sdk-go-v2/service/iam\"\n\t\"github.com/aws/aws-sdk-go-v2/service/pricing\"\n\t\"github.com/aws/aws-sdk-go-v2/service/sqs\"\n\t\"github.com/aws/aws-sdk-go-v2/service/ssm\"\n\t\"github.com/aws/aws-sdk-go-v2/service/timestreamwrite\"\n)\n\ntype EC2API interface {\n\tDescribeCapacityReservations(context.Context, *ec2.DescribeCapacityReservationsInput, ...func(*ec2.Options)) (*ec2.DescribeCapacityReservationsOutput, error)\n\tDescribeImages(context.Context, *ec2.DescribeImagesInput, ...func(*ec2.Options)) (*ec2.DescribeImagesOutput, error)\n\tDescribeLaunchTemplates(context.Context, *ec2.DescribeLaunchTemplatesInput, ...func(*ec2.Options)) (*ec2.DescribeLaunchTemplatesOutput, error)\n\tDescribeSubnets(context.Context, *ec2.DescribeSubnetsInput, ...func(*ec2.Options)) (*ec2.DescribeSubnetsOutput, error)\n\tDescribeSecurityGroups(context.Context, *ec2.DescribeSecurityGroupsInput, ...func(*ec2.Options)) (*ec2.DescribeSecurityGroupsOutput, error)\n\tDescribeInstanceTypes(context.Context, *ec2.DescribeInstanceTypesInput, ...func(*ec2.Options)) (*ec2.DescribeInstanceTypesOutput, error)\n\tDescribeInstanceTypeOfferings(context.Context, *ec2.DescribeInstanceTypeOfferingsInput, ...func(*ec2.Options)) (*ec2.DescribeInstanceTypeOfferingsOutput, error)\n\tDescribeSpotPriceHistory(context.Context, *ec2.DescribeSpotPriceHistoryInput, ...func(*ec2.Options)) (*ec2.DescribeSpotPriceHistoryOutput, error)\n\tCreateFleet(context.Context, *ec2.CreateFleetInput, ...func(*ec2.Options)) (*ec2.CreateFleetOutput, error)\n\tTerminateInstances(context.Context, *ec2.TerminateInstancesInput, ...func(*ec2.Options)) (*ec2.TerminateInstancesOutput, error)\n\tDescribeInstances(context.Context, *ec2.DescribeInstancesInput, ...func(*ec2.Options)) (*ec2.DescribeInstancesOutput, error)\n\tRunInstances(context.Context, *ec2.RunInstancesInput, ...func(*ec2.Options)) (*ec2.RunInstancesOutput, error)\n\tCreateTags(context.Context, *ec2.CreateTagsInput, ...func(*ec2.Options)) (*ec2.CreateTagsOutput, error)\n\tCreateLaunchTemplate(context.Context, *ec2.CreateLaunchTemplateInput, ...func(*ec2.Options)) (*ec2.CreateLaunchTemplateOutput, error)\n\tDeleteLaunchTemplate(context.Context, *ec2.DeleteLaunchTemplateInput, ...func(*ec2.Options)) (*ec2.DeleteLaunchTemplateOutput, error)\n}\n\ntype IAMAPI interface {\n\tGetInstanceProfile(context.Context, *iam.GetInstanceProfileInput, ...func(*iam.Options)) (*iam.GetInstanceProfileOutput, error)\n\tCreateInstanceProfile(context.Context, *iam.CreateInstanceProfileInput, ...func(*iam.Options)) (*iam.CreateInstanceProfileOutput, error)\n\tDeleteInstanceProfile(context.Context, *iam.DeleteInstanceProfileInput, ...func(*iam.Options)) (*iam.DeleteInstanceProfileOutput, error)\n\tAddRoleToInstanceProfile(context.Context, *iam.AddRoleToInstanceProfileInput, ...func(*iam.Options)) (*iam.AddRoleToInstanceProfileOutput, error)\n\tTagInstanceProfile(context.Context, *iam.TagInstanceProfileInput, ...func(*iam.Options)) (*iam.TagInstanceProfileOutput, error)\n\tRemoveRoleFromInstanceProfile(context.Context, *iam.RemoveRoleFromInstanceProfileInput, ...func(*iam.Options)) (*iam.RemoveRoleFromInstanceProfileOutput, error)\n\tListInstanceProfiles(context.Context, *iam.ListInstanceProfilesInput, ...func(*iam.Options)) (*iam.ListInstanceProfilesOutput, error)\n\tGetRole(context.Context, *iam.GetRoleInput, ...func(*iam.Options)) (*iam.GetRoleOutput, error)\n}\ntype EKSAPI interface {\n\tDescribeCluster(context.Context, *eks.DescribeClusterInput, ...func(*eks.Options)) (*eks.DescribeClusterOutput, error)\n}\n\ntype PricingAPI interface {\n\tGetProducts(context.Context, *pricing.GetProductsInput, ...func(*pricing.Options)) (*pricing.GetProductsOutput, error)\n}\n\ntype SSMAPI interface {\n\tGetParameter(context.Context, *ssm.GetParameterInput, ...func(*ssm.Options)) (*ssm.GetParameterOutput, error)\n}\n\ntype SQSAPI interface {\n\tReceiveMessage(context.Context, *sqs.ReceiveMessageInput, ...func(*sqs.Options)) (*sqs.ReceiveMessageOutput, error)\n\tDeleteMessage(context.Context, *sqs.DeleteMessageInput, ...func(*sqs.Options)) (*sqs.DeleteMessageOutput, error)\n\tSendMessage(context.Context, *sqs.SendMessageInput, ...func(*sqs.Options)) (*sqs.SendMessageOutput, error)\n}\n\ntype TimestreamWriteAPI interface {\n\tWriteRecords(ctx context.Context, params *timestreamwrite.WriteRecordsInput, optFns ...func(*timestreamwrite.Options)) (*timestreamwrite.WriteRecordsOutput, error)\n}\n"
  },
  {
    "path": "pkg/batcher/batcher.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n// batcher implements a generic batching lib for API calls so that load can be reduced to external APIs that excessively throttle\npackage batcher\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"sync\"\n\t\"time\"\n\n\t\"github.com/mitchellh/hashstructure/v2\"\n\t\"github.com/samber/lo\"\n\t\"golang.org/x/sync/errgroup\"\n\n\t\"sigs.k8s.io/karpenter/pkg/metrics\"\n)\n\n// Options allows for configuration of the Batcher\ntype Options[T input, U output] struct {\n\tName              string\n\tIdleTimeout       time.Duration\n\tMaxTimeout        time.Duration\n\tMaxItems          int\n\tMaxRequestWorkers int\n\tRequestHasher     RequestHasher[T]\n\tBatchExecutor     BatchExecutor[T, U]\n}\n\n// Result is a container for the output and error of an execution\ntype Result[U output] struct {\n\tOutput *U\n\tErr    error\n}\n\ntype input = any\ntype output = any\n\n// request is a batched request with the calling ctx, requestor, and hash to determine the batching bucket\ntype request[T input, U output] struct {\n\tctx       context.Context\n\thash      uint64\n\tinput     *T\n\trequestor chan Result[U]\n}\n\n// Batcher is used to batch API calls with identical parameters into a single call\ntype Batcher[T input, U output] struct {\n\tctx     context.Context\n\toptions Options[T, U]\n\n\tmu       sync.Mutex\n\trequests map[uint64][]*request[T, U]\n\n\t// trigger to initiate the batcher\n\ttrigger chan struct{}\n\n\t// requestWorkers is a group of concurrent workers that execute requests\n\trequestWorkers errgroup.Group\n}\n\n// BatchExecutor is a function that executes a slice of inputs against the batched API.\n// inputs will be mutated\n// The returned Result slice is expected to match the len of the input slice and be in the\n// same order, if order matters for the batched API\ntype BatchExecutor[T input, U output] func(ctx context.Context, input []*T) []Result[U]\n\n// RequestHasher is a function that hashes input to bucket inputs into distinct batches\ntype RequestHasher[T input] func(ctx context.Context, input *T) uint64\n\n// NewBatcher creates a batcher that can batch a particular input and output type\nfunc NewBatcher[T input, U output](ctx context.Context, options Options[T, U]) *Batcher[T, U] {\n\tb := &Batcher[T, U]{\n\t\tctx:      ctx,\n\t\toptions:  options,\n\t\trequests: map[uint64][]*request[T, U]{},\n\t\t// The trigger channel is buffered since we shouldn't block the Add() method on the trigger channel\n\t\t// if another Add() has already triggered it. This works because we add the request to the request map BEFORE\n\t\t// we perform the trigger\n\t\ttrigger: make(chan struct{}, 1),\n\t}\n\tb.requestWorkers.SetLimit(lo.Ternary(b.options.MaxRequestWorkers != 0, b.options.MaxRequestWorkers, 100))\n\tgo b.run()\n\treturn b\n}\n\n// Add will add an input to the batcher using the batcher's hashing function\nfunc (b *Batcher[T, U]) Add(ctx context.Context, input *T) Result[U] {\n\trequest := &request[T, U]{\n\t\tctx:   ctx,\n\t\thash:  b.options.RequestHasher(ctx, input),\n\t\tinput: input,\n\t\t// The requestor channel is buffered to ensure that the exec runner can always write the result out preventing\n\t\t// any single caller from blocking the others. Specifically since we register our request and then trigger, the\n\t\t// request may be processed while the triggering blocks.\n\t\trequestor: make(chan Result[U], 1),\n\t}\n\tb.mu.Lock()\n\tb.requests[request.hash] = append(b.requests[request.hash], request)\n\tb.mu.Unlock()\n\tb.trigger <- struct{}{}\n\treturn <-request.requestor\n}\n\n// DefaultHasher will hash the entire input\nfunc DefaultHasher[T input](_ context.Context, input *T) uint64 {\n\thash, err := hashstructure.Hash(input, hashstructure.FormatV2, &hashstructure.HashOptions{SlicesAsSets: true})\n\tif err != nil {\n\t\tpanic(\"error hashing\")\n\t}\n\treturn hash\n}\n\n// OneBucketHasher will return a constant hash and should be used when there is only one type of request\nfunc OneBucketHasher[T input](_ context.Context, _ *T) uint64 {\n\treturn 0\n}\n\nfunc (b *Batcher[T, U]) run() {\n\tfor {\n\t\tvar measureDuration func()\n\t\tselect {\n\t\t// context that we started with has completed so the app is shutting down\n\t\tcase <-b.ctx.Done():\n\t\t\t_ = b.requestWorkers.Wait()\n\t\t\treturn\n\t\tcase <-b.trigger:\n\t\t\t// wait to start the batch of create fleet calls\n\t\t\tmeasureDuration = metrics.Measure(BatchWindowDuration, map[string]string{batcherNameLabel: b.options.Name})\n\t\t}\n\t\tb.waitForIdle()\n\t\tmeasureDuration() // Observe the length of time between the start of the batch and now\n\n\t\t// Copy the requests, so we can reset the requests for the next batching loop\n\t\tb.mu.Lock()\n\t\trequests := b.requests\n\t\tb.requests = map[uint64][]*request[T, U]{}\n\t\tb.mu.Unlock()\n\n\t\tfor _, v := range requests {\n\t\t\treq := v // create a local closure for the requests value\n\t\t\tb.requestWorkers.Go(func() error {\n\t\t\t\tb.runCalls(req)\n\t\t\t\treturn nil\n\t\t\t})\n\t\t}\n\t}\n}\n\nfunc (b *Batcher[T, U]) waitForIdle() {\n\ttimeout := time.NewTimer(b.options.MaxTimeout)\n\tidle := time.NewTimer(b.options.IdleTimeout)\n\tcount := 1 // we already got a single trigger\n\tfor b.options.MaxItems == 0 || count < b.options.MaxItems {\n\t\tselect {\n\t\tcase <-b.ctx.Done():\n\t\t\treturn\n\t\tcase <-b.trigger:\n\t\t\tcount++\n\t\t\tif !idle.Stop() {\n\t\t\t\t<-idle.C\n\t\t\t}\n\t\t\tidle.Reset(b.options.IdleTimeout)\n\t\tcase <-timeout.C:\n\t\t\treturn\n\t\tcase <-idle.C:\n\t\t\treturn\n\t\t}\n\t}\n}\n\nfunc (b *Batcher[T, U]) runCalls(requests []*request[T, U]) {\n\t// Measure the size of the request batch\n\tBatchSize.Observe(float64(len(requests)), map[string]string{batcherNameLabel: b.options.Name})\n\trequestIdx := 0\n\tfor _, result := range b.options.BatchExecutor(requests[0].ctx, lo.Map(requests, func(req *request[T, U], _ int) *T { return req.input })) {\n\t\trequests[requestIdx].requestor <- result\n\t\trequestIdx++\n\t}\n\t// any unmapped outputs should return an error to the caller\n\tfor ; requestIdx < len(requests); requestIdx++ {\n\t\trequests[requestIdx].requestor <- Result[U]{Err: fmt.Errorf(\"error making call\")}\n\t}\n}\n"
  },
  {
    "path": "pkg/batcher/createfleet.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage batcher\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go-v2/aws\"\n\t\"github.com/aws/aws-sdk-go-v2/service/ec2\"\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\t\"github.com/awslabs/operatorpkg/serrors\"\n\n\tsdk \"github.com/aws/karpenter-provider-aws/pkg/aws\"\n\n\t\"sigs.k8s.io/controller-runtime/pkg/log\"\n)\n\ntype CreateFleetBatcher struct {\n\tbatcher *Batcher[ec2.CreateFleetInput, ec2.CreateFleetOutput]\n}\n\nfunc NewCreateFleetBatcher(ctx context.Context, ec2api sdk.EC2API) *CreateFleetBatcher {\n\toptions := Options[ec2.CreateFleetInput, ec2.CreateFleetOutput]{\n\t\tName:          \"create_fleet\",\n\t\tIdleTimeout:   35 * time.Millisecond,\n\t\tMaxTimeout:    1 * time.Second,\n\t\tMaxItems:      1_000,\n\t\tRequestHasher: DefaultHasher[ec2.CreateFleetInput],\n\t\tBatchExecutor: execCreateFleetBatch(ec2api),\n\t}\n\treturn &CreateFleetBatcher{batcher: NewBatcher(ctx, options)}\n}\nfunc (b *CreateFleetBatcher) CreateFleet(ctx context.Context, createFleetInput *ec2.CreateFleetInput) (*ec2.CreateFleetOutput, error) {\n\tif createFleetInput.TargetCapacitySpecification != nil && *createFleetInput.TargetCapacitySpecification.TotalTargetCapacity != 1 {\n\t\treturn nil, serrors.Wrap(fmt.Errorf(\"expected to receive a single instance only\"), \"instance-count\", *createFleetInput.TargetCapacitySpecification.TotalTargetCapacity)\n\t}\n\tresult := b.batcher.Add(ctx, createFleetInput)\n\treturn result.Output, result.Err\n}\n\nfunc execCreateFleetBatch(ec2api sdk.EC2API) BatchExecutor[ec2.CreateFleetInput, ec2.CreateFleetOutput] {\n\treturn func(ctx context.Context, inputs []*ec2.CreateFleetInput) []Result[ec2.CreateFleetOutput] {\n\t\tresults := make([]Result[ec2.CreateFleetOutput], 0, len(inputs))\n\t\tfirstInput := inputs[0]\n\t\t//nolint:gosec\n\t\tfirstInput.TargetCapacitySpecification.TotalTargetCapacity = aws.Int32(int32(len(inputs)))\n\t\toutput, err := ec2api.CreateFleet(ctx, firstInput)\n\t\tif err != nil {\n\t\t\tfor range inputs {\n\t\t\t\tresults = append(results, Result[ec2.CreateFleetOutput]{Err: err})\n\t\t\t}\n\t\t\treturn results\n\t\t}\n\t\t// we can get partial fulfillment of a CreateFleet request, so we:\n\t\t// 1) split out the single instance IDs and deliver to each requestor\n\t\t// 2) deliver errors to any remaining requestors for which we don't have an instance\n\t\trequestIdx := -1\n\t\tfor _, reservation := range output.Instances {\n\t\t\tfor _, instanceID := range reservation.InstanceIds {\n\t\t\t\trequestIdx++\n\t\t\t\tif requestIdx >= len(inputs) {\n\t\t\t\t\tlog.FromContext(ctx).Error(serrors.Wrap(fmt.Errorf(\"received more instances than requested, ignoring instance\"), \"instance-id\", instanceID), \"received error while batching\")\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tresults = append(results, Result[ec2.CreateFleetOutput]{\n\t\t\t\t\tOutput: &ec2.CreateFleetOutput{\n\t\t\t\t\t\tFleetId: output.FleetId,\n\t\t\t\t\t\tErrors:  output.Errors,\n\t\t\t\t\t\tInstances: []ec2types.CreateFleetInstance{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tInstanceIds:                []string{instanceID},\n\t\t\t\t\t\t\t\tInstanceType:               reservation.InstanceType,\n\t\t\t\t\t\t\t\tLaunchTemplateAndOverrides: reservation.LaunchTemplateAndOverrides,\n\t\t\t\t\t\t\t\tLifecycle:                  reservation.Lifecycle,\n\t\t\t\t\t\t\t\tPlatform:                   reservation.Platform,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tResultMetadata: output.ResultMetadata,\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t\tif requestIdx != len(inputs) {\n\t\t\t// we should receive some sort of error, but just in case\n\t\t\tif len(output.Errors) == 0 {\n\t\t\t\toutput.Errors = append(output.Errors, ec2types.CreateFleetError{\n\t\t\t\t\tErrorCode:    aws.String(\"too few instances returned\"),\n\t\t\t\t\tErrorMessage: aws.String(\"too few instances returned\"),\n\t\t\t\t})\n\t\t\t}\n\t\t\tfor i := requestIdx + 1; i < len(inputs); i++ {\n\t\t\t\tresults = append(results, Result[ec2.CreateFleetOutput]{\n\t\t\t\t\tOutput: &ec2.CreateFleetOutput{\n\t\t\t\t\t\tErrors:         output.Errors,\n\t\t\t\t\t\tResultMetadata: output.ResultMetadata,\n\t\t\t\t\t}})\n\t\t\t}\n\t\t}\n\t\treturn results\n\t}\n}\n"
  },
  {
    "path": "pkg/batcher/createfleet_test.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage batcher_test\n\nimport (\n\t\"sync\"\n\t\"sync/atomic\"\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go-v2/aws\"\n\t\"github.com/aws/aws-sdk-go-v2/service/ec2\"\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\t\"github.com/samber/lo\"\n\n\t\"github.com/aws/karpenter-provider-aws/pkg/batcher\"\n\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n)\n\nvar _ = Describe(\"CreateFleet Batching\", func() {\n\tvar cfb *batcher.CreateFleetBatcher\n\n\tBeforeEach(func() {\n\t\tfakeEC2API.Reset()\n\t\tcfb = batcher.NewCreateFleetBatcher(ctx, fakeEC2API)\n\t})\n\n\tIt(\"should batch the same inputs into a single call\", func() {\n\t\tinput := &ec2.CreateFleetInput{\n\t\t\tLaunchTemplateConfigs: []ec2types.FleetLaunchTemplateConfigRequest{\n\t\t\t\t{\n\t\t\t\t\tLaunchTemplateSpecification: &ec2types.FleetLaunchTemplateSpecificationRequest{\n\t\t\t\t\t\tLaunchTemplateName: aws.String(\"my-template\"),\n\t\t\t\t\t},\n\t\t\t\t\tOverrides: []ec2types.FleetLaunchTemplateOverridesRequest{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tAvailabilityZone: aws.String(\"us-east-1\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tTargetCapacitySpecification: &ec2types.TargetCapacitySpecificationRequest{\n\t\t\t\tTotalTargetCapacity: aws.Int32(1),\n\t\t\t},\n\t\t}\n\t\tvar wg sync.WaitGroup\n\t\tvar receivedInstance int64\n\t\tfor range 5 {\n\t\t\twg.Go(func() {\n\t\t\t\tdefer GinkgoRecover()\n\t\t\t\trsp, err := cfb.CreateFleet(ctx, input)\n\t\t\t\tExpect(err).To(BeNil())\n\t\t\t\tinstanceIds := lo.Flatten(lo.Map(rsp.Instances, func(rsv ec2types.CreateFleetInstance, _ int) []string {\n\t\t\t\t\treturn rsv.InstanceIds\n\t\t\t\t}))\n\t\t\t\tatomic.AddInt64(&receivedInstance, 1)\n\t\t\t\tExpect(instanceIds).To(HaveLen(1))\n\t\t\t})\n\t\t}\n\t\twg.Wait()\n\n\t\tExpect(receivedInstance).To(BeNumerically(\"==\", 5))\n\t\tExpect(fakeEC2API.CreateFleetBehavior.CalledWithInput.Len()).To(BeNumerically(\"==\", 1))\n\t\tcall := fakeEC2API.CreateFleetBehavior.CalledWithInput.Pop()\n\t\tExpect(*call.TargetCapacitySpecification.TotalTargetCapacity).To(BeNumerically(\"==\", 5))\n\t})\n\tIt(\"should batch different inputs into multiple calls\", func() {\n\t\teast1input := &ec2.CreateFleetInput{\n\t\t\tLaunchTemplateConfigs: []ec2types.FleetLaunchTemplateConfigRequest{\n\t\t\t\t{\n\t\t\t\t\tLaunchTemplateSpecification: &ec2types.FleetLaunchTemplateSpecificationRequest{\n\t\t\t\t\t\tLaunchTemplateName: aws.String(\"my-template\"),\n\t\t\t\t\t},\n\t\t\t\t\tOverrides: []ec2types.FleetLaunchTemplateOverridesRequest{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tAvailabilityZone: aws.String(\"us-east-1\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tTargetCapacitySpecification: &ec2types.TargetCapacitySpecificationRequest{\n\t\t\t\tTotalTargetCapacity: aws.Int32(1),\n\t\t\t},\n\t\t}\n\t\teast2input := &ec2.CreateFleetInput{\n\t\t\tLaunchTemplateConfigs: []ec2types.FleetLaunchTemplateConfigRequest{\n\t\t\t\t{\n\t\t\t\t\tLaunchTemplateSpecification: &ec2types.FleetLaunchTemplateSpecificationRequest{\n\t\t\t\t\t\tLaunchTemplateName: aws.String(\"my-template\"),\n\t\t\t\t\t},\n\t\t\t\t\tOverrides: []ec2types.FleetLaunchTemplateOverridesRequest{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tAvailabilityZone: aws.String(\"us-east-2\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tTargetCapacitySpecification: &ec2types.TargetCapacitySpecificationRequest{\n\t\t\t\tTotalTargetCapacity: aws.Int32(1),\n\t\t\t},\n\t\t}\n\t\tvar wg sync.WaitGroup\n\t\tvar receivedInstance int64\n\t\tfor i := range 5 {\n\t\t\twg.Go(func() {\n\t\t\t\tdefer GinkgoRecover()\n\t\t\t\tinput := east1input\n\t\t\t\t// 4 instances for us-east-1 and 1 instance in us-east-2\n\t\t\t\tif i == 3 {\n\t\t\t\t\tinput = east2input\n\t\t\t\t}\n\t\t\t\trsp, err := cfb.CreateFleet(ctx, input)\n\t\t\t\tExpect(err).To(BeNil())\n\n\t\t\t\tinstanceIds := lo.Flatten(lo.Map(rsp.Instances, func(rsv ec2types.CreateFleetInstance, _ int) []string {\n\t\t\t\t\treturn rsv.InstanceIds\n\t\t\t\t}))\n\t\t\t\tatomic.AddInt64(&receivedInstance, 1)\n\t\t\t\tExpect(instanceIds).To(HaveLen(1))\n\t\t\t\ttime.Sleep(100 * time.Millisecond)\n\t\t\t})\n\t\t}\n\t\twg.Wait()\n\n\t\tExpect(receivedInstance).To(BeNumerically(\"==\", 5))\n\t\tExpect(fakeEC2API.CreateFleetBehavior.CalledWithInput.Len()).To(BeNumerically(\"==\", 2))\n\t\teast2Call := fakeEC2API.CreateFleetBehavior.CalledWithInput.Pop()\n\t\teast1Call := fakeEC2API.CreateFleetBehavior.CalledWithInput.Pop()\n\t\tif *east2Call.TargetCapacitySpecification.TotalTargetCapacity > *east1Call.TargetCapacitySpecification.TotalTargetCapacity {\n\t\t\teast2Call, east1Call = east1Call, east2Call\n\t\t}\n\t\tExpect(*east2Call.TargetCapacitySpecification.TotalTargetCapacity).To(BeNumerically(\"==\", 1))\n\t\tExpect(*east2Call.LaunchTemplateConfigs[0].Overrides[0].AvailabilityZone).To(Equal(\"us-east-2\"))\n\t\tExpect(*east1Call.TargetCapacitySpecification.TotalTargetCapacity).To(BeNumerically(\"==\", 4))\n\t\tExpect(*east1Call.LaunchTemplateConfigs[0].Overrides[0].AvailabilityZone).To(Equal(\"us-east-1\"))\n\t})\n\tIt(\"should return any errors to callers\", func() {\n\t\tinput := &ec2.CreateFleetInput{\n\t\t\tLaunchTemplateConfigs: []ec2types.FleetLaunchTemplateConfigRequest{\n\t\t\t\t{\n\t\t\t\t\tLaunchTemplateSpecification: &ec2types.FleetLaunchTemplateSpecificationRequest{\n\t\t\t\t\t\tLaunchTemplateName: aws.String(\"my-template\"),\n\t\t\t\t\t},\n\t\t\t\t\tOverrides: []ec2types.FleetLaunchTemplateOverridesRequest{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tAvailabilityZone: aws.String(\"us-east-1\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tTargetCapacitySpecification: &ec2types.TargetCapacitySpecificationRequest{\n\t\t\t\tTotalTargetCapacity: aws.Int32(1),\n\t\t\t},\n\t\t}\n\n\t\tfakeEC2API.CreateFleetBehavior.Output.Set(&ec2.CreateFleetOutput{\n\t\t\tErrors: []ec2types.CreateFleetError{\n\t\t\t\t{\n\t\t\t\t\tErrorCode:    aws.String(\"some-error\"),\n\t\t\t\t\tErrorMessage: aws.String(\"some-error\"),\n\t\t\t\t\tLaunchTemplateAndOverrides: &ec2types.LaunchTemplateAndOverridesResponse{\n\t\t\t\t\t\tLaunchTemplateSpecification: &ec2types.FleetLaunchTemplateSpecification{\n\t\t\t\t\t\t\tLaunchTemplateName: aws.String(\"my-template\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tOverrides: &ec2types.FleetLaunchTemplateOverrides{\n\t\t\t\t\t\t\tAvailabilityZone: aws.String(\"us-east-1\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tErrorCode:    aws.String(\"some-other-error\"),\n\t\t\t\t\tErrorMessage: aws.String(\"some-other-error\"),\n\t\t\t\t\tLaunchTemplateAndOverrides: &ec2types.LaunchTemplateAndOverridesResponse{\n\t\t\t\t\t\tLaunchTemplateSpecification: &ec2types.FleetLaunchTemplateSpecification{\n\t\t\t\t\t\t\tLaunchTemplateName: aws.String(\"my-template\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tOverrides: &ec2types.FleetLaunchTemplateOverrides{\n\t\t\t\t\t\t\tAvailabilityZone: aws.String(\"us-east-1\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tFleetId: aws.String(\"some-id\"),\n\t\t\tInstances: []ec2types.CreateFleetInstance{\n\t\t\t\t{\n\t\t\t\t\tInstanceIds:                []string{\"id-1\", \"id-2\", \"id-3\", \"id-4\", \"id-5\"},\n\t\t\t\t\tInstanceType:               \"\",\n\t\t\t\t\tLaunchTemplateAndOverrides: nil,\n\t\t\t\t\tLifecycle:                  \"\",\n\t\t\t\t\tPlatform:                   \"\",\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tvar wg sync.WaitGroup\n\t\tvar receivedInstance int64\n\t\tvar numErrors int64\n\t\tfor range 5 {\n\t\t\twg.Go(func() {\n\t\t\t\tdefer GinkgoRecover()\n\t\t\t\trsp, err := cfb.CreateFleet(ctx, input)\n\t\t\t\tExpect(err).To(BeNil())\n\n\t\t\t\tif len(rsp.Errors) != 0 {\n\t\t\t\t\t// should receive errors for each caller\n\t\t\t\t\tatomic.AddInt64(&numErrors, 1)\n\t\t\t\t}\n\n\t\t\t\tinstanceIds := lo.Flatten(lo.Map(rsp.Instances, func(rsv ec2types.CreateFleetInstance, _ int) []string {\n\t\t\t\t\treturn rsv.InstanceIds\n\t\t\t\t}))\n\t\t\t\tatomic.AddInt64(&receivedInstance, 1)\n\t\t\t\tExpect(instanceIds).To(HaveLen(1))\n\t\t\t})\n\t\t}\n\t\twg.Wait()\n\n\t\tExpect(fakeEC2API.CreateFleetBehavior.CalledWithInput.Len()).To(BeNumerically(\"==\", 1))\n\t\tcall := fakeEC2API.CreateFleetBehavior.CalledWithInput.Pop()\n\t\t// requested 5 instances\n\t\tExpect(*call.TargetCapacitySpecification.TotalTargetCapacity).To(BeNumerically(\"==\", 5))\n\t\t// but got three instances and two failures\n\t\tExpect(receivedInstance).To(BeNumerically(\"==\", 5))\n\t\tExpect(numErrors).To(BeNumerically(\"==\", 5))\n\t})\n\tIt(\"should handle partial fulfillment\", func() {\n\t\tinput := &ec2.CreateFleetInput{\n\t\t\tLaunchTemplateConfigs: []ec2types.FleetLaunchTemplateConfigRequest{\n\t\t\t\t{\n\t\t\t\t\tLaunchTemplateSpecification: &ec2types.FleetLaunchTemplateSpecificationRequest{\n\t\t\t\t\t\tLaunchTemplateName: aws.String(\"my-template\"),\n\t\t\t\t\t},\n\t\t\t\t\tOverrides: []ec2types.FleetLaunchTemplateOverridesRequest{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tAvailabilityZone: aws.String(\"us-east-1\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tTargetCapacitySpecification: &ec2types.TargetCapacitySpecificationRequest{\n\t\t\t\tTotalTargetCapacity: aws.Int32(1),\n\t\t\t},\n\t\t}\n\n\t\tfakeEC2API.CreateFleetBehavior.Output.Set(&ec2.CreateFleetOutput{\n\t\t\tErrors: []ec2types.CreateFleetError{\n\t\t\t\t{\n\t\t\t\t\tErrorCode:    aws.String(\"some-error\"),\n\t\t\t\t\tErrorMessage: aws.String(\"some-error\"),\n\t\t\t\t\tLaunchTemplateAndOverrides: &ec2types.LaunchTemplateAndOverridesResponse{\n\t\t\t\t\t\tLaunchTemplateSpecification: &ec2types.FleetLaunchTemplateSpecification{\n\t\t\t\t\t\t\tLaunchTemplateName: aws.String(\"my-template\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tOverrides: &ec2types.FleetLaunchTemplateOverrides{\n\t\t\t\t\t\t\tAvailabilityZone: aws.String(\"us-east-1\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tErrorCode:    aws.String(\"some-other-error\"),\n\t\t\t\t\tErrorMessage: aws.String(\"some-other-error\"),\n\t\t\t\t\tLaunchTemplateAndOverrides: &ec2types.LaunchTemplateAndOverridesResponse{\n\t\t\t\t\t\tLaunchTemplateSpecification: &ec2types.FleetLaunchTemplateSpecification{\n\t\t\t\t\t\t\tLaunchTemplateName: aws.String(\"my-template\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tOverrides: &ec2types.FleetLaunchTemplateOverrides{\n\t\t\t\t\t\t\tAvailabilityZone: aws.String(\"us-east-1\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tFleetId: aws.String(\"some-id\"),\n\t\t\tInstances: []ec2types.CreateFleetInstance{\n\t\t\t\t{\n\t\t\t\t\tInstanceIds:                []string{\"id-1\", \"id-2\", \"id-3\"},\n\t\t\t\t\tInstanceType:               \"\",\n\t\t\t\t\tLaunchTemplateAndOverrides: nil,\n\t\t\t\t\tLifecycle:                  \"\",\n\t\t\t\t\tPlatform:                   \"\",\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tvar wg sync.WaitGroup\n\t\tvar receivedInstance int64\n\t\tvar numErrors int64\n\t\tfor range 5 {\n\t\t\twg.Go(func() {\n\t\t\t\tdefer GinkgoRecover()\n\t\t\t\trsp, err := cfb.CreateFleet(ctx, input)\n\t\t\t\t// partial fulfillment shouldn't cause an error at the CreateFleet call\n\t\t\t\tExpect(err).To(BeNil())\n\n\t\t\t\tif len(rsp.Errors) != 0 {\n\t\t\t\t\tatomic.AddInt64(&numErrors, 1)\n\t\t\t\t}\n\n\t\t\t\tinstanceIds := lo.Flatten(lo.Map(rsp.Instances, func(rsv ec2types.CreateFleetInstance, _ int) []string {\n\t\t\t\t\treturn rsv.InstanceIds\n\t\t\t\t}))\n\t\t\t\tExpect(instanceIds).To(Or(HaveLen(0), HaveLen(1)))\n\t\t\t\tif len(instanceIds) == 1 {\n\t\t\t\t\tatomic.AddInt64(&receivedInstance, 1)\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t\twg.Wait()\n\n\t\tExpect(fakeEC2API.CreateFleetBehavior.CalledWithInput.Len()).To(BeNumerically(\"==\", 1))\n\t\tcall := fakeEC2API.CreateFleetBehavior.CalledWithInput.Pop()\n\t\t// requested 5 instances\n\t\tExpect(*call.TargetCapacitySpecification.TotalTargetCapacity).To(BeNumerically(\"==\", 5))\n\t\t// but got three instances and the errors were returned to all five calls\n\t\tExpect(receivedInstance).To(BeNumerically(\"==\", 3))\n\t\tExpect(numErrors).To(BeNumerically(\"==\", 5))\n\t})\n})\n"
  },
  {
    "path": "pkg/batcher/describeinstances.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage batcher\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"sync\"\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go-v2/service/ec2\"\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\t\"github.com/awslabs/operatorpkg/serrors\"\n\t\"github.com/mitchellh/hashstructure/v2\"\n\t\"github.com/samber/lo\"\n\t\"k8s.io/apimachinery/pkg/util/sets\"\n\t\"sigs.k8s.io/controller-runtime/pkg/log\"\n\n\tsdk \"github.com/aws/karpenter-provider-aws/pkg/aws\"\n)\n\ntype DescribeInstancesBatcher struct {\n\tbatcher *Batcher[ec2.DescribeInstancesInput, ec2.DescribeInstancesOutput]\n}\n\nfunc NewDescribeInstancesBatcher(ctx context.Context, ec2api sdk.EC2API) *DescribeInstancesBatcher {\n\toptions := Options[ec2.DescribeInstancesInput, ec2.DescribeInstancesOutput]{\n\t\tName:          \"describe_instances\",\n\t\tIdleTimeout:   100 * time.Millisecond,\n\t\tMaxTimeout:    1 * time.Second,\n\t\tMaxItems:      500,\n\t\tRequestHasher: FilterHasher,\n\t\tBatchExecutor: execDescribeInstancesBatch(ec2api),\n\t}\n\treturn &DescribeInstancesBatcher{batcher: NewBatcher(ctx, options)}\n}\n\nfunc (b *DescribeInstancesBatcher) DescribeInstances(ctx context.Context, describeInstancesInput *ec2.DescribeInstancesInput) (*ec2.DescribeInstancesOutput, error) {\n\tif len(describeInstancesInput.InstanceIds) != 1 {\n\t\treturn nil, serrors.Wrap(fmt.Errorf(\"expected to receive a single instance only\"), \"instance-count\", len(describeInstancesInput.InstanceIds))\n\t}\n\tresult := b.batcher.Add(ctx, describeInstancesInput)\n\treturn result.Output, result.Err\n}\n\nfunc FilterHasher(ctx context.Context, input *ec2.DescribeInstancesInput) uint64 {\n\thash, err := hashstructure.Hash(input.Filters, hashstructure.FormatV2, &hashstructure.HashOptions{SlicesAsSets: true})\n\tif err != nil {\n\t\tlog.FromContext(ctx).Error(err, \"failed hashing input filters\")\n\t}\n\treturn hash\n}\n\nfunc execDescribeInstancesBatch(ec2api sdk.EC2API) BatchExecutor[ec2.DescribeInstancesInput, ec2.DescribeInstancesOutput] {\n\treturn func(ctx context.Context, inputs []*ec2.DescribeInstancesInput) []Result[ec2.DescribeInstancesOutput] {\n\t\tresults := make([]Result[ec2.DescribeInstancesOutput], len(inputs))\n\t\taggregatedInput := prepareAggregatedInput(inputs)\n\n\t\tmissingInstanceIDs := sets.NewString(lo.Map(aggregatedInput.InstanceIds, func(i string, _ int) string { return i })...)\n\t\tpaginator := ec2.NewDescribeInstancesPaginator(ec2api, aggregatedInput)\n\n\t\tfor paginator.HasMorePages() {\n\t\t\toutput, err := paginator.NextPage(ctx)\n\t\t\tif err != nil {\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\tfor _, r := range output.Reservations {\n\t\t\t\tfor _, instance := range r.Instances {\n\t\t\t\t\tmissingInstanceIDs.Delete(*instance.InstanceId)\n\t\t\t\t\t// Find all indexes where we are requesting this instance and populate with the result\n\t\t\t\t\tfor reqID := range inputs {\n\t\t\t\t\t\tif inputs[reqID].InstanceIds[0] == *instance.InstanceId {\n\t\t\t\t\t\t\tinst := instance\n\t\t\t\t\t\t\tresults[reqID] = Result[ec2.DescribeInstancesOutput]{Output: &ec2.DescribeInstancesOutput{\n\t\t\t\t\t\t\t\tReservations: []ec2types.Reservation{{\n\t\t\t\t\t\t\t\t\tOwnerId:       r.OwnerId,\n\t\t\t\t\t\t\t\t\tRequesterId:   r.RequesterId,\n\t\t\t\t\t\t\t\t\tReservationId: r.ReservationId,\n\t\t\t\t\t\t\t\t\tInstances:     []ec2types.Instance{inst},\n\t\t\t\t\t\t\t\t}},\n\t\t\t\t\t\t\t\tResultMetadata: output.ResultMetadata,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// If we have any missing instanceIDs, we need to describe them individually\n\n\t\t// Some or all instances may have failed to be described due to eventual consistency or transient zonal issue.\n\t\t// A single instance lookup failure can result in all of an availability zone's instances failing to describe.\n\t\t// So we try to describe them individually now. This should be rare and only results in a handfull of extra calls per batch than without batching.\n\t\tvar wg sync.WaitGroup\n\t\tfor instanceID := range missingInstanceIDs {\n\t\t\twg.Go(func() {\n\t\t\t\t// try to execute separately\n\t\t\t\tout, err := ec2api.DescribeInstances(ctx, &ec2.DescribeInstancesInput{\n\t\t\t\t\tFilters:     aggregatedInput.Filters,\n\t\t\t\t\tInstanceIds: []string{instanceID},\n\t\t\t\t})\n\n\t\t\t\t// Find all indexes where we are requesting this instance and populate with the result\n\t\t\t\tfor reqID := range inputs {\n\t\t\t\t\tif inputs[reqID].InstanceIds[0] == instanceID {\n\t\t\t\t\t\tresults[reqID] = Result[ec2.DescribeInstancesOutput]{Output: out, Err: err}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t\twg.Wait()\n\t\treturn results\n\t}\n}\n\nfunc prepareAggregatedInput(inputs []*ec2.DescribeInstancesInput) *ec2.DescribeInstancesInput {\n\taggregatedInput := inputs[0]\n\n\t// aggregate instanceIDs into 1 input\n\tfor _, input := range inputs[1:] {\n\t\taggregatedInput.InstanceIds = append(aggregatedInput.InstanceIds, input.InstanceIds...)\n\t}\n\n\treturn aggregatedInput\n}\n"
  },
  {
    "path": "pkg/batcher/describeinstances_test.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage batcher_test\n\nimport (\n\t\"fmt\"\n\t\"sync\"\n\t\"sync/atomic\"\n\n\t\"github.com/aws/aws-sdk-go-v2/aws\"\n\t\"github.com/aws/aws-sdk-go-v2/service/ec2\"\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\n\t\"github.com/aws/karpenter-provider-aws/pkg/batcher\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/fake\"\n\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n)\n\nvar _ = Describe(\"DescribeInstances Batcher\", func() {\n\tvar cfb *batcher.DescribeInstancesBatcher\n\n\tBeforeEach(func() {\n\t\tfakeEC2API.Reset()\n\t\tcfb = batcher.NewDescribeInstancesBatcher(ctx, fakeEC2API)\n\t})\n\n\tIt(\"should batch input into a single call\", func() {\n\t\tinstanceIDs := []string{\"i-1\", \"i-2\", \"i-3\", \"i-4\", \"i-5\"}\n\t\tfor _, id := range instanceIDs {\n\t\t\tfakeEC2API.Instances.Store(id, ec2types.Instance{InstanceId: aws.String(id)})\n\t\t}\n\n\t\tvar wg sync.WaitGroup\n\t\tvar receivedInstance int64\n\t\tfor _, instanceID := range instanceIDs {\n\t\t\twg.Go(func() {\n\t\t\t\tdefer GinkgoRecover()\n\t\t\t\trsp, err := cfb.DescribeInstances(ctx, &ec2.DescribeInstancesInput{\n\t\t\t\t\tInstanceIds: []string{instanceID},\n\t\t\t\t})\n\t\t\t\tExpect(err).To(BeNil())\n\t\t\t\tatomic.AddInt64(&receivedInstance, 1)\n\t\t\t\tExpect(rsp.Reservations).To(HaveLen(1))\n\t\t\t\tExpect(rsp.Reservations[0].Instances).To(HaveLen(1))\n\t\t\t})\n\t\t}\n\t\twg.Wait()\n\t\tExpect(receivedInstance).To(BeNumerically(\"==\", len(instanceIDs)))\n\t\tExpect(fakeEC2API.DescribeInstancesBehavior.CalledWithInput.Len()).To(BeNumerically(\"==\", 1))\n\t\tcall := fakeEC2API.DescribeInstancesBehavior.CalledWithInput.Pop()\n\t\tExpect(len(call.InstanceIds)).To(BeNumerically(\"==\", len(instanceIDs)))\n\t})\n\tIt(\"should batch input correctly when receiving multiple calls with the same instance id\", func() {\n\t\tinstanceIDs := []string{\"i-1\", \"i-1\", \"i-1\", \"i-2\", \"i-2\"}\n\t\tfor _, id := range instanceIDs {\n\t\t\tfakeEC2API.Instances.Store(id, ec2types.Instance{InstanceId: aws.String(id)})\n\t\t}\n\n\t\tvar wg sync.WaitGroup\n\t\tvar receivedInstance int32\n\t\tfor _, instanceID := range instanceIDs {\n\t\t\twg.Go(func() {\n\t\t\t\tdefer GinkgoRecover()\n\t\t\t\trsp, err := cfb.DescribeInstances(ctx, &ec2.DescribeInstancesInput{\n\t\t\t\t\tInstanceIds: []string{instanceID},\n\t\t\t\t})\n\t\t\t\tExpect(err).To(BeNil())\n\t\t\t\tatomic.AddInt32(&receivedInstance, 1)\n\t\t\t\tExpect(rsp.Reservations).To(HaveLen(1))\n\t\t\t\tExpect(rsp.Reservations[0].Instances).To(HaveLen(1))\n\t\t\t})\n\n\t\t}\n\t\twg.Wait()\n\n\t\tExpect(receivedInstance).To(BeNumerically(\"==\", len(instanceIDs)))\n\t\tExpect(fakeEC2API.DescribeInstancesBehavior.CalledWithInput.Len()).To(BeNumerically(\"==\", 1))\n\t\tcall := fakeEC2API.DescribeInstancesBehavior.CalledWithInput.Pop()\n\t\tExpect(len(call.InstanceIds)).To(BeNumerically(\"==\", len(instanceIDs)))\n\t})\n\tIt(\"should handle partial terminations on batched call and recover with individual requests\", func() {\n\t\tinstanceIDs := []string{\"i-1\", \"i-2\", \"i-3\"}\n\t\t// Output with only the first Instance\n\t\tfakeEC2API.DescribeInstancesBehavior.Output.Set(&ec2.DescribeInstancesOutput{\n\t\t\tReservations: []ec2types.Reservation{\n\t\t\t\t{\n\t\t\t\t\tInstances: []ec2types.Instance{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tInstanceId: aws.String(\"i-1\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\trunningFilter := ec2types.Filter{\n\t\t\tName:   aws.String(\"instance-state-name\"),\n\t\t\tValues: []string{string(ec2types.InstanceStateNameRunning)},\n\t\t}\n\t\tvar wg sync.WaitGroup\n\t\tvar receivedInstance int32\n\t\tvar numUnfulfilled int32\n\t\tfor _, instanceID := range instanceIDs {\n\t\t\twg.Go(func() {\n\t\t\t\tdefer GinkgoRecover()\n\t\t\t\trsp, err := cfb.DescribeInstances(ctx, &ec2.DescribeInstancesInput{\n\t\t\t\t\tInstanceIds: []string{instanceID},\n\t\t\t\t\tFilters:     []ec2types.Filter{runningFilter},\n\t\t\t\t})\n\t\t\t\tExpect(err).To(BeNil())\n\t\t\t\tif len(rsp.Reservations) > 0 {\n\t\t\t\t\tExpect(len(rsp.Reservations[0].Instances)).To(BeNumerically(\"<=\", 1))\n\t\t\t\t\tif len(rsp.Reservations[0].Instances) == 1 {\n\t\t\t\t\t\tatomic.AddInt32(&receivedInstance, 1)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tatomic.AddInt32(&numUnfulfilled, 1)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t\twg.Wait()\n\t\t// should execute the batched call and then one for each that failed in the batched request\n\t\tExpect(fakeEC2API.DescribeInstancesBehavior.CalledWithInput.Len()).To(BeNumerically(\"==\", 3))\n\t\tlastCall := fakeEC2API.DescribeInstancesBehavior.CalledWithInput.Pop()\n\t\tExpect(len(lastCall.InstanceIds)).To(BeNumerically(\"==\", 1))\n\t\tExpect(len(lastCall.Filters)).To(BeNumerically(\"==\", 1))\n\t\tExpect(*lastCall.Filters[0].Name).To(Equal(\"instance-state-name\"))\n\t\tnextToLastCall := fakeEC2API.DescribeInstancesBehavior.CalledWithInput.Pop()\n\t\tExpect(len(nextToLastCall.InstanceIds)).To(BeNumerically(\"==\", 1))\n\t\tExpect(len(nextToLastCall.Filters)).To(BeNumerically(\"==\", 1))\n\t\tExpect(*lastCall.Filters[0].Name).To(Equal(\"instance-state-name\"))\n\t\tfirstCall := fakeEC2API.DescribeInstancesBehavior.CalledWithInput.Pop()\n\t\tExpect(len(firstCall.InstanceIds)).To(BeNumerically(\"==\", 3))\n\t\tExpect(len(firstCall.Filters)).To(BeNumerically(\"==\", 1))\n\t\tExpect(*lastCall.Filters[0].Name).To(Equal(\"instance-state-name\"))\n\t\tExpect(receivedInstance).To(BeNumerically(\"==\", 3))\n\t\tExpect(numUnfulfilled).To(BeNumerically(\"==\", 0))\n\t\tExpect(firstCall.MaxResults).To(BeNil())\n\t})\n\tIt(\"should return errors to all callers when erroring on the batched call\", func() {\n\t\tinstanceIDs := []string{\"i-1\", \"i-2\", \"i-3\", \"i-4\", \"i-5\"}\n\t\tfakeEC2API.DescribeInstancesBehavior.Error.Set(fmt.Errorf(\"error\"), fake.MaxCalls(6))\n\t\tvar wg sync.WaitGroup\n\t\tfor _, instanceID := range instanceIDs {\n\t\t\twg.Go(func() {\n\t\t\t\tdefer GinkgoRecover()\n\t\t\t\t_, err := cfb.DescribeInstances(ctx, &ec2.DescribeInstancesInput{\n\t\t\t\t\tInstanceIds: []string{instanceID},\n\t\t\t\t})\n\t\t\t\tExpect(err).ToNot(BeNil())\n\t\t\t})\n\t\t}\n\t\twg.Wait()\n\t\t// We expect 6 calls since we do one full batched call and 5 individual since the batched call returns an error\n\t\tExpect(fakeEC2API.DescribeInstancesBehavior.Calls()).To(BeNumerically(\"==\", 6))\n\t})\n})\n"
  },
  {
    "path": "pkg/batcher/ec2api.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage batcher\n\nimport (\n\t\"context\"\n\n\tsdk \"github.com/aws/karpenter-provider-aws/pkg/aws\"\n)\n\ntype EC2API struct {\n\t*CreateFleetBatcher\n\t*DescribeInstancesBatcher\n\t*TerminateInstancesBatcher\n}\n\nfunc EC2(ctx context.Context, ec2api sdk.EC2API) *EC2API {\n\treturn &EC2API{\n\t\tCreateFleetBatcher:        NewCreateFleetBatcher(ctx, ec2api),\n\t\tDescribeInstancesBatcher:  NewDescribeInstancesBatcher(ctx, ec2api),\n\t\tTerminateInstancesBatcher: NewTerminateInstancesBatcher(ctx, ec2api),\n\t}\n}\n"
  },
  {
    "path": "pkg/batcher/metrics.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage batcher\n\nimport (\n\topmetrics \"github.com/awslabs/operatorpkg/metrics\"\n\t\"github.com/prometheus/client_golang/prometheus\"\n\tcrmetrics \"sigs.k8s.io/controller-runtime/pkg/metrics\"\n\n\t\"sigs.k8s.io/karpenter/pkg/metrics\"\n)\n\nconst (\n\tbatcherSubsystem = \"cloudprovider_batcher\"\n\tbatcherNameLabel = \"batcher\"\n)\n\n// SizeBuckets returns a []float64 of default threshold values for size histograms.\n// Each returned slice is new and may be modified without impacting other bucket definitions.\nfunc SizeBuckets() []float64 {\n\treturn []float64{1, 2, 4, 5, 10, 15, 20, 25, 30, 40, 50, 60, 70, 80, 90, 100, 125, 150, 175, 200,\n\t\t225, 250, 275, 300, 350, 400, 450, 500, 550, 600, 700, 800, 900, 1000}\n}\n\nvar (\n\tBatchWindowDuration = opmetrics.NewPrometheusHistogram(crmetrics.Registry, prometheus.HistogramOpts{\n\t\tNamespace: metrics.Namespace,\n\t\tSubsystem: batcherSubsystem,\n\t\tName:      \"batch_time_seconds\",\n\t\tHelp:      \"Duration of the batching window per batcher\",\n\t\tBuckets:   metrics.DurationBuckets(),\n\t}, []string{batcherNameLabel})\n\tBatchSize = opmetrics.NewPrometheusHistogram(crmetrics.Registry, prometheus.HistogramOpts{\n\t\tNamespace: metrics.Namespace,\n\t\tSubsystem: batcherSubsystem,\n\t\tName:      \"batch_size\",\n\t\tHelp:      \"Size of the request batch per batcher\",\n\t\tBuckets:   SizeBuckets(),\n\t}, []string{batcherNameLabel})\n)\n"
  },
  {
    "path": "pkg/batcher/suite_test.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage batcher_test\n\nimport (\n\t\"context\"\n\t\"sync/atomic\"\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/samber/lo\"\n\n\t\"sigs.k8s.io/karpenter/pkg/test\"\n\t\"sigs.k8s.io/karpenter/pkg/test/expectations\"\n\n\t\"github.com/aws/karpenter-provider-aws/pkg/batcher\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/fake\"\n\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n\t. \"sigs.k8s.io/karpenter/pkg/utils/testing\"\n)\n\nvar fakeEC2API *fake.EC2API\nvar ctx context.Context\n\nfunc TestAWS(t *testing.T) {\n\tctx = TestContextWithLogger(t)\n\tRegisterFailHandler(Fail)\n\tRunSpecs(t, \"Batcher\")\n}\n\nvar _ = BeforeSuite(func() {\n\tfakeEC2API = &fake.EC2API{}\n})\n\nvar _ = Describe(\"Batcher\", func() {\n\tvar cancelCtx context.Context\n\tvar cancel context.CancelFunc\n\tvar fakeBatcher *FakeBatcher\n\n\tBeforeEach(func() {\n\t\tcancelCtx, cancel = context.WithCancel(ctx)\n\t})\n\tAfterEach(func() {\n\t\t// Cancel the context to make sure that we properly clean-up\n\t\tcancel()\n\t})\n\tContext(\"Concurrency\", func() {\n\t\tIt(\"should limit the number of threads that run concurrently from the batcher\", func() {\n\t\t\t// This batcher will get canceled at the end of the test run\n\t\t\tfakeBatcher = NewFakeBatcher(cancelCtx, time.Minute, 100)\n\n\t\t\t// Generate 300 items that add to the batcher\n\t\t\tfor i := 0; i < 300; i++ {\n\t\t\t\tgo func() {\n\t\t\t\t\tfakeBatcher.batcher.Add(cancelCtx, lo.ToPtr(test.RandomName()))\n\t\t\t\t}()\n\t\t\t}\n\n\t\t\t// Check that we get to 100 threads, and we stay at 100 threads\n\t\t\tEventually(fakeBatcher.activeBatches.Load).Should(BeNumerically(\"==\", 100))\n\t\t\tConsistently(fakeBatcher.activeBatches.Load, time.Second*10).Should(BeNumerically(\"==\", 100))\n\t\t})\n\t\tIt(\"should process 300 items in parallel to get quicker batching\", func() {\n\t\t\t// This batcher will get canceled at the end of the test run\n\t\t\tfakeBatcher = NewFakeBatcher(cancelCtx, time.Second, 300)\n\n\t\t\t// Generate 300 items that add to the batcher\n\t\t\tfor i := 0; i < 300; i++ {\n\t\t\t\tgo func() {\n\t\t\t\t\tfakeBatcher.batcher.Add(cancelCtx, lo.ToPtr(test.RandomName()))\n\t\t\t\t}()\n\t\t\t}\n\n\t\t\tEventually(fakeBatcher.activeBatches.Load).Should(BeNumerically(\"==\", 300))\n\t\t\tEventually(fakeBatcher.completedBatches.Load, time.Second*3).Should(BeNumerically(\"==\", 300))\n\t\t})\n\t})\n\tContext(\"Metrics\", func() {\n\t\tIt(\"should create a batch_size metric when a batch is run\", func() {\n\t\t\t// This batcher will get canceled at the end of the test run\n\t\t\tfakeBatcher = NewFakeBatcher(cancelCtx, time.Minute, 100)\n\n\t\t\t// Generate 300 items that add to the batcher\n\t\t\tfor i := 0; i < 100; i++ {\n\t\t\t\tgo func() {\n\t\t\t\t\tfakeBatcher.batcher.Add(cancelCtx, lo.ToPtr(test.RandomName()))\n\t\t\t\t}()\n\t\t\t}\n\t\t\tEventually(fakeBatcher.activeBatches.Load).Should(BeNumerically(\"==\", 100))\n\n\t\t\tmetric, ok := expectations.FindMetricWithLabelValues(\"karpenter_cloudprovider_batcher_batch_size\", map[string]string{\n\t\t\t\t\"batcher\": \"fake\",\n\t\t\t})\n\t\t\tExpect(ok).To(BeTrue())\n\t\t\tExpect(metric.GetHistogram().GetSampleCount()).To(BeNumerically(\">=\", 100))\n\t\t})\n\t\tIt(\"should create a batch_window_duration metric when a batch is run\", func() {\n\t\t\t// This batcher will get canceled at the end of the test run\n\t\t\tfakeBatcher = NewFakeBatcher(cancelCtx, time.Minute, 100)\n\n\t\t\t// Generate 300 items that add to the batcher\n\t\t\tfor i := 0; i < 100; i++ {\n\t\t\t\tgo func() {\n\t\t\t\t\tfakeBatcher.batcher.Add(cancelCtx, lo.ToPtr(test.RandomName()))\n\t\t\t\t}()\n\t\t\t}\n\t\t\tEventually(fakeBatcher.activeBatches.Load).Should(BeNumerically(\"==\", 100))\n\n\t\t\t_, ok := expectations.FindMetricWithLabelValues(\"karpenter_cloudprovider_batcher_batch_time_seconds\", map[string]string{\n\t\t\t\t\"batcher\": \"fake\",\n\t\t\t})\n\t\t\tExpect(ok).To(BeTrue())\n\t\t})\n\t})\n})\n\n// FakeBatcher is a batcher with a mocked request that takes a long time to execute that also ref-counts the number\n// of active requests that are running at a given time\ntype FakeBatcher struct {\n\tactiveBatches    *atomic.Int64\n\tcompletedBatches *atomic.Int64\n\tbatcher          *batcher.Batcher[string, string]\n}\n\nfunc NewFakeBatcher(ctx context.Context, requestLength time.Duration, maxRequestWorkers int) *FakeBatcher {\n\tactiveBatches := &atomic.Int64{}\n\tcompletedBatches := &atomic.Int64{}\n\toptions := batcher.Options[string, string]{\n\t\tName:              \"fake\",\n\t\tIdleTimeout:       100 * time.Millisecond,\n\t\tMaxTimeout:        1 * time.Second,\n\t\tMaxRequestWorkers: maxRequestWorkers,\n\t\tRequestHasher:     batcher.DefaultHasher[string],\n\t\tBatchExecutor: func(ctx context.Context, items []*string) []batcher.Result[string] {\n\t\t\t// Keep a ref count of the number of batches that we are currently running\n\t\t\tactiveBatches.Add(1)\n\t\t\tdefer activeBatches.Add(-1)\n\t\t\tdefer completedBatches.Add(1)\n\n\t\t\t// Wait for an arbitrary request length while running this call\n\t\t\tselect {\n\t\t\tcase <-ctx.Done():\n\t\t\tcase <-time.After(requestLength):\n\t\t\t}\n\n\t\t\t// Return back request responses\n\t\t\treturn lo.Map(items, func(i *string, _ int) batcher.Result[string] {\n\t\t\t\treturn batcher.Result[string]{\n\t\t\t\t\tOutput: lo.ToPtr[string](\"\"),\n\t\t\t\t\tErr:    nil,\n\t\t\t\t}\n\t\t\t})\n\t\t},\n\t}\n\treturn &FakeBatcher{\n\t\tactiveBatches:    activeBatches,\n\t\tcompletedBatches: completedBatches,\n\t\tbatcher:          batcher.NewBatcher(ctx, options),\n\t}\n}\n"
  },
  {
    "path": "pkg/batcher/terminateinstances.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage batcher\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"sync\"\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go-v2/service/ec2\"\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\t\"github.com/awslabs/operatorpkg/serrors\"\n\t\"github.com/samber/lo\"\n\t\"k8s.io/apimachinery/pkg/util/sets\"\n\t\"sigs.k8s.io/controller-runtime/pkg/log\"\n\n\tsdk \"github.com/aws/karpenter-provider-aws/pkg/aws\"\n)\n\ntype TerminateInstancesBatcher struct {\n\tbatcher *Batcher[ec2.TerminateInstancesInput, ec2.TerminateInstancesOutput]\n}\n\nfunc NewTerminateInstancesBatcher(ctx context.Context, ec2api sdk.EC2API) *TerminateInstancesBatcher {\n\toptions := Options[ec2.TerminateInstancesInput, ec2.TerminateInstancesOutput]{\n\t\tName:          \"terminate_instances\",\n\t\tIdleTimeout:   100 * time.Millisecond,\n\t\tMaxTimeout:    1 * time.Second,\n\t\tMaxItems:      500,\n\t\tRequestHasher: OneBucketHasher[ec2.TerminateInstancesInput],\n\t\tBatchExecutor: execTerminateInstancesBatch(ec2api),\n\t}\n\treturn &TerminateInstancesBatcher{batcher: NewBatcher(ctx, options)}\n}\n\nfunc (b *TerminateInstancesBatcher) TerminateInstances(ctx context.Context, terminateInstancesInput *ec2.TerminateInstancesInput) (*ec2.TerminateInstancesOutput, error) {\n\tif len(terminateInstancesInput.InstanceIds) != 1 {\n\t\treturn nil, serrors.Wrap(fmt.Errorf(\"expected to receive a single instance only\"), \"instance-count\", len(terminateInstancesInput.InstanceIds))\n\t}\n\tresult := b.batcher.Add(ctx, terminateInstancesInput)\n\treturn result.Output, result.Err\n}\n\nfunc execTerminateInstancesBatch(ec2api sdk.EC2API) BatchExecutor[ec2.TerminateInstancesInput, ec2.TerminateInstancesOutput] {\n\treturn func(ctx context.Context, inputs []*ec2.TerminateInstancesInput) []Result[ec2.TerminateInstancesOutput] {\n\t\tresults := make([]Result[ec2.TerminateInstancesOutput], len(inputs))\n\t\tfirstInput := inputs[0]\n\n\t\t// aggregate instanceIDs into 1 input\n\t\tfor _, input := range inputs[1:] {\n\t\t\tfirstInput.InstanceIds = append(firstInput.InstanceIds, input.InstanceIds...)\n\t\t}\n\t\t// Create a set of all instance IDs\n\t\tstillRunning := sets.NewString(lo.Map(firstInput.InstanceIds, func(i string, _ int) string { return i })...)\n\n\t\t// Execute fully aggregated request\n\t\t// We don't care about the error here since we'll break up the batch upon any sort of failure\n\t\toutput, err := ec2api.TerminateInstances(ctx, firstInput)\n\t\tif err != nil {\n\t\t\tlog.FromContext(ctx).Error(err, \"failed terminating instances\")\n\t\t}\n\n\t\tif output == nil {\n\t\t\toutput = &ec2.TerminateInstancesOutput{}\n\t\t}\n\n\t\t// Check the fulfillment for partial or no fulfillment by checking for missing instance IDs or invalid instance states\n\t\tfor _, instanceStateChanges := range output.TerminatingInstances {\n\t\t\t// Remove all instances that successfully terminated and separate into distinct outputs\n\t\t\tif lo.Contains([]string{string(ec2types.InstanceStateNameShuttingDown), string(ec2types.InstanceStateNameTerminated)}, string(instanceStateChanges.CurrentState.Name)) {\n\t\t\t\tstillRunning.Delete(*instanceStateChanges.InstanceId)\n\n\t\t\t\t// Find all indexes where we are requesting this instance and populate with the result\n\t\t\t\tfor reqID := range inputs {\n\t\t\t\t\tif inputs[reqID].InstanceIds[0] == *instanceStateChanges.InstanceId {\n\t\t\t\t\t\tresults[reqID] = Result[ec2.TerminateInstancesOutput]{\n\t\t\t\t\t\t\tOutput: &ec2.TerminateInstancesOutput{\n\t\t\t\t\t\t\t\tTerminatingInstances: []ec2types.InstanceStateChange{{\n\t\t\t\t\t\t\t\t\tInstanceId:    instanceStateChanges.InstanceId,\n\t\t\t\t\t\t\t\t\tCurrentState:  instanceStateChanges.CurrentState,\n\t\t\t\t\t\t\t\t\tPreviousState: instanceStateChanges.PreviousState,\n\t\t\t\t\t\t\t\t}},\n\t\t\t\t\t\t\t\tResultMetadata: output.ResultMetadata,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Some or all instances may have failed to terminate due to instance protection or some other error.\n\t\t// A single instance failure can result in all of an availability zone's instances failing to terminate.\n\t\t// So we try to terminate them individually now. This should be rare and only results in 1 extra call per batch than without batching.\n\t\tvar wg sync.WaitGroup\n\t\tfor instanceID := range stillRunning {\n\t\t\twg.Go(func() {\n\t\t\t\t// try to execute separately\n\t\t\t\tout, err := ec2api.TerminateInstances(ctx, &ec2.TerminateInstancesInput{InstanceIds: []string{instanceID}})\n\n\t\t\t\t// Find all indexes where we are requesting this instance and populate with the result\n\t\t\t\tfor reqID := range inputs {\n\t\t\t\t\tif inputs[reqID].InstanceIds[0] == instanceID {\n\t\t\t\t\t\tresults[reqID] = Result[ec2.TerminateInstancesOutput]{Output: out, Err: err}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t\twg.Wait()\n\t\treturn results\n\t}\n}\n"
  },
  {
    "path": "pkg/batcher/terminateinstances_test.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage batcher_test\n\nimport (\n\t\"fmt\"\n\t\"sync\"\n\t\"sync/atomic\"\n\n\t\"github.com/aws/aws-sdk-go-v2/aws\"\n\t\"github.com/aws/aws-sdk-go-v2/service/ec2\"\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\n\t\"github.com/aws/karpenter-provider-aws/pkg/batcher\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/fake\"\n\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n)\n\nvar _ = Describe(\"TerminateInstances Batcher\", func() {\n\tvar cfb *batcher.TerminateInstancesBatcher\n\n\tBeforeEach(func() {\n\t\tfakeEC2API.Reset()\n\t\tcfb = batcher.NewTerminateInstancesBatcher(ctx, fakeEC2API)\n\t})\n\n\tIt(\"should batch input into a single call\", func() {\n\t\tinstanceIDs := []string{\"i-1\", \"i-2\", \"i-3\", \"i-4\", \"i-5\"}\n\t\tfor _, id := range instanceIDs {\n\t\t\tfakeEC2API.Instances.Store(id, ec2types.Instance{})\n\t\t}\n\n\t\tvar wg sync.WaitGroup\n\t\tvar receivedInstance int64\n\t\tfor _, instanceID := range instanceIDs {\n\t\t\twg.Go(func() {\n\t\t\t\tdefer GinkgoRecover()\n\t\t\t\trsp, err := cfb.TerminateInstances(ctx, &ec2.TerminateInstancesInput{\n\t\t\t\t\tInstanceIds: []string{instanceID},\n\t\t\t\t})\n\t\t\t\tExpect(err).To(BeNil())\n\t\t\t\tatomic.AddInt64(&receivedInstance, 1)\n\t\t\t\tExpect(rsp.TerminatingInstances).To(HaveLen(1))\n\t\t\t})\n\t\t}\n\t\twg.Wait()\n\n\t\tExpect(receivedInstance).To(BeNumerically(\"==\", len(instanceIDs)))\n\t\tExpect(fakeEC2API.TerminateInstancesBehavior.CalledWithInput.Len()).To(BeNumerically(\"==\", 1))\n\t\tcall := fakeEC2API.TerminateInstancesBehavior.CalledWithInput.Pop()\n\t\tExpect(len(call.InstanceIds)).To(BeNumerically(\"==\", len(instanceIDs)))\n\t})\n\tIt(\"should batch input correctly when receiving multiple calls with the same instance id\", func() {\n\t\tinstanceIDs := []string{\"i-1\", \"i-1\", \"i-1\", \"i-2\", \"i-2\"}\n\t\tfor _, id := range instanceIDs {\n\t\t\tfakeEC2API.Instances.Store(id, ec2types.Instance{})\n\t\t}\n\n\t\tvar wg sync.WaitGroup\n\t\tvar receivedInstance int64\n\t\tfor _, instanceID := range instanceIDs {\n\t\t\twg.Go(func() {\n\t\t\t\tdefer GinkgoRecover()\n\t\t\t\trsp, err := cfb.TerminateInstances(ctx, &ec2.TerminateInstancesInput{\n\t\t\t\t\tInstanceIds: []string{instanceID},\n\t\t\t\t})\n\t\t\t\tExpect(err).To(BeNil())\n\t\t\t\tatomic.AddInt64(&receivedInstance, 1)\n\t\t\t\tExpect(rsp.TerminatingInstances).To(HaveLen(1))\n\t\t\t})\n\t\t}\n\t\twg.Wait()\n\n\t\tExpect(receivedInstance).To(BeNumerically(\"==\", len(instanceIDs)))\n\t\tExpect(fakeEC2API.TerminateInstancesBehavior.CalledWithInput.Len()).To(BeNumerically(\"==\", 1))\n\t\tcall := fakeEC2API.TerminateInstancesBehavior.CalledWithInput.Pop()\n\t\tExpect(len(call.InstanceIds)).To(BeNumerically(\"==\", len(instanceIDs)))\n\t})\n\tIt(\"should handle partial terminations on batched call and recover with individual requests\", func() {\n\t\tinstanceIDs := []string{\"i-1\", \"i-2\", \"i-3\"}\n\t\t// Output with only the first Terminating Instance\n\t\tfakeEC2API.TerminateInstancesBehavior.Output.Set(&ec2.TerminateInstancesOutput{\n\t\t\tTerminatingInstances: []ec2types.InstanceStateChange{\n\t\t\t\t{\n\t\t\t\t\tPreviousState: &ec2types.InstanceState{Name: ec2types.InstanceStateNameRunning, Code: aws.Int32(16)},\n\t\t\t\t\tCurrentState:  &ec2types.InstanceState{Name: ec2types.InstanceStateNameShuttingDown, Code: aws.Int32(32)},\n\t\t\t\t\tInstanceId:    aws.String(instanceIDs[0]),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tvar wg sync.WaitGroup\n\t\tvar receivedInstance int64\n\t\tvar numUnfulfilled int64\n\t\tfor _, instanceID := range instanceIDs {\n\t\t\twg.Go(func() {\n\t\t\t\tdefer GinkgoRecover()\n\t\t\t\trsp, err := cfb.TerminateInstances(ctx, &ec2.TerminateInstancesInput{\n\t\t\t\t\tInstanceIds: []string{instanceID},\n\t\t\t\t})\n\t\t\t\tExpect(err).To(BeNil())\n\t\t\t\tExpect(len(rsp.TerminatingInstances)).To(BeNumerically(\"<=\", 1))\n\t\t\t\tif len(rsp.TerminatingInstances) == 0 {\n\t\t\t\t\tatomic.AddInt64(&numUnfulfilled, 1)\n\t\t\t\t} else {\n\t\t\t\t\tatomic.AddInt64(&receivedInstance, 1)\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t\twg.Wait()\n\n\t\t// should execute the batched call and then one for each that failed in the batched request\n\t\tExpect(fakeEC2API.TerminateInstancesBehavior.CalledWithInput.Len()).To(BeNumerically(\"==\", 3))\n\t\tlastCall := fakeEC2API.TerminateInstancesBehavior.CalledWithInput.Pop()\n\t\tExpect(len(lastCall.InstanceIds)).To(BeNumerically(\"==\", 1))\n\t\tnextToLastCall := fakeEC2API.TerminateInstancesBehavior.CalledWithInput.Pop()\n\t\tExpect(len(nextToLastCall.InstanceIds)).To(BeNumerically(\"==\", 1))\n\t\tfirstCall := fakeEC2API.TerminateInstancesBehavior.CalledWithInput.Pop()\n\t\tExpect(len(firstCall.InstanceIds)).To(BeNumerically(\"==\", 3))\n\t\tExpect(receivedInstance).To(BeNumerically(\"==\", 3))\n\t\tExpect(numUnfulfilled).To(BeNumerically(\"==\", 0))\n\t})\n\tIt(\"should return errors to all callers when erroring on the batched call\", func() {\n\t\tinstanceIDs := []string{\"i-1\", \"i-2\", \"i-3\", \"i-4\", \"i-5\"}\n\t\tfakeEC2API.TerminateInstancesBehavior.Error.Set(fmt.Errorf(\"error\"), fake.MaxCalls(6))\n\t\tvar wg sync.WaitGroup\n\t\tfor _, instanceID := range instanceIDs {\n\t\t\twg.Go(func() {\n\t\t\t\tdefer GinkgoRecover()\n\t\t\t\t_, err := cfb.TerminateInstances(ctx, &ec2.TerminateInstancesInput{\n\t\t\t\t\tInstanceIds: []string{instanceID},\n\t\t\t\t})\n\t\t\t\tExpect(err).ToNot(BeNil())\n\t\t\t})\n\t\t}\n\t\twg.Wait()\n\t\t// We expect 6 calls since we do one full batched call and 5 individual since the batched call returns an error\n\t\tExpect(fakeEC2API.TerminateInstancesBehavior.Calls()).To(BeNumerically(\"==\", 6))\n\t})\n})\n"
  },
  {
    "path": "pkg/cache/cache.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage cache\n\nimport \"time\"\n\nconst (\n\t// DefaultTTL restricts QPS to AWS APIs to this interval for verifying setup\n\t// resources. This value represents the maximum eventual consistency between\n\t// AWS actual state and the controller's ability to provision those\n\t// resources. Cache hits enable faster provisioning and reduced API load on\n\t// AWS APIs, which can have a serious impact on performance and scalability.\n\t// DO NOT CHANGE THIS VALUE WITHOUT DUE CONSIDERATION\n\tDefaultTTL = time.Minute\n\t// UnavailableOfferingsTTL is the time before offerings that were marked as unavailable\n\t// are removed from the cache and are available for launch again\n\tUnavailableOfferingsTTL = 3 * time.Minute\n\t// CapacityReservationAvailabilityTTL is the time we will persist cached capacity availability. Nominally, this is\n\t// updated every minute, but we want to persist the data longer in the event of an EC2 API outage. 24 hours was the\n\t// compormise made for API outage reseliency and gargage collecting entries for orphaned reservations.\n\tCapacityReservationAvailabilityTTL = 24 * time.Hour\n\t// InstanceTypesZonesAndOfferingsTTL is the time before we refresh instance types, zones, and offerings at EC2\n\tInstanceTypesZonesAndOfferingsTTL = 5 * time.Minute\n\t// InstanceProfileTTL is the time before we refresh checking instance profile existence at IAM\n\tInstanceProfileTTL = 15 * time.Minute\n\t// AvailableIPAddressTTL is time to drop AvailableIPAddress data if it is not updated within the TTL\n\tAvailableIPAddressTTL = 5 * time.Minute\n\t// AvailableIPAddressTTL is time to drop AssociatePublicIPAddressTTL data if it is not updated within the TTL\n\tAssociatePublicIPAddressTTL = 5 * time.Minute\n\t// SSMGetParametersByPathTTL is the time to drop SSM Parameters by path data. This only queries EKS Optimized AMI\n\t// releases, so we should expect this to be updated relatively infrequently.\n\tSSMCacheTTL = 24 * time.Hour\n\t// DiscoveredCapacityCacheTTL is the time to drop discovered resource capacity data per-instance type\n\t// if it is not updated by a node creation event or refreshed during controller reconciliation\n\tDiscoveredCapacityCacheTTL = 60 * 24 * time.Hour\n\t// ValidationTTL is time to check authorization errors with validation controller\n\tValidationTTL = 30 * time.Minute\n\t// RecreationTTL is the duration to suppress instance profile recreation for the same role to avoid duplicates\n\tRecreationTTL = 1 * time.Minute\n\t// ProtectedProfilesTTL is the duration to keep profiles as protected before nodeclass garbagecollector considers deletion\n\tProtectedProfilesTTL = 1 * time.Hour\n)\n\nconst (\n\t// DefaultCleanupInterval triggers cache cleanup (lazy eviction) at this interval.\n\tDefaultCleanupInterval = time.Minute\n\t// UnavailableOfferingsCleanupInterval triggers cache cleanup (lazy eviction) at this interval.\n\t// We drop the cleanup interval down for the ICE cache to get quicker reactivity to offerings\n\t// that become available after they get evicted from the cache\n\tUnavailableOfferingsCleanupInterval = time.Second * 10\n)\n"
  },
  {
    "path": "pkg/cache/suite_test.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage cache_test\n\nimport (\n\t\"context\"\n\t\"testing\"\n\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\tkarpv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n\t. \"sigs.k8s.io/karpenter/pkg/utils/testing\"\n\n\t\"github.com/aws/karpenter-provider-aws/pkg/cache\"\n)\n\nvar ctx context.Context\n\nfunc TestAWS(t *testing.T) {\n\tctx = TestContextWithLogger(t)\n\tRegisterFailHandler(Fail)\n\tRunSpecs(t, \"Cache\")\n}\n\nvar _ = Describe(\"Cache\", func() {\n\tvar unavailableOfferingCache *cache.UnavailableOfferings\n\n\tBeforeEach(func() {\n\t\tunavailableOfferingCache = cache.NewUnavailableOfferings()\n\t})\n\tContext(\"Unavailable Offering Cache\", func() {\n\t\tIt(\"should mark offerings as unavailable when calling MarkUnavailable\", func() {\n\t\t\t// offerings should initially not be marked as unavailable\n\t\t\tExpect(unavailableOfferingCache.IsUnavailable(ec2types.InstanceTypeM5Large, \"test-zone-1a\", karpv1.CapacityTypeOnDemand)).To(BeFalse())\n\t\t\tExpect(unavailableOfferingCache.IsUnavailable(ec2types.InstanceTypeM5Xlarge, \"test-zone-1b\", karpv1.CapacityTypeSpot)).To(BeFalse())\n\n\t\t\t// m5.large on-demand should return that it's unavailable when we mark it\n\t\t\tunavailableOfferingCache.MarkUnavailable(ctx, ec2types.InstanceTypeM5Large, \"test-zone-1a\", karpv1.CapacityTypeOnDemand, map[string]string{\"reason\": \"test\"})\n\t\t\tExpect(unavailableOfferingCache.IsUnavailable(ec2types.InstanceTypeM5Large, \"test-zone-1a\", karpv1.CapacityTypeOnDemand)).To(BeTrue())\n\t\t\tExpect(unavailableOfferingCache.IsUnavailable(ec2types.InstanceTypeM5Xlarge, \"test-zone-1b\", karpv1.CapacityTypeSpot)).To(BeFalse())\n\n\t\t\t// m5.xlarge shouldn't return that it's unavailable when marking an unrelated instance type\n\t\t\tunavailableOfferingCache.MarkUnavailable(ctx, ec2types.InstanceTypeM5Large, \"test-zone-1b\", karpv1.CapacityTypeOnDemand, map[string]string{\"reason\": \"test\"})\n\t\t\tExpect(unavailableOfferingCache.IsUnavailable(ec2types.InstanceTypeM5Large, \"test-zone-1a\", karpv1.CapacityTypeOnDemand)).To(BeTrue())\n\t\t\tExpect(unavailableOfferingCache.IsUnavailable(ec2types.InstanceTypeM5Xlarge, \"test-zone-1b\", karpv1.CapacityTypeSpot)).To(BeFalse())\n\n\t\t\t// m5.xlarge spot should return that it's unavailable when we mark it\n\t\t\tunavailableOfferingCache.MarkUnavailable(ctx, ec2types.InstanceTypeM5Xlarge, \"test-zone-1b\", karpv1.CapacityTypeSpot, map[string]string{\"reason\": \"test\"})\n\t\t\tExpect(unavailableOfferingCache.IsUnavailable(ec2types.InstanceTypeM5Large, \"test-zone-1a\", karpv1.CapacityTypeOnDemand)).To(BeTrue())\n\t\t\tExpect(unavailableOfferingCache.IsUnavailable(ec2types.InstanceTypeM5Xlarge, \"test-zone-1b\", karpv1.CapacityTypeSpot)).To(BeTrue())\n\t\t})\n\t\tIt(\"should mark offerings as unavailable with fleet error reasons\", func() {\n\t\t\t// offerings should initially not be marked as unavailable\n\t\t\tExpect(unavailableOfferingCache.IsUnavailable(ec2types.InstanceTypeM5Large, \"test-zone-1a\", karpv1.CapacityTypeOnDemand)).To(BeFalse())\n\t\t\tExpect(unavailableOfferingCache.IsUnavailable(ec2types.InstanceTypeM5Xlarge, \"test-zone-1b\", karpv1.CapacityTypeSpot)).To(BeFalse())\n\n\t\t\t// m5.large on-demand should return that it's unavailable when we mark it\n\t\t\tunavailableOfferingCache.MarkUnavailable(ctx, ec2types.InstanceTypeM5Large, \"test-zone-1a\", karpv1.CapacityTypeOnDemand, map[string]string{\n\t\t\t\t\"reason\": \"InsufficientInstanceCapacity\",\n\t\t\t})\n\t\t\tExpect(unavailableOfferingCache.IsUnavailable(ec2types.InstanceTypeM5Large, \"test-zone-1a\", karpv1.CapacityTypeOnDemand)).To(BeTrue())\n\t\t\tExpect(unavailableOfferingCache.IsUnavailable(ec2types.InstanceTypeM5Xlarge, \"test-zone-1b\", karpv1.CapacityTypeSpot)).To(BeFalse())\n\n\t\t\t// m5.xlarge shouldn't return that it's unavailable when marking an unrelated instance type\n\t\t\tunavailableOfferingCache.MarkUnavailable(ctx, ec2types.InstanceTypeM5Large, \"test-zone-1b\", karpv1.CapacityTypeOnDemand, map[string]string{\n\t\t\t\t\"reason\": \"InsufficientInstanceCapacity\",\n\t\t\t})\n\t\t\tExpect(unavailableOfferingCache.IsUnavailable(ec2types.InstanceTypeM5Large, \"test-zone-1a\", karpv1.CapacityTypeOnDemand)).To(BeTrue())\n\t\t\tExpect(unavailableOfferingCache.IsUnavailable(ec2types.InstanceTypeM5Xlarge, \"test-zone-1b\", karpv1.CapacityTypeSpot)).To(BeFalse())\n\n\t\t\t// m5.xlarge spot should return that it's unavailable when we mark it\n\t\t\tunavailableOfferingCache.MarkUnavailable(ctx, ec2types.InstanceTypeM5Xlarge, \"test-zone-1b\", karpv1.CapacityTypeSpot, map[string]string{\n\t\t\t\t\"reason\": \"InsufficientInstanceCapacity\",\n\t\t\t})\n\t\t\tExpect(unavailableOfferingCache.IsUnavailable(ec2types.InstanceTypeM5Large, \"test-zone-1a\", karpv1.CapacityTypeOnDemand)).To(BeTrue())\n\t\t\tExpect(unavailableOfferingCache.IsUnavailable(ec2types.InstanceTypeM5Xlarge, \"test-zone-1b\", karpv1.CapacityTypeSpot)).To(BeTrue())\n\t\t})\n\t\tIt(\"should mark offerings as unavailable when calling MarkCapacityTypeUnavailable\", func() {\n\t\t\t// offerings should initially not be marked as unavailable\n\t\t\tExpect(unavailableOfferingCache.IsUnavailable(ec2types.InstanceTypeM5Large, \"test-zone-1a\", karpv1.CapacityTypeOnDemand)).To(BeFalse())\n\t\t\tExpect(unavailableOfferingCache.IsUnavailable(ec2types.InstanceTypeM5Xlarge, \"test-zone-1a\", karpv1.CapacityTypeOnDemand)).To(BeFalse())\n\t\t\tExpect(unavailableOfferingCache.IsUnavailable(ec2types.InstanceTypeM5Xlarge, \"test-zone-1a\", karpv1.CapacityTypeSpot)).To(BeFalse())\n\t\t\tExpect(unavailableOfferingCache.IsUnavailable(ec2types.InstanceTypeM5Xlarge, \"test-zone-1b\", karpv1.CapacityTypeSpot)).To(BeFalse())\n\n\t\t\t// mark all spot offerings as unavailable\n\t\t\tunavailableOfferingCache.MarkCapacityTypeUnavailable(karpv1.CapacityTypeSpot)\n\t\t\tExpect(unavailableOfferingCache.IsUnavailable(ec2types.InstanceTypeM5Large, \"test-zone-1a\", karpv1.CapacityTypeOnDemand)).To(BeFalse())\n\t\t\tExpect(unavailableOfferingCache.IsUnavailable(ec2types.InstanceTypeM5Xlarge, \"test-zone-1a\", karpv1.CapacityTypeOnDemand)).To(BeFalse())\n\t\t\tExpect(unavailableOfferingCache.IsUnavailable(ec2types.InstanceTypeM5Xlarge, \"test-zone-1a\", karpv1.CapacityTypeSpot)).To(BeTrue())\n\t\t\tExpect(unavailableOfferingCache.IsUnavailable(ec2types.InstanceTypeM5Xlarge, \"test-zone-1b\", karpv1.CapacityTypeSpot)).To(BeTrue())\n\n\t\t\t// mark all on-demand offerings as unavailable\n\t\t\tunavailableOfferingCache.MarkCapacityTypeUnavailable(karpv1.CapacityTypeOnDemand)\n\t\t\tExpect(unavailableOfferingCache.IsUnavailable(ec2types.InstanceTypeM5Large, \"test-zone-1a\", karpv1.CapacityTypeOnDemand)).To(BeTrue())\n\t\t\tExpect(unavailableOfferingCache.IsUnavailable(ec2types.InstanceTypeM5Xlarge, \"test-zone-1a\", karpv1.CapacityTypeOnDemand)).To(BeTrue())\n\t\t\tExpect(unavailableOfferingCache.IsUnavailable(ec2types.InstanceTypeM5Xlarge, \"test-zone-1a\", karpv1.CapacityTypeSpot)).To(BeTrue())\n\t\t\tExpect(unavailableOfferingCache.IsUnavailable(ec2types.InstanceTypeM5Xlarge, \"test-zone-1b\", karpv1.CapacityTypeSpot)).To(BeTrue())\n\t\t})\n\t\tIt(\"should mark offerings as unavailable when calling MarkAZUnavailable\", func() {\n\t\t\t// offerings should initially not be marked as unavailable\n\t\t\tExpect(unavailableOfferingCache.IsUnavailable(ec2types.InstanceTypeM5Large, \"test-zone-1a\", karpv1.CapacityTypeOnDemand)).To(BeFalse())\n\t\t\tExpect(unavailableOfferingCache.IsUnavailable(ec2types.InstanceTypeM5Xlarge, \"test-zone-1a\", karpv1.CapacityTypeOnDemand)).To(BeFalse())\n\t\t\tExpect(unavailableOfferingCache.IsUnavailable(ec2types.InstanceTypeM5Xlarge, \"test-zone-1a\", karpv1.CapacityTypeSpot)).To(BeFalse())\n\t\t\tExpect(unavailableOfferingCache.IsUnavailable(ec2types.InstanceTypeM5Xlarge, \"test-zone-1b\", karpv1.CapacityTypeSpot)).To(BeFalse())\n\n\t\t\t// mark all test-zone-1a offerings as unavailable\n\t\t\tunavailableOfferingCache.MarkAZUnavailable(\"test-zone-1a\")\n\t\t\tExpect(unavailableOfferingCache.IsUnavailable(ec2types.InstanceTypeM5Large, \"test-zone-1a\", karpv1.CapacityTypeOnDemand)).To(BeTrue())\n\t\t\tExpect(unavailableOfferingCache.IsUnavailable(ec2types.InstanceTypeM5Xlarge, \"test-zone-1a\", karpv1.CapacityTypeOnDemand)).To(BeTrue())\n\t\t\tExpect(unavailableOfferingCache.IsUnavailable(ec2types.InstanceTypeM5Xlarge, \"test-zone-1a\", karpv1.CapacityTypeSpot)).To(BeTrue())\n\t\t\tExpect(unavailableOfferingCache.IsUnavailable(ec2types.InstanceTypeM5Xlarge, \"test-zone-1b\", karpv1.CapacityTypeSpot)).To(BeFalse())\n\t\t})\n\t\tIt(\"should increase sequence number when unavailability changes\", func() {\n\t\t\t// sequence numbers should initially be 0\n\t\t\tExpect(unavailableOfferingCache.SeqNum(ec2types.InstanceTypeM5Large)).To(BeNumerically(\"==\", 0))\n\t\t\tExpect(unavailableOfferingCache.SeqNum(ec2types.InstanceTypeM5Xlarge)).To(BeNumerically(\"==\", 0))\n\n\t\t\t// marking m5.large as unavailable should increase the sequence number for that instance type but not others\n\t\t\tunavailableOfferingCache.MarkUnavailable(ctx, ec2types.InstanceTypeM5Large, \"test-zone-1a\", karpv1.CapacityTypeOnDemand, map[string]string{\"reason\": \"test\"})\n\t\t\tExpect(unavailableOfferingCache.SeqNum(ec2types.InstanceTypeM5Large)).To(BeNumerically(\"==\", 1))\n\t\t\tExpect(unavailableOfferingCache.SeqNum(ec2types.InstanceTypeM5Xlarge)).To(BeNumerically(\"==\", 0))\n\n\t\t\t// marking m5.xlarge as unavailable should increase the sequence number for that instance type but not others\n\t\t\tunavailableOfferingCache.MarkUnavailable(ctx, ec2types.InstanceTypeM5Xlarge, \"test-zone-1a\", karpv1.CapacityTypeOnDemand, map[string]string{\"reason\": \"test\"})\n\t\t\tExpect(unavailableOfferingCache.SeqNum(ec2types.InstanceTypeM5Large)).To(BeNumerically(\"==\", 1))\n\t\t\tExpect(unavailableOfferingCache.SeqNum(ec2types.InstanceTypeM5Xlarge)).To(BeNumerically(\"==\", 1))\n\n\t\t\t// marking test-zone-1a as unavailable should increase the sequence number for all instance types\n\t\t\tunavailableOfferingCache.MarkAZUnavailable(\"test-zone-1a\")\n\t\t\tExpect(unavailableOfferingCache.SeqNum(ec2types.InstanceTypeM5Large)).To(BeNumerically(\"==\", 2))\n\t\t\tExpect(unavailableOfferingCache.SeqNum(ec2types.InstanceTypeM5Xlarge)).To(BeNumerically(\"==\", 2))\n\n\t\t\t// marking test-zone-1b as unavailable should increase the sequence number for all instance types\n\t\t\tunavailableOfferingCache.MarkAZUnavailable(\"test-zone-1b\")\n\t\t\tExpect(unavailableOfferingCache.SeqNum(ec2types.InstanceTypeM5Large)).To(BeNumerically(\"==\", 3))\n\t\t\tExpect(unavailableOfferingCache.SeqNum(ec2types.InstanceTypeM5Xlarge)).To(BeNumerically(\"==\", 3))\n\n\t\t\t// marking on-demand capacity type as unavailable should increase the sequence number for all instance types\n\t\t\tunavailableOfferingCache.MarkCapacityTypeUnavailable(karpv1.CapacityTypeOnDemand)\n\t\t\tExpect(unavailableOfferingCache.SeqNum(ec2types.InstanceTypeM5Large)).To(BeNumerically(\"==\", 4))\n\t\t\tExpect(unavailableOfferingCache.SeqNum(ec2types.InstanceTypeM5Xlarge)).To(BeNumerically(\"==\", 4))\n\n\t\t\t// deleting m5.xlarge from the cache should increase the sequence number for that instance type but not others\n\t\t\tunavailableOfferingCache.Delete(ec2types.InstanceTypeM5Xlarge, \"test-zone-1a\", karpv1.CapacityTypeOnDemand)\n\t\t\tExpect(unavailableOfferingCache.SeqNum(ec2types.InstanceTypeM5Large)).To(BeNumerically(\"==\", 4))\n\t\t\tExpect(unavailableOfferingCache.SeqNum(ec2types.InstanceTypeM5Xlarge)).To(BeNumerically(\"==\", 5))\n\t\t})\n\t})\n})\n"
  },
  {
    "path": "pkg/cache/unavailableofferings.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage cache\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"strings\"\n\t\"sync\"\n\t\"sync/atomic\"\n\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\t\"sigs.k8s.io/controller-runtime/pkg/log\"\n\n\t\"github.com/patrickmn/go-cache\"\n)\n\n// UnavailableOfferings stores any offerings that return ICE (insufficient capacity errors) when\n// attempting to launch the capacity. These offerings are ignored as long as they are in the cache on\n// GetInstanceTypes responses\ntype UnavailableOfferings struct {\n\t// key: <capacityType>:<instanceType>:<zone>, value: struct{}{}\n\tofferingCache         *cache.Cache\n\tofferingCacheSeqNumMu sync.RWMutex\n\tofferingCacheSeqNum   map[ec2types.InstanceType]uint64\n\n\tcapacityTypeCache       *cache.Cache\n\tcapacityTypeCacheSeqNum atomic.Uint64\n\n\tazCache       *cache.Cache\n\tazCacheSeqNum atomic.Uint64\n}\n\nfunc NewUnavailableOfferings() *UnavailableOfferings {\n\tuo := &UnavailableOfferings{\n\t\tofferingCache:         cache.New(UnavailableOfferingsTTL, UnavailableOfferingsCleanupInterval),\n\t\tofferingCacheSeqNumMu: sync.RWMutex{},\n\t\tofferingCacheSeqNum:   map[ec2types.InstanceType]uint64{},\n\n\t\tcapacityTypeCache: cache.New(UnavailableOfferingsTTL, UnavailableOfferingsCleanupInterval),\n\t\tazCache:           cache.New(UnavailableOfferingsTTL, UnavailableOfferingsCleanupInterval),\n\t}\n\tuo.offeringCache.OnEvicted(func(k string, _ any) {\n\t\telems := strings.Split(k, \":\")\n\t\tif len(elems) != 3 {\n\t\t\tpanic(\"unavailable offerings cache key is not of expected format <capacity-type>:<instance-type>:<zone>\")\n\t\t}\n\t\tuo.offeringCacheSeqNumMu.Lock()\n\t\tuo.offeringCacheSeqNum[ec2types.InstanceType(elems[1])]++\n\t\tuo.offeringCacheSeqNumMu.Unlock()\n\t})\n\tuo.capacityTypeCache.OnEvicted(func(k string, _ any) {\n\t\tuo.capacityTypeCacheSeqNum.Add(1)\n\t})\n\tuo.azCache.OnEvicted(func(k string, _ any) {\n\t\tuo.azCacheSeqNum.Add(1)\n\t})\n\treturn uo\n}\n\n// SeqNum returns a sequence number for an instance type to capture whether the offering cache has changed for the intance type\nfunc (u *UnavailableOfferings) SeqNum(instanceType ec2types.InstanceType) uint64 {\n\tu.offeringCacheSeqNumMu.RLock()\n\tdefer u.offeringCacheSeqNumMu.RUnlock()\n\n\tv := u.offeringCacheSeqNum[instanceType]\n\treturn v + u.capacityTypeCacheSeqNum.Load() + u.azCacheSeqNum.Load()\n}\n\n// IsUnavailable returns true if the offering appears in the cache\nfunc (u *UnavailableOfferings) IsUnavailable(instanceType ec2types.InstanceType, zone, capacityType string) bool {\n\t_, offeringFound := u.offeringCache.Get(u.key(instanceType, zone, capacityType))\n\t_, capacityTypeFound := u.capacityTypeCache.Get(capacityType)\n\t_, azFound := u.azCache.Get(zone)\n\treturn offeringFound || capacityTypeFound || azFound\n}\n\n// MarkUnavailable communicates recently observed temporary capacity shortages in the provided offerings\nfunc (u *UnavailableOfferings) MarkUnavailable(ctx context.Context, instanceType ec2types.InstanceType, zone, capacityType string, unavailableReason map[string]string) {\n\t// even if the key is already in the cache, we still need to call Set to extend the cached entry's TTL\n\tlogValues := []any{\n\t\t\"reason\", unavailableReason[\"reason\"],\n\t\t\"instance-type\", instanceType,\n\t\t\"zone\", zone,\n\t\t\"capacity-type\", capacityType,\n\t\t\"ttl\", UnavailableOfferingsTTL,\n\t}\n\t// Add fleetID if provided\n\tkey := \"fleet-id\"\n\t_, ok := unavailableReason[key]\n\tif ok {\n\t\tlogValues = append(logValues, key, unavailableReason[key])\n\t}\n\tlog.FromContext(ctx).WithValues(logValues...).V(1).Info(\"removing offering from offerings\")\n\tu.offeringCache.SetDefault(u.key(instanceType, zone, capacityType), struct{}{})\n\tu.offeringCacheSeqNumMu.Lock()\n\tu.offeringCacheSeqNum[instanceType]++\n\tu.offeringCacheSeqNumMu.Unlock()\n}\n\nfunc (u *UnavailableOfferings) MarkCapacityTypeUnavailable(capacityType string) {\n\tu.capacityTypeCache.SetDefault(capacityType, struct{}{})\n\tu.capacityTypeCacheSeqNum.Add(1)\n}\n\nfunc (u *UnavailableOfferings) MarkAZUnavailable(zone string) {\n\tu.azCache.SetDefault(zone, struct{}{})\n\tu.azCacheSeqNum.Add(1)\n}\n\nfunc (u *UnavailableOfferings) Delete(instanceType ec2types.InstanceType, zone string, capacityType string) {\n\tu.offeringCache.Delete(u.key(instanceType, zone, capacityType))\n}\n\nfunc (u *UnavailableOfferings) Flush() {\n\tu.offeringCache.Flush()\n\tu.capacityTypeCache.Flush()\n\tu.azCache.Flush()\n}\n\n// key returns the cache key for all offerings in the cache\nfunc (u *UnavailableOfferings) key(instanceType ec2types.InstanceType, zone string, capacityType string) string {\n\treturn fmt.Sprintf(\"%s:%s:%s\", capacityType, instanceType, zone)\n}\n"
  },
  {
    "path": "pkg/cloudprovider/cloudprovider.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage cloudprovider\n\nimport (\n\t\"context\"\n\tstderrors \"errors\"\n\t\"fmt\"\n\t\"time\"\n\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\t\"github.com/awslabs/operatorpkg/status\"\n\t\"k8s.io/apimachinery/pkg/api/errors\"\n\t\"k8s.io/apimachinery/pkg/api/resource\"\n\t\"k8s.io/apimachinery/pkg/runtime/schema\"\n\t\"sigs.k8s.io/karpenter/pkg/controllers/nodeoverlay\"\n\n\t\"sigs.k8s.io/controller-runtime/pkg/log\"\n\tcoreapis \"sigs.k8s.io/karpenter/pkg/apis\"\n\tkarpv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n\t\"sigs.k8s.io/karpenter/pkg/events\"\n\tkarpoptions \"sigs.k8s.io/karpenter/pkg/operator/options\"\n\t\"sigs.k8s.io/karpenter/pkg/utils/resources\"\n\n\t\"github.com/aws/karpenter-provider-aws/pkg/apis\"\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/operator/options\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/utils\"\n\n\t\"github.com/samber/lo\"\n\tcorev1 \"k8s.io/api/core/v1\"\n\tmetav1 \"k8s.io/apimachinery/pkg/apis/meta/v1\"\n\t\"k8s.io/apimachinery/pkg/types\"\n\t\"sigs.k8s.io/controller-runtime/pkg/client\"\n\n\tcloudproviderevents \"github.com/aws/karpenter-provider-aws/pkg/cloudprovider/events\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/amifamily\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/capacityreservation\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/instance\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/instancetype\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/securitygroup\"\n\n\t\"sigs.k8s.io/karpenter/pkg/cloudprovider\"\n)\n\nvar _ cloudprovider.CloudProvider = (*CloudProvider)(nil)\n\ntype CloudProvider struct {\n\tkubeClient client.Client\n\trecorder   events.Recorder\n\n\tinstanceTypeProvider        instancetype.Provider\n\tinstanceProvider            instance.Provider\n\tamiProvider                 amifamily.Provider\n\tsecurityGroupProvider       securitygroup.Provider\n\tcapacityReservationProvider capacityreservation.Provider\n\tinstanceTypeStore           *nodeoverlay.InstanceTypeStore\n}\n\nfunc New(\n\tinstanceTypeProvider instancetype.Provider,\n\tinstanceProvider instance.Provider,\n\trecorder events.Recorder,\n\tkubeClient client.Client,\n\tamiProvider amifamily.Provider,\n\tsecurityGroupProvider securitygroup.Provider,\n\tcapacityReservationProvider capacityreservation.Provider,\n\tstore *nodeoverlay.InstanceTypeStore,\n) *CloudProvider {\n\treturn &CloudProvider{\n\t\tinstanceTypeProvider:        instanceTypeProvider,\n\t\tinstanceProvider:            instanceProvider,\n\t\tkubeClient:                  kubeClient,\n\t\tamiProvider:                 amiProvider,\n\t\tsecurityGroupProvider:       securityGroupProvider,\n\t\tcapacityReservationProvider: capacityReservationProvider,\n\t\trecorder:                    recorder,\n\t\tinstanceTypeStore:           store,\n\t}\n}\n\n// Create a NodeClaim given the constraints.\n//\n//nolint:gocyclo\nfunc (c *CloudProvider) Create(ctx context.Context, nodeClaim *karpv1.NodeClaim) (*karpv1.NodeClaim, error) {\n\tnodeClass, err := c.resolveNodeClassFromNodeClaim(ctx, nodeClaim)\n\tif err != nil {\n\t\tif errors.IsNotFound(err) {\n\t\t\t// We treat a failure to resolve the NodeClass as an ICE since this means there is no capacity possibilities for this NodeClaim\n\t\t\tc.recorder.Publish(cloudproviderevents.NodeClaimFailedToResolveNodeClass(nodeClaim))\n\t\t\treturn nil, cloudprovider.NewInsufficientCapacityError(fmt.Errorf(\"resolving nodeclass, %w\", err))\n\t\t}\n\t\t// Transient error when resolving the NodeClass\n\t\treturn nil, fmt.Errorf(\"resolving nodeclass, %w\", err)\n\t}\n\n\tnodeClassReady := nodeClass.StatusConditions().Get(status.ConditionReady)\n\tif nodeClassReady.IsFalse() {\n\t\treturn nil, cloudprovider.NewNodeClassNotReadyError(stderrors.New(nodeClassReady.Message))\n\t}\n\tif nodeClassReady.IsUnknown() {\n\t\treturn nil, cloudprovider.NewCreateError(fmt.Errorf(\"resolving nodeclass readiness, nodeclass is in Ready=Unknown, %s\", nodeClassReady.Message), \"NodeClassReadinessUnknown\", \"NodeClass is in Ready=Unknown\")\n\t}\n\tif nodeClassReady != nil && nodeClassReady.ObservedGeneration != nodeClass.Generation {\n\t\treturn nil, cloudprovider.NewNodeClassNotReadyError(fmt.Errorf(\"nodeclass status has not been reconciled against the latest spec\"))\n\t}\n\ttags, err := utils.GetTags(nodeClass, nodeClaim, options.FromContext(ctx).ClusterName)\n\tif err != nil {\n\t\treturn nil, cloudprovider.NewNodeClassNotReadyError(err)\n\t}\n\tinstanceTypes, err := c.instanceTypeProvider.List(ctx, nodeClass)\n\tif err != nil {\n\t\treturn nil, cloudprovider.NewCreateError(fmt.Errorf(\"resolving instance types, %w\", err), \"InstanceTypeResolutionFailed\", \"Error resolving instance types\")\n\t}\n\tif karpoptions.FromContext(ctx).FeatureGates.NodeOverlay {\n\t\t// NodeOverlays are applied able to a set of instance types defined in a NodePool\n\t\t// This means standalone node claims do not support node overlays.\n\t\t// This choice was made as there are no active use cases for it\n\t\tif nodePoolName, ok := nodeClaim.Labels[v1.NodePoolTagKey]; ok {\n\t\t\tinstanceTypes, err = c.instanceTypeStore.ApplyAll(nodePoolName, instanceTypes)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"creating instance, %w\", err)\n\t\t\t}\n\t\t}\n\t}\n\tinstance, err := c.instanceProvider.Create(ctx, nodeClass, nodeClaim, tags, instanceTypes)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"creating instance, %w\", err)\n\t}\n\tif instance.CapacityType == karpv1.CapacityTypeReserved {\n\t\tc.capacityReservationProvider.MarkLaunched(instance.CapacityReservationDetails.ID)\n\t}\n\tinstanceType, _ := lo.Find(instanceTypes, func(i *cloudprovider.InstanceType) bool {\n\t\treturn i.Name == string(instance.Type)\n\t})\n\tnc := c.instanceToNodeClaim(instance, instanceType, nodeClass)\n\tnc.Annotations = lo.Assign(nc.Annotations, map[string]string{\n\t\tv1.AnnotationEC2NodeClassHash:        nodeClass.Hash(),\n\t\tv1.AnnotationEC2NodeClassHashVersion: v1.EC2NodeClassHashVersion,\n\t\tv1.AnnotationInstanceProfile:         nodeClass.Status.InstanceProfile,\n\t})\n\treturn nc, nil\n}\n\nfunc (c *CloudProvider) List(ctx context.Context) ([]*karpv1.NodeClaim, error) {\n\tinstances, err := c.instanceProvider.List(ctx)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"listing instances, %w\", err)\n\t}\n\tvar nodeClaims []*karpv1.NodeClaim\n\tfor _, it := range instances {\n\t\tinstanceType, err := c.resolveInstanceTypeFromInstance(ctx, it)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"resolving instance type, %w\", err)\n\t\t}\n\t\tnc, err := c.resolveNodeClassFromInstance(ctx, it)\n\t\tif client.IgnoreNotFound(err) != nil {\n\t\t\treturn nil, fmt.Errorf(\"resolving nodeclass, %w\", err)\n\t\t}\n\t\tnodeClaims = append(nodeClaims, c.instanceToNodeClaim(it, instanceType, nc))\n\t}\n\treturn nodeClaims, nil\n}\n\nfunc (c *CloudProvider) Get(ctx context.Context, providerID string) (*karpv1.NodeClaim, error) {\n\tid, err := utils.ParseInstanceID(providerID)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"getting instance ID, %w\", err)\n\t}\n\tctx = log.IntoContext(ctx, log.FromContext(ctx).WithValues(\"id\", id))\n\tinstance, err := c.instanceProvider.Get(ctx, id)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"getting instance, %w\", err)\n\t}\n\tinstanceType, err := c.resolveInstanceTypeFromInstance(ctx, instance)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"resolving instance type, %w\", err)\n\t}\n\tnc, err := c.resolveNodeClassFromInstance(ctx, instance)\n\tif client.IgnoreNotFound(err) != nil {\n\t\treturn nil, fmt.Errorf(\"resolving nodeclass, %w\", err)\n\t}\n\treturn c.instanceToNodeClaim(instance, instanceType, nc), nil\n}\n\n// GetInstanceTypes returns all available InstanceTypes\nfunc (c *CloudProvider) GetInstanceTypes(ctx context.Context, nodePool *karpv1.NodePool) ([]*cloudprovider.InstanceType, error) {\n\tnodeClass, err := c.resolveNodeClassFromNodePool(ctx, nodePool)\n\tif err != nil {\n\t\tif errors.IsNotFound(err) {\n\t\t\t// If we can't resolve the NodeClass, then it's impossible for us to resolve the instance types\n\t\t\tc.recorder.Publish(cloudproviderevents.NodePoolFailedToResolveNodeClass(nodePool))\n\t\t\treturn nil, nil\n\t\t}\n\t\treturn nil, fmt.Errorf(\"resolving nodeclass, %w\", err)\n\t}\n\t// TODO, break this coupling\n\tinstanceTypes, err := c.instanceTypeProvider.List(ctx, nodeClass)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn instanceTypes, nil\n}\n\n// getInstanceType returns a specific instance type to avoid re-constructing all InstanceTypes\nfunc (c *CloudProvider) getInstanceType(ctx context.Context, nodePool *karpv1.NodePool, name ec2types.InstanceType) (*cloudprovider.InstanceType, error) {\n\tnodeClass, err := c.resolveNodeClassFromNodePool(ctx, nodePool)\n\tif err != nil {\n\t\tif errors.IsNotFound(err) {\n\t\t\t// If we can't resolve the NodeClass, then it's impossible for us to resolve the instance types\n\t\t\tc.recorder.Publish(cloudproviderevents.NodePoolFailedToResolveNodeClass(nodePool))\n\t\t\treturn nil, nil\n\t\t}\n\t\treturn nil, fmt.Errorf(\"resolving nodeclass, %w\", err)\n\t}\n\tit, err := c.instanceTypeProvider.Get(ctx, nodeClass, name)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"resolving instancetype, %w\", err)\n\t}\n\tif karpoptions.FromContext(ctx).FeatureGates.NodeOverlay {\n\t\tit, err = c.instanceTypeStore.Apply(nodePool.Name, it)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"resolving instancetype, %w\", err)\n\t\t}\n\t}\n\n\treturn it, err\n}\n\nfunc (c *CloudProvider) Delete(ctx context.Context, nodeClaim *karpv1.NodeClaim) error {\n\tid, err := utils.ParseInstanceID(nodeClaim.Status.ProviderID)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"getting instance ID, %w\", err)\n\t}\n\tctx = log.IntoContext(ctx, log.FromContext(ctx).WithValues(\"id\", id))\n\terr = c.instanceProvider.Delete(ctx, id)\n\tif id := nodeClaim.Labels[cloudprovider.ReservationIDLabel]; id != \"\" && cloudprovider.IsNodeClaimNotFoundError(err) {\n\t\tc.capacityReservationProvider.MarkTerminated(id)\n\t}\n\treturn err\n}\n\nfunc (c *CloudProvider) DisruptionReasons() []karpv1.DisruptionReason {\n\treturn nil\n}\n\nfunc (c *CloudProvider) IsDrifted(ctx context.Context, nodeClaim *karpv1.NodeClaim) (cloudprovider.DriftReason, error) {\n\t// Not needed when GetInstanceTypes removes nodepool dependency\n\tnodePoolName, ok := nodeClaim.Labels[karpv1.NodePoolLabelKey]\n\tif !ok {\n\t\treturn \"\", nil\n\t}\n\tnodePool := &karpv1.NodePool{}\n\tif err := c.kubeClient.Get(ctx, types.NamespacedName{Name: nodePoolName}, nodePool); err != nil {\n\t\treturn \"\", client.IgnoreNotFound(err)\n\t}\n\tif nodePool.Spec.Template.Spec.NodeClassRef == nil {\n\t\treturn \"\", nil\n\t}\n\tnodeClass, err := c.resolveNodeClassFromNodePool(ctx, nodePool)\n\tif err != nil {\n\t\tif errors.IsNotFound(err) {\n\t\t\t// We can't determine the drift status for the NodeClaim if we can no longer resolve the NodeClass\n\t\t\tc.recorder.Publish(cloudproviderevents.NodePoolFailedToResolveNodeClass(nodePool))\n\t\t\treturn \"\", nil\n\t\t}\n\t\treturn \"\", fmt.Errorf(\"resolving nodeclass, %w\", err)\n\t}\n\tdriftReason, err := c.isNodeClassDrifted(ctx, nodeClaim, nodePool, nodeClass)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\treturn driftReason, nil\n}\n\n// Name returns the CloudProvider implementation name.\nfunc (c *CloudProvider) Name() string {\n\treturn \"aws\"\n}\n\nfunc (c *CloudProvider) GetSupportedNodeClasses() []status.Object {\n\treturn []status.Object{&v1.EC2NodeClass{}}\n}\n\nfunc (c *CloudProvider) RepairPolicies() []cloudprovider.RepairPolicy {\n\treturn []cloudprovider.RepairPolicy{\n\t\t// Supported Kubelet Node Conditions\n\t\t{\n\t\t\tConditionType:      corev1.NodeReady,\n\t\t\tConditionStatus:    corev1.ConditionFalse,\n\t\t\tTolerationDuration: 30 * time.Minute,\n\t\t},\n\t\t{\n\t\t\tConditionType:      corev1.NodeReady,\n\t\t\tConditionStatus:    corev1.ConditionUnknown,\n\t\t\tTolerationDuration: 30 * time.Minute,\n\t\t},\n\t\t// Support Node Monitoring Agent Conditions\n\t\t//\n\t\t{\n\t\t\tConditionType:      \"AcceleratedHardwareReady\",\n\t\t\tConditionStatus:    corev1.ConditionFalse,\n\t\t\tTolerationDuration: 10 * time.Minute,\n\t\t},\n\t\t{\n\t\t\tConditionType:      \"StorageReady\",\n\t\t\tConditionStatus:    corev1.ConditionFalse,\n\t\t\tTolerationDuration: 30 * time.Minute,\n\t\t},\n\t\t{\n\t\t\tConditionType:      \"NetworkingReady\",\n\t\t\tConditionStatus:    corev1.ConditionFalse,\n\t\t\tTolerationDuration: 30 * time.Minute,\n\t\t},\n\t\t{\n\t\t\tConditionType:      \"KernelReady\",\n\t\t\tConditionStatus:    corev1.ConditionFalse,\n\t\t\tTolerationDuration: 30 * time.Minute,\n\t\t},\n\t\t{\n\t\t\tConditionType:      \"ContainerRuntimeReady\",\n\t\t\tConditionStatus:    corev1.ConditionFalse,\n\t\t\tTolerationDuration: 30 * time.Minute,\n\t\t},\n\t}\n}\n\nfunc (c *CloudProvider) resolveNodeClassFromNodeClaim(ctx context.Context, nodeClaim *karpv1.NodeClaim) (*v1.EC2NodeClass, error) {\n\tnodeClass := &v1.EC2NodeClass{}\n\tif err := c.kubeClient.Get(ctx, types.NamespacedName{Name: nodeClaim.Spec.NodeClassRef.Name}, nodeClass); err != nil {\n\t\treturn nil, err\n\t}\n\t// For the purposes of NodeClass CloudProvider resolution, we treat deleting NodeClasses as NotFound\n\tif !nodeClass.DeletionTimestamp.IsZero() {\n\t\t// For the purposes of NodeClass CloudProvider resolution, we treat deleting NodeClasses as NotFound,\n\t\t// but we return a different error message to be clearer to users\n\t\treturn nil, newTerminatingNodeClassError(nodeClass.Name)\n\t}\n\treturn nodeClass, nil\n}\n\nfunc (c *CloudProvider) resolveNodeClassFromNodePool(ctx context.Context, nodePool *karpv1.NodePool) (*v1.EC2NodeClass, error) {\n\tnodeClass := &v1.EC2NodeClass{}\n\tif err := c.kubeClient.Get(ctx, types.NamespacedName{Name: nodePool.Spec.Template.Spec.NodeClassRef.Name}, nodeClass); err != nil {\n\t\treturn nil, err\n\t}\n\tif !nodeClass.DeletionTimestamp.IsZero() {\n\t\t// For the purposes of NodeClass CloudProvider resolution, we treat deleting NodeClasses as NotFound,\n\t\t// but we return a different error message to be clearer to users\n\t\treturn nil, newTerminatingNodeClassError(nodeClass.Name)\n\t}\n\treturn nodeClass, nil\n}\n\nfunc (c *CloudProvider) resolveInstanceTypeFromInstance(ctx context.Context, instance *instance.Instance) (*cloudprovider.InstanceType, error) {\n\tnodePool, err := c.resolveNodePoolFromInstance(ctx, instance)\n\tif err != nil {\n\t\t// If we can't resolve the NodePool, we fall back to not getting instance type info\n\t\treturn nil, client.IgnoreNotFound(fmt.Errorf(\"resolving nodepool, %w\", err))\n\t}\n\tinstanceType, err := c.getInstanceType(ctx, nodePool, instance.Type)\n\tif err != nil {\n\t\t// If we can't resolve the NodePool, we fall back to not getting instance type info\n\t\treturn nil, client.IgnoreNotFound(fmt.Errorf(\"resolving instance type, %w\", err))\n\t}\n\treturn instanceType, nil\n}\n\nfunc (c *CloudProvider) resolveNodeClassFromInstance(ctx context.Context, instance *instance.Instance) (*v1.EC2NodeClass, error) {\n\tname, ok := instance.Tags[v1.NodeClassTagKey]\n\tif !ok {\n\t\treturn nil, errors.NewNotFound(schema.GroupResource{Group: apis.Group, Resource: \"ec2nodeclasses\"}, \"\")\n\t}\n\tnc := &v1.EC2NodeClass{}\n\tif err := c.kubeClient.Get(ctx, types.NamespacedName{Name: name}, nc); err != nil {\n\t\treturn nil, fmt.Errorf(\"resolving ec2nodeclass, %w\", err)\n\t}\n\tif !nc.DeletionTimestamp.IsZero() {\n\t\t// For the purposes of NodeClass CloudProvider resolution, we treat deleting NodeClasses as NotFound,\n\t\t// but we return a different error message to be clearer to users\n\t\treturn nil, newTerminatingNodeClassError(nc.Name)\n\t}\n\treturn nc, nil\n}\n\nfunc (c *CloudProvider) resolveNodePoolFromInstance(ctx context.Context, instance *instance.Instance) (*karpv1.NodePool, error) {\n\tif nodePoolName, ok := instance.Tags[karpv1.NodePoolLabelKey]; ok {\n\t\tnodePool := &karpv1.NodePool{}\n\t\tif err := c.kubeClient.Get(ctx, types.NamespacedName{Name: nodePoolName}, nodePool); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn nodePool, nil\n\t}\n\treturn nil, errors.NewNotFound(schema.GroupResource{Group: coreapis.Group, Resource: \"nodepools\"}, \"\")\n}\n\n//nolint:gocyclo\nfunc (c *CloudProvider) instanceToNodeClaim(i *instance.Instance, instanceType *cloudprovider.InstanceType, nodeClass *v1.EC2NodeClass) *karpv1.NodeClaim {\n\tnodeClaim := &karpv1.NodeClaim{}\n\tlabels := map[string]string{}\n\tannotations := map[string]string{}\n\n\tif instanceType != nil {\n\t\tfor key, req := range instanceType.Requirements {\n\t\t\t// We only want to add a label based on the instance type requirements if there is a single value for that\n\t\t\t// requirement. For example, we can't add a label for zone based on this if the requirement is compatible with\n\t\t\t// three. Capacity reservation IDs are a special case since we don't have a way to represent that the label may or\n\t\t\t// may not exist. Since this requirement will be present regardless of the capacity type, we can't insert it here.\n\t\t\t// Otherwise, you may end up with spot and on-demand NodeClaims with a reservation ID label.\n\t\t\tif req.Len() == 1 && !lo.Contains([]string{\n\t\t\t\tcloudprovider.ReservationIDLabel,\n\t\t\t\tv1.LabelCapacityReservationType,\n\t\t\t\tv1.LabelCapacityReservationInterruptible,\n\t\t\t}, req.Key) {\n\t\t\t\tlabels[key] = req.Values()[0]\n\t\t\t}\n\t\t}\n\t\tresourceFilter := func(n corev1.ResourceName, v resource.Quantity) bool {\n\t\t\tif resources.IsZero(v) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\t// The nodeclaim should only advertise an EFA resource if it was requested. EFA network interfaces are only\n\t\t\t// added to the launch template if they're requested, otherwise the instance is launched with a normal ENI.\n\t\t\tif n == v1.ResourceEFA {\n\t\t\t\treturn i.EFAEnabled\n\t\t\t}\n\t\t\treturn true\n\t\t}\n\t\tnodeClaim.Status.Capacity = lo.PickBy(instanceType.Capacity, resourceFilter)\n\t\tnodeClaim.Status.Allocatable = lo.PickBy(instanceType.Allocatable(), resourceFilter)\n\t}\n\tlabels[corev1.LabelTopologyZone] = i.Zone\n\t// Attempt to resolve the zoneID from the instance's EC2NodeClass' status condition.\n\t// If the EC2NodeClass is nil, we know we're in the List or Get paths, where we don't care about the zone-id value.\n\t// If we're in the Create path, we've already validated the EC2NodeClass exists. In this case, we resolve the zone-id from the status condition\n\t// both when creating offerings and when adding the label.\n\tif nodeClass != nil {\n\t\tif subnet, ok := lo.Find(nodeClass.Status.Subnets, func(s v1.Subnet) bool {\n\t\t\treturn s.Zone == i.Zone\n\t\t}); ok && subnet.ZoneID != \"\" {\n\t\t\tlabels[v1.LabelTopologyZoneID] = subnet.ZoneID\n\t\t}\n\t}\n\tlabels[karpv1.CapacityTypeLabelKey] = i.CapacityType\n\tlabels[v1.LabelInstanceTenancy] = i.Tenancy\n\tif i.CapacityType == karpv1.CapacityTypeReserved {\n\t\tlabels[cloudprovider.ReservationIDLabel] = i.CapacityReservationDetails.ID\n\t\tlabels[v1.LabelCapacityReservationType] = string(i.CapacityReservationDetails.Type)\n\t\tlabels[v1.LabelCapacityReservationInterruptible] = fmt.Sprintf(\"%t\", i.CapacityReservationDetails.Interruptible)\n\t}\n\tif v, ok := i.Tags[karpv1.NodePoolLabelKey]; ok {\n\t\tlabels[karpv1.NodePoolLabelKey] = v\n\t}\n\tnodeClaim.Labels = labels\n\tnodeClaim.Annotations = annotations\n\tnodeClaim.CreationTimestamp = metav1.Time{Time: i.LaunchTime}\n\t// Set the deletionTimestamp to be the current time if the instance is currently terminating\n\tif i.State == ec2types.InstanceStateNameShuttingDown || i.State == ec2types.InstanceStateNameTerminated {\n\t\tnodeClaim.DeletionTimestamp = &metav1.Time{Time: time.Now()}\n\t}\n\tnodeClaim.Status.ProviderID = fmt.Sprintf(\"aws:///%s/%s\", i.Zone, i.ID)\n\tnodeClaim.Status.ImageID = i.ImageID\n\treturn nodeClaim\n}\n\n// newTerminatingNodeClassError returns a NotFound error for handling by\nfunc newTerminatingNodeClassError(name string) *errors.StatusError {\n\tqualifiedResource := schema.GroupResource{Group: apis.Group, Resource: \"ec2nodeclasses\"}\n\terr := errors.NewNotFound(qualifiedResource, name)\n\terr.ErrStatus.Message = fmt.Sprintf(\"%s %q is terminating, treating as not found\", qualifiedResource.String(), name)\n\treturn err\n}\n"
  },
  {
    "path": "pkg/cloudprovider/drift.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage cloudprovider\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\n\t\"github.com/awslabs/operatorpkg/serrors\"\n\t\"github.com/samber/lo\"\n\tcorev1 \"k8s.io/api/core/v1\"\n\t\"k8s.io/apimachinery/pkg/util/sets\"\n\n\tkarpv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n\t\"sigs.k8s.io/karpenter/pkg/cloudprovider\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/amifamily\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/instance\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/utils\"\n)\n\nconst (\n\tAMIDrift                 cloudprovider.DriftReason = \"AMIDrift\"\n\tSubnetDrift              cloudprovider.DriftReason = \"SubnetDrift\"\n\tSecurityGroupDrift       cloudprovider.DriftReason = \"SecurityGroupDrift\"\n\tCapacityReservationDrift cloudprovider.DriftReason = \"CapacityReservationDrift\"\n\tNodeClassDrift           cloudprovider.DriftReason = \"NodeClassDrift\"\n)\n\nfunc (c *CloudProvider) isNodeClassDrifted(ctx context.Context, nodeClaim *karpv1.NodeClaim, nodePool *karpv1.NodePool, nodeClass *v1.EC2NodeClass) (cloudprovider.DriftReason, error) {\n\t// First check if the node class is statically drifted to save on API calls.\n\tif drifted := c.areStaticFieldsDrifted(nodeClaim, nodeClass); drifted != \"\" {\n\t\treturn drifted, nil\n\t}\n\tamiDrifted, err := c.isAMIDrifted(ctx, nodeClaim, nodePool, nodeClass)\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"calculating ami drift, %w\", err)\n\t}\n\tif amiDrifted != \"\" {\n\t\treturn amiDrifted, nil\n\t}\n\tinstance, err := c.getInstance(ctx, nodeClaim.Status.ProviderID)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tsecuritygroupDrifted, err := c.areSecurityGroupsDrifted(instance, nodeClass)\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"calculating securitygroup drift, %w\", err)\n\t}\n\tsubnetDrifted, err := c.isSubnetDrifted(instance, nodeClass)\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"calculating subnet drift, %w\", err)\n\t}\n\tcapacityReservationsDrifted := c.isCapacityReservationDrifted(instance, nodeClass)\n\tdrifted := lo.FindOrElse([]cloudprovider.DriftReason{\n\t\tsecuritygroupDrifted,\n\t\tsubnetDrifted,\n\t\tcapacityReservationsDrifted,\n\t}, \"\", func(i cloudprovider.DriftReason) bool {\n\t\treturn string(i) != \"\"\n\t})\n\treturn drifted, nil\n}\n\nfunc (c *CloudProvider) isAMIDrifted(ctx context.Context, nodeClaim *karpv1.NodeClaim, nodePool *karpv1.NodePool,\n\tnodeClass *v1.EC2NodeClass) (cloudprovider.DriftReason, error) {\n\tinstanceTypes, err := c.GetInstanceTypes(ctx, nodePool)\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"getting instanceTypes, %w\", err)\n\t}\n\tnodeInstanceType, found := lo.Find(instanceTypes, func(instType *cloudprovider.InstanceType) bool {\n\t\treturn instType.Name == nodeClaim.Labels[corev1.LabelInstanceTypeStable]\n\t})\n\tif !found {\n\t\treturn \"\", serrors.Wrap(fmt.Errorf(\"finding node instance type\"), \"instance-type\", nodeClaim.Labels[corev1.LabelInstanceTypeStable])\n\t}\n\tif len(nodeClass.Status.AMIs) == 0 {\n\t\treturn \"\", fmt.Errorf(\"no amis exist given constraints\")\n\t}\n\t// Should never happen as ImageID is resolved when setting Launched status condition\n\tif nodeClaim.Status.ImageID == \"\" {\n\t\treturn \"\", fmt.Errorf(\"no ami ID found in nodeClaim status\")\n\t}\n\tmappedAMIs := amifamily.MapToInstanceTypes([]*cloudprovider.InstanceType{nodeInstanceType}, nodeClass.Status.AMIs)\n\tif !lo.Contains(lo.Keys(mappedAMIs), nodeClaim.Status.ImageID) {\n\t\treturn AMIDrift, nil\n\t}\n\treturn \"\", nil\n}\n\n// Checks if the security groups are drifted, by comparing the subnet returned from the subnetProvider\n// to the ec2 instance subnets\nfunc (c *CloudProvider) isSubnetDrifted(instance *instance.Instance, nodeClass *v1.EC2NodeClass) (cloudprovider.DriftReason, error) {\n\t// subnets need to be found to check for drift\n\tif len(nodeClass.Status.Subnets) == 0 {\n\t\treturn \"\", fmt.Errorf(\"no subnets are discovered\")\n\t}\n\n\t_, found := lo.Find(nodeClass.Status.Subnets, func(subnet v1.Subnet) bool {\n\t\treturn subnet.ID == instance.SubnetID\n\t})\n\n\tif !found {\n\t\treturn SubnetDrift, nil\n\t}\n\treturn \"\", nil\n}\n\n// Checks if the security groups are drifted, by comparing the security groups returned from the SecurityGroupProvider\n// to the ec2 instance security groups\nfunc (c *CloudProvider) areSecurityGroupsDrifted(ec2Instance *instance.Instance, nodeClass *v1.EC2NodeClass) (cloudprovider.DriftReason, error) {\n\tsecurityGroupIds := sets.New(lo.Map(nodeClass.Status.SecurityGroups, func(sg v1.SecurityGroup, _ int) string { return sg.ID })...)\n\tif len(securityGroupIds) == 0 {\n\t\treturn \"\", fmt.Errorf(\"no security groups are present in the status\")\n\t}\n\n\tif !securityGroupIds.Equal(sets.New(ec2Instance.SecurityGroupIDs...)) {\n\t\treturn SecurityGroupDrift, nil\n\t}\n\treturn \"\", nil\n}\n\n// Checks if capacity reservations are drifted, by comparing the capacity reservations persisted to the NodeClass to\n// the instance's capacity reservation.\n// NOTE: We handle drift dynamically for capacity reservations rather than relying on the offerings inducing drift since\n// a reserved instance may fall back to on-demand. Relying on offerings could result in drift occurring before fallback\n// would cancel it out.\nfunc (c *CloudProvider) isCapacityReservationDrifted(instance *instance.Instance, nodeClass *v1.EC2NodeClass) cloudprovider.DriftReason {\n\tcapacityReservationIDs := sets.New(lo.Map(nodeClass.Status.CapacityReservations, func(cr v1.CapacityReservation, _ int) string { return cr.ID })...)\n\tif instance.CapacityReservationDetails != nil && !capacityReservationIDs.Has(instance.CapacityReservationDetails.ID) {\n\t\treturn CapacityReservationDrift\n\t}\n\treturn \"\"\n}\n\nfunc (c *CloudProvider) areStaticFieldsDrifted(nodeClaim *karpv1.NodeClaim, nodeClass *v1.EC2NodeClass) cloudprovider.DriftReason {\n\tnodeClassHash, foundNodeClassHash := nodeClass.Annotations[v1.AnnotationEC2NodeClassHash]\n\tnodeClassHashVersion, foundNodeClassHashVersion := nodeClass.Annotations[v1.AnnotationEC2NodeClassHashVersion]\n\tnodeClaimHash, foundNodeClaimHash := nodeClaim.Annotations[v1.AnnotationEC2NodeClassHash]\n\tnodeClaimHashVersion, foundNodeClaimHashVersion := nodeClaim.Annotations[v1.AnnotationEC2NodeClassHashVersion]\n\n\tif !foundNodeClassHash || !foundNodeClaimHash || !foundNodeClassHashVersion || !foundNodeClaimHashVersion {\n\t\treturn \"\"\n\t}\n\t// validate that the hash version for the EC2NodeClass is the same as the NodeClaim before evaluating for static drift\n\tif nodeClassHashVersion != nodeClaimHashVersion {\n\t\treturn \"\"\n\t}\n\treturn lo.Ternary(nodeClassHash != nodeClaimHash, NodeClassDrift, \"\")\n}\n\nfunc (c *CloudProvider) getInstance(ctx context.Context, providerID string) (*instance.Instance, error) {\n\t// Get InstanceID to fetch from EC2\n\tinstanceID, err := utils.ParseInstanceID(providerID)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tinstance, err := c.instanceProvider.Get(ctx, instanceID)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"getting instance, %w\", err)\n\t}\n\treturn instance, nil\n}\n"
  },
  {
    "path": "pkg/cloudprovider/events/events.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage events\n\nimport (\n\tcorev1 \"k8s.io/api/core/v1\"\n\n\tv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n\t\"sigs.k8s.io/karpenter/pkg/events\"\n)\n\nfunc NodePoolFailedToResolveNodeClass(nodePool *v1.NodePool) events.Event {\n\treturn events.Event{\n\t\tInvolvedObject: nodePool,\n\t\tType:           corev1.EventTypeWarning,\n\t\tMessage:        \"Failed resolving NodeClass\",\n\t\tDedupeValues:   []string{string(nodePool.UID)},\n\t}\n}\n\nfunc NodeClaimFailedToResolveNodeClass(nodeClaim *v1.NodeClaim) events.Event {\n\treturn events.Event{\n\t\tInvolvedObject: nodeClaim,\n\t\tType:           corev1.EventTypeWarning,\n\t\tMessage:        \"Failed resolving NodeClass\",\n\t\tDedupeValues:   []string{string(nodeClaim.UID)},\n\t}\n}\n"
  },
  {
    "path": "pkg/cloudprovider/suite_test.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage cloudprovider_test\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"strconv\"\n\t\"strings\"\n\t\"testing\"\n\t\"time\"\n\n\t\"sigs.k8s.io/karpenter/pkg/test/v1alpha1\"\n\n\t\"github.com/awslabs/operatorpkg/object\"\n\tcorev1 \"k8s.io/api/core/v1\"\n\t\"k8s.io/apimachinery/pkg/api/resource\"\n\tmetav1 \"k8s.io/apimachinery/pkg/apis/meta/v1\"\n\t\"k8s.io/apimachinery/pkg/util/sets\"\n\t\"k8s.io/client-go/tools/record\"\n\tclock \"k8s.io/utils/clock/testing\"\n\n\t\"github.com/aws/aws-sdk-go-v2/aws\"\n\t\"github.com/aws/aws-sdk-go-v2/service/ec2\"\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\n\topstatus \"github.com/awslabs/operatorpkg/status\"\n\t\"github.com/imdario/mergo\"\n\t\"github.com/samber/lo\"\n\n\t\"github.com/aws/karpenter-provider-aws/pkg/apis\"\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/cloudprovider\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/controllers/nodeclass\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/fake\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/operator/options\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/test\"\n\n\tkarpv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n\tcorecloudprovider \"sigs.k8s.io/karpenter/pkg/cloudprovider\"\n\t\"sigs.k8s.io/karpenter/pkg/controllers/provisioning\"\n\t\"sigs.k8s.io/karpenter/pkg/controllers/state\"\n\t\"sigs.k8s.io/karpenter/pkg/events\"\n\tcoreoptions \"sigs.k8s.io/karpenter/pkg/operator/options\"\n\t\"sigs.k8s.io/karpenter/pkg/scheduling\"\n\tcoretest \"sigs.k8s.io/karpenter/pkg/test\"\n\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n\t. \"sigs.k8s.io/karpenter/pkg/test/expectations\"\n\t. \"sigs.k8s.io/karpenter/pkg/utils/testing\"\n)\n\nvar ctx context.Context\nvar stop context.CancelFunc\nvar env *coretest.Environment\nvar awsEnv *test.Environment\nvar prov *provisioning.Provisioner\nvar cloudProvider *cloudprovider.CloudProvider\nvar cluster *state.Cluster\nvar fakeClock *clock.FakeClock\nvar recorder events.Recorder\n\nfunc TestAWS(t *testing.T) {\n\tctx = TestContextWithLogger(t)\n\tRegisterFailHandler(Fail)\n\tRunSpecs(t, \"cloudProvider/AWS\")\n}\n\nvar _ = BeforeSuite(func() {\n\tenv = coretest.NewEnvironment(\n\t\tcoretest.WithCRDs(test.DisableCapacityReservationIDValidation(test.RemoveNodeClassTagValidation(apis.CRDs))...),\n\t\tcoretest.WithCRDs(v1alpha1.CRDs...),\n\t\tcoretest.WithFieldIndexers(coretest.NodePoolNodeClassRefFieldIndexer(ctx)),\n\t)\n\tctx = coreoptions.ToContext(ctx, coretest.Options(coretest.OptionsFields{FeatureGates: coretest.FeatureGates{ReservedCapacity: lo.ToPtr(true)}}))\n\tctx = options.ToContext(ctx, test.Options())\n\tctx, stop = context.WithCancel(ctx)\n\tawsEnv = test.NewEnvironment(ctx, env)\n\tfakeClock = clock.NewFakeClock(time.Now())\n\trecorder = events.NewRecorder(&record.FakeRecorder{})\n\tcloudProvider = cloudprovider.New(awsEnv.InstanceTypesProvider, awsEnv.InstanceProvider, recorder,\n\t\tenv.Client, awsEnv.AMIProvider, awsEnv.SecurityGroupProvider, awsEnv.CapacityReservationProvider, awsEnv.InstanceTypeStore)\n\tcluster = state.NewCluster(fakeClock, env.Client, cloudProvider)\n\tprov = provisioning.NewProvisioner(env.Client, recorder, cloudProvider, cluster, fakeClock)\n})\n\nvar _ = AfterSuite(func() {\n\tstop()\n\tExpect(env.Stop()).To(Succeed(), \"Failed to stop environment\")\n})\n\nvar _ = BeforeEach(func() {\n\tctx = coreoptions.ToContext(ctx, coretest.Options(coretest.OptionsFields{FeatureGates: coretest.FeatureGates{ReservedCapacity: lo.ToPtr(true)}}))\n\tctx = options.ToContext(ctx, test.Options())\n\n\tcluster.Reset()\n\tawsEnv.Reset()\n})\n\nvar _ = AfterEach(func() {\n\tExpectCleanedUp(ctx, env.Client)\n})\n\nvar _ = Describe(\"CloudProvider\", func() {\n\tvar nodeClass *v1.EC2NodeClass\n\tvar nodePool *karpv1.NodePool\n\tvar nodeClaim *karpv1.NodeClaim\n\tvar _ = BeforeEach(func() {\n\t\tnodeClass = test.EC2NodeClass(\n\t\t\tv1.EC2NodeClass{\n\t\t\t\tStatus: v1.EC2NodeClassStatus{\n\t\t\t\t\tInstanceProfile: \"test-profile\",\n\t\t\t\t\tSecurityGroups: []v1.SecurityGroup{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tID:   \"sg-test1\",\n\t\t\t\t\t\t\tName: \"securityGroup-test1\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tID:   \"sg-test2\",\n\t\t\t\t\t\t\tName: \"securityGroup-test2\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tID:   \"sg-test3\",\n\t\t\t\t\t\t\tName: \"securityGroup-test3\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tSubnets: []v1.Subnet{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tID:     \"subnet-test1\",\n\t\t\t\t\t\t\tZone:   \"test-zone-1a\",\n\t\t\t\t\t\t\tZoneID: \"tstz1-1a\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tID:     \"subnet-test2\",\n\t\t\t\t\t\t\tZone:   \"test-zone-1b\",\n\t\t\t\t\t\t\tZoneID: \"tstz1-1b\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tID:     \"subnet-test3\",\n\t\t\t\t\t\t\tZone:   \"test-zone-1c\",\n\t\t\t\t\t\t\tZoneID: \"tstz1-1c\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t)\n\t\tnodeClass.StatusConditions().SetTrue(opstatus.ConditionReady)\n\t\tnodePool = coretest.NodePool(karpv1.NodePool{\n\t\t\tSpec: karpv1.NodePoolSpec{\n\t\t\t\tTemplate: karpv1.NodeClaimTemplate{\n\t\t\t\t\tSpec: karpv1.NodeClaimTemplateSpec{\n\t\t\t\t\t\tNodeClassRef: &karpv1.NodeClassReference{\n\t\t\t\t\t\t\tGroup: object.GVK(nodeClass).Group,\n\t\t\t\t\t\t\tKind:  object.GVK(nodeClass).Kind,\n\t\t\t\t\t\t\tName:  nodeClass.Name,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tRequirements: []karpv1.NodeSelectorRequirementWithMinValues{\n\t\t\t\t\t\t\t{Key: karpv1.CapacityTypeLabelKey, Operator: corev1.NodeSelectorOpIn, Values: []string{karpv1.CapacityTypeOnDemand}},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tnodeClaim = coretest.NodeClaim(karpv1.NodeClaim{\n\t\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\t\tLabels: map[string]string{karpv1.NodePoolLabelKey: nodePool.Name},\n\t\t\t},\n\t\t\tSpec: karpv1.NodeClaimSpec{\n\t\t\t\tNodeClassRef: &karpv1.NodeClassReference{\n\t\t\t\t\tGroup: object.GVK(nodeClass).Group,\n\t\t\t\t\tKind:  object.GVK(nodeClass).Kind,\n\t\t\t\t\tName:  nodeClass.Name,\n\t\t\t\t},\n\t\t\t\tRequirements: []karpv1.NodeSelectorRequirementWithMinValues{\n\t\t\t\t\t{\n\t\t\t\t\t\tKey:      karpv1.CapacityTypeLabelKey,\n\t\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\t\tValues:   []string{karpv1.CapacityTypeOnDemand},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\t_, err := awsEnv.SubnetProvider.List(ctx, nodeClass) // Hydrate the subnet cache\n\t\tExpect(err).To(BeNil())\n\t\tExpect(awsEnv.InstanceTypesProvider.UpdateInstanceTypes(ctx)).To(Succeed())\n\t\tExpect(awsEnv.InstanceTypesProvider.UpdateInstanceTypeOfferings(ctx)).To(Succeed())\n\n\t\t// Configure default AMIs so we discover AMIs with the correct requirements in the NodeClass status controller\n\t\tawsEnv.EC2API.DescribeImagesOutput.Set(&ec2.DescribeImagesOutput{\n\t\t\tImages: []ec2types.Image{\n\t\t\t\t{\n\t\t\t\t\tName:         aws.String(\"amd64-ami\"),\n\t\t\t\t\tImageId:      aws.String(\"amd64-ami-id\"),\n\t\t\t\t\tCreationDate: aws.String(time.Time{}.Format(time.RFC3339)),\n\t\t\t\t\tArchitecture: \"x86_64\",\n\t\t\t\t\tState:        ec2types.ImageStateAvailable,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tName:         aws.String(\"arm64-ami\"),\n\t\t\t\t\tImageId:      aws.String(\"arm64-ami-id\"),\n\t\t\t\t\tCreationDate: aws.String(time.Time{}.Add(time.Minute).Format(time.RFC3339)),\n\t\t\t\t\tArchitecture: \"arm64\",\n\t\t\t\t\tState:        ec2types.ImageStateAvailable,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tName:         aws.String(\"amd64-nvidia-ami\"),\n\t\t\t\t\tImageId:      aws.String(\"amd64-nvidia-ami-id\"),\n\t\t\t\t\tCreationDate: aws.String(time.Time{}.Add(2 * time.Minute).Format(time.RFC3339)),\n\t\t\t\t\tArchitecture: \"x86_64\",\n\t\t\t\t\tState:        ec2types.ImageStateAvailable,\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tversion := awsEnv.VersionProvider.Get(ctx)\n\t\tawsEnv.SSMAPI.Parameters = map[string]string{\n\t\t\tfmt.Sprintf(\"/aws/service/eks/optimized-ami/%s/amazon-linux-2023/x86_64/standard/recommended/image_id\", version): \"amd64-ami-id\",\n\t\t\tfmt.Sprintf(\"/aws/service/eks/optimized-ami/%s/amazon-linux-2023/x86_64/nvidia/recommended/image_id\", version):   \"amd64-nvidia-ami-id\",\n\t\t\tfmt.Sprintf(\"/aws/service/eks/optimized-ami/%s/amazon-linux-2023/arm64/standard/recommended/image_id\", version):  \"arm64-ami-id\",\n\t\t}\n\t})\n\tIt(\"should not proceed with instance creation if NodeClass is unknown\", func() {\n\t\tnodeClass.StatusConditions().SetUnknown(opstatus.ConditionReady)\n\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass, nodeClaim)\n\t\t_, err := cloudProvider.Create(ctx, nodeClaim)\n\t\tExpect(err).To(HaveOccurred())\n\t\tExpect(corecloudprovider.IsNodeClassNotReadyError(err)).To(BeFalse())\n\t})\n\tIt(\"should return NodeClassNotReady error on creation if NodeClass is not ready\", func() {\n\t\tnodeClass.StatusConditions().SetFalse(opstatus.ConditionReady, \"NodeClassNotReady\", \"NodeClass not ready\")\n\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass, nodeClaim)\n\t\t_, err := cloudProvider.Create(ctx, nodeClaim)\n\t\tExpect(err).To(HaveOccurred())\n\t\tExpect(corecloudprovider.IsNodeClassNotReadyError(err)).To(BeTrue())\n\t})\n\tIt(\"should return NodeClassNotReady error on creation if NodeClass tag validation fails\", func() {\n\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass, nodeClaim)\n\t\tnodeClass.Spec.Tags = map[string]string{\"kubernetes.io/cluster/thewrongcluster\": \"owned\"}\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\t_, err := cloudProvider.Create(ctx, nodeClaim)\n\t\tExpect(err).To(HaveOccurred())\n\t\tExpect(corecloudprovider.IsNodeClassNotReadyError(err)).To(BeTrue())\n\t})\n\tIt(\"should return NodeClassNotReady error when observed generation doesn't match\", func() {\n\t\tnodeClass.Generation = 2\n\t\tnodeClass.StatusConditions().SetTrue(opstatus.ConditionReady)\n\t\tnodeClass.StatusConditions().Get(opstatus.ConditionReady).ObservedGeneration = 1\n\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass, nodeClaim)\n\t\t_, err := cloudProvider.Create(ctx, nodeClaim)\n\t\tExpect(err).To(HaveOccurred())\n\t\tExpect(corecloudprovider.IsNodeClassNotReadyError(err)).To(BeTrue())\n\t})\n\tIt(\"should return an ICE error when there are no instance types to launch\", func() {\n\t\t// Specify no instance types and expect to receive a capacity error\n\t\tnodeClaim.Spec.Requirements = []karpv1.NodeSelectorRequirementWithMinValues{\n\t\t\t{\n\t\t\t\tKey:      corev1.LabelInstanceTypeStable,\n\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\tValues:   []string{\"test-instance-type\"},\n\t\t\t},\n\t\t}\n\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass, nodeClaim)\n\t\tcloudProviderNodeClaim, err := cloudProvider.Create(ctx, nodeClaim)\n\t\tExpect(corecloudprovider.IsInsufficientCapacityError(err)).To(BeTrue())\n\t\tExpect(cloudProviderNodeClaim).To(BeNil())\n\t})\n\tIt(\"should set ImageID in the status field of the nodeClaim\", func() {\n\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass, nodeClaim)\n\t\tcloudProviderNodeClaim, err := cloudProvider.Create(ctx, nodeClaim)\n\t\tExpect(err).To(BeNil())\n\t\tExpect(cloudProviderNodeClaim).ToNot(BeNil())\n\t\tExpect(cloudProviderNodeClaim.Status.ImageID).ToNot(BeEmpty())\n\t})\n\tIt(\"should return availability zone ID as a label on the nodeClaim\", func() {\n\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass, nodeClaim)\n\t\tcloudProviderNodeClaim, err := cloudProvider.Create(ctx, nodeClaim)\n\t\tExpect(err).ToNot(HaveOccurred())\n\t\tExpect(cloudProviderNodeClaim).ToNot(BeNil())\n\t\tzone, ok := cloudProviderNodeClaim.GetLabels()[corev1.LabelTopologyZone]\n\t\tExpect(ok).To(BeTrue())\n\t\tzoneID, ok := cloudProviderNodeClaim.GetLabels()[v1.LabelTopologyZoneID]\n\t\tExpect(ok).To(BeTrue())\n\t\tsubnet, ok := lo.Find(nodeClass.Status.Subnets, func(s v1.Subnet) bool {\n\t\t\treturn s.Zone == zone\n\t\t})\n\t\tExpect(ok).To(BeTrue())\n\t\tExpect(zoneID).To(Equal(subnet.ZoneID))\n\t})\n\tIt(\"should expect a strict set of annotation keys\", func() {\n\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass, nodeClaim)\n\t\tcloudProviderNodeClaim, err := cloudProvider.Create(ctx, nodeClaim)\n\t\tExpect(err).To(BeNil())\n\t\tExpect(cloudProviderNodeClaim).ToNot(BeNil())\n\t\tExpect(len(lo.Keys(cloudProviderNodeClaim.Annotations))).To(BeNumerically(\"==\", 3))\n\t\tExpect(lo.Keys(cloudProviderNodeClaim.Annotations)).To(ContainElements(v1.AnnotationEC2NodeClassHash, v1.AnnotationEC2NodeClassHashVersion, v1.AnnotationInstanceProfile))\n\t\tExpect(cloudProviderNodeClaim.Annotations[v1.AnnotationInstanceProfile]).To(Equal(nodeClass.Status.InstanceProfile))\n\t})\n\tIt(\"should return NodeClass Hash on the nodeClaim\", func() {\n\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass, nodeClaim)\n\t\tcloudProviderNodeClaim, err := cloudProvider.Create(ctx, nodeClaim)\n\t\tExpect(err).To(BeNil())\n\t\tExpect(cloudProviderNodeClaim).ToNot(BeNil())\n\t\t_, ok := cloudProviderNodeClaim.Annotations[v1.AnnotationEC2NodeClassHash]\n\t\tExpect(ok).To(BeTrue())\n\t})\n\tIt(\"should return NodeClass Hash Version on the nodeClaim\", func() {\n\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass, nodeClaim)\n\t\tcloudProviderNodeClaim, err := cloudProvider.Create(ctx, nodeClaim)\n\t\tExpect(err).To(BeNil())\n\t\tExpect(cloudProviderNodeClaim).ToNot(BeNil())\n\t\tv, ok := cloudProviderNodeClaim.Annotations[v1.AnnotationEC2NodeClassHashVersion]\n\t\tExpect(ok).To(BeTrue())\n\t\tExpect(v).To(Equal(v1.EC2NodeClassHashVersion))\n\t})\n\tContext(\"EC2 Context\", func() {\n\t\tcontextID := \"context-1234\"\n\t\tIt(\"should set context on the CreateFleet request if specified on the NodePool\", func() {\n\t\t\tnodeClass.Spec.Context = aws.String(contextID)\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\tpod := coretest.UnschedulablePod()\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t\tExpect(awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Len()).To(Equal(1))\n\t\t\tcreateFleetInput := awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Pop()\n\t\t\tExpect(aws.ToString(createFleetInput.Context)).To(Equal(contextID))\n\t\t})\n\t\tIt(\"should not set context on the CreateFleet request when min values are relaxed even if specified on the NodePool\", func() {\n\t\t\tnodeClass.Spec.Context = aws.String(contextID)\n\t\t\tnodeClaimWithRelaxedMinValues := nodeClaim.DeepCopy()\n\t\t\tnodeClaimWithRelaxedMinValues.Annotations = lo.Assign(nodeClaimWithRelaxedMinValues.Annotations, map[string]string{karpv1.NodeClaimMinValuesRelaxedAnnotationKey: \"true\"})\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass, nodeClaimWithRelaxedMinValues)\n\t\t\tcloudProviderNodeClaim, err := cloudProvider.Create(ctx, nodeClaimWithRelaxedMinValues)\n\t\t\tExpect(err).To(BeNil())\n\t\t\tExpect(cloudProviderNodeClaim).ToNot(BeNil())\n\n\t\t\tExpect(awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Len()).To(Equal(1))\n\t\t\tcreateFleetInput := awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Pop()\n\t\t\tExpect(aws.ToString(createFleetInput.Context)).To(BeEmpty())\n\t\t})\n\t\tIt(\"should default to no EC2 Context\", func() {\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\tpod := coretest.UnschedulablePod()\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t\tExpect(awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Len()).To(Equal(1))\n\t\t\tcreateFleetInput := awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Pop()\n\t\t\tExpect(createFleetInput.Context).To(BeNil())\n\t\t})\n\t})\n\tContext(\"MinValues\", func() {\n\t\tIt(\"CreateFleet input should respect minValues for In operator requirement from NodePool\", func() {\n\t\t\t// Create fake InstanceTypes where one instances can fit 2 pods and another one can fit only 1 pod.\n\t\t\t// This specific type of inputs will help us differentiate the scenario we are trying to test where ideally\n\t\t\t// 1 instance launch would have been sufficient to fit the pods and was cheaper but we would launch 2 separate\n\t\t\t// instances to meet the minimum requirement.\n\t\t\tinstances := fake.MakeInstances()\n\t\t\tinstances, _ = fake.MakeUniqueInstancesAndFamilies(instances, 2)\n\t\t\tinstances[0].VCpuInfo = &ec2types.VCpuInfo{DefaultVCpus: aws.Int32(1)}\n\t\t\tinstances[1].VCpuInfo = &ec2types.VCpuInfo{DefaultVCpus: aws.Int32(8)}\n\t\t\tawsEnv.EC2API.DescribeInstanceTypesOutput.Set(&ec2.DescribeInstanceTypesOutput{InstanceTypes: instances})\n\t\t\tawsEnv.EC2API.DescribeInstanceTypeOfferingsOutput.Set(&ec2.DescribeInstanceTypeOfferingsOutput{InstanceTypeOfferings: fake.MakeInstanceOfferings(instances)})\n\t\t\tnow := time.Now()\n\t\t\tawsEnv.EC2API.DescribeSpotPriceHistoryBehavior.Output.Set(&ec2.DescribeSpotPriceHistoryOutput{\n\t\t\t\tSpotPriceHistory: []ec2types.SpotPrice{\n\t\t\t\t\t{\n\t\t\t\t\t\tAvailabilityZone: aws.String(\"test-zone-1a\"),\n\t\t\t\t\t\tInstanceType:     instances[0].InstanceType,\n\t\t\t\t\t\tSpotPrice:        aws.String(\"0.002\"),\n\t\t\t\t\t\tTimestamp:        &now,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tAvailabilityZone: aws.String(\"test-zone-1a\"),\n\t\t\t\t\t\tInstanceType:     instances[1].InstanceType,\n\t\t\t\t\t\tSpotPrice:        aws.String(\"0.003\"),\n\t\t\t\t\t\tTimestamp:        &now,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t})\n\t\t\tExpect(awsEnv.InstanceTypesProvider.UpdateInstanceTypes(ctx)).To(Succeed())\n\t\t\tExpect(awsEnv.InstanceTypesProvider.UpdateInstanceTypeOfferings(ctx)).To(Succeed())\n\t\t\tExpect(awsEnv.PricingProvider.UpdateSpotPricing(ctx)).To(Succeed())\n\t\t\tinstanceNames := lo.Map(instances, func(info ec2types.InstanceTypeInfo, _ int) string { return string(info.InstanceType) })\n\n\t\t\t// Define NodePool that has minValues on instance-type requirement.\n\t\t\tnodePool = coretest.NodePool(karpv1.NodePool{\n\t\t\t\tSpec: karpv1.NodePoolSpec{\n\t\t\t\t\tTemplate: karpv1.NodeClaimTemplate{\n\t\t\t\t\t\tSpec: karpv1.NodeClaimTemplateSpec{\n\t\t\t\t\t\t\tNodeClassRef: &karpv1.NodeClassReference{\n\t\t\t\t\t\t\t\tGroup: object.GVK(nodeClass).Group,\n\t\t\t\t\t\t\t\tKind:  object.GVK(nodeClass).Kind,\n\t\t\t\t\t\t\t\tName:  nodeClass.Name,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tRequirements: []karpv1.NodeSelectorRequirementWithMinValues{\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tKey:      karpv1.CapacityTypeLabelKey,\n\t\t\t\t\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\t\t\t\t\tValues:   []string{karpv1.CapacityTypeSpot},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\n\t\t\t\t\t\t\t\t\tKey:       corev1.LabelInstanceTypeStable,\n\t\t\t\t\t\t\t\t\tOperator:  corev1.NodeSelectorOpIn,\n\t\t\t\t\t\t\t\t\tValues:    instanceNames,\n\t\t\t\t\t\t\t\t\tMinValues: lo.ToPtr(2),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t})\n\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\n\t\t\t// 2 pods are created with resources such that both fit together only in one of the 2 InstanceTypes created above.\n\t\t\tpod1 := coretest.UnschedulablePod(\n\t\t\t\tcoretest.PodOptions{\n\t\t\t\t\tResourceRequirements: corev1.ResourceRequirements{Requests: corev1.ResourceList{\n\t\t\t\t\t\tcorev1.ResourceCPU: resource.MustParse(\"0.9\")},\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\tpod2 := coretest.UnschedulablePod(\n\t\t\t\tcoretest.PodOptions{\n\t\t\t\t\tResourceRequirements: corev1.ResourceRequirements{Requests: corev1.ResourceList{\n\t\t\t\t\t\tcorev1.ResourceCPU: resource.MustParse(\"0.9\")},\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod1, pod2)\n\n\t\t\t// Under normal circumstances 1 node would have been created that fits both the pods but\n\t\t\t// here minValue enforces to include both the instances. And since one of the instances can\n\t\t\t// only fit 1 pod, only 1 pod is scheduled to run in the node to be launched by CreateFleet.\n\t\t\tnode1 := ExpectScheduled(ctx, env.Client, pod1)\n\t\t\tnode2 := ExpectScheduled(ctx, env.Client, pod2)\n\n\t\t\t// This ensures that the pods are scheduled in 2 different nodes.\n\t\t\tExpect(node1.Name).ToNot(Equal(node2.Name))\n\t\t\tExpect(awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Len()).To(Equal(2))\n\t\t\tcreateFleetInput := awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Pop()\n\t\t\tuniqueInstanceTypes := sets.Set[string]{}\n\t\t\tfor _, launchTemplateConfig := range createFleetInput.LaunchTemplateConfigs {\n\t\t\t\tfor _, override := range launchTemplateConfig.Overrides {\n\t\t\t\t\tuniqueInstanceTypes.Insert(string(override.InstanceType))\n\t\t\t\t}\n\t\t\t}\n\t\t\t// This ensures that we have sent the minimum number of requirements defined in the NodePool.\n\t\t\tExpect(len(uniqueInstanceTypes)).To(BeNumerically(\">=\", 2))\n\t\t})\n\t\tIt(\"CreateFleet input should respect minValues for Exists Operator in requirement from NodePool\", func() {\n\t\t\t// Create fake InstanceTypes where one instances can fit 2 pods and another one can fit only 1 pod.\n\t\t\tinstances := fake.MakeInstances()\n\t\t\tinstances, _ = fake.MakeUniqueInstancesAndFamilies(instances, 2)\n\t\t\tinstances[0].VCpuInfo = &ec2types.VCpuInfo{DefaultVCpus: aws.Int32(1)}\n\t\t\tinstances[1].VCpuInfo = &ec2types.VCpuInfo{DefaultVCpus: aws.Int32(8)}\n\t\t\tawsEnv.EC2API.DescribeInstanceTypesOutput.Set(&ec2.DescribeInstanceTypesOutput{InstanceTypes: instances})\n\t\t\tawsEnv.EC2API.DescribeInstanceTypeOfferingsOutput.Set(&ec2.DescribeInstanceTypeOfferingsOutput{InstanceTypeOfferings: fake.MakeInstanceOfferings(instances)})\n\t\t\tnow := time.Now()\n\t\t\tawsEnv.EC2API.DescribeSpotPriceHistoryBehavior.Output.Set(&ec2.DescribeSpotPriceHistoryOutput{\n\t\t\t\tSpotPriceHistory: []ec2types.SpotPrice{\n\t\t\t\t\t{\n\t\t\t\t\t\tAvailabilityZone: aws.String(\"test-zone-1a\"),\n\t\t\t\t\t\tInstanceType:     instances[0].InstanceType,\n\t\t\t\t\t\tSpotPrice:        aws.String(\"0.002\"),\n\t\t\t\t\t\tTimestamp:        &now,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tAvailabilityZone: aws.String(\"test-zone-1a\"),\n\t\t\t\t\t\tInstanceType:     instances[1].InstanceType,\n\t\t\t\t\t\tSpotPrice:        aws.String(\"0.003\"),\n\t\t\t\t\t\tTimestamp:        &now,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t})\n\t\t\tExpect(awsEnv.InstanceTypesProvider.UpdateInstanceTypes(ctx)).To(Succeed())\n\t\t\tExpect(awsEnv.InstanceTypesProvider.UpdateInstanceTypeOfferings(ctx)).To(Succeed())\n\t\t\tExpect(awsEnv.PricingProvider.UpdateSpotPricing(ctx)).To(Succeed())\n\t\t\tinstanceNames := lo.Map(instances, func(info ec2types.InstanceTypeInfo, _ int) string { return string(info.InstanceType) })\n\n\t\t\t// Define NodePool that has minValues on instance-type requirement.\n\t\t\tnodePool = coretest.NodePool(karpv1.NodePool{\n\t\t\t\tSpec: karpv1.NodePoolSpec{\n\t\t\t\t\tTemplate: karpv1.NodeClaimTemplate{\n\t\t\t\t\t\tSpec: karpv1.NodeClaimTemplateSpec{\n\t\t\t\t\t\t\tNodeClassRef: &karpv1.NodeClassReference{\n\t\t\t\t\t\t\t\tGroup: object.GVK(nodeClass).Group,\n\t\t\t\t\t\t\t\tKind:  object.GVK(nodeClass).Kind,\n\t\t\t\t\t\t\t\tName:  nodeClass.Name,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tRequirements: []karpv1.NodeSelectorRequirementWithMinValues{\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tKey:       corev1.LabelInstanceTypeStable,\n\t\t\t\t\t\t\t\t\tOperator:  corev1.NodeSelectorOpExists,\n\t\t\t\t\t\t\t\t\tMinValues: lo.ToPtr(2),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tKey:       corev1.LabelInstanceTypeStable,\n\t\t\t\t\t\t\t\t\tOperator:  corev1.NodeSelectorOpIn,\n\t\t\t\t\t\t\t\t\tValues:    instanceNames,\n\t\t\t\t\t\t\t\t\tMinValues: lo.ToPtr(1),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t})\n\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\n\t\t\t// 2 pods are created with resources such that both fit together only in one of the 2 InstanceTypes created above.\n\t\t\tpod1 := coretest.UnschedulablePod(\n\t\t\t\tcoretest.PodOptions{\n\t\t\t\t\tResourceRequirements: corev1.ResourceRequirements{Requests: corev1.ResourceList{\n\t\t\t\t\t\tcorev1.ResourceCPU: resource.MustParse(\"0.9\")},\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\tpod2 := coretest.UnschedulablePod(\n\t\t\t\tcoretest.PodOptions{\n\t\t\t\t\tResourceRequirements: corev1.ResourceRequirements{Requests: corev1.ResourceList{\n\t\t\t\t\t\tcorev1.ResourceCPU: resource.MustParse(\"0.9\")},\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod1, pod2)\n\n\t\t\t// Under normal circumstances 1 node would have been created that fits both the pods but\n\t\t\t// here minValue enforces to include both the instances. And since one of the instances can\n\t\t\t// only fit 1 pod, only 1 pod is scheduled to run in the node to be launched by CreateFleet.\n\t\t\tnode1 := ExpectScheduled(ctx, env.Client, pod1)\n\t\t\tnode2 := ExpectScheduled(ctx, env.Client, pod2)\n\n\t\t\t// This ensures that the pods are scheduled in 2 different nodes.\n\t\t\tExpect(node1.Name).ToNot(Equal(node2.Name))\n\t\t\tExpect(awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Len()).To(Equal(2))\n\t\t\tcreateFleetInput := awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Pop()\n\t\t\tuniqueInstanceTypes := sets.Set[string]{}\n\t\t\tfor _, launchTemplateConfig := range createFleetInput.LaunchTemplateConfigs {\n\t\t\t\tfor _, override := range launchTemplateConfig.Overrides {\n\t\t\t\t\tuniqueInstanceTypes.Insert(string(override.InstanceType))\n\t\t\t\t}\n\t\t\t}\n\t\t\t// This ensures that we have sent the minimum number of requirements defined in the NodePool.\n\t\t\tExpect(len(uniqueInstanceTypes)).To(BeNumerically(\">=\", 2))\n\t\t})\n\t\tIt(\"CreateFleet input should respect minValues from multiple keys in NodePool\", func() {\n\t\t\t// Create fake InstanceTypes where 2 instances can fit 2 pods individually and one can fit only 1 pod.\n\t\t\tinstances := fake.MakeInstances()\n\t\t\tuniqInstanceTypes, instanceFamilies := fake.MakeUniqueInstancesAndFamilies(instances, 3)\n\t\t\tuniqInstanceTypes[0].VCpuInfo = &ec2types.VCpuInfo{DefaultVCpus: aws.Int32(1)}\n\t\t\tuniqInstanceTypes[1].VCpuInfo = &ec2types.VCpuInfo{DefaultVCpus: aws.Int32(4)}\n\t\t\tuniqInstanceTypes[2].VCpuInfo = &ec2types.VCpuInfo{DefaultVCpus: aws.Int32(8)}\n\t\t\tawsEnv.EC2API.DescribeInstanceTypesOutput.Set(&ec2.DescribeInstanceTypesOutput{InstanceTypes: uniqInstanceTypes})\n\t\t\tawsEnv.EC2API.DescribeInstanceTypeOfferingsOutput.Set(&ec2.DescribeInstanceTypeOfferingsOutput{InstanceTypeOfferings: fake.MakeInstanceOfferings(uniqInstanceTypes)})\n\t\t\tnow := time.Now()\n\t\t\tawsEnv.EC2API.DescribeSpotPriceHistoryBehavior.Output.Set(&ec2.DescribeSpotPriceHistoryOutput{\n\t\t\t\tSpotPriceHistory: []ec2types.SpotPrice{\n\t\t\t\t\t{\n\t\t\t\t\t\tAvailabilityZone: aws.String(\"test-zone-1a\"),\n\t\t\t\t\t\tInstanceType:     uniqInstanceTypes[0].InstanceType,\n\t\t\t\t\t\tSpotPrice:        aws.String(\"0.002\"),\n\t\t\t\t\t\tTimestamp:        &now,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tAvailabilityZone: aws.String(\"test-zone-1a\"),\n\t\t\t\t\t\tInstanceType:     uniqInstanceTypes[1].InstanceType,\n\t\t\t\t\t\tSpotPrice:        aws.String(\"0.003\"),\n\t\t\t\t\t\tTimestamp:        &now,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tAvailabilityZone: aws.String(\"test-zone-1a\"),\n\t\t\t\t\t\tInstanceType:     uniqInstanceTypes[2].InstanceType,\n\t\t\t\t\t\tSpotPrice:        aws.String(\"0.004\"),\n\t\t\t\t\t\tTimestamp:        &now,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t})\n\t\t\tExpect(awsEnv.InstanceTypesProvider.UpdateInstanceTypes(ctx)).To(Succeed())\n\t\t\tExpect(awsEnv.InstanceTypesProvider.UpdateInstanceTypeOfferings(ctx)).To(Succeed())\n\t\t\tExpect(awsEnv.PricingProvider.UpdateSpotPricing(ctx)).To(Succeed())\n\t\t\tinstanceNames := lo.Map(uniqInstanceTypes, func(info ec2types.InstanceTypeInfo, _ int) string { return string(info.InstanceType) })\n\n\t\t\t// Define NodePool that has minValues in multiple requirements.\n\t\t\tnodePool = coretest.NodePool(karpv1.NodePool{\n\t\t\t\tSpec: karpv1.NodePoolSpec{\n\t\t\t\t\tTemplate: karpv1.NodeClaimTemplate{\n\t\t\t\t\t\tSpec: karpv1.NodeClaimTemplateSpec{\n\t\t\t\t\t\t\tNodeClassRef: &karpv1.NodeClassReference{\n\t\t\t\t\t\t\t\tGroup: object.GVK(nodeClass).Group,\n\t\t\t\t\t\t\t\tKind:  object.GVK(nodeClass).Kind,\n\t\t\t\t\t\t\t\tName:  nodeClass.Name,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tRequirements: []karpv1.NodeSelectorRequirementWithMinValues{\n\t\t\t\t\t\t\t\t{\n\n\t\t\t\t\t\t\t\t\tKey:      corev1.LabelInstanceTypeStable,\n\t\t\t\t\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\t\t\t\t\tValues:   instanceNames,\n\t\t\t\t\t\t\t\t\t// consider at least 2 unique instance types\n\t\t\t\t\t\t\t\t\tMinValues: lo.ToPtr(2),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\n\t\t\t\t\t\t\t\t\tKey:      v1.LabelInstanceFamily,\n\t\t\t\t\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\t\t\t\t\tValues:   instanceFamilies.UnsortedList(),\n\t\t\t\t\t\t\t\t\t// consider at least 3 unique instance families\n\t\t\t\t\t\t\t\t\tMinValues: lo.ToPtr(3),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t})\n\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\tpod1 := coretest.UnschedulablePod(\n\t\t\t\tcoretest.PodOptions{\n\t\t\t\t\tResourceRequirements: corev1.ResourceRequirements{Requests: corev1.ResourceList{\n\t\t\t\t\t\tcorev1.ResourceCPU: resource.MustParse(\"0.9\")},\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\tpod2 := coretest.UnschedulablePod(\n\t\t\t\tcoretest.PodOptions{\n\t\t\t\t\tResourceRequirements: corev1.ResourceRequirements{Requests: corev1.ResourceList{\n\t\t\t\t\t\tcorev1.ResourceCPU: resource.MustParse(\"0.9\")},\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod1, pod2)\n\n\t\t\t// Under normal circumstances 1 node would have been created that fits both the pods but\n\t\t\t// here minValue enforces to include all the 3 instances to satisfy both the instance-type and instance-family requirements.\n\t\t\t// And since one of the instances can only fit 1 pod, only 1 pod is scheduled to run in the node to be launched by CreateFleet.\n\t\t\tnode1 := ExpectScheduled(ctx, env.Client, pod1)\n\t\t\tnode2 := ExpectScheduled(ctx, env.Client, pod2)\n\t\t\tExpect(node1.Name).ToNot(Equal(node2.Name))\n\t\t\tExpect(awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Len()).To(Equal(2))\n\t\t\tcreateFleetInput := awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Pop()\n\t\t\tuniqueInstanceTypes, uniqueInstanceFamilies := sets.Set[string]{}, sets.Set[string]{}\n\t\t\tfor _, launchTemplateConfig := range createFleetInput.LaunchTemplateConfigs {\n\t\t\t\tfor _, override := range launchTemplateConfig.Overrides {\n\t\t\t\t\tuniqueInstanceTypes.Insert(string(override.InstanceType))\n\t\t\t\t\tuniqueInstanceFamilies.Insert(strings.Split(string(override.InstanceType), \".\")[0])\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Ensure that there are at least minimum number of unique instance types as per the requirement in the CreateFleet request.\n\t\t\tExpect(len(uniqueInstanceTypes)).To(BeNumerically(\"==\", 3))\n\t\t\t// Ensure that there are at least minimum number of unique instance families as per the requirement in the CreateFleet request.\n\t\t\tExpect(len(uniqueInstanceFamilies)).To(BeNumerically(\"==\", 3))\n\t\t})\n\t})\n\tContext(\"NodeClaim Drift\", func() {\n\t\tvar armAMIID, amdAMIID string\n\t\tvar validSecurityGroup string\n\t\tvar selectedInstanceType *corecloudprovider.InstanceType\n\t\tvar instance ec2types.Instance\n\t\tvar validSubnet1 string\n\t\tvar validSubnet2 string\n\t\tBeforeEach(func() {\n\t\t\tarmAMIID, amdAMIID = fake.ImageID(), fake.ImageID()\n\t\t\tvalidSecurityGroup = fake.SecurityGroupID()\n\t\t\tvalidSubnet1 = fake.SubnetID()\n\t\t\tvalidSubnet2 = fake.SubnetID()\n\t\t\tawsEnv.EC2API.DescribeImagesOutput.Set(&ec2.DescribeImagesOutput{\n\t\t\t\tImages: []ec2types.Image{\n\t\t\t\t\t{\n\t\t\t\t\t\tName:         aws.String(coretest.RandomName()),\n\t\t\t\t\t\tImageId:      aws.String(armAMIID),\n\t\t\t\t\t\tArchitecture: \"arm64\",\n\t\t\t\t\t\tCreationDate: aws.String(\"2022-08-15T12:00:00Z\"),\n\t\t\t\t\t\tTags: []ec2types.Tag{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tKey:   aws.String(\"ami-key-1\"),\n\t\t\t\t\t\t\t\tValue: aws.String(\"ami-value-1\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tState: ec2types.ImageStateAvailable,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tName:         aws.String(coretest.RandomName()),\n\t\t\t\t\t\tImageId:      aws.String(amdAMIID),\n\t\t\t\t\t\tArchitecture: \"x86_64\",\n\t\t\t\t\t\tCreationDate: aws.String(\"2022-08-15T12:00:00Z\"),\n\t\t\t\t\t\tTags: []ec2types.Tag{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tKey:   aws.String(\"ami-key-2\"),\n\t\t\t\t\t\t\t\tValue: aws.String(\"ami-value-2\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tState: ec2types.ImageStateAvailable,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t})\n\t\t\tawsEnv.EC2API.DescribeSecurityGroupsBehavior.Output.Set(&ec2.DescribeSecurityGroupsOutput{\n\t\t\t\tSecurityGroups: []ec2types.SecurityGroup{\n\t\t\t\t\t{\n\t\t\t\t\t\tGroupId:   aws.String(validSecurityGroup),\n\t\t\t\t\t\tGroupName: aws.String(\"test-securitygroup\"),\n\t\t\t\t\t\tTags: []ec2types.Tag{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tKey:   aws.String(\"sg-key\"),\n\t\t\t\t\t\t\t\tValue: aws.String(\"sg-value\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t})\n\t\t\tawsEnv.EC2API.DescribeSubnetsBehavior.Output.Set(&ec2.DescribeSubnetsOutput{\n\t\t\t\tSubnets: []ec2types.Subnet{\n\t\t\t\t\t{\n\t\t\t\t\t\tSubnetId:         aws.String(validSubnet1),\n\t\t\t\t\t\tAvailabilityZone: aws.String(\"zone-1\"),\n\t\t\t\t\t\tTags: []ec2types.Tag{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tKey:   aws.String(\"sn-key-1\"),\n\t\t\t\t\t\t\t\tValue: aws.String(\"sn-value-1\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tSubnetId:         aws.String(validSubnet2),\n\t\t\t\t\t\tAvailabilityZone: aws.String(\"zone-2\"),\n\t\t\t\t\t\tTags: []ec2types.Tag{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tKey:   aws.String(\"sn-key-2\"),\n\t\t\t\t\t\t\t\tValue: aws.String(\"sn-value-2\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t})\n\t\t\tnodeClass.Status = v1.EC2NodeClassStatus{\n\t\t\t\tInstanceProfile: \"test-profile\",\n\t\t\t\tSubnets: []v1.Subnet{\n\t\t\t\t\t{\n\t\t\t\t\t\tID:   validSubnet1,\n\t\t\t\t\t\tZone: \"zone-1\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tID:   validSubnet2,\n\t\t\t\t\t\tZone: \"zone-2\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tSecurityGroups: []v1.SecurityGroup{\n\t\t\t\t\t{\n\t\t\t\t\t\tID: validSecurityGroup,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tAMIs: []v1.AMI{\n\t\t\t\t\t{\n\t\t\t\t\t\tID: armAMIID,\n\t\t\t\t\t\tRequirements: []corev1.NodeSelectorRequirement{\n\t\t\t\t\t\t\t{Key: corev1.LabelArchStable, Operator: corev1.NodeSelectorOpIn, Values: []string{karpv1.ArchitectureArm64}},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tID: amdAMIID,\n\t\t\t\t\t\tRequirements: []corev1.NodeSelectorRequirement{\n\t\t\t\t\t\t\t{Key: corev1.LabelArchStable, Operator: corev1.NodeSelectorOpIn, Values: []string{karpv1.ArchitectureAmd64}},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\tinstanceTypes, err := cloudProvider.GetInstanceTypes(ctx, nodePool)\n\t\t\tExpect(err).ToNot(HaveOccurred())\n\t\t\tvar ok bool\n\t\t\tselectedInstanceType, ok = lo.Find(instanceTypes, func(i *corecloudprovider.InstanceType) bool {\n\t\t\t\treturn i.Requirements.Compatible(scheduling.NewLabelRequirements(map[string]string{\n\t\t\t\t\tcorev1.LabelArchStable: karpv1.ArchitectureAmd64,\n\t\t\t\t})) == nil\n\t\t\t})\n\t\t\tExpect(ok).To(BeTrue())\n\n\t\t\t// Create the instance we want returned from the EC2 API\n\t\t\tinstance = ec2types.Instance{\n\t\t\t\tImageId:               aws.String(amdAMIID),\n\t\t\t\tInstanceType:          ec2types.InstanceType(selectedInstanceType.Name),\n\t\t\t\tSubnetId:              aws.String(validSubnet1),\n\t\t\t\tSpotInstanceRequestId: aws.String(coretest.RandomName()),\n\t\t\t\tState: &ec2types.InstanceState{\n\t\t\t\t\tName: ec2types.InstanceStateNameRunning,\n\t\t\t\t},\n\t\t\t\tInstanceId: aws.String(fake.InstanceID()),\n\t\t\t\tPlacement: &ec2types.Placement{\n\t\t\t\t\tAvailabilityZone: aws.String(\"test-zone-1a\"),\n\t\t\t\t},\n\t\t\t\tSecurityGroups: []ec2types.GroupIdentifier{{GroupId: aws.String(validSecurityGroup)}},\n\t\t\t}\n\t\t\tawsEnv.EC2API.DescribeInstancesBehavior.Output.Set(&ec2.DescribeInstancesOutput{\n\t\t\t\tReservations: []ec2types.Reservation{{Instances: []ec2types.Instance{instance}}},\n\t\t\t})\n\t\t\tnodeClass.Annotations = lo.Assign(nodeClass.Annotations, map[string]string{\n\t\t\t\tv1.AnnotationEC2NodeClassHash:        nodeClass.Hash(),\n\t\t\t\tv1.AnnotationEC2NodeClassHashVersion: v1.EC2NodeClassHashVersion,\n\t\t\t})\n\t\t\tnodeClaim.Status.ProviderID = fake.ProviderID(lo.FromPtr(instance.InstanceId))\n\t\t\tnodeClaim.Status.ImageID = amdAMIID\n\t\t\tnodeClaim.Annotations = lo.Assign(nodeClaim.Annotations, map[string]string{\n\t\t\t\tv1.AnnotationEC2NodeClassHash:        nodeClass.Hash(),\n\t\t\t\tv1.AnnotationEC2NodeClassHashVersion: v1.EC2NodeClassHashVersion,\n\t\t\t})\n\t\t\tnodeClaim.Labels = lo.Assign(nodeClaim.Labels, map[string]string{corev1.LabelInstanceTypeStable: selectedInstanceType.Name})\n\t\t})\n\t\tIt(\"should not fail if NodeClass does not exist\", func() {\n\t\t\tExpectDeleted(ctx, env.Client, nodeClass)\n\t\t\tdrifted, err := cloudProvider.IsDrifted(ctx, nodeClaim)\n\t\t\tExpect(err).ToNot(HaveOccurred())\n\t\t\tExpect(drifted).To(BeEmpty())\n\t\t})\n\t\tIt(\"should not fail if NodePool does not exist\", func() {\n\t\t\tExpectDeleted(ctx, env.Client, nodePool)\n\t\t\tdrifted, err := cloudProvider.IsDrifted(ctx, nodeClaim)\n\t\t\tExpect(err).ToNot(HaveOccurred())\n\t\t\tExpect(drifted).To(BeEmpty())\n\t\t})\n\t\tIt(\"should return drifted if the AMI is not valid\", func() {\n\t\t\tnodeClaim.Status.ImageID = fake.ImageID()\n\t\t\tisDrifted, err := cloudProvider.IsDrifted(ctx, nodeClaim)\n\t\t\tExpect(err).ToNot(HaveOccurred())\n\t\t\tExpect(isDrifted).To(Equal(cloudprovider.AMIDrift))\n\t\t})\n\t\tIt(\"should return drifted if there are multiple drift reasons\", func() {\n\t\t\t// Instance is a reference to what we return in the GetInstances call\n\t\t\tinstance.ImageId = aws.String(fake.ImageID())\n\t\t\tinstance.SubnetId = aws.String(fake.SubnetID())\n\t\t\tinstance.SecurityGroups = []ec2types.GroupIdentifier{{GroupId: aws.String(fake.SecurityGroupID())}}\n\t\t\tawsEnv.EC2API.DescribeInstancesBehavior.Output.Set(&ec2.DescribeInstancesOutput{\n\t\t\t\tReservations: []ec2types.Reservation{{Instances: []ec2types.Instance{instance}}},\n\t\t\t})\n\t\t\t// Assign a fake hash\n\t\t\tnodeClass.Annotations = lo.Assign(nodeClass.Annotations, map[string]string{\n\t\t\t\tv1.AnnotationEC2NodeClassHash: \"abcdefghijkl\",\n\t\t\t})\n\t\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\t\tisDrifted, err := cloudProvider.IsDrifted(ctx, nodeClaim)\n\t\t\tExpect(err).ToNot(HaveOccurred())\n\t\t\tExpect(isDrifted).To(Equal(cloudprovider.NodeClassDrift))\n\t\t})\n\t\tIt(\"should return drifted if the subnet is not valid\", func() {\n\t\t\tinstance.SubnetId = aws.String(fake.SubnetID())\n\t\t\tawsEnv.EC2API.DescribeInstancesBehavior.Output.Set(&ec2.DescribeInstancesOutput{\n\t\t\t\tReservations: []ec2types.Reservation{{Instances: []ec2types.Instance{instance}}},\n\t\t\t})\n\t\t\tisDrifted, err := cloudProvider.IsDrifted(ctx, nodeClaim)\n\t\t\tExpect(err).ToNot(HaveOccurred())\n\t\t\tExpect(isDrifted).To(Equal(cloudprovider.SubnetDrift))\n\t\t})\n\t\tIt(\"should return an error if subnets are empty\", func() {\n\t\t\tawsEnv.SubnetCache.Flush()\n\t\t\tnodeClass.Status.Subnets = []v1.Subnet{}\n\t\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\t\t_, err := cloudProvider.IsDrifted(ctx, nodeClaim)\n\t\t\tExpect(err).To(HaveOccurred())\n\t\t})\n\t\tIt(\"should not return drifted if the NodeClaim is valid\", func() {\n\t\t\tisDrifted, err := cloudProvider.IsDrifted(ctx, nodeClaim)\n\t\t\tExpect(err).ToNot(HaveOccurred())\n\t\t\tExpect(isDrifted).To(BeEmpty())\n\t\t})\n\t\tIt(\"should return an error if the security groups are empty\", func() {\n\t\t\tnodeClass.Status.SecurityGroups = []v1.SecurityGroup{}\n\t\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\t\t// Instance is a reference to what we return in the GetInstances call\n\t\t\tinstance.SecurityGroups = []ec2types.GroupIdentifier{{GroupId: aws.String(fake.SecurityGroupID())}}\n\t\t\t_, err := cloudProvider.IsDrifted(ctx, nodeClaim)\n\t\t\tExpect(err).To(HaveOccurred())\n\t\t})\n\t\tIt(\"should return drifted if the instance security groups doesn't match the discovered values\", func() {\n\t\t\t// Instance is a reference to what we return in the GetInstances call\n\t\t\tinstance.SecurityGroups = []ec2types.GroupIdentifier{{GroupId: aws.String(fake.SecurityGroupID())}}\n\t\t\tawsEnv.EC2API.DescribeInstancesBehavior.Output.Set(&ec2.DescribeInstancesOutput{\n\t\t\t\tReservations: []ec2types.Reservation{{Instances: []ec2types.Instance{instance}}},\n\t\t\t})\n\t\t\tisDrifted, err := cloudProvider.IsDrifted(ctx, nodeClaim)\n\t\t\tExpect(err).ToNot(HaveOccurred())\n\t\t\tExpect(isDrifted).To(Equal(cloudprovider.SecurityGroupDrift))\n\t\t})\n\t\tIt(\"should return drifted if there are more instance security groups present than in the discovered values\", func() {\n\t\t\t// Instance is a reference to what we return in the GetInstances call\n\t\t\tinstance.SecurityGroups = []ec2types.GroupIdentifier{{GroupId: aws.String(fake.SecurityGroupID())}, {GroupId: aws.String(validSecurityGroup)}}\n\t\t\tawsEnv.EC2API.DescribeInstancesBehavior.Output.Set(&ec2.DescribeInstancesOutput{\n\t\t\t\tReservations: []ec2types.Reservation{{Instances: []ec2types.Instance{instance}}},\n\t\t\t})\n\t\t\tisDrifted, err := cloudProvider.IsDrifted(ctx, nodeClaim)\n\t\t\tExpect(err).ToNot(HaveOccurred())\n\t\t\tExpect(isDrifted).To(Equal(cloudprovider.SecurityGroupDrift))\n\t\t})\n\t\tIt(\"should return drifted if more security groups are present than instance security groups then discovered from nodeclass\", func() {\n\t\t\tnodeClass.Status.SecurityGroups = []v1.SecurityGroup{\n\t\t\t\t{\n\t\t\t\t\tID:   validSecurityGroup,\n\t\t\t\t\tName: \"test-securitygroup\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tID:   fake.SecurityGroupID(),\n\t\t\t\t\tName: \"test-securitygroup\",\n\t\t\t\t},\n\t\t\t}\n\t\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\t\tisDrifted, err := cloudProvider.IsDrifted(ctx, nodeClaim)\n\t\t\tExpect(err).ToNot(HaveOccurred())\n\t\t\tExpect(isDrifted).To(Equal(cloudprovider.SecurityGroupDrift))\n\t\t})\n\t\tIt(\"should dynamically drift nodeclaims for capacity reservations\", func() {\n\t\t\tnodeClass.Status.CapacityReservations = []v1.CapacityReservation{\n\t\t\t\t{\n\t\t\t\t\tAvailabilityZone:      \"test-zone-1a\",\n\t\t\t\t\tID:                    \"cr-foo\",\n\t\t\t\t\tInstanceMatchCriteria: string(ec2types.InstanceMatchCriteriaTargeted),\n\t\t\t\t\tInstanceType:          \"m5.large\",\n\t\t\t\t\tOwnerID:               \"012345678901\",\n\t\t\t\t\tState:                 v1.CapacityReservationStateActive,\n\t\t\t\t\tReservationType:       v1.CapacityReservationTypeDefault,\n\t\t\t\t},\n\t\t\t}\n\t\t\tsetReservationID := func(id string) {\n\t\t\t\tout := awsEnv.EC2API.DescribeInstancesBehavior.Output.Clone()\n\t\t\t\tout.Reservations[0].Instances[0].SpotInstanceRequestId = nil\n\t\t\t\tout.Reservations[0].Instances[0].CapacityReservationId = lo.ToPtr(id)\n\t\t\t\tout.Reservations[0].Instances[0].CapacityReservationSpecification = &ec2types.CapacityReservationSpecificationResponse{\n\t\t\t\t\tCapacityReservationPreference: ec2types.CapacityReservationPreferenceCapacityReservationsOnly,\n\t\t\t\t}\n\t\t\t\tawsEnv.EC2API.DescribeInstancesBehavior.Output.Set(out)\n\t\t\t}\n\t\t\tsetReservationID(\"cr-foo\")\n\t\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\t\tisDrifted, err := cloudProvider.IsDrifted(ctx, nodeClaim)\n\t\t\tExpect(err).ToNot(HaveOccurred())\n\t\t\tExpect(isDrifted).To(Equal(corecloudprovider.DriftReason(\"\")))\n\t\t\tsetReservationID(\"cr-bar\")\n\t\t\tawsEnv.InstanceCache.Flush()\n\t\t\tisDrifted, err = cloudProvider.IsDrifted(ctx, nodeClaim)\n\t\t\tExpect(err).ToNot(HaveOccurred())\n\t\t\tExpect(isDrifted).To(Equal(cloudprovider.CapacityReservationDrift))\n\t\t})\n\t\tIt(\"should not return drifted if the security groups match\", func() {\n\t\t\tisDrifted, err := cloudProvider.IsDrifted(ctx, nodeClaim)\n\t\t\tExpect(err).ToNot(HaveOccurred())\n\t\t\tExpect(isDrifted).To(BeEmpty())\n\t\t})\n\t\tIt(\"should error if the NodeClaim doesn't have the instance-type label\", func() {\n\t\t\tdelete(nodeClaim.Labels, corev1.LabelInstanceTypeStable)\n\t\t\t_, err := cloudProvider.IsDrifted(ctx, nodeClaim)\n\t\t\tExpect(err).To(HaveOccurred())\n\t\t})\n\t\tIt(\"should error if the NodeClaim doesn't have ImageID\", func() {\n\t\t\tnodeClaim.Status.ImageID = \"\"\n\t\t\t_, err := cloudProvider.IsDrifted(ctx, nodeClaim)\n\t\t\tExpect(err).To(HaveOccurred())\n\t\t})\n\t\tIt(\"should error drift if NodeClaim doesn't have provider id\", func() {\n\t\t\tnodeClaim.Status = karpv1.NodeClaimStatus{}\n\t\t\tisDrifted, err := cloudProvider.IsDrifted(ctx, nodeClaim)\n\t\t\tExpect(err).To(HaveOccurred())\n\t\t\tExpect(isDrifted).To(BeEmpty())\n\t\t})\n\t\tIt(\"should error if the underlying NodeClaim doesn't exist\", func() {\n\t\t\tawsEnv.EC2API.DescribeInstancesBehavior.Output.Set(&ec2.DescribeInstancesOutput{\n\t\t\t\tReservations: []ec2types.Reservation{{Instances: []ec2types.Instance{}}},\n\t\t\t})\n\t\t\t_, err := cloudProvider.IsDrifted(ctx, nodeClaim)\n\t\t\tExpect(err).To(HaveOccurred())\n\t\t})\n\t\tIt(\"should return drifted if the AMI no longer matches the existing NodeClaims instance type\", func() {\n\t\t\tnodeClass.Spec.AMIFamily = lo.ToPtr(v1.AMIFamilyCustom)\n\t\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{ID: amdAMIID}}\n\t\t\tnodeClass.Status.AMIs = []v1.AMI{\n\t\t\t\t{\n\t\t\t\t\tID: amdAMIID,\n\t\t\t\t\tRequirements: []corev1.NodeSelectorRequirement{\n\t\t\t\t\t\t{Key: corev1.LabelArchStable, Operator: corev1.NodeSelectorOpIn, Values: []string{karpv1.ArchitectureAmd64}},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}\n\t\t\tnodeClaim.Status.ImageID = armAMIID\n\t\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\t\tisDrifted, err := cloudProvider.IsDrifted(ctx, nodeClaim)\n\t\t\tExpect(err).ToNot(HaveOccurred())\n\t\t\tExpect(isDrifted).To(Equal(cloudprovider.AMIDrift))\n\t\t})\n\t\tContext(\"Static Drift Detection\", func() {\n\t\t\tBeforeEach(func() {\n\t\t\t\tarmRequirements := []corev1.NodeSelectorRequirement{\n\t\t\t\t\t{Key: corev1.LabelArchStable, Operator: corev1.NodeSelectorOpIn, Values: []string{karpv1.ArchitectureArm64}},\n\t\t\t\t}\n\t\t\t\tamdRequirements := []corev1.NodeSelectorRequirement{\n\t\t\t\t\t{Key: corev1.LabelArchStable, Operator: corev1.NodeSelectorOpIn, Values: []string{karpv1.ArchitectureAmd64}},\n\t\t\t\t}\n\t\t\t\tnodeClass = &v1.EC2NodeClass{\n\t\t\t\t\tObjectMeta: nodeClass.ObjectMeta,\n\t\t\t\t\tSpec: v1.EC2NodeClassSpec{\n\t\t\t\t\t\tSubnetSelectorTerms:        nodeClass.Spec.SubnetSelectorTerms,\n\t\t\t\t\t\tSecurityGroupSelectorTerms: nodeClass.Spec.SecurityGroupSelectorTerms,\n\t\t\t\t\t\tRole:                       nodeClass.Spec.Role,\n\t\t\t\t\t\tUserData:                   lo.ToPtr(\"Fake Userdata\"),\n\t\t\t\t\t\tTags: map[string]string{\n\t\t\t\t\t\t\t\"fakeKey\": \"fakeValue\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tContext:            lo.ToPtr(\"fake-context\"),\n\t\t\t\t\t\tDetailedMonitoring: lo.ToPtr(false),\n\t\t\t\t\t\tAMISelectorTerms: []v1.AMISelectorTerm{{\n\t\t\t\t\t\t\tAlias: \"al2023@latest\",\n\t\t\t\t\t\t}},\n\t\t\t\t\t\tAssociatePublicIPAddress: lo.ToPtr(false),\n\t\t\t\t\t\tMetadataOptions: &v1.MetadataOptions{\n\t\t\t\t\t\t\tHTTPEndpoint:            lo.ToPtr(\"disabled\"),\n\t\t\t\t\t\t\tHTTPProtocolIPv6:        lo.ToPtr(\"disabled\"),\n\t\t\t\t\t\t\tHTTPPutResponseHopLimit: lo.ToPtr(int64(1)),\n\t\t\t\t\t\t\tHTTPTokens:              lo.ToPtr(\"optional\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tBlockDeviceMappings: []*v1.BlockDeviceMapping{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tDeviceName: lo.ToPtr(\"fakeName\"),\n\t\t\t\t\t\t\t\tRootVolume: false,\n\t\t\t\t\t\t\t\tEBS: &v1.BlockDevice{\n\t\t\t\t\t\t\t\t\tDeleteOnTermination: lo.ToPtr(false),\n\t\t\t\t\t\t\t\t\tEncrypted:           lo.ToPtr(false),\n\t\t\t\t\t\t\t\t\tIOPS:                lo.ToPtr(int64(0)),\n\t\t\t\t\t\t\t\t\tKMSKeyID:            lo.ToPtr(\"fakeKMSKeyID\"),\n\t\t\t\t\t\t\t\t\tSnapshotID:          lo.ToPtr(\"fakeSnapshot\"),\n\t\t\t\t\t\t\t\t\tThroughput:          lo.ToPtr(int64(0)),\n\t\t\t\t\t\t\t\t\tVolumeSize:          resource.NewScaledQuantity(2, resource.Giga),\n\t\t\t\t\t\t\t\t\tVolumeType:          lo.ToPtr(\"standard\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tStatus: v1.EC2NodeClassStatus{\n\t\t\t\t\t\tInstanceProfile: \"test-profile\",\n\t\t\t\t\t\tSubnets: []v1.Subnet{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tID:   validSubnet1,\n\t\t\t\t\t\t\t\tZone: \"zone-1\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tID:   validSubnet2,\n\t\t\t\t\t\t\t\tZone: \"zone-2\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tSecurityGroups: []v1.SecurityGroup{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tID: validSecurityGroup,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tAMIs: []v1.AMI{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tID:           armAMIID,\n\t\t\t\t\t\t\t\tRequirements: armRequirements,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tID:           amdAMIID,\n\t\t\t\t\t\t\t\tRequirements: amdRequirements,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t\tnodeClass.Annotations = lo.Assign(nodeClass.Annotations, map[string]string{v1.AnnotationEC2NodeClassHash: nodeClass.Hash()})\n\t\t\t\tnodeClaim.Annotations = lo.Assign(nodeClaim.Annotations, map[string]string{v1.AnnotationEC2NodeClassHash: nodeClass.Hash()})\n\t\t\t})\n\t\t\tDescribeTable(\"should return drifted if a statically drifted EC2NodeClass.Spec field is updated\",\n\t\t\t\tfunc(changes v1.EC2NodeClass) {\n\t\t\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\t\t\tisDrifted, err := cloudProvider.IsDrifted(ctx, nodeClaim)\n\t\t\t\t\tExpect(err).NotTo(HaveOccurred())\n\t\t\t\t\tExpect(isDrifted).To(BeEmpty())\n\n\t\t\t\t\tExpect(mergo.Merge(nodeClass, changes, mergo.WithOverride, mergo.WithSliceDeepCopy)).To(Succeed())\n\t\t\t\t\tnodeClass.Annotations = lo.Assign(nodeClass.Annotations, map[string]string{v1.AnnotationEC2NodeClassHash: nodeClass.Hash()})\n\n\t\t\t\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\t\t\t\tisDrifted, err = cloudProvider.IsDrifted(ctx, nodeClaim)\n\t\t\t\t\tExpect(err).NotTo(HaveOccurred())\n\t\t\t\t\tExpect(isDrifted).To(Equal(cloudprovider.NodeClassDrift))\n\t\t\t\t},\n\t\t\t\tEntry(\"UserData\", v1.EC2NodeClass{Spec: v1.EC2NodeClassSpec{UserData: lo.ToPtr(\"userdata-test-2\")}}),\n\t\t\t\tEntry(\"Tags\", v1.EC2NodeClass{Spec: v1.EC2NodeClassSpec{Tags: map[string]string{\"keyTag-test-3\": \"valueTag-test-3\"}}}),\n\t\t\t\tEntry(\"Context\", v1.EC2NodeClass{Spec: v1.EC2NodeClassSpec{Context: lo.ToPtr(\"context-2\")}}),\n\t\t\t\tEntry(\"DetailedMonitoring\", v1.EC2NodeClass{Spec: v1.EC2NodeClassSpec{DetailedMonitoring: aws.Bool(true)}}),\n\t\t\t\tEntry(\"InstanceStorePolicy\", v1.EC2NodeClass{Spec: v1.EC2NodeClassSpec{InstanceStorePolicy: lo.ToPtr(v1.InstanceStorePolicyRAID0)}}),\n\t\t\t\tEntry(\"AssociatePublicIPAddress\", v1.EC2NodeClass{Spec: v1.EC2NodeClassSpec{AssociatePublicIPAddress: lo.ToPtr(true)}}),\n\t\t\t\tEntry(\"MetadataOptions HTTPEndpoint\", v1.EC2NodeClass{Spec: v1.EC2NodeClassSpec{MetadataOptions: &v1.MetadataOptions{HTTPEndpoint: lo.ToPtr(\"enabled\")}}}),\n\t\t\t\tEntry(\"MetadataOptions HTTPProtocolIPv6\", v1.EC2NodeClass{Spec: v1.EC2NodeClassSpec{MetadataOptions: &v1.MetadataOptions{HTTPProtocolIPv6: lo.ToPtr(\"enabled\")}}}),\n\t\t\t\tEntry(\"MetadataOptions HTTPPutResponseHopLimit\", v1.EC2NodeClass{Spec: v1.EC2NodeClassSpec{MetadataOptions: &v1.MetadataOptions{HTTPPutResponseHopLimit: lo.ToPtr(int64(10))}}}),\n\t\t\t\tEntry(\"MetadataOptions HTTPTokens\", v1.EC2NodeClass{Spec: v1.EC2NodeClassSpec{MetadataOptions: &v1.MetadataOptions{HTTPTokens: lo.ToPtr(\"required\")}}}),\n\t\t\t\tEntry(\"BlockDeviceMapping DeviceName\", v1.EC2NodeClass{Spec: v1.EC2NodeClassSpec{BlockDeviceMappings: []*v1.BlockDeviceMapping{{DeviceName: lo.ToPtr(\"map-device-test-3\")}}}}),\n\t\t\t\tEntry(\"BlockDeviceMapping RootVolume\", v1.EC2NodeClass{Spec: v1.EC2NodeClassSpec{BlockDeviceMappings: []*v1.BlockDeviceMapping{{RootVolume: true}}}}),\n\t\t\t\tEntry(\"BlockDeviceMapping DeleteOnTermination\", v1.EC2NodeClass{Spec: v1.EC2NodeClassSpec{BlockDeviceMappings: []*v1.BlockDeviceMapping{{EBS: &v1.BlockDevice{DeleteOnTermination: lo.ToPtr(true)}}}}}),\n\t\t\t\tEntry(\"BlockDeviceMapping Encrypted\", v1.EC2NodeClass{Spec: v1.EC2NodeClassSpec{BlockDeviceMappings: []*v1.BlockDeviceMapping{{EBS: &v1.BlockDevice{Encrypted: lo.ToPtr(true)}}}}}),\n\t\t\t\tEntry(\"BlockDeviceMapping IOPS\", v1.EC2NodeClass{Spec: v1.EC2NodeClassSpec{BlockDeviceMappings: []*v1.BlockDeviceMapping{{EBS: &v1.BlockDevice{IOPS: lo.ToPtr(int64(10))}}}}}),\n\t\t\t\tEntry(\"BlockDeviceMapping KMSKeyID\", v1.EC2NodeClass{Spec: v1.EC2NodeClassSpec{BlockDeviceMappings: []*v1.BlockDeviceMapping{{EBS: &v1.BlockDevice{KMSKeyID: lo.ToPtr(\"test\")}}}}}),\n\t\t\t\tEntry(\"BlockDeviceMapping SnapshotID\", v1.EC2NodeClass{Spec: v1.EC2NodeClassSpec{BlockDeviceMappings: []*v1.BlockDeviceMapping{{EBS: &v1.BlockDevice{SnapshotID: lo.ToPtr(\"test\")}}}}}),\n\t\t\t\tEntry(\"BlockDeviceMapping Throughput\", v1.EC2NodeClass{Spec: v1.EC2NodeClassSpec{BlockDeviceMappings: []*v1.BlockDeviceMapping{{EBS: &v1.BlockDevice{Throughput: lo.ToPtr(int64(10))}}}}}),\n\t\t\t\tEntry(\"BlockDeviceMapping VolumeType\", v1.EC2NodeClass{Spec: v1.EC2NodeClassSpec{BlockDeviceMappings: []*v1.BlockDeviceMapping{{EBS: &v1.BlockDevice{VolumeType: lo.ToPtr(\"io1\")}}}}}),\n\t\t\t)\n\t\t\t// We create a separate test for updating blockDeviceMapping volumeSize, since resource.Quantity is a struct, and mergo.WithSliceDeepCopy\n\t\t\t// doesn't work well with unexported fields, like the ones that are present in resource.Quantity\n\t\t\tIt(\"should return drifted when updating blockDeviceMapping volumeSize\", func() {\n\t\t\t\tnodeClass.Spec.BlockDeviceMappings[0].EBS.VolumeSize = resource.NewScaledQuantity(10, resource.Giga)\n\t\t\t\tnodeClass.Annotations = lo.Assign(nodeClass.Annotations, map[string]string{v1.AnnotationEC2NodeClassHash: nodeClass.Hash()})\n\n\t\t\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\t\t\tisDrifted, err := cloudProvider.IsDrifted(ctx, nodeClaim)\n\t\t\t\tExpect(err).NotTo(HaveOccurred())\n\t\t\t\tExpect(isDrifted).To(Equal(cloudprovider.NodeClassDrift))\n\t\t\t})\n\t\t\tDescribeTable(\"should not return drifted if dynamic fields are updated\",\n\t\t\t\tfunc(changes v1.EC2NodeClass) {\n\t\t\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\t\t\tisDrifted, err := cloudProvider.IsDrifted(ctx, nodeClaim)\n\t\t\t\t\tExpect(err).NotTo(HaveOccurred())\n\t\t\t\t\tExpect(isDrifted).To(BeEmpty())\n\n\t\t\t\t\tExpect(mergo.Merge(nodeClass, changes, mergo.WithOverride))\n\t\t\t\t\tnodeClass.Annotations = lo.Assign(nodeClass.Annotations, map[string]string{v1.AnnotationEC2NodeClassHash: nodeClass.Hash()})\n\n\t\t\t\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\t\t\t\tisDrifted, err = cloudProvider.IsDrifted(ctx, nodeClaim)\n\t\t\t\t\tExpect(err).NotTo(HaveOccurred())\n\t\t\t\t\tExpect(isDrifted).To(BeEmpty())\n\t\t\t\t},\n\t\t\t\tEntry(\"AMI Drift\", v1.EC2NodeClass{Spec: v1.EC2NodeClassSpec{\n\t\t\t\t\tAMIFamily:        lo.ToPtr(v1.AMIFamilyAL2023),\n\t\t\t\t\tAMISelectorTerms: []v1.AMISelectorTerm{{Tags: map[string]string{\"ami-key-1\": \"ami-value-1\"}}},\n\t\t\t\t}}),\n\t\t\t\tEntry(\"Subnet Drift\", v1.EC2NodeClass{Spec: v1.EC2NodeClassSpec{SubnetSelectorTerms: []v1.SubnetSelectorTerm{{Tags: map[string]string{\"sn-key-1\": \"sn-value-1\"}}}}}),\n\t\t\t\tEntry(\"SecurityGroup Drift\", v1.EC2NodeClass{Spec: v1.EC2NodeClassSpec{SecurityGroupSelectorTerms: []v1.SecurityGroupSelectorTerm{{Tags: map[string]string{\"sg-key\": \"sg-value\"}}}}}),\n\t\t\t)\n\t\t\tIt(\"should not return drifted if karpenter.k8s.aws/ec2nodeclass-hash annotation is not present on the NodeClaim\", func() {\n\t\t\t\tnodeClaim.Annotations = map[string]string{\n\t\t\t\t\tv1.AnnotationEC2NodeClassHashVersion: v1.EC2NodeClassHashVersion,\n\t\t\t\t}\n\t\t\t\tnodeClass.Spec.Tags = map[string]string{\n\t\t\t\t\t\"Test Key\": \"Test Value\",\n\t\t\t\t}\n\t\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\t\tisDrifted, err := cloudProvider.IsDrifted(ctx, nodeClaim)\n\t\t\t\tExpect(err).NotTo(HaveOccurred())\n\t\t\t\tExpect(isDrifted).To(BeEmpty())\n\t\t\t})\n\t\t\tIt(\"should not return drifted if the NodeClaim's karpenter.k8s.aws/ec2nodeclass-hash-version annotation does not match the EC2NodeClass's\", func() {\n\t\t\t\tnodeClass.Annotations = map[string]string{\n\t\t\t\t\tv1.AnnotationEC2NodeClassHash:        \"test-hash-111111\",\n\t\t\t\t\tv1.AnnotationEC2NodeClassHashVersion: \"test-hash-version-1\",\n\t\t\t\t}\n\t\t\t\tnodeClaim.Annotations = map[string]string{\n\t\t\t\t\tv1.AnnotationEC2NodeClassHash:        \"test-hash-222222\",\n\t\t\t\t\tv1.AnnotationEC2NodeClassHashVersion: \"test-hash-version-2\",\n\t\t\t\t}\n\t\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\t\tisDrifted, err := cloudProvider.IsDrifted(ctx, nodeClaim)\n\t\t\t\tExpect(err).NotTo(HaveOccurred())\n\t\t\t\tExpect(isDrifted).To(BeEmpty())\n\t\t\t})\n\t\t\tIt(\"should not return drifted if karpenter.k8s.aws/ec2nodeclass-hash-version annotation is not present on the NodeClass\", func() {\n\t\t\t\tnodeClass.Annotations = map[string]string{\n\t\t\t\t\tv1.AnnotationEC2NodeClassHash: \"test-hash-111111\",\n\t\t\t\t}\n\t\t\t\tnodeClaim.Annotations = map[string]string{\n\t\t\t\t\tv1.AnnotationEC2NodeClassHash:        \"test-hash-222222\",\n\t\t\t\t\tv1.AnnotationEC2NodeClassHashVersion: \"test-hash-version-2\",\n\t\t\t\t}\n\t\t\t\t// should trigger drift\n\t\t\t\tnodeClass.Spec.Tags = map[string]string{\n\t\t\t\t\t\"Test Key\": \"Test Value\",\n\t\t\t\t}\n\t\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\t\tisDrifted, err := cloudProvider.IsDrifted(ctx, nodeClaim)\n\t\t\t\tExpect(err).NotTo(HaveOccurred())\n\t\t\t\tExpect(isDrifted).To(BeEmpty())\n\t\t\t})\n\t\t\tIt(\"should not return drifted if karpenter.k8s.aws/ec2nodeclass-hash-version annotation is not present on the NodeClaim\", func() {\n\t\t\t\tnodeClass.Annotations = map[string]string{\n\t\t\t\t\tv1.AnnotationEC2NodeClassHash:        \"test-hash-111111\",\n\t\t\t\t\tv1.AnnotationEC2NodeClassHashVersion: \"test-hash-version-1\",\n\t\t\t\t}\n\t\t\t\tnodeClaim.Annotations = map[string]string{\n\t\t\t\t\tv1.AnnotationEC2NodeClassHash: \"test-hash-222222\",\n\t\t\t\t}\n\t\t\t\t// should trigger drift\n\t\t\t\tnodeClass.Spec.Tags = map[string]string{\n\t\t\t\t\t\"Test Key\": \"Test Value\",\n\t\t\t\t}\n\t\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\t\tisDrifted, err := cloudProvider.IsDrifted(ctx, nodeClaim)\n\t\t\t\tExpect(err).NotTo(HaveOccurred())\n\t\t\t\tExpect(isDrifted).To(BeEmpty())\n\t\t\t})\n\t\t})\n\t})\n\tContext(\"Subnet Compatibility\", func() {\n\t\t// Note when debugging these tests -\n\t\t// hard coded fixture data (ex. what the aws api will return) is maintained in fake/ec2api.go\n\t\tIt(\"should default to the cluster's subnets\", func() {\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\tpod := coretest.UnschedulablePod(\n\t\t\t\tcoretest.PodOptions{NodeSelector: map[string]string{corev1.LabelArchStable: karpv1.ArchitectureAmd64}})\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t\tExpect(awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Len()).To(Equal(1))\n\t\t\tinput := awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Pop()\n\t\t\tExpect(len(input.LaunchTemplateConfigs)).To(BeNumerically(\">=\", 1))\n\n\t\t\tfoundNonGPULT := false\n\t\t\tfor _, v := range input.LaunchTemplateConfigs {\n\t\t\t\tfor _, ov := range v.Overrides {\n\t\t\t\t\tif ov.InstanceType == \"m5.large\" {\n\t\t\t\t\t\tfoundNonGPULT = true\n\t\t\t\t\t\tExpect(v.Overrides).To(ContainElements(\n\t\t\t\t\t\t\tec2types.FleetLaunchTemplateOverridesRequest{SubnetId: aws.String(\"subnet-test1\"), ImageId: ov.ImageId, InstanceType: \"m5.large\", AvailabilityZone: aws.String(\"test-zone-1a\"), Priority: lo.ToPtr(float64(0.096))},\n\t\t\t\t\t\t\tec2types.FleetLaunchTemplateOverridesRequest{SubnetId: aws.String(\"subnet-test2\"), ImageId: ov.ImageId, InstanceType: \"m5.large\", AvailabilityZone: aws.String(\"test-zone-1b\"), Priority: lo.ToPtr(float64(0.096))},\n\t\t\t\t\t\t\tec2types.FleetLaunchTemplateOverridesRequest{SubnetId: aws.String(\"subnet-test3\"), ImageId: ov.ImageId, InstanceType: \"m5.large\", AvailabilityZone: aws.String(\"test-zone-1c\"), Priority: lo.ToPtr(float64(0.096))},\n\t\t\t\t\t\t))\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tExpect(foundNonGPULT).To(BeTrue())\n\t\t})\n\t\tIt(\"should launch instances into subnet with the most available IP addresses\", func() {\n\t\t\tawsEnv.SubnetCache.Flush()\n\t\t\tawsEnv.EC2API.DescribeSubnetsBehavior.Output.Set(&ec2.DescribeSubnetsOutput{Subnets: []ec2types.Subnet{\n\t\t\t\t{SubnetId: aws.String(\"test-subnet-1\"), AvailabilityZone: aws.String(\"test-zone-1a\"), AvailabilityZoneId: aws.String(\"tstz1-1a\"), AvailableIpAddressCount: aws.Int32(10),\n\t\t\t\t\tTags: []ec2types.Tag{{Key: aws.String(\"Name\"), Value: aws.String(\"test-subnet-1\")}}},\n\t\t\t\t{SubnetId: aws.String(\"test-subnet-2\"), AvailabilityZone: aws.String(\"test-zone-1a\"), AvailabilityZoneId: aws.String(\"tstz1-1a\"), AvailableIpAddressCount: aws.Int32(100),\n\t\t\t\t\tTags: []ec2types.Tag{{Key: aws.String(\"Name\"), Value: aws.String(\"test-subnet-2\")}}},\n\t\t\t}})\n\t\t\tcontroller := nodeclass.NewController(awsEnv.Clock, env.Client, cloudProvider, recorder, fake.DefaultRegion, awsEnv.SubnetProvider, awsEnv.SecurityGroupProvider, awsEnv.AMIProvider, awsEnv.InstanceProfileProvider, awsEnv.InstanceTypesProvider, awsEnv.LaunchTemplateProvider, awsEnv.CapacityReservationProvider, awsEnv.EC2API, awsEnv.ValidationCache, awsEnv.RecreationCache, awsEnv.AMIResolver, options.FromContext(ctx).DisableDryRun)\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\t\t\tpod := coretest.UnschedulablePod(coretest.PodOptions{NodeSelector: map[string]string{corev1.LabelTopologyZone: \"test-zone-1a\"}})\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t\tcreateFleetInput := awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Pop()\n\t\t\tExpect(fake.SubnetsFromFleetRequest(createFleetInput)).To(ConsistOf(\"test-subnet-2\"))\n\t\t})\n\t\tIt(\"should launch instances into subnet with the most available IP addresses in-between cache refreshes\", func() {\n\t\t\tawsEnv.SubnetCache.Flush()\n\t\t\tawsEnv.EC2API.DescribeSubnetsBehavior.Output.Set(&ec2.DescribeSubnetsOutput{Subnets: []ec2types.Subnet{\n\t\t\t\t{SubnetId: aws.String(\"test-subnet-1\"), AvailabilityZone: aws.String(\"test-zone-1a\"), AvailabilityZoneId: aws.String(\"tstz1-1a\"), AvailableIpAddressCount: aws.Int32(10),\n\t\t\t\t\tTags: []ec2types.Tag{{Key: aws.String(\"Name\"), Value: aws.String(\"test-subnet-1\")}}},\n\t\t\t\t{SubnetId: aws.String(\"test-subnet-2\"), AvailabilityZone: aws.String(\"test-zone-1a\"), AvailabilityZoneId: aws.String(\"tstz1-1a\"), AvailableIpAddressCount: aws.Int32(11),\n\t\t\t\t\tTags: []ec2types.Tag{{Key: aws.String(\"Name\"), Value: aws.String(\"test-subnet-2\")}}},\n\t\t\t}})\n\t\t\tcontroller := nodeclass.NewController(awsEnv.Clock, env.Client, cloudProvider, recorder, fake.DefaultRegion, awsEnv.SubnetProvider, awsEnv.SecurityGroupProvider, awsEnv.AMIProvider, awsEnv.InstanceProfileProvider, awsEnv.InstanceTypesProvider, awsEnv.LaunchTemplateProvider, awsEnv.CapacityReservationProvider, awsEnv.EC2API, awsEnv.ValidationCache, awsEnv.RecreationCache, awsEnv.AMIResolver, options.FromContext(ctx).DisableDryRun)\n\t\t\tnodeClass.Spec.Kubelet = &v1.KubeletConfiguration{\n\t\t\t\tMaxPods: aws.Int32(1),\n\t\t\t}\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\t\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\t\t\tpod1 := coretest.UnschedulablePod(coretest.PodOptions{NodeSelector: map[string]string{corev1.LabelTopologyZone: \"test-zone-1a\"}})\n\t\t\tpod2 := coretest.UnschedulablePod(coretest.PodOptions{NodeSelector: map[string]string{corev1.LabelTopologyZone: \"test-zone-1a\"}})\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod1, pod2)\n\t\t\tExpectScheduled(ctx, env.Client, pod1)\n\t\t\tExpectScheduled(ctx, env.Client, pod2)\n\t\t\tcreateFleetInput := awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Pop()\n\t\t\tExpect(fake.SubnetsFromFleetRequest(createFleetInput)).To(ConsistOf(\"test-subnet-2\"))\n\t\t\t// Provision for another pod that should now use the other subnet since we've consumed some from the first launch.\n\t\t\tpod3 := coretest.UnschedulablePod(coretest.PodOptions{NodeSelector: map[string]string{corev1.LabelTopologyZone: \"test-zone-1a\"}})\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod3)\n\t\t\tExpectScheduled(ctx, env.Client, pod3)\n\t\t\tcreateFleetInput = awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Pop()\n\t\t\tExpect(fake.SubnetsFromFleetRequest(createFleetInput)).To(ConsistOf(\"test-subnet-1\"))\n\t\t})\n\t\tIt(\"should update in-flight IPs when a CreateFleet error occurs\", func() {\n\t\t\tawsEnv.EC2API.DescribeSubnetsBehavior.Output.Set(&ec2.DescribeSubnetsOutput{Subnets: []ec2types.Subnet{\n\t\t\t\t{SubnetId: aws.String(\"test-subnet-1\"), AvailabilityZone: aws.String(\"test-zone-1a\"), AvailableIpAddressCount: aws.Int32(10),\n\t\t\t\t\tTags: []ec2types.Tag{{Key: aws.String(\"Name\"), Value: aws.String(\"test-subnet-1\")}}},\n\t\t\t}})\n\t\t\tpod1 := coretest.UnschedulablePod(coretest.PodOptions{NodeSelector: map[string]string{corev1.LabelTopologyZone: \"test-zone-1a\"}})\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass, pod1)\n\t\t\tawsEnv.EC2API.CreateFleetBehavior.Error.Set(fmt.Errorf(\"CreateFleet synthetic error\"))\n\t\t\tbindings := ExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod1)\n\t\t\tExpect(len(bindings)).To(Equal(0))\n\t\t})\n\t\tIt(\"should launch instances into subnets that are excluded by another NodePool\", func() {\n\t\t\tawsEnv.EC2API.Subnets.Store(\"test-zone-1a\", ec2types.Subnet{\n\t\t\t\tSubnetId:                aws.String(\"test-subnet-1\"),\n\t\t\t\tAvailabilityZone:        aws.String(\"test-zone-1a\"),\n\t\t\t\tAvailabilityZoneId:      aws.String(\"tstz1-1a\"),\n\t\t\t\tAvailableIpAddressCount: aws.Int32(10),\n\t\t\t\tTags:                    []ec2types.Tag{{Key: aws.String(\"Name\"), Value: aws.String(\"test-subnet-1\")}},\n\t\t\t})\n\t\t\tawsEnv.EC2API.Subnets.Store(\"test-zone-1b\", ec2types.Subnet{\n\t\t\t\tSubnetId:                aws.String(\"test-subnet-2\"),\n\t\t\t\tAvailabilityZone:        aws.String(\"test-zone-1b\"),\n\t\t\t\tAvailabilityZoneId:      aws.String(\"tstz1-1a\"),\n\t\t\t\tAvailableIpAddressCount: aws.Int32(100),\n\t\t\t\tTags:                    []ec2types.Tag{{Key: aws.String(\"Name\"), Value: aws.String(\"test-subnet-2\")}},\n\t\t\t})\n\t\t\tnodeClass.Spec.SubnetSelectorTerms = []v1.SubnetSelectorTerm{{Tags: map[string]string{\"Name\": \"test-subnet-1\"}}}\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\tcontroller := nodeclass.NewController(awsEnv.Clock, env.Client, cloudProvider, recorder, fake.DefaultRegion, awsEnv.SubnetProvider, awsEnv.SecurityGroupProvider, awsEnv.AMIProvider, awsEnv.InstanceProfileProvider, awsEnv.InstanceTypesProvider, awsEnv.LaunchTemplateProvider, awsEnv.CapacityReservationProvider, awsEnv.EC2API, awsEnv.ValidationCache, awsEnv.RecreationCache, awsEnv.AMIResolver, options.FromContext(ctx).DisableDryRun)\n\t\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\t\t\tpodSubnet1 := coretest.UnschedulablePod()\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, podSubnet1)\n\t\t\tExpectScheduled(ctx, env.Client, podSubnet1)\n\t\t\tcreateFleetInput := awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Pop()\n\t\t\tExpect(fake.SubnetsFromFleetRequest(createFleetInput)).To(ConsistOf(\"test-subnet-1\"))\n\n\t\t\tnodeClass2 := test.EC2NodeClass(v1.EC2NodeClass{\n\t\t\t\tSpec: v1.EC2NodeClassSpec{\n\t\t\t\t\tSubnetSelectorTerms: []v1.SubnetSelectorTerm{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tTags: map[string]string{\"Name\": \"test-subnet-2\"},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tSecurityGroupSelectorTerms: []v1.SecurityGroupSelectorTerm{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tTags: map[string]string{\"*\": \"*\"},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tStatus: v1.EC2NodeClassStatus{\n\t\t\t\t\tAMIs: nodeClass.Status.AMIs,\n\t\t\t\t\tSecurityGroups: []v1.SecurityGroup{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tID: \"sg-test1\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t})\n\t\t\tnodePool2 := coretest.NodePool(karpv1.NodePool{\n\t\t\t\tSpec: karpv1.NodePoolSpec{\n\t\t\t\t\tTemplate: karpv1.NodeClaimTemplate{\n\t\t\t\t\t\tSpec: karpv1.NodeClaimTemplateSpec{\n\t\t\t\t\t\t\tNodeClassRef: &karpv1.NodeClassReference{\n\t\t\t\t\t\t\t\tGroup: object.GVK(nodeClass2).Group,\n\t\t\t\t\t\t\t\tKind:  object.GVK(nodeClass2).Kind,\n\t\t\t\t\t\t\t\tName:  nodeClass2.Name,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t})\n\t\t\tExpectApplied(ctx, env.Client, nodePool2, nodeClass2)\n\t\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass2)\n\t\t\tpodSubnet2 := coretest.UnschedulablePod(coretest.PodOptions{NodeSelector: map[string]string{karpv1.NodePoolLabelKey: nodePool2.Name}})\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, podSubnet2)\n\t\t\tExpectScheduled(ctx, env.Client, podSubnet2)\n\t\t\tcreateFleetInput = awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Pop()\n\t\t\tExpect(fake.SubnetsFromFleetRequest(createFleetInput)).To(ConsistOf(\"test-subnet-2\"))\n\t\t})\n\t\tIt(\"should launch instances with an alternate NodePool when a NodeClass selects 0 subnets, security groups, or amis\", func() {\n\t\t\tmisconfiguredNodeClass := test.EC2NodeClass(v1.EC2NodeClass{\n\t\t\t\tSpec: v1.EC2NodeClassSpec{\n\t\t\t\t\t// select nothing!\n\t\t\t\t\tSubnetSelectorTerms: []v1.SubnetSelectorTerm{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tTags: map[string]string{\"Name\": \"nothing\"},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t// select nothing!\n\t\t\t\t\tSecurityGroupSelectorTerms: []v1.SecurityGroupSelectorTerm{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tTags: map[string]string{\"Name\": \"nothing\"},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tAMIFamily: lo.ToPtr(v1.AMIFamilyCustom),\n\t\t\t\t\t// select nothing!\n\t\t\t\t\tAMISelectorTerms: []v1.AMISelectorTerm{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tTags: map[string]string{\"Name\": \"nothing\"},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t})\n\t\t\tnodePool2 := coretest.NodePool(karpv1.NodePool{\n\t\t\t\tSpec: karpv1.NodePoolSpec{\n\t\t\t\t\tTemplate: karpv1.NodeClaimTemplate{\n\t\t\t\t\t\tSpec: karpv1.NodeClaimTemplateSpec{\n\t\t\t\t\t\t\tNodeClassRef: &karpv1.NodeClassReference{\n\t\t\t\t\t\t\t\tGroup: object.GVK(misconfiguredNodeClass).Group,\n\t\t\t\t\t\t\t\tKind:  object.GVK(misconfiguredNodeClass).Kind,\n\t\t\t\t\t\t\t\tName:  misconfiguredNodeClass.Name,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t})\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodePool2, nodeClass, misconfiguredNodeClass)\n\t\t\tpod := coretest.UnschedulablePod()\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t})\n\t})\n\tContext(\"EFA\", func() {\n\t\tIt(\"should include vpc.amazonaws.com/efa on a nodeclaim if it requests it\", func() {\n\t\t\tnodeClaim.Spec.Requirements = []karpv1.NodeSelectorRequirementWithMinValues{\n\t\t\t\t{\n\t\t\t\t\tKey:      corev1.LabelInstanceTypeStable,\n\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\tValues:   []string{\"dl1.24xlarge\"},\n\t\t\t\t},\n\t\t\t}\n\t\t\tnodeClaim.Spec.Resources.Requests = corev1.ResourceList{v1.ResourceEFA: resource.MustParse(\"1\")}\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass, nodeClaim)\n\t\t\tcloudProviderNodeClaim, err := cloudProvider.Create(ctx, nodeClaim)\n\t\t\tExpect(err).To(BeNil())\n\t\t\tExpect(lo.Keys(cloudProviderNodeClaim.Status.Allocatable)).To(ContainElement(v1.ResourceEFA))\n\t\t})\n\t\tIt(\"shouldn't include vpc.amazonaws.com/efa on a nodeclaim if it doesn't request it\", func() {\n\t\t\tnodeClaim.Spec.Requirements = []karpv1.NodeSelectorRequirementWithMinValues{\n\t\t\t\t{\n\t\t\t\t\tKey:      corev1.LabelInstanceTypeStable,\n\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\tValues:   []string{\"dl1.24xlarge\"},\n\t\t\t\t},\n\t\t\t}\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass, nodeClaim)\n\t\t\tcloudProviderNodeClaim, err := cloudProvider.Create(ctx, nodeClaim)\n\t\t\tExpect(err).To(BeNil())\n\t\t\tExpect(lo.Keys(cloudProviderNodeClaim.Status.Allocatable)).ToNot(ContainElement(v1.ResourceEFA))\n\t\t})\n\t})\n\tContext(\"Capacity Reservations\", func() {\n\t\tconst reservationCapacity = 10\n\t\tvar crs []ec2types.CapacityReservation\n\t\tBeforeEach(func() {\n\t\t\tcrs = []ec2types.CapacityReservation{}\n\t\t\tcrs = lo.FlatMap(v1.CapacityReservationType(\"\").Values(), func(crt v1.CapacityReservationType, _ int) []ec2types.CapacityReservation {\n\t\t\t\treturn lo.FilterMap([]bool{true, false}, func(interruptible bool, _ int) (ec2types.CapacityReservation, bool) {\n\t\t\t\t\tif interruptible && crt == v1.CapacityReservationTypeCapacityBlock {\n\t\t\t\t\t\treturn ec2types.CapacityReservation{}, false\n\t\t\t\t\t}\n\t\t\t\t\treturn ec2types.CapacityReservation{\n\t\t\t\t\t\tAvailabilityZone:       lo.ToPtr(\"test-zone-1a\"),\n\t\t\t\t\t\tInstanceType:           lo.ToPtr(\"m5.large\"),\n\t\t\t\t\t\tOwnerId:                lo.ToPtr(\"012345678901\"),\n\t\t\t\t\t\tInstanceMatchCriteria:  ec2types.InstanceMatchCriteriaTargeted,\n\t\t\t\t\t\tCapacityReservationId:  lo.ToPtr(fmt.Sprintf(\"cr-m5.large-1a-%s-%s\", string(crt), strconv.FormatBool(interruptible))),\n\t\t\t\t\t\tAvailableInstanceCount: lo.ToPtr[int32](reservationCapacity),\n\t\t\t\t\t\tState:                  ec2types.CapacityReservationStateActive,\n\t\t\t\t\t\tReservationType:        ec2types.CapacityReservationType(crt),\n\t\t\t\t\t\tInterruptible:          lo.ToPtr(interruptible),\n\t\t\t\t\t}, true\n\t\t\t\t})\n\t\t\t})\n\t\t\tfor _, cr := range crs {\n\t\t\t\tawsEnv.CapacityReservationProvider.SetAvailableInstanceCount(*cr.CapacityReservationId, 10)\n\t\t\t}\n\t\t\tawsEnv.EC2API.DescribeCapacityReservationsOutput.Set(&ec2.DescribeCapacityReservationsOutput{\n\t\t\t\tCapacityReservations: crs,\n\t\t\t})\n\t\t\tnodeClass.Status.CapacityReservations = lo.Map(crs, func(cr ec2types.CapacityReservation, _ int) v1.CapacityReservation {\n\t\t\t\treturn lo.Must(v1.CapacityReservationFromEC2(awsEnv.Clock, &cr))\n\t\t\t})\n\t\t\tnodePool.Spec.Template.Spec.Requirements = []karpv1.NodeSelectorRequirementWithMinValues{{\n\t\t\t\tKey:      karpv1.CapacityTypeLabelKey,\n\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\tValues:   []string{karpv1.CapacityTypeReserved},\n\t\t\t}}\n\t\t})\n\t\tIt(\"should mark capacity reservations as launched\", func() {\n\t\t\tpod := coretest.UnschedulablePod()\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass, pod)\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t\tncs := ExpectNodeClaims(ctx, env.Client)\n\t\t\tExpect(ncs).To(HaveLen(1))\n\t\t\tExpect(awsEnv.CapacityReservationProvider.GetAvailableInstanceCount(ncs[0].Labels[corecloudprovider.ReservationIDLabel])).To(Equal(9))\n\t\t})\n\t\tIt(\"should mark capacity reservations as terminated\", func() {\n\t\t\tpod := coretest.UnschedulablePod()\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass, pod)\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t\tncs := ExpectNodeClaims(ctx, env.Client)\n\t\t\tExpect(ncs).To(HaveLen(1))\n\n\t\t\t// Attempt the first delete - since the instance still exists we shouldn't increment the availability count\n\t\t\terr := cloudProvider.Delete(ctx, ncs[0])\n\t\t\tExpect(corecloudprovider.IsNodeClaimNotFoundError(err)).To(BeFalse())\n\t\t\tExpect(awsEnv.CapacityReservationProvider.GetAvailableInstanceCount(ncs[0].Labels[corecloudprovider.ReservationIDLabel])).To(Equal(9))\n\n\t\t\t// Attempt again after clearing the instance from the EC2 output. Now that we get a NotFound error, expect\n\t\t\t// availability to be incremented.\n\t\t\tawsEnv.EC2API.DescribeInstancesBehavior.Output.Set(&ec2.DescribeInstancesOutput{})\n\t\t\terr = cloudProvider.Delete(ctx, ncs[0])\n\t\t\tExpect(corecloudprovider.IsNodeClaimNotFoundError(err)).To(BeTrue())\n\t\t\tExpect(awsEnv.CapacityReservationProvider.GetAvailableInstanceCount(ncs[0].Labels[corecloudprovider.ReservationIDLabel])).To(Equal(10))\n\t\t})\n\t\tDescribeTable(\n\t\t\t\"should include capacity reservation labels\",\n\t\t\tfunc(crt v1.CapacityReservationType, interruptible bool) {\n\t\t\t\tpod := coretest.UnschedulablePod(coretest.PodOptions{\n\t\t\t\t\tNodeSelector: map[string]string{\n\t\t\t\t\t\tv1.LabelCapacityReservationType:          string(crt),\n\t\t\t\t\t\tv1.LabelCapacityReservationInterruptible: strconv.FormatBool(interruptible),\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass, pod)\n\t\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t\t\tncs := ExpectNodeClaims(ctx, env.Client)\n\t\t\t\tExpect(ncs).To(HaveLen(1))\n\t\t\t\tExpect(ncs[0].Labels).To(HaveKeyWithValue(karpv1.CapacityTypeLabelKey, karpv1.CapacityTypeReserved))\n\t\t\t\texpectedCR := lo.Must(lo.Find(crs, func(cr ec2types.CapacityReservation) bool {\n\t\t\t\t\treturn string(cr.ReservationType) == string(crt) && *cr.Interruptible == interruptible\n\t\t\t\t}))\n\t\t\t\tExpect(ncs[0].Labels).To(HaveKeyWithValue(corecloudprovider.ReservationIDLabel, *expectedCR.CapacityReservationId))\n\t\t\t\tExpect(ncs[0].Labels).To(HaveKeyWithValue(v1.LabelCapacityReservationType, string(crt)))\n\t\t\t\tExpect(ncs[0].Labels).To(HaveKeyWithValue(v1.LabelCapacityReservationInterruptible, strconv.FormatBool(interruptible)))\n\n\t\t\t},\n\t\t\tEntry(\"when the capacity reservation type is default non-interruptible\", v1.CapacityReservationTypeDefault, false),\n\t\t\tEntry(\"when the capacity reservation type is default interruptible\", v1.CapacityReservationTypeDefault, true),\n\t\t\tEntry(\"when the capacity reservation type is capacity-block\", v1.CapacityReservationTypeCapacityBlock, false),\n\t\t)\n\t})\n})\n"
  },
  {
    "path": "pkg/controllers/capacityreservation/capacitytype/controller.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage capacitytype\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"time\"\n\n\t\"github.com/awslabs/operatorpkg/reconciler\"\n\t\"github.com/awslabs/operatorpkg/serrors\"\n\t\"github.com/awslabs/operatorpkg/singleton\"\n\t\"github.com/samber/lo\"\n\t\"go.uber.org/multierr\"\n\t\"k8s.io/apimachinery/pkg/api/errors\"\n\t\"k8s.io/apimachinery/pkg/util/sets\"\n\t\"k8s.io/klog/v2\"\n\tcontrollerruntime \"sigs.k8s.io/controller-runtime\"\n\t\"sigs.k8s.io/controller-runtime/pkg/client\"\n\t\"sigs.k8s.io/controller-runtime/pkg/log\"\n\t\"sigs.k8s.io/controller-runtime/pkg/manager\"\n\tkarpv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n\t\"sigs.k8s.io/karpenter/pkg/cloudprovider\"\n\t\"sigs.k8s.io/karpenter/pkg/operator/injection\"\n\tnodeclaimutils \"sigs.k8s.io/karpenter/pkg/utils/nodeclaim\"\n)\n\ntype Controller struct {\n\tcp         cloudprovider.CloudProvider\n\tkubeClient client.Client\n}\n\nfunc NewController(kubeClient client.Client, cp cloudprovider.CloudProvider) *Controller {\n\treturn &Controller{\n\t\tcp:         cp,\n\t\tkubeClient: kubeClient,\n\t}\n}\n\nfunc (*Controller) Name() string {\n\treturn \"capacityreservation.capacitytype\"\n}\n\nfunc (c *Controller) Register(_ context.Context, m manager.Manager) error {\n\treturn controllerruntime.NewControllerManagedBy(m).\n\t\tNamed(c.Name()).\n\t\tWatchesRawSource(singleton.Source()).\n\t\tComplete(singleton.AsReconciler(c))\n}\n\nfunc (c *Controller) Reconcile(ctx context.Context) (reconciler.Result, error) {\n\tctx = injection.WithControllerName(ctx, c.Name())\n\tcpNodeClaims, err := c.cp.List(ctx)\n\tif err != nil {\n\t\treturn reconciler.Result{}, fmt.Errorf(\"listing instance types, %w\", err)\n\t}\n\tproviderIDsToCPNodeClaims := lo.SliceToMap(cpNodeClaims, func(nc *karpv1.NodeClaim) (string, *karpv1.NodeClaim) {\n\t\treturn nc.Status.ProviderID, nc\n\t})\n\tncs := &karpv1.NodeClaimList{}\n\tif err := c.kubeClient.List(ctx, ncs); err != nil {\n\t\treturn reconciler.Result{}, fmt.Errorf(\"listing nodeclaims, %w\", err)\n\t}\n\tupdatedNodeClaims := sets.New[string]()\n\tvar errs []error\n\tfor i := range ncs.Items {\n\t\tcpNC, ok := providerIDsToCPNodeClaims[ncs.Items[i].Status.ProviderID]\n\t\tif !ok {\n\t\t\tcontinue\n\t\t}\n\t\tupdated, err := c.syncCapacityType(ctx, cpNC.Labels[karpv1.CapacityTypeLabelKey], &ncs.Items[i])\n\t\tif err != nil {\n\t\t\terrs = append(errs, err)\n\t\t}\n\t\tif updated {\n\t\t\tupdatedNodeClaims.Insert(ncs.Items[i].Name)\n\t\t}\n\t}\n\tif len(updatedNodeClaims) != 0 {\n\t\tlog.FromContext(ctx).WithValues(\"NodeClaims\", lo.Map(updatedNodeClaims.UnsortedList(), func(name string, _ int) klog.ObjectRef {\n\t\t\treturn klog.KRef(\"\", name)\n\t\t})).V(1).Info(\"updated capacity type for nodeclaims\")\n\t}\n\tif len(errs) != 0 {\n\t\tif lo.EveryBy(errs, func(err error) bool { return errors.IsConflict(err) }) {\n\t\t\treturn reconciler.Result{Requeue: true}, nil\n\t\t}\n\t\treturn reconciler.Result{}, multierr.Combine(errs...)\n\t}\n\treturn reconciler.Result{RequeueAfter: time.Minute}, nil\n}\n\n// syncCapacityType will update the capacity type for the given NodeClaim. This accounts for the fact that capacity\n// reservations will expire, demoting NodeClaims with capacity type \"reserved\" to \"on-demand\".\n//\n//nolint:gocyclo\nfunc (c *Controller) syncCapacityType(ctx context.Context, capacityType string, nc *karpv1.NodeClaim) (bool, error) {\n\t// We won't be able to sync deleting NodeClaims, and there's no real need to either as they're already draining.\n\tif !nc.DeletionTimestamp.IsZero() {\n\t\treturn false, nil\n\t}\n\n\t// For now we only account for the case where a reserved NodeClaim becomes an on-demand NodeClaim. This does not\n\t// account for on-demand NodeClaims being promoted to reserved since that is not natively supported by Karpenter.\n\tif capacityType != karpv1.CapacityTypeOnDemand {\n\t\treturn false, nil\n\t}\n\tupdated := false\n\tif nc.Labels[karpv1.CapacityTypeLabelKey] == karpv1.CapacityTypeReserved {\n\t\tstored := nc.DeepCopy()\n\t\tnc.Labels[karpv1.CapacityTypeLabelKey] = karpv1.CapacityTypeOnDemand\n\t\tfor label := range cloudprovider.ReservedCapacityLabels {\n\t\t\tdelete(nc.Labels, label)\n\t\t}\n\t\tif err := c.kubeClient.Patch(ctx, nc, client.MergeFrom(stored)); client.IgnoreNotFound(err) != nil {\n\t\t\treturn false, serrors.Wrap(fmt.Errorf(\"patching nodeclaim, %w\", err), \"NodeClaim\", klog.KObj(nc))\n\t\t}\n\t\tupdated = true\n\t}\n\n\t// If the reservation expired before the NodeClaim became registered, there may not be a Node on the cluster. Note\n\t// that there should never be duplicate Nodes for a given NodeClaim, but handling this user-induced error is more\n\t// straightforward than handling the duplicate error.\n\tnodes, err := nodeclaimutils.AllNodesForNodeClaim(ctx, c.kubeClient, nc)\n\tif err != nil {\n\t\treturn false, serrors.Wrap(fmt.Errorf(\"listing nodes for nodeclaim, %w\", err), \"NodeClaim\", klog.KObj(nc))\n\t}\n\tfor _, n := range nodes {\n\t\tif !n.DeletionTimestamp.IsZero() {\n\t\t\tcontinue\n\t\t}\n\t\t// Skip Nodes which haven't been registered since we still may not have synced labels. We'll get it on the next\n\t\t// iteration.\n\t\tif n.Labels[karpv1.NodeRegisteredLabelKey] != \"true\" {\n\t\t\tcontinue\n\t\t}\n\t\tif n.Labels[karpv1.CapacityTypeLabelKey] != karpv1.CapacityTypeReserved {\n\t\t\tcontinue\n\t\t}\n\t\tstored := n.DeepCopy()\n\t\tn.Labels[karpv1.CapacityTypeLabelKey] = karpv1.CapacityTypeOnDemand\n\t\tfor label := range cloudprovider.ReservedCapacityLabels {\n\t\t\tdelete(n.Labels, label)\n\t\t}\n\t\tif err := c.kubeClient.Patch(ctx, n, client.MergeFrom(stored)); client.IgnoreNotFound(err) != nil {\n\t\t\treturn false, serrors.Wrap(fmt.Errorf(\"patching node, %w\", err), \"Node\", klog.KObj(n))\n\t\t}\n\t\tupdated = true\n\t}\n\treturn updated, nil\n}\n"
  },
  {
    "path": "pkg/controllers/capacityreservation/capacitytype/suite_test.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage capacitytype_test\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"testing\"\n\n\t\"github.com/aws/aws-sdk-go-v2/service/ec2\"\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\t\"github.com/samber/lo\"\n\tcorev1 \"k8s.io/api/core/v1\"\n\tmetav1 \"k8s.io/apimachinery/pkg/apis/meta/v1\"\n\t\"k8s.io/client-go/tools/record\"\n\tkarpv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n\tcorecloudprovider \"sigs.k8s.io/karpenter/pkg/cloudprovider\"\n\t\"sigs.k8s.io/karpenter/pkg/events\"\n\tcoretest \"sigs.k8s.io/karpenter/pkg/test\"\n\n\t\"github.com/aws/karpenter-provider-aws/pkg/apis\"\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/cloudprovider\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/controllers/capacityreservation/capacitytype\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/fake\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/operator/options\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/test\"\n\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n\t. \"sigs.k8s.io/karpenter/pkg/test/expectations\"\n\t\"sigs.k8s.io/karpenter/pkg/test/v1alpha1\"\n\t. \"sigs.k8s.io/karpenter/pkg/utils/testing\"\n\n\tcoreoptions \"sigs.k8s.io/karpenter/pkg/operator/options\"\n)\n\nvar ctx context.Context\nvar stop context.CancelFunc\nvar env *coretest.Environment\nvar awsEnv *test.Environment\nvar controller *capacitytype.Controller\n\nfunc TestAWS(t *testing.T) {\n\tctx = TestContextWithLogger(t)\n\tRegisterFailHandler(Fail)\n\tRunSpecs(t, \"SSM Invalidation Controller\")\n}\n\nvar _ = BeforeSuite(func() {\n\tenv = coretest.NewEnvironment(coretest.WithCRDs(apis.CRDs...), coretest.WithCRDs(v1alpha1.CRDs...), coretest.WithFieldIndexers(coretest.NodeProviderIDFieldIndexer(ctx)))\n\tctx = options.ToContext(ctx, test.Options())\n\tctx = coreoptions.ToContext(ctx, coretest.Options(coretest.OptionsFields{FeatureGates: coretest.FeatureGates{ReservedCapacity: lo.ToPtr(true)}}))\n\tctx, stop = context.WithCancel(ctx)\n\tawsEnv = test.NewEnvironment(ctx, env)\n\n\tcloudProvider := cloudprovider.New(awsEnv.InstanceTypesProvider, awsEnv.InstanceProvider, events.NewRecorder(&record.FakeRecorder{}),\n\t\tenv.Client, awsEnv.AMIProvider, awsEnv.SecurityGroupProvider, awsEnv.CapacityReservationProvider, awsEnv.InstanceTypeStore)\n\tcontroller = capacitytype.NewController(env.Client, cloudProvider)\n})\n\nvar _ = AfterSuite(func() {\n\tstop()\n\tExpect(env.Stop()).To(Succeed(), \"Failed to stop environment\")\n})\n\nvar _ = Describe(\"Capacity Reservation Capacity Type Controller\", func() {\n\tvar nodeClaim *karpv1.NodeClaim\n\tvar node *corev1.Node\n\tvar reservationID string\n\tBeforeEach(func() {\n\t\treservationID = \"cr-foo\"\n\t\tinstance := ec2types.Instance{\n\t\t\tImageId:               lo.ToPtr(fake.ImageID()),\n\t\t\tInstanceType:          ec2types.InstanceType(\"m5.large\"),\n\t\t\tSubnetId:              lo.ToPtr(fake.SubnetID()),\n\t\t\tSpotInstanceRequestId: nil,\n\t\t\tState: &ec2types.InstanceState{\n\t\t\t\tName: ec2types.InstanceStateNameRunning,\n\t\t\t},\n\t\t\tInstanceId:            lo.ToPtr(fake.InstanceID()),\n\t\t\tCapacityReservationId: &reservationID,\n\t\t\tCapacityReservationSpecification: &ec2types.CapacityReservationSpecificationResponse{\n\t\t\t\tCapacityReservationPreference: ec2types.CapacityReservationPreferenceCapacityReservationsOnly,\n\t\t\t},\n\t\t\tPlacement: &ec2types.Placement{\n\t\t\t\tAvailabilityZone: lo.ToPtr(\"test-zone-1a\"),\n\t\t\t},\n\t\t\tSecurityGroups: []ec2types.GroupIdentifier{{GroupId: lo.ToPtr(fake.SecurityGroupID())}},\n\t\t}\n\t\tawsEnv.EC2API.DescribeInstancesBehavior.Output.Set(&ec2.DescribeInstancesOutput{\n\t\t\tReservations: []ec2types.Reservation{{Instances: []ec2types.Instance{instance}}},\n\t\t})\n\n\t\tnodeClaim = coretest.NodeClaim(karpv1.NodeClaim{\n\t\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\t\tLabels: map[string]string{\n\t\t\t\t\tkarpv1.CapacityTypeLabelKey:          karpv1.CapacityTypeReserved,\n\t\t\t\t\tcorecloudprovider.ReservationIDLabel: reservationID,\n\t\t\t\t\tv1.LabelCapacityReservationType:      string(v1.CapacityReservationTypeDefault),\n\t\t\t\t\tkarpv1.NodeRegisteredLabelKey:        \"true\",\n\t\t\t\t},\n\t\t\t},\n\t\t\tStatus: karpv1.NodeClaimStatus{\n\t\t\t\tProviderID: fmt.Sprintf(\"aws:///test-zone-1a/%s\", *instance.InstanceId),\n\t\t\t},\n\t\t})\n\t\tnode = coretest.NodeClaimLinkedNode(nodeClaim)\n\t})\n\tIt(\"should demote nodeclaims and nodes from reserved to on-demand\", func() {\n\t\tExpectApplied(ctx, env.Client, nodeClaim, node)\n\t\tExpectSingletonReconciled(ctx, controller)\n\n\t\t// Since the backing instance is still under a capacity reservation, we shouldn't demote the nodeclaim or node\n\t\tnodeClaim = ExpectExists(ctx, env.Client, nodeClaim)\n\t\tExpect(nodeClaim.Labels).To(HaveKeyWithValue(karpv1.CapacityTypeLabelKey, karpv1.CapacityTypeReserved))\n\t\tExpect(nodeClaim.Labels).To(HaveKeyWithValue(corecloudprovider.ReservationIDLabel, reservationID))\n\t\tExpect(nodeClaim.Labels).To(HaveKeyWithValue(v1.LabelCapacityReservationType, string(v1.CapacityReservationTypeDefault)))\n\t\tnode = ExpectExists(ctx, env.Client, node)\n\t\tExpect(node.Labels).To(HaveKeyWithValue(karpv1.CapacityTypeLabelKey, karpv1.CapacityTypeReserved))\n\t\tExpect(node.Labels).To(HaveKeyWithValue(corecloudprovider.ReservationIDLabel, reservationID))\n\t\tExpect(nodeClaim.Labels).To(HaveKeyWithValue(v1.LabelCapacityReservationType, string(v1.CapacityReservationTypeDefault)))\n\n\t\tout := awsEnv.EC2API.DescribeInstancesBehavior.Output.Clone()\n\t\tout.Reservations[0].Instances[0].CapacityReservationId = nil\n\t\tawsEnv.EC2API.DescribeInstancesBehavior.Output.Set(out)\n\n\t\t// Now that the backing instance is no longer part of a capacity reservation, we should demote the resources by\n\t\t// updating the capacity type to on-demand and removing the reservation ID label.\n\t\tExpectSingletonReconciled(ctx, controller)\n\t\tnodeClaim = ExpectExists(ctx, env.Client, nodeClaim)\n\t\tExpect(nodeClaim.Labels).To(HaveKeyWithValue(karpv1.CapacityTypeLabelKey, karpv1.CapacityTypeOnDemand))\n\t\tExpect(nodeClaim.Labels).ToNot(HaveKey(corecloudprovider.ReservationIDLabel))\n\t\tExpect(nodeClaim.Labels).ToNot(HaveKey(v1.LabelCapacityReservationType))\n\t\tnode = ExpectExists(ctx, env.Client, node)\n\t\tExpect(node.Labels).To(HaveKeyWithValue(karpv1.CapacityTypeLabelKey, karpv1.CapacityTypeOnDemand))\n\t\tExpect(node.Labels).ToNot(HaveKey(corecloudprovider.ReservationIDLabel))\n\t\tExpect(node.Labels).ToNot(HaveKey(v1.LabelCapacityReservationType))\n\t})\n\tIt(\"should demote nodes from reserved to on-demand even if their nodeclaim was demoted previously\", func() {\n\t\tout := awsEnv.EC2API.DescribeInstancesBehavior.Output.Clone()\n\t\tout.Reservations[0].Instances[0].CapacityReservationId = nil\n\t\tawsEnv.EC2API.DescribeInstancesBehavior.Output.Set(out)\n\n\t\tExpectApplied(ctx, env.Client, nodeClaim)\n\t\tExpectSingletonReconciled(ctx, controller)\n\t\tnodeClaim = ExpectExists(ctx, env.Client, nodeClaim)\n\t\tExpect(nodeClaim.Labels).To(HaveKeyWithValue(karpv1.CapacityTypeLabelKey, karpv1.CapacityTypeOnDemand))\n\t\tExpect(nodeClaim.Labels).ToNot(HaveKey(corecloudprovider.ReservationIDLabel))\n\t\tExpect(nodeClaim.Labels).ToNot(HaveKey(v1.LabelCapacityReservationType))\n\n\t\tExpectApplied(ctx, env.Client, node)\n\t\tExpectSingletonReconciled(ctx, controller)\n\t\tnode = ExpectExists(ctx, env.Client, node)\n\t\tExpect(node.Labels).To(HaveKeyWithValue(karpv1.CapacityTypeLabelKey, karpv1.CapacityTypeOnDemand))\n\t\tExpect(node.Labels).ToNot(HaveKey(corecloudprovider.ReservationIDLabel))\n\t\tExpect(node.Labels).ToNot(HaveKey(v1.LabelCapacityReservationType))\n\t})\n})\n"
  },
  {
    "path": "pkg/controllers/capacityreservation/expiration/controller.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage expiration\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"time\"\n\n\t\"github.com/awslabs/operatorpkg/reconciler\"\n\t\"github.com/awslabs/operatorpkg/serrors\"\n\t\"github.com/awslabs/operatorpkg/singleton\"\n\t\"github.com/samber/lo\"\n\t\"go.uber.org/multierr\"\n\tapierrors \"k8s.io/apimachinery/pkg/api/errors\"\n\t\"k8s.io/apimachinery/pkg/util/sets\"\n\t\"k8s.io/client-go/util/workqueue\"\n\t\"k8s.io/klog/v2\"\n\t\"k8s.io/utils/clock\"\n\tcontrollerruntime \"sigs.k8s.io/controller-runtime\"\n\t\"sigs.k8s.io/controller-runtime/pkg/client\"\n\t\"sigs.k8s.io/controller-runtime/pkg/log\"\n\t\"sigs.k8s.io/controller-runtime/pkg/manager\"\n\tkarpv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n\t\"sigs.k8s.io/karpenter/pkg/cloudprovider\"\n\t\"sigs.k8s.io/karpenter/pkg/operator/injection\"\n\t\"sigs.k8s.io/karpenter/pkg/utils/nodeclaim\"\n\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/capacityreservation\"\n)\n\n// The capacityreservation.expiration controller handles pre-emptive termination for nodes in expiring capacity-block\n// reservations. These nodes should be terminated 40 minutes before the capacity-block's end time, 10 minutes before EC2\n// begins reclaiming the instances. This is inline with the interruption notification emitted by EC2.\ntype Controller struct {\n\tclk           clock.Clock\n\tkubeClient    client.Client\n\tcloudProvider cloudprovider.CloudProvider\n\tcrProvider    capacityreservation.Provider\n}\n\nfunc NewController(\n\tclk clock.Clock,\n\tkubeClient client.Client,\n\tcloudProvider cloudprovider.CloudProvider,\n\tcapacityReservationProvider capacityreservation.Provider,\n) *Controller {\n\treturn &Controller{\n\t\tclk:           clk,\n\t\tkubeClient:    kubeClient,\n\t\tcloudProvider: cloudProvider,\n\t\tcrProvider:    capacityReservationProvider,\n\t}\n}\n\nfunc (c *Controller) Name() string {\n\treturn \"capacityreservation.expiration\"\n}\n\nfunc (c *Controller) Reconcile(ctx context.Context) (reconciler.Result, error) {\n\tctx = injection.WithControllerName(ctx, c.Name())\n\tncs, err := nodeclaim.ListManaged(ctx, c.kubeClient, c.cloudProvider)\n\tif err != nil {\n\t\treturn reconciler.Result{}, fmt.Errorf(\"listing instance types, %w\", err)\n\t}\n\tec2CRs, err := c.crProvider.List(ctx, lo.FilterMap(ncs, func(nc *karpv1.NodeClaim, _ int) (v1.CapacityReservationSelectorTerm, bool) {\n\t\tid, ok := nc.Labels[cloudprovider.ReservationIDLabel]\n\t\treturn v1.CapacityReservationSelectorTerm{ID: id}, ok\n\t})...)\n\tif err != nil {\n\t\treturn reconciler.Result{}, fmt.Errorf(\"getting capacity reservations, %w\", err)\n\t}\n\texpiringCRs := sets.New(lo.FilterMap(ec2CRs, func(ec2CR *ec2types.CapacityReservation, _ int) (string, bool) {\n\t\tcr, err := v1.CapacityReservationFromEC2(c.clk, ec2CR)\n\t\tif err != nil {\n\t\t\tlog.FromContext(ctx).WithValues(\"capacity-reservation-id\", *ec2CR.CapacityReservationId).Error(err, \"failed to parse capacity reservation\")\n\t\t\treturn \"\", false\n\t\t}\n\t\treturn cr.ID, cr.State == v1.CapacityReservationStateExpiring\n\t})...)\n\ttoDelete := lo.Filter(ncs, func(nc *karpv1.NodeClaim, _ int) bool {\n\t\tid, ok := nc.Labels[cloudprovider.ReservationIDLabel]\n\t\tif !ok {\n\t\t\treturn false\n\t\t}\n\t\treturn expiringCRs.Has(id)\n\t})\n\terrs := make([]error, len(toDelete))\n\tworkqueue.ParallelizeUntil(ctx, 10, len(toDelete), func(i int) {\n\t\tif err := c.kubeClient.Delete(ctx, toDelete[i]); err != nil {\n\t\t\tif apierrors.IsNotFound(err) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\terrs[i] = err\n\t\t\treturn\n\t\t}\n\t\tlog.FromContext(ctx).\n\t\t\tWithValues(\"NodeClaim\", klog.KObj(toDelete[i]), \"capacity-reservation-id\", toDelete[i].Labels[v1.LabelCapacityReservationID]).\n\t\t\tInfo(\"initiating delete for capacity block expiration\")\n\t})\n\tif lo.ContainsBy(errs, func(err error) bool { return err != nil }) {\n\t\treturn reconciler.Result{}, serrors.Wrap(\n\t\t\tfmt.Errorf(\"deleting nodeclaims, %w\", multierr.Combine(errs...)),\n\t\t\t\"NodeClaims\", lo.FilterMap(errs, func(err error, i int) (klog.ObjectRef, bool) {\n\t\t\t\tif err == nil {\n\t\t\t\t\treturn klog.ObjectRef{}, false\n\t\t\t\t}\n\t\t\t\treturn klog.KObj(toDelete[i]), true\n\t\t\t}),\n\t\t)\n\t}\n\treturn reconciler.Result{RequeueAfter: time.Minute}, nil\n}\n\nfunc (c *Controller) Register(_ context.Context, m manager.Manager) error {\n\treturn controllerruntime.NewControllerManagedBy(m).\n\t\tNamed(c.Name()).\n\t\tWatchesRawSource(singleton.Source()).\n\t\tComplete(singleton.AsReconciler(c))\n}\n"
  },
  {
    "path": "pkg/controllers/capacityreservation/expiration/suite_test.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage expiration_test\n\nimport (\n\t\"context\"\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/awslabs/operatorpkg/option\"\n\t\"github.com/imdario/mergo\"\n\t\"github.com/samber/lo\"\n\t\"k8s.io/client-go/tools/record\"\n\tkarpv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n\t\"sigs.k8s.io/karpenter/pkg/events\"\n\tcoretest \"sigs.k8s.io/karpenter/pkg/test\"\n\n\t\"github.com/aws/aws-sdk-go-v2/service/ec2\"\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\n\t\"github.com/aws/karpenter-provider-aws/pkg/apis\"\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/cloudprovider\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/controllers/capacityreservation/expiration\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/operator/options\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/test\"\n\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n\t. \"sigs.k8s.io/karpenter/pkg/test/expectations\"\n\t\"sigs.k8s.io/karpenter/pkg/test/v1alpha1\"\n\t. \"sigs.k8s.io/karpenter/pkg/utils/testing\"\n\n\tmetav1 \"k8s.io/apimachinery/pkg/apis/meta/v1\"\n\tcoreoptions \"sigs.k8s.io/karpenter/pkg/operator/options\"\n)\n\nvar ctx context.Context\nvar stop context.CancelFunc\nvar env *coretest.Environment\nvar awsEnv *test.Environment\nvar controller *expiration.Controller\n\nfunc TestAWS(t *testing.T) {\n\tctx = TestContextWithLogger(t)\n\tRegisterFailHandler(Fail)\n\tRunSpecs(t, \"CapacityReservationExpiration\")\n}\n\nvar _ = BeforeSuite(func() {\n\tenv = coretest.NewEnvironment(coretest.WithCRDs(apis.CRDs...), coretest.WithCRDs(v1alpha1.CRDs...), coretest.WithFieldIndexers(coretest.NodeProviderIDFieldIndexer(ctx)))\n\tctx = options.ToContext(ctx, test.Options())\n\tctx = coreoptions.ToContext(ctx, coretest.Options(coretest.OptionsFields{FeatureGates: coretest.FeatureGates{ReservedCapacity: lo.ToPtr(true)}}))\n\tctx, stop = context.WithCancel(ctx)\n\tawsEnv = test.NewEnvironment(ctx, env)\n\n\tcloudProvider := cloudprovider.New(awsEnv.InstanceTypesProvider, awsEnv.InstanceProvider, events.NewRecorder(&record.FakeRecorder{}),\n\t\tenv.Client, awsEnv.AMIProvider, awsEnv.SecurityGroupProvider, awsEnv.CapacityReservationProvider, awsEnv.InstanceTypeStore)\n\tcontroller = expiration.NewController(awsEnv.Clock, env.Client, cloudProvider, awsEnv.CapacityReservationProvider)\n})\n\nvar _ = AfterSuite(func() {\n\tstop()\n\tExpect(env.Stop()).To(Succeed(), \"Failed to stop environment\")\n})\n\nvar _ = BeforeEach(func() {\n\tctx = coreoptions.ToContext(ctx, coretest.Options(coretest.OptionsFields{FeatureGates: coretest.FeatureGates{ReservedCapacity: lo.ToPtr(true)}}))\n\tctx = options.ToContext(ctx, test.Options())\n\tawsEnv.Reset()\n})\n\nvar _ = AfterEach(func() {\n\tExpectCleanedUp(ctx, env.Client)\n})\n\nvar _ = Describe(\"Capacity Reservation Expiration Controller\", func() {\n\tBeforeEach(func() {\n\t\tawsEnv.Clock.SetTime(time.Now())\n\t})\n\tIt(\"should delete nodeclaims associated with expiring capacity-block reservations\", func() {\n\t\tcrs := []ec2types.CapacityReservation{\n\t\t\tmakeCapacityReservation(\n\t\t\t\t\"cr-expiring\",\n\t\t\t\twithEndTime(awsEnv.Clock.Now().Add(time.Minute*39)),\n\t\t\t\twithReservationType(ec2types.CapacityReservationTypeCapacityBlock),\n\t\t\t),\n\t\t\tmakeCapacityReservation(\n\t\t\t\t\"cr-active\",\n\t\t\t\twithEndTime(awsEnv.Clock.Now().Add(time.Minute*60)),\n\t\t\t\twithReservationType(ec2types.CapacityReservationTypeCapacityBlock),\n\t\t\t),\n\t\t}\n\t\tawsEnv.EC2API.DescribeCapacityReservationsOutput.Set(&ec2.DescribeCapacityReservationsOutput{\n\t\t\tCapacityReservations: crs,\n\t\t})\n\t\tncs := lo.Map(crs, func(cr ec2types.CapacityReservation, _ int) *karpv1.NodeClaim {\n\t\t\treturn coretest.NodeClaim(karpv1.NodeClaim{\n\t\t\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\t\t\tName: *cr.CapacityReservationId,\n\t\t\t\t\tLabels: map[string]string{\n\t\t\t\t\t\tv1.LabelCapacityReservationID: *cr.CapacityReservationId,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t})\n\t\t})\n\t\tfor _, nc := range ncs {\n\t\t\tExpectApplied(ctx, env.Client, nc)\n\t\t}\n\t\tExpectSingletonReconciled(ctx, controller)\n\t\tncs = ExpectNodeClaims(ctx, env.Client)\n\t\tExpect(ncs).To(HaveLen(1))\n\t\tExpect(ncs[0].Name).To(Equal(\"cr-active\"))\n\t})\n\tIt(\"should not delete nodeclaims associated with standard capacity reservations within the capacity block expiration window\", func() {\n\t\tcrs := []ec2types.CapacityReservation{\n\t\t\tmakeCapacityReservation(\n\t\t\t\t\"cr-default\",\n\t\t\t\twithEndTime(awsEnv.Clock.Now().Add(time.Minute*39)),\n\t\t\t),\n\t\t\tmakeCapacityReservation(\n\t\t\t\t\"cr-default-interruptible\",\n\t\t\t\twithEndTime(awsEnv.Clock.Now().Add(time.Minute*39)),\n\t\t\t\twithInterruptible(true),\n\t\t\t),\n\t\t}\n\t\tawsEnv.EC2API.DescribeCapacityReservationsOutput.Set(&ec2.DescribeCapacityReservationsOutput{\n\t\t\tCapacityReservations: crs,\n\t\t})\n\t\tncs := lo.Map(crs, func(cr ec2types.CapacityReservation, _ int) *karpv1.NodeClaim {\n\t\t\treturn coretest.NodeClaim(karpv1.NodeClaim{\n\t\t\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\t\t\tName: *cr.CapacityReservationId,\n\t\t\t\t\tLabels: map[string]string{\n\t\t\t\t\t\tv1.LabelCapacityReservationID: *cr.CapacityReservationId,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t})\n\t\t})\n\t\tfor _, nc := range ncs {\n\t\t\tExpectApplied(ctx, env.Client, nc)\n\t\t}\n\t\tExpectSingletonReconciled(ctx, controller)\n\t\tncs = ExpectNodeClaims(ctx, env.Client)\n\t\tExpect(ncs).To(HaveLen(2))\n\t})\n})\n\ntype mockCapacityReservationOpts = option.Function[ec2types.CapacityReservation]\n\nfunc withReservationType(crt ec2types.CapacityReservationType) mockCapacityReservationOpts {\n\treturn func(cr *ec2types.CapacityReservation) {\n\t\tcr.ReservationType = crt\n\t}\n}\n\nfunc withEndTime(t time.Time) mockCapacityReservationOpts {\n\treturn func(cr *ec2types.CapacityReservation) {\n\t\tcr.EndDate = lo.ToPtr(t)\n\t}\n}\n\nfunc withInterruptible(interruptible bool) mockCapacityReservationOpts {\n\treturn func(cr *ec2types.CapacityReservation) {\n\t\tcr.Interruptible = lo.ToPtr(interruptible)\n\t}\n}\n\nfunc makeCapacityReservation(id string, opts ...mockCapacityReservationOpts) ec2types.CapacityReservation {\n\tcr := ec2types.CapacityReservation{\n\t\tAvailabilityZone:       lo.ToPtr(\"test-zone-1a\"),\n\t\tInstanceType:           lo.ToPtr(\"m5.large\"),\n\t\tOwnerId:                lo.ToPtr(\"012345678901\"),\n\t\tInstanceMatchCriteria:  ec2types.InstanceMatchCriteriaTargeted,\n\t\tCapacityReservationId:  &id,\n\t\tAvailableInstanceCount: lo.ToPtr[int32](1),\n\t\tState:                  ec2types.CapacityReservationStateActive,\n\t\tReservationType:        ec2types.CapacityReservationTypeDefault,\n\t\tInterruptible:          lo.ToPtr(false),\n\t}\n\tlo.Must0(mergo.Merge(&cr, option.Resolve(opts...), mergo.WithOverride))\n\treturn cr\n}\n"
  },
  {
    "path": "pkg/controllers/controllers.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage controllers\n\nimport (\n\t\"context\"\n\n\t\"github.com/awslabs/operatorpkg/controller\"\n\t\"github.com/awslabs/operatorpkg/status\"\n\t\"github.com/patrickmn/go-cache\"\n\t\"sigs.k8s.io/controller-runtime/pkg/manager\"\n\t\"sigs.k8s.io/karpenter/pkg/cloudprovider\"\n\n\t\"github.com/aws/aws-sdk-go-v2/aws\"\n\tservicesqs \"github.com/aws/aws-sdk-go-v2/service/sqs\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\tsdk \"github.com/aws/karpenter-provider-aws/pkg/aws\"\n\tcrcapacitytype \"github.com/aws/karpenter-provider-aws/pkg/controllers/capacityreservation/capacitytype\"\n\tcrexpiration \"github.com/aws/karpenter-provider-aws/pkg/controllers/capacityreservation/expiration\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/controllers/metrics\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/controllers/nodeclass\"\n\tnodeclasshash \"github.com/aws/karpenter-provider-aws/pkg/controllers/nodeclass/hash\"\n\tcontrollersinstancetype \"github.com/aws/karpenter-provider-aws/pkg/controllers/providers/instancetype\"\n\tcontrollersinstancetypecapacity \"github.com/aws/karpenter-provider-aws/pkg/controllers/providers/instancetype/capacity\"\n\tcontrollerspricing \"github.com/aws/karpenter-provider-aws/pkg/controllers/providers/pricing\"\n\tssminvalidation \"github.com/aws/karpenter-provider-aws/pkg/controllers/providers/ssm/invalidation\"\n\tcontrollersversion \"github.com/aws/karpenter-provider-aws/pkg/controllers/providers/version\"\n\tcapacityreservationprovider \"github.com/aws/karpenter-provider-aws/pkg/providers/capacityreservation\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/launchtemplate\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/version\"\n\n\t\"k8s.io/utils/clock\"\n\t\"sigs.k8s.io/controller-runtime/pkg/client\"\n\n\t\"sigs.k8s.io/karpenter/pkg/events\"\n\n\tawscache \"github.com/aws/karpenter-provider-aws/pkg/cache\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/controllers/interruption\"\n\tnodeclaimgarbagecollection \"github.com/aws/karpenter-provider-aws/pkg/controllers/nodeclaim/garbagecollection\"\n\tnodeclaimtagging \"github.com/aws/karpenter-provider-aws/pkg/controllers/nodeclaim/tagging\"\n\tnodeclassgarbagecollection \"github.com/aws/karpenter-provider-aws/pkg/controllers/nodeclass/garbagecollection\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/operator/options\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/amifamily\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/instance\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/instanceprofile\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/instancetype\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/pricing\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/securitygroup\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/sqs\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/subnet\"\n)\n\nfunc NewControllers(\n\tctx context.Context,\n\tmgr manager.Manager,\n\tcfg aws.Config,\n\tclk clock.Clock,\n\tec2api sdk.EC2API,\n\tkubeClient client.Client,\n\trecorder events.Recorder,\n\tunavailableOfferings *awscache.UnavailableOfferings,\n\tssmCache *cache.Cache,\n\tvalidationCache *cache.Cache,\n\trecreationCache *cache.Cache,\n\tcloudProvider cloudprovider.CloudProvider,\n\tsubnetProvider subnet.Provider,\n\tsecurityGroupProvider securitygroup.Provider,\n\tinstanceProfileProvider instanceprofile.Provider,\n\tinstanceProvider instance.Provider,\n\tpricingProvider pricing.Provider,\n\tamiProvider amifamily.Provider,\n\tlaunchTemplateProvider launchtemplate.Provider,\n\tversionProvider *version.DefaultProvider,\n\tinstanceTypeProvider *instancetype.DefaultProvider,\n\tcapacityReservationProvider capacityreservationprovider.Provider,\n\tamiResolver amifamily.Resolver,\n) []controller.Controller {\n\tcontrollers := []controller.Controller{\n\t\tnodeclasshash.NewController(kubeClient),\n\t\tnodeclass.NewController(clk, kubeClient, cloudProvider, recorder, cfg.Region, subnetProvider, securityGroupProvider, amiProvider, instanceProfileProvider, instanceTypeProvider, launchTemplateProvider, capacityReservationProvider, ec2api, validationCache, recreationCache, amiResolver, options.FromContext(ctx).DisableDryRun),\n\t\tnodeclaimgarbagecollection.NewController(kubeClient, cloudProvider),\n\t\tnodeclaimtagging.NewController(kubeClient, cloudProvider, instanceProvider),\n\t\tcontrollerspricing.NewController(pricingProvider),\n\t\tcontrollersinstancetype.NewController(instanceTypeProvider),\n\t\tcontrollersinstancetypecapacity.NewController(kubeClient, cloudProvider, instanceTypeProvider),\n\t\tssminvalidation.NewController(ssmCache, amiProvider),\n\t\tstatus.NewController[*v1.EC2NodeClass](kubeClient, mgr.GetEventRecorderFor(\"karpenter\"), status.EmitDeprecatedMetrics),\n\t\tcontrollersversion.NewController(versionProvider, versionProvider.UpdateVersionWithValidation),\n\t\tcrcapacitytype.NewController(kubeClient, cloudProvider),\n\t\tcrexpiration.NewController(clk, kubeClient, cloudProvider, capacityReservationProvider),\n\t\tmetrics.NewController(kubeClient, cloudProvider),\n\t}\n\t// Instance profile garbage collection requires IAM API access. Skip registering the controller when running\n\t// in isolated VPC mode to avoid initiating calls to public AWS endpoints that won’t be reachable.\n\tif !options.FromContext(ctx).IsolatedVPC {\n\t\tcontrollers = append(controllers, nodeclassgarbagecollection.NewController(kubeClient, cloudProvider, instanceProfileProvider, cfg.Region))\n\t}\n\tif options.FromContext(ctx).InterruptionQueue != \"\" {\n\t\tsqsAPI := servicesqs.NewFromConfig(cfg)\n\t\tprov, _ := sqs.NewSQSProvider(ctx, sqsAPI)\n\t\tcontrollers = append(controllers, interruption.NewController(kubeClient, cloudProvider, clk, recorder, prov, sqsAPI, unavailableOfferings, capacityReservationProvider))\n\t}\n\treturn controllers\n}\n"
  },
  {
    "path": "pkg/controllers/interruption/controller.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage interruption\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"time\"\n\n\t\"sigs.k8s.io/karpenter/pkg/cloudprovider\"\n\t\"sigs.k8s.io/karpenter/pkg/metrics\"\n\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\tsqsapi \"github.com/aws/aws-sdk-go-v2/service/sqs\"\n\tsqstypes \"github.com/aws/aws-sdk-go-v2/service/sqs/types\"\n\t\"github.com/awslabs/operatorpkg/reconciler\"\n\t\"github.com/awslabs/operatorpkg/singleton\"\n\t\"go.uber.org/multierr\"\n\tcorev1 \"k8s.io/api/core/v1\"\n\t\"k8s.io/client-go/util/workqueue\"\n\t\"k8s.io/klog/v2\"\n\t\"k8s.io/utils/clock\"\n\tcontrollerruntime \"sigs.k8s.io/controller-runtime\"\n\t\"sigs.k8s.io/controller-runtime/pkg/client\"\n\t\"sigs.k8s.io/controller-runtime/pkg/log\"\n\t\"sigs.k8s.io/controller-runtime/pkg/manager\"\n\t\"sigs.k8s.io/karpenter/pkg/operator/injection\"\n\n\tkarpv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n\t\"sigs.k8s.io/karpenter/pkg/utils/pretty\"\n\n\t\"sigs.k8s.io/karpenter/pkg/events\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/cache\"\n\tinterruptionevents \"github.com/aws/karpenter-provider-aws/pkg/controllers/interruption/events\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/controllers/interruption/messages\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/capacityreservation\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/sqs\"\n)\n\ntype Action string\n\nconst (\n\tCordonAndDrain Action = \"CordonAndDrain\"\n\tNoAction       Action = \"NoAction\"\n)\n\n// Controller is an AWS interruption controller.\n// It continually polls an SQS queue for events from aws.ec2 and aws.health that\n// trigger node health events, spot interruption/rebalance events, and capacity reservation interruptions.\ntype Controller struct {\n\tkubeClient                  client.Client\n\tcloudProvider               cloudprovider.CloudProvider\n\tclk                         clock.Clock\n\trecorder                    events.Recorder\n\tsqsProvider                 sqs.Provider\n\tsqsAPI                      *sqsapi.Client\n\tunavailableOfferingsCache   *cache.UnavailableOfferings\n\tcapacityReservationProvider capacityreservation.Provider\n\tparser                      *EventParser\n\tcm                          *pretty.ChangeMonitor\n}\n\nfunc NewController(\n\tkubeClient client.Client,\n\tcloudProvider cloudprovider.CloudProvider,\n\tclk clock.Clock,\n\trecorder events.Recorder,\n\tsqsProvider sqs.Provider,\n\tsqsAPI *sqsapi.Client,\n\tunavailableOfferingsCache *cache.UnavailableOfferings,\n\tcapacityReservationProvider capacityreservation.Provider,\n) *Controller {\n\treturn &Controller{\n\t\tkubeClient:                  kubeClient,\n\t\tcloudProvider:               cloudProvider,\n\t\tclk:                         clk,\n\t\trecorder:                    recorder,\n\t\tsqsProvider:                 sqsProvider,\n\t\tsqsAPI:                      sqsAPI,\n\t\tunavailableOfferingsCache:   unavailableOfferingsCache,\n\t\tcapacityReservationProvider: capacityReservationProvider,\n\t\tparser:                      NewEventParser(DefaultParsers...),\n\t\tcm:                          pretty.NewChangeMonitor(),\n\t}\n}\n\nfunc (c *Controller) Reconcile(ctx context.Context) (reconciler.Result, error) {\n\tctx = injection.WithControllerName(ctx, \"interruption\")\n\tif c.sqsProvider == nil {\n\t\tprov, err := sqs.NewSQSProvider(ctx, c.sqsAPI)\n\t\tif err != nil {\n\t\t\tlog.FromContext(ctx).Error(err, \"failed to create valid sqs provider\")\n\t\t\treturn reconciler.Result{}, fmt.Errorf(\"creating sqs provider, %w\", err)\n\t\t}\n\t\tc.sqsProvider = prov\n\t}\n\tctx = log.IntoContext(ctx, log.FromContext(ctx).WithValues(\"queue\", c.sqsProvider.Name()))\n\tif c.cm.HasChanged(c.sqsProvider.Name(), nil) {\n\t\tlog.FromContext(ctx).V(1).Info(\"watching interruption queue\")\n\t}\n\tsqsMessages, err := c.sqsProvider.GetSQSMessages(ctx)\n\tif err != nil {\n\t\treturn reconciler.Result{}, fmt.Errorf(\"getting messages from queue, %w\", err)\n\t}\n\tif len(sqsMessages) == 0 {\n\t\treturn reconciler.Result{RequeueAfter: singleton.RequeueImmediately}, nil\n\t}\n\n\terrs := make([]error, len(sqsMessages))\n\tworkqueue.ParallelizeUntil(ctx, 10, len(sqsMessages), func(i int) {\n\t\tmsg, e := c.parseMessage(sqsMessages[i])\n\t\tif e != nil {\n\t\t\t// If we fail to parse, then we should delete the message but still log the error\n\t\t\tlog.FromContext(ctx).Error(e, \"failed parsing interruption message\")\n\t\t\terrs[i] = c.deleteMessage(ctx, sqsMessages[i])\n\t\t\treturn\n\t\t}\n\t\tif e = c.handleMessage(ctx, msg); e != nil {\n\t\t\terrs[i] = fmt.Errorf(\"handling message, %w\", e)\n\t\t\treturn\n\t\t}\n\t\terrs[i] = c.deleteMessage(ctx, sqsMessages[i])\n\t})\n\tif err = multierr.Combine(errs...); err != nil {\n\t\treturn reconciler.Result{}, err\n\t}\n\treturn reconciler.Result{RequeueAfter: singleton.RequeueImmediately}, nil\n}\n\nfunc (c *Controller) Register(_ context.Context, m manager.Manager) error {\n\treturn controllerruntime.NewControllerManagedBy(m).\n\t\tNamed(\"interruption\").\n\t\tWatchesRawSource(singleton.Source()).\n\t\tComplete(singleton.AsReconciler(c))\n}\n\n// parseMessage parses the passed SQS message into an internal Message interface\nfunc (c *Controller) parseMessage(raw *sqstypes.Message) (messages.Message, error) {\n\t// No message to parse in this case\n\tif raw == nil || raw.Body == nil {\n\t\treturn nil, fmt.Errorf(\"message or message body is nil\")\n\t}\n\tmsg, err := c.parser.Parse(*raw.Body)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"parsing sqs message, %w\", err)\n\t}\n\treturn msg, nil\n}\n\n// handleMessage takes an action against every node involved in the message that is owned by a NodePool\nfunc (c *Controller) handleMessage(ctx context.Context, msg messages.Message) (err error) {\n\tctx = log.IntoContext(ctx, log.FromContext(ctx).WithValues(\"messageKind\", msg.Kind()))\n\tReceivedMessages.Inc(map[string]string{messageTypeLabel: string(msg.Kind())})\n\n\tif msg.Kind() == messages.NoOpKind {\n\t\treturn nil\n\t}\n\tfor _, instanceID := range msg.EC2InstanceIDs() {\n\t\tnodeClaimList := &karpv1.NodeClaimList{}\n\t\tif e := c.kubeClient.List(ctx, nodeClaimList, client.MatchingFields{\"status.instanceID\": instanceID}); e != nil {\n\t\t\terr = multierr.Append(err, e)\n\t\t\tcontinue\n\t\t}\n\t\tif len(nodeClaimList.Items) == 0 {\n\t\t\tcontinue\n\t\t}\n\t\tfor _, nodeClaim := range nodeClaimList.Items {\n\t\t\tnodeList := &corev1.NodeList{}\n\t\t\tif e := c.kubeClient.List(ctx, nodeList, client.MatchingFields{\"spec.instanceID\": instanceID}); e != nil {\n\t\t\t\terr = multierr.Append(err, e)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tvar node *corev1.Node\n\t\t\tif len(nodeList.Items) > 0 {\n\t\t\t\tnode = &nodeList.Items[0]\n\t\t\t}\n\t\t\tif e := c.handleNodeClaim(ctx, msg, &nodeClaim, node); e != nil {\n\t\t\t\terr = multierr.Append(err, e)\n\t\t\t}\n\t\t}\n\t}\n\tMessageLatency.Observe(time.Since(msg.StartTime()).Seconds(), nil)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"acting on NodeClaims, %w\", err)\n\t}\n\treturn nil\n}\n\n// deleteMessage removes the passed SQS message from the queue and fires a metric for the deletion\nfunc (c *Controller) deleteMessage(ctx context.Context, msg *sqstypes.Message) error {\n\tif err := c.sqsProvider.DeleteSQSMessage(ctx, msg); err != nil {\n\t\treturn fmt.Errorf(\"deleting sqs message, %w\", err)\n\t}\n\tDeletedMessages.Inc(nil)\n\treturn nil\n}\n\n// handleNodeClaim retrieves the action for the message and then performs the appropriate action against the node\nfunc (c *Controller) handleNodeClaim(ctx context.Context, msg messages.Message, nodeClaim *karpv1.NodeClaim, node *corev1.Node) error {\n\taction := actionForMessage(msg)\n\tctx = log.IntoContext(ctx, log.FromContext(ctx).WithValues(\"NodeClaim\", klog.KObj(nodeClaim), \"action\", string(action)))\n\tif node != nil {\n\t\tctx = log.IntoContext(ctx, log.FromContext(ctx).WithValues(\"Node\", klog.KObj(node)))\n\t}\n\n\t// Record metric and event for this action\n\tc.notifyForMessage(msg, nodeClaim, node)\n\n\t// Mark the offering as unavailable in the ICE cache since we got a spot interruption warning\n\tif msg.Kind() == messages.SpotInterruptionKind {\n\t\tzone := nodeClaim.Labels[corev1.LabelTopologyZone]\n\t\tinstanceType := nodeClaim.Labels[corev1.LabelInstanceTypeStable]\n\t\tif zone != \"\" && instanceType != \"\" {\n\t\t\tunavailableReason := map[string]string{\n\t\t\t\t\"reason\": string(msg.Kind()),\n\t\t\t}\n\t\t\tc.unavailableOfferingsCache.MarkUnavailable(ctx, ec2types.InstanceType(instanceType), zone, karpv1.CapacityTypeSpot, unavailableReason)\n\t\t}\n\t}\n\n\t// Mark the reservation as unavailable in the ICE cache since we got a capacity reservation interruption warning\n\tif msg.Kind() == messages.CapacityReservationInterruptionKind {\n\t\treservationID := nodeClaim.Labels[v1.LabelCapacityReservationID]\n\t\tif reservationID != \"\" {\n\t\t\tc.capacityReservationProvider.MarkUnavailable(reservationID)\n\t\t}\n\t}\n\n\tif action != NoAction {\n\t\treturn c.deleteNodeClaim(ctx, msg, nodeClaim, node)\n\t}\n\treturn nil\n}\n\n// deleteNodeClaim removes the NodeClaim from the api-server\nfunc (c *Controller) deleteNodeClaim(ctx context.Context, msg messages.Message, nodeClaim *karpv1.NodeClaim, node *corev1.Node) error {\n\tif !nodeClaim.DeletionTimestamp.IsZero() {\n\t\treturn nil\n\t}\n\tif err := c.kubeClient.Delete(ctx, nodeClaim); err != nil {\n\t\treturn client.IgnoreNotFound(fmt.Errorf(\"deleting the node on interruption message, %w\", err))\n\t}\n\tlog.FromContext(ctx).Info(\"initiating delete from interruption message\")\n\tc.recorder.Publish(interruptionevents.TerminatingOnInterruption(node, nodeClaim)...)\n\tmetrics.NodeClaimsDisruptedTotal.Inc(map[string]string{\n\t\tmetrics.ReasonLabel:       string(msg.Kind()),\n\t\tmetrics.NodePoolLabel:     nodeClaim.Labels[karpv1.NodePoolLabelKey],\n\t\tmetrics.CapacityTypeLabel: nodeClaim.Labels[karpv1.CapacityTypeLabelKey],\n\t})\n\treturn nil\n}\n\n// notifyForMessage publishes the relevant alert based on the message kind\nfunc (c *Controller) notifyForMessage(msg messages.Message, nodeClaim *karpv1.NodeClaim, n *corev1.Node) {\n\tswitch msg.Kind() {\n\tcase messages.RebalanceRecommendationKind:\n\t\tc.recorder.Publish(interruptionevents.RebalanceRecommendation(n, nodeClaim)...)\n\n\tcase messages.ScheduledChangeKind:\n\t\tc.recorder.Publish(interruptionevents.Unhealthy(n, nodeClaim)...)\n\n\tcase messages.SpotInterruptionKind:\n\t\tc.recorder.Publish(interruptionevents.SpotInterrupted(n, nodeClaim)...)\n\n\tcase messages.CapacityReservationInterruptionKind:\n\t\tc.recorder.Publish(interruptionevents.CapacityReservationInstanceInterrupted(n, nodeClaim)...)\n\n\tcase messages.InstanceStoppedKind:\n\t\tc.recorder.Publish(interruptionevents.Stopping(n, nodeClaim)...)\n\n\tcase messages.InstanceTerminatedKind:\n\t\tc.recorder.Publish(interruptionevents.Terminating(n, nodeClaim)...)\n\n\tdefault:\n\t}\n}\n\nfunc actionForMessage(msg messages.Message) Action {\n\tswitch msg.Kind() {\n\tcase messages.ScheduledChangeKind, messages.SpotInterruptionKind, messages.InstanceStoppedKind, messages.InstanceTerminatedKind, messages.CapacityReservationInterruptionKind:\n\t\treturn CordonAndDrain\n\tdefault:\n\t\treturn NoAction\n\t}\n}\n"
  },
  {
    "path": "pkg/controllers/interruption/events/events.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage events\n\nimport (\n\tcorev1 \"k8s.io/api/core/v1\"\n\n\tkarpv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n\t\"sigs.k8s.io/karpenter/pkg/events\"\n)\n\nfunc SpotInterrupted(node *corev1.Node, nodeClaim *karpv1.NodeClaim) (evts []events.Event) {\n\tevts = append(evts, events.Event{\n\t\tInvolvedObject: nodeClaim,\n\t\tType:           corev1.EventTypeWarning,\n\t\tReason:         \"SpotInterrupted\",\n\t\tMessage:        \"Spot interruption warning was triggered\",\n\t\tDedupeValues:   []string{string(nodeClaim.UID)},\n\t})\n\tif node != nil {\n\t\tevts = append(evts, events.Event{\n\t\t\tInvolvedObject: node,\n\t\t\tType:           corev1.EventTypeWarning,\n\t\t\tReason:         \"SpotInterrupted\",\n\t\t\tMessage:        \"Spot interruption warning was triggered\",\n\t\t\tDedupeValues:   []string{string(node.UID)},\n\t\t})\n\t}\n\treturn evts\n}\n\nfunc CapacityReservationInstanceInterrupted(node *corev1.Node, nodeClaim *karpv1.NodeClaim) (evts []events.Event) {\n\tevts = append(evts, events.Event{\n\t\tInvolvedObject: nodeClaim,\n\t\tType:           corev1.EventTypeWarning,\n\t\tReason:         \"CapacityReservationInstanceInterrupted\",\n\t\tMessage:        \"Capacity Reservation interruption warning was triggered\",\n\t\tDedupeValues:   []string{string(nodeClaim.UID)},\n\t})\n\tif node != nil {\n\t\tevts = append(evts, events.Event{\n\t\t\tInvolvedObject: node,\n\t\t\tType:           corev1.EventTypeWarning,\n\t\t\tReason:         \"CapacityReservationInstanceInterrupted\",\n\t\t\tMessage:        \"Capacity Reservation interruption warning was triggered\",\n\t\t\tDedupeValues:   []string{string(node.UID)},\n\t\t})\n\t}\n\treturn evts\n}\n\nfunc RebalanceRecommendation(node *corev1.Node, nodeClaim *karpv1.NodeClaim) (evts []events.Event) {\n\tevts = append(evts, events.Event{\n\t\tInvolvedObject: nodeClaim,\n\t\tType:           corev1.EventTypeNormal,\n\t\tReason:         \"SpotRebalanceRecommendation\",\n\t\tMessage:        \"Spot rebalance recommendation was triggered\",\n\t\tDedupeValues:   []string{string(nodeClaim.UID)},\n\t})\n\tif node != nil {\n\t\tevts = append(evts, events.Event{\n\t\t\tInvolvedObject: node,\n\t\t\tType:           corev1.EventTypeNormal,\n\t\t\tReason:         \"SpotRebalanceRecommendation\",\n\t\t\tMessage:        \"Spot rebalance recommendation was triggered\",\n\t\t\tDedupeValues:   []string{string(node.UID)},\n\t\t})\n\t}\n\treturn evts\n}\n\nfunc Stopping(node *corev1.Node, nodeClaim *karpv1.NodeClaim) (evts []events.Event) {\n\tevts = append(evts, events.Event{\n\t\tInvolvedObject: nodeClaim,\n\t\tType:           corev1.EventTypeWarning,\n\t\tReason:         \"InstanceStopping\",\n\t\tMessage:        \"Instance is stopping\",\n\t\tDedupeValues:   []string{string(nodeClaim.UID)},\n\t})\n\tif node != nil {\n\t\tevts = append(evts, events.Event{\n\t\t\tInvolvedObject: node,\n\t\t\tType:           corev1.EventTypeWarning,\n\t\t\tReason:         \"InstanceStopping\",\n\t\t\tMessage:        \"Instance is stopping\",\n\t\t\tDedupeValues:   []string{string(node.UID)},\n\t\t})\n\t}\n\treturn evts\n}\n\nfunc Terminating(node *corev1.Node, nodeClaim *karpv1.NodeClaim) (evts []events.Event) {\n\tevts = append(evts, events.Event{\n\t\tInvolvedObject: nodeClaim,\n\t\tType:           corev1.EventTypeWarning,\n\t\tReason:         \"InstanceTerminating\",\n\t\tMessage:        \"Instance is terminating\",\n\t\tDedupeValues:   []string{string(nodeClaim.UID)},\n\t})\n\tif node != nil {\n\t\tevts = append(evts, events.Event{\n\t\t\tInvolvedObject: node,\n\t\t\tType:           corev1.EventTypeWarning,\n\t\t\tReason:         \"InstanceTerminating\",\n\t\t\tMessage:        \"Instance is terminating\",\n\t\t\tDedupeValues:   []string{string(node.UID)},\n\t\t})\n\t}\n\treturn evts\n}\n\nfunc Unhealthy(node *corev1.Node, nodeClaim *karpv1.NodeClaim) (evts []events.Event) {\n\tevts = append(evts, events.Event{\n\t\tInvolvedObject: nodeClaim,\n\t\tType:           corev1.EventTypeWarning,\n\t\tReason:         \"InstanceUnhealthy\",\n\t\tMessage:        \"An unhealthy warning was triggered for the instance\",\n\t\tDedupeValues:   []string{string(nodeClaim.UID)},\n\t})\n\tif node != nil {\n\t\tevts = append(evts, events.Event{\n\t\t\tInvolvedObject: node,\n\t\t\tType:           corev1.EventTypeWarning,\n\t\t\tReason:         \"InstanceUnhealthy\",\n\t\t\tMessage:        \"An unhealthy warning was triggered for the instance\",\n\t\t\tDedupeValues:   []string{string(node.UID)},\n\t\t})\n\t}\n\treturn evts\n}\n\nfunc TerminatingOnInterruption(node *corev1.Node, nodeClaim *karpv1.NodeClaim) (evts []events.Event) {\n\tevts = append(evts, events.Event{\n\t\tInvolvedObject: nodeClaim,\n\t\tType:           corev1.EventTypeWarning,\n\t\tReason:         \"TerminatingOnInterruption\",\n\t\tMessage:        \"Interruption triggered termination for the NodeClaim\",\n\t\tDedupeValues:   []string{string(nodeClaim.UID)},\n\t})\n\tif node != nil {\n\t\tevts = append(evts, events.Event{\n\t\t\tInvolvedObject: node,\n\t\t\tType:           corev1.EventTypeWarning,\n\t\t\tReason:         \"TerminatingOnInterruption\",\n\t\t\tMessage:        \"Interruption triggered termination for the Node\",\n\t\t\tDedupeValues:   []string{string(node.UID)},\n\t\t})\n\t}\n\treturn evts\n}\n"
  },
  {
    "path": "pkg/controllers/interruption/interruption_benchmark_test.go",
    "content": "//go:build test_performance\n\n/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n//nolint:gosec\npackage interruption_test\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"math/rand\"\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/avast/retry-go\"\n\t\"github.com/aws/aws-sdk-go-v2/aws\"\n\t\"github.com/aws/aws-sdk-go-v2/config\"\n\tservicesqs \"github.com/aws/aws-sdk-go-v2/service/sqs\"\n\t\"github.com/go-logr/zapr\"\n\t\"github.com/samber/lo\"\n\t\"go.uber.org/multierr\"\n\t\"go.uber.org/zap\"\n\tcorev1 \"k8s.io/api/core/v1\"\n\tmetav1 \"k8s.io/apimachinery/pkg/apis/meta/v1\"\n\t\"k8s.io/client-go/util/workqueue\"\n\tclock \"k8s.io/utils/clock/testing\"\n\tcontrollerruntime \"sigs.k8s.io/controller-runtime\"\n\t\"sigs.k8s.io/controller-runtime/pkg/client\"\n\t\"sigs.k8s.io/controller-runtime/pkg/log\"\n\tkarpv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n\n\tawscache \"github.com/aws/karpenter-provider-aws/pkg/cache\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/controllers/interruption\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/controllers/interruption/events\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/fake\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/operator/options\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/sqs\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/test\"\n\n\tcoreoptions \"sigs.k8s.io/karpenter/pkg/operator/options\"\n\tcoretest \"sigs.k8s.io/karpenter/pkg/test\"\n)\n\nvar r = rand.New(rand.NewSource(time.Now().Unix()))\n\nfunc BenchmarkNotification15000(b *testing.B) {\n\tbenchmarkNotificationController(b, 15000)\n}\n\nfunc BenchmarkNotification5000(b *testing.B) {\n\tbenchmarkNotificationController(b, 5000)\n}\n\nfunc BenchmarkNotification1000(b *testing.B) {\n\tbenchmarkNotificationController(b, 1000)\n}\n\nfunc BenchmarkNotification100(b *testing.B) {\n\tbenchmarkNotificationController(b, 100)\n}\n\n//nolint:gocyclo\nfunc benchmarkNotificationController(b *testing.B, messageCount int) {\n\tctx = log.IntoContext(ctx, log.FromContext(ctx).WithValues(\"message-count\", messageCount))\n\tfakeClock = &clock.FakeClock{}\n\tctx = coreoptions.ToContext(ctx, coretest.Options())\n\tctx = options.ToContext(ctx, test.Options(test.OptionsFields{\n\t\tClusterName:       lo.ToPtr(\"karpenter-notification-benchmarking\"),\n\t\tIsolatedVPC:       lo.ToPtr(true),\n\t\tInterruptionQueue: lo.ToPtr(\"test-cluster\"),\n\t}))\n\tenv = coretest.NewEnvironment()\n\t// Stop the coretest environment after the coretest completes\n\tdefer func() {\n\t\tif err := retry.Do(func() error {\n\t\t\treturn env.Stop()\n\t\t}); err != nil {\n\t\t\tb.Fatalf(\"stopping coretest environment, %v\", err)\n\t\t}\n\t}()\n\n\tproviders := newProviders(ctx, env.Client)\n\tqueueURL, err := providers.makeInfrastructure(ctx)\n\tif err != nil {\n\t\tb.Fatalf(\"standing up infrastructure, %v\", err)\n\t}\n\t// Cleanup the infrastructure after the coretest completes\n\tdefer func() {\n\t\tif err := retry.Do(func() error {\n\t\t\treturn providers.cleanupInfrastructure(queueURL)\n\t\t}); err != nil {\n\t\t\tb.Fatalf(\"deleting infrastructure, %v\", err)\n\t\t}\n\t}()\n\n\t// Load all the fundamental components before setting up the controllers\n\trecorder := coretest.NewEventRecorder()\n\tunavailableOfferingsCache = awscache.NewUnavailableOfferings()\n\n\t// Set-up the controllers\n\tinterruptionController := interruption.NewController(env.Client, fakeClock, recorder, providers.sqsProvider, unavailableOfferingsCache)\n\n\tmessages, nodes := makeDiverseMessagesAndNodes(messageCount)\n\tlog.FromContext(ctx).Info(\"provisioning nodes\")\n\tif err := provisionNodes(ctx, env.Client, nodes); err != nil {\n\t\tb.Fatalf(\"provisioning nodes, %v\", err)\n\t}\n\tlog.FromContext(ctx).Info(\"completed provisioning nodes\")\n\n\tlog.FromContext(ctx).Info(\"provisioning messages into the SQS Queue\")\n\tif err := providers.provisionMessages(ctx, messages...); err != nil {\n\t\tb.Fatalf(\"provisioning messages, %v\", err)\n\t}\n\tlog.FromContext(ctx).Info(\"completed provisioning messages into the SQS Queue\")\n\n\tm, err := controllerruntime.NewManager(env.Config, controllerruntime.Options{\n\t\tBaseContext: func() context.Context { return log.IntoContext(ctx, zapr.NewLogger(zap.NewNop())) },\n\t})\n\tif err != nil {\n\t\tb.Fatalf(\"creating manager, %v\", err)\n\t}\n\n\t// Registering controller with the manager\n\tif err = interruptionController.Builder(ctx, m).Complete(interruptionController); err != nil {\n\t\tb.Fatalf(\"registering interruption controller, %v\", err)\n\t}\n\n\tb.ResetTimer()\n\tstart := time.Now()\n\tmanagerErr := make(chan error)\n\tgo func() {\n\t\tlog.FromContext(ctx).Info(\"starting controller manager\")\n\t\tmanagerErr <- m.Start(ctx)\n\t}()\n\n\tselect {\n\tcase <-providers.monitorMessagesProcessed(ctx, recorder, messageCount):\n\tcase err = <-managerErr:\n\t\tb.Fatalf(\"running manager, %v\", err)\n\t}\n\n\tduration := time.Since(start)\n\tb.ReportMetric(float64(messageCount), \"Messages\")\n\tb.ReportMetric(duration.Seconds(), \"TotalDurationInSeconds\")\n\tb.ReportMetric(float64(messageCount)/duration.Seconds(), \"Messages/Second\")\n}\n\ntype providerSet struct {\n\tkubeClient  client.Client\n\tsqsAPI      sqs.Client\n\tsqsProvider sqs.Provider\n}\n\nfunc newProviders(ctx context.Context, kubeClient client.Client) providerSet {\n\tcfg := lo.Must(config.LoadDefaultConfig(ctx))\n\tsqsAPI := servicesqs.New(cfg)\n\tout := lo.Must(sqsAPI.GetQueueUrlWithContext(ctx, &servicesqs.GetQueueUrlInput{QueueName: lo.ToPtr(options.FromContext(ctx).InterruptionQueue)}))\n\treturn providerSet{\n\t\tkubeClient:  kubeClient,\n\t\tsqsAPI:      sqsAPI,\n\t\tsqsProvider: lo.Must(sqs.NewDefaultProvider(sqsAPI, lo.FromPtr(out.QueueUrl))),\n\t}\n}\n\nfunc (p *providerSet) makeInfrastructure(ctx context.Context) (string, error) {\n\tout, err := p.sqsAPI.CreateQueueWithContext(ctx, &servicesqs.CreateQueueInput{\n\t\tQueueName: lo.ToPtr(options.FromContext(ctx).InterruptionQueue),\n\t\tAttributes: map[string]*string{\n\t\t\tservicesqs.QueueAttributeNameMessageRetentionPeriod: aws.String(\"1200\"), // 20 minutes for this test\n\t\t},\n\t})\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"creating servicesqs queue, %w\", err)\n\t}\n\treturn lo.FromPtr(out.QueueUrl), nil\n}\n\nfunc (p *providerSet) cleanupInfrastructure(queueURL string) error {\n\tif _, err := p.sqsAPI.DeleteQueueWithContext(ctx, &servicesqs.DeleteQueueInput{\n\t\tQueueUrl: lo.ToPtr(queueURL),\n\t}); err != nil {\n\t\treturn fmt.Errorf(\"deleting servicesqs queue, %w\", err)\n\t}\n\treturn nil\n}\n\nfunc (p *providerSet) provisionMessages(ctx context.Context, messages ...any) error {\n\terrs := make([]error, len(messages))\n\tworkqueue.ParallelizeUntil(ctx, 20, len(messages), func(i int) {\n\t\t_, err := p.sqsProvider.SendMessage(ctx, messages[i])\n\t\terrs[i] = err\n\t})\n\treturn multierr.Combine(errs...)\n}\n\nfunc (p *providerSet) monitorMessagesProcessed(ctx context.Context, eventRecorder *coretest.EventRecorder, expectedProcessed int) <-chan struct{} {\n\tdone := make(chan struct{})\n\ttotalProcessed := 0\n\tgo func() {\n\t\tfor totalProcessed < expectedProcessed {\n\t\t\ttotalProcessed = eventRecorder.Calls(events.Stopping(coretest.Node(), coretest.NodeClaim())[0].Reason) +\n\t\t\t\teventRecorder.Calls(events.Stopping(coretest.Node(), coretest.NodeClaim())[0].Reason) +\n\t\t\t\teventRecorder.Calls(events.Unhealthy(coretest.Node(), coretest.NodeClaim())[0].Reason) +\n\t\t\t\teventRecorder.Calls(events.RebalanceRecommendation(coretest.Node(), coretest.NodeClaim())[0].Reason) +\n\t\t\t\teventRecorder.Calls(events.SpotInterrupted(coretest.Node(), coretest.NodeClaim())[0].Reason)\n\t\t\tlog.FromContext(ctx).WithValues(\"processed-message-count\", totalProcessed).Info(\"processed messages from the queue\")\n\t\t\ttime.Sleep(time.Second)\n\t\t}\n\t\tclose(done)\n\t}()\n\treturn done\n}\n\nfunc provisionNodes(ctx context.Context, kubeClient client.Client, nodes []*corev1.Node) error {\n\terrs := make([]error, len(nodes))\n\tworkqueue.ParallelizeUntil(ctx, 20, len(nodes), func(i int) {\n\t\tif err := retry.Do(func() error {\n\t\t\treturn kubeClient.Create(ctx, nodes[i])\n\t\t}); err != nil {\n\t\t\terrs[i] = fmt.Errorf(\"provisioning node, %w\", err)\n\t\t}\n\t})\n\treturn multierr.Combine(errs...)\n}\n\nfunc makeDiverseMessagesAndNodes(count int) ([]any, []*corev1.Node) {\n\tvar messages []any\n\tvar nodes []*corev1.Node\n\n\tnewMessages, newNodes := makeScheduledChangeMessagesAndNodes(count / 3)\n\tmessages = append(messages, newMessages...)\n\tnodes = append(nodes, newNodes...)\n\n\tnewMessages, newNodes = makeSpotInterruptionMessagesAndNodes(count / 3)\n\tmessages = append(messages, newMessages...)\n\tnodes = append(nodes, newNodes...)\n\n\tnewMessages, newNodes = makeStateChangeMessagesAndNodes(count-len(messages), []string{\n\t\t\"stopping\", \"stopped\", \"shutting-down\", \"terminated\",\n\t})\n\tmessages = append(messages, newMessages...)\n\tnodes = append(nodes, newNodes...)\n\n\treturn messages, nodes\n}\n\nfunc makeScheduledChangeMessagesAndNodes(count int) ([]any, []*corev1.Node) {\n\tvar msgs []any\n\tvar nodes []*corev1.Node\n\tfor i := 0; i < count; i++ {\n\t\tinstanceID := fake.InstanceID()\n\t\tmsgs = append(msgs, scheduledChangeMessage(instanceID))\n\t\tnodes = append(nodes, coretest.Node(coretest.NodeOptions{\n\t\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\t\tLabels: map[string]string{\n\t\t\t\t\tkarpv1.NodePoolLabelKey: \"default\",\n\t\t\t\t},\n\t\t\t},\n\t\t\tProviderID: fake.ProviderID(instanceID),\n\t\t}))\n\t}\n\treturn msgs, nodes\n}\n\nfunc makeStateChangeMessagesAndNodes(count int, states []string) ([]any, []*corev1.Node) {\n\tvar msgs []any\n\tvar nodes []*corev1.Node\n\tfor i := 0; i < count; i++ {\n\t\tstate := states[r.Intn(len(states))]\n\t\tinstanceID := fake.InstanceID()\n\t\tmsgs = append(msgs, stateChangeMessage(instanceID, state))\n\t\tnodes = append(nodes, coretest.Node(coretest.NodeOptions{\n\t\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\t\tLabels: map[string]string{\n\t\t\t\t\tkarpv1.NodePoolLabelKey: \"default\",\n\t\t\t\t},\n\t\t\t},\n\t\t\tProviderID: fake.ProviderID(instanceID),\n\t\t}))\n\t}\n\treturn msgs, nodes\n}\n\nfunc makeSpotInterruptionMessagesAndNodes(count int) ([]any, []*corev1.Node) {\n\tvar msgs []any\n\tvar nodes []*corev1.Node\n\tfor i := 0; i < count; i++ {\n\t\tinstanceID := fake.InstanceID()\n\t\tmsgs = append(msgs, spotInterruptionMessage(instanceID))\n\t\tnodes = append(nodes, coretest.Node(coretest.NodeOptions{\n\t\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\t\tLabels: map[string]string{\n\t\t\t\t\tkarpv1.NodePoolLabelKey: \"default\",\n\t\t\t\t},\n\t\t\t},\n\t\t\tProviderID: fake.ProviderID(instanceID),\n\t\t}))\n\t}\n\treturn msgs, nodes\n}\n"
  },
  {
    "path": "pkg/controllers/interruption/messages/capacityreservationinterruption/model.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage capacityreservationinterruption\n\nimport (\n\t\"github.com/aws/karpenter-provider-aws/pkg/controllers/interruption/messages\"\n)\n\n// Message contains the properties defined in AWS EventBridge schema\n// aws.ec2@EC2CapacityReservationInstanceInterruptionWarning v0.\ntype Message struct {\n\tmessages.Metadata\n\n\tDetail Detail `json:\"detail\"`\n}\n\ntype Detail struct {\n\tInstanceID     string `json:\"instance-id\"`\n\tInstanceAction string `json:\"instance-action\"`\n}\n\nfunc (m Message) EC2InstanceIDs() []string {\n\treturn []string{m.Detail.InstanceID}\n}\n\nfunc (Message) Kind() messages.Kind {\n\treturn messages.CapacityReservationInterruptionKind\n}\n"
  },
  {
    "path": "pkg/controllers/interruption/messages/capacityreservationinterruption/parser.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage capacityreservationinterruption\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\n\t\"github.com/aws/karpenter-provider-aws/pkg/controllers/interruption/messages\"\n)\n\ntype Parser struct{}\n\nfunc (p Parser) Parse(raw string) (messages.Message, error) {\n\tmsg := Message{}\n\tif err := json.Unmarshal([]byte(raw), &msg); err != nil {\n\t\treturn nil, fmt.Errorf(\"unmarhsalling the message as EC2CapacityReservationInterruptionWarning, %w\", err)\n\t}\n\treturn msg, nil\n}\n\nfunc (p Parser) Version() string {\n\treturn \"0\"\n}\n\nfunc (p Parser) Source() string {\n\treturn \"aws.ec2\"\n}\n\nfunc (p Parser) DetailType() string {\n\treturn \"EC2 Capacity Reservation Instance Interruption Warning\"\n}\n"
  },
  {
    "path": "pkg/controllers/interruption/messages/noop/model.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage noop\n\nimport (\n\t\"github.com/aws/karpenter-provider-aws/pkg/controllers/interruption/messages\"\n)\n\ntype Message struct {\n\tmessages.Metadata\n}\n\nfunc (Message) EC2InstanceIDs() []string {\n\treturn []string{}\n}\n\nfunc (Message) Kind() messages.Kind {\n\treturn messages.NoOpKind\n}\n"
  },
  {
    "path": "pkg/controllers/interruption/messages/rebalancerecommendation/model.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage rebalancerecommendation\n\nimport (\n\t\"github.com/aws/karpenter-provider-aws/pkg/controllers/interruption/messages\"\n)\n\n// Message contains the properties defined by\n// https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/rebalance-recommendations.html#monitor-rebalance-recommendations\ntype Message struct {\n\tmessages.Metadata\n\n\tDetail Detail `json:\"detail\"`\n}\n\ntype Detail struct {\n\tInstanceID string `json:\"instance-id\"`\n}\n\nfunc (m Message) EC2InstanceIDs() []string {\n\treturn []string{m.Detail.InstanceID}\n}\n\nfunc (Message) Kind() messages.Kind {\n\treturn messages.RebalanceRecommendationKind\n}\n"
  },
  {
    "path": "pkg/controllers/interruption/messages/rebalancerecommendation/parser.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage rebalancerecommendation\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\n\t\"github.com/aws/karpenter-provider-aws/pkg/controllers/interruption/messages\"\n)\n\ntype Parser struct{}\n\nfunc (p Parser) Parse(raw string) (messages.Message, error) {\n\tmsg := Message{}\n\tif err := json.Unmarshal([]byte(raw), &msg); err != nil {\n\t\treturn nil, fmt.Errorf(\"unmarhsalling the message as EC2InstanceRebalanceRecommendation, %w\", err)\n\t}\n\treturn msg, nil\n}\n\nfunc (p Parser) Version() string {\n\treturn \"0\"\n}\n\nfunc (p Parser) Source() string {\n\treturn \"aws.ec2\"\n}\n\nfunc (p Parser) DetailType() string {\n\treturn \"EC2 Instance Rebalance Recommendation\"\n}\n"
  },
  {
    "path": "pkg/controllers/interruption/messages/scheduledchange/model.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage scheduledchange\n\nimport (\n\t\"github.com/aws/karpenter-provider-aws/pkg/controllers/interruption/messages\"\n)\n\n// Message contains the properties defined in AWS EventBridge schema\n// aws.health@AWSHealthEvent v0.\ntype Message struct {\n\tmessages.Metadata\n\n\tDetail Detail `json:\"detail\"`\n}\n\nfunc (m Message) EC2InstanceIDs() []string {\n\tids := make([]string, len(m.Detail.AffectedEntities))\n\tfor i, entity := range m.Detail.AffectedEntities {\n\t\tids[i] = entity.EntityValue\n\t}\n\treturn ids\n}\n\nfunc (Message) Kind() messages.Kind {\n\treturn messages.ScheduledChangeKind\n}\n\ntype Detail struct {\n\tEventARN          string             `json:\"eventArn\"`\n\tEventTypeCode     string             `json:\"eventTypeCode\"`\n\tService           string             `json:\"service\"`\n\tEventDescription  []EventDescription `json:\"eventDescription\"`\n\tStartTime         string             `json:\"startTime\"`\n\tEndTime           string             `json:\"endTime\"`\n\tEventTypeCategory string             `json:\"eventTypeCategory\"`\n\tAffectedEntities  []AffectedEntity   `json:\"affectedEntities\"`\n}\n\ntype EventDescription struct {\n\tLatestDescription string `json:\"latestDescription\"`\n\tLanguage          string `json:\"language\"`\n}\n\ntype AffectedEntity struct {\n\tEntityValue string `json:\"entityValue\"`\n}\n"
  },
  {
    "path": "pkg/controllers/interruption/messages/scheduledchange/parser.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage scheduledchange\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\n\t\"github.com/aws/karpenter-provider-aws/pkg/controllers/interruption/messages\"\n)\n\nconst (\n\tacceptedService           = \"EC2\"\n\tacceptedEventTypeCategory = \"scheduledChange\"\n)\n\ntype Parser struct{}\n\nfunc (p Parser) Parse(raw string) (messages.Message, error) {\n\tmsg := Message{}\n\tif err := json.Unmarshal([]byte(raw), &msg); err != nil {\n\t\treturn nil, fmt.Errorf(\"unmarhsalling the message as AWSHealthEvent, %w\", err)\n\t}\n\n\t// We ignore services and event categories that we don't watch\n\tif msg.Detail.Service != acceptedService ||\n\t\tmsg.Detail.EventTypeCategory != acceptedEventTypeCategory {\n\t\treturn nil, nil\n\t}\n\treturn msg, nil\n}\n\nfunc (p Parser) Version() string {\n\treturn \"0\"\n}\n\nfunc (p Parser) Source() string {\n\treturn \"aws.health\"\n}\n\nfunc (p Parser) DetailType() string {\n\treturn \"AWS Health Event\"\n}\n"
  },
  {
    "path": "pkg/controllers/interruption/messages/spotinterruption/model.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage spotinterruption\n\nimport (\n\t\"github.com/aws/karpenter-provider-aws/pkg/controllers/interruption/messages\"\n)\n\n// Message contains the properties defined in AWS EventBridge schema\n// aws.ec2@EC2SpotInstanceInterruptionWarning v0.\ntype Message struct {\n\tmessages.Metadata\n\n\tDetail Detail `json:\"detail\"`\n}\n\ntype Detail struct {\n\tInstanceID     string `json:\"instance-id\"`\n\tInstanceAction string `json:\"instance-action\"`\n}\n\nfunc (m Message) EC2InstanceIDs() []string {\n\treturn []string{m.Detail.InstanceID}\n}\n\nfunc (Message) Kind() messages.Kind {\n\treturn messages.SpotInterruptionKind\n}\n"
  },
  {
    "path": "pkg/controllers/interruption/messages/spotinterruption/parser.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage spotinterruption\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\n\t\"github.com/aws/karpenter-provider-aws/pkg/controllers/interruption/messages\"\n)\n\ntype Parser struct{}\n\nfunc (p Parser) Parse(raw string) (messages.Message, error) {\n\tmsg := Message{}\n\tif err := json.Unmarshal([]byte(raw), &msg); err != nil {\n\t\treturn nil, fmt.Errorf(\"unmarhsalling the message as EC2SpotInstanceInterruptionWarning, %w\", err)\n\t}\n\treturn msg, nil\n}\n\nfunc (p Parser) Version() string {\n\treturn \"0\"\n}\n\nfunc (p Parser) Source() string {\n\treturn \"aws.ec2\"\n}\n\nfunc (p Parser) DetailType() string {\n\treturn \"EC2 Spot Instance Interruption Warning\"\n}\n"
  },
  {
    "path": "pkg/controllers/interruption/messages/statechange/model.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage statechange\n\nimport (\n\t\"github.com/samber/lo\"\n\n\t\"github.com/aws/karpenter-provider-aws/pkg/controllers/interruption/messages\"\n)\n\n// Message contains the properties defined in AWS EventBridge schema\n// aws.ec2@EC2InstanceStateChangeNotification v1.\ntype Message struct {\n\tmessages.Metadata\n\n\tDetail Detail `json:\"detail\"`\n}\n\ntype Detail struct {\n\tInstanceID string `json:\"instance-id\"`\n\tState      string `json:\"state\"`\n}\n\nfunc (m Message) EC2InstanceIDs() []string {\n\treturn []string{m.Detail.InstanceID}\n}\n\nfunc (m Message) Kind() messages.Kind {\n\tif lo.Contains([]string{\"stopping\", \"stopped\"}, m.Detail.State) {\n\t\treturn messages.InstanceStoppedKind\n\t}\n\treturn messages.InstanceTerminatedKind\n}\n"
  },
  {
    "path": "pkg/controllers/interruption/messages/statechange/parser.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage statechange\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"strings\"\n\n\t\"k8s.io/apimachinery/pkg/util/sets\"\n\n\t\"github.com/aws/karpenter-provider-aws/pkg/controllers/interruption/messages\"\n)\n\nvar acceptedStates = sets.NewString(\"stopping\", \"stopped\", \"shutting-down\", \"terminated\")\n\ntype Parser struct{}\n\nfunc (p Parser) Parse(raw string) (messages.Message, error) {\n\tmsg := Message{}\n\tif err := json.Unmarshal([]byte(raw), &msg); err != nil {\n\t\treturn nil, fmt.Errorf(\"unmarhsalling the message as EC2InstanceStateChangeNotification, %w\", err)\n\t}\n\n\t// We ignore states that are not in the set of states we can react to\n\tif !acceptedStates.Has(strings.ToLower(msg.Detail.State)) {\n\t\treturn nil, nil\n\t}\n\treturn msg, nil\n}\n\nfunc (p Parser) Version() string {\n\treturn \"0\"\n}\n\nfunc (p Parser) Source() string {\n\treturn \"aws.ec2\"\n}\n\nfunc (p Parser) DetailType() string {\n\treturn \"EC2 Instance State-change Notification\"\n}\n"
  },
  {
    "path": "pkg/controllers/interruption/messages/types.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage messages\n\nimport (\n\t\"time\"\n)\n\ntype Parser interface {\n\tParse(string) (Message, error)\n\n\tVersion() string\n\tSource() string\n\tDetailType() string\n}\n\ntype Message interface {\n\tEC2InstanceIDs() []string\n\tKind() Kind\n\tStartTime() time.Time\n}\n\ntype Kind string\n\nconst (\n\tRebalanceRecommendationKind         Kind = \"rebalance_recommendation\"\n\tScheduledChangeKind                 Kind = \"scheduled_change\"\n\tSpotInterruptionKind                Kind = \"spot_interrupted\"\n\tInstanceStoppedKind                 Kind = \"instance_stopped\"\n\tInstanceTerminatedKind              Kind = \"instance_terminated\"\n\tCapacityReservationInterruptionKind Kind = \"capacity_reservation_interrupted\"\n\tNoOpKind                            Kind = \"no_op\"\n)\n\ntype Metadata struct {\n\tAccount    string    `json:\"account\"`\n\tDetailType string    `json:\"detail-type\"`\n\tID         string    `json:\"id\"`\n\tRegion     string    `json:\"region\"`\n\tResources  []string  `json:\"resources\"`\n\tSource     string    `json:\"source\"`\n\tTime       time.Time `json:\"time\"`\n\tVersion    string    `json:\"version\"`\n}\n\nfunc (m Metadata) StartTime() time.Time {\n\treturn m.Time\n}\n"
  },
  {
    "path": "pkg/controllers/interruption/metrics.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage interruption\n\nimport (\n\topmetrics \"github.com/awslabs/operatorpkg/metrics\"\n\t\"github.com/prometheus/client_golang/prometheus\"\n\tcrmetrics \"sigs.k8s.io/controller-runtime/pkg/metrics\"\n\n\t\"sigs.k8s.io/karpenter/pkg/metrics\"\n)\n\nconst (\n\tinterruptionSubsystem = \"interruption\"\n\tmessageTypeLabel      = \"message_type\"\n)\n\nvar (\n\tReceivedMessages = opmetrics.NewPrometheusCounter(\n\t\tcrmetrics.Registry,\n\t\tprometheus.CounterOpts{\n\t\t\tNamespace: metrics.Namespace,\n\t\t\tSubsystem: interruptionSubsystem,\n\t\t\tName:      \"received_messages_total\",\n\t\t\tHelp:      \"Count of messages received from the SQS queue. Broken down by message type and whether the message was actionable.\",\n\t\t},\n\t\t[]string{messageTypeLabel},\n\t)\n\tDeletedMessages = opmetrics.NewPrometheusCounter(\n\t\tcrmetrics.Registry,\n\t\tprometheus.CounterOpts{\n\t\t\tNamespace: metrics.Namespace,\n\t\t\tSubsystem: interruptionSubsystem,\n\t\t\tName:      \"deleted_messages_total\",\n\t\t\tHelp:      \"Count of messages deleted from the SQS queue.\",\n\t\t},\n\t\t[]string{},\n\t)\n\tMessageLatency = opmetrics.NewPrometheusHistogram(\n\t\tcrmetrics.Registry,\n\t\tprometheus.HistogramOpts{\n\t\t\tNamespace: metrics.Namespace,\n\t\t\tSubsystem: interruptionSubsystem,\n\t\t\tName:      \"message_queue_duration_seconds\",\n\t\t\tHelp:      \"Amount of time an interruption message is on the queue before it is processed by karpenter.\",\n\t\t\tBuckets:   metrics.DurationBuckets(),\n\t\t},\n\t\t[]string{},\n\t)\n)\n"
  },
  {
    "path": "pkg/controllers/interruption/parser.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage interruption\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\n\t\"github.com/samber/lo\"\n\n\t\"github.com/aws/karpenter-provider-aws/pkg/controllers/interruption/messages\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/controllers/interruption/messages/capacityreservationinterruption\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/controllers/interruption/messages/noop\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/controllers/interruption/messages/rebalancerecommendation\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/controllers/interruption/messages/scheduledchange\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/controllers/interruption/messages/spotinterruption\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/controllers/interruption/messages/statechange\"\n)\n\ntype parserKey struct {\n\tVersion    string\n\tSource     string\n\tDetailType string\n}\n\nfunc newParserKey(metadata messages.Metadata) parserKey {\n\treturn parserKey{\n\t\tVersion:    metadata.Version,\n\t\tSource:     metadata.Source,\n\t\tDetailType: metadata.DetailType,\n\t}\n}\n\nfunc newParserKeyFromParser(p messages.Parser) parserKey {\n\treturn parserKey{\n\t\tVersion:    p.Version(),\n\t\tSource:     p.Source(),\n\t\tDetailType: p.DetailType(),\n\t}\n}\n\nvar (\n\tDefaultParsers = []messages.Parser{\n\t\tstatechange.Parser{},\n\t\tspotinterruption.Parser{},\n\t\tscheduledchange.Parser{},\n\t\trebalancerecommendation.Parser{},\n\t\tcapacityreservationinterruption.Parser{},\n\t}\n)\n\ntype EventParser struct {\n\tparserMap map[parserKey]messages.Parser\n}\n\nfunc NewEventParser(parsers ...messages.Parser) *EventParser {\n\treturn &EventParser{\n\t\tparserMap: lo.SliceToMap(parsers, func(p messages.Parser) (parserKey, messages.Parser) {\n\t\t\treturn newParserKeyFromParser(p), p\n\t\t}),\n\t}\n}\n\nfunc (p EventParser) Parse(msg string) (messages.Message, error) {\n\tif msg == \"\" {\n\t\treturn noop.Message{}, nil\n\t}\n\tmd := messages.Metadata{}\n\tif err := json.Unmarshal([]byte(msg), &md); err != nil {\n\t\treturn noop.Message{}, fmt.Errorf(\"unmarshalling the message as Metadata, %w\", err)\n\t}\n\tif parser, ok := p.parserMap[newParserKey(md)]; ok {\n\t\tevt, err := parser.Parse(msg)\n\t\tif err != nil {\n\t\t\treturn noop.Message{}, fmt.Errorf(\"parsing event message, %w\", err)\n\t\t}\n\t\tif evt == nil {\n\t\t\treturn noop.Message{}, nil\n\t\t}\n\t\treturn evt, nil\n\t}\n\treturn noop.Message{Metadata: md}, nil\n}\n"
  },
  {
    "path": "pkg/controllers/interruption/suite_test.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage interruption_test\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"testing\"\n\t\"time\"\n\n\t\"sigs.k8s.io/karpenter/pkg/metrics\"\n\n\t\"github.com/aws/aws-sdk-go-v2/aws\"\n\tservicesqs \"github.com/aws/aws-sdk-go-v2/service/sqs\"\n\tsqstypes \"github.com/aws/aws-sdk-go-v2/service/sqs/types\"\n\t\"github.com/aws/smithy-go\"\n\t\"github.com/samber/lo\"\n\tcorev1 \"k8s.io/api/core/v1\"\n\tmetav1 \"k8s.io/apimachinery/pkg/apis/meta/v1\"\n\t\"k8s.io/apimachinery/pkg/util/uuid\"\n\t\"k8s.io/client-go/tools/record\"\n\tclock \"k8s.io/utils/clock/testing\"\n\t\"sigs.k8s.io/controller-runtime/pkg/client\"\n\n\tkarpv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n\t\"sigs.k8s.io/karpenter/pkg/events\"\n\tcoreoptions \"sigs.k8s.io/karpenter/pkg/operator/options\"\n\tcoretest \"sigs.k8s.io/karpenter/pkg/test\"\n\n\t\"github.com/aws/karpenter-provider-aws/pkg/apis\"\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\tawscache \"github.com/aws/karpenter-provider-aws/pkg/cache\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/cloudprovider\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/controllers/interruption\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/controllers/interruption/messages\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/controllers/interruption/messages/capacityreservationinterruption\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/controllers/interruption/messages/scheduledchange\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/controllers/interruption/messages/spotinterruption\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/controllers/interruption/messages/statechange\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/fake\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/operator/options\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/sqs\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/test\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/utils\"\n\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n\t. \"sigs.k8s.io/karpenter/pkg/test/expectations\"\n\t\"sigs.k8s.io/karpenter/pkg/test/v1alpha1\"\n\t. \"sigs.k8s.io/karpenter/pkg/utils/testing\"\n)\n\nconst (\n\tdefaultAccountID = \"000000000000\"\n\tec2Source        = \"aws.ec2\"\n\thealthSource     = \"aws.health\"\n)\n\nvar ctx context.Context\nvar awsEnv *test.Environment\nvar env *coretest.Environment\nvar sqsapi *fake.SQSAPI\nvar sqsProvider *sqs.DefaultProvider\nvar unavailableOfferingsCache *awscache.UnavailableOfferings\nvar fakeClock *clock.FakeClock\nvar controller *interruption.Controller\n\nfunc TestAPIs(t *testing.T) {\n\tctx = TestContextWithLogger(t)\n\tRegisterFailHandler(Fail)\n\tRunSpecs(t, \"AWSInterruption\")\n}\n\nvar _ = BeforeSuite(func() {\n\tctx = options.ToContext(ctx, test.Options())\n\tenv = coretest.NewEnvironment(coretest.WithCRDs(apis.CRDs...), coretest.WithCRDs(v1alpha1.CRDs...), coretest.WithFieldIndexers(test.NodeInstanceIDFieldIndexer(ctx), test.NodeClaimInstanceIDFieldIndexer(ctx)))\n\tawsEnv = test.NewEnvironment(ctx, env)\n\tfakeClock = &clock.FakeClock{}\n\tunavailableOfferingsCache = awscache.NewUnavailableOfferings()\n\tsqsapi = &fake.SQSAPI{}\n\tsqsProvider = lo.Must(sqs.NewDefaultProvider(sqsapi, fmt.Sprintf(\"https://sqs.%s.amazonaws.com/%s/test-cluster\", fake.DefaultRegion, fake.DefaultAccount)))\n\tcloudProvider := cloudprovider.New(awsEnv.InstanceTypesProvider, awsEnv.InstanceProvider, events.NewRecorder(&record.FakeRecorder{}),\n\t\tenv.Client, awsEnv.AMIProvider, awsEnv.SecurityGroupProvider, awsEnv.CapacityReservationProvider, awsEnv.InstanceTypeStore)\n\tcontroller = interruption.NewController(env.Client, cloudProvider, fakeClock, events.NewRecorder(&record.FakeRecorder{}), sqsProvider, servicesqs.NewFromConfig(aws.Config{}), unavailableOfferingsCache, awsEnv.CapacityReservationProvider)\n})\n\nvar _ = AfterSuite(func() {\n\tExpect(env.Stop()).To(Succeed(), \"Failed to stop environment\")\n})\n\nvar _ = BeforeEach(func() {\n\tctx = coreoptions.ToContext(ctx, coretest.Options(coretest.OptionsFields{FeatureGates: coretest.FeatureGates{ReservedCapacity: lo.ToPtr(true)}}))\n\tunavailableOfferingsCache.Flush()\n\tsqsapi.Reset()\n})\n\nvar _ = AfterEach(func() {\n\tExpectCleanedUp(ctx, env.Client)\n})\n\nvar _ = Describe(\"InterruptionHandling\", func() {\n\tvar node *corev1.Node\n\tvar nodeClaim *karpv1.NodeClaim\n\tBeforeEach(func() {\n\t\tnodeClaim, node = coretest.NodeClaimAndNode(karpv1.NodeClaim{\n\t\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\t\tLabels: map[string]string{\n\t\t\t\t\tkarpv1.NodePoolLabelKey: \"default\",\n\t\t\t\t},\n\t\t\t},\n\t\t\tStatus: karpv1.NodeClaimStatus{\n\t\t\t\tProviderID: fake.RandomProviderID(),\n\t\t\t},\n\t\t})\n\t\tmetrics.NodeClaimsDisruptedTotal.Reset()\n\t})\n\tContext(\"Processing Messages\", func() {\n\t\tIt(\"should delete the NodeClaim when receiving a spot interruption warning\", func() {\n\t\t\tExpectMessagesCreated(spotInterruptionMessage(lo.Must(utils.ParseInstanceID(nodeClaim.Status.ProviderID))))\n\t\t\tExpectApplied(ctx, env.Client, nodeClaim, node)\n\n\t\t\tExpectSingletonReconciled(ctx, controller)\n\t\t\tExpectMetricCounterValue(metrics.NodeClaimsDisruptedTotal, 1, map[string]string{\n\t\t\t\tmetrics.ReasonLabel: \"spot_interrupted\",\n\t\t\t\t\"nodepool\":          \"default\",\n\t\t\t})\n\t\t\tExpect(sqsapi.ReceiveMessageBehavior.SuccessfulCalls()).To(Equal(1))\n\t\t\tExpectNotFound(ctx, env.Client, nodeClaim)\n\t\t\tExpect(sqsapi.DeleteMessageBehavior.SuccessfulCalls()).To(Equal(1))\n\t\t})\n\t\tIt(\"should delete the NodeClaim when receiving a capacity reservation interruption warning\", func() {\n\t\t\tnodeClaim, node = coretest.NodeClaimAndNode(karpv1.NodeClaim{\n\t\t\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\t\t\tLabels: map[string]string{\n\t\t\t\t\t\tkarpv1.NodePoolLabelKey:         \"default\",\n\t\t\t\t\t\tv1.LabelCapacityReservationID:   \"cr-56fac701cc1951b03\",\n\t\t\t\t\t\tv1.LabelCapacityReservationType: \"default\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tStatus: karpv1.NodeClaimStatus{\n\t\t\t\t\tProviderID: fake.RandomProviderID(),\n\t\t\t\t},\n\t\t\t})\n\t\t\tExpectMessagesCreated(capacityReservationInterruptionMessage(lo.Must(utils.ParseInstanceID(nodeClaim.Status.ProviderID))))\n\t\t\tExpectApplied(ctx, env.Client, nodeClaim, node)\n\n\t\t\tExpectSingletonReconciled(ctx, controller)\n\t\t\tExpectMetricCounterValue(metrics.NodeClaimsDisruptedTotal, 1, map[string]string{\n\t\t\t\tmetrics.ReasonLabel: \"capacity_reservation_interrupted\",\n\t\t\t\t\"nodepool\":          \"default\",\n\t\t\t})\n\t\t\tExpect(sqsapi.ReceiveMessageBehavior.SuccessfulCalls()).To(Equal(1))\n\t\t\tExpectNotFound(ctx, env.Client, nodeClaim)\n\t\t\tExpect(sqsapi.DeleteMessageBehavior.SuccessfulCalls()).To(Equal(1))\n\t\t})\n\t\tIt(\"should delete the NodeClaim when receiving a scheduled change message\", func() {\n\t\t\tExpectMessagesCreated(scheduledChangeMessage(lo.Must(utils.ParseInstanceID(nodeClaim.Status.ProviderID))))\n\t\t\tExpectApplied(ctx, env.Client, nodeClaim, node)\n\n\t\t\tExpectSingletonReconciled(ctx, controller)\n\t\t\tExpectMetricCounterValue(metrics.NodeClaimsDisruptedTotal, 1, map[string]string{\n\t\t\t\tmetrics.ReasonLabel: \"scheduled_change\",\n\t\t\t\t\"nodepool\":          \"default\",\n\t\t\t})\n\t\t\tExpect(sqsapi.ReceiveMessageBehavior.SuccessfulCalls()).To(Equal(1))\n\t\t\tExpectNotFound(ctx, env.Client, nodeClaim)\n\t\t\tExpect(sqsapi.DeleteMessageBehavior.SuccessfulCalls()).To(Equal(1))\n\t\t})\n\t\tIt(\"should delete the NodeClaim when receiving a state change message\", func() {\n\t\t\tvar nodeClaims []*karpv1.NodeClaim\n\t\t\tvar messages []any\n\t\t\tfor _, state := range []string{\"terminated\", \"stopped\", \"stopping\", \"shutting-down\"} {\n\t\t\t\tinstanceID := fake.InstanceID()\n\t\t\t\tnc, n := coretest.NodeClaimAndNode(karpv1.NodeClaim{\n\t\t\t\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\t\t\t\tLabels: map[string]string{\n\t\t\t\t\t\t\tkarpv1.NodePoolLabelKey: \"default\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tStatus: karpv1.NodeClaimStatus{\n\t\t\t\t\t\tProviderID: fake.ProviderID(instanceID),\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t\tExpectApplied(ctx, env.Client, nc, n)\n\t\t\t\tnodeClaims = append(nodeClaims, nc)\n\t\t\t\tmessages = append(messages, stateChangeMessage(instanceID, state))\n\t\t\t}\n\t\t\tExpectMessagesCreated(messages...)\n\t\t\tExpectSingletonReconciled(ctx, controller)\n\t\t\tExpectMetricCounterValue(metrics.NodeClaimsDisruptedTotal, 2, map[string]string{\n\t\t\t\tmetrics.ReasonLabel: \"instance_terminated\",\n\t\t\t\t\"nodepool\":          \"default\",\n\t\t\t})\n\t\t\tExpectMetricCounterValue(metrics.NodeClaimsDisruptedTotal, 2, map[string]string{\n\t\t\t\tmetrics.ReasonLabel: \"instance_stopped\",\n\t\t\t\t\"nodepool\":          \"default\",\n\t\t\t})\n\t\t\tExpect(sqsapi.ReceiveMessageBehavior.SuccessfulCalls()).To(Equal(1))\n\t\t\tExpectNotFound(ctx, env.Client, lo.Map(nodeClaims, func(nc *karpv1.NodeClaim, _ int) client.Object { return nc })...)\n\t\t\tExpect(sqsapi.DeleteMessageBehavior.SuccessfulCalls()).To(Equal(4))\n\t\t})\n\t\tDescribeTable(\"should handle multiple messages that cause nodeClaim deletion\",\n\t\t\tfunc(messageBuilder func(string) any) {\n\t\t\t\tvar nodeClaims []*karpv1.NodeClaim\n\t\t\t\tvar instanceIDs []string\n\t\t\t\tfor i := 0; i < 100; i++ {\n\t\t\t\t\tinstanceID := fake.InstanceID()\n\t\t\t\t\tnc, n := coretest.NodeClaimAndNode(karpv1.NodeClaim{\n\t\t\t\t\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\t\t\t\t\tLabels: map[string]string{\n\t\t\t\t\t\t\t\tkarpv1.NodePoolLabelKey: \"default\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tStatus: karpv1.NodeClaimStatus{\n\t\t\t\t\t\t\tProviderID: fake.ProviderID(instanceID),\n\t\t\t\t\t\t},\n\t\t\t\t\t})\n\t\t\t\t\tExpectApplied(ctx, env.Client, nc, n)\n\t\t\t\t\tinstanceIDs = append(instanceIDs, instanceID)\n\t\t\t\t\tnodeClaims = append(nodeClaims, nc)\n\t\t\t\t}\n\n\t\t\t\tvar messages []any\n\t\t\t\tfor _, id := range instanceIDs {\n\t\t\t\t\tmessages = append(messages, messageBuilder(id))\n\t\t\t\t}\n\t\t\t\tExpectMessagesCreated(messages...)\n\t\t\t\tExpectSingletonReconciled(ctx, controller)\n\t\t\t\tExpect(sqsapi.ReceiveMessageBehavior.SuccessfulCalls()).To(Equal(1))\n\t\t\t\tExpectNotFound(ctx, env.Client, lo.Map(nodeClaims, func(nc *karpv1.NodeClaim, _ int) client.Object { return nc })...)\n\t\t\t\tExpect(sqsapi.DeleteMessageBehavior.SuccessfulCalls()).To(Equal(100))\n\t\t\t},\n\t\t\tEntry(\"with spot interruption messages\", func(id string) any { return spotInterruptionMessage(id) }),\n\t\t\tEntry(\"with capacity reservation interruption messages\", func(id string) any { return capacityReservationInterruptionMessage(id) }),\n\t\t)\n\t\tIt(\"should delete a message when the message can't be parsed\", func() {\n\t\t\tbadMessage := &sqstypes.Message{\n\t\t\t\tBody: aws.String(string(lo.Must(json.Marshal(map[string]string{\n\t\t\t\t\t\"field1\": \"value1\",\n\t\t\t\t\t\"field2\": \"value2\",\n\t\t\t\t})))),\n\t\t\t\tMessageId: aws.String(string(uuid.NewUUID())),\n\t\t\t}\n\n\t\t\tExpectMessagesCreated(badMessage)\n\n\t\t\tExpectSingletonReconciled(ctx, controller)\n\t\t\tExpect(sqsapi.ReceiveMessageBehavior.SuccessfulCalls()).To(Equal(1))\n\t\t\tExpect(sqsapi.DeleteMessageBehavior.SuccessfulCalls()).To(Equal(1))\n\t\t})\n\t\tIt(\"should delete a state change message when the state isn't in accepted states\", func() {\n\t\t\tExpectMessagesCreated(stateChangeMessage(lo.Must(utils.ParseInstanceID(nodeClaim.Status.ProviderID)), \"creating\"))\n\t\t\tExpectApplied(ctx, env.Client, nodeClaim, node)\n\n\t\t\tExpectSingletonReconciled(ctx, controller)\n\t\t\tExpect(sqsapi.ReceiveMessageBehavior.SuccessfulCalls()).To(Equal(1))\n\t\t\tExpectExists(ctx, env.Client, nodeClaim)\n\t\t\tExpect(sqsapi.DeleteMessageBehavior.SuccessfulCalls()).To(Equal(1))\n\t\t})\n\t\tIt(\"should mark the ICE cache for the offering when getting a spot interruption warning\", func() {\n\t\t\tnodeClaim.Labels = lo.Assign(nodeClaim.Labels, map[string]string{\n\t\t\t\tcorev1.LabelTopologyZone:       \"coretest-zone-1a\",\n\t\t\t\tcorev1.LabelInstanceTypeStable: \"t3.large\",\n\t\t\t\tkarpv1.CapacityTypeLabelKey:    karpv1.CapacityTypeSpot,\n\t\t\t})\n\t\t\tExpectMessagesCreated(spotInterruptionMessage(lo.Must(utils.ParseInstanceID(nodeClaim.Status.ProviderID))))\n\t\t\tExpectApplied(ctx, env.Client, nodeClaim, node)\n\n\t\t\tExpectSingletonReconciled(ctx, controller)\n\t\t\tExpect(sqsapi.ReceiveMessageBehavior.SuccessfulCalls()).To(Equal(1))\n\t\t\tExpectNotFound(ctx, env.Client, nodeClaim)\n\t\t\tExpect(sqsapi.DeleteMessageBehavior.SuccessfulCalls()).To(Equal(1))\n\n\t\t\t// Expect a t3.large in coretest-zone-1a to be added to the ICE cache\n\t\t\tExpect(unavailableOfferingsCache.IsUnavailable(\"t3.large\", \"coretest-zone-1a\", karpv1.CapacityTypeSpot)).To(BeTrue())\n\t\t})\n\t\tIt(\"should mark the capacity reservation as unavailable when getting an interruption warning\", func() {\n\t\t\tawsEnv.CapacityReservationProvider.SetAvailableInstanceCount(\"cr-56fac701cc1951b03\", 10)\n\n\t\t\tnodeClaim, node = coretest.NodeClaimAndNode(karpv1.NodeClaim{\n\t\t\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\t\t\tLabels: map[string]string{\n\t\t\t\t\t\tkarpv1.NodePoolLabelKey:         \"default\",\n\t\t\t\t\t\tv1.LabelCapacityReservationID:   \"cr-56fac701cc1951b03\",\n\t\t\t\t\t\tv1.LabelCapacityReservationType: \"default\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tStatus: karpv1.NodeClaimStatus{\n\t\t\t\t\tProviderID: fake.RandomProviderID(),\n\t\t\t\t},\n\t\t\t})\n\t\t\tExpectMessagesCreated(capacityReservationInterruptionMessage(lo.Must(utils.ParseInstanceID(nodeClaim.Status.ProviderID))))\n\t\t\tExpectApplied(ctx, env.Client, nodeClaim, node)\n\n\t\t\tExpectSingletonReconciled(ctx, controller)\n\t\t\tExpect(sqsapi.ReceiveMessageBehavior.SuccessfulCalls()).To(Equal(1))\n\t\t\tExpectNotFound(ctx, env.Client, nodeClaim)\n\t\t\tExpect(sqsapi.DeleteMessageBehavior.SuccessfulCalls()).To(Equal(1))\n\n\t\t\tExpect(awsEnv.CapacityReservationProvider.GetAvailableInstanceCount(\"cr-56fac701cc1951b03\")).To(Equal(0))\n\t\t})\n\t})\n})\n\nvar _ = Describe(\"Error Handling\", func() {\n\tIt(\"should send an error on polling when QueueNotExists\", func() {\n\t\tsqsapi.ReceiveMessageBehavior.Error.Set(smithyErrWithCode(\"QueueDoesNotExist\"), fake.MaxCalls(0))\n\t})\n\tIt(\"should send an error on polling when AccessDenied\", func() {\n\t\tsqsapi.ReceiveMessageBehavior.Error.Set(smithyErrWithCode(\"AccessDenied\"), fake.MaxCalls(0))\n\t\t_ = ExpectSingletonReconcileFailed(ctx, controller)\n\t})\n\tDescribeTable(\"should not return an error when deleting a nodeClaim that is already deleted\",\n\t\tfunc(messageBuilder func(string) any) {\n\t\t\tExpectMessagesCreated(messageBuilder(fake.InstanceID()))\n\t\t\tExpectSingletonReconciled(ctx, controller)\n\t\t},\n\t\tEntry(\"with spot interruption messages\", func(id string) any { return spotInterruptionMessage(id) }),\n\t\tEntry(\"with capacity reservation interruption messages\", func(id string) any { return capacityReservationInterruptionMessage(id) }),\n\t)\n})\n\nfunc ExpectMessagesCreated(messages ...any) {\n\traw := lo.Map(messages, func(m any, _ int) *sqstypes.Message {\n\t\treturn &sqstypes.Message{\n\t\t\tBody:      aws.String(string(lo.Must(json.Marshal(m)))),\n\t\t\tMessageId: aws.String(string(uuid.NewUUID())),\n\t\t}\n\t})\n\tsqsapi.ReceiveMessageBehavior.Output.Set(\n\t\t&servicesqs.ReceiveMessageOutput{\n\t\t\tMessages: lo.FromSlicePtr(raw),\n\t\t},\n\t)\n}\n\nfunc smithyErrWithCode(code string) smithy.APIError {\n\treturn &smithy.GenericAPIError{\n\t\tCode:    code,\n\t\tMessage: \"error\",\n\t}\n}\n\nfunc spotInterruptionMessage(involvedInstanceID string) spotinterruption.Message {\n\treturn spotinterruption.Message{\n\t\tMetadata: messages.Metadata{\n\t\t\tVersion:    \"0\",\n\t\t\tAccount:    defaultAccountID,\n\t\t\tDetailType: \"EC2 Spot Instance Interruption Warning\",\n\t\t\tID:         string(uuid.NewUUID()),\n\t\t\tRegion:     fake.DefaultRegion,\n\t\t\tResources: []string{\n\t\t\t\tfmt.Sprintf(\"arn:aws:ec2:%s:instance/%s\", fake.DefaultRegion, involvedInstanceID),\n\t\t\t},\n\t\t\tSource: ec2Source,\n\t\t\tTime:   time.Now(),\n\t\t},\n\t\tDetail: spotinterruption.Detail{\n\t\t\tInstanceID:     involvedInstanceID,\n\t\t\tInstanceAction: \"terminate\",\n\t\t},\n\t}\n}\n\nfunc capacityReservationInterruptionMessage(involvedInstanceID string) capacityreservationinterruption.Message {\n\treturn capacityreservationinterruption.Message{\n\t\tMetadata: messages.Metadata{\n\t\t\tVersion:    \"0\",\n\t\t\tAccount:    defaultAccountID,\n\t\t\tDetailType: \"EC2 Capacity Reservation Instance Interruption Warning\",\n\t\t\tID:         string(uuid.NewUUID()),\n\t\t\tRegion:     fake.DefaultRegion,\n\t\t\tResources: []string{\n\t\t\t\tfmt.Sprintf(\"arn:aws:ec2:%s:instance/%s\", fake.DefaultRegion, involvedInstanceID),\n\t\t\t},\n\t\t\tSource: ec2Source,\n\t\t\tTime:   time.Now(),\n\t\t},\n\t\tDetail: capacityreservationinterruption.Detail{\n\t\t\tInstanceID:     involvedInstanceID,\n\t\t\tInstanceAction: \"terminate\",\n\t\t},\n\t}\n}\n\nfunc stateChangeMessage(involvedInstanceID, state string) statechange.Message {\n\treturn statechange.Message{\n\t\tMetadata: messages.Metadata{\n\t\t\tVersion:    \"0\",\n\t\t\tAccount:    defaultAccountID,\n\t\t\tDetailType: \"EC2 Instance State-change Notification\",\n\t\t\tID:         string(uuid.NewUUID()),\n\t\t\tRegion:     fake.DefaultRegion,\n\t\t\tResources: []string{\n\t\t\t\tfmt.Sprintf(\"arn:aws:ec2:%s:instance/%s\", fake.DefaultRegion, involvedInstanceID),\n\t\t\t},\n\t\t\tSource: ec2Source,\n\t\t\tTime:   time.Now(),\n\t\t},\n\t\tDetail: statechange.Detail{\n\t\t\tInstanceID: involvedInstanceID,\n\t\t\tState:      state,\n\t\t},\n\t}\n}\n\nfunc scheduledChangeMessage(involvedInstanceID string) scheduledchange.Message {\n\treturn scheduledchange.Message{\n\t\tMetadata: messages.Metadata{\n\t\t\tVersion:    \"0\",\n\t\t\tAccount:    defaultAccountID,\n\t\t\tDetailType: \"AWS Health Event\",\n\t\t\tID:         string(uuid.NewUUID()),\n\t\t\tRegion:     fake.DefaultRegion,\n\t\t\tResources: []string{\n\t\t\t\tfmt.Sprintf(\"arn:aws:ec2:%s:instance/%s\", fake.DefaultRegion, involvedInstanceID),\n\t\t\t},\n\t\t\tSource: healthSource,\n\t\t\tTime:   time.Now(),\n\t\t},\n\t\tDetail: scheduledchange.Detail{\n\t\t\tService:           \"EC2\",\n\t\t\tEventTypeCategory: \"scheduledChange\",\n\t\t\tAffectedEntities: []scheduledchange.AffectedEntity{\n\t\t\t\t{\n\t\t\t\t\tEntityValue: involvedInstanceID,\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n}\n"
  },
  {
    "path": "pkg/controllers/metrics/controller.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage metrics\n\nimport (\n\t\"context\"\n\t\"time\"\n\n\t\"github.com/awslabs/operatorpkg/reconciler\"\n\t\"github.com/awslabs/operatorpkg/singleton\"\n\t\"github.com/samber/lo\"\n\t\"k8s.io/apimachinery/pkg/util/sets\"\n\tcontrollerruntime \"sigs.k8s.io/controller-runtime\"\n\t\"sigs.k8s.io/controller-runtime/pkg/client\"\n\t\"sigs.k8s.io/controller-runtime/pkg/manager\"\n\tkarpv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n\t\"sigs.k8s.io/karpenter/pkg/cloudprovider\"\n\tcoreoptions \"sigs.k8s.io/karpenter/pkg/operator/options\"\n)\n\ntype metricDimensions struct {\n\tinstanceType string\n\tcapacityType string\n\tzone         string\n}\n\ntype Controller struct {\n\tkubeClient    client.Client\n\tcloudProvider cloudprovider.CloudProvider\n}\n\nfunc NewController(kubeClient client.Client, cloudProvider cloudprovider.CloudProvider) *Controller {\n\treturn &Controller{\n\t\tkubeClient:    kubeClient,\n\t\tcloudProvider: cloudProvider,\n\t}\n}\n\n//nolint:gocyclo\nfunc (c *Controller) Reconcile(ctx context.Context) (reconciler.Result, error) {\n\tnodePools := &karpv1.NodePoolList{}\n\tif err := c.kubeClient.List(ctx, nodePools); err != nil {\n\t\treturn reconciler.Result{}, err\n\t}\n\tavailability := map[metricDimensions]bool{}\n\tprice := map[metricDimensions]float64{}\n\tfor _, nodePool := range nodePools.Items {\n\t\tinstanceTypes, err := c.cloudProvider.GetInstanceTypes(ctx, &nodePool)\n\t\tif err != nil {\n\t\t\treturn reconciler.Result{}, err\n\t\t}\n\t\tfor _, instanceType := range instanceTypes {\n\t\t\tzones := sets.New[string]()\n\t\t\tfor _, offering := range instanceType.Offerings {\n\t\t\t\tdimensions := metricDimensions{instanceType: instanceType.Name, capacityType: offering.CapacityType(), zone: offering.Zone()}\n\t\t\t\tavailability[dimensions] = availability[dimensions] || offering.Available\n\t\t\t\tprice[dimensions] = offering.Price\n\t\t\t\tzones.Insert(offering.Zone())\n\t\t\t}\n\t\t\tif coreoptions.FromContext(ctx).FeatureGates.ReservedCapacity {\n\t\t\t\tfor zone := range zones {\n\t\t\t\t\tdimensions := metricDimensions{instanceType: instanceType.Name, capacityType: karpv1.CapacityTypeReserved, zone: zone}\n\t\t\t\t\tif _, ok := availability[dimensions]; !ok {\n\t\t\t\t\t\tavailability[dimensions] = false\n\t\t\t\t\t\tprice[dimensions] = 0\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfor dimensions, available := range availability {\n\t\tInstanceTypeOfferingAvailable.Set(float64(lo.Ternary(available, 1, 0)), map[string]string{\n\t\t\tinstanceTypeLabel: dimensions.instanceType,\n\t\t\tcapacityTypeLabel: dimensions.capacityType,\n\t\t\tzoneLabel:         dimensions.zone,\n\t\t})\n\t}\n\tfor dimensions, p := range price {\n\t\tInstanceTypeOfferingPriceEstimate.Set(p, map[string]string{\n\t\t\tinstanceTypeLabel: dimensions.instanceType,\n\t\t\tcapacityTypeLabel: dimensions.capacityType,\n\t\t\tzoneLabel:         dimensions.zone,\n\t\t})\n\t}\n\treturn reconciler.Result{RequeueAfter: time.Minute}, nil\n}\n\nfunc (c *Controller) Register(_ context.Context, m manager.Manager) error {\n\treturn controllerruntime.NewControllerManagedBy(m).\n\t\tNamed(\"cloudprovider.metrics\").\n\t\tWatchesRawSource(singleton.Source()).\n\t\tComplete(singleton.AsReconciler(c))\n}\n"
  },
  {
    "path": "pkg/controllers/metrics/metrics.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage metrics\n\nimport (\n\topmetrics \"github.com/awslabs/operatorpkg/metrics\"\n\t\"github.com/prometheus/client_golang/prometheus\"\n\tcrmetrics \"sigs.k8s.io/controller-runtime/pkg/metrics\"\n\t\"sigs.k8s.io/karpenter/pkg/metrics\"\n)\n\nconst (\n\tcloudProviderSubsystem = \"cloudprovider\"\n\tinstanceTypeLabel      = \"instance_type\"\n\tcapacityTypeLabel      = \"capacity_type\"\n\tzoneLabel              = \"zone\"\n)\n\nvar (\n\tInstanceTypeOfferingAvailable = opmetrics.NewPrometheusGauge(\n\t\tcrmetrics.Registry,\n\t\tprometheus.GaugeOpts{\n\t\t\tNamespace: metrics.Namespace,\n\t\t\tSubsystem: cloudProviderSubsystem,\n\t\t\tName:      \"instance_type_offering_available\",\n\t\t\tHelp:      \"Instance type offering availability, based on instance type, capacity type, and zone\",\n\t\t},\n\t\t[]string{\n\t\t\tinstanceTypeLabel,\n\t\t\tcapacityTypeLabel,\n\t\t\tzoneLabel,\n\t\t},\n\t)\n\tInstanceTypeOfferingPriceEstimate = opmetrics.NewPrometheusGauge(\n\t\tcrmetrics.Registry,\n\t\tprometheus.GaugeOpts{\n\t\t\tNamespace: metrics.Namespace,\n\t\t\tSubsystem: cloudProviderSubsystem,\n\t\t\tName:      \"instance_type_offering_price_estimate\",\n\t\t\tHelp:      \"Instance type offering estimated hourly price used when making informed decisions on node cost calculation, based on instance type, capacity type, and zone.\",\n\t\t},\n\t\t[]string{\n\t\t\tinstanceTypeLabel,\n\t\t\tcapacityTypeLabel,\n\t\t\tzoneLabel,\n\t\t},\n\t)\n)\n"
  },
  {
    "path": "pkg/controllers/metrics/suite_test.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage metrics_test\n\nimport (\n\t\"context\"\n\t\"testing\"\n\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\t\"github.com/awslabs/operatorpkg/object\"\n\t\"k8s.io/apimachinery/pkg/util/sets\"\n\t\"sigs.k8s.io/karpenter/pkg/test/v1alpha1\"\n\n\t\"github.com/aws/aws-sdk-go-v2/aws\"\n\t\"github.com/awslabs/operatorpkg/status\"\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n\t\"github.com/samber/lo\"\n\tcorev1 \"k8s.io/api/core/v1\"\n\t\"k8s.io/client-go/tools/record\"\n\tkarpv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n\t\"sigs.k8s.io/karpenter/pkg/events\"\n\tcoreoptions \"sigs.k8s.io/karpenter/pkg/operator/options\"\n\tcoretest \"sigs.k8s.io/karpenter/pkg/test\"\n\n\t. \"sigs.k8s.io/karpenter/pkg/test/expectations\"\n\t. \"sigs.k8s.io/karpenter/pkg/utils/testing\"\n\n\t\"github.com/aws/karpenter-provider-aws/pkg/apis\"\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/cloudprovider\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/controllers/metrics\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/controllers/providers/pricing\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/fake\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/operator/options\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/test\"\n)\n\nvar ctx context.Context\nvar env *coretest.Environment\nvar awsEnv *test.Environment\nvar cloudProvider *cloudprovider.CloudProvider\nvar controller *metrics.Controller\nvar pricingController *pricing.Controller\nvar nodeClass *v1.EC2NodeClass\nvar nodePool *karpv1.NodePool\n\nfunc TestAWS(t *testing.T) {\n\tctx = TestContextWithLogger(t)\n\tRegisterFailHandler(Fail)\n\tRunSpecs(t, \"MetricsController\")\n}\n\nvar _ = BeforeSuite(func() {\n\tenv = coretest.NewEnvironment(coretest.WithCRDs(apis.CRDs...), coretest.WithCRDs(v1alpha1.CRDs...))\n\tctx = coreoptions.ToContext(ctx, coretest.Options(coretest.OptionsFields{FeatureGates: coretest.FeatureGates{ReservedCapacity: lo.ToPtr(true)}}))\n\tctx = options.ToContext(ctx, test.Options())\n\tawsEnv = test.NewEnvironment(ctx, env)\n\tcloudProvider = cloudprovider.New(awsEnv.InstanceTypesProvider, awsEnv.InstanceProvider, events.NewRecorder(&record.FakeRecorder{}),\n\t\tenv.Client, awsEnv.AMIProvider, awsEnv.SecurityGroupProvider, awsEnv.CapacityReservationProvider, awsEnv.InstanceTypeStore)\n\tcontroller = metrics.NewController(env.Client, cloudProvider)\n\n\tpricingController = pricing.NewController(awsEnv.PricingProvider)\n})\n\nvar _ = AfterSuite(func() {\n\tctx = coreoptions.ToContext(ctx, coretest.Options(coretest.OptionsFields{FeatureGates: coretest.FeatureGates{ReservedCapacity: lo.ToPtr(true)}}))\n\tExpect(env.Stop()).To(Succeed(), \"Failed to stop environment\")\n})\n\nvar _ = BeforeEach(func() {\n\tctx = coreoptions.ToContext(ctx, coretest.Options(coretest.OptionsFields{FeatureGates: coretest.FeatureGates{ReservedCapacity: lo.ToPtr(true)}}))\n\tctx = options.ToContext(ctx, test.Options())\n\n\tspotPriceHistory, pricingData := fake.GenerateDefaultPriceOutput()\n\tawsEnv.PricingAPI.GetProductsBehavior.Output.Set(pricingData)\n\tawsEnv.EC2API.DescribeSpotPriceHistoryBehavior.Output.Set(spotPriceHistory)\n\tExpectSingletonReconciled(ctx, pricingController)\n\n\tnodePool = coretest.NodePool()\n\tnodeClass = test.EC2NodeClass(\n\t\tv1.EC2NodeClass{\n\t\t\tStatus: v1.EC2NodeClassStatus{\n\t\t\t\tSubnets: []v1.Subnet{\n\t\t\t\t\t{\n\t\t\t\t\t\tID:   \"subnet-test1\",\n\t\t\t\t\t\tZone: \"test-zone-1a\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tID:   \"subnet-test2\",\n\t\t\t\t\t\tZone: \"test-zone-1b\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tID:   \"subnet-test3\",\n\t\t\t\t\t\tZone: \"test-zone-1c\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t)\n\tnodePool.Spec.Template.Spec.NodeClassRef = &karpv1.NodeClassReference{\n\t\tGroup: object.GVK(nodeClass).Group,\n\t\tKind:  object.GVK(nodeClass).Kind,\n\t\tName:  nodeClass.Name,\n\t}\n\tnodeClass.StatusConditions().SetTrue(status.ConditionReady)\n\t_, err := awsEnv.SubnetProvider.List(ctx, nodeClass) // Hydrate the subnet cache\n\tExpect(err).To(BeNil())\n\tExpect(awsEnv.InstanceTypesProvider.UpdateInstanceTypes(ctx)).To(Succeed())\n\tExpect(awsEnv.InstanceTypesProvider.UpdateInstanceTypeOfferings(ctx)).To(Succeed())\n})\n\nvar _ = AfterEach(func() {\n\tExpectCleanedUp(ctx, env.Client)\n\tawsEnv.Reset()\n})\n\nvar _ = Describe(\"MetricsController\", func() {\n\tContext(\"Availability\", func() {\n\t\tIt(\"should expose availability metrics for instance types\", func() {\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\tExpectSingletonReconciled(ctx, controller)\n\t\t\tinstanceTypes, err := awsEnv.InstanceTypesProvider.List(ctx, nodeClass)\n\t\t\tExpect(err).To(BeNil())\n\t\t\tExpect(len(instanceTypes)).To(BeNumerically(\">\", 0))\n\t\t\tfor _, it := range instanceTypes {\n\t\t\t\tfor _, of := range it.Offerings {\n\t\t\t\t\tmetric, ok := FindMetricWithLabelValues(\"karpenter_cloudprovider_instance_type_offering_available\", map[string]string{\n\t\t\t\t\t\t\"instance_type\": it.Name,\n\t\t\t\t\t\t\"capacity_type\": of.Requirements.Get(karpv1.CapacityTypeLabelKey).Any(),\n\t\t\t\t\t\t\"zone\":          of.Requirements.Get(corev1.LabelTopologyZone).Any(),\n\t\t\t\t\t})\n\t\t\t\t\tExpect(ok).To(BeTrue())\n\t\t\t\t\tExpect(metric).To(Not(BeNil()))\n\t\t\t\t\tvalue := metric.GetGauge().Value\n\t\t\t\t\tExpect(aws.ToFloat64(value)).To(BeNumerically(\"==\", lo.Ternary(of.Available, 1, 0)))\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t\tIt(\"should only mark offering as available if the subnets select on it\", func() {\n\t\t\tnodeClass.Status.Subnets = []v1.Subnet{\n\t\t\t\t{\n\t\t\t\t\tID:   \"subnet-test1\",\n\t\t\t\t\tZone: \"test-zone-1a\",\n\t\t\t\t},\n\t\t\t}\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\tExpectSingletonReconciled(ctx, controller)\n\n\t\t\tinstanceTypes, err := awsEnv.InstanceTypesProvider.List(ctx, nodeClass)\n\t\t\tExpect(err).To(BeNil())\n\t\t\tExpect(len(instanceTypes)).To(BeNumerically(\">\", 0))\n\n\t\t\tavailableZones := sets.New[string]()\n\t\t\tfor _, it := range instanceTypes {\n\t\t\t\tfor _, of := range it.Offerings {\n\t\t\t\t\tmetric, ok := FindMetricWithLabelValues(\"karpenter_cloudprovider_instance_type_offering_available\", map[string]string{\n\t\t\t\t\t\t\"instance_type\": it.Name,\n\t\t\t\t\t\t\"capacity_type\": of.Requirements.Get(karpv1.CapacityTypeLabelKey).Any(),\n\t\t\t\t\t\t\"zone\":          of.Requirements.Get(corev1.LabelTopologyZone).Any(),\n\t\t\t\t\t})\n\t\t\t\t\tExpect(ok).To(BeTrue())\n\t\t\t\t\tExpect(metric).To(Not(BeNil()))\n\t\t\t\t\tvalue := metric.GetGauge().Value\n\t\t\t\t\tif of.Zone() == \"test-zone-1a\" {\n\t\t\t\t\t\tExpect(aws.ToFloat64(value)).To(BeNumerically(\"==\", lo.Ternary(of.Available, 1, 0)))\n\t\t\t\t\t} else {\n\t\t\t\t\t\tExpect(aws.ToFloat64(value)).To(BeNumerically(\"==\", 0))\n\t\t\t\t\t}\n\t\t\t\t\tif aws.ToFloat64(value) != 0 {\n\t\t\t\t\t\tavailableZones.Insert(of.Zone())\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tExpect(availableZones).To(HaveLen(1))\n\t\t\tExpect(availableZones.UnsortedList()).To(ContainElements(\"test-zone-1a\"))\n\t\t})\n\t\tIt(\"should mark offerings as available as long as one NodePool marks it as available\", func() {\n\t\t\tnodeClass.Status.Subnets = []v1.Subnet{\n\t\t\t\t{\n\t\t\t\t\tID:   \"subnet-test1\",\n\t\t\t\t\tZone: \"test-zone-1a\",\n\t\t\t\t},\n\t\t\t}\n\t\t\tnodeClass2 := test.EC2NodeClass(v1.EC2NodeClass{\n\t\t\t\tStatus: v1.EC2NodeClassStatus{\n\t\t\t\t\tSubnets: []v1.Subnet{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tID:   \"subnet-test2\",\n\t\t\t\t\t\t\tZone: \"test-zone-1b\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t})\n\t\t\tnodeClass3 := test.EC2NodeClass(v1.EC2NodeClass{\n\t\t\t\tStatus: v1.EC2NodeClassStatus{\n\t\t\t\t\tSubnets: []v1.Subnet{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tID:   \"subnet-test3\",\n\t\t\t\t\t\t\tZone: \"test-zone-1c\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t})\n\t\t\tnodePool2 := coretest.NodePool(karpv1.NodePool{\n\t\t\t\tSpec: karpv1.NodePoolSpec{\n\t\t\t\t\tTemplate: karpv1.NodeClaimTemplate{\n\t\t\t\t\t\tSpec: karpv1.NodeClaimTemplateSpec{\n\t\t\t\t\t\t\tNodeClassRef: &karpv1.NodeClassReference{\n\t\t\t\t\t\t\t\tGroup: object.GVK(nodeClass).Group,\n\t\t\t\t\t\t\t\tKind:  object.GVK(nodeClass).Kind,\n\t\t\t\t\t\t\t\tName:  nodeClass2.Name,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t})\n\t\t\tnodePool3 := coretest.NodePool(karpv1.NodePool{\n\t\t\t\tSpec: karpv1.NodePoolSpec{\n\t\t\t\t\tTemplate: karpv1.NodeClaimTemplate{\n\t\t\t\t\t\tSpec: karpv1.NodeClaimTemplateSpec{\n\t\t\t\t\t\t\tNodeClassRef: &karpv1.NodeClassReference{\n\t\t\t\t\t\t\t\tGroup: object.GVK(nodeClass).Group,\n\t\t\t\t\t\t\t\tKind:  object.GVK(nodeClass).Kind,\n\t\t\t\t\t\t\t\tName:  nodeClass3.Name,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t})\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodePool2, nodePool3, nodeClass, nodeClass2, nodeClass3)\n\t\t\tExpectSingletonReconciled(ctx, controller)\n\n\t\t\tinstanceTypes, err := awsEnv.InstanceTypesProvider.List(ctx, nodeClass)\n\t\t\tExpect(err).To(BeNil())\n\t\t\tExpect(len(instanceTypes)).To(BeNumerically(\">\", 0))\n\n\t\t\tavailableZones := sets.New[string]()\n\t\t\tfor _, it := range instanceTypes {\n\t\t\t\tfor _, of := range it.Offerings {\n\t\t\t\t\tmetric, ok := FindMetricWithLabelValues(\"karpenter_cloudprovider_instance_type_offering_available\", map[string]string{\n\t\t\t\t\t\t\"instance_type\": it.Name,\n\t\t\t\t\t\t\"capacity_type\": of.Requirements.Get(karpv1.CapacityTypeLabelKey).Any(),\n\t\t\t\t\t\t\"zone\":          of.Requirements.Get(corev1.LabelTopologyZone).Any(),\n\t\t\t\t\t})\n\t\t\t\t\tExpect(ok).To(BeTrue())\n\t\t\t\t\tExpect(metric).To(Not(BeNil()))\n\t\t\t\t\tvalue := metric.GetGauge().Value\n\t\t\t\t\tif of.Zone() == \"test-zone-1a\" {\n\t\t\t\t\t\tExpect(aws.ToFloat64(value)).To(BeNumerically(\"==\", lo.Ternary(of.Available, 1, 0)))\n\t\t\t\t\t}\n\t\t\t\t\tif aws.ToFloat64(value) != 0 {\n\t\t\t\t\t\tavailableZones.Insert(of.Zone())\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tExpect(availableZones).To(HaveLen(3))\n\t\t\tExpect(availableZones.UnsortedList()).To(ContainElements(\"test-zone-1a\", \"test-zone-1b\", \"test-zone-1c\"))\n\t\t})\n\t\tIt(\"should inject reservation availability when selecting on a capacity reservation\", func() {\n\t\t\tnodeClass.Status.CapacityReservations = []v1.CapacityReservation{\n\t\t\t\t{\n\t\t\t\t\tAvailabilityZone:      \"test-zone-1a\",\n\t\t\t\t\tID:                    \"cr-foo\",\n\t\t\t\t\tInstanceMatchCriteria: string(ec2types.InstanceMatchCriteriaTargeted),\n\t\t\t\t\tInstanceType:          \"m5.large\",\n\t\t\t\t\tOwnerID:               \"012345678901\",\n\t\t\t\t\tState:                 v1.CapacityReservationStateActive,\n\t\t\t\t\tReservationType:       v1.CapacityReservationTypeDefault,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tAvailabilityZone:      \"test-zone-1b\",\n\t\t\t\t\tID:                    \"cr-bar\",\n\t\t\t\t\tInstanceMatchCriteria: string(ec2types.InstanceMatchCriteriaTargeted),\n\t\t\t\t\tInstanceType:          \"m5.large\",\n\t\t\t\t\tOwnerID:               \"012345678901\",\n\t\t\t\t\tState:                 v1.CapacityReservationStateActive,\n\t\t\t\t\tReservationType:       v1.CapacityReservationTypeDefault,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tAvailabilityZone:      \"test-zone-1a\",\n\t\t\t\t\tID:                    \"cr-baz\",\n\t\t\t\t\tInstanceMatchCriteria: string(ec2types.InstanceMatchCriteriaTargeted),\n\t\t\t\t\tInstanceType:          \"m5.metal\",\n\t\t\t\t\tOwnerID:               \"012345678901\",\n\t\t\t\t\tState:                 v1.CapacityReservationStateActive,\n\t\t\t\t\tReservationType:       v1.CapacityReservationTypeDefault,\n\t\t\t\t},\n\t\t\t}\n\t\t\tfor _, elem := range nodeClass.Status.CapacityReservations {\n\t\t\t\tawsEnv.CapacityReservationProvider.SetAvailableInstanceCount(elem.ID, 10)\n\t\t\t}\n\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\tExpectSingletonReconciled(ctx, controller)\n\n\t\t\tinstanceTypes, err := awsEnv.InstanceTypesProvider.List(ctx, nodeClass)\n\t\t\tExpect(err).To(BeNil())\n\t\t\tExpect(len(instanceTypes)).To(BeNumerically(\">\", 0))\n\n\t\t\tvar reservedAvailability []lo.Tuple2[string, string]\n\t\t\tfor _, it := range instanceTypes {\n\t\t\t\tfor _, of := range it.Offerings {\n\t\t\t\t\tmetric, ok := FindMetricWithLabelValues(\"karpenter_cloudprovider_instance_type_offering_available\", map[string]string{\n\t\t\t\t\t\t\"instance_type\": it.Name,\n\t\t\t\t\t\t\"capacity_type\": of.Requirements.Get(karpv1.CapacityTypeLabelKey).Any(),\n\t\t\t\t\t\t\"zone\":          of.Requirements.Get(corev1.LabelTopologyZone).Any(),\n\t\t\t\t\t})\n\t\t\t\t\tExpect(ok).To(BeTrue())\n\t\t\t\t\tExpect(metric).To(Not(BeNil()))\n\t\t\t\t\tvalue := metric.GetGauge().Value\n\t\t\t\t\tif of.CapacityType() == karpv1.CapacityTypeReserved && aws.ToFloat64(value) == 1 {\n\t\t\t\t\t\treservedAvailability = append(reservedAvailability, lo.Tuple2[string, string]{A: it.Name, B: of.Zone()})\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tExpect(reservedAvailability).To(HaveLen(3))\n\t\t\tExpect(reservedAvailability).To(ContainElements(lo.Tuple2[string, string]{A: \"m5.large\", B: \"test-zone-1a\"}, lo.Tuple2[string, string]{A: \"m5.large\", B: \"test-zone-1b\"}, lo.Tuple2[string, string]{A: \"m5.metal\", B: \"test-zone-1a\"}))\n\n\t\t\t// If the availability of the reservation is set to 0, the availability should change to 0\n\t\t\t// But the other reservations should still have availability of 1\n\t\t\tawsEnv.CapacityReservationProvider.SetAvailableInstanceCount(\"cr-foo\", 0)\n\t\t\tExpectSingletonReconciled(ctx, controller)\n\n\t\t\tfor _, elem := range nodeClass.Status.CapacityReservations {\n\t\t\t\texpectedValue := 1\n\t\t\t\tif elem.AvailabilityZone == \"test-zone-1a\" && elem.InstanceType == \"m5.large\" {\n\t\t\t\t\texpectedValue = 0\n\t\t\t\t}\n\t\t\t\tmetric, ok := FindMetricWithLabelValues(\"karpenter_cloudprovider_instance_type_offering_available\", map[string]string{\n\t\t\t\t\t\"instance_type\": elem.InstanceType,\n\t\t\t\t\t\"capacity_type\": karpv1.CapacityTypeReserved,\n\t\t\t\t\t\"zone\":          elem.AvailabilityZone,\n\t\t\t\t})\n\t\t\t\tExpect(ok).To(BeTrue())\n\t\t\t\tExpect(metric).To(Not(BeNil()))\n\t\t\t\tExpect(aws.ToFloat64(metric.GetGauge().Value)).To(Equal(float64(expectedValue)))\n\t\t\t}\n\n\t\t\tcopiedReservationStatus := append([]v1.CapacityReservation{}, nodeClass.Status.CapacityReservations...)\n\t\t\t// Once the capacity reservation is no longer captured in the status, then we should report availability of 0\n\t\t\tnodeClass.Status.CapacityReservations = nil\n\t\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\t\tExpectSingletonReconciled(ctx, controller)\n\n\t\t\tfor _, elem := range copiedReservationStatus {\n\t\t\t\tmetric, ok := FindMetricWithLabelValues(\"karpenter_cloudprovider_instance_type_offering_available\", map[string]string{\n\t\t\t\t\t\"instance_type\": elem.InstanceType,\n\t\t\t\t\t\"capacity_type\": karpv1.CapacityTypeReserved,\n\t\t\t\t\t\"zone\":          elem.AvailabilityZone,\n\t\t\t\t})\n\t\t\t\tExpect(ok).To(BeTrue())\n\t\t\t\tExpect(metric).To(Not(BeNil()))\n\t\t\t\tExpect(aws.ToFloat64(metric.GetGauge().Value)).To(Equal(float64(0)))\n\t\t\t}\n\t\t})\n\t\tIt(\"should not expose the reserved capacity type if feature gate isn't enabled\", func() {\n\t\t\tctx = coreoptions.ToContext(ctx, coretest.Options(coretest.OptionsFields{FeatureGates: coretest.FeatureGates{ReservedCapacity: lo.ToPtr(false)}}))\n\t\t\tnodeClass.Status.CapacityReservations = []v1.CapacityReservation{\n\t\t\t\t{\n\t\t\t\t\tAvailabilityZone:      \"test-zone-1a\",\n\t\t\t\t\tID:                    \"cr-foo\",\n\t\t\t\t\tInstanceMatchCriteria: string(ec2types.InstanceMatchCriteriaTargeted),\n\t\t\t\t\tInstanceType:          \"m5.large\",\n\t\t\t\t\tOwnerID:               \"012345678901\",\n\t\t\t\t\tState:                 v1.CapacityReservationStateActive,\n\t\t\t\t\tReservationType:       v1.CapacityReservationTypeDefault,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tAvailabilityZone:      \"test-zone-1b\",\n\t\t\t\t\tID:                    \"cr-bar\",\n\t\t\t\t\tInstanceMatchCriteria: string(ec2types.InstanceMatchCriteriaTargeted),\n\t\t\t\t\tInstanceType:          \"m5.large\",\n\t\t\t\t\tOwnerID:               \"012345678901\",\n\t\t\t\t\tState:                 v1.CapacityReservationStateActive,\n\t\t\t\t\tReservationType:       v1.CapacityReservationTypeDefault,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tAvailabilityZone:      \"test-zone-1a\",\n\t\t\t\t\tID:                    \"cr-baz\",\n\t\t\t\t\tInstanceMatchCriteria: string(ec2types.InstanceMatchCriteriaTargeted),\n\t\t\t\t\tInstanceType:          \"m5.metal\",\n\t\t\t\t\tOwnerID:               \"012345678901\",\n\t\t\t\t\tState:                 v1.CapacityReservationStateActive,\n\t\t\t\t\tReservationType:       v1.CapacityReservationTypeDefault,\n\t\t\t\t},\n\t\t\t}\n\t\t\tfor _, elem := range nodeClass.Status.CapacityReservations {\n\t\t\t\tawsEnv.CapacityReservationProvider.SetAvailableInstanceCount(elem.ID, 10)\n\t\t\t}\n\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\tExpectSingletonReconciled(ctx, controller)\n\n\t\t\tinstanceTypes, err := awsEnv.InstanceTypesProvider.List(ctx, nodeClass)\n\t\t\tExpect(err).To(BeNil())\n\t\t\tExpect(len(instanceTypes)).To(BeNumerically(\">\", 0))\n\n\t\t\tfor _, it := range instanceTypes {\n\t\t\t\tfor _, of := range it.Offerings {\n\t\t\t\t\tmetric, ok := FindMetricWithLabelValues(\"karpenter_cloudprovider_instance_type_offering_available\", map[string]string{\n\t\t\t\t\t\t\"instance_type\": it.Name,\n\t\t\t\t\t\t\"capacity_type\": of.Requirements.Get(karpv1.CapacityTypeLabelKey).Any(),\n\t\t\t\t\t\t\"zone\":          of.Requirements.Get(corev1.LabelTopologyZone).Any(),\n\t\t\t\t\t})\n\t\t\t\t\tExpect(ok).To(BeTrue())\n\t\t\t\t\tExpect(metric).To(Not(BeNil()))\n\t\t\t\t\tExpect(of.CapacityType()).ToNot(Equal(karpv1.CapacityTypeReserved))\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t})\n\tContext(\"Pricing\", func() {\n\t\tIt(\"should expose pricing metrics for instance types\", func() {\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\tExpectSingletonReconciled(ctx, controller)\n\t\t\tinstanceTypes, err := awsEnv.InstanceTypesProvider.List(ctx, nodeClass)\n\t\t\tExpect(err).To(BeNil())\n\t\t\tExpect(len(instanceTypes)).To(BeNumerically(\">\", 0))\n\t\t\tfor _, it := range instanceTypes {\n\t\t\t\tfor _, of := range it.Offerings {\n\t\t\t\t\tmetric, ok := FindMetricWithLabelValues(\"karpenter_cloudprovider_instance_type_offering_price_estimate\", map[string]string{\n\t\t\t\t\t\t\"instance_type\": it.Name,\n\t\t\t\t\t\t\"capacity_type\": of.Requirements.Get(karpv1.CapacityTypeLabelKey).Any(),\n\t\t\t\t\t\t\"zone\":          of.Requirements.Get(corev1.LabelTopologyZone).Any(),\n\t\t\t\t\t})\n\t\t\t\t\tExpect(ok).To(BeTrue())\n\t\t\t\t\tExpect(metric).To(Not(BeNil()))\n\t\t\t\t\tvalue := metric.GetGauge().Value\n\t\t\t\t\tExpect(aws.ToFloat64(value)).To(BeNumerically(\"==\", of.Price))\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t\tIt(\"should expose pricing metrics for offerings even if no subnets select on it\", func() {\n\t\t\tnodeClass.Status.Subnets = []v1.Subnet{\n\t\t\t\t{\n\t\t\t\t\tID:   \"subnet-test1\",\n\t\t\t\t\tZone: \"test-zone-1a\",\n\t\t\t\t},\n\t\t\t}\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\tExpectSingletonReconciled(ctx, controller)\n\n\t\t\tinstanceTypes, err := awsEnv.InstanceTypesProvider.List(ctx, nodeClass)\n\t\t\tExpect(err).To(BeNil())\n\t\t\tExpect(len(instanceTypes)).To(BeNumerically(\">\", 0))\n\n\t\t\tallZones := sets.New[string]()\n\t\t\tfor _, it := range instanceTypes {\n\t\t\t\tfor _, of := range it.Offerings {\n\t\t\t\t\tmetric, ok := FindMetricWithLabelValues(\"karpenter_cloudprovider_instance_type_offering_price_estimate\", map[string]string{\n\t\t\t\t\t\t\"instance_type\": it.Name,\n\t\t\t\t\t\t\"capacity_type\": of.Requirements.Get(karpv1.CapacityTypeLabelKey).Any(),\n\t\t\t\t\t\t\"zone\":          of.Requirements.Get(corev1.LabelTopologyZone).Any(),\n\t\t\t\t\t})\n\t\t\t\t\tExpect(ok).To(BeTrue())\n\t\t\t\t\tExpect(metric).To(Not(BeNil()))\n\t\t\t\t\tvalue := metric.GetGauge().Value\n\n\t\t\t\t\t_, spotFound := awsEnv.PricingProvider.SpotPrice(ec2types.InstanceType(it.Name), of.Zone())\n\t\t\t\t\t_, odFound := awsEnv.PricingProvider.OnDemandPrice(ec2types.InstanceType(it.Name))\n\t\t\t\t\tif of.CapacityType() == karpv1.CapacityTypeSpot && spotFound ||\n\t\t\t\t\t\tof.CapacityType() == karpv1.CapacityTypeOnDemand && odFound {\n\t\t\t\t\t\tExpect(aws.ToFloat64(value)).To(BeNumerically(\">\", 0))\n\t\t\t\t\t} else {\n\t\t\t\t\t\tExpect(aws.ToFloat64(value)).To(BeNumerically(\"==\", 0))\n\t\t\t\t\t}\n\t\t\t\t\tif aws.ToFloat64(value) > 0 {\n\t\t\t\t\t\tallZones.Insert(of.Zone())\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tExpect(allZones.UnsortedList()).To(HaveLen(4))\n\t\t\tExpect(allZones.UnsortedList()).To(ContainElements(\"test-zone-1a\", \"test-zone-1b\", \"test-zone-1c\", \"test-zone-1a-local\"))\n\t\t})\n\t\tIt(\"should inject reservation pricing when selecting on a capacity reservation\", func() {\n\t\t\tnodeClass.Status.CapacityReservations = []v1.CapacityReservation{\n\t\t\t\t{\n\t\t\t\t\tAvailabilityZone:      \"test-zone-1a\",\n\t\t\t\t\tID:                    \"cr-foo\",\n\t\t\t\t\tInstanceMatchCriteria: string(ec2types.InstanceMatchCriteriaTargeted),\n\t\t\t\t\tInstanceType:          \"m5.large\",\n\t\t\t\t\tOwnerID:               \"012345678901\",\n\t\t\t\t\tState:                 v1.CapacityReservationStateActive,\n\t\t\t\t\tReservationType:       v1.CapacityReservationTypeDefault,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tAvailabilityZone:      \"test-zone-1b\",\n\t\t\t\t\tID:                    \"cr-bar\",\n\t\t\t\t\tInstanceMatchCriteria: string(ec2types.InstanceMatchCriteriaTargeted),\n\t\t\t\t\tInstanceType:          \"m5.large\",\n\t\t\t\t\tOwnerID:               \"012345678901\",\n\t\t\t\t\tState:                 v1.CapacityReservationStateActive,\n\t\t\t\t\tReservationType:       v1.CapacityReservationTypeDefault,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tAvailabilityZone:      \"test-zone-1a\",\n\t\t\t\t\tID:                    \"cr-baz\",\n\t\t\t\t\tInstanceMatchCriteria: string(ec2types.InstanceMatchCriteriaTargeted),\n\t\t\t\t\tInstanceType:          \"m5.metal\",\n\t\t\t\t\tOwnerID:               \"012345678901\",\n\t\t\t\t\tState:                 v1.CapacityReservationStateActive,\n\t\t\t\t\tReservationType:       v1.CapacityReservationTypeDefault,\n\t\t\t\t},\n\t\t\t}\n\t\t\tfor _, elem := range nodeClass.Status.CapacityReservations {\n\t\t\t\tawsEnv.CapacityReservationProvider.SetAvailableInstanceCount(elem.ID, 10)\n\t\t\t}\n\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\tExpectSingletonReconciled(ctx, controller)\n\n\t\t\tinstanceTypes, err := awsEnv.InstanceTypesProvider.List(ctx, nodeClass)\n\t\t\tExpect(err).To(BeNil())\n\t\t\tExpect(len(instanceTypes)).To(BeNumerically(\">\", 0))\n\n\t\t\tvar reservedPricing []lo.Tuple2[string, string]\n\t\t\tfor _, it := range instanceTypes {\n\t\t\t\tfor _, of := range it.Offerings {\n\t\t\t\t\tmetric, ok := FindMetricWithLabelValues(\"karpenter_cloudprovider_instance_type_offering_price_estimate\", map[string]string{\n\t\t\t\t\t\t\"instance_type\": it.Name,\n\t\t\t\t\t\t\"capacity_type\": of.Requirements.Get(karpv1.CapacityTypeLabelKey).Any(),\n\t\t\t\t\t\t\"zone\":          of.Requirements.Get(corev1.LabelTopologyZone).Any(),\n\t\t\t\t\t})\n\t\t\t\t\tExpect(ok).To(BeTrue())\n\t\t\t\t\tExpect(metric).To(Not(BeNil()))\n\t\t\t\t\tvalue := metric.GetGauge().Value\n\t\t\t\t\tif of.CapacityType() == karpv1.CapacityTypeReserved && aws.ToFloat64(value) > 0 {\n\t\t\t\t\t\treservedPricing = append(reservedPricing, lo.Tuple2[string, string]{A: it.Name, B: of.Zone()})\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tExpect(reservedPricing).To(HaveLen(3))\n\t\t\tExpect(reservedPricing).To(ContainElements(lo.Tuple2[string, string]{A: \"m5.large\", B: \"test-zone-1a\"}, lo.Tuple2[string, string]{A: \"m5.large\", B: \"test-zone-1b\"}, lo.Tuple2[string, string]{A: \"m5.metal\", B: \"test-zone-1a\"}))\n\n\t\t\t// If the availability of the reservation is set to 0, the pricing should not change to 0 since the offering exists\n\t\t\t// It just isn't available\n\t\t\tawsEnv.CapacityReservationProvider.SetAvailableInstanceCount(\"cr-foo\", 0)\n\t\t\tExpectSingletonReconciled(ctx, controller)\n\n\t\t\tfor _, elem := range nodeClass.Status.CapacityReservations {\n\t\t\t\tmetric, ok := FindMetricWithLabelValues(\"karpenter_cloudprovider_instance_type_offering_price_estimate\", map[string]string{\n\t\t\t\t\t\"instance_type\": elem.InstanceType,\n\t\t\t\t\t\"capacity_type\": karpv1.CapacityTypeReserved,\n\t\t\t\t\t\"zone\":          elem.AvailabilityZone,\n\t\t\t\t})\n\t\t\t\tExpect(ok).To(BeTrue())\n\t\t\t\tExpect(metric).To(Not(BeNil()))\n\t\t\t\tExpect(aws.ToFloat64(metric.GetGauge().Value)).To(BeNumerically(\">\", 0))\n\t\t\t}\n\n\t\t\tcopiedReservationStatus := append([]v1.CapacityReservation{}, nodeClass.Status.CapacityReservations...)\n\t\t\t// Once the capacity reservation is no longer captured in the status, then we should report availability of 0\n\t\t\tnodeClass.Status.CapacityReservations = nil\n\t\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\t\tExpectSingletonReconciled(ctx, controller)\n\n\t\t\tfor _, elem := range copiedReservationStatus {\n\t\t\t\tmetric, ok := FindMetricWithLabelValues(\"karpenter_cloudprovider_instance_type_offering_price_estimate\", map[string]string{\n\t\t\t\t\t\"instance_type\": elem.InstanceType,\n\t\t\t\t\t\"capacity_type\": karpv1.CapacityTypeReserved,\n\t\t\t\t\t\"zone\":          elem.AvailabilityZone,\n\t\t\t\t})\n\t\t\t\tExpect(ok).To(BeTrue())\n\t\t\t\tExpect(metric).To(Not(BeNil()))\n\t\t\t\tExpect(aws.ToFloat64(metric.GetGauge().Value)).To(Equal(float64(0)))\n\t\t\t}\n\t\t})\n\t\tIt(\"should not expose the reserved capacity type if feature gate isn't enabled\", func() {\n\t\t\tctx = coreoptions.ToContext(ctx, coretest.Options(coretest.OptionsFields{FeatureGates: coretest.FeatureGates{ReservedCapacity: lo.ToPtr(false)}}))\n\t\t\tnodeClass.Status.CapacityReservations = []v1.CapacityReservation{\n\t\t\t\t{\n\t\t\t\t\tAvailabilityZone:      \"test-zone-1a\",\n\t\t\t\t\tID:                    \"cr-foo\",\n\t\t\t\t\tInstanceMatchCriteria: string(ec2types.InstanceMatchCriteriaTargeted),\n\t\t\t\t\tInstanceType:          \"m5.large\",\n\t\t\t\t\tOwnerID:               \"012345678901\",\n\t\t\t\t\tState:                 v1.CapacityReservationStateActive,\n\t\t\t\t\tReservationType:       v1.CapacityReservationTypeDefault,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tAvailabilityZone:      \"test-zone-1b\",\n\t\t\t\t\tID:                    \"cr-bar\",\n\t\t\t\t\tInstanceMatchCriteria: string(ec2types.InstanceMatchCriteriaTargeted),\n\t\t\t\t\tInstanceType:          \"m5.large\",\n\t\t\t\t\tOwnerID:               \"012345678901\",\n\t\t\t\t\tState:                 v1.CapacityReservationStateActive,\n\t\t\t\t\tReservationType:       v1.CapacityReservationTypeDefault,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tAvailabilityZone:      \"test-zone-1a\",\n\t\t\t\t\tID:                    \"cr-baz\",\n\t\t\t\t\tInstanceMatchCriteria: string(ec2types.InstanceMatchCriteriaTargeted),\n\t\t\t\t\tInstanceType:          \"m5.metal\",\n\t\t\t\t\tOwnerID:               \"012345678901\",\n\t\t\t\t\tState:                 v1.CapacityReservationStateActive,\n\t\t\t\t\tReservationType:       v1.CapacityReservationTypeDefault,\n\t\t\t\t},\n\t\t\t}\n\t\t\tfor _, elem := range nodeClass.Status.CapacityReservations {\n\t\t\t\tawsEnv.CapacityReservationProvider.SetAvailableInstanceCount(elem.ID, 10)\n\t\t\t}\n\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\tExpectSingletonReconciled(ctx, controller)\n\n\t\t\tinstanceTypes, err := awsEnv.InstanceTypesProvider.List(ctx, nodeClass)\n\t\t\tExpect(err).To(BeNil())\n\t\t\tExpect(len(instanceTypes)).To(BeNumerically(\">\", 0))\n\n\t\t\tfor _, it := range instanceTypes {\n\t\t\t\tfor _, of := range it.Offerings {\n\t\t\t\t\tmetric, ok := FindMetricWithLabelValues(\"karpenter_cloudprovider_instance_type_offering_price_estimate\", map[string]string{\n\t\t\t\t\t\t\"instance_type\": it.Name,\n\t\t\t\t\t\t\"capacity_type\": of.Requirements.Get(karpv1.CapacityTypeLabelKey).Any(),\n\t\t\t\t\t\t\"zone\":          of.Requirements.Get(corev1.LabelTopologyZone).Any(),\n\t\t\t\t\t})\n\t\t\t\t\tExpect(ok).To(BeTrue())\n\t\t\t\t\tExpect(metric).To(Not(BeNil()))\n\t\t\t\t\tExpect(of.CapacityType()).ToNot(Equal(karpv1.CapacityTypeReserved))\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t})\n})\n"
  },
  {
    "path": "pkg/controllers/nodeclaim/garbagecollection/controller.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage garbagecollection\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"time\"\n\n\t\"github.com/awslabs/operatorpkg/reconciler\"\n\t\"github.com/awslabs/operatorpkg/singleton\"\n\t\"github.com/samber/lo\"\n\t\"go.uber.org/multierr\"\n\tcorev1 \"k8s.io/api/core/v1\"\n\t\"k8s.io/apimachinery/pkg/util/sets\"\n\t\"k8s.io/client-go/util/workqueue\"\n\t\"k8s.io/klog/v2\"\n\tcontrollerruntime \"sigs.k8s.io/controller-runtime\"\n\t\"sigs.k8s.io/controller-runtime/pkg/client\"\n\t\"sigs.k8s.io/controller-runtime/pkg/log\"\n\t\"sigs.k8s.io/controller-runtime/pkg/manager\"\n\t\"sigs.k8s.io/karpenter/pkg/cloudprovider\"\n\t\"sigs.k8s.io/karpenter/pkg/operator/injection\"\n\tnodeclaimutils \"sigs.k8s.io/karpenter/pkg/utils/nodeclaim\"\n\n\tkarpv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n)\n\ntype Controller struct {\n\tkubeClient      client.Client\n\tcloudProvider   cloudprovider.CloudProvider\n\tsuccessfulCount uint64 // keeps track of successful reconciles for more aggressive requeueing near the start of the controller\n}\n\nfunc NewController(kubeClient client.Client, cloudProvider cloudprovider.CloudProvider) *Controller {\n\treturn &Controller{\n\t\tkubeClient:      kubeClient,\n\t\tcloudProvider:   cloudProvider,\n\t\tsuccessfulCount: 0,\n\t}\n}\n\nfunc (c *Controller) Reconcile(ctx context.Context) (reconciler.Result, error) {\n\tctx = injection.WithControllerName(ctx, \"instance.garbagecollection\")\n\n\t// We LIST NodeClaims on the CloudProvider BEFORE we grab NodeClaims/Nodes on the cluster so that we make sure that, if\n\t// LISTing cloudNodeClaims takes a long time, our information is more updated by the time we get to Node and NodeClaim LIST\n\t// This works since our CloudProvider cloudNodeClaims are deleted based on whether the Machine exists or not, not vise-versa\n\tcloudNodeClaims, err := c.cloudProvider.List(ctx)\n\tif err != nil {\n\t\treturn reconciler.Result{}, fmt.Errorf(\"listing cloudprovider nodeclaims, %w\", err)\n\t}\n\t// Filter out any cloudprovider NodeClaim which is already terminating\n\tcloudNodeClaims = lo.Filter(cloudNodeClaims, func(nc *karpv1.NodeClaim, _ int) bool {\n\t\treturn nc.DeletionTimestamp.IsZero()\n\t})\n\tclusterNodeClaims, err := nodeclaimutils.ListManaged(ctx, c.kubeClient, c.cloudProvider)\n\tif err != nil {\n\t\treturn reconciler.Result{}, err\n\t}\n\tclusterProviderIDs := sets.New(lo.FilterMap(clusterNodeClaims, func(nc *karpv1.NodeClaim, _ int) (string, bool) {\n\t\treturn nc.Status.ProviderID, nc.Status.ProviderID != \"\"\n\t})...)\n\tnodeList := &corev1.NodeList{}\n\tif err = c.kubeClient.List(ctx, nodeList); err != nil {\n\t\treturn reconciler.Result{}, err\n\t}\n\terrs := make([]error, len(cloudNodeClaims))\n\tworkqueue.ParallelizeUntil(ctx, 100, len(cloudNodeClaims), func(i int) {\n\t\tif nc := cloudNodeClaims[i]; !clusterProviderIDs.Has(nc.Status.ProviderID) && time.Since(nc.CreationTimestamp.Time) > time.Second*30 {\n\t\t\terrs[i] = c.garbageCollect(ctx, cloudNodeClaims[i], nodeList)\n\t\t}\n\t})\n\tif err = multierr.Combine(errs...); err != nil {\n\t\treturn reconciler.Result{}, err\n\t}\n\tc.successfulCount++\n\treturn reconciler.Result{RequeueAfter: lo.Ternary(c.successfulCount <= 20, time.Second*10, time.Minute*2)}, nil\n}\n\nfunc (c *Controller) garbageCollect(ctx context.Context, nodeClaim *karpv1.NodeClaim, nodeList *corev1.NodeList) error {\n\tctx = log.IntoContext(ctx, log.FromContext(ctx).WithValues(\"provider-id\", nodeClaim.Status.ProviderID))\n\tif err := c.cloudProvider.Delete(ctx, nodeClaim); err != nil {\n\t\treturn cloudprovider.IgnoreNodeClaimNotFoundError(err)\n\t}\n\tlog.FromContext(ctx).V(1).Info(\"garbage collected cloudprovider instance\")\n\n\t// Go ahead and cleanup the node if we know that it exists to make scheduling go quicker\n\tif node, ok := lo.Find(nodeList.Items, func(n corev1.Node) bool {\n\t\treturn n.Spec.ProviderID == nodeClaim.Status.ProviderID\n\t}); ok {\n\t\tif err := c.kubeClient.Delete(ctx, &node); err != nil {\n\t\t\treturn client.IgnoreNotFound(err)\n\t\t}\n\t\tlog.FromContext(ctx).WithValues(\"Node\", klog.KObj(&node)).V(1).Info(\"garbage collected node\")\n\t}\n\treturn nil\n}\n\nfunc (c *Controller) Register(_ context.Context, m manager.Manager) error {\n\treturn controllerruntime.NewControllerManagedBy(m).\n\t\tNamed(\"instance.garbagecollection\").\n\t\tWatchesRawSource(singleton.Source()).\n\t\tComplete(singleton.AsReconciler(c))\n}\n"
  },
  {
    "path": "pkg/controllers/nodeclaim/garbagecollection/suite_test.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage garbagecollection_test\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"sync\"\n\t\"testing\"\n\t\"time\"\n\n\t\"sigs.k8s.io/karpenter/pkg/test/v1alpha1\"\n\n\t\"github.com/aws/aws-sdk-go-v2/aws\"\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\t\"github.com/awslabs/operatorpkg/object\"\n\t\"github.com/samber/lo\"\n\tcorev1 \"k8s.io/api/core/v1\"\n\t\"k8s.io/client-go/tools/record\"\n\tkarpv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n\tkarpcloudprovider \"sigs.k8s.io/karpenter/pkg/cloudprovider\"\n\t\"sigs.k8s.io/karpenter/pkg/events\"\n\tcoretest \"sigs.k8s.io/karpenter/pkg/test\"\n\n\t\"github.com/aws/karpenter-provider-aws/pkg/apis\"\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/cloudprovider\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/controllers/nodeclaim/garbagecollection\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/fake\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/operator/options\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/test\"\n\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n\t. \"sigs.k8s.io/karpenter/pkg/test/expectations\"\n\t. \"sigs.k8s.io/karpenter/pkg/utils/testing\"\n\n\tcoreoptions \"sigs.k8s.io/karpenter/pkg/operator/options\"\n)\n\nvar ctx context.Context\nvar awsEnv *test.Environment\nvar env *coretest.Environment\nvar garbageCollectionController *garbagecollection.Controller\nvar cloudProvider *cloudprovider.CloudProvider\n\nfunc TestAPIs(t *testing.T) {\n\tctx = TestContextWithLogger(t)\n\tRegisterFailHandler(Fail)\n\tRunSpecs(t, \"GarbageCollection\")\n}\n\nvar _ = BeforeSuite(func() {\n\tctx = options.ToContext(ctx, test.Options())\n\tenv = coretest.NewEnvironment(coretest.WithCRDs(apis.CRDs...), coretest.WithCRDs(v1alpha1.CRDs...))\n\tctx = coreoptions.ToContext(ctx, coretest.Options(coretest.OptionsFields{FeatureGates: coretest.FeatureGates{ReservedCapacity: lo.ToPtr(true)}}))\n\tawsEnv = test.NewEnvironment(ctx, env)\n\tcloudProvider = cloudprovider.New(awsEnv.InstanceTypesProvider, awsEnv.InstanceProvider, events.NewRecorder(&record.FakeRecorder{}),\n\t\tenv.Client, awsEnv.AMIProvider, awsEnv.SecurityGroupProvider, awsEnv.CapacityReservationProvider, awsEnv.InstanceTypeStore)\n\tgarbageCollectionController = garbagecollection.NewController(env.Client, cloudProvider)\n})\n\nvar _ = AfterSuite(func() {\n\tExpect(env.Stop()).To(Succeed(), \"Failed to stop environment\")\n})\n\nvar _ = BeforeEach(func() {\n\tawsEnv.Reset()\n})\n\nvar _ = Describe(\"GarbageCollection\", func() {\n\tvar instance *ec2types.Instance\n\tvar nodeClass *v1.EC2NodeClass\n\tvar providerID string\n\n\tBeforeEach(func() {\n\t\tinstanceID := fake.InstanceID()\n\t\tproviderID = fake.ProviderID(instanceID)\n\t\tnodeClass = test.EC2NodeClass()\n\t\tnodePool := coretest.NodePool(karpv1.NodePool{\n\t\t\tSpec: karpv1.NodePoolSpec{\n\t\t\t\tTemplate: karpv1.NodeClaimTemplate{\n\t\t\t\t\tSpec: karpv1.NodeClaimTemplateSpec{\n\t\t\t\t\t\tNodeClassRef: &karpv1.NodeClassReference{\n\t\t\t\t\t\t\tGroup: object.GVK(nodeClass).Group,\n\t\t\t\t\t\t\tKind:  object.GVK(nodeClass).Kind,\n\t\t\t\t\t\t\tName:  nodeClass.Name,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tinstance = &ec2types.Instance{\n\t\t\tState: &ec2types.InstanceState{\n\t\t\t\tName: ec2types.InstanceStateNameRunning,\n\t\t\t},\n\t\t\tTags: []ec2types.Tag{\n\t\t\t\t{\n\t\t\t\t\tKey:   aws.String(fmt.Sprintf(\"kubernetes.io/cluster/%s\", options.FromContext(ctx).ClusterName)),\n\t\t\t\t\tValue: aws.String(\"owned\"),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tKey:   aws.String(karpv1.NodePoolLabelKey),\n\t\t\t\t\tValue: aws.String(nodePool.Name),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tKey:   aws.String(v1.LabelNodeClass),\n\t\t\t\t\tValue: aws.String(nodeClass.Name),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tKey:   aws.String(v1.EKSClusterNameTagKey),\n\t\t\t\t\tValue: aws.String(options.FromContext(ctx).ClusterName),\n\t\t\t\t},\n\t\t\t},\n\t\t\tPrivateDnsName: aws.String(fake.PrivateDNSName()),\n\t\t\tPlacement: &ec2types.Placement{\n\t\t\t\tAvailabilityZone: aws.String(fake.DefaultRegion),\n\t\t\t},\n\t\t\tInstanceId:   aws.String(instanceID),\n\t\t\tInstanceType: \"m5.large\",\n\t\t}\n\t})\n\tAfterEach(func() {\n\t\tExpectCleanedUp(ctx, env.Client)\n\t})\n\n\tIt(\"should delete an instance if there is no NodeClaim owner\", func() {\n\t\t// Launch time was 1m ago\n\t\tinstance.LaunchTime = aws.Time(time.Now().Add(-time.Minute))\n\t\tawsEnv.EC2API.Instances.Store(aws.ToString(instance.InstanceId), *instance)\n\n\t\tExpectSingletonReconciled(ctx, garbageCollectionController)\n\t\tawsEnv.InstanceCache.Flush()\n\t\t_, err := cloudProvider.Get(ctx, providerID)\n\t\tExpect(err).To(HaveOccurred())\n\t\tExpect(karpcloudprovider.IsNodeClaimNotFoundError(err)).To(BeTrue())\n\t})\n\tIt(\"should delete an instance along with the node if there is no NodeClaim owner (to quicken scheduling)\", func() {\n\t\t// Launch time was 1m ago\n\t\tinstance.LaunchTime = aws.Time(time.Now().Add(-time.Minute))\n\t\tawsEnv.EC2API.Instances.Store(aws.ToString(instance.InstanceId), *instance)\n\n\t\tnode := coretest.Node(coretest.NodeOptions{\n\t\t\tProviderID: providerID,\n\t\t})\n\t\tExpectApplied(ctx, env.Client, node)\n\n\t\tExpectSingletonReconciled(ctx, garbageCollectionController)\n\t\tawsEnv.InstanceCache.Flush()\n\t\t_, err := cloudProvider.Get(ctx, providerID)\n\t\tExpect(err).To(HaveOccurred())\n\t\tExpect(karpcloudprovider.IsNodeClaimNotFoundError(err)).To(BeTrue())\n\n\t\tExpectNotFound(ctx, env.Client, node)\n\t})\n\tIt(\"should delete many instances if they all don't have NodeClaim owners\", func() {\n\t\t// Generate 100 instances that have different instanceIDs\n\t\tvar ids []string\n\t\tfor i := 0; i < 100; i++ {\n\t\t\tinstanceID := fake.InstanceID()\n\t\t\tawsEnv.EC2API.Instances.Store(\n\t\t\t\tinstanceID,\n\t\t\t\tec2types.Instance{\n\t\t\t\t\tState: &ec2types.InstanceState{\n\t\t\t\t\t\tName: ec2types.InstanceStateNameRunning,\n\t\t\t\t\t},\n\t\t\t\t\tTags: []ec2types.Tag{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey:   aws.String(fmt.Sprintf(\"kubernetes.io/cluster/%s\", options.FromContext(ctx).ClusterName)),\n\t\t\t\t\t\t\tValue: aws.String(\"owned\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey:   aws.String(karpv1.NodePoolLabelKey),\n\t\t\t\t\t\t\tValue: aws.String(\"default\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey:   aws.String(v1.LabelNodeClass),\n\t\t\t\t\t\t\tValue: aws.String(\"default\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey:   aws.String(v1.EKSClusterNameTagKey),\n\t\t\t\t\t\t\tValue: aws.String(options.FromContext(ctx).ClusterName),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tPrivateDnsName: aws.String(fake.PrivateDNSName()),\n\t\t\t\t\tPlacement: &ec2types.Placement{\n\t\t\t\t\t\tAvailabilityZone: aws.String(fake.DefaultRegion),\n\t\t\t\t\t},\n\t\t\t\t\t// Launch time was 1m ago\n\t\t\t\t\tLaunchTime:   aws.Time(time.Now().Add(-time.Minute)),\n\t\t\t\t\tInstanceId:   aws.String(instanceID),\n\t\t\t\t\tInstanceType: \"m5.large\",\n\t\t\t\t},\n\t\t\t)\n\t\t\tids = append(ids, instanceID)\n\t\t}\n\t\tExpectSingletonReconciled(ctx, garbageCollectionController)\n\n\t\twg := sync.WaitGroup{}\n\t\tfor _, id := range ids {\n\t\t\twg.Go(func() {\n\t\t\t\tdefer GinkgoRecover()\n\t\t\t\tawsEnv.InstanceCache.Flush()\n\t\t\t\t_, err := cloudProvider.Get(ctx, fake.ProviderID(id))\n\t\t\t\tExpect(err).To(HaveOccurred())\n\t\t\t\tExpect(karpcloudprovider.IsNodeClaimNotFoundError(err)).To(BeTrue())\n\t\t\t})\n\t\t}\n\t\twg.Wait()\n\t})\n\tIt(\"should not delete all instances if they all have NodeClaim owners\", func() {\n\t\t// Generate 100 instances that have different instanceIDs\n\t\tvar ids []string\n\t\tvar nodeClaims []*karpv1.NodeClaim\n\t\tfor i := 0; i < 100; i++ {\n\t\t\tinstanceID := fake.InstanceID()\n\t\t\tawsEnv.EC2API.Instances.Store(\n\t\t\t\tinstanceID,\n\t\t\t\tec2types.Instance{\n\t\t\t\t\tState: &ec2types.InstanceState{\n\t\t\t\t\t\tName: ec2types.InstanceStateNameRunning,\n\t\t\t\t\t},\n\t\t\t\t\tTags: []ec2types.Tag{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey:   aws.String(fmt.Sprintf(\"kubernetes.io/cluster/%s\", options.FromContext(ctx).ClusterName)),\n\t\t\t\t\t\t\tValue: aws.String(\"owned\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tPrivateDnsName: aws.String(fake.PrivateDNSName()),\n\t\t\t\t\tPlacement: &ec2types.Placement{\n\t\t\t\t\t\tAvailabilityZone: aws.String(fake.DefaultRegion),\n\t\t\t\t\t},\n\t\t\t\t\t// Launch time was 1m ago\n\t\t\t\t\tLaunchTime:   aws.Time(time.Now().Add(-time.Minute)),\n\t\t\t\t\tInstanceId:   aws.String(instanceID),\n\t\t\t\t\tInstanceType: \"m5.large\",\n\t\t\t\t},\n\t\t\t)\n\t\t\tnodeClaim := coretest.NodeClaim(karpv1.NodeClaim{\n\t\t\t\tSpec: karpv1.NodeClaimSpec{\n\t\t\t\t\tNodeClassRef: &karpv1.NodeClassReference{\n\t\t\t\t\t\tGroup: object.GVK(nodeClass).Group,\n\t\t\t\t\t\tKind:  object.GVK(nodeClass).Kind,\n\t\t\t\t\t\tName:  nodeClass.Name,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tStatus: karpv1.NodeClaimStatus{\n\t\t\t\t\tProviderID: fake.ProviderID(instanceID),\n\t\t\t\t},\n\t\t\t})\n\t\t\tExpectApplied(ctx, env.Client, nodeClaim)\n\t\t\tnodeClaims = append(nodeClaims, nodeClaim)\n\t\t\tids = append(ids, instanceID)\n\t\t}\n\t\tExpectSingletonReconciled(ctx, garbageCollectionController)\n\n\t\twg := sync.WaitGroup{}\n\t\tfor _, id := range ids {\n\t\t\twg.Go(func() {\n\t\t\t\tdefer GinkgoRecover()\n\t\t\t\t_, err := cloudProvider.Get(ctx, fake.ProviderID(id))\n\t\t\t\tExpect(err).ToNot(HaveOccurred())\n\t\t\t})\n\t\t}\n\t\twg.Wait()\n\n\t\tfor _, nodeClaim := range nodeClaims {\n\t\t\tExpectExists(ctx, env.Client, nodeClaim)\n\t\t}\n\t})\n\tIt(\"should not delete an instance if it is within the NodeClaim resolution window (1m)\", func() {\n\t\t// Launch time just happened\n\t\tinstance.LaunchTime = aws.Time(time.Now())\n\t\tawsEnv.EC2API.Instances.Store(aws.ToString(instance.InstanceId), *instance)\n\n\t\tExpectSingletonReconciled(ctx, garbageCollectionController)\n\t\t_, err := cloudProvider.Get(ctx, providerID)\n\t\tExpect(err).NotTo(HaveOccurred())\n\t})\n\tIt(\"should not delete an instance if it was not launched by a NodeClaim\", func() {\n\t\t// Remove the \"karpenter.sh/nodepool\" tag (this isn't launched by a machine)\n\t\tinstance.Tags = lo.Reject(instance.Tags, func(t ec2types.Tag, _ int) bool {\n\t\t\treturn aws.ToString(t.Key) == karpv1.NodePoolLabelKey\n\t\t})\n\n\t\t// Launch time was 1m ago\n\t\tinstance.LaunchTime = aws.Time(time.Now().Add(-time.Minute))\n\t\tawsEnv.EC2API.Instances.Store(aws.ToString(instance.InstanceId), *instance)\n\n\t\tExpectSingletonReconciled(ctx, garbageCollectionController)\n\t\t_, err := cloudProvider.Get(ctx, providerID)\n\t\tExpect(err).NotTo(HaveOccurred())\n\t})\n\tIt(\"should not delete the instance or node if it already has a NodeClaim that matches it\", func() {\n\t\t// Launch time was 1m ago\n\t\tinstance.LaunchTime = aws.Time(time.Now().Add(-time.Minute))\n\t\tawsEnv.EC2API.Instances.Store(aws.ToString(instance.InstanceId), *instance)\n\n\t\tnodeClaim := coretest.NodeClaim(karpv1.NodeClaim{\n\t\t\tSpec: karpv1.NodeClaimSpec{\n\t\t\t\tNodeClassRef: &karpv1.NodeClassReference{\n\t\t\t\t\tGroup: object.GVK(nodeClass).Group,\n\t\t\t\t\tKind:  object.GVK(nodeClass).Kind,\n\t\t\t\t\tName:  nodeClass.Name,\n\t\t\t\t},\n\t\t\t},\n\t\t\tStatus: karpv1.NodeClaimStatus{\n\t\t\t\tProviderID: providerID,\n\t\t\t},\n\t\t})\n\t\tnode := coretest.Node(coretest.NodeOptions{\n\t\t\tProviderID: providerID,\n\t\t})\n\t\tExpectApplied(ctx, env.Client, nodeClaim, node)\n\n\t\tExpectSingletonReconciled(ctx, garbageCollectionController)\n\t\t_, err := cloudProvider.Get(ctx, providerID)\n\t\tExpect(err).ToNot(HaveOccurred())\n\t\tExpectExists(ctx, env.Client, node)\n\t})\n\tIt(\"should not delete many instances or nodes if they already have NodeClaim owners that match it\", func() {\n\t\t// Generate 100 instances that have different instanceIDs that have NodeClaims\n\t\tvar ids []string\n\t\tvar nodes []*corev1.Node\n\t\tfor i := 0; i < 100; i++ {\n\t\t\tinstanceID := fake.InstanceID()\n\t\t\tawsEnv.EC2API.Instances.Store(\n\t\t\t\tinstanceID,\n\t\t\t\tec2types.Instance{\n\t\t\t\t\tState: &ec2types.InstanceState{\n\t\t\t\t\t\tName: ec2types.InstanceStateNameRunning,\n\t\t\t\t\t},\n\t\t\t\t\tTags: []ec2types.Tag{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey:   aws.String(fmt.Sprintf(\"kubernetes.io/cluster/%s\", options.FromContext(ctx).ClusterName)),\n\t\t\t\t\t\t\tValue: aws.String(\"owned\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey:   aws.String(karpv1.NodePoolLabelKey),\n\t\t\t\t\t\t\tValue: aws.String(\"default\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey:   aws.String(v1.EKSClusterNameTagKey),\n\t\t\t\t\t\t\tValue: aws.String(options.FromContext(ctx).ClusterName),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tPrivateDnsName: aws.String(fake.PrivateDNSName()),\n\t\t\t\t\tPlacement: &ec2types.Placement{\n\t\t\t\t\t\tAvailabilityZone: aws.String(fake.DefaultRegion),\n\t\t\t\t\t},\n\t\t\t\t\t// Launch time was 1m ago\n\t\t\t\t\tLaunchTime:   aws.Time(time.Now().Add(-time.Minute)),\n\t\t\t\t\tInstanceId:   aws.String(instanceID),\n\t\t\t\t\tInstanceType: \"m5.large\",\n\t\t\t\t},\n\t\t\t)\n\t\t\tnodeClaim := coretest.NodeClaim(karpv1.NodeClaim{\n\t\t\t\tSpec: karpv1.NodeClaimSpec{\n\t\t\t\t\tNodeClassRef: &karpv1.NodeClassReference{\n\t\t\t\t\t\tGroup: object.GVK(nodeClass).Group,\n\t\t\t\t\t\tKind:  object.GVK(nodeClass).Kind,\n\t\t\t\t\t\tName:  nodeClass.Name,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tStatus: karpv1.NodeClaimStatus{\n\t\t\t\t\tProviderID: fake.ProviderID(instanceID),\n\t\t\t\t},\n\t\t\t})\n\t\t\tnode := coretest.Node(coretest.NodeOptions{\n\t\t\t\tProviderID: fake.ProviderID(instanceID),\n\t\t\t})\n\t\t\tExpectApplied(ctx, env.Client, nodeClaim, node)\n\t\t\tids = append(ids, instanceID)\n\t\t\tnodes = append(nodes, node)\n\t\t}\n\t\tExpectSingletonReconciled(ctx, garbageCollectionController)\n\n\t\twg := sync.WaitGroup{}\n\t\tfor i := range ids {\n\t\t\twg.Go(func() {\n\t\t\t\tdefer GinkgoRecover()\n\n\t\t\t\t_, err := cloudProvider.Get(ctx, fake.ProviderID(ids[i]))\n\t\t\t\tExpect(err).ToNot(HaveOccurred())\n\t\t\t\tExpectExists(ctx, env.Client, nodes[i])\n\t\t\t})\n\t\t}\n\t\twg.Wait()\n\t})\n})\n"
  },
  {
    "path": "pkg/controllers/nodeclaim/tagging/controller.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage tagging\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"time\"\n\n\t\"k8s.io/apimachinery/pkg/api/equality\"\n\t\"k8s.io/klog/v2\"\n\tcontrollerruntime \"sigs.k8s.io/controller-runtime\"\n\t\"sigs.k8s.io/controller-runtime/pkg/builder\"\n\t\"sigs.k8s.io/controller-runtime/pkg/client\"\n\t\"sigs.k8s.io/controller-runtime/pkg/controller\"\n\t\"sigs.k8s.io/controller-runtime/pkg/log\"\n\t\"sigs.k8s.io/controller-runtime/pkg/manager\"\n\t\"sigs.k8s.io/controller-runtime/pkg/predicate\"\n\t\"sigs.k8s.io/controller-runtime/pkg/reconcile\"\n\t\"sigs.k8s.io/karpenter/pkg/operator/injection\"\n\t\"sigs.k8s.io/karpenter/pkg/utils/nodeclaim\"\n\n\t\"github.com/samber/lo\"\n\n\t\"github.com/awslabs/operatorpkg/reasonable\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/operator/options\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/instance\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/utils\"\n\n\tkarpv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n\t\"sigs.k8s.io/karpenter/pkg/cloudprovider\"\n)\n\ntype Controller struct {\n\tkubeClient       client.Client\n\tcloudProvider    cloudprovider.CloudProvider\n\tinstanceProvider instance.Provider\n}\n\nfunc NewController(kubeClient client.Client, cloudProvider cloudprovider.CloudProvider, instanceProvider instance.Provider) *Controller {\n\treturn &Controller{\n\t\tkubeClient:       kubeClient,\n\t\tcloudProvider:    cloudProvider,\n\t\tinstanceProvider: instanceProvider,\n\t}\n}\n\nfunc (c *Controller) Reconcile(ctx context.Context, nodeClaim *karpv1.NodeClaim) (reconcile.Result, error) {\n\tctx = injection.WithControllerName(ctx, \"nodeclaim.tagging\")\n\n\tstored := nodeClaim.DeepCopy()\n\tif !isTaggable(nodeClaim) {\n\t\treturn reconcile.Result{}, nil\n\t}\n\tctx = log.IntoContext(ctx, log.FromContext(ctx).WithValues(\"Node\", klog.KRef(\"\", nodeClaim.Status.NodeName), \"provider-id\", nodeClaim.Status.ProviderID))\n\tid, err := utils.ParseInstanceID(nodeClaim.Status.ProviderID)\n\tif err != nil {\n\t\t// We don't throw an error here since we don't want to retry until the ProviderID has been updated.\n\t\tlog.FromContext(ctx).Error(err, \"failed parsing instance id\")\n\t\treturn reconcile.Result{}, nil\n\t}\n\tif err = c.tagInstance(ctx, nodeClaim, id); err != nil {\n\t\treturn reconcile.Result{}, cloudprovider.IgnoreNodeClaimNotFoundError(err)\n\t}\n\tnodeClaim.Annotations = lo.Assign(nodeClaim.Annotations, map[string]string{\n\t\tv1.AnnotationInstanceTagged:                 \"true\",\n\t\tv1.AnnotationClusterNameTaggedCompatability: \"true\",\n\t})\n\tif !equality.Semantic.DeepEqual(nodeClaim, stored) {\n\t\tif err := c.kubeClient.Patch(ctx, nodeClaim, client.MergeFrom(stored)); err != nil {\n\t\t\treturn reconcile.Result{}, client.IgnoreNotFound(err)\n\t\t}\n\t}\n\treturn reconcile.Result{}, nil\n}\n\nfunc (c *Controller) Register(_ context.Context, m manager.Manager) error {\n\treturn controllerruntime.NewControllerManagedBy(m).\n\t\tNamed(\"nodeclaim.tagging\").\n\t\tFor(&karpv1.NodeClaim{}, builder.WithPredicates(nodeclaim.IsManagedPredicateFuncs(c.cloudProvider))).\n\t\tWithEventFilter(predicate.NewPredicateFuncs(func(o client.Object) bool {\n\t\t\treturn isTaggable(o.(*karpv1.NodeClaim))\n\t\t})).\n\t\t// Ok with using the default MaxConcurrentReconciles of 1 to avoid throttling from CreateTag write API\n\t\tWithOptions(controller.Options{\n\t\t\tRateLimiter: reasonable.RateLimiter(),\n\t\t}).\n\t\tComplete(reconcile.AsReconciler(m.GetClient(), c))\n}\n\nfunc (c *Controller) tagInstance(ctx context.Context, nc *karpv1.NodeClaim, id string) error {\n\ttags := map[string]string{\n\t\tv1.NameTagKey:           nc.Status.NodeName,\n\t\tv1.NodeClaimTagKey:      nc.Name,\n\t\tv1.EKSClusterNameTagKey: options.FromContext(ctx).ClusterName,\n\t}\n\n\t// Remove tags which have been already populated\n\tinstance, err := c.instanceProvider.Get(ctx, id, instance.SkipCache)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"tagging nodeclaim, %w\", err)\n\t}\n\ttags = lo.OmitByKeys(tags, lo.Keys(instance.Tags))\n\tif len(tags) == 0 {\n\t\treturn nil\n\t}\n\n\t// Ensures that no more than 1 CreateTags call is made per second. Rate limiting is required since CreateTags\n\t// shares a pool with other mutating calls (e.g. CreateFleet).\n\tdefer time.Sleep(time.Second)\n\tif err := c.instanceProvider.CreateTags(ctx, id, tags); err != nil {\n\t\treturn fmt.Errorf(\"tagging nodeclaim, %w\", err)\n\t}\n\treturn nil\n}\n\nfunc isTaggable(nc *karpv1.NodeClaim) bool {\n\t// Instance has already been tagged\n\tinstanceTagged := nc.Annotations[v1.AnnotationInstanceTagged]\n\tclusterNameTagged := nc.Annotations[v1.AnnotationClusterNameTaggedCompatability]\n\tif instanceTagged == \"true\" && clusterNameTagged == \"true\" {\n\t\treturn false\n\t}\n\t// Node name is not yet known\n\tif nc.Status.NodeName == \"\" {\n\t\treturn false\n\t}\n\t// NodeClaim is currently terminating\n\tif !nc.DeletionTimestamp.IsZero() {\n\t\treturn false\n\t}\n\treturn true\n}\n"
  },
  {
    "path": "pkg/controllers/nodeclaim/tagging/suite_test.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage tagging_test\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"testing\"\n\n\t\"sigs.k8s.io/karpenter/pkg/events\"\n\t\"sigs.k8s.io/karpenter/pkg/test/v1alpha1\"\n\n\t\"github.com/aws/aws-sdk-go-v2/aws\"\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\t\"github.com/samber/lo\"\n\tcorev1 \"k8s.io/apimachinery/pkg/apis/meta/v1\"\n\t\"k8s.io/client-go/tools/record\"\n\tkarpv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n\tcoretest \"sigs.k8s.io/karpenter/pkg/test\"\n\n\t\"github.com/aws/karpenter-provider-aws/pkg/apis\"\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/cloudprovider\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/controllers/nodeclaim/tagging\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/fake\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/operator/options\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/instance\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/test\"\n\n\tcoreoptions \"sigs.k8s.io/karpenter/pkg/operator/options\"\n\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n\t. \"sigs.k8s.io/karpenter/pkg/test/expectations\"\n\t. \"sigs.k8s.io/karpenter/pkg/utils/testing\"\n)\n\nvar ctx context.Context\nvar awsEnv *test.Environment\nvar env *coretest.Environment\nvar taggingController *tagging.Controller\n\nfunc TestAPIs(t *testing.T) {\n\tctx = TestContextWithLogger(t)\n\tRegisterFailHandler(Fail)\n\tRunSpecs(t, \"TaggingController\")\n}\n\nvar _ = BeforeSuite(func() {\n\tenv = coretest.NewEnvironment(coretest.WithCRDs(apis.CRDs...), coretest.WithCRDs(v1alpha1.CRDs...))\n\tctx = coreoptions.ToContext(ctx, coretest.Options(coretest.OptionsFields{FeatureGates: coretest.FeatureGates{ReservedCapacity: lo.ToPtr(true)}}))\n\tctx = options.ToContext(ctx, test.Options())\n\tawsEnv = test.NewEnvironment(ctx, env)\n\tcloudProvider := cloudprovider.New(awsEnv.InstanceTypesProvider, awsEnv.InstanceProvider, events.NewRecorder(&record.FakeRecorder{}),\n\t\tenv.Client, awsEnv.AMIProvider, awsEnv.SecurityGroupProvider, awsEnv.CapacityReservationProvider, awsEnv.InstanceTypeStore)\n\ttaggingController = tagging.NewController(env.Client, cloudProvider, awsEnv.InstanceProvider)\n})\nvar _ = AfterSuite(func() {\n\tExpect(env.Stop()).To(Succeed(), \"Failed to stop environment\")\n})\n\nvar _ = BeforeEach(func() {\n\tawsEnv.Reset()\n})\n\nvar _ = AfterEach(func() {\n\tExpectCleanedUp(ctx, env.Client)\n})\n\nvar _ = Describe(\"TaggingController\", func() {\n\tvar ec2Instance ec2types.Instance\n\n\tBeforeEach(func() {\n\t\tec2Instance = ec2types.Instance{\n\t\t\tState: &ec2types.InstanceState{\n\t\t\t\tName: ec2types.InstanceStateNameRunning,\n\t\t\t},\n\t\t\tTags: []ec2types.Tag{\n\t\t\t\t{\n\t\t\t\t\tKey:   aws.String(fmt.Sprintf(\"kubernetes.io/cluster/%s\", options.FromContext(ctx).ClusterName)),\n\t\t\t\t\tValue: aws.String(\"owned\"),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tKey:   aws.String(karpv1.NodePoolLabelKey),\n\t\t\t\t\tValue: aws.String(\"default\"),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tKey:   aws.String(v1.EKSClusterNameTagKey),\n\t\t\t\t\tValue: aws.String(options.FromContext(ctx).ClusterName),\n\t\t\t\t},\n\t\t\t},\n\t\t\tPrivateDnsName: aws.String(fake.PrivateDNSName()),\n\t\t\tPlacement: &ec2types.Placement{\n\t\t\t\tAvailabilityZone: aws.String(fake.DefaultRegion),\n\t\t\t},\n\t\t\tInstanceId:   aws.String(fake.InstanceID()),\n\t\t\tInstanceType: \"m5.large\",\n\t\t}\n\n\t\tawsEnv.EC2API.Instances.Store(aws.ToString(ec2Instance.InstanceId), ec2Instance)\n\t})\n\n\tIt(\"shouldn't tag instances without a Node\", func() {\n\t\tnodeClaim := coretest.NodeClaim(karpv1.NodeClaim{\n\t\t\tStatus: karpv1.NodeClaimStatus{\n\t\t\t\tProviderID: fake.ProviderID(*ec2Instance.InstanceId),\n\t\t\t},\n\t\t})\n\n\t\tExpectApplied(ctx, env.Client, nodeClaim)\n\t\tExpectObjectReconciled(ctx, env.Client, taggingController, nodeClaim)\n\t\tExpect(nodeClaim.Annotations).To(Not(HaveKey(v1.AnnotationInstanceTagged)))\n\t\tExpect(lo.ContainsBy(ec2Instance.Tags, func(tag ec2types.Tag) bool {\n\t\t\treturn *tag.Key == v1.NameTagKey\n\t\t})).To(BeFalse())\n\t})\n\n\tIt(\"shouldn't tag nodeclaim with a malformed provderID\", func() {\n\t\tnodeClaim := coretest.NodeClaim(karpv1.NodeClaim{\n\t\t\tStatus: karpv1.NodeClaimStatus{\n\t\t\t\tProviderID: \"Bad providerID\",\n\t\t\t\tNodeName:   \"default\",\n\t\t\t},\n\t\t})\n\n\t\tExpectApplied(ctx, env.Client, nodeClaim)\n\t\tExpectObjectReconciled(ctx, env.Client, taggingController, nodeClaim)\n\t\tExpect(nodeClaim.Annotations).To(Not(HaveKey(v1.AnnotationInstanceTagged)))\n\t\tExpect(lo.ContainsBy(ec2Instance.Tags, func(tag ec2types.Tag) bool {\n\t\t\treturn tag.Key == &v1.NameTagKey\n\t\t})).To(BeFalse())\n\t})\n\n\tIt(\"should gracefully handle missing NodeClaim\", func() {\n\t\tnodeClaim := coretest.NodeClaim(karpv1.NodeClaim{\n\t\t\tStatus: karpv1.NodeClaimStatus{\n\t\t\t\tProviderID: fake.ProviderID(*ec2Instance.InstanceId),\n\t\t\t\tNodeName:   \"default\",\n\t\t\t},\n\t\t})\n\n\t\tExpectApplied(ctx, env.Client, nodeClaim)\n\t\tExpectDeleted(ctx, env.Client, nodeClaim)\n\t\tExpectObjectReconciled(ctx, env.Client, taggingController, nodeClaim)\n\t})\n\n\tIt(\"should gracefully handle missing instance\", func() {\n\t\tnodeClaim := coretest.NodeClaim(karpv1.NodeClaim{\n\t\t\tStatus: karpv1.NodeClaimStatus{\n\t\t\t\tProviderID: fake.ProviderID(*ec2Instance.InstanceId),\n\t\t\t\tNodeName:   \"default\",\n\t\t\t},\n\t\t})\n\n\t\tExpectApplied(ctx, env.Client, nodeClaim)\n\t\tawsEnv.EC2API.Instances.Delete(*ec2Instance.InstanceId)\n\t\tExpectObjectReconciled(ctx, env.Client, taggingController, nodeClaim)\n\t\tExpect(nodeClaim.Annotations).To(Not(HaveKey(v1.AnnotationInstanceTagged)))\n\t})\n\n\tIt(\"shouldn't tag nodeclaim with deletion timestamp set\", func() {\n\t\tnodeClaim := coretest.NodeClaim(karpv1.NodeClaim{\n\t\t\tStatus: karpv1.NodeClaimStatus{\n\t\t\t\tProviderID: fake.ProviderID(*ec2Instance.InstanceId),\n\t\t\t\tNodeName:   \"default\",\n\t\t\t},\n\t\t\tObjectMeta: corev1.ObjectMeta{\n\t\t\t\tFinalizers: []string{\"testing/finalizer\"},\n\t\t\t},\n\t\t})\n\n\t\tExpectApplied(ctx, env.Client, nodeClaim)\n\t\tExpect(env.Client.Delete(ctx, nodeClaim)).To(Succeed())\n\t\tExpectObjectReconciled(ctx, env.Client, taggingController, nodeClaim)\n\t\tExpect(nodeClaim.Annotations).To(Not(HaveKey(v1.AnnotationInstanceTagged)))\n\t\tExpect(lo.ContainsBy(ec2Instance.Tags, func(tag ec2types.Tag) bool {\n\t\t\treturn tag.Key == &v1.NameTagKey\n\t\t})).To(BeFalse())\n\t})\n\n\tDescribeTable(\n\t\t\"should tag taggable instances\",\n\t\tfunc(customTags ...string) {\n\t\t\tnodeClaim := coretest.NodeClaim(karpv1.NodeClaim{\n\t\t\t\tStatus: karpv1.NodeClaimStatus{\n\t\t\t\t\tProviderID: fake.ProviderID(*ec2Instance.InstanceId),\n\t\t\t\t\tNodeName:   \"default\",\n\t\t\t\t},\n\t\t\t})\n\n\t\t\tfor _, tag := range customTags {\n\t\t\t\tec2Instance.Tags = append(ec2Instance.Tags, ec2types.Tag{\n\t\t\t\t\tKey:   aws.String(tag),\n\t\t\t\t\tValue: aws.String(\"custom-tag\"),\n\t\t\t\t})\n\t\t\t}\n\t\t\tawsEnv.EC2API.Instances.Store(aws.ToString(ec2Instance.InstanceId), ec2Instance)\n\n\t\t\tExpectApplied(ctx, env.Client, nodeClaim)\n\t\t\tExpectObjectReconciled(ctx, env.Client, taggingController, nodeClaim)\n\t\t\tnodeClaim = ExpectExists(ctx, env.Client, nodeClaim)\n\t\t\tExpect(nodeClaim.Annotations).To(HaveKey(v1.AnnotationInstanceTagged))\n\n\t\t\texpectedTags := map[string]string{\n\t\t\t\tv1.NameTagKey:           nodeClaim.Status.NodeName,\n\t\t\t\tv1.NodeClaimTagKey:      nodeClaim.Name,\n\t\t\t\tv1.EKSClusterNameTagKey: options.FromContext(ctx).ClusterName,\n\t\t\t}\n\t\t\tec2Instance := lo.Must(awsEnv.EC2API.Instances.Load(*ec2Instance.InstanceId)).(ec2types.Instance)\n\t\t\tinstanceTags := instance.NewInstance(ctx, ec2Instance).Tags\n\n\t\t\tfor tag, value := range expectedTags {\n\t\t\t\tif lo.Contains(customTags, tag) {\n\t\t\t\t\tvalue = \"custom-tag\"\n\t\t\t\t}\n\t\t\t\tExpect(instanceTags).To(HaveKeyWithValue(tag, value))\n\t\t\t}\n\t\t},\n\t\tEntry(\"with the karpenter.sh/nodeclaim tag\", v1.NameTagKey, v1.EKSClusterNameTagKey),\n\t\tEntry(\"with the eks:eks-cluster-name tag\", v1.NameTagKey, v1.NodeClaimTagKey),\n\t\tEntry(\"with the Name tag\", v1.NodeClaimTagKey, v1.EKSClusterNameTagKey),\n\t\tEntry(\"with the karpenter.sh/nodeclaim and eks:eks-cluster-name tags\", v1.NameTagKey),\n\t\tEntry(\"with the Name and eks:eks-cluster-name tags\", v1.NodeClaimTagKey),\n\t\tEntry(\"with the karpenter.sh/nodeclaim and Name tags\", v1.EKSClusterNameTagKey),\n\t\tEntry(\"with nothing to tag\", v1.NodeClaimTagKey, v1.EKSClusterNameTagKey, v1.NameTagKey),\n\t)\n})\n"
  },
  {
    "path": "pkg/controllers/nodeclass/ami.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage nodeclass\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"sort\"\n\t\"time\"\n\n\t\"github.com/samber/lo\"\n\tcorev1 \"k8s.io/api/core/v1\"\n\t\"sigs.k8s.io/controller-runtime/pkg/log\"\n\t\"sigs.k8s.io/controller-runtime/pkg/reconcile\"\n\n\tkarpv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n\t\"sigs.k8s.io/karpenter/pkg/utils/pretty\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/amifamily\"\n)\n\ntype AMI struct {\n\tamiProvider amifamily.Provider\n\tcm          *pretty.ChangeMonitor\n}\n\nfunc NewAMIReconciler(provider amifamily.Provider) *AMI {\n\treturn &AMI{\n\t\tamiProvider: provider,\n\t\tcm:          pretty.NewChangeMonitor(),\n\t}\n}\n\nfunc (a *AMI) Reconcile(ctx context.Context, nodeClass *v1.EC2NodeClass) (reconcile.Result, error) {\n\tamis, err := a.amiProvider.List(ctx, nodeClass)\n\tif err != nil {\n\t\tif amifamily.IsAl2DeprecationError(err) || amifamily.IsWS2025UnsupportedVersionError(err) {\n\t\t\tnodeClass.StatusConditions().SetFalse(v1.ConditionTypeAMIsReady, \"UnsupportedAlias\", err.Error())\n\t\t\treturn reconcile.Result{}, reconcile.TerminalError(fmt.Errorf(\"getting amis, %w\", err))\n\t\t}\n\t\treturn reconcile.Result{}, fmt.Errorf(\"getting amis, %w\", err)\n\t}\n\tif len(amis) == 0 {\n\t\tnodeClass.Status.AMIs = nil\n\t\tnodeClass.StatusConditions().SetFalse(v1.ConditionTypeAMIsReady, \"AMINotFound\", \"AMISelector did not match any AMIs\")\n\t\t// If users have omitted the necessary tags from their AMIs and later add them, we need to reprocess the information.\n\t\t// Returning 'ok' in this case means that the nodeclass will remain in an unready state until the component is restarted.\n\t\treturn reconcile.Result{RequeueAfter: time.Minute}, nil\n\t}\n\tif uniqueAMIs := lo.Uniq(lo.Map(amis, func(a amifamily.AMI, _ int) string {\n\t\treturn a.AmiID\n\t})); a.cm.HasChanged(fmt.Sprintf(\"amis/%s\", nodeClass.Name), uniqueAMIs) {\n\t\tlog.FromContext(ctx).WithValues(\"ids\", uniqueAMIs).V(1).Info(\"discovered amis\")\n\t}\n\n\tnodeClass.Status.AMIs = lo.Map(amis, func(ami amifamily.AMI, _ int) v1.AMI {\n\t\treqs := lo.Map(ami.Requirements.NodeSelectorRequirements(), func(item karpv1.NodeSelectorRequirementWithMinValues, _ int) corev1.NodeSelectorRequirement {\n\t\t\treturn corev1.NodeSelectorRequirement{\n\t\t\t\tKey:      item.Key,\n\t\t\t\tValues:   item.Values,\n\t\t\t\tOperator: item.Operator,\n\t\t\t}\n\t\t})\n\n\t\tsort.Slice(reqs, func(i, j int) bool {\n\t\t\tif len(reqs[i].Key) != len(reqs[j].Key) {\n\t\t\t\treturn len(reqs[i].Key) < len(reqs[j].Key)\n\t\t\t}\n\t\t\treturn reqs[i].Key < reqs[j].Key\n\t\t})\n\t\treturn v1.AMI{\n\t\t\tName:         ami.Name,\n\t\t\tID:           ami.AmiID,\n\t\t\tDeprecated:   ami.Deprecated,\n\t\t\tRequirements: reqs,\n\t\t}\n\t})\n\n\tnodeClass.StatusConditions().SetTrue(v1.ConditionTypeAMIsReady)\n\treturn reconcile.Result{RequeueAfter: 5 * time.Minute}, nil\n}\n"
  },
  {
    "path": "pkg/controllers/nodeclass/ami_test.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage nodeclass_test\n\nimport (\n\t\"fmt\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go-v2/aws\"\n\t\"github.com/aws/aws-sdk-go-v2/service/ec2\"\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\t\"github.com/samber/lo\"\n\tcorev1 \"k8s.io/api/core/v1\"\n\t\"k8s.io/apimachinery/pkg/util/version\"\n\tkarpv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/test\"\n\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n\t. \"sigs.k8s.io/karpenter/pkg/test/expectations\"\n)\n\nvar _ = Describe(\"NodeClass AMI Status Controller\", func() {\n\tvar k8sVersion string\n\tBeforeEach(func() {\n\t\tk8sVersion = awsEnv.VersionProvider.Get(ctx)\n\t\tnodeClass = test.EC2NodeClass(v1.EC2NodeClass{\n\t\t\tSpec: v1.EC2NodeClassSpec{\n\t\t\t\tSubnetSelectorTerms: []v1.SubnetSelectorTerm{\n\t\t\t\t\t{\n\t\t\t\t\t\tTags: map[string]string{\"*\": \"*\"},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tSecurityGroupSelectorTerms: []v1.SecurityGroupSelectorTerm{\n\t\t\t\t\t{\n\t\t\t\t\t\tTags: map[string]string{\"*\": \"*\"},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tAMIFamily: lo.ToPtr(v1.AMIFamilyCustom),\n\t\t\t\tAMISelectorTerms: []v1.AMISelectorTerm{\n\t\t\t\t\t{\n\t\t\t\t\t\tTags: map[string]string{\"*\": \"*\"},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tawsEnv.EC2API.DescribeImagesOutput.Set(&ec2.DescribeImagesOutput{\n\t\t\tImages: []ec2types.Image{\n\t\t\t\t{\n\t\t\t\t\tName:         aws.String(\"amd64-standard\"),\n\t\t\t\t\tImageId:      aws.String(\"ami-amd64-standard\"),\n\t\t\t\t\tCreationDate: aws.String(time.Now().Format(time.RFC3339)),\n\t\t\t\t\tArchitecture: \"x86_64\",\n\t\t\t\t\tTags: []ec2types.Tag{\n\t\t\t\t\t\t{Key: aws.String(\"Name\"), Value: aws.String(\"amd64-standard\")},\n\t\t\t\t\t\t{Key: aws.String(\"foo\"), Value: aws.String(\"bar\")},\n\t\t\t\t\t},\n\t\t\t\t\tState: ec2types.ImageStateAvailable,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tName:         aws.String(\"amd64-standard-new\"),\n\t\t\t\t\tImageId:      aws.String(\"ami-amd64-standard-new\"),\n\t\t\t\t\tCreationDate: aws.String(time.Now().Add(time.Minute).Format(time.RFC3339)),\n\t\t\t\t\tArchitecture: \"x86_64\",\n\t\t\t\t\tTags: []ec2types.Tag{\n\t\t\t\t\t\t{Key: aws.String(\"Name\"), Value: aws.String(\"amd64-standard\")},\n\t\t\t\t\t\t{Key: aws.String(\"foo\"), Value: aws.String(\"bar\")},\n\t\t\t\t\t},\n\t\t\t\t\tState: ec2types.ImageStateAvailable,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tName:         aws.String(\"amd64-nvidia\"),\n\t\t\t\t\tImageId:      aws.String(\"ami-amd64-nvidia\"),\n\t\t\t\t\tCreationDate: aws.String(time.Now().Format(time.RFC3339)),\n\t\t\t\t\tArchitecture: \"x86_64\",\n\t\t\t\t\tTags: []ec2types.Tag{\n\t\t\t\t\t\t{Key: aws.String(\"Name\"), Value: aws.String(\"amd64-nvidia\")},\n\t\t\t\t\t\t{Key: aws.String(\"foo\"), Value: aws.String(\"bar\")},\n\t\t\t\t\t},\n\t\t\t\t\tState: ec2types.ImageStateAvailable,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tName:         aws.String(\"amd64-neuron\"),\n\t\t\t\t\tImageId:      aws.String(\"ami-amd64-neuron\"),\n\t\t\t\t\tCreationDate: aws.String(time.Now().Format(time.RFC3339)),\n\t\t\t\t\tArchitecture: \"x86_64\",\n\t\t\t\t\tTags: []ec2types.Tag{\n\t\t\t\t\t\t{Key: aws.String(\"Name\"), Value: aws.String(\"amd64-neuron\")},\n\t\t\t\t\t\t{Key: aws.String(\"foo\"), Value: aws.String(\"bar\")},\n\t\t\t\t\t},\n\t\t\t\t\tState: ec2types.ImageStateAvailable,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tName:         aws.String(\"arm64-standard\"),\n\t\t\t\t\tImageId:      aws.String(\"ami-arm64-standard\"),\n\t\t\t\t\tCreationDate: aws.String(time.Now().Format(time.RFC3339)),\n\t\t\t\t\tArchitecture: \"arm64\",\n\t\t\t\t\tTags: []ec2types.Tag{\n\t\t\t\t\t\t{Key: aws.String(\"Name\"), Value: aws.String(\"arm64-standard\")},\n\t\t\t\t\t\t{Key: aws.String(\"foo\"), Value: aws.String(\"bar\")},\n\t\t\t\t\t},\n\t\t\t\t\tState: ec2types.ImageStateAvailable,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tName:         aws.String(\"arm64-nvidia\"),\n\t\t\t\t\tImageId:      aws.String(\"ami-arm64-nvidia\"),\n\t\t\t\t\tCreationDate: aws.String(time.Now().Format(time.RFC3339)),\n\t\t\t\t\tArchitecture: \"arm64\",\n\t\t\t\t\tTags: []ec2types.Tag{\n\t\t\t\t\t\t{Key: aws.String(\"Name\"), Value: aws.String(\"arm64-nvidia\")},\n\t\t\t\t\t\t{Key: aws.String(\"foo\"), Value: aws.String(\"bar\")},\n\t\t\t\t\t},\n\t\t\t\t\tState: ec2types.ImageStateAvailable,\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t})\n\tContext(\"Aliases\", func() {\n\t\tIt(\"Should resolve all AMIs with correct requirements for AL2023\", func() {\n\t\t\tawsEnv.SSMAPI.Parameters = map[string]string{\n\t\t\t\tfmt.Sprintf(\"/aws/service/eks/optimized-ami/%s/amazon-linux-2023/x86_64/standard/recommended/image_id\", k8sVersion): \"ami-amd64-standard\",\n\t\t\t\tfmt.Sprintf(\"/aws/service/eks/optimized-ami/%s/amazon-linux-2023/x86_64/nvidia/recommended/image_id\", k8sVersion):   \"ami-amd64-nvidia\",\n\t\t\t\tfmt.Sprintf(\"/aws/service/eks/optimized-ami/%s/amazon-linux-2023/x86_64/neuron/recommended/image_id\", k8sVersion):   \"ami-amd64-neuron\",\n\t\t\t\tfmt.Sprintf(\"/aws/service/eks/optimized-ami/%s/amazon-linux-2023/arm64/standard/recommended/image_id\", k8sVersion):  \"ami-arm64-standard\",\n\t\t\t\tfmt.Sprintf(\"/aws/service/eks/optimized-ami/%s/amazon-linux-2023/arm64/nvidia/recommended/image_id\", k8sVersion):    \"ami-arm64-nvidia\",\n\t\t\t}\n\t\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{Alias: \"al2023@latest\"}}\n\t\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\t\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\n\t\t\tExpect(len(nodeClass.Status.AMIs)).To(Equal(5))\n\t\t\tExpect(nodeClass.Status.AMIs).To(ContainElements([]v1.AMI{\n\t\t\t\t{\n\t\t\t\t\tName: \"amd64-standard\",\n\t\t\t\t\tID:   \"ami-amd64-standard\",\n\t\t\t\t\tRequirements: []corev1.NodeSelectorRequirement{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey:      corev1.LabelArchStable,\n\t\t\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\t\t\tValues:   []string{karpv1.ArchitectureAmd64},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey:      v1.LabelInstanceGPUCount,\n\t\t\t\t\t\t\tOperator: corev1.NodeSelectorOpDoesNotExist,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey:      v1.LabelInstanceAcceleratorCount,\n\t\t\t\t\t\t\tOperator: corev1.NodeSelectorOpDoesNotExist,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tName: \"amd64-nvidia\",\n\t\t\t\t\tID:   \"ami-amd64-nvidia\",\n\t\t\t\t\tRequirements: []corev1.NodeSelectorRequirement{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey:      corev1.LabelArchStable,\n\t\t\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\t\t\tValues:   []string{karpv1.ArchitectureAmd64},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey:      v1.LabelInstanceGPUCount,\n\t\t\t\t\t\t\tOperator: corev1.NodeSelectorOpExists,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tName: \"amd64-neuron\",\n\t\t\t\t\tID:   \"ami-amd64-neuron\",\n\t\t\t\t\tRequirements: []corev1.NodeSelectorRequirement{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey:      corev1.LabelArchStable,\n\t\t\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\t\t\tValues:   []string{karpv1.ArchitectureAmd64},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey:      v1.LabelInstanceAcceleratorCount,\n\t\t\t\t\t\t\tOperator: corev1.NodeSelectorOpExists,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tName: \"arm64-standard\",\n\t\t\t\t\tID:   \"ami-arm64-standard\",\n\t\t\t\t\tRequirements: []corev1.NodeSelectorRequirement{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey:      corev1.LabelArchStable,\n\t\t\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\t\t\tValues:   []string{karpv1.ArchitectureArm64},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey:      v1.LabelInstanceGPUCount,\n\t\t\t\t\t\t\tOperator: corev1.NodeSelectorOpDoesNotExist,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey:      v1.LabelInstanceAcceleratorCount,\n\t\t\t\t\t\t\tOperator: corev1.NodeSelectorOpDoesNotExist,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tName: \"arm64-nvidia\",\n\t\t\t\t\tID:   \"ami-arm64-nvidia\",\n\t\t\t\t\tRequirements: []corev1.NodeSelectorRequirement{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey:      corev1.LabelArchStable,\n\t\t\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\t\t\tValues:   []string{karpv1.ArchitectureArm64},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey:      v1.LabelInstanceGPUCount,\n\t\t\t\t\t\t\tOperator: corev1.NodeSelectorOpExists,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}))\n\t\t\tExpect(nodeClass.StatusConditions().IsTrue(v1.ConditionTypeAMIsReady)).To(BeTrue())\n\t\t})\n\t\tIt(\"Should resolve all AMIs with correct requirements for AL2\", func() {\n\t\t\tif version.MustParseGeneric(k8sVersion).Minor() > 32 {\n\t\t\t\tSkip(\"AL2 is not supported on versions > 1.32\")\n\t\t\t}\n\t\t\tawsEnv.SSMAPI.Parameters = map[string]string{\n\t\t\t\tfmt.Sprintf(\"/aws/service/eks/optimized-ami/%s/amazon-linux-2/recommended/image_id\", k8sVersion):       \"ami-amd64-standard\",\n\t\t\t\tfmt.Sprintf(\"/aws/service/eks/optimized-ami/%s/amazon-linux-2-gpu/recommended/image_id\", k8sVersion):   \"ami-amd64-nvidia\",\n\t\t\t\tfmt.Sprintf(\"/aws/service/eks/optimized-ami/%s/amazon-linux-2-arm64/recommended/image_id\", k8sVersion): \"ami-arm64-standard\",\n\t\t\t}\n\t\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{Alias: \"al2@latest\"}}\n\t\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\t\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\n\t\t\tExpect(len(nodeClass.Status.AMIs)).To(Equal(4))\n\t\t\tExpect(nodeClass.Status.AMIs).To(ContainElements([]v1.AMI{\n\t\t\t\t{\n\t\t\t\t\tName: \"amd64-standard\",\n\t\t\t\t\tID:   \"ami-amd64-standard\",\n\t\t\t\t\tRequirements: []corev1.NodeSelectorRequirement{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey:      corev1.LabelArchStable,\n\t\t\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\t\t\tValues:   []string{karpv1.ArchitectureAmd64},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey:      v1.LabelInstanceGPUCount,\n\t\t\t\t\t\t\tOperator: corev1.NodeSelectorOpDoesNotExist,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey:      v1.LabelInstanceAcceleratorCount,\n\t\t\t\t\t\t\tOperator: corev1.NodeSelectorOpDoesNotExist,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tName: \"amd64-nvidia\",\n\t\t\t\t\tID:   \"ami-amd64-nvidia\",\n\t\t\t\t\tRequirements: []corev1.NodeSelectorRequirement{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey:      corev1.LabelArchStable,\n\t\t\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\t\t\tValues:   []string{karpv1.ArchitectureAmd64},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey:      v1.LabelInstanceGPUCount,\n\t\t\t\t\t\t\tOperator: corev1.NodeSelectorOpExists,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t// Note: AL2 uses the same AMI for nvidia and neuron, we use the nvidia AMI here\n\t\t\t\t{\n\t\t\t\t\tName: \"amd64-nvidia\",\n\t\t\t\t\tID:   \"ami-amd64-nvidia\",\n\t\t\t\t\tRequirements: []corev1.NodeSelectorRequirement{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey:      corev1.LabelArchStable,\n\t\t\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\t\t\tValues:   []string{karpv1.ArchitectureAmd64},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey:      v1.LabelInstanceAcceleratorCount,\n\t\t\t\t\t\t\tOperator: corev1.NodeSelectorOpExists,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tName: \"arm64-standard\",\n\t\t\t\t\tID:   \"ami-arm64-standard\",\n\t\t\t\t\tRequirements: []corev1.NodeSelectorRequirement{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey:      corev1.LabelArchStable,\n\t\t\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\t\t\tValues:   []string{karpv1.ArchitectureArm64},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey:      v1.LabelInstanceGPUCount,\n\t\t\t\t\t\t\tOperator: corev1.NodeSelectorOpDoesNotExist,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey:      v1.LabelInstanceAcceleratorCount,\n\t\t\t\t\t\t\tOperator: corev1.NodeSelectorOpDoesNotExist,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}))\n\t\t\tExpect(nodeClass.StatusConditions().IsTrue(v1.ConditionTypeAMIsReady)).To(BeTrue())\n\t\t})\n\t\tIt(\"Should resolve all AMIs with correct requirements for Bottlerocket\", func() {\n\t\t\tawsEnv.SSMAPI.Parameters = map[string]string{\n\t\t\t\tfmt.Sprintf(\"/aws/service/bottlerocket/aws-k8s-%s/x86_64/latest/image_id\", k8sVersion):        \"ami-amd64-standard\",\n\t\t\t\tfmt.Sprintf(\"/aws/service/bottlerocket/aws-k8s-%s/arm64/latest/image_id\", k8sVersion):         \"ami-arm64-standard\",\n\t\t\t\tfmt.Sprintf(\"/aws/service/bottlerocket/aws-k8s-%s-nvidia/x86_64/latest/image_id\", k8sVersion): \"ami-amd64-nvidia\",\n\t\t\t\tfmt.Sprintf(\"/aws/service/bottlerocket/aws-k8s-%s-nvidia/arm64/latest/image_id\", k8sVersion):  \"ami-arm64-nvidia\",\n\t\t\t}\n\t\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{Alias: \"bottlerocket@latest\"}}\n\t\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\t\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\n\t\t\tExpect(len(nodeClass.Status.AMIs)).To(Equal(5))\n\t\t\tExpect(nodeClass.Status.AMIs).To(ContainElements([]v1.AMI{\n\t\t\t\t{\n\t\t\t\t\tName: \"amd64-standard\",\n\t\t\t\t\tID:   \"ami-amd64-standard\",\n\t\t\t\t\tRequirements: []corev1.NodeSelectorRequirement{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey:      corev1.LabelArchStable,\n\t\t\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\t\t\tValues:   []string{karpv1.ArchitectureAmd64},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey:      v1.LabelInstanceGPUCount,\n\t\t\t\t\t\t\tOperator: corev1.NodeSelectorOpDoesNotExist,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey:      v1.LabelInstanceAcceleratorCount,\n\t\t\t\t\t\t\tOperator: corev1.NodeSelectorOpDoesNotExist,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tName: \"arm64-standard\",\n\t\t\t\t\tID:   \"ami-arm64-standard\",\n\t\t\t\t\tRequirements: []corev1.NodeSelectorRequirement{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey:      corev1.LabelArchStable,\n\t\t\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\t\t\tValues:   []string{karpv1.ArchitectureArm64},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey:      v1.LabelInstanceGPUCount,\n\t\t\t\t\t\t\tOperator: corev1.NodeSelectorOpDoesNotExist,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey:      v1.LabelInstanceAcceleratorCount,\n\t\t\t\t\t\t\tOperator: corev1.NodeSelectorOpDoesNotExist,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t// Note: Bottlerocket uses the same AMI for standard and neuron\n\t\t\t\t{\n\t\t\t\t\tName: \"amd64-standard\",\n\t\t\t\t\tID:   \"ami-amd64-standard\",\n\t\t\t\t\tRequirements: []corev1.NodeSelectorRequirement{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey:      corev1.LabelArchStable,\n\t\t\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\t\t\tValues:   []string{karpv1.ArchitectureAmd64},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey:      v1.LabelInstanceAcceleratorCount,\n\t\t\t\t\t\t\tOperator: corev1.NodeSelectorOpExists,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tName: \"amd64-nvidia\",\n\t\t\t\t\tID:   \"ami-amd64-nvidia\",\n\t\t\t\t\tRequirements: []corev1.NodeSelectorRequirement{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey:      corev1.LabelArchStable,\n\t\t\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\t\t\tValues:   []string{karpv1.ArchitectureAmd64},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey:      v1.LabelInstanceGPUCount,\n\t\t\t\t\t\t\tOperator: corev1.NodeSelectorOpExists,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tName: \"arm64-nvidia\",\n\t\t\t\t\tID:   \"ami-arm64-nvidia\",\n\t\t\t\t\tRequirements: []corev1.NodeSelectorRequirement{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey:      corev1.LabelArchStable,\n\t\t\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\t\t\tValues:   []string{karpv1.ArchitectureArm64},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey:      v1.LabelInstanceGPUCount,\n\t\t\t\t\t\t\tOperator: corev1.NodeSelectorOpExists,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}))\n\t\t\tExpect(nodeClass.StatusConditions().IsTrue(v1.ConditionTypeAMIsReady)).To(BeTrue())\n\t\t})\n\t\tIt(\"Should resolve all AMIs with correct requirements for Windows2019\", func() {\n\t\t\tawsEnv.SSMAPI.Parameters = map[string]string{\n\t\t\t\tfmt.Sprintf(\"/aws/service/ami-windows-latest/Windows_Server-2019-English-Core-EKS_Optimized-%s/image_id\", k8sVersion): \"ami-amd64-standard\",\n\t\t\t}\n\t\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{Alias: \"windows2019@latest\"}}\n\t\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\t\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\n\t\t\tExpect(len(nodeClass.Status.AMIs)).To(Equal(1))\n\t\t\tExpect(nodeClass.Status.AMIs).To(ContainElements([]v1.AMI{\n\t\t\t\t{\n\t\t\t\t\tName: \"amd64-standard\",\n\t\t\t\t\tID:   \"ami-amd64-standard\",\n\t\t\t\t\tRequirements: []corev1.NodeSelectorRequirement{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey:      corev1.LabelOSStable,\n\t\t\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\t\t\tValues:   []string{string(corev1.Windows)},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey:      corev1.LabelArchStable,\n\t\t\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\t\t\tValues:   []string{karpv1.ArchitectureAmd64},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey:      corev1.LabelWindowsBuild,\n\t\t\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\t\t\tValues:   []string{v1.Windows2019Build},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}))\n\t\t\tExpect(nodeClass.StatusConditions().IsTrue(v1.ConditionTypeAMIsReady)).To(BeTrue())\n\t\t})\n\t\tIt(\"Should resolve all AMIs with correct requirements for Windows2022\", func() {\n\t\t\tawsEnv.SSMAPI.Parameters = map[string]string{\n\t\t\t\tfmt.Sprintf(\"/aws/service/ami-windows-latest/Windows_Server-2022-English-Core-EKS_Optimized-%s/image_id\", k8sVersion): \"ami-amd64-standard\",\n\t\t\t}\n\t\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{Alias: \"windows2022@latest\"}}\n\t\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\t\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\n\t\t\tExpect(len(nodeClass.Status.AMIs)).To(Equal(1))\n\t\t\tExpect(nodeClass.Status.AMIs).To(ContainElements([]v1.AMI{\n\t\t\t\t{\n\t\t\t\t\tName: \"amd64-standard\",\n\t\t\t\t\tID:   \"ami-amd64-standard\",\n\t\t\t\t\tRequirements: []corev1.NodeSelectorRequirement{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey:      corev1.LabelOSStable,\n\t\t\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\t\t\tValues:   []string{string(corev1.Windows)},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey:      corev1.LabelArchStable,\n\t\t\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\t\t\tValues:   []string{karpv1.ArchitectureAmd64},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey:      corev1.LabelWindowsBuild,\n\t\t\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\t\t\tValues:   []string{v1.Windows2022Build},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}))\n\t\t\tExpect(nodeClass.StatusConditions().IsTrue(v1.ConditionTypeAMIsReady)).To(BeTrue())\n\t\t})\n\t\tIt(\"Should resolve all AMIs with correct requirements for Windows2025\", func() {\n\t\t\t// Check if EKS version supports Windows 2025 (requires 1.35+)\n\t\t\tminorVersion, err := strconv.Atoi(strings.Split(k8sVersion, \".\")[1])\n\t\t\tif err != nil || minorVersion < 35 {\n\t\t\t\tSkip(\"Windows 2025 requires EKS 1.35+, current version: \" + k8sVersion)\n\t\t\t}\n\n\t\t\tawsEnv.SSMAPI.Parameters = map[string]string{\n\t\t\t\tfmt.Sprintf(\"/aws/service/ami-windows-latest/Windows_Server-2025-English-Core-EKS_Optimized-%s/image_id\", k8sVersion): \"ami-amd64-standard\",\n\t\t\t}\n\t\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{Alias: \"windows2025@latest\"}}\n\t\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\t\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\t\t\tExpect(len(nodeClass.Status.AMIs)).To(Equal(1))\n\t\t\tExpect(nodeClass.Status.AMIs).To(ContainElements([]v1.AMI{\n\t\t\t\t{\n\t\t\t\t\tName: \"amd64-standard\",\n\t\t\t\t\tID:   \"ami-amd64-standard\",\n\t\t\t\t\tRequirements: []corev1.NodeSelectorRequirement{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey:      corev1.LabelOSStable,\n\t\t\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\t\t\tValues:   []string{string(corev1.Windows)},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey:      corev1.LabelArchStable,\n\t\t\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\t\t\tValues:   []string{karpv1.ArchitectureAmd64},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey:      corev1.LabelWindowsBuild,\n\t\t\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\t\t\tValues:   []string{v1.Windows2025Build},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}))\n\t\t\tExpect(nodeClass.StatusConditions().IsTrue(v1.ConditionTypeAMIsReady)).To(BeTrue())\n\t\t})\n\t})\n\tIt(\"should resolve amiSelector AMIs and requirements into status when all SSM parameters don't resolve\", func() {\n\t\t// This parameter set doesn't include any of the Nvidia AMIs\n\t\tawsEnv.SSMAPI.Parameters = map[string]string{\n\t\t\tfmt.Sprintf(\"/aws/service/bottlerocket/aws-k8s-%s/x86_64/latest/image_id\", k8sVersion): \"ami-amd64-standard\",\n\t\t\tfmt.Sprintf(\"/aws/service/bottlerocket/aws-k8s-%s/arm64/latest/image_id\", k8sVersion):  \"ami-arm64-standard\",\n\t\t}\n\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{\n\t\t\tAlias: \"bottlerocket@latest\",\n\t\t}}\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\n\t\tExpect(len(nodeClass.Status.AMIs)).To(Equal(3))\n\t\tExpect(nodeClass.Status.AMIs).To(ContainElements([]v1.AMI{\n\t\t\t{\n\t\t\t\tName: \"arm64-standard\",\n\t\t\t\tID:   \"ami-arm64-standard\",\n\t\t\t\tRequirements: []corev1.NodeSelectorRequirement{\n\t\t\t\t\t{\n\t\t\t\t\t\tKey:      corev1.LabelArchStable,\n\t\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\t\tValues:   []string{karpv1.ArchitectureArm64},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tKey:      v1.LabelInstanceGPUCount,\n\t\t\t\t\t\tOperator: corev1.NodeSelectorOpDoesNotExist,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tKey:      v1.LabelInstanceAcceleratorCount,\n\t\t\t\t\t\tOperator: corev1.NodeSelectorOpDoesNotExist,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tName: \"amd64-standard\",\n\t\t\t\tID:   \"ami-amd64-standard\",\n\t\t\t\tRequirements: []corev1.NodeSelectorRequirement{\n\t\t\t\t\t{\n\t\t\t\t\t\tKey:      corev1.LabelArchStable,\n\t\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\t\tValues:   []string{karpv1.ArchitectureAmd64},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tKey:      v1.LabelInstanceGPUCount,\n\t\t\t\t\t\tOperator: corev1.NodeSelectorOpDoesNotExist,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tKey:      v1.LabelInstanceAcceleratorCount,\n\t\t\t\t\t\tOperator: corev1.NodeSelectorOpDoesNotExist,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}))\n\t\tExpect(nodeClass.StatusConditions().IsTrue(v1.ConditionTypeAMIsReady)).To(BeTrue())\n\t})\n\tIt(\"should resolve a valid AMI selector\", func() {\n\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{\n\t\t\tTags: map[string]string{\"Name\": \"amd64-standard\"},\n\t\t}}\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\t\tExpect(nodeClass.Status.AMIs).To(Equal(\n\t\t\t[]v1.AMI{\n\t\t\t\t{\n\t\t\t\t\tName: \"amd64-standard-new\",\n\t\t\t\t\tID:   \"ami-amd64-standard-new\",\n\t\t\t\t\tRequirements: []corev1.NodeSelectorRequirement{{\n\t\t\t\t\t\tKey:      corev1.LabelArchStable,\n\t\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\t\tValues:   []string{karpv1.ArchitectureAmd64},\n\t\t\t\t\t}},\n\t\t\t\t},\n\t\t\t},\n\t\t))\n\t\tExpect(nodeClass.StatusConditions().IsTrue(v1.ConditionTypeAMIsReady)).To(BeTrue())\n\t})\n\tIt(\"should get error when resolving AMIs and have status condition set to false\", func() {\n\t\tawsEnv.EC2API.NextError.Set(fmt.Errorf(\"unable to resolve AMI\"))\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\t_ = ExpectObjectReconcileFailed(ctx, env.Client, controller, nodeClass)\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\t\tExpect(nodeClass.StatusConditions().IsTrue(v1.ConditionTypeAMIsReady)).To(BeFalse())\n\t})\n\tContext(\"NodeClass AMI Status\", func() {\n\t\tBeforeEach(func() {\n\t\t\t// Set time using the injectable/fake clock to now\n\t\t\tawsEnv.Clock.SetTime(time.Now())\n\t\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{\n\t\t\t\t{\n\t\t\t\t\tTags: map[string]string{\"*\": \"*\"},\n\t\t\t\t},\n\t\t\t}\n\t\t\tawsEnv.EC2API.DescribeImagesOutput.Set(&ec2.DescribeImagesOutput{\n\t\t\t\tImages: []ec2types.Image{\n\t\t\t\t\t{\n\t\t\t\t\t\tName:            aws.String(\"test-ami-3\"),\n\t\t\t\t\t\tImageId:         aws.String(\"ami-id-789\"),\n\t\t\t\t\t\tCreationDate:    aws.String(\"2021-08-31T00:12:42.000Z\"),\n\t\t\t\t\t\tDeprecationTime: aws.String(awsEnv.Clock.Now().Add(30 * time.Minute).Format(time.RFC3339)),\n\t\t\t\t\t\tArchitecture:    \"x86_64\",\n\t\t\t\t\t\tTags: []ec2types.Tag{\n\t\t\t\t\t\t\t{Key: aws.String(\"Name\"), Value: aws.String(\"test-ami-3\")},\n\t\t\t\t\t\t\t{Key: aws.String(\"foo\"), Value: aws.String(\"bar\")},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tState: ec2types.ImageStateAvailable,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tName:         aws.String(\"test-ami-2\"),\n\t\t\t\t\t\tImageId:      aws.String(\"ami-id-456\"),\n\t\t\t\t\t\tCreationDate: aws.String(\"2021-08-31T00:12:42.000Z\"),\n\t\t\t\t\t\tArchitecture: \"arm64\",\n\t\t\t\t\t\tTags: []ec2types.Tag{\n\t\t\t\t\t\t\t{Key: aws.String(\"Name\"), Value: aws.String(\"test-ami-2\")},\n\t\t\t\t\t\t\t{Key: aws.String(\"foo\"), Value: aws.String(\"bar\")},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tState: ec2types.ImageStateAvailable,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t})\n\t\t})\n\t\tIt(\"should update nodeclass AMI status with correct deprecation value and conditions\", func() {\n\t\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\t\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\n\t\t\tExpect(len(nodeClass.Status.AMIs)).To(Equal(2))\n\t\t\tExpect(nodeClass.Status.AMIs).To(Equal(\n\t\t\t\t[]v1.AMI{\n\t\t\t\t\t{\n\t\t\t\t\t\tName: \"test-ami-2\",\n\t\t\t\t\t\tID:   \"ami-id-456\",\n\t\t\t\t\t\tRequirements: []corev1.NodeSelectorRequirement{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tKey:      corev1.LabelArchStable,\n\t\t\t\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\t\t\t\tValues:   []string{karpv1.ArchitectureArm64},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tName: \"test-ami-3\",\n\t\t\t\t\t\tID:   \"ami-id-789\",\n\t\t\t\t\t\tRequirements: []corev1.NodeSelectorRequirement{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tKey:      corev1.LabelArchStable,\n\t\t\t\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\t\t\t\tValues:   []string{karpv1.ArchitectureAmd64},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t))\n\t\t\tExpect(nodeClass.StatusConditions().IsTrue(v1.ConditionTypeAMIsReady)).To(BeTrue())\n\n\t\t\t// Increment clock to simulate status updates on deprecated AMIs\n\t\t\tawsEnv.Clock.Step(40 * time.Minute)\n\n\t\t\t// Flush Cache\n\t\t\tawsEnv.AMICache.Flush()\n\n\t\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\t\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\t\t\tExpect(len(nodeClass.Status.AMIs)).To(Equal(2))\n\t\t\tExpect(nodeClass.Status.AMIs).To(Equal(\n\t\t\t\t[]v1.AMI{\n\t\t\t\t\t{\n\t\t\t\t\t\tName: \"test-ami-2\",\n\t\t\t\t\t\tID:   \"ami-id-456\",\n\t\t\t\t\t\tRequirements: []corev1.NodeSelectorRequirement{{\n\t\t\t\t\t\t\tKey:      corev1.LabelArchStable,\n\t\t\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\t\t\tValues:   []string{karpv1.ArchitectureArm64},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tName: \"test-ami-3\",\n\t\t\t\t\t\tID:   \"ami-id-789\",\n\t\t\t\t\t\t// Adds deprecated field to the AMI status on the NodeClass\n\t\t\t\t\t\tDeprecated: true,\n\t\t\t\t\t\tRequirements: []corev1.NodeSelectorRequirement{{\n\t\t\t\t\t\t\tKey:      corev1.LabelArchStable,\n\t\t\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\t\t\tValues:   []string{karpv1.ArchitectureAmd64},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t))\n\t\t\tExpect(nodeClass.StatusConditions().IsTrue(v1.ConditionTypeAMIsReady)).To(BeTrue())\n\t\t})\n\t\tIt(\"should remove AMIDeprecated status condition when non deprecated AMIs are discovered\", func() {\n\t\t\t// Increment clock to simulate status updates on deprecated AMIs\n\t\t\tawsEnv.Clock.Step(40 * time.Minute)\n\n\t\t\t// Initial reconcile discovers AMIs which are deprecated\n\t\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\t\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\n\t\t\tExpect(len(nodeClass.Status.AMIs)).To(Equal(2))\n\t\t\tExpect(nodeClass.Status.AMIs).To(Equal(\n\t\t\t\t[]v1.AMI{\n\t\t\t\t\t{\n\t\t\t\t\t\tName: \"test-ami-2\",\n\t\t\t\t\t\tID:   \"ami-id-456\",\n\t\t\t\t\t\tRequirements: []corev1.NodeSelectorRequirement{{\n\t\t\t\t\t\t\tKey:      corev1.LabelArchStable,\n\t\t\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\t\t\tValues:   []string{karpv1.ArchitectureArm64},\n\t\t\t\t\t\t}},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tName: \"test-ami-3\",\n\t\t\t\t\t\tID:   \"ami-id-789\",\n\t\t\t\t\t\t// Adds deprecated field to the AMI status on the NodeClass\n\t\t\t\t\t\tDeprecated: true,\n\t\t\t\t\t\tRequirements: []corev1.NodeSelectorRequirement{{\n\t\t\t\t\t\t\tKey:      corev1.LabelArchStable,\n\t\t\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\t\t\tValues:   []string{karpv1.ArchitectureAmd64},\n\t\t\t\t\t\t}},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t))\n\t\t\t// Checks if both AMIsReady and AMIsDeprecated status conditions are set\n\t\t\tExpect(nodeClass.StatusConditions().IsTrue(v1.ConditionTypeAMIsReady)).To(BeTrue())\n\n\t\t\t// rediscover AMIs again and reconcile\n\t\t\tawsEnv.EC2API.DescribeImagesOutput.Set(&ec2.DescribeImagesOutput{\n\t\t\t\tImages: []ec2types.Image{\n\t\t\t\t\t{\n\t\t\t\t\t\tName:            aws.String(\"test-ami-4\"),\n\t\t\t\t\t\tImageId:         aws.String(\"ami-id-123\"),\n\t\t\t\t\t\tCreationDate:    aws.String(\"2021-08-31T00:12:42.000Z\"),\n\t\t\t\t\t\tDeprecationTime: aws.String(awsEnv.Clock.Now().Add(30 * time.Minute).Format(time.RFC3339)),\n\t\t\t\t\t\tArchitecture:    \"x86_64\",\n\t\t\t\t\t\tTags: []ec2types.Tag{\n\t\t\t\t\t\t\t{Key: aws.String(\"Name\"), Value: aws.String(\"test-ami-4\")},\n\t\t\t\t\t\t\t{Key: aws.String(\"foo\"), Value: aws.String(\"bar\")},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tState: ec2types.ImageStateAvailable,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tName:         aws.String(\"test-ami-2\"),\n\t\t\t\t\t\tImageId:      aws.String(\"ami-id-456\"),\n\t\t\t\t\t\tCreationDate: aws.String(\"2021-08-31T00:12:42.000Z\"),\n\t\t\t\t\t\tArchitecture: \"arm64\",\n\t\t\t\t\t\tTags: []ec2types.Tag{\n\t\t\t\t\t\t\t{Key: aws.String(\"Name\"), Value: aws.String(\"test-ami-2\")},\n\t\t\t\t\t\t\t{Key: aws.String(\"foo\"), Value: aws.String(\"bar\")},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tState: ec2types.ImageStateAvailable,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t})\n\n\t\t\tawsEnv.AMICache.Flush()\n\n\t\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\t\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\n\t\t\tExpect(len(nodeClass.Status.AMIs)).To(Equal(2))\n\t\t\tExpect(nodeClass.Status.AMIs).To(Equal(\n\t\t\t\t[]v1.AMI{\n\t\t\t\t\t{\n\t\t\t\t\t\tName: \"test-ami-4\",\n\t\t\t\t\t\tID:   \"ami-id-123\",\n\t\t\t\t\t\tRequirements: []corev1.NodeSelectorRequirement{{\n\t\t\t\t\t\t\tKey:      corev1.LabelArchStable,\n\t\t\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\t\t\tValues:   []string{karpv1.ArchitectureAmd64},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tName: \"test-ami-2\",\n\t\t\t\t\t\tID:   \"ami-id-456\",\n\t\t\t\t\t\tRequirements: []corev1.NodeSelectorRequirement{{\n\t\t\t\t\t\t\tKey:      corev1.LabelArchStable,\n\t\t\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\t\t\tValues:   []string{karpv1.ArchitectureArm64},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t))\n\t\t\t// Since all AMIs discovered are non deprecated, the status conditions should remove AMIsDeprecated and only set AMIsReady\n\t\t\tExpect(nodeClass.StatusConditions().IsTrue(v1.ConditionTypeAMIsReady)).To(BeTrue())\n\t\t})\n\t})\n})\n"
  },
  {
    "path": "pkg/controllers/nodeclass/capacityreservation.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage nodeclass\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"sort\"\n\t\"time\"\n\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\t\"github.com/awslabs/operatorpkg/singleton\"\n\t\"github.com/samber/lo\"\n\t\"go.uber.org/multierr\"\n\t\"k8s.io/utils/clock\"\n\t\"sigs.k8s.io/controller-runtime/pkg/log\"\n\t\"sigs.k8s.io/controller-runtime/pkg/reconcile\"\n\t\"sigs.k8s.io/karpenter/pkg/utils/pretty\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/capacityreservation\"\n)\n\nconst capacityReservationPollPeriod = time.Minute\n\ntype CapacityReservation struct {\n\tprovider capacityreservation.Provider\n\tclk      clock.Clock\n\tcm       *pretty.ChangeMonitor\n}\n\nfunc NewCapacityReservationReconciler(clk clock.Clock, provider capacityreservation.Provider) *CapacityReservation {\n\treturn &CapacityReservation{\n\t\tprovider: provider,\n\t\tclk:      clk,\n\t\tcm:       pretty.NewChangeMonitor(),\n\t}\n}\n\nfunc (c *CapacityReservation) Reconcile(ctx context.Context, nc *v1.EC2NodeClass) (reconcile.Result, error) {\n\treservations, err := c.provider.List(ctx, nc.Spec.CapacityReservationSelectorTerms...)\n\tif err != nil {\n\t\treturn reconcile.Result{}, fmt.Errorf(\"getting capacity reservations, %w\", err)\n\t}\n\tif len(reservations) == 0 {\n\t\tnc.Status.CapacityReservations = nil\n\t\tnc.StatusConditions().SetTrue(v1.ConditionTypeCapacityReservationsReady)\n\t\treturn reconcile.Result{RequeueAfter: capacityReservationPollPeriod}, nil\n\t}\n\n\tif ids := lo.Map(reservations, func(r *ec2types.CapacityReservation, _ int) string {\n\t\treturn *r.CapacityReservationId\n\t}); c.cm.HasChanged(nc.Name, ids) {\n\t\tlog.FromContext(ctx).V(1).WithValues(\"ids\", ids).Info(\"discovered capacity reservations\")\n\t}\n\tsort.Slice(reservations, func(i, j int) bool {\n\t\treturn *reservations[i].CapacityReservationId < *reservations[j].CapacityReservationId\n\t})\n\terrors := []error{}\n\tnc.Status.CapacityReservations = []v1.CapacityReservation{}\n\tfor _, r := range reservations {\n\t\treservation, err := v1.CapacityReservationFromEC2(c.clk, r)\n\t\tif err != nil {\n\t\t\terrors = append(errors, err)\n\t\t\tcontinue\n\t\t}\n\t\tnc.Status.CapacityReservations = append(nc.Status.CapacityReservations, reservation)\n\t}\n\tif len(errors) != 0 {\n\t\tlog.FromContext(ctx).WithValues(\n\t\t\t\"error-count\", len(errors),\n\t\t\t\"total-count\", len(reservations),\n\t\t).Error(multierr.Combine(errors...), \"failed to parse discovered capacity reservations\")\n\t}\n\tnc.StatusConditions().SetTrue(v1.ConditionTypeCapacityReservationsReady)\n\treturn reconcile.Result{RequeueAfter: c.requeueAfter(reservations...)}, nil\n}\n\n// requeueAfter determines the duration until the next target reconciliation time based on the provided reservations. If\n// any reservations are expected to expire before we would typically requeue, the duration will be based on the\n// nearest expiration time.\nfunc (c *CapacityReservation) requeueAfter(reservations ...*ec2types.CapacityReservation) time.Duration {\n\tvar next *time.Time\n\tfor _, reservation := range reservations {\n\t\tif reservation.EndDate == nil {\n\t\t\tcontinue\n\t\t}\n\t\tif next == nil {\n\t\t\tnext = reservation.EndDate\n\t\t\tcontinue\n\t\t}\n\t\tif next.After(*reservation.EndDate) {\n\t\t\tnext = reservation.EndDate\n\t\t}\n\t}\n\tif next == nil {\n\t\treturn capacityReservationPollPeriod\n\t}\n\tif d := next.Sub(c.clk.Now()); d < capacityReservationPollPeriod {\n\t\treturn lo.Ternary(d < 0, singleton.RequeueImmediately, d)\n\t}\n\treturn capacityReservationPollPeriod\n}\n"
  },
  {
    "path": "pkg/controllers/nodeclass/capacityreservation_test.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage nodeclass_test\n\nimport (\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go-v2/service/ec2\"\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\t\"github.com/awslabs/operatorpkg/status\"\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n\t\"github.com/samber/lo\"\n\tcoreoptions \"sigs.k8s.io/karpenter/pkg/operator/options\"\n\t. \"sigs.k8s.io/karpenter/pkg/test/expectations\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/utils\"\n)\n\nconst selfOwnerID = \"012345678901\"\nconst altOwnerID = \"123456789012\"\n\nvar discoveryTags = map[string]string{\n\t\"karpenter.sh/discovery\": \"test\",\n}\n\nvar capacityBlockTags = map[string]string{\n\t\"reservation-type\": \"capacity-block\",\n}\n\nvar interruptibleTags = map[string]string{\n\t\"reservation-interruptible\": \"true\",\n}\n\nvar _ = Describe(\"NodeClass Capacity Reservation Reconciler\", func() {\n\tBeforeEach(func() {\n\t\tawsEnv.EC2API.DescribeCapacityReservationsOutput.Set(&ec2.DescribeCapacityReservationsOutput{\n\t\t\tCapacityReservations: []ec2types.CapacityReservation{\n\t\t\t\t{\n\t\t\t\t\tAvailabilityZone:       lo.ToPtr(\"test-zone-1a\"),\n\t\t\t\t\tInstanceType:           lo.ToPtr(\"m5.large\"),\n\t\t\t\t\tOwnerId:                lo.ToPtr(selfOwnerID),\n\t\t\t\t\tInstanceMatchCriteria:  ec2types.InstanceMatchCriteriaTargeted,\n\t\t\t\t\tCapacityReservationId:  lo.ToPtr(\"cr-m5.large-1a-1\"),\n\t\t\t\t\tAvailableInstanceCount: lo.ToPtr[int32](10),\n\t\t\t\t\tState:                  ec2types.CapacityReservationStateActive,\n\t\t\t\t\tReservationType:        ec2types.CapacityReservationTypeDefault,\n\t\t\t\t\tInterruptible:          lo.ToPtr(false),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tAvailabilityZone:       lo.ToPtr(\"test-zone-1a\"),\n\t\t\t\t\tInstanceType:           lo.ToPtr(\"m5.large\"),\n\t\t\t\t\tOwnerId:                lo.ToPtr(selfOwnerID),\n\t\t\t\t\tInstanceMatchCriteria:  ec2types.InstanceMatchCriteriaTargeted,\n\t\t\t\t\tCapacityReservationId:  lo.ToPtr(\"cr-m5.large-1a-2\"),\n\t\t\t\t\tAvailableInstanceCount: lo.ToPtr[int32](10),\n\t\t\t\t\tTags:                   utils.EC2MergeTags(discoveryTags),\n\t\t\t\t\tState:                  ec2types.CapacityReservationStateActive,\n\t\t\t\t\tReservationType:        ec2types.CapacityReservationTypeDefault,\n\t\t\t\t\tInterruptible:          lo.ToPtr(false),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tAvailabilityZone:       lo.ToPtr(\"test-zone-1a\"),\n\t\t\t\t\tInstanceType:           lo.ToPtr(\"p5.48xlarge\"),\n\t\t\t\t\tOwnerId:                lo.ToPtr(altOwnerID),\n\t\t\t\t\tInstanceMatchCriteria:  ec2types.InstanceMatchCriteriaTargeted,\n\t\t\t\t\tCapacityReservationId:  lo.ToPtr(\"cr-p5.48xlarge-1a\"),\n\t\t\t\t\tAvailableInstanceCount: lo.ToPtr[int32](2),\n\t\t\t\t\tTags:                   utils.EC2MergeTags(capacityBlockTags),\n\t\t\t\t\tState:                  ec2types.CapacityReservationStateActive,\n\t\t\t\t\tReservationType:        ec2types.CapacityReservationTypeCapacityBlock,\n\t\t\t\t\tEndDate:                lo.ToPtr(awsEnv.Clock.Now().Add(time.Hour * 24)),\n\t\t\t\t\tInterruptible:          lo.ToPtr(false),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tAvailabilityZone:       lo.ToPtr(\"test-zone-1b\"),\n\t\t\t\t\tInstanceType:           lo.ToPtr(\"m5.large\"),\n\t\t\t\t\tOwnerId:                lo.ToPtr(selfOwnerID),\n\t\t\t\t\tInstanceMatchCriteria:  ec2types.InstanceMatchCriteriaTargeted,\n\t\t\t\t\tCapacityReservationId:  lo.ToPtr(\"cr-m5.large-1b-1\"),\n\t\t\t\t\tAvailableInstanceCount: lo.ToPtr[int32](15),\n\t\t\t\t\tState:                  ec2types.CapacityReservationStateActive,\n\t\t\t\t\tReservationType:        ec2types.CapacityReservationTypeDefault,\n\t\t\t\t\tInterruptible:          lo.ToPtr(false),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tAvailabilityZone:       lo.ToPtr(\"test-zone-1b\"),\n\t\t\t\t\tInstanceType:           lo.ToPtr(\"m5.large\"),\n\t\t\t\t\tOwnerId:                lo.ToPtr(altOwnerID),\n\t\t\t\t\tInstanceMatchCriteria:  ec2types.InstanceMatchCriteriaTargeted,\n\t\t\t\t\tCapacityReservationId:  lo.ToPtr(\"cr-m5.large-1b-2\"),\n\t\t\t\t\tAvailableInstanceCount: lo.ToPtr[int32](15),\n\t\t\t\t\tTags:                   utils.EC2MergeTags(discoveryTags),\n\t\t\t\t\tState:                  ec2types.CapacityReservationStateActive,\n\t\t\t\t\tReservationType:        ec2types.CapacityReservationTypeDefault,\n\t\t\t\t\tInterruptible:          lo.ToPtr(false),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tAvailabilityZone:       lo.ToPtr(\"test-zone-1a\"),\n\t\t\t\t\tInstanceType:           lo.ToPtr(\"m5.large\"),\n\t\t\t\t\tOwnerId:                lo.ToPtr(selfOwnerID),\n\t\t\t\t\tInstanceMatchCriteria:  ec2types.InstanceMatchCriteriaOpen,\n\t\t\t\t\tCapacityReservationId:  lo.ToPtr(\"cr-m5.large-1a-3\"),\n\t\t\t\t\tAvailableInstanceCount: lo.ToPtr[int32](5),\n\t\t\t\t\tState:                  ec2types.CapacityReservationStateActive,\n\t\t\t\t\tReservationType:        ec2types.CapacityReservationTypeDefault,\n\t\t\t\t\tInterruptible:          lo.ToPtr(false),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tAvailabilityZone:       lo.ToPtr(\"test-zone-1a\"),\n\t\t\t\t\tInstanceType:           lo.ToPtr(\"m5.large\"),\n\t\t\t\t\tOwnerId:                lo.ToPtr(selfOwnerID),\n\t\t\t\t\tInstanceMatchCriteria:  ec2types.InstanceMatchCriteriaOpen,\n\t\t\t\t\tCapacityReservationId:  lo.ToPtr(\"cr-i-m5.large-1a-1\"),\n\t\t\t\t\tAvailableInstanceCount: lo.ToPtr[int32](10),\n\t\t\t\t\tTags:                   utils.EC2MergeTags(interruptibleTags),\n\t\t\t\t\tState:                  ec2types.CapacityReservationStateActive,\n\t\t\t\t\tReservationType:        ec2types.CapacityReservationTypeDefault,\n\t\t\t\t\tInterruptible:          lo.ToPtr(true),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t})\n\tIt(\"should resolve capacity reservations by ID\", func() {\n\t\tconst targetID = \"cr-m5.large-1a-1\"\n\t\tnodeClass.Spec.CapacityReservationSelectorTerms = append(nodeClass.Spec.CapacityReservationSelectorTerms, v1.CapacityReservationSelectorTerm{\n\t\t\tID: targetID,\n\t\t})\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\t\tExpect(nodeClass.StatusConditions().Get(v1.ConditionTypeCapacityReservationsReady).IsTrue()).To(BeTrue())\n\t\tExpect(nodeClass.Status.CapacityReservations).To(HaveLen(1))\n\t\tExpect(nodeClass.Status.CapacityReservations[0]).To(Equal(v1.CapacityReservation{\n\t\t\tID:                    targetID,\n\t\t\tInstanceMatchCriteria: string(ec2types.InstanceMatchCriteriaTargeted),\n\t\t\tOwnerID:               selfOwnerID,\n\t\t\tInstanceType:          \"m5.large\",\n\t\t\tAvailabilityZone:      \"test-zone-1a\",\n\t\t\tEndTime:               nil,\n\t\t\tReservationType:       v1.CapacityReservationTypeDefault,\n\t\t\tState:                 v1.CapacityReservationStateActive,\n\t\t}))\n\t})\n\tIt(\"should resolve capacity reservations by tags\", func() {\n\t\tnodeClass.Spec.CapacityReservationSelectorTerms = append(nodeClass.Spec.CapacityReservationSelectorTerms, v1.CapacityReservationSelectorTerm{\n\t\t\tTags: discoveryTags,\n\t\t})\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\t\tExpect(nodeClass.StatusConditions().Get(v1.ConditionTypeCapacityReservationsReady).IsTrue()).To(BeTrue())\n\t\tExpect(nodeClass.Status.CapacityReservations).To(HaveLen(2))\n\t\tExpect(lo.Map(nodeClass.Status.CapacityReservations, func(cr v1.CapacityReservation, _ int) string {\n\t\t\treturn cr.ID\n\t\t})).To(ContainElements(\"cr-m5.large-1a-2\", \"cr-m5.large-1b-2\"))\n\t})\n\tIt(\"should resolve capacity reservations by tags + owner\", func() {\n\t\tnodeClass.Spec.CapacityReservationSelectorTerms = append(nodeClass.Spec.CapacityReservationSelectorTerms, v1.CapacityReservationSelectorTerm{\n\t\t\tTags:    discoveryTags,\n\t\t\tOwnerID: selfOwnerID,\n\t\t})\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\t\tExpect(nodeClass.StatusConditions().Get(v1.ConditionTypeCapacityReservationsReady).IsTrue()).To(BeTrue())\n\t\tExpect(nodeClass.Status.CapacityReservations).To(HaveLen(1))\n\t\tExpect(lo.Map(nodeClass.Status.CapacityReservations, func(cr v1.CapacityReservation, _ int) string {\n\t\t\treturn cr.ID\n\t\t})).To(ContainElements(\"cr-m5.large-1a-2\"))\n\t})\n\tIt(\"should resolve capacity reservations by instance match criteria 'open'\", func() {\n\t\tnodeClass.Spec.CapacityReservationSelectorTerms = append(nodeClass.Spec.CapacityReservationSelectorTerms, v1.CapacityReservationSelectorTerm{\n\t\t\tInstanceMatchCriteria: \"open\",\n\t\t})\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\t\tExpect(nodeClass.StatusConditions().Get(v1.ConditionTypeCapacityReservationsReady).IsTrue()).To(BeTrue())\n\t\tExpect(nodeClass.Status.CapacityReservations).To(HaveLen(2))\n\t\tExpect(lo.Map(nodeClass.Status.CapacityReservations, func(cr v1.CapacityReservation, _ int) string {\n\t\t\treturn cr.ID\n\t\t})).To(ContainElements(\"cr-m5.large-1a-3\", \"cr-i-m5.large-1a-1\"))\n\t\tfor _, cr := range nodeClass.Status.CapacityReservations {\n\t\t\tExpect(cr.InstanceMatchCriteria).To(Equal(\"open\"))\n\t\t}\n\t})\n\tIt(\"should resolve capacity reservations by instance match criteria 'targeted'\", func() {\n\t\tnodeClass.Spec.CapacityReservationSelectorTerms = append(nodeClass.Spec.CapacityReservationSelectorTerms, v1.CapacityReservationSelectorTerm{\n\t\t\tInstanceMatchCriteria: \"targeted\",\n\t\t})\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\t\tExpect(nodeClass.StatusConditions().Get(v1.ConditionTypeCapacityReservationsReady).IsTrue()).To(BeTrue())\n\t\tExpect(nodeClass.Status.CapacityReservations).To(HaveLen(5))\n\t\tExpect(lo.Map(nodeClass.Status.CapacityReservations, func(cr v1.CapacityReservation, _ int) string {\n\t\t\treturn cr.ID\n\t\t})).To(ContainElements(\"cr-m5.large-1a-1\", \"cr-m5.large-1a-2\", \"cr-p5.48xlarge-1a\", \"cr-m5.large-1b-1\", \"cr-m5.large-1b-2\"))\n\t\tfor _, cr := range nodeClass.Status.CapacityReservations {\n\t\t\tExpect(cr.InstanceMatchCriteria).To(Equal(\"targeted\"))\n\t\t}\n\t})\n\tIt(\"should resolve capacity reservations by instance match criteria with tags\", func() {\n\t\tnodeClass.Spec.CapacityReservationSelectorTerms = append(nodeClass.Spec.CapacityReservationSelectorTerms, v1.CapacityReservationSelectorTerm{\n\t\t\tInstanceMatchCriteria: \"targeted\",\n\t\t\tTags:                  discoveryTags,\n\t\t})\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\t\tExpect(nodeClass.StatusConditions().Get(v1.ConditionTypeCapacityReservationsReady).IsTrue()).To(BeTrue())\n\t\tExpect(nodeClass.Status.CapacityReservations).To(HaveLen(2))\n\t\tExpect(lo.Map(nodeClass.Status.CapacityReservations, func(cr v1.CapacityReservation, _ int) string {\n\t\t\treturn cr.ID\n\t\t})).To(ContainElements(\"cr-m5.large-1a-2\", \"cr-m5.large-1b-2\"))\n\t\tfor _, cr := range nodeClass.Status.CapacityReservations {\n\t\t\tExpect(cr.InstanceMatchCriteria).To(Equal(\"targeted\"))\n\t\t}\n\t})\n\tIt(\"should resolve capacity reservations by instance match criteria with tags and owner\", func() {\n\t\tnodeClass.Spec.CapacityReservationSelectorTerms = append(nodeClass.Spec.CapacityReservationSelectorTerms, v1.CapacityReservationSelectorTerm{\n\t\t\tInstanceMatchCriteria: \"targeted\",\n\t\t\tTags:                  discoveryTags,\n\t\t\tOwnerID:               selfOwnerID,\n\t\t})\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\t\tExpect(nodeClass.StatusConditions().Get(v1.ConditionTypeCapacityReservationsReady).IsTrue()).To(BeTrue())\n\t\tExpect(nodeClass.Status.CapacityReservations).To(HaveLen(1))\n\t\tExpect(nodeClass.Status.CapacityReservations[0].ID).To(Equal(\"cr-m5.large-1a-2\"))\n\t\tExpect(nodeClass.Status.CapacityReservations[0].InstanceMatchCriteria).To(Equal(\"targeted\"))\n\t\tExpect(nodeClass.Status.CapacityReservations[0].OwnerID).To(Equal(selfOwnerID))\n\t})\n\tIt(\"should exclude expired capacity reservations\", func() {\n\t\tout := awsEnv.EC2API.DescribeCapacityReservationsOutput.Clone()\n\t\ttargetReservationID := *out.CapacityReservations[0].CapacityReservationId\n\t\tout.CapacityReservations[0].EndDate = lo.ToPtr(awsEnv.Clock.Now().Add(time.Hour))\n\t\tawsEnv.EC2API.DescribeCapacityReservationsOutput.Set(out)\n\n\t\tnodeClass.Spec.CapacityReservationSelectorTerms = append(nodeClass.Spec.CapacityReservationSelectorTerms, v1.CapacityReservationSelectorTerm{\n\t\t\tID: targetReservationID,\n\t\t})\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\t\tExpect(nodeClass.StatusConditions().Get(v1.ConditionTypeCapacityReservationsReady).IsTrue()).To(BeTrue())\n\t\tExpect(nodeClass.Status.CapacityReservations).To(HaveLen(1))\n\t\tExpect(lo.Map(nodeClass.Status.CapacityReservations, func(cr v1.CapacityReservation, _ int) string {\n\t\t\treturn cr.ID\n\t\t})).To(ContainElements(targetReservationID))\n\n\t\tawsEnv.Clock.Step(2 * time.Hour)\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\t\tExpect(nodeClass.StatusConditions().Get(v1.ConditionTypeCapacityReservationsReady).IsTrue()).To(BeTrue())\n\t\tExpect(nodeClass.Status.CapacityReservations).To(HaveLen(0))\n\t})\n\tDescribeTable(\n\t\t\"should exclude non-active capacity reservations\",\n\t\tfunc(state ec2types.CapacityReservationState) {\n\t\t\tout := awsEnv.EC2API.DescribeCapacityReservationsOutput.Clone()\n\t\t\ttargetReservationID := *out.CapacityReservations[0].CapacityReservationId\n\t\t\tout.CapacityReservations[0].State = state\n\t\t\tawsEnv.EC2API.DescribeCapacityReservationsOutput.Set(out)\n\n\t\t\tnodeClass.Spec.CapacityReservationSelectorTerms = append(nodeClass.Spec.CapacityReservationSelectorTerms, v1.CapacityReservationSelectorTerm{\n\t\t\t\tID: targetReservationID,\n\t\t\t})\n\t\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\t\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\t\t\tExpect(nodeClass.StatusConditions().Get(v1.ConditionTypeCapacityReservationsReady).IsTrue()).To(BeTrue())\n\t\t\tExpect(nodeClass.Status.CapacityReservations).To(HaveLen(0))\n\t\t},\n\t\tlo.FilterMap(ec2types.CapacityReservationStateActive.Values(), func(state ec2types.CapacityReservationState, _ int) (TableEntry, bool) {\n\t\t\treturn Entry(string(state), state), state != ec2types.CapacityReservationStateActive\n\t\t}),\n\t)\n\tIt(\"should discover capacity block reservations\", func() {\n\t\tnodeClass.Spec.CapacityReservationSelectorTerms = append(nodeClass.Spec.CapacityReservationSelectorTerms, v1.CapacityReservationSelectorTerm{\n\t\t\tTags: capacityBlockTags,\n\t\t})\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\t\tExpect(nodeClass.StatusConditions().Get(v1.ConditionTypeCapacityReservationsReady).IsTrue()).To(BeTrue())\n\t\tExpect(nodeClass.Status.CapacityReservations).To(HaveLen(1))\n\t\tcr := nodeClass.Status.CapacityReservations[0]\n\t\tExpect(cr.ID).To(Equal(\"cr-p5.48xlarge-1a\"))\n\t\tExpect(cr.ReservationType).To(Equal(v1.CapacityReservationTypeCapacityBlock))\n\t\tExpect(cr.State).To(Equal(v1.CapacityReservationStateActive))\n\t})\n\tIt(\"should mark capacity blocks as expiring 40 minutes prior to their endDate\", func() {\n\t\tout := awsEnv.EC2API.DescribeCapacityReservationsOutput.Clone()\n\t\tfor i := range out.CapacityReservations {\n\t\t\tif out.CapacityReservations[i].ReservationType != ec2types.CapacityReservationTypeCapacityBlock {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tout.CapacityReservations[i].EndDate = lo.ToPtr(awsEnv.Clock.Now().Add(time.Minute * 40))\n\t\t}\n\t\tawsEnv.EC2API.DescribeCapacityReservationsOutput.Set(out)\n\t\tnodeClass.Spec.CapacityReservationSelectorTerms = append(nodeClass.Spec.CapacityReservationSelectorTerms, v1.CapacityReservationSelectorTerm{\n\t\t\tTags: capacityBlockTags,\n\t\t})\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\t\tExpect(nodeClass.StatusConditions().Get(v1.ConditionTypeCapacityReservationsReady).IsTrue()).To(BeTrue())\n\t\tExpect(nodeClass.Status.CapacityReservations).To(HaveLen(1))\n\t\tcr := nodeClass.Status.CapacityReservations[0]\n\t\tExpect(cr.ID).To(Equal(\"cr-p5.48xlarge-1a\"))\n\t\tExpect(cr.ReservationType).To(Equal(v1.CapacityReservationTypeCapacityBlock))\n\t\tExpect(cr.State).To(Equal(v1.CapacityReservationStateExpiring))\n\t})\n\tIt(\"shouldn't mark default capacity reservations as expiring 40 minutes prior to their endDate\", func() {\n\t\tout := awsEnv.EC2API.DescribeCapacityReservationsOutput.Clone()\n\t\tfor i := range out.CapacityReservations {\n\t\t\tout.CapacityReservations[i].EndDate = lo.ToPtr(awsEnv.Clock.Now().Add(time.Minute * 40))\n\t\t}\n\t\tawsEnv.EC2API.DescribeCapacityReservationsOutput.Set(out)\n\t\tnodeClass.Spec.CapacityReservationSelectorTerms = append(nodeClass.Spec.CapacityReservationSelectorTerms, v1.CapacityReservationSelectorTerm{\n\t\t\tTags: discoveryTags,\n\t\t})\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\t\tExpect(nodeClass.StatusConditions().Get(v1.ConditionTypeCapacityReservationsReady).IsTrue()).To(BeTrue())\n\t\tExpect(nodeClass.Status.CapacityReservations).To(HaveLen(2))\n\t\tfor _, cr := range nodeClass.Status.CapacityReservations {\n\t\t\tExpect(cr.ReservationType).To(Equal(v1.CapacityReservationTypeDefault))\n\t\t\tExpect(cr.State).To(Equal(v1.CapacityReservationStateActive))\n\t\t}\n\t})\n\tDescribeTable(\n\t\t\"should update status condition on nodeClass as Ready\",\n\t\tfunc(reservedCapacity bool) {\n\t\t\tcoreoptions.FromContext(ctx).FeatureGates.ReservedCapacity = reservedCapacity\n\t\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\t\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\t\t\tExpect(nodeClass.Status.Conditions).To(HaveLen(lo.Ternary(reservedCapacity, 7, 6)))\n\t\t\tExpect(nodeClass.StatusConditions().Get(status.ConditionReady).IsTrue()).To(BeTrue())\n\t\t},\n\t\tEntry(\"when reserved capacity feature flag is enabled\", true),\n\t\tEntry(\"when reserved capacity feature flag is disabled\", false),\n\t)\n\tIt(\"should discover interruptible reservations\", func() {\n\t\tnodeClass.Spec.CapacityReservationSelectorTerms = append(nodeClass.Spec.CapacityReservationSelectorTerms, v1.CapacityReservationSelectorTerm{\n\t\t\tTags: interruptibleTags,\n\t\t})\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\t\tExpect(nodeClass.StatusConditions().Get(v1.ConditionTypeCapacityReservationsReady).IsTrue()).To(BeTrue())\n\t\tExpect(nodeClass.Status.CapacityReservations).To(HaveLen(1))\n\t\tcr := nodeClass.Status.CapacityReservations[0]\n\t\tExpect(cr.ID).To(Equal(\"cr-i-m5.large-1a-1\"))\n\t\tExpect(cr.Interruptible).To(Equal(true))\n\t\tExpect(cr.State).To(Equal(v1.CapacityReservationStateActive))\n\t})\n})\n"
  },
  {
    "path": "pkg/controllers/nodeclass/controller.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage nodeclass\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"time\"\n\n\t\"go.uber.org/multierr\"\n\t\"k8s.io/apimachinery/pkg/api/errors\"\n\t\"k8s.io/utils/clock\"\n\t\"sigs.k8s.io/karpenter/pkg/cloudprovider\"\n\t\"sigs.k8s.io/karpenter/pkg/operator/injection\"\n\tkarpoptions \"sigs.k8s.io/karpenter/pkg/operator/options\"\n\tnodeclaimutils \"sigs.k8s.io/karpenter/pkg/utils/nodeclaim\"\n\t\"sigs.k8s.io/karpenter/pkg/utils/result\"\n\n\t\"github.com/patrickmn/go-cache\"\n\t\"github.com/samber/lo\"\n\t\"k8s.io/apimachinery/pkg/api/equality\"\n\t\"k8s.io/apimachinery/pkg/types\"\n\tcontrollerruntime \"sigs.k8s.io/controller-runtime\"\n\t\"sigs.k8s.io/controller-runtime/pkg/builder\"\n\t\"sigs.k8s.io/controller-runtime/pkg/client\"\n\t\"sigs.k8s.io/controller-runtime/pkg/controller\"\n\t\"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil\"\n\t\"sigs.k8s.io/controller-runtime/pkg/event\"\n\t\"sigs.k8s.io/controller-runtime/pkg/handler\"\n\t\"sigs.k8s.io/controller-runtime/pkg/manager\"\n\t\"sigs.k8s.io/controller-runtime/pkg/predicate\"\n\t\"sigs.k8s.io/controller-runtime/pkg/reconcile\"\n\n\t\"github.com/awslabs/operatorpkg/reasonable\"\n\t\"github.com/awslabs/operatorpkg/serrors\"\n\n\tkarpv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n\t\"sigs.k8s.io/karpenter/pkg/events\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\tsdk \"github.com/aws/karpenter-provider-aws/pkg/aws\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/operator/options\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/amifamily\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/capacityreservation\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/instanceprofile\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/instancetype\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/launchtemplate\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/securitygroup\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/subnet\"\n)\n\ntype Controller struct {\n\tkubeClient              client.Client\n\trecorder                events.Recorder\n\tregion                  string\n\tlaunchTemplateProvider  launchtemplate.Provider\n\tinstanceProfileProvider instanceprofile.Provider\n\tvalidation              *Validation\n\treconcilers             []reconcile.TypedReconciler[*v1.EC2NodeClass]\n}\n\nfunc NewController(\n\tclk clock.Clock,\n\tkubeClient client.Client,\n\tcloudProvider cloudprovider.CloudProvider,\n\trecorder events.Recorder,\n\tregion string,\n\tsubnetProvider subnet.Provider,\n\tsecurityGroupProvider securitygroup.Provider,\n\tamiProvider amifamily.Provider,\n\tinstanceProfileProvider instanceprofile.Provider,\n\tinstanceTypeProvider instancetype.Provider,\n\tlaunchTemplateProvider launchtemplate.Provider,\n\tcapacityReservationProvider capacityreservation.Provider,\n\tec2api sdk.EC2API,\n\tvalidationCache *cache.Cache,\n\trecreationCache *cache.Cache,\n\tamiResolver amifamily.Resolver,\n\tdisableDryRun bool,\n) *Controller {\n\tvalidation := NewValidationReconciler(kubeClient, cloudProvider, ec2api, amiResolver, instanceTypeProvider, launchTemplateProvider, validationCache, disableDryRun)\n\treturn &Controller{\n\t\tkubeClient:              kubeClient,\n\t\trecorder:                recorder,\n\t\tregion:                  region,\n\t\tlaunchTemplateProvider:  launchTemplateProvider,\n\t\tinstanceProfileProvider: instanceProfileProvider,\n\t\tvalidation:              validation,\n\t\treconcilers: []reconcile.TypedReconciler[*v1.EC2NodeClass]{\n\t\t\tNewAMIReconciler(amiProvider),\n\t\t\tNewCapacityReservationReconciler(clk, capacityReservationProvider),\n\t\t\tNewSubnetReconciler(subnetProvider),\n\t\t\tNewSecurityGroupReconciler(securityGroupProvider),\n\t\t\tNewInstanceProfileReconciler(instanceProfileProvider, region, recreationCache),\n\t\t\tvalidation,\n\t\t},\n\t}\n}\n\nfunc (c *Controller) Name() string {\n\treturn \"nodeclass\"\n}\n\n//nolint:gocyclo\nfunc (c *Controller) Reconcile(ctx context.Context, nodeClass *v1.EC2NodeClass) (reconcile.Result, error) {\n\tctx = injection.WithControllerName(ctx, c.Name())\n\n\tif !nodeClass.GetDeletionTimestamp().IsZero() {\n\t\treturn c.finalize(ctx, nodeClass)\n\t}\n\n\tif !controllerutil.ContainsFinalizer(nodeClass, v1.TerminationFinalizer) {\n\t\tstored := nodeClass.DeepCopy()\n\t\tcontrollerutil.AddFinalizer(nodeClass, v1.TerminationFinalizer)\n\n\t\t// We use client.MergeFromWithOptimisticLock because patching a list with a JSON merge patch\n\t\t// can cause races due to the fact that it fully replaces the list on a change\n\t\t// Here, we are updating the finalizer list\n\t\tif err := c.kubeClient.Patch(ctx, nodeClass, client.MergeFromWithOptions(stored, client.MergeFromWithOptimisticLock{})); client.IgnoreNotFound(err) != nil {\n\t\t\tif errors.IsConflict(err) {\n\t\t\t\treturn reconcile.Result{Requeue: true}, nil\n\t\t\t}\n\t\t\treturn reconcile.Result{}, err\n\t\t}\n\t}\n\tstored := nodeClass.DeepCopy()\n\n\tvar results []reconcile.Result\n\tvar errs error\n\tfor _, reconciler := range c.reconcilers {\n\t\tif _, ok := reconciler.(*CapacityReservation); ok && !karpoptions.FromContext(ctx).FeatureGates.ReservedCapacity {\n\t\t\tcontinue\n\t\t}\n\t\tres, err := reconciler.Reconcile(ctx, nodeClass)\n\t\terrs = multierr.Append(errs, err)\n\t\tresults = append(results, res)\n\t}\n\n\tif !equality.Semantic.DeepEqual(stored, nodeClass) {\n\t\t// We use client.MergeFromWithOptimisticLock because patching a list with a JSON merge patch\n\t\t// can cause races due to the fact that it fully replaces the list on a change\n\t\t// Here, we are updating the status condition list\n\t\tif err := c.kubeClient.Status().Patch(ctx, nodeClass, client.MergeFromWithOptions(stored, client.MergeFromWithOptimisticLock{})); err != nil {\n\t\t\tif errors.IsConflict(err) {\n\t\t\t\treturn reconcile.Result{Requeue: true}, nil\n\t\t\t}\n\t\t\terrs = multierr.Append(errs, client.IgnoreNotFound(err))\n\t\t}\n\t}\n\tif errs != nil {\n\t\treturn reconcile.Result{}, errs\n\t}\n\treturn result.Min(results...), nil\n}\n\nfunc (c *Controller) cleanupInstanceProfiles(ctx context.Context, nodeClass *v1.EC2NodeClass) error {\n\tout, err := c.instanceProfileProvider.ListNodeClassProfiles(ctx, nodeClass)\n\n\tif err != nil {\n\t\treturn fmt.Errorf(\"listing instance profiles, %w\", err)\n\t}\n\n\tfor _, profile := range out {\n\t\tif err := c.instanceProfileProvider.Delete(ctx, *profile.InstanceProfileName); err != nil {\n\t\t\treturn serrors.Wrap(fmt.Errorf(\"deleting instance profile, %w\", err), \"instance-profile\", *profile.InstanceProfileName)\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (c *Controller) finalize(ctx context.Context, nodeClass *v1.EC2NodeClass) (reconcile.Result, error) {\n\tstored := nodeClass.DeepCopy()\n\tif !controllerutil.ContainsFinalizer(nodeClass, v1.TerminationFinalizer) {\n\t\treturn reconcile.Result{}, nil\n\t}\n\tnodeClaims := &karpv1.NodeClaimList{}\n\tif err := c.kubeClient.List(ctx, nodeClaims, nodeclaimutils.ForNodeClass(nodeClass)); err != nil {\n\t\treturn reconcile.Result{}, fmt.Errorf(\"listing nodeclaims that are using nodeclass, %w\", err)\n\t}\n\tif len(nodeClaims.Items) > 0 {\n\t\tc.recorder.Publish(WaitingOnNodeClaimTerminationEvent(nodeClass, lo.Map(nodeClaims.Items, func(nc karpv1.NodeClaim, _ int) string { return nc.Name })))\n\t\treturn reconcile.Result{RequeueAfter: time.Minute * 10}, nil // periodically fire the event\n\t}\n\t// Instance profile cleanup should be skipped in isolated VPCs to avoid IAM calls.\n\tif !options.FromContext(ctx).IsolatedVPC {\n\t\t// Deletes karpenter managed instance profiles for this nodeclass\n\t\tif err := c.cleanupInstanceProfiles(ctx, nodeClass); err != nil {\n\t\t\treturn reconcile.Result{}, err\n\t\t}\n\t\t// Ensure to clean up instance profile that may have been created pre-upgrade\n\t\tlegacyProfileName := nodeClass.LegacyInstanceProfileName(options.FromContext(ctx).ClusterName, c.region)\n\t\tif err := c.instanceProfileProvider.Delete(ctx, legacyProfileName); err != nil {\n\t\t\treturn reconcile.Result{}, serrors.Wrap(fmt.Errorf(\"deleting instance profile, %w\", err), \"instance-profile\", legacyProfileName)\n\t\t}\n\t}\n\n\tif err := c.launchTemplateProvider.DeleteAll(ctx, nodeClass); err != nil {\n\t\treturn reconcile.Result{}, fmt.Errorf(\"deleting launch templates, %w\", err)\n\t}\n\tcontrollerutil.RemoveFinalizer(nodeClass, v1.TerminationFinalizer)\n\tif !equality.Semantic.DeepEqual(stored, nodeClass) {\n\t\t// We use client.MergeFromWithOptimisticLock because patching a list with a JSON merge patch\n\t\t// can cause races due to the fact that it fully replaces the list on a change\n\t\t// Here, we are updating the finalizer list\n\t\t// https://github.com/kubernetes/kubernetes/issues/111643#issuecomment-2016489732\n\t\tif err := c.kubeClient.Patch(ctx, nodeClass, client.MergeFromWithOptions(stored, client.MergeFromWithOptimisticLock{})); err != nil {\n\t\t\tif errors.IsConflict(err) {\n\t\t\t\treturn reconcile.Result{Requeue: true}, nil\n\t\t\t}\n\t\t\treturn reconcile.Result{}, client.IgnoreNotFound(fmt.Errorf(\"removing termination finalizer, %w\", err))\n\t\t}\n\t}\n\tc.validation.clearCacheEntries(nodeClass)\n\treturn reconcile.Result{}, nil\n}\n\nfunc (c *Controller) Register(_ context.Context, m manager.Manager) error {\n\treturn controllerruntime.NewControllerManagedBy(m).\n\t\tNamed(c.Name()).\n\t\tFor(&v1.EC2NodeClass{}).\n\t\tWatches(\n\t\t\t&karpv1.NodeClaim{},\n\t\t\thandler.EnqueueRequestsFromMapFunc(func(_ context.Context, o client.Object) []reconcile.Request {\n\t\t\t\tnc := o.(*karpv1.NodeClaim)\n\t\t\t\tif nc.Spec.NodeClassRef == nil {\n\t\t\t\t\treturn nil\n\t\t\t\t}\n\t\t\t\treturn []reconcile.Request{{NamespacedName: types.NamespacedName{Name: nc.Spec.NodeClassRef.Name}}}\n\t\t\t}),\n\t\t\t// Watch for NodeClaim deletion events\n\t\t\tbuilder.WithPredicates(predicate.Funcs{\n\t\t\t\tCreateFunc: func(e event.CreateEvent) bool { return false },\n\t\t\t\tUpdateFunc: func(e event.UpdateEvent) bool { return false },\n\t\t\t\tDeleteFunc: func(e event.DeleteEvent) bool { return true },\n\t\t\t}),\n\t\t).\n\t\tWithOptions(controller.Options{\n\t\t\tRateLimiter:             reasonable.RateLimiter(),\n\t\t\tMaxConcurrentReconciles: 10,\n\t\t}).\n\t\tComplete(reconcile.AsReconciler(m.GetClient(), c))\n}\n"
  },
  {
    "path": "pkg/controllers/nodeclass/events.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage nodeclass\n\nimport (\n\t\"fmt\"\n\n\tcorev1 \"k8s.io/api/core/v1\"\n\n\t\"sigs.k8s.io/karpenter/pkg/events\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/utils\"\n)\n\nfunc WaitingOnNodeClaimTerminationEvent(nodeClass *v1.EC2NodeClass, names []string) events.Event {\n\treturn events.Event{\n\t\tInvolvedObject: nodeClass,\n\t\tType:           corev1.EventTypeNormal,\n\t\tReason:         \"WaitingOnNodeClaimTermination\",\n\t\tMessage:        fmt.Sprintf(\"Waiting on NodeClaim termination for %s\", utils.PrettySlice(names, 5)),\n\t\tDedupeValues:   []string{string(nodeClass.UID)},\n\t}\n}\n"
  },
  {
    "path": "pkg/controllers/nodeclass/garbagecollection/controller.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage garbagecollection\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"time\"\n\n\t\"github.com/awslabs/operatorpkg/serrors\"\n\t\"github.com/awslabs/operatorpkg/singleton\"\n\t\"k8s.io/apimachinery/pkg/util/sets\"\n\tcontrollerruntime \"sigs.k8s.io/controller-runtime\"\n\t\"sigs.k8s.io/controller-runtime/pkg/client\"\n\n\t\"github.com/awslabs/operatorpkg/reconciler\"\n\t\"sigs.k8s.io/controller-runtime/pkg/log\"\n\t\"sigs.k8s.io/controller-runtime/pkg/manager\"\n\t\"sigs.k8s.io/karpenter/pkg/cloudprovider\"\n\tnodeclaimutils \"sigs.k8s.io/karpenter/pkg/utils/nodeclaim\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/instanceprofile\"\n)\n\ntype Controller struct {\n\tkubeClient              client.Client\n\tcloudProvider           cloudprovider.CloudProvider\n\tinstanceProfileProvider instanceprofile.Provider\n\tregion                  string\n}\n\nfunc NewController(kubeClient client.Client, cloudProvider cloudprovider.CloudProvider, instanceProfileProvider instanceprofile.Provider, region string) *Controller {\n\treturn &Controller{\n\t\tkubeClient:              kubeClient,\n\t\tcloudProvider:           cloudProvider,\n\t\tinstanceProfileProvider: instanceProfileProvider,\n\t\tregion:                  region,\n\t}\n}\n\nfunc (c *Controller) getActiveProfiles(ctx context.Context) (sets.Set[string], error) {\n\tnodeClaims, err := nodeclaimutils.ListManaged(ctx, c.kubeClient, c.cloudProvider)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"listing nodeclaims, %w\", err)\n\t}\n\n\tactiveProfiles := sets.New[string]()\n\tfor _, nc := range nodeClaims {\n\t\tif profileName, ok := nc.Annotations[v1.AnnotationInstanceProfile]; ok {\n\t\t\tactiveProfiles.Insert(profileName)\n\t\t}\n\n\t}\n\n\treturn activeProfiles, nil\n}\n\nfunc (c *Controller) getCurrentProfiles(ctx context.Context) (sets.Set[string], error) {\n\tnodeClasses := &v1.EC2NodeClassList{}\n\tif err := c.kubeClient.List(ctx, nodeClasses); err != nil {\n\t\treturn nil, fmt.Errorf(\"listing nodeclasses, %w\", err)\n\t}\n\n\tcurrentProfiles := sets.New[string]()\n\n\tfor _, nc := range nodeClasses.Items {\n\t\tif nc.Status.InstanceProfile != \"\" {\n\t\t\tcurrentProfiles.Insert(nc.Status.InstanceProfile)\n\t\t}\n\t}\n\treturn currentProfiles, nil\n}\n\nfunc (c *Controller) shouldDeleteProfile(profileName string, currentProfiles sets.Set[string], activeProfiles sets.Set[string]) bool {\n\tif currentProfiles.Has(profileName) {\n\t\treturn false\n\t}\n\n\tif c.instanceProfileProvider.IsProtected(profileName) {\n\t\treturn false\n\t}\n\n\tif activeProfiles.Has(profileName) {\n\t\treturn false\n\t}\n\n\treturn true\n}\n\nfunc (c *Controller) cleanupInactiveProfiles(ctx context.Context) error {\n\tactiveProfiles, err := c.getActiveProfiles(ctx)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tcurrentProfiles, err := c.getCurrentProfiles(ctx)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tprofiles, err := c.instanceProfileProvider.ListClusterProfiles(ctx)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"listing instance profiles, %w\", err)\n\t}\n\n\tfor _, profile := range profiles {\n\t\tprofileName := *profile.InstanceProfileName\n\n\t\tif !c.shouldDeleteProfile(profileName, currentProfiles, activeProfiles) {\n\t\t\tcontinue\n\t\t}\n\n\t\tif err := c.instanceProfileProvider.Delete(ctx, profileName); err != nil {\n\t\t\treturn serrors.Wrap(fmt.Errorf(\"deleting instance profile, %w\", err), \"instance-profile\", profileName)\n\t\t}\n\t\tlog.FromContext(ctx).V(1).Info(\"deleted instance profile\", \"instance-profile\", profileName)\n\t}\n\treturn nil\n}\n\nfunc (c *Controller) Reconcile(ctx context.Context) (reconciler.Result, error) {\n\tctx = log.IntoContext(ctx, log.FromContext(ctx).WithValues(\"controller\", \"instanceprofile.garbagecollection\"))\n\n\tif err := c.cleanupInactiveProfiles(ctx); err != nil {\n\t\treturn reconciler.Result{}, err\n\t}\n\treturn reconciler.Result{RequeueAfter: 30 * time.Minute}, nil\n}\n\nfunc (c *Controller) Register(_ context.Context, m manager.Manager) error {\n\treturn controllerruntime.NewControllerManagedBy(m).\n\t\tNamed(\"instanceprofile.garbagecollection\").\n\t\tWatchesRawSource(singleton.Source()).\n\t\tComplete(singleton.AsReconciler(c))\n}\n"
  },
  {
    "path": "pkg/controllers/nodeclass/garbagecollection/suite_test.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage garbagecollection_test\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/awslabs/operatorpkg/object\"\n\t\"github.com/samber/lo\"\n\n\t\"github.com/aws/aws-sdk-go-v2/aws\"\n\tmetav1 \"k8s.io/apimachinery/pkg/apis/meta/v1\"\n\t\"k8s.io/client-go/tools/record\"\n\tkarpv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n\t\"sigs.k8s.io/karpenter/pkg/events\"\n\n\t\"github.com/aws/karpenter-provider-aws/pkg/apis\"\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/cloudprovider\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/controllers/nodeclass/garbagecollection\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/fake\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/operator/options\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/test\"\n\n\tiamtypes \"github.com/aws/aws-sdk-go-v2/service/iam/types\"\n\tcoreoptions \"sigs.k8s.io/karpenter/pkg/operator/options\"\n\tcoretest \"sigs.k8s.io/karpenter/pkg/test\"\n\t\"sigs.k8s.io/karpenter/pkg/test/v1alpha1\"\n\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n\t. \"sigs.k8s.io/karpenter/pkg/test/expectations\"\n\t. \"sigs.k8s.io/karpenter/pkg/utils/testing\"\n)\n\nvar (\n\tctx           context.Context\n\tenv           *coretest.Environment\n\tawsEnv        *test.Environment\n\tgcController  *garbagecollection.Controller\n\tnodeClass     *v1.EC2NodeClass\n\tcloudProvider *cloudprovider.CloudProvider\n)\n\nfunc TestAPIs(t *testing.T) {\n\tctx = TestContextWithLogger(t)\n\tRegisterFailHandler(Fail)\n\tRunSpecs(t, \"Instance Profile GarbageCollection\")\n}\n\nvar _ = BeforeSuite(func() {\n\n\t// Setup core environment with necessary CRDs\n\tenv = coretest.NewEnvironment(\n\t\tcoretest.WithCRDs(test.DisableCapacityReservationIDValidation(test.RemoveNodeClassTagValidation(apis.CRDs))...),\n\t\tcoretest.WithCRDs(v1alpha1.CRDs...),\n\t\tcoretest.WithFieldIndexers(coretest.NodeClaimNodeClassRefFieldIndexer(ctx)),\n\t\tcoretest.WithFieldIndexers(coretest.NodePoolNodeClassRefFieldIndexer(ctx)),\n\t)\n\n\t// Setup context with options\n\tctx = coreoptions.ToContext(ctx, coretest.Options(coretest.OptionsFields{\n\t\tFeatureGates: coretest.FeatureGates{ReservedCapacity: lo.ToPtr(true)},\n\t}))\n\tctx = options.ToContext(ctx, test.Options())\n\n\t// Setup AWS environment\n\tawsEnv = test.NewEnvironment(ctx, env)\n\n\t// Create cloudporivder\n\tcloudProvider = cloudprovider.New(\n\t\tawsEnv.InstanceTypesProvider,\n\t\tawsEnv.InstanceProvider,\n\t\tevents.NewRecorder(&record.FakeRecorder{}),\n\t\tenv.Client,\n\t\tawsEnv.AMIProvider,\n\t\tawsEnv.SecurityGroupProvider,\n\t\tawsEnv.CapacityReservationProvider,\n\t\tawsEnv.InstanceTypeStore,\n\t)\n\n\tgcController = garbagecollection.NewController(\n\t\tenv.Client,\n\t\tcloudProvider,\n\t\tawsEnv.InstanceProfileProvider,\n\t\tfake.DefaultRegion,\n\t)\n})\n\nvar _ = AfterSuite(func() {\n\tExpect(env.Stop()).To(Succeed(), \"Failed to stop environment\")\n})\n\nvar _ = BeforeEach(func() {\n\n\tctx = coreoptions.ToContext(ctx, coretest.Options(coretest.OptionsFields{FeatureGates: coretest.FeatureGates{ReservedCapacity: lo.ToPtr(true)}}))\n\tnodeClass = test.EC2NodeClass()\n\tawsEnv.Reset()\n\tExpect(awsEnv.InstanceTypesProvider.UpdateInstanceTypes(ctx)).To(Succeed())\n\tExpect(awsEnv.InstanceTypesProvider.UpdateInstanceTypeOfferings(ctx)).To(Succeed())\n})\n\nvar _ = AfterEach(func() {\n\tExpectCleanedUp(ctx, env.Client)\n\tExpectDeleted(ctx, env.Client, nodeClass)\n})\n\nvar _ = Describe(\"Instance Profile GarbageCollection\", func() {\n\tIt(\"should not delete active profiles\", func() {\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\n\t\t// Manually add profile to IAMAPI InstanceProfiles map\n\t\tprofileName := \"profile-A\"\n\t\tawsEnv.IAMAPI.InstanceProfiles = map[string]*iamtypes.InstanceProfile{\n\t\t\tprofileName: {\n\t\t\t\tInstanceProfileId:   aws.String(fake.InstanceProfileID()),\n\t\t\t\tInstanceProfileName: aws.String(profileName),\n\t\t\t\tPath:                lo.ToPtr(fmt.Sprintf(\"/karpenter/%s/%s/%s/\", fake.DefaultRegion, options.FromContext(ctx).ClusterName, nodeClass.UID)),\n\t\t\t\tRoles: []iamtypes.Role{\n\t\t\t\t\t{\n\t\t\t\t\t\tRoleName: aws.String(\"role-A\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}\n\n\t\t// Create NodeClaim to ensure created profile is Active\n\t\tnodeClaim := coretest.NodeClaim(karpv1.NodeClaim{\n\t\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\t\tAnnotations: map[string]string{\n\t\t\t\t\tv1.AnnotationInstanceProfile: profileName,\n\t\t\t\t},\n\t\t\t},\n\t\t\tSpec: karpv1.NodeClaimSpec{\n\t\t\t\tNodeClassRef: &karpv1.NodeClassReference{\n\t\t\t\t\tGroup: object.GVK(nodeClass).Group,\n\t\t\t\t\tKind:  object.GVK(nodeClass).Kind,\n\t\t\t\t\tName:  nodeClass.Name,\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\n\t\tExpectApplied(ctx, env.Client, nodeClaim)\n\n\t\t// Ensure profile is not protected\n\t\tawsEnv.InstanceProfileProvider.SetProtectedState(profileName, false)\n\n\t\t// Run GC\n\t\tExpectSingletonReconciled(ctx, gcController)\n\n\t\t// Verify profile not deleted\n\t\tExpect(awsEnv.IAMAPI.InstanceProfiles).To(HaveKey(profileName))\n\t})\n\n\tIt(\"should not delete current profiles\", func() {\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\n\t\t// Manually add profile to IAMAPI InstanceProfiles map\n\t\tprofileName := \"profile-A\"\n\t\tawsEnv.IAMAPI.InstanceProfiles = map[string]*iamtypes.InstanceProfile{\n\t\t\tprofileName: {\n\t\t\t\tInstanceProfileId:   aws.String(fake.InstanceProfileID()),\n\t\t\t\tInstanceProfileName: aws.String(profileName),\n\t\t\t\tPath:                lo.ToPtr(fmt.Sprintf(\"/karpenter/%s/%s/%s/\", fake.DefaultRegion, options.FromContext(ctx).ClusterName, nodeClass.UID)),\n\t\t\t\tRoles: []iamtypes.Role{\n\t\t\t\t\t{\n\t\t\t\t\t\tRoleName: aws.String(\"role-A\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}\n\n\t\t// Ensure profile is current\n\t\tnodeClass.Status.InstanceProfile = profileName\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\n\t\t// Ensure profile is not protected\n\t\tawsEnv.InstanceProfileProvider.SetProtectedState(profileName, false)\n\n\t\t// Run GC\n\t\tExpectSingletonReconciled(ctx, gcController)\n\n\t\t// Verify profile not deleted\n\t\tExpect(awsEnv.IAMAPI.InstanceProfiles).To(HaveKey(profileName))\n\t})\n\n\tIt(\"should not delete protected profiles\", func() {\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\n\t\t// Manually add profile to IAMAPI InstanceProfiles map\n\t\tprofileName := \"profile-A\"\n\t\tawsEnv.IAMAPI.InstanceProfiles = map[string]*iamtypes.InstanceProfile{\n\t\t\tprofileName: {\n\t\t\t\tInstanceProfileId:   aws.String(fake.InstanceProfileID()),\n\t\t\t\tInstanceProfileName: aws.String(profileName),\n\t\t\t\tPath:                lo.ToPtr(fmt.Sprintf(\"/karpenter/%s/%s/%s/\", fake.DefaultRegion, options.FromContext(ctx).ClusterName, nodeClass.UID)),\n\t\t\t\tRoles: []iamtypes.Role{\n\t\t\t\t\t{\n\t\t\t\t\t\tRoleName: aws.String(\"role-A\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}\n\n\t\t// Ensure profile is protected\n\t\tawsEnv.InstanceProfileProvider.SetProtectedState(profileName, true)\n\n\t\t// Run GC\n\t\tExpectSingletonReconciled(ctx, gcController)\n\n\t\t// Verify profile not deleted\n\t\tExpect(awsEnv.IAMAPI.InstanceProfiles).To(HaveKey(profileName))\n\t})\n\n\tIt(\"should delete inactive profiles which are not current or protected\", func() {\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\n\t\t// Manually add profile to IAMAPI InstanceProfiles map\n\t\tprofileName := \"profile-A\"\n\t\tawsEnv.IAMAPI.InstanceProfiles = map[string]*iamtypes.InstanceProfile{\n\t\t\tprofileName: {\n\t\t\t\tInstanceProfileId:   aws.String(fake.InstanceProfileID()),\n\t\t\t\tInstanceProfileName: aws.String(profileName),\n\t\t\t\tPath:                lo.ToPtr(fmt.Sprintf(\"/karpenter/%s/%s/%s/\", fake.DefaultRegion, options.FromContext(ctx).ClusterName, nodeClass.UID)),\n\t\t\t\tRoles: []iamtypes.Role{\n\t\t\t\t\t{\n\t\t\t\t\t\tRoleName: aws.String(\"role-A\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}\n\n\t\t// Ensure profile is not protected\n\t\tawsEnv.InstanceProfileProvider.SetProtectedState(profileName, false)\n\n\t\t// Run GC\n\t\tExpectSingletonReconciled(ctx, gcController)\n\n\t\t// Verify profile not deleted\n\t\tExpect(awsEnv.IAMAPI.InstanceProfiles).ToNot(HaveKey(profileName))\n\t})\n\n\tIt(\"should requeue after 30 minutes for a successful run\", func() {\n\t\t// Run GC with no profiles to clean up\n\t\tresult, err := gcController.Reconcile(ctx)\n\t\tExpect(err).To(BeNil())\n\t\tExpect(result.RequeueAfter).To(Equal(30 * time.Minute))\n\t})\n\n\tIt(\"should requeue immediately on deletion failure\", func() {\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\n\t\t// Add a profile that should be deleted\n\t\tprofileName := \"profile-A\"\n\t\tawsEnv.IAMAPI.InstanceProfiles = map[string]*iamtypes.InstanceProfile{\n\t\t\tprofileName: {\n\t\t\t\tInstanceProfileId:   aws.String(fake.InstanceProfileID()),\n\t\t\t\tInstanceProfileName: aws.String(profileName),\n\t\t\t\tPath:                lo.ToPtr(fmt.Sprintf(\"/karpenter/%s/%s/%s/\", fake.DefaultRegion, options.FromContext(ctx).ClusterName, nodeClass.UID)),\n\t\t\t},\n\t\t}\n\n\t\t// Make DeleteInstanceProfile fail\n\t\tawsEnv.IAMAPI.DeleteInstanceProfileBehavior.Error.Set(fmt.Errorf(\"get failed\"))\n\n\t\t// Run GC\n\t\tresult, err := gcController.Reconcile(ctx)\n\n\t\t// Should return error from deletion\n\t\tExpect(err).To(HaveOccurred())\n\t\tExpect(err.Error()).To(ContainSubstring(\"get failed\"))\n\n\t\t// Should requeue immediately (no delay)\n\t\tExpect(result.RequeueAfter).To(Equal(time.Duration(0)))\n\n\t\t// Profile should still exist since deletion failed\n\t\tExpect(awsEnv.IAMAPI.InstanceProfiles).To(HaveKey(profileName))\n\t})\n})\n"
  },
  {
    "path": "pkg/controllers/nodeclass/hash/controller.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage hash\n\nimport (\n\t\"context\"\n\n\t\"github.com/samber/lo\"\n\t\"go.uber.org/multierr\"\n\t\"k8s.io/apimachinery/pkg/api/equality\"\n\tcontrollerruntime \"sigs.k8s.io/controller-runtime\"\n\t\"sigs.k8s.io/controller-runtime/pkg/client\"\n\t\"sigs.k8s.io/controller-runtime/pkg/controller\"\n\t\"sigs.k8s.io/controller-runtime/pkg/manager\"\n\t\"sigs.k8s.io/controller-runtime/pkg/reconcile\"\n\t\"sigs.k8s.io/karpenter/pkg/operator/injection\"\n\tnodeclaimutils \"sigs.k8s.io/karpenter/pkg/utils/nodeclaim\"\n\n\t\"github.com/awslabs/operatorpkg/reasonable\"\n\tkarpv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n)\n\ntype Controller struct {\n\tkubeClient client.Client\n}\n\nfunc NewController(kubeClient client.Client) *Controller {\n\treturn &Controller{\n\t\tkubeClient: kubeClient,\n\t}\n}\n\nfunc (c *Controller) Reconcile(ctx context.Context, nodeClass *v1.EC2NodeClass) (reconcile.Result, error) {\n\tctx = injection.WithControllerName(ctx, \"nodeclass.hash\")\n\n\tstored := nodeClass.DeepCopy()\n\n\tif nodeClass.Annotations[v1.AnnotationEC2NodeClassHashVersion] != v1.EC2NodeClassHashVersion {\n\t\tif err := c.updateNodeClaimHash(ctx, nodeClass); err != nil {\n\t\t\treturn reconcile.Result{}, err\n\t\t}\n\t}\n\tnodeClass.Annotations = lo.Assign(nodeClass.Annotations, map[string]string{\n\t\tv1.AnnotationEC2NodeClassHash:        nodeClass.Hash(),\n\t\tv1.AnnotationEC2NodeClassHashVersion: v1.EC2NodeClassHashVersion,\n\t})\n\n\tif !equality.Semantic.DeepEqual(stored, nodeClass) {\n\t\tif err := c.kubeClient.Patch(ctx, nodeClass, client.MergeFrom(stored)); err != nil {\n\t\t\treturn reconcile.Result{}, err\n\t\t}\n\t}\n\n\treturn reconcile.Result{}, nil\n}\n\nfunc (c *Controller) Register(_ context.Context, m manager.Manager) error {\n\treturn controllerruntime.NewControllerManagedBy(m).\n\t\tNamed(\"nodeclass.hash\").\n\t\tFor(&v1.EC2NodeClass{}).\n\t\tWithOptions(controller.Options{\n\t\t\tRateLimiter:             reasonable.RateLimiter(),\n\t\t\tMaxConcurrentReconciles: 10,\n\t\t}).\n\t\tComplete(reconcile.AsReconciler(m.GetClient(), c))\n}\n\n// Updating `ec2nodeclass-hash-version` annotation inside the karpenter controller means a breaking change has been made to the hash calculation.\n// `ec2nodeclass-hash` annotation on the EC2NodeClass will be updated, due to the breaking change, making the `ec2nodeclass-hash` on the NodeClaim different from\n// EC2NodeClass. Since, we cannot rely on the `ec2nodeclass-hash` on the NodeClaims, due to the breaking change, we will need to re-calculate the hash and update the annotation.\n// For more information on the Drift Hash Versioning: https://github.com/kubernetes-sigs/karpenter/blob/main/designs/drift-hash-versioning.md\nfunc (c *Controller) updateNodeClaimHash(ctx context.Context, nodeClass *v1.EC2NodeClass) error {\n\tnodeClaims := &karpv1.NodeClaimList{}\n\tif err := c.kubeClient.List(ctx, nodeClaims, nodeclaimutils.ForNodeClass(nodeClass)); err != nil {\n\t\treturn err\n\t}\n\n\terrs := make([]error, len(nodeClaims.Items))\n\tfor i := range nodeClaims.Items {\n\t\tnc := &nodeClaims.Items[i]\n\t\tstored := nc.DeepCopy()\n\n\t\tif nc.Annotations[v1.AnnotationEC2NodeClassHashVersion] != v1.EC2NodeClassHashVersion {\n\t\t\tnc.Annotations = lo.Assign(nc.Annotations, map[string]string{\n\t\t\t\tv1.AnnotationEC2NodeClassHashVersion: v1.EC2NodeClassHashVersion,\n\t\t\t})\n\n\t\t\t// Any NodeClaim that is already drifted will remain drifted if the karpenter.k8s.aws/nodepool-hash-version doesn't match\n\t\t\t// Since the hashing mechanism has changed we will not be able to determine if the drifted status of the NodeClaim has changed\n\t\t\tif nc.StatusConditions().Get(karpv1.ConditionTypeDrifted) == nil {\n\t\t\t\tnc.Annotations = lo.Assign(nc.Annotations, map[string]string{\n\t\t\t\t\tv1.AnnotationEC2NodeClassHash: nodeClass.Hash(),\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tif !equality.Semantic.DeepEqual(stored, nc) {\n\t\t\t\tif err := c.kubeClient.Patch(ctx, nc, client.MergeFrom(stored)); err != nil {\n\t\t\t\t\terrs[i] = client.IgnoreNotFound(err)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn multierr.Combine(errs...)\n}\n"
  },
  {
    "path": "pkg/controllers/nodeclass/hash/suite_test.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage hash_test\n\nimport (\n\t\"context\"\n\t\"testing\"\n\n\t\"github.com/samber/lo\"\n\n\t\"sigs.k8s.io/karpenter/pkg/test/v1alpha1\"\n\n\t\"github.com/awslabs/operatorpkg/object\"\n\t\"github.com/imdario/mergo\"\n\tmetav1 \"k8s.io/apimachinery/pkg/apis/meta/v1\"\n\tkarpv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n\tcoreoptions \"sigs.k8s.io/karpenter/pkg/operator/options\"\n\tcoretest \"sigs.k8s.io/karpenter/pkg/test\"\n\n\t\"github.com/aws/aws-sdk-go-v2/aws\"\n\n\t\"github.com/aws/karpenter-provider-aws/pkg/apis\"\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/controllers/nodeclass/hash\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/operator/options\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/test\"\n\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n\t. \"sigs.k8s.io/karpenter/pkg/test/expectations\"\n\t. \"sigs.k8s.io/karpenter/pkg/utils/testing\"\n)\n\nvar ctx context.Context\nvar env *coretest.Environment\nvar awsEnv *test.Environment\nvar hashController *hash.Controller\n\nfunc TestAPIs(t *testing.T) {\n\tctx = TestContextWithLogger(t)\n\tRegisterFailHandler(Fail)\n\tRunSpecs(t, \"EC2NodeClass\")\n}\n\nvar _ = BeforeSuite(func() {\n\tenv = coretest.NewEnvironment(coretest.WithCRDs(apis.CRDs...), coretest.WithCRDs(v1alpha1.CRDs...), coretest.WithFieldIndexers(coretest.NodeClaimNodeClassRefFieldIndexer(ctx)))\n\tctx = coreoptions.ToContext(ctx, coretest.Options(coretest.OptionsFields{FeatureGates: coretest.FeatureGates{ReservedCapacity: lo.ToPtr(true)}}))\n\tctx = options.ToContext(ctx, test.Options())\n\tawsEnv = test.NewEnvironment(ctx, env)\n\n\thashController = hash.NewController(env.Client)\n})\n\nvar _ = AfterSuite(func() {\n\tExpect(env.Stop()).To(Succeed(), \"Failed to stop environment\")\n})\n\nvar _ = BeforeEach(func() {\n\tctx = coreoptions.ToContext(ctx, coretest.Options(coretest.OptionsFields{FeatureGates: coretest.FeatureGates{ReservedCapacity: lo.ToPtr(true)}}))\n\tawsEnv.Reset()\n})\n\nvar _ = AfterEach(func() {\n\tExpectCleanedUp(ctx, env.Client)\n})\n\nvar _ = Describe(\"NodeClass Hash Controller\", func() {\n\tvar nodeClass *v1.EC2NodeClass\n\tvar nodePool *karpv1.NodePool\n\tBeforeEach(func() {\n\t\tnodeClass = test.EC2NodeClass(v1.EC2NodeClass{\n\t\t\tSpec: v1.EC2NodeClassSpec{\n\t\t\t\tSubnetSelectorTerms: []v1.SubnetSelectorTerm{\n\t\t\t\t\t{\n\t\t\t\t\t\tTags: map[string]string{\"*\": \"*\"},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tSecurityGroupSelectorTerms: []v1.SecurityGroupSelectorTerm{\n\t\t\t\t\t{\n\t\t\t\t\t\tTags: map[string]string{\"*\": \"*\"},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tAMIFamily: lo.ToPtr(v1.AMIFamilyCustom),\n\t\t\t\tAMISelectorTerms: []v1.AMISelectorTerm{\n\t\t\t\t\t{\n\t\t\t\t\t\tTags: map[string]string{\"*\": \"*\"},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tnodePool = coretest.NodePool(karpv1.NodePool{\n\t\t\tSpec: karpv1.NodePoolSpec{\n\t\t\t\tTemplate: karpv1.NodeClaimTemplate{\n\t\t\t\t\tSpec: karpv1.NodeClaimTemplateSpec{\n\t\t\t\t\t\tNodeClassRef: &karpv1.NodeClassReference{\n\t\t\t\t\t\t\tGroup: object.GVK(nodeClass).Group,\n\t\t\t\t\t\t\tKind:  object.GVK(nodeClass).Kind,\n\t\t\t\t\t\t\tName:  nodeClass.Name,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t})\n\tDescribeTable(\"should update the drift hash when static field is updated\", func(changes *v1.EC2NodeClass) {\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\tExpectObjectReconciled(ctx, env.Client, hashController, nodeClass)\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\n\t\texpectedHash := nodeClass.Hash()\n\t\tExpect(nodeClass.ObjectMeta.Annotations[v1.AnnotationEC2NodeClassHash]).To(Equal(expectedHash))\n\n\t\tExpect(mergo.Merge(nodeClass, changes, mergo.WithOverride)).To(Succeed())\n\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\tExpectObjectReconciled(ctx, env.Client, hashController, nodeClass)\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\n\t\texpectedHashTwo := nodeClass.Hash()\n\t\tExpect(nodeClass.Annotations[v1.AnnotationEC2NodeClassHash]).To(Equal(expectedHashTwo))\n\t\tExpect(expectedHash).ToNot(Equal(expectedHashTwo))\n\n\t},\n\t\tEntry(\"UserData Drift\", &v1.EC2NodeClass{Spec: v1.EC2NodeClassSpec{UserData: aws.String(\"userdata-test-2\")}}),\n\t\tEntry(\"Tags Drift\", &v1.EC2NodeClass{Spec: v1.EC2NodeClassSpec{Tags: map[string]string{\"keyTag-test-3\": \"valueTag-test-3\"}}}),\n\t\tEntry(\"BlockDeviceMappings Drift\", &v1.EC2NodeClass{Spec: v1.EC2NodeClassSpec{BlockDeviceMappings: []*v1.BlockDeviceMapping{{DeviceName: aws.String(\"map-device-test-3\")}}}}),\n\t\tEntry(\"DetailedMonitoring Drift\", &v1.EC2NodeClass{Spec: v1.EC2NodeClassSpec{DetailedMonitoring: aws.Bool(true)}}),\n\t\tEntry(\"MetadataOptions Drift\", &v1.EC2NodeClass{Spec: v1.EC2NodeClassSpec{MetadataOptions: &v1.MetadataOptions{HTTPEndpoint: aws.String(\"disabled\")}}}),\n\t\tEntry(\"Context Drift\", &v1.EC2NodeClass{Spec: v1.EC2NodeClassSpec{Context: aws.String(\"context-2\")}}),\n\t)\n\tIt(\"should not update the drift hash when dynamic field is updated\", func() {\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\tExpectObjectReconciled(ctx, env.Client, hashController, nodeClass)\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\n\t\texpectedHash := nodeClass.Hash()\n\t\tExpect(nodeClass.Annotations[v1.AnnotationEC2NodeClassHash]).To(Equal(expectedHash))\n\n\t\tnodeClass.Spec.SubnetSelectorTerms = []v1.SubnetSelectorTerm{\n\t\t\t{\n\t\t\t\tID: \"subnet-test1\",\n\t\t\t},\n\t\t}\n\t\tnodeClass.Spec.SecurityGroupSelectorTerms = []v1.SecurityGroupSelectorTerm{\n\t\t\t{\n\t\t\t\tID: \"sg-test1\",\n\t\t\t},\n\t\t}\n\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{\n\t\t\t{\n\t\t\t\tTags: map[string]string{\"ami-test-key\": \"ami-test-value\"},\n\t\t\t},\n\t\t}\n\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\tExpectObjectReconciled(ctx, env.Client, hashController, nodeClass)\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\t\tExpect(nodeClass.Annotations[v1.AnnotationEC2NodeClassHash]).To(Equal(expectedHash))\n\t})\n\tIt(\"should update ec2nodeclass-hash-version annotation when the ec2nodeclass-hash-version on the NodeClass does not match with the controller hash version\", func() {\n\t\tnodeClass.Annotations = map[string]string{\n\t\t\tv1.AnnotationEC2NodeClassHash:        \"abceduefed\",\n\t\t\tv1.AnnotationEC2NodeClassHashVersion: \"test\",\n\t\t}\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\n\t\tExpectObjectReconciled(ctx, env.Client, hashController, nodeClass)\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\n\t\texpectedHash := nodeClass.Hash()\n\t\t// Expect ec2nodeclass-hash on the NodeClass to be updated\n\t\tExpect(nodeClass.Annotations).To(HaveKeyWithValue(v1.AnnotationEC2NodeClassHash, expectedHash))\n\t\tExpect(nodeClass.Annotations).To(HaveKeyWithValue(v1.AnnotationEC2NodeClassHashVersion, v1.EC2NodeClassHashVersion))\n\t})\n\tIt(\"should update ec2nodeclass-hash-versions on all NodeClaims when the ec2nodeclass-hash-version does not match with the controller hash version\", func() {\n\t\tnodeClass.Annotations = map[string]string{\n\t\t\tv1.AnnotationEC2NodeClassHash:        \"abceduefed\",\n\t\t\tv1.AnnotationEC2NodeClassHashVersion: \"test\",\n\t\t}\n\t\tnodeClaimOne := coretest.NodeClaim(karpv1.NodeClaim{\n\t\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\t\tLabels: map[string]string{karpv1.NodePoolLabelKey: nodePool.Name},\n\t\t\t\tAnnotations: map[string]string{\n\t\t\t\t\tv1.AnnotationEC2NodeClassHash:        \"123456\",\n\t\t\t\t\tv1.AnnotationEC2NodeClassHashVersion: \"test\",\n\t\t\t\t},\n\t\t\t},\n\t\t\tSpec: karpv1.NodeClaimSpec{\n\t\t\t\tNodeClassRef: &karpv1.NodeClassReference{\n\t\t\t\t\tGroup: object.GVK(nodeClass).Group,\n\t\t\t\t\tKind:  object.GVK(nodeClass).Kind,\n\t\t\t\t\tName:  nodeClass.Name,\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tnodeClaimTwo := coretest.NodeClaim(karpv1.NodeClaim{\n\t\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\t\tLabels: map[string]string{karpv1.NodePoolLabelKey: nodePool.Name},\n\t\t\t\tAnnotations: map[string]string{\n\t\t\t\t\tv1.AnnotationEC2NodeClassHash:        \"123456\",\n\t\t\t\t\tv1.AnnotationEC2NodeClassHashVersion: \"test\",\n\t\t\t\t},\n\t\t\t},\n\t\t\tSpec: karpv1.NodeClaimSpec{\n\t\t\t\tNodeClassRef: &karpv1.NodeClassReference{\n\t\t\t\t\tGroup: object.GVK(nodeClass).Group,\n\t\t\t\t\tKind:  object.GVK(nodeClass).Kind,\n\t\t\t\t\tName:  nodeClass.Name,\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\n\t\tExpectApplied(ctx, env.Client, nodeClass, nodeClaimOne, nodeClaimTwo, nodePool)\n\n\t\tExpectObjectReconciled(ctx, env.Client, hashController, nodeClass)\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\t\tnodeClaimOne = ExpectExists(ctx, env.Client, nodeClaimOne)\n\t\tnodeClaimTwo = ExpectExists(ctx, env.Client, nodeClaimTwo)\n\n\t\texpectedHash := nodeClass.Hash()\n\t\t// Expect ec2nodeclass-hash on the NodeClaims to be updated\n\t\tExpect(nodeClaimOne.Annotations).To(HaveKeyWithValue(v1.AnnotationEC2NodeClassHash, expectedHash))\n\t\tExpect(nodeClaimOne.Annotations).To(HaveKeyWithValue(v1.AnnotationEC2NodeClassHashVersion, v1.EC2NodeClassHashVersion))\n\t\tExpect(nodeClaimTwo.Annotations).To(HaveKeyWithValue(v1.AnnotationEC2NodeClassHash, expectedHash))\n\t\tExpect(nodeClaimTwo.Annotations).To(HaveKeyWithValue(v1.AnnotationEC2NodeClassHashVersion, v1.EC2NodeClassHashVersion))\n\t})\n\tIt(\"should not update ec2nodeclass-hash on all NodeClaims when the ec2nodeclass-hash-version matches the controller hash version\", func() {\n\t\tnodeClass.Annotations = map[string]string{\n\t\t\tv1.AnnotationEC2NodeClassHash:        \"abceduefed\",\n\t\t\tv1.AnnotationEC2NodeClassHashVersion: \"test-version\",\n\t\t}\n\t\tnodeClaim := coretest.NodeClaim(karpv1.NodeClaim{\n\t\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\t\tLabels: map[string]string{karpv1.NodePoolLabelKey: nodePool.Name},\n\t\t\t\tAnnotations: map[string]string{\n\t\t\t\t\tv1.AnnotationEC2NodeClassHash:        \"1234564654\",\n\t\t\t\t\tv1.AnnotationEC2NodeClassHashVersion: v1.EC2NodeClassHashVersion,\n\t\t\t\t},\n\t\t\t},\n\t\t\tSpec: karpv1.NodeClaimSpec{\n\t\t\t\tNodeClassRef: &karpv1.NodeClassReference{\n\t\t\t\t\tGroup: object.GVK(nodeClass).Group,\n\t\t\t\t\tKind:  object.GVK(nodeClass).Kind,\n\t\t\t\t\tName:  nodeClass.Name,\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tExpectApplied(ctx, env.Client, nodeClass, nodeClaim, nodePool)\n\n\t\tExpectObjectReconciled(ctx, env.Client, hashController, nodeClass)\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\t\tnodeClaim = ExpectExists(ctx, env.Client, nodeClaim)\n\n\t\texpectedHash := nodeClass.Hash()\n\n\t\t// Expect ec2nodeclass-hash on the NodeClass to be updated\n\t\tExpect(nodeClass.Annotations).To(HaveKeyWithValue(v1.AnnotationEC2NodeClassHash, expectedHash))\n\t\tExpect(nodeClass.Annotations).To(HaveKeyWithValue(v1.AnnotationEC2NodeClassHashVersion, v1.EC2NodeClassHashVersion))\n\t\t// Expect ec2nodeclass-hash on the NodeClaims to stay the same\n\t\tExpect(nodeClaim.Annotations).To(HaveKeyWithValue(v1.AnnotationEC2NodeClassHash, \"1234564654\"))\n\t\tExpect(nodeClaim.Annotations).To(HaveKeyWithValue(v1.AnnotationEC2NodeClassHashVersion, v1.EC2NodeClassHashVersion))\n\t})\n\tIt(\"should not update ec2nodeclass-hash on the NodeClaim if it's drifted and the ec2nodeclass-hash-version does not match the controller hash version\", func() {\n\t\tnodeClass.Annotations = map[string]string{\n\t\t\tv1.AnnotationEC2NodeClassHash:        \"abceduefed\",\n\t\t\tv1.AnnotationEC2NodeClassHashVersion: \"test\",\n\t\t}\n\t\tnodeClaim := coretest.NodeClaim(karpv1.NodeClaim{\n\t\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\t\tLabels: map[string]string{karpv1.NodePoolLabelKey: nodePool.Name},\n\t\t\t\tAnnotations: map[string]string{\n\t\t\t\t\tv1.AnnotationEC2NodeClassHash:        \"123456\",\n\t\t\t\t\tv1.AnnotationEC2NodeClassHashVersion: \"test\",\n\t\t\t\t},\n\t\t\t},\n\t\t\tSpec: karpv1.NodeClaimSpec{\n\t\t\t\tNodeClassRef: &karpv1.NodeClassReference{\n\t\t\t\t\tGroup: object.GVK(nodeClass).Group,\n\t\t\t\t\tKind:  object.GVK(nodeClass).Kind,\n\t\t\t\t\tName:  nodeClass.Name,\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tnodeClaim.StatusConditions().SetTrue(karpv1.ConditionTypeDrifted)\n\t\tExpectApplied(ctx, env.Client, nodeClass, nodeClaim, nodePool)\n\n\t\tExpectObjectReconciled(ctx, env.Client, hashController, nodeClass)\n\t\tnodeClaim = ExpectExists(ctx, env.Client, nodeClaim)\n\n\t\t// Expect ec2nodeclass-hash on the NodeClaims to stay the same\n\t\tExpect(nodeClaim.Annotations).To(HaveKeyWithValue(v1.AnnotationEC2NodeClassHash, \"123456\"))\n\t\tExpect(nodeClaim.Annotations).To(HaveKeyWithValue(v1.AnnotationEC2NodeClassHashVersion, v1.EC2NodeClassHashVersion))\n\t})\n})\n"
  },
  {
    "path": "pkg/controllers/nodeclass/instanceprofile.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage nodeclass\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\n\t\"github.com/patrickmn/go-cache\"\n\t\"github.com/samber/lo\"\n\t\"sigs.k8s.io/controller-runtime/pkg/reconcile\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\tawserrors \"github.com/aws/karpenter-provider-aws/pkg/errors\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/operator/options\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/instanceprofile\"\n)\n\ntype InstanceProfile struct {\n\tinstanceProfileProvider instanceprofile.Provider\n\tregion                  string\n\trecreationCache         *cache.Cache\n}\n\nfunc NewInstanceProfileReconciler(instanceProfileProvider instanceprofile.Provider, region string, cache *cache.Cache) *InstanceProfile {\n\treturn &InstanceProfile{\n\t\tinstanceProfileProvider: instanceProfileProvider,\n\t\tregion:                  region,\n\t\trecreationCache:         cache,\n\t}\n}\n\nfunc generateCacheKey(nodeClass *v1.EC2NodeClass) string {\n\treturn fmt.Sprintf(\"%s/%s\", nodeClass.Spec.Role, nodeClass.UID)\n}\n\nfunc (ip *InstanceProfile) protectProfile(profile string) {\n\tif profile != \"\" {\n\t\tip.instanceProfileProvider.SetProtectedState(profile, true)\n\t}\n}\n\nfunc (ip *InstanceProfile) Reconcile(ctx context.Context, nodeClass *v1.EC2NodeClass) (reconcile.Result, error) {\n\tif nodeClass.Spec.Role != \"\" {\n\t\tvar currentRole string\n\t\toldProfileName := nodeClass.Status.InstanceProfile\n\t\t// Use a short-lived cache to prevent instance profile recreation for the same role in the same EC2NodeClass\n\t\t// in case of a status patch error in the EC2NodeClass controller\n\t\tif profileName, ok := ip.recreationCache.Get(generateCacheKey(nodeClass)); ok {\n\t\t\tnodeClass.Status.InstanceProfile = profileName.(string)\n\t\t}\n\n\t\t// Get the current profile info if it exists\n\t\tif nodeClass.Status.InstanceProfile != \"\" {\n\t\t\tprofile, err := ip.instanceProfileProvider.Get(ctx, nodeClass.Status.InstanceProfile)\n\t\t\tif err != nil {\n\t\t\t\tif !awserrors.IsNotFound(err) {\n\t\t\t\t\treturn reconcile.Result{}, fmt.Errorf(\"getting instance profile %s, %w\", nodeClass.Status.InstanceProfile, err)\n\t\t\t\t}\n\t\t\t} else if len(profile.Roles) > 0 {\n\t\t\t\tcurrentRole = lo.FromPtr(profile.Roles[0].RoleName)\n\t\t\t}\n\t\t}\n\n\t\t// If role has changed, create new profile\n\t\tif currentRole != nodeClass.Spec.Role {\n\t\t\t// Generate new profile name\n\t\t\tnewProfileName := nodeClass.InstanceProfileName(options.FromContext(ctx).ClusterName, ip.region)\n\n\t\t\tif err := ip.instanceProfileProvider.Create(\n\t\t\t\tctx,\n\t\t\t\tnewProfileName,\n\t\t\t\tnodeClass.InstanceProfileRole(),\n\t\t\t\tnodeClass.InstanceProfileTags(options.FromContext(ctx).ClusterName, ip.region),\n\t\t\t\tstring(nodeClass.UID),\n\t\t\t\ttrue,\n\t\t\t); err != nil {\n\t\t\t\t// If we failed Create, we may have successfully created the instance profile but failed to either attach the new\n\t\t\t\t// role or remove the existing role. To prevent runaway instance profile creation, we'll attempt to delete the\n\t\t\t\t// profile. We'll fail open here and rely on the garbage collector as a backstop.\n\t\t\t\t_ = ip.instanceProfileProvider.Delete(ctx, newProfileName)\n\t\t\t\treturn reconcile.Result{}, fmt.Errorf(\"creating instance profile, %w\", err)\n\t\t\t}\n\t\t\tip.recreationCache.SetDefault(generateCacheKey(nodeClass), newProfileName)\n\n\t\t\t// Protect the new profile to prevent deletion if garbage collection runs\n\t\t\t// before this NodeClass appears in the informer cache.\n\t\t\tip.protectProfile(newProfileName)\n\t\t\tnodeClass.Status.InstanceProfile = newProfileName\n\t\t}\n\t\t// Mark the old profile as protected to prevent premature deletion by garbage collection.\n\t\t// This handles the case where a new NodeClaim is created but hasn't yet appeared in the\n\t\t// informer cache when garbage collection runs.\n\t\tif oldProfileName != nodeClass.Status.InstanceProfile {\n\t\t\tip.protectProfile(oldProfileName)\n\t\t}\n\t} else {\n\t\t// Ensure old profile is marked as protected in the event a customer switches from using\n\t\t// spec.role to spec.instanceProfile. Note that unmanaged profiles may be added to the\n\t\t// protectedProfiles cache in certain sitatuations (e.g. going from spec.InstanceProfile = IP1 to\n\t\t// spec.InstanceProfile = IP2 will cause IP1 to be added to cache). This is not an issue though,\n\t\t// given that we never consider unmanaged instance profiles for deletion anyways.\n\t\tip.protectProfile(nodeClass.Status.InstanceProfile)\n\t\tnodeClass.Status.InstanceProfile = lo.FromPtr(nodeClass.Spec.InstanceProfile)\n\t}\n\tnodeClass.StatusConditions().SetTrue(v1.ConditionTypeInstanceProfileReady)\n\treturn reconcile.Result{}, nil\n}\n"
  },
  {
    "path": "pkg/controllers/nodeclass/instanceprofile_test.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage nodeclass_test\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n\n\t\"github.com/aws/aws-sdk-go-v2/aws\"\n\tiamtypes \"github.com/aws/aws-sdk-go-v2/service/iam/types\"\n\t\"github.com/samber/lo\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/test\"\n\n\t\"github.com/aws/karpenter-provider-aws/pkg/fake\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/operator/options\"\n\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n\t. \"sigs.k8s.io/karpenter/pkg/test/expectations\"\n)\n\nvar _ = Describe(\"NodeClass InstanceProfile Status Controller\", func() {\n\tIt(\"should create the instance profile when it doesn't exist\", func() {\n\n\t\tnodeClass.Spec.Role = \"role-A\"\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\n\t\tExpect(awsEnv.IAMAPI.InstanceProfiles).To(HaveLen(1))\n\t\tExpect(awsEnv.IAMAPI.InstanceProfiles[nodeClass.Status.InstanceProfile].Roles).To(HaveLen(1))\n\t\tExpect(*awsEnv.IAMAPI.InstanceProfiles[nodeClass.Status.InstanceProfile].Roles[0].RoleName).To(Equal(\"role-A\"))\n\t\tExpect(awsEnv.IAMAPI.InstanceProfiles[nodeClass.Status.InstanceProfile].Tags).To(ContainElements(\n\t\t\tiamtypes.Tag{Key: lo.ToPtr(fmt.Sprintf(\"kubernetes.io/cluster/%s\", options.FromContext(ctx).ClusterName)), Value: lo.ToPtr(\"owned\")},\n\t\t\tiamtypes.Tag{Key: lo.ToPtr(v1.LabelNodeClass), Value: lo.ToPtr(nodeClass.Name)},\n\t\t\tiamtypes.Tag{Key: lo.ToPtr(v1.EKSClusterNameTagKey), Value: lo.ToPtr(options.FromContext(ctx).ClusterName)},\n\t\t))\n\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\t\tExpect(nodeClass.StatusConditions().IsTrue(v1.ConditionTypeInstanceProfileReady)).To(BeTrue())\n\t})\n\tIt(\"should delete all the instance profiles from cache when the nodeClass is deleted\", func() {\n\t\tnodeClass.Spec.Role = \"role-A\"\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\n\t\tnodeClass.Spec.Role = \"role-B\"\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\n\t\tnodeClass.Spec.Role = \"role-C\"\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\n\t\tExpect(awsEnv.IAMAPI.InstanceProfiles).To(HaveLen(3))\n\t\tExpect(nodeClass.StatusConditions().IsTrue(v1.ConditionTypeInstanceProfileReady)).To(BeTrue())\n\n\t\tinstanceProfileCount := 0\n\t\tfor key := range awsEnv.InstanceProfileCache.Items() {\n\t\t\tif strings.HasPrefix(key, \"instance-profile:\") {\n\t\t\t\tinstanceProfileCount++\n\t\t\t}\n\t\t}\n\t\tExpect(instanceProfileCount).To(Equal(3))\n\n\t\tExpect(env.Client.Delete(ctx, nodeClass)).To(Succeed())\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\t\tExpect(awsEnv.IAMAPI.InstanceProfiles).To(HaveLen(0))\n\n\t\tinstanceProfileCount = 0\n\t\tfor key := range awsEnv.InstanceProfileCache.Items() {\n\t\t\tif strings.HasPrefix(key, \"instance-profile:\") {\n\t\t\t\tinstanceProfileCount++\n\t\t\t}\n\t\t}\n\t\tExpect(instanceProfileCount).To(Equal(0))\n\t})\n\tIt(\"should add the role to the instance profile when it exists without a role\", func() {\n\t\tprofileName := \"profile-A\"\n\t\tawsEnv.IAMAPI.InstanceProfiles = map[string]*iamtypes.InstanceProfile{\n\t\t\tprofileName: {\n\t\t\t\tInstanceProfileId:   aws.String(fake.InstanceProfileID()),\n\t\t\t\tInstanceProfileName: aws.String(profileName),\n\t\t\t},\n\t\t}\n\n\t\tnodeClass.Spec.Role = \"role-A\"\n\t\tnodeClass.Status.InstanceProfile = profileName\n\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\n\t\tExpect(awsEnv.IAMAPI.InstanceProfiles).To(HaveLen(2))\n\t\tExpect(awsEnv.IAMAPI.InstanceProfiles[nodeClass.Status.InstanceProfile].Roles).To(HaveLen(1))\n\t\tExpect(*awsEnv.IAMAPI.InstanceProfiles[nodeClass.Status.InstanceProfile].Roles[0].RoleName).To(Equal(\"role-A\"))\n\n\t\tExpect(nodeClass.StatusConditions().IsTrue(v1.ConditionTypeInstanceProfileReady)).To(BeTrue())\n\t})\n\n\tIt(\"should update the role for the instance profile when the wrong role exists\", func() {\n\t\tprofileName := \"profile-A\"\n\t\tawsEnv.IAMAPI.InstanceProfiles = map[string]*iamtypes.InstanceProfile{\n\t\t\tprofileName: {\n\t\t\t\tInstanceProfileId:   aws.String(fake.InstanceProfileID()),\n\t\t\t\tInstanceProfileName: aws.String(profileName),\n\t\t\t\tRoles: []iamtypes.Role{\n\t\t\t\t\t{\n\t\t\t\t\t\tRoleName: aws.String(\"role-A\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}\n\n\t\tnodeClass.Spec.Role = \"other-role\"\n\t\tnodeClass.Status.InstanceProfile = profileName\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\n\t\tExpect(awsEnv.IAMAPI.InstanceProfiles).To(HaveLen(2))\n\t\tExpect(awsEnv.IAMAPI.InstanceProfiles[nodeClass.Status.InstanceProfile].Roles).To(HaveLen(1))\n\t\tExpect(*awsEnv.IAMAPI.InstanceProfiles[nodeClass.Status.InstanceProfile].Roles[0].RoleName).To(Equal(\"other-role\"))\n\n\t\tExpect(nodeClass.StatusConditions().IsTrue(v1.ConditionTypeInstanceProfileReady)).To(BeTrue())\n\t})\n\tIt(\"should not call CreateInstanceProfile or AddRoleToInstanceProfile when instance profile exists with correct role\", func() {\n\t\tprofileName := \"profile-A\"\n\t\tawsEnv.IAMAPI.InstanceProfiles = map[string]*iamtypes.InstanceProfile{\n\t\t\tprofileName: {\n\t\t\t\tInstanceProfileId:   aws.String(fake.InstanceProfileID()),\n\t\t\t\tInstanceProfileName: aws.String(profileName),\n\t\t\t\tRoles: []iamtypes.Role{\n\t\t\t\t\t{\n\t\t\t\t\t\tRoleName: aws.String(\"role-A\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}\n\n\t\tnodeClass.Spec.Role = \"role-A\"\n\t\tnodeClass.Status.InstanceProfile = profileName\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\n\t\tExpect(awsEnv.IAMAPI.InstanceProfiles).To(HaveLen(1))\n\t\tExpect(awsEnv.IAMAPI.InstanceProfiles[profileName].Roles).To(HaveLen(1))\n\t\tExpect(*awsEnv.IAMAPI.InstanceProfiles[profileName].Roles[0].RoleName).To(Equal(\"role-A\"))\n\n\t\tExpect(awsEnv.IAMAPI.CreateInstanceProfileBehavior.Calls()).To(BeZero())\n\t\tExpect(awsEnv.IAMAPI.AddRoleToInstanceProfileBehavior.Calls()).To(BeZero())\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\t\tExpect(nodeClass.StatusConditions().IsTrue(v1.ConditionTypeInstanceProfileReady)).To(BeTrue())\n\t})\n\tIt(\"should resolve the specified instance profile into the status when using instanceProfile field\", func() {\n\t\tnodeClass.Spec.Role = \"\"\n\t\tnodeClass.Spec.InstanceProfile = lo.ToPtr(\"test-instance-profile\")\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\t\tExpect(nodeClass.Status.InstanceProfile).To(Equal(lo.FromPtr(nodeClass.Spec.InstanceProfile)))\n\t\tExpect(nodeClass.StatusConditions().IsTrue(v1.ConditionTypeInstanceProfileReady)).To(BeTrue())\n\t})\n\tIt(\"should not call the the IAM API when specifying an instance profile\", func() {\n\t\tnodeClass.Spec.Role = \"\"\n\t\tnodeClass.Spec.InstanceProfile = lo.ToPtr(\"test-instance-profile\")\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\n\t\tExpect(awsEnv.IAMAPI.CreateInstanceProfileBehavior.Calls()).To(BeZero())\n\t\tExpect(awsEnv.IAMAPI.AddRoleToInstanceProfileBehavior.Calls()).To(BeZero())\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\t\tExpect(nodeClass.StatusConditions().IsTrue(v1.ConditionTypeInstanceProfileReady)).To(BeTrue())\n\t})\n\tIt(\"should create a new instance profile when spec.role changes\", func() {\n\t\t// Initial setup with role-A\n\t\tnodeClass.Spec.Role = \"role-A\"\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\t\tinitialProfileName := nodeClass.Status.InstanceProfile\n\n\t\t// Verify initial profile\n\t\tExpect(awsEnv.IAMAPI.InstanceProfiles).To(HaveLen(1))\n\t\tExpect(awsEnv.IAMAPI.InstanceProfiles[initialProfileName].Roles).To(HaveLen(1))\n\t\tExpect(*awsEnv.IAMAPI.InstanceProfiles[initialProfileName].Roles[0].RoleName).To(Equal(\"role-A\"))\n\n\t\t// Update to role-B\n\t\tnodeClass.Spec.Role = \"role-B\"\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\t\tnewProfileName := nodeClass.Status.InstanceProfile\n\n\t\t// Verify both profiles exist but new one is used\n\t\tExpect(awsEnv.IAMAPI.InstanceProfiles).To(HaveLen(2))\n\t\tExpect(newProfileName).NotTo(Equal(initialProfileName))\n\t\tExpect(awsEnv.IAMAPI.InstanceProfiles[newProfileName].Roles).To(HaveLen(1))\n\t\tExpect(*awsEnv.IAMAPI.InstanceProfiles[newProfileName].Roles[0].RoleName).To(Equal(\"role-B\"))\n\t})\n\n\tIt(\"should mark new instance profile as protected\", func() {\n\t\t// Create NodeClass with role-A\n\t\tnodeClass.Spec.Role = \"role-A\"\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\n\t\t// Get profile name\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\t\tprofileName := nodeClass.Status.InstanceProfile\n\n\t\t// Verify profile exists and is protected\n\t\tExpect(awsEnv.IAMAPI.InstanceProfiles).To(HaveLen(1))\n\t\tExpect(awsEnv.InstanceProfileProvider.IsProtected(profileName)).To(BeTrue())\n\t})\n\n\tIt(\"should mark old instance profile as protected\", func() {\n\t\t// Initial setup with role-A\n\t\tnodeClass.Spec.Role = \"role-A\"\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\n\t\t// Get initial profile name\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\t\toldProfileName := nodeClass.Status.InstanceProfile\n\n\t\t// Remove the created profile from protectedProfiles cache to ensure\n\t\t// that it is again added once we switch to \"role-B\"\n\t\tawsEnv.InstanceProfileProvider.SetProtectedState(oldProfileName, false)\n\t\tExpect(awsEnv.InstanceProfileProvider.IsProtected(oldProfileName)).To(BeFalse())\n\n\t\t// Change to role-B\n\t\tnodeClass.Spec.Role = \"role-B\"\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\n\t\t// Verify old profile is still protected as well as new one\n\t\tExpect(awsEnv.InstanceProfileProvider.IsProtected(oldProfileName)).To(BeTrue())\n\t})\n\n\tIt(\"should use the cached instance profile when spec.role is changed\", func() {\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\n\t\t// Set up cache with a profile for role-A\n\t\tcachedProfileName := \"cached-profile\"\n\t\tawsEnv.RecreationCache.SetDefault(fmt.Sprintf(\"%s/%s\", \"role-A\", nodeClass.UID), cachedProfileName)\n\n\t\tawsEnv.IAMAPI.InstanceProfiles = map[string]*iamtypes.InstanceProfile{\n\t\t\tcachedProfileName: {\n\t\t\t\tInstanceProfileId:   aws.String(fake.InstanceProfileID()),\n\t\t\t\tInstanceProfileName: aws.String(cachedProfileName),\n\t\t\t\tRoles: []iamtypes.Role{\n\t\t\t\t\t{\n\t\t\t\t\t\tRoleName: aws.String(\"role-A\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}\n\n\t\t// Apply NodeClass with role-A\n\t\tnodeClass.Spec.Role = \"role-A\"\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\n\t\t// Verify it used the cached profile\n\t\tExpect(nodeClass.Status.InstanceProfile).To(Equal(cachedProfileName))\n\t\tExpect(awsEnv.IAMAPI.InstanceProfiles).To(HaveLen(1))\n\t})\n\n\tIt(\"should not use the cached instance profile if it was for a different role\", func() {\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\n\t\t// Set up cache with a profile for role-B\n\t\tcachedProfileName := \"cached-profile\"\n\t\tawsEnv.RecreationCache.SetDefault(fmt.Sprintf(\"%s/%s\", \"role-B\", nodeClass.UID), cachedProfileName)\n\n\t\tawsEnv.IAMAPI.InstanceProfiles = map[string]*iamtypes.InstanceProfile{\n\t\t\tcachedProfileName: {\n\t\t\t\tInstanceProfileId:   aws.String(fake.InstanceProfileID()),\n\t\t\t\tInstanceProfileName: aws.String(cachedProfileName),\n\t\t\t\tRoles: []iamtypes.Role{\n\t\t\t\t\t{\n\t\t\t\t\t\tRoleName: aws.String(\"role-B\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}\n\n\t\t// Apply NodeClass with role-A\n\t\tnodeClass.Spec.Role = \"role-A\"\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\n\t\t// Verify it created a new profile instead of using cached one\n\t\tExpect(nodeClass.Status.InstanceProfile).NotTo(Equal(cachedProfileName))\n\t\tExpect(awsEnv.IAMAPI.InstanceProfiles).To(HaveLen(2))\n\t})\n\n\tIt(\"should not use the cached instance profile if it was for a different nodeclass\", func() {\n\t\t// Set up cache with a profile but for a different nodeclass UID\n\t\tcachedProfileName := \"cached-profile\"\n\t\tawsEnv.RecreationCache.SetDefault(fmt.Sprintf(\"%s/%s\", \"role-A\", \"different-uid\"), cachedProfileName)\n\n\t\tawsEnv.IAMAPI.InstanceProfiles = map[string]*iamtypes.InstanceProfile{\n\t\t\tcachedProfileName: {\n\t\t\t\tInstanceProfileId:   aws.String(fake.InstanceProfileID()),\n\t\t\t\tInstanceProfileName: aws.String(cachedProfileName),\n\t\t\t\tRoles: []iamtypes.Role{\n\t\t\t\t\t{\n\t\t\t\t\t\tRoleName: aws.String(\"role-A\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}\n\n\t\t// Apply NodeClass with role-A but different UID\n\t\tnodeClass.Spec.Role = \"role-A\"\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\n\t\t// Verify it created a new profile instead of using cached one\n\t\tExpect(nodeClass.Status.InstanceProfile).NotTo(Equal(cachedProfileName))\n\t\tExpect(awsEnv.IAMAPI.InstanceProfiles).To(HaveLen(2))\n\t})\n\n\tIt(\"should update the cache when a new instance profile is created\", func() {\n\t\t// Apply NodeClass with role-A\n\t\tnodeClass.Spec.Role = \"role-A\"\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\n\t\t// Verify profile was created and cached\n\t\tnewProfileName := nodeClass.Status.InstanceProfile\n\t\tcachedProfileName, ok := awsEnv.RecreationCache.Get(fmt.Sprintf(\"%s/%s\", \"role-A\", nodeClass.UID))\n\t\tExpect(ok).To(BeTrue())\n\t\tExpect(cachedProfileName).To(Equal(newProfileName))\n\t})\n\n\tIt(\"should mark old instance profile as protected when switching from spec.role to spec.instanceProfile\", func() {\n\t\t// Initial setup with spec.role\n\t\tnodeClass.Spec.Role = \"role-A\"\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\n\t\t// Get initial profile name\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\t\toldProfileName := nodeClass.Status.InstanceProfile\n\n\t\t// Remove protection to verify that the switch to spec.instanceProfile protects it again\n\t\tawsEnv.InstanceProfileProvider.SetProtectedState(oldProfileName, false)\n\n\t\t// Verify initial profile exists and is not protected\n\t\tExpect(awsEnv.IAMAPI.InstanceProfiles).To(HaveLen(1))\n\t\tExpect(awsEnv.InstanceProfileProvider.IsProtected(oldProfileName)).To(BeFalse())\n\n\t\t// Switch to spec.instanceProfile\n\t\tnodeClass.Spec.Role = \"\"                                 // Clear role\n\t\tnodeClass.Spec.InstanceProfile = lo.ToPtr(\"new-profile\") // Set instance profile\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\n\t\t// Verify old profile remains protected\n\t\tExpect(awsEnv.InstanceProfileProvider.IsProtected(oldProfileName)).To(BeTrue())\n\n\t\t// Verify new profile is set in status\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\t\tExpect(nodeClass.Status.InstanceProfile).To(Equal(\"new-profile\"))\n\t})\n\n\tIt(\"should allow different NodeClasses with same role to create instance profiles independently\", func() {\n\t\t// Create first NodeClass with role-A\n\t\tnodeClass.Spec.Role = \"role-A\"\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\n\t\tnodeClass1 := ExpectExists(ctx, env.Client, nodeClass)\n\t\tprofile1 := nodeClass1.Status.InstanceProfile\n\n\t\t// Create second NodeClass with same role\n\t\tnodeClass2 := test.EC2NodeClass() // This creates a new NodeClass with different UID\n\t\tnodeClass2.Spec.Role = \"role-A\"   // Same role as nodeClass1\n\t\tExpectApplied(ctx, env.Client, nodeClass2)\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass2)\n\n\t\tnodeClass2 = ExpectExists(ctx, env.Client, nodeClass2)\n\t\tprofile2 := nodeClass2.Status.InstanceProfile\n\n\t\t// Verify both NodeClasses created their own profiles\n\t\tExpect(profile2).NotTo(Equal(profile1))\n\t\tExpect(awsEnv.IAMAPI.InstanceProfiles).To(HaveLen(2))\n\n\t\t// Verify both profiles have the correct role\n\t\tExpect(*awsEnv.IAMAPI.InstanceProfiles[profile1].Roles[0].RoleName).To(Equal(\"role-A\"))\n\t\tExpect(*awsEnv.IAMAPI.InstanceProfiles[profile2].Roles[0].RoleName).To(Equal(\"role-A\"))\n\t})\n\n\tIt(\"should handle multiple role transitions\", func() {\n\t\t// Start with role-A\n\t\tnodeClass.Spec.Role = \"role-A\"\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\t\tprofileA := nodeClass.Status.InstanceProfile\n\n\t\t// Transition to role-B\n\t\tnodeClass.Spec.Role = \"role-B\"\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\t\tprofileB := nodeClass.Status.InstanceProfile\n\t\tExpect(profileB).NotTo(Equal(profileA))\n\n\t\t// Transition to role-C\n\t\tnodeClass.Spec.Role = \"role-C\"\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\t\tprofileC := nodeClass.Status.InstanceProfile\n\t\tExpect(profileC).NotTo(Equal(profileB))\n\n\t\t// Assumes that the recreation cache for the instance profile previously created for Role A\n\t\t// has expired by the time user tries to reuse Role A\n\t\tawsEnv.RecreationCache.Flush()\n\n\t\t// Transition back to role-A\n\t\tnodeClass.Spec.Role = \"role-A\"\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\t\tprofileA2 := nodeClass.Status.InstanceProfile\n\n\t\t// Verify unique names even when reusing role-A\n\t\tExpect(profileA2).NotTo(Equal(profileA))\n\t\tExpect(awsEnv.IAMAPI.InstanceProfiles).To(HaveLen(4))\n\t})\n\n\tIt(\"should return error on transient failures getting instance profile\", func() {\n\t\t// Set up initial profile\n\t\tprofileName := \"profile-A\"\n\t\tawsEnv.IAMAPI.InstanceProfiles = map[string]*iamtypes.InstanceProfile{\n\t\t\tprofileName: {\n\t\t\t\tInstanceProfileId:   aws.String(fake.InstanceProfileID()),\n\t\t\t\tInstanceProfileName: aws.String(profileName),\n\t\t\t\tRoles: []iamtypes.Role{\n\t\t\t\t\t{\n\t\t\t\t\t\tRoleName: aws.String(\"role-A\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}\n\t\tnodeClass.Status.InstanceProfile = profileName\n\t\tnodeClass.Spec.Role = \"role-A\"\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\n\t\tnodeClass.Spec.Role = \"role-B\"\n\n\t\t// Simulate a transient error\n\t\tawsEnv.IAMAPI.GetInstanceProfileBehavior.Error.Set(fmt.Errorf(\"simulated transient error\"))\n\n\t\t_, err := controller.Reconcile(ctx, nodeClass)\n\t\tExpect(err).To(MatchError(ContainSubstring(\"getting instance profile\")))\n\t\tExpect(err).To(MatchError(ContainSubstring(\"simulated transient error\")))\n\n\t\t// Verify no new profile was created\n\t\tExpect(awsEnv.IAMAPI.InstanceProfiles).To(HaveLen(1))\n\t})\n\n\tIt(\"should properly tag new instance profiles\", func() {\n\t\tnodeClass.Spec.Role = \"role-A\"\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\t\tprofileName := nodeClass.Status.InstanceProfile\n\n\t\t// Verify profile exists with correct tags\n\t\tExpect(awsEnv.IAMAPI.InstanceProfiles).To(HaveLen(1))\n\t\tprofile := awsEnv.IAMAPI.InstanceProfiles[profileName]\n\t\tExpect(profile.Tags).To(ContainElements(\n\t\t\tiamtypes.Tag{\n\t\t\t\tKey:   lo.ToPtr(fmt.Sprintf(\"kubernetes.io/cluster/%s\", options.FromContext(ctx).ClusterName)),\n\t\t\t\tValue: lo.ToPtr(\"owned\"),\n\t\t\t},\n\t\t\tiamtypes.Tag{\n\t\t\t\tKey:   lo.ToPtr(v1.LabelNodeClass),\n\t\t\t\tValue: lo.ToPtr(nodeClass.Name),\n\t\t\t},\n\t\t\tiamtypes.Tag{\n\t\t\t\tKey:   lo.ToPtr(v1.EKSClusterNameTagKey),\n\t\t\t\tValue: lo.ToPtr(options.FromContext(ctx).ClusterName),\n\t\t\t},\n\t\t\tiamtypes.Tag{\n\t\t\t\tKey:   lo.ToPtr(\"topology.kubernetes.io/region\"),\n\t\t\t\tValue: lo.ToPtr(fake.DefaultRegion),\n\t\t\t},\n\t\t))\n\n\t\t// Verify role is attached\n\t\tExpect(profile.Roles).To(HaveLen(1))\n\t\tExpect(*profile.Roles[0].RoleName).To(Equal(\"role-A\"))\n\t})\n\n\tIt(\"should attempt to delete the instance profile if there was a creation failure\", func() {\n\t\tawsEnv.IAMAPI.AddRoleToInstanceProfileBehavior.Error.Set(fmt.Errorf(\"failed to attach role\"))\n\t\tnodeClass.Spec.Role = \"role-A\"\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\t_ = ExpectObjectReconcileFailed(ctx, env.Client, controller, nodeClass)\n\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\t\tExpect(awsEnv.IAMAPI.InstanceProfiles).To(HaveLen(0))\n\t\tExpect(awsEnv.IAMAPI.DeleteInstanceProfileBehavior.CalledWithInput.Len()).To(Equal(1))\n\t})\n})\n"
  },
  {
    "path": "pkg/controllers/nodeclass/securitygroup.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage nodeclass\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"sort\"\n\t\"time\"\n\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\t\"github.com/samber/lo\"\n\t\"sigs.k8s.io/controller-runtime/pkg/reconcile\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/securitygroup\"\n)\n\ntype SecurityGroup struct {\n\tsecurityGroupProvider securitygroup.Provider\n}\n\nfunc NewSecurityGroupReconciler(securityGroupProvider securitygroup.Provider) *SecurityGroup {\n\treturn &SecurityGroup{\n\t\tsecurityGroupProvider: securityGroupProvider,\n\t}\n}\n\nfunc (sg *SecurityGroup) Reconcile(ctx context.Context, nodeClass *v1.EC2NodeClass) (reconcile.Result, error) {\n\tsecurityGroups, err := sg.securityGroupProvider.List(ctx, nodeClass)\n\tif err != nil {\n\t\treturn reconcile.Result{}, fmt.Errorf(\"getting security groups, %w\", err)\n\t}\n\tif len(securityGroups) == 0 && len(nodeClass.Spec.SecurityGroupSelectorTerms) > 0 {\n\t\tnodeClass.Status.SecurityGroups = nil\n\t\tnodeClass.StatusConditions().SetFalse(v1.ConditionTypeSecurityGroupsReady, \"SecurityGroupsNotFound\", \"SecurityGroupSelector did not match any SecurityGroups\")\n\t\t// If users have omitted the necessary tags from their SecurityGroups and later add them, we need to reprocess the information.\n\t\t// Returning 'ok' in this case means that the nodeclass will remain in an unready state until the component is restarted.\n\t\treturn reconcile.Result{RequeueAfter: time.Minute}, nil\n\t}\n\tsort.Slice(securityGroups, func(i, j int) bool {\n\t\treturn *securityGroups[i].GroupId < *securityGroups[j].GroupId\n\t})\n\tnodeClass.Status.SecurityGroups = lo.Map(securityGroups, func(securityGroup ec2types.SecurityGroup, _ int) v1.SecurityGroup {\n\t\treturn v1.SecurityGroup{\n\t\t\tID:   *securityGroup.GroupId,\n\t\t\tName: *securityGroup.GroupName,\n\t\t}\n\t})\n\tnodeClass.StatusConditions().SetTrue(v1.ConditionTypeSecurityGroupsReady)\n\treturn reconcile.Result{RequeueAfter: 5 * time.Minute}, nil\n}\n"
  },
  {
    "path": "pkg/controllers/nodeclass/securitygroup_test.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage nodeclass_test\n\nimport (\n\t\"github.com/samber/lo\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/test\"\n\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n\t. \"sigs.k8s.io/karpenter/pkg/test/expectations\"\n)\n\nvar _ = Describe(\"NodeClass Security Group Status Controller\", func() {\n\tBeforeEach(func() {\n\t\tnodeClass = test.EC2NodeClass(v1.EC2NodeClass{\n\t\t\tSpec: v1.EC2NodeClassSpec{\n\t\t\t\tSubnetSelectorTerms: []v1.SubnetSelectorTerm{\n\t\t\t\t\t{\n\t\t\t\t\t\tTags: map[string]string{\"*\": \"*\"},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tSecurityGroupSelectorTerms: []v1.SecurityGroupSelectorTerm{\n\t\t\t\t\t{\n\t\t\t\t\t\tTags: map[string]string{\"*\": \"*\"},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tAMIFamily: lo.ToPtr(v1.AMIFamilyCustom),\n\t\t\t\tAMISelectorTerms: []v1.AMISelectorTerm{\n\t\t\t\t\t{\n\t\t\t\t\t\tTags: map[string]string{\"*\": \"*\"},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t})\n\tIt(\"Should update EC2NodeClass status for Security Groups\", func() {\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\t\tExpect(nodeClass.Status.SecurityGroups).To(Equal([]v1.SecurityGroup{\n\t\t\t{\n\t\t\t\tID:   \"sg-test1\",\n\t\t\t\tName: \"securityGroup-test1\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tID:   \"sg-test2\",\n\t\t\t\tName: \"securityGroup-test2\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tID:   \"sg-test3\",\n\t\t\t\tName: \"securityGroup-test3\",\n\t\t\t},\n\t\t}))\n\t\tExpect(nodeClass.StatusConditions().Get(v1.ConditionTypeSecurityGroupsReady).IsTrue()).To(BeTrue())\n\t})\n\tIt(\"Should resolve a valid selectors for Security Groups by tags\", func() {\n\t\tnodeClass.Spec.SecurityGroupSelectorTerms = []v1.SecurityGroupSelectorTerm{\n\t\t\t{\n\t\t\t\tTags: map[string]string{\"Name\": \"test-security-group-1\"},\n\t\t\t},\n\t\t\t{\n\t\t\t\tTags: map[string]string{\"Name\": \"test-security-group-2\"},\n\t\t\t},\n\t\t}\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\t\tExpect(nodeClass.Status.SecurityGroups).To(Equal([]v1.SecurityGroup{\n\t\t\t{\n\t\t\t\tID:   \"sg-test1\",\n\t\t\t\tName: \"securityGroup-test1\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tID:   \"sg-test2\",\n\t\t\t\tName: \"securityGroup-test2\",\n\t\t\t},\n\t\t}))\n\t\tExpect(nodeClass.StatusConditions().Get(v1.ConditionTypeSecurityGroupsReady).IsTrue()).To(BeTrue())\n\t})\n\tIt(\"Should resolve a valid selectors for Security Groups by ids\", func() {\n\t\tnodeClass.Spec.SecurityGroupSelectorTerms = []v1.SecurityGroupSelectorTerm{\n\t\t\t{\n\t\t\t\tID: \"sg-test1\",\n\t\t\t},\n\t\t}\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\t\tExpect(nodeClass.Status.SecurityGroups).To(Equal([]v1.SecurityGroup{\n\t\t\t{\n\t\t\t\tID:   \"sg-test1\",\n\t\t\t\tName: \"securityGroup-test1\",\n\t\t\t},\n\t\t}))\n\t\tExpect(nodeClass.StatusConditions().Get(v1.ConditionTypeSecurityGroupsReady).IsTrue()).To(BeTrue())\n\t})\n\tIt(\"Should update Security Groups status when the Security Groups selector gets updated by tags\", func() {\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\t\tExpect(nodeClass.Status.SecurityGroups).To(Equal([]v1.SecurityGroup{\n\t\t\t{\n\t\t\t\tID:   \"sg-test1\",\n\t\t\t\tName: \"securityGroup-test1\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tID:   \"sg-test2\",\n\t\t\t\tName: \"securityGroup-test2\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tID:   \"sg-test3\",\n\t\t\t\tName: \"securityGroup-test3\",\n\t\t\t},\n\t\t}))\n\n\t\tnodeClass.Spec.SecurityGroupSelectorTerms = []v1.SecurityGroupSelectorTerm{\n\t\t\t{\n\t\t\t\tTags: map[string]string{\"Name\": \"test-security-group-1\"},\n\t\t\t},\n\t\t\t{\n\t\t\t\tTags: map[string]string{\"Name\": \"test-security-group-2\"},\n\t\t\t},\n\t\t}\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\t\tExpect(nodeClass.Status.SecurityGroups).To(Equal([]v1.SecurityGroup{\n\t\t\t{\n\t\t\t\tID:   \"sg-test1\",\n\t\t\t\tName: \"securityGroup-test1\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tID:   \"sg-test2\",\n\t\t\t\tName: \"securityGroup-test2\",\n\t\t\t},\n\t\t}))\n\t\tExpect(nodeClass.StatusConditions().Get(v1.ConditionTypeSecurityGroupsReady).IsTrue()).To(BeTrue())\n\t})\n\tIt(\"Should update Security Groups status when the Security Groups selector gets updated by ids\", func() {\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\t\tExpect(nodeClass.Status.SecurityGroups).To(Equal([]v1.SecurityGroup{\n\t\t\t{\n\t\t\t\tID:   \"sg-test1\",\n\t\t\t\tName: \"securityGroup-test1\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tID:   \"sg-test2\",\n\t\t\t\tName: \"securityGroup-test2\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tID:   \"sg-test3\",\n\t\t\t\tName: \"securityGroup-test3\",\n\t\t\t},\n\t\t}))\n\n\t\tnodeClass.Spec.SecurityGroupSelectorTerms = []v1.SecurityGroupSelectorTerm{\n\t\t\t{\n\t\t\t\tID: \"sg-test1\",\n\t\t\t},\n\t\t}\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\t\tExpect(nodeClass.Status.SecurityGroups).To(Equal([]v1.SecurityGroup{\n\t\t\t{\n\t\t\t\tID:   \"sg-test1\",\n\t\t\t\tName: \"securityGroup-test1\",\n\t\t\t},\n\t\t}))\n\t\tExpect(nodeClass.StatusConditions().Get(v1.ConditionTypeSecurityGroupsReady).IsTrue()).To(BeTrue())\n\t})\n\tIt(\"Should not resolve a invalid selectors for Security Groups\", func() {\n\t\tnodeClass.Spec.SecurityGroupSelectorTerms = []v1.SecurityGroupSelectorTerm{\n\t\t\t{\n\t\t\t\tTags: map[string]string{`foo`: `invalid`},\n\t\t\t},\n\t\t}\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\t\tExpect(nodeClass.Status.SecurityGroups).To(BeNil())\n\t\tExpect(nodeClass.StatusConditions().Get(v1.ConditionTypeSecurityGroupsReady).IsFalse()).To(BeTrue())\n\t})\n\tIt(\"Should not resolve a invalid selectors for an updated Security Groups selector\", func() {\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\t\tExpect(nodeClass.Status.SecurityGroups).To(Equal([]v1.SecurityGroup{\n\t\t\t{\n\t\t\t\tID:   \"sg-test1\",\n\t\t\t\tName: \"securityGroup-test1\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tID:   \"sg-test2\",\n\t\t\t\tName: \"securityGroup-test2\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tID:   \"sg-test3\",\n\t\t\t\tName: \"securityGroup-test3\",\n\t\t\t},\n\t\t}))\n\n\t\tnodeClass.Spec.SecurityGroupSelectorTerms = []v1.SecurityGroupSelectorTerm{\n\t\t\t{\n\t\t\t\tTags: map[string]string{`foo`: `invalid`},\n\t\t\t},\n\t\t}\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\t\tExpect(nodeClass.Status.SecurityGroups).To(BeNil())\n\t\tExpect(nodeClass.StatusConditions().Get(v1.ConditionTypeSecurityGroupsReady).IsFalse()).To(BeTrue())\n\t})\n})\n"
  },
  {
    "path": "pkg/controllers/nodeclass/subnet.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage nodeclass\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"sort\"\n\t\"time\"\n\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\t\"github.com/samber/lo\"\n\t\"sigs.k8s.io/controller-runtime/pkg/reconcile\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/subnet\"\n)\n\ntype Subnet struct {\n\tsubnetProvider subnet.Provider\n}\n\nfunc NewSubnetReconciler(subnetProvider subnet.Provider) *Subnet {\n\treturn &Subnet{\n\t\tsubnetProvider: subnetProvider,\n\t}\n}\n\nfunc (s *Subnet) Reconcile(ctx context.Context, nodeClass *v1.EC2NodeClass) (reconcile.Result, error) {\n\tsubnets, err := s.subnetProvider.List(ctx, nodeClass)\n\tif err != nil {\n\t\treturn reconcile.Result{}, fmt.Errorf(\"getting subnets, %w\", err)\n\t}\n\tif len(subnets) == 0 {\n\t\tnodeClass.Status.Subnets = nil\n\t\tnodeClass.StatusConditions().SetFalse(v1.ConditionTypeSubnetsReady, \"SubnetsNotFound\", \"SubnetSelector did not match any Subnets\")\n\t\t// If users have omitted the necessary tags from their Subnets and later add them, we need to reprocess the information.\n\t\t// Returning 'ok' in this case means that the nodeclass will remain in an unready state until the component is restarted.\n\t\treturn reconcile.Result{RequeueAfter: time.Minute}, nil\n\t}\n\tsort.Slice(subnets, func(i, j int) bool {\n\t\tif int(*subnets[i].AvailableIpAddressCount) != int(*subnets[j].AvailableIpAddressCount) {\n\t\t\treturn int(*subnets[i].AvailableIpAddressCount) > int(*subnets[j].AvailableIpAddressCount)\n\t\t}\n\t\treturn *subnets[i].SubnetId < *subnets[j].SubnetId\n\t})\n\tnodeClass.Status.Subnets = lo.Map(subnets, func(ec2subnet ec2types.Subnet, _ int) v1.Subnet {\n\t\treturn v1.Subnet{\n\t\t\tID:     *ec2subnet.SubnetId,\n\t\t\tZone:   *ec2subnet.AvailabilityZone,\n\t\t\tZoneID: *ec2subnet.AvailabilityZoneId,\n\t\t}\n\t})\n\tnodeClass.StatusConditions().SetTrue(v1.ConditionTypeSubnetsReady)\n\treturn reconcile.Result{RequeueAfter: time.Minute}, nil\n}\n"
  },
  {
    "path": "pkg/controllers/nodeclass/subnet_test.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage nodeclass_test\n\nimport (\n\t\"github.com/aws/aws-sdk-go-v2/aws\"\n\t\"github.com/aws/aws-sdk-go-v2/service/ec2\"\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\t\"github.com/samber/lo\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/test\"\n\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n\t. \"sigs.k8s.io/karpenter/pkg/test/expectations\"\n)\n\nvar _ = Describe(\"NodeClass Subnet Status Controller\", func() {\n\tBeforeEach(func() {\n\t\tnodeClass = test.EC2NodeClass(v1.EC2NodeClass{\n\t\t\tSpec: v1.EC2NodeClassSpec{\n\t\t\t\tSubnetSelectorTerms: []v1.SubnetSelectorTerm{\n\t\t\t\t\t{\n\t\t\t\t\t\tTags: map[string]string{\"*\": \"*\"},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tSecurityGroupSelectorTerms: []v1.SecurityGroupSelectorTerm{\n\t\t\t\t\t{\n\t\t\t\t\t\tTags: map[string]string{\"*\": \"*\"},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tAMIFamily: lo.ToPtr(v1.AMIFamilyCustom),\n\t\t\t\tAMISelectorTerms: []v1.AMISelectorTerm{\n\t\t\t\t\t{\n\t\t\t\t\t\tTags: map[string]string{\"*\": \"*\"},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t})\n\tIt(\"Should update EC2NodeClass status for Subnets\", func() {\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\t\tExpect(nodeClass.Status.Subnets).To(Equal([]v1.Subnet{\n\t\t\t{\n\t\t\t\tID:     \"subnet-test1\",\n\t\t\t\tZone:   \"test-zone-1a\",\n\t\t\t\tZoneID: \"tstz1-1a\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tID:     \"subnet-test2\",\n\t\t\t\tZone:   \"test-zone-1b\",\n\t\t\t\tZoneID: \"tstz1-1b\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tID:     \"subnet-test3\",\n\t\t\t\tZone:   \"test-zone-1c\",\n\t\t\t\tZoneID: \"tstz1-1c\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tID:     \"subnet-test4\",\n\t\t\t\tZone:   \"test-zone-1a-local\",\n\t\t\t\tZoneID: \"tstz1-1alocal\",\n\t\t\t},\n\t\t}))\n\t\tExpect(nodeClass.StatusConditions().IsTrue(v1.ConditionTypeSubnetsReady)).To(BeTrue())\n\t})\n\tIt(\"Should have the correct ordering for the Subnets\", func() {\n\t\tawsEnv.EC2API.DescribeSubnetsBehavior.Output.Set(&ec2.DescribeSubnetsOutput{Subnets: []ec2types.Subnet{\n\t\t\t{SubnetId: aws.String(\"subnet-test1\"), AvailabilityZone: aws.String(\"test-zone-1a\"), AvailabilityZoneId: aws.String(\"tstz1-1a\"), AvailableIpAddressCount: aws.Int32(20)},\n\t\t\t{SubnetId: aws.String(\"subnet-test2\"), AvailabilityZone: aws.String(\"test-zone-1b\"), AvailabilityZoneId: aws.String(\"tstz1-1b\"), AvailableIpAddressCount: aws.Int32(100)},\n\t\t\t{SubnetId: aws.String(\"subnet-test3\"), AvailabilityZone: aws.String(\"test-zone-1c\"), AvailabilityZoneId: aws.String(\"tstz1-1c\"), AvailableIpAddressCount: aws.Int32(50)},\n\t\t}})\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\t\tExpect(nodeClass.Status.Subnets).To(Equal([]v1.Subnet{\n\t\t\t{\n\t\t\t\tID:     \"subnet-test2\",\n\t\t\t\tZone:   \"test-zone-1b\",\n\t\t\t\tZoneID: \"tstz1-1b\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tID:     \"subnet-test3\",\n\t\t\t\tZone:   \"test-zone-1c\",\n\t\t\t\tZoneID: \"tstz1-1c\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tID:     \"subnet-test1\",\n\t\t\t\tZone:   \"test-zone-1a\",\n\t\t\t\tZoneID: \"tstz1-1a\",\n\t\t\t},\n\t\t}))\n\t\tExpect(nodeClass.StatusConditions().IsTrue(v1.ConditionTypeSubnetsReady)).To(BeTrue())\n\t})\n\tIt(\"Should resolve a valid selectors for Subnet by tags\", func() {\n\t\tnodeClass.Spec.SubnetSelectorTerms = []v1.SubnetSelectorTerm{\n\t\t\t{\n\t\t\t\tTags: map[string]string{`Name`: `test-subnet-1`},\n\t\t\t},\n\t\t\t{\n\t\t\t\tTags: map[string]string{`Name`: `test-subnet-2`},\n\t\t\t},\n\t\t}\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\t\tExpect(nodeClass.Status.Subnets).To(Equal([]v1.Subnet{\n\t\t\t{\n\t\t\t\tID:     \"subnet-test1\",\n\t\t\t\tZone:   \"test-zone-1a\",\n\t\t\t\tZoneID: \"tstz1-1a\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tID:     \"subnet-test2\",\n\t\t\t\tZone:   \"test-zone-1b\",\n\t\t\t\tZoneID: \"tstz1-1b\",\n\t\t\t},\n\t\t}))\n\t\tExpect(nodeClass.StatusConditions().IsTrue(v1.ConditionTypeSubnetsReady)).To(BeTrue())\n\t})\n\tIt(\"Should resolve a valid selectors for Subnet by ids\", func() {\n\t\tnodeClass.Spec.SubnetSelectorTerms = []v1.SubnetSelectorTerm{\n\t\t\t{\n\t\t\t\tID: \"subnet-test1\",\n\t\t\t},\n\t\t}\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\t\tExpect(nodeClass.Status.Subnets).To(Equal([]v1.Subnet{\n\t\t\t{\n\t\t\t\tID:     \"subnet-test1\",\n\t\t\t\tZone:   \"test-zone-1a\",\n\t\t\t\tZoneID: \"tstz1-1a\",\n\t\t\t},\n\t\t}))\n\t\tExpect(nodeClass.StatusConditions().IsTrue(v1.ConditionTypeSubnetsReady)).To(BeTrue())\n\t})\n\tIt(\"Should update Subnet status when the Subnet selector gets updated by tags\", func() {\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\t\tExpect(nodeClass.Status.Subnets).To(Equal([]v1.Subnet{\n\t\t\t{\n\t\t\t\tID:     \"subnet-test1\",\n\t\t\t\tZone:   \"test-zone-1a\",\n\t\t\t\tZoneID: \"tstz1-1a\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tID:     \"subnet-test2\",\n\t\t\t\tZone:   \"test-zone-1b\",\n\t\t\t\tZoneID: \"tstz1-1b\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tID:     \"subnet-test3\",\n\t\t\t\tZone:   \"test-zone-1c\",\n\t\t\t\tZoneID: \"tstz1-1c\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tID:     \"subnet-test4\",\n\t\t\t\tZone:   \"test-zone-1a-local\",\n\t\t\t\tZoneID: \"tstz1-1alocal\",\n\t\t\t},\n\t\t}))\n\n\t\tnodeClass.Spec.SubnetSelectorTerms = []v1.SubnetSelectorTerm{\n\t\t\t{\n\t\t\t\tTags: map[string]string{\n\t\t\t\t\t\"Name\": \"test-subnet-1\",\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tTags: map[string]string{\n\t\t\t\t\t\"Name\": \"test-subnet-2\",\n\t\t\t\t},\n\t\t\t},\n\t\t}\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\t\tExpect(nodeClass.Status.Subnets).To(Equal([]v1.Subnet{\n\t\t\t{\n\t\t\t\tID:     \"subnet-test1\",\n\t\t\t\tZone:   \"test-zone-1a\",\n\t\t\t\tZoneID: \"tstz1-1a\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tID:     \"subnet-test2\",\n\t\t\t\tZone:   \"test-zone-1b\",\n\t\t\t\tZoneID: \"tstz1-1b\",\n\t\t\t},\n\t\t}))\n\t\tExpect(nodeClass.StatusConditions().IsTrue(v1.ConditionTypeSubnetsReady)).To(BeTrue())\n\t})\n\tIt(\"Should update Subnet status when the Subnet selector gets updated by ids\", func() {\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\t\tExpect(nodeClass.Status.Subnets).To(Equal([]v1.Subnet{\n\t\t\t{\n\t\t\t\tID:     \"subnet-test1\",\n\t\t\t\tZone:   \"test-zone-1a\",\n\t\t\t\tZoneID: \"tstz1-1a\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tID:     \"subnet-test2\",\n\t\t\t\tZone:   \"test-zone-1b\",\n\t\t\t\tZoneID: \"tstz1-1b\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tID:     \"subnet-test3\",\n\t\t\t\tZone:   \"test-zone-1c\",\n\t\t\t\tZoneID: \"tstz1-1c\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tID:     \"subnet-test4\",\n\t\t\t\tZone:   \"test-zone-1a-local\",\n\t\t\t\tZoneID: \"tstz1-1alocal\",\n\t\t\t},\n\t\t}))\n\n\t\tnodeClass.Spec.SubnetSelectorTerms = []v1.SubnetSelectorTerm{\n\t\t\t{\n\t\t\t\tID: \"subnet-test1\",\n\t\t\t},\n\t\t}\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\t\tExpect(nodeClass.Status.Subnets).To(Equal([]v1.Subnet{\n\t\t\t{\n\t\t\t\tID:     \"subnet-test1\",\n\t\t\t\tZone:   \"test-zone-1a\",\n\t\t\t\tZoneID: \"tstz1-1a\",\n\t\t\t},\n\t\t}))\n\t\tExpect(nodeClass.StatusConditions().IsTrue(v1.ConditionTypeSubnetsReady)).To(BeTrue())\n\t})\n\tIt(\"Should not resolve a invalid selectors for Subnet\", func() {\n\t\tnodeClass.Spec.SubnetSelectorTerms = []v1.SubnetSelectorTerm{\n\t\t\t{\n\t\t\t\tTags: map[string]string{`foo`: `invalid`},\n\t\t\t},\n\t\t}\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\t\tExpect(nodeClass.Status.Subnets).To(BeNil())\n\t\tExpect(nodeClass.StatusConditions().Get(v1.ConditionTypeSubnetsReady).IsFalse()).To(BeTrue())\n\t})\n\tIt(\"Should not resolve a invalid selectors for an updated subnet selector\", func() {\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\t\tExpect(nodeClass.Status.Subnets).To(Equal([]v1.Subnet{\n\t\t\t{\n\t\t\t\tID:     \"subnet-test1\",\n\t\t\t\tZone:   \"test-zone-1a\",\n\t\t\t\tZoneID: \"tstz1-1a\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tID:     \"subnet-test2\",\n\t\t\t\tZone:   \"test-zone-1b\",\n\t\t\t\tZoneID: \"tstz1-1b\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tID:     \"subnet-test3\",\n\t\t\t\tZone:   \"test-zone-1c\",\n\t\t\t\tZoneID: \"tstz1-1c\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tID:     \"subnet-test4\",\n\t\t\t\tZone:   \"test-zone-1a-local\",\n\t\t\t\tZoneID: \"tstz1-1alocal\",\n\t\t\t},\n\t\t}))\n\n\t\tnodeClass.Spec.SubnetSelectorTerms = []v1.SubnetSelectorTerm{\n\t\t\t{\n\t\t\t\tTags: map[string]string{`foo`: `invalid`},\n\t\t\t},\n\t\t}\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\t\tExpect(nodeClass.Status.Subnets).To(BeNil())\n\t\tExpect(nodeClass.StatusConditions().Get(v1.ConditionTypeSubnetsReady).IsFalse()).To(BeTrue())\n\t})\n})\n"
  },
  {
    "path": "pkg/controllers/nodeclass/suite_test.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage nodeclass_test\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"testing\"\n\t\"time\"\n\n\t\"sigs.k8s.io/karpenter/pkg/test/v1alpha1\"\n\n\t\"github.com/aws/aws-sdk-go-v2/aws\"\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\tiamtypes \"github.com/aws/aws-sdk-go-v2/service/iam/types\"\n\n\t\"github.com/awslabs/operatorpkg/object\"\n\t\"github.com/samber/lo\"\n\t\"k8s.io/client-go/tools/record\"\n\t\"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil\"\n\tkarpv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n\t\"sigs.k8s.io/karpenter/pkg/events\"\n\tcoreoptions \"sigs.k8s.io/karpenter/pkg/operator/options\"\n\tcoretest \"sigs.k8s.io/karpenter/pkg/test\"\n\n\t\"github.com/aws/karpenter-provider-aws/pkg/apis\"\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/cloudprovider\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/controllers/nodeclass\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/fake\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/operator/options\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/test\"\n\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n\t. \"sigs.k8s.io/karpenter/pkg/test/expectations\"\n\t. \"sigs.k8s.io/karpenter/pkg/utils/testing\"\n)\n\nvar ctx context.Context\nvar env *coretest.Environment\nvar awsEnv *test.Environment\nvar nodeClass *v1.EC2NodeClass\nvar controller *nodeclass.Controller\nvar cloudProvider *cloudprovider.CloudProvider\n\nfunc TestAPIs(t *testing.T) {\n\tctx = TestContextWithLogger(t)\n\tRegisterFailHandler(Fail)\n\tRunSpecs(t, \"EC2NodeClass\")\n}\n\nvar _ = BeforeSuite(func() {\n\tenv = coretest.NewEnvironment(\n\t\tcoretest.WithCRDs(test.DisableCapacityReservationIDValidation(test.RemoveNodeClassTagValidation(apis.CRDs))...),\n\t\tcoretest.WithCRDs(v1alpha1.CRDs...),\n\t\tcoretest.WithFieldIndexers(coretest.NodeClaimNodeClassRefFieldIndexer(ctx)),\n\t\tcoretest.WithFieldIndexers(coretest.NodePoolNodeClassRefFieldIndexer(ctx)),\n\t)\n\tctx = coreoptions.ToContext(ctx, coretest.Options(coretest.OptionsFields{FeatureGates: coretest.FeatureGates{ReservedCapacity: lo.ToPtr(true)}}))\n\tctx = options.ToContext(ctx, test.Options())\n\tawsEnv = test.NewEnvironment(ctx, env)\n\tcloudProvider = cloudprovider.New(awsEnv.InstanceTypesProvider, awsEnv.InstanceProvider, events.NewRecorder(&record.FakeRecorder{}),\n\t\tenv.Client, awsEnv.AMIProvider, awsEnv.SecurityGroupProvider, awsEnv.CapacityReservationProvider, awsEnv.InstanceTypeStore)\n})\n\nvar _ = AfterSuite(func() {\n\tExpect(env.Stop()).To(Succeed(), \"Failed to stop environment\")\n})\n\nvar _ = BeforeEach(func() {\n\tctx = coreoptions.ToContext(ctx, coretest.Options(coretest.OptionsFields{FeatureGates: coretest.FeatureGates{ReservedCapacity: lo.ToPtr(true)}}))\n\tctx = options.ToContext(ctx, test.Options())\n\tnodeClass = test.EC2NodeClass()\n\tawsEnv.Reset()\n\tExpect(awsEnv.InstanceTypesProvider.UpdateInstanceTypes(ctx)).To(Succeed())\n\tExpect(awsEnv.InstanceTypesProvider.UpdateInstanceTypeOfferings(ctx)).To(Succeed())\n\tcontroller = nodeclass.NewController(\n\t\tawsEnv.Clock,\n\t\tenv.Client,\n\t\tcloudProvider,\n\t\tevents.NewRecorder(&record.FakeRecorder{}),\n\t\tfake.DefaultRegion,\n\t\tawsEnv.SubnetProvider,\n\t\tawsEnv.SecurityGroupProvider,\n\t\tawsEnv.AMIProvider,\n\t\tawsEnv.InstanceProfileProvider,\n\t\tawsEnv.InstanceTypesProvider,\n\t\tawsEnv.LaunchTemplateProvider,\n\t\tawsEnv.CapacityReservationProvider,\n\t\tawsEnv.EC2API,\n\t\tawsEnv.ValidationCache,\n\t\tawsEnv.RecreationCache,\n\t\tawsEnv.AMIResolver,\n\t\toptions.FromContext(ctx).DisableDryRun,\n\t)\n})\n\nvar _ = AfterEach(func() {\n\tExpectCleanedUp(ctx, env.Client)\n})\n\nvar _ = Describe(\"NodeClass Termination\", func() {\n\tBeforeEach(func() {\n\t\tnodeClass = test.EC2NodeClass(v1.EC2NodeClass{\n\t\t\tSpec: v1.EC2NodeClassSpec{\n\t\t\t\tSubnetSelectorTerms: []v1.SubnetSelectorTerm{\n\t\t\t\t\t{\n\t\t\t\t\t\tTags: map[string]string{\"*\": \"*\"},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tSecurityGroupSelectorTerms: []v1.SecurityGroupSelectorTerm{\n\t\t\t\t\t{\n\t\t\t\t\t\tTags: map[string]string{\"*\": \"*\"},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tAMIFamily: lo.ToPtr(v1.AMIFamilyCustom),\n\t\t\t\tAMISelectorTerms: []v1.AMISelectorTerm{\n\t\t\t\t\t{\n\t\t\t\t\t\tTags: map[string]string{\"*\": \"*\"},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\n\t})\n\tIt(\"should not delete the NodeClass if launch template deletion fails\", func() {\n\t\tlaunchTemplateName := aws.String(fake.LaunchTemplateName())\n\t\tawsEnv.EC2API.LaunchTemplates.Store(launchTemplateName, ec2types.LaunchTemplate{LaunchTemplateName: launchTemplateName, LaunchTemplateId: aws.String(fake.LaunchTemplateID()), Tags: []ec2types.Tag{{Key: aws.String(\"karpenter.k8s.aws/cluster\"), Value: aws.String(\"test-cluster\")}}})\n\t\t_, ok := awsEnv.EC2API.LaunchTemplates.Load(launchTemplateName)\n\t\tExpect(ok).To(BeTrue())\n\t\tcontrollerutil.AddFinalizer(nodeClass, v1.TerminationFinalizer)\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\n\t\tExpect(env.Client.Delete(ctx, nodeClass)).To(Succeed())\n\t\tawsEnv.EC2API.NextError.Set(fmt.Errorf(\"delete Launch Template Error\"))\n\t\t_ = ExpectObjectReconcileFailed(ctx, env.Client, controller, nodeClass)\n\t\tExpectExists(ctx, env.Client, nodeClass)\n\t})\n\tIt(\"should not delete the launch template not associated with the nodeClass\", func() {\n\t\tlaunchTemplateName := aws.String(fake.LaunchTemplateName())\n\t\tawsEnv.EC2API.LaunchTemplates.Store(launchTemplateName, ec2types.LaunchTemplate{LaunchTemplateName: launchTemplateName, LaunchTemplateId: aws.String(fake.LaunchTemplateID()), Tags: []ec2types.Tag{{Key: aws.String(\"karpenter.k8s.aws/cluster\"), Value: aws.String(\"test-cluster\")}}})\n\t\t_, ok := awsEnv.EC2API.LaunchTemplates.Load(launchTemplateName)\n\t\tExpect(ok).To(BeTrue())\n\t\tcontrollerutil.AddFinalizer(nodeClass, v1.TerminationFinalizer)\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\n\t\tExpect(env.Client.Delete(ctx, nodeClass)).To(Succeed())\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\t\t_, ok = awsEnv.EC2API.LaunchTemplates.Load(launchTemplateName)\n\t\tExpect(ok).To(BeTrue())\n\t\tExpectNotFound(ctx, env.Client, nodeClass)\n\t})\n\tIt(\"should succeed to delete the launch template\", func() {\n\t\tltName1 := aws.String(fake.LaunchTemplateName())\n\t\tawsEnv.EC2API.LaunchTemplates.Store(ltName1, ec2types.LaunchTemplate{LaunchTemplateName: ltName1, LaunchTemplateId: aws.String(fake.LaunchTemplateID()), Tags: []ec2types.Tag{{Key: aws.String(\"eks:eks-cluster-name\"), Value: aws.String(\"test-cluster\")}, {Key: aws.String(\"karpenter.k8s.aws/ec2nodeclass\"), Value: aws.String(nodeClass.Name)}}})\n\t\tltName2 := aws.String(fake.LaunchTemplateName())\n\t\tawsEnv.EC2API.LaunchTemplates.Store(ltName2, ec2types.LaunchTemplate{LaunchTemplateName: ltName2, LaunchTemplateId: aws.String(fake.LaunchTemplateID()), Tags: []ec2types.Tag{{Key: aws.String(\"eks:eks-cluster-name\"), Value: aws.String(\"test-cluster\")}, {Key: aws.String(\"karpenter.k8s.aws/ec2nodeclass\"), Value: aws.String(nodeClass.Name)}}})\n\t\t_, ok := awsEnv.EC2API.LaunchTemplates.Load(ltName1)\n\t\tExpect(ok).To(BeTrue())\n\t\t_, ok = awsEnv.EC2API.LaunchTemplates.Load(ltName2)\n\t\tExpect(ok).To(BeTrue())\n\t\tcontrollerutil.AddFinalizer(nodeClass, v1.TerminationFinalizer)\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\t\tExpect(env.Client.Delete(ctx, nodeClass)).To(Succeed())\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\t\t_, ok = awsEnv.EC2API.LaunchTemplates.Load(ltName1)\n\t\tExpect(ok).To(BeFalse())\n\t\t_, ok = awsEnv.EC2API.LaunchTemplates.Load(ltName2)\n\t\tExpect(ok).To(BeFalse())\n\t\tExpectNotFound(ctx, env.Client, nodeClass)\n\t})\n\tIt(\"should succeed to delete the instance profile with no NodeClaims\", func() {\n\t\tcontrollerutil.AddFinalizer(nodeClass, v1.TerminationFinalizer)\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\n\t\tExpect(awsEnv.IAMAPI.InstanceProfiles).To(HaveLen(1))\n\t\tExpect(awsEnv.IAMAPI.InstanceProfiles[nodeClass.Status.InstanceProfile].Roles).To(HaveLen(1))\n\t\tExpect(*awsEnv.IAMAPI.InstanceProfiles[nodeClass.Status.InstanceProfile].Roles[0].RoleName).To(Equal(\"test-role\"))\n\n\t\tExpect(env.Client.Delete(ctx, nodeClass)).To(Succeed())\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\n\t\tExpect(awsEnv.IAMAPI.InstanceProfiles).To(HaveLen(0))\n\t\tExpectNotFound(ctx, env.Client, nodeClass)\n\t})\n\tIt(\"should succeed to delete the instance profile when no roles exist with no NodeClaims\", func() {\n\t\tcontrollerutil.AddFinalizer(nodeClass, v1.TerminationFinalizer)\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\n\t\t// Remove the role from the instance profile to test this specific case\n\t\tprofile := awsEnv.IAMAPI.InstanceProfiles[nodeClass.Status.InstanceProfile]\n\t\tprofile.Roles = nil\n\n\t\tExpect(awsEnv.IAMAPI.InstanceProfiles).To(HaveLen(1))\n\t\tExpect(awsEnv.IAMAPI.InstanceProfiles[nodeClass.Status.InstanceProfile].Roles).To(BeEmpty())\n\n\t\tExpect(env.Client.Delete(ctx, nodeClass)).To(Succeed())\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\t\tExpect(awsEnv.IAMAPI.InstanceProfiles).To(HaveLen(0))\n\t\tExpectNotFound(ctx, env.Client, nodeClass)\n\t})\n\tIt(\"should succeed to delete the NodeClass when the instance profile doesn't exist\", func() {\n\t\tExpect(awsEnv.IAMAPI.InstanceProfiles).To(HaveLen(0))\n\t\tcontrollerutil.AddFinalizer(nodeClass, v1.TerminationFinalizer)\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\n\t\tExpect(env.Client.Delete(ctx, nodeClass)).To(Succeed())\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\t\tExpect(awsEnv.IAMAPI.InstanceProfiles).To(HaveLen(0))\n\t\tExpectNotFound(ctx, env.Client, nodeClass)\n\t})\n\n\tIt(\"should succeed to delete both legacy and current instance profiles if the NodeClass is deleted\", func() {\n\t\tprofileName := nodeClass.LegacyInstanceProfileName(options.FromContext(ctx).ClusterName, fake.DefaultRegion)\n\t\tawsEnv.IAMAPI.InstanceProfiles = map[string]*iamtypes.InstanceProfile{\n\t\t\tprofileName: {\n\t\t\t\tInstanceProfileName: lo.ToPtr(profileName),\n\t\t\t\tRoles: []iamtypes.Role{\n\t\t\t\t\t{\n\t\t\t\t\t\tRoleId:   aws.String(fake.RoleID()),\n\t\t\t\t\t\tRoleName: aws.String(\"fake-role\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}\n\t\tcontrollerutil.AddFinalizer(nodeClass, v1.TerminationFinalizer)\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\t\tExpect(awsEnv.IAMAPI.InstanceProfiles).To(HaveLen(2))\n\n\t\tExpect(env.Client.Delete(ctx, nodeClass)).To(Succeed())\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\t\tExpect(awsEnv.IAMAPI.InstanceProfiles).To(HaveLen(0))\n\t\tExpectNotFound(ctx, env.Client, nodeClass)\n\t})\n\tIt(\"should not delete the EC2NodeClass until all associated NodeClaims are terminated\", func() {\n\t\tvar nodeClaims []*karpv1.NodeClaim\n\t\tfor i := 0; i < 2; i++ {\n\t\t\tnc := coretest.NodeClaim(karpv1.NodeClaim{\n\t\t\t\tSpec: karpv1.NodeClaimSpec{\n\t\t\t\t\tNodeClassRef: &karpv1.NodeClassReference{\n\t\t\t\t\t\tGroup: object.GVK(nodeClass).Group,\n\t\t\t\t\t\tKind:  object.GVK(nodeClass).Kind,\n\t\t\t\t\t\tName:  nodeClass.Name,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t})\n\t\t\tExpectApplied(ctx, env.Client, nc)\n\t\t\tnodeClaims = append(nodeClaims, nc)\n\t\t}\n\n\t\tcontrollerutil.AddFinalizer(nodeClass, v1.TerminationFinalizer)\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\n\t\tExpect(awsEnv.IAMAPI.InstanceProfiles).To(HaveLen(1))\n\t\tExpect(awsEnv.IAMAPI.InstanceProfiles[nodeClass.Status.InstanceProfile].Roles).To(HaveLen(1))\n\n\t\tExpect(env.Client.Delete(ctx, nodeClass)).To(Succeed())\n\t\tres := ExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\t\tExpect(res.RequeueAfter).To(Equal(time.Minute * 10))\n\t\tExpect(awsEnv.IAMAPI.InstanceProfiles).To(HaveLen(1))\n\t\tExpectExists(ctx, env.Client, nodeClass)\n\n\t\t// Delete one of the NodeClaims\n\t\t// The NodeClass should still not delete\n\t\tExpectDeleted(ctx, env.Client, nodeClaims[0])\n\t\tres = ExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\t\tExpect(res.RequeueAfter).To(Equal(time.Minute * 10))\n\t\tExpect(awsEnv.IAMAPI.InstanceProfiles).To(HaveLen(1))\n\t\tExpectExists(ctx, env.Client, nodeClass)\n\n\t\t// Delete the last NodeClaim\n\t\t// The NodeClass should now delete\n\t\tExpectDeleted(ctx, env.Client, nodeClaims[1])\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\t\tExpect(awsEnv.IAMAPI.InstanceProfiles).To(HaveLen(0))\n\t\tExpectNotFound(ctx, env.Client, nodeClass)\n\t})\n\tIt(\"should not call the IAM API when deleting a NodeClass with an instanceProfile specified\", func() {\n\t\tprofileName := \"test-instance-profile\"\n\t\tawsEnv.IAMAPI.InstanceProfiles = map[string]*iamtypes.InstanceProfile{\n\t\t\tprofileName: {\n\t\t\t\tInstanceProfileName: aws.String(\"test-instance-profile\"),\n\t\t\t\tRoles: []iamtypes.Role{\n\t\t\t\t\t{\n\t\t\t\t\t\tRoleId:   aws.String(fake.RoleID()),\n\t\t\t\t\t\tRoleName: aws.String(\"fake-role\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}\n\t\tnodeClass.Spec.Role = \"\"\n\t\tnodeClass.Spec.InstanceProfile = lo.ToPtr(\"test-instance-profile\")\n\t\tcontrollerutil.AddFinalizer(nodeClass, v1.TerminationFinalizer)\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\t\tExpect(awsEnv.IAMAPI.InstanceProfiles).To(HaveLen(1))\n\n\t\tExpect(env.Client.Delete(ctx, nodeClass)).To(Succeed())\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\t\tExpect(awsEnv.IAMAPI.InstanceProfiles).To(HaveLen(1))\n\t\tExpectNotFound(ctx, env.Client, nodeClass)\n\n\t\tExpect(awsEnv.IAMAPI.DeleteInstanceProfileBehavior.Calls()).To(BeZero())\n\t\tExpect(awsEnv.IAMAPI.RemoveRoleFromInstanceProfileBehavior.Calls()).To(BeZero())\n\t})\n\tIt(\"should skip instance profile cleanup in isolated VPCs\", func() {\n\t\tctx = options.ToContext(ctx, test.Options(test.OptionsFields{IsolatedVPC: lo.ToPtr(true)}))\n\n\t\tcontrollerutil.AddFinalizer(nodeClass, v1.TerminationFinalizer)\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\t\tExpect(awsEnv.IAMAPI.InstanceProfiles).To(HaveLen(1))\n\n\t\tExpect(env.Client.Delete(ctx, nodeClass)).To(Succeed())\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\n\t\tExpect(awsEnv.IAMAPI.DeleteInstanceProfileBehavior.Calls()).To(BeZero())\n\t\tExpect(awsEnv.IAMAPI.RemoveRoleFromInstanceProfileBehavior.Calls()).To(BeZero())\n\t\tExpect(awsEnv.IAMAPI.InstanceProfiles).To(HaveLen(1))\n\t\tExpectNotFound(ctx, env.Client, nodeClass)\n\t})\n})\n"
  },
  {
    "path": "pkg/controllers/nodeclass/validation.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage nodeclass\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/mitchellh/hashstructure/v2\"\n\t\"github.com/patrickmn/go-cache\"\n\t\"github.com/samber/lo\"\n\t\"sigs.k8s.io/controller-runtime/pkg/client\"\n\t\"sigs.k8s.io/controller-runtime/pkg/log\"\n\t\"sigs.k8s.io/controller-runtime/pkg/reconcile\"\n\t\"sigs.k8s.io/karpenter/pkg/cloudprovider\"\n\t\"sigs.k8s.io/karpenter/pkg/scheduling\"\n\tnodepoolutils \"sigs.k8s.io/karpenter/pkg/utils/nodepool\"\n\n\t\"github.com/aws/aws-sdk-go-v2/aws\"\n\t\"github.com/aws/aws-sdk-go-v2/service/ec2\"\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\tcorev1 \"k8s.io/api/core/v1\"\n\t\"k8s.io/apimachinery/pkg/util/sets\"\n\tkarpv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\tsdk \"github.com/aws/karpenter-provider-aws/pkg/aws\"\n\tawserrors \"github.com/aws/karpenter-provider-aws/pkg/errors\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/operator/options\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/amifamily\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/instance\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/instancetype\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/launchtemplate\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/utils\"\n)\n\nconst (\n\trequeueAfterTime                              = 10 * time.Minute\n\tConditionReasonCreateFleetAuthFailed          = \"CreateFleetAuthCheckFailed\"\n\tConditionReasonCreateLaunchTemplateAuthFailed = \"CreateLaunchTemplateAuthCheckFailed\"\n\tConditionReasonRunInstancesAuthFailed         = \"RunInstancesAuthCheckFailed\"\n\tConditionReasonDependenciesNotReady           = \"DependenciesNotReady\"\n\tConditionReasonTagValidationFailed            = \"TagValidationFailed\"\n\tConditionReasonDryRunDisabled                 = \"DryRunDisabled\"\n)\n\nvar ValidationConditionMessages = map[string]string{\n\tConditionReasonCreateFleetAuthFailed:          \"Controller isn't authorized to call ec2:CreateFleet\",\n\tConditionReasonCreateLaunchTemplateAuthFailed: \"Controller isn't authorized to call ec2:CreateLaunchTemplate\",\n\tConditionReasonRunInstancesAuthFailed:         \"Controller isn't authorized to call ec2:RunInstances\",\n}\n\ntype Validation struct {\n\tkubeClient             client.Client\n\tcloudProvider          cloudprovider.CloudProvider\n\tec2api                 sdk.EC2API\n\tamiResolver            amifamily.Resolver\n\tinstanceTypeProvider   instancetype.Provider\n\tlaunchTemplateProvider launchtemplate.Provider\n\tcache                  *cache.Cache\n\tdryRunDisabled         bool\n}\n\nfunc NewValidationReconciler(\n\tkubeClient client.Client,\n\tcloudProvider cloudprovider.CloudProvider,\n\tec2api sdk.EC2API,\n\tamiResolver amifamily.Resolver,\n\tinstanceTypeProvider instancetype.Provider,\n\tlaunchTemplateProvider launchtemplate.Provider,\n\tcache *cache.Cache,\n\tdryRunDisabled bool,\n) *Validation {\n\treturn &Validation{\n\t\tkubeClient:             kubeClient,\n\t\tcloudProvider:          cloudProvider,\n\t\tec2api:                 ec2api,\n\t\tamiResolver:            amiResolver,\n\t\tinstanceTypeProvider:   instanceTypeProvider,\n\t\tlaunchTemplateProvider: launchTemplateProvider,\n\t\tcache:                  cache,\n\t\tdryRunDisabled:         dryRunDisabled,\n\t}\n}\n\n// nolint:gocyclo\nfunc (v *Validation) Reconcile(ctx context.Context, nodeClass *v1.EC2NodeClass) (reconcile.Result, error) {\n\t// A NodeClass that uses AL2023 requires the cluster CIDR for launching nodes.\n\t// To allow Karpenter to be used for Non-EKS clusters, resolving the Cluster CIDR\n\t// will not be done at startup but instead in a reconcile loop.\n\tif nodeClass.AMIFamily() == v1.AMIFamilyAL2023 {\n\t\tif err := v.launchTemplateProvider.ResolveClusterCIDR(ctx); err != nil {\n\t\t\tif awserrors.IsServerError(err) {\n\t\t\t\treturn reconcile.Result{Requeue: true}, nil\n\t\t\t}\n\t\t\tnodeClass.StatusConditions().SetFalse(\n\t\t\t\tv1.ConditionTypeValidationSucceeded,\n\t\t\t\t\"ClusterCIDRResolutionFailed\",\n\t\t\t\t\"Failed to detect the cluster CIDR\",\n\t\t\t)\n\t\t\treturn reconcile.Result{}, fmt.Errorf(\"failed to detect the cluster CIDR, %w\", err)\n\t\t}\n\t}\n\n\tif _, ok := lo.Find(v.requiredConditions(), func(cond string) bool {\n\t\treturn nodeClass.StatusConditions().Get(cond).IsFalse()\n\t}); ok {\n\t\t// If any of the required status conditions are false, we know validation will fail regardless of the other values.\n\t\tnodeClass.StatusConditions().SetFalse(\n\t\t\tv1.ConditionTypeValidationSucceeded,\n\t\t\tConditionReasonDependenciesNotReady,\n\t\t\t\"Awaiting AMI, Instance Profile, Security Group, and Subnet resolution\",\n\t\t)\n\t\treturn reconcile.Result{RequeueAfter: requeueAfterTime}, nil\n\t}\n\tif _, ok := lo.Find(v.requiredConditions(), func(cond string) bool {\n\t\treturn nodeClass.StatusConditions().Get(cond).IsUnknown()\n\t}); ok {\n\t\t// If none of the status conditions are false, but at least one is unknown, we should also consider the validation\n\t\t// state to be unknown. Once all required conditions collapse to a true or false state, we can test validation.\n\t\tnodeClass.StatusConditions().SetUnknownWithReason(\n\t\t\tv1.ConditionTypeValidationSucceeded,\n\t\t\tConditionReasonDependenciesNotReady,\n\t\t\t\"Awaiting AMI, Instance Profile, Security Group, and Subnet resolution\",\n\t\t)\n\t\treturn reconcile.Result{RequeueAfter: requeueAfterTime}, nil\n\t}\n\n\tnodeClaim := &karpv1.NodeClaim{\n\t\tSpec: karpv1.NodeClaimSpec{\n\t\t\tNodeClassRef: &karpv1.NodeClassReference{\n\t\t\t\tName: nodeClass.Name,\n\t\t\t},\n\t\t},\n\t}\n\ttags, err := utils.GetTags(nodeClass, nodeClaim, options.FromContext(ctx).ClusterName)\n\tif err != nil {\n\t\tnodeClass.StatusConditions().SetFalse(v1.ConditionTypeValidationSucceeded, ConditionReasonTagValidationFailed, err.Error())\n\t\treturn reconcile.Result{}, reconcile.TerminalError(fmt.Errorf(\"validating tags, %w\", err))\n\t}\n\n\tif val, ok := v.cache.Get(v.cacheKey(nodeClass, tags)); ok {\n\t\t// We still update the status condition even if it's cached since we may have had a conflict error previously\n\t\tif val == \"\" {\n\t\t\tnodeClass.StatusConditions().SetTrue(v1.ConditionTypeValidationSucceeded)\n\t\t} else {\n\t\t\tnodeClass.StatusConditions().SetFalse(\n\t\t\t\tv1.ConditionTypeValidationSucceeded,\n\t\t\t\tval.(string),\n\t\t\t\tValidationConditionMessages[val.(string)],\n\t\t\t)\n\t\t}\n\t\treturn reconcile.Result{RequeueAfter: requeueAfterTime}, nil\n\t}\n\n\tif v.dryRunDisabled {\n\t\tnodeClass.StatusConditions().SetTrue(v1.ConditionTypeValidationSucceeded)\n\t\tv.cache.SetDefault(v.cacheKey(nodeClass, tags), \"\")\n\t\treturn reconcile.Result{RequeueAfter: requeueAfterTime}, nil\n\t}\n\n\tlaunchTemplate, result, err := v.validateCreateLaunchTemplateAuthorization(ctx, nodeClass, nodeClaim, tags)\n\tif err != nil || !lo.IsEmpty(result) {\n\t\treturn result, err\n\t}\n\n\tresult, err = v.validateCreateFleetAuthorization(ctx, nodeClass, tags, launchTemplate)\n\tif err != nil || !lo.IsEmpty(result) {\n\t\treturn result, err\n\t}\n\n\tresult, err = v.validateRunInstancesAuthorization(ctx, nodeClass, tags, launchTemplate)\n\tif err != nil || !lo.IsEmpty(result) {\n\t\treturn result, err\n\t}\n\n\tv.cache.SetDefault(v.cacheKey(nodeClass, tags), \"\")\n\tnodeClass.StatusConditions().SetTrue(v1.ConditionTypeValidationSucceeded)\n\treturn reconcile.Result{RequeueAfter: requeueAfterTime}, nil\n}\n\nfunc (v *Validation) updateCacheOnFailure(nodeClass *v1.EC2NodeClass, tags map[string]string, failureReason string) {\n\tv.cache.SetDefault(v.cacheKey(nodeClass, tags), failureReason)\n\tnodeClass.StatusConditions().SetFalse(\n\t\tv1.ConditionTypeValidationSucceeded,\n\t\tfailureReason,\n\t\tValidationConditionMessages[failureReason],\n\t)\n}\n\nfunc (v *Validation) validateCreateLaunchTemplateAuthorization(\n\tctx context.Context,\n\tnodeClass *v1.EC2NodeClass,\n\tnodeClaim *karpv1.NodeClaim,\n\ttags map[string]string,\n) (launchTemplate *launchtemplate.LaunchTemplate, result reconcile.Result, err error) {\n\tinstanceTypes, err := v.getPrioritizedInstanceTypes(ctx, nodeClass)\n\tif err != nil {\n\t\treturn nil, reconcile.Result{}, fmt.Errorf(\"generating options, %w\", err)\n\t}\n\t// pass 1 instance type in EnsureAll to only create 1 launch template\n\ttenancyType, err := v.getTenancyType(ctx, nodeClass)\n\tif err != nil {\n\t\treturn nil, reconcile.Result{}, fmt.Errorf(\"determining instance tenancy, %w\", err)\n\t}\n\tlaunchTemplates, err := v.launchTemplateProvider.EnsureAll(ctx, nodeClass, nodeClaim, instanceTypes[:1], karpv1.CapacityTypeOnDemand, tags, string(tenancyType))\n\tif err != nil {\n\t\tif awserrors.IsRateLimitedError(err) || awserrors.IsServerError(err) {\n\t\t\treturn nil, reconcile.Result{Requeue: true}, nil\n\t\t}\n\t\tif awserrors.IgnoreUnauthorizedOperationError(err) != nil {\n\t\t\t// We should only ever receive UnauthorizedOperation so if we receive any other error it would be an unexpected state\n\t\t\treturn nil, reconcile.Result{}, fmt.Errorf(\"validating ec2:CreateLaunchTemplate authorization, %w\", err)\n\t\t}\n\t\tlog.FromContext(ctx).Error(err, \"unauthorized to call ec2:CreateLaunchTemplate\")\n\t\tv.updateCacheOnFailure(nodeClass, tags, ConditionReasonCreateLaunchTemplateAuthFailed)\n\t\treturn nil, reconcile.Result{RequeueAfter: requeueAfterTime}, nil\n\t}\n\t// this case should never occur as we ensure instance types are compatible with AMI\n\tif len(launchTemplates) == 0 {\n\t\treturn nil, reconcile.Result{}, fmt.Errorf(\"no compatible launch templates created\")\n\t}\n\treturn launchTemplates[0], reconcile.Result{}, nil\n}\n\nfunc (v *Validation) validateCreateFleetAuthorization(\n\tctx context.Context,\n\tnodeClass *v1.EC2NodeClass,\n\ttags map[string]string,\n\tlaunchTemplate *launchtemplate.LaunchTemplate,\n) (result reconcile.Result, err error) {\n\tfleetLaunchTemplateConfig := getFleetLaunchTemplateConfig(nodeClass, launchTemplate)\n\tcreateFleetInput := instance.NewCreateFleetInputBuilder(karpv1.CapacityTypeOnDemand, tags, fleetLaunchTemplateConfig).Build()\n\tcreateFleetInput.DryRun = lo.ToPtr(true)\n\t// Adding NopRetryer to avoid aggressive retry when rate limited\n\tif _, err := v.ec2api.CreateFleet(ctx, createFleetInput, func(o *ec2.Options) {\n\t\to.Retryer = aws.NopRetryer{}\n\t}); awserrors.IgnoreDryRunError(err) != nil {\n\t\tif awserrors.IsRateLimitedError(err) || awserrors.IsServerError(err) {\n\t\t\treturn reconcile.Result{Requeue: true}, nil\n\t\t}\n\t\tif awserrors.IgnoreUnauthorizedOperationError(err) != nil {\n\t\t\t// Dry run should only ever return UnauthorizedOperation or DryRunOperation so if we receive any other error\n\t\t\t// it would be an unexpected state\n\t\t\treturn reconcile.Result{}, fmt.Errorf(\"validating ec2:CreateFleet authorization, %w\", err)\n\t\t}\n\t\tlog.FromContext(ctx).Error(err, \"unauthorized to call ec2:CreateFleet\")\n\t\tv.updateCacheOnFailure(nodeClass, tags, ConditionReasonCreateFleetAuthFailed)\n\t\treturn reconcile.Result{RequeueAfter: requeueAfterTime}, nil\n\t}\n\treturn reconcile.Result{}, nil\n}\n\nfunc (v *Validation) validateRunInstancesAuthorization(\n\tctx context.Context,\n\tnodeClass *v1.EC2NodeClass,\n\ttags map[string]string,\n\tlaunchTemplate *launchtemplate.LaunchTemplate,\n) (result reconcile.Result, err error) {\n\trunInstancesInput := getRunInstancesInput(nodeClass, tags, launchTemplate)\n\t// Adding NopRetryer to avoid aggressive retry when rate limited\n\tif _, err = v.ec2api.RunInstances(ctx, runInstancesInput, func(o *ec2.Options) {\n\t\to.Retryer = aws.NopRetryer{}\n\t}); awserrors.IgnoreDryRunError(err) != nil {\n\t\t// If we get InstanceProfile NotFound, but we have a resolved instance profile in the status,\n\t\t// this means there is most likely an eventual consistency issue and we just need to requeue\n\t\tif awserrors.IsInstanceProfileNotFound(err) || awserrors.IsRateLimitedError(err) || awserrors.IsServerError(err) {\n\t\t\treturn reconcile.Result{Requeue: true}, nil\n\t\t}\n\t\tif awserrors.IgnoreUnauthorizedOperationError(err) != nil {\n\t\t\t// Dry run should only ever return UnauthorizedOperation or DryRunOperation so if we receive any other error\n\t\t\t// it would be an unexpected state\n\t\t\treturn reconcile.Result{}, fmt.Errorf(\"validating ec2:RunInstances authorization, %w\", err)\n\t\t}\n\t\tlog.FromContext(ctx).Error(err, \"unauthorized to call ec2:RunInstances\")\n\t\tv.updateCacheOnFailure(nodeClass, tags, ConditionReasonRunInstancesAuthFailed)\n\t\treturn reconcile.Result{RequeueAfter: requeueAfterTime}, nil\n\t}\n\treturn reconcile.Result{}, nil\n}\n\nfunc (*Validation) requiredConditions() []string {\n\treturn []string{\n\t\tv1.ConditionTypeAMIsReady,\n\t\tv1.ConditionTypeInstanceProfileReady,\n\t\tv1.ConditionTypeSecurityGroupsReady,\n\t\tv1.ConditionTypeSubnetsReady,\n\t}\n}\n\nfunc (*Validation) cacheKey(nodeClass *v1.EC2NodeClass, tags map[string]string) string {\n\thash := lo.Must(hashstructure.Hash([]any{\n\t\tnodeClass.Status.Subnets,\n\t\tnodeClass.Status.SecurityGroups,\n\t\tnodeClass.Status.AMIs,\n\t\tnodeClass.Status.InstanceProfile,\n\t\tnodeClass.Spec,\n\t\tnodeClass.Annotations,\n\t\ttags,\n\t}, hashstructure.FormatV2, &hashstructure.HashOptions{SlicesAsSets: true}))\n\treturn fmt.Sprintf(\"%s:%016x\", nodeClass.Name, hash)\n}\n\n// clearCacheEntries removes all cache entries associated with the given nodeclass from the validation cache\nfunc (v *Validation) clearCacheEntries(nodeClass *v1.EC2NodeClass) {\n\tvar toDelete []string\n\tfor key := range v.cache.Items() {\n\t\tparts := strings.Split(key, \":\")\n\t\t// NOTE: should never occur, indicates malformed cache key\n\t\tif len(parts) != 2 {\n\t\t\tcontinue\n\t\t}\n\t\tif parts[0] == nodeClass.Name {\n\t\t\ttoDelete = append(toDelete, key)\n\t\t}\n\t}\n\tfor _, key := range toDelete {\n\t\tv.cache.Delete(key)\n\t}\n}\n\nfunc getRunInstancesInput(\n\tnodeClass *v1.EC2NodeClass,\n\ttags map[string]string,\n\tlaunchTemplate *launchtemplate.LaunchTemplate,\n) *ec2.RunInstancesInput {\n\treturn &ec2.RunInstancesInput{\n\t\tDryRun:   lo.ToPtr(true),\n\t\tMaxCount: lo.ToPtr[int32](1),\n\t\tMinCount: lo.ToPtr[int32](1),\n\t\tLaunchTemplate: &ec2types.LaunchTemplateSpecification{\n\t\t\tLaunchTemplateName: lo.ToPtr(launchTemplate.Name),\n\t\t\tVersion:            lo.ToPtr(\"$Latest\"),\n\t\t},\n\t\tInstanceType: ec2types.InstanceType(launchTemplate.InstanceTypes[0].Name),\n\t\tNetworkInterfaces: []ec2types.InstanceNetworkInterfaceSpecification{\n\t\t\t{\n\t\t\t\tDeviceIndex: lo.ToPtr[int32](0),\n\t\t\t\tSubnetId:    lo.ToPtr(nodeClass.Status.Subnets[0].ID),\n\t\t\t},\n\t\t},\n\t\tTagSpecifications: []ec2types.TagSpecification{\n\t\t\t{\n\t\t\t\tResourceType: ec2types.ResourceTypeInstance,\n\t\t\t\tTags:         utils.EC2MergeTags(tags),\n\t\t\t},\n\t\t\t{\n\t\t\t\tResourceType: ec2types.ResourceTypeVolume,\n\t\t\t\tTags:         utils.EC2MergeTags(tags),\n\t\t\t},\n\t\t\t{\n\t\t\t\tResourceType: ec2types.ResourceTypeNetworkInterface,\n\t\t\t\tTags:         utils.EC2MergeTags(tags),\n\t\t\t},\n\t\t},\n\t}\n}\n\nfunc getFleetLaunchTemplateConfig(\n\tnodeClass *v1.EC2NodeClass,\n\tlaunchTemplate *launchtemplate.LaunchTemplate,\n) []ec2types.FleetLaunchTemplateConfigRequest {\n\tvar overrides []ec2types.FleetLaunchTemplateOverridesRequest\n\tfor _, instanceType := range launchTemplate.InstanceTypes {\n\t\tfor _, subnet := range nodeClass.Status.Subnets {\n\t\t\toverrides = append(overrides,\n\t\t\t\tec2types.FleetLaunchTemplateOverridesRequest{\n\t\t\t\t\tInstanceType: ec2types.InstanceType(instanceType.Name),\n\t\t\t\t\tSubnetId:     lo.ToPtr(subnet.ID),\n\t\t\t\t},\n\t\t\t)\n\t\t}\n\t}\n\treturn []ec2types.FleetLaunchTemplateConfigRequest{\n\t\t{\n\t\t\tLaunchTemplateSpecification: &ec2types.FleetLaunchTemplateSpecificationRequest{\n\t\t\t\tLaunchTemplateName: lo.ToPtr(launchTemplate.Name),\n\t\t\t\tVersion:            lo.ToPtr(\"$Latest\"),\n\t\t\t},\n\t\t\tOverrides: overrides,\n\t\t},\n\t}\n}\n\nfunc (v *Validation) getPrioritizedInstanceTypes(ctx context.Context, nodeClass *v1.EC2NodeClass) ([]*cloudprovider.InstanceType, error) {\n\t// Select an instance type to use for validation. If NodePools exist for this NodeClass, we'll use an instance type\n\t// selected by one of those NodePools. We should also prioritize an InstanceType which will launch with a non-GPU\n\t// (VariantStandard) AMI, since GPU AMIs may have a larger snapshot size than that supported by the NodeClass'\n\t// blockDeviceMappings.\n\t// Historical Issue: https://github.com/aws/karpenter-provider-aws/issues/7928\n\tinstanceTypes, err := v.getInstanceTypesForNodeClass(ctx, nodeClass)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// If there weren't any matching instance types, we should fallback to some defaults. There's an instance type included\n\t// for both x86_64 and arm64 architectures, ensuring that there will be a matching AMI. We also fallback to the default\n\t// instance types if the AMI family is Windows. Karpenter currently incorrectly marks certain instance types as Windows\n\t// compatible, and dynamic instance type resolution may choose those instance types for the dry-run, even if they\n\t// wouldn't be chosen due to cost in practice. This ensures the behavior matches that on Karpenter v1.3, preventing a\n\t// potential regression for Windows users.\n\t// Tracking issue: https://github.com/aws/karpenter-provider-aws/issues/7985\n\tif len(instanceTypes) == 0 || lo.ContainsBy([]string{\n\t\tv1.AMIFamilyWindows2019,\n\t\tv1.AMIFamilyWindows2022,\n\t\tv1.AMIFamilyWindows2025,\n\t}, func(family string) bool {\n\t\treturn family == nodeClass.AMIFamily()\n\t}) {\n\t\tinstanceTypes = []*cloudprovider.InstanceType{\n\t\t\t{\n\t\t\t\tName: string(ec2types.InstanceTypeM5Large),\n\t\t\t\tRequirements: scheduling.NewRequirements(append(\n\t\t\t\t\tlo.Values(amifamily.VariantStandard.Requirements()),\n\t\t\t\t\tscheduling.NewRequirement(corev1.LabelArchStable, corev1.NodeSelectorOpIn, karpv1.ArchitectureAmd64),\n\t\t\t\t\tscheduling.NewRequirement(corev1.LabelOSStable, corev1.NodeSelectorOpExists),\n\t\t\t\t\tscheduling.NewRequirement(corev1.LabelWindowsBuild, corev1.NodeSelectorOpExists),\n\t\t\t\t)...),\n\t\t\t},\n\t\t\t{\n\t\t\t\tName: string(ec2types.InstanceTypeM6gLarge),\n\t\t\t\tRequirements: scheduling.NewRequirements(append(\n\t\t\t\t\tlo.Values(amifamily.VariantStandard.Requirements()),\n\t\t\t\t\tscheduling.NewRequirement(corev1.LabelArchStable, corev1.NodeSelectorOpIn, karpv1.ArchitectureArm64),\n\t\t\t\t\tscheduling.NewRequirement(corev1.LabelOSStable, corev1.NodeSelectorOpExists),\n\t\t\t\t\tscheduling.NewRequirement(corev1.LabelWindowsBuild, corev1.NodeSelectorOpExists),\n\t\t\t\t)...),\n\t\t\t},\n\t\t}\n\t\tinstanceTypes = getAMICompatibleInstanceTypes(instanceTypes, nodeClass)\n\t}\n\n\treturn instanceTypes, nil\n}\n\n// getInstanceTypesForNodeClass returns the set of instances which could be launched using this NodeClass based on the\n// requirements of linked NodePools. If no NodePools exist for the given NodeClass, this function returns two default\n// instance types (one x86_64 and one arm64).\nfunc (v *Validation) getInstanceTypesForNodeClass(ctx context.Context, nodeClass *v1.EC2NodeClass) ([]*cloudprovider.InstanceType, error) {\n\tinstanceTypes, err := v.instanceTypeProvider.List(ctx, nodeClass)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"listing instance types for nodeclass, %w\", err)\n\t}\n\tnodePools, err := nodepoolutils.ListManaged(ctx, v.kubeClient, v.cloudProvider, nodepoolutils.ForNodeClass(nodeClass))\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"listing nodepools for nodeclass, %w\", err)\n\t}\n\tvar compatibleInstanceTypes []*cloudprovider.InstanceType\n\tnames := sets.New[string]()\n\tfor _, np := range nodePools {\n\t\treqs := scheduling.NewNodeSelectorRequirementsWithMinValues(np.Spec.Template.Spec.Requirements...)\n\t\tif np.Spec.Template.Labels != nil {\n\t\t\treqs.Add(lo.Values(scheduling.NewLabelRequirements(np.Spec.Template.Labels))...)\n\t\t}\n\t\tfor _, it := range instanceTypes {\n\t\t\tif it.Requirements.Intersects(reqs) != nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif names.Has(it.Name) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tnames.Insert(it.Name)\n\t\t\tcompatibleInstanceTypes = append(compatibleInstanceTypes, it)\n\t\t}\n\t}\n\treturn getAMICompatibleInstanceTypes(compatibleInstanceTypes, nodeClass), nil\n}\n\nfunc (v *Validation) getTenancyType(ctx context.Context, nodeClass *v1.EC2NodeClass) (ec2types.Tenancy, error) {\n\tnodePools, err := nodepoolutils.ListManaged(ctx, v.kubeClient, v.cloudProvider, nodepoolutils.ForNodeClass(nodeClass))\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"listing nodepools for nodeclass, %w\", err)\n\t}\n\n\tfor _, np := range nodePools {\n\t\treqs := scheduling.NewNodeSelectorRequirementsWithMinValues(np.Spec.Template.Spec.Requirements...)\n\t\tif reqs.Has(v1.LabelInstanceTenancy) && reqs.Get(v1.LabelInstanceTenancy).Has(string(ec2types.TenancyDedicated)) {\n\t\t\treturn ec2types.TenancyDedicated, nil\n\t\t}\n\t}\n\treturn ec2types.TenancyDefault, nil\n}\n\nfunc getAMICompatibleInstanceTypes(instanceTypes []*cloudprovider.InstanceType, nodeClass *v1.EC2NodeClass) []*cloudprovider.InstanceType {\n\tamiMap := amifamily.MapToInstanceTypes(instanceTypes, nodeClass.Status.AMIs)\n\tvar selectedInstanceTypes []*cloudprovider.InstanceType\n\tfor _, ami := range nodeClass.Status.AMIs {\n\t\tif len(amiMap[ami.ID]) == 0 {\n\t\t\tcontinue\n\t\t}\n\t\tamiRequirements := scheduling.NewNodeSelectorRequirements(ami.Requirements...)\n\t\tif amiRequirements.IsCompatible(amifamily.VariantStandard.Requirements()) {\n\t\t\tselectedInstanceTypes = append(selectedInstanceTypes, amiMap[ami.ID]...)\n\t\t}\n\t}\n\t// If we fail to find an instance type compatible with a standard AMI, fallback\n\tif len(selectedInstanceTypes) == 0 && len(amiMap) != 0 {\n\t\tselectedInstanceTypes = lo.Flatten(lo.Values(amiMap))\n\t}\n\n\treturn selectedInstanceTypes\n}\n"
  },
  {
    "path": "pkg/controllers/nodeclass/validation_test.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage nodeclass_test\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/awslabs/operatorpkg/object\"\n\t\"github.com/awslabs/operatorpkg/status\"\n\t\"github.com/samber/lo\"\n\t\"k8s.io/apimachinery/pkg/util/version\"\n\n\t\"github.com/aws/aws-sdk-go-v2/aws\"\n\t\"github.com/aws/aws-sdk-go-v2/service/ec2\"\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\t\"github.com/aws/aws-sdk-go-v2/service/eks\"\n\tekstypes \"github.com/aws/aws-sdk-go-v2/service/eks/types\"\n\t\"github.com/aws/smithy-go\"\n\tcorev1 \"k8s.io/api/core/v1\"\n\t\"k8s.io/client-go/tools/record\"\n\tkarpv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n\t\"sigs.k8s.io/karpenter/pkg/events\"\n\tcoretest \"sigs.k8s.io/karpenter/pkg/test\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/controllers/nodeclass\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/fake\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/operator/options\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/test\"\n\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n\t. \"github.com/onsi/gomega/gstruct\"\n\t\"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil\"\n\t. \"sigs.k8s.io/karpenter/pkg/test/expectations\"\n)\n\nvar _ = Describe(\"NodeClass Validation Status Controller\", func() {\n\tContext(\"Preconditions\", func() {\n\t\tvar reconciler *nodeclass.Validation\n\t\tBeforeEach(func() {\n\t\t\treconciler = nodeclass.NewValidationReconciler(env.Client, cloudProvider, awsEnv.EC2API, awsEnv.AMIResolver, awsEnv.InstanceTypesProvider, awsEnv.LaunchTemplateProvider, awsEnv.ValidationCache, options.FromContext(ctx).DisableDryRun)\n\t\t\tfor _, cond := range []string{\n\t\t\t\tv1.ConditionTypeAMIsReady,\n\t\t\t\tv1.ConditionTypeInstanceProfileReady,\n\t\t\t\tv1.ConditionTypeSecurityGroupsReady,\n\t\t\t\tv1.ConditionTypeSubnetsReady,\n\t\t\t} {\n\t\t\t\tnodeClass.StatusConditions().SetTrue(cond)\n\t\t\t}\n\t\t})\n\t\tDescribeTable(\n\t\t\t\"should set validated status condition to false when any required condition is false\",\n\t\t\tfunc(cond string) {\n\t\t\t\tnodeClass.StatusConditions().SetFalse(cond, \"test\", \"test\")\n\t\t\t\t_, err := reconciler.Reconcile(ctx, nodeClass)\n\t\t\t\tExpect(err).ToNot(HaveOccurred())\n\t\t\t\tExpect(nodeClass.StatusConditions().Get(v1.ConditionTypeValidationSucceeded).IsFalse()).To(BeTrue())\n\t\t\t\tExpect(nodeClass.StatusConditions().Get(v1.ConditionTypeValidationSucceeded).Reason).To(Equal(nodeclass.ConditionReasonDependenciesNotReady))\n\t\t\t},\n\t\t\tEntry(v1.ConditionTypeAMIsReady, v1.ConditionTypeAMIsReady),\n\t\t\tEntry(v1.ConditionTypeInstanceProfileReady, v1.ConditionTypeInstanceProfileReady),\n\t\t\tEntry(v1.ConditionTypeSecurityGroupsReady, v1.ConditionTypeSecurityGroupsReady),\n\t\t\tEntry(v1.ConditionTypeSubnetsReady, v1.ConditionTypeSubnetsReady),\n\t\t)\n\t\tDescribeTable(\n\t\t\t\"should set validated status condition to unknown when no required condition is false and any are unknown\",\n\t\t\tfunc(cond string) {\n\t\t\t\tnodeClass.StatusConditions().SetUnknown(cond)\n\t\t\t\t_, err := reconciler.Reconcile(ctx, nodeClass)\n\t\t\t\tExpect(err).ToNot(HaveOccurred())\n\t\t\t\tExpect(nodeClass.StatusConditions().Get(v1.ConditionTypeValidationSucceeded).IsUnknown()).To(BeTrue())\n\t\t\t\tExpect(nodeClass.StatusConditions().Get(v1.ConditionTypeValidationSucceeded).Reason).To(Equal(nodeclass.ConditionReasonDependenciesNotReady))\n\t\t\t},\n\t\t\tEntry(v1.ConditionTypeAMIsReady, v1.ConditionTypeAMIsReady),\n\t\t\tEntry(v1.ConditionTypeInstanceProfileReady, v1.ConditionTypeInstanceProfileReady),\n\t\t\tEntry(v1.ConditionTypeSecurityGroupsReady, v1.ConditionTypeSecurityGroupsReady),\n\t\t\tEntry(v1.ConditionTypeSubnetsReady, v1.ConditionTypeSubnetsReady),\n\t\t)\n\t})\n\tContext(\"CIDR Resolution Precondition\", func() {\n\t\tBeforeEach(func() {\n\t\t\tnodeClass = test.EC2NodeClass(v1.EC2NodeClass{\n\t\t\t\tSpec: v1.EC2NodeClassSpec{\n\t\t\t\t\tSubnetSelectorTerms: []v1.SubnetSelectorTerm{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tTags: map[string]string{\"*\": \"*\"},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tSecurityGroupSelectorTerms: []v1.SecurityGroupSelectorTerm{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tTags: map[string]string{\"*\": \"*\"},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tAMIFamily: lo.ToPtr(v1.AMIFamilyCustom),\n\t\t\t\t\tAMISelectorTerms: []v1.AMISelectorTerm{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tTags: map[string]string{\"*\": \"*\"},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t})\n\t\t\t// Cluster CIDR will only be resolved once per lifetime of the launch template provider, reset to nil between tests\n\t\t\tawsEnv.LaunchTemplateProvider.ClusterCIDR.Store(nil)\n\n\t\t\t// Mock EC2 Describe Launch Template API calls to ensure CreateLaunchTemplate validation passes\n\t\t\tawsEnv.EC2API.DescribeLaunchTemplatesOutput.Set(&ec2.DescribeLaunchTemplatesOutput{\n\t\t\t\tLaunchTemplates: []ec2types.LaunchTemplate{\n\t\t\t\t\t{\n\t\t\t\t\t\tLaunchTemplateName: aws.String(\"test-lt\"),\n\t\t\t\t\t\tLaunchTemplateId:   aws.String(\"lt-12345\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t})\n\t\t})\n\t\tDescribeTable(\n\t\t\t\"shouldn't resolve cluster CIDR for non-AL2023 NodeClasses\",\n\t\t\tfunc(family string, terms []v1.AMISelectorTerm) {\n\t\t\t\tif version.MustParseGeneric(awsEnv.VersionProvider.Get(ctx)).Minor() > 32 {\n\t\t\t\t\tSkip(\"AL2 is not supported on versions > 1.32\")\n\t\t\t\t}\n\n\t\t\t\t// Skip Windows 2025 on versions < 1.35\n\t\t\t\tif family == v1.AMIFamilyWindows2025 && version.MustParseGeneric(awsEnv.VersionProvider.Get(ctx)).Minor() < 35 {\n\t\t\t\t\tSkip(\"Windows 2025 requires EKS version 1.35+, current version: \" + awsEnv.VersionProvider.Get(ctx))\n\t\t\t\t}\n\n\t\t\t\tnodeClass.Spec.AMIFamily = lo.ToPtr(family)\n\t\t\t\tnodeClass.Spec.AMISelectorTerms = terms\n\t\t\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\t\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\t\t\t\tExpect(awsEnv.LaunchTemplateProvider.ClusterCIDR.Load()).To(BeNil())\n\t\t\t},\n\t\t\tEntry(v1.AMIFamilyAL2, v1.AMIFamilyAL2, []v1.AMISelectorTerm{{Alias: \"al2@latest\"}}),\n\t\t\tEntry(v1.AMIFamilyBottlerocket, v1.AMIFamilyBottlerocket, []v1.AMISelectorTerm{{Alias: \"bottlerocket@latest\"}}),\n\t\t\tEntry(v1.AMIFamilyWindows2019, v1.AMIFamilyWindows2019, []v1.AMISelectorTerm{{Alias: \"windows2019@latest\"}}),\n\t\t\tEntry(v1.AMIFamilyWindows2022, v1.AMIFamilyWindows2022, []v1.AMISelectorTerm{{Alias: \"windows2022@latest\"}}),\n\t\t\tEntry(v1.AMIFamilyWindows2025, v1.AMIFamilyWindows2025, []v1.AMISelectorTerm{{Alias: \"windows2025@latest\"}}),\n\t\t\tEntry(v1.AMIFamilyCustom, v1.AMIFamilyCustom, []v1.AMISelectorTerm{{ID: \"ami-12345\"}}),\n\t\t)\n\t\tIt(\"should resolve cluster CIDR for IPv4 clusters\", func() {\n\t\t\tnodeClass.Spec.AMIFamily = lo.ToPtr(v1.AMIFamilyAL2023)\n\t\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{Alias: \"al2023@latest\"}}\n\t\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\t\t\tExpect(lo.FromPtr(awsEnv.LaunchTemplateProvider.ClusterCIDR.Load())).To(Equal(\"10.100.0.0/16\"))\n\t\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\t\t\tExpect(nodeClass.StatusConditions().IsTrue(v1.ConditionTypeValidationSucceeded)).To(BeTrue())\n\t\t})\n\t\tIt(\"should resolve cluster CIDR for IPv6 clusters\", func() {\n\t\t\tawsEnv.EKSAPI.DescribeClusterBehavior.Output.Set(&eks.DescribeClusterOutput{\n\t\t\t\tCluster: &ekstypes.Cluster{\n\t\t\t\t\tKubernetesNetworkConfig: &ekstypes.KubernetesNetworkConfigResponse{\n\t\t\t\t\t\tServiceIpv6Cidr: lo.ToPtr(\"2001:db8::/64\"),\n\t\t\t\t\t},\n\t\t\t\t\tVersion: lo.ToPtr(\"1.30\"),\n\t\t\t\t},\n\t\t\t})\n\t\t\tnodeClass.Spec.AMIFamily = lo.ToPtr(v1.AMIFamilyAL2023)\n\t\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{Alias: \"al2023@latest\"}}\n\t\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\t\t\tExpect(lo.FromPtr(awsEnv.LaunchTemplateProvider.ClusterCIDR.Load())).To(Equal(\"2001:db8::/64\"))\n\t\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\t\t\tExpect(nodeClass.StatusConditions().IsTrue(v1.ConditionTypeValidationSucceeded)).To(BeTrue())\n\t\t})\n\t})\n\tContext(\"Tag Validation\", func() {\n\t\tBeforeEach(func() {\n\t\t\tnodeClass = test.EC2NodeClass(v1.EC2NodeClass{\n\t\t\t\tSpec: v1.EC2NodeClassSpec{\n\t\t\t\t\tSubnetSelectorTerms: []v1.SubnetSelectorTerm{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tTags: map[string]string{\"*\": \"*\"},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tSecurityGroupSelectorTerms: []v1.SecurityGroupSelectorTerm{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tTags: map[string]string{\"*\": \"*\"},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tAMIFamily: lo.ToPtr(v1.AMIFamilyCustom),\n\t\t\t\t\tAMISelectorTerms: []v1.AMISelectorTerm{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tTags: map[string]string{\"*\": \"*\"},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tTags: map[string]string{\n\t\t\t\t\t\t\"kubernetes.io/cluster/anothercluster\": \"owned\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t})\n\t\t})\n\t\tDescribeTable(\"should update status condition on nodeClass as NotReady when tag validation fails\", func(illegalTag map[string]string) {\n\t\t\tnodeClass.Spec.Tags = illegalTag\n\t\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\t\terr := ExpectObjectReconcileFailed(ctx, env.Client, controller, nodeClass)\n\t\t\tExpect(err).To(HaveOccurred())\n\t\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\t\t\tExpect(nodeClass.StatusConditions().Get(v1.ConditionTypeValidationSucceeded).IsFalse()).To(BeTrue())\n\t\t\tExpect(nodeClass.StatusConditions().Get(v1.ConditionTypeValidationSucceeded).Reason).To(Equal(\"TagValidationFailed\"))\n\t\t\tExpect(nodeClass.StatusConditions().Get(status.ConditionReady).IsFalse()).To(BeTrue())\n\t\t\tExpect(nodeClass.StatusConditions().Get(status.ConditionReady).Message).To(Equal(\"ValidationSucceeded=False\"))\n\t\t},\n\t\t\tEntry(\"kubernetes.io/cluster*\", map[string]string{\"kubernetes.io/cluster/acluster\": \"owned\"}),\n\t\t\tEntry(v1.NodePoolTagKey, map[string]string{v1.NodePoolTagKey: \"testnodepool\"}),\n\t\t\tEntry(v1.EKSClusterNameTagKey, map[string]string{v1.EKSClusterNameTagKey: \"acluster\"}),\n\t\t\tEntry(v1.NodeClassTagKey, map[string]string{v1.NodeClassTagKey: \"testnodeclass\"}),\n\t\t\tEntry(v1.NodeClaimTagKey, map[string]string{v1.NodeClaimTagKey: \"testnodeclaim\"}),\n\t\t)\n\t\tIt(\"should update status condition as Ready when tags are valid\", func() {\n\t\t\tnodeClass.Spec.Tags = map[string]string{}\n\t\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\t\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\n\t\t\tExpect(nodeClass.StatusConditions().Get(v1.ConditionTypeValidationSucceeded).IsTrue()).To(BeTrue())\n\t\t\tExpect(nodeClass.StatusConditions().Get(status.ConditionReady).IsTrue()).To(BeTrue())\n\t\t})\n\t})\n\tContext(\"Authorization Validation\", func() {\n\t\tDescribeTable(\n\t\t\t\"NodeClass validation failure conditions\",\n\t\t\tfunc(setupFn func(), reason string) {\n\t\t\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\t\t\tsetupFn()\n\t\t\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\t\t\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\t\t\t\tExpect(nodeClass.StatusConditions().Get(v1.ConditionTypeValidationSucceeded).IsFalse()).To(BeTrue())\n\t\t\t\tExpect(nodeClass.StatusConditions().Get(v1.ConditionTypeValidationSucceeded).Reason).To(Equal(reason))\n\t\t\t\tExpect(awsEnv.ValidationCache.Items()).To(HaveLen(1))\n\n\t\t\t\t// Even though we would succeed on the subsequent call, we should fail here because we hit the cache\n\t\t\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\t\t\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\t\t\t\tExpect(nodeClass.StatusConditions().Get(v1.ConditionTypeValidationSucceeded).IsFalse()).To(BeTrue())\n\t\t\t\tExpect(nodeClass.StatusConditions().Get(v1.ConditionTypeValidationSucceeded).Reason).To(Equal(reason))\n\n\t\t\t\t// After flushing the cache, we should succeed\n\t\t\t\tawsEnv.ValidationCache.Flush()\n\t\t\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\t\t\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\t\t\t\tExpect(nodeClass.StatusConditions().Get(v1.ConditionTypeValidationSucceeded).IsTrue()).To(BeTrue())\n\t\t\t},\n\t\t\tEntry(\"should update status condition as NotReady when CreateFleet unauthorized\", func() {\n\t\t\t\tawsEnv.EC2API.CreateFleetBehavior.Error.Set(&smithy.GenericAPIError{\n\t\t\t\t\tCode: \"UnauthorizedOperation\",\n\t\t\t\t}, fake.MaxCalls(1))\n\t\t\t}, nodeclass.ConditionReasonCreateFleetAuthFailed),\n\t\t\tEntry(\"should update status condition as NotReady when RunInstances unauthorized\", func() {\n\t\t\t\tawsEnv.EC2API.RunInstancesBehavior.Error.Set(&smithy.GenericAPIError{\n\t\t\t\t\tCode: \"UnauthorizedOperation\",\n\t\t\t\t}, fake.MaxCalls(1))\n\t\t\t}, nodeclass.ConditionReasonRunInstancesAuthFailed),\n\t\t\tEntry(\"should update status condition as NotReady when CreateLaunchTemplate unauthorized\", func() {\n\t\t\t\tawsEnv.EC2API.CreateLaunchTemplateBehavior.Error.Set(&smithy.GenericAPIError{\n\t\t\t\t\tCode: \"UnauthorizedOperation\",\n\t\t\t\t}, fake.MaxCalls(1))\n\t\t\t}, nodeclass.ConditionReasonCreateLaunchTemplateAuthFailed),\n\t\t)\n\t\tContext(\"Instance Type Prioritization Validation\", func() {\n\t\t\tBeforeEach(func() {\n\t\t\t\tawsEnv.EC2API.DescribeImagesOutput.Set(&ec2.DescribeImagesOutput{\n\t\t\t\t\tImages: []ec2types.Image{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:         lo.ToPtr(\"amd64-ami\"),\n\t\t\t\t\t\t\tImageId:      lo.ToPtr(\"amd64-ami-id\"),\n\t\t\t\t\t\t\tCreationDate: lo.ToPtr(time.Time{}.Format(time.RFC3339)),\n\t\t\t\t\t\t\tArchitecture: \"x86_64\",\n\t\t\t\t\t\t\tState:        ec2types.ImageStateAvailable,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:         lo.ToPtr(\"arm64-ami\"),\n\t\t\t\t\t\t\tImageId:      lo.ToPtr(\"arm64-ami-id\"),\n\t\t\t\t\t\t\tCreationDate: lo.ToPtr(time.Time{}.Add(time.Minute).Format(time.RFC3339)),\n\t\t\t\t\t\t\tArchitecture: \"arm64\",\n\t\t\t\t\t\t\tState:        ec2types.ImageStateAvailable,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:         lo.ToPtr(\"amd64-nvidia-ami\"),\n\t\t\t\t\t\t\tImageId:      lo.ToPtr(\"amd64-nvidia-ami-id\"),\n\t\t\t\t\t\t\tCreationDate: lo.ToPtr(time.Time{}.Add(2 * time.Minute).Format(time.RFC3339)),\n\t\t\t\t\t\t\tArchitecture: \"x86_64\",\n\t\t\t\t\t\t\tState:        ec2types.ImageStateAvailable,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t\tversion := awsEnv.VersionProvider.Get(ctx)\n\t\t\t\tawsEnv.SSMAPI.Parameters = map[string]string{\n\t\t\t\t\tfmt.Sprintf(\"/aws/service/eks/optimized-ami/%s/amazon-linux-2023/x86_64/standard/recommended/image_id\", version): \"amd64-ami-id\",\n\t\t\t\t\tfmt.Sprintf(\"/aws/service/eks/optimized-ami/%s/amazon-linux-2023/x86_64/nvidia/recommended/image_id\", version):   \"amd64-nvidia-ami-id\",\n\t\t\t\t\tfmt.Sprintf(\"/aws/service/eks/optimized-ami/%s/amazon-linux-2023/arm64/standard/recommended/image_id\", version):  \"arm64-ami-id\",\n\t\t\t\t}\n\t\t\t\tExpect(awsEnv.InstanceTypesProvider.UpdateInstanceTypes(ctx)).To(Succeed())\n\t\t\t\tExpect(awsEnv.InstanceTypesProvider.UpdateInstanceTypeOfferings(ctx)).To(Succeed())\n\t\t\t})\n\t\t\tDescribeTable(\n\t\t\t\t\"should fallback to static instance types when no linked NodePools exist\",\n\t\t\t\tfunc(expectedInstanceType ec2types.InstanceType, expectedAMIID string) {\n\t\t\t\t\t// Filter out the non-target standard AMI to ensure the right instance is selected, but leave the nvidia AMI to\n\t\t\t\t\t// test AMI selection.\n\t\t\t\t\tawsEnv.SSMAPI.Parameters = lo.PickBy(awsEnv.SSMAPI.Parameters, func(_, amiID string) bool {\n\t\t\t\t\t\treturn amiID == expectedAMIID || strings.Contains(amiID, \"nvidia\")\n\t\t\t\t\t})\n\t\t\t\t\tExpect(len(awsEnv.SSMAPI.Parameters)).To(BeNumerically(\">\", 1))\n\n\t\t\t\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\t\t\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\t\t\t\t\tlaunchTemplateInput := awsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.Pop()\n\t\t\t\t\trunInstancesInput := awsEnv.EC2API.RunInstancesBehavior.CalledWithInput.Pop()\n\t\t\t\t\tExpect(runInstancesInput.InstanceType).To(Equal(expectedInstanceType))\n\t\t\t\t\tExpect(launchTemplateInput.LaunchTemplateData.ImageId).To(PointTo(Equal(expectedAMIID)))\n\t\t\t\t},\n\t\t\t\tEntry(\"m5.large\", ec2types.InstanceTypeM5Large, \"amd64-ami-id\"),\n\t\t\t\tEntry(\"m6g.large\", ec2types.InstanceTypeM6gLarge, \"arm64-ami-id\"),\n\t\t\t)\n\t\t\tIt(\"should prioritize non-GPU instances\", func() {\n\t\t\t\tnodePool := coretest.NodePool(karpv1.NodePool{Spec: karpv1.NodePoolSpec{Template: karpv1.NodeClaimTemplate{\n\t\t\t\t\tSpec: karpv1.NodeClaimTemplateSpec{\n\t\t\t\t\t\tRequirements: []karpv1.NodeSelectorRequirementWithMinValues{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tKey:      corev1.LabelInstanceTypeStable,\n\t\t\t\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\t\t\t\tValues: []string{\n\t\t\t\t\t\t\t\t\tstring(ec2types.InstanceTypeC6gLarge),\n\t\t\t\t\t\t\t\t\tstring(ec2types.InstanceTypeG4dn8xlarge),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tNodeClassRef: &karpv1.NodeClassReference{\n\t\t\t\t\t\t\tGroup: object.GVK(nodeClass).Group,\n\t\t\t\t\t\t\tKind:  object.GVK(nodeClass).Kind,\n\t\t\t\t\t\t\tName:  nodeClass.Name,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t}}})\n\t\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\t\t\t\tlaunchTemplateInput := awsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.Pop()\n\t\t\t\trunInstancesInput := awsEnv.EC2API.RunInstancesBehavior.CalledWithInput.Pop()\n\t\t\t\tExpect(runInstancesInput.InstanceType).To(Equal(ec2types.InstanceTypeC6gLarge))\n\t\t\t\tExpect(launchTemplateInput.LaunchTemplateData.ImageId).To(PointTo(Equal(\"arm64-ami-id\")))\n\t\t\t})\n\t\t\tIt(\"should fallback to GPU instances when no non-GPU instances exist\", func() {\n\t\t\t\tnodePool := coretest.NodePool(karpv1.NodePool{Spec: karpv1.NodePoolSpec{Template: karpv1.NodeClaimTemplate{\n\t\t\t\t\tSpec: karpv1.NodeClaimTemplateSpec{\n\t\t\t\t\t\tRequirements: []karpv1.NodeSelectorRequirementWithMinValues{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tKey:      corev1.LabelInstanceTypeStable,\n\t\t\t\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\t\t\t\tValues: []string{\n\t\t\t\t\t\t\t\t\tstring(ec2types.InstanceTypeG4dn8xlarge),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tNodeClassRef: &karpv1.NodeClassReference{\n\t\t\t\t\t\t\tGroup: object.GVK(nodeClass).Group,\n\t\t\t\t\t\t\tKind:  object.GVK(nodeClass).Kind,\n\t\t\t\t\t\t\tName:  nodeClass.Name,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t}}})\n\t\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\t\t\t\tlaunchTemplateInput := awsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.Pop()\n\t\t\t\trunInstancesInput := awsEnv.EC2API.RunInstancesBehavior.CalledWithInput.Pop()\n\t\t\t\tExpect(runInstancesInput.InstanceType).To(Equal(ec2types.InstanceTypeG4dn8xlarge))\n\t\t\t\tExpect(launchTemplateInput.LaunchTemplateData.ImageId).To(PointTo(Equal(\"amd64-nvidia-ami-id\")))\n\t\t\t})\n\t\t})\n\t\tContext(\"Tenancy LaunchTemplate Authorization\", func() {\n\t\t\tIt(\"should validate using default tenancy if no linked nodepool exists\", func() {\n\t\t\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\t\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\t\t\t\tlaunchTemplateInput := awsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.Pop()\n\t\t\t\tExpect(launchTemplateInput.LaunchTemplateData.Placement.Tenancy).To(Equal(ec2types.TenancyDefault))\n\t\t\t})\n\t\t\tIt(\"should validates using default tenancy if unspecified \", func() {\n\t\t\t\tnodePool := coretest.NodePool(karpv1.NodePool{Spec: karpv1.NodePoolSpec{Template: karpv1.NodeClaimTemplate{\n\t\t\t\t\tSpec: karpv1.NodeClaimTemplateSpec{\n\t\t\t\t\t\tRequirements: []karpv1.NodeSelectorRequirementWithMinValues{},\n\t\t\t\t\t\tNodeClassRef: &karpv1.NodeClassReference{\n\t\t\t\t\t\t\tGroup: object.GVK(nodeClass).Group,\n\t\t\t\t\t\t\tKind:  object.GVK(nodeClass).Kind,\n\t\t\t\t\t\t\tName:  nodeClass.Name,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t}}})\n\n\t\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\t\t\t\tlaunchTemplateInput := awsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.Pop()\n\t\t\t\tExpect(launchTemplateInput.LaunchTemplateData.Placement.Tenancy).To(Equal(ec2types.TenancyDefault))\n\t\t\t})\n\t\t\tDescribeTable(\n\t\t\t\t\"should validate with tenancy specified in nodepool\",\n\t\t\t\tfunc(specified []ec2types.Tenancy, expectedTenancy ec2types.Tenancy) {\n\t\t\t\t\tvalues := []string{}\n\t\t\t\t\tfor _, v := range specified {\n\t\t\t\t\t\tvalues = append(values, string(v))\n\t\t\t\t\t}\n\t\t\t\t\tnodePool := coretest.NodePool(karpv1.NodePool{Spec: karpv1.NodePoolSpec{Template: karpv1.NodeClaimTemplate{\n\t\t\t\t\t\tSpec: karpv1.NodeClaimTemplateSpec{\n\t\t\t\t\t\t\tRequirements: []karpv1.NodeSelectorRequirementWithMinValues{\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tKey:      v1.LabelInstanceTenancy,\n\t\t\t\t\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\t\t\t\t\tValues:   values,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tNodeClassRef: &karpv1.NodeClassReference{\n\t\t\t\t\t\t\t\tGroup: object.GVK(nodeClass).Group,\n\t\t\t\t\t\t\t\tKind:  object.GVK(nodeClass).Kind,\n\t\t\t\t\t\t\t\tName:  nodeClass.Name,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t}}})\n\n\t\t\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\t\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\t\t\t\t\tlaunchTemplateInput := awsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.Pop()\n\t\t\t\t\tExpect(launchTemplateInput.LaunchTemplateData.Placement.Tenancy).To(Equal(expectedTenancy))\n\t\t\t\t},\n\t\t\t\tEntry(\"when default specified\",\n\t\t\t\t\t[]ec2types.Tenancy{ec2types.TenancyDefault},\n\t\t\t\t\tec2types.TenancyDefault),\n\t\t\t\tEntry(\"when default and dedicated specified\",\n\t\t\t\t\t[]ec2types.Tenancy{ec2types.TenancyDefault, ec2types.TenancyDedicated},\n\t\t\t\t\tec2types.TenancyDedicated),\n\t\t\t\tEntry(\"when dedicated specified\",\n\t\t\t\t\t[]ec2types.Tenancy{ec2types.TenancyDedicated},\n\t\t\t\t\tec2types.TenancyDedicated))\n\t\t})\n\t})\n\tIt(\"should not skip validation when new annotation is added\", func() {\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\t\tExpect(awsEnv.ValidationCache.Items()).To(HaveLen(1))\n\t\tnodeClass.SetAnnotations(map[string]string{\"testing\": \"validation\"})\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\n\t\tawsEnv.EC2API.Reset()\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\n\t\tExpect(awsEnv.EC2API.CreateFleetBehavior.Calls()).To(Equal(1))\n\t\tExpect(awsEnv.EC2API.RunInstancesBehavior.Calls()).To(Equal(1))\n\t})\n\tIt(\"should clear the validation cache when the nodeclass is deleted\", func() {\n\t\tcontrollerutil.AddFinalizer(nodeClass, v1.TerminationFinalizer)\n\t\tnodeClass.Spec.Tags = map[string]string{}\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\t\tExpect(nodeClass.StatusConditions().Get(v1.ConditionTypeValidationSucceeded).IsTrue()).To(BeTrue())\n\t\tExpect(nodeClass.StatusConditions().Get(status.ConditionReady).IsTrue()).To(BeTrue())\n\t\tExpect(awsEnv.ValidationCache.Items()).To(HaveLen(1))\n\n\t\tExpect(env.Client.Delete(ctx, nodeClass)).To(Succeed())\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\t\tExpectNotFound(ctx, env.Client, nodeClass)\n\t\tExpect(awsEnv.ValidationCache.Items()).To(HaveLen(0))\n\t})\n\tIt(\"should pass validation when the validation controller is disabled\", func() {\n\t\tcontroller = nodeclass.NewController(\n\t\t\tawsEnv.Clock,\n\t\t\tenv.Client,\n\t\t\tcloudProvider,\n\t\t\tevents.NewRecorder(&record.FakeRecorder{}),\n\t\t\tfake.DefaultRegion,\n\t\t\tawsEnv.SubnetProvider,\n\t\t\tawsEnv.SecurityGroupProvider,\n\t\t\tawsEnv.AMIProvider,\n\t\t\tawsEnv.InstanceProfileProvider,\n\t\t\tawsEnv.InstanceTypesProvider,\n\t\t\tawsEnv.LaunchTemplateProvider,\n\t\t\tawsEnv.CapacityReservationProvider,\n\t\t\tawsEnv.EC2API,\n\t\t\tawsEnv.ValidationCache,\n\t\t\tawsEnv.RecreationCache,\n\t\t\tawsEnv.AMIResolver,\n\t\t\ttrue,\n\t\t)\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\t\tExpect(nodeClass.StatusConditions().Get(v1.ConditionTypeValidationSucceeded).IsTrue()).To(BeTrue())\n\t\tExpect(nodeClass.StatusConditions().Get(status.ConditionReady).IsTrue()).To(BeTrue())\n\t\t// The cache still has an entry so we don't revalidate tags\n\t\tExpect(awsEnv.ValidationCache.Items()).To(HaveLen(1))\n\t\t// We shouldn't make any new calls when validation is disabled\n\t\tExpect(awsEnv.EC2API.CreateFleetBehavior.Calls()).To(Equal(0))\n\t\tExpect(awsEnv.EC2API.CreateLaunchTemplateBehavior.Calls()).To(Equal(0))\n\t\tExpect(awsEnv.EC2API.RunInstancesBehavior.Calls()).To(Equal(0))\n\t})\n})\n"
  },
  {
    "path": "pkg/controllers/providers/instancetype/capacity/controller.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage capacity\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\n\t\"github.com/awslabs/operatorpkg/option\"\n\t\"github.com/awslabs/operatorpkg/reasonable\"\n\tcorev1 \"k8s.io/api/core/v1\"\n\tcontrollerruntime \"sigs.k8s.io/controller-runtime\"\n\t\"sigs.k8s.io/controller-runtime/pkg/builder\"\n\t\"sigs.k8s.io/controller-runtime/pkg/client\"\n\t\"sigs.k8s.io/controller-runtime/pkg/controller\"\n\t\"sigs.k8s.io/controller-runtime/pkg/event\"\n\t\"sigs.k8s.io/controller-runtime/pkg/manager\"\n\t\"sigs.k8s.io/controller-runtime/pkg/predicate\"\n\t\"sigs.k8s.io/controller-runtime/pkg/reconcile\"\n\tkarpv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n\t\"sigs.k8s.io/karpenter/pkg/cloudprovider\"\n\t\"sigs.k8s.io/karpenter/pkg/operator/injection\"\n\tnodeutils \"sigs.k8s.io/karpenter/pkg/utils/node\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/instancetype\"\n)\n\ntype ControllerOpts struct {\n\tEC2NodeClassProvider\n}\n\ntype Controller struct {\n\tControllerOpts\n\tkubeClient           client.Client\n\tcloudProvider        cloudprovider.CloudProvider\n\tinstancetypeProvider *instancetype.DefaultProvider\n}\n\nfunc NewController(\n\tkubeClient client.Client,\n\tcloudProvider cloudprovider.CloudProvider,\n\tinstancetypeProvider *instancetype.DefaultProvider,\n\topts ...option.Function[ControllerOpts],\n) *Controller {\n\tresolvedOpts := option.Resolve(opts...)\n\tif resolvedOpts.EC2NodeClassProvider == nil {\n\t\tresolvedOpts.EC2NodeClassProvider = &defaultNodeClassProvider{kubeClient: kubeClient}\n\t}\n\treturn &Controller{\n\t\tControllerOpts:       *resolvedOpts,\n\t\tkubeClient:           kubeClient,\n\t\tcloudProvider:        cloudProvider,\n\t\tinstancetypeProvider: instancetypeProvider,\n\t}\n}\n\nfunc (c *Controller) Reconcile(ctx context.Context, node *corev1.Node) (reconcile.Result, error) {\n\tctx = injection.WithControllerName(ctx, \"providers.instancetype.capacity\")\n\tif !nodeutils.IsManaged(node, c.cloudProvider) {\n\t\treturn reconcile.Result{}, nil\n\t}\n\tnodeClaim, err := nodeutils.NodeClaimForNode(ctx, c.kubeClient, node)\n\tif err != nil {\n\t\treturn reconcile.Result{}, nodeutils.IgnoreNodeClaimNotFoundError(fmt.Errorf(\"failed to get nodeclaim for node, %w\", err))\n\t}\n\n\tnodeClass, err := c.GetEC2NodeClass(ctx, nodeClaim)\n\tif err != nil {\n\t\treturn reconcile.Result{}, fmt.Errorf(\"failed to get ec2nodeclass, %w\", err)\n\t}\n\tif err := c.instancetypeProvider.UpdateInstanceTypeCapacityFromNode(ctx, node, nodeClaim, nodeClass); err != nil {\n\t\treturn reconcile.Result{}, fmt.Errorf(\"updating discovered capacity cache, %w\", err)\n\t}\n\treturn reconcile.Result{}, nil\n}\n\nfunc (c *Controller) Register(_ context.Context, m manager.Manager) error {\n\treturn controllerruntime.NewControllerManagedBy(m).\n\t\tNamed(\"providers.instancetype.capacity\").\n\t\tFor(&corev1.Node{}, builder.WithPredicates(predicate.TypedFuncs[client.Object]{\n\t\t\t// Only trigger reconciliation once a node becomes registered. This is an optimization to omit no-op reconciliations and reduce lock contention on the cache.\n\t\t\tUpdateFunc: func(e event.TypedUpdateEvent[client.Object]) bool {\n\t\t\t\tif e.ObjectOld.GetLabels()[karpv1.NodeRegisteredLabelKey] != \"\" {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\treturn e.ObjectNew.GetLabels()[karpv1.NodeRegisteredLabelKey] == \"true\"\n\t\t\t},\n\t\t\t// Reconcile against all Nodes added to the informer cache in a registered state. This allows us to hydrate the discovered capacity cache on controller startup.\n\t\t\tCreateFunc: func(e event.TypedCreateEvent[client.Object]) bool {\n\t\t\t\treturn e.Object.GetLabels()[karpv1.NodeRegisteredLabelKey] == \"true\"\n\t\t\t},\n\t\t\tDeleteFunc:  func(e event.TypedDeleteEvent[client.Object]) bool { return false },\n\t\t\tGenericFunc: func(e event.TypedGenericEvent[client.Object]) bool { return false },\n\t\t}, nodeutils.IsManagedPredicateFuncs(c.cloudProvider))).\n\t\tWithOptions(controller.Options{\n\t\t\tRateLimiter:             reasonable.RateLimiter(),\n\t\t\tMaxConcurrentReconciles: 1,\n\t\t}).\n\t\tComplete(reconcile.AsReconciler(m.GetClient(), c))\n}\n\ntype EC2NodeClassProvider interface {\n\tGetEC2NodeClass(context.Context, *karpv1.NodeClaim) (*v1.EC2NodeClass, error)\n}\n\ntype defaultNodeClassProvider struct {\n\tkubeClient client.Client\n}\n\nfunc (p *defaultNodeClassProvider) GetEC2NodeClass(ctx context.Context, nodeClaim *karpv1.NodeClaim) (*v1.EC2NodeClass, error) {\n\tnodeClass := &v1.EC2NodeClass{}\n\terr := p.kubeClient.Get(ctx, client.ObjectKey{Name: nodeClaim.Spec.NodeClassRef.Name}, nodeClass)\n\treturn nodeClass, err\n}\n\nfunc WithEC2NodeClassProvider(provider EC2NodeClassProvider) option.Function[ControllerOpts] {\n\treturn func(c *ControllerOpts) {\n\t\tc.EC2NodeClassProvider = provider\n\t}\n}\n"
  },
  {
    "path": "pkg/controllers/providers/instancetype/capacity/suite_test.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage capacity_test\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"math\"\n\t\"testing\"\n\n\t\"github.com/aws/aws-sdk-go-v2/service/ec2\"\n\t\"github.com/awslabs/operatorpkg/object\"\n\t\"github.com/samber/lo\"\n\t\"k8s.io/apimachinery/pkg/api/resource\"\n\tmetav1 \"k8s.io/apimachinery/pkg/apis/meta/v1\"\n\t\"k8s.io/client-go/tools/record\"\n\tkarpv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n\tkarpcloudprovider \"sigs.k8s.io/karpenter/pkg/cloudprovider\"\n\t\"sigs.k8s.io/karpenter/pkg/events\"\n\t\"sigs.k8s.io/karpenter/pkg/utils/resources\"\n\n\t\"github.com/aws/karpenter-provider-aws/pkg/cloudprovider\"\n\tcontrollersinstancetypecapacity \"github.com/aws/karpenter-provider-aws/pkg/controllers/providers/instancetype/capacity\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/fake\"\n\n\t\"sigs.k8s.io/karpenter/pkg/test/v1alpha1\"\n\n\tcorev1 \"k8s.io/api/core/v1\"\n\tcoreoptions \"sigs.k8s.io/karpenter/pkg/operator/options\"\n\tcoretest \"sigs.k8s.io/karpenter/pkg/test\"\n\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n\t. \"sigs.k8s.io/karpenter/pkg/test/expectations\"\n\t. \"sigs.k8s.io/karpenter/pkg/utils/testing\"\n\n\t\"github.com/aws/karpenter-provider-aws/pkg/apis\"\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/operator/options\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/test\"\n)\n\nvar ctx context.Context\nvar stop context.CancelFunc\nvar env *coretest.Environment\nvar awsEnv *test.Environment\nvar controller *controllersinstancetypecapacity.Controller\n\nvar nodeClass *v1.EC2NodeClass\nvar nodeClaim *karpv1.NodeClaim\nvar node *corev1.Node\n\nvar standardAMI v1.AMI\nvar nvidiaAMI v1.AMI\n\nfunc TestAWS(t *testing.T) {\n\tctx = TestContextWithLogger(t)\n\tRegisterFailHandler(Fail)\n\tRunSpecs(t, \"CapacityCache\")\n}\n\nvar _ = BeforeSuite(func() {\n\tenv = coretest.NewEnvironment(coretest.WithCRDs(apis.CRDs...), coretest.WithCRDs(v1alpha1.CRDs...), coretest.WithFieldIndexers(coretest.NodeClaimProviderIDFieldIndexer(ctx)))\n\tctx = coreoptions.ToContext(ctx, coretest.Options(coretest.OptionsFields{FeatureGates: coretest.FeatureGates{ReservedCapacity: lo.ToPtr(true)}}))\n\tctx = options.ToContext(ctx, test.Options(test.OptionsFields{\n\t\tVMMemoryOverheadPercent: lo.ToPtr[float64](0.075),\n\t}))\n\tctx, stop = context.WithCancel(ctx)\n\tawsEnv = test.NewEnvironment(ctx, env)\n\tnodeClass = test.EC2NodeClass()\n\tnodeClaim = coretest.NodeClaim()\n\tnode = coretest.Node()\n\tcloudProvider := cloudprovider.New(awsEnv.InstanceTypesProvider, awsEnv.InstanceProvider, events.NewRecorder(&record.FakeRecorder{}),\n\t\tenv.Client, awsEnv.AMIProvider, awsEnv.SecurityGroupProvider, awsEnv.CapacityReservationProvider, awsEnv.InstanceTypeStore)\n\tcontroller = controllersinstancetypecapacity.NewController(env.Client, cloudProvider, awsEnv.InstanceTypesProvider)\n})\n\nvar _ = AfterSuite(func() {\n\tstop()\n\tExpect(env.Stop()).To(Succeed(), \"Failed to stop environment\")\n})\n\nvar _ = BeforeEach(func() {\n\tawsEnv.Reset()\n\tec2InstanceTypeInfo := fake.MakeInstances()\n\tec2Offerings := fake.MakeInstanceOfferings(ec2InstanceTypeInfo)\n\tawsEnv.EC2API.DescribeInstanceTypesOutput.Set(&ec2.DescribeInstanceTypesOutput{\n\t\tInstanceTypes: ec2InstanceTypeInfo,\n\t})\n\tawsEnv.EC2API.DescribeInstanceTypeOfferingsOutput.Set(&ec2.DescribeInstanceTypeOfferingsOutput{\n\t\tInstanceTypeOfferings: ec2Offerings,\n\t})\n\tExpect(awsEnv.InstanceTypesProvider.UpdateInstanceTypes(ctx)).To(Succeed())\n\tExpect(awsEnv.InstanceTypesProvider.UpdateInstanceTypeOfferings(ctx)).To(Succeed())\n\tstandardAMI = v1.AMI{\n\t\tName: \"standard-ami\",\n\t\tID:   \"ami-standard-test\",\n\t\tRequirements: []corev1.NodeSelectorRequirement{\n\t\t\t{\n\t\t\t\tKey:      corev1.LabelArchStable,\n\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\tValues:   []string{karpv1.ArchitectureAmd64},\n\t\t\t},\n\t\t\t{\n\t\t\t\tKey:      v1.LabelInstanceGPUCount,\n\t\t\t\tOperator: corev1.NodeSelectorOpDoesNotExist,\n\t\t\t},\n\t\t},\n\t}\n\tnvidiaAMI = v1.AMI{\n\t\tName: \"nvidia-ami\",\n\t\tID:   \"ami-nvidia-test\",\n\t\tRequirements: []corev1.NodeSelectorRequirement{\n\t\t\t{\n\t\t\t\tKey:      corev1.LabelArchStable,\n\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\tValues:   []string{karpv1.ArchitectureAmd64},\n\t\t\t},\n\t\t\t{\n\t\t\t\tKey:      v1.LabelInstanceGPUCount,\n\t\t\t\tOperator: corev1.NodeSelectorOpExists,\n\t\t\t},\n\t\t},\n\t}\n\tnodeClass.Status.AMIs = []v1.AMI{standardAMI, nvidiaAMI}\n})\n\nvar _ = AfterEach(func() {\n\tExpectCleanedUp(ctx, env.Client)\n})\n\nvar _ = Describe(\"CapacityCache\", func() {\n\tBeforeEach(func() {\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\n\t\tnode = coretest.Node(coretest.NodeOptions{\n\t\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\t\tName: \"test-node\",\n\t\t\t\tLabels: map[string]string{\n\t\t\t\t\tcorev1.LabelInstanceTypeStable:   \"t3.medium\",\n\t\t\t\t\tkarpv1.NodeRegisteredLabelKey:    \"true\",\n\t\t\t\t\t\"karpenter.k8s.aws/ec2nodeclass\": nodeClass.Name,\n\t\t\t\t\tcorev1.LabelArchStable:           karpv1.ArchitectureAmd64,\n\t\t\t\t},\n\t\t\t},\n\t\t\tCapacity: corev1.ResourceList{\n\t\t\t\tcorev1.ResourceMemory: resource.MustParse(fmt.Sprintf(\"%dMi\", 3840)),\n\t\t\t},\n\t\t\tProviderID: fake.ProviderID(fake.InstanceID()),\n\t\t})\n\t\tExpectApplied(ctx, env.Client, node)\n\n\t\tnodeClaim = &karpv1.NodeClaim{\n\t\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\t\tName: \"test-nodeclaim\",\n\t\t\t},\n\t\t\tSpec: karpv1.NodeClaimSpec{\n\t\t\t\tNodeClassRef: &karpv1.NodeClassReference{\n\t\t\t\t\tGroup: object.GVK(nodeClass).Group,\n\t\t\t\t\tKind:  object.GVK(nodeClass).Kind,\n\t\t\t\t\tName:  nodeClass.Name,\n\t\t\t\t},\n\t\t\t\tRequirements: make([]karpv1.NodeSelectorRequirementWithMinValues, 0),\n\t\t\t},\n\t\t\tStatus: karpv1.NodeClaimStatus{\n\t\t\t\tNodeName:   node.Name,\n\t\t\t\tImageID:    nodeClass.Status.AMIs[0].ID,\n\t\t\t\tProviderID: node.Spec.ProviderID,\n\t\t\t},\n\t\t}\n\t\tExpectApplied(ctx, env.Client, nodeClaim)\n\t})\n\tIt(\"should update discovered capacity based on existing nodes\", func() {\n\t\tExpectObjectReconciled(ctx, env.Client, controller, node)\n\t\tinstanceTypes, err := awsEnv.InstanceTypesProvider.List(ctx, nodeClass)\n\t\tExpect(err).To(BeNil())\n\t\ti, ok := lo.Find(instanceTypes, func(i *karpcloudprovider.InstanceType) bool {\n\t\t\treturn i.Name == \"t3.medium\"\n\t\t})\n\t\tExpect(ok).To(BeTrue())\n\t\tExpect(i.Capacity.Memory().Value()).To(Equal(node.Status.Capacity.Memory().Value()), \"Expected capacity to match discovered node capacity\")\n\t})\n\tIt(\"should use VM_MEMORY_OVERHEAD_PERCENT calculation after AMI update\", func() {\n\t\tExpectObjectReconciled(ctx, env.Client, controller, node)\n\n\t\t// Update NodeClass AMI and list instance-types. Cached values from prior AMI should no longer be used.\n\t\tnodeClass.Status.AMIs[0].ID = \"ami-new-test-id\"\n\t\tExpectApplied(ctx, env.Client, nodeClaim)\n\t\tExpectObjectReconciled(ctx, env.Client, controller, node)\n\t\tinstanceTypesNoCache, err := awsEnv.InstanceTypesProvider.List(ctx, nodeClass)\n\t\tExpect(err).To(BeNil())\n\t\ti, ok := lo.Find(instanceTypesNoCache, func(i *karpcloudprovider.InstanceType) bool {\n\t\t\treturn i.Name == \"t3.medium\"\n\t\t})\n\t\tExpect(ok).To(BeTrue())\n\n\t\t// Calculate memory capacity based on VM_MEMORY_OVERHEAD_PERCENT and output from DescribeInstanceType\n\t\tmem := resources.Quantity(fmt.Sprintf(\"%dMi\", 8192)) // Reported memory from fake.MakeInstances()\n\t\tmem.Sub(resource.MustParse(fmt.Sprintf(\"%dMi\", int64(math.Ceil(float64(mem.Value())*options.FromContext(ctx).VMMemoryOverheadPercent/1024/1024)))))\n\t\tExpect(i.Capacity.Memory().Value()).To(Equal(mem.Value()), \"Expected capacity to match VMMemoryOverheadPercent calculation\")\n\t})\n\n\tIt(\"should properly update discovered capacity when matching AMI is not the first in the list\", func() {\n\t\t// Update nodeClass AMIs for this test\n\t\tnodeClass.Status.AMIs = []v1.AMI{standardAMI}\n\t\tExpectApplied(ctx, env.Client, nodeClass)\n\n\t\t// Get available instance types from the test environment\n\t\tavailableInstanceTypes, err := awsEnv.InstanceTypesProvider.List(ctx, nodeClass)\n\t\tExpect(err).To(BeNil())\n\t\tExpect(availableInstanceTypes).ToNot(BeEmpty(), \"No instance types available in test environment\")\n\n\t\t// Choose the first instance type for testing\n\t\ttestInstanceType := availableInstanceTypes[0]\n\t\tinstanceTypeName := testInstanceType.Name\n\n\t\t// Create a test node with the discovered instance type\n\t\tmemoryCapacity := resource.MustParse(\"4Gi\")\n\n\t\ttestNodeClassNvidiaFirst := test.EC2NodeClass()\n\t\ttestNodeClassNvidiaFirst.Status.AMIs = []v1.AMI{nvidiaAMI, standardAMI}\n\t\tExpectApplied(ctx, env.Client, testNodeClassNvidiaFirst)\n\n\t\ttestNodeClaim := coretest.NodeClaim()\n\t\ttestNodeClaim.Spec.NodeClassRef = &karpv1.NodeClassReference{\n\t\t\tGroup: object.GVK(testNodeClassNvidiaFirst).Group,\n\t\t\tKind:  object.GVK(testNodeClassNvidiaFirst).Kind,\n\t\t\tName:  testNodeClassNvidiaFirst.Name,\n\t\t}\n\t\ttestNodeClaim.Status.Capacity = corev1.ResourceList{\n\t\t\tcorev1.ResourceMemory: memoryCapacity,\n\t\t}\n\t\ttestNodeClaim.Labels[corev1.LabelInstanceTypeStable] = instanceTypeName\n\t\ttestNodeClaim.Labels[corev1.LabelArchStable] = karpv1.ArchitectureAmd64\n\t\ttestNodeClaim.Status.ImageID = \"ami-standard-test\"\n\t\tExpectApplied(ctx, env.Client, testNodeClaim)\n\n\t\ttestNode := coretest.NodeClaimLinkedNode(testNodeClaim)\n\t\tExpectApplied(ctx, env.Client, testNode)\n\n\t\tExpectObjectReconciled(ctx, env.Client, controller, testNode)\n\n\t\t// Verify that the cache was updated by getting the instance types and checking the memory capacity\n\t\tinstanceTypesAfterUpdateReversed, err := awsEnv.InstanceTypesProvider.List(ctx, testNodeClassNvidiaFirst)\n\t\tExpect(err).To(BeNil())\n\n\t\t// Find our instance type and verify its memory capacity was updated\n\t\tfound := false\n\t\tfor _, it := range instanceTypesAfterUpdateReversed {\n\t\t\tif it.Name == instanceTypeName {\n\t\t\t\tfound = true\n\t\t\t\t// Memory capacity should now match what we set on the node\n\t\t\t\tmemValue := it.Capacity.Memory().Value()\n\t\t\t\tExpect(memValue).To(Equal(memoryCapacity.Value()))\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tExpect(found).To(BeTrue())\n\t})\n})\n"
  },
  {
    "path": "pkg/controllers/providers/instancetype/controller.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage instancetype\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"time\"\n\n\t\"github.com/awslabs/operatorpkg/reconciler\"\n\t\"github.com/awslabs/operatorpkg/singleton\"\n\tlop \"github.com/samber/lo/parallel\"\n\t\"go.uber.org/multierr\"\n\tcontrollerruntime \"sigs.k8s.io/controller-runtime\"\n\t\"sigs.k8s.io/controller-runtime/pkg/manager\"\n\t\"sigs.k8s.io/karpenter/pkg/operator/injection\"\n\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/instancetype\"\n)\n\ntype Controller struct {\n\tinstanceTypeProvider *instancetype.DefaultProvider\n}\n\nfunc NewController(instanceTypeProvider *instancetype.DefaultProvider) *Controller {\n\treturn &Controller{\n\t\tinstanceTypeProvider: instanceTypeProvider,\n\t}\n}\n\nfunc (c *Controller) Reconcile(ctx context.Context) (reconciler.Result, error) {\n\tctx = injection.WithControllerName(ctx, \"providers.instancetype\")\n\n\twork := []func(ctx context.Context) error{\n\t\tc.instanceTypeProvider.UpdateInstanceTypes,\n\t\tc.instanceTypeProvider.UpdateInstanceTypeOfferings,\n\t}\n\terrs := make([]error, len(work))\n\tlop.ForEach(work, func(f func(ctx context.Context) error, i int) {\n\t\tif err := f(ctx); err != nil {\n\t\t\terrs[i] = err\n\t\t}\n\t})\n\tif err := multierr.Combine(errs...); err != nil {\n\t\treturn reconciler.Result{}, fmt.Errorf(\"updating instancetype, %w\", err)\n\t}\n\treturn reconciler.Result{RequeueAfter: 12 * time.Hour}, nil\n}\n\nfunc (c *Controller) Register(_ context.Context, m manager.Manager) error {\n\t// Includes a default exponential failure rate limiter of base: time.Millisecond, and max: 1000*time.Second\n\treturn controllerruntime.NewControllerManagedBy(m).\n\t\tNamed(\"providers.instancetype\").\n\t\tWatchesRawSource(singleton.Source()).\n\t\tComplete(singleton.AsReconciler(c))\n}\n"
  },
  {
    "path": "pkg/controllers/providers/instancetype/suite_test.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage instancetype_test\n\nimport (\n\t\"context\"\n\t\"testing\"\n\n\t\"sigs.k8s.io/karpenter/pkg/test/v1alpha1\"\n\n\tcorev1 \"k8s.io/api/core/v1\"\n\tcoreoptions \"sigs.k8s.io/karpenter/pkg/operator/options\"\n\tcoretest \"sigs.k8s.io/karpenter/pkg/test\"\n\n\t\"github.com/aws/aws-sdk-go-v2/service/ec2\"\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\t\"github.com/samber/lo\"\n\n\t\"github.com/aws/karpenter-provider-aws/pkg/apis\"\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\tcontrollersinstancetype \"github.com/aws/karpenter-provider-aws/pkg/controllers/providers/instancetype\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/fake\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/operator/options\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/test\"\n\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n\t. \"sigs.k8s.io/karpenter/pkg/test/expectations\"\n\t. \"sigs.k8s.io/karpenter/pkg/utils/testing\"\n)\n\nvar ctx context.Context\nvar stop context.CancelFunc\nvar env *coretest.Environment\nvar awsEnv *test.Environment\nvar controller *controllersinstancetype.Controller\n\nfunc TestAWS(t *testing.T) {\n\tctx = TestContextWithLogger(t)\n\tRegisterFailHandler(Fail)\n\tRunSpecs(t, \"InstanceType\")\n}\n\nvar _ = BeforeSuite(func() {\n\tenv = coretest.NewEnvironment(coretest.WithCRDs(apis.CRDs...), coretest.WithCRDs(v1alpha1.CRDs...))\n\tctx = coreoptions.ToContext(ctx, coretest.Options(coretest.OptionsFields{FeatureGates: coretest.FeatureGates{ReservedCapacity: lo.ToPtr(true)}}))\n\tctx = options.ToContext(ctx, test.Options())\n\tctx, stop = context.WithCancel(ctx)\n\tawsEnv = test.NewEnvironment(ctx, env)\n\tcontroller = controllersinstancetype.NewController(awsEnv.InstanceTypesProvider)\n})\n\nvar _ = AfterSuite(func() {\n\tstop()\n\tExpect(env.Stop()).To(Succeed(), \"Failed to stop environment\")\n})\n\nvar _ = BeforeEach(func() {\n\tctx = coreoptions.ToContext(ctx, coretest.Options(coretest.OptionsFields{FeatureGates: coretest.FeatureGates{ReservedCapacity: lo.ToPtr(true)}}))\n\tctx = options.ToContext(ctx, test.Options())\n\n\tawsEnv.Reset()\n})\n\nvar _ = AfterEach(func() {\n\tExpectCleanedUp(ctx, env.Client)\n})\n\nvar _ = Describe(\"InstanceType\", func() {\n\tIt(\"should update instance type date with response from the DescribeInstanceTypes API\", func() {\n\t\tec2InstanceTypes := fake.MakeInstances()\n\t\tec2Offerings := fake.MakeInstanceOfferings(ec2InstanceTypes)\n\t\tawsEnv.EC2API.DescribeInstanceTypesOutput.Set(&ec2.DescribeInstanceTypesOutput{\n\t\t\tInstanceTypes: ec2InstanceTypes,\n\t\t})\n\t\tawsEnv.EC2API.DescribeInstanceTypeOfferingsOutput.Set(&ec2.DescribeInstanceTypeOfferingsOutput{\n\t\t\tInstanceTypeOfferings: ec2Offerings,\n\t\t})\n\n\t\tExpectSingletonReconciled(ctx, controller)\n\t\tinstanceTypes, err := awsEnv.InstanceTypesProvider.List(ctx, &v1.EC2NodeClass{\n\t\t\tStatus: v1.EC2NodeClassStatus{\n\t\t\t\tSubnets: []v1.Subnet{\n\t\t\t\t\t{\n\t\t\t\t\t\tID:   \"subnet-test1\",\n\t\t\t\t\t\tZone: \"test-zone-1a\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tID:   \"subnet-test2\",\n\t\t\t\t\t\tZone: \"test-zone-1b\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tID:   \"subnet-test3\",\n\t\t\t\t\t\tZone: \"test-zone-1c\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tExpect(err).To(BeNil())\n\n\t\tExpect(instanceTypes).To(HaveLen(len(ec2InstanceTypes)))\n\t\tfor _, it := range instanceTypes {\n\t\t\tExpect(lo.ContainsBy(ec2InstanceTypes, func(i ec2types.InstanceTypeInfo) bool { return string(i.InstanceType) == it.Name })).To(BeTrue())\n\t\t}\n\t})\n\tIt(\"should update instance type offering date with response from the DescribeInstanceTypesOfferings API\", func() {\n\t\tec2InstanceTypes := fake.MakeInstances()\n\t\tec2Offerings := fake.MakeInstanceOfferings(ec2InstanceTypes)\n\t\tawsEnv.EC2API.DescribeInstanceTypesOutput.Set(&ec2.DescribeInstanceTypesOutput{\n\t\t\tInstanceTypes: ec2InstanceTypes,\n\t\t})\n\t\tawsEnv.EC2API.DescribeInstanceTypeOfferingsOutput.Set(&ec2.DescribeInstanceTypeOfferingsOutput{\n\t\t\tInstanceTypeOfferings: ec2Offerings,\n\t\t})\n\n\t\tExpectSingletonReconciled(ctx, controller)\n\t\tinstanceTypes, err := awsEnv.InstanceTypesProvider.List(ctx, &v1.EC2NodeClass{\n\t\t\tStatus: v1.EC2NodeClassStatus{\n\t\t\t\tSubnets: []v1.Subnet{\n\t\t\t\t\t{\n\t\t\t\t\t\tID:   \"subnet-test1\",\n\t\t\t\t\t\tZone: \"test-zone-1a\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tID:   \"subnet-test2\",\n\t\t\t\t\t\tZone: \"test-zone-1b\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tID:   \"subnet-test3\",\n\t\t\t\t\t\tZone: \"test-zone-1c\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tExpect(err).To(BeNil())\n\n\t\tExpect(len(instanceTypes)).To(BeNumerically(\"==\", len(ec2InstanceTypes)))\n\t\tfor x := range instanceTypes {\n\t\t\toffering, found := lo.Find(ec2Offerings, func(off ec2types.InstanceTypeOffering) bool {\n\t\t\t\treturn instanceTypes[x].Name == string(off.InstanceType)\n\t\t\t})\n\t\t\tExpect(found).To(BeTrue())\n\t\t\tfor y := range instanceTypes[x].Offerings {\n\t\t\t\tExpect(instanceTypes[x].Offerings[y].Requirements.Get(corev1.LabelTopologyZone).Any()).To(Equal(lo.FromPtr(offering.Location)))\n\t\t\t}\n\t\t}\n\t})\n\tIt(\"should not update instance type date with response from the DescribeInstanceTypes API is empty\", func() {\n\t\tawsEnv.EC2API.DescribeInstanceTypesOutput.Set(&ec2.DescribeInstanceTypesOutput{})\n\t\tawsEnv.EC2API.DescribeInstanceTypeOfferingsOutput.Set(&ec2.DescribeInstanceTypeOfferingsOutput{})\n\t\tExpectSingletonReconciled(ctx, controller)\n\t\t_, err := awsEnv.InstanceTypesProvider.List(ctx, &v1.EC2NodeClass{})\n\t\tExpect(err).ToNot(BeNil())\n\t})\n\tIt(\"should not update instance type offering date with response from the DescribeInstanceTypesOfferings API\", func() {\n\t\tawsEnv.EC2API.DescribeInstanceTypesOutput.Set(&ec2.DescribeInstanceTypesOutput{})\n\t\tawsEnv.EC2API.DescribeInstanceTypeOfferingsOutput.Set(&ec2.DescribeInstanceTypeOfferingsOutput{})\n\t\tExpectSingletonReconciled(ctx, controller)\n\t\t_, err := awsEnv.InstanceTypesProvider.List(ctx, &v1.EC2NodeClass{})\n\t\tExpect(err).ToNot(BeNil())\n\t})\n})\n"
  },
  {
    "path": "pkg/controllers/providers/pricing/controller.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage pricing\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"time\"\n\n\t\"github.com/awslabs/operatorpkg/reconciler\"\n\t\"github.com/awslabs/operatorpkg/singleton\"\n\tlop \"github.com/samber/lo/parallel\"\n\t\"go.uber.org/multierr\"\n\tcontrollerruntime \"sigs.k8s.io/controller-runtime\"\n\t\"sigs.k8s.io/controller-runtime/pkg/manager\"\n\t\"sigs.k8s.io/karpenter/pkg/operator/injection\"\n\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/pricing\"\n)\n\ntype Controller struct {\n\tpricingProvider pricing.Provider\n}\n\nfunc NewController(pricingProvider pricing.Provider) *Controller {\n\treturn &Controller{\n\t\tpricingProvider: pricingProvider,\n\t}\n}\n\nfunc (c *Controller) Reconcile(ctx context.Context) (reconciler.Result, error) {\n\tctx = injection.WithControllerName(ctx, \"providers.pricing\")\n\n\twork := []func(ctx context.Context) error{\n\t\tc.pricingProvider.UpdateSpotPricing,\n\t\tc.pricingProvider.UpdateOnDemandPricing,\n\t}\n\terrs := make([]error, len(work))\n\tlop.ForEach(work, func(f func(ctx context.Context) error, i int) {\n\t\tif err := f(ctx); err != nil {\n\t\t\terrs[i] = err\n\t\t}\n\t})\n\tif err := multierr.Combine(errs...); err != nil {\n\t\treturn reconciler.Result{}, fmt.Errorf(\"updating pricing, %w\", err)\n\t}\n\treturn reconciler.Result{RequeueAfter: 12 * time.Hour}, nil\n}\n\nfunc (c *Controller) Register(_ context.Context, m manager.Manager) error {\n\treturn controllerruntime.NewControllerManagedBy(m).\n\t\tNamed(\"providers.pricing\").\n\t\tWatchesRawSource(singleton.Source()).\n\t\tComplete(singleton.AsReconciler(c))\n}\n"
  },
  {
    "path": "pkg/controllers/providers/pricing/suite_test.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage pricing_test\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"testing\"\n\t\"time\"\n\n\t\"sigs.k8s.io/karpenter/pkg/test/v1alpha1\"\n\n\t\"github.com/aws/aws-sdk-go-v2/aws\"\n\t\"github.com/aws/aws-sdk-go-v2/service/ec2\"\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\tawspricing \"github.com/aws/aws-sdk-go-v2/service/pricing\"\n\t\"github.com/samber/lo\"\n\tcoreoptions \"sigs.k8s.io/karpenter/pkg/operator/options\"\n\tcoretest \"sigs.k8s.io/karpenter/pkg/test\"\n\n\t\"github.com/aws/karpenter-provider-aws/pkg/apis\"\n\tcontrollerspricing \"github.com/aws/karpenter-provider-aws/pkg/controllers/providers/pricing\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/fake\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/operator/options\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/pricing\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/test\"\n\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n\t. \"sigs.k8s.io/karpenter/pkg/test/expectations\"\n\t. \"sigs.k8s.io/karpenter/pkg/utils/testing\"\n)\n\nvar ctx context.Context\nvar stop context.CancelFunc\nvar env *coretest.Environment\nvar awsEnv *test.Environment\nvar controller *controllerspricing.Controller\n\nfunc TestAWS(t *testing.T) {\n\tctx = TestContextWithLogger(t)\n\tRegisterFailHandler(Fail)\n\tRunSpecs(t, \"Pricing\")\n}\n\nvar _ = BeforeSuite(func() {\n\tenv = coretest.NewEnvironment(coretest.WithCRDs(apis.CRDs...), coretest.WithCRDs(v1alpha1.CRDs...))\n\tctx = coreoptions.ToContext(ctx, coretest.Options(coretest.OptionsFields{FeatureGates: coretest.FeatureGates{ReservedCapacity: lo.ToPtr(true)}}))\n\tctx = options.ToContext(ctx, test.Options())\n\tctx, stop = context.WithCancel(ctx)\n\tawsEnv = test.NewEnvironment(ctx, env)\n\tcontroller = controllerspricing.NewController(awsEnv.PricingProvider)\n})\n\nvar _ = AfterSuite(func() {\n\tstop()\n\tExpect(env.Stop()).To(Succeed(), \"Failed to stop environment\")\n})\n\nvar _ = BeforeEach(func() {\n\tctx = coreoptions.ToContext(ctx, coretest.Options(coretest.OptionsFields{FeatureGates: coretest.FeatureGates{ReservedCapacity: lo.ToPtr(true)}}))\n\tctx = options.ToContext(ctx, test.Options())\n\n\tawsEnv.Reset()\n})\n\nvar _ = AfterEach(func() {\n\tExpectCleanedUp(ctx, env.Client)\n})\n\nvar _ = Describe(\"Pricing\", func() {\n\tContext(\"On-Demand\", func() {\n\t\tBeforeEach(func() {\n\t\t\t// Preventing errors from UpdateSpotPricing\n\t\t\tnow := time.Now()\n\t\t\tawsEnv.EC2API.DescribeSpotPriceHistoryBehavior.Output.Set(&ec2.DescribeSpotPriceHistoryOutput{\n\t\t\t\tSpotPriceHistory: []ec2types.SpotPrice{\n\t\t\t\t\t{\n\t\t\t\t\t\tAvailabilityZone: aws.String(\"test-zone-1a\"),\n\t\t\t\t\t\tInstanceType:     \"c99.large\",\n\t\t\t\t\t\tSpotPrice:        aws.String(\"1.23\"),\n\t\t\t\t\t\tTimestamp:        &now,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t})\n\t\t})\n\t\tDescribeTable(\n\t\t\t\"should return correct static data for all partitions\",\n\t\t\tfunc(staticPricing map[string]map[ec2types.InstanceType]float64) {\n\t\t\t\tfor region, prices := range staticPricing {\n\t\t\t\t\tprovider := pricing.NewDefaultProvider(awsEnv.PricingAPI, awsEnv.EC2API, region, false)\n\t\t\t\t\tfor instance, price := range prices {\n\t\t\t\t\t\tval, ok := provider.OnDemandPrice(instance)\n\t\t\t\t\t\tExpect(ok).To(BeTrue())\n\t\t\t\t\t\tExpect(val).To(Equal(price))\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tEntry(\"aws\", pricing.InitialOnDemandPricesAWS),\n\t\t\tEntry(\"aws-us-gov\", pricing.InitialOnDemandPricesUSGov),\n\t\t\tEntry(\"aws-cn\", pricing.InitialOnDemandPricesCN),\n\t\t)\n\t\tIt(\"should return static on-demand data if pricing API fails\", func() {\n\t\t\tawsEnv.PricingAPI.GetProductsBehavior.Error.Set(fmt.Errorf(\"failed\"))\n\t\t\t_ = ExpectSingletonReconcileFailed(ctx, controller)\n\t\t\tprice, ok := awsEnv.PricingProvider.OnDemandPrice(\"c5.large\")\n\t\t\tExpect(ok).To(BeTrue())\n\t\t\tExpect(price).To(BeNumerically(\">\", 0))\n\t\t})\n\t\tIt(\"should update on-demand pricing with response from the pricing API\", func() {\n\t\t\t// modify our API before creating the pricing provider as it performs an initial update on creation. The pricing\n\t\t\t// API provides on-demand prices, the ec2 API provides spot prices\n\t\t\tawsEnv.PricingAPI.GetProductsBehavior.Output.Set(&awspricing.GetProductsOutput{\n\t\t\t\tPriceList: []string{\n\t\t\t\t\tfake.NewOnDemandPrice(\"c98.large\", 1.20),\n\t\t\t\t\tfake.NewOnDemandPrice(\"c99.large\", 1.23),\n\t\t\t\t},\n\t\t\t})\n\t\t\tExpectSingletonReconciled(ctx, controller)\n\n\t\t\tprice, ok := awsEnv.PricingProvider.OnDemandPrice(\"c98.large\")\n\t\t\tExpect(ok).To(BeTrue())\n\t\t\tExpect(price).To(BeNumerically(\"==\", 1.20))\n\n\t\t\tprice, ok = awsEnv.PricingProvider.OnDemandPrice(\"c99.large\")\n\t\t\tExpect(ok).To(BeTrue())\n\t\t\tExpect(price).To(BeNumerically(\"==\", 1.23))\n\t\t})\n\t\tIt(\"should query for both `Linux/UNIX` and `Linux/UNIX (Amazon VPC)`\", func() {\n\t\t\t// If an account supports EC2 classic, then the non-classic instance types have a product\n\t\t\t// description of Linux/UNIX (Amazon VPC)\n\t\t\t// If it doesn't, they have a product description of Linux/UNIX. To work in both cases, we\n\t\t\t// need to search for both values.\n\t\t\tupdateStart := time.Now()\n\t\t\tawsEnv.EC2API.DescribeSpotPriceHistoryBehavior.Output.Set(&ec2.DescribeSpotPriceHistoryOutput{\n\t\t\t\tSpotPriceHistory: []ec2types.SpotPrice{\n\t\t\t\t\t{\n\t\t\t\t\t\tAvailabilityZone: aws.String(\"test-zone-1a\"),\n\t\t\t\t\t\tInstanceType:     \"c99.large\",\n\t\t\t\t\t\tSpotPrice:        aws.String(\"1.23\"),\n\t\t\t\t\t\tTimestamp:        &updateStart,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t})\n\t\t\tawsEnv.PricingAPI.GetProductsBehavior.Output.Set(&awspricing.GetProductsOutput{\n\t\t\t\tPriceList: []string{\n\t\t\t\t\tfake.NewOnDemandPrice(\"c98.large\", 1.20),\n\t\t\t\t\tfake.NewOnDemandPrice(\"c99.large\", 1.23),\n\t\t\t\t},\n\t\t\t})\n\t\t\tExpectSingletonReconciled(ctx, controller)\n\t\t\tinp := awsEnv.EC2API.DescribeSpotPriceHistoryBehavior.CalledWithInput.Pop()\n\t\t\tExpect(lo.Map(inp.ProductDescriptions, func(x string, _ int) string { return x })).\n\t\t\t\tTo(ContainElements(\"Linux/UNIX\", \"Linux/UNIX (Amazon VPC)\"))\n\t\t})\n\t\tIt(\"should update on-demand pricing with response from the pricing API when in the CN partition\", func() {\n\t\t\ttmpPricingProvider := pricing.NewDefaultProvider(awsEnv.PricingAPI, awsEnv.EC2API, \"cn-anywhere-1\", false)\n\t\t\ttmpController := controllerspricing.NewController(tmpPricingProvider)\n\n\t\t\tnow := time.Now()\n\t\t\tawsEnv.EC2API.DescribeSpotPriceHistoryBehavior.Output.Set(&ec2.DescribeSpotPriceHistoryOutput{\n\t\t\t\tSpotPriceHistory: []ec2types.SpotPrice{\n\t\t\t\t\t{\n\t\t\t\t\t\tAvailabilityZone: aws.String(\"test-zone-1a\"),\n\t\t\t\t\t\tInstanceType:     \"c99.large\",\n\t\t\t\t\t\tSpotPrice:        aws.String(\"1.23\"),\n\t\t\t\t\t\tTimestamp:        &now,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t})\n\t\t\tawsEnv.PricingAPI.GetProductsBehavior.Output.Set(&awspricing.GetProductsOutput{\n\t\t\t\tPriceList: []string{\n\t\t\t\t\tfake.NewOnDemandPriceWithCurrency(\"c98.large\", 1.20, \"CNY\"),\n\t\t\t\t\tfake.NewOnDemandPriceWithCurrency(\"c99.large\", 1.23, \"CNY\"),\n\t\t\t\t},\n\t\t\t})\n\t\t\tExpectSingletonReconciled(ctx, tmpController)\n\n\t\t\tprice, ok := tmpPricingProvider.OnDemandPrice(\"c98.large\")\n\t\t\tExpect(ok).To(BeTrue())\n\t\t\tExpect(price).To(BeNumerically(\"==\", 1.20))\n\n\t\t\tprice, ok = tmpPricingProvider.OnDemandPrice(\"c99.large\")\n\t\t\tExpect(ok).To(BeTrue())\n\t\t\tExpect(price).To(BeNumerically(\"==\", 1.23))\n\t\t})\n\t\tIt(\"should update pricing when we make multiple paginated calls to the on-demand pricing API\", func() {\n\t\t\tawsEnv.PricingAPI.GetProductsBehavior.OutputPages.Add(&awspricing.GetProductsOutput{\n\t\t\t\tPriceList: []string{\n\t\t\t\t\tfake.NewOnDemandPrice(\"c94.large\", 1.10),\n\t\t\t\t\tfake.NewOnDemandPrice(\"c95.large\", 1.20),\n\t\t\t\t},\n\t\t\t})\n\t\t\tawsEnv.PricingAPI.GetProductsBehavior.OutputPages.Add(&awspricing.GetProductsOutput{\n\t\t\t\tPriceList: []string{\n\t\t\t\t\tfake.NewOnDemandPrice(\"c96.large\", 1.30),\n\t\t\t\t\tfake.NewOnDemandPrice(\"c97.large\", 1.40),\n\t\t\t\t},\n\t\t\t})\n\t\t\tawsEnv.PricingAPI.GetProductsBehavior.OutputPages.Add(&awspricing.GetProductsOutput{\n\t\t\t\tPriceList: []string{\n\t\t\t\t\tfake.NewOnDemandPrice(\"c98.large\", 1.50),\n\t\t\t\t\tfake.NewOnDemandPrice(\"c99.large\", 1.60),\n\t\t\t\t},\n\t\t\t})\n\t\t\tExpectSingletonReconciled(ctx, controller)\n\n\t\t\tfor _, elem := range []lo.Tuple2[string, float64]{{A: \"c94.large\", B: 1.10}, {A: \"c95.large\", B: 1.20}, {A: \"c96.large\", B: 1.30}, {A: \"c97.large\", B: 1.40}, {A: \"c98.large\", B: 1.50}, {A: \"c99.large\", B: 1.60}} {\n\t\t\t\tprice, ok := awsEnv.PricingProvider.OnDemandPrice(ec2types.InstanceType(elem.A))\n\t\t\t\tExpect(ok).To(BeTrue())\n\t\t\t\tExpect(price).To(BeNumerically(\"==\", elem.B))\n\t\t\t}\n\t\t})\n\t\tIt(\"should maintain previous data when pricing API returns partial data\", func() {\n\t\t\tawsEnv.PricingAPI.GetProductsBehavior.Output.Set(&awspricing.GetProductsOutput{\n\t\t\t\tPriceList: []string{\n\t\t\t\t\tfake.NewOnDemandPrice(\"c98.large\", 1.10),\n\t\t\t\t\tfake.NewOnDemandPrice(\"c99.large\", 1.20),\n\t\t\t\t},\n\t\t\t})\n\t\t\tExpectSingletonReconciled(ctx, controller)\n\n\t\t\tfor _, elem := range []lo.Tuple2[string, float64]{{A: \"c98.large\", B: 1.10}, {A: \"c99.large\", B: 1.20}} {\n\t\t\t\tprice, ok := awsEnv.PricingProvider.OnDemandPrice(ec2types.InstanceType(elem.A))\n\t\t\t\tExpect(ok).To(BeTrue())\n\t\t\t\tExpect(price).To(BeNumerically(\"==\", elem.B))\n\t\t\t}\n\n\t\t\t// Output now returns nothing\n\t\t\tawsEnv.PricingAPI.GetProductsBehavior.Output.Set(&awspricing.GetProductsOutput{\n\t\t\t\tPriceList: []string{\n\t\t\t\t\tfake.NewOnDemandPrice(\"c98.large\", 1.10),\n\t\t\t\t},\n\t\t\t})\n\t\t\tExpectSingletonReconciled(ctx, controller)\n\n\t\t\t// Should still maintain the old data\n\t\t\tfor _, elem := range []lo.Tuple2[string, float64]{{A: \"c98.large\", B: 1.10}, {A: \"c99.large\", B: 1.20}} {\n\t\t\t\tprice, ok := awsEnv.PricingProvider.OnDemandPrice(ec2types.InstanceType(elem.A))\n\t\t\t\tExpect(ok).To(BeTrue())\n\t\t\t\tExpect(price).To(BeNumerically(\"==\", elem.B))\n\t\t\t}\n\t\t})\n\t})\n\tContext(\"Spot\", func() {\n\t\tBeforeEach(func() {\n\t\t\t// Preventing errors from UpdateOnDemandPricing\n\t\t\tawsEnv.PricingAPI.GetProductsBehavior.Output.Set(&awspricing.GetProductsOutput{\n\t\t\t\tPriceList: []string{\n\t\t\t\t\tfake.NewOnDemandPrice(\"c98.large\", 1.10),\n\t\t\t\t},\n\t\t\t})\n\t\t})\n\t\tIt(\"should return static spot data if EC2 describeSpotPriceHistory API fails\", func() {\n\t\t\tawsEnv.PricingAPI.GetProductsBehavior.Error.Set(fmt.Errorf(\"failed\"))\n\t\t\t_ = ExpectSingletonReconcileFailed(ctx, controller)\n\t\t\tprice, ok := awsEnv.PricingProvider.SpotPrice(\"c5.large\", \"test-zone-1a\")\n\t\t\tExpect(ok).To(BeTrue())\n\t\t\tExpect(price).To(BeNumerically(\">\", 0))\n\t\t})\n\t\tIt(\"should update spot pricing with response from the pricing API\", func() {\n\t\t\tnow := time.Now()\n\t\t\tawsEnv.EC2API.DescribeSpotPriceHistoryBehavior.Output.Set(&ec2.DescribeSpotPriceHistoryOutput{\n\t\t\t\tSpotPriceHistory: []ec2types.SpotPrice{\n\t\t\t\t\t{\n\t\t\t\t\t\tAvailabilityZone: aws.String(\"test-zone-1a\"),\n\t\t\t\t\t\tInstanceType:     \"c99.large\",\n\t\t\t\t\t\tSpotPrice:        aws.String(\"1.23\"),\n\t\t\t\t\t\tTimestamp:        &now,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tAvailabilityZone: aws.String(\"test-zone-1a\"),\n\t\t\t\t\t\tInstanceType:     \"c98.large\",\n\t\t\t\t\t\tSpotPrice:        aws.String(\"1.20\"),\n\t\t\t\t\t\tTimestamp:        &now,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tAvailabilityZone: aws.String(\"test-zone-1b\"),\n\t\t\t\t\t\tInstanceType:     \"c99.large\",\n\t\t\t\t\t\tSpotPrice:        aws.String(\"1.50\"),\n\t\t\t\t\t\tTimestamp:        &now,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tAvailabilityZone: aws.String(\"test-zone-1b\"),\n\t\t\t\t\t\tInstanceType:     \"c98.large\",\n\t\t\t\t\t\tSpotPrice:        aws.String(\"1.10\"),\n\t\t\t\t\t\tTimestamp:        &now,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t})\n\t\t\tawsEnv.PricingAPI.GetProductsBehavior.Output.Set(&awspricing.GetProductsOutput{\n\t\t\t\tPriceList: []string{\n\t\t\t\t\tfake.NewOnDemandPrice(\"c98.large\", 1.20),\n\t\t\t\t\tfake.NewOnDemandPrice(\"c99.large\", 1.23),\n\t\t\t\t},\n\t\t\t})\n\t\t\tExpectSingletonReconciled(ctx, controller)\n\n\t\t\tprice, ok := awsEnv.PricingProvider.SpotPrice(\"c98.large\", \"test-zone-1b\")\n\t\t\tExpect(ok).To(BeTrue())\n\t\t\tExpect(price).To(BeNumerically(\"==\", 1.10))\n\n\t\t\tprice, ok = awsEnv.PricingProvider.SpotPrice(\"c99.large\", \"test-zone-1a\")\n\t\t\tExpect(ok).To(BeTrue())\n\t\t\tExpect(price).To(BeNumerically(\"==\", 1.23))\n\t\t})\n\t\tIt(\"should update zonal pricing with data from the spot pricing API\", func() {\n\t\t\tnow := time.Now()\n\t\t\tawsEnv.EC2API.DescribeSpotPriceHistoryBehavior.Output.Set(&ec2.DescribeSpotPriceHistoryOutput{\n\t\t\t\tSpotPriceHistory: []ec2types.SpotPrice{\n\t\t\t\t\t{\n\t\t\t\t\t\tAvailabilityZone: aws.String(\"test-zone-1a\"),\n\t\t\t\t\t\tInstanceType:     \"c99.large\",\n\t\t\t\t\t\tSpotPrice:        aws.String(\"1.23\"),\n\t\t\t\t\t\tTimestamp:        &now,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tAvailabilityZone: aws.String(\"test-zone-1a\"),\n\t\t\t\t\t\tInstanceType:     \"c98.large\",\n\t\t\t\t\t\tSpotPrice:        aws.String(\"1.20\"),\n\t\t\t\t\t\tTimestamp:        &now,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t})\n\t\t\tawsEnv.PricingAPI.GetProductsBehavior.Output.Set(&awspricing.GetProductsOutput{\n\t\t\t\tPriceList: []string{\n\t\t\t\t\tfake.NewOnDemandPrice(\"c98.large\", 1.20),\n\t\t\t\t\tfake.NewOnDemandPrice(\"c99.large\", 1.23),\n\t\t\t\t},\n\t\t\t})\n\t\t\tExpectSingletonReconciled(ctx, controller)\n\n\t\t\tprice, ok := awsEnv.PricingProvider.SpotPrice(\"c98.large\", \"test-zone-1a\")\n\t\t\tExpect(ok).To(BeTrue())\n\t\t\tExpect(price).To(BeNumerically(\"==\", 1.20))\n\n\t\t\t_, ok = awsEnv.PricingProvider.SpotPrice(\"c98.large\", \"test-zone-1b\")\n\t\t\tExpect(ok).ToNot(BeTrue())\n\t\t})\n\t\tIt(\"should respond with false if price doesn't exist in zone\", func() {\n\t\t\tnow := time.Now()\n\t\t\tawsEnv.EC2API.DescribeSpotPriceHistoryBehavior.Output.Set(&ec2.DescribeSpotPriceHistoryOutput{\n\t\t\t\tSpotPriceHistory: []ec2types.SpotPrice{\n\t\t\t\t\t{\n\t\t\t\t\t\tAvailabilityZone: aws.String(\"test-zone-1a\"),\n\t\t\t\t\t\tInstanceType:     \"c99.large\",\n\t\t\t\t\t\tSpotPrice:        aws.String(\"1.23\"),\n\t\t\t\t\t\tTimestamp:        &now,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t})\n\t\t\tawsEnv.PricingAPI.GetProductsBehavior.Output.Set(&awspricing.GetProductsOutput{\n\t\t\t\tPriceList: []string{\n\t\t\t\t\tfake.NewOnDemandPrice(\"c98.large\", 1.20),\n\t\t\t\t\tfake.NewOnDemandPrice(\"c99.large\", 1.23),\n\t\t\t\t},\n\t\t\t})\n\t\t\tExpectSingletonReconciled(ctx, controller)\n\n\t\t\t_, ok := awsEnv.PricingProvider.SpotPrice(\"c99.large\", \"test-zone-1b\")\n\t\t\tExpect(ok).To(BeFalse())\n\t\t})\n\t\tIt(\"should update zonal pricing when we make multiple paginated calls to the spot pricing API\", func() {\n\t\t\tnow := time.Now()\n\t\t\tawsEnv.EC2API.DescribeSpotPriceHistoryBehavior.OutputPages.Add(&ec2.DescribeSpotPriceHistoryOutput{\n\t\t\t\tSpotPriceHistory: []ec2types.SpotPrice{\n\t\t\t\t\t{\n\t\t\t\t\t\tAvailabilityZone: aws.String(\"test-zone-1a\"),\n\t\t\t\t\t\tInstanceType:     \"c99.large\",\n\t\t\t\t\t\tSpotPrice:        aws.String(\"1.20\"),\n\t\t\t\t\t\tTimestamp:        &now,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tAvailabilityZone: aws.String(\"test-zone-1b\"),\n\t\t\t\t\t\tInstanceType:     \"c98.large\",\n\t\t\t\t\t\tSpotPrice:        aws.String(\"1.30\"),\n\t\t\t\t\t\tTimestamp:        &now,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t})\n\t\t\tawsEnv.EC2API.DescribeSpotPriceHistoryBehavior.OutputPages.Add(&ec2.DescribeSpotPriceHistoryOutput{\n\t\t\t\tSpotPriceHistory: []ec2types.SpotPrice{\n\t\t\t\t\t{\n\t\t\t\t\t\tAvailabilityZone: aws.String(\"test-zone-1b\"),\n\t\t\t\t\t\tInstanceType:     \"c99.large\",\n\t\t\t\t\t\tSpotPrice:        aws.String(\"1.30\"),\n\t\t\t\t\t\tTimestamp:        &now,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tAvailabilityZone: aws.String(\"test-zone-1c\"),\n\t\t\t\t\t\tInstanceType:     \"c98.large\",\n\t\t\t\t\t\tSpotPrice:        aws.String(\"1.40\"),\n\t\t\t\t\t\tTimestamp:        &now,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t})\n\t\t\tawsEnv.EC2API.DescribeSpotPriceHistoryBehavior.OutputPages.Add(&ec2.DescribeSpotPriceHistoryOutput{\n\t\t\t\tSpotPriceHistory: []ec2types.SpotPrice{\n\t\t\t\t\t{\n\t\t\t\t\t\tAvailabilityZone: aws.String(\"test-zone-1c\"),\n\t\t\t\t\t\tInstanceType:     \"c99.large\",\n\t\t\t\t\t\tSpotPrice:        aws.String(\"1.40\"),\n\t\t\t\t\t\tTimestamp:        &now,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tAvailabilityZone: aws.String(\"test-zone-1a\"),\n\t\t\t\t\t\tInstanceType:     \"c98.large\",\n\t\t\t\t\t\tSpotPrice:        aws.String(\"1.20\"),\n\t\t\t\t\t\tTimestamp:        &now,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t})\n\t\t\tawsEnv.PricingAPI.GetProductsBehavior.Output.Set(&awspricing.GetProductsOutput{\n\t\t\t\tPriceList: []string{\n\t\t\t\t\tfake.NewOnDemandPrice(\"c98.large\", 1.20),\n\t\t\t\t\tfake.NewOnDemandPrice(\"c99.large\", 1.23),\n\t\t\t\t},\n\t\t\t})\n\t\t\tExpectSingletonReconciled(ctx, controller)\n\n\t\t\tfor _, it := range []string{\"c98.large\", \"c99.large\"} {\n\t\t\t\tfor _, zone := range []lo.Tuple2[string, float64]{{A: \"test-zone-1a\", B: 1.20}, {A: \"test-zone-1b\", B: 1.30}, {A: \"test-zone-1c\", B: 1.40}} {\n\t\t\t\t\tprice, ok := awsEnv.PricingProvider.SpotPrice(ec2types.InstanceType(it), zone.A)\n\t\t\t\t\tExpect(ok).To(BeTrue())\n\t\t\t\t\tExpect(price).To(BeNumerically(\"==\", zone.B))\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t\tIt(\"should return static on-demand data when in isolated-vpc\", func() {\n\t\t\tctx = options.ToContext(ctx, test.Options(test.OptionsFields{\n\t\t\t\tIsolatedVPC: lo.ToPtr(true),\n\t\t\t}))\n\t\t\tnow := time.Now()\n\t\t\tawsEnv.EC2API.DescribeSpotPriceHistoryBehavior.Output.Set(&ec2.DescribeSpotPriceHistoryOutput{\n\t\t\t\tSpotPriceHistory: []ec2types.SpotPrice{\n\t\t\t\t\t{\n\t\t\t\t\t\tAvailabilityZone: aws.String(\"test-zone-1b\"),\n\t\t\t\t\t\tInstanceType:     \"c99.large\",\n\t\t\t\t\t\tSpotPrice:        aws.String(\"1.50\"),\n\t\t\t\t\t\tTimestamp:        &now,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tAvailabilityZone: aws.String(\"test-zone-1b\"),\n\t\t\t\t\t\tInstanceType:     \"c98.large\",\n\t\t\t\t\t\tSpotPrice:        aws.String(\"1.10\"),\n\t\t\t\t\t\tTimestamp:        &now,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t})\n\n\t\t\tawsEnv.PricingAPI.GetProductsBehavior.Output.Set(&awspricing.GetProductsOutput{\n\t\t\t\t// these are incorrect prices which are here to ensure that\n\t\t\t\t// results from only static pricing are used\n\t\t\t\tPriceList: []string{\n\t\t\t\t\tfake.NewOnDemandPrice(\"c98.large\", 1.20),\n\t\t\t\t\tfake.NewOnDemandPrice(\"c99.large\", 1.23),\n\t\t\t\t},\n\t\t\t})\n\t\t\tExpectSingletonReconciled(ctx, controller)\n\t\t\tprice, ok := awsEnv.PricingProvider.OnDemandPrice(\"c3.2xlarge\")\n\t\t\tExpect(ok).To(BeTrue())\n\t\t\tExpect(price).To(BeNumerically(\"==\", 0.420000))\n\n\t\t\tprice, ok = awsEnv.PricingProvider.SpotPrice(\"c98.large\", \"test-zone-1b\")\n\t\t\tExpect(ok).To(BeTrue())\n\t\t\tExpect(price).To(BeNumerically(\"==\", 1.10))\n\t\t})\n\t\tIt(\"should return static on-demand data when in an AWS GovCloud region\", func() {\n\t\t\tprovider := pricing.NewDefaultProvider(awsEnv.PricingAPI, awsEnv.EC2API, \"us-gov-east-1\", false)\n\t\t\terr := provider.UpdateOnDemandPricing(ctx)\n\t\t\tExpect(err).To(BeNil())\n\t\t\tExpect(awsEnv.PricingAPI.GetProductsBehavior.CalledWithInput.Len()).To(Equal(0))\n\t\t\t_, ok := provider.OnDemandPrice(\"c5.12xlarge\")\n\t\t\tExpect(ok).To(BeTrue())\n\t\t})\n\t\tIt(\"should maintain previous data when pricing API returns partial data\", func() {\n\t\t\tnow := time.Now()\n\t\t\tawsEnv.EC2API.DescribeSpotPriceHistoryBehavior.Output.Set(&ec2.DescribeSpotPriceHistoryOutput{\n\t\t\t\tSpotPriceHistory: []ec2types.SpotPrice{\n\t\t\t\t\t{\n\t\t\t\t\t\tAvailabilityZone: aws.String(\"test-zone-1a\"),\n\t\t\t\t\t\tInstanceType:     \"c98.large\",\n\t\t\t\t\t\tSpotPrice:        aws.String(\"1.20\"),\n\t\t\t\t\t\tTimestamp:        &now,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tAvailabilityZone: aws.String(\"test-zone-1a\"),\n\t\t\t\t\t\tInstanceType:     \"c99.large\",\n\t\t\t\t\t\tSpotPrice:        aws.String(\"1.30\"),\n\t\t\t\t\t\tTimestamp:        &now,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t})\n\t\t\tExpectSingletonReconciled(ctx, controller)\n\n\t\t\tfor _, elem := range []lo.Tuple2[string, float64]{{A: \"c98.large\", B: 1.20}, {A: \"c99.large\", B: 1.30}} {\n\t\t\t\tprice, ok := awsEnv.PricingProvider.SpotPrice(ec2types.InstanceType(elem.A), \"test-zone-1a\")\n\t\t\t\tExpect(ok).To(BeTrue())\n\t\t\t\tExpect(price).To(BeNumerically(\"==\", elem.B))\n\t\t\t}\n\n\t\t\tExpectSingletonReconciled(ctx, controller)\n\n\t\t\t// Output now returns nothing\n\t\t\tawsEnv.EC2API.DescribeSpotPriceHistoryBehavior.Output.Set(&ec2.DescribeSpotPriceHistoryOutput{\n\t\t\t\tSpotPriceHistory: []ec2types.SpotPrice{\n\t\t\t\t\t{\n\t\t\t\t\t\tAvailabilityZone: aws.String(\"test-zone-1a\"),\n\t\t\t\t\t\tInstanceType:     \"c99.large\",\n\t\t\t\t\t\tSpotPrice:        aws.String(\"1.30\"),\n\t\t\t\t\t\tTimestamp:        &now,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t})\n\t\t\tExpectSingletonReconciled(ctx, controller)\n\n\t\t\t// Should still maintain the old data\n\t\t\tfor _, elem := range []lo.Tuple2[string, float64]{{A: \"c98.large\", B: 1.20}, {A: \"c99.large\", B: 1.30}} {\n\t\t\t\tprice, ok := awsEnv.PricingProvider.SpotPrice(ec2types.InstanceType(elem.A), \"test-zone-1a\")\n\t\t\t\tExpect(ok).To(BeTrue())\n\t\t\t\tExpect(price).To(BeNumerically(\"==\", elem.B))\n\t\t\t}\n\t\t})\n\t})\n})\n"
  },
  {
    "path": "pkg/controllers/providers/ssm/invalidation/controller.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage invalidation\n\nimport (\n\t\"context\"\n\t\"time\"\n\n\t\"github.com/awslabs/operatorpkg/reconciler\"\n\t\"github.com/awslabs/operatorpkg/singleton\"\n\t\"github.com/patrickmn/go-cache\"\n\t\"github.com/samber/lo\"\n\tcontrollerruntime \"sigs.k8s.io/controller-runtime\"\n\t\"sigs.k8s.io/controller-runtime/pkg/manager\"\n\t\"sigs.k8s.io/karpenter/pkg/operator/injection\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/amifamily\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/ssm\"\n\n\tmetav1 \"k8s.io/apimachinery/pkg/apis/meta/v1\"\n\t\"k8s.io/apimachinery/pkg/util/uuid\"\n)\n\n// The SSM Invalidation controller is responsible for invalidating \"latest\" SSM parameters when they point to deprecated\n// AMIs. This can occur when an EKS-optimized AMI with a regression is released, and the AMI team chooses to deprecate\n// the AMI. Normally, SSM parameter cache entries expire after 24 hours to prevent a thundering herd upon a new AMI\n// release, however Karpenter should react faster when an AMI is deprecated. This controller will ensure Karpenter\n// reacts to AMI deprecations within it's polling period (30m).\ntype Controller struct {\n\tcache       *cache.Cache\n\tamiProvider amifamily.Provider\n}\n\nfunc NewController(ssmCache *cache.Cache, amiProvider amifamily.Provider) *Controller {\n\treturn &Controller{\n\t\tcache:       ssmCache,\n\t\tamiProvider: amiProvider,\n\t}\n}\n\nfunc (c *Controller) Name() string {\n\treturn \"providers.ssm.invalidation\"\n}\n\nfunc (c *Controller) Reconcile(ctx context.Context) (reconciler.Result, error) {\n\tctx = injection.WithControllerName(ctx, c.Name())\n\n\tamiIDsToParameters := map[string]ssm.Parameter{}\n\tfor _, item := range c.cache.Items() {\n\t\tentry := item.Object.(ssm.CacheEntry)\n\t\tif !entry.Parameter.IsMutable {\n\t\t\tcontinue\n\t\t}\n\t\tamiIDsToParameters[entry.Value] = entry.Parameter\n\t}\n\tamis := []amifamily.AMI{}\n\tfor _, nodeClass := range lo.Map(lo.Keys(amiIDsToParameters), func(amiID string, _ int) *v1.EC2NodeClass {\n\t\treturn &v1.EC2NodeClass{\n\t\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\t\tUID: uuid.NewUUID(), // ensures that this doesn't hit the AMI cache.\n\t\t\t},\n\t\t\tSpec: v1.EC2NodeClassSpec{\n\t\t\t\tAMISelectorTerms: []v1.AMISelectorTerm{{ID: amiID}},\n\t\t\t},\n\t\t}\n\t}) {\n\t\tresolvedAMIs, err := c.amiProvider.List(ctx, nodeClass)\n\t\tif err != nil {\n\t\t\treturn reconciler.Result{}, err\n\t\t}\n\t\tamis = append(amis, resolvedAMIs...)\n\t}\n\tfor _, ami := range amis {\n\t\tif !ami.Deprecated {\n\t\t\tcontinue\n\t\t}\n\t\tparameter := amiIDsToParameters[ami.AmiID]\n\t\tc.cache.Delete(parameter.CacheKey())\n\t}\n\treturn reconciler.Result{RequeueAfter: 30 * time.Minute}, nil\n}\n\nfunc (c *Controller) Register(_ context.Context, m manager.Manager) error {\n\treturn controllerruntime.NewControllerManagedBy(m).\n\t\tNamed(c.Name()).\n\t\tWatchesRawSource(singleton.Source()).\n\t\tComplete(singleton.AsReconciler(c))\n}\n"
  },
  {
    "path": "pkg/controllers/providers/ssm/invalidation/suite_test.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage invalidation_test\n\nimport (\n\t\"context\"\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go-v2/service/ec2\"\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\t\"github.com/samber/lo\"\n\tcoreoptions \"sigs.k8s.io/karpenter/pkg/operator/options\"\n\tcoretest \"sigs.k8s.io/karpenter/pkg/test\"\n\t\"sigs.k8s.io/karpenter/pkg/test/v1alpha1\"\n\n\t\"github.com/aws/karpenter-provider-aws/pkg/apis\"\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/controllers/providers/ssm/invalidation\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/operator/options\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/ssm\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/test\"\n\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n\t. \"sigs.k8s.io/karpenter/pkg/test/expectations\"\n\t. \"sigs.k8s.io/karpenter/pkg/utils/testing\"\n)\n\nvar ctx context.Context\nvar stop context.CancelFunc\nvar env *coretest.Environment\nvar awsEnv *test.Environment\nvar invalidationController *invalidation.Controller\n\nfunc TestAWS(t *testing.T) {\n\tctx = TestContextWithLogger(t)\n\tRegisterFailHandler(Fail)\n\tRunSpecs(t, \"SSM Invalidation Controller\")\n}\n\nvar _ = BeforeSuite(func() {\n\tenv = coretest.NewEnvironment(coretest.WithCRDs(apis.CRDs...), coretest.WithCRDs(v1alpha1.CRDs...))\n\tctx = coreoptions.ToContext(ctx, coretest.Options(coretest.OptionsFields{FeatureGates: coretest.FeatureGates{ReservedCapacity: lo.ToPtr(true)}}))\n\tctx = options.ToContext(ctx, test.Options())\n\tctx, stop = context.WithCancel(ctx)\n\tawsEnv = test.NewEnvironment(ctx, env)\n\n\tinvalidationController = invalidation.NewController(awsEnv.SSMCache, awsEnv.AMIProvider)\n})\n\nvar _ = AfterSuite(func() {\n\tstop()\n\tExpect(env.Stop()).To(Succeed(), \"Failed to stop environment\")\n})\n\nvar _ = BeforeEach(func() {\n\tctx = coreoptions.ToContext(ctx, coretest.Options(coretest.OptionsFields{FeatureGates: coretest.FeatureGates{ReservedCapacity: lo.ToPtr(true)}}))\n\tctx = options.ToContext(ctx, test.Options())\n\tawsEnv.Reset()\n})\n\nvar _ = Describe(\"SSM Invalidation Controller\", func() {\n\tvar nodeClass *v1.EC2NodeClass\n\tBeforeEach(func() {\n\t\tnodeClass = &v1.EC2NodeClass{\n\t\t\tSpec: v1.EC2NodeClassSpec{\n\t\t\t\tAMISelectorTerms: []v1.AMISelectorTerm{{Alias: \"al2023@latest\"}},\n\t\t\t},\n\t\t}\n\t})\n\tIt(\"shouldn't invalidate cache entries for non-deprecated AMIs\", func() {\n\t\t_, err := awsEnv.AMIProvider.List(ctx, nodeClass)\n\t\tExpect(err).To(BeNil())\n\t\tcurrentEntries := getSSMCacheEntries()\n\t\tExpect(len(currentEntries)).To(Equal(5))\n\t\tawsEnv.EC2Cache.Flush()\n\t\tExpectSingletonReconciled(ctx, invalidationController)\n\t\tawsEnv.SSMAPI.Reset()\n\t\t_, err = awsEnv.AMIProvider.List(ctx, nodeClass)\n\t\tExpect(err).To(BeNil())\n\t\tupdatedEntries := getSSMCacheEntries()\n\t\tExpect(len(updatedEntries)).To(Equal(5))\n\t\tfor parameter, amiID := range currentEntries {\n\t\t\tupdatedAMIID, ok := updatedEntries[parameter]\n\t\t\tExpect(ok).To(BeTrue())\n\t\t\tExpect(updatedAMIID).To(Equal(amiID))\n\t\t}\n\t})\n\tIt(\"shouldn't invalidate cache entries for deprecated AMIs when the SSM parameter is immutable\", func() {\n\t\tnodeClass.Spec.AMISelectorTerms[0].Alias = \"al2023@v20241024\"\n\t\t_, err := awsEnv.AMIProvider.List(ctx, nodeClass)\n\t\tExpect(err).To(BeNil())\n\t\tcurrentEntries := getSSMCacheEntries()\n\t\tdeprecateAMIs(lo.Values(currentEntries)...)\n\t\tExpect(len(currentEntries)).To(Equal(5))\n\t\tawsEnv.EC2Cache.Flush()\n\t\tExpectSingletonReconciled(ctx, invalidationController)\n\t\tawsEnv.SSMAPI.Reset()\n\t\t_, err = awsEnv.AMIProvider.List(ctx, nodeClass)\n\t\tExpect(err).To(BeNil())\n\t\tupdatedEntries := getSSMCacheEntries()\n\t\tExpect(len(updatedEntries)).To(Equal(5))\n\t\tfor parameter, amiID := range currentEntries {\n\t\t\tupdatedAMIID, ok := updatedEntries[parameter]\n\t\t\tExpect(ok).To(BeTrue())\n\t\t\tExpect(updatedAMIID).To(Equal(amiID))\n\t\t}\n\t})\n\tIt(\"should invalidate cache entries for deprecated AMIs when the SSM parameter is mutable\", func() {\n\t\t_, err := awsEnv.AMIProvider.List(ctx, nodeClass)\n\t\tExpect(err).To(BeNil())\n\t\tcurrentEntries := getSSMCacheEntries()\n\t\tdeprecateAMIs(lo.Values(currentEntries)...)\n\t\tExpect(len(currentEntries)).To(Equal(5))\n\t\tawsEnv.EC2Cache.Flush()\n\t\tExpectSingletonReconciled(ctx, invalidationController)\n\t\tawsEnv.SSMAPI.Reset()\n\t\t_, err = awsEnv.AMIProvider.List(ctx, nodeClass)\n\t\tExpect(err).To(BeNil())\n\t\tupdatedEntries := getSSMCacheEntries()\n\t\tExpect(len(updatedEntries)).To(Equal(5))\n\t\tfor parameter, amiID := range currentEntries {\n\t\t\tupdatedAMIID, ok := updatedEntries[parameter]\n\t\t\tExpect(ok).To(BeTrue())\n\t\t\tExpect(updatedAMIID).ToNot(Equal(amiID))\n\t\t}\n\t})\n})\n\nfunc getSSMCacheEntries() map[string]string {\n\tentries := map[string]string{}\n\tfor _, item := range awsEnv.SSMCache.Items() {\n\t\tentry := item.Object.(ssm.CacheEntry)\n\t\tentries[entry.Parameter.Name] = entry.Value\n\t}\n\treturn entries\n}\n\nfunc deprecateAMIs(amiIDs ...string) {\n\tawsEnv.EC2API.DescribeImagesOutput.Set(&ec2.DescribeImagesOutput{\n\t\tImages: lo.Map(amiIDs, func(amiID string, _ int) ec2types.Image {\n\t\t\treturn ec2types.Image{\n\t\t\t\tName:            lo.ToPtr(coretest.RandomName()),\n\t\t\t\tImageId:         lo.ToPtr(amiID),\n\t\t\t\tCreationDate:    lo.ToPtr(awsEnv.Clock.Now().Add(-24 * time.Hour).Format(time.RFC3339)),\n\t\t\t\tArchitecture:    \"x86_64\",\n\t\t\t\tDeprecationTime: lo.ToPtr(awsEnv.Clock.Now().Add(-12 * time.Hour).Format(time.RFC3339)),\n\t\t\t\tState:           ec2types.ImageStateAvailable,\n\t\t\t}\n\t\t}),\n\t})\n}\n"
  },
  {
    "path": "pkg/controllers/providers/version/controller.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage version\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"time\"\n\n\t\"github.com/awslabs/operatorpkg/reconciler\"\n\t\"github.com/awslabs/operatorpkg/singleton\"\n\tcontrollerruntime \"sigs.k8s.io/controller-runtime\"\n\t\"sigs.k8s.io/controller-runtime/pkg/manager\"\n\t\"sigs.k8s.io/karpenter/pkg/operator/injection\"\n\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/version\"\n)\n\ntype UpdateVersion func(context.Context) error\n\ntype Controller struct {\n\tversionProvider version.Provider\n\tupdateVersion   UpdateVersion\n}\n\nfunc NewController(versionProvider version.Provider, updateVersion UpdateVersion) *Controller {\n\treturn &Controller{\n\t\tversionProvider: versionProvider,\n\t\tupdateVersion:   updateVersion,\n\t}\n}\n\nfunc (c *Controller) Reconcile(ctx context.Context) (reconciler.Result, error) {\n\tctx = injection.WithControllerName(ctx, \"providers.version\")\n\n\tif err := c.updateVersion(ctx); err != nil {\n\t\treturn reconciler.Result{}, fmt.Errorf(\"updating version, %w\", err)\n\t}\n\treturn reconciler.Result{RequeueAfter: 5 * time.Minute}, nil\n}\n\nfunc (c *Controller) Register(_ context.Context, m manager.Manager) error {\n\t// Includes a default exponential failure rate limiter of base: time.Millisecond, and max: 1000*time.Second\n\treturn controllerruntime.NewControllerManagedBy(m).\n\t\tNamed(\"providers.version\").\n\t\tWatchesRawSource(singleton.Source()).\n\t\tComplete(singleton.AsReconciler(c))\n}\n"
  },
  {
    "path": "pkg/controllers/providers/version/suite_test.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage version_test\n\nimport (\n\t\"context\"\n\t\"testing\"\n\n\t\"sigs.k8s.io/karpenter/pkg/test/v1alpha1\"\n\n\tcoreoptions \"sigs.k8s.io/karpenter/pkg/operator/options\"\n\tcoretest \"sigs.k8s.io/karpenter/pkg/test\"\n\n\t\"github.com/aws/aws-sdk-go-v2/service/eks\"\n\tekstypes \"github.com/aws/aws-sdk-go-v2/service/eks/types\"\n\t\"github.com/samber/lo\"\n\n\t\"github.com/aws/karpenter-provider-aws/pkg/apis\"\n\tcontrollersversion \"github.com/aws/karpenter-provider-aws/pkg/controllers/providers/version\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/operator/options\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/test\"\n\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n\t. \"sigs.k8s.io/karpenter/pkg/test/expectations\"\n\t. \"sigs.k8s.io/karpenter/pkg/utils/testing\"\n)\n\nvar ctx context.Context\nvar stop context.CancelFunc\nvar env *coretest.Environment\nvar awsEnv *test.Environment\nvar controller *controllersversion.Controller\n\nfunc TestAWS(t *testing.T) {\n\tctx = TestContextWithLogger(t)\n\tRegisterFailHandler(Fail)\n\tRunSpecs(t, \"InstanceType\")\n}\n\nvar _ = BeforeSuite(func() {\n\tenv = coretest.NewEnvironment(coretest.WithCRDs(apis.CRDs...), coretest.WithCRDs(v1alpha1.CRDs...))\n\tctx = coreoptions.ToContext(ctx, coretest.Options(coretest.OptionsFields{FeatureGates: coretest.FeatureGates{ReservedCapacity: lo.ToPtr(true)}}))\n\tctx = options.ToContext(ctx, test.Options())\n\tctx, stop = context.WithCancel(ctx)\n\tawsEnv = test.NewEnvironment(ctx, env)\n\tcontroller = controllersversion.NewController(awsEnv.VersionProvider, awsEnv.VersionProvider.UpdateVersionWithValidation)\n})\n\nvar _ = AfterSuite(func() {\n\tstop()\n\tExpect(env.Stop()).To(Succeed(), \"Failed to stop environment\")\n})\n\nvar _ = BeforeEach(func() {\n\tctx = coreoptions.ToContext(ctx, coretest.Options(coretest.OptionsFields{FeatureGates: coretest.FeatureGates{ReservedCapacity: lo.ToPtr(true)}}))\n\tctx = options.ToContext(ctx, test.Options())\n\n\tawsEnv.Reset()\n})\n\nvar _ = AfterEach(func() {\n\tExpectCleanedUp(ctx, env.Client)\n})\n\nvar _ = Describe(\"Version\", func() {\n\tIt(\"should update Version with response from the DescribeCluster API\", func() {\n\t\toptions.FromContext(ctx).EKSControlPlane = true\n\t\tawsEnv.EKSAPI.DescribeClusterBehavior.Output.Set(&eks.DescribeClusterOutput{\n\t\t\tCluster: &ekstypes.Cluster{\n\t\t\t\tVersion: lo.ToPtr(\"1.29\"),\n\t\t\t},\n\t\t})\n\t\tExpectSingletonReconciled(ctx, controller)\n\t\tExpect(awsEnv.VersionProvider.Get(ctx)).To(Equal(\"1.29\"))\n\t})\n})\n"
  },
  {
    "path": "pkg/errors/errors.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage errors\n\nimport (\n\t\"strings\"\n\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\t\"github.com/aws/smithy-go\"\n\t\"github.com/samber/lo\"\n\t\"k8s.io/apimachinery/pkg/util/sets\"\n)\n\nconst (\n\tlaunchTemplateNameNotFoundCode                 = \"InvalidLaunchTemplateName.NotFoundException\"\n\tRunInstancesInvalidParameterValueCode          = \"InvalidParameterValue\"\n\tDryRunOperationErrorCode                       = \"DryRunOperation\"\n\tUnauthorizedOperationErrorCode                 = \"UnauthorizedOperation\"\n\tRateLimitingErrorCode                          = \"RequestLimitExceeded\"\n\tServiceLinkedRoleCreationNotPermittedErrorCode = \"AuthFailure.ServiceLinkedRoleCreationNotPermitted\"\n\tInsufficientFreeAddressesInSubnetErrorCode     = \"InsufficientFreeAddressesInSubnet\"\n\tMaxFleetCountExceededErrorCode                 = \"MaxFleetCountExceeded\"\n)\n\nvar (\n\t// This is not an exhaustive list, add to it as needed\n\tnotFoundErrorCodes = sets.New(\n\t\t\"InvalidCapacityReservationId.NotFound\",\n\t\t\"InvalidInstanceID.NotFound\",\n\t\tlaunchTemplateNameNotFoundCode,\n\t\t\"InvalidLaunchTemplateId.NotFound\",\n\t\t\"QueueDoesNotExist\",\n\t\t\"NoSuchEntity\",\n\t\t\"ParameterNotFound\",\n\t)\n\talreadyExistsErrorCodes = sets.New(\n\t\t\"EntityAlreadyExists\",\n\t)\n\n\treservationCapacityExceededErrorCode = \"ReservationCapacityExceeded\"\n\n\t// unfulfillableCapacityErrorCodes signify that capacity is temporarily unable to be launched\n\tunfulfillableCapacityErrorCodes = sets.New(\n\t\t\"InsufficientInstanceCapacity\",\n\t\t\"MaxSpotInstanceCountExceeded\",\n\t\t\"VcpuLimitExceeded\",\n\t\t\"UnfulfillableCapacity\",\n\t\t\"Unsupported\",\n\t\t\"InsufficientFreeAddressesInSubnet\",\n\t\t\"MaxFleetCountExceeded\",\n\t\treservationCapacityExceededErrorCode,\n\t)\n)\n\n// IsNotFound returns true if the err is an AWS error (even if it's\n// wrapped) and is a known to mean \"not found\" (as opposed to a more\n// serious or unexpected error)\nfunc IsNotFound(err error) bool {\n\tif err == nil {\n\t\treturn false\n\t}\n\tif apiErr, ok := lo.ErrorsAs[smithy.APIError](err); ok {\n\t\treturn notFoundErrorCodes.Has(apiErr.ErrorCode())\n\t}\n\treturn false\n}\n\nfunc IgnoreNotFound(err error) error {\n\tif IsNotFound(err) {\n\t\treturn nil\n\t}\n\treturn err\n}\n\nfunc IsAlreadyExists(err error) bool {\n\tif err == nil {\n\t\treturn false\n\t}\n\tif apiErr, ok := lo.ErrorsAs[smithy.APIError](err); ok {\n\t\treturn alreadyExistsErrorCodes.Has(apiErr.ErrorCode())\n\t}\n\treturn false\n}\n\nfunc IgnoreAlreadyExists(err error) error {\n\tif IsAlreadyExists(err) {\n\t\treturn nil\n\t}\n\treturn err\n}\n\nfunc IsDryRunError(err error) bool {\n\tif err == nil {\n\t\treturn false\n\t}\n\tif apiErr, ok := lo.ErrorsAs[smithy.APIError](err); ok {\n\t\treturn apiErr.ErrorCode() == DryRunOperationErrorCode\n\t}\n\treturn false\n}\n\nfunc IgnoreDryRunError(err error) error {\n\tif IsDryRunError(err) {\n\t\treturn nil\n\t}\n\treturn err\n}\n\nfunc IsUnauthorizedOperationError(err error) bool {\n\tif err == nil {\n\t\treturn false\n\t}\n\tif apiErr, ok := lo.ErrorsAs[smithy.APIError](err); ok {\n\t\treturn apiErr.ErrorCode() == UnauthorizedOperationErrorCode\n\t}\n\treturn false\n}\n\nfunc IgnoreUnauthorizedOperationError(err error) error {\n\tif IsUnauthorizedOperationError(err) {\n\t\treturn nil\n\t}\n\treturn err\n}\n\nfunc IsRateLimitedError(err error) bool {\n\tif err == nil {\n\t\treturn false\n\t}\n\tif apiErr, ok := lo.ErrorsAs[smithy.APIError](err); ok {\n\t\treturn apiErr.ErrorCode() == RateLimitingErrorCode\n\t}\n\treturn false\n}\n\nfunc IgnoreRateLimitedError(err error) error {\n\tif IsRateLimitedError(err) {\n\t\treturn nil\n\t}\n\treturn err\n}\n\nfunc IsServerError(err error) bool {\n\tif err == nil {\n\t\treturn false\n\t}\n\tif apiErr, ok := lo.ErrorsAs[smithy.APIError](err); ok {\n\t\treturn apiErr.ErrorFault() == smithy.FaultServer\n\t}\n\treturn false\n}\n\nfunc IgnoreServerError(err error) error {\n\tif IsServerError(err) {\n\t\treturn nil\n\t}\n\treturn err\n}\n\n// IsUnfulfillableCapacity returns true if the Fleet err means capacity is temporarily unavailable for launching. This\n// could be due to account limits, insufficient ec2 capacity, etc.\nfunc IsUnfulfillableCapacity(err ec2types.CreateFleetError) bool {\n\treturn unfulfillableCapacityErrorCodes.Has(*err.ErrorCode)\n}\n\nfunc IsServiceLinkedRoleCreationNotPermitted(err ec2types.CreateFleetError) bool {\n\treturn *err.ErrorCode == ServiceLinkedRoleCreationNotPermittedErrorCode\n}\n\nfunc IsInsufficientFreeAddressesInSubnet(err ec2types.CreateFleetError) bool {\n\treturn *err.ErrorCode == InsufficientFreeAddressesInSubnetErrorCode\n}\n\n// IsReservationCapacityExceeded returns true if the fleet error means there is no remaining capacity for the provided\n// capacity reservation.\nfunc IsReservationCapacityExceeded(err ec2types.CreateFleetError) bool {\n\treturn *err.ErrorCode == reservationCapacityExceededErrorCode\n}\n\nfunc IsLaunchTemplateNotFound(err error) bool {\n\tif err == nil {\n\t\treturn false\n\t}\n\tif apiErr, ok := lo.ErrorsAs[smithy.APIError](err); ok {\n\t\treturn apiErr.ErrorCode() == launchTemplateNameNotFoundCode\n\t}\n\treturn false\n}\n\nfunc IsInstanceProfileNotFound(err error) bool {\n\tif err == nil {\n\t\treturn false\n\t}\n\tif apiErr, ok := lo.ErrorsAs[smithy.APIError](err); ok {\n\t\treturn apiErr.ErrorCode() == RunInstancesInvalidParameterValueCode && strings.Contains(apiErr.ErrorMessage(), \"Invalid IAM Instance Profile name\")\n\t}\n\treturn false\n}\n\n// ToReasonMessage converts an error message from AWS into a well-known condition reason\n// and well-known condition message that can be used for Launch failure classification\n// nolint:gocyclo\nfunc ToReasonMessage(err error) (string, string) {\n\tif strings.Contains(err.Error(), \"AuthFailure.ServiceLinkedRoleCreationNotPermitted\") {\n\t\treturn \"SpotSLRCreationFailed\", \"User does not have sufficient permission to create the Spot ServiceLinkedRole to launch spot instances\"\n\t}\n\tif strings.Contains(err.Error(), \"UnauthorizedOperation\") || strings.Contains(err.Error(), \"AccessDenied\") || strings.Contains(err.Error(), \"AuthFailure\") {\n\t\tif strings.Contains(err.Error(), \"with an explicit deny in a permissions boundary\") {\n\t\t\treturn \"Unauthorized\", \"User is not authorized to perform this operation due to a permission boundary\"\n\t\t}\n\t\tif strings.Contains(err.Error(), \"with an explicit deny in a service control policy\") {\n\t\t\treturn \"Unauthorized\", \"User is not authorized to perform this operation due to a service control policy\"\n\t\t}\n\t\tif strings.Contains(err.Error(), \"Not authorized for images\") {\n\t\t\treturn \"AMIAuthorizationFailure\", \"User is not authorized for AMI used in instance launch\"\n\t\t}\n\t\treturn \"Unauthorized\", \"User is not authorized to perform this operation because no identity-based policy allows it\"\n\t}\n\tif strings.Contains(err.Error(), \"iamInstanceProfile.name is invalid\") {\n\t\treturn \"InstanceProfileNameInvalid\", \"Instance profile name used from EC2NodeClass status does not exist\"\n\t}\n\tif strings.Contains(err.Error(), \"InvalidLaunchTemplateId.NotFound\") {\n\t\treturn \"LaunchTemplateNotFound\", \"Launch template used for instance launch wasn't found\"\n\t}\n\tif strings.Contains(err.Error(), \"InvalidAMIID.Malformed\") {\n\t\treturn \"InvalidAMIID\", \"AMI used for instance launch is invalid\"\n\t}\n\tif strings.Contains(err.Error(), \"InvalidAMIID.NotFound\") {\n\t\treturn \"AMINotFound\", \"AMI used for instance launch either does not exist or you don't have permissions to use it\"\n\t}\n\tif strings.Contains(err.Error(), \"RequestLimitExceeded\") {\n\t\treturn \"RequestLimitExceeded\", \"Request limit exceeded\"\n\t}\n\tif strings.Contains(err.Error(), \"InternalError\") {\n\t\treturn \"InternalError\", \"An internal error has occurred\"\n\t}\n\tif strings.Contains(err.Error(), \"not eligible for Free Tier\") {\n\t\treturn \"FreeTierIneligible\", \"The specified instance type is not eligible for Free Tier\"\n\t}\n\t// ICE Errors come last in this list because we should return a generic ICE error if all of the errors that are returned from\n\t// fleet are ICE errors\n\tif strings.Contains(err.Error(), \"MaxFleetCountExceeded\") {\n\t\treturn \"FleetQuotaExceeded\", \"A fleet launch was requested but this would exceed your fleet request quota\"\n\t}\n\tif strings.Contains(err.Error(), \"PendingVerification\") {\n\t\treturn \"AccountPendingVerification\", \"An instance launch was requested but the request for launching resources in this region is still being verified\"\n\t}\n\tif strings.Contains(err.Error(), \"MaxSpotInstanceCountExceeded\") {\n\t\treturn \"SpotQuotaExceeded\", \"A spot instance launch was requested but this would exceed your spot instance quota\"\n\t}\n\tif strings.Contains(err.Error(), \"VcpuLimitExceeded\") {\n\t\treturn \"VCPULimitExceeded\", \"An instance was requested that would exceed your VCPU quota\"\n\t}\n\tif strings.Contains(err.Error(), \"InsufficientFreeAddressesInSubnet\") {\n\t\treturn \"InsufficientFreeAddressesInSubnet\", \"There are not enough free IP addresses to launch an instance in this subnet\"\n\t}\n\treturn \"LaunchFailed\", \"Instance launch failed\"\n}\n"
  },
  {
    "path": "pkg/fake/atomic.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage fake\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"log\"\n\t\"math\"\n\t\"sync\"\n)\n\n// AtomicPtr is intended for use in mocks to easily expose variables for use in testing.  It makes setting and retrieving\n// the values race free by wrapping the pointer itself in a mutex.  There is no Get() method, but instead a Clone() method\n// deep copies the object being stored by serializing/de-serializing it from JSON.  This pattern shouldn't be followed\n// anywhere else but is an easy way to eliminate races in our tests.\ntype AtomicPtr[T any] struct {\n\tmu    sync.Mutex\n\tvalue *T\n}\n\nfunc (a *AtomicPtr[T]) Set(v *T) {\n\ta.mu.Lock()\n\tdefer a.mu.Unlock()\n\ta.value = v\n}\n\nfunc (a *AtomicPtr[T]) IsNil() bool {\n\ta.mu.Lock()\n\tdefer a.mu.Unlock()\n\treturn a.value == nil\n}\n\nfunc (a *AtomicPtr[T]) Clone() *T {\n\ta.mu.Lock()\n\tdefer a.mu.Unlock()\n\treturn clone(a.value)\n}\n\nfunc clone[T any](v *T) *T {\n\tvar buf bytes.Buffer\n\tenc := json.NewEncoder(&buf)\n\tif err := enc.Encode(v); err != nil {\n\t\tlog.Fatalf(\"encoding %T, %s\", v, err)\n\t}\n\tdec := json.NewDecoder(&buf)\n\tvar cp T\n\tif err := dec.Decode(&cp); err != nil {\n\t\tlog.Fatalf(\"encoding %T, %s\", v, err)\n\t}\n\treturn &cp\n}\n\nfunc (a *AtomicPtr[T]) Reset() {\n\ta.mu.Lock()\n\tdefer a.mu.Unlock()\n\ta.value = nil\n}\n\ntype AtomicError struct {\n\tmu  sync.Mutex\n\terr error\n\n\tcalls    int\n\tmaxCalls int\n}\n\nfunc (e *AtomicError) Reset() {\n\te.mu.Lock()\n\tdefer e.mu.Unlock()\n\te.err = nil\n\te.calls = 0\n\te.maxCalls = 0\n}\n\nfunc (e *AtomicError) IsNil() bool {\n\te.mu.Lock()\n\tdefer e.mu.Unlock()\n\treturn e.err == nil\n}\n\n// Get is equivalent to the error being called, so we increase\n// number of calls in this function\nfunc (e *AtomicError) Get() error {\n\te.mu.Lock()\n\tdefer e.mu.Unlock()\n\tif e.calls >= e.maxCalls {\n\t\treturn nil\n\t}\n\te.calls++\n\treturn e.err\n}\n\nfunc (e *AtomicError) Set(err error, opts ...AtomicErrorOption) {\n\te.mu.Lock()\n\tdefer e.mu.Unlock()\n\te.err = err\n\tfor _, opt := range opts {\n\t\topt(e)\n\t}\n\tif e.maxCalls == 0 {\n\t\te.maxCalls = 1\n\t}\n}\n\ntype AtomicErrorOption func(atomicError *AtomicError)\n\nfunc MaxCalls(maxCalls int) AtomicErrorOption {\n\t// Setting to 0 is equivalent to allowing infinite errors to API\n\tif maxCalls <= 0 {\n\t\tmaxCalls = math.MaxInt\n\t}\n\treturn func(e *AtomicError) {\n\t\te.maxCalls = maxCalls\n\t}\n}\n\n// AtomicPtrSlice exposes a slice of a pointer type in a race-free manner. The interface is just enough to replace the\n// set.Set usage in our previous tests.\ntype AtomicPtrSlice[T any] struct {\n\tmu     sync.RWMutex\n\tvalues []*T\n}\n\nfunc (a *AtomicPtrSlice[T]) Reset() {\n\ta.mu.Lock()\n\tdefer a.mu.Unlock()\n\ta.values = nil\n}\n\nfunc (a *AtomicPtrSlice[T]) Add(input *T) {\n\ta.mu.Lock()\n\tdefer a.mu.Unlock()\n\ta.values = append(a.values, clone(input))\n}\n\nfunc (a *AtomicPtrSlice[T]) Len() int {\n\ta.mu.RLock()\n\tdefer a.mu.RUnlock()\n\treturn len(a.values)\n}\n\nfunc (a *AtomicPtrSlice[T]) Pop() *T {\n\ta.mu.Lock()\n\tdefer a.mu.Unlock()\n\n\tlast := a.values[len(a.values)-1]\n\ta.values = a.values[0 : len(a.values)-1]\n\treturn clone(last)\n}\n\nfunc (a *AtomicPtrSlice[T]) At(index int) *T {\n\ta.mu.Lock()\n\tdefer a.mu.Unlock()\n\n\treturn clone(a.values[index])\n}\n\nfunc (a *AtomicPtrSlice[T]) ForEach(fn func(*T)) {\n\ta.mu.RLock()\n\tdefer a.mu.RUnlock()\n\tfor _, t := range a.values {\n\t\tfn(clone(t))\n\t}\n}\n"
  },
  {
    "path": "pkg/fake/cloudprovider.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage fake\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go-v2/service/ec2\"\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\t\"github.com/aws/aws-sdk-go-v2/service/pricing\"\n\t\"github.com/awslabs/operatorpkg/status\"\n\t\"github.com/samber/lo\"\n\tmetav1 \"k8s.io/apimachinery/pkg/apis/meta/v1\"\n\n\tkarpv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n\tcorecloudprovider \"sigs.k8s.io/karpenter/pkg/cloudprovider\"\n\t\"sigs.k8s.io/karpenter/pkg/test\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n)\n\nconst (\n\tDefaultRegion  = \"us-west-2\"\n\tDefaultAccount = \"123456789\"\n)\n\nvar _ corecloudprovider.CloudProvider = (*CloudProvider)(nil)\n\ntype CloudProvider struct {\n\tInstanceTypes []*corecloudprovider.InstanceType\n\tValidAMIs     []string\n}\n\nfunc (c *CloudProvider) Create(_ context.Context, _ *karpv1.NodeClaim) (*karpv1.NodeClaim, error) {\n\tname := test.RandomName()\n\treturn &karpv1.NodeClaim{\n\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\tName: name,\n\t\t},\n\t\tStatus: karpv1.NodeClaimStatus{\n\t\t\tProviderID: RandomProviderID(),\n\t\t},\n\t}, nil\n}\n\nfunc (c *CloudProvider) GetInstanceTypes(_ context.Context, _ *karpv1.NodePool) ([]*corecloudprovider.InstanceType, error) {\n\tif c.InstanceTypes != nil {\n\t\treturn c.InstanceTypes, nil\n\t}\n\treturn []*corecloudprovider.InstanceType{\n\t\t{Name: \"default-instance-type\"},\n\t}, nil\n}\n\nfunc (c *CloudProvider) IsDrifted(_ context.Context, nodeClaim *karpv1.NodeClaim) (corecloudprovider.DriftReason, error) {\n\treturn \"drifted\", nil\n}\n\nfunc (c *CloudProvider) Get(context.Context, string) (*karpv1.NodeClaim, error) {\n\treturn nil, nil\n}\n\nfunc (c *CloudProvider) List(context.Context) ([]*karpv1.NodeClaim, error) {\n\treturn nil, nil\n}\n\nfunc (c *CloudProvider) Delete(context.Context, *karpv1.NodeClaim) error {\n\treturn nil\n}\n\nfunc (c *CloudProvider) DisruptionReasons() []karpv1.DisruptionReason {\n\treturn nil\n}\n\n// Name returns the CloudProvider implementation name.\nfunc (c *CloudProvider) Name() string {\n\treturn \"fake\"\n}\n\nfunc (c *CloudProvider) GetSupportedNodeClasses() []status.Object {\n\treturn []status.Object{&v1.EC2NodeClass{}}\n}\n\nfunc (c *CloudProvider) RepairPolicies() []corecloudprovider.RepairPolicy {\n\treturn []corecloudprovider.RepairPolicy{}\n}\n\n// GenerateDefaultPriceOutput generates default output that can be set on the pricing provider\n// if a test needs pricing data and is just using the default instance types\nfunc GenerateDefaultPriceOutput() (*ec2.DescribeSpotPriceHistoryOutput, *pricing.GetProductsOutput) {\n\tvar priceList []string\n\todPrice := map[ec2types.InstanceType]float64{}\n\tfor _, elem := range defaultDescribeInstanceTypesOutput.InstanceTypes {\n\t\todPrice[elem.InstanceType] = float64(int64(lo.FromPtr[int32](elem.VCpuInfo.DefaultVCpus)) + lo.FromPtr[int64](elem.MemoryInfo.SizeInMiB))\n\t\tpriceList = append(priceList, NewOnDemandPrice(string(elem.InstanceType), odPrice[elem.InstanceType]))\n\t}\n\tvar spotPriceHistory []ec2types.SpotPrice\n\tfor _, elem := range defaultDescribeInstanceTypeOfferingsOutput.InstanceTypeOfferings {\n\t\tspotPriceHistory = append(spotPriceHistory, ec2types.SpotPrice{\n\t\t\tInstanceType:     elem.InstanceType,\n\t\t\tAvailabilityZone: elem.Location,\n\t\t\t// Model spot pricing as 70% of OD pricing\n\t\t\tSpotPrice: lo.ToPtr(fmt.Sprint(odPrice[elem.InstanceType] * 0.7)),\n\t\t\tTimestamp: lo.ToPtr(time.Now()),\n\t\t})\n\t}\n\treturn &ec2.DescribeSpotPriceHistoryOutput{SpotPriceHistory: spotPriceHistory}, &pricing.GetProductsOutput{PriceList: priceList}\n}\n"
  },
  {
    "path": "pkg/fake/ec2api.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage fake\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\t\"strings\"\n\t\"sync\"\n\t\"time\"\n\n\t\"github.com/Pallinder/go-randomdata\"\n\t\"github.com/aws/aws-sdk-go-v2/aws\"\n\t\"github.com/aws/aws-sdk-go-v2/service/ec2\"\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\t\"github.com/aws/smithy-go\"\n\t\"github.com/awslabs/operatorpkg/serrors\"\n\t\"github.com/samber/lo\"\n\t\"k8s.io/apimachinery/pkg/util/sets\"\n\tkarpv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n\n\tsdk \"github.com/aws/karpenter-provider-aws/pkg/aws\"\n\n\t\"sigs.k8s.io/karpenter/pkg/test\"\n\t\"sigs.k8s.io/karpenter/pkg/utils/atomic\"\n)\n\ntype CapacityPool struct {\n\tCapacityType  string\n\tInstanceType  string\n\tZone          string\n\tReservationID string\n}\n\n// EC2Behavior must be reset between tests otherwise tests will\n// pollute each other.\ntype EC2Behavior struct {\n\tDescribeCapacityReservationsOutput  AtomicPtr[ec2.DescribeCapacityReservationsOutput]\n\tDescribeImagesOutput                AtomicPtr[ec2.DescribeImagesOutput]\n\tDescribeLaunchTemplatesOutput       AtomicPtr[ec2.DescribeLaunchTemplatesOutput]\n\tDescribeInstanceTypesOutput         AtomicPtr[ec2.DescribeInstanceTypesOutput]\n\tDescribeInstanceTypeOfferingsOutput AtomicPtr[ec2.DescribeInstanceTypeOfferingsOutput]\n\tDescribeAvailabilityZonesOutput     AtomicPtr[ec2.DescribeAvailabilityZonesOutput]\n\tDescribeSubnetsBehavior             MockedFunction[ec2.DescribeSubnetsInput, ec2.DescribeSubnetsOutput]\n\tDescribeSecurityGroupsBehavior      MockedFunction[ec2.DescribeSecurityGroupsInput, ec2.DescribeSecurityGroupsOutput]\n\tDescribeSpotPriceHistoryBehavior    MockedFunction[ec2.DescribeSpotPriceHistoryInput, ec2.DescribeSpotPriceHistoryOutput]\n\tCreateFleetBehavior                 MockedFunction[ec2.CreateFleetInput, ec2.CreateFleetOutput]\n\tTerminateInstancesBehavior          MockedFunction[ec2.TerminateInstancesInput, ec2.TerminateInstancesOutput]\n\tDescribeInstancesBehavior           MockedFunction[ec2.DescribeInstancesInput, ec2.DescribeInstancesOutput]\n\tCreateTagsBehavior                  MockedFunction[ec2.CreateTagsInput, ec2.CreateTagsOutput]\n\tRunInstancesBehavior                MockedFunction[ec2.RunInstancesInput, ec2.RunInstancesOutput]\n\tCreateLaunchTemplateBehavior        MockedFunction[ec2.CreateLaunchTemplateInput, ec2.CreateLaunchTemplateOutput]\n\tCalledWithDescribeImagesInput       AtomicPtrSlice[ec2.DescribeImagesInput]\n\tInstances                           sync.Map\n\tInsufficientCapacityPools           atomic.Slice[CapacityPool]\n\tNextError                           AtomicError\n\n\tSubnets                               sync.Map\n\tLaunchTemplates                       sync.Map\n\tlaunchTemplatesToCapacityReservations sync.Map // map[lt-name]cr-id\n}\n\ntype EC2API struct {\n\tsdk.EC2API\n\tEC2Behavior\n}\n\nfunc NewEC2API() *EC2API {\n\treturn &EC2API{}\n}\n\n// DefaultSupportedUsageClasses is a var because []*string can't be a const\nvar DefaultSupportedUsageClasses = []ec2types.UsageClassType{ec2types.UsageClassType(\"on-demand\"), ec2types.UsageClassType(\"spot\")}\n\n// Reset must be called between tests otherwise tests will pollute\n// each other.\nfunc (e *EC2API) Reset() {\n\te.DescribeImagesOutput.Reset()\n\te.DescribeLaunchTemplatesOutput.Reset()\n\te.DescribeInstanceTypesOutput.Reset()\n\te.DescribeInstanceTypeOfferingsOutput.Reset()\n\te.DescribeAvailabilityZonesOutput.Reset()\n\te.DescribeSubnetsBehavior.Reset()\n\te.DescribeSecurityGroupsBehavior.Reset()\n\te.CreateFleetBehavior.Reset()\n\te.TerminateInstancesBehavior.Reset()\n\te.DescribeInstancesBehavior.Reset()\n\te.CreateLaunchTemplateBehavior.Reset()\n\te.CalledWithDescribeImagesInput.Reset()\n\te.DescribeSpotPriceHistoryBehavior.Reset()\n\te.Subnets.Range(func(k, v any) bool {\n\t\te.Subnets.Delete(k)\n\t\treturn true\n\t})\n\te.Instances.Range(func(k, v any) bool {\n\t\te.Instances.Delete(k)\n\t\treturn true\n\t})\n\te.LaunchTemplates.Range(func(k, v any) bool {\n\t\te.LaunchTemplates.Delete(k)\n\t\treturn true\n\t})\n\te.InsufficientCapacityPools.Reset()\n\te.NextError.Reset()\n\n\te.launchTemplatesToCapacityReservations.Range(func(k, _ any) bool {\n\t\te.launchTemplatesToCapacityReservations.Delete(k)\n\t\treturn true\n\t})\n\te.RunInstancesBehavior.Reset()\n}\n\n// nolint: gocyclo\nfunc (e *EC2API) CreateFleet(_ context.Context, input *ec2.CreateFleetInput, _ ...func(*ec2.Options)) (*ec2.CreateFleetOutput, error) {\n\treturn e.CreateFleetBehavior.Invoke(input, func(input *ec2.CreateFleetInput) (*ec2.CreateFleetOutput, error) {\n\t\tif input.DryRun != nil && *input.DryRun {\n\t\t\terr := e.CreateFleetBehavior.Error.Get()\n\t\t\tif err == nil {\n\t\t\t\treturn &ec2.CreateFleetOutput{}, &smithy.GenericAPIError{\n\t\t\t\t\tCode:    \"DryRunOperation\",\n\t\t\t\t\tMessage: \"Request would have succeeded, but DryRun flag is set\",\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn nil, err\n\t\t}\n\n\t\tif input.LaunchTemplateConfigs[0].LaunchTemplateSpecification.LaunchTemplateName == nil {\n\t\t\treturn nil, fmt.Errorf(\"missing launch template name\")\n\t\t}\n\t\tvar instanceIds []string\n\t\tvar icedPools []CapacityPool\n\t\tvar reservationExceededPools []CapacityPool\n\t\tvar spotInstanceRequestID *string\n\n\t\tif string(input.TargetCapacitySpecification.DefaultTargetCapacityType) == karpv1.CapacityTypeSpot {\n\t\t\tspotInstanceRequestID = aws.String(test.RandomName())\n\t\t}\n\n\t\tfulfilled := 0\n\t\tfor _, ltc := range input.LaunchTemplateConfigs {\n\t\t\tfor _, override := range ltc.Overrides {\n\t\t\t\tskipInstance := false\n\t\t\t\te.InsufficientCapacityPools.Range(func(pool CapacityPool) bool {\n\t\t\t\t\tif pool.InstanceType == string(override.InstanceType) &&\n\t\t\t\t\t\tpool.Zone == aws.ToString(override.AvailabilityZone) &&\n\t\t\t\t\t\tpool.CapacityType == string(input.TargetCapacitySpecification.DefaultTargetCapacityType) {\n\t\t\t\t\t\ticedPools = append(icedPools, pool)\n\t\t\t\t\t\tskipInstance = true\n\t\t\t\t\t\treturn false\n\t\t\t\t\t}\n\t\t\t\t\treturn true\n\t\t\t\t})\n\t\t\t\tif skipInstance {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tif crID, ok := e.launchTemplatesToCapacityReservations.Load(*ltc.LaunchTemplateSpecification.LaunchTemplateName); ok {\n\t\t\t\t\tif cr, ok := lo.Find(e.DescribeCapacityReservationsOutput.Clone().CapacityReservations, func(cr ec2types.CapacityReservation) bool {\n\t\t\t\t\t\treturn *cr.CapacityReservationId == crID.(string)\n\t\t\t\t\t}); !ok || *cr.AvailableInstanceCount == 0 {\n\t\t\t\t\t\treservationExceededPools = append(reservationExceededPools, CapacityPool{\n\t\t\t\t\t\t\tInstanceType:  string(override.InstanceType),\n\t\t\t\t\t\t\tZone:          lo.FromPtr(override.AvailabilityZone),\n\t\t\t\t\t\t\tCapacityType:  karpv1.CapacityTypeReserved,\n\t\t\t\t\t\t\tReservationID: crID.(string),\n\t\t\t\t\t\t})\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tamiID := lo.ToPtr(\"\")\n\t\t\t\tif e.CreateLaunchTemplateBehavior.CalledWithInput.Len() > 0 {\n\t\t\t\t\tlt := e.CreateLaunchTemplateBehavior.CalledWithInput.Pop()\n\t\t\t\t\tamiID = lt.LaunchTemplateData.ImageId\n\t\t\t\t\te.CreateLaunchTemplateBehavior.CalledWithInput.Add(lt)\n\t\t\t\t}\n\t\t\t\tinstanceState := ec2types.InstanceStateNameRunning\n\t\t\t\tfor ; fulfilled < int(*input.TargetCapacitySpecification.TotalTargetCapacity); fulfilled++ {\n\t\t\t\t\tinstance := ec2types.Instance{\n\t\t\t\t\t\tImageId:               aws.String(*amiID),\n\t\t\t\t\t\tInstanceId:            aws.String(test.RandomName()),\n\t\t\t\t\t\tPlacement:             &ec2types.Placement{AvailabilityZone: input.LaunchTemplateConfigs[0].Overrides[0].AvailabilityZone},\n\t\t\t\t\t\tPrivateDnsName:        aws.String(randomdata.IpV4Address()),\n\t\t\t\t\t\tInstanceType:          input.LaunchTemplateConfigs[0].Overrides[0].InstanceType,\n\t\t\t\t\t\tSpotInstanceRequestId: spotInstanceRequestID,\n\t\t\t\t\t\tState: &ec2types.InstanceState{\n\t\t\t\t\t\t\tName: instanceState,\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\t\t\t\t\te.Instances.Store(*instance.InstanceId, instance)\n\t\t\t\t\tinstanceIds = append(instanceIds, *instance.InstanceId)\n\t\t\t\t}\n\t\t\t}\n\t\t\tif fulfilled == int(*input.TargetCapacitySpecification.TotalTargetCapacity) {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tresult := &ec2.CreateFleetOutput{Instances: []ec2types.CreateFleetInstance{\n\t\t\t{\n\t\t\t\tInstanceIds:  instanceIds,\n\t\t\t\tInstanceType: input.LaunchTemplateConfigs[0].Overrides[0].InstanceType,\n\t\t\t\tLifecycle:    ec2types.InstanceLifecycle(input.TargetCapacitySpecification.DefaultTargetCapacityType),\n\t\t\t\tLaunchTemplateAndOverrides: &ec2types.LaunchTemplateAndOverridesResponse{\n\t\t\t\t\tOverrides: &ec2types.FleetLaunchTemplateOverrides{\n\t\t\t\t\t\tSubnetId:         input.LaunchTemplateConfigs[0].Overrides[0].SubnetId,\n\t\t\t\t\t\tImageId:          input.LaunchTemplateConfigs[0].Overrides[0].ImageId,\n\t\t\t\t\t\tInstanceType:     input.LaunchTemplateConfigs[0].Overrides[0].InstanceType,\n\t\t\t\t\t\tAvailabilityZone: input.LaunchTemplateConfigs[0].Overrides[0].AvailabilityZone,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}}\n\t\tfor _, pool := range icedPools {\n\t\t\tresult.Errors = append(result.Errors, ec2types.CreateFleetError{\n\t\t\t\tErrorCode: aws.String(\"InsufficientInstanceCapacity\"),\n\t\t\t\tLaunchTemplateAndOverrides: &ec2types.LaunchTemplateAndOverridesResponse{\n\t\t\t\t\tOverrides: &ec2types.FleetLaunchTemplateOverrides{\n\t\t\t\t\t\tInstanceType:     ec2types.InstanceType(pool.InstanceType),\n\t\t\t\t\t\tAvailabilityZone: aws.String(pool.Zone),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t})\n\t\t}\n\t\tfor _, pool := range reservationExceededPools {\n\t\t\tresult.Errors = append(result.Errors, ec2types.CreateFleetError{\n\t\t\t\tErrorCode: lo.ToPtr(\"ReservationCapacityExceeded\"),\n\t\t\t\tLaunchTemplateAndOverrides: &ec2types.LaunchTemplateAndOverridesResponse{\n\t\t\t\t\tOverrides: &ec2types.FleetLaunchTemplateOverrides{\n\t\t\t\t\t\tInstanceType:     ec2types.InstanceType(pool.InstanceType),\n\t\t\t\t\t\tAvailabilityZone: lo.ToPtr(pool.Zone),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t})\n\t\t}\n\t\treturn result, nil\n\t})\n}\n\nfunc (e *EC2API) TerminateInstances(_ context.Context, input *ec2.TerminateInstancesInput, _ ...func(*ec2.Options)) (*ec2.TerminateInstancesOutput, error) {\n\treturn e.TerminateInstancesBehavior.Invoke(input, func(input *ec2.TerminateInstancesInput) (*ec2.TerminateInstancesOutput, error) {\n\t\tvar instanceStateChanges []ec2types.InstanceStateChange\n\t\tfor _, id := range input.InstanceIds {\n\t\t\tif _, ok := e.Instances.LoadAndDelete(id); ok {\n\t\t\t\tinstanceStateChanges = append(instanceStateChanges, ec2types.InstanceStateChange{\n\t\t\t\t\tPreviousState: &ec2types.InstanceState{Name: ec2types.InstanceStateNameRunning, Code: aws.Int32(16)},\n\t\t\t\t\tCurrentState:  &ec2types.InstanceState{Name: ec2types.InstanceStateNameShuttingDown, Code: aws.Int32(32)},\n\t\t\t\t\tInstanceId:    aws.String(id),\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t\treturn &ec2.TerminateInstancesOutput{TerminatingInstances: instanceStateChanges}, nil\n\t})\n}\n\n// Then modify the CreateLaunchTemplate method:\nfunc (e *EC2API) CreateLaunchTemplate(ctx context.Context, input *ec2.CreateLaunchTemplateInput, _ ...func(*ec2.Options)) (*ec2.CreateLaunchTemplateOutput, error) {\n\treturn e.CreateLaunchTemplateBehavior.Invoke(input, func(input *ec2.CreateLaunchTemplateInput) (*ec2.CreateLaunchTemplateOutput, error) {\n\t\tif input.DryRun != nil && *input.DryRun {\n\t\t\terr := e.CreateLaunchTemplateBehavior.Error.Get()\n\t\t\tif err == nil {\n\t\t\t\treturn &ec2.CreateLaunchTemplateOutput{}, &smithy.GenericAPIError{\n\t\t\t\t\tCode:    \"DryRunOperation\",\n\t\t\t\t\tMessage: \"Request would have succeeded, but DryRun flag is set\",\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn nil, err\n\t\t}\n\t\tif !e.NextError.IsNil() {\n\t\t\tdefer e.NextError.Reset()\n\t\t\treturn nil, e.NextError.Get()\n\t\t}\n\t\tlaunchTemplate := ec2types.LaunchTemplate{LaunchTemplateName: input.LaunchTemplateName}\n\t\te.LaunchTemplates.Store(input.LaunchTemplateName, launchTemplate)\n\t\tif crs := input.LaunchTemplateData.CapacityReservationSpecification; crs != nil && crs.CapacityReservationPreference == ec2types.CapacityReservationPreferenceCapacityReservationsOnly {\n\t\t\te.launchTemplatesToCapacityReservations.Store(*input.LaunchTemplateName, *crs.CapacityReservationTarget.CapacityReservationId)\n\t\t}\n\t\treturn &ec2.CreateLaunchTemplateOutput{LaunchTemplate: lo.ToPtr(launchTemplate)}, nil\n\t})\n}\n\nfunc (e *EC2API) CreateTags(_ context.Context, input *ec2.CreateTagsInput, _ ...func(*ec2.Options)) (*ec2.CreateTagsOutput, error) {\n\treturn e.CreateTagsBehavior.Invoke(input, func(input *ec2.CreateTagsInput) (*ec2.CreateTagsOutput, error) {\n\t\t// Update passed in instances with the passed tags\n\t\tfor _, id := range input.Resources {\n\t\t\traw, ok := e.Instances.Load(id)\n\t\t\tif !ok {\n\t\t\t\treturn nil, serrors.Wrap(fmt.Errorf(\"instance does not exist\"), \"instance-id\", id)\n\t\t\t}\n\t\t\tinstance := raw.(ec2types.Instance)\n\n\t\t\t// Upsert any tags that have the same key\n\t\t\ttagsToMap := func(tag ec2types.Tag) (string, string) {\n\t\t\t\treturn *tag.Key, *tag.Value\n\t\t\t}\n\t\t\ttags := lo.Assign(lo.SliceToMap(instance.Tags, tagsToMap), lo.SliceToMap(input.Tags, tagsToMap))\n\t\t\tinstance.Tags = lo.MapToSlice(tags, func(key, value string) ec2types.Tag {\n\t\t\t\treturn ec2types.Tag{Key: aws.String(key), Value: aws.String(value)}\n\t\t\t})\n\t\t\te.Instances.Swap(lo.FromPtr(instance.InstanceId), instance)\n\t\t}\n\t\treturn nil, nil\n\t})\n}\n\nfunc (e *EC2API) DescribeInstances(_ context.Context, input *ec2.DescribeInstancesInput, _ ...func(*ec2.Options)) (*ec2.DescribeInstancesOutput, error) {\n\treturn e.DescribeInstancesBehavior.Invoke(input, func(input *ec2.DescribeInstancesInput) (*ec2.DescribeInstancesOutput, error) {\n\t\tvar instances []ec2types.Instance\n\n\t\t// If it's a list call and no instance ids are specified\n\t\tif len(input.InstanceIds) == 0 {\n\t\t\te.Instances.Range(func(k any, v any) bool {\n\t\t\t\tinstances = append(instances, v.(ec2types.Instance))\n\t\t\t\treturn true\n\t\t\t})\n\t\t}\n\t\tfor _, instanceID := range input.InstanceIds {\n\t\t\tinstance, _ := e.Instances.Load(instanceID)\n\t\t\tif instance == nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tinstances = append(instances, instance.(ec2types.Instance))\n\t\t}\n\t\treturn &ec2.DescribeInstancesOutput{\n\t\t\tReservations: []ec2types.Reservation{{Instances: filterInstances(instances, input.Filters)}},\n\t\t}, nil\n\t})\n}\n\n//nolint:gocyclo\nfunc filterInstances(instances []ec2types.Instance, filters []ec2types.Filter) []ec2types.Instance {\n\tvar ret []ec2types.Instance\n\tfor _, instance := range instances {\n\t\tpassesFilter := true\n\tOUTER:\n\t\tfor _, filter := range filters {\n\t\t\tswitch {\n\t\t\tcase aws.ToString(filter.Name) == \"instance-state-name\":\n\t\t\t\tif !sets.New(filter.Values...).Has(string(instance.State.Name)) {\n\t\t\t\t\tpassesFilter = false\n\t\t\t\t\tbreak OUTER\n\t\t\t\t}\n\t\t\tcase aws.ToString(filter.Name) == \"tag-key\":\n\t\t\t\tvalues := sets.New(filter.Values...)\n\t\t\t\tif _, ok := lo.Find(instance.Tags, func(t ec2types.Tag) bool {\n\t\t\t\t\treturn values.Has(aws.ToString(t.Key))\n\t\t\t\t}); !ok {\n\t\t\t\t\tpassesFilter = false\n\t\t\t\t\tbreak OUTER\n\t\t\t\t}\n\t\t\tcase strings.HasPrefix(aws.ToString(filter.Name), \"tag:\"):\n\t\t\t\tk := strings.TrimPrefix(aws.ToString(filter.Name), \"tag:\")\n\t\t\t\ttag, ok := lo.Find(instance.Tags, func(t ec2types.Tag) bool {\n\t\t\t\t\treturn aws.ToString(t.Key) == k\n\t\t\t\t})\n\t\t\t\tif !ok {\n\t\t\t\t\tpassesFilter = false\n\t\t\t\t\tbreak OUTER\n\t\t\t\t}\n\t\t\t\tswitch {\n\t\t\t\tcase lo.Contains(filter.Values, \"*\"):\n\t\t\t\tcase lo.Contains(filter.Values, aws.ToString(tag.Value)):\n\t\t\t\tdefault:\n\t\t\t\t\tpassesFilter = false\n\t\t\t\t\tbreak OUTER\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif passesFilter {\n\t\t\tret = append(ret, instance)\n\t\t}\n\t}\n\treturn ret\n}\n\nfunc (e *EC2API) DescribeCapacityReservations(ctx context.Context, input *ec2.DescribeCapacityReservationsInput, _ ...func(*ec2.Options)) (*ec2.DescribeCapacityReservationsOutput, error) {\n\tif !e.NextError.IsNil() {\n\t\tdefer e.NextError.Reset()\n\t\treturn nil, e.NextError.Get()\n\t}\n\tif !e.DescribeCapacityReservationsOutput.IsNil() {\n\t\tout := e.DescribeCapacityReservationsOutput.Clone()\n\t\tout.CapacityReservations = FilterDescribeCapacityReservations(out.CapacityReservations, input.CapacityReservationIds, input.Filters)\n\t\treturn out, nil\n\t}\n\treturn &ec2.DescribeCapacityReservationsOutput{}, nil\n}\n\nfunc (e *EC2API) DescribeImages(ctx context.Context, input *ec2.DescribeImagesInput, _ ...func(*ec2.Options)) (*ec2.DescribeImagesOutput, error) {\n\tif !e.NextError.IsNil() {\n\t\tdefer e.NextError.Reset()\n\t\treturn nil, e.NextError.Get()\n\t}\n\te.CalledWithDescribeImagesInput.Add(input)\n\tif !e.DescribeImagesOutput.IsNil() {\n\t\tdescribeImagesOutput := e.DescribeImagesOutput.Clone()\n\n\t\tdescribeImagesOutput.Images = FilterDescribeImages(describeImagesOutput.Images, input.Filters)\n\t\treturn describeImagesOutput, nil\n\t}\n\tif input.Filters != nil && input.Filters[0].Values[0] == \"invalid\" {\n\t\treturn &ec2.DescribeImagesOutput{}, nil\n\t}\n\treturn &ec2.DescribeImagesOutput{\n\t\tImages: []ec2types.Image{\n\t\t\t{\n\t\t\t\tName:         aws.String(test.RandomName()),\n\t\t\t\tImageId:      aws.String(test.RandomName()),\n\t\t\t\tCreationDate: aws.String(time.Now().Format(time.UnixDate)),\n\t\t\t\tArchitecture: \"x86_64\",\n\t\t\t\tState:        ec2types.ImageStateAvailable,\n\t\t\t},\n\t\t},\n\t}, nil\n}\n\nfunc (e *EC2API) DescribeLaunchTemplates(_ context.Context, input *ec2.DescribeLaunchTemplatesInput, _ ...func(*ec2.Options)) (*ec2.DescribeLaunchTemplatesOutput, error) {\n\tif !e.NextError.IsNil() {\n\t\tdefer e.NextError.Reset()\n\t\treturn nil, e.NextError.Get()\n\t}\n\tif !e.DescribeLaunchTemplatesOutput.IsNil() {\n\t\treturn e.DescribeLaunchTemplatesOutput.Clone(), nil\n\t}\n\toutput := &ec2.DescribeLaunchTemplatesOutput{}\n\te.LaunchTemplates.Range(func(key, value any) bool {\n\t\tlaunchTemplate := value.(ec2types.LaunchTemplate)\n\t\tif lo.Contains(input.LaunchTemplateNames, lo.FromPtr(launchTemplate.LaunchTemplateName)) || len(input.Filters) != 0 && Filter(input.Filters, aws.ToString(launchTemplate.LaunchTemplateId), aws.ToString(launchTemplate.LaunchTemplateName), \"\", \"\", launchTemplate.Tags) {\n\t\t\toutput.LaunchTemplates = append(output.LaunchTemplates, launchTemplate)\n\t\t}\n\t\treturn true\n\t})\n\tif len(input.Filters) != 0 {\n\t\treturn output, nil\n\t}\n\tif len(output.LaunchTemplates) == 0 {\n\t\treturn nil, &smithy.GenericAPIError{\n\t\t\tCode:    \"InvalidLaunchTemplateName.NotFoundException\",\n\t\t\tMessage: \"At least one of the launch templates specified in the request does not exist.\",\n\t\t}\n\t}\n\treturn output, nil\n}\n\nfunc (e *EC2API) DeleteLaunchTemplate(_ context.Context, input *ec2.DeleteLaunchTemplateInput, _ ...func(*ec2.Options)) (*ec2.DeleteLaunchTemplateOutput, error) {\n\tif !e.NextError.IsNil() {\n\t\tdefer e.NextError.Reset()\n\t\treturn nil, e.NextError.Get()\n\t}\n\te.LaunchTemplates.Delete(input.LaunchTemplateName)\n\treturn nil, nil\n}\n\nfunc (e *EC2API) DescribeSubnets(_ context.Context, input *ec2.DescribeSubnetsInput, _ ...func(*ec2.Options)) (*ec2.DescribeSubnetsOutput, error) {\n\treturn e.DescribeSubnetsBehavior.Invoke(input, func(input *ec2.DescribeSubnetsInput) (*ec2.DescribeSubnetsOutput, error) {\n\t\toutput := &ec2.DescribeSubnetsOutput{}\n\t\te.Subnets.Range(func(key, value any) bool {\n\t\t\tsubnet := value.(ec2types.Subnet)\n\t\t\tif lo.Contains(input.SubnetIds, lo.FromPtr(subnet.SubnetId)) || len(input.Filters) != 0 && len(FilterDescribeSubnets([]ec2types.Subnet{subnet}, input.Filters)) != 0 {\n\t\t\t\toutput.Subnets = append(output.Subnets, subnet)\n\t\t\t}\n\t\t\treturn true\n\t\t})\n\t\tif len(output.Subnets) != 0 {\n\t\t\treturn output, nil\n\t\t}\n\n\t\tdefaultSubnets := []ec2types.Subnet{\n\t\t\t{\n\t\t\t\tSubnetId:                aws.String(\"subnet-test1\"),\n\t\t\t\tAvailabilityZone:        aws.String(\"test-zone-1a\"),\n\t\t\t\tAvailabilityZoneId:      aws.String(\"tstz1-1a\"),\n\t\t\t\tAvailableIpAddressCount: aws.Int32(100),\n\t\t\t\tMapPublicIpOnLaunch:     aws.Bool(false),\n\t\t\t\tTags: []ec2types.Tag{\n\t\t\t\t\t{Key: aws.String(\"Name\"), Value: aws.String(\"test-subnet-1\")},\n\t\t\t\t\t{Key: aws.String(\"foo\"), Value: aws.String(\"bar\")},\n\t\t\t\t},\n\t\t\t\tVpcId: aws.String(\"vpc-test1\"),\n\t\t\t},\n\t\t\t{\n\t\t\t\tSubnetId:                aws.String(\"subnet-test2\"),\n\t\t\t\tAvailabilityZone:        aws.String(\"test-zone-1b\"),\n\t\t\t\tAvailabilityZoneId:      aws.String(\"tstz1-1b\"),\n\t\t\t\tAvailableIpAddressCount: aws.Int32(100),\n\t\t\t\tMapPublicIpOnLaunch:     aws.Bool(true),\n\t\t\t\tTags: []ec2types.Tag{\n\t\t\t\t\t{Key: aws.String(\"Name\"), Value: aws.String(\"test-subnet-2\")},\n\t\t\t\t\t{Key: aws.String(\"foo\"), Value: aws.String(\"bar\")},\n\t\t\t\t},\n\t\t\t\tVpcId: aws.String(\"vpc-test1\"),\n\t\t\t},\n\t\t\t{\n\t\t\t\tSubnetId:                aws.String(\"subnet-test3\"),\n\t\t\t\tAvailabilityZone:        aws.String(\"test-zone-1c\"),\n\t\t\t\tAvailabilityZoneId:      aws.String(\"tstz1-1c\"),\n\t\t\t\tAvailableIpAddressCount: aws.Int32(100),\n\t\t\t\tTags: []ec2types.Tag{\n\t\t\t\t\t{Key: aws.String(\"Name\"), Value: aws.String(\"test-subnet-3\")},\n\t\t\t\t\t{Key: aws.String(\"TestTag\")},\n\t\t\t\t\t{Key: aws.String(\"foo\"), Value: aws.String(\"bar\")},\n\t\t\t\t},\n\t\t\t\tVpcId: aws.String(\"vpc-test1\"),\n\t\t\t},\n\t\t\t{\n\t\t\t\tSubnetId:                aws.String(\"subnet-test4\"),\n\t\t\t\tAvailabilityZone:        aws.String(\"test-zone-1a-local\"),\n\t\t\t\tAvailabilityZoneId:      aws.String(\"tstz1-1alocal\"),\n\t\t\t\tAvailableIpAddressCount: aws.Int32(100),\n\t\t\t\tMapPublicIpOnLaunch:     aws.Bool(true),\n\t\t\t\tTags: []ec2types.Tag{\n\t\t\t\t\t{Key: aws.String(\"Name\"), Value: aws.String(\"test-subnet-4\")},\n\t\t\t\t},\n\t\t\t\tVpcId: aws.String(\"vpc-test1\"),\n\t\t\t},\n\t\t}\n\t\tif len(input.Filters) == 0 {\n\t\t\treturn nil, fmt.Errorf(\"InvalidParameterValue: The filter 'null' is invalid\")\n\t\t}\n\t\treturn &ec2.DescribeSubnetsOutput{Subnets: FilterDescribeSubnets(defaultSubnets, input.Filters)}, nil\n\t})\n}\n\nfunc (e *EC2API) DescribeSecurityGroups(_ context.Context, input *ec2.DescribeSecurityGroupsInput, _ ...func(*ec2.Options)) (*ec2.DescribeSecurityGroupsOutput, error) {\n\treturn e.DescribeSecurityGroupsBehavior.Invoke(input, func(input *ec2.DescribeSecurityGroupsInput) (*ec2.DescribeSecurityGroupsOutput, error) {\n\t\tdefaultSecurityGroups := []ec2types.SecurityGroup{\n\t\t\t{\n\t\t\t\tGroupId:   aws.String(\"sg-test1\"),\n\t\t\t\tGroupName: aws.String(\"securityGroup-test1\"),\n\t\t\t\tTags: []ec2types.Tag{\n\t\t\t\t\t{Key: aws.String(\"Name\"), Value: aws.String(\"test-security-group-1\")},\n\t\t\t\t\t{Key: aws.String(\"foo\"), Value: aws.String(\"bar\")},\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tGroupId:   aws.String(\"sg-test2\"),\n\t\t\t\tGroupName: aws.String(\"securityGroup-test2\"),\n\t\t\t\tTags: []ec2types.Tag{\n\t\t\t\t\t{Key: aws.String(\"Name\"), Value: aws.String(\"test-security-group-2\")},\n\t\t\t\t\t{Key: aws.String(\"foo\"), Value: aws.String(\"bar\")},\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tGroupId:   aws.String(\"sg-test3\"),\n\t\t\t\tGroupName: aws.String(\"securityGroup-test3\"),\n\t\t\t\tTags: []ec2types.Tag{\n\t\t\t\t\t{Key: aws.String(\"Name\"), Value: aws.String(\"test-security-group-3\")},\n\t\t\t\t\t{Key: aws.String(\"TestTag\")},\n\t\t\t\t\t{Key: aws.String(\"foo\"), Value: aws.String(\"bar\")},\n\t\t\t\t},\n\t\t\t},\n\t\t}\n\t\tif len(input.Filters) == 0 {\n\t\t\treturn nil, fmt.Errorf(\"InvalidParameterValue: The filter 'null' is invalid\")\n\t\t}\n\t\treturn &ec2.DescribeSecurityGroupsOutput{SecurityGroups: FilterDescribeSecurtyGroups(defaultSecurityGroups, input.Filters)}, nil\n\t})\n}\n\nfunc (e *EC2API) DescribeAvailabilityZones(context.Context, *ec2.DescribeAvailabilityZonesInput, ...func(*ec2.Options)) (*ec2.DescribeAvailabilityZonesOutput, error) {\n\tif !e.NextError.IsNil() {\n\t\tdefer e.NextError.Reset()\n\t\treturn nil, e.NextError.Get()\n\t}\n\tif !e.DescribeAvailabilityZonesOutput.IsNil() {\n\t\treturn e.DescribeAvailabilityZonesOutput.Clone(), nil\n\t}\n\treturn &ec2.DescribeAvailabilityZonesOutput{AvailabilityZones: []ec2types.AvailabilityZone{\n\t\t{ZoneName: aws.String(\"test-zone-1a\"), ZoneId: aws.String(\"tstz1-1a\"), ZoneType: aws.String(\"availability-zone\")},\n\t\t{ZoneName: aws.String(\"test-zone-1b\"), ZoneId: aws.String(\"tstz1-1b\"), ZoneType: aws.String(\"availability-zone\")},\n\t\t{ZoneName: aws.String(\"test-zone-1c\"), ZoneId: aws.String(\"tstz1-1c\"), ZoneType: aws.String(\"availability-zone\")},\n\t\t{ZoneName: aws.String(\"test-zone-1a-local\"), ZoneId: aws.String(\"tstz1-1alocal\"), ZoneType: aws.String(\"local-zone\")},\n\t}}, nil\n}\n\nfunc (e *EC2API) DescribeInstanceTypes(_ context.Context, _ *ec2.DescribeInstanceTypesInput, _ ...func(*ec2.Options)) (*ec2.DescribeInstanceTypesOutput, error) {\n\tif !e.NextError.IsNil() {\n\t\tdefer e.NextError.Reset()\n\t\treturn nil, e.NextError.Get()\n\t}\n\tif !e.DescribeInstanceTypesOutput.IsNil() {\n\t\treturn e.DescribeInstanceTypesOutput.Clone(), nil\n\t}\n\treturn defaultDescribeInstanceTypesOutput, nil\n}\n\nfunc (e *EC2API) DescribeInstanceTypeOfferings(_ context.Context, _ *ec2.DescribeInstanceTypeOfferingsInput, _ ...func(*ec2.Options)) (*ec2.DescribeInstanceTypeOfferingsOutput, error) {\n\tif !e.NextError.IsNil() {\n\t\tdefer e.NextError.Reset()\n\t\treturn nil, e.NextError.Get()\n\t}\n\tif !e.DescribeInstanceTypeOfferingsOutput.IsNil() {\n\t\treturn e.DescribeInstanceTypeOfferingsOutput.Clone(), nil\n\t}\n\treturn defaultDescribeInstanceTypeOfferingsOutput, nil\n}\n\nfunc (e *EC2API) DescribeSpotPriceHistory(_ context.Context, input *ec2.DescribeSpotPriceHistoryInput, _ ...func(*ec2.Options)) (*ec2.DescribeSpotPriceHistoryOutput, error) {\n\treturn e.DescribeSpotPriceHistoryBehavior.Invoke(input, func(input *ec2.DescribeSpotPriceHistoryInput) (*ec2.DescribeSpotPriceHistoryOutput, error) {\n\t\t// fail if the test doesn't provide specific data which causes our pricing provider to use its static price list\n\t\treturn nil, errors.New(\"no pricing data provided\")\n\t})\n}\n\nfunc (e *EC2API) RunInstances(ctx context.Context, input *ec2.RunInstancesInput, optFns ...func(*ec2.Options)) (*ec2.RunInstancesOutput, error) {\n\treturn e.RunInstancesBehavior.Invoke(input, func(input *ec2.RunInstancesInput) (*ec2.RunInstancesOutput, error) {\n\t\tif !e.NextError.IsNil() {\n\t\t\tdefer e.NextError.Reset()\n\t\t\treturn nil, e.NextError.Get()\n\t\t}\n\t\tif lo.FromPtr(input.DryRun) {\n\t\t\treturn &ec2.RunInstancesOutput{}, &smithy.GenericAPIError{\n\t\t\t\tCode:    \"DryRunOperation\",\n\t\t\t\tMessage: \"Request would have succeeded, but DryRun flag is set\",\n\t\t\t}\n\t\t}\n\n\t\t// Default implementation\n\t\tinstance := ec2types.Instance{\n\t\t\tInstanceId:   aws.String(test.RandomName()),\n\t\t\tInstanceType: input.InstanceType,\n\t\t\tState:        &ec2types.InstanceState{Name: ec2types.InstanceStateNameRunning},\n\t\t\t// Add other required fields\n\t\t}\n\n\t\treturn &ec2.RunInstancesOutput{\n\t\t\tInstances: []ec2types.Instance{instance},\n\t\t}, nil\n\t})\n}\n"
  },
  {
    "path": "pkg/fake/eksapi.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage fake\n\nimport (\n\t\"context\"\n\n\t\"github.com/aws/aws-sdk-go-v2/service/eks\"\n\tekstypes \"github.com/aws/aws-sdk-go-v2/service/eks/types\"\n\t\"github.com/samber/lo\"\n\n\tsdk \"github.com/aws/karpenter-provider-aws/pkg/aws\"\n)\n\nconst ()\n\n// EKSAPIBehavior must be reset between tests otherwise tests will\n// pollute each other.\ntype EKSAPIBehavior struct {\n\tDescribeClusterBehavior MockedFunction[eks.DescribeClusterInput, eks.DescribeClusterOutput]\n}\n\ntype EKSAPI struct {\n\tsdk.EKSAPI\n\tEKSAPIBehavior\n}\n\nfunc NewEKSAPI() *EKSAPI {\n\treturn &EKSAPI{}\n}\n\n// Reset must be called between tests otherwise tests will pollute\n// each other.\nfunc (s *EKSAPI) Reset() {\n\ts.DescribeClusterBehavior.Reset()\n}\n\nfunc (s *EKSAPI) DescribeCluster(_ context.Context, input *eks.DescribeClusterInput, _ ...func(*eks.Options)) (*eks.DescribeClusterOutput, error) {\n\treturn s.DescribeClusterBehavior.Invoke(input, func(*eks.DescribeClusterInput) (*eks.DescribeClusterOutput, error) {\n\t\treturn &eks.DescribeClusterOutput{\n\t\t\tCluster: &ekstypes.Cluster{\n\t\t\t\tKubernetesNetworkConfig: &ekstypes.KubernetesNetworkConfigResponse{\n\t\t\t\t\tServiceIpv4Cidr: lo.ToPtr(\"10.100.0.0/16\"),\n\t\t\t\t},\n\t\t\t\tVersion: lo.ToPtr(\"1.29\"),\n\t\t\t},\n\t\t}, nil\n\t})\n}\n"
  },
  {
    "path": "pkg/fake/iamapi.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage fake\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"strings\"\n\t\"sync\"\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go-v2/aws\"\n\t\"github.com/aws/aws-sdk-go-v2/service/iam\"\n\tiamtypes \"github.com/aws/aws-sdk-go-v2/service/iam/types\"\n\t\"github.com/aws/smithy-go\"\n\t\"github.com/samber/lo\"\n\n\tsdk \"github.com/aws/karpenter-provider-aws/pkg/aws\"\n)\n\nconst ()\n\n// IAMAPIBehavior must be reset between tests otherwise tests will\n// pollute each other.\ntype IAMAPIBehavior struct {\n\tGetInstanceProfileBehavior            MockedFunction[iam.GetInstanceProfileInput, iam.GetInstanceProfileOutput]\n\tCreateInstanceProfileBehavior         MockedFunction[iam.CreateInstanceProfileInput, iam.CreateInstanceProfileOutput]\n\tDeleteInstanceProfileBehavior         MockedFunction[iam.DeleteInstanceProfileInput, iam.DeleteInstanceProfileOutput]\n\tAddRoleToInstanceProfileBehavior      MockedFunction[iam.AddRoleToInstanceProfileInput, iam.AddRoleToInstanceProfileOutput]\n\tTagInstanceProfileBehavior            MockedFunction[iam.TagInstanceProfileInput, iam.TagInstanceProfileOutput]\n\tRemoveRoleFromInstanceProfileBehavior MockedFunction[iam.RemoveRoleFromInstanceProfileInput, iam.RemoveRoleFromInstanceProfileOutput]\n\tListInstanceProfilesBehavior          MockedFunction[iam.ListInstanceProfilesInput, iam.ListInstanceProfilesOutput]\n\tGetRoleBehavior                       MockedFunction[iam.GetRoleInput, iam.GetRoleOutput]\n}\n\ntype IAMAPI struct {\n\tsync.Mutex\n\n\tsdk.IAMAPI\n\tIAMAPIBehavior\n\n\tInstanceProfiles map[string]*iamtypes.InstanceProfile\n\n\t// TODO (jmdeal@): Update remaining tests to pass role validation\n\tEnableRoleValidation bool\n\tRoles                map[string]*iamtypes.Role\n}\n\nfunc NewIAMAPI() *IAMAPI {\n\treturn &IAMAPI{\n\t\tInstanceProfiles: map[string]*iamtypes.InstanceProfile{},\n\t\tRoles:            map[string]*iamtypes.Role{},\n\t}\n}\n\nfunc (s *IAMAPI) Reset() {\n\ts.GetInstanceProfileBehavior.Reset()\n\ts.CreateInstanceProfileBehavior.Reset()\n\ts.DeleteInstanceProfileBehavior.Reset()\n\ts.AddRoleToInstanceProfileBehavior.Reset()\n\ts.RemoveRoleFromInstanceProfileBehavior.Reset()\n\ts.ListInstanceProfilesBehavior.Reset()\n\ts.GetRoleBehavior.Reset()\n\ts.InstanceProfiles = map[string]*iamtypes.InstanceProfile{}\n\ts.EnableRoleValidation = false\n\ts.Roles = map[string]*iamtypes.Role{}\n}\n\nfunc (s *IAMAPI) GetInstanceProfile(_ context.Context, input *iam.GetInstanceProfileInput, _ ...func(*iam.Options)) (*iam.GetInstanceProfileOutput, error) {\n\treturn s.GetInstanceProfileBehavior.Invoke(input, func(*iam.GetInstanceProfileInput) (*iam.GetInstanceProfileOutput, error) {\n\t\ts.Lock()\n\t\tdefer s.Unlock()\n\n\t\tif i, ok := s.InstanceProfiles[aws.ToString(input.InstanceProfileName)]; ok {\n\t\t\treturn &iam.GetInstanceProfileOutput{InstanceProfile: i}, nil\n\t\t}\n\t\treturn nil, &smithy.GenericAPIError{\n\t\t\tCode: \"NoSuchEntity\",\n\t\t\tMessage: fmt.Sprintf(\"Instance Profile %s cannot be found\",\n\t\t\t\taws.ToString(input.InstanceProfileName)),\n\t\t}\n\t})\n}\n\nfunc (s *IAMAPI) CreateInstanceProfile(_ context.Context, input *iam.CreateInstanceProfileInput, _ ...func(*iam.Options)) (*iam.CreateInstanceProfileOutput, error) {\n\treturn s.CreateInstanceProfileBehavior.Invoke(input, func(output *iam.CreateInstanceProfileInput) (*iam.CreateInstanceProfileOutput, error) {\n\t\ts.Lock()\n\t\tdefer s.Unlock()\n\n\t\tif _, ok := s.InstanceProfiles[aws.ToString(input.InstanceProfileName)]; ok {\n\t\t\treturn nil, &smithy.GenericAPIError{\n\t\t\t\tCode: \"EntityAlreadyExists\",\n\t\t\t\tMessage: fmt.Sprintf(\"Instance Profile %s already exists\",\n\t\t\t\t\taws.ToString(input.InstanceProfileName)),\n\t\t\t}\n\t\t}\n\t\tinstanceProfile := &iamtypes.InstanceProfile{\n\t\t\tCreateDate:          aws.Time(time.Now()),\n\t\t\tInstanceProfileId:   aws.String(InstanceProfileID()),\n\t\t\tInstanceProfileName: input.InstanceProfileName,\n\t\t\tPath:                input.Path,\n\t\t\tTags:                input.Tags,\n\t\t}\n\t\ts.InstanceProfiles[aws.ToString(input.InstanceProfileName)] = instanceProfile\n\t\treturn &iam.CreateInstanceProfileOutput{InstanceProfile: instanceProfile}, nil\n\t})\n}\n\nfunc (s *IAMAPI) DeleteInstanceProfile(_ context.Context, input *iam.DeleteInstanceProfileInput, _ ...func(*iam.Options)) (*iam.DeleteInstanceProfileOutput, error) {\n\treturn s.DeleteInstanceProfileBehavior.Invoke(input, func(output *iam.DeleteInstanceProfileInput) (*iam.DeleteInstanceProfileOutput, error) {\n\t\ts.Lock()\n\t\tdefer s.Unlock()\n\n\t\tif i, ok := s.InstanceProfiles[aws.ToString(input.InstanceProfileName)]; ok {\n\t\t\tif len(i.Roles) > 0 {\n\t\t\t\treturn nil, &smithy.GenericAPIError{\n\t\t\t\t\tCode: \"DeleteConflictException\",\n\t\t\t\t\tMessage: fmt.Sprintf(\"Instance Profile %s has roles and cannot be deleted\",\n\t\t\t\t\t\taws.ToString(input.InstanceProfileName)),\n\t\t\t\t}\n\t\t\t}\n\t\t\tdelete(s.InstanceProfiles, aws.ToString(input.InstanceProfileName))\n\t\t\treturn &iam.DeleteInstanceProfileOutput{}, nil\n\t\t}\n\t\treturn nil, &smithy.GenericAPIError{\n\t\t\tCode: \"NoSuchEntity\",\n\t\t\tMessage: fmt.Sprintf(\"Instance Profile %s cannot be found\",\n\t\t\t\taws.ToString(input.InstanceProfileName)),\n\t\t}\n\t})\n}\n\nfunc (s *IAMAPI) TagInstanceProfile(_ context.Context, input *iam.TagInstanceProfileInput, _ ...func(*iam.Options)) (*iam.TagInstanceProfileOutput, error) {\n\treturn s.TagInstanceProfileBehavior.Invoke(input, func(output *iam.TagInstanceProfileInput) (*iam.TagInstanceProfileOutput, error) {\n\t\ts.Lock()\n\t\tdefer s.Unlock()\n\n\t\tif profile, ok := s.InstanceProfiles[aws.ToString(input.InstanceProfileName)]; ok {\n\t\t\tprofile.Tags = lo.UniqBy(append(input.Tags, profile.Tags...), func(t iamtypes.Tag) string {\n\t\t\t\treturn lo.FromPtr(t.Key)\n\t\t\t})\n\t\t\treturn nil, nil\n\t\t}\n\t\treturn nil, &smithy.GenericAPIError{\n\t\t\tCode: \"NoSuchEntity\",\n\t\t\tMessage: fmt.Sprintf(\"Instance Profile %s cannot be found\",\n\t\t\t\taws.ToString(input.InstanceProfileName)),\n\t\t}\n\t})\n}\n\nfunc (s *IAMAPI) AddRoleToInstanceProfile(_ context.Context, input *iam.AddRoleToInstanceProfileInput, _ ...func(*iam.Options)) (*iam.AddRoleToInstanceProfileOutput, error) {\n\treturn s.AddRoleToInstanceProfileBehavior.Invoke(input, func(output *iam.AddRoleToInstanceProfileInput) (*iam.AddRoleToInstanceProfileOutput, error) {\n\t\ts.Lock()\n\t\tdefer s.Unlock()\n\n\t\tif _, ok := s.Roles[aws.ToString(input.RoleName)]; !ok && s.EnableRoleValidation {\n\t\t\treturn nil, &smithy.GenericAPIError{\n\t\t\t\tCode:    \"NoSuchEntity\",\n\t\t\t\tMessage: fmt.Sprintf(\"The role with name %s cannot be found\", aws.ToString(input.RoleName)),\n\t\t\t}\n\t\t}\n\t\tif i, ok := s.InstanceProfiles[aws.ToString(input.InstanceProfileName)]; ok {\n\t\t\tif len(i.Roles) > 0 {\n\t\t\t\treturn nil, &smithy.GenericAPIError{\n\t\t\t\t\tCode: \"LimitExceededException\",\n\t\t\t\t\tMessage: fmt.Sprintf(\"Instance Profile %s already has a role\",\n\t\t\t\t\t\taws.ToString(input.InstanceProfileName)),\n\t\t\t\t}\n\t\t\t}\n\t\t\ti.Roles = append(i.Roles, iamtypes.Role{RoleId: aws.String(RoleID()), RoleName: input.RoleName})\n\t\t\treturn nil, nil\n\t\t}\n\t\treturn nil, &smithy.GenericAPIError{\n\t\t\tCode:    \"NoSuchEntity\",\n\t\t\tMessage: fmt.Sprintf(\"Instance Profile %s cannot be found\", aws.ToString(input.InstanceProfileName)),\n\t\t}\n\t})\n}\n\nfunc (s *IAMAPI) RemoveRoleFromInstanceProfile(_ context.Context, input *iam.RemoveRoleFromInstanceProfileInput, _ ...func(*iam.Options)) (*iam.RemoveRoleFromInstanceProfileOutput, error) {\n\treturn s.RemoveRoleFromInstanceProfileBehavior.Invoke(input, func(output *iam.RemoveRoleFromInstanceProfileInput) (*iam.RemoveRoleFromInstanceProfileOutput, error) {\n\t\ts.Lock()\n\t\tdefer s.Unlock()\n\n\t\tif i, ok := s.InstanceProfiles[aws.ToString(input.InstanceProfileName)]; ok {\n\t\t\tnewRoles := lo.Reject(i.Roles, func(r iamtypes.Role, _ int) bool {\n\t\t\t\treturn aws.ToString(r.RoleName) == aws.ToString(input.RoleName)\n\t\t\t})\n\t\t\tif len(i.Roles) == len(newRoles) {\n\t\t\t\treturn nil, &smithy.GenericAPIError{\n\t\t\t\t\tCode: \"NoSuchEntity\",\n\t\t\t\t\tMessage: fmt.Sprintf(\"Instance Profile %s does not have role %s\",\n\t\t\t\t\t\taws.ToString(input.InstanceProfileName), aws.ToString(input.RoleName)),\n\t\t\t\t}\n\t\t\t}\n\t\t\ti.Roles = newRoles\n\t\t\treturn nil, nil\n\t\t}\n\t\treturn nil, &smithy.GenericAPIError{\n\t\t\tCode: \"NoSuchEntity\",\n\t\t\tMessage: fmt.Sprintf(\"Instance Profile %s cannot be found\",\n\t\t\t\taws.ToString(input.InstanceProfileName)),\n\t\t}\n\t})\n}\n\nfunc (s *IAMAPI) ListInstanceProfiles(_ context.Context, input *iam.ListInstanceProfilesInput, _ ...func(*iam.Options)) (*iam.ListInstanceProfilesOutput, error) {\n\treturn s.ListInstanceProfilesBehavior.Invoke(input, func(*iam.ListInstanceProfilesInput) (*iam.ListInstanceProfilesOutput, error) {\n\t\ts.Lock()\n\t\tdefer s.Unlock()\n\n\t\tvar profiles []iamtypes.InstanceProfile\n\t\tfor _, profile := range s.InstanceProfiles {\n\t\t\tif profile.Path != nil && strings.HasPrefix(*profile.Path, *input.PathPrefix) {\n\t\t\t\tprofiles = append(profiles, *profile)\n\t\t\t}\n\t\t}\n\t\treturn &iam.ListInstanceProfilesOutput{\n\t\t\tInstanceProfiles: profiles,\n\t\t}, nil\n\t})\n}\n\nfunc (s *IAMAPI) GetRole(_ context.Context, input *iam.GetRoleInput, _ ...func(*iam.Options)) (*iam.GetRoleOutput, error) {\n\treturn s.GetRoleBehavior.Invoke(input, func(*iam.GetRoleInput) (*iam.GetRoleOutput, error) {\n\t\treturn &iam.GetRoleOutput{\n\t\t\tRole: &iamtypes.Role{\n\t\t\t\tRoleName: input.RoleName,\n\t\t\t},\n\t\t}, nil\n\t})\n}\n"
  },
  {
    "path": "pkg/fake/pricingapi.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage fake\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\n\t\"github.com/aws/aws-sdk-go-v2/service/pricing\"\n\n\tsdk \"github.com/aws/karpenter-provider-aws/pkg/aws\"\n)\n\ntype PricingAPI struct {\n\tsdk.PricingAPI\n\tGetProductsBehavior MockedFunction[pricing.GetProductsInput, pricing.GetProductsOutput]\n}\n\nfunc (p *PricingAPI) Reset() {\n\tp.GetProductsBehavior.Reset()\n}\n\nfunc (p *PricingAPI) GetProducts(_ context.Context, input *pricing.GetProductsInput, _ ...func(*pricing.Options)) (*pricing.GetProductsOutput, error) {\n\treturn p.GetProductsBehavior.Invoke(input, func(input *pricing.GetProductsInput) (*pricing.GetProductsOutput, error) {\n\t\t// fail if the test doesn't provide specific data which causes our pricing provider to use its static price list\n\t\treturn &pricing.GetProductsOutput{}, errors.New(\"no pricing data provided\")\n\n\t})\n}\n\nfunc NewOnDemandPrice(instanceType string, price float64) string {\n\treturn NewOnDemandPriceWithCurrency(instanceType, price, \"USD\")\n\n}\n\nfunc NewOnDemandPriceWithCurrency(instanceType string, price float64, currency string) string {\n\tdata := map[string]any{\n\t\t\"product\": map[string]any{\n\t\t\t\"attributes\": map[string]any{\n\t\t\t\t\"instanceType\": instanceType,\n\t\t\t},\n\t\t},\n\t\t\"terms\": map[string]any{\n\t\t\t\"OnDemand\": map[string]any{\n\t\t\t\t\"JRTCKXETXF.foo\": map[string]any{\n\t\t\t\t\t\"offerTermCode\": \"JRTCKXETXF\",\n\t\t\t\t\t\"priceDimensions\": map[string]any{\n\t\t\t\t\t\t\"JRTCKXETXF.foo.bar\": map[string]any{\n\t\t\t\t\t\t\t\"pricePerUnit\": map[string]any{currency: fmt.Sprintf(\"%f\", price)},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\tondemand, _ := json.Marshal(data)\n\treturn string(ondemand)\n}\n"
  },
  {
    "path": "pkg/fake/sqsapi.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage fake\n\nimport (\n\t\"context\"\n\n\t\"github.com/aws/aws-sdk-go-v2/aws\"\n\t\"github.com/aws/aws-sdk-go-v2/service/sqs\"\n\n\tsdk \"github.com/aws/karpenter-provider-aws/pkg/aws\"\n)\n\nconst (\n\tdummyQueueURL = \"https://sqs.us-west-2.amazonaws.com/000000000000/Karpenter-cluster-Queue\"\n)\n\n// SQSBehavior must be reset between tests otherwise tests will\n// pollute each other.\ntype SQSBehavior struct {\n\tGetQueueURLBehavior    MockedFunction[sqs.GetQueueUrlInput, sqs.GetQueueUrlOutput]\n\tReceiveMessageBehavior MockedFunction[sqs.ReceiveMessageInput, sqs.ReceiveMessageOutput]\n\tDeleteMessageBehavior  MockedFunction[sqs.DeleteMessageInput, sqs.DeleteMessageOutput]\n}\n\ntype SQSAPI struct {\n\tsdk.SQSAPI\n\tSQSBehavior\n}\n\n// Reset must be called between tests otherwise tests will pollute\n// each other.\nfunc (s *SQSAPI) Reset() {\n\ts.GetQueueURLBehavior.Reset()\n\ts.ReceiveMessageBehavior.Reset()\n\ts.DeleteMessageBehavior.Reset()\n}\n\n//nolint:revive,stylecheck\nfunc (s *SQSAPI) GetQueueUrl(_ context.Context, input *sqs.GetQueueUrlInput, _ ...func(*sqs.Options)) (*sqs.GetQueueUrlOutput, error) {\n\treturn s.GetQueueURLBehavior.Invoke(input, func(_ *sqs.GetQueueUrlInput) (*sqs.GetQueueUrlOutput, error) {\n\t\treturn &sqs.GetQueueUrlOutput{\n\t\t\tQueueUrl: aws.String(dummyQueueURL),\n\t\t}, nil\n\t})\n}\n\nfunc (s *SQSAPI) ReceiveMessage(_ context.Context, input *sqs.ReceiveMessageInput, _ ...func(*sqs.Options)) (*sqs.ReceiveMessageOutput, error) {\n\treturn s.ReceiveMessageBehavior.Invoke(input, func(_ *sqs.ReceiveMessageInput) (*sqs.ReceiveMessageOutput, error) {\n\t\treturn nil, nil\n\t})\n}\n\nfunc (s *SQSAPI) DeleteMessage(_ context.Context, input *sqs.DeleteMessageInput, _ ...func(*sqs.Options)) (*sqs.DeleteMessageOutput, error) {\n\treturn s.DeleteMessageBehavior.Invoke(input, func(_ *sqs.DeleteMessageInput) (*sqs.DeleteMessageOutput, error) {\n\t\treturn nil, nil\n\t})\n}\n"
  },
  {
    "path": "pkg/fake/ssmapi.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage fake\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\n\t\"github.com/Pallinder/go-randomdata\"\n\t\"github.com/awslabs/operatorpkg/serrors\"\n\t\"github.com/samber/lo\"\n\n\t\"github.com/aws/aws-sdk-go-v2/service/ssm\"\n\tssmtypes \"github.com/aws/aws-sdk-go-v2/service/ssm/types\"\n\n\tsdk \"github.com/aws/karpenter-provider-aws/pkg/aws\"\n)\n\ntype SSMAPI struct {\n\tsdk.SSMAPI\n\tParameters         map[string]string\n\tGetParameterOutput *ssm.GetParameterOutput\n\tWantErr            error\n\n\tdefaultParameters map[string]string\n}\n\nfunc NewSSMAPI() *SSMAPI {\n\treturn &SSMAPI{\n\t\tdefaultParameters: map[string]string{},\n\t}\n}\n\nfunc (a SSMAPI) GetParameter(_ context.Context, input *ssm.GetParameterInput, _ ...func(*ssm.Options)) (*ssm.GetParameterOutput, error) {\n\tparameter := lo.FromPtr(input.Name)\n\tif a.WantErr != nil {\n\t\treturn &ssm.GetParameterOutput{}, a.WantErr\n\t}\n\tif a.GetParameterOutput != nil {\n\t\treturn a.GetParameterOutput, nil\n\t}\n\tif len(a.Parameters) != 0 {\n\t\tvalue, ok := a.Parameters[parameter]\n\t\tif !ok {\n\t\t\treturn &ssm.GetParameterOutput{}, serrors.Wrap(fmt.Errorf(\"parameter not found\"), \"parameter\", lo.FromPtr(input.Name))\n\t\t}\n\t\treturn &ssm.GetParameterOutput{\n\t\t\tParameter: &ssmtypes.Parameter{\n\t\t\t\tName:  lo.ToPtr(parameter),\n\t\t\t\tValue: lo.ToPtr(value),\n\t\t\t},\n\t\t}, nil\n\t}\n\n\t// Cache default parameters that was successive calls for the same parameter return the same result\n\tvalue, ok := a.defaultParameters[parameter]\n\tif !ok {\n\t\tvalue = fmt.Sprintf(\"ami-%s\", randomdata.Alphanumeric(16))\n\t\ta.defaultParameters[parameter] = value\n\t}\n\treturn &ssm.GetParameterOutput{\n\t\tParameter: &ssmtypes.Parameter{\n\t\t\tName:  lo.ToPtr(parameter),\n\t\t\tValue: lo.ToPtr(value),\n\t\t},\n\t}, nil\n}\n\nfunc (a *SSMAPI) Reset() {\n\ta.Parameters = nil\n\ta.GetParameterOutput = nil\n\ta.WantErr = nil\n\ta.defaultParameters = map[string]string{}\n}\n"
  },
  {
    "path": "pkg/fake/types.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage fake\n\nimport (\n\t\"reflect\"\n\t\"sync\"\n\t\"sync/atomic\"\n\n\t\"github.com/google/uuid\"\n\t\"github.com/samber/lo\"\n)\n\ntype MockedFunction[I any, O any] struct {\n\tOutput          AtomicPtr[O] // Output to return on call to this function\n\tMultiOut        AtomicPtrSlice[O]\n\tOutputPages     AtomicPtrSlice[O]\n\tCalledWithInput AtomicPtrSlice[I] // Slice used to keep track of passed input to this function\n\tError           AtomicError       // Error to return a certain number of times defined by custom error options\n\n\tpageMapping     sync.Map     // token uuid -> page number: Internal construct to keep track of the page that we are on\n\tsuccessfulCalls atomic.Int32 // Internal construct to keep track of the number of times this function has successfully been called\n\tfailedCalls     atomic.Int32 // Internal construct to keep track of the number of times this function has failed (with error)\n}\n\n// Reset must be called between tests otherwise tests will pollute\n// each other.\nfunc (m *MockedFunction[I, O]) Reset() {\n\tm.Output.Reset()\n\tm.MultiOut.Reset()\n\tm.OutputPages.Reset()\n\tm.CalledWithInput.Reset()\n\tm.Error.Reset()\n\n\tm.successfulCalls.Store(0)\n\tm.failedCalls.Store(0)\n\tm.pageMapping.Clear()\n}\n\nfunc (m *MockedFunction[I, O]) Invoke(input *I, defaultTransformer func(*I) (*O, error)) (*O, error) {\n\terr := m.Error.Get()\n\tif err != nil {\n\t\tm.failedCalls.Add(1)\n\t\treturn nil, err\n\t}\n\n\tm.CalledWithInput.Add(input)\n\n\tif !m.Output.IsNil() {\n\t\tm.successfulCalls.Add(1)\n\t\treturn m.Output.Clone(), nil\n\t}\n\n\tif m.MultiOut.Len() > 0 {\n\t\tm.successfulCalls.Add(1)\n\t\treturn m.MultiOut.Pop(), nil\n\t}\n\t// This output pages multi-threaded handling isn't perfect\n\t// It will fail if pages are asynchronously requested from the same NextToken\n\tif m.OutputPages.Len() > 0 {\n\t\ttoken := uuid.New().String() // generate a token so that each paginated request set gets its own mapping\n\t\tif !reflect.ValueOf(input).Elem().FieldByName(\"NextToken\").Elem().CanSet() {\n\t\t\tm.pageMapping.Store(token, 0)\n\t\t} else {\n\t\t\ttoken = reflect.ValueOf(input).Elem().FieldByName(\"NextToken\").Elem().String()\n\t\t}\n\t\tpageNum := lo.Must(m.pageMapping.Load(token)).(int)\n\t\tpage := m.OutputPages.At(pageNum)\n\t\tif pageNum < m.OutputPages.Len()-1 {\n\t\t\treflect.ValueOf(page).Elem().FieldByName(\"NextToken\").Set(reflect.ValueOf(lo.ToPtr(token)))\n\t\t}\n\t\tm.pageMapping.Store(token, pageNum+1)\n\t\tm.successfulCalls.Add(1)\n\t\treturn page, nil\n\t}\n\tout, err := defaultTransformer(input)\n\tif err != nil {\n\t\tm.failedCalls.Add(1)\n\t} else {\n\t\tm.successfulCalls.Add(1)\n\t}\n\treturn out, err\n}\n\nfunc (m *MockedFunction[I, O]) Calls() int {\n\treturn m.SuccessfulCalls() + m.FailedCalls()\n}\n\nfunc (m *MockedFunction[I, O]) SuccessfulCalls() int {\n\treturn int(m.successfulCalls.Load())\n}\n\nfunc (m *MockedFunction[I, O]) FailedCalls() int {\n\treturn int(m.failedCalls.Load())\n}\n"
  },
  {
    "path": "pkg/fake/utils.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage fake\n\nimport (\n\t\"fmt\"\n\t\"slices\"\n\t\"strings\"\n\n\t\"github.com/Pallinder/go-randomdata\"\n\t\"github.com/aws/aws-sdk-go-v2/aws\"\n\t\"github.com/aws/aws-sdk-go-v2/service/ec2\"\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\t\"github.com/samber/lo\"\n\t\"k8s.io/apimachinery/pkg/util/sets\"\n\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/pricing\"\n)\n\nfunc InstanceID() string {\n\treturn fmt.Sprintf(\"i-%s\", randomdata.Alphanumeric(17))\n}\n\nfunc RandomProviderID() string {\n\treturn ProviderID(InstanceID())\n}\n\nfunc ProviderID(id string) string {\n\treturn fmt.Sprintf(\"aws:///%s/%s\", DefaultRegion, id)\n}\n\nfunc ImageID() string {\n\treturn fmt.Sprintf(\"ami-%s\", strings.ToLower(randomdata.Alphanumeric(17)))\n}\nfunc SecurityGroupID() string {\n\treturn fmt.Sprintf(\"sg-%s\", randomdata.Alphanumeric(17))\n}\n\nfunc SubnetID() string {\n\treturn fmt.Sprintf(\"subnet-%s\", randomdata.Alphanumeric(17))\n}\n\nfunc InstanceProfileID() string {\n\treturn fmt.Sprintf(\"instanceprofile-%s\", randomdata.Alphanumeric(17))\n}\n\nfunc RoleID() string {\n\treturn fmt.Sprintf(\"role-%s\", randomdata.Alphanumeric(17))\n}\n\nfunc LaunchTemplateName() string {\n\treturn fmt.Sprintf(\"karpenter.k8s.aws/%s\", randomdata.Alphanumeric(17))\n}\n\nfunc LaunchTemplateID() string {\n\treturn fmt.Sprint(randomdata.Alphanumeric(17))\n}\n\nfunc PrivateDNSName() string {\n\treturn fmt.Sprintf(\"ip-192-168-%d-%d.%s.compute.internal\", randomdata.Number(0, 256), randomdata.Number(0, 256), DefaultRegion)\n}\n\n// SubnetsFromFleetRequest returns a unique slice of subnetIDs passed as overrides from a CreateFleetInput\nfunc SubnetsFromFleetRequest(createFleetInput *ec2.CreateFleetInput) []string {\n\treturn lo.Uniq(lo.Flatten(lo.Map(createFleetInput.LaunchTemplateConfigs, func(ltReq ec2types.FleetLaunchTemplateConfigRequest, _ int) []string {\n\t\tvar subnets []string\n\t\tfor _, override := range ltReq.Overrides {\n\t\t\tif override.SubnetId != nil {\n\t\t\t\tsubnets = append(subnets, *override.SubnetId)\n\t\t\t}\n\t\t}\n\t\treturn subnets\n\t})))\n}\n\n// FilterDescribeSecurtyGroups filters the passed in security groups based on the filters passed in.\n// Filters are chained with a logical \"AND\"\nfunc FilterDescribeSecurtyGroups(sgs []ec2types.SecurityGroup, filters []ec2types.Filter) []ec2types.SecurityGroup {\n\treturn lo.Filter(sgs, func(group ec2types.SecurityGroup, _ int) bool {\n\t\treturn Filter(filters, *group.GroupId, *group.GroupName, \"\", \"\", group.Tags)\n\t})\n}\n\n// FilterDescribeSubnets filters the passed in subnets based on the filters passed in.\n// Filters are chained with a logical \"AND\"\nfunc FilterDescribeSubnets(subnets []ec2types.Subnet, filters []ec2types.Filter) []ec2types.Subnet {\n\treturn lo.Filter(subnets, func(subnet ec2types.Subnet, _ int) bool {\n\t\treturn Filter(filters, *subnet.SubnetId, \"\", \"\", \"\", subnet.Tags)\n\t})\n}\n\nfunc FilterDescribeCapacityReservations(crs []ec2types.CapacityReservation, ids []string, filters []ec2types.Filter) []ec2types.CapacityReservation {\n\tidSet := sets.New(ids...)\n\treturn lo.Filter(crs, func(cr ec2types.CapacityReservation, _ int) bool {\n\t\tif len(ids) != 0 && !idSet.Has(*cr.CapacityReservationId) {\n\t\t\treturn false\n\t\t}\n\t\treturn FilterCapacityReservation(filters, *cr.CapacityReservationId, \"\", *cr.OwnerId, string(cr.State), string(cr.InstanceMatchCriteria), cr.Tags)\n\t})\n}\n\nfunc FilterDescribeImages(images []ec2types.Image, filters []ec2types.Filter) []ec2types.Image {\n\treturn lo.Filter(images, func(image ec2types.Image, _ int) bool {\n\t\treturn Filter(filters, *image.ImageId, *image.Name, \"\", string(image.State), image.Tags)\n\t})\n}\n\n//nolint:gocyclo\nfunc Filter(filters []ec2types.Filter, id, name, owner, state string, tags []ec2types.Tag) bool {\n\treturn lo.EveryBy(filters, func(filter ec2types.Filter) bool {\n\t\tswitch filterName := aws.ToString(filter.Name); {\n\t\tcase filterName == \"state\":\n\t\t\treturn slices.Contains(filter.Values, state)\n\t\tcase filterName == \"subnet-id\" || filterName == \"group-id\" || filterName == \"image-id\":\n\t\t\treturn slices.Contains(filter.Values, id)\n\t\tcase filterName == \"group-name\" || filterName == \"name\":\n\t\t\treturn slices.Contains(filter.Values, name)\n\t\tcase filterName == \"owner-id\":\n\t\t\treturn slices.Contains(filter.Values, owner)\n\t\tcase strings.HasPrefix(filterName, \"tag\"):\n\t\t\tif matchTags(tags, filter) {\n\t\t\t\treturn true\n\t\t\t}\n\t\tdefault:\n\t\t\tpanic(fmt.Sprintf(\"Unsupported mock filter %v\", filter))\n\t\t}\n\t\treturn false\n\t})\n}\n\nfunc FilterCapacityReservation(filters []ec2types.Filter, id, name, owner, state, instanceMatchCriteria string, tags []ec2types.Tag) bool {\n\treturn lo.EveryBy(filters, func(filter ec2types.Filter) bool {\n\t\tif aws.ToString(filter.Name) == \"instance-match-criteria\" {\n\t\t\treturn lo.Contains(filter.Values, instanceMatchCriteria)\n\t\t}\n\t\treturn Filter([]ec2types.Filter{filter}, id, name, owner, state, tags)\n\t})\n}\n\n// matchTags is a predicate that matches a slice of tags with a tag:<key> or tag-keys filter\n// nolint: gocyclo\nfunc matchTags(tags []ec2types.Tag, filter ec2types.Filter) bool {\n\tif strings.HasPrefix(*filter.Name, \"tag:\") {\n\t\t_, tagKey, _ := strings.Cut(*filter.Name, \":\")\n\t\tfor _, val := range filter.Values {\n\t\t\tfor _, tag := range tags {\n\t\t\t\tif tagKey == *tag.Key && (val == \"*\" || val == *tag.Value) {\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} else if strings.HasPrefix(*filter.Name, \"tag-key\") {\n\t\tfor _, v := range filter.Values {\n\t\t\tif v == \"*\" {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\tfor _, t := range tags {\n\t\t\t\tif lo.FromPtr(t.Key) == v {\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn false\n}\n\nfunc MakeInstances() []ec2types.InstanceTypeInfo {\n\tvar instanceTypes []ec2types.InstanceTypeInfo\n\t// Use keys from the static pricing data so that we guarantee pricing for the data\n\t// Create uniform instance data so all of them schedule for a given pod\n\tfor _, it := range pricing.NewDefaultProvider(nil, nil, \"us-east-1\", true).InstanceTypes() {\n\t\tinstanceTypes = append(instanceTypes, ec2types.InstanceTypeInfo{\n\t\t\tInstanceType: it,\n\t\t\tProcessorInfo: &ec2types.ProcessorInfo{\n\t\t\t\tSupportedArchitectures: []ec2types.ArchitectureType{ec2types.ArchitectureTypeX8664},\n\t\t\t},\n\t\t\tVCpuInfo: &ec2types.VCpuInfo{\n\t\t\t\tDefaultCores: aws.Int32(1),\n\t\t\t\tDefaultVCpus: aws.Int32(2),\n\t\t\t},\n\t\t\tMemoryInfo: &ec2types.MemoryInfo{\n\t\t\t\tSizeInMiB: aws.Int64(8192),\n\t\t\t},\n\t\t\tNetworkInfo: &ec2types.NetworkInfo{\n\t\t\t\tIpv4AddressesPerInterface: aws.Int32(10),\n\t\t\t\tDefaultNetworkCardIndex:   aws.Int32(0),\n\t\t\t\tNetworkCards: []ec2types.NetworkCardInfo{{\n\t\t\t\t\tNetworkCardIndex:         lo.ToPtr(int32(0)),\n\t\t\t\t\tMaximumNetworkInterfaces: aws.Int32(3),\n\t\t\t\t}},\n\t\t\t},\n\t\t\tSupportedUsageClasses: DefaultSupportedUsageClasses,\n\t\t})\n\t}\n\treturn instanceTypes\n}\n\nfunc MakeUniqueInstancesAndFamilies(instances []ec2types.InstanceTypeInfo, numInstanceFamilies int) ([]ec2types.InstanceTypeInfo, sets.Set[string]) {\n\tvar instanceTypes []ec2types.InstanceTypeInfo\n\tinstanceFamilies := sets.Set[string]{}\n\tfor _, it := range instances {\n\t\tvar found bool\n\t\tfor instFamily := range instanceFamilies {\n\t\t\tif strings.Split(string(it.InstanceType), \".\")[0] == instFamily {\n\t\t\t\tfound = true\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tif !found {\n\t\t\tinstanceTypes = append(instanceTypes, it)\n\t\t\tinstanceFamilies.Insert(strings.Split(string(it.InstanceType), \".\")[0])\n\t\t\tif len(instanceFamilies) == numInstanceFamilies {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\treturn instanceTypes, instanceFamilies\n}\n\nfunc MakeInstanceOfferings(instanceTypes []ec2types.InstanceTypeInfo) []ec2types.InstanceTypeOffering {\n\tvar instanceTypeOfferings []ec2types.InstanceTypeOffering\n\n\t// Create uniform instance offering data so all of them schedule for a given pod\n\tfor _, instanceType := range instanceTypes {\n\t\tinstanceTypeOfferings = append(instanceTypeOfferings, ec2types.InstanceTypeOffering{\n\t\t\tInstanceType: instanceType.InstanceType,\n\t\t\tLocation:     aws.String(\"test-zone-1a\"),\n\t\t})\n\t}\n\treturn instanceTypeOfferings\n}\n"
  },
  {
    "path": "pkg/fake/zz_generated.describe_instance_types.go",
    "content": "//go:build !ignore_autogenerated\n\n/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage fake\n\nimport (\n\t\"github.com/aws/aws-sdk-go-v2/aws\"\n\t\"github.com/aws/aws-sdk-go-v2/service/ec2\"\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\t\"github.com/samber/lo\"\n)\n\n// GENERATED FILE. DO NOT EDIT DIRECTLY.\n// Update hack/code/instancetype_testdata_gen.go and re-generate to edit\n// You can add instance types by adding to the --instance-types CLI flag\n\nvar defaultDescribeInstanceTypesOutput = &ec2.DescribeInstanceTypesOutput{\n\tInstanceTypes: []ec2types.InstanceTypeInfo{\n\t\t{\n\t\t\tInstanceType:                  \"c6g.large\",\n\t\t\tSupportedUsageClasses:         []ec2types.UsageClassType{\"on-demand\", \"spot\"},\n\t\t\tSupportedVirtualizationTypes:  []ec2types.VirtualizationType{\"hvm\"},\n\t\t\tBurstablePerformanceSupported: aws.Bool(false),\n\t\t\tBareMetal:                     aws.Bool(false),\n\t\t\tHypervisor:                    \"nitro\",\n\t\t\tProcessorInfo: &ec2types.ProcessorInfo{\n\t\t\t\tManufacturer:             aws.String(\"AWS\"),\n\t\t\t\tSupportedArchitectures:   []ec2types.ArchitectureType{\"arm64\"},\n\t\t\t\tSustainedClockSpeedInGhz: aws.Float64(2.500000),\n\t\t\t},\n\t\t\tVCpuInfo: &ec2types.VCpuInfo{\n\t\t\t\tDefaultCores: aws.Int32(2),\n\t\t\t\tDefaultVCpus: aws.Int32(2),\n\t\t\t},\n\t\t\tMemoryInfo: &ec2types.MemoryInfo{\n\t\t\t\tSizeInMiB: aws.Int64(4096),\n\t\t\t},\n\t\t\tEbsInfo: &ec2types.EbsInfo{\n\t\t\t\tEbsOptimizedInfo: &ec2types.EbsOptimizedInfo{\n\t\t\t\t\tBaselineBandwidthInMbps:  aws.Int32(630),\n\t\t\t\t\tBaselineIops:             aws.Int32(3600),\n\t\t\t\t\tBaselineThroughputInMBps: aws.Float64(78.75),\n\t\t\t\t\tMaximumBandwidthInMbps:   aws.Int32(4750),\n\t\t\t\t\tMaximumIops:              aws.Int32(20000),\n\t\t\t\t\tMaximumThroughputInMBps:  aws.Float64(593.75),\n\t\t\t\t},\n\t\t\t\tEbsOptimizedSupport: \"default\",\n\t\t\t\tEncryptionSupport:   \"supported\",\n\t\t\t\tNvmeSupport:         \"required\",\n\t\t\t},\n\t\t\tNetworkInfo: &ec2types.NetworkInfo{\n\t\t\t\tMaximumNetworkInterfaces:     aws.Int32(3),\n\t\t\t\tIpv4AddressesPerInterface:    aws.Int32(10),\n\t\t\t\tEncryptionInTransitSupported: aws.Bool(false),\n\t\t\t\tDefaultNetworkCardIndex:      aws.Int32(0),\n\t\t\t\tNetworkCards: []ec2types.NetworkCardInfo{\n\t\t\t\t\t{\n\t\t\t\t\t\tNetworkCardIndex:         aws.Int32(0),\n\t\t\t\t\t\tMaximumNetworkInterfaces: aws.Int32(3),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tInstanceType:                  \"dl1.24xlarge\",\n\t\t\tSupportedUsageClasses:         []ec2types.UsageClassType{\"on-demand\", \"spot\"},\n\t\t\tSupportedVirtualizationTypes:  []ec2types.VirtualizationType{\"hvm\"},\n\t\t\tBurstablePerformanceSupported: aws.Bool(false),\n\t\t\tBareMetal:                     aws.Bool(false),\n\t\t\tHypervisor:                    \"nitro\",\n\t\t\tProcessorInfo: &ec2types.ProcessorInfo{\n\t\t\t\tManufacturer:             aws.String(\"Intel\"),\n\t\t\t\tSupportedArchitectures:   []ec2types.ArchitectureType{\"x86_64\"},\n\t\t\t\tSustainedClockSpeedInGhz: aws.Float64(3.000000),\n\t\t\t},\n\t\t\tVCpuInfo: &ec2types.VCpuInfo{\n\t\t\t\tDefaultCores: aws.Int32(48),\n\t\t\t\tDefaultVCpus: aws.Int32(96),\n\t\t\t},\n\t\t\tMemoryInfo: &ec2types.MemoryInfo{\n\t\t\t\tSizeInMiB: aws.Int64(786432),\n\t\t\t},\n\t\t\tEbsInfo: &ec2types.EbsInfo{\n\t\t\t\tEbsOptimizedInfo: &ec2types.EbsOptimizedInfo{\n\t\t\t\t\tBaselineBandwidthInMbps:  aws.Int32(19000),\n\t\t\t\t\tBaselineIops:             aws.Int32(80000),\n\t\t\t\t\tBaselineThroughputInMBps: aws.Float64(2375.00),\n\t\t\t\t\tMaximumBandwidthInMbps:   aws.Int32(19000),\n\t\t\t\t\tMaximumIops:              aws.Int32(80000),\n\t\t\t\t\tMaximumThroughputInMBps:  aws.Float64(2375.00),\n\t\t\t\t},\n\t\t\t\tEbsOptimizedSupport: \"default\",\n\t\t\t\tEncryptionSupport:   \"supported\",\n\t\t\t\tNvmeSupport:         \"required\",\n\t\t\t},\n\t\t\tGpuInfo: &ec2types.GpuInfo{\n\t\t\t\tGpus: []ec2types.GpuDeviceInfo{\n\t\t\t\t\t{\n\t\t\t\t\t\tName:         aws.String(\"Gaudi HL-205\"),\n\t\t\t\t\t\tManufacturer: aws.String(\"Habana\"),\n\t\t\t\t\t\tCount:        aws.Int32(8),\n\t\t\t\t\t\tMemoryInfo: &ec2types.GpuDeviceMemoryInfo{\n\t\t\t\t\t\t\tSizeInMiB: aws.Int32(32768),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tInstanceStorageInfo: &ec2types.InstanceStorageInfo{NvmeSupport: \"required\",\n\t\t\t\tTotalSizeInGB: aws.Int64(4000),\n\t\t\t},\n\t\t\tNetworkInfo: &ec2types.NetworkInfo{\n\t\t\t\tEfaInfo: &ec2types.EfaInfo{\n\t\t\t\t\tMaximumEfaInterfaces: aws.Int32(4),\n\t\t\t\t},\n\t\t\t\tMaximumNetworkInterfaces:     aws.Int32(60),\n\t\t\t\tIpv4AddressesPerInterface:    aws.Int32(50),\n\t\t\t\tEncryptionInTransitSupported: aws.Bool(true),\n\t\t\t\tDefaultNetworkCardIndex:      aws.Int32(0),\n\t\t\t\tNetworkCards: []ec2types.NetworkCardInfo{\n\t\t\t\t\t{\n\t\t\t\t\t\tNetworkCardIndex:         aws.Int32(0),\n\t\t\t\t\t\tMaximumNetworkInterfaces: aws.Int32(15),\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tNetworkCardIndex:         aws.Int32(1),\n\t\t\t\t\t\tMaximumNetworkInterfaces: aws.Int32(15),\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tNetworkCardIndex:         aws.Int32(2),\n\t\t\t\t\t\tMaximumNetworkInterfaces: aws.Int32(15),\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tNetworkCardIndex:         aws.Int32(3),\n\t\t\t\t\t\tMaximumNetworkInterfaces: aws.Int32(15),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tInstanceType:                  \"g4ad.16xlarge\",\n\t\t\tSupportedUsageClasses:         []ec2types.UsageClassType{\"on-demand\", \"spot\"},\n\t\t\tSupportedVirtualizationTypes:  []ec2types.VirtualizationType{\"hvm\"},\n\t\t\tBurstablePerformanceSupported: aws.Bool(false),\n\t\t\tBareMetal:                     aws.Bool(false),\n\t\t\tHypervisor:                    \"nitro\",\n\t\t\tProcessorInfo: &ec2types.ProcessorInfo{\n\t\t\t\tManufacturer:             aws.String(\"AMD\"),\n\t\t\t\tSupportedArchitectures:   []ec2types.ArchitectureType{\"x86_64\"},\n\t\t\t\tSustainedClockSpeedInGhz: aws.Float64(3.000000),\n\t\t\t},\n\t\t\tVCpuInfo: &ec2types.VCpuInfo{\n\t\t\t\tDefaultCores: aws.Int32(32),\n\t\t\t\tDefaultVCpus: aws.Int32(64),\n\t\t\t},\n\t\t\tMemoryInfo: &ec2types.MemoryInfo{\n\t\t\t\tSizeInMiB: aws.Int64(262144),\n\t\t\t},\n\t\t\tEbsInfo: &ec2types.EbsInfo{\n\t\t\t\tEbsOptimizedInfo: &ec2types.EbsOptimizedInfo{\n\t\t\t\t\tBaselineBandwidthInMbps:  aws.Int32(6300),\n\t\t\t\t\tBaselineIops:             aws.Int32(26667),\n\t\t\t\t\tBaselineThroughputInMBps: aws.Float64(787.50),\n\t\t\t\t\tMaximumBandwidthInMbps:   aws.Int32(6300),\n\t\t\t\t\tMaximumIops:              aws.Int32(26667),\n\t\t\t\t\tMaximumThroughputInMBps:  aws.Float64(787.50),\n\t\t\t\t},\n\t\t\t\tEbsOptimizedSupport: \"default\",\n\t\t\t\tEncryptionSupport:   \"supported\",\n\t\t\t\tNvmeSupport:         \"required\",\n\t\t\t},\n\t\t\tGpuInfo: &ec2types.GpuInfo{\n\t\t\t\tGpus: []ec2types.GpuDeviceInfo{\n\t\t\t\t\t{\n\t\t\t\t\t\tName:         aws.String(\"Radeon Pro V520\"),\n\t\t\t\t\t\tManufacturer: aws.String(\"AMD\"),\n\t\t\t\t\t\tCount:        aws.Int32(4),\n\t\t\t\t\t\tMemoryInfo: &ec2types.GpuDeviceMemoryInfo{\n\t\t\t\t\t\t\tSizeInMiB: aws.Int32(8192),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tInstanceStorageInfo: &ec2types.InstanceStorageInfo{NvmeSupport: \"required\",\n\t\t\t\tTotalSizeInGB: aws.Int64(2400),\n\t\t\t},\n\t\t\tNetworkInfo: &ec2types.NetworkInfo{\n\t\t\t\tMaximumNetworkInterfaces:     aws.Int32(8),\n\t\t\t\tIpv4AddressesPerInterface:    aws.Int32(30),\n\t\t\t\tEncryptionInTransitSupported: aws.Bool(true),\n\t\t\t\tDefaultNetworkCardIndex:      aws.Int32(0),\n\t\t\t\tNetworkCards: []ec2types.NetworkCardInfo{\n\t\t\t\t\t{\n\t\t\t\t\t\tNetworkCardIndex:         aws.Int32(0),\n\t\t\t\t\t\tMaximumNetworkInterfaces: aws.Int32(8),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tInstanceType:                  \"g4dn.8xlarge\",\n\t\t\tSupportedUsageClasses:         []ec2types.UsageClassType{\"on-demand\", \"spot\"},\n\t\t\tSupportedVirtualizationTypes:  []ec2types.VirtualizationType{\"hvm\"},\n\t\t\tBurstablePerformanceSupported: aws.Bool(false),\n\t\t\tBareMetal:                     aws.Bool(false),\n\t\t\tHypervisor:                    \"nitro\",\n\t\t\tProcessorInfo: &ec2types.ProcessorInfo{\n\t\t\t\tManufacturer:             aws.String(\"Intel\"),\n\t\t\t\tSupportedArchitectures:   []ec2types.ArchitectureType{\"x86_64\"},\n\t\t\t\tSustainedClockSpeedInGhz: aws.Float64(2.500000),\n\t\t\t},\n\t\t\tVCpuInfo: &ec2types.VCpuInfo{\n\t\t\t\tDefaultCores: aws.Int32(16),\n\t\t\t\tDefaultVCpus: aws.Int32(32),\n\t\t\t},\n\t\t\tMemoryInfo: &ec2types.MemoryInfo{\n\t\t\t\tSizeInMiB: aws.Int64(131072),\n\t\t\t},\n\t\t\tEbsInfo: &ec2types.EbsInfo{\n\t\t\t\tEbsOptimizedInfo: &ec2types.EbsOptimizedInfo{\n\t\t\t\t\tBaselineBandwidthInMbps:  aws.Int32(9500),\n\t\t\t\t\tBaselineIops:             aws.Int32(40000),\n\t\t\t\t\tBaselineThroughputInMBps: aws.Float64(1187.50),\n\t\t\t\t\tMaximumBandwidthInMbps:   aws.Int32(9500),\n\t\t\t\t\tMaximumIops:              aws.Int32(40000),\n\t\t\t\t\tMaximumThroughputInMBps:  aws.Float64(1187.50),\n\t\t\t\t},\n\t\t\t\tEbsOptimizedSupport: \"default\",\n\t\t\t\tEncryptionSupport:   \"supported\",\n\t\t\t\tNvmeSupport:         \"required\",\n\t\t\t},\n\t\t\tGpuInfo: &ec2types.GpuInfo{\n\t\t\t\tGpus: []ec2types.GpuDeviceInfo{\n\t\t\t\t\t{\n\t\t\t\t\t\tName:         aws.String(\"T4\"),\n\t\t\t\t\t\tManufacturer: aws.String(\"NVIDIA\"),\n\t\t\t\t\t\tCount:        aws.Int32(1),\n\t\t\t\t\t\tMemoryInfo: &ec2types.GpuDeviceMemoryInfo{\n\t\t\t\t\t\t\tSizeInMiB: aws.Int32(16384),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tInstanceStorageInfo: &ec2types.InstanceStorageInfo{NvmeSupport: \"required\",\n\t\t\t\tTotalSizeInGB: aws.Int64(900),\n\t\t\t},\n\t\t\tNetworkInfo: &ec2types.NetworkInfo{\n\t\t\t\tEfaInfo: &ec2types.EfaInfo{\n\t\t\t\t\tMaximumEfaInterfaces: aws.Int32(1),\n\t\t\t\t},\n\t\t\t\tMaximumNetworkInterfaces:     aws.Int32(4),\n\t\t\t\tIpv4AddressesPerInterface:    aws.Int32(15),\n\t\t\t\tEncryptionInTransitSupported: aws.Bool(true),\n\t\t\t\tDefaultNetworkCardIndex:      aws.Int32(0),\n\t\t\t\tNetworkCards: []ec2types.NetworkCardInfo{\n\t\t\t\t\t{\n\t\t\t\t\t\tNetworkCardIndex:         aws.Int32(0),\n\t\t\t\t\t\tMaximumNetworkInterfaces: aws.Int32(4),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tInstanceType:                  \"inf2.24xlarge\",\n\t\t\tSupportedUsageClasses:         []ec2types.UsageClassType{\"on-demand\", \"spot\"},\n\t\t\tSupportedVirtualizationTypes:  []ec2types.VirtualizationType{\"hvm\"},\n\t\t\tBurstablePerformanceSupported: aws.Bool(false),\n\t\t\tBareMetal:                     aws.Bool(false),\n\t\t\tHypervisor:                    \"nitro\",\n\t\t\tProcessorInfo: &ec2types.ProcessorInfo{\n\t\t\t\tManufacturer:             aws.String(\"AMD\"),\n\t\t\t\tSupportedArchitectures:   []ec2types.ArchitectureType{\"x86_64\"},\n\t\t\t\tSustainedClockSpeedInGhz: aws.Float64(3.600000),\n\t\t\t},\n\t\t\tVCpuInfo: &ec2types.VCpuInfo{\n\t\t\t\tDefaultCores: aws.Int32(48),\n\t\t\t\tDefaultVCpus: aws.Int32(96),\n\t\t\t},\n\t\t\tMemoryInfo: &ec2types.MemoryInfo{\n\t\t\t\tSizeInMiB: aws.Int64(393216),\n\t\t\t},\n\t\t\tEbsInfo: &ec2types.EbsInfo{\n\t\t\t\tEbsOptimizedInfo: &ec2types.EbsOptimizedInfo{\n\t\t\t\t\tBaselineBandwidthInMbps:  aws.Int32(30000),\n\t\t\t\t\tBaselineIops:             aws.Int32(120000),\n\t\t\t\t\tBaselineThroughputInMBps: aws.Float64(3750.00),\n\t\t\t\t\tMaximumBandwidthInMbps:   aws.Int32(30000),\n\t\t\t\t\tMaximumIops:              aws.Int32(120000),\n\t\t\t\t\tMaximumThroughputInMBps:  aws.Float64(3750.00),\n\t\t\t\t},\n\t\t\t\tEbsOptimizedSupport: \"default\",\n\t\t\t\tEncryptionSupport:   \"supported\",\n\t\t\t\tNvmeSupport:         \"required\",\n\t\t\t},\n\t\t\tNeuronInfo: &ec2types.NeuronInfo{\n\t\t\t\tNeuronDevices: []ec2types.NeuronDeviceInfo{\n\t\t\t\t\t{\n\t\t\t\t\t\tCount: aws.Int32(6),\n\t\t\t\t\t\tName:  aws.String(\"Inferentia2\"),\n\t\t\t\t\t\tCoreInfo: &ec2types.NeuronDeviceCoreInfo{\n\t\t\t\t\t\t\tCount:   aws.Int32(2),\n\t\t\t\t\t\t\tVersion: aws.Int32(2),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tMemoryInfo: &ec2types.NeuronDeviceMemoryInfo{\n\t\t\t\t\t\t\tSizeInMiB: aws.Int32(32768),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tNetworkInfo: &ec2types.NetworkInfo{\n\t\t\t\tMaximumNetworkInterfaces:     aws.Int32(15),\n\t\t\t\tIpv4AddressesPerInterface:    aws.Int32(50),\n\t\t\t\tEncryptionInTransitSupported: aws.Bool(true),\n\t\t\t\tDefaultNetworkCardIndex:      aws.Int32(0),\n\t\t\t\tNetworkCards: []ec2types.NetworkCardInfo{\n\t\t\t\t\t{\n\t\t\t\t\t\tNetworkCardIndex:         aws.Int32(0),\n\t\t\t\t\t\tMaximumNetworkInterfaces: aws.Int32(15),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tInstanceType:                  \"inf2.xlarge\",\n\t\t\tSupportedUsageClasses:         []ec2types.UsageClassType{\"on-demand\", \"spot\"},\n\t\t\tSupportedVirtualizationTypes:  []ec2types.VirtualizationType{\"hvm\"},\n\t\t\tBurstablePerformanceSupported: aws.Bool(false),\n\t\t\tBareMetal:                     aws.Bool(false),\n\t\t\tHypervisor:                    \"nitro\",\n\t\t\tProcessorInfo: &ec2types.ProcessorInfo{\n\t\t\t\tManufacturer:             aws.String(\"AMD\"),\n\t\t\t\tSupportedArchitectures:   []ec2types.ArchitectureType{\"x86_64\"},\n\t\t\t\tSustainedClockSpeedInGhz: aws.Float64(3.600000),\n\t\t\t},\n\t\t\tVCpuInfo: &ec2types.VCpuInfo{\n\t\t\t\tDefaultCores: aws.Int32(2),\n\t\t\t\tDefaultVCpus: aws.Int32(4),\n\t\t\t},\n\t\t\tMemoryInfo: &ec2types.MemoryInfo{\n\t\t\t\tSizeInMiB: aws.Int64(16384),\n\t\t\t},\n\t\t\tEbsInfo: &ec2types.EbsInfo{\n\t\t\t\tEbsOptimizedInfo: &ec2types.EbsOptimizedInfo{\n\t\t\t\t\tBaselineBandwidthInMbps:  aws.Int32(1250),\n\t\t\t\t\tBaselineIops:             aws.Int32(6000),\n\t\t\t\t\tBaselineThroughputInMBps: aws.Float64(156.25),\n\t\t\t\t\tMaximumBandwidthInMbps:   aws.Int32(10000),\n\t\t\t\t\tMaximumIops:              aws.Int32(40000),\n\t\t\t\t\tMaximumThroughputInMBps:  aws.Float64(1250.00),\n\t\t\t\t},\n\t\t\t\tEbsOptimizedSupport: \"default\",\n\t\t\t\tEncryptionSupport:   \"supported\",\n\t\t\t\tNvmeSupport:         \"required\",\n\t\t\t},\n\t\t\tNeuronInfo: &ec2types.NeuronInfo{\n\t\t\t\tNeuronDevices: []ec2types.NeuronDeviceInfo{\n\t\t\t\t\t{\n\t\t\t\t\t\tCount: aws.Int32(1),\n\t\t\t\t\t\tName:  aws.String(\"Inferentia2\"),\n\t\t\t\t\t\tCoreInfo: &ec2types.NeuronDeviceCoreInfo{\n\t\t\t\t\t\t\tCount:   aws.Int32(2),\n\t\t\t\t\t\t\tVersion: aws.Int32(2),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tMemoryInfo: &ec2types.NeuronDeviceMemoryInfo{\n\t\t\t\t\t\t\tSizeInMiB: aws.Int32(32768),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tNetworkInfo: &ec2types.NetworkInfo{\n\t\t\t\tMaximumNetworkInterfaces:     aws.Int32(4),\n\t\t\t\tIpv4AddressesPerInterface:    aws.Int32(15),\n\t\t\t\tEncryptionInTransitSupported: aws.Bool(true),\n\t\t\t\tDefaultNetworkCardIndex:      aws.Int32(0),\n\t\t\t\tNetworkCards: []ec2types.NetworkCardInfo{\n\t\t\t\t\t{\n\t\t\t\t\t\tNetworkCardIndex:         aws.Int32(0),\n\t\t\t\t\t\tMaximumNetworkInterfaces: aws.Int32(4),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tInstanceType:                  \"m5.large\",\n\t\t\tSupportedUsageClasses:         []ec2types.UsageClassType{\"on-demand\", \"spot\"},\n\t\t\tSupportedVirtualizationTypes:  []ec2types.VirtualizationType{\"hvm\"},\n\t\t\tBurstablePerformanceSupported: aws.Bool(false),\n\t\t\tBareMetal:                     aws.Bool(false),\n\t\t\tHypervisor:                    \"nitro\",\n\t\t\tProcessorInfo: &ec2types.ProcessorInfo{\n\t\t\t\tManufacturer:             aws.String(\"Intel\"),\n\t\t\t\tSupportedArchitectures:   []ec2types.ArchitectureType{\"x86_64\"},\n\t\t\t\tSustainedClockSpeedInGhz: aws.Float64(3.100000),\n\t\t\t},\n\t\t\tVCpuInfo: &ec2types.VCpuInfo{\n\t\t\t\tDefaultCores: aws.Int32(1),\n\t\t\t\tDefaultVCpus: aws.Int32(2),\n\t\t\t},\n\t\t\tMemoryInfo: &ec2types.MemoryInfo{\n\t\t\t\tSizeInMiB: aws.Int64(8192),\n\t\t\t},\n\t\t\tEbsInfo: &ec2types.EbsInfo{\n\t\t\t\tEbsOptimizedInfo: &ec2types.EbsOptimizedInfo{\n\t\t\t\t\tBaselineBandwidthInMbps:  aws.Int32(650),\n\t\t\t\t\tBaselineIops:             aws.Int32(3600),\n\t\t\t\t\tBaselineThroughputInMBps: aws.Float64(81.25),\n\t\t\t\t\tMaximumBandwidthInMbps:   aws.Int32(4750),\n\t\t\t\t\tMaximumIops:              aws.Int32(18750),\n\t\t\t\t\tMaximumThroughputInMBps:  aws.Float64(593.75),\n\t\t\t\t},\n\t\t\t\tEbsOptimizedSupport: \"default\",\n\t\t\t\tEncryptionSupport:   \"supported\",\n\t\t\t\tNvmeSupport:         \"required\",\n\t\t\t},\n\t\t\tNetworkInfo: &ec2types.NetworkInfo{\n\t\t\t\tMaximumNetworkInterfaces:     aws.Int32(3),\n\t\t\t\tIpv4AddressesPerInterface:    aws.Int32(10),\n\t\t\t\tEncryptionInTransitSupported: aws.Bool(false),\n\t\t\t\tDefaultNetworkCardIndex:      aws.Int32(0),\n\t\t\t\tNetworkCards: []ec2types.NetworkCardInfo{\n\t\t\t\t\t{\n\t\t\t\t\t\tNetworkCardIndex:         aws.Int32(0),\n\t\t\t\t\t\tMaximumNetworkInterfaces: aws.Int32(3),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tInstanceType:                  \"m5.metal\",\n\t\t\tSupportedUsageClasses:         []ec2types.UsageClassType{\"on-demand\", \"spot\"},\n\t\t\tSupportedVirtualizationTypes:  []ec2types.VirtualizationType{\"hvm\"},\n\t\t\tBurstablePerformanceSupported: aws.Bool(false),\n\t\t\tBareMetal:                     aws.Bool(true),\n\t\t\tHypervisor:                    \"\",\n\t\t\tProcessorInfo: &ec2types.ProcessorInfo{\n\t\t\t\tManufacturer:             aws.String(\"Intel\"),\n\t\t\t\tSupportedArchitectures:   []ec2types.ArchitectureType{\"x86_64\"},\n\t\t\t\tSustainedClockSpeedInGhz: aws.Float64(3.100000),\n\t\t\t},\n\t\t\tVCpuInfo: &ec2types.VCpuInfo{\n\t\t\t\tDefaultCores: aws.Int32(48),\n\t\t\t\tDefaultVCpus: aws.Int32(96),\n\t\t\t},\n\t\t\tMemoryInfo: &ec2types.MemoryInfo{\n\t\t\t\tSizeInMiB: aws.Int64(393216),\n\t\t\t},\n\t\t\tEbsInfo: &ec2types.EbsInfo{\n\t\t\t\tEbsOptimizedInfo: &ec2types.EbsOptimizedInfo{\n\t\t\t\t\tBaselineBandwidthInMbps:  aws.Int32(19000),\n\t\t\t\t\tBaselineIops:             aws.Int32(80000),\n\t\t\t\t\tBaselineThroughputInMBps: aws.Float64(2375.00),\n\t\t\t\t\tMaximumBandwidthInMbps:   aws.Int32(19000),\n\t\t\t\t\tMaximumIops:              aws.Int32(80000),\n\t\t\t\t\tMaximumThroughputInMBps:  aws.Float64(2375.00),\n\t\t\t\t},\n\t\t\t\tEbsOptimizedSupport: \"default\",\n\t\t\t\tEncryptionSupport:   \"supported\",\n\t\t\t\tNvmeSupport:         \"required\",\n\t\t\t},\n\t\t\tNetworkInfo: &ec2types.NetworkInfo{\n\t\t\t\tMaximumNetworkInterfaces:     aws.Int32(15),\n\t\t\t\tIpv4AddressesPerInterface:    aws.Int32(50),\n\t\t\t\tEncryptionInTransitSupported: aws.Bool(false),\n\t\t\t\tDefaultNetworkCardIndex:      aws.Int32(0),\n\t\t\t\tNetworkCards: []ec2types.NetworkCardInfo{\n\t\t\t\t\t{\n\t\t\t\t\t\tNetworkCardIndex:         aws.Int32(0),\n\t\t\t\t\t\tMaximumNetworkInterfaces: aws.Int32(15),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tInstanceType:                  \"m5.xlarge\",\n\t\t\tSupportedUsageClasses:         []ec2types.UsageClassType{\"on-demand\", \"spot\"},\n\t\t\tSupportedVirtualizationTypes:  []ec2types.VirtualizationType{\"hvm\"},\n\t\t\tBurstablePerformanceSupported: aws.Bool(false),\n\t\t\tBareMetal:                     aws.Bool(false),\n\t\t\tHypervisor:                    \"nitro\",\n\t\t\tProcessorInfo: &ec2types.ProcessorInfo{\n\t\t\t\tManufacturer:             aws.String(\"Intel\"),\n\t\t\t\tSupportedArchitectures:   []ec2types.ArchitectureType{\"x86_64\"},\n\t\t\t\tSustainedClockSpeedInGhz: aws.Float64(3.100000),\n\t\t\t},\n\t\t\tVCpuInfo: &ec2types.VCpuInfo{\n\t\t\t\tDefaultCores: aws.Int32(2),\n\t\t\t\tDefaultVCpus: aws.Int32(4),\n\t\t\t},\n\t\t\tMemoryInfo: &ec2types.MemoryInfo{\n\t\t\t\tSizeInMiB: aws.Int64(16384),\n\t\t\t},\n\t\t\tEbsInfo: &ec2types.EbsInfo{\n\t\t\t\tEbsOptimizedInfo: &ec2types.EbsOptimizedInfo{\n\t\t\t\t\tBaselineBandwidthInMbps:  aws.Int32(1150),\n\t\t\t\t\tBaselineIops:             aws.Int32(6000),\n\t\t\t\t\tBaselineThroughputInMBps: aws.Float64(143.75),\n\t\t\t\t\tMaximumBandwidthInMbps:   aws.Int32(4750),\n\t\t\t\t\tMaximumIops:              aws.Int32(18750),\n\t\t\t\t\tMaximumThroughputInMBps:  aws.Float64(593.75),\n\t\t\t\t},\n\t\t\t\tEbsOptimizedSupport: \"default\",\n\t\t\t\tEncryptionSupport:   \"supported\",\n\t\t\t\tNvmeSupport:         \"required\",\n\t\t\t},\n\t\t\tNetworkInfo: &ec2types.NetworkInfo{\n\t\t\t\tMaximumNetworkInterfaces:     aws.Int32(4),\n\t\t\t\tIpv4AddressesPerInterface:    aws.Int32(15),\n\t\t\t\tEncryptionInTransitSupported: aws.Bool(false),\n\t\t\t\tDefaultNetworkCardIndex:      aws.Int32(0),\n\t\t\t\tNetworkCards: []ec2types.NetworkCardInfo{\n\t\t\t\t\t{\n\t\t\t\t\t\tNetworkCardIndex:         aws.Int32(0),\n\t\t\t\t\t\tMaximumNetworkInterfaces: aws.Int32(4),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tInstanceType:                  \"m6idn.32xlarge\",\n\t\t\tSupportedUsageClasses:         []ec2types.UsageClassType{\"on-demand\", \"spot\"},\n\t\t\tSupportedVirtualizationTypes:  []ec2types.VirtualizationType{\"hvm\"},\n\t\t\tBurstablePerformanceSupported: aws.Bool(false),\n\t\t\tBareMetal:                     aws.Bool(false),\n\t\t\tHypervisor:                    \"nitro\",\n\t\t\tProcessorInfo: &ec2types.ProcessorInfo{\n\t\t\t\tManufacturer:             aws.String(\"Intel\"),\n\t\t\t\tSupportedArchitectures:   []ec2types.ArchitectureType{\"x86_64\"},\n\t\t\t\tSustainedClockSpeedInGhz: aws.Float64(3.500000),\n\t\t\t},\n\t\t\tVCpuInfo: &ec2types.VCpuInfo{\n\t\t\t\tDefaultCores: aws.Int32(64),\n\t\t\t\tDefaultVCpus: aws.Int32(128),\n\t\t\t},\n\t\t\tMemoryInfo: &ec2types.MemoryInfo{\n\t\t\t\tSizeInMiB: aws.Int64(524288),\n\t\t\t},\n\t\t\tEbsInfo: &ec2types.EbsInfo{\n\t\t\t\tEbsOptimizedInfo: &ec2types.EbsOptimizedInfo{\n\t\t\t\t\tBaselineBandwidthInMbps:  aws.Int32(100000),\n\t\t\t\t\tBaselineIops:             aws.Int32(400000),\n\t\t\t\t\tBaselineThroughputInMBps: aws.Float64(12500.00),\n\t\t\t\t\tMaximumBandwidthInMbps:   aws.Int32(100000),\n\t\t\t\t\tMaximumIops:              aws.Int32(400000),\n\t\t\t\t\tMaximumThroughputInMBps:  aws.Float64(12500.00),\n\t\t\t\t},\n\t\t\t\tEbsOptimizedSupport: \"default\",\n\t\t\t\tEncryptionSupport:   \"supported\",\n\t\t\t\tNvmeSupport:         \"required\",\n\t\t\t},\n\t\t\tInstanceStorageInfo: &ec2types.InstanceStorageInfo{NvmeSupport: \"required\",\n\t\t\t\tTotalSizeInGB: aws.Int64(7600),\n\t\t\t},\n\t\t\tNetworkInfo: &ec2types.NetworkInfo{\n\t\t\t\tEfaInfo: &ec2types.EfaInfo{\n\t\t\t\t\tMaximumEfaInterfaces: aws.Int32(2),\n\t\t\t\t},\n\t\t\t\tMaximumNetworkInterfaces:     aws.Int32(16),\n\t\t\t\tIpv4AddressesPerInterface:    aws.Int32(50),\n\t\t\t\tEncryptionInTransitSupported: aws.Bool(true),\n\t\t\t\tDefaultNetworkCardIndex:      aws.Int32(0),\n\t\t\t\tNetworkCards: []ec2types.NetworkCardInfo{\n\t\t\t\t\t{\n\t\t\t\t\t\tNetworkCardIndex:         aws.Int32(0),\n\t\t\t\t\t\tMaximumNetworkInterfaces: aws.Int32(8),\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tNetworkCardIndex:         aws.Int32(1),\n\t\t\t\t\t\tMaximumNetworkInterfaces: aws.Int32(8),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tInstanceType:                  \"m7i-flex.large\",\n\t\t\tSupportedUsageClasses:         []ec2types.UsageClassType{\"on-demand\", \"spot\"},\n\t\t\tSupportedVirtualizationTypes:  []ec2types.VirtualizationType{\"hvm\"},\n\t\t\tBurstablePerformanceSupported: aws.Bool(false),\n\t\t\tBareMetal:                     aws.Bool(false),\n\t\t\tHypervisor:                    \"nitro\",\n\t\t\tProcessorInfo: &ec2types.ProcessorInfo{\n\t\t\t\tManufacturer:             aws.String(\"Intel\"),\n\t\t\t\tSupportedArchitectures:   []ec2types.ArchitectureType{\"x86_64\"},\n\t\t\t\tSustainedClockSpeedInGhz: aws.Float64(3.200000),\n\t\t\t},\n\t\t\tVCpuInfo: &ec2types.VCpuInfo{\n\t\t\t\tDefaultCores: aws.Int32(1),\n\t\t\t\tDefaultVCpus: aws.Int32(2),\n\t\t\t},\n\t\t\tMemoryInfo: &ec2types.MemoryInfo{\n\t\t\t\tSizeInMiB: aws.Int64(8192),\n\t\t\t},\n\t\t\tEbsInfo: &ec2types.EbsInfo{\n\t\t\t\tEbsOptimizedInfo: &ec2types.EbsOptimizedInfo{\n\t\t\t\t\tBaselineBandwidthInMbps:  aws.Int32(312),\n\t\t\t\t\tBaselineIops:             aws.Int32(2500),\n\t\t\t\t\tBaselineThroughputInMBps: aws.Float64(39.06),\n\t\t\t\t\tMaximumBandwidthInMbps:   aws.Int32(10000),\n\t\t\t\t\tMaximumIops:              aws.Int32(40000),\n\t\t\t\t\tMaximumThroughputInMBps:  aws.Float64(1250.00),\n\t\t\t\t},\n\t\t\t\tEbsOptimizedSupport: \"default\",\n\t\t\t\tEncryptionSupport:   \"supported\",\n\t\t\t\tNvmeSupport:         \"required\",\n\t\t\t},\n\t\t\tNetworkInfo: &ec2types.NetworkInfo{\n\t\t\t\tMaximumNetworkInterfaces:     aws.Int32(3),\n\t\t\t\tIpv4AddressesPerInterface:    aws.Int32(10),\n\t\t\t\tEncryptionInTransitSupported: aws.Bool(true),\n\t\t\t\tDefaultNetworkCardIndex:      aws.Int32(0),\n\t\t\t\tNetworkCards: []ec2types.NetworkCardInfo{\n\t\t\t\t\t{\n\t\t\t\t\t\tNetworkCardIndex:         aws.Int32(0),\n\t\t\t\t\t\tMaximumNetworkInterfaces: aws.Int32(3),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tInstanceType:                  \"p3.8xlarge\",\n\t\t\tSupportedUsageClasses:         []ec2types.UsageClassType{\"on-demand\", \"spot\"},\n\t\t\tSupportedVirtualizationTypes:  []ec2types.VirtualizationType{\"hvm\"},\n\t\t\tBurstablePerformanceSupported: aws.Bool(false),\n\t\t\tBareMetal:                     aws.Bool(false),\n\t\t\tHypervisor:                    \"xen\",\n\t\t\tProcessorInfo: &ec2types.ProcessorInfo{\n\t\t\t\tManufacturer:             aws.String(\"Intel\"),\n\t\t\t\tSupportedArchitectures:   []ec2types.ArchitectureType{\"x86_64\"},\n\t\t\t\tSustainedClockSpeedInGhz: aws.Float64(2.700000),\n\t\t\t},\n\t\t\tVCpuInfo: &ec2types.VCpuInfo{\n\t\t\t\tDefaultCores: aws.Int32(16),\n\t\t\t\tDefaultVCpus: aws.Int32(32),\n\t\t\t},\n\t\t\tMemoryInfo: &ec2types.MemoryInfo{\n\t\t\t\tSizeInMiB: aws.Int64(249856),\n\t\t\t},\n\t\t\tEbsInfo: &ec2types.EbsInfo{\n\t\t\t\tEbsOptimizedInfo: &ec2types.EbsOptimizedInfo{\n\t\t\t\t\tBaselineBandwidthInMbps:  aws.Int32(7000),\n\t\t\t\t\tBaselineIops:             aws.Int32(40000),\n\t\t\t\t\tBaselineThroughputInMBps: aws.Float64(875.00),\n\t\t\t\t\tMaximumBandwidthInMbps:   aws.Int32(7000),\n\t\t\t\t\tMaximumIops:              aws.Int32(40000),\n\t\t\t\t\tMaximumThroughputInMBps:  aws.Float64(875.00),\n\t\t\t\t},\n\t\t\t\tEbsOptimizedSupport: \"default\",\n\t\t\t\tEncryptionSupport:   \"supported\",\n\t\t\t\tNvmeSupport:         \"unsupported\",\n\t\t\t},\n\t\t\tGpuInfo: &ec2types.GpuInfo{\n\t\t\t\tGpus: []ec2types.GpuDeviceInfo{\n\t\t\t\t\t{\n\t\t\t\t\t\tName:         aws.String(\"V100\"),\n\t\t\t\t\t\tManufacturer: aws.String(\"NVIDIA\"),\n\t\t\t\t\t\tCount:        aws.Int32(4),\n\t\t\t\t\t\tMemoryInfo: &ec2types.GpuDeviceMemoryInfo{\n\t\t\t\t\t\t\tSizeInMiB: aws.Int32(16384),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tNetworkInfo: &ec2types.NetworkInfo{\n\t\t\t\tMaximumNetworkInterfaces:     aws.Int32(8),\n\t\t\t\tIpv4AddressesPerInterface:    aws.Int32(30),\n\t\t\t\tEncryptionInTransitSupported: aws.Bool(false),\n\t\t\t\tDefaultNetworkCardIndex:      aws.Int32(0),\n\t\t\t\tNetworkCards: []ec2types.NetworkCardInfo{\n\t\t\t\t\t{\n\t\t\t\t\t\tNetworkCardIndex:         aws.Int32(0),\n\t\t\t\t\t\tMaximumNetworkInterfaces: aws.Int32(8),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tInstanceType:                  \"t3.large\",\n\t\t\tSupportedUsageClasses:         []ec2types.UsageClassType{\"on-demand\", \"spot\"},\n\t\t\tSupportedVirtualizationTypes:  []ec2types.VirtualizationType{\"hvm\"},\n\t\t\tBurstablePerformanceSupported: aws.Bool(true),\n\t\t\tBareMetal:                     aws.Bool(false),\n\t\t\tHypervisor:                    \"nitro\",\n\t\t\tProcessorInfo: &ec2types.ProcessorInfo{\n\t\t\t\tManufacturer:             aws.String(\"Intel\"),\n\t\t\t\tSupportedArchitectures:   []ec2types.ArchitectureType{\"x86_64\"},\n\t\t\t\tSustainedClockSpeedInGhz: aws.Float64(2.500000),\n\t\t\t},\n\t\t\tVCpuInfo: &ec2types.VCpuInfo{\n\t\t\t\tDefaultCores: aws.Int32(1),\n\t\t\t\tDefaultVCpus: aws.Int32(2),\n\t\t\t},\n\t\t\tMemoryInfo: &ec2types.MemoryInfo{\n\t\t\t\tSizeInMiB: aws.Int64(8192),\n\t\t\t},\n\t\t\tEbsInfo: &ec2types.EbsInfo{\n\t\t\t\tEbsOptimizedInfo: &ec2types.EbsOptimizedInfo{\n\t\t\t\t\tBaselineBandwidthInMbps:  aws.Int32(695),\n\t\t\t\t\tBaselineIops:             aws.Int32(4000),\n\t\t\t\t\tBaselineThroughputInMBps: aws.Float64(86.88),\n\t\t\t\t\tMaximumBandwidthInMbps:   aws.Int32(2780),\n\t\t\t\t\tMaximumIops:              aws.Int32(15700),\n\t\t\t\t\tMaximumThroughputInMBps:  aws.Float64(347.50),\n\t\t\t\t},\n\t\t\t\tEbsOptimizedSupport: \"default\",\n\t\t\t\tEncryptionSupport:   \"supported\",\n\t\t\t\tNvmeSupport:         \"required\",\n\t\t\t},\n\t\t\tNetworkInfo: &ec2types.NetworkInfo{\n\t\t\t\tMaximumNetworkInterfaces:     aws.Int32(3),\n\t\t\t\tIpv4AddressesPerInterface:    aws.Int32(12),\n\t\t\t\tEncryptionInTransitSupported: aws.Bool(false),\n\t\t\t\tDefaultNetworkCardIndex:      aws.Int32(0),\n\t\t\t\tNetworkCards: []ec2types.NetworkCardInfo{\n\t\t\t\t\t{\n\t\t\t\t\t\tNetworkCardIndex:         aws.Int32(0),\n\t\t\t\t\t\tMaximumNetworkInterfaces: aws.Int32(3),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tInstanceType:                  \"t4g.medium\",\n\t\t\tSupportedUsageClasses:         []ec2types.UsageClassType{\"on-demand\", \"spot\"},\n\t\t\tSupportedVirtualizationTypes:  []ec2types.VirtualizationType{\"hvm\"},\n\t\t\tBurstablePerformanceSupported: aws.Bool(true),\n\t\t\tBareMetal:                     aws.Bool(false),\n\t\t\tHypervisor:                    \"nitro\",\n\t\t\tProcessorInfo: &ec2types.ProcessorInfo{\n\t\t\t\tManufacturer:             aws.String(\"AWS\"),\n\t\t\t\tSupportedArchitectures:   []ec2types.ArchitectureType{\"arm64\"},\n\t\t\t\tSustainedClockSpeedInGhz: aws.Float64(2.500000),\n\t\t\t},\n\t\t\tVCpuInfo: &ec2types.VCpuInfo{\n\t\t\t\tDefaultCores: aws.Int32(2),\n\t\t\t\tDefaultVCpus: aws.Int32(2),\n\t\t\t},\n\t\t\tMemoryInfo: &ec2types.MemoryInfo{\n\t\t\t\tSizeInMiB: aws.Int64(4096),\n\t\t\t},\n\t\t\tEbsInfo: &ec2types.EbsInfo{\n\t\t\t\tEbsOptimizedInfo: &ec2types.EbsOptimizedInfo{\n\t\t\t\t\tBaselineBandwidthInMbps:  aws.Int32(347),\n\t\t\t\t\tBaselineIops:             aws.Int32(2000),\n\t\t\t\t\tBaselineThroughputInMBps: aws.Float64(43.38),\n\t\t\t\t\tMaximumBandwidthInMbps:   aws.Int32(2085),\n\t\t\t\t\tMaximumIops:              aws.Int32(11800),\n\t\t\t\t\tMaximumThroughputInMBps:  aws.Float64(260.62),\n\t\t\t\t},\n\t\t\t\tEbsOptimizedSupport: \"default\",\n\t\t\t\tEncryptionSupport:   \"supported\",\n\t\t\t\tNvmeSupport:         \"required\",\n\t\t\t},\n\t\t\tNetworkInfo: &ec2types.NetworkInfo{\n\t\t\t\tMaximumNetworkInterfaces:     aws.Int32(3),\n\t\t\t\tIpv4AddressesPerInterface:    aws.Int32(6),\n\t\t\t\tEncryptionInTransitSupported: aws.Bool(false),\n\t\t\t\tDefaultNetworkCardIndex:      aws.Int32(0),\n\t\t\t\tNetworkCards: []ec2types.NetworkCardInfo{\n\t\t\t\t\t{\n\t\t\t\t\t\tNetworkCardIndex:         aws.Int32(0),\n\t\t\t\t\t\tMaximumNetworkInterfaces: aws.Int32(3),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tInstanceType:                  \"t4g.small\",\n\t\t\tSupportedUsageClasses:         []ec2types.UsageClassType{\"on-demand\", \"spot\"},\n\t\t\tSupportedVirtualizationTypes:  []ec2types.VirtualizationType{\"hvm\"},\n\t\t\tBurstablePerformanceSupported: aws.Bool(true),\n\t\t\tBareMetal:                     aws.Bool(false),\n\t\t\tHypervisor:                    \"nitro\",\n\t\t\tProcessorInfo: &ec2types.ProcessorInfo{\n\t\t\t\tManufacturer:             aws.String(\"AWS\"),\n\t\t\t\tSupportedArchitectures:   []ec2types.ArchitectureType{\"arm64\"},\n\t\t\t\tSustainedClockSpeedInGhz: aws.Float64(2.500000),\n\t\t\t},\n\t\t\tVCpuInfo: &ec2types.VCpuInfo{\n\t\t\t\tDefaultCores: aws.Int32(2),\n\t\t\t\tDefaultVCpus: aws.Int32(2),\n\t\t\t},\n\t\t\tMemoryInfo: &ec2types.MemoryInfo{\n\t\t\t\tSizeInMiB: aws.Int64(2048),\n\t\t\t},\n\t\t\tEbsInfo: &ec2types.EbsInfo{\n\t\t\t\tEbsOptimizedInfo: &ec2types.EbsOptimizedInfo{\n\t\t\t\t\tBaselineBandwidthInMbps:  aws.Int32(174),\n\t\t\t\t\tBaselineIops:             aws.Int32(1000),\n\t\t\t\t\tBaselineThroughputInMBps: aws.Float64(21.75),\n\t\t\t\t\tMaximumBandwidthInMbps:   aws.Int32(2085),\n\t\t\t\t\tMaximumIops:              aws.Int32(11800),\n\t\t\t\t\tMaximumThroughputInMBps:  aws.Float64(260.62),\n\t\t\t\t},\n\t\t\t\tEbsOptimizedSupport: \"default\",\n\t\t\t\tEncryptionSupport:   \"supported\",\n\t\t\t\tNvmeSupport:         \"required\",\n\t\t\t},\n\t\t\tNetworkInfo: &ec2types.NetworkInfo{\n\t\t\t\tMaximumNetworkInterfaces:     aws.Int32(3),\n\t\t\t\tIpv4AddressesPerInterface:    aws.Int32(4),\n\t\t\t\tEncryptionInTransitSupported: aws.Bool(false),\n\t\t\t\tDefaultNetworkCardIndex:      aws.Int32(0),\n\t\t\t\tNetworkCards: []ec2types.NetworkCardInfo{\n\t\t\t\t\t{\n\t\t\t\t\t\tNetworkCardIndex:         aws.Int32(0),\n\t\t\t\t\t\tMaximumNetworkInterfaces: aws.Int32(3),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tInstanceType:                  \"t4g.xlarge\",\n\t\t\tSupportedUsageClasses:         []ec2types.UsageClassType{\"on-demand\", \"spot\"},\n\t\t\tSupportedVirtualizationTypes:  []ec2types.VirtualizationType{\"hvm\"},\n\t\t\tBurstablePerformanceSupported: aws.Bool(true),\n\t\t\tBareMetal:                     aws.Bool(false),\n\t\t\tHypervisor:                    \"nitro\",\n\t\t\tProcessorInfo: &ec2types.ProcessorInfo{\n\t\t\t\tManufacturer:             aws.String(\"AWS\"),\n\t\t\t\tSupportedArchitectures:   []ec2types.ArchitectureType{\"arm64\"},\n\t\t\t\tSustainedClockSpeedInGhz: aws.Float64(2.500000),\n\t\t\t},\n\t\t\tVCpuInfo: &ec2types.VCpuInfo{\n\t\t\t\tDefaultCores: aws.Int32(4),\n\t\t\t\tDefaultVCpus: aws.Int32(4),\n\t\t\t},\n\t\t\tMemoryInfo: &ec2types.MemoryInfo{\n\t\t\t\tSizeInMiB: aws.Int64(16384),\n\t\t\t},\n\t\t\tEbsInfo: &ec2types.EbsInfo{\n\t\t\t\tEbsOptimizedInfo: &ec2types.EbsOptimizedInfo{\n\t\t\t\t\tBaselineBandwidthInMbps:  aws.Int32(695),\n\t\t\t\t\tBaselineIops:             aws.Int32(4000),\n\t\t\t\t\tBaselineThroughputInMBps: aws.Float64(86.88),\n\t\t\t\t\tMaximumBandwidthInMbps:   aws.Int32(2780),\n\t\t\t\t\tMaximumIops:              aws.Int32(15700),\n\t\t\t\t\tMaximumThroughputInMBps:  aws.Float64(347.50),\n\t\t\t\t},\n\t\t\t\tEbsOptimizedSupport: \"default\",\n\t\t\t\tEncryptionSupport:   \"supported\",\n\t\t\t\tNvmeSupport:         \"required\",\n\t\t\t},\n\t\t\tNetworkInfo: &ec2types.NetworkInfo{\n\t\t\t\tMaximumNetworkInterfaces:     aws.Int32(4),\n\t\t\t\tIpv4AddressesPerInterface:    aws.Int32(15),\n\t\t\t\tEncryptionInTransitSupported: aws.Bool(false),\n\t\t\t\tDefaultNetworkCardIndex:      aws.Int32(0),\n\t\t\t\tNetworkCards: []ec2types.NetworkCardInfo{\n\t\t\t\t\t{\n\t\t\t\t\t\tNetworkCardIndex:         aws.Int32(0),\n\t\t\t\t\t\tMaximumNetworkInterfaces: aws.Int32(4),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tInstanceType:                  \"trn1.2xlarge\",\n\t\t\tSupportedUsageClasses:         []ec2types.UsageClassType{\"on-demand\", \"spot\"},\n\t\t\tSupportedVirtualizationTypes:  []ec2types.VirtualizationType{\"hvm\"},\n\t\t\tBurstablePerformanceSupported: aws.Bool(false),\n\t\t\tBareMetal:                     aws.Bool(false),\n\t\t\tHypervisor:                    \"nitro\",\n\t\t\tProcessorInfo: &ec2types.ProcessorInfo{\n\t\t\t\tManufacturer:             aws.String(\"Intel\"),\n\t\t\t\tSupportedArchitectures:   []ec2types.ArchitectureType{\"x86_64\"},\n\t\t\t\tSustainedClockSpeedInGhz: aws.Float64(3.500000),\n\t\t\t},\n\t\t\tVCpuInfo: &ec2types.VCpuInfo{\n\t\t\t\tDefaultCores: aws.Int32(4),\n\t\t\t\tDefaultVCpus: aws.Int32(8),\n\t\t\t},\n\t\t\tMemoryInfo: &ec2types.MemoryInfo{\n\t\t\t\tSizeInMiB: aws.Int64(32768),\n\t\t\t},\n\t\t\tEbsInfo: &ec2types.EbsInfo{\n\t\t\t\tEbsOptimizedInfo: &ec2types.EbsOptimizedInfo{\n\t\t\t\t\tBaselineBandwidthInMbps:  aws.Int32(5000),\n\t\t\t\t\tBaselineIops:             aws.Int32(16250),\n\t\t\t\t\tBaselineThroughputInMBps: aws.Float64(625.00),\n\t\t\t\t\tMaximumBandwidthInMbps:   aws.Int32(20000),\n\t\t\t\t\tMaximumIops:              aws.Int32(65000),\n\t\t\t\t\tMaximumThroughputInMBps:  aws.Float64(2500.00),\n\t\t\t\t},\n\t\t\t\tEbsOptimizedSupport: \"default\",\n\t\t\t\tEncryptionSupport:   \"supported\",\n\t\t\t\tNvmeSupport:         \"required\",\n\t\t\t},\n\t\t\tNeuronInfo: &ec2types.NeuronInfo{\n\t\t\t\tNeuronDevices: []ec2types.NeuronDeviceInfo{\n\t\t\t\t\t{\n\t\t\t\t\t\tCount: aws.Int32(1),\n\t\t\t\t\t\tName:  aws.String(\"Trainium\"),\n\t\t\t\t\t\tCoreInfo: &ec2types.NeuronDeviceCoreInfo{\n\t\t\t\t\t\t\tCount:   aws.Int32(2),\n\t\t\t\t\t\t\tVersion: aws.Int32(2),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tMemoryInfo: &ec2types.NeuronDeviceMemoryInfo{\n\t\t\t\t\t\t\tSizeInMiB: aws.Int32(32768),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tInstanceStorageInfo: &ec2types.InstanceStorageInfo{NvmeSupport: \"required\",\n\t\t\t\tTotalSizeInGB: aws.Int64(474),\n\t\t\t},\n\t\t\tNetworkInfo: &ec2types.NetworkInfo{\n\t\t\t\tMaximumNetworkInterfaces:     aws.Int32(4),\n\t\t\t\tIpv4AddressesPerInterface:    aws.Int32(15),\n\t\t\t\tEncryptionInTransitSupported: aws.Bool(true),\n\t\t\t\tDefaultNetworkCardIndex:      aws.Int32(0),\n\t\t\t\tNetworkCards: []ec2types.NetworkCardInfo{\n\t\t\t\t\t{\n\t\t\t\t\t\tNetworkCardIndex:         aws.Int32(0),\n\t\t\t\t\t\tMaximumNetworkInterfaces: aws.Int32(4),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t},\n}\n\nvar defaultDescribeInstanceTypeOfferingsOutput = &ec2.DescribeInstanceTypeOfferingsOutput{\n\tInstanceTypeOfferings: []ec2types.InstanceTypeOffering{\n\t\t{\n\t\t\tInstanceType: \"c6g.large\",\n\t\t\tLocation:     lo.ToPtr(\"test-zone-1a\"),\n\t\t},\n\t\t{\n\t\t\tInstanceType: \"dl1.24xlarge\",\n\t\t\tLocation:     lo.ToPtr(\"test-zone-1a\"),\n\t\t},\n\t\t{\n\t\t\tInstanceType: \"dl1.24xlarge\",\n\t\t\tLocation:     lo.ToPtr(\"test-zone-1b\"),\n\t\t},\n\t\t{\n\t\t\tInstanceType: \"g4ad.16xlarge\",\n\t\t\tLocation:     lo.ToPtr(\"test-zone-1a\"),\n\t\t},\n\t\t{\n\t\t\tInstanceType: \"g4ad.16xlarge\",\n\t\t\tLocation:     lo.ToPtr(\"test-zone-1b\"),\n\t\t},\n\t\t{\n\t\t\tInstanceType: \"g4dn.8xlarge\",\n\t\t\tLocation:     lo.ToPtr(\"test-zone-1a\"),\n\t\t},\n\t\t{\n\t\t\tInstanceType: \"g4dn.8xlarge\",\n\t\t\tLocation:     lo.ToPtr(\"test-zone-1b\"),\n\t\t},\n\t\t{\n\t\t\tInstanceType: \"inf2.24xlarge\",\n\t\t\tLocation:     lo.ToPtr(\"test-zone-1a\"),\n\t\t},\n\t\t{\n\t\t\tInstanceType: \"inf2.xlarge\",\n\t\t\tLocation:     lo.ToPtr(\"test-zone-1a\"),\n\t\t},\n\t\t{\n\t\t\tInstanceType: \"m5.2xlarge\",\n\t\t\tLocation:     lo.ToPtr(\"test-zone-1a\"),\n\t\t},\n\t\t{\n\t\t\tInstanceType: \"m5.4xlarge\",\n\t\t\tLocation:     lo.ToPtr(\"test-zone-1a\"),\n\t\t},\n\t\t{\n\t\t\tInstanceType: \"m5.8xlarge\",\n\t\t\tLocation:     lo.ToPtr(\"test-zone-1a\"),\n\t\t},\n\t\t{\n\t\t\tInstanceType: \"m5.large\",\n\t\t\tLocation:     lo.ToPtr(\"test-zone-1a\"),\n\t\t},\n\t\t{\n\t\t\tInstanceType: \"m5.large\",\n\t\t\tLocation:     lo.ToPtr(\"test-zone-1b\"),\n\t\t},\n\t\t{\n\t\t\tInstanceType: \"m5.large\",\n\t\t\tLocation:     lo.ToPtr(\"test-zone-1c\"),\n\t\t},\n\t\t{\n\t\t\tInstanceType: \"m5.large\",\n\t\t\tLocation:     lo.ToPtr(\"test-zone-1a-local\"),\n\t\t},\n\t\t{\n\t\t\tInstanceType: \"m5.metal\",\n\t\t\tLocation:     lo.ToPtr(\"test-zone-1a\"),\n\t\t},\n\t\t{\n\t\t\tInstanceType: \"m5.metal\",\n\t\t\tLocation:     lo.ToPtr(\"test-zone-1b\"),\n\t\t},\n\t\t{\n\t\t\tInstanceType: \"m5.xlarge\",\n\t\t\tLocation:     lo.ToPtr(\"test-zone-1a\"),\n\t\t},\n\t\t{\n\t\t\tInstanceType: \"m5.xlarge\",\n\t\t\tLocation:     lo.ToPtr(\"test-zone-1b\"),\n\t\t},\n\t\t{\n\t\t\tInstanceType: \"m6idn.32xlarge\",\n\t\t\tLocation:     lo.ToPtr(\"test-zone-1a\"),\n\t\t},\n\t\t{\n\t\t\tInstanceType: \"m6idn.32xlarge\",\n\t\t\tLocation:     lo.ToPtr(\"test-zone-1b\"),\n\t\t},\n\t\t{\n\t\t\tInstanceType: \"m6idn.32xlarge\",\n\t\t\tLocation:     lo.ToPtr(\"test-zone-1c\"),\n\t\t},\n\t\t{\n\t\t\tInstanceType: \"m7i-flex.large\",\n\t\t\tLocation:     lo.ToPtr(\"test-zone-1a\"),\n\t\t},\n\t\t{\n\t\t\tInstanceType: \"p3.8xlarge\",\n\t\t\tLocation:     lo.ToPtr(\"test-zone-1a\"),\n\t\t},\n\t\t{\n\t\t\tInstanceType: \"p3.8xlarge\",\n\t\t\tLocation:     lo.ToPtr(\"test-zone-1b\"),\n\t\t},\n\t\t{\n\t\t\tInstanceType: \"t3.large\",\n\t\t\tLocation:     lo.ToPtr(\"test-zone-1a\"),\n\t\t},\n\t\t{\n\t\t\tInstanceType: \"t3.large\",\n\t\t\tLocation:     lo.ToPtr(\"test-zone-1b\"),\n\t\t},\n\t\t{\n\t\t\tInstanceType: \"trn1.2xlarge\",\n\t\t\tLocation:     lo.ToPtr(\"test-zone-1a\"),\n\t\t},\n\t},\n}\n"
  },
  {
    "path": "pkg/operator/operator.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage operator\n\nimport (\n\t\"context\"\n\t\"encoding/base64\"\n\t\"errors\"\n\t\"fmt\"\n\t\"net\"\n\t\"os\"\n\n\t\"github.com/aws/aws-sdk-go-v2/aws\"\n\tawsmiddleware \"github.com/aws/aws-sdk-go-v2/aws/middleware\"\n\t\"github.com/aws/aws-sdk-go-v2/config\"\n\t\"github.com/aws/aws-sdk-go-v2/feature/ec2/imds\"\n\t\"github.com/aws/aws-sdk-go-v2/service/ec2\"\n\t\"github.com/aws/aws-sdk-go-v2/service/eks\"\n\t\"github.com/aws/aws-sdk-go-v2/service/iam\"\n\t\"github.com/aws/aws-sdk-go-v2/service/ssm\"\n\t\"github.com/awslabs/operatorpkg/aws/middleware\"\n\t\"sigs.k8s.io/controller-runtime/pkg/manager\"\n\n\t\"github.com/aws/smithy-go\"\n\t\"github.com/patrickmn/go-cache\"\n\t\"github.com/samber/lo\"\n\tcorev1 \"k8s.io/api/core/v1\"\n\tmetav1 \"k8s.io/apimachinery/pkg/apis/meta/v1\"\n\t\"k8s.io/client-go/kubernetes\"\n\t\"k8s.io/client-go/rest\"\n\t\"k8s.io/client-go/transport\"\n\t\"sigs.k8s.io/controller-runtime/pkg/client\"\n\t\"sigs.k8s.io/controller-runtime/pkg/log\"\n\tcrmetrics \"sigs.k8s.io/controller-runtime/pkg/metrics\"\n\n\tkarpv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n\t\"sigs.k8s.io/karpenter/pkg/operator\"\n\n\tprometheusv2 \"github.com/jonathan-innis/aws-sdk-go-prometheus/v2\"\n\n\tsdk \"github.com/aws/karpenter-provider-aws/pkg/aws\"\n\tawscache \"github.com/aws/karpenter-provider-aws/pkg/cache\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/operator/options\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/amifamily\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/capacityreservation\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/instance\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/instanceprofile\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/instancetype\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/launchtemplate\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/pricing\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/securitygroup\"\n\tssmp \"github.com/aws/karpenter-provider-aws/pkg/providers/ssm\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/subnet\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/version\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/utils\"\n)\n\nfunc init() {\n\tkarpv1.NormalizedLabels = lo.Assign(karpv1.NormalizedLabels, map[string]string{\"topology.ebs.csi.aws.com/zone\": corev1.LabelTopologyZone})\n}\n\n// Operator is injected into the AWS CloudProvider's factories\ntype Operator struct {\n\t*operator.Operator\n\tConfig                      aws.Config\n\tUnavailableOfferingsCache   *awscache.UnavailableOfferings\n\tSSMCache                    *cache.Cache\n\tValidationCache             *cache.Cache\n\tRecreationCache             *cache.Cache\n\tSubnetProvider              subnet.Provider\n\tSecurityGroupProvider       securitygroup.Provider\n\tInstanceProfileProvider     instanceprofile.Provider\n\tAMIProvider                 amifamily.Provider\n\tAMIResolver                 amifamily.Resolver\n\tLaunchTemplateProvider      launchtemplate.Provider\n\tPricingProvider             pricing.Provider\n\tVersionProvider             *version.DefaultProvider\n\tInstanceTypesProvider       *instancetype.DefaultProvider\n\tInstanceProvider            instance.Provider\n\tSSMProvider                 ssmp.Provider\n\tCapacityReservationProvider capacityreservation.Provider\n\tEC2API                      *ec2.Client\n}\n\nfunc NewOperator(ctx context.Context, operator *operator.Operator) (context.Context, *Operator) {\n\tcfg := prometheusv2.WithPrometheusMetrics(WithUserAgent(lo.Must(config.LoadDefaultConfig(ctx))), crmetrics.Registry)\n\tcfg.APIOptions = append(cfg.APIOptions, middleware.StructuredErrorHandler)\n\tif cfg.Region == \"\" {\n\t\tlog.FromContext(ctx).V(1).Info(\"retrieving region from IMDS\")\n\t\tregion, err := imds.NewFromConfig(cfg).GetRegion(ctx, nil)\n\t\tif err != nil {\n\t\t\tlo.Must0(fmt.Errorf(\"unable to determine region from IMDS: %w\", err))\n\t\t}\n\t\tcfg.Region = region.Region\n\t}\n\tec2api := ec2.NewFromConfig(cfg)\n\teksapi := eks.NewFromConfig(cfg)\n\tif err := CheckEC2Connectivity(ctx, ec2api); err != nil {\n\t\tlog.FromContext(ctx).Error(err, \"ec2 api connectivity check failed\")\n\t\tos.Exit(1)\n\t}\n\tlog.FromContext(ctx).WithValues(\"region\", cfg.Region).V(1).Info(\"discovered region\")\n\tclusterEndpoint, err := ResolveClusterEndpoint(ctx, eksapi)\n\tif err != nil {\n\t\tlog.FromContext(ctx).Error(err, \"failed detecting cluster endpoint\")\n\t\tos.Exit(1)\n\t} else {\n\t\tlog.FromContext(ctx).WithValues(\"cluster-endpoint\", clusterEndpoint).V(1).Info(\"discovered cluster endpoint\")\n\t}\n\tkubeDNSIP, err := KubeDNSIP(ctx, operator.KubernetesInterface)\n\tif err != nil {\n\t\t// If we fail to get the kube-dns IP, we don't want to crash because this causes issues with custom DNS setups\n\t\t// https://github.com/aws/karpenter-provider-aws/issues/2787\n\t\tlog.FromContext(ctx).V(1).Info(fmt.Sprintf(\"unable to detect the IP of the kube-dns service, %s\", err))\n\t} else {\n\t\tlog.FromContext(ctx).WithValues(\"kube-dns-ip\", kubeDNSIP).V(1).Info(\"discovered kube dns\")\n\t}\n\tunavailableOfferingsCache := awscache.NewUnavailableOfferings()\n\tssmCache := cache.New(awscache.SSMCacheTTL, awscache.DefaultCleanupInterval)\n\tvalidationCache := cache.New(awscache.ValidationTTL, awscache.DefaultCleanupInterval)\n\trecreationCache := cache.New(awscache.RecreationTTL, awscache.DefaultCleanupInterval)\n\n\tsubnetProvider := subnet.NewDefaultProvider(ec2api, cache.New(awscache.DefaultTTL, awscache.DefaultCleanupInterval), cache.New(awscache.AvailableIPAddressTTL, awscache.DefaultCleanupInterval), cache.New(awscache.AssociatePublicIPAddressTTL, awscache.DefaultCleanupInterval))\n\tsecurityGroupProvider := securitygroup.NewDefaultProvider(ec2api, cache.New(awscache.DefaultTTL, awscache.DefaultCleanupInterval))\n\tinstanceProfileProvider := instanceprofile.NewDefaultProvider(\n\t\tiam.NewFromConfig(cfg),\n\t\tcache.New(awscache.InstanceProfileTTL, awscache.DefaultCleanupInterval),\n\t\tcache.New(awscache.DefaultCleanupInterval, awscache.DefaultCleanupInterval),\n\t\tcache.New(awscache.ProtectedProfilesTTL, awscache.DefaultCleanupInterval),\n\t\tcfg.Region,\n\t)\n\tpricingProvider := pricing.NewDefaultProvider(\n\t\tpricing.NewAPI(cfg),\n\t\tec2api,\n\t\tcfg.Region,\n\t\toptions.FromContext(ctx).IsolatedVPC,\n\t)\n\tversionProvider := version.NewDefaultProvider(operator.KubernetesInterface, eksapi)\n\t// Ensure we're able to hydrate the version before starting any reliant controllers.\n\t// Version updates are hydrated asynchronously after this, in the event of a failure\n\t// the previously resolved value will be used.\n\tlo.Must0(versionProvider.UpdateVersion(ctx))\n\tssmProvider := ssmp.NewDefaultProvider(ssm.NewFromConfig(cfg), ssmCache)\n\tamiProvider := amifamily.NewDefaultProvider(operator.Clock, versionProvider, ssmProvider, ec2api, cache.New(awscache.DefaultTTL, awscache.DefaultCleanupInterval))\n\tamiResolver := amifamily.NewDefaultResolver(cfg.Region)\n\tlaunchTemplateProvider := launchtemplate.NewDefaultProvider(\n\t\tctx,\n\t\tcache.New(awscache.DefaultTTL, awscache.DefaultCleanupInterval),\n\t\tec2api,\n\t\teksapi,\n\t\tamiResolver,\n\t\tsecurityGroupProvider,\n\t\tsubnetProvider,\n\t\tlo.Must(GetCABundle(ctx, operator.GetConfig())),\n\t\toperator.Elected(),\n\t\tkubeDNSIP,\n\t\tclusterEndpoint,\n\t)\n\tcapacityReservationProvider := capacityreservation.NewProvider(\n\t\tec2api,\n\t\toperator.Clock,\n\t\tcache.New(awscache.DefaultTTL, awscache.DefaultCleanupInterval),\n\t\tcache.New(awscache.CapacityReservationAvailabilityTTL, awscache.DefaultCleanupInterval),\n\t)\n\tinstanceTypeProvider := instancetype.NewDefaultProvider(\n\t\tcache.New(awscache.InstanceTypesZonesAndOfferingsTTL, awscache.DefaultCleanupInterval),\n\t\tcache.New(awscache.InstanceTypesZonesAndOfferingsTTL, awscache.DefaultCleanupInterval),\n\t\tcache.New(awscache.DiscoveredCapacityCacheTTL, awscache.DefaultCleanupInterval),\n\t\tec2api,\n\t\tsubnetProvider,\n\t\tpricingProvider,\n\t\tcapacityReservationProvider,\n\t\tunavailableOfferingsCache,\n\t\tinstancetype.NewDefaultResolver(cfg.Region),\n\t)\n\t// Ensure we're able to hydrate instance types before starting any reliant controllers.\n\t// Instance type updates are hydrated asynchronously after this by controllers.\n\tlo.Must0(instanceTypeProvider.UpdateInstanceTypes(ctx))\n\tlo.Must0(instanceTypeProvider.UpdateInstanceTypeOfferings(ctx))\n\tinstanceProvider := instance.NewDefaultProvider(\n\t\tctx,\n\t\tcfg.Region,\n\t\toperator.EventRecorder,\n\t\tec2api,\n\t\tunavailableOfferingsCache,\n\t\tsubnetProvider,\n\t\tlaunchTemplateProvider,\n\t\tcapacityReservationProvider,\n\t\tcache.New(awscache.DefaultTTL, awscache.DefaultCleanupInterval),\n\t)\n\n\t// Setup field indexers on instanceID -- specifically for the interruption controller\n\tif options.FromContext(ctx).InterruptionQueue != \"\" {\n\t\tSetupIndexers(ctx, operator.Manager)\n\t}\n\treturn ctx, &Operator{\n\t\tOperator:                    operator,\n\t\tConfig:                      cfg,\n\t\tUnavailableOfferingsCache:   unavailableOfferingsCache,\n\t\tSSMCache:                    ssmCache,\n\t\tValidationCache:             validationCache,\n\t\tRecreationCache:             recreationCache,\n\t\tSubnetProvider:              subnetProvider,\n\t\tSecurityGroupProvider:       securityGroupProvider,\n\t\tInstanceProfileProvider:     instanceProfileProvider,\n\t\tAMIProvider:                 amiProvider,\n\t\tAMIResolver:                 amiResolver,\n\t\tVersionProvider:             versionProvider,\n\t\tLaunchTemplateProvider:      launchTemplateProvider,\n\t\tPricingProvider:             pricingProvider,\n\t\tInstanceTypesProvider:       instanceTypeProvider,\n\t\tInstanceProvider:            instanceProvider,\n\t\tSSMProvider:                 ssmProvider,\n\t\tCapacityReservationProvider: capacityReservationProvider,\n\t\tEC2API:                      ec2api,\n\t}\n}\n\n// WithUserAgent adds a karpenter specific user-agent string to AWS session\nfunc WithUserAgent(cfg aws.Config) aws.Config {\n\tuserAgent := fmt.Sprintf(\"karpenter.sh-%s\", operator.Version)\n\tcfg.APIOptions = append(cfg.APIOptions,\n\t\tawsmiddleware.AddUserAgentKey(userAgent),\n\t)\n\treturn cfg\n}\n\n// CheckEC2Connectivity makes a dry-run call to DescribeInstanceTypes.  If it fails, we provide an early indicator that we\n// are having issues connecting to the EC2 API.\nfunc CheckEC2Connectivity(ctx context.Context, api sdk.EC2API) error {\n\t_, err := api.DescribeInstanceTypes(ctx, &ec2.DescribeInstanceTypesInput{\n\t\tDryRun: aws.Bool(true),\n\t})\n\tvar apiErr smithy.APIError\n\tif errors.As(err, &apiErr) && apiErr.ErrorCode() == \"DryRunOperation\" {\n\t\treturn nil\n\t}\n\treturn err\n}\n\nfunc ResolveClusterEndpoint(ctx context.Context, eksAPI sdk.EKSAPI) (string, error) {\n\tclusterEndpointFromOptions := options.FromContext(ctx).ClusterEndpoint\n\tif clusterEndpointFromOptions != \"\" {\n\t\treturn clusterEndpointFromOptions, nil // cluster endpoint is explicitly set\n\t}\n\tout, err := eksAPI.DescribeCluster(ctx, &eks.DescribeClusterInput{\n\t\tName: aws.String(options.FromContext(ctx).ClusterName),\n\t})\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"failed to resolve cluster endpoint, %w\", err)\n\t}\n\treturn *out.Cluster.Endpoint, nil\n}\n\nfunc GetCABundle(ctx context.Context, restConfig *rest.Config) (*string, error) {\n\t// Discover CA Bundle from the REST client. We could alternatively\n\t// have used the simpler client-go InClusterConfig() method.\n\t// However, that only works when Karpenter is running as a Pod\n\t// within the same cluster it's managing.\n\tif caBundle := options.FromContext(ctx).ClusterCABundle; caBundle != \"\" {\n\t\treturn lo.ToPtr(caBundle), nil\n\t}\n\ttransportConfig, err := restConfig.TransportConfig()\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"discovering caBundle, loading transport config, %w\", err)\n\t}\n\t_, err = transport.TLSConfigFor(transportConfig) // fills in CAData!\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"discovering caBundle, loading TLS config, %w\", err)\n\t}\n\treturn lo.ToPtr(base64.StdEncoding.EncodeToString(transportConfig.TLS.CAData)), nil\n}\n\nfunc KubeDNSIP(ctx context.Context, kubernetesInterface kubernetes.Interface) (net.IP, error) {\n\tif kubernetesInterface == nil {\n\t\treturn nil, fmt.Errorf(\"no K8s client provided\")\n\t}\n\tdnsService, err := kubernetesInterface.CoreV1().Services(\"kube-system\").Get(ctx, \"kube-dns\", metav1.GetOptions{})\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tkubeDNSIP := net.ParseIP(dnsService.Spec.ClusterIP)\n\tif kubeDNSIP == nil {\n\t\treturn nil, fmt.Errorf(\"parsing cluster IP\")\n\t}\n\treturn kubeDNSIP, nil\n}\n\nfunc SetupIndexers(ctx context.Context, mgr manager.Manager) {\n\tlo.Must0(mgr.GetFieldIndexer().IndexField(ctx, &karpv1.NodeClaim{}, \"status.instanceID\", func(o client.Object) []string {\n\t\tif o.(*karpv1.NodeClaim).Status.ProviderID == \"\" {\n\t\t\treturn nil\n\t\t}\n\t\tid, e := utils.ParseInstanceID(o.(*karpv1.NodeClaim).Status.ProviderID)\n\t\tif e != nil || id == \"\" {\n\t\t\treturn nil\n\t\t}\n\t\treturn []string{id}\n\t}), \"failed to setup nodeclaim instanceID indexer\")\n\tlo.Must0(mgr.GetFieldIndexer().IndexField(ctx, &corev1.Node{}, \"spec.instanceID\", func(o client.Object) []string {\n\t\tif o.(*corev1.Node).Spec.ProviderID == \"\" {\n\t\t\treturn nil\n\t\t}\n\t\tid, e := utils.ParseInstanceID(o.(*corev1.Node).Spec.ProviderID)\n\t\tif e != nil || id == \"\" {\n\t\t\treturn nil\n\t\t}\n\t\treturn []string{id}\n\t}), \"failed to setup node instanceID indexer\")\n}\n"
  },
  {
    "path": "pkg/operator/options/options.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage options\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"flag\"\n\t\"fmt\"\n\t\"os\"\n\n\tcoreoptions \"sigs.k8s.io/karpenter/pkg/operator/options\"\n\t\"sigs.k8s.io/karpenter/pkg/utils/env\"\n\n\t\"github.com/aws/karpenter-provider-aws/pkg/utils\"\n)\n\nfunc init() {\n\tcoreoptions.Injectables = append(coreoptions.Injectables, &Options{})\n}\n\ntype optionsKey struct{}\n\ntype Options struct {\n\tClusterCABundle         string\n\tClusterName             string\n\tClusterEndpoint         string\n\tIsolatedVPC             bool\n\tEKSControlPlane         bool\n\tVMMemoryOverheadPercent float64\n\tInterruptionQueue       string\n\tReservedENIs            int\n\tDisableDryRun           bool\n}\n\nfunc (o *Options) AddFlags(fs *coreoptions.FlagSet) {\n\tfs.StringVar(&o.ClusterCABundle, \"cluster-ca-bundle\", env.WithDefaultString(\"CLUSTER_CA_BUNDLE\", \"\"), \"Cluster CA bundle for nodes to use for TLS connections with the API server. If not set, this is taken from the controller's TLS configuration.\")\n\tfs.StringVar(&o.ClusterName, \"cluster-name\", env.WithDefaultString(\"CLUSTER_NAME\", \"\"), \"[REQUIRED] The kubernetes cluster name for resource discovery.\")\n\tfs.StringVar(&o.ClusterEndpoint, \"cluster-endpoint\", env.WithDefaultString(\"CLUSTER_ENDPOINT\", \"\"), \"The external kubernetes cluster endpoint for new nodes to connect with. If not specified, will discover the cluster endpoint using DescribeCluster API.\")\n\tfs.BoolVarWithEnv(&o.IsolatedVPC, \"isolated-vpc\", \"ISOLATED_VPC\", false, \"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 on-demand pricing endpoint.\")\n\tfs.BoolVarWithEnv(&o.EKSControlPlane, \"eks-control-plane\", \"EKS_CONTROL_PLANE\", false, \"Marking this true means that your cluster is running with an EKS control plane and Karpenter should attempt to discover cluster details from the DescribeCluster API \")\n\tfs.Float64Var(&o.VMMemoryOverheadPercent, \"vm-memory-overhead-percent\", utils.WithDefaultFloat64(\"VM_MEMORY_OVERHEAD_PERCENT\", 0.075), \"The VM memory overhead as a percent that will be subtracted from the total memory for all instance types when cached information is unavailable.\")\n\tfs.StringVar(&o.InterruptionQueue, \"interruption-queue\", env.WithDefaultString(\"INTERRUPTION_QUEUE\", \"\"), \"Interruption queue is the name of the SQS queue used for processing interruption events from EC2. Interruption handling is disabled if not specified. Enabling interruption handling may require additional permissions on the controller service account. Additional permissions are outlined in the docs.\")\n\tfs.IntVar(&o.ReservedENIs, \"reserved-enis\", env.WithDefaultInt(\"RESERVED_ENIS\", 0), \"Reserved ENIs are not included in the calculations for max-pods or kube-reserved. This is most often used in the VPC CNI custom networking setup https://docs.aws.amazon.com/eks/latest/userguide/cni-custom-network.html.\")\n\tfs.BoolVarWithEnv(&o.DisableDryRun, \"disable-dry-run\", \"DISABLE_DRY_RUN\", false, \"If true, then disable dry run validation for EC2NodeClasses.\")\n}\n\nfunc (o *Options) Parse(fs *coreoptions.FlagSet, args ...string) error {\n\tif err := fs.Parse(args); err != nil {\n\t\tif errors.Is(err, flag.ErrHelp) {\n\t\t\tos.Exit(0)\n\t\t}\n\t\treturn fmt.Errorf(\"parsing flags, %w\", err)\n\t}\n\tif err := o.Validate(); err != nil {\n\t\treturn fmt.Errorf(\"validating options, %w\", err)\n\t}\n\treturn nil\n}\n\nfunc (o *Options) ToContext(ctx context.Context) context.Context {\n\treturn ToContext(ctx, o)\n}\n\nfunc ToContext(ctx context.Context, opts *Options) context.Context {\n\treturn context.WithValue(ctx, optionsKey{}, opts)\n}\n\nfunc FromContext(ctx context.Context) *Options {\n\tretval := ctx.Value(optionsKey{})\n\tif retval == nil {\n\t\treturn nil\n\t}\n\treturn retval.(*Options)\n}\n"
  },
  {
    "path": "pkg/operator/options/options_validation.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage options\n\nimport (\n\t\"fmt\"\n\t\"net/url\"\n\n\t\"github.com/awslabs/operatorpkg/serrors\"\n\t\"go.uber.org/multierr\"\n)\n\nfunc (o *Options) Validate() error {\n\treturn multierr.Combine(\n\t\to.validateEndpoint(),\n\t\to.validateVMMemoryOverheadPercent(),\n\t\to.validateReservedENIs(),\n\t\to.validateRequiredFields(),\n\t)\n}\n\nfunc (o *Options) validateEndpoint() error {\n\tif o.ClusterEndpoint == \"\" {\n\t\treturn nil\n\t}\n\tendpoint, err := url.Parse(o.ClusterEndpoint)\n\t// url.Parse() will accept a lot of input without error; make\n\t// sure it's a real URL\n\tif err != nil || !endpoint.IsAbs() || endpoint.Hostname() == \"\" {\n\t\treturn serrors.Wrap(fmt.Errorf(\"cluster endpoint URL is not valid\"), \"cluster-endpoint\", o.ClusterEndpoint)\n\t}\n\treturn nil\n}\n\nfunc (o *Options) validateVMMemoryOverheadPercent() error {\n\tif o.VMMemoryOverheadPercent < 0 {\n\t\treturn fmt.Errorf(\"vm-memory-overhead-percent cannot be negative\")\n\t}\n\treturn nil\n}\n\nfunc (o *Options) validateReservedENIs() error {\n\tif o.ReservedENIs < 0 {\n\t\treturn fmt.Errorf(\"reserved-enis cannot be negative\")\n\t}\n\treturn nil\n}\n\nfunc (o *Options) validateRequiredFields() error {\n\tif o.ClusterName == \"\" {\n\t\treturn fmt.Errorf(\"missing field, cluster-name\")\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "pkg/operator/options/suite_test.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage options_test\n\nimport (\n\t\"context\"\n\t\"flag\"\n\t\"os\"\n\t\"testing\"\n\n\t\"github.com/samber/lo\"\n\tcoreoptions \"sigs.k8s.io/karpenter/pkg/operator/options\"\n\n\t\"github.com/aws/karpenter-provider-aws/pkg/operator/options\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/test\"\n\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n\t. \"sigs.k8s.io/karpenter/pkg/utils/testing\"\n)\n\nvar ctx context.Context\n\nfunc TestAPIs(t *testing.T) {\n\tctx = TestContextWithLogger(t)\n\tRegisterFailHandler(Fail)\n\tRunSpecs(t, \"Options\")\n}\n\nvar _ = Describe(\"Options\", func() {\n\tvar fs *coreoptions.FlagSet\n\tvar opts *options.Options\n\n\tBeforeEach(func() {\n\t\tfs = &coreoptions.FlagSet{\n\t\t\tFlagSet: flag.NewFlagSet(\"karpenter\", flag.ContinueOnError),\n\t\t}\n\t\topts = &options.Options{}\n\t})\n\tAfterEach(func() {\n\t\tos.Clearenv()\n\t})\n\n\tIt(\"should correctly override default vars when CLI flags are set\", func() {\n\t\topts.AddFlags(fs)\n\t\terr := opts.Parse(fs,\n\t\t\t\"--cluster-ca-bundle\", \"env-bundle\",\n\t\t\t\"--cluster-name\", \"env-cluster\",\n\t\t\t\"--cluster-endpoint\", \"https://env-cluster\",\n\t\t\t\"--isolated-vpc\",\n\t\t\t\"--vm-memory-overhead-percent\", \"0.1\",\n\t\t\t\"--interruption-queue\", \"env-cluster\",\n\t\t\t\"--reserved-enis\", \"10\",\n\t\t\t\"--disable-dry-run\")\n\t\tExpect(err).ToNot(HaveOccurred())\n\t\texpectOptionsEqual(opts, test.Options(test.OptionsFields{\n\t\t\tClusterCABundle:         lo.ToPtr(\"env-bundle\"),\n\t\t\tClusterName:             lo.ToPtr(\"env-cluster\"),\n\t\t\tClusterEndpoint:         lo.ToPtr(\"https://env-cluster\"),\n\t\t\tIsolatedVPC:             lo.ToPtr(true),\n\t\t\tVMMemoryOverheadPercent: lo.ToPtr[float64](0.1),\n\t\t\tInterruptionQueue:       lo.ToPtr(\"env-cluster\"),\n\t\t\tReservedENIs:            lo.ToPtr(10),\n\t\t\tDisableDryRun:           lo.ToPtr(true),\n\t\t}))\n\t})\n\tIt(\"should correctly fallback to env vars when CLI flags aren't set\", func() {\n\t\tos.Setenv(\"CLUSTER_CA_BUNDLE\", \"env-bundle\")\n\t\tos.Setenv(\"CLUSTER_NAME\", \"env-cluster\")\n\t\tos.Setenv(\"CLUSTER_ENDPOINT\", \"https://env-cluster\")\n\t\tos.Setenv(\"ISOLATED_VPC\", \"true\")\n\t\tos.Setenv(\"VM_MEMORY_OVERHEAD_PERCENT\", \"0.1\")\n\t\tos.Setenv(\"INTERRUPTION_QUEUE\", \"env-cluster\")\n\t\tos.Setenv(\"RESERVED_ENIS\", \"10\")\n\t\tos.Setenv(\"DISABLE_DRY_RUN\", \"false\")\n\n\t\t// Add flags after we set the environment variables so that the parsing logic correctly refers\n\t\t// to the new environment variable values\n\t\topts.AddFlags(fs)\n\t\terr := opts.Parse(fs)\n\t\tExpect(err).ToNot(HaveOccurred())\n\t\texpectOptionsEqual(opts, test.Options(test.OptionsFields{\n\t\t\tClusterCABundle:         lo.ToPtr(\"env-bundle\"),\n\t\t\tClusterName:             lo.ToPtr(\"env-cluster\"),\n\t\t\tClusterEndpoint:         lo.ToPtr(\"https://env-cluster\"),\n\t\t\tIsolatedVPC:             lo.ToPtr(true),\n\t\t\tVMMemoryOverheadPercent: lo.ToPtr[float64](0.1),\n\t\t\tInterruptionQueue:       lo.ToPtr(\"env-cluster\"),\n\t\t\tReservedENIs:            lo.ToPtr(10),\n\t\t\tDisableDryRun:           lo.ToPtr(false),\n\t\t}))\n\t})\n\n\tContext(\"Validation\", func() {\n\t\tBeforeEach(func() {\n\t\t\topts.AddFlags(fs)\n\t\t})\n\t\tIt(\"should fail when cluster name is not set\", func() {\n\t\t\terr := opts.Parse(fs)\n\t\t\tExpect(err).To(HaveOccurred())\n\t\t})\n\t\tIt(\"should fail when clusterEndpoint is invalid (not absolute)\", func() {\n\t\t\terr := opts.Parse(fs, \"--cluster-name\", \"test-cluster\", \"--cluster-endpoint\", \"00000000000000000000000.gr7.us-west-2.eks.amazonaws.com\")\n\t\t\tExpect(err).To(HaveOccurred())\n\t\t})\n\t\tIt(\"should fail when vmMemoryOverheadPercent is negative\", func() {\n\t\t\terr := opts.Parse(fs, \"--cluster-name\", \"test-cluster\", \"--vm-memory-overhead-percent\", \"-0.01\")\n\t\t\tExpect(err).To(HaveOccurred())\n\t\t})\n\t\tIt(\"should fail when reservedENIs is negative\", func() {\n\t\t\terr := opts.Parse(fs, \"--cluster-name\", \"test-cluster\", \"--reserved-enis\", \"-1\")\n\t\t\tExpect(err).To(HaveOccurred())\n\t\t})\n\t})\n})\n\nfunc expectOptionsEqual(optsA *options.Options, optsB *options.Options) {\n\tGinkgoHelper()\n\tExpect(optsA.ClusterCABundle).To(Equal(optsB.ClusterCABundle))\n\tExpect(optsA.ClusterName).To(Equal(optsB.ClusterName))\n\tExpect(optsA.ClusterEndpoint).To(Equal(optsB.ClusterEndpoint))\n\tExpect(optsA.IsolatedVPC).To(Equal(optsB.IsolatedVPC))\n\tExpect(optsA.VMMemoryOverheadPercent).To(Equal(optsB.VMMemoryOverheadPercent))\n\tExpect(optsA.InterruptionQueue).To(Equal(optsB.InterruptionQueue))\n\tExpect(optsA.ReservedENIs).To(Equal(optsB.ReservedENIs))\n\tExpect(optsA.DisableDryRun).To(Equal(optsB.DisableDryRun))\n}\n"
  },
  {
    "path": "pkg/operator/suite_test.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage operator_test\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"testing\"\n\n\t\"sigs.k8s.io/karpenter/pkg/test/v1alpha1\"\n\n\t\"github.com/aws/aws-sdk-go-v2/service/eks\"\n\tekstypes \"github.com/aws/aws-sdk-go-v2/service/eks/types\"\n\t\"github.com/samber/lo\"\n\n\tcoretest \"sigs.k8s.io/karpenter/pkg/test\"\n\n\t\"github.com/aws/karpenter-provider-aws/pkg/apis\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/fake\"\n\tawscontext \"github.com/aws/karpenter-provider-aws/pkg/operator\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/operator/options\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/test\"\n\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n\t. \"sigs.k8s.io/karpenter/pkg/test/expectations\"\n\t. \"sigs.k8s.io/karpenter/pkg/utils/testing\"\n)\n\nvar ctx context.Context\nvar stop context.CancelFunc\nvar env *coretest.Environment\nvar fakeEKSAPI *fake.EKSAPI\n\nfunc TestAWS(t *testing.T) {\n\tctx = TestContextWithLogger(t)\n\tRegisterFailHandler(Fail)\n\tRunSpecs(t, \"CloudProvider/AWS\")\n}\n\nvar _ = BeforeSuite(func() {\n\tenv = coretest.NewEnvironment(coretest.WithCRDs(apis.CRDs...), coretest.WithCRDs(v1alpha1.CRDs...))\n\tctx, stop = context.WithCancel(ctx)\n\n\tfakeEKSAPI = &fake.EKSAPI{}\n})\n\nvar _ = AfterSuite(func() {\n\tstop()\n\tExpect(env.Stop()).To(Succeed(), \"Failed to stop environment\")\n})\n\nvar _ = BeforeEach(func() {\n\tfakeEKSAPI.Reset()\n})\n\nvar _ = AfterEach(func() {\n\tExpectCleanedUp(ctx, env.Client)\n})\n\nvar _ = Describe(\"Operator\", func() {\n\tIt(\"should resolve endpoint if set via configuration\", func() {\n\t\tctx = options.ToContext(ctx, test.Options(test.OptionsFields{\n\t\t\tClusterEndpoint: lo.ToPtr(\"https://api.test-cluster.k8s.local\"),\n\t\t}))\n\t\tendpoint, err := awscontext.ResolveClusterEndpoint(ctx, fakeEKSAPI)\n\t\tExpect(err).ToNot(HaveOccurred())\n\t\tExpect(endpoint).To(Equal(\"https://api.test-cluster.k8s.local\"))\n\t})\n\tIt(\"should resolve endpoint if not set, via call to API\", func() {\n\t\tctx = options.ToContext(ctx, test.Options(test.OptionsFields{\n\t\t\tClusterEndpoint: lo.ToPtr(\"\"),\n\t\t}))\n\t\tfakeEKSAPI.DescribeClusterBehavior.Output.Set(\n\t\t\t&eks.DescribeClusterOutput{\n\t\t\t\tCluster: &ekstypes.Cluster{\n\t\t\t\t\tEndpoint: lo.ToPtr(\"https://cluster-endpoint.test-cluster.k8s.local\"),\n\t\t\t\t},\n\t\t\t},\n\t\t)\n\n\t\tendpoint, err := awscontext.ResolveClusterEndpoint(ctx, fakeEKSAPI)\n\t\tExpect(err).ToNot(HaveOccurred())\n\t\tExpect(endpoint).To(Equal(\"https://cluster-endpoint.test-cluster.k8s.local\"))\n\t})\n\tIt(\"should propagate error if API fails\", func() {\n\t\tctx = options.ToContext(ctx, test.Options(test.OptionsFields{\n\t\t\tClusterEndpoint: lo.ToPtr(\"\"),\n\t\t}))\n\t\tfakeEKSAPI.DescribeClusterBehavior.Error.Set(errors.New(\"test error\"))\n\n\t\t_, err := awscontext.ResolveClusterEndpoint(ctx, fakeEKSAPI)\n\t\tExpect(err).To(HaveOccurred())\n\t})\n})\n"
  },
  {
    "path": "pkg/providers/amifamily/al2.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage amifamily\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\n\t\"github.com/aws/aws-sdk-go-v2/aws\"\n\t\"github.com/awslabs/operatorpkg/serrors\"\n\tcorev1 \"k8s.io/api/core/v1\"\n\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\t\"github.com/samber/lo\"\n\n\t\"sigs.k8s.io/karpenter/pkg/scheduling\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\n\t\"sigs.k8s.io/karpenter/pkg/cloudprovider\"\n\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/amifamily/bootstrap\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/ssm\"\n)\n\ntype AL2 struct {\n\tDefaultFamily\n\t*Options\n}\n\nfunc (a AL2) DescribeImageQuery(ctx context.Context, ssmProvider ssm.Provider, k8sVersion string, amiVersion string) (DescribeImageQuery, error) {\n\tids := map[string][]Variant{}\n\tfor path, variants := range map[string][]Variant{\n\t\tfmt.Sprintf(\"/aws/service/eks/optimized-ami/%s/amazon-linux-2/%s/image_id\", k8sVersion, lo.Ternary(\n\t\t\tamiVersion == v1.AliasVersionLatest,\n\t\t\t\"recommended\",\n\t\t\tfmt.Sprintf(\"amazon-eks-node-%s-%s\", k8sVersion, amiVersion),\n\t\t)): {VariantStandard},\n\t\tfmt.Sprintf(\"/aws/service/eks/optimized-ami/%s/amazon-linux-2-arm64/%s/image_id\", k8sVersion, lo.Ternary(\n\t\t\tamiVersion == v1.AliasVersionLatest,\n\t\t\t\"recommended\",\n\t\t\tfmt.Sprintf(\"amazon-eks-arm64-node-%s-%s\", k8sVersion, amiVersion),\n\t\t)): {VariantStandard},\n\t\tfmt.Sprintf(\"/aws/service/eks/optimized-ami/%s/amazon-linux-2-gpu/%s/image_id\", k8sVersion, lo.Ternary(\n\t\t\tamiVersion == v1.AliasVersionLatest,\n\t\t\t\"recommended\",\n\t\t\tfmt.Sprintf(\"amazon-eks-gpu-node-%s-%s\", k8sVersion, amiVersion),\n\t\t)): {VariantNeuron, VariantNvidia},\n\t} {\n\t\timageID, err := ssmProvider.Get(ctx, ssm.Parameter{\n\t\t\tName:      path,\n\t\t\tIsMutable: amiVersion == v1.AliasVersionLatest,\n\t\t})\n\t\tif err != nil {\n\t\t\tcontinue\n\t\t}\n\t\tids[imageID] = variants\n\t}\n\t// Failed to discover any AMIs, we should short circuit AMI discovery\n\tif len(ids) == 0 {\n\t\treturn DescribeImageQuery{}, serrors.Wrap(fmt.Errorf(\"failed to discover any AMIs for alias\"), \"alias\", fmt.Sprintf(\"al2@%s\", amiVersion))\n\t}\n\n\treturn DescribeImageQuery{\n\t\tFilters: []ec2types.Filter{{\n\t\t\tName:   lo.ToPtr(\"image-id\"),\n\t\t\tValues: lo.Keys(ids),\n\t\t}},\n\t\tKnownRequirements: lo.MapValues(ids, func(variants []Variant, _ string) []scheduling.Requirements {\n\t\t\treturn lo.Map(variants, func(v Variant, _ int) scheduling.Requirements { return v.Requirements() })\n\t\t}),\n\t}, nil\n}\n\n// UserData returns the exact same string for equivalent input,\n// even if elements of those inputs are in differing orders,\n// guaranteeing it won't cause spurious hash differences.\n// AL2 userdata also works on Ubuntu\nfunc (a AL2) UserData(kubeletConfig *v1.KubeletConfiguration, taints []corev1.Taint, labels map[string]string, caBundle *string, _ []*cloudprovider.InstanceType, customUserData *string, instanceStorePolicy *v1.InstanceStorePolicy) bootstrap.Bootstrapper {\n\treturn bootstrap.EKS{\n\t\tOptions: bootstrap.Options{\n\t\t\tClusterName:         a.ClusterName,\n\t\t\tClusterEndpoint:     a.ClusterEndpoint,\n\t\t\tKubeletConfig:       kubeletConfig,\n\t\t\tTaints:              taints,\n\t\t\tLabels:              labels,\n\t\t\tCABundle:            caBundle,\n\t\t\tCustomUserData:      customUserData,\n\t\t\tInstanceStorePolicy: instanceStorePolicy,\n\t\t},\n\t}\n}\n\n// DefaultBlockDeviceMappings returns the default block device mappings for the AMI Family\nfunc (a AL2) DefaultBlockDeviceMappings() []*v1.BlockDeviceMapping {\n\treturn []*v1.BlockDeviceMapping{{\n\t\tDeviceName: a.EphemeralBlockDevice(),\n\t\tEBS:        &DefaultEBS,\n\t}}\n}\n\nfunc (a AL2) EphemeralBlockDevice() *string {\n\treturn aws.String(\"/dev/xvda\")\n}\n"
  },
  {
    "path": "pkg/providers/amifamily/al2023.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage amifamily\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\n\t\"github.com/awslabs/operatorpkg/serrors\"\n\t\"github.com/samber/lo\"\n\tcorev1 \"k8s.io/api/core/v1\"\n\t\"sigs.k8s.io/karpenter/pkg/cloudprovider\"\n\t\"sigs.k8s.io/karpenter/pkg/scheduling\"\n\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/amifamily/bootstrap\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/ssm\"\n)\n\ntype AL2023 struct {\n\tDefaultFamily\n\t*Options\n}\n\nfunc (a AL2023) DescribeImageQuery(ctx context.Context, ssmProvider ssm.Provider, k8sVersion string, amiVersion string) (DescribeImageQuery, error) {\n\tids := map[string]Variant{}\n\tfor arch, variants := range map[string][]Variant{\n\t\t\"x86_64\": {VariantStandard, VariantNvidia, VariantNeuron},\n\t\t\"arm64\":  {VariantStandard, VariantNvidia},\n\t} {\n\t\tfor _, variant := range variants {\n\t\t\tpath := a.resolvePath(arch, string(variant), k8sVersion, amiVersion)\n\t\t\timageID, err := ssmProvider.Get(ctx, ssm.Parameter{\n\t\t\t\tName:      path,\n\t\t\t\tIsMutable: amiVersion == v1.AliasVersionLatest,\n\t\t\t})\n\t\t\tif err != nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tids[imageID] = variant\n\t\t}\n\t}\n\t// Failed to discover any AMIs, we should short circuit AMI discovery\n\tif len(ids) == 0 {\n\t\treturn DescribeImageQuery{}, serrors.Wrap(fmt.Errorf(\"failed to discover any AMIs for alias\"), \"alias\", fmt.Sprintf(\"al2023@%s\", amiVersion))\n\t}\n\n\treturn DescribeImageQuery{\n\t\tFilters: []ec2types.Filter{{\n\t\t\tName:   lo.ToPtr(\"image-id\"),\n\t\t\tValues: lo.Keys(ids),\n\t\t}},\n\t\tKnownRequirements: lo.MapValues(ids, func(v Variant, _ string) []scheduling.Requirements {\n\t\t\treturn []scheduling.Requirements{v.Requirements()}\n\t\t}),\n\t}, nil\n}\n\nfunc (a AL2023) resolvePath(architecture, variant, k8sVersion, amiVersion string) string {\n\tname := lo.Ternary(\n\t\tamiVersion == v1.AliasVersionLatest,\n\t\t\"recommended\",\n\t\tfmt.Sprintf(\"amazon-eks-node-al2023-%s-%s-%s-%s\", architecture, variant, k8sVersion, amiVersion),\n\t)\n\treturn fmt.Sprintf(\"/aws/service/eks/optimized-ami/%s/amazon-linux-2023/%s/%s/%s/image_id\", k8sVersion, architecture, variant, name)\n}\n\nfunc (a AL2023) UserData(kubeletConfig *v1.KubeletConfiguration, taints []corev1.Taint, labels map[string]string, caBundle *string, _ []*cloudprovider.InstanceType, customUserData *string, instanceStorePolicy *v1.InstanceStorePolicy) bootstrap.Bootstrapper {\n\treturn bootstrap.Nodeadm{\n\t\tOptions: bootstrap.Options{\n\t\t\tClusterName:         a.ClusterName,\n\t\t\tClusterEndpoint:     a.ClusterEndpoint,\n\t\t\tClusterCIDR:         a.ClusterCIDR,\n\t\t\tKubeletConfig:       kubeletConfig,\n\t\t\tTaints:              taints,\n\t\t\tLabels:              labels,\n\t\t\tCABundle:            caBundle,\n\t\t\tCustomUserData:      customUserData,\n\t\t\tInstanceStorePolicy: instanceStorePolicy,\n\t\t},\n\t}\n}\n\n// DefaultBlockDeviceMappings returns the default block device mappings for the AMI Family\nfunc (a AL2023) DefaultBlockDeviceMappings() []*v1.BlockDeviceMapping {\n\treturn []*v1.BlockDeviceMapping{{\n\t\tDeviceName: a.EphemeralBlockDevice(),\n\t\tEBS:        &DefaultEBS,\n\t}}\n}\n\nfunc (a AL2023) EphemeralBlockDevice() *string {\n\treturn lo.ToPtr(\"/dev/xvda\")\n}\n"
  },
  {
    "path": "pkg/providers/amifamily/ami.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage amifamily\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n\n\t\"github.com/aws/aws-sdk-go-v2/aws\"\n\t\"github.com/aws/aws-sdk-go-v2/service/ec2\"\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\t\"github.com/mitchellh/hashstructure/v2\"\n\t\"github.com/patrickmn/go-cache\"\n\t\"github.com/samber/lo\"\n\t\"k8s.io/utils/clock\"\n\n\t\"github.com/aws/karpenter-provider-aws/pkg/errors\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/utils\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\tsdk \"github.com/aws/karpenter-provider-aws/pkg/aws\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/version\"\n\n\t\"sigs.k8s.io/controller-runtime/pkg/log\"\n\t\"sigs.k8s.io/karpenter/pkg/cloudprovider\"\n\t\"sigs.k8s.io/karpenter/pkg/scheduling\"\n\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/ssm\"\n)\n\ntype Provider interface {\n\tList(ctx context.Context, nodeClass *v1.EC2NodeClass) (AMIs, error)\n}\n\ntype DefaultProvider struct {\n\tsync.Mutex\n\n\tclk             clock.Clock\n\tcache           *cache.Cache\n\tec2api          sdk.EC2API\n\tversionProvider version.Provider\n\tssmProvider     ssm.Provider\n}\n\nfunc NewDefaultProvider(clk clock.Clock, versionProvider version.Provider, ssmProvider ssm.Provider, ec2api sdk.EC2API, cache *cache.Cache) *DefaultProvider {\n\treturn &DefaultProvider{\n\t\tclk:             clk,\n\t\tcache:           cache,\n\t\tec2api:          ec2api,\n\t\tversionProvider: versionProvider,\n\t\tssmProvider:     ssmProvider,\n\t}\n}\n\n// List Returning a list of AMIs with its associated requirements\nfunc (p *DefaultProvider) List(ctx context.Context, nodeClass *v1.EC2NodeClass) (AMIs, error) {\n\tp.Lock()\n\tdefer p.Unlock()\n\tamis, err := p.amis(ctx, nodeClass)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tamis.Sort()\n\treturn amis, nil\n}\n\n//nolint:gocyclo\nfunc (p *DefaultProvider) DescribeImageQueries(ctx context.Context, nodeClass *v1.EC2NodeClass) ([]DescribeImageQuery, error) {\n\t// Aliases are mutually exclusive, both on the term level and field level within a term.\n\t// This is enforced by a CEL validation, we will treat this as an invariant.\n\tif alias := nodeClass.Alias(); alias != nil {\n\t\tkubernetesVersion := p.versionProvider.Get(ctx)\n\t\tif alias.Family == v1.AMIFamilyAL2 {\n\t\t\tminorVersion, err := strconv.Atoi(strings.Split(kubernetesVersion, \".\")[1])\n\t\t\tif err == nil && minorVersion >= 33 {\n\t\t\t\treturn nil, &AL2DeprecationError{\n\t\t\t\t\terror: fmt.Errorf(\"AL2 aliases are no longer supported on EKS 1.33+ (see https://docs.aws.amazon.com/eks/latest/userguide/kubernetes-versions-standard.html#kubernetes-1-33)\"),\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif alias.Family == v1.AMIFamilyWindows2025 {\n\t\t\tminorVersion, err := strconv.Atoi(strings.Split(kubernetesVersion, \".\")[1])\n\t\t\tif err == nil && minorVersion < 35 {\n\t\t\t\treturn nil, &WS2025UnsupportedVersionError{\n\t\t\t\t\terror: fmt.Errorf(\"Windows Server 2025 requires EKS version 1.35 or higher, current version: %s\", kubernetesVersion),\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tquery, err := GetAMIFamily(alias.Family, nil).DescribeImageQuery(ctx, p.ssmProvider, kubernetesVersion, alias.Version)\n\t\tif err != nil {\n\t\t\treturn []DescribeImageQuery{}, err\n\t\t}\n\t\treturn []DescribeImageQuery{query}, nil\n\t}\n\n\tidFilter := ec2types.Filter{Name: aws.String(\"image-id\")}\n\tqueries := []DescribeImageQuery{}\n\tfor _, term := range nodeClass.Spec.AMISelectorTerms {\n\t\tswitch {\n\t\tcase term.ID != \"\":\n\t\t\tidFilter.Values = append(idFilter.Values, term.ID)\n\t\tcase term.SSMParameter != \"\":\n\t\t\timageID, err := p.ssmProvider.Get(ctx, ssm.Parameter{\n\t\t\t\tName: term.SSMParameter,\n\t\t\t\tType: ssm.CustomParameterType,\n\t\t\t})\n\t\t\tif err != nil {\n\t\t\t\tif !errors.IsNotFound(err) {\n\t\t\t\t\treturn []DescribeImageQuery{}, fmt.Errorf(\"resolving ssm parameter, %w\", err)\n\t\t\t\t}\n\t\t\t\tlog.FromContext(ctx).WithValues(\"ssmParameter\", term.SSMParameter).V(1).Error(err, \"parameter not found\")\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif !strings.HasPrefix(imageID, \"ami-\") {\n\t\t\t\tlog.FromContext(ctx).WithValues(\"ssmParameter\", term.SSMParameter, \"id\", imageID).V(1).Error(nil, \"parameter value is an invalid AMI ID\")\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tidFilter.Values = append(idFilter.Values, imageID)\n\t\tdefault:\n\t\t\tquery := DescribeImageQuery{\n\t\t\t\tOwners: lo.Ternary(term.Owner != \"\", []string{term.Owner}, []string{}),\n\t\t\t}\n\t\t\tif term.Name != \"\" {\n\t\t\t\t// Default owners to self,amazon to ensure Karpenter only discovers cross-account AMIs if the user specifically allows it.\n\t\t\t\t// Removing this default would cause Karpenter to discover publicly shared AMIs passing the name filter.\n\t\t\t\tquery = DescribeImageQuery{\n\t\t\t\t\tOwners: lo.Ternary(term.Owner != \"\", []string{term.Owner}, []string{\"self\", \"amazon\"}),\n\t\t\t\t}\n\t\t\t\tquery.Filters = append(query.Filters, ec2types.Filter{\n\t\t\t\t\tName:   aws.String(\"name\"),\n\t\t\t\t\tValues: []string{term.Name},\n\t\t\t\t})\n\n\t\t\t}\n\t\t\tfor k, v := range term.Tags {\n\t\t\t\tif v == \"*\" {\n\t\t\t\t\tquery.Filters = append(query.Filters, ec2types.Filter{\n\t\t\t\t\t\tName:   aws.String(\"tag-key\"),\n\t\t\t\t\t\tValues: []string{k},\n\t\t\t\t\t})\n\t\t\t\t} else {\n\t\t\t\t\tquery.Filters = append(query.Filters, ec2types.Filter{\n\t\t\t\t\t\tName:   aws.String(fmt.Sprintf(\"tag:%s\", k)),\n\t\t\t\t\t\tValues: []string{v},\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\t\t\tqueries = append(queries, query)\n\t\t}\n\t}\n\tif len(idFilter.Values) > 0 {\n\t\tqueries = append(queries, DescribeImageQuery{Filters: []ec2types.Filter{idFilter}})\n\t}\n\treturn queries, nil\n}\n\n//nolint:gocyclo\nfunc (p *DefaultProvider) amis(ctx context.Context, nodeClass *v1.EC2NodeClass) (AMIs, error) {\n\tqueries, err := p.DescribeImageQueries(ctx, nodeClass)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"getting AMI queries, %w\", err)\n\t}\n\thash := utils.GetNodeClassHash(nodeClass)\n\tif images, ok := p.cache.Get(hash); ok {\n\t\t// Ensure what's returned from this function is a deep-copy of AMIs so alterations\n\t\t// to the data don't affect the original\n\t\treturn append(AMIs{}, images.(AMIs)...), nil\n\t}\n\timages := map[uint64]AMI{}\n\tfor _, query := range queries {\n\t\tpaginator := ec2.NewDescribeImagesPaginator(p.ec2api, query.DescribeImagesInput())\n\t\tfor paginator.HasMorePages() {\n\t\t\tpage, err := paginator.NextPage(ctx)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"describing images, %w\", err)\n\t\t\t}\n\t\t\tfor _, image := range page.Images {\n\t\t\t\tarch, ok := v1.AWSToKubeArchitectures[string(image.Architecture)]\n\t\t\t\tif !ok {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\t// Each image may have multiple associated sets of requirements. For example, an image may be compatible with Neuron instances\n\t\t\t\t// and GPU instances. In that case, we'll have a set of requirements for each, and will create one \"image\" for each.\n\t\t\t\tfor _, reqs := range query.RequirementsForImageWithArchitecture(lo.FromPtr(image.ImageId), arch) {\n\t\t\t\t\t// Checks and store for AMIs\n\t\t\t\t\t// Following checks are needed in order to always priortize non deprecated AMIs\n\t\t\t\t\t// If we already have an image with the same set of requirements, but this image (candidate) is newer, replace the previous (existing) image.\n\t\t\t\t\t// If we already have an image with the same set of requirements which is deprecated, but this image (candidate) is newer or non deprecated, replace the previous (existing) image\n\t\t\t\t\treqsHash := lo.Must(hashstructure.Hash(reqs.NodeSelectorRequirements(), hashstructure.FormatV2, &hashstructure.HashOptions{SlicesAsSets: true}))\n\t\t\t\t\tcandidateDeprecated := parseTimeWithDefault(lo.FromPtr(image.DeprecationTime), maxTime).Unix() <= p.clk.Now().Unix()\n\t\t\t\t\tami := AMI{\n\t\t\t\t\t\tName:         lo.FromPtr(image.Name),\n\t\t\t\t\t\tAmiID:        lo.FromPtr(image.ImageId),\n\t\t\t\t\t\tCreationDate: lo.FromPtr(image.CreationDate),\n\t\t\t\t\t\tDeprecated:   candidateDeprecated,\n\t\t\t\t\t\tRequirements: reqs,\n\t\t\t\t\t}\n\t\t\t\t\tif v, ok := images[reqsHash]; ok {\n\t\t\t\t\t\tif cmpResult := compareAMI(v, ami); cmpResult <= 0 {\n\t\t\t\t\t\t\tcontinue\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\timages[reqsHash] = ami\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tp.cache.SetDefault(hash, AMIs(lo.Values(images)))\n\treturn lo.Values(images), nil\n}\n\n// MapToInstanceTypes returns a map of AMIIDs that are the most recent on creationDate to compatible instancetypes\nfunc MapToInstanceTypes(instanceTypes []*cloudprovider.InstanceType, amis []v1.AMI) map[string][]*cloudprovider.InstanceType {\n\tamiIDs := map[string][]*cloudprovider.InstanceType{}\n\tfor _, instanceType := range instanceTypes {\n\t\tfor _, ami := range amis {\n\t\t\tif err := instanceType.Requirements.Compatible(\n\t\t\t\tscheduling.NewNodeSelectorRequirements(ami.Requirements...),\n\t\t\t); err == nil {\n\t\t\t\tamiIDs[ami.ID] = append(amiIDs[ami.ID], instanceType)\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\treturn amiIDs\n}\n\n// Compare two AMI's based on their deprecation status, creation time or name\n// If both AMIs are deprecated, compare creation time and return the one with the newer creation time\n// If both AMIs are non-deprecated, compare creation time and return the one with the newer creation time\n// If one AMI is deprecated, return the non deprecated one\n// The result will be\n// 0 if AMI i == AMI j, where creation date, deprecation status and name are all equal\n// -1 if AMI i < AMI j, if AMI i is non-deprecated or newer than AMI j\n// +1 if AMI i > AMI j, if AMI j is non-deprecated or newer than AMI i\nfunc compareAMI(i, j AMI) int {\n\tiCreationDate := parseTimeWithDefault(i.CreationDate, minTime)\n\tjCreationDate := parseTimeWithDefault(j.CreationDate, minTime)\n\t// Prioritize non-deprecated AMIs over deprecated ones\n\tif i.Deprecated != j.Deprecated {\n\t\treturn lo.Ternary(i.Deprecated, 1, -1)\n\t}\n\t// If both are either non-deprecated or deprecated, compare by creation date\n\tif iCreationDate.Unix() != jCreationDate.Unix() {\n\t\treturn lo.Ternary(iCreationDate.Unix() > jCreationDate.Unix(), -1, 1)\n\t}\n\t// If they have the same creation date, use the name as a tie-breaker\n\tif i.Name != j.Name {\n\t\treturn lo.Ternary(i.Name > j.Name, -1, 1)\n\t}\n\t// If all attributes are are equal, both AMIs are exactly identical\n\treturn 0\n}\n"
  },
  {
    "path": "pkg/providers/amifamily/bootstrap/bootstrap.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage bootstrap\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"sort\"\n\t\"strings\"\n\n\t\"github.com/samber/lo\"\n\tcorev1 \"k8s.io/api/core/v1\"\n\tmetav1 \"k8s.io/apimachinery/pkg/apis/meta/v1\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n)\n\n// Options is the node bootstrapping parameters passed from Karpenter to the provisioning node\ntype Options struct {\n\tClusterName         string\n\tClusterEndpoint     string\n\tClusterCIDR         *string\n\tKubeletConfig       *v1.KubeletConfiguration\n\tTaints              []corev1.Taint    `hash:\"set\"`\n\tLabels              map[string]string `hash:\"set\"`\n\tCABundle            *string\n\tContainerRuntime    *string\n\tCustomUserData      *string\n\tInstanceStorePolicy *v1.InstanceStorePolicy\n\tAMIVersion          string\n}\n\nfunc (o Options) kubeletExtraArgs() (args []string) {\n\targs = append(args, o.nodeLabelArg(), o.nodeTaintArg())\n\n\tif o.KubeletConfig == nil {\n\t\treturn lo.Compact(args)\n\t}\n\tif o.KubeletConfig.MaxPods != nil {\n\t\targs = append(args, fmt.Sprintf(\"--max-pods=%d\", lo.FromPtr(o.KubeletConfig.MaxPods)))\n\t}\n\tif o.KubeletConfig.PodsPerCore != nil {\n\t\targs = append(args, fmt.Sprintf(\"--pods-per-core=%d\", lo.FromPtr(o.KubeletConfig.PodsPerCore)))\n\t}\n\t// We have to convert some of these maps so that their values return the correct string\n\targs = append(args, joinParameterArgs(\"--system-reserved\", o.KubeletConfig.SystemReserved, \"=\"))\n\targs = append(args, joinParameterArgs(\"--kube-reserved\", o.KubeletConfig.KubeReserved, \"=\"))\n\targs = append(args, joinParameterArgs(\"--eviction-hard\", o.KubeletConfig.EvictionHard, \"<\"))\n\targs = append(args, joinParameterArgs(\"--eviction-soft\", o.KubeletConfig.EvictionSoft, \"<\"))\n\targs = append(args, joinParameterArgs(\"--eviction-soft-grace-period\", lo.MapValues(o.KubeletConfig.EvictionSoftGracePeriod, func(v metav1.Duration, _ string) string { return v.Duration.String() }), \"=\"))\n\n\tif o.KubeletConfig.EvictionMaxPodGracePeriod != nil {\n\t\targs = append(args, fmt.Sprintf(\"--eviction-max-pod-grace-period=%d\", lo.FromPtr(o.KubeletConfig.EvictionMaxPodGracePeriod)))\n\t}\n\tif o.KubeletConfig.ImageGCHighThresholdPercent != nil {\n\t\targs = append(args, fmt.Sprintf(\"--image-gc-high-threshold=%d\", lo.FromPtr(o.KubeletConfig.ImageGCHighThresholdPercent)))\n\t}\n\tif o.KubeletConfig.ImageGCLowThresholdPercent != nil {\n\t\targs = append(args, fmt.Sprintf(\"--image-gc-low-threshold=%d\", lo.FromPtr(o.KubeletConfig.ImageGCLowThresholdPercent)))\n\t}\n\tif o.KubeletConfig.CPUCFSQuota != nil {\n\t\targs = append(args, fmt.Sprintf(\"--cpu-cfs-quota=%t\", lo.FromPtr(o.KubeletConfig.CPUCFSQuota)))\n\t}\n\treturn lo.Compact(args)\n}\n\nfunc (o Options) nodeTaintArg() string {\n\tvar taintStrings []string\n\tfor _, taint := range o.Taints {\n\t\ttaintStrings = append(taintStrings, taint.ToString())\n\t}\n\treturn fmt.Sprintf(\"--register-with-taints=%q\", strings.Join(taintStrings, \",\"))\n}\n\nfunc (o Options) nodeLabelArg() string {\n\tif len(o.Labels) == 0 {\n\t\treturn \"\"\n\t}\n\tvar labelStrings []string\n\tkeys := lo.Keys(o.Labels)\n\tsort.Strings(keys) // ensures this list is deterministic, for easy testing.\n\tfor _, key := range keys {\n\t\tlabelStrings = append(labelStrings, fmt.Sprintf(\"%s=%v\", key, o.Labels[key]))\n\t}\n\treturn fmt.Sprintf(\"--node-labels=%q\", strings.Join(labelStrings, \",\"))\n}\n\n// joinParameterArgs joins a map of keys and values by their separator. The separator will sit between the\n// arguments in a comma-separated list i.e. arg1<sep>val1,arg2<sep>val2\nfunc joinParameterArgs[K comparable, V any](name string, m map[K]V, separator string) string {\n\tvar args []string\n\n\tfor k, v := range m {\n\t\targs = append(args, fmt.Sprintf(\"%v%s%v\", k, separator, v))\n\t}\n\tif len(args) > 0 {\n\t\treturn fmt.Sprintf(\"%s=%q\", name, strings.Join(args, \",\"))\n\t}\n\treturn \"\"\n}\n\n// Bootstrapper can be implemented to generate a bootstrap script\n// that uses the params from the Bootstrap type for a specific\n// bootstrapping method.\n// Examples are the Bottlerocket config and the eks-bootstrap script\ntype Bootstrapper interface {\n\tScript(context.Context) (string, error)\n}\n"
  },
  {
    "path": "pkg/providers/amifamily/bootstrap/bottlerocket.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage bootstrap\n\nimport (\n\t\"context\"\n\t\"encoding/base64\"\n\t\"fmt\"\n\t\"strconv\"\n\n\t\"github.com/imdario/mergo\"\n\t\"github.com/samber/lo\"\n\n\t\"github.com/aws/aws-sdk-go-v2/aws\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n)\n\ntype Bottlerocket struct {\n\tOptions\n\tEnableDefaultMountPaths bool\n}\n\n// nolint:gocyclo\nfunc (b Bottlerocket) Script(ctx context.Context) (string, error) {\n\ts, err := NewBottlerocketConfig(ctx, b.CustomUserData)\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"invalid UserData %w\", err)\n\t}\n\t// Karpenter will overwrite settings present inside custom UserData\n\t// based on other fields specified in the NodePool\n\ts.Settings.Kubernetes.ClusterName = &b.ClusterName\n\ts.Settings.Kubernetes.APIServer = &b.ClusterEndpoint\n\ts.Settings.Kubernetes.ClusterCertificate = b.CABundle\n\tif err := mergo.MergeWithOverwrite(&s.Settings.Kubernetes.NodeLabels, b.Labels); err != nil {\n\t\treturn \"\", err\n\t}\n\n\tif b.KubeletConfig != nil && b.KubeletConfig.MaxPods != nil {\n\t\ts.Settings.Kubernetes.MaxPods = aws.Int(int(lo.FromPtr(b.KubeletConfig.MaxPods)))\n\t}\n\n\tif b.KubeletConfig != nil {\n\t\tif len(b.KubeletConfig.ClusterDNS) > 0 {\n\t\t\ts.Settings.Kubernetes.ClusterDNSIP = &b.KubeletConfig.ClusterDNS[0]\n\t\t}\n\t\tif b.KubeletConfig.SystemReserved != nil {\n\t\t\ts.Settings.Kubernetes.SystemReserved = b.KubeletConfig.SystemReserved\n\t\t}\n\t\tif b.KubeletConfig.KubeReserved != nil {\n\t\t\ts.Settings.Kubernetes.KubeReserved = b.KubeletConfig.KubeReserved\n\t\t}\n\t\tif b.KubeletConfig.EvictionHard != nil {\n\t\t\ts.Settings.Kubernetes.EvictionHard = b.KubeletConfig.EvictionHard\n\t\t}\n\t\tif b.KubeletConfig.EvictionSoft != nil {\n\t\t\ts.Settings.Kubernetes.EvictionSoft = b.KubeletConfig.EvictionSoft\n\t\t}\n\t\tif b.KubeletConfig.EvictionSoftGracePeriod != nil {\n\t\t\ts.Settings.Kubernetes.EvictionSoftGracePeriod = map[string]string{}\n\t\t\tfor k, v := range b.KubeletConfig.EvictionSoftGracePeriod {\n\t\t\t\ts.Settings.Kubernetes.EvictionSoftGracePeriod[k] = v.Duration.String()\n\t\t\t}\n\t\t}\n\t\tif b.KubeletConfig.EvictionMaxPodGracePeriod != nil {\n\t\t\ts.Settings.Kubernetes.EvictionMaxPodGracePeriod = aws.Int(int(lo.FromPtr(b.KubeletConfig.EvictionMaxPodGracePeriod)))\n\t\t}\n\t\tif b.KubeletConfig.ImageGCHighThresholdPercent != nil {\n\t\t\ts.Settings.Kubernetes.ImageGCHighThresholdPercent = lo.ToPtr(strconv.FormatInt(int64(*b.KubeletConfig.ImageGCHighThresholdPercent), 10))\n\t\t}\n\t\tif b.KubeletConfig.ImageGCLowThresholdPercent != nil {\n\t\t\ts.Settings.Kubernetes.ImageGCLowThresholdPercent = lo.ToPtr(strconv.FormatInt(int64(*b.KubeletConfig.ImageGCLowThresholdPercent), 10))\n\t\t}\n\t\tif b.KubeletConfig.CPUCFSQuota != nil {\n\t\t\ts.Settings.Kubernetes.CPUCFSQuota = b.KubeletConfig.CPUCFSQuota\n\t\t}\n\t}\n\n\ts.Settings.Kubernetes.NodeTaints = map[string][]string{}\n\tfor _, taint := range b.Taints {\n\t\ts.Settings.Kubernetes.NodeTaints[taint.Key] = append(s.Settings.Kubernetes.NodeTaints[taint.Key], fmt.Sprintf(\"%s:%s\", taint.Value, taint.Effect))\n\t}\n\n\tif lo.FromPtr(b.InstanceStorePolicy) == v1.InstanceStorePolicyRAID0 {\n\t\tif s.Settings.BootstrapCommands == nil {\n\t\t\ts.Settings.BootstrapCommands = map[string]BootstrapCommand{}\n\t\t}\n\t\t// Use appropriate bind command based on configuration\n\t\tvar bindCmd []string\n\t\tif b.EnableDefaultMountPaths {\n\t\t\tbindCmd = []string{\"apiclient\", \"ephemeral-storage\", \"bind\"}\n\t\t} else {\n\t\t\tbindCmd = []string{\"apiclient\", \"ephemeral-storage\", \"bind\", \"--dirs\", \"/var/lib/containerd\", \"/var/lib/kubelet\", \"/var/log/pods\"}\n\t\t}\n\n\t\ts.Settings.BootstrapCommands[\"000-mount-instance-storage\"] = BootstrapCommand{\n\t\t\tCommands:  [][]string{{\"apiclient\", \"ephemeral-storage\", \"init\"}, bindCmd},\n\t\t\tEssential: true,\n\t\t\tMode:      BootstrapCommandModeAlways,\n\t\t}\n\t}\n\tscript, err := s.MarshalTOML()\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"constructing toml UserData %w\", err)\n\t}\n\treturn base64.StdEncoding.EncodeToString(script), nil\n}\n"
  },
  {
    "path": "pkg/providers/amifamily/bootstrap/bottlerocket_test.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage bootstrap\n\nimport (\n\t\"testing\"\n\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n)\n\nfunc TestBootstrap(t *testing.T) {\n\tRegisterFailHandler(Fail)\n\tRunSpecs(t, \"Bootstrap\")\n}\n\nvar _ = Describe(\"Bottlerocket\", func() {\n\tDescribe(\"EnableDefaultMountPaths\", func() {\n\t\tIt(\"should use the configured flag value\", func() {\n\t\t\tbottlerocket := Bottlerocket{EnableDefaultMountPaths: true}\n\t\t\tExpect(bottlerocket.EnableDefaultMountPaths).To(BeTrue())\n\n\t\t\tbottlerocket = Bottlerocket{EnableDefaultMountPaths: false}\n\t\t\tExpect(bottlerocket.EnableDefaultMountPaths).To(BeFalse())\n\t\t})\n\t})\n})\n"
  },
  {
    "path": "pkg/providers/amifamily/bootstrap/bottlerocketsettings.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage bootstrap\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"strings\"\n\n\t\"github.com/pelletier/go-toml/v2\"\n\t\"sigs.k8s.io/controller-runtime/pkg/log\"\n)\n\nfunc NewBottlerocketConfig(ctx context.Context, userdata *string) (*BottlerocketConfig, error) {\n\tc := &BottlerocketConfig{}\n\tif userdata == nil {\n\t\treturn c, nil\n\t}\n\tif err := c.UnmarshalTOML(ctx, []byte(*userdata)); err != nil {\n\t\treturn c, err\n\t}\n\treturn c, nil\n}\n\n// BottlerocketConfig is the root of the bottlerocket config, see more here https://github.com/bottlerocket-os/bottlerocket#using-user-data\ntype BottlerocketConfig struct {\n\tSettingsRaw map[string]any       `toml:\"settings\"`\n\tSettings    BottlerocketSettings `toml:\"-\"`\n}\n\n// BottlerocketSettings is a subset of all configuration in https://github.com/bottlerocket-os/bottlerocket/blob/d427c40931cba6e6bedc5b75e9c084a6e1818db9/sources/models/src/lib.rs#L260\n// These settings apply across all K8s versions that karpenter supports.\ntype BottlerocketSettings struct {\n\tKubernetes        BottlerocketKubernetes      `toml:\"kubernetes\"`\n\tBootstrapCommands map[string]BootstrapCommand `toml:\"bootstrap-commands,omitempty\"`\n}\n\n// BottlerocketKubernetes is k8s specific configuration for bottlerocket api\ntype BottlerocketKubernetes struct {\n\tAPIServer                          *string                                   `toml:\"api-server\"`\n\tCloudProvider                      *string                                   `toml:\"cloud-provider\"`\n\tClusterCertificate                 *string                                   `toml:\"cluster-certificate\"`\n\tClusterName                        *string                                   `toml:\"cluster-name\"`\n\tClusterDNSIP                       *string                                   `toml:\"cluster-dns-ip,omitempty\"`\n\tCredentialProviders                map[string]BottlerocketCredentialProvider `toml:\"credential-providers,omitempty\"`\n\tNodeLabels                         map[string]string                         `toml:\"node-labels,omitempty\"`\n\tNodeTaints                         map[string][]string                       `toml:\"node-taints,omitempty\"`\n\tMaxPods                            *int                                      `toml:\"max-pods,omitempty\"`\n\tStaticPods                         map[string]BottlerocketStaticPod          `toml:\"static-pods,omitempty\"`\n\tEvictionHard                       map[string]string                         `toml:\"eviction-hard,omitempty\"`\n\tEvictionSoft                       map[string]string                         `toml:\"eviction-soft,omitempty\"`\n\tEvictionSoftGracePeriod            map[string]string                         `toml:\"eviction-soft-grace-period,omitempty\"`\n\tEvictionMaxPodGracePeriod          *int                                      `toml:\"eviction-max-pod-grace-period,omitempty\"`\n\tKubeReserved                       map[string]string                         `toml:\"kube-reserved,omitempty\"`\n\tSystemReserved                     map[string]string                         `toml:\"system-reserved,omitempty\"`\n\tAllowedUnsafeSysctls               []string                                  `toml:\"allowed-unsafe-sysctls,omitempty\"`\n\tServerTLSBootstrap                 *bool                                     `toml:\"server-tls-bootstrap,omitempty\"`\n\tRegistryQPS                        *int                                      `toml:\"registry-qps,omitempty\"`\n\tRegistryBurst                      *int                                      `toml:\"registry-burst,omitempty\"`\n\tEventQPS                           *int                                      `toml:\"event-qps,omitempty\"`\n\tEventBurst                         *int                                      `toml:\"event-burst,omitempty\"`\n\tKubeAPIQPS                         *int                                      `toml:\"kube-api-qps,omitempty\"`\n\tKubeAPIBurst                       *int                                      `toml:\"kube-api-burst,omitempty\"`\n\tContainerLogMaxSize                *string                                   `toml:\"container-log-max-size,omitempty\"`\n\tContainerLogMaxFiles               *int                                      `toml:\"container-log-max-files,omitempty\"`\n\tCPUManagerPolicy                   *string                                   `toml:\"cpu-manager-policy,omitempty\"`\n\tCPUManagerPolicyOptions            []string                                  `toml:\"cpu-manager-policy-options,omitempty\"`\n\tCPUManagerReconcilePeriod          *string                                   `toml:\"cpu-manager-reconcile-period,omitempty\"`\n\tMemoryManagerPolicy                *string                                   `toml:\"memory-manager-policy,omitempty\"`\n\tTopologyManagerScope               *string                                   `toml:\"topology-manager-scope,omitempty\"`\n\tTopologyManagerPolicy              *string                                   `toml:\"topology-manager-policy,omitempty\"`\n\tImageGCHighThresholdPercent        *string                                   `toml:\"image-gc-high-threshold-percent,omitempty\"`\n\tImageGCLowThresholdPercent         *string                                   `toml:\"image-gc-low-threshold-percent,omitempty\"`\n\tIdsPerPod                          *int                                      `toml:\"ids-per-pod,omitempty\"`\n\tCPUCFSQuota                        *bool                                     `toml:\"cpu-cfs-quota-enforced,omitempty\"`\n\tShutdownGracePeriod                *string                                   `toml:\"shutdown-grace-period,omitempty\"`\n\tShutdownGracePeriodForCriticalPods *string                                   `toml:\"shutdown-grace-period-for-critical-pods,omitempty\"`\n\tClusterDomain                      *string                                   `toml:\"cluster-domain,omitempty\"`\n\tSeccompDefault                     *bool                                     `toml:\"seccomp-default,omitempty\"`\n\tPodPidsLimit                       *int                                      `toml:\"pod-pids-limit,omitempty\"`\n\tDeviceOwnershipFromSecurityContext *bool                                     `toml:\"device-ownership-from-security-context,omitempty\"`\n\tSingleProcessOOMKill               *bool                                     `toml:\"single-process-oom-kill,omitempty\"`\n\tContainerLogMaxWorkers             *int                                      `toml:\"container-log-max-workers,omitempty\"`\n\tContainerLogMonitorInterval        *string                                   `toml:\"container-log-monitor-interval,omitempty\"`\n\tHostnameOverrideSource             *string                                   `toml:\"hostname-override-source,omitempty\"`\n\tVerbosityLevel                     *uint32                                   `toml:\"log-level,omitempty\"`\n}\ntype BottlerocketStaticPod struct {\n\tEnabled  *bool   `toml:\"enabled,omitempty\"`\n\tManifest *string `toml:\"manifest,omitempty\"`\n}\n\n// BottlerocketCredentialProvider is k8s specific configuration for Bottlerocket Kubelet image credential provider\n// See Bottlerocket struct at https://github.com/bottlerocket-os/bottlerocket/blob/d427c40931cba6e6bedc5b75e9c084a6e1818db9/sources/models/modeled-types/src/kubernetes.rs#L1307\ntype BottlerocketCredentialProvider struct {\n\tEnabled       *bool             `toml:\"enabled\"`\n\tCacheDuration *string           `toml:\"cache-duration,omitempty\"`\n\tImagePatterns []string          `toml:\"image-patterns\"`\n\tEnvironment   map[string]string `toml:\"environment,omitempty\"`\n}\n\ntype BootstrapCommandMode string\n\nconst (\n\tBootstrapCommandModeAlways BootstrapCommandMode = \"always\"\n\tBootstrapCommandModeOnce   BootstrapCommandMode = \"once\"\n\tBootstrapCommandModeOff    BootstrapCommandMode = \"off\"\n)\n\n// BootstrapCommand model defined in the Bottlerocket Core Kit in\n// https://github.com/bottlerocket-os/bottlerocket-core-kit/blob/fdf32c291ad18370de3a5fdc4c20a9588bc14177/sources/bootstrap-commands/src/main.rs#L57\ntype BootstrapCommand struct {\n\tCommands  [][]string           `toml:\"commands\"`\n\tMode      BootstrapCommandMode `toml:\"mode\"`\n\tEssential bool                 `toml:\"essential\"`\n}\n\nfunc (c *BottlerocketConfig) UnmarshalTOML(ctx context.Context, data []byte) error {\n\t// unmarshal known settings\n\ts := struct {\n\t\tSettings BottlerocketSettings `toml:\"settings\"`\n\t}{}\n\n\t// unmarshal untyped settings\n\tif err := toml.Unmarshal(data, c); err != nil {\n\t\treturn err\n\t}\n\n\t// To log misconfigured / unsupported k8s userData, we re-marshal the k8s settings\n\t// and re-unmarshal with TOML strict mode to log any errors\n\tif k8sRaw, ok := c.SettingsRaw[\"kubernetes\"]; ok {\n\t\tk8sData, err := toml.Marshal(k8sRaw)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tk8sSettings := BottlerocketKubernetes{}\n\t\tr := strings.NewReader(string(k8sData))\n\t\td := toml.NewDecoder(r)\n\t\td.DisallowUnknownFields()\n\t\tif err := d.Decode(&k8sSettings); err != nil {\n\t\t\tvar details *toml.StrictMissingError\n\t\t\tif errors.As(err, &details) {\n\t\t\t\tlog.FromContext(ctx).Error(err, \"Unknown parameter in userData K8s settings\", \"reason\", details.String())\n\t\t\t}\n\t\t}\n\t}\n\n\t// proceed without strict mode\n\tif err := toml.Unmarshal(data, &s); err != nil {\n\t\treturn err\n\t}\n\tc.Settings = s.Settings\n\treturn nil\n}\n\nfunc (c *BottlerocketConfig) MarshalTOML() ([]byte, error) {\n\tif c.SettingsRaw == nil {\n\t\tc.SettingsRaw = map[string]any{}\n\t}\n\tc.SettingsRaw[\"kubernetes\"] = c.Settings.Kubernetes\n\tif c.Settings.BootstrapCommands != nil {\n\t\tc.SettingsRaw[\"bootstrap-commands\"] = c.Settings.BootstrapCommands\n\t}\n\treturn toml.Marshal(c)\n}\n"
  },
  {
    "path": "pkg/providers/amifamily/bootstrap/custom.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage bootstrap\n\nimport (\n\t\"context\"\n\t\"encoding/base64\"\n\n\t\"github.com/aws/aws-sdk-go-v2/aws\"\n)\n\ntype Custom struct {\n\tOptions\n}\n\nfunc (e Custom) Script(_ context.Context) (string, error) {\n\treturn base64.StdEncoding.EncodeToString([]byte(aws.ToString(e.CustomUserData))), nil\n}\n"
  },
  {
    "path": "pkg/providers/amifamily/bootstrap/eksbootstrap.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage bootstrap\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"encoding/base64\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"mime\"\n\t\"mime/multipart\"\n\t\"net\"\n\t\"net/mail\"\n\t\"net/textproto\"\n\t\"strings\"\n\n\t\"github.com/samber/lo\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n)\n\ntype EKS struct {\n\tOptions\n\tContainerRuntime string\n}\n\nconst (\n\tBoundary                      = \"//\"\n\tMIMEVersionHeader             = \"MIME-Version: 1.0\"\n\tMIMEContentTypeHeaderTemplate = \"Content-Type: multipart/mixed; boundary=\\\"%s\\\"\"\n)\n\nfunc (e EKS) Script(_ context.Context) (string, error) {\n\tuserData, err := e.mergeCustomUserData(lo.Compact([]string{lo.FromPtr(e.CustomUserData), e.eksBootstrapScript()})...)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\t// The mime/multipart package adds carriage returns, while the rest of our logic does not. Remove all\n\t// carriage returns for consistency.\n\treturn base64.StdEncoding.EncodeToString([]byte(strings.ReplaceAll(userData, \"\\r\", \"\"))), nil\n}\n\n//nolint:gocyclo\nfunc (e EKS) eksBootstrapScript() string {\n\tvar caBundleArg string\n\tif e.CABundle != nil {\n\t\tcaBundleArg = fmt.Sprintf(\"--b64-cluster-ca '%s'\", *e.CABundle)\n\t}\n\tvar userData bytes.Buffer\n\tuserData.WriteString(\"#!/bin/bash -xe\\n\")\n\tuserData.WriteString(\"exec > >(tee /var/log/user-data.log|logger -t user-data -s 2>/dev/console) 2>&1\\n\")\n\t// Due to the way bootstrap.sh is written, parameters should not be passed to it with an equal sign\n\tfmt.Fprintf(&userData, \"/etc/eks/bootstrap.sh '%s' --apiserver-endpoint '%s' %s\", e.ClusterName, e.ClusterEndpoint, caBundleArg)\n\n\tif e.isIPv6() {\n\t\tuserData.WriteString(\" \\\\\\n--ip-family ipv6\")\n\t}\n\tif e.KubeletConfig != nil && len(e.KubeletConfig.ClusterDNS) > 0 {\n\t\tfmt.Fprintf(&userData, \" \\\\\\n--dns-cluster-ip '%s'\", e.KubeletConfig.ClusterDNS[0])\n\t}\n\tif e.KubeletConfig != nil && e.KubeletConfig.MaxPods != nil {\n\t\tuserData.WriteString(\" \\\\\\n--use-max-pods false\")\n\t}\n\tif args := e.kubeletExtraArgs(); len(args) > 0 {\n\t\tfmt.Fprintf(&userData, \" \\\\\\n--kubelet-extra-args '%s'\", strings.Join(args, \" \"))\n\t}\n\tif lo.FromPtr(e.InstanceStorePolicy) == v1.InstanceStorePolicyRAID0 {\n\t\tuserData.WriteString(\" \\\\\\n--local-disks raid0\")\n\t}\n\treturn userData.String()\n}\n\nfunc (e EKS) mergeCustomUserData(userDatas ...string) (string, error) {\n\tvar outputBuffer bytes.Buffer\n\twriter := multipart.NewWriter(&outputBuffer)\n\tif err := writer.SetBoundary(Boundary); err != nil {\n\t\treturn \"\", fmt.Errorf(\"defining boundary for merged user data %w\", err)\n\t}\n\toutputBuffer.WriteString(MIMEVersionHeader + \"\\n\")\n\toutputBuffer.WriteString(fmt.Sprintf(MIMEContentTypeHeaderTemplate, Boundary) + \"\\n\\n\")\n\tfor _, userData := range userDatas {\n\t\tmimedUserData, err := e.mimeify(userData)\n\t\tif err != nil {\n\t\t\treturn \"\", err\n\t\t}\n\t\tif err := copyCustomUserDataParts(writer, mimedUserData); err != nil {\n\t\t\treturn \"\", err\n\t\t}\n\t}\n\twriter.Close()\n\treturn outputBuffer.String(), nil\n}\n\nfunc (e EKS) isIPv6() bool {\n\tif e.KubeletConfig == nil || len(e.KubeletConfig.ClusterDNS) == 0 {\n\t\treturn false\n\t}\n\treturn net.ParseIP(e.KubeletConfig.ClusterDNS[0]).To4() == nil\n}\n\n// mimeify returns userData in a mime format\n// if the userData passed in is already in a mime format, then the input is returned without modification\nfunc (e EKS) mimeify(customUserData string) (string, error) {\n\tif strings.HasPrefix(strings.TrimSpace(customUserData), \"MIME-Version:\") ||\n\t\tstrings.HasPrefix(strings.TrimSpace(customUserData), \"Content-Type:\") {\n\t\treturn customUserData, nil\n\t}\n\tvar outputBuffer bytes.Buffer\n\twriter := multipart.NewWriter(&outputBuffer)\n\toutputBuffer.WriteString(MIMEVersionHeader + \"\\n\")\n\toutputBuffer.WriteString(fmt.Sprintf(MIMEContentTypeHeaderTemplate, writer.Boundary()) + \"\\n\\n\")\n\tpartWriter, err := writer.CreatePart(textproto.MIMEHeader{\n\t\t\"Content-Type\": []string{`text/x-shellscript; charset=\"us-ascii\"`},\n\t})\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"creating multi-part section from custom user-data: %w\", err)\n\t}\n\t_, err = partWriter.Write([]byte(customUserData))\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"writing custom user-data input: %w\", err)\n\t}\n\twriter.Close()\n\treturn outputBuffer.String(), nil\n}\n\n// copyCustomUserDataParts reads the mime parts in the userData passed in and writes\n// to a new mime part in the passed in writer.\nfunc copyCustomUserDataParts(writer *multipart.Writer, customUserData string) error {\n\tif customUserData == \"\" {\n\t\t// No custom user data specified, so nothing to copy over.\n\t\treturn nil\n\t}\n\treader, err := getMultiPartReader(customUserData)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"parsing custom user data input %w\", err)\n\t}\n\tfor {\n\t\tp, err := reader.NextPart()\n\t\tif errors.Is(err, io.EOF) {\n\t\t\tbreak\n\t\t}\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"parsing custom user data input %w\", err)\n\t\t}\n\t\tslurp, err := io.ReadAll(p)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"parsing custom user data input %w\", err)\n\t\t}\n\t\tpartWriter, err := writer.CreatePart(p.Header)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"parsing custom user data input %w\", err)\n\t\t}\n\t\t_, err = partWriter.Write(slurp)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"parsing custom user data input %w\", err)\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc getMultiPartReader(userData string) (*multipart.Reader, error) {\n\tmailMsg, err := mail.ReadMessage(strings.NewReader(userData))\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"unreadable user data %w\", err)\n\t}\n\tmediaType, params, err := mime.ParseMediaType(mailMsg.Header.Get(\"Content-Type\"))\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"user data does not define a content-type header %w\", err)\n\t}\n\tif !strings.HasPrefix(mediaType, \"multipart/\") {\n\t\treturn nil, fmt.Errorf(\"user data is not in multipart MIME format\")\n\t}\n\treturn multipart.NewReader(mailMsg.Body, params[\"boundary\"]), nil\n}\n"
  },
  {
    "path": "pkg/providers/amifamily/bootstrap/mime/mime.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage mime\n\nimport (\n\t\"bytes\"\n\t\"encoding/base64\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"mime\"\n\t\"mime/multipart\"\n\t\"net/mail\"\n\t\"net/textproto\"\n\t\"strings\"\n\n\tadmapi \"github.com/awslabs/amazon-eks-ami/nodeadm/api\"\n)\n\ntype ContentType string\n\nconst (\n\tboundary      = \"//\"\n\tversionHeader = \"MIME-Version: 1.0\"\n\n\tContentTypeShellScript ContentType = `text/x-shellscript; charset=\"us-ascii\"`\n\tContentTypeNodeConfig  ContentType = \"application/\" + admapi.GroupName\n\tContentTypeMultipart   ContentType = `multipart/mixed; boundary=\"` + boundary + `\"`\n)\n\ntype Entry struct {\n\tContentType ContentType\n\tContent     string\n}\n\ntype Archive []Entry\n\nfunc NewArchive(content string) (Archive, error) {\n\tarchive := Archive{}\n\tif content == \"\" {\n\t\treturn archive, nil\n\t}\n\treader, err := archive.getReader(content)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tfor {\n\t\tp, err := reader.NextPart()\n\t\tif err != nil {\n\t\t\tif errors.Is(err, io.EOF) {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\treturn nil, fmt.Errorf(\"parsing content, %w\", err)\n\t\t}\n\t\tslurp, err := io.ReadAll(p)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"parsing content, %s, %w\", string(slurp), err)\n\t\t}\n\t\tarchive = append(archive, Entry{\n\t\t\tContentType: ContentType(p.Header.Get(\"Content-Type\")),\n\t\t\tContent:     string(slurp),\n\t\t})\n\t}\n\treturn archive, nil\n}\n\n// Serialize returns a base64 encoded serialized MIME multi-part archive\nfunc (ma Archive) Serialize() (string, error) {\n\tbuffer := bytes.Buffer{}\n\twriter := multipart.NewWriter(&buffer)\n\tif err := writer.SetBoundary(boundary); err != nil {\n\t\treturn \"\", err\n\t}\n\tbuffer.WriteString(versionHeader + \"\\n\")\n\tfmt.Fprintf(&buffer, \"Content-Type: %s\\n\\n\", ContentTypeMultipart)\n\tfor _, entry := range ma {\n\t\tpartWriter, err := writer.CreatePart(textproto.MIMEHeader{\n\t\t\t\"Content-Type\": []string{string(entry.ContentType)},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn \"\", fmt.Errorf(\"creating multi-part section for entry, %w\", err)\n\t\t}\n\t\t_, err = partWriter.Write([]byte(entry.Content))\n\t\tif err != nil {\n\t\t\treturn \"\", fmt.Errorf(\"writing entry, %w\", err)\n\t\t}\n\t}\n\tif err := writer.Close(); err != nil {\n\t\treturn \"\", fmt.Errorf(\"terminating multi-part archive, %w\", err)\n\t}\n\t// The mime/multipart package adds carriage returns, while the rest of our logic does not. Remove all\n\t// carriage returns for consistency.\n\treturn base64.StdEncoding.EncodeToString([]byte(strings.ReplaceAll(buffer.String(), \"\\r\", \"\"))), nil\n}\n\nfunc (Archive) getReader(content string) (*multipart.Reader, error) {\n\tmailMsg, err := mail.ReadMessage(strings.NewReader(content))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tmediaType, params, err := mime.ParseMediaType(mailMsg.Header.Get(\"Content-Type\"))\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"archive doesn't have Content-Type header, %w\", err)\n\t}\n\tif !strings.HasPrefix(mediaType, \"multipart/\") {\n\t\treturn nil, fmt.Errorf(\"archive is not in multipart format, %w\", err)\n\t}\n\treturn multipart.NewReader(mailMsg.Body, params[\"boundary\"]), nil\n}\n"
  },
  {
    "path": "pkg/providers/amifamily/bootstrap/mime/suite_test.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage mime_test\n\nimport (\n\t\"context\"\n\t\"encoding/base64\"\n\t\"fmt\"\n\t\"os\"\n\t\"testing\"\n\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n\t. \"sigs.k8s.io/karpenter/pkg/utils/testing\"\n\n\t\"github.com/samber/lo\"\n\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/amifamily/bootstrap/mime\"\n)\n\nvar ctx context.Context\n\nfunc TestAWS(t *testing.T) {\n\tctx = TestContextWithLogger(t)\n\tRegisterFailHandler(Fail)\n\tRunSpecs(t, \"MIME Parser\")\n}\n\nvar _ = Describe(\"MIME Parser\", func() {\n\tIt(\"should fail to parse MIME archive with a malformed header\", func() {\n\t\tcontent, err := os.ReadFile(\"test_data/mime_bad_header.txt\")\n\t\tExpect(err).To(BeNil())\n\t\t_, err = mime.NewArchive(string(content))\n\t\tExpect(err).ToNot(BeNil())\n\t})\n\tIt(\"should successfully parse a valid MIME archive\", func() {\n\t\tcontent, err := os.ReadFile(\"test_data/mime_valid.txt\")\n\t\tExpect(err).To(BeNil())\n\t\tarchive, err := mime.NewArchive(string(content))\n\t\tExpect(err).To(BeNil())\n\t\tExpect(len(archive)).To(Equal(2))\n\t\tfor ct, f := range map[mime.ContentType]string{\n\t\t\tmime.ContentTypeNodeConfig:  \"test_data/nodeconfig.txt\",\n\t\t\tmime.ContentTypeShellScript: \"test_data/shell.txt\",\n\t\t} {\n\t\t\tentry, ok := lo.Find(archive, func(e mime.Entry) bool {\n\t\t\t\treturn e.ContentType == ct\n\t\t\t})\n\t\t\tExpect(ok).To(BeTrue())\n\t\t\texpectedContent, err := os.ReadFile(f)\n\t\t\tExpect(err).To(BeNil())\n\t\t\tExpect(entry.Content).To(Equal(string(expectedContent)))\n\t\t}\n\t})\n\tIt(\"should successfully serialize a MIME archive\", func() {\n\t\ttype entryTemplate struct {\n\t\t\tcontentType mime.ContentType\n\t\t\tfile        string\n\t\t}\n\t\tarchive := mime.Archive(lo.Map([]entryTemplate{\n\t\t\t{\n\t\t\t\tcontentType: mime.ContentTypeNodeConfig,\n\t\t\t\tfile:        \"test_data/nodeconfig.txt\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tcontentType: mime.ContentTypeShellScript,\n\t\t\t\tfile:        \"test_data/shell.txt\",\n\t\t\t},\n\t\t}, func(e entryTemplate, _ int) mime.Entry {\n\t\t\tcontent, err := os.ReadFile(e.file)\n\t\t\tExpect(err).To(BeNil())\n\t\t\treturn mime.Entry{\n\t\t\t\tContentType: e.contentType,\n\t\t\t\tContent:     string(content),\n\t\t\t}\n\t\t}))\n\t\tfmt.Printf(\"%v\\n\", archive)\n\t\texpected, err := os.ReadFile(\"test_data/mime_valid.txt\")\n\t\tExpect(err).To(BeNil())\n\t\tencoded, err := archive.Serialize()\n\t\tExpect(err).To(BeNil())\n\t\tserialized, err := base64.StdEncoding.DecodeString(encoded)\n\t\tExpect(err).To(BeNil())\n\t\tExpect(string(serialized)).To(Equal(string(expected)))\n\t})\n})\n"
  },
  {
    "path": "pkg/providers/amifamily/bootstrap/mime/test_data/mime_bad_header.txt",
    "content": "MIME_VERSION = 1.0\nCONTENT_TYPE = MIME\n\n--//\nContent-Type: application/node.eks.aws\n\napiVersion: node.eks.aws/v1alpha1\nkind: NodeConfig\nspec:\n  cluster:\n    name: test-cluster\n    apiServerEndpoint: https://example.com\n    certificateAuthority: ca-bundle\n    cidr: 10.100.0.0/16\n  kubelet:\n    config:\n      maxPods: 42\n      systemReserved:\n        cpu: 100m\n        memory: 100Mi\n        ephemeral-storage: 1Gi\n    flags:\n      - --node-labels \"foo=bar\"\n  containerd:\n    config: |\n      [plugins.\"io.containerd.grpc.v1.cri\".containerd]\n      discard_unpacked_layers = false\n\n--//--\n"
  },
  {
    "path": "pkg/providers/amifamily/bootstrap/mime/test_data/mime_valid.txt",
    "content": "MIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"//\"\n\n--//\nContent-Type: application/node.eks.aws\n\napiVersion: node.eks.aws/v1alpha1\nkind: NodeConfig\nspec:\n  cluster:\n    name: test-cluster\n    apiServerEndpoint: https://example.com\n    certificateAuthority: ca-bundle\n    cidr: 10.100.0.0/16\n  kubelet:\n    config:\n      maxPods: 42\n      systemReserved:\n        cpu: 100m\n        memory: 100Mi\n        ephemeral-storage: 1Gi\n    flags:\n      - --node-labels \"foo=bar\"\n  containerd:\n    config: |\n      [plugins.\"io.containerd.grpc.v1.cri\".containerd]\n      discard_unpacked_layers = false\n\n--//\nContent-Type: text/x-shellscript; charset=\"us-ascii\"\n\n#!/bin/bash\necho \"I'm a shell script!\"\n\n--//--\n"
  },
  {
    "path": "pkg/providers/amifamily/bootstrap/mime/test_data/nodeconfig.txt",
    "content": "apiVersion: node.eks.aws/v1alpha1\nkind: NodeConfig\nspec:\n  cluster:\n    name: test-cluster\n    apiServerEndpoint: https://example.com\n    certificateAuthority: ca-bundle\n    cidr: 10.100.0.0/16\n  kubelet:\n    config:\n      maxPods: 42\n      systemReserved:\n        cpu: 100m\n        memory: 100Mi\n        ephemeral-storage: 1Gi\n    flags:\n      - --node-labels \"foo=bar\"\n  containerd:\n    config: |\n      [plugins.\"io.containerd.grpc.v1.cri\".containerd]\n      discard_unpacked_layers = false\n"
  },
  {
    "path": "pkg/providers/amifamily/bootstrap/mime/test_data/shell.txt",
    "content": "#!/bin/bash\necho \"I'm a shell script!\"\n"
  },
  {
    "path": "pkg/providers/amifamily/bootstrap/nodeadm.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage bootstrap\n\nimport (\n\t\"context\"\n\t\"encoding/base64\"\n\t\"fmt\"\n\t\"strings\"\n\n\tadmapi \"github.com/awslabs/amazon-eks-ami/nodeadm/api\"\n\tadmv1alpha1 \"github.com/awslabs/amazon-eks-ami/nodeadm/api/v1alpha1\"\n\t\"github.com/samber/lo\"\n\tmetav1 \"k8s.io/apimachinery/pkg/apis/meta/v1\"\n\t\"k8s.io/apimachinery/pkg/runtime\"\n\t\"k8s.io/apimachinery/pkg/util/json\"\n\t\"sigs.k8s.io/karpenter/pkg/cloudprovider\"\n\t\"sigs.k8s.io/yaml\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/amifamily/bootstrap/mime\"\n)\n\ntype Nodeadm struct {\n\tOptions\n}\n\nfunc (n Nodeadm) Script(_ context.Context) (string, error) {\n\tnodeConfigYAML, err := n.getNodeConfigYAML()\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"generating NodeConfig, %w\", err)\n\t}\n\tcustomEntries, err := n.parseUserData()\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"parsing custom UserData, %w\", err)\n\t}\n\tmimeArchive := mime.Archive(append(customEntries, mime.Entry{\n\t\tContentType: mime.ContentTypeNodeConfig,\n\t\tContent:     nodeConfigYAML,\n\t}))\n\tuserData, err := mimeArchive.Serialize()\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\treturn userData, nil\n}\n\n// getNodeConfigYAML returns the Karpenter generated NodeConfig YAML object serialized as a string\nfunc (n Nodeadm) getNodeConfigYAML() (string, error) {\n\tconfig := &admv1alpha1.NodeConfig{\n\t\tTypeMeta: metav1.TypeMeta{\n\t\t\tKind:       admapi.KindNodeConfig,\n\t\t\tAPIVersion: admv1alpha1.GroupVersion.String(),\n\t\t},\n\t\tSpec: admv1alpha1.NodeConfigSpec{\n\t\t\tCluster: admv1alpha1.ClusterDetails{\n\t\t\t\tName:              n.ClusterName,\n\t\t\t\tAPIServerEndpoint: n.ClusterEndpoint,\n\t\t\t\tCIDR:              lo.FromPtr(n.ClusterCIDR),\n\t\t\t},\n\t\t},\n\t}\n\tif lo.FromPtr(n.CABundle) != \"\" {\n\t\tca, err := base64.StdEncoding.DecodeString(*n.CABundle)\n\t\tif err != nil {\n\t\t\treturn \"\", fmt.Errorf(\"decoding CABundle, %w\", err)\n\t\t}\n\t\tconfig.Spec.Cluster.CertificateAuthority = ca\n\t}\n\tif cidr := lo.FromPtr(n.ClusterCIDR); cidr != \"\" {\n\t\tconfig.Spec.Cluster.CIDR = cidr\n\t} else {\n\t\treturn \"\", cloudprovider.NewNodeClassNotReadyError(fmt.Errorf(\"resolving cluster CIDR\"))\n\t}\n\tif lo.FromPtr(n.InstanceStorePolicy) == v1.InstanceStorePolicyRAID0 {\n\t\tconfig.Spec.Instance.LocalStorage.Strategy = admv1alpha1.LocalStorageRAID0\n\t}\n\tinlineConfig, err := n.generateInlineKubeletConfiguration()\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tconfig.Spec.Kubelet.Config = inlineConfig\n\tif arg := n.nodeLabelArg(); arg != \"\" {\n\t\tconfig.Spec.Kubelet.Flags = []string{arg}\n\t}\n\n\t// Convert to YAML at the end for improved legibility.\n\tconfigYAML, err := yaml.Marshal(config)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\treturn fmt.Sprintf(\"# Karpenter Generated NodeConfig\\n%s\", string(configYAML)), nil\n}\n\n// generateInlineKubeletConfiguration returns a serialized form of the KubeletConfiguration specified by the Nodeadm\n// options, for use with nodeadm's NodeConfig struct.\nfunc (n Nodeadm) generateInlineKubeletConfiguration() (map[string]runtime.RawExtension, error) {\n\tkubeConfigJSON, err := json.Marshal(n.KubeletConfig)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tkubeConfigMap := map[string]runtime.RawExtension{}\n\terr = json.Unmarshal(kubeConfigJSON, &kubeConfigMap)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tkubeConfigMap[\"registerWithTaints\"] = runtime.RawExtension{\n\t\tRaw: lo.Must(json.Marshal(n.Taints)),\n\t}\n\treturn kubeConfigMap, nil\n}\n\n// parseUserData returns a slice of MIMEEntrys corresponding to each entry in the custom UserData. If the custom\n// UserData is not a MIME multi-part archive, the content type will be detected (NodeConfig or shell) and an entry\n// will be created.\nfunc (n Nodeadm) parseUserData() ([]mime.Entry, error) {\n\tuserData := lo.FromPtr(n.CustomUserData)\n\tif userData == \"\" {\n\t\treturn nil, nil\n\t}\n\tif strings.HasPrefix(strings.TrimSpace(userData), \"MIME-Version:\") ||\n\t\tstrings.HasPrefix(strings.TrimSpace(userData), \"Content-Type:\") {\n\t\tarchive, err := mime.NewArchive(userData)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn archive, nil\n\t}\n\t// Fallback to YAML or shall script if UserData is not in MIME format. Determine the content type for the\n\t// generated MIME header depending on the type of the custom UserData.\n\tif err := yaml.Unmarshal([]byte(*n.CustomUserData), lo.ToPtr(map[string]any{})); err == nil {\n\t\treturn []mime.Entry{{\n\t\t\tContentType: mime.ContentTypeNodeConfig,\n\t\t\tContent:     userData,\n\t\t}}, nil\n\t}\n\treturn []mime.Entry{{\n\t\tContentType: mime.ContentTypeShellScript,\n\t\tContent:     userData,\n\t}}, nil\n}\n"
  },
  {
    "path": "pkg/providers/amifamily/bootstrap/windows.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage bootstrap\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"encoding/base64\"\n\t\"fmt\"\n\t\"strings\"\n\n\t\"github.com/samber/lo\"\n)\n\ntype Windows struct {\n\tOptions\n}\n\n// nolint:gocyclo\nfunc (w Windows) Script(_ context.Context) (string, error) {\n\tvar userData bytes.Buffer\n\tuserData.WriteString(\"<powershell>\\n\")\n\n\tcustomUserData := lo.FromPtr(w.CustomUserData)\n\tif customUserData != \"\" {\n\t\tuserData.WriteString(customUserData + \"\\n\")\n\t}\n\n\tuserData.WriteString(\"[string]$EKSBootstrapScriptFile = \\\"$env:ProgramFiles\\\\Amazon\\\\EKS\\\\Start-EKSBootstrap.ps1\\\"\\n\")\n\tfmt.Fprintf(&userData, `& $EKSBootstrapScriptFile -EKSClusterName '%s' -APIServerEndpoint '%s'`, w.ClusterName, w.ClusterEndpoint)\n\tif w.CABundle != nil {\n\t\tfmt.Fprintf(&userData, ` -Base64ClusterCA '%s'`, *w.CABundle)\n\t}\n\tif args := w.kubeletExtraArgs(); len(args) > 0 {\n\t\tfmt.Fprintf(&userData, ` -KubeletExtraArgs '%s'`, strings.Join(args, \" \"))\n\t}\n\tif w.KubeletConfig != nil && len(w.KubeletConfig.ClusterDNS) > 0 {\n\t\tfmt.Fprintf(&userData, ` -DNSClusterIP '%s'`, w.KubeletConfig.ClusterDNS[0])\n\t}\n\tuserData.WriteString(\"\\n</powershell>\")\n\treturn base64.StdEncoding.EncodeToString(userData.Bytes()), nil\n}\n"
  },
  {
    "path": "pkg/providers/amifamily/bottlerocket.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage amifamily\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"strings\"\n\n\t\"github.com/awslabs/operatorpkg/serrors\"\n\t\"github.com/samber/lo\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/amifamily/bootstrap\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/ssm\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/version\"\n\n\t\"sigs.k8s.io/karpenter/pkg/cloudprovider\"\n\t\"sigs.k8s.io/karpenter/pkg/scheduling\"\n\n\t\"github.com/aws/aws-sdk-go-v2/aws\"\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\tcorev1 \"k8s.io/api/core/v1\"\n\t\"k8s.io/apimachinery/pkg/api/resource\"\n)\n\ntype Bottlerocket struct {\n\tDefaultFamily\n\t*Options\n}\n\nfunc (b Bottlerocket) DescribeImageQuery(ctx context.Context, ssmProvider ssm.Provider, k8sVersion string, amiVersion string) (DescribeImageQuery, error) {\n\t// Bottlerocket AMIs versions are prefixed with a v on GitHub, but not in the SSM path. We should accept both.\n\ttrimmedAMIVersion := strings.TrimLeft(amiVersion, \"v\")\n\tids := map[string][]Variant{}\n\tfor path, variants := range map[string][]Variant{\n\t\tfmt.Sprintf(\"/aws/service/bottlerocket/aws-k8s-%s/x86_64/%s/image_id\", k8sVersion, trimmedAMIVersion):        {VariantStandard, VariantNeuron},\n\t\tfmt.Sprintf(\"/aws/service/bottlerocket/aws-k8s-%s/arm64/%s/image_id\", k8sVersion, trimmedAMIVersion):         {VariantStandard},\n\t\tfmt.Sprintf(\"/aws/service/bottlerocket/aws-k8s-%s-nvidia/x86_64/%s/image_id\", k8sVersion, trimmedAMIVersion): {VariantNvidia},\n\t\tfmt.Sprintf(\"/aws/service/bottlerocket/aws-k8s-%s-nvidia/arm64/%s/image_id\", k8sVersion, trimmedAMIVersion):  {VariantNvidia},\n\t} {\n\t\timageID, err := ssmProvider.Get(ctx, ssm.Parameter{\n\t\t\tName:      path,\n\t\t\tIsMutable: amiVersion == v1.AliasVersionLatest,\n\t\t})\n\t\tif err != nil {\n\t\t\tcontinue\n\t\t}\n\t\tids[imageID] = variants\n\t}\n\t// Failed to discover any AMIs, we should short circuit AMI discovery\n\tif len(ids) == 0 {\n\t\treturn DescribeImageQuery{}, serrors.Wrap(fmt.Errorf(`failed to discover any AMIs for alias`), \"alias\", fmt.Sprintf(\"bottlerocket@%s\", amiVersion))\n\t}\n\n\treturn DescribeImageQuery{\n\t\tFilters: []ec2types.Filter{{\n\t\t\tName:   lo.ToPtr(\"image-id\"),\n\t\t\tValues: lo.Keys(ids),\n\t\t}},\n\t\tKnownRequirements: lo.MapValues(ids, func(variants []Variant, _ string) []scheduling.Requirements {\n\t\t\treturn lo.Map(variants, func(v Variant, _ int) scheduling.Requirements { return v.Requirements() })\n\t\t}),\n\t}, nil\n}\n\n// UserData returns the default userdata script for the AMI Family\nfunc (b Bottlerocket) UserData(kubeletConfig *v1.KubeletConfiguration, taints []corev1.Taint, labels map[string]string, caBundle *string, _ []*cloudprovider.InstanceType, customUserData *string, instanceStorePolicy *v1.InstanceStorePolicy) bootstrap.Bootstrapper {\n\treturn bootstrap.Bottlerocket{\n\t\tOptions: bootstrap.Options{\n\t\t\tClusterName:         b.ClusterName,\n\t\t\tClusterEndpoint:     b.ClusterEndpoint,\n\t\t\tKubeletConfig:       kubeletConfig,\n\t\t\tTaints:              taints,\n\t\t\tLabels:              labels,\n\t\t\tCABundle:            caBundle,\n\t\t\tCustomUserData:      customUserData,\n\t\t\tInstanceStorePolicy: instanceStorePolicy,\n\t\t},\n\t\tEnableDefaultMountPaths: version.SupportsDefaultBind(b.resolveAMIVersion()),\n\t}\n}\n\n// resolveAMIVersion extracts AMI version from selector terms\nfunc (b Bottlerocket) resolveAMIVersion() string {\n\tif version := b.getVersionFromAlias(); version != \"\" {\n\t\treturn version\n\t}\n\tif version := b.getVersionFromName(); version != \"\" {\n\t\treturn version\n\t}\n\tif version := b.getVersionFromID(); version != \"\" {\n\t\treturn version\n\t}\n\tif version := b.getVersionFromResolvedAMIs(); version != \"\" {\n\t\treturn version\n\t}\n\treturn \"\"\n}\n\nfunc (b Bottlerocket) getVersionFromAlias() string {\n\tfor _, term := range b.AMISelectorTerms {\n\t\tif term.Alias == \"\" {\n\t\t\tcontinue\n\t\t}\n\t\tparts := strings.Split(term.Alias, \"@\")\n\t\tif len(parts) == 2 {\n\t\t\treturn parts[1]\n\t\t}\n\t}\n\treturn \"\"\n}\n\nfunc (b Bottlerocket) getVersionFromName() string {\n\tfor _, term := range b.AMISelectorTerms {\n\t\tif term.Name == \"\" {\n\t\t\tcontinue\n\t\t}\n\t\tif version := b.extractVersionFromName(term.Name); version != \"\" {\n\t\t\treturn version\n\t\t}\n\t}\n\treturn \"\"\n}\n\nfunc (b Bottlerocket) getVersionFromID() string {\n\tfor _, term := range b.AMISelectorTerms {\n\t\tif term.ID == \"\" {\n\t\t\tcontinue\n\t\t}\n\t\tif version := b.findVersionByID(term.ID); version != \"\" {\n\t\t\treturn version\n\t\t}\n\t}\n\treturn \"\"\n}\n\nfunc (b Bottlerocket) findVersionByID(id string) string {\n\tfor _, ami := range b.AMIs {\n\t\tif ami.ID == id && ami.Name != \"\" && strings.Contains(ami.Name, \"bottlerocket\") {\n\t\t\treturn b.extractVersionFromName(ami.Name)\n\t\t}\n\t}\n\treturn \"\"\n}\n\nfunc (b Bottlerocket) getVersionFromResolvedAMIs() string {\n\tfor _, ami := range b.AMIs {\n\t\tif ami.Name == \"\" || !strings.Contains(ami.Name, \"bottlerocket\") {\n\t\t\tcontinue\n\t\t}\n\t\tif version := b.extractVersionFromName(ami.Name); version != \"\" {\n\t\t\treturn version\n\t\t}\n\t}\n\treturn \"\"\n}\n\nfunc (b Bottlerocket) extractVersionFromName(name string) string {\n\t// Bottlerocket pattern: bottlerocket-aws-k8s-1.33-x86_64-v1.46.0-431fe75a\n\tparts := strings.SplitSeq(name, \"-\")\n\tfor part := range parts {\n\t\tif strings.HasPrefix(part, \"v\") && strings.Contains(part, \".\") {\n\t\t\treturn part\n\t\t}\n\t}\n\treturn \"\"\n}\n\n// DefaultBlockDeviceMappings returns the default block device mappings for the AMI Family\nfunc (b Bottlerocket) DefaultBlockDeviceMappings() []*v1.BlockDeviceMapping {\n\txvdaEBS := DefaultEBS\n\txvdaEBS.VolumeSize = lo.ToPtr(resource.MustParse(\"4Gi\"))\n\treturn []*v1.BlockDeviceMapping{\n\t\t{\n\t\t\tDeviceName: aws.String(\"/dev/xvda\"),\n\t\t\tEBS:        &xvdaEBS,\n\t\t},\n\t\t{\n\t\t\tDeviceName: b.EphemeralBlockDevice(),\n\t\t\tEBS:        &DefaultEBS,\n\t\t},\n\t}\n}\n\nfunc (b Bottlerocket) EphemeralBlockDevice() *string {\n\treturn aws.String(\"/dev/xvdb\")\n}\n\n// PodsPerCoreEnabled is currently disabled for Bottlerocket AMIFamily because it does\n// not currently support the podsPerCore parameter passed through the kubernetes settings TOML userData\n// If a NodePool sets the podsPerCore value when using the Bottlerocket AMIFamily in the provider,\n// podsPerCore will be ignored\n// https://github.com/bottlerocket-os/bottlerocket/issues/1721\n\n// EvictionSoftEnabled is currently disabled for Bottlerocket AMIFamily because it does\n// not currently support the evictionSoft parameter passed through the kubernetes settings TOML userData\n// If a NodePool sets the evictionSoft value when using the Bottlerocket AMIFamily in the provider,\n// evictionSoft will be ignored\n// https://github.com/bottlerocket-os/bottlerocket/issues/1445\n\nfunc (b Bottlerocket) FeatureFlags() FeatureFlags {\n\treturn FeatureFlags{\n\t\tUsesENILimitedMemoryOverhead: false,\n\t\tPodsPerCoreEnabled:           false,\n\t\tSupportsENILimitedPodDensity: true,\n\t}\n}\n"
  },
  {
    "path": "pkg/providers/amifamily/bottlerocket_test.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage amifamily\n\nimport (\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n)\n\nvar _ = Describe(\"Bottlerocket\", func() {\n\tDescribe(\"resolveAMIVersion\", func() {\n\t\tIt(\"should resolve version from alias\", func() {\n\t\t\tb := Bottlerocket{\n\t\t\t\tOptions: &Options{\n\t\t\t\t\tAMISelectorTerms: []v1.AMISelectorTerm{\n\t\t\t\t\t\t{Alias: \"bottlerocket@v1.46.0\"},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}\n\t\t\tresult := b.resolveAMIVersion()\n\t\t\tExpect(result).To(Equal(\"v1.46.0\"))\n\t\t})\n\n\t\tIt(\"should resolve latest from alias\", func() {\n\t\t\tb := Bottlerocket{\n\t\t\t\tOptions: &Options{\n\t\t\t\t\tAMISelectorTerms: []v1.AMISelectorTerm{\n\t\t\t\t\t\t{Alias: \"bottlerocket@latest\"},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}\n\t\t\tresult := b.resolveAMIVersion()\n\t\t\tExpect(result).To(Equal(\"latest\"))\n\t\t})\n\n\t\tIt(\"should resolve version from name\", func() {\n\t\t\tb := Bottlerocket{\n\t\t\t\tOptions: &Options{\n\t\t\t\t\tAMISelectorTerms: []v1.AMISelectorTerm{\n\t\t\t\t\t\t{Name: \"bottlerocket-aws-k8s-1.33-x86_64-v1.46.0-431fe75a\"},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}\n\t\t\tresult := b.resolveAMIVersion()\n\t\t\tExpect(result).To(Equal(\"v1.46.0\"))\n\t\t})\n\n\t\tIt(\"should resolve version from ID with resolved AMI\", func() {\n\t\t\tb := Bottlerocket{\n\t\t\t\tOptions: &Options{\n\t\t\t\t\tAMISelectorTerms: []v1.AMISelectorTerm{\n\t\t\t\t\t\t{ID: \"ami-12345\"},\n\t\t\t\t\t},\n\t\t\t\t\tAMIs: []v1.AMI{\n\t\t\t\t\t\t{ID: \"ami-12345\", Name: \"bottlerocket-aws-k8s-1.33-x86_64-v1.47.0-abc123\"},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}\n\t\t\tresult := b.resolveAMIVersion()\n\t\t\tExpect(result).To(Equal(\"v1.47.0\"))\n\t\t})\n\n\t\tIt(\"should resolve version from resolved AMI fallback\", func() {\n\t\t\tb := Bottlerocket{\n\t\t\t\tOptions: &Options{\n\t\t\t\t\tAMISelectorTerms: []v1.AMISelectorTerm{\n\t\t\t\t\t\t{Tags: map[string]string{\"Environment\": \"prod\"}},\n\t\t\t\t\t},\n\t\t\t\t\tAMIs: []v1.AMI{\n\t\t\t\t\t\t{ID: \"ami-67890\", Name: \"bottlerocket-aws-k8s-1.30-arm64-v2.0.1-def456\"},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}\n\t\t\tresult := b.resolveAMIVersion()\n\t\t\tExpect(result).To(Equal(\"v2.0.1\"))\n\t\t})\n\n\t\tIt(\"should return empty when no version found\", func() {\n\t\t\tb := Bottlerocket{\n\t\t\t\tOptions: &Options{\n\t\t\t\t\tAMISelectorTerms: []v1.AMISelectorTerm{\n\t\t\t\t\t\t{Name: \"some-other-ami\"},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}\n\t\t\tresult := b.resolveAMIVersion()\n\t\t\tExpect(result).To(Equal(\"\"))\n\t\t})\n\t})\n})\n"
  },
  {
    "path": "pkg/providers/amifamily/custom.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage amifamily\n\nimport (\n\t\"context\"\n\n\tcorev1 \"k8s.io/api/core/v1\"\n\n\t\"sigs.k8s.io/karpenter/pkg/cloudprovider\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/amifamily/bootstrap\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/ssm\"\n)\n\ntype Custom struct {\n\tDefaultFamily\n\t*Options\n}\n\n// UserData returns the default userdata script for the AMI Family\nfunc (c Custom) UserData(_ *v1.KubeletConfiguration, _ []corev1.Taint, _ map[string]string, _ *string, _ []*cloudprovider.InstanceType, customUserData *string, _ *v1.InstanceStorePolicy) bootstrap.Bootstrapper {\n\treturn bootstrap.Custom{\n\t\tOptions: bootstrap.Options{\n\t\t\tCustomUserData: customUserData,\n\t\t},\n\t}\n}\n\nfunc (c Custom) DescribeImageQuery(_ context.Context, _ ssm.Provider, _ string, _ string) (DescribeImageQuery, error) {\n\treturn DescribeImageQuery{}, nil\n}\n\nfunc (c Custom) DefaultBlockDeviceMappings() []*v1.BlockDeviceMapping {\n\t// By returning nil, we ensure that EC2 will automatically choose the volumes defined by the AMI\n\t// and we don't need to describe the AMI ourselves.\n\treturn nil\n}\n\n// EphemeralBlockDevice is the block device that the pods on the node will use. For an AMI of a custom family, this is unknown\n// to us.\nfunc (c Custom) EphemeralBlockDevice() *string {\n\treturn nil\n}\n"
  },
  {
    "path": "pkg/providers/amifamily/resolver.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage amifamily\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"net\"\n\t\"strings\"\n\n\t\"github.com/aws/aws-sdk-go-v2/aws\"\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\t\"github.com/samber/lo\"\n\tcorev1 \"k8s.io/api/core/v1\"\n\t\"k8s.io/apimachinery/pkg/api/resource\"\n\t\"k8s.io/apimachinery/pkg/util/sets\"\n\n\tkarpv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n\n\t\"sigs.k8s.io/karpenter/pkg/cloudprovider\"\n\t\"sigs.k8s.io/karpenter/pkg/scheduling\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/amifamily/bootstrap\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/ssm\"\n)\n\nvar DefaultEBS = v1.BlockDevice{\n\tEncrypted:  aws.Bool(true),\n\tVolumeType: aws.String(string(ec2types.VolumeTypeGp3)),\n\tVolumeSize: lo.ToPtr(resource.MustParse(\"20Gi\")),\n}\n\ntype Resolver interface {\n\tResolve(*v1.EC2NodeClass, *karpv1.NodeClaim, []*cloudprovider.InstanceType, string, string, *Options) ([]*LaunchTemplate, error)\n}\n\n// DefaultResolver is able to fill-in dynamic launch template parameters\ntype DefaultResolver struct {\n\tregion string\n}\n\n// Options define the static launch template parameters\ntype Options struct {\n\tClusterName         string\n\tClusterEndpoint     string\n\tClusterCIDR         *string\n\tInstanceProfile     string\n\tCABundle            *string `hash:\"ignore\"`\n\tInstanceStorePolicy *v1.InstanceStorePolicy\n\tAMISelectorTerms    []v1.AMISelectorTerm `hash:\"ignore\"` // For Bottlerocket version resolution\n\tAMIs                []v1.AMI             `hash:\"ignore\"` // Resolved AMIs for version extraction\n\t// Level-triggered fields that may change out of sync.\n\tSecurityGroups           []v1.SecurityGroup\n\tTags                     map[string]string\n\tLabels                   map[string]string `hash:\"ignore\"`\n\tKubeDNSIP                net.IP\n\tAssociatePublicIPAddress *bool\n\tIPPrefixCount            *int32\n\tNodeClassName            string\n}\n\n// LaunchTemplate holds the dynamically generated launch template parameters\ntype LaunchTemplate struct {\n\t*Options\n\tUserData                         bootstrap.Bootstrapper\n\tBlockDeviceMappings              []*v1.BlockDeviceMapping\n\tMetadataOptions                  *v1.MetadataOptions\n\tAMIID                            string\n\tInstanceTypes                    []*cloudprovider.InstanceType `hash:\"ignore\"`\n\tDetailedMonitoring               bool\n\tEFACount                         int\n\tCapacityType                     string\n\tCapacityReservationID            string\n\tCapacityReservationType          v1.CapacityReservationType\n\tCapacityReservationInterruptible bool\n\tTenancy                          string\n}\n\n// AMIFamily can be implemented to override the default logic for generating dynamic launch template parameters\ntype AMIFamily interface {\n\tDescribeImageQuery(ctx context.Context, ssmProvider ssm.Provider, k8sVersion string, amiVersion string) (DescribeImageQuery, error)\n\tUserData(kubeletConfig *v1.KubeletConfiguration, taints []corev1.Taint, labels map[string]string, caBundle *string, instanceTypes []*cloudprovider.InstanceType, customUserData *string, instanceStorePolicy *v1.InstanceStorePolicy) bootstrap.Bootstrapper\n\tDefaultBlockDeviceMappings() []*v1.BlockDeviceMapping\n\tDefaultMetadataOptions() *v1.MetadataOptions\n\tEphemeralBlockDevice() *string\n\tFeatureFlags() FeatureFlags\n}\n\ntype DefaultAMIOutput struct {\n\tQuery        string\n\tRequirements scheduling.Requirements\n}\n\n// FeatureFlags describes whether the features below are enabled for a given AMIFamily\ntype FeatureFlags struct {\n\tUsesENILimitedMemoryOverhead bool\n\tPodsPerCoreEnabled           bool\n\tEvictionSoftEnabled          bool\n\tSupportsENILimitedPodDensity bool\n}\n\n// DefaultFamily provides default values for AMIFamilies that compose it\ntype DefaultFamily struct{}\n\nfunc (d DefaultFamily) FeatureFlags() FeatureFlags {\n\treturn FeatureFlags{\n\t\tUsesENILimitedMemoryOverhead: true,\n\t\tPodsPerCoreEnabled:           true,\n\t\tEvictionSoftEnabled:          true,\n\t\tSupportsENILimitedPodDensity: true,\n\t}\n}\n\n// NewDefaultResolver constructs a new launch template DefaultResolver\nfunc NewDefaultResolver(region string) *DefaultResolver {\n\treturn &DefaultResolver{\n\t\tregion: region,\n\t}\n}\n\n// Resolve generates launch templates using the static options and dynamically generates launch template parameters.\n// Multiple ResolvedTemplates are returned based on the instanceTypes passed in to support special AMIs for certain instance types like GPUs.\nfunc (r DefaultResolver) Resolve(nodeClass *v1.EC2NodeClass, nodeClaim *karpv1.NodeClaim, instanceTypes []*cloudprovider.InstanceType, capacityType string, tenancyType string, options *Options) ([]*LaunchTemplate, error) {\n\tamiFamily := GetAMIFamily(nodeClass.AMIFamily(), options)\n\tif len(nodeClass.Status.AMIs) == 0 {\n\t\treturn nil, fmt.Errorf(\"no amis exist given constraints\")\n\t}\n\tmappedAMIs := MapToInstanceTypes(instanceTypes, nodeClass.Status.AMIs)\n\tif len(mappedAMIs) == 0 {\n\t\treturn nil, fmt.Errorf(\"no instance types satisfy requirements of amis %v\", lo.Uniq(lo.Map(nodeClass.Status.AMIs, func(a v1.AMI, _ int) string { return a.ID })))\n\t}\n\tvar resolvedTemplates []*LaunchTemplate\n\tfor amiID, instanceTypes := range mappedAMIs {\n\t\t// In order to support reserved ENIs for CNI custom networking setups,\n\t\t// we need to pass down the max-pods calculation to the kubelet.\n\t\t// This requires that we resolve a unique launch template per max-pods value.\n\t\t// Similarly, instance types configured with EFAs require unique launch templates depending on the number of\n\t\t// EFAs they support.\n\t\t// Reservations IDs are also included since we need to create a separate LaunchTemplate per reservation ID when\n\t\t// launching reserved capacity. If it's a reserved capacity launch, we've already filtered the instance types\n\t\t// further up the call stack.\n\t\ttype launchTemplateParams struct {\n\t\t\tefaCount int\n\t\t\tmaxPods  int\n\t\t\t// reservationIDs is encoded as a string rather than a slice to ensure this type is comparable for use by `lo.GroupBy`.\n\t\t\treservationIDs           string\n\t\t\treservationType          v1.CapacityReservationType\n\t\t\treservationInterruptible bool\n\t\t}\n\t\tparamsToInstanceTypes := lo.GroupBy(instanceTypes, func(it *cloudprovider.InstanceType) launchTemplateParams {\n\t\t\tvar reservationType v1.CapacityReservationType\n\t\t\tvar reservationInterruptible bool\n\t\t\tvar reservationIDs []string\n\t\t\tif capacityType == karpv1.CapacityTypeReserved {\n\t\t\t\tfor _, o := range it.Offerings {\n\t\t\t\t\tif o.CapacityType() != karpv1.CapacityTypeReserved {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\treservationIDs = append(reservationIDs, o.ReservationID())\n\t\t\t\t\t// Offerings are prefiltered such that there is only a single reservation type\n\t\t\t\t\tif reservationType == \"\" {\n\t\t\t\t\t\treservationType = v1.CapacityReservationType(o.Requirements.Get(v1.LabelCapacityReservationType).Any())\n\t\t\t\t\t\treservationInterruptible = o.Requirements.Get(v1.LabelCapacityReservationInterruptible).Any() == \"true\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn launchTemplateParams{\n\t\t\t\tefaCount: lo.Ternary(\n\t\t\t\t\tlo.Contains(lo.Keys(nodeClaim.Spec.Resources.Requests), v1.ResourceEFA),\n\t\t\t\t\tint(lo.ToPtr(it.Capacity[v1.ResourceEFA]).Value()),\n\t\t\t\t\t0,\n\t\t\t\t),\n\t\t\t\tmaxPods: int(it.Capacity.Pods().Value()),\n\t\t\t\t// If we're dealing with reserved instances, there's only going to be a single instance per group. This invariant\n\t\t\t\t// is due to reservation IDs not being shared across instance types. Because of this, we don't need to worry about\n\t\t\t\t// ordering in this string.\n\t\t\t\treservationIDs:           strings.Join(reservationIDs, \",\"),\n\t\t\t\treservationType:          reservationType,\n\t\t\t\treservationInterruptible: reservationInterruptible,\n\t\t\t}\n\t\t})\n\n\t\tfor params, instanceTypes := range paramsToInstanceTypes {\n\t\t\treservationIDs := strings.Split(params.reservationIDs, \",\")\n\t\t\tresolvedTemplates = append(resolvedTemplates, r.resolveLaunchTemplates(nodeClass, nodeClaim, instanceTypes, capacityType, amiFamily, amiID, params.maxPods, params.efaCount, reservationIDs, params.reservationType, params.reservationInterruptible, options, tenancyType)...)\n\t\t}\n\t}\n\treturn resolvedTemplates, nil\n}\n\nfunc GetAMIFamily(amiFamily string, options *Options) AMIFamily {\n\tswitch amiFamily {\n\tcase v1.AMIFamilyBottlerocket:\n\t\treturn &Bottlerocket{Options: options}\n\tcase v1.AMIFamilyWindows2019:\n\t\treturn &Windows{Options: options, Version: v1.Windows2019, Build: v1.Windows2019Build}\n\tcase v1.AMIFamilyWindows2022:\n\t\treturn &Windows{Options: options, Version: v1.Windows2022, Build: v1.Windows2022Build}\n\tcase v1.AMIFamilyWindows2025:\n\t\treturn &Windows{Options: options, Version: v1.Windows2025, Build: v1.Windows2025Build}\n\tcase v1.AMIFamilyCustom:\n\t\treturn &Custom{Options: options}\n\tcase v1.AMIFamilyAL2023:\n\t\treturn &AL2023{Options: options}\n\tdefault:\n\t\treturn &AL2{Options: options}\n\t}\n}\n\nfunc (o Options) DefaultMetadataOptions() *v1.MetadataOptions {\n\treturn &v1.MetadataOptions{\n\t\tHTTPEndpoint:            aws.String(string(ec2types.InstanceMetadataEndpointStateDisabled)),\n\t\tHTTPProtocolIPv6:        aws.String(lo.Ternary(o.KubeDNSIP == nil || o.KubeDNSIP.To4() != nil, string(ec2types.LaunchTemplateInstanceMetadataProtocolIpv6Disabled), string(ec2types.LaunchTemplateInstanceMetadataProtocolIpv6Enabled))),\n\t\tHTTPPutResponseHopLimit: aws.Int64(2),\n\t\tHTTPTokens:              aws.String(string(ec2types.LaunchTemplateHttpTokensStateRequired)),\n\t}\n}\n\nfunc (r DefaultResolver) defaultClusterDNS(opts *Options, kubeletConfig *v1.KubeletConfiguration) *v1.KubeletConfiguration {\n\tif opts.KubeDNSIP == nil {\n\t\treturn kubeletConfig\n\t}\n\tif kubeletConfig != nil && len(kubeletConfig.ClusterDNS) != 0 {\n\t\treturn kubeletConfig\n\t}\n\tif kubeletConfig == nil {\n\t\treturn &v1.KubeletConfiguration{\n\t\t\tClusterDNS: []string{opts.KubeDNSIP.String()},\n\t\t}\n\t}\n\tnewKubeletConfig := kubeletConfig.DeepCopy()\n\tnewKubeletConfig.ClusterDNS = []string{opts.KubeDNSIP.String()}\n\treturn newKubeletConfig\n}\n\nfunc (r DefaultResolver) resolveLaunchTemplates(\n\tnodeClass *v1.EC2NodeClass,\n\tnodeClaim *karpv1.NodeClaim,\n\tinstanceTypes []*cloudprovider.InstanceType,\n\tcapacityType string,\n\tamiFamily AMIFamily,\n\tamiID string,\n\tmaxPods int,\n\tefaCount int,\n\tcapacityReservationIDs []string,\n\tcapacityReservationType v1.CapacityReservationType,\n\tcapacityReservationInterruptible bool,\n\toptions *Options,\n\ttenancyType string,\n) []*LaunchTemplate {\n\tkubeletConfig := &v1.KubeletConfiguration{}\n\tif nodeClass.Spec.Kubelet != nil {\n\t\tkubeletConfig = nodeClass.Spec.Kubelet.DeepCopy()\n\t}\n\tif kubeletConfig.MaxPods == nil {\n\t\t// nolint:gosec\n\t\t// We know that it's not possible to have values that would overflow int32 here since we control\n\t\t// the maxPods values that we pass in here\n\t\tkubeletConfig.MaxPods = lo.ToPtr(int32(maxPods))\n\t}\n\ttaints := lo.Flatten([][]corev1.Taint{\n\t\tnodeClaim.Spec.Taints,\n\t\tnodeClaim.Spec.StartupTaints,\n\t})\n\tif _, found := lo.Find(taints, func(t corev1.Taint) bool {\n\t\treturn t.MatchTaint(&karpv1.UnregisteredNoExecuteTaint)\n\t}); !found {\n\t\ttaints = append(taints, karpv1.UnregisteredNoExecuteTaint)\n\t}\n\t// If no reservation IDs are provided, insert an empty string so the end result is a single launch template with no\n\t// associated capacity reservation.\n\t// TODO: We can simplify this by creating an initial lt, and then copying it for each cr. However, this requires a deep\n\t// copy of the LT struct, which contains an interface causing problems for deepcopy-gen. See review comment for context:\n\t// https://github.com/aws/karpenter-provider-aws/pull/7726#discussion_r1955280055\n\tif len(capacityReservationIDs) == 0 {\n\t\tcapacityReservationIDs = append(capacityReservationIDs, \"\")\n\t}\n\thttpProtocolUnsupportedRegions := sets.New(\n\t\t\"us-iso-east-1\",\n\t\t\"us-iso-west-1\",\n\t\t\"us-isob-east-1\",\n\t\t\"us-isob-west-1\",\n\t\t\"us-isof-south-1\",\n\t\t\"us-isof-east-1\",\n\t)\n\treturn lo.Map(capacityReservationIDs, func(id string, _ int) *LaunchTemplate {\n\t\tresolved := &LaunchTemplate{\n\t\t\tOptions: options,\n\t\t\tUserData: amiFamily.UserData(\n\t\t\t\tr.defaultClusterDNS(options, kubeletConfig),\n\t\t\t\ttaints,\n\t\t\t\tRejectForbiddenLabels(options.Labels),\n\t\t\t\toptions.CABundle,\n\t\t\t\tinstanceTypes,\n\t\t\t\tnodeClass.Spec.UserData,\n\t\t\t\toptions.InstanceStorePolicy,\n\t\t\t),\n\t\t\tBlockDeviceMappings:              nodeClass.Spec.BlockDeviceMappings,\n\t\t\tMetadataOptions:                  nodeClass.Spec.MetadataOptions,\n\t\t\tDetailedMonitoring:               aws.ToBool(nodeClass.Spec.DetailedMonitoring),\n\t\t\tAMIID:                            amiID,\n\t\t\tInstanceTypes:                    instanceTypes,\n\t\t\tEFACount:                         efaCount,\n\t\t\tCapacityType:                     capacityType,\n\t\t\tCapacityReservationID:            id,\n\t\t\tCapacityReservationType:          capacityReservationType,\n\t\t\tCapacityReservationInterruptible: capacityReservationInterruptible,\n\t\t\tTenancy:                          tenancyType,\n\t\t}\n\t\tif len(resolved.BlockDeviceMappings) == 0 {\n\t\t\tresolved.BlockDeviceMappings = amiFamily.DefaultBlockDeviceMappings()\n\t\t}\n\t\tif resolved.MetadataOptions == nil {\n\t\t\tresolved.MetadataOptions = amiFamily.DefaultMetadataOptions()\n\t\t}\n\t\tif httpProtocolUnsupportedRegions.Has(r.region) {\n\t\t\tresolved.MetadataOptions.HTTPProtocolIPv6 = nil\n\t\t}\n\t\treturn resolved\n\t})\n}\n\n// RejectForbiddenLabels rejects any label from the provided set that would be blocked during node admission.\n// Ref: https://github.com/kubernetes/kubernetes/blob/8d450ef773127374148abad4daaf28dac6cb2625/plugin/pkg/admission/noderestriction/admission.go#L520-L525\nfunc RejectForbiddenLabels(labels map[string]string) map[string]string {\n\tfilteredLabels := make(map[string]string, len(labels))\n\tfor label, value := range labels {\n\t\tif isRestrictedLabel(label) {\n\t\t\tcontinue\n\t\t}\n\t\tfilteredLabels[label] = value\n\t}\n\treturn filteredLabels\n}\n\nfunc isRestrictedLabel(label string) bool {\n\tdomain := karpv1.GetLabelDomain(label)\n\tfor _, restrictedDomain := range []string{\n\t\tcorev1.LabelNamespaceNodeRestriction,\n\t\t\"kubernetes.io\",\n\t\t\"k8s.io\",\n\t} {\n\t\tif domain == restrictedDomain || strings.HasSuffix(domain, \".\"+restrictedDomain) {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n"
  },
  {
    "path": "pkg/providers/amifamily/suite_test.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage amifamily_test\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n\t\"testing\"\n\t\"time\"\n\n\t\"sigs.k8s.io/karpenter/pkg/test/v1alpha1\"\n\n\t\"github.com/aws/aws-sdk-go-v2/aws\"\n\t\"github.com/aws/aws-sdk-go-v2/service/ec2\"\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\t\"k8s.io/apimachinery/pkg/util/version\"\n\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n\t\"github.com/onsi/gomega/gstruct\"\n\t. \"sigs.k8s.io/karpenter/pkg/utils/testing\"\n\n\t\"github.com/samber/lo\"\n\tcorev1 \"k8s.io/api/core/v1\"\n\n\t\"github.com/awslabs/operatorpkg/object\"\n\tmetav1 \"k8s.io/apimachinery/pkg/apis/meta/v1\"\n\tkarpv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n\tcorecloudprovider \"sigs.k8s.io/karpenter/pkg/cloudprovider\"\n\tcorecloudfake \"sigs.k8s.io/karpenter/pkg/cloudprovider/fake\"\n\tcoreoptions \"sigs.k8s.io/karpenter/pkg/operator/options\"\n\t\"sigs.k8s.io/karpenter/pkg/scheduling\"\n\tcoretest \"sigs.k8s.io/karpenter/pkg/test\"\n\n\t\"github.com/aws/karpenter-provider-aws/pkg/apis\"\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/fake\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/operator/options\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/amifamily\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/test\"\n\n\t. \"sigs.k8s.io/karpenter/pkg/test/expectations\"\n)\n\nvar ctx context.Context\nvar env *coretest.Environment\nvar awsEnv *test.Environment\nvar nodeClass *v1.EC2NodeClass\nvar nodePool *karpv1.NodePool\nvar nodeClaim *karpv1.NodeClaim\nvar instanceTypes []*corecloudprovider.InstanceType\n\nfunc TestAWS(t *testing.T) {\n\tctx = TestContextWithLogger(t)\n\tRegisterFailHandler(Fail)\n\tRunSpecs(t, \"AMISelector\")\n}\n\nconst (\n\tamd64AMI       = \"ami-id-amd64\"\n\tarm64AMI       = \"ami-id-arm64\"\n\tamd64NvidiaAMI = \"ami-id-amd64-nvidia\"\n\tarm64NvidiaAMI = \"ami-id-arm64-nvidia\"\n)\n\nvar _ = BeforeSuite(func() {\n\tenv = coretest.NewEnvironment(coretest.WithCRDs(apis.CRDs...), coretest.WithCRDs(v1alpha1.CRDs...))\n\tctx = coreoptions.ToContext(ctx, coretest.Options(coretest.OptionsFields{FeatureGates: coretest.FeatureGates{ReservedCapacity: lo.ToPtr(true)}}))\n\tctx = options.ToContext(ctx, test.Options())\n\tawsEnv = test.NewEnvironment(ctx, env)\n})\n\nvar _ = BeforeEach(func() {\n\t// Set up the DescribeImages API so that we can call it by ID with the mock parameters that we generate\n\tawsEnv.EC2API.DescribeImagesOutput.Set(&ec2.DescribeImagesOutput{\n\t\tImages: []ec2types.Image{\n\t\t\t{\n\t\t\t\tName:         aws.String(amd64AMI),\n\t\t\t\tImageId:      aws.String(\"ami-id-amd64\"),\n\t\t\t\tCreationDate: aws.String(time.Time{}.Format(time.RFC3339)),\n\t\t\t\tArchitecture: \"x86_64\",\n\t\t\t\tTags: []ec2types.Tag{\n\t\t\t\t\t{Key: aws.String(\"Name\"), Value: aws.String(amd64AMI)},\n\t\t\t\t\t{Key: aws.String(\"foo\"), Value: aws.String(\"bar\")},\n\t\t\t\t},\n\t\t\t\tState: ec2types.ImageStateAvailable,\n\t\t\t},\n\t\t\t{\n\t\t\t\tName:         aws.String(arm64AMI),\n\t\t\t\tImageId:      aws.String(\"ami-id-arm64\"),\n\t\t\t\tCreationDate: aws.String(time.Time{}.Add(time.Minute).Format(time.RFC3339)),\n\t\t\t\tArchitecture: \"arm64\",\n\t\t\t\tTags: []ec2types.Tag{\n\t\t\t\t\t{Key: aws.String(\"Name\"), Value: aws.String(arm64AMI)},\n\t\t\t\t\t{Key: aws.String(\"foo\"), Value: aws.String(\"bar\")},\n\t\t\t\t},\n\t\t\t\tState: ec2types.ImageStateAvailable,\n\t\t\t},\n\t\t\t{\n\t\t\t\tName:         aws.String(amd64NvidiaAMI),\n\t\t\t\tImageId:      aws.String(\"ami-id-amd64-nvidia\"),\n\t\t\t\tCreationDate: aws.String(time.Time{}.Add(2 * time.Minute).Format(time.RFC3339)),\n\t\t\t\tArchitecture: \"x86_64\",\n\t\t\t\tTags: []ec2types.Tag{\n\t\t\t\t\t{Key: aws.String(\"Name\"), Value: aws.String(amd64NvidiaAMI)},\n\t\t\t\t\t{Key: aws.String(\"foo\"), Value: aws.String(\"bar\")},\n\t\t\t\t},\n\t\t\t\tState: ec2types.ImageStateAvailable,\n\t\t\t},\n\t\t\t{\n\t\t\t\tName:         aws.String(arm64NvidiaAMI),\n\t\t\t\tImageId:      aws.String(\"ami-id-arm64-nvidia\"),\n\t\t\t\tCreationDate: aws.String(time.Time{}.Add(2 * time.Minute).Format(time.RFC3339)),\n\t\t\t\tArchitecture: \"arm64\",\n\t\t\t\tTags: []ec2types.Tag{\n\t\t\t\t\t{Key: aws.String(\"Name\"), Value: aws.String(arm64NvidiaAMI)},\n\t\t\t\t\t{Key: aws.String(\"foo\"), Value: aws.String(\"bar\")},\n\t\t\t\t},\n\t\t\t\tState: ec2types.ImageStateAvailable,\n\t\t\t},\n\t\t},\n\t})\n})\n\nvar _ = AfterEach(func() {\n\tawsEnv.Reset()\n})\n\nvar _ = AfterSuite(func() {\n\tExpect(env.Stop()).To(Succeed(), \"Failed to stop environment\")\n})\n\ntype MockVersionProvider struct {\n\tversion string\n}\n\nfunc (m *MockVersionProvider) Get(ctx context.Context) string {\n\treturn m.version\n}\n\nfunc amiProviderWithEKSVersionOverride(version string) *amifamily.DefaultProvider {\n\tmockVersionProvider := &MockVersionProvider{version: version}\n\treturn amifamily.NewDefaultProvider(awsEnv.Clock, mockVersionProvider, awsEnv.SSMProvider, awsEnv.EC2API, awsEnv.EC2Cache)\n}\n\nvar _ = Describe(\"AMIProvider\", func() {\n\tvar k8sVersion string\n\tBeforeEach(func() {\n\t\tk8sVersion = awsEnv.VersionProvider.Get(ctx)\n\t\tnodeClass = test.EC2NodeClass()\n\t})\n\tDescribeTable(\n\t\t\"should fail when AL2 is used with Kubernetes version 1.33 or greater\",\n\t\tfunc(k8sVersion string, amiAlias string, expectError bool) {\n\t\t\tamiProvider := amiProviderWithEKSVersionOverride(k8sVersion)\n\t\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{Alias: amiAlias}}\n\t\t\t_, err := amiProvider.DescribeImageQueries(ctx, nodeClass)\n\t\t\tif expectError {\n\t\t\t\tExpect(err).To(HaveOccurred())\n\t\t\t} else {\n\t\t\t\tExpect(err).ToNot(HaveOccurred())\n\t\t\t}\n\t\t},\n\t\tEntry(\"should fail for AL2 on 1.33.0\", \"1.33.0\", \"al2@latest\", true),\n\t\tEntry(\"should fail for AL2 on 1.34.2\", \"1.34.2\", \"al2@latest\", true),\n\t\tEntry(\"should succeed for AL2 on 1.32.0\", \"1.32.0\", \"al2@latest\", false),\n\t\tEntry(\"should succeed for AL2023 on 1.33.0\", \"1.33.0\", \"al2023@latest\", false),\n\t)\n\n\tIt(\"should succeed to resolve AMIs (AL2)\", func() {\n\t\tif version.MustParseGeneric(k8sVersion).Minor() > 32 {\n\t\t\tSkip(\"AL2 is not supported on versions > 1.32\")\n\t\t}\n\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{Alias: \"al2@latest\"}}\n\t\tawsEnv.SSMAPI.Parameters = map[string]string{\n\t\t\tfmt.Sprintf(\"/aws/service/eks/optimized-ami/%s/amazon-linux-2/recommended/image_id\", k8sVersion):       amd64AMI,\n\t\t\tfmt.Sprintf(\"/aws/service/eks/optimized-ami/%s/amazon-linux-2-gpu/recommended/image_id\", k8sVersion):   amd64NvidiaAMI,\n\t\t\tfmt.Sprintf(\"/aws/service/eks/optimized-ami/%s/amazon-linux-2-arm64/recommended/image_id\", k8sVersion): arm64AMI,\n\t\t}\n\t\tamis, err := awsEnv.AMIProvider.List(ctx, nodeClass)\n\t\tExpect(err).ToNot(HaveOccurred())\n\t\tExpect(amis).To(HaveLen(4))\n\t})\n\tIt(\"should succeed to resolve AMIs (AL2023)\", func() {\n\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{Alias: \"al2023@latest\"}}\n\t\tawsEnv.SSMAPI.Parameters = map[string]string{\n\t\t\tfmt.Sprintf(\"/aws/service/eks/optimized-ami/%s/amazon-linux-2023/x86_64/standard/recommended/image_id\", k8sVersion): amd64AMI,\n\t\t\tfmt.Sprintf(\"/aws/service/eks/optimized-ami/%s/amazon-linux-2023/arm64/standard/recommended/image_id\", k8sVersion):  arm64AMI,\n\t\t}\n\t\tamis, err := awsEnv.AMIProvider.List(ctx, nodeClass)\n\t\tExpect(err).ToNot(HaveOccurred())\n\t\tExpect(amis).To(HaveLen(2))\n\t})\n\tIt(\"should succeed to resolve AMIs (Bottlerocket)\", func() {\n\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{Alias: \"bottlerocket@latest\"}}\n\t\tawsEnv.SSMAPI.Parameters = map[string]string{\n\t\t\tfmt.Sprintf(\"/aws/service/bottlerocket/aws-k8s-%s/x86_64/latest/image_id\", k8sVersion):        amd64AMI,\n\t\t\tfmt.Sprintf(\"/aws/service/bottlerocket/aws-k8s-%s-nvidia/x86_64/latest/image_id\", k8sVersion): amd64NvidiaAMI,\n\t\t\tfmt.Sprintf(\"/aws/service/bottlerocket/aws-k8s-%s/arm64/latest/image_id\", k8sVersion):         arm64AMI,\n\t\t\tfmt.Sprintf(\"/aws/service/bottlerocket/aws-k8s-%s-nvidia/arm64/latest/image_id\", k8sVersion):  arm64NvidiaAMI,\n\t\t}\n\t\tamis, err := awsEnv.AMIProvider.List(ctx, nodeClass)\n\t\tExpect(err).ToNot(HaveOccurred())\n\t\tExpect(amis).To(HaveLen(5))\n\t})\n\tIt(\"should succeed to resolve AMIs (Windows2019)\", func() {\n\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{Alias: \"windows2019@latest\"}}\n\t\tawsEnv.SSMAPI.Parameters = map[string]string{\n\t\t\tfmt.Sprintf(\"/aws/service/ami-windows-latest/Windows_Server-2019-English-Core-EKS_Optimized-%s/image_id\", k8sVersion): amd64AMI,\n\t\t}\n\t\tamis, err := awsEnv.AMIProvider.List(ctx, nodeClass)\n\t\tExpect(err).ToNot(HaveOccurred())\n\t\tExpect(amis).To(HaveLen(1))\n\t})\n\tIt(\"should succeed to resolve AMIs (Windows2022)\", func() {\n\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{Alias: \"windows2022@latest\"}}\n\t\tawsEnv.SSMAPI.Parameters = map[string]string{\n\t\t\tfmt.Sprintf(\"/aws/service/ami-windows-latest/Windows_Server-2022-English-Core-EKS_Optimized-%s/image_id\", k8sVersion): amd64AMI,\n\t\t}\n\t\tamis, err := awsEnv.AMIProvider.List(ctx, nodeClass)\n\t\tExpect(err).ToNot(HaveOccurred())\n\t\tExpect(amis).To(HaveLen(1))\n\t})\n\tIt(\"should succeed to resolve AMIs (Windows2025)\", func() {\n\t\t// Check if EKS version supports Windows 2025 (requires 1.35+)\n\t\tminorVersion, err := strconv.Atoi(strings.Split(k8sVersion, \".\")[1])\n\t\tif err != nil || minorVersion < 35 {\n\t\t\tSkip(\"Windows 2025 requires EKS 1.35+, current version: \" + k8sVersion)\n\t\t}\n\n\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{Alias: \"windows2025@latest\"}}\n\t\tawsEnv.SSMAPI.Parameters = map[string]string{\n\t\t\tfmt.Sprintf(\"/aws/service/ami-windows-latest/Windows_Server-2025-English-Core-EKS_Optimized-%s/image_id\", k8sVersion): amd64AMI,\n\t\t}\n\t\tamis, err := awsEnv.AMIProvider.List(ctx, nodeClass)\n\t\tExpect(err).ToNot(HaveOccurred())\n\t\tExpect(amis).To(HaveLen(1))\n\t})\n\tIt(\"should fail to resolve AMIs for Windows2025 when EKS version is below 1.35\", func() {\n\t\tamiProvider := amiProviderWithEKSVersionOverride(\"1.34.0\")\n\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{Alias: \"windows2025@latest\"}}\n\t\tawsEnv.SSMAPI.Parameters = map[string]string{\n\t\t\tfmt.Sprintf(\"/aws/service/ami-windows-latest/Windows_Server-2025-English-Core-EKS_Optimized-%s/image_id\", \"1.34.0\"): amd64AMI,\n\t\t}\n\t\t_, err := amiProvider.DescribeImageQueries(ctx, nodeClass)\n\t\tExpect(err).To(HaveOccurred())\n\t\tExpect(err.Error()).To(ContainSubstring(\"Windows Server 2025 requires EKS version 1.35 or higher\"))\n\t})\n\n\tIt(\"should not cause data races when calling Get() simultaneously\", func() {\n\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{\n\t\t\t{\n\t\t\t\tID: \"ami-id-amd64\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tID: \"ami-id-arm64\",\n\t\t\t},\n\t\t}\n\t\twg := sync.WaitGroup{}\n\t\tfor range 10000 {\n\t\t\twg.Go(func() {\n\t\t\t\tdefer GinkgoRecover()\n\t\t\t\timages, err := awsEnv.AMIProvider.List(ctx, nodeClass)\n\t\t\t\tExpect(err).ToNot(HaveOccurred())\n\n\t\t\t\tExpect(images).To(HaveLen(2))\n\t\t\t\t// Sort everything in parallel and ensure that we don't get data races\n\t\t\t\timages.Sort()\n\t\t\t\tExpect(images).To(BeEquivalentTo([]amifamily.AMI{\n\t\t\t\t\t{\n\t\t\t\t\t\tName:         arm64AMI,\n\t\t\t\t\t\tAmiID:        \"ami-id-arm64\",\n\t\t\t\t\t\tCreationDate: time.Time{}.Add(time.Minute).Format(time.RFC3339),\n\t\t\t\t\t\tRequirements: scheduling.NewLabelRequirements(map[string]string{\n\t\t\t\t\t\t\tcorev1.LabelArchStable: karpv1.ArchitectureArm64,\n\t\t\t\t\t\t}),\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tName:         amd64AMI,\n\t\t\t\t\t\tAmiID:        \"ami-id-amd64\",\n\t\t\t\t\t\tCreationDate: time.Time{}.Format(time.RFC3339),\n\t\t\t\t\t\tRequirements: scheduling.NewLabelRequirements(map[string]string{\n\t\t\t\t\t\t\tcorev1.LabelArchStable: karpv1.ArchitectureAmd64,\n\t\t\t\t\t\t}),\n\t\t\t\t\t},\n\t\t\t\t}))\n\t\t\t})\n\t\t}\n\t\twg.Wait()\n\t})\n\tDescribeTable(\n\t\t\"should ignore images when image.state != available\",\n\t\tfunc(state ec2types.ImageState) {\n\t\t\tawsEnv.EC2API.DescribeImagesOutput.Set(&ec2.DescribeImagesOutput{Images: []ec2types.Image{\n\t\t\t\t{\n\t\t\t\t\tName:         aws.String(coretest.RandomName()),\n\t\t\t\t\tImageId:      aws.String(\"ami-123\"),\n\t\t\t\t\tArchitecture: \"x86_64\",\n\t\t\t\t\tTags:         []ec2types.Tag{{Key: lo.ToPtr(\"test\"), Value: lo.ToPtr(\"test\")}},\n\t\t\t\t\tCreationDate: aws.String(\"2022-08-15T12:00:00Z\"),\n\t\t\t\t\tState:        ec2types.ImageStateAvailable,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tName:         aws.String(coretest.RandomName()),\n\t\t\t\t\tImageId:      aws.String(\"ami-456\"),\n\t\t\t\t\tArchitecture: \"arm64\",\n\t\t\t\t\tTags:         []ec2types.Tag{{Key: lo.ToPtr(\"test\"), Value: lo.ToPtr(\"test\")}},\n\t\t\t\t\tCreationDate: aws.String(\"2022-08-15T12:00:00Z\"),\n\t\t\t\t\tState:        state,\n\t\t\t\t},\n\t\t\t}})\n\t\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{\n\t\t\t\tTags: map[string]string{\n\t\t\t\t\t\"test\": \"test\",\n\t\t\t\t},\n\t\t\t}}\n\t\t\tamis, err := awsEnv.AMIProvider.List(ctx, nodeClass)\n\t\t\tExpect(err).ToNot(HaveOccurred())\n\t\t\tExpect(amis).To(HaveLen(1))\n\t\t\tExpect(amis[0].AmiID).To(Equal(\"ami-123\"))\n\t\t},\n\t\tlo.FilterMap(ec2types.ImageState(\"\").Values(), func(state ec2types.ImageState, _ int) (TableEntry, bool) {\n\t\t\tif state == ec2types.ImageStateAvailable {\n\t\t\t\treturn TableEntry{}, false\n\t\t\t}\n\t\t\treturn Entry(string(state), state), true\n\t\t}),\n\t)\n\n\tContext(\"SSM Alias Missing\", func() {\n\t\tIt(\"should succeed to partially resolve AMIs if all SSM aliases don't exist (Al2)\", func() {\n\t\t\tif version.MustParseGeneric(k8sVersion).Minor() > 32 {\n\t\t\t\tSkip(\"AL2 is not supported on versions > 1.32\")\n\t\t\t}\n\t\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{Alias: \"al2@latest\"}}\n\t\t\t// No GPU AMI exists here\n\t\t\tawsEnv.SSMAPI.Parameters = map[string]string{\n\t\t\t\tfmt.Sprintf(\"/aws/service/eks/optimized-ami/%s/amazon-linux-2/recommended/image_id\", k8sVersion):       amd64AMI,\n\t\t\t\tfmt.Sprintf(\"/aws/service/eks/optimized-ami/%s/amazon-linux-2-arm64/recommended/image_id\", k8sVersion): arm64AMI,\n\t\t\t}\n\t\t\t// Only 2 of the requirements sets for the SSM aliases will resolve\n\t\t\tamis, err := awsEnv.AMIProvider.List(ctx, nodeClass)\n\t\t\tExpect(err).ToNot(HaveOccurred())\n\t\t\tExpect(amis).To(HaveLen(2))\n\t\t})\n\t\tIt(\"should succeed to partially resolve AMIs if all SSM aliases don't exist (AL2023)\", func() {\n\t\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{Alias: \"al2023@latest\"}}\n\t\t\tawsEnv.SSMAPI.Parameters = map[string]string{\n\t\t\t\tfmt.Sprintf(\"/aws/service/eks/optimized-ami/%s/amazon-linux-2023/x86_64/standard/recommended/image_id\", k8sVersion): amd64AMI,\n\t\t\t}\n\t\t\tamis, err := awsEnv.AMIProvider.List(ctx, nodeClass)\n\t\t\tExpect(err).ToNot(HaveOccurred())\n\t\t\tExpect(amis).To(HaveLen(1))\n\t\t})\n\t\tIt(\"should succeed to partially resolve AMIs if all SSM aliases don't exist (Bottlerocket)\", func() {\n\t\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{Alias: \"bottlerocket@latest\"}}\n\t\t\t// No GPU AMI exists for AM64 here\n\t\t\tawsEnv.SSMAPI.Parameters = map[string]string{\n\t\t\t\tfmt.Sprintf(\"/aws/service/bottlerocket/aws-k8s-%s/x86_64/latest/image_id\", k8sVersion):        amd64AMI,\n\t\t\t\tfmt.Sprintf(\"/aws/service/bottlerocket/aws-k8s-%s-nvidia/x86_64/latest/image_id\", k8sVersion): amd64NvidiaAMI,\n\t\t\t\tfmt.Sprintf(\"/aws/service/bottlerocket/aws-k8s-%s/arm64/latest/image_id\", k8sVersion):         arm64AMI,\n\t\t\t}\n\t\t\t// Only 4 of the requirements sets for the SSM aliases will resolve\n\t\t\tamis, err := awsEnv.AMIProvider.List(ctx, nodeClass)\n\t\t\tExpect(err).ToNot(HaveOccurred())\n\t\t\tExpect(amis).To(HaveLen(4))\n\t\t})\n\t})\n\tContext(\"AMI Tag Requirements\", func() {\n\t\tvar img ec2types.Image\n\t\tBeforeEach(func() {\n\t\t\timg = ec2types.Image{\n\t\t\t\tName:         aws.String(amd64AMI),\n\t\t\t\tImageId:      aws.String(\"ami-id-amd64\"),\n\t\t\t\tCreationDate: aws.String(time.Now().Format(time.RFC3339)),\n\t\t\t\tArchitecture: \"x86_64\",\n\t\t\t\tTags: []ec2types.Tag{\n\t\t\t\t\t{Key: aws.String(\"Name\"), Value: aws.String(amd64AMI)},\n\t\t\t\t\t{Key: aws.String(\"foo\"), Value: aws.String(\"bar\")},\n\t\t\t\t\t{Key: aws.String(corev1.LabelInstanceTypeStable), Value: aws.String(\"m5.large\")},\n\t\t\t\t\t{Key: aws.String(corev1.LabelTopologyZone), Value: aws.String(\"test-zone-1a\")},\n\t\t\t\t},\n\t\t\t\tState: ec2types.ImageStateAvailable,\n\t\t\t}\n\t\t\tawsEnv.EC2API.DescribeImagesOutput.Set(&ec2.DescribeImagesOutput{\n\t\t\t\tImages: []ec2types.Image{\n\t\t\t\t\timg,\n\t\t\t\t},\n\t\t\t})\n\t\t})\n\t\tIt(\"should succeed to not resolve tags as requirements for NodeClasses\", func() {\n\t\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{\n\t\t\t\t{\n\t\t\t\t\tTags: map[string]string{\"*\": \"*\"},\n\t\t\t\t},\n\t\t\t}\n\t\t\tamis, err := awsEnv.AMIProvider.List(ctx, nodeClass)\n\t\t\tExpect(err).ToNot(HaveOccurred())\n\t\t\tExpect(amis).To(HaveLen(1))\n\t\t\tExpect(amis).To(ConsistOf(amifamily.AMI{\n\t\t\t\tName:         aws.ToString(img.Name),\n\t\t\t\tAmiID:        aws.ToString(img.ImageId),\n\t\t\t\tCreationDate: aws.ToString(img.CreationDate),\n\t\t\t\tRequirements: scheduling.NewRequirements(\n\t\t\t\t\tscheduling.NewRequirement(corev1.LabelArchStable, corev1.NodeSelectorOpIn, karpv1.ArchitectureAmd64),\n\t\t\t\t),\n\t\t\t}))\n\t\t})\n\t})\n\tContext(\"AMI List requirements\", func() {\n\t\tBeforeEach(func() {\n\t\t\t// Set time using the injectable/fake clock to now\n\t\t\tawsEnv.Clock.SetTime(time.Now())\n\t\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{\n\t\t\t\t{\n\t\t\t\t\tTags: map[string]string{\"*\": \"*\"},\n\t\t\t\t},\n\t\t\t}\n\t\t})\n\t\tIt(\"should prioritize the older non-deprecated ami without deprecation time\", func() {\n\t\t\t// Here we have two AMIs one which is deprecated and newer and one which is older and non-deprecated without a deprecation time\n\t\t\t// List operation will prioritize the non-deprecated AMI without the deprecation time\n\t\t\tawsEnv.EC2API.DescribeImagesOutput.Set(&ec2.DescribeImagesOutput{\n\t\t\t\tImages: []ec2types.Image{\n\t\t\t\t\t{\n\t\t\t\t\t\tName:            aws.String(amd64AMI),\n\t\t\t\t\t\tImageId:         aws.String(\"ami-5678\"),\n\t\t\t\t\t\tCreationDate:    aws.String(\"2021-08-31T00:12:42.000Z\"),\n\t\t\t\t\t\tDeprecationTime: aws.String(awsEnv.Clock.Now().Add(-1 * time.Hour).Format(time.RFC3339)),\n\t\t\t\t\t\tArchitecture:    \"x86_64\",\n\t\t\t\t\t\tTags: []ec2types.Tag{\n\t\t\t\t\t\t\t{Key: aws.String(\"Name\"), Value: aws.String(amd64AMI)},\n\t\t\t\t\t\t\t{Key: aws.String(\"foo\"), Value: aws.String(\"bar\")},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tState: ec2types.ImageStateAvailable,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tName:         aws.String(amd64AMI),\n\t\t\t\t\t\tImageId:      aws.String(\"ami-1234\"),\n\t\t\t\t\t\tCreationDate: aws.String(\"2020-08-31T00:08:42.000Z\"),\n\t\t\t\t\t\tArchitecture: \"x86_64\",\n\t\t\t\t\t\tTags: []ec2types.Tag{\n\t\t\t\t\t\t\t{Key: aws.String(\"Name\"), Value: aws.String(amd64AMI)},\n\t\t\t\t\t\t\t{Key: aws.String(\"foo\"), Value: aws.String(\"bar\")},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tState: ec2types.ImageStateAvailable,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t})\n\t\t\tamis, err := awsEnv.AMIProvider.List(ctx, nodeClass)\n\t\t\tExpect(err).ToNot(HaveOccurred())\n\t\t\tExpect(amis).To(HaveLen(1))\n\t\t\tExpect(amis).To(ConsistOf(amifamily.AMI{\n\t\t\t\tName:         amd64AMI,\n\t\t\t\tAmiID:        \"ami-1234\",\n\t\t\t\tCreationDate: \"2020-08-31T00:08:42.000Z\",\n\t\t\t\tRequirements: scheduling.NewRequirements(\n\t\t\t\t\tscheduling.NewRequirement(corev1.LabelArchStable, corev1.NodeSelectorOpIn, karpv1.ArchitectureAmd64),\n\t\t\t\t),\n\t\t\t}))\n\t\t})\n\t\tIt(\"should prioritize the non-deprecated ami with deprecation time when both have same creation time\", func() {\n\t\t\t// Here we have two AMIs one which is deprecated and one which is non-deprecated both with the same creation time\n\t\t\t// List operation will prioritize the non-deprecated AMI\n\t\t\tawsEnv.EC2API.DescribeImagesOutput.Set(&ec2.DescribeImagesOutput{\n\t\t\t\tImages: []ec2types.Image{\n\t\t\t\t\t{\n\t\t\t\t\t\tName:            aws.String(amd64AMI),\n\t\t\t\t\t\tImageId:         aws.String(\"ami-5678\"),\n\t\t\t\t\t\tCreationDate:    aws.String(\"2021-08-31T00:12:42.000Z\"),\n\t\t\t\t\t\tDeprecationTime: aws.String(awsEnv.Clock.Now().Add(-10 * time.Minute).Format(time.RFC3339)),\n\t\t\t\t\t\tArchitecture:    \"x86_64\",\n\t\t\t\t\t\tTags: []ec2types.Tag{\n\t\t\t\t\t\t\t{Key: aws.String(\"Name\"), Value: aws.String(amd64AMI)},\n\t\t\t\t\t\t\t{Key: aws.String(\"foo\"), Value: aws.String(\"bar\")},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tState: ec2types.ImageStateAvailable,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tName:            aws.String(amd64AMI),\n\t\t\t\t\t\tImageId:         aws.String(\"ami-1234\"),\n\t\t\t\t\t\tCreationDate:    aws.String(\"2021-08-31T00:12:42.000Z\"),\n\t\t\t\t\t\tDeprecationTime: aws.String(awsEnv.Clock.Now().Add(10 * time.Minute).Format(time.RFC3339)),\n\t\t\t\t\t\tArchitecture:    \"x86_64\",\n\t\t\t\t\t\tTags: []ec2types.Tag{\n\t\t\t\t\t\t\t{Key: aws.String(\"Name\"), Value: aws.String(amd64AMI)},\n\t\t\t\t\t\t\t{Key: aws.String(\"foo\"), Value: aws.String(\"bar\")},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tState: ec2types.ImageStateAvailable,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t})\n\t\t\tamis, err := awsEnv.AMIProvider.List(ctx, nodeClass)\n\t\t\tExpect(err).ToNot(HaveOccurred())\n\t\t\tExpect(amis).To(HaveLen(1))\n\t\t\tExpect(amis).To(ConsistOf(amifamily.AMI{\n\t\t\t\tName:         amd64AMI,\n\t\t\t\tAmiID:        \"ami-1234\",\n\t\t\t\tCreationDate: \"2021-08-31T00:12:42.000Z\",\n\t\t\t\tDeprecated:   false,\n\t\t\t\tRequirements: scheduling.NewRequirements(\n\t\t\t\t\tscheduling.NewRequirement(corev1.LabelArchStable, corev1.NodeSelectorOpIn, karpv1.ArchitectureAmd64),\n\t\t\t\t),\n\t\t\t}))\n\t\t})\n\t\tIt(\"should prioritize the non-deprecated ami with deprecation time when both have same creation time and different name\", func() {\n\t\t\t// Here we have two AMIs one which is deprecated and one which is non-deprecated both with the same creation time but with different names\n\t\t\t// List operation will prioritize the non-deprecated AMI\n\t\t\tawsEnv.EC2API.DescribeImagesOutput.Set(&ec2.DescribeImagesOutput{\n\t\t\t\tImages: []ec2types.Image{\n\t\t\t\t\t{\n\t\t\t\t\t\tName:            aws.String(\"test-ami-2\"),\n\t\t\t\t\t\tImageId:         aws.String(\"ami-5678\"),\n\t\t\t\t\t\tCreationDate:    aws.String(\"2021-08-31T00:12:42.000Z\"),\n\t\t\t\t\t\tDeprecationTime: aws.String(awsEnv.Clock.Now().Add(-10 * time.Minute).Format(time.RFC3339)),\n\t\t\t\t\t\tArchitecture:    \"x86_64\",\n\t\t\t\t\t\tTags: []ec2types.Tag{\n\t\t\t\t\t\t\t{Key: aws.String(\"Name\"), Value: aws.String(\"test-ami-2\")},\n\t\t\t\t\t\t\t{Key: aws.String(\"foo\"), Value: aws.String(\"bar\")},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tState: ec2types.ImageStateAvailable,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tName:            aws.String(\"test-ami-1\"),\n\t\t\t\t\t\tImageId:         aws.String(\"ami-1234\"),\n\t\t\t\t\t\tCreationDate:    aws.String(\"2021-08-31T00:12:42.000Z\"),\n\t\t\t\t\t\tDeprecationTime: aws.String(awsEnv.Clock.Now().Add(10 * time.Minute).Format(time.RFC3339)),\n\t\t\t\t\t\tArchitecture:    \"x86_64\",\n\t\t\t\t\t\tTags: []ec2types.Tag{\n\t\t\t\t\t\t\t{Key: aws.String(\"Name\"), Value: aws.String(\"test-ami-1\")},\n\t\t\t\t\t\t\t{Key: aws.String(\"foo\"), Value: aws.String(\"bar\")},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tState: ec2types.ImageStateAvailable,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t})\n\t\t\tamis, err := awsEnv.AMIProvider.List(ctx, nodeClass)\n\t\t\tExpect(err).ToNot(HaveOccurred())\n\t\t\tExpect(amis).To(HaveLen(1))\n\t\t\tExpect(amis).To(ConsistOf(amifamily.AMI{\n\t\t\t\tName:         \"test-ami-1\",\n\t\t\t\tAmiID:        \"ami-1234\",\n\t\t\t\tCreationDate: \"2021-08-31T00:12:42.000Z\",\n\t\t\t\tDeprecated:   false,\n\t\t\t\tRequirements: scheduling.NewRequirements(\n\t\t\t\t\tscheduling.NewRequirement(corev1.LabelArchStable, corev1.NodeSelectorOpIn, karpv1.ArchitectureAmd64),\n\t\t\t\t),\n\t\t\t}))\n\t\t})\n\t\tIt(\"should prioritize the newer ami if both are deprecated\", func() {\n\t\t\t//Both amis are deprecated and have the same deprecation time\n\t\t\tawsEnv.EC2API.DescribeImagesOutput.Set(&ec2.DescribeImagesOutput{\n\t\t\t\tImages: []ec2types.Image{\n\t\t\t\t\t{\n\t\t\t\t\t\tName:            aws.String(amd64AMI),\n\t\t\t\t\t\tImageId:         aws.String(\"ami-5678\"),\n\t\t\t\t\t\tCreationDate:    aws.String(\"2021-08-31T00:12:42.000Z\"),\n\t\t\t\t\t\tDeprecationTime: aws.String(awsEnv.Clock.Now().Add(-1 * time.Hour).Format(time.RFC3339)),\n\t\t\t\t\t\tArchitecture:    \"x86_64\",\n\t\t\t\t\t\tTags: []ec2types.Tag{\n\t\t\t\t\t\t\t{Key: aws.String(\"Name\"), Value: aws.String(amd64AMI)},\n\t\t\t\t\t\t\t{Key: aws.String(\"foo\"), Value: aws.String(\"bar\")},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tState: ec2types.ImageStateAvailable,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tName:            aws.String(amd64AMI),\n\t\t\t\t\t\tImageId:         aws.String(\"ami-1234\"),\n\t\t\t\t\t\tCreationDate:    aws.String(\"2020-08-31T00:08:42.000Z\"),\n\t\t\t\t\t\tDeprecationTime: aws.String(awsEnv.Clock.Now().Add(-1 * time.Hour).Format(time.RFC3339)),\n\t\t\t\t\t\tArchitecture:    \"x86_64\",\n\t\t\t\t\t\tTags: []ec2types.Tag{\n\t\t\t\t\t\t\t{Key: aws.String(\"Name\"), Value: aws.String(amd64AMI)},\n\t\t\t\t\t\t\t{Key: aws.String(\"foo\"), Value: aws.String(\"bar\")},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tState: ec2types.ImageStateAvailable,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t})\n\t\t\tamis, err := awsEnv.AMIProvider.List(ctx, nodeClass)\n\t\t\tExpect(err).ToNot(HaveOccurred())\n\t\t\tExpect(amis).To(HaveLen(1))\n\t\t\tExpect(amis).To(ConsistOf(amifamily.AMI{\n\t\t\t\tName:         amd64AMI,\n\t\t\t\tAmiID:        \"ami-5678\",\n\t\t\t\tCreationDate: \"2021-08-31T00:12:42.000Z\",\n\t\t\t\tDeprecated:   true,\n\t\t\t\tRequirements: scheduling.NewRequirements(\n\t\t\t\t\tscheduling.NewRequirement(corev1.LabelArchStable, corev1.NodeSelectorOpIn, karpv1.ArchitectureAmd64),\n\t\t\t\t),\n\t\t\t}))\n\t\t})\n\t})\n\tContext(\"Provider Cache\", func() {\n\t\tIt(\"should resolve AMIs from cache that are filtered by id\", func() {\n\t\t\tawsEnv.EC2API.DescribeImagesOutput.Set(&ec2.DescribeImagesOutput{Images: []ec2types.Image{\n\t\t\t\t{\n\t\t\t\t\tName:         aws.String(coretest.RandomName()),\n\t\t\t\t\tImageId:      aws.String(\"ami-123\"),\n\t\t\t\t\tArchitecture: \"x86_64\",\n\t\t\t\t\tTags:         []ec2types.Tag{{Key: lo.ToPtr(\"test\"), Value: lo.ToPtr(\"test\")}},\n\t\t\t\t\tCreationDate: aws.String(\"2022-08-15T12:00:00Z\"),\n\t\t\t\t\tState:        ec2types.ImageStateAvailable,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tName:         aws.String(coretest.RandomName()),\n\t\t\t\t\tImageId:      aws.String(\"ami-456\"),\n\t\t\t\t\tArchitecture: \"arm64\",\n\t\t\t\t\tTags:         []ec2types.Tag{{Key: lo.ToPtr(\"test\"), Value: lo.ToPtr(\"test\")}},\n\t\t\t\t\tCreationDate: aws.String(\"2022-08-15T12:00:00Z\"),\n\t\t\t\t\tState:        ec2types.ImageStateAvailable,\n\t\t\t\t},\n\t\t\t}})\n\t\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{\n\t\t\t\t{\n\t\t\t\t\tID: \"ami-123\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tID: \"ami-456\",\n\t\t\t\t},\n\t\t\t}\n\t\t\t_, err := awsEnv.AMIProvider.List(ctx, nodeClass)\n\t\t\tExpect(err).To(BeNil())\n\n\t\t\tExpect(awsEnv.AMICache.Items()).To(HaveLen(1))\n\t\t\tcachedImages := lo.Values(awsEnv.AMICache.Items())[0].Object.(amifamily.AMIs)\n\t\t\tExpect(cachedImages).To(ContainElements(\n\t\t\t\tgstruct.MatchFields(gstruct.IgnoreExtras, gstruct.Fields{\n\t\t\t\t\t\"AmiID\": Equal(\"ami-123\"),\n\t\t\t\t}),\n\t\t\t\tgstruct.MatchFields(gstruct.IgnoreExtras, gstruct.Fields{\n\t\t\t\t\t\"AmiID\": Equal(\"ami-456\"),\n\t\t\t\t}),\n\t\t\t))\n\t\t})\n\t\tIt(\"should resolve AMIs from cache that are filtered by name\", func() {\n\t\t\tawsEnv.EC2API.DescribeImagesOutput.Set(&ec2.DescribeImagesOutput{Images: []ec2types.Image{\n\t\t\t\t{\n\t\t\t\t\tName:         aws.String(\"ami-name-1\"),\n\t\t\t\t\tImageId:      aws.String(\"ami-123\"),\n\t\t\t\t\tArchitecture: \"x86_64\",\n\t\t\t\t\tTags:         []ec2types.Tag{{Key: lo.ToPtr(\"test\"), Value: lo.ToPtr(\"test\")}},\n\t\t\t\t\tCreationDate: aws.String(\"2022-08-15T12:00:00Z\"),\n\t\t\t\t\tState:        ec2types.ImageStateAvailable,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tName:         aws.String(\"ami-name-2\"),\n\t\t\t\t\tImageId:      aws.String(\"ami-456\"),\n\t\t\t\t\tArchitecture: \"arm64\",\n\t\t\t\t\tTags:         []ec2types.Tag{{Key: lo.ToPtr(\"test\"), Value: lo.ToPtr(\"test\")}},\n\t\t\t\t\tCreationDate: aws.String(\"2022-08-15T12:00:00Z\"),\n\t\t\t\t\tState:        ec2types.ImageStateAvailable,\n\t\t\t\t},\n\t\t\t}})\n\t\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{\n\t\t\t\t{\n\t\t\t\t\tName: \"ami-name-1\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tName: \"ami-name-2\",\n\t\t\t\t},\n\t\t\t}\n\t\t\t_, err := awsEnv.AMIProvider.List(ctx, nodeClass)\n\t\t\tExpect(err).To(BeNil())\n\n\t\t\tExpect(awsEnv.AMICache.Items()).To(HaveLen(1))\n\t\t\tcachedImages := lo.Values(awsEnv.AMICache.Items())[0].Object.(amifamily.AMIs)\n\t\t\tExpect(cachedImages).To(ContainElements(\n\t\t\t\tgstruct.MatchFields(gstruct.IgnoreExtras, gstruct.Fields{\n\t\t\t\t\t\"Name\": Equal(\"ami-name-1\"),\n\t\t\t\t}),\n\t\t\t\tgstruct.MatchFields(gstruct.IgnoreExtras, gstruct.Fields{\n\t\t\t\t\t\"Name\": Equal(\"ami-name-2\"),\n\t\t\t\t}),\n\t\t\t))\n\t\t})\n\t\tIt(\"should resolve AMIs from cache that are filtered by tags\", func() {\n\t\t\tawsEnv.EC2API.DescribeImagesOutput.Set(&ec2.DescribeImagesOutput{Images: []ec2types.Image{\n\t\t\t\t{\n\t\t\t\t\tName:         aws.String(\"ami-name-1\"),\n\t\t\t\t\tImageId:      aws.String(\"ami-123\"),\n\t\t\t\t\tArchitecture: \"x86_64\",\n\t\t\t\t\tTags:         []ec2types.Tag{{Key: lo.ToPtr(\"test\"), Value: lo.ToPtr(\"test\")}},\n\t\t\t\t\tCreationDate: aws.String(\"2022-08-15T12:00:00Z\"),\n\t\t\t\t\tState:        ec2types.ImageStateAvailable,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tName:         aws.String(\"ami-name-2\"),\n\t\t\t\t\tImageId:      aws.String(\"ami-456\"),\n\t\t\t\t\tArchitecture: \"arm64\",\n\t\t\t\t\tTags:         []ec2types.Tag{{Key: lo.ToPtr(\"test\"), Value: lo.ToPtr(\"test\")}},\n\t\t\t\t\tCreationDate: aws.String(\"2022-08-15T12:00:00Z\"),\n\t\t\t\t\tState:        ec2types.ImageStateAvailable,\n\t\t\t\t},\n\t\t\t}})\n\t\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{\n\t\t\t\t{\n\t\t\t\t\tTags: map[string]string{\"test\": \"test\"},\n\t\t\t\t},\n\t\t\t}\n\t\t\t_, err := awsEnv.AMIProvider.List(ctx, nodeClass)\n\t\t\tExpect(err).To(BeNil())\n\n\t\t\tExpect(awsEnv.AMICache.Items()).To(HaveLen(1))\n\t\t\tcachedImages := lo.Values(awsEnv.AMICache.Items())[0].Object.(amifamily.AMIs)\n\t\t\tExpect(cachedImages).To(ContainElements(\n\t\t\t\tgstruct.MatchFields(gstruct.IgnoreExtras, gstruct.Fields{\n\t\t\t\t\t\"Name\": Equal(\"ami-name-1\"),\n\t\t\t\t}),\n\t\t\t\tgstruct.MatchFields(gstruct.IgnoreExtras, gstruct.Fields{\n\t\t\t\t\t\"Name\": Equal(\"ami-name-2\"),\n\t\t\t\t}),\n\t\t\t))\n\t\t})\n\t\tIt(\"should correctly disambiguate AND vs OR semantics for tags\", func() {\n\t\t\t// AND semantics\n\t\t\tawsEnv.EC2API.DescribeImagesOutput.Set(&ec2.DescribeImagesOutput{Images: []ec2types.Image{\n\t\t\t\t{\n\t\t\t\t\tName:         aws.String(\"ami-name-3\"),\n\t\t\t\t\tImageId:      aws.String(\"ami-789\"),\n\t\t\t\t\tArchitecture: \"x86_64\",\n\t\t\t\t\tTags:         []ec2types.Tag{{Key: aws.String(\"tag-key-1\"), Value: aws.String(\"tag-value-1\")}, {Key: aws.String(\"tag-key-2\"), Value: aws.String(\"tag-value-2\")}},\n\t\t\t\t\tCreationDate: aws.String(\"2022-08-15T12:00:00Z\"),\n\t\t\t\t\tState:        ec2types.ImageStateAvailable,\n\t\t\t\t},\n\t\t\t}})\n\t\t\tnodeClass.Spec.AMIFamily = &v1.AMIFamilyAL2\n\t\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{\n\t\t\t\t{\n\t\t\t\t\tTags: map[string]string{\"tag-key-1\": \"tag-value-1\", \"tag-key-2\": \"tag-value-2\"},\n\t\t\t\t},\n\t\t\t}\n\t\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\t\tamis, err := awsEnv.AMIProvider.List(ctx, nodeClass)\n\t\t\tExpect(err).To(BeNil())\n\n\t\t\tExpect(amis).To(ContainElements(\n\t\t\t\tgstruct.MatchFields(gstruct.IgnoreExtras, gstruct.Fields{\n\t\t\t\t\t\"Name\": Equal(\"ami-name-3\"),\n\t\t\t\t}),\n\t\t\t))\n\n\t\t\t// OR semantics\n\t\t\tawsEnv.EC2API.DescribeImagesOutput.Set(&ec2.DescribeImagesOutput{Images: []ec2types.Image{\n\t\t\t\t{\n\t\t\t\t\tName:         aws.String(\"ami-name-1\"),\n\t\t\t\t\tImageId:      aws.String(\"ami-123\"),\n\t\t\t\t\tArchitecture: \"x86_64\",\n\t\t\t\t\tTags:         []ec2types.Tag{{Key: aws.String(\"tag-key-1\"), Value: aws.String(\"tag-value-1\")}},\n\t\t\t\t\tCreationDate: aws.String(\"2022-08-15T12:00:00Z\"),\n\t\t\t\t\tState:        ec2types.ImageStateAvailable,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tName:         aws.String(\"ami-name-2\"),\n\t\t\t\t\tImageId:      aws.String(\"ami-456\"),\n\t\t\t\t\tArchitecture: \"arm64\",\n\t\t\t\t\tTags:         []ec2types.Tag{{Key: aws.String(\"tag-key-2\"), Value: aws.String(\"tag-value-2\")}},\n\t\t\t\t\tCreationDate: aws.String(\"2022-08-15T12:00:00Z\"),\n\t\t\t\t\tState:        ec2types.ImageStateAvailable,\n\t\t\t\t},\n\t\t\t}})\n\t\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{\n\t\t\t\t{\n\t\t\t\t\tTags: map[string]string{\"tag-key-1\": \"tag-value-1\"},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tTags: map[string]string{\"tag-key-2\": \"tag-value-2\"},\n\t\t\t\t},\n\t\t\t}\n\t\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\t\tamis, err = awsEnv.AMIProvider.List(ctx, nodeClass)\n\t\t\tExpect(err).To(BeNil())\n\n\t\t\tExpect(amis).To(ContainElements(\n\t\t\t\tgstruct.MatchFields(gstruct.IgnoreExtras, gstruct.Fields{\n\t\t\t\t\t\"Name\": Equal(\"ami-name-1\"),\n\t\t\t\t}),\n\t\t\t\tgstruct.MatchFields(gstruct.IgnoreExtras, gstruct.Fields{\n\t\t\t\t\t\"Name\": Equal(\"ami-name-2\"),\n\t\t\t\t}),\n\t\t\t))\n\n\t\t\tcacheItems := awsEnv.AMICache.Items()\n\t\t\tExpect(cacheItems).To(HaveLen(2))\n\t\t\tcachedImages := make([]amifamily.AMIs, 0, len(cacheItems))\n\t\t\tfor _, item := range cacheItems {\n\t\t\t\tcachedImages = append(cachedImages, item.Object.(amifamily.AMIs))\n\t\t\t}\n\n\t\t\tExpect(cachedImages).To(ConsistOf(\n\t\t\t\tConsistOf(\n\t\t\t\t\tgstruct.MatchFields(gstruct.IgnoreExtras, gstruct.Fields{\n\t\t\t\t\t\t\"Name\": Equal(\"ami-name-3\"),\n\t\t\t\t\t}),\n\t\t\t\t),\n\t\t\t\tConsistOf(\n\t\t\t\t\tgstruct.MatchFields(gstruct.IgnoreExtras, gstruct.Fields{\n\t\t\t\t\t\t\"Name\": Equal(\"ami-name-1\"),\n\t\t\t\t\t}),\n\t\t\t\t\tgstruct.MatchFields(gstruct.IgnoreExtras, gstruct.Fields{\n\t\t\t\t\t\t\"Name\": Equal(\"ami-name-2\"),\n\t\t\t\t\t}),\n\t\t\t\t),\n\t\t\t))\n\t\t})\n\t})\n\tContext(\"AMI Selectors\", func() {\n\t\t// When you tag public or shared resources, the tags you assign are available only to your AWS account; no other AWS account will have access to those tags\n\t\t// https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html#tag-restrictions\n\t\tIt(\"should have empty owners and use tags when prefixes aren't set\", func() {\n\t\t\tqueries, err := awsEnv.AMIProvider.DescribeImageQueries(ctx, &v1.EC2NodeClass{\n\t\t\t\tSpec: v1.EC2NodeClassSpec{\n\t\t\t\t\tAMISelectorTerms: []v1.AMISelectorTerm{{\n\t\t\t\t\t\tTags: map[string]string{\n\t\t\t\t\t\t\t\"Name\": \"my-ami\",\n\t\t\t\t\t\t},\n\t\t\t\t\t}},\n\t\t\t\t},\n\t\t\t})\n\t\t\tExpect(err).To(BeNil())\n\t\t\tExpectConsistsOfAMIQueries([]amifamily.DescribeImageQuery{\n\t\t\t\t{\n\t\t\t\t\tFilters: []ec2types.Filter{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:   lo.ToPtr(\"tag:Name\"),\n\t\t\t\t\t\t\tValues: []string{\"my-ami\"},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tOwners: []string{},\n\t\t\t\t},\n\t\t\t}, queries)\n\t\t})\n\t\tIt(\"should have default owners and use name when prefixed\", func() {\n\t\t\tqueries, err := awsEnv.AMIProvider.DescribeImageQueries(ctx, &v1.EC2NodeClass{\n\t\t\t\tSpec: v1.EC2NodeClassSpec{\n\t\t\t\t\tAMISelectorTerms: []v1.AMISelectorTerm{{\n\t\t\t\t\t\tName: \"my-ami\",\n\t\t\t\t\t}},\n\t\t\t\t},\n\t\t\t})\n\t\t\tExpect(err).To(BeNil())\n\t\t\tExpectConsistsOfAMIQueries([]amifamily.DescribeImageQuery{\n\t\t\t\t{\n\t\t\t\t\tFilters: []ec2types.Filter{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:   lo.ToPtr(\"name\"),\n\t\t\t\t\t\t\tValues: []string{\"my-ami\"},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tOwners: []string{\n\t\t\t\t\t\t\"amazon\",\n\t\t\t\t\t\t\"self\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}, queries)\n\t\t})\n\t\tIt(\"should not set owners when legacy ids are passed\", func() {\n\t\t\tqueries, err := awsEnv.AMIProvider.DescribeImageQueries(ctx, &v1.EC2NodeClass{\n\t\t\t\tSpec: v1.EC2NodeClassSpec{\n\t\t\t\t\tAMISelectorTerms: []v1.AMISelectorTerm{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tID: \"ami-abcd1234\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tID: \"ami-cafeaced\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t})\n\t\t\tExpect(err).To(BeNil())\n\t\t\tExpectConsistsOfAMIQueries([]amifamily.DescribeImageQuery{\n\t\t\t\t{\n\t\t\t\t\tFilters: []ec2types.Filter{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:   lo.ToPtr(\"image-id\"),\n\t\t\t\t\t\t\tValues: []string{\"ami-abcd1234\", \"ami-cafeaced\"},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}, queries)\n\t\t})\n\t\tIt(\"should allow only specifying owners\", func() {\n\t\t\tqueries, err := awsEnv.AMIProvider.DescribeImageQueries(ctx, &v1.EC2NodeClass{\n\t\t\t\tSpec: v1.EC2NodeClassSpec{\n\t\t\t\t\tAMISelectorTerms: []v1.AMISelectorTerm{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tOwner: \"abcdef\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tOwner: \"123456789012\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t})\n\t\t\tExpect(err).To(BeNil())\n\t\t\tExpectConsistsOfAMIQueries([]amifamily.DescribeImageQuery{\n\t\t\t\t{\n\t\t\t\t\tOwners: []string{\"abcdef\"},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tOwners: []string{\"123456789012\"},\n\t\t\t\t},\n\t\t\t}, queries)\n\t\t})\n\t\tIt(\"should allow prefixed name and prefixed owners\", func() {\n\t\t\tqueries, err := awsEnv.AMIProvider.DescribeImageQueries(ctx, &v1.EC2NodeClass{\n\t\t\t\tSpec: v1.EC2NodeClassSpec{\n\t\t\t\t\tAMISelectorTerms: []v1.AMISelectorTerm{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:  \"my-name\",\n\t\t\t\t\t\t\tOwner: \"0123456789\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:  \"my-name\",\n\t\t\t\t\t\t\tOwner: \"self\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t})\n\t\t\tExpect(err).To(BeNil())\n\t\t\tExpectConsistsOfAMIQueries([]amifamily.DescribeImageQuery{\n\t\t\t\t{\n\t\t\t\t\tOwners: []string{\"0123456789\"},\n\t\t\t\t\tFilters: []ec2types.Filter{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:   lo.ToPtr(\"name\"),\n\t\t\t\t\t\t\tValues: []string{\"my-name\"},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tOwners: []string{\"self\"},\n\t\t\t\t\tFilters: []ec2types.Filter{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:   lo.ToPtr(\"name\"),\n\t\t\t\t\t\t\tValues: []string{\"my-name\"},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}, queries)\n\t\t})\n\t\tIt(\"should sort amis by creationDate\", func() {\n\t\t\tamis := amifamily.AMIs{\n\t\t\t\t{\n\t\t\t\t\tName:         \"test-ami-1\",\n\t\t\t\t\tAmiID:        \"test-ami-1-id\",\n\t\t\t\t\tCreationDate: \"2021-08-31T00:10:42.000Z\",\n\t\t\t\t\tRequirements: scheduling.NewRequirements(),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tName:         \"test-ami-2\",\n\t\t\t\t\tAmiID:        \"test-ami-2-id\",\n\t\t\t\t\tCreationDate: \"2021-08-31T00:12:42.000Z\",\n\t\t\t\t\tRequirements: scheduling.NewRequirements(),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tName:         \"test-ami-3\",\n\t\t\t\t\tAmiID:        \"test-ami-3-id\",\n\t\t\t\t\tCreationDate: \"2021-08-31T00:08:42.000Z\",\n\t\t\t\t\tRequirements: scheduling.NewRequirements(),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tName:         \"test-ami-4\",\n\t\t\t\t\tAmiID:        \"test-ami-4-id\",\n\t\t\t\t\tCreationDate: \"\",\n\t\t\t\t\tRequirements: scheduling.NewRequirements(),\n\t\t\t\t},\n\t\t\t}\n\t\t\tamis.Sort()\n\t\t\tExpect(amis).To(Equal(\n\t\t\t\tamifamily.AMIs{\n\t\t\t\t\t{\n\t\t\t\t\t\tName:         \"test-ami-2\",\n\t\t\t\t\t\tAmiID:        \"test-ami-2-id\",\n\t\t\t\t\t\tCreationDate: \"2021-08-31T00:12:42.000Z\",\n\t\t\t\t\t\tRequirements: scheduling.NewRequirements(),\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tName:         \"test-ami-1\",\n\t\t\t\t\t\tAmiID:        \"test-ami-1-id\",\n\t\t\t\t\t\tCreationDate: \"2021-08-31T00:10:42.000Z\",\n\t\t\t\t\t\tRequirements: scheduling.NewRequirements(),\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tName:         \"test-ami-3\",\n\t\t\t\t\t\tAmiID:        \"test-ami-3-id\",\n\t\t\t\t\t\tCreationDate: \"2021-08-31T00:08:42.000Z\",\n\t\t\t\t\t\tRequirements: scheduling.NewRequirements(),\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tName:         \"test-ami-4\",\n\t\t\t\t\t\tAmiID:        \"test-ami-4-id\",\n\t\t\t\t\t\tCreationDate: \"\",\n\t\t\t\t\t\tRequirements: scheduling.NewRequirements(),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t))\n\t\t})\n\t\tIt(\"should sort amis with the same name and creation date consistently\", func() {\n\t\t\tamis := amifamily.AMIs{\n\t\t\t\t{\n\t\t\t\t\tName:         \"test-ami-1\",\n\t\t\t\t\tAmiID:        \"test-ami-4-id\",\n\t\t\t\t\tCreationDate: \"2021-08-31T00:10:42.000Z\",\n\t\t\t\t\tRequirements: scheduling.NewRequirements(),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tName:         \"test-ami-1\",\n\t\t\t\t\tAmiID:        \"test-ami-3-id\",\n\t\t\t\t\tCreationDate: \"2021-08-31T00:10:42.000Z\",\n\t\t\t\t\tRequirements: scheduling.NewRequirements(),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tName:         \"test-ami-1\",\n\t\t\t\t\tAmiID:        \"test-ami-2-id\",\n\t\t\t\t\tCreationDate: \"2021-08-31T00:10:42.000Z\",\n\t\t\t\t\tRequirements: scheduling.NewRequirements(),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tName:         \"test-ami-1\",\n\t\t\t\t\tAmiID:        \"test-ami-1-id\",\n\t\t\t\t\tCreationDate: \"2021-08-31T00:10:42.000Z\",\n\t\t\t\t\tRequirements: scheduling.NewRequirements(),\n\t\t\t\t},\n\t\t\t}\n\n\t\t\tamis.Sort()\n\t\t\tExpect(amis).To(Equal(\n\t\t\t\tamifamily.AMIs{\n\t\t\t\t\t{\n\t\t\t\t\t\tName:         \"test-ami-1\",\n\t\t\t\t\t\tAmiID:        \"test-ami-1-id\",\n\t\t\t\t\t\tCreationDate: \"2021-08-31T00:10:42.000Z\",\n\t\t\t\t\t\tRequirements: scheduling.NewRequirements(),\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tName:         \"test-ami-1\",\n\t\t\t\t\t\tAmiID:        \"test-ami-2-id\",\n\t\t\t\t\t\tCreationDate: \"2021-08-31T00:10:42.000Z\",\n\t\t\t\t\t\tRequirements: scheduling.NewRequirements(),\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tName:         \"test-ami-1\",\n\t\t\t\t\t\tAmiID:        \"test-ami-3-id\",\n\t\t\t\t\t\tCreationDate: \"2021-08-31T00:10:42.000Z\",\n\t\t\t\t\t\tRequirements: scheduling.NewRequirements(),\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tName:         \"test-ami-1\",\n\t\t\t\t\t\tAmiID:        \"test-ami-4-id\",\n\t\t\t\t\t\tCreationDate: \"2021-08-31T00:10:42.000Z\",\n\t\t\t\t\t\tRequirements: scheduling.NewRequirements(),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t))\n\t\t})\n\t\tIt(\"should sort deprecated amis with the same name and deprecation time consistently\", func() {\n\t\t\tamis := amifamily.AMIs{\n\t\t\t\t{\n\t\t\t\t\tName:         \"test-ami-1\",\n\t\t\t\t\tAmiID:        \"test-ami-4-id\",\n\t\t\t\t\tCreationDate: \"2021-08-31T00:10:42.000Z\",\n\t\t\t\t\tDeprecated:   true,\n\t\t\t\t\tRequirements: scheduling.NewRequirements(),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tName:         \"test-ami-1\",\n\t\t\t\t\tAmiID:        \"test-ami-3-id\",\n\t\t\t\t\tCreationDate: \"2021-08-31T00:10:42.000Z\",\n\t\t\t\t\tDeprecated:   true,\n\t\t\t\t\tRequirements: scheduling.NewRequirements(),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tName:         \"test-ami-1\",\n\t\t\t\t\tAmiID:        \"test-ami-2-id\",\n\t\t\t\t\tCreationDate: \"2021-08-31T00:10:42.000Z\",\n\t\t\t\t\tDeprecated:   true,\n\t\t\t\t\tRequirements: scheduling.NewRequirements(),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tName:         \"test-ami-1\",\n\t\t\t\t\tAmiID:        \"test-ami-1-id\",\n\t\t\t\t\tCreationDate: \"2021-08-31T00:10:42.000Z\",\n\t\t\t\t\tDeprecated:   true,\n\t\t\t\t\tRequirements: scheduling.NewRequirements(),\n\t\t\t\t},\n\t\t\t}\n\n\t\t\tamis.Sort()\n\t\t\tExpect(amis).To(Equal(\n\t\t\t\tamifamily.AMIs{\n\t\t\t\t\t{\n\t\t\t\t\t\tName:         \"test-ami-1\",\n\t\t\t\t\t\tAmiID:        \"test-ami-1-id\",\n\t\t\t\t\t\tCreationDate: \"2021-08-31T00:10:42.000Z\",\n\t\t\t\t\t\tDeprecated:   true,\n\t\t\t\t\t\tRequirements: scheduling.NewRequirements(),\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tName:         \"test-ami-1\",\n\t\t\t\t\t\tAmiID:        \"test-ami-2-id\",\n\t\t\t\t\t\tCreationDate: \"2021-08-31T00:10:42.000Z\",\n\t\t\t\t\t\tDeprecated:   true,\n\t\t\t\t\t\tRequirements: scheduling.NewRequirements(),\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tName:         \"test-ami-1\",\n\t\t\t\t\t\tAmiID:        \"test-ami-3-id\",\n\t\t\t\t\t\tCreationDate: \"2021-08-31T00:10:42.000Z\",\n\t\t\t\t\t\tDeprecated:   true,\n\t\t\t\t\t\tRequirements: scheduling.NewRequirements(),\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tName:         \"test-ami-1\",\n\t\t\t\t\t\tAmiID:        \"test-ami-4-id\",\n\t\t\t\t\t\tCreationDate: \"2021-08-31T00:10:42.000Z\",\n\t\t\t\t\t\tDeprecated:   true,\n\t\t\t\t\t\tRequirements: scheduling.NewRequirements(),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t))\n\t\t})\n\t\tIt(\"should succeed to resolve AMIs that use an SSM parameter\", func() {\n\t\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{\n\t\t\t\tSSMParameter: fmt.Sprintf(\"/aws/service/eks/optimized-ami/%s/amazon-linux-2/recommended/image_id\", k8sVersion),\n\t\t\t}}\n\t\t\tawsEnv.SSMAPI.Parameters = map[string]string{\n\t\t\t\tfmt.Sprintf(\"/aws/service/eks/optimized-ami/%s/amazon-linux-2/recommended/image_id\", k8sVersion): amd64AMI,\n\t\t\t}\n\t\t\tamis, err := awsEnv.AMIProvider.List(ctx, nodeClass)\n\t\t\tExpect(err).ToNot(HaveOccurred())\n\t\t\tExpect(amis).To(HaveLen(1))\n\t\t\tExpect(amis[0].AmiID).To(Equal(\"ami-id-amd64\"))\n\t\t\tExpect(amis[0].Name).To(Equal(amd64AMI))\n\t\t})\n\t\tIt(\"should succeed to resolve AMIs that use a custom SSM parameter\", func() {\n\t\t\tcustomParameter := \"/my/custom/ami/parameter\"\n\t\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{\n\t\t\t\tSSMParameter: customParameter,\n\t\t\t}}\n\t\t\tawsEnv.SSMAPI.Parameters = map[string]string{\n\t\t\t\tcustomParameter: amd64AMI,\n\t\t\t}\n\t\t\tamis, err := awsEnv.AMIProvider.List(ctx, nodeClass)\n\t\t\tExpect(err).ToNot(HaveOccurred())\n\t\t\tExpect(amis).To(HaveLen(1))\n\t\t\tExpect(amis[0].AmiID).To(Equal(\"ami-id-amd64\"))\n\t\t\tExpect(amis[0].Name).To(Equal(amd64AMI))\n\t\t})\n\t\tIt(\"should not throw an error if SSM parameter is not found\", func() {\n\t\t\tcustomParameter := \"/my/custom/ami/parameter\"\n\t\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{\n\t\t\t\tSSMParameter: customParameter,\n\t\t\t}}\n\t\t\tamis, err := awsEnv.AMIProvider.List(ctx, nodeClass)\n\t\t\tExpect(err).ToNot(HaveOccurred())\n\t\t\tExpect(amis).To(HaveLen(0))\n\t\t})\n\t\tIt(\"should throw an error if SSM parameter returns a different error\", func() {\n\t\t\tcustomParameter := \"/my/custom/ami/parameter\"\n\t\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{\n\t\t\t\tSSMParameter: customParameter,\n\t\t\t}}\n\t\t\tawsEnv.SSMAPI.WantErr = fmt.Errorf(\"some error\")\n\t\t\tamis, err := awsEnv.AMIProvider.List(ctx, nodeClass)\n\t\t\tExpect(err).To(HaveOccurred())\n\t\t\tExpect(amis).To(HaveLen(0))\n\t\t})\n\t})\n})\n\nvar _ = Describe(\"AMIResolver\", func() {\n\tBeforeEach(func() {\n\t\tnodeClass = test.EC2NodeClass()\n\t\tnodePool = coretest.NodePool(karpv1.NodePool{\n\t\t\tSpec: karpv1.NodePoolSpec{\n\t\t\t\tTemplate: karpv1.NodeClaimTemplate{\n\t\t\t\t\tSpec: karpv1.NodeClaimTemplateSpec{\n\t\t\t\t\t\tNodeClassRef: &karpv1.NodeClassReference{\n\t\t\t\t\t\t\tGroup: object.GVK(nodeClass).Group,\n\t\t\t\t\t\t\tKind:  object.GVK(nodeClass).Kind,\n\t\t\t\t\t\t\tName:  nodeClass.Name,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tnodeClaim = coretest.NodeClaim(karpv1.NodeClaim{\n\t\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\t\tLabels: map[string]string{\n\t\t\t\t\tkarpv1.NodePoolLabelKey: nodePool.Name,\n\t\t\t\t},\n\t\t\t},\n\t\t\tSpec: karpv1.NodeClaimSpec{\n\t\t\t\tNodeClassRef: &karpv1.NodeClassReference{\n\t\t\t\t\tGroup: object.GVK(nodeClass).Group,\n\t\t\t\t\tKind:  object.GVK(nodeClass).Kind,\n\t\t\t\t\tName:  nodeClass.Name,\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tinstanceTypes = []*corecloudprovider.InstanceType{\n\t\t\tcorecloudfake.NewInstanceType(corecloudfake.InstanceTypeOptions{Name: \"t3.medium\"}),\n\t\t\tcorecloudfake.NewInstanceType(corecloudfake.InstanceTypeOptions{Name: \"m5.large\"}),\n\t\t}\n\t})\n\tDescribeTable(\n\t\t\"should set launch template metadata options correctly per region\",\n\t\tfunc(region string, expect *string) {\n\t\t\tamiResolver := amifamily.NewDefaultResolver(region)\n\t\t\tlaunchTemplates, err := amiResolver.Resolve(nodeClass, nodeClaim, instanceTypes, karpv1.CapacityTypeOnDemand, string(ec2types.TenancyDefault), &amifamily.Options{ClusterName: \"test\"})\n\t\t\tExpect(err).ToNot(HaveOccurred())\n\t\t\tExpect(launchTemplates).To(HaveLen(1))\n\t\t\tlo.ForEach(launchTemplates, func(launchTemplate *amifamily.LaunchTemplate, _ int) {\n\t\t\t\tExpect(launchTemplate.MetadataOptions.HTTPProtocolIPv6).To(Equal(expect))\n\t\t\t})\n\t\t},\n\t\tEntry(\"should be disabled for supported regions\", fake.DefaultRegion, lo.ToPtr(\"disabled\")),\n\t\tEntry(\"should be nil for iso\", \"us-iso-east-1\", nil),\n\t\tEntry(\"should be nil for isob\", \"us-isob-east-1\", nil),\n\t\tEntry(\"should be nil for isof\", \"us-isof-south-1\", nil),\n\t)\n})\n\nfunc ExpectConsistsOfAMIQueries(expected, actual []amifamily.DescribeImageQuery) {\n\tGinkgoHelper()\n\tExpect(actual).To(HaveLen(len(expected)))\n\n\tfor _, list := range [][]amifamily.DescribeImageQuery{expected, actual} {\n\t\tfor _, elem := range list {\n\t\t\tfor _, f := range elem.Filters {\n\t\t\t\tsort.Slice(f.Values, func(i, j int) bool {\n\t\t\t\t\treturn f.Values[i] < f.Values[j]\n\t\t\t\t})\n\t\t\t}\n\t\t\tsort.Slice(elem.Owners, func(i, j int) bool { return elem.Owners[i] < elem.Owners[j] })\n\t\t\tsort.Slice(elem.Filters, func(i, j int) bool {\n\t\t\t\treturn lo.FromPtr(elem.Filters[i].Name) < lo.FromPtr(elem.Filters[j].Name)\n\t\t\t})\n\t\t}\n\t}\n\tExpect(actual).To(ConsistOf(lo.Map(expected, func(q amifamily.DescribeImageQuery, _ int) any { return q })...))\n}\n"
  },
  {
    "path": "pkg/providers/amifamily/types.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage amifamily\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"math\"\n\t\"sort\"\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go-v2/aws\"\n\t\"github.com/aws/aws-sdk-go-v2/service/ec2\"\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\t\"github.com/awslabs/operatorpkg/serrors\"\n\t\"github.com/samber/lo\"\n\tcorev1 \"k8s.io/api/core/v1\"\n\t\"k8s.io/apimachinery/pkg/util/sets\"\n\t\"sigs.k8s.io/karpenter/pkg/scheduling\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n)\n\ntype AMI struct {\n\tName         string\n\tAmiID        string\n\tCreationDate string\n\tDeprecated   bool\n\tRequirements scheduling.Requirements\n}\n\ntype AMIs []AMI\n\n// Sort orders the AMIs by creation date in descending order.\n// If creation date is nil or two AMIs have the same creation date, the AMIs will be sorted by ID, which is guaranteed to be unique, in ascending order.\nfunc (a AMIs) Sort() {\n\tsort.Slice(a, func(i, j int) bool {\n\t\titime := parseTimeWithDefault(a[i].CreationDate, minTime)\n\t\tjtime := parseTimeWithDefault(a[j].CreationDate, minTime)\n\n\t\tif itime.Unix() != jtime.Unix() {\n\t\t\treturn itime.Unix() > jtime.Unix()\n\t\t}\n\t\treturn a[i].AmiID < a[j].AmiID\n\t})\n}\n\nfunc parseTimeWithDefault(dateStr string, defaultTime time.Time) time.Time {\n\tif dateStr == \"\" {\n\t\treturn defaultTime\n\t}\n\treturn lo.Must(time.Parse(time.RFC3339, dateStr))\n}\n\ntype Variant string\n\nvar (\n\tVariantStandard Variant   = \"standard\"\n\tVariantNvidia   Variant   = \"nvidia\"\n\tVariantNeuron   Variant   = \"neuron\"\n\tmaxTime         time.Time = time.Unix(math.MaxInt64, 0)\n\tminTime         time.Time = time.Unix(math.MinInt64, 0)\n)\n\nfunc NewVariant(v string) (Variant, error) {\n\tvar wellKnownVariants = sets.New(VariantStandard, VariantNvidia, VariantNeuron)\n\tvariant := Variant(v)\n\tif !wellKnownVariants.Has(variant) {\n\t\treturn variant, serrors.Wrap(fmt.Errorf(\"variant is not well-known\"), \"variant\", variant)\n\t}\n\treturn variant, nil\n}\n\nfunc (v Variant) Requirements() scheduling.Requirements {\n\tswitch v {\n\tcase VariantStandard:\n\t\treturn scheduling.NewRequirements(\n\t\t\tscheduling.NewRequirement(v1.LabelInstanceAcceleratorCount, corev1.NodeSelectorOpDoesNotExist),\n\t\t\tscheduling.NewRequirement(v1.LabelInstanceGPUCount, corev1.NodeSelectorOpDoesNotExist),\n\t\t)\n\tcase VariantNvidia:\n\t\treturn scheduling.NewRequirements(scheduling.NewRequirement(v1.LabelInstanceGPUCount, corev1.NodeSelectorOpExists))\n\tcase VariantNeuron:\n\t\treturn scheduling.NewRequirements(scheduling.NewRequirement(v1.LabelInstanceAcceleratorCount, corev1.NodeSelectorOpExists))\n\t}\n\treturn nil\n}\n\ntype DescribeImageQuery struct {\n\tFilters []ec2types.Filter\n\tOwners  []string\n\t// KnownRequirements is a map from image IDs to a set of known requirements.\n\t// When discovering image IDs via SSM we know additional requirements which aren't surfaced by ec2:DescribeImage (e.g. GPU / Neuron compatibility)\n\t// Sometimes, an image may have multiple sets of known requirements. For example, the AL2 GPU AMI is compatible with both Neuron and Nvidia GPU\n\t// instances, which means we need a set of requirements for either instance type.\n\tKnownRequirements map[string][]scheduling.Requirements\n}\n\nfunc (q DescribeImageQuery) DescribeImagesInput() *ec2.DescribeImagesInput {\n\treturn &ec2.DescribeImagesInput{\n\t\tFilters: append(q.Filters, ec2types.Filter{\n\t\t\tName:   lo.ToPtr(\"state\"),\n\t\t\tValues: []string{string(ec2types.ImageStateAvailable)},\n\t\t}),\n\t\tOwners:            lo.Ternary(len(q.Owners) > 0, q.Owners, nil),\n\t\tIncludeDeprecated: aws.Bool(true),\n\t\tMaxResults:        aws.Int32(1000),\n\t}\n}\n\nfunc (q DescribeImageQuery) RequirementsForImageWithArchitecture(image string, arch string) []scheduling.Requirements {\n\tif knownRequirements, ok := q.KnownRequirements[image]; ok {\n\t\treturn lo.Map(knownRequirements, func(r scheduling.Requirements, _ int) scheduling.Requirements {\n\t\t\tr.Add(scheduling.NewRequirement(corev1.LabelArchStable, corev1.NodeSelectorOpIn, arch))\n\t\t\treturn r\n\t\t})\n\t}\n\treturn []scheduling.Requirements{scheduling.NewRequirements(scheduling.NewRequirement(corev1.LabelArchStable, corev1.NodeSelectorOpIn, arch))}\n}\n\ntype AL2DeprecationError struct {\n\terror\n}\n\nfunc IsAl2DeprecationError(err error) bool {\n\tif err == nil {\n\t\treturn false\n\t}\n\tvar al2Err *AL2DeprecationError\n\treturn errors.As(err, &al2Err)\n}\n\ntype WS2025UnsupportedVersionError struct {\n\terror\n}\n\nfunc IsWS2025UnsupportedVersionError(err error) bool {\n\tif err == nil {\n\t\treturn false\n\t}\n\tvar ws2025Err *WS2025UnsupportedVersionError\n\treturn errors.As(err, &ws2025Err)\n}\n"
  },
  {
    "path": "pkg/providers/amifamily/windows.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage amifamily\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\n\t\"github.com/awslabs/operatorpkg/serrors\"\n\t\"sigs.k8s.io/karpenter/pkg/scheduling\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\n\t\"github.com/samber/lo\"\n\t\"k8s.io/apimachinery/pkg/api/resource\"\n\n\t\"github.com/aws/aws-sdk-go-v2/aws\"\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/amifamily/bootstrap\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/ssm\"\n\n\tcorev1 \"k8s.io/api/core/v1\"\n\n\t\"sigs.k8s.io/karpenter/pkg/cloudprovider\"\n)\n\ntype Windows struct {\n\tDefaultFamily\n\t*Options\n\t// Version is the major version of Windows Server (2019 or 2022 or 2025).\n\t// Only the core version of each version is supported by Karpenter, so this field only indicates the year.\n\tVersion string\n\t// Build is a specific build code associated with the Version\n\tBuild string\n}\n\nfunc (w Windows) DescribeImageQuery(ctx context.Context, ssmProvider ssm.Provider, k8sVersion string, amiVersion string) (DescribeImageQuery, error) {\n\timageID, err := ssmProvider.Get(ctx, ssm.Parameter{\n\t\tName:      fmt.Sprintf(\"/aws/service/ami-windows-latest/Windows_Server-%s-English-%s-EKS_Optimized-%s/image_id\", w.Version, v1.WindowsCore, k8sVersion),\n\t\tIsMutable: true,\n\t})\n\tif err != nil {\n\t\treturn DescribeImageQuery{}, serrors.Wrap(fmt.Errorf(\"failed to discover any AMIs for alias\"), \"alias\", fmt.Sprintf(\"windows%s@%s\", w.Version, amiVersion))\n\t}\n\treturn DescribeImageQuery{\n\t\tFilters: []ec2types.Filter{{\n\t\t\tName:   lo.ToPtr(\"image-id\"),\n\t\t\tValues: []string{imageID},\n\t\t}},\n\t\tKnownRequirements: map[string][]scheduling.Requirements{\n\t\t\timageID: {scheduling.NewRequirements(\n\t\t\t\tscheduling.NewRequirement(corev1.LabelOSStable, corev1.NodeSelectorOpIn, string(corev1.Windows)),\n\t\t\t\tscheduling.NewRequirement(corev1.LabelWindowsBuild, corev1.NodeSelectorOpIn, w.Build),\n\t\t\t)},\n\t\t},\n\t}, nil\n}\n\n// UserData returns the default userdata script for the AMI Family\nfunc (w Windows) UserData(kubeletConfig *v1.KubeletConfiguration, taints []corev1.Taint, labels map[string]string, caBundle *string, _ []*cloudprovider.InstanceType, customUserData *string, _ *v1.InstanceStorePolicy) bootstrap.Bootstrapper {\n\treturn bootstrap.Windows{\n\t\tOptions: bootstrap.Options{\n\t\t\tClusterName:     w.ClusterName,\n\t\t\tClusterEndpoint: w.ClusterEndpoint,\n\t\t\tKubeletConfig:   kubeletConfig,\n\t\t\tTaints:          taints,\n\t\t\tLabels:          labels,\n\t\t\tCABundle:        caBundle,\n\t\t\tCustomUserData:  customUserData,\n\t\t},\n\t}\n}\n\n// DefaultBlockDeviceMappings returns the default block device mappings for the AMI Family\nfunc (w Windows) DefaultBlockDeviceMappings() []*v1.BlockDeviceMapping {\n\tsda1EBS := DefaultEBS\n\tsda1EBS.VolumeSize = lo.ToPtr(resource.MustParse(\"50Gi\"))\n\treturn []*v1.BlockDeviceMapping{{\n\t\tDeviceName: w.EphemeralBlockDevice(),\n\t\tEBS:        &sda1EBS,\n\t}}\n}\n\nfunc (w Windows) EphemeralBlockDevice() *string {\n\treturn aws.String(\"/dev/sda1\")\n}\n\nfunc (w Windows) FeatureFlags() FeatureFlags {\n\treturn FeatureFlags{\n\t\tUsesENILimitedMemoryOverhead: false,\n\t\tPodsPerCoreEnabled:           true,\n\t\tEvictionSoftEnabled:          true,\n\t\tSupportsENILimitedPodDensity: false,\n\t}\n}\n"
  },
  {
    "path": "pkg/providers/capacityreservation/provider.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage capacityreservation\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"sync\"\n\n\t\"github.com/aws/aws-sdk-go-v2/service/ec2\"\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\t\"github.com/patrickmn/go-cache\"\n\t\"github.com/samber/lo\"\n\t\"k8s.io/utils/clock\"\n\t\"sigs.k8s.io/karpenter/pkg/utils/pretty\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\tsdk \"github.com/aws/karpenter-provider-aws/pkg/aws\"\n\tawserrors \"github.com/aws/karpenter-provider-aws/pkg/errors\"\n)\n\ntype Provider interface {\n\tList(context.Context, ...v1.CapacityReservationSelectorTerm) ([]*ec2types.CapacityReservation, error)\n\tGetAvailableInstanceCount(string) int\n\tMarkLaunched(string)\n\tMarkTerminated(string)\n\tMarkUnavailable(...string)\n}\n\ntype DefaultProvider struct {\n\tavailabilityCache\n\tsync.Mutex\n\n\tec2api           sdk.EC2API\n\tclk              clock.Clock\n\treservationCache *cache.Cache\n\tcm               *pretty.ChangeMonitor\n}\n\nfunc NewProvider(\n\tec2api sdk.EC2API,\n\tclk clock.Clock,\n\treservationCache, reservationAvailabilityCache *cache.Cache,\n) *DefaultProvider {\n\treturn &DefaultProvider{\n\t\tavailabilityCache: availabilityCache{\n\t\t\tcache: reservationAvailabilityCache,\n\t\t\tclk:   clk,\n\t\t},\n\t\tec2api:           ec2api,\n\t\tclk:              clk,\n\t\treservationCache: reservationCache,\n\t\tcm:               pretty.NewChangeMonitor(),\n\t}\n}\n\nfunc (p *DefaultProvider) List(ctx context.Context, selectorTerms ...v1.CapacityReservationSelectorTerm) ([]*ec2types.CapacityReservation, error) {\n\t// Take a write lock over the entire List operation to ensure minimize duplicate DescribeCapacityReservation calls\n\tp.Lock()\n\tdefer p.Unlock()\n\n\tvar reservations []*ec2types.CapacityReservation\n\tqueries := QueriesFromSelectorTerms(selectorTerms...)\n\treservations, queries = p.resolveCachedQueries(queries...)\n\tif len(queries) == 0 {\n\t\treturn p.filterReservations(reservations), nil\n\t}\n\tfor _, q := range queries {\n\t\tpaginator := ec2.NewDescribeCapacityReservationsPaginator(p.ec2api, q.DescribeCapacityReservationsInput())\n\t\tvar queryReservations []*ec2types.CapacityReservation\n\t\tfor paginator.HasMorePages() {\n\t\t\tout, err := paginator.NextPage(ctx)\n\t\t\tif err != nil {\n\t\t\t\tif awserrors.IsNotFound(err) {\n\t\t\t\t\t// Note: we only receive this error when requesting a single ID, in which case we will only ever get a single page.\n\t\t\t\t\t// Replacing this with a continue will result in an infinite loop as HasMorePages will always return true.\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\treturn nil, fmt.Errorf(\"listing capacity reservations, %w\", err)\n\t\t\t}\n\t\t\tqueryReservations = append(queryReservations, lo.ToSlicePtr(out.CapacityReservations)...)\n\t\t}\n\t\tp.syncAvailability(lo.SliceToMap(queryReservations, func(r *ec2types.CapacityReservation) (string, int) {\n\t\t\treturn *r.CapacityReservationId, int(*r.AvailableInstanceCount)\n\t\t}))\n\t\tp.reservationCache.SetDefault(q.CacheKey(), queryReservations)\n\t\treservations = append(reservations, queryReservations...)\n\t}\n\treturn p.filterReservations(reservations), nil\n}\n\nfunc (p *DefaultProvider) resolveCachedQueries(queries ...*Query) (reservations []*ec2types.CapacityReservation, remainingQueries []*Query) {\n\tfor _, q := range queries {\n\t\tif value, ok := p.reservationCache.Get(q.CacheKey()); ok {\n\t\t\treservations = append(reservations, value.([]*ec2types.CapacityReservation)...)\n\t\t} else {\n\t\t\tremainingQueries = append(remainingQueries, q)\n\t\t}\n\t}\n\treturn reservations, remainingQueries\n}\n\n// filterReservations removes duplicate and expired reservations\nfunc (p *DefaultProvider) filterReservations(reservations []*ec2types.CapacityReservation) []*ec2types.CapacityReservation {\n\treturn lo.Filter(lo.UniqBy(reservations, func(r *ec2types.CapacityReservation) string {\n\t\treturn *r.CapacityReservationId\n\t}), func(r *ec2types.CapacityReservation, _ int) bool {\n\t\tif r.EndDate == nil {\n\t\t\treturn true\n\t\t}\n\t\treturn r.EndDate.After(p.clk.Now())\n\t})\n}\n"
  },
  {
    "path": "pkg/providers/capacityreservation/suite_test.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage capacityreservation_test\n\nimport (\n\t\"context\"\n\t\"testing\"\n\n\t\"github.com/aws/aws-sdk-go-v2/service/ec2\"\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\t\"github.com/samber/lo\"\n\tcoreoptions \"sigs.k8s.io/karpenter/pkg/operator/options\"\n\tcoretest \"sigs.k8s.io/karpenter/pkg/test\"\n\n\t\"github.com/aws/karpenter-provider-aws/pkg/apis\"\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/operator/options\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/test\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/utils\"\n\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n\t\"sigs.k8s.io/karpenter/pkg/test/v1alpha1\"\n\t. \"sigs.k8s.io/karpenter/pkg/utils/testing\"\n)\n\nvar ctx context.Context\nvar env *coretest.Environment\nvar awsEnv *test.Environment\n\nfunc TestAPIs(t *testing.T) {\n\tctx = TestContextWithLogger(t)\n\tRegisterFailHandler(Fail)\n\tRunSpecs(t, \"EC2NodeClass\")\n}\n\nvar _ = BeforeSuite(func() {\n\tenv = coretest.NewEnvironment(\n\t\tcoretest.WithCRDs(test.DisableCapacityReservationIDValidation(test.RemoveNodeClassTagValidation(apis.CRDs))...),\n\t\tcoretest.WithCRDs(v1alpha1.CRDs...),\n\t)\n\tctx = coreoptions.ToContext(ctx, coretest.Options(coretest.OptionsFields{FeatureGates: coretest.FeatureGates{ReservedCapacity: lo.ToPtr(true)}}))\n\tctx = options.ToContext(ctx, test.Options())\n\tawsEnv = test.NewEnvironment(ctx, env)\n})\n\n// NOTE: Tests for different selector terms can be found in the nodeclass reconciler tests\nvar _ = Describe(\"Capacity Reservation Provider\", func() {\n\tvar discoveryTags map[string]string\n\tvar reservations map[string]int\n\n\tBeforeEach(func() {\n\t\tdiscoveryTags = map[string]string{\n\t\t\t\"karpenter.sh/discovery\": \"test\",\n\t\t}\n\t\tcrs := []ec2types.CapacityReservation{\n\t\t\t{\n\t\t\t\tAvailabilityZone:       lo.ToPtr(\"test-zone-1a\"),\n\t\t\t\tInstanceType:           lo.ToPtr(\"m5.large\"),\n\t\t\t\tOwnerId:                lo.ToPtr(\"012345678901\"),\n\t\t\t\tInstanceMatchCriteria:  ec2types.InstanceMatchCriteriaTargeted,\n\t\t\t\tCapacityReservationId:  lo.ToPtr(\"cr-m5.large-1a-1\"),\n\t\t\t\tAvailableInstanceCount: lo.ToPtr[int32](10),\n\t\t\t\tTags:                   utils.EC2MergeTags(discoveryTags),\n\t\t\t\tState:                  ec2types.CapacityReservationStateActive,\n\t\t\t},\n\t\t\t{\n\t\t\t\tAvailabilityZone:       lo.ToPtr(\"test-zone-1a\"),\n\t\t\t\tInstanceType:           lo.ToPtr(\"m5.large\"),\n\t\t\t\tOwnerId:                lo.ToPtr(\"012345678901\"),\n\t\t\t\tInstanceMatchCriteria:  ec2types.InstanceMatchCriteriaTargeted,\n\t\t\t\tCapacityReservationId:  lo.ToPtr(\"cr-m5.large-1a-2\"),\n\t\t\t\tAvailableInstanceCount: lo.ToPtr[int32](15),\n\t\t\t\tTags:                   utils.EC2MergeTags(discoveryTags),\n\t\t\t\tState:                  ec2types.CapacityReservationStateActive,\n\t\t\t},\n\t\t}\n\t\tawsEnv.EC2API.DescribeCapacityReservationsOutput.Set(&ec2.DescribeCapacityReservationsOutput{\n\t\t\tCapacityReservations: crs,\n\t\t})\n\t\treservations = make(map[string]int)\n\t\tfor _, cr := range crs {\n\t\t\treservations[*cr.CapacityReservationId] = int(*cr.AvailableInstanceCount)\n\t\t}\n\t})\n\tContext(\"Availability Cache\", func() {\n\t\tIt(\"should sync availability cache when listing reservations\", func() {\n\t\t\tcrs, err := awsEnv.CapacityReservationProvider.List(ctx, v1.CapacityReservationSelectorTerm{\n\t\t\t\tTags: discoveryTags,\n\t\t\t})\n\t\t\tExpect(err).ToNot(HaveOccurred())\n\t\t\tExpect(crs).To(HaveLen(2))\n\t\t\tfor id, count := range reservations {\n\t\t\t\tExpect(awsEnv.CapacityReservationProvider.GetAvailableInstanceCount(id)).To(Equal(count))\n\t\t\t}\n\t\t})\n\t\tIt(\"should decrement availability when reservation is marked as launched\", func() {\n\t\t\tawsEnv.CapacityReservationProvider.SetAvailableInstanceCount(\"cr-test\", 5)\n\t\t\tawsEnv.CapacityReservationProvider.MarkLaunched(\"cr-test-2\")\n\t\t\tExpect(awsEnv.CapacityReservationProvider.GetAvailableInstanceCount(\"cr-test\")).To(Equal(5))\n\t\t\tawsEnv.CapacityReservationProvider.MarkLaunched(\"cr-test\")\n\t\t\tExpect(awsEnv.CapacityReservationProvider.GetAvailableInstanceCount(\"cr-test\")).To(Equal(4))\n\t\t})\n\t\tIt(\"should increment availability when reservation is marked as terminated\", func() {\n\t\t\tawsEnv.CapacityReservationProvider.SetAvailableInstanceCount(\"cr-test\", 5)\n\t\t\tawsEnv.CapacityReservationProvider.MarkTerminated(\"cr-test-2\")\n\t\t\tExpect(awsEnv.CapacityReservationProvider.GetAvailableInstanceCount(\"cr-test\")).To(Equal(5))\n\t\t\tawsEnv.CapacityReservationProvider.MarkTerminated(\"cr-test\")\n\t\t\tExpect(awsEnv.CapacityReservationProvider.GetAvailableInstanceCount(\"cr-test\")).To(Equal(6))\n\t\t})\n\t})\n})\n"
  },
  {
    "path": "pkg/providers/capacityreservation/types.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage capacityreservation\n\nimport (\n\t\"fmt\"\n\t\"sync\"\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go-v2/service/ec2\"\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\t\"github.com/mitchellh/hashstructure/v2\"\n\t\"github.com/patrickmn/go-cache\"\n\t\"github.com/samber/lo\"\n\t\"k8s.io/utils/clock\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n)\n\ntype Query struct {\n\tID                    string\n\tOwnerID               string\n\tTags                  map[string]string\n\tInstanceMatchCriteria string\n}\n\nfunc QueriesFromSelectorTerms(terms ...v1.CapacityReservationSelectorTerm) []*Query {\n\tqueries := []*Query{}\n\tfor i := range terms {\n\t\tif id := terms[i].ID; id != \"\" {\n\t\t\tqueries = append(queries, &Query{ID: id})\n\t\t}\n\t\tif len(terms[i].Tags) != 0 || terms[i].InstanceMatchCriteria != \"\" {\n\t\t\tqueries = append(queries, &Query{\n\t\t\t\tOwnerID:               terms[i].OwnerID,\n\t\t\t\tTags:                  terms[i].Tags,\n\t\t\t\tInstanceMatchCriteria: terms[i].InstanceMatchCriteria,\n\t\t\t})\n\t\t}\n\t}\n\treturn queries\n}\n\nfunc (q *Query) CacheKey() string {\n\treturn fmt.Sprintf(\"%d\", lo.Must(hashstructure.Hash(q, hashstructure.FormatV2, &hashstructure.HashOptions{\n\t\tSlicesAsSets: true,\n\t})))\n}\n\nfunc (q *Query) DescribeCapacityReservationsInput() *ec2.DescribeCapacityReservationsInput {\n\tfilters := []ec2types.Filter{{\n\t\tName:   lo.ToPtr(\"state\"),\n\t\tValues: []string{string(ec2types.CapacityReservationStateActive)},\n\t}}\n\tif len(q.ID) != 0 {\n\t\t// MaxResults can't be used when listing a capacity reservation by id\n\t\treturn &ec2.DescribeCapacityReservationsInput{\n\t\t\tFilters:                filters,\n\t\t\tCapacityReservationIds: []string{q.ID},\n\t\t}\n\t}\n\tif q.OwnerID != \"\" {\n\t\tfilters = append(filters, ec2types.Filter{\n\t\t\tName:   lo.ToPtr(\"owner-id\"),\n\t\t\tValues: []string{q.OwnerID},\n\t\t})\n\t}\n\tif len(q.Tags) != 0 {\n\t\tfilters = append(filters, lo.MapToSlice(q.Tags, func(k, v string) ec2types.Filter {\n\t\t\tif v == \"*\" {\n\t\t\t\treturn ec2types.Filter{\n\t\t\t\t\tName:   lo.ToPtr(\"tag-key\"),\n\t\t\t\t\tValues: []string{k},\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn ec2types.Filter{\n\t\t\t\tName:   lo.ToPtr(fmt.Sprintf(\"tag:%s\", k)),\n\t\t\t\tValues: []string{v},\n\t\t\t}\n\t\t})...)\n\t}\n\tif q.InstanceMatchCriteria != \"\" {\n\t\tfilters = append(filters, ec2types.Filter{\n\t\t\tName:   lo.ToPtr(\"instance-match-criteria\"),\n\t\t\tValues: []string{q.InstanceMatchCriteria},\n\t\t})\n\t}\n\treturn &ec2.DescribeCapacityReservationsInput{\n\t\tFilters: filters,\n\t\t// MaxResults for DescribeCapacityReservations is capped at 1000\n\t\tMaxResults: lo.ToPtr[int32](1000),\n\t}\n}\n\ntype availabilityCache struct {\n\tmu    sync.RWMutex\n\tcache *cache.Cache\n\tclk   clock.Clock\n}\n\ntype availabilityCacheEntry struct {\n\tcount    int\n\tsyncTime time.Time\n}\n\nfunc (c *availabilityCache) syncAvailability(availability map[string]int) {\n\tnow := c.clk.Now()\n\tc.mu.Lock()\n\tdefer c.mu.Unlock()\n\tfor id, count := range availability {\n\t\tc.cache.SetDefault(id, &availabilityCacheEntry{\n\t\t\tcount:    count,\n\t\t\tsyncTime: now,\n\t\t})\n\t}\n}\n\nfunc (c *availabilityCache) MarkLaunched(reservationID string) {\n\tnow := c.clk.Now()\n\tc.mu.Lock()\n\tdefer c.mu.Unlock()\n\tentry, ok := c.cache.Get(reservationID)\n\tif !ok {\n\t\treturn\n\t}\n\t// Only count the launch if it occurred before the last sync from EC2. In the worst case, this will lead to us\n\t// overestimating availability if there's an eventual consistency delay with EC2, but we'd rather overestimate than\n\t// underestimate.\n\tif entry.(*availabilityCacheEntry).syncTime.After(now) {\n\t\treturn\n\t}\n\n\tif entry.(*availabilityCacheEntry).count != 0 {\n\t\tentry.(*availabilityCacheEntry).count -= 1\n\t}\n}\n\nfunc (c *availabilityCache) MarkTerminated(reservationID string) {\n\t// We don't do a time based comparison for CountTerminated because the reservation becomes available some time between\n\t// the termination call and the instance state transitioning to terminated. This can be a pretty big gap, so a time\n\t// based comparison would have limited value. In the worst case, this can result in us overestimating the available\n\t// capacity, but we'd rather overestimate than underestimate.\n\tc.mu.Lock()\n\tdefer c.mu.Unlock()\n\tentry, ok := c.cache.Get(reservationID)\n\tif !ok {\n\t\treturn\n\t}\n\tentry.(*availabilityCacheEntry).count += 1\n}\n\nfunc (c *availabilityCache) GetAvailableInstanceCount(reservationID string) int {\n\tc.mu.RLock()\n\tdefer c.mu.RUnlock()\n\tentry, ok := c.cache.Get(reservationID)\n\tif !ok {\n\t\treturn 0\n\t}\n\treturn entry.(*availabilityCacheEntry).count\n}\n\n// TODO: Determine better abstraction for setting availability in tests without reconciling the nodeclass controller\nfunc (c *availabilityCache) SetAvailableInstanceCount(reservationID string, count int) {\n\tc.mu.Lock()\n\tdefer c.mu.Unlock()\n\tc.cache.SetDefault(reservationID, &availabilityCacheEntry{\n\t\tcount:    count,\n\t\tsyncTime: c.clk.Now(),\n\t})\n}\n\nfunc (c *availabilityCache) MarkUnavailable(reservationIDs ...string) {\n\tc.mu.Lock()\n\tdefer c.mu.Unlock()\n\tfor _, id := range reservationIDs {\n\t\tentry, ok := c.cache.Get(id)\n\t\tif !ok {\n\t\t\tcontinue\n\t\t}\n\t\tentry.(*availabilityCacheEntry).count = 0\n\t}\n}\n"
  },
  {
    "path": "pkg/providers/instance/events.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage instance\n\nimport (\n\t\"fmt\"\n\n\tcorev1 \"k8s.io/api/core/v1\"\n\tv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n\t\"sigs.k8s.io/karpenter/pkg/events\"\n\n\t\"github.com/aws/karpenter-provider-aws/pkg/errors\"\n)\n\nfunc SpotServiceLinkedRoleCreationFailure(nodeClaim *v1.NodeClaim) events.Event {\n\treturn events.Event{\n\t\tInvolvedObject: nodeClaim,\n\t\tType:           corev1.EventTypeWarning,\n\t\tMessage:        fmt.Sprintf(\"Attempted to launch a spot instance but failed due to %q\", errors.ServiceLinkedRoleCreationNotPermittedErrorCode),\n\t\tDedupeValues:   []string{string(nodeClaim.UID)},\n\t}\n}\n"
  },
  {
    "path": "pkg/providers/instance/filter/filter.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage filter\n\nimport (\n\t\"fmt\"\n\t\"math\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/awslabs/operatorpkg/serrors\"\n\t\"github.com/samber/lo\"\n\tcorev1 \"k8s.io/api/core/v1\"\n\t\"sigs.k8s.io/karpenter/pkg/cloudprovider\"\n\t\"sigs.k8s.io/karpenter/pkg/scheduling\"\n\t\"sigs.k8s.io/karpenter/pkg/utils/resources\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\n\tkarpv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n)\n\ntype Filter interface {\n\tFilterReject(instanceTypes []*cloudprovider.InstanceType) (kept []*cloudprovider.InstanceType, rejected []*cloudprovider.InstanceType)\n\tName() string\n}\n\n// CompatibleAvailableFilter removes instance types which do not have any compatible, available offerings. Other filters\n// should not be used without first using this filter.\nfunc CompatibleAvailableFilter(requirements scheduling.Requirements, requests corev1.ResourceList) Filter {\n\treturn compatibleAvailableFilter{\n\t\trequirements: requirements,\n\t\trequests:     requests,\n\t}\n}\n\ntype compatibleAvailableFilter struct {\n\trequirements scheduling.Requirements\n\trequests     corev1.ResourceList\n}\n\nfunc (f compatibleAvailableFilter) FilterReject(instanceTypes []*cloudprovider.InstanceType) ([]*cloudprovider.InstanceType, []*cloudprovider.InstanceType) {\n\treturn lo.FilterReject(instanceTypes, func(i *cloudprovider.InstanceType, _ int) bool {\n\t\tif !f.requirements.IsCompatible(i.Requirements, scheduling.AllowUndefinedWellKnownLabels) {\n\t\t\treturn false\n\t\t}\n\t\tif !resources.Fits(f.requests, i.Allocatable()) {\n\t\t\treturn false\n\t\t}\n\t\tif len(i.Offerings.Compatible(f.requirements).Available()) == 0 {\n\t\t\treturn false\n\t\t}\n\t\treturn true\n\t})\n}\n\nfunc (compatibleAvailableFilter) Name() string {\n\treturn \"compatible-available-filter\"\n}\n\n// CapacityReservationTypeFilter creates a Filter which ensures there aren't instance types with offerings from multiple\n// capacity reservation types. This addresses a CreateFleet limitation, where we can only specify a single market type\n// (i.e. \"on-demand\" or \"capacity-block\").\nfunc CapacityReservationTypeFilter(requirements scheduling.Requirements) Filter {\n\treturn capacityReservationTypeFilter{\n\t\trequirements: requirements,\n\t}\n}\n\ntype capacityReservationTypeFilter struct {\n\trequirements scheduling.Requirements\n}\n\nfunc (f capacityReservationTypeFilter) FilterReject(instanceTypes []*cloudprovider.InstanceType) ([]*cloudprovider.InstanceType, []*cloudprovider.InstanceType) {\n\tif !f.requirements.Get(karpv1.CapacityTypeLabelKey).Has(karpv1.CapacityTypeReserved) {\n\t\treturn instanceTypes, nil\n\t}\n\n\t// Select the partition with the cheapest instance type\n\tselectedPartition := lo.MinBy(f.Partition(instanceTypes), func(i, j *capacityReservationTypePartition) bool {\n\t\tif i.cheapestPrice != j.cheapestPrice {\n\t\t\treturn i.cheapestPrice < j.cheapestPrice\n\t\t}\n\t\tpriorities := map[capacityReservation]int{\n\t\t\t{v1.CapacityReservationTypeDefault, false}:       0,\n\t\t\t{v1.CapacityReservationTypeCapacityBlock, false}: 1,\n\t\t\t{v1.CapacityReservationTypeDefault, true}:        2, // interruptible ODCRs\n\t\t}\n\t\treturn priorities[capacityReservation{i.capacityReservationType, i.capacityReservationInterruptible}] <\n\t\t\tpriorities[capacityReservation{j.capacityReservationType, j.capacityReservationInterruptible}]\n\t})\n\tif len(selectedPartition.instanceTypes) == 0 {\n\t\treturn instanceTypes, nil\n\t}\n\n\t// Remove offerings which do not belong to the selected partition for the selected instance types\n\tfor _, it := range selectedPartition.instanceTypes {\n\t\tit.Offerings = lo.Filter(it.Offerings, func(o *cloudprovider.Offering, _ int) bool {\n\t\t\tif o.CapacityType() != karpv1.CapacityTypeReserved {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tif o.Requirements.Get(v1.LabelCapacityReservationType).Any() != string(selectedPartition.capacityReservationType) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tif (o.Requirements.Get(v1.LabelCapacityReservationInterruptible).Any() == \"true\") != selectedPartition.capacityReservationInterruptible {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\treturn true\n\t\t})\n\t}\n\treturn lo.Values(selectedPartition.instanceTypes), lo.Reject(instanceTypes, func(it *cloudprovider.InstanceType, _ int) bool {\n\t\t_, ok := selectedPartition.instanceTypes[it.Name]\n\t\treturn ok\n\t})\n}\n\nfunc (f capacityReservationTypeFilter) Name() string {\n\treturn \"capacity-reservation-type-filter\"\n}\n\ntype capacityReservationTypePartition struct {\n\tcapacityReservationType          v1.CapacityReservationType\n\tcapacityReservationInterruptible bool\n\tcheapestPrice                    float64\n\tinstanceTypes                    map[string]*cloudprovider.InstanceType\n}\n\ntype capacityReservation struct {\n\tcapacityReservationType          v1.CapacityReservationType\n\tcapacityReservationInterruptible bool\n}\n\n//nolint:gocyclo\nfunc (f capacityReservationTypeFilter) Partition(instanceTypes []*cloudprovider.InstanceType) []*capacityReservationTypePartition {\n\tpartitions := map[capacityReservation]*capacityReservationTypePartition{}\n\tfor _, t := range v1.CapacityReservationType(\"\").Values() {\n\t\tfor _, i := range []bool{true, false} {\n\t\t\t// There is no such thing as interruptible capacity blocks\n\t\t\tif i && t == v1.CapacityReservationTypeCapacityBlock {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tpartitions[capacityReservation{t, i}] = &capacityReservationTypePartition{\n\t\t\t\tcapacityReservationType:          t,\n\t\t\t\tcapacityReservationInterruptible: i,\n\t\t\t\tcheapestPrice:                    math.MaxFloat64,\n\t\t\t\tinstanceTypes:                    map[string]*cloudprovider.InstanceType{},\n\t\t\t}\n\t\t}\n\t}\n\tfor _, it := range instanceTypes {\n\t\tfor _, o := range it.Offerings.Available().Compatible(f.requirements) {\n\t\t\tif o.CapacityType() != karpv1.CapacityTypeReserved {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tt := v1.CapacityReservationType(o.Requirements.Get(v1.LabelCapacityReservationType).Any())\n\t\t\ti := o.Requirements.Get(v1.LabelCapacityReservationInterruptible).Any() == \"true\"\n\t\t\tp, ok := partitions[capacityReservation{t, i}]\n\t\t\tif !ok {\n\t\t\t\t// SAFETY: Valid reservation types are enforced during capacity reservation construction in the NodeClass\n\t\t\t\t// controller. An invalid value indicates a user manually edited their NodeClass' status, breaking an invariant.\n\t\t\t\tvalidTypes := []string{}\n\t\t\t\tfor _, crt := range v1.CapacityReservationType(\"\").Values() {\n\t\t\t\t\tfor _, interruptible := range []bool{true, false} {\n\t\t\t\t\t\tif interruptible && crt == v1.CapacityReservationTypeCapacityBlock {\n\t\t\t\t\t\t\tcontinue\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvalidTypes = append(validTypes, fmt.Sprintf(\"(%s, %s)\", string(crt), lo.Ternary(interruptible, \"interruptible\", \"non-interruptible\")))\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tlo.Must0(serrors.Wrap(\n\t\t\t\t\tfmt.Errorf(\"failed to partition capacity reservations, invalid capacity reservation type\"),\n\t\t\t\t\t\"type\", string(t),\n\t\t\t\t\t\"interruptible\", strconv.FormatBool(i),\n\t\t\t\t\t\"valid-types\", validTypes,\n\t\t\t\t))\n\t\t\t}\n\t\t\tif p.cheapestPrice > o.Price {\n\t\t\t\tp.cheapestPrice = o.Price\n\t\t\t}\n\t\t\tp.instanceTypes[it.Name] = it\n\t\t}\n\t}\n\treturn lo.Values(partitions)\n}\n\n// CapacityBlockFilter creates a filter which selects the instance type with the cheapest capacity block offering if the\n// provided requirements are for a reserved launch and the provided instance types have a capacity block offering. This\n// filter is required because CreateFleet does not accept multiple capacity blocks in a given request.\n// Ref: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-fleet-launch-instances-capacity-blocks-walkthrough.html\nfunc CapacityBlockFilter(requirements scheduling.Requirements) Filter {\n\treturn capacityBlockFilter{\n\t\trequirements: requirements,\n\t}\n}\n\ntype capacityBlockFilter struct {\n\trequirements scheduling.Requirements\n}\n\n//nolint:gocyclo\nfunc (f capacityBlockFilter) FilterReject(instanceTypes []*cloudprovider.InstanceType) ([]*cloudprovider.InstanceType, []*cloudprovider.InstanceType) {\n\tif !f.shouldFilter(instanceTypes) {\n\t\treturn instanceTypes, nil\n\t}\n\tvar selectedInstanceType *cloudprovider.InstanceType\n\tfor _, it := range instanceTypes {\n\t\tvar selectedOffering *cloudprovider.Offering\n\t\tfor _, o := range it.Offerings {\n\t\t\tif o.CapacityType() != karpv1.CapacityTypeReserved {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif !o.Available || !f.requirements.IsCompatible(o.Requirements, scheduling.AllowUndefinedWellKnownLabels) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif o.Requirements.Get(v1.LabelCapacityReservationType).Any() != string(v1.CapacityReservationTypeCapacityBlock) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif selectedOffering == nil || selectedOffering.Price > o.Price {\n\t\t\t\tselectedOffering = o\n\t\t\t}\n\t\t}\n\t\tif selectedOffering != nil && (selectedInstanceType == nil || selectedInstanceType.Offerings[0].Price > selectedOffering.Price) {\n\t\t\t// WARNING: It is only safe to mutate the slice containing the offerings, not the offerings themselves. The\n\t\t\t// individual offerings are cached, but not the slice storing them. This helps keep the launch path simple, but\n\t\t\t// changes to the caching strategy employed by the InstanceType provider could result in unexpected behavior.\n\t\t\tit.Offerings = []*cloudprovider.Offering{selectedOffering}\n\t\t\tselectedInstanceType = it\n\t\t}\n\t}\n\treturn []*cloudprovider.InstanceType{selectedInstanceType}, lo.Reject(instanceTypes, func(it *cloudprovider.InstanceType, _ int) bool {\n\t\treturn it.Name == selectedInstanceType.Name\n\t})\n}\n\nfunc (f capacityBlockFilter) shouldFilter(instanceTypes []*cloudprovider.InstanceType) bool {\n\tif !f.requirements.Get(karpv1.CapacityTypeLabelKey).Has(karpv1.CapacityTypeReserved) {\n\t\treturn false\n\t}\n\tfor _, it := range instanceTypes {\n\t\tfor _, o := range it.Offerings {\n\t\t\tif !o.Requirements.Has(v1.LabelCapacityReservationType) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif o.Requirements.Get(v1.LabelCapacityReservationType).Any() == string(v1.CapacityReservationTypeCapacityBlock) {\n\t\t\t\treturn true\n\t\t\t} else {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t}\n\treturn false\n}\n\nfunc (f capacityBlockFilter) Name() string {\n\treturn \"capacity-block-filter\"\n}\n\n// ReservedOfferingFilter creates a Filter which ensures there's only a single reserved offering per zone. This\n// addresses a limitation of the CreateFleet API, which limits calls to specifying a single offering per pool. If there\n// are multiple offerings in the same pool, the offering with the greatest capacity will be selected.\nfunc ReservedOfferingFilter(requirements scheduling.Requirements) Filter {\n\treturn reservedOfferingFilter{\n\t\trequirements: requirements,\n\t}\n}\n\ntype reservedOfferingFilter struct {\n\trequirements scheduling.Requirements\n}\n\nfunc (f reservedOfferingFilter) FilterReject(instanceTypes []*cloudprovider.InstanceType) ([]*cloudprovider.InstanceType, []*cloudprovider.InstanceType) {\n\tif !f.requirements.Get(karpv1.CapacityTypeLabelKey).Has(karpv1.CapacityTypeReserved) {\n\t\treturn instanceTypes, nil\n\t}\n\n\tvar remaining, rejected []*cloudprovider.InstanceType\n\tfor _, it := range instanceTypes {\n\t\tzonalOfferings := map[string]*cloudprovider.Offering{}\n\t\tfor _, o := range it.Offerings.Available().Compatible(f.requirements) {\n\t\t\tif o.CapacityType() != karpv1.CapacityTypeReserved {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif current, ok := zonalOfferings[o.Zone()]; !ok || o.ReservationCapacity > current.ReservationCapacity {\n\t\t\t\tzonalOfferings[o.Zone()] = o\n\t\t\t}\n\t\t}\n\t\tif len(zonalOfferings) == 0 {\n\t\t\trejected = append(rejected, it)\n\t\t\tcontinue\n\t\t}\n\t\t// WARNING: It is only safe to mutate the slice containing the offerings, not the offerings themselves. The individual\n\t\t// offerings are cached, but not the slice storing them. This helps keep the launch path simple, but changes to the\n\t\t// caching strategy employed by the InstanceType provider could result in unexpected behavior.\n\t\tit.Offerings = lo.Values(zonalOfferings)\n\t\tremaining = append(remaining, it)\n\t}\n\tif len(remaining) == 0 {\n\t\treturn instanceTypes, nil\n\t}\n\treturn remaining, rejected\n}\n\nfunc (reservedOfferingFilter) Name() string {\n\treturn \"reserved-offering-filter\"\n}\n\n// ExoticInstanceTypeFilter will remove instances with GPUs and accelerators, along with metal instances, if doing so\n// doesn't filter out all instance types. This ensures Karpenter only launches these instances if the NodeClaim\n// explicitly requests them or all other compatible instance types are unavailable.\nfunc ExoticInstanceTypeFilter(requirements scheduling.Requirements) Filter {\n\treturn exoticInstanceFilter{\n\t\trequirements: requirements,\n\t}\n}\n\ntype exoticInstanceFilter struct {\n\trequirements scheduling.Requirements\n}\n\nfunc (f exoticInstanceFilter) FilterReject(instanceTypes []*cloudprovider.InstanceType) ([]*cloudprovider.InstanceType, []*cloudprovider.InstanceType) {\n\tif f.requirements.HasMinValues() {\n\t\treturn instanceTypes, nil\n\t}\n\n\tgenericInstanceTypes, exoticInstanceTypes := lo.FilterReject(instanceTypes, func(it *cloudprovider.InstanceType, _ int) bool {\n\t\tif lo.ContainsBy(it.Requirements.Get(v1.LabelInstanceSize).Values(), func(size string) bool {\n\t\t\treturn strings.Contains(size, \"metal\")\n\t\t}) {\n\t\t\treturn false\n\t\t}\n\t\tfor _, resource := range []corev1.ResourceName{\n\t\t\tv1.ResourceAWSNeuron,\n\t\t\tv1.ResourceAWSNeuronCore,\n\t\t\tv1.ResourceAMDGPU,\n\t\t\tv1.ResourceNVIDIAGPU,\n\t\t\tv1.ResourceHabanaGaudi,\n\t\t} {\n\t\t\tif !resources.IsZero(it.Capacity[resource]) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t\treturn true\n\t})\n\t// If there are no available, compatible reserved instance types Karpenter should fallback to exotic instance types\n\tif len(genericInstanceTypes) == 0 {\n\t\treturn instanceTypes, nil\n\t}\n\treturn genericInstanceTypes, exoticInstanceTypes\n}\n\nfunc (exoticInstanceFilter) Name() string {\n\treturn \"exotic-instance-filter\"\n}\n\n// SpotOfferingFilter removes spot offerings that are more expensive than the cheapest compatible and available\n// on-demand offering. This ensures we don't launch with a more expensive spot instance for a mixed-launch NodeClaim.\n// NOTE: This filter assumes all provided instance types have compatible and available offerings\nfunc SpotOfferingFilter(requirements scheduling.Requirements) Filter {\n\treturn spotOfferingFilter{\n\t\trequirements: requirements,\n\t}\n}\n\ntype spotOfferingFilter struct {\n\trequirements scheduling.Requirements\n}\n\n//nolint:gocyclo\nfunc (f spotOfferingFilter) FilterReject(instanceTypes []*cloudprovider.InstanceType) ([]*cloudprovider.InstanceType, []*cloudprovider.InstanceType) {\n\tif f.requirements.HasMinValues() {\n\t\treturn instanceTypes, nil\n\t}\n\tif req := f.requirements.Get(karpv1.CapacityTypeLabelKey); !req.Has(karpv1.CapacityTypeOnDemand) || !req.Has(karpv1.CapacityTypeSpot) {\n\t\treturn instanceTypes, nil\n\t}\n\n\tcheapestOnDemand := math.MaxFloat64\n\thasSpotOfferings := false\n\thasODOfferings := false\n\tfor _, it := range instanceTypes {\n\t\tfor _, o := range it.Offerings.Compatible(f.requirements).Available() {\n\t\t\tif ct := o.Requirements.Get(karpv1.CapacityTypeLabelKey).Any(); ct == karpv1.CapacityTypeOnDemand {\n\t\t\t\thasODOfferings = true\n\t\t\t\tif o.Price < cheapestOnDemand {\n\t\t\t\t\tcheapestOnDemand = o.Price\n\t\t\t\t}\n\t\t\t} else if ct == karpv1.CapacityTypeSpot {\n\t\t\t\thasSpotOfferings = true\n\t\t\t}\n\t\t}\n\t}\n\tif !hasODOfferings || !hasSpotOfferings {\n\t\treturn instanceTypes, nil\n\t}\n\n\tvar remaining []*cloudprovider.InstanceType\n\tfor _, it := range instanceTypes {\n\t\tfilteredOfferings := lo.Filter(it.Offerings, func(o *cloudprovider.Offering, _ int) bool {\n\t\t\tif o.CapacityType() == karpv1.CapacityTypeSpot && o.Price > cheapestOnDemand {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\treturn true\n\t\t})\n\t\tif len(filteredOfferings) > 0 {\n\t\t\t// WARNING: It is only safe to mutate the slice containing the offerings, not the offerings themselves. The individual\n\t\t\t// offerings are cached, but not the slice storing them. This helps keep the launch path simple, but changes to the\n\t\t\t// caching strategy employed by the InstanceType provider could result in unexpected behavior.\n\t\t\tit.Offerings = filteredOfferings\n\t\t\tremaining = append(remaining, it)\n\t\t}\n\t}\n\treturn remaining, lo.Reject(instanceTypes, func(it *cloudprovider.InstanceType, _ int) bool {\n\t\treturn lo.Contains(remaining, it)\n\t})\n}\n\nfunc (spotOfferingFilter) Name() string {\n\treturn \"spot-offering-filter\"\n}\n"
  },
  {
    "path": "pkg/providers/instance/filter/filter_test.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage filter_test\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"math/rand/v2\"\n\t\"strconv\"\n\t\"testing\"\n\n\t\"github.com/awslabs/operatorpkg/option\"\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n\t\"github.com/samber/lo\"\n\tcorev1 \"k8s.io/api/core/v1\"\n\t\"k8s.io/apimachinery/pkg/api/resource\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/instance/filter\"\n\n\tkarpv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n\t\"sigs.k8s.io/karpenter/pkg/cloudprovider\"\n\t\"sigs.k8s.io/karpenter/pkg/scheduling\"\n\n\t. \"sigs.k8s.io/karpenter/pkg/utils/testing\"\n)\n\nvar ctx context.Context\n\nfunc TestAWS(t *testing.T) {\n\tctx = TestContextWithLogger(t)\n\tRegisterFailHandler(Fail)\n\tRunSpecs(t, \"FilterTest\")\n}\n\nvar _ = Describe(\"InstanceFiltersTest\", func() {\n\tContext(\"CompatibleAvailableFilter\", func() {\n\t\tIt(\"should filter compatible instances (by requirements)\", func() {\n\t\t\tf := filter.CompatibleAvailableFilter(scheduling.NewRequirements(scheduling.NewRequirement(\n\t\t\t\tcorev1.LabelTopologyZone,\n\t\t\t\tcorev1.NodeSelectorOpIn,\n\t\t\t\t\"zone-1a\",\n\t\t\t)), corev1.ResourceList{\n\t\t\t\tcorev1.ResourceCPU: resource.MustParse(\"1000m\"),\n\t\t\t})\n\t\t\tkept, rejected := f.FilterReject([]*cloudprovider.InstanceType{\n\t\t\t\tmakeInstanceType(\n\t\t\t\t\t\"compatible-instance\",\n\t\t\t\t\twithRequirements(scheduling.NewRequirement(corev1.LabelTopologyZone, corev1.NodeSelectorOpIn, \"zone-1a\")),\n\t\t\t\t\twithResource(corev1.ResourceCPU, resource.MustParse(\"2000m\")),\n\t\t\t\t\twithOfferings(makeOffering(karpv1.CapacityTypeOnDemand, true, withZone(\"zone-1a\"))),\n\t\t\t\t),\n\t\t\t\tmakeInstanceType(\n\t\t\t\t\t\"incompatible-instance\",\n\t\t\t\t\twithRequirements(scheduling.NewRequirement(corev1.LabelTopologyZone, corev1.NodeSelectorOpIn, \"zone-1b\")),\n\t\t\t\t\twithResource(corev1.ResourceCPU, resource.MustParse(\"2000m\")),\n\t\t\t\t\twithOfferings(makeOffering(karpv1.CapacityTypeOnDemand, true, withZone(\"zone-1b\"))),\n\t\t\t\t),\n\t\t\t})\n\t\t\texpectInstanceTypes(kept, \"compatible-instance\")\n\t\t\texpectInstanceTypes(rejected, \"incompatible-instance\")\n\t\t})\n\t\tIt(\"should filter compatible instances (by requests)\", func() {\n\t\t\tf := filter.CompatibleAvailableFilter(scheduling.NewRequirements(scheduling.NewRequirement(\n\t\t\t\tcorev1.LabelTopologyZone,\n\t\t\t\tcorev1.NodeSelectorOpIn,\n\t\t\t\t\"zone-1a\",\n\t\t\t)), corev1.ResourceList{\n\t\t\t\tcorev1.ResourceCPU: resource.MustParse(\"1000m\"),\n\t\t\t})\n\t\t\tkept, rejected := f.FilterReject([]*cloudprovider.InstanceType{\n\t\t\t\tmakeInstanceType(\n\t\t\t\t\t\"compatible-instance\",\n\t\t\t\t\twithRequirements(scheduling.NewRequirement(corev1.LabelTopologyZone, corev1.NodeSelectorOpIn, \"zone-1a\")),\n\t\t\t\t\twithResource(corev1.ResourceCPU, resource.MustParse(\"2000m\")),\n\t\t\t\t\twithOfferings(makeOffering(karpv1.CapacityTypeOnDemand, true, withZone(\"zone-1a\"))),\n\t\t\t\t),\n\t\t\t\tmakeInstanceType(\n\t\t\t\t\t\"incompatible-instance\",\n\t\t\t\t\twithRequirements(scheduling.NewRequirement(corev1.LabelTopologyZone, corev1.NodeSelectorOpIn, \"zone-1a\")),\n\t\t\t\t\twithResource(corev1.ResourceCPU, resource.MustParse(\"500m\")),\n\t\t\t\t\twithOfferings(makeOffering(karpv1.CapacityTypeOnDemand, true, withZone(\"zone-1a\"))),\n\t\t\t\t),\n\t\t\t})\n\t\t\texpectInstanceTypes(kept, \"compatible-instance\")\n\t\t\texpectInstanceTypes(rejected, \"incompatible-instance\")\n\t\t})\n\t\tIt(\"should filter available instances\", func() {\n\t\t\tf := filter.CompatibleAvailableFilter(scheduling.NewRequirements(scheduling.NewRequirement(\n\t\t\t\tcorev1.LabelTopologyZone,\n\t\t\t\tcorev1.NodeSelectorOpIn,\n\t\t\t\t\"zone-1a\",\n\t\t\t)), corev1.ResourceList{\n\t\t\t\tcorev1.ResourceCPU: resource.MustParse(\"1000m\"),\n\t\t\t})\n\t\t\tkept, rejected := f.FilterReject([]*cloudprovider.InstanceType{\n\t\t\t\tmakeInstanceType(\n\t\t\t\t\t\"available-instance\",\n\t\t\t\t\twithRequirements(scheduling.NewRequirement(corev1.LabelTopologyZone, corev1.NodeSelectorOpIn, \"zone-1a\")),\n\t\t\t\t\twithResource(corev1.ResourceCPU, resource.MustParse(\"2000m\")),\n\t\t\t\t\twithOfferings(\n\t\t\t\t\t\tmakeOffering(karpv1.CapacityTypeOnDemand, true, withZone(\"zone-1a\")),\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t\tmakeInstanceType(\n\t\t\t\t\t\"unavailable-instance\",\n\t\t\t\t\twithRequirements(scheduling.NewRequirement(corev1.LabelTopologyZone, corev1.NodeSelectorOpIn, \"zone-1a\")),\n\t\t\t\t\twithResource(corev1.ResourceCPU, resource.MustParse(\"2000m\")),\n\t\t\t\t\twithOfferings(\n\t\t\t\t\t\tmakeOffering(karpv1.CapacityTypeOnDemand, false, withZone(\"zone-1a\")),\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t})\n\t\t\texpectInstanceTypes(kept, \"available-instance\")\n\t\t\texpectInstanceTypes(rejected, \"unavailable-instance\")\n\t\t})\n\t})\n\n\tContext(\"CapacityReservationTypeFilter\", func() {\n\t\tDescribeTable(\n\t\t\t\"should prioritize the capacity reservation type with the cheapest offering\",\n\t\t\tfunc(selectedType v1.CapacityReservationType, selectedInterruptible bool) {\n\t\t\t\tf := filter.CapacityReservationTypeFilter(scheduling.NewRequirements(\n\t\t\t\t\tscheduling.NewRequirement(\n\t\t\t\t\t\tkarpv1.CapacityTypeLabelKey,\n\t\t\t\t\t\tcorev1.NodeSelectorOpIn,\n\t\t\t\t\t\tkarpv1.CapacityTypeReserved,\n\t\t\t\t\t),\n\t\t\t\t\tscheduling.NewRequirement(\n\t\t\t\t\t\tcorev1.LabelTopologyZone,\n\t\t\t\t\t\tcorev1.NodeSelectorOpIn,\n\t\t\t\t\t\t\"zone-1a\",\n\t\t\t\t\t),\n\t\t\t\t))\n\n\t\t\t\tkeptInstanceTypes := []*cloudprovider.InstanceType{\n\t\t\t\t\tmakeInstanceType(fmt.Sprintf(\"cheap-instance-%s-%t\", string(selectedType), selectedInterruptible), withOfferings(\n\t\t\t\t\t\tmakeOffering(karpv1.CapacityTypeReserved, true, withCapacityReservationType(selectedType), withPrice(5.0), withZone(\"zone-1a\"), withInterruptible(selectedInterruptible)),\n\t\t\t\t\t)),\n\t\t\t\t\tmakeInstanceType(fmt.Sprintf(\"expensive-instance-%s-%t\", string(selectedType), selectedInterruptible), withOfferings(\n\t\t\t\t\t\tmakeOffering(karpv1.CapacityTypeReserved, true, withCapacityReservationType(selectedType), withPrice(10.0), withZone(\"zone-1a\"), withInterruptible(selectedInterruptible)),\n\t\t\t\t\t)),\n\t\t\t\t}\n\t\t\t\trejectedInstanceTypes := lo.FlatMap(\n\t\t\t\t\tv1.CapacityReservationType(\"\").Values(),\n\t\t\t\t\tfunc(t v1.CapacityReservationType, _ int) []*cloudprovider.InstanceType {\n\t\t\t\t\t\tvar instances []*cloudprovider.InstanceType\n\t\t\t\t\t\tfor _, interruptible := range []bool{false, true} {\n\t\t\t\t\t\t\t// Capacity blocks can't be interruptible\n\t\t\t\t\t\t\tif t == v1.CapacityReservationTypeCapacityBlock && interruptible {\n\t\t\t\t\t\t\t\tcontinue\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif t == selectedType && interruptible == selectedInterruptible {\n\t\t\t\t\t\t\t\tcontinue\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tinstances = append(instances, makeInstanceType(\n\t\t\t\t\t\t\t\tfmt.Sprintf(\"expensive-instance-%s-%t\", string(t), interruptible),\n\t\t\t\t\t\t\t\twithOfferings(\n\t\t\t\t\t\t\t\t\tmakeOffering(karpv1.CapacityTypeReserved, true, withCapacityReservationType(t), withPrice(10.0), withZone(\"zone-1a\"), withInterruptible(interruptible)),\n\t\t\t\t\t\t\t\t\t// Include offerings which are cheaper than the cheapest selected offering, but are unavailable and incompatible\n\t\t\t\t\t\t\t\t\t// respectively to ensure compatible and available offering checks are performed correctly.\n\t\t\t\t\t\t\t\t\tmakeOffering(karpv1.CapacityTypeReserved, false, withCapacityReservationType(t), withPrice(1.0), withZone(\"zone-1a\"), withInterruptible(interruptible)),\n\t\t\t\t\t\t\t\t\tmakeOffering(karpv1.CapacityTypeReserved, true, withCapacityReservationType(t), withPrice(1.0), withZone(\"zone-1b\"), withInterruptible(interruptible)),\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t))\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn instances\n\t\t\t\t\t},\n\t\t\t\t)\n\n\t\t\t\tkept, rejected := f.FilterReject(lo.Flatten([][]*cloudprovider.InstanceType{keptInstanceTypes, rejectedInstanceTypes}))\n\t\t\t\texpectInstanceTypes(kept, lo.Map(keptInstanceTypes, func(it *cloudprovider.InstanceType, _ int) string { return it.Name })...)\n\t\t\t\texpectInstanceTypes(rejected, lo.Map(rejectedInstanceTypes, func(it *cloudprovider.InstanceType, _ int) string { return it.Name })...)\n\t\t\t},\n\t\t\tEntry(\"when the type is default\", v1.CapacityReservationTypeDefault, false),\n\t\t\tEntry(\"when the type is capacity-block\", v1.CapacityReservationTypeCapacityBlock, false),\n\t\t\tEntry(\"when the type is default interruptible\", v1.CapacityReservationTypeDefault, true),\n\t\t)\n\t\tDescribeTable(\n\t\t\t\"should break ties by priority\",\n\t\t\tfunc(selectedType v1.CapacityReservationType, selectedInterruptible bool, rejectedType v1.CapacityReservationType, rejectedInterruptible bool) {\n\t\t\t\tf := filter.CapacityReservationTypeFilter(scheduling.NewRequirements(scheduling.NewRequirement(\n\t\t\t\t\tkarpv1.CapacityTypeLabelKey,\n\t\t\t\t\tcorev1.NodeSelectorOpIn,\n\t\t\t\t\tkarpv1.CapacityTypeReserved,\n\t\t\t\t)))\n\t\t\t\tselectedName := fmt.Sprintf(\"%s-%t\", string(selectedType), selectedInterruptible)\n\t\t\t\trejectedName := fmt.Sprintf(\"%s-%t\", string(rejectedType), rejectedInterruptible)\n\t\t\t\tkept, rejected := f.FilterReject([]*cloudprovider.InstanceType{\n\t\t\t\t\tmakeInstanceType(selectedName, withOfferings(\n\t\t\t\t\t\tmakeOffering(karpv1.CapacityTypeReserved, true, withPrice(5.0), withCapacityReservationType(selectedType), withInterruptible(selectedInterruptible)),\n\t\t\t\t\t)),\n\t\t\t\t\tmakeInstanceType(rejectedName, withOfferings(\n\t\t\t\t\t\tmakeOffering(karpv1.CapacityTypeReserved, true, withPrice(5.0), withCapacityReservationType(rejectedType), withInterruptible(rejectedInterruptible)),\n\t\t\t\t\t)),\n\t\t\t\t})\n\t\t\t\texpectInstanceTypes(kept, selectedName)\n\t\t\t\texpectInstanceTypes(rejected, rejectedName)\n\t\t\t},\n\t\t\tEntry(\"when the two capacity reservations are default and capacity-block\", v1.CapacityReservationTypeDefault, false, v1.CapacityReservationTypeCapacityBlock, false),\n\t\t\tEntry(\"when the two capacity reservations are capacity-block and interruptible default\", v1.CapacityReservationTypeCapacityBlock, false, v1.CapacityReservationTypeDefault, true),\n\t\t\tEntry(\"when the two capacity reservations are default and interruptible default\", v1.CapacityReservationTypeDefault, false, v1.CapacityReservationTypeDefault, true),\n\t\t)\n\t\tDescribeTable(\n\t\t\t\"should remove offerings which aren't the selected capacity reservation type\",\n\t\t\tfunc(selectedType v1.CapacityReservationType, selectedInterruptible bool) {\n\t\t\t\tf := filter.CapacityReservationTypeFilter(scheduling.NewRequirements(scheduling.NewRequirement(\n\t\t\t\t\tkarpv1.CapacityTypeLabelKey,\n\t\t\t\t\tcorev1.NodeSelectorOpIn,\n\t\t\t\t\tkarpv1.CapacityTypeReserved,\n\t\t\t\t)))\n\t\t\t\tkept, rejected := f.FilterReject([]*cloudprovider.InstanceType{\n\t\t\t\t\tmakeInstanceType(\"pin-instance\", withOfferings(\n\t\t\t\t\t\tmakeOffering(karpv1.CapacityTypeReserved, true, withPrice(1.0), withCapacityReservationType(selectedType), withInterruptible(selectedInterruptible)),\n\t\t\t\t\t)),\n\t\t\t\t\tmakeInstanceType(\"filter-instance\", withOfferings(lo.FlatMap(\n\t\t\t\t\t\tv1.CapacityReservationType(\"\").Values(),\n\t\t\t\t\t\tfunc(t v1.CapacityReservationType, _ int) []*cloudprovider.Offering {\n\t\t\t\t\t\t\tvar offerings []*cloudprovider.Offering\n\t\t\t\t\t\t\tfor _, interruptible := range []bool{false, true} {\n\t\t\t\t\t\t\t\t// Capacity blocks can't be interruptible\n\t\t\t\t\t\t\t\tif t == v1.CapacityReservationTypeCapacityBlock && interruptible {\n\t\t\t\t\t\t\t\t\tcontinue\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tofferings = append(offerings, makeOffering(\n\t\t\t\t\t\t\t\t\tkarpv1.CapacityTypeReserved,\n\t\t\t\t\t\t\t\t\ttrue,\n\t\t\t\t\t\t\t\t\twithPrice(5.0),\n\t\t\t\t\t\t\t\t\twithCapacityReservationType(t),\n\t\t\t\t\t\t\t\t\twithInterruptible(interruptible),\n\t\t\t\t\t\t\t\t))\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn offerings\n\t\t\t\t\t\t},\n\t\t\t\t\t)...)),\n\t\t\t\t})\n\t\t\t\texpectInstanceTypes(kept, \"pin-instance\", \"filter-instance\")\n\t\t\t\tExpect(rejected).To(BeEmpty())\n\t\t\t\tfor _, it := range kept {\n\t\t\t\t\tExpect(it.Offerings).To(HaveLen(1))\n\t\t\t\t\tExpect(it.Offerings[0].CapacityType()).To(Equal(karpv1.CapacityTypeReserved))\n\t\t\t\t\tExpect(it.Offerings[0].Requirements.Get(v1.LabelCapacityReservationType).Any()).To(Equal(string(selectedType)))\n\t\t\t\t\tExpect(it.Offerings[0].Requirements.Get(v1.LabelCapacityReservationInterruptible).Any()).To(Equal(strconv.FormatBool(selectedInterruptible)))\n\t\t\t\t}\n\t\t\t},\n\t\t\tEntry(\"when the type is default\", v1.CapacityReservationTypeDefault, false),\n\t\t\tEntry(\"when the type is default interruptible\", v1.CapacityReservationTypeDefault, true),\n\t\t\tEntry(\"when the type is capacity-block\", v1.CapacityReservationTypeCapacityBlock, false),\n\t\t)\n\t\tIt(\"should not filter instance types when the nodeclaim is not compatible with capacity type reserved\", func() {\n\t\t\tf := filter.CapacityReservationTypeFilter(scheduling.NewRequirements(scheduling.NewRequirement(\n\t\t\t\tkarpv1.CapacityTypeLabelKey,\n\t\t\t\tcorev1.NodeSelectorOpNotIn,\n\t\t\t\tkarpv1.CapacityTypeReserved,\n\t\t\t)))\n\t\t\tinstanceTypes := lo.Map(v1.CapacityReservationType(\"\").Values(), func(t v1.CapacityReservationType, _ int) *cloudprovider.InstanceType {\n\t\t\t\treturn makeInstanceType(fmt.Sprintf(\"%s-instance\", string(t)), withOfferings(\n\t\t\t\t\tmakeOffering(karpv1.CapacityTypeOnDemand, true),\n\t\t\t\t\tmakeOffering(karpv1.CapacityTypeReserved, true, withPrice(1.0), withCapacityReservationType(t)),\n\t\t\t\t))\n\t\t\t})\n\t\t\tkept, rejected := f.FilterReject(instanceTypes)\n\t\t\texpectInstanceTypes(kept, lo.Map(instanceTypes, func(it *cloudprovider.InstanceType, _ int) string { return it.Name })...)\n\t\t\tExpect(rejected).To(BeEmpty())\n\t\t})\n\t})\n\n\tContext(\"CapacityBlockFilter\", func() {\n\t\tIt(\"should select the instance type with the cheapest capacity-block offering\", func() {\n\t\t\tf := filter.CapacityBlockFilter(scheduling.NewRequirements(scheduling.NewRequirement(karpv1.CapacityTypeLabelKey, corev1.NodeSelectorOpExists)))\n\t\t\tkept, rejected := f.FilterReject([]*cloudprovider.InstanceType{\n\t\t\t\tmakeInstanceType(\"cheap-instance\", withOfferings(\n\t\t\t\t\tmakeOffering(karpv1.CapacityTypeReserved, true, withPrice(1.0), withCapacityReservationType(v1.CapacityReservationTypeCapacityBlock)),\n\t\t\t\t\tmakeOffering(karpv1.CapacityTypeReserved, true, withPrice(10.0), withCapacityReservationType(v1.CapacityReservationTypeCapacityBlock)),\n\t\t\t\t)),\n\t\t\t\tmakeInstanceType(\"expensive-instance\", withOfferings(\n\t\t\t\t\tmakeOffering(karpv1.CapacityTypeReserved, true, withPrice(2.0), withCapacityReservationType(v1.CapacityReservationTypeCapacityBlock)),\n\t\t\t\t\tmakeOffering(karpv1.CapacityTypeReserved, true, withPrice(10.0), withCapacityReservationType(v1.CapacityReservationTypeCapacityBlock)),\n\t\t\t\t)),\n\t\t\t})\n\t\t\texpectInstanceTypes(kept, \"cheap-instance\")\n\t\t\texpectInstanceTypes(rejected, \"expensive-instance\")\n\t\t\tExpect(kept[0].Offerings).To(HaveLen(1))\n\t\t})\n\t\tDescribeTable(\n\t\t\t\"OfferingSelection\",\n\t\t\tfunc(expectedReservationID string, offerings ...*cloudprovider.Offering) {\n\t\t\t\tf := filter.CapacityBlockFilter(\n\t\t\t\t\tscheduling.NewRequirements(scheduling.NewRequirement(karpv1.CapacityTypeLabelKey, corev1.NodeSelectorOpExists),\n\t\t\t\t\t\tscheduling.NewRequirement(corev1.LabelTopologyZone, corev1.NodeSelectorOpNotIn, \"forbidden-zone\"),\n\t\t\t\t\t))\n\t\t\t\tkept, _ := f.FilterReject([]*cloudprovider.InstanceType{makeInstanceType(\"instance\", withOfferings(offerings...))})\n\t\t\t\tExpect(kept[0].Offerings).To(HaveLen(1))\n\t\t\t\tExpect(kept[0].Offerings[0].ReservationID()).To(Equal(expectedReservationID))\n\t\t\t},\n\t\t\tEntry(\n\t\t\t\t\"should select the cheapest offering\",\n\t\t\t\t\"cheapest\",\n\t\t\t\tmakeOffering(karpv1.CapacityTypeReserved, true, withPrice(1.0), withCapacityReservationType(v1.CapacityReservationTypeCapacityBlock), withReservationID(\"cheapest\")),\n\t\t\t\tmakeOffering(karpv1.CapacityTypeReserved, true, withPrice(2.0), withCapacityReservationType(v1.CapacityReservationTypeCapacityBlock), withReservationID(\"expensive\")),\n\t\t\t),\n\t\t\tEntry(\n\t\t\t\t\"should not select unavailable offerings\",\n\t\t\t\t\"cheapest-available\",\n\t\t\t\tmakeOffering(karpv1.CapacityTypeReserved, false, withPrice(1.0), withCapacityReservationType(v1.CapacityReservationTypeCapacityBlock), withReservationID(\"cheapest\")),\n\t\t\t\tmakeOffering(karpv1.CapacityTypeReserved, true, withPrice(1.5), withCapacityReservationType(v1.CapacityReservationTypeCapacityBlock), withReservationID(\"cheapest-available\")),\n\t\t\t\tmakeOffering(karpv1.CapacityTypeReserved, true, withPrice(2.0), withCapacityReservationType(v1.CapacityReservationTypeCapacityBlock), withReservationID(\"expensive\")),\n\t\t\t),\n\t\t\tEntry(\n\t\t\t\t\"should not select incompatible offerings\",\n\t\t\t\t\"cheapest-compatible\",\n\t\t\t\tmakeOffering(karpv1.CapacityTypeReserved, true, withPrice(1.0), withCapacityReservationType(v1.CapacityReservationTypeCapacityBlock), withZone(\"forbidden-zone\"), withReservationID(\"cheapest\")),\n\t\t\t\tmakeOffering(karpv1.CapacityTypeReserved, true, withPrice(1.5), withCapacityReservationType(v1.CapacityReservationTypeCapacityBlock), withReservationID(\"cheapest-compatible\")),\n\t\t\t\tmakeOffering(karpv1.CapacityTypeReserved, true, withPrice(2.0), withCapacityReservationType(v1.CapacityReservationTypeCapacityBlock), withReservationID(\"expensive\")),\n\t\t\t),\n\t\t)\n\t\tDescribeTable(\n\t\t\t\"shouldn't filter instance types when the capacity reservation type is not capacity-block\",\n\t\t\tfunc(crt v1.CapacityReservationType) {\n\t\t\t\tf := filter.CapacityBlockFilter(scheduling.NewRequirements(scheduling.NewRequirement(karpv1.CapacityTypeLabelKey, corev1.NodeSelectorOpExists)))\n\t\t\t\tkept, rejected := f.FilterReject([]*cloudprovider.InstanceType{\n\t\t\t\t\tmakeInstanceType(\"cheap-instance\", withOfferings(\n\t\t\t\t\t\tmakeOffering(karpv1.CapacityTypeReserved, true, withPrice(1.0), withCapacityReservationType(crt)),\n\t\t\t\t\t\tmakeOffering(karpv1.CapacityTypeReserved, true, withPrice(10.0), withCapacityReservationType(crt)),\n\t\t\t\t\t)),\n\t\t\t\t\tmakeInstanceType(\"expensive-instance\", withOfferings(\n\t\t\t\t\t\tmakeOffering(karpv1.CapacityTypeReserved, true, withPrice(2.0), withCapacityReservationType(crt)),\n\t\t\t\t\t\tmakeOffering(karpv1.CapacityTypeReserved, true, withPrice(10.0), withCapacityReservationType(crt)),\n\t\t\t\t\t)),\n\t\t\t\t})\n\t\t\t\texpectInstanceTypes(kept, \"cheap-instance\", \"expensive-instance\")\n\t\t\t\tExpect(rejected).To(BeEmpty())\n\t\t\t\tfor _, it := range kept {\n\t\t\t\t\tExpect(it.Offerings).To(HaveLen(2))\n\t\t\t\t}\n\t\t\t},\n\t\t\tlo.FilterMap(v1.CapacityReservationType(\"\").Values(), func(crt v1.CapacityReservationType, _ int) (TableEntry, bool) {\n\t\t\t\treturn Entry(fmt.Sprintf(\"when the capacity reservation type is %q\", string(crt)), crt), crt != v1.CapacityReservationTypeCapacityBlock\n\t\t\t}),\n\t\t)\n\t\tIt(\"shouldn't filter instance types when the requirements aren't compatible with capacity type reserved\", func() {\n\t\t\tf := filter.CapacityBlockFilter(scheduling.NewRequirements(scheduling.NewRequirement(karpv1.CapacityTypeLabelKey, corev1.NodeSelectorOpNotIn, karpv1.CapacityTypeReserved)))\n\t\t\tkept, rejected := f.FilterReject([]*cloudprovider.InstanceType{\n\t\t\t\tmakeInstanceType(\"cheap-instance\", withOfferings(\n\t\t\t\t\tmakeOffering(karpv1.CapacityTypeReserved, true, withPrice(1.0), withCapacityReservationType(v1.CapacityReservationTypeCapacityBlock)),\n\t\t\t\t\tmakeOffering(karpv1.CapacityTypeOnDemand, true, withPrice(1.0), withCapacityReservationType(v1.CapacityReservationTypeCapacityBlock)),\n\t\t\t\t)),\n\t\t\t\tmakeInstanceType(\"expensive-instance\", withOfferings(\n\t\t\t\t\tmakeOffering(karpv1.CapacityTypeReserved, true, withPrice(2.0), withCapacityReservationType(v1.CapacityReservationTypeCapacityBlock)),\n\t\t\t\t\tmakeOffering(karpv1.CapacityTypeOnDemand, true, withPrice(2.0), withCapacityReservationType(v1.CapacityReservationTypeCapacityBlock)),\n\t\t\t\t)),\n\t\t\t})\n\t\t\texpectInstanceTypes(kept, \"cheap-instance\", \"expensive-instance\")\n\t\t\tExpect(rejected).To(BeEmpty())\n\t\t\tfor _, it := range kept {\n\t\t\t\tExpect(it.Offerings).To(HaveLen(2))\n\t\t\t}\n\t\t})\n\t})\n\n\tContext(\"ReservedOfferingFilter\", func() {\n\t\tvar f filter.Filter\n\t\tBeforeEach(func() {\n\t\t\tf = filter.ReservedOfferingFilter(scheduling.NewRequirements(scheduling.NewRequirement(\n\t\t\t\tkarpv1.CapacityTypeLabelKey,\n\t\t\t\tcorev1.NodeSelectorOpExists,\n\t\t\t)))\n\t\t})\n\n\t\tIt(\"shouldn't filter instance types if there are no available reserved offerings\", func() {\n\t\t\tkept, rejected := f.FilterReject([]*cloudprovider.InstanceType{\n\t\t\t\tmakeInstanceType(\"non-reserved-instance\", withOfferings(\n\t\t\t\t\tmakeOffering(karpv1.CapacityTypeOnDemand, true),\n\t\t\t\t\tmakeOffering(karpv1.CapacityTypeSpot, true),\n\t\t\t\t)),\n\t\t\t\tmakeInstanceType(\"reserved-instance\", withOfferings(\n\t\t\t\t\tmakeOffering(karpv1.CapacityTypeOnDemand, true),\n\t\t\t\t\tmakeOffering(karpv1.CapacityTypeSpot, true),\n\t\t\t\t\tmakeOffering(karpv1.CapacityTypeReserved, false),\n\t\t\t\t)),\n\t\t\t})\n\t\t\texpectInstanceTypes(kept, \"non-reserved-instance\", \"reserved-instance\")\n\t\t\tExpect(rejected).To(BeEmpty())\n\t\t})\n\t\tIt(\"should only include one reserved offering per instance pool\", func() {\n\t\t\tkept, rejected := f.FilterReject([]*cloudprovider.InstanceType{\n\t\t\t\tmakeInstanceType(\"non-reserved-instance\", withOfferings(\n\t\t\t\t\tmakeOffering(karpv1.CapacityTypeOnDemand, true),\n\t\t\t\t\tmakeOffering(karpv1.CapacityTypeSpot, true),\n\t\t\t\t)),\n\t\t\t\tmakeInstanceType(\"reserved-instance-a\", withOfferings(\n\t\t\t\t\tmakeOffering(karpv1.CapacityTypeOnDemand, true),\n\t\t\t\t\tmakeOffering(karpv1.CapacityTypeSpot, true),\n\t\t\t\t\t// NOTE: Being a little hacky by using the reservation ID as an indicator for if the reservation should be kept.\n\t\t\t\t\t// This makes an assumption that the reservation ID is not used by the underlying filter - this isn't actually\n\t\t\t\t\t// modeling the same reservation in multiple zones\n\t\t\t\t\tmakeOffering(karpv1.CapacityTypeReserved, true, withZone(\"1\"), withReservationID(\"kept\"), withReservationCapacity(5)),\n\t\t\t\t\tmakeOffering(karpv1.CapacityTypeReserved, true, withZone(\"2\"), withReservationID(\"kept\"), withReservationCapacity(6)),\n\t\t\t\t\tmakeOffering(karpv1.CapacityTypeReserved, true, withZone(\"2\"), withReservationID(\"rejected\"), withReservationCapacity(5)),\n\t\t\t\t)),\n\t\t\t\tmakeInstanceType(\"reserved-instance-b\", withOfferings(\n\t\t\t\t\tmakeOffering(karpv1.CapacityTypeOnDemand, true),\n\t\t\t\t\tmakeOffering(karpv1.CapacityTypeSpot, true),\n\t\t\t\t\t// We should keep the offering with less capacity since the one with greater capacity is unavailable\n\t\t\t\t\tmakeOffering(karpv1.CapacityTypeReserved, true, withZone(\"1\"), withReservationID(\"kept\"), withReservationCapacity(1)),\n\t\t\t\t\tmakeOffering(karpv1.CapacityTypeReserved, false, withZone(\"1\"), withReservationID(\"rejected\"), withReservationCapacity(2)),\n\t\t\t\t)),\n\t\t\t})\n\t\t\texpectInstanceTypes(kept, \"reserved-instance-a\", \"reserved-instance-b\")\n\t\t\texpectInstanceTypes(rejected, \"non-reserved-instance\")\n\t\t\tExpect(len(kept[0].Offerings)).To(Equal(2))\n\t\t\tfor _, it := range kept {\n\t\t\t\tfor _, o := range it.Offerings {\n\t\t\t\t\tExpect(o.ReservationID()).To(Equal(\"kept\"))\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t\tIt(\"shouldn't filter instance types if the requirements are not compatible with reserved offerings\", func() {\n\t\t\tf = filter.ReservedOfferingFilter(scheduling.NewRequirements(scheduling.NewRequirement(\n\t\t\t\tkarpv1.CapacityTypeLabelKey,\n\t\t\t\tcorev1.NodeSelectorOpNotIn,\n\t\t\t\tkarpv1.CapacityTypeReserved,\n\t\t\t)))\n\t\t\tkept, rejected := f.FilterReject([]*cloudprovider.InstanceType{\n\t\t\t\tmakeInstanceType(\"non-reserved-instance\", withOfferings(\n\t\t\t\t\tmakeOffering(karpv1.CapacityTypeOnDemand, true),\n\t\t\t\t\tmakeOffering(karpv1.CapacityTypeSpot, true),\n\t\t\t\t)),\n\t\t\t\tmakeInstanceType(\"reserved-instance\", withOfferings(\n\t\t\t\t\tmakeOffering(karpv1.CapacityTypeOnDemand, true),\n\t\t\t\t\tmakeOffering(karpv1.CapacityTypeSpot, true),\n\t\t\t\t\tmakeOffering(karpv1.CapacityTypeReserved, true, withZone(\"1\")),\n\t\t\t\t)),\n\t\t\t})\n\t\t\texpectInstanceTypes(kept, \"non-reserved-instance\", \"reserved-instance\")\n\t\t\tExpect(rejected).To(BeEmpty())\n\t\t\tExpect(lo.Map(kept, func(it *cloudprovider.InstanceType, _ int) int {\n\t\t\t\treturn len(it.Offerings)\n\t\t\t})).To(ConsistOf(2, 3))\n\t\t})\n\t})\n\n\tContext(\"ExoticInstanceFilter\", func() {\n\t\tvar f filter.Filter\n\t\tBeforeEach(func() {\n\t\t\tf = filter.ExoticInstanceTypeFilter(scheduling.NewRequirements())\n\t\t})\n\n\t\tDescribeTable(\n\t\t\t\"should reject instance types with exotic resources\",\n\t\t\tfunc(resourceName corev1.ResourceName) {\n\t\t\t\tkept, rejected := f.FilterReject([]*cloudprovider.InstanceType{\n\t\t\t\t\tmakeInstanceType(\"generic-instance-type\"),\n\t\t\t\t\tmakeInstanceType(\"exotic-instance-type\", withResource(resourceName, resource.MustParse(\"1\"))),\n\t\t\t\t})\n\t\t\t\texpectInstanceTypes(kept, \"generic-instance-type\")\n\t\t\t\texpectInstanceTypes(rejected, \"exotic-instance-type\")\n\t\t\t},\n\t\t\tlo.Map(v1.WellKnownExoticResources.UnsortedList(), func(resource corev1.ResourceName, _ int) TableEntry {\n\t\t\t\treturn Entry(string(resource), resource)\n\t\t\t}),\n\t\t)\n\t\tDescribeTable(\n\t\t\t\"should not reject instance types with normal resources\",\n\t\t\tfunc(resourceName corev1.ResourceName) {\n\t\t\t\tkept, rejected := f.FilterReject([]*cloudprovider.InstanceType{\n\t\t\t\t\tmakeInstanceType(\"generic-instance-type\", withResource(resourceName, resource.MustParse(\"1\"))),\n\t\t\t\t\tmakeInstanceType(\"exotic-instance-type\", withResource(v1.WellKnownExoticResources.UnsortedList()[0], resource.MustParse(\"1\"))),\n\t\t\t\t})\n\t\t\t\texpectInstanceTypes(kept, \"generic-instance-type\")\n\t\t\t\texpectInstanceTypes(rejected, \"exotic-instance-type\")\n\t\t\t},\n\t\t\tlo.Map(v1.WellKnownResources.Difference(v1.WellKnownExoticResources).UnsortedList(), func(resource corev1.ResourceName, _ int) TableEntry {\n\t\t\t\treturn Entry(string(resource), resource)\n\t\t\t}),\n\t\t)\n\t\tIt(\"should reject metal instance types\", func() {\n\t\t\tkept, rejected := f.FilterReject([]*cloudprovider.InstanceType{\n\t\t\t\tmakeInstanceType(\"generic-instance-type\"),\n\t\t\t\tmakeInstanceType(\"generic-instance-type-metal\", withRequirements(scheduling.NewRequirement(\n\t\t\t\t\tv1.LabelInstanceSize,\n\t\t\t\t\tcorev1.NodeSelectorOpIn,\n\t\t\t\t\t\"metal\",\n\t\t\t\t))),\n\t\t\t})\n\t\t\texpectInstanceTypes(kept, \"generic-instance-type\")\n\t\t\texpectInstanceTypes(rejected, \"generic-instance-type-metal\")\n\t\t})\n\t\tIt(\"should include metal instance types and those with exotic resources if there are no other options\", func() {\n\t\t\tkept, rejected := f.FilterReject([]*cloudprovider.InstanceType{\n\t\t\t\tmakeInstanceType(\"exotic-instance-type\", withResource(v1.WellKnownExoticResources.UnsortedList()[0], resource.MustParse(\"1\"))),\n\t\t\t\tmakeInstanceType(\"generic-instance-type-metal\", withRequirements(scheduling.NewRequirement(\n\t\t\t\t\tv1.LabelInstanceSize,\n\t\t\t\t\tcorev1.NodeSelectorOpIn,\n\t\t\t\t\t\"metal\",\n\t\t\t\t))),\n\t\t\t})\n\t\t\texpectInstanceTypes(kept, \"generic-instance-type-metal\", \"exotic-instance-type\")\n\t\t\tExpect(rejected).To(BeEmpty())\n\t\t})\n\t\tIt(\"should include instance types with exotic resources if minValues is set\", func() {\n\t\t\tf = filter.ExoticInstanceTypeFilter(scheduling.NewRequirements(scheduling.NewRequirementWithFlexibility(\n\t\t\t\tcorev1.LabelInstanceTypeStable,\n\t\t\t\tcorev1.NodeSelectorOpExists,\n\t\t\t\tlo.ToPtr(2),\n\t\t\t)))\n\t\t\tkept, rejected := f.FilterReject([]*cloudprovider.InstanceType{\n\t\t\t\tmakeInstanceType(\"generic-instance-type\"),\n\t\t\t\tmakeInstanceType(\"exotic-instance-type\", withResource(v1.WellKnownExoticResources.UnsortedList()[0], resource.MustParse(\"1\"))),\n\t\t\t})\n\t\t\texpectInstanceTypes(kept, \"generic-instance-type\", \"exotic-instance-type\")\n\t\t\tExpect(rejected).To(BeEmpty())\n\t\t})\n\t})\n\n\tContext(\"SpotOfferingFilter\", func() {\n\t\tIt(\"should filter out expensive spot offerings while keeping instance types with remaining offerings\", func() {\n\t\t\tf := filter.SpotOfferingFilter(scheduling.NewRequirements(\n\t\t\t\tscheduling.NewRequirement(\n\t\t\t\t\tkarpv1.CapacityTypeLabelKey,\n\t\t\t\t\tcorev1.NodeSelectorOpExists,\n\t\t\t\t),\n\t\t\t\tscheduling.NewRequirement(\n\t\t\t\t\t\"test.karpenter.sh/tag\",\n\t\t\t\t\tcorev1.NodeSelectorOpExists,\n\t\t\t\t),\n\t\t\t))\n\t\t\tkept, rejected := f.FilterReject([]*cloudprovider.InstanceType{\n\t\t\t\t// On-demand instance should be kept with all offerings\n\t\t\t\tmakeInstanceType(\"od-instance\", withOfferings(\n\t\t\t\t\tmakeOffering(karpv1.CapacityTypeOnDemand, true, withPrice(5.0), withTag(\"kept\")), // cheapest od offering\n\t\t\t\t\tmakeOffering(karpv1.CapacityTypeOnDemand, true, withPrice(10.0), withTag(\"kept\")),\n\t\t\t\t)),\n\t\t\t\t// Instance with cheap spot offerings should be kept with all offerings\n\t\t\t\tmakeInstanceType(\"cheap-spot-instance\", withOfferings(\n\t\t\t\t\tmakeOffering(karpv1.CapacityTypeSpot, true, withPrice(1.0), withTag(\"kept\")),\n\t\t\t\t\tmakeOffering(karpv1.CapacityTypeSpot, true, withPrice(2.0), withTag(\"kept\")),\n\t\t\t\t)),\n\t\t\t\t// Instance with mixed spot offerings should be kept but expensive spot offering filtered out\n\t\t\t\tmakeInstanceType(\"mixed-spot-instance\", withOfferings(\n\t\t\t\t\tmakeOffering(karpv1.CapacityTypeSpot, true, withPrice(1.0), withTag(\"kept\")),\n\t\t\t\t\tmakeOffering(karpv1.CapacityTypeSpot, true, withPrice(10.0), withTag(\"rejected\")), // should be filtered\n\t\t\t\t)),\n\t\t\t})\n\t\t\texpectInstanceTypes(kept, \"od-instance\", \"cheap-spot-instance\", \"mixed-spot-instance\")\n\t\t\tExpect(rejected).To(BeEmpty())\n\t\t\tExpect(lo.Map(kept, func(it *cloudprovider.InstanceType, _ int) int {\n\t\t\t\treturn len(it.Offerings)\n\t\t\t})).To(ConsistOf(2, 2, 1))\n\t\t\t// Check that all kept offerings have tag=\"kept\"\n\t\t\tfor _, it := range kept {\n\t\t\t\tfor _, o := range it.Offerings {\n\t\t\t\t\tExpect(o.Requirements.Get(\"test.karpenter.sh/tag\").Any()).To(Equal(\"kept\"))\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t\tIt(\"should reject instance types with no remaining offerings after filtering\", func() {\n\t\t\tf := filter.SpotOfferingFilter(scheduling.NewRequirements(\n\t\t\t\tscheduling.NewRequirement(\n\t\t\t\t\tkarpv1.CapacityTypeLabelKey,\n\t\t\t\t\tcorev1.NodeSelectorOpExists,\n\t\t\t\t),\n\t\t\t\tscheduling.NewRequirement(\n\t\t\t\t\t\"test.karpenter.sh/tag\",\n\t\t\t\t\tcorev1.NodeSelectorOpExists,\n\t\t\t\t),\n\t\t\t))\n\t\t\tkept, rejected := f.FilterReject([]*cloudprovider.InstanceType{\n\t\t\t\tmakeInstanceType(\"od-instance\", withOfferings(\n\t\t\t\t\tmakeOffering(karpv1.CapacityTypeOnDemand, true, withPrice(5.0), withTag(\"kept\")),\n\t\t\t\t)),\n\t\t\t\t// Instance with only expensive spot offerings should be rejected\n\t\t\t\tmakeInstanceType(\"expensive-spot-instance\", withOfferings(\n\t\t\t\t\tmakeOffering(karpv1.CapacityTypeSpot, true, withPrice(10.0), withTag(\"kept\")),\n\t\t\t\t\tmakeOffering(karpv1.CapacityTypeSpot, true, withPrice(15.0), withTag(\"kept\")),\n\t\t\t\t)),\n\t\t\t})\n\t\t\texpectInstanceTypes(kept, \"od-instance\")\n\t\t\texpectInstanceTypes(rejected, \"expensive-spot-instance\")\n\t\t\tExpect(kept[0].Offerings).To(HaveLen(1))\n\t\t\tfor _, o := range kept[0].Offerings {\n\t\t\t\tExpect(o.Requirements.Get(\"test.karpenter.sh/tag\").Any()).To(Equal(\"kept\"))\n\t\t\t}\n\t\t})\n\t\tIt(\"should not filter when no on-demand offerings exist\", func() {\n\t\t\tf := filter.SpotOfferingFilter(scheduling.NewRequirements(\n\t\t\t\tscheduling.NewRequirement(\n\t\t\t\t\tkarpv1.CapacityTypeLabelKey,\n\t\t\t\t\tcorev1.NodeSelectorOpExists,\n\t\t\t\t),\n\t\t\t\tscheduling.NewRequirement(\n\t\t\t\t\t\"test.karpenter.sh/tag\",\n\t\t\t\t\tcorev1.NodeSelectorOpExists,\n\t\t\t\t),\n\t\t\t))\n\t\t\tkept, rejected := f.FilterReject([]*cloudprovider.InstanceType{\n\t\t\t\tmakeInstanceType(\"spot-instance\", withOfferings(\n\t\t\t\t\tmakeOffering(karpv1.CapacityTypeSpot, true, withPrice(10.0), withTag(\"kept\")),\n\t\t\t\t)),\n\t\t\t})\n\t\t\texpectInstanceTypes(kept, \"spot-instance\")\n\t\t\tExpect(rejected).To(BeEmpty())\n\t\t\tExpect(kept[0].Offerings).To(HaveLen(1))\n\t\t\tfor _, o := range kept[0].Offerings {\n\t\t\t\tExpect(o.Requirements.Get(\"test.karpenter.sh/tag\").Any()).To(Equal(\"kept\"))\n\t\t\t}\n\t\t})\n\t\tIt(\"should not filter when requirements don't support both spot and on-demand\", func() {\n\t\t\tf := filter.SpotOfferingFilter(scheduling.NewRequirements(\n\t\t\t\tscheduling.NewRequirement(\n\t\t\t\t\tkarpv1.CapacityTypeLabelKey,\n\t\t\t\t\tcorev1.NodeSelectorOpIn,\n\t\t\t\t\tkarpv1.CapacityTypeSpot,\n\t\t\t\t),\n\t\t\t\tscheduling.NewRequirement(\n\t\t\t\t\t\"test.karpenter.sh/tag\",\n\t\t\t\t\tcorev1.NodeSelectorOpExists,\n\t\t\t\t),\n\t\t\t))\n\t\t\tkept, rejected := f.FilterReject([]*cloudprovider.InstanceType{\n\t\t\t\tmakeInstanceType(\"spot-instance\", withOfferings(\n\t\t\t\t\tmakeOffering(karpv1.CapacityTypeSpot, true, withPrice(10.0), withTag(\"kept\")),\n\t\t\t\t)),\n\t\t\t})\n\t\t\texpectInstanceTypes(kept, \"spot-instance\")\n\t\t\tExpect(rejected).To(BeEmpty())\n\t\t\tExpect(kept[0].Offerings).To(HaveLen(1))\n\t\t\tfor _, o := range kept[0].Offerings {\n\t\t\t\tExpect(o.Requirements.Get(\"test.karpenter.sh/tag\").Any()).To(Equal(\"kept\"))\n\t\t\t}\n\t\t})\n\t\tIt(\"should not filter when minValues is set\", func() {\n\t\t\tf := filter.SpotOfferingFilter(scheduling.NewRequirements(\n\t\t\t\tscheduling.NewRequirement(\n\t\t\t\t\tkarpv1.CapacityTypeLabelKey,\n\t\t\t\t\tcorev1.NodeSelectorOpExists,\n\t\t\t\t),\n\t\t\t\tscheduling.NewRequirement(\n\t\t\t\t\t\"test.karpenter.sh/tag\",\n\t\t\t\t\tcorev1.NodeSelectorOpExists,\n\t\t\t\t),\n\t\t\t\tscheduling.NewRequirementWithFlexibility(\n\t\t\t\t\tcorev1.LabelInstanceTypeStable,\n\t\t\t\t\tcorev1.NodeSelectorOpExists,\n\t\t\t\t\tlo.ToPtr(2),\n\t\t\t\t),\n\t\t\t))\n\t\t\tkept, rejected := f.FilterReject([]*cloudprovider.InstanceType{\n\t\t\t\tmakeInstanceType(\"od-instance\", withOfferings(\n\t\t\t\t\tmakeOffering(karpv1.CapacityTypeOnDemand, true, withPrice(5.0), withTag(\"kept\")),\n\t\t\t\t)),\n\t\t\t\tmakeInstanceType(\"expensive-spot-instance\", withOfferings(\n\t\t\t\t\tmakeOffering(karpv1.CapacityTypeSpot, true, withPrice(10.0), withTag(\"kept\")),\n\t\t\t\t)),\n\t\t\t})\n\t\t\texpectInstanceTypes(kept, \"od-instance\", \"expensive-spot-instance\")\n\t\t\tExpect(rejected).To(BeEmpty())\n\t\t\tExpect(lo.Map(kept, func(it *cloudprovider.InstanceType, _ int) int {\n\t\t\t\treturn len(it.Offerings)\n\t\t\t})).To(ConsistOf(1, 1))\n\t\t\tfor _, it := range kept {\n\t\t\t\tfor _, o := range it.Offerings {\n\t\t\t\t\tExpect(o.Requirements.Get(\"test.karpenter.sh/tag\").Any()).To(Equal(\"kept\"))\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t})\n})\n\nfunc expectInstanceTypes(instanceTypes []*cloudprovider.InstanceType, names ...string) {\n\tGinkgoHelper()\n\tresolvedNames := lo.Map(instanceTypes, func(it *cloudprovider.InstanceType, _ int) string {\n\t\treturn it.Name\n\t})\n\tExpect(resolvedNames).To(ConsistOf(lo.Map(names, func(n string, _ int) any { return n })...))\n}\n\ntype mockInstanceTypeOptions = option.Function[cloudprovider.InstanceType]\n\nfunc withRequirements(reqs ...*scheduling.Requirement) mockInstanceTypeOptions {\n\treturn func(it *cloudprovider.InstanceType) {\n\t\tif it.Requirements == nil {\n\t\t\tit.Requirements = scheduling.NewRequirements()\n\t\t}\n\t\tit.Requirements.Add(reqs...)\n\t}\n}\n\nfunc withResource(name corev1.ResourceName, quantity resource.Quantity) mockInstanceTypeOptions {\n\treturn func(it *cloudprovider.InstanceType) {\n\t\tif it.Capacity == nil {\n\t\t\tit.Capacity = corev1.ResourceList{}\n\t\t}\n\t\tit.Capacity[name] = quantity\n\t}\n}\n\nfunc withOfferings(offerings ...*cloudprovider.Offering) mockInstanceTypeOptions {\n\treturn func(it *cloudprovider.InstanceType) {\n\t\tit.Offerings = offerings\n\t}\n}\n\nfunc makeInstanceType(name string, opts ...mockInstanceTypeOptions) *cloudprovider.InstanceType {\n\tinstanceType := option.Resolve(opts...)\n\trand.Shuffle(len(instanceType.Offerings), func(i, j int) {\n\t\tinstanceType.Offerings[i], instanceType.Offerings[j] = instanceType.Offerings[j], instanceType.Offerings[i]\n\t})\n\tinstanceType.Name = name\n\tinstanceType.Overhead = &cloudprovider.InstanceTypeOverhead{\n\t\tKubeReserved:      corev1.ResourceList{},\n\t\tSystemReserved:    corev1.ResourceList{},\n\t\tEvictionThreshold: corev1.ResourceList{},\n\t}\n\treturn instanceType\n}\n\ntype mockOfferingOptions = option.Function[cloudprovider.Offering]\n\nfunc withReservationCapacity(capacity int) mockOfferingOptions {\n\treturn func(o *cloudprovider.Offering) {\n\t\to.ReservationCapacity = capacity\n\t}\n}\n\nfunc withReservationID(id string) mockOfferingOptions {\n\treturn func(o *cloudprovider.Offering) {\n\t\tif o.Requirements == nil {\n\t\t\to.Requirements = scheduling.NewRequirements()\n\t\t}\n\t\to.Requirements.Add(scheduling.NewRequirement(\n\t\t\tv1.LabelCapacityReservationID,\n\t\t\tcorev1.NodeSelectorOpIn,\n\t\t\tid,\n\t\t))\n\t}\n}\n\nfunc withCapacityReservationType(crt v1.CapacityReservationType) mockOfferingOptions {\n\treturn func(o *cloudprovider.Offering) {\n\t\tif o.Requirements == nil {\n\t\t\to.Requirements = scheduling.NewRequirements()\n\t\t}\n\t\to.Requirements.Add(scheduling.NewRequirement(\n\t\t\tv1.LabelCapacityReservationType,\n\t\t\tcorev1.NodeSelectorOpIn,\n\t\t\tstring(crt),\n\t\t))\n\t}\n}\n\nfunc withZone(zone string) mockOfferingOptions {\n\treturn func(o *cloudprovider.Offering) {\n\t\tif o.Requirements == nil {\n\t\t\to.Requirements = scheduling.NewRequirements()\n\t\t}\n\t\to.Requirements.Add(scheduling.NewRequirement(\n\t\t\tcorev1.LabelTopologyZone,\n\t\t\tcorev1.NodeSelectorOpIn,\n\t\t\tzone,\n\t\t))\n\t}\n}\n\nfunc withPrice(price float64) mockOfferingOptions {\n\treturn func(o *cloudprovider.Offering) {\n\t\to.Price = price\n\t}\n}\n\nfunc withTag(tag string) mockOfferingOptions {\n\treturn func(o *cloudprovider.Offering) {\n\t\tif o.Requirements == nil {\n\t\t\to.Requirements = scheduling.NewRequirements()\n\t\t}\n\t\to.Requirements.Add(scheduling.NewRequirement(\n\t\t\t\"test.karpenter.sh/tag\",\n\t\t\tcorev1.NodeSelectorOpIn,\n\t\t\ttag,\n\t\t))\n\t}\n}\n\nfunc makeOffering(capacityType string, available bool, opts ...mockOfferingOptions) *cloudprovider.Offering {\n\toffering := option.Resolve(opts...)\n\tif offering.Requirements == nil {\n\t\toffering.Requirements = scheduling.NewRequirements()\n\t}\n\toffering.Requirements.Add(scheduling.NewRequirement(\n\t\tkarpv1.CapacityTypeLabelKey,\n\t\tcorev1.NodeSelectorOpIn,\n\t\tcapacityType,\n\t))\n\toffering.Available = available\n\treturn offering\n}\n\nfunc withInterruptible(interruptible bool) mockOfferingOptions {\n\treturn func(o *cloudprovider.Offering) {\n\t\tif o.Requirements == nil {\n\t\t\to.Requirements = scheduling.NewRequirements()\n\t\t}\n\t\to.Requirements.Add(scheduling.NewRequirement(\n\t\t\tv1.LabelCapacityReservationInterruptible,\n\t\t\tcorev1.NodeSelectorOpIn,\n\t\t\tstrconv.FormatBool(interruptible),\n\t\t))\n\t}\n}\n"
  },
  {
    "path": "pkg/providers/instance/instance.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage instance\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\t\"sort\"\n\n\tawsmiddleware \"github.com/aws/aws-sdk-go-v2/aws/middleware\"\n\t\"github.com/awslabs/operatorpkg/aws/middleware\"\n\t\"github.com/awslabs/operatorpkg/option\"\n\t\"github.com/awslabs/operatorpkg/serrors\"\n\t\"sigs.k8s.io/karpenter/pkg/events\"\n\n\tsdk \"github.com/aws/karpenter-provider-aws/pkg/aws\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/utils\"\n\n\t\"github.com/aws/aws-sdk-go-v2/aws\"\n\t\"github.com/aws/aws-sdk-go-v2/service/ec2\"\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\t\"github.com/samber/lo\"\n\t\"go.uber.org/multierr\"\n\tcorev1 \"k8s.io/api/core/v1\"\n\t\"k8s.io/apimachinery/pkg/util/sets\"\n\t\"sigs.k8s.io/controller-runtime/pkg/log\"\n\n\tkarpv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n\t\"sigs.k8s.io/karpenter/pkg/apis/v1alpha1\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/batcher\"\n\tawscache \"github.com/aws/karpenter-provider-aws/pkg/cache\"\n\tawserrors \"github.com/aws/karpenter-provider-aws/pkg/errors\"\n\tkarpopts \"github.com/aws/karpenter-provider-aws/pkg/operator/options\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/capacityreservation\"\n\tinstancefilter \"github.com/aws/karpenter-provider-aws/pkg/providers/instance/filter\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/launchtemplate\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/subnet\"\n\n\t\"github.com/patrickmn/go-cache\"\n\t\"sigs.k8s.io/karpenter/pkg/cloudprovider\"\n\t\"sigs.k8s.io/karpenter/pkg/scheduling\"\n)\n\nconst (\n\t// falling back to on-demand without flexibility risks insufficient capacity errors\n\tinstanceTypeFlexibilityThreshold = 5\n\t// The maximum number of instance types to include in a Create request\n\tmaxInstanceTypes = 60\n)\n\nvar (\n\tinstanceStateFilter = ec2types.Filter{\n\t\tName: aws.String(\"instance-state-name\"),\n\t\tValues: []string{\n\t\t\tstring(ec2types.InstanceStateNamePending),\n\t\t\tstring(ec2types.InstanceStateNameRunning),\n\t\t\tstring(ec2types.InstanceStateNameStopping),\n\t\t\tstring(ec2types.InstanceStateNameStopped),\n\t\t\tstring(ec2types.InstanceStateNameShuttingDown),\n\t\t},\n\t}\n)\n\ntype Provider interface {\n\tCreate(context.Context, *v1.EC2NodeClass, *karpv1.NodeClaim, map[string]string, []*cloudprovider.InstanceType) (*Instance, error)\n\tGet(context.Context, string, ...Options) (*Instance, error)\n\tList(context.Context) ([]*Instance, error)\n\tDelete(context.Context, string) error\n\tCreateTags(context.Context, string, map[string]string) error\n}\n\ntype options struct {\n\tSkipCache bool\n}\n\ntype Options = option.Function[options]\n\nvar SkipCache = func(opts *options) {\n\topts.SkipCache = true\n}\n\ntype DefaultProvider struct {\n\tregion                      string\n\trecorder                    events.Recorder\n\tec2api                      sdk.EC2API\n\tunavailableOfferings        *awscache.UnavailableOfferings\n\tsubnetProvider              subnet.Provider\n\tlaunchTemplateProvider      launchtemplate.Provider\n\tec2Batcher                  *batcher.EC2API\n\tcapacityReservationProvider capacityreservation.Provider\n\tinstanceCache               *cache.Cache\n}\n\nfunc NewDefaultProvider(\n\tctx context.Context,\n\tregion string,\n\trecorder events.Recorder,\n\tec2api sdk.EC2API,\n\tunavailableOfferings *awscache.UnavailableOfferings,\n\tsubnetProvider subnet.Provider,\n\tlaunchTemplateProvider launchtemplate.Provider,\n\tcapacityReservationProvider capacityreservation.Provider,\n\tinstanceCache *cache.Cache,\n) *DefaultProvider {\n\treturn &DefaultProvider{\n\t\tregion:                      region,\n\t\trecorder:                    recorder,\n\t\tec2api:                      ec2api,\n\t\tunavailableOfferings:        unavailableOfferings,\n\t\tsubnetProvider:              subnetProvider,\n\t\tlaunchTemplateProvider:      launchTemplateProvider,\n\t\tec2Batcher:                  batcher.EC2(ctx, ec2api),\n\t\tcapacityReservationProvider: capacityReservationProvider,\n\t\tinstanceCache:               instanceCache,\n\t}\n}\n\nfunc (p *DefaultProvider) Create(ctx context.Context, nodeClass *v1.EC2NodeClass, nodeClaim *karpv1.NodeClaim, tags map[string]string, instanceTypes []*cloudprovider.InstanceType) (*Instance, error) {\n\tinstanceTypes, err := p.filterInstanceTypes(ctx, instanceTypes, nodeClaim)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tcapacityType := getCapacityType(nodeClaim, instanceTypes)\n\ttenancyType := getTenancyType(nodeClaim)\n\tfleetInstance, err := p.launchInstance(ctx, nodeClass, nodeClaim, capacityType, instanceTypes, tags, tenancyType)\n\tif awserrors.IsLaunchTemplateNotFound(err) {\n\t\t// retry once if launch template is not found. This allows karpenter to generate a new LT if the\n\t\t// cache was out-of-sync on the first try\n\t\tfleetInstance, err = p.launchInstance(ctx, nodeClass, nodeClaim, capacityType, instanceTypes, tags, tenancyType)\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar opts []NewInstanceFromFleetOpts\n\tif capacityType == karpv1.CapacityTypeReserved {\n\t\tcapacityReservationDetails := p.getCapacityReservationDetailsForInstance(\n\t\t\tstring(fleetInstance.InstanceType),\n\t\t\t*fleetInstance.LaunchTemplateAndOverrides.Overrides.AvailabilityZone,\n\t\t\tinstanceTypes,\n\t\t)\n\t\topts = append(opts, WithCapacityReservationDetails(capacityReservationDetails))\n\t}\n\tif lo.Contains(lo.Keys(nodeClaim.Spec.Resources.Requests), v1.ResourceEFA) {\n\t\topts = append(opts, WithEFAEnabled())\n\t}\n\treturn NewInstanceFromFleet(\n\t\tfleetInstance,\n\t\tcapacityType,\n\t\ttags,\n\t\ttenancyType,\n\t\topts...,\n\t), nil\n}\n\nfunc (p *DefaultProvider) Get(ctx context.Context, id string, opts ...Options) (*Instance, error) {\n\tskipCache := option.Resolve(opts...).SkipCache\n\tif !skipCache {\n\t\tif i, ok := p.instanceCache.Get(id); ok {\n\t\t\treturn i.(*Instance), nil\n\t\t}\n\t}\n\tout, err := p.ec2Batcher.DescribeInstances(ctx, &ec2.DescribeInstancesInput{\n\t\tInstanceIds: []string{id},\n\t\tFilters:     []ec2types.Filter{instanceStateFilter},\n\t})\n\tif awserrors.IsNotFound(err) {\n\t\tp.instanceCache.Delete(id)\n\t\treturn nil, cloudprovider.NewNodeClaimNotFoundError(err)\n\t}\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"failed to describe ec2 instances, %w\", err)\n\t}\n\tinstances, err := instancesFromOutput(ctx, out)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"getting instances from output, %w\", err)\n\t}\n\tif len(instances) != 1 {\n\t\treturn nil, fmt.Errorf(\"expected a single instance, %w\", err)\n\t}\n\tp.instanceCache.SetDefault(id, instances[0])\n\treturn instances[0], nil\n}\n\nfunc (p *DefaultProvider) List(ctx context.Context) ([]*Instance, error) {\n\tvar out = &ec2.DescribeInstancesOutput{}\n\n\tpaginator := ec2.NewDescribeInstancesPaginator(p.ec2api, &ec2.DescribeInstancesInput{\n\t\tFilters: []ec2types.Filter{\n\t\t\t{\n\t\t\t\tName:   aws.String(\"tag-key\"),\n\t\t\t\tValues: []string{v1.NodePoolTagKey},\n\t\t\t},\n\t\t\t{\n\t\t\t\tName:   aws.String(\"tag-key\"),\n\t\t\t\tValues: []string{v1.NodeClassTagKey},\n\t\t\t},\n\t\t\t{\n\t\t\t\tName:   aws.String(fmt.Sprintf(\"tag:%s\", v1.EKSClusterNameTagKey)),\n\t\t\t\tValues: []string{karpopts.FromContext(ctx).ClusterName},\n\t\t\t},\n\t\t\tinstanceStateFilter,\n\t\t},\n\t\t// MaxResults for DescribeInstances is capped at 1000\n\t\tMaxResults: lo.ToPtr[int32](1000),\n\t})\n\n\tfor paginator.HasMorePages() {\n\t\tpage, err := paginator.NextPage(ctx)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"describing ec2 instances, %w\", err)\n\t\t}\n\t\tout.Reservations = append(out.Reservations, page.Reservations...)\n\t}\n\tinstances, err := instancesFromOutput(ctx, out)\n\tfor _, it := range instances {\n\t\tp.instanceCache.SetDefault(it.ID, it)\n\t}\n\treturn instances, cloudprovider.IgnoreNodeClaimNotFoundError(err)\n}\n\nfunc (p *DefaultProvider) Delete(ctx context.Context, id string) error {\n\tout, err := p.Get(ctx, id, SkipCache)\n\tif err != nil {\n\t\treturn err\n\t}\n\t// Check if the instance is already shutting-down to reduce the number of terminate-instance calls we make thereby\n\t// reducing our overall QPS. Due to EC2's eventual consistency model, the result of the terminate-instance or\n\t// describe-instance call may return a not found error even when the instance is not terminated -\n\t// https://docs.aws.amazon.com/ec2/latest/devguide/eventual-consistency.html. In this case, the instance will get\n\t// picked up by the garbage collection controller and will be cleaned up eventually.\n\tif out.State != ec2types.InstanceStateNameShuttingDown {\n\t\tif _, err := p.ec2Batcher.TerminateInstances(ctx, &ec2.TerminateInstancesInput{\n\t\t\tInstanceIds: []string{id},\n\t\t}); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (p *DefaultProvider) CreateTags(ctx context.Context, id string, tags map[string]string) error {\n\tec2Tags := lo.MapToSlice(tags, func(key, value string) ec2types.Tag {\n\t\treturn ec2types.Tag{Key: aws.String(key), Value: aws.String(value)}\n\t})\n\tif _, err := p.ec2api.CreateTags(ctx, &ec2.CreateTagsInput{\n\t\tResources: []string{id},\n\t\tTags:      ec2Tags,\n\t}); err != nil {\n\t\tif awserrors.IsNotFound(err) {\n\t\t\treturn cloudprovider.NewNodeClaimNotFoundError(fmt.Errorf(\"tagging instance, %w\", err))\n\t\t}\n\t\treturn fmt.Errorf(\"tagging instance, %w\", err)\n\t}\n\treturn nil\n}\n\nfunc (p *DefaultProvider) filterInstanceTypes(ctx context.Context, instanceTypes []*cloudprovider.InstanceType, nodeClaim *karpv1.NodeClaim) ([]*cloudprovider.InstanceType, error) {\n\trejectedInstanceTypes := map[string][]*cloudprovider.InstanceType{}\n\treqs := scheduling.NewNodeSelectorRequirementsWithMinValues(nodeClaim.Spec.Requirements...)\n\tfor _, filter := range []instancefilter.Filter{\n\t\tinstancefilter.CompatibleAvailableFilter(reqs, nodeClaim.Spec.Resources.Requests),\n\t\tinstancefilter.CapacityReservationTypeFilter(reqs),\n\t\tinstancefilter.CapacityBlockFilter(reqs),\n\t\tinstancefilter.ReservedOfferingFilter(reqs),\n\t\tinstancefilter.ExoticInstanceTypeFilter(reqs),\n\t\tinstancefilter.SpotOfferingFilter(reqs),\n\t} {\n\t\tremaining, rejected := filter.FilterReject(instanceTypes)\n\t\tif len(remaining) == 0 {\n\t\t\treturn nil, cloudprovider.NewInsufficientCapacityError(fmt.Errorf(\"all requested instance types were unavailable during launch\"))\n\t\t}\n\t\tif len(rejected) != 0 && filter.Name() != \"compatible-available-filter\" {\n\t\t\trejectedInstanceTypes[filter.Name()] = rejected\n\t\t}\n\t\tinstanceTypes = remaining\n\t}\n\tfor filterName, its := range rejectedInstanceTypes {\n\t\tlog.FromContext(ctx).WithValues(\"filter\", filterName, \"instance-types\", utils.PrettySlice(lo.Map(its, func(i *cloudprovider.InstanceType, _ int) string { return i.Name }), 5)).V(1).Info(\"filtered out instance types from launch\")\n\t}\n\tinstanceTypes, err := cloudprovider.InstanceTypes(instanceTypes).Truncate(ctx, reqs, maxInstanceTypes)\n\tif err != nil {\n\t\treturn nil, cloudprovider.NewCreateError(fmt.Errorf(\"truncating instance types, %w\", err), \"InstanceTypeFilteringFailed\", \"Error truncating instance types based on the passed-in requirements\")\n\t}\n\treturn instanceTypes, nil\n}\n\n//nolint:gocyclo\nfunc (p *DefaultProvider) launchInstance(\n\tctx context.Context,\n\tnodeClass *v1.EC2NodeClass,\n\tnodeClaim *karpv1.NodeClaim,\n\tcapacityType string,\n\tinstanceTypes []*cloudprovider.InstanceType,\n\ttags map[string]string,\n\ttenancyType string,\n) (ec2types.CreateFleetInstance, error) {\n\tzonalSubnets, err := p.subnetProvider.ZonalSubnetsForLaunch(ctx, nodeClass, instanceTypes, capacityType)\n\tif err != nil {\n\t\treturn ec2types.CreateFleetInstance{}, cloudprovider.NewCreateError(fmt.Errorf(\"getting subnets, %w\", err), \"SubnetResolutionFailed\", \"Error getting subnets\")\n\t}\n\n\t// Get Launch Template Configs, which may differ due to GPU or Architecture requirements\n\tlaunchTemplateConfigs, err := p.getLaunchTemplateConfigs(ctx, nodeClass, nodeClaim, instanceTypes, zonalSubnets, capacityType, tags, tenancyType)\n\tif err != nil {\n\t\treason, message := awserrors.ToReasonMessage(err)\n\t\treturn ec2types.CreateFleetInstance{}, cloudprovider.NewCreateError(fmt.Errorf(\"getting launch template configs, %w\", err), reason, fmt.Sprintf(\"Error getting launch template configs: %s\", message))\n\t}\n\tif err := p.checkODFallback(nodeClaim, instanceTypes, launchTemplateConfigs); err != nil {\n\t\tlog.FromContext(ctx).Error(err, \"failed while checking on-demand fallback\")\n\t}\n\n\tcfiBuilder := NewCreateFleetInputBuilder(capacityType, tags, launchTemplateConfigs)\n\tif _, ok := nodeClaim.Annotations[v1alpha1.PriceOverlayAppliedAnnotationKey]; ok {\n\t\tcfiBuilder.WithOverlay()\n\t}\n\tif nodeClass.Spec.Context != nil && nodeClaim.Annotations[karpv1.NodeClaimMinValuesRelaxedAnnotationKey] != \"true\" {\n\t\tcfiBuilder.WithContextID(*nodeClass.Spec.Context)\n\t}\n\tif capacityType == karpv1.CapacityTypeReserved {\n\t\tcrt := getCapacityReservationType(instanceTypes)\n\t\tif crt == nil {\n\t\t\tpanic(fmt.Sprintf(\"%s label isn't set for instance types in reserved launch\", v1.LabelCapacityReservationType))\n\t\t}\n\t\tcfiBuilder.WithCapacityReservationType(*crt, getCapacityReservationInterruptible(instanceTypes))\n\t}\n\tcreateFleetInput := cfiBuilder.Build()\n\n\tcreateFleetOutput, err := p.ec2Batcher.CreateFleet(ctx, createFleetInput)\n\tp.subnetProvider.UpdateInflightIPs(createFleetInput, createFleetOutput, instanceTypes, lo.Values(zonalSubnets), capacityType)\n\tif err != nil {\n\t\treason, message := awserrors.ToReasonMessage(err)\n\t\tif awserrors.IsLaunchTemplateNotFound(err) {\n\t\t\tfor _, lt := range launchTemplateConfigs {\n\t\t\t\tp.launchTemplateProvider.InvalidateCache(ctx, aws.ToString(lt.LaunchTemplateSpecification.LaunchTemplateName), aws.ToString(lt.LaunchTemplateSpecification.LaunchTemplateId))\n\t\t\t}\n\t\t\treturn ec2types.CreateFleetInstance{}, cloudprovider.NewCreateError(fmt.Errorf(\"launch templates not found when creating fleet request, %w\", err), reason, fmt.Sprintf(\"Launch templates not found when creating fleet request: %s\", message))\n\t\t}\n\t\treturn ec2types.CreateFleetInstance{}, cloudprovider.NewCreateError(fmt.Errorf(\"creating fleet request, %w\", err), reason, fmt.Sprintf(\"Error creating fleet request: %s\", message))\n\t}\n\tp.updateUnavailableOfferingsCache(ctx, createFleetOutput.Errors, capacityType, nodeClaim, instanceTypes, aws.ToString(createFleetOutput.FleetId))\n\tif len(createFleetOutput.Instances) == 0 || len(createFleetOutput.Instances[0].InstanceIds) == 0 {\n\t\trequestID, _ := awsmiddleware.GetRequestIDMetadata(createFleetOutput.ResultMetadata)\n\t\treturn ec2types.CreateFleetInstance{}, serrors.Wrap(\n\t\t\tcombineFleetErrors(createFleetOutput.Errors),\n\t\t\tmiddleware.AWSRequestIDLogKey, requestID,\n\t\t\tmiddleware.AWSOperationNameLogKey, \"CreateFleet\",\n\t\t\tmiddleware.AWSServiceNameLogKey, \"EC2\",\n\t\t\tmiddleware.AWSStatusCodeLogKey, 200,\n\t\t\tmiddleware.AWSErrorCodeLogKey, \"UnfulfillableCapacity\",\n\t\t)\n\t}\n\treturn createFleetOutput.Instances[0], nil\n}\n\nfunc (p *DefaultProvider) checkODFallback(nodeClaim *karpv1.NodeClaim, instanceTypes []*cloudprovider.InstanceType, launchTemplateConfigs []ec2types.FleetLaunchTemplateConfigRequest) error {\n\t// only evaluate for on-demand fallback if the capacity type for the request is OD and both OD and spot are allowed in requirements\n\tif getCapacityType(nodeClaim, instanceTypes) != karpv1.CapacityTypeOnDemand || !scheduling.NewNodeSelectorRequirementsWithMinValues(nodeClaim.Spec.Requirements...).Get(karpv1.CapacityTypeLabelKey).Has(karpv1.CapacityTypeSpot) {\n\t\treturn nil\n\t}\n\n\t// loop through the LT configs for currently considered instance types to get the flexibility count\n\tinstanceTypeZones := map[string]struct{}{}\n\tfor _, ltc := range launchTemplateConfigs {\n\t\tfor _, override := range ltc.Overrides {\n\t\t\tinstanceTypeZones[string(override.InstanceType)] = struct{}{}\n\t\t}\n\t}\n\tif len(instanceTypes) < instanceTypeFlexibilityThreshold {\n\t\treturn fmt.Errorf(\"at least %d instance types are recommended when flexible to spot but requesting on-demand, \"+\n\t\t\t\"the current provisioning request only has %d instance type options\", instanceTypeFlexibilityThreshold, len(instanceTypes))\n\t}\n\treturn nil\n}\n\nfunc (p *DefaultProvider) getLaunchTemplateConfigs(\n\tctx context.Context,\n\tnodeClass *v1.EC2NodeClass,\n\tnodeClaim *karpv1.NodeClaim,\n\tinstanceTypes []*cloudprovider.InstanceType,\n\tzonalSubnets map[string]*subnet.Subnet,\n\tcapacityType string,\n\ttags map[string]string,\n\ttenancyType string,\n) ([]ec2types.FleetLaunchTemplateConfigRequest, error) {\n\tvar launchTemplateConfigs []ec2types.FleetLaunchTemplateConfigRequest\n\tlaunchTemplates, err := p.launchTemplateProvider.EnsureAll(ctx, nodeClass, nodeClaim, instanceTypes, capacityType, tags, tenancyType)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"getting launch templates, %w\", err)\n\t}\n\trequirements := scheduling.NewNodeSelectorRequirementsWithMinValues(nodeClaim.Spec.Requirements...)\n\trequirements[karpv1.CapacityTypeLabelKey] = scheduling.NewRequirement(karpv1.CapacityTypeLabelKey, corev1.NodeSelectorOpIn, capacityType)\n\tfor _, launchTemplate := range launchTemplates {\n\t\tlaunchTemplateConfig := ec2types.FleetLaunchTemplateConfigRequest{\n\t\t\tOverrides: p.getOverrides(launchTemplate.InstanceTypes, zonalSubnets, requirements, launchTemplate.ImageID, launchTemplate.CapacityReservationID),\n\t\t\tLaunchTemplateSpecification: &ec2types.FleetLaunchTemplateSpecificationRequest{\n\t\t\t\tLaunchTemplateName: aws.String(launchTemplate.Name),\n\t\t\t\tVersion:            aws.String(\"$Latest\"),\n\t\t\t},\n\t\t}\n\t\tif len(launchTemplateConfig.Overrides) > 0 {\n\t\t\tlaunchTemplateConfigs = append(launchTemplateConfigs, launchTemplateConfig)\n\t\t}\n\t}\n\tif len(launchTemplateConfigs) == 0 {\n\t\treturn nil, fmt.Errorf(\"no capacity offerings are currently available given the constraints\")\n\t}\n\treturn launchTemplateConfigs, nil\n}\n\n// getOverrides creates and returns launch template overrides for the cross product of InstanceTypes and subnets (with subnets being constrained by\n// zones and the offerings in InstanceTypes)\nfunc (p *DefaultProvider) getOverrides(\n\tinstanceTypes []*cloudprovider.InstanceType,\n\tzonalSubnets map[string]*subnet.Subnet,\n\treqs scheduling.Requirements,\n\timage, capacityReservationID string,\n) []ec2types.FleetLaunchTemplateOverridesRequest {\n\t// Unwrap all the offerings to a flat slice that includes a pointer\n\t// to the parent instance type name\n\ttype offeringWithParentName struct {\n\t\t*cloudprovider.Offering\n\t\tparentInstanceTypeName ec2types.InstanceType\n\t}\n\tvar filteredOfferings []offeringWithParentName\n\tfor _, it := range instanceTypes {\n\t\tofs := it.Offerings.Available().Compatible(reqs)\n\t\t// If we are generating a launch template for a specific capacity reservation, we only want to include the offering\n\t\t// for that capacity reservation when generating overrides.\n\t\tif capacityReservationID != \"\" {\n\t\t\tofs = ofs.Compatible(scheduling.NewRequirements(scheduling.NewRequirement(\n\t\t\t\tcloudprovider.ReservationIDLabel,\n\t\t\t\tcorev1.NodeSelectorOpIn,\n\t\t\t\tcapacityReservationID,\n\t\t\t)))\n\t\t}\n\t\tfor _, o := range ofs {\n\t\t\tfilteredOfferings = append(filteredOfferings, offeringWithParentName{\n\t\t\t\tOffering:               o,\n\t\t\t\tparentInstanceTypeName: ec2types.InstanceType(it.Name),\n\t\t\t})\n\t\t}\n\t}\n\tvar overrides []ec2types.FleetLaunchTemplateOverridesRequest\n\tfor _, offering := range filteredOfferings {\n\t\tsubnet, ok := zonalSubnets[offering.Zone()]\n\t\tif !ok {\n\t\t\tcontinue\n\t\t}\n\t\toverrides = append(overrides, ec2types.FleetLaunchTemplateOverridesRequest{\n\t\t\tInstanceType: offering.parentInstanceTypeName,\n\t\t\tSubnetId:     lo.ToPtr(subnet.ID),\n\t\t\tImageId:      lo.ToPtr(image),\n\t\t\t// This is technically redundant, but is useful if we have to parse insufficient capacity errors from\n\t\t\t// CreateFleet so that we can figure out the zone rather than additional API calls to look up the subnet\n\t\t\tAvailabilityZone: lo.ToPtr(subnet.Zone),\n\t\t\t// Priority settings for offerings take effect only when node overlays are defined.\n\t\t\t// Allocation strategies will be applied in the following order:\n\t\t\t// 1. On-demand instances (prioritized)\n\t\t\t// 2. Capacity-optimized Spot instances\n\t\t\tPriority: lo.ToPtr(float64(offering.Price)),\n\t\t})\n\t}\n\treturn overrides\n}\n\n//nolint:gocyclo\nfunc (p *DefaultProvider) updateUnavailableOfferingsCache(\n\tctx context.Context,\n\terrs []ec2types.CreateFleetError,\n\tcapacityType string,\n\tnodeClaim *karpv1.NodeClaim,\n\tinstanceTypes []*cloudprovider.InstanceType,\n\tfleetID string,\n) {\n\tfor _, err := range errs {\n\t\tzone := lo.FromPtr(err.LaunchTemplateAndOverrides.Overrides.AvailabilityZone)\n\t\tif awserrors.IsInsufficientFreeAddressesInSubnet(err) && zone != \"\" {\n\t\t\tp.unavailableOfferings.MarkAZUnavailable(zone)\n\t\t}\n\t}\n\n\tif capacityType != karpv1.CapacityTypeReserved {\n\t\tfor _, err := range errs {\n\t\t\tif awserrors.IsUnfulfillableCapacity(err) {\n\t\t\t\tinstanceType := err.LaunchTemplateAndOverrides.Overrides.InstanceType\n\t\t\t\tzone := aws.ToString(err.LaunchTemplateAndOverrides.Overrides.AvailabilityZone)\n\t\t\t\tunavailableReason := map[string]string{\n\t\t\t\t\t\"reason\": lo.FromPtr(err.ErrorCode),\n\t\t\t\t}\n\t\t\t\tif fleetID != \"\" {\n\t\t\t\t\tunavailableReason[\"fleet-id\"] = fleetID\n\t\t\t\t}\n\t\t\t\tp.unavailableOfferings.MarkUnavailable(ctx, instanceType, zone, capacityType, unavailableReason)\n\t\t\t}\n\t\t\tif awserrors.IsServiceLinkedRoleCreationNotPermitted(err) {\n\t\t\t\tp.unavailableOfferings.MarkCapacityTypeUnavailable(karpv1.CapacityTypeSpot)\n\n\t\t\t\tp.recorder.Publish(SpotServiceLinkedRoleCreationFailure(nodeClaim))\n\t\t\t}\n\t\t}\n\t\treturn\n\t}\n\n\treservationIDs := make([]string, 0, len(errs))\n\tfor i := range errs {\n\t\tif awserrors.IsUnfulfillableCapacity(errs[i]) {\n\t\t\tcapacityReservationDetails := p.getCapacityReservationDetailsForInstance(\n\t\t\t\tstring(errs[i].LaunchTemplateAndOverrides.Overrides.InstanceType),\n\t\t\t\tlo.FromPtr(errs[i].LaunchTemplateAndOverrides.Overrides.AvailabilityZone),\n\t\t\t\tinstanceTypes,\n\t\t\t)\n\t\t\treservationIDs = append(reservationIDs, capacityReservationDetails.ID)\n\t\t\tlog.FromContext(ctx).WithValues(\n\t\t\t\t\"reason\", lo.FromPtr(errs[i].ErrorCode),\n\t\t\t\t\"instance-type\", errs[i].LaunchTemplateAndOverrides.Overrides.InstanceType,\n\t\t\t\t\"zone\", lo.FromPtr(errs[i].LaunchTemplateAndOverrides.Overrides.AvailabilityZone),\n\t\t\t\t\"capacity-reservation-id\", capacityReservationDetails.ID,\n\t\t\t).V(1).Info(\"marking capacity reservation unavailable\")\n\t\t}\n\t}\n\tif len(reservationIDs) > 0 {\n\t\tp.capacityReservationProvider.MarkUnavailable(reservationIDs...)\n\t}\n}\n\nfunc (p *DefaultProvider) getCapacityReservationDetailsForInstance(instance, zone string, instanceTypes []*cloudprovider.InstanceType) *CapacityReservationDetails {\n\tfor _, it := range instanceTypes {\n\t\tif it.Name != instance {\n\t\t\tcontinue\n\t\t}\n\t\tfor _, o := range it.Offerings {\n\t\t\tif o.CapacityType() != karpv1.CapacityTypeReserved || o.Zone() != zone {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\t// NOTE: Filtering at the beginning of Create ensures there's only a single reservation per zone, even when the NodeClass supports multiple.\n\t\t\treturn &CapacityReservationDetails{\n\t\t\t\tID:            o.ReservationID(),\n\t\t\t\tType:          v1.CapacityReservationType(o.Requirements.Get(v1.LabelCapacityReservationType).Any()),\n\t\t\t\tInterruptible: o.Requirements.Get(v1.LabelCapacityReservationInterruptible).Any() == \"true\",\n\t\t\t}\n\t\t}\n\t}\n\t// note: this is an invariant that the caller must enforce, should not occur at runtime\n\tpanic(\"reservation ID doesn't exist for reserved launch\")\n}\n\n// getTenancyType selects the tenancy for the nodeclaim.\n// If both default and dedicated are allowed by the claim then it will select default tenancy.\nfunc getTenancyType(nodeClaim *karpv1.NodeClaim) string {\n\trequirements := scheduling.NewNodeSelectorRequirementsWithMinValues(nodeClaim.Spec.Requirements...)\n\n\trequirement := requirements.Get(v1.LabelInstanceTenancy)\n\n\tif requirement == nil {\n\t\treturn string(ec2types.TenancyDefault)\n\t}\n\n\tfor _, tenancyType := range []string{string(ec2types.TenancyDefault), string(ec2types.TenancyDedicated)} {\n\t\tif requirement.Has(tenancyType) {\n\t\t\treturn tenancyType\n\t\t}\n\t}\n\n\treturn string(ec2types.TenancyDefault)\n}\n\n// getCapacityType selects the capacity type based on the flexibility of the NodeClaim and the available offerings.\n// Prioritization is as follows: reserved, spot, on-demand.\nfunc getCapacityType(nodeClaim *karpv1.NodeClaim, instanceTypes []*cloudprovider.InstanceType) string {\n\tfor _, capacityType := range []string{karpv1.CapacityTypeReserved, karpv1.CapacityTypeSpot} {\n\t\trequirements := scheduling.NewNodeSelectorRequirementsWithMinValues(nodeClaim.Spec.Requirements...)\n\t\tif !requirements.Get(karpv1.CapacityTypeLabelKey).Has(capacityType) {\n\t\t\tcontinue\n\t\t}\n\t\trequirements[karpv1.CapacityTypeLabelKey] = scheduling.NewRequirement(karpv1.CapacityTypeLabelKey, corev1.NodeSelectorOpIn, capacityType)\n\t\tfor _, it := range instanceTypes {\n\t\t\tif len(it.Offerings.Available().Compatible(requirements)) != 0 {\n\t\t\t\treturn capacityType\n\t\t\t}\n\t\t}\n\t}\n\treturn karpv1.CapacityTypeOnDemand\n}\n\nfunc getCapacityReservationType(instanceTypes []*cloudprovider.InstanceType) *v1.CapacityReservationType {\n\tfor _, it := range instanceTypes {\n\t\tfor _, o := range it.Offerings {\n\t\t\tif o.Requirements.Has(v1.LabelCapacityReservationType) {\n\t\t\t\treturn lo.ToPtr(v1.CapacityReservationType(o.Requirements.Get(v1.LabelCapacityReservationType).Any()))\n\t\t\t}\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc getCapacityReservationInterruptible(instanceTypes []*cloudprovider.InstanceType) bool {\n\tfor _, it := range instanceTypes {\n\t\tfor _, o := range it.Offerings {\n\t\t\tif o.Requirements.Has(v1.LabelCapacityReservationInterruptible) {\n\t\t\t\treturn o.Requirements.Get(v1.LabelCapacityReservationInterruptible).Any() == \"true\"\n\t\t\t}\n\t\t}\n\t}\n\treturn false\n}\n\nfunc instancesFromOutput(ctx context.Context, out *ec2.DescribeInstancesOutput) ([]*Instance, error) {\n\tif len(out.Reservations) == 0 {\n\t\treturn nil, cloudprovider.NewNodeClaimNotFoundError(fmt.Errorf(\"instance not found\"))\n\t}\n\tinstances := lo.Flatten(lo.Map(out.Reservations, func(r ec2types.Reservation, _ int) []ec2types.Instance {\n\t\treturn r.Instances\n\t}))\n\tif len(instances) == 0 {\n\t\treturn nil, cloudprovider.NewNodeClaimNotFoundError(fmt.Errorf(\"instance not found\"))\n\t}\n\t// Get a consistent ordering for instances\n\tsort.Slice(instances, func(i, j int) bool {\n\t\treturn aws.ToString(instances[i].InstanceId) < aws.ToString(instances[j].InstanceId)\n\t})\n\treturn lo.Map(instances, func(i ec2types.Instance, _ int) *Instance { return NewInstance(ctx, i) }), nil\n}\n\nfunc combineFleetErrors(fleetErrs []ec2types.CreateFleetError) (errs error) {\n\tunique := sets.NewString()\n\tfor _, err := range fleetErrs {\n\t\tunique.Insert(fmt.Sprintf(\"%s: %s\", aws.ToString(err.ErrorCode), aws.ToString(err.ErrorMessage)))\n\t}\n\tfor errorCode := range unique {\n\t\terrs = multierr.Append(errs, errors.New(errorCode))\n\t}\n\t// If all the Fleet errors are ICE errors then we should wrap the combined error in the generic ICE error\n\ticeErrorCount := lo.CountBy(fleetErrs, func(err ec2types.CreateFleetError) bool {\n\t\treturn awserrors.IsUnfulfillableCapacity(err) || awserrors.IsServiceLinkedRoleCreationNotPermitted(err)\n\t})\n\tif iceErrorCount == len(fleetErrs) {\n\t\treturn cloudprovider.NewInsufficientCapacityError(fmt.Errorf(\"with fleet error(s), %w\", errs))\n\t}\n\treason, message := awserrors.ToReasonMessage(errs)\n\treturn cloudprovider.NewCreateError(errs, reason, message)\n}\n"
  },
  {
    "path": "pkg/providers/instance/suite_test.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage instance_test\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"testing\"\n\t\"time\"\n\n\ttestv1alpha1 \"sigs.k8s.io/karpenter/pkg/test/v1alpha1\"\n\n\t\"github.com/aws/aws-sdk-go-v2/aws\"\n\t\"github.com/aws/aws-sdk-go-v2/service/ec2\"\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\t\"github.com/awslabs/operatorpkg/object\"\n\t\"github.com/samber/lo\"\n\tcorev1 \"k8s.io/api/core/v1\"\n\tmetav1 \"k8s.io/apimachinery/pkg/apis/meta/v1\"\n\t\"k8s.io/apimachinery/pkg/util/sets\"\n\t\"k8s.io/client-go/tools/record\"\n\tkarpv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n\t\"sigs.k8s.io/karpenter/pkg/apis/v1alpha1\"\n\tcorecloudprovider \"sigs.k8s.io/karpenter/pkg/cloudprovider\"\n\t\"sigs.k8s.io/karpenter/pkg/events\"\n\tcoreoptions \"sigs.k8s.io/karpenter/pkg/operator/options\"\n\tcoretest \"sigs.k8s.io/karpenter/pkg/test\"\n\n\t\"github.com/aws/karpenter-provider-aws/pkg/apis\"\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/cloudprovider\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/fake\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/operator/options\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/instance\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/test\"\n\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n\t. \"sigs.k8s.io/karpenter/pkg/test/expectations\"\n\t. \"sigs.k8s.io/karpenter/pkg/utils/testing\"\n)\n\nvar ctx context.Context\nvar env *coretest.Environment\nvar awsEnv *test.Environment\nvar cloudProvider *cloudprovider.CloudProvider\n\nfunc TestAWS(t *testing.T) {\n\tctx = TestContextWithLogger(t)\n\tRegisterFailHandler(Fail)\n\tRunSpecs(t, \"InstanceProvider\")\n}\n\nvar _ = BeforeSuite(func() {\n\tenv = coretest.NewEnvironment(coretest.WithCRDs(test.DisableCapacityReservationIDValidation(apis.CRDs)...), coretest.WithCRDs(testv1alpha1.CRDs...))\n\tctx = coreoptions.ToContext(ctx, coretest.Options(coretest.OptionsFields{FeatureGates: coretest.FeatureGates{ReservedCapacity: lo.ToPtr(true)}}))\n\tctx = options.ToContext(ctx, test.Options())\n\tawsEnv = test.NewEnvironment(ctx, env)\n\tcloudProvider = cloudprovider.New(awsEnv.InstanceTypesProvider, awsEnv.InstanceProvider, events.NewRecorder(&record.FakeRecorder{}),\n\t\tenv.Client, awsEnv.AMIProvider, awsEnv.SecurityGroupProvider, awsEnv.CapacityReservationProvider, awsEnv.InstanceTypeStore)\n})\n\nvar _ = AfterSuite(func() {\n\tExpect(env.Stop()).To(Succeed(), \"Failed to stop environment\")\n})\n\nvar _ = BeforeEach(func() {\n\tctx = coreoptions.ToContext(ctx, coretest.Options(coretest.OptionsFields{FeatureGates: coretest.FeatureGates{ReservedCapacity: lo.ToPtr(true)}}))\n\tctx = options.ToContext(ctx, test.Options())\n\tawsEnv.Reset()\n})\n\nvar _ = Describe(\"InstanceProvider\", func() {\n\tvar nodeClass *v1.EC2NodeClass\n\tvar nodePool *karpv1.NodePool\n\tvar nodeClaim *karpv1.NodeClaim\n\tBeforeEach(func() {\n\t\tnodeClass = test.EC2NodeClass()\n\t\tnodePool = coretest.NodePool(karpv1.NodePool{\n\t\t\tSpec: karpv1.NodePoolSpec{\n\t\t\t\tTemplate: karpv1.NodeClaimTemplate{\n\t\t\t\t\tSpec: karpv1.NodeClaimTemplateSpec{\n\t\t\t\t\t\tNodeClassRef: &karpv1.NodeClassReference{\n\t\t\t\t\t\t\tGroup: object.GVK(nodeClass).Group,\n\t\t\t\t\t\t\tKind:  object.GVK(nodeClass).Kind,\n\t\t\t\t\t\t\tName:  nodeClass.Name,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tnodeClaim = coretest.NodeClaim(karpv1.NodeClaim{\n\t\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\t\tLabels: map[string]string{\n\t\t\t\t\tkarpv1.NodePoolLabelKey: nodePool.Name,\n\t\t\t\t},\n\t\t\t},\n\t\t\tSpec: karpv1.NodeClaimSpec{\n\t\t\t\tNodeClassRef: &karpv1.NodeClassReference{\n\t\t\t\t\tGroup: object.GVK(nodeClass).Group,\n\t\t\t\t\tKind:  object.GVK(nodeClass).Kind,\n\t\t\t\t\tName:  nodeClass.Name,\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\t_, err := awsEnv.SubnetProvider.List(ctx, nodeClass) // Hydrate the subnet cache\n\t\tExpect(err).To(BeNil())\n\t\tExpect(awsEnv.InstanceTypesProvider.UpdateInstanceTypes(ctx)).To(Succeed())\n\t\tExpect(awsEnv.InstanceTypesProvider.UpdateInstanceTypeOfferings(ctx)).To(Succeed())\n\t})\n\tIt(\"should return an ICE error when all attempted instance types return an ICE error\", func() {\n\t\tExpectApplied(ctx, env.Client, nodeClaim, nodePool, nodeClass)\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\t\tawsEnv.EC2API.InsufficientCapacityPools.Set([]fake.CapacityPool{\n\t\t\t{CapacityType: karpv1.CapacityTypeOnDemand, InstanceType: \"m5.xlarge\", Zone: \"test-zone-1a\"},\n\t\t\t{CapacityType: karpv1.CapacityTypeOnDemand, InstanceType: \"m5.xlarge\", Zone: \"test-zone-1b\"},\n\t\t\t{CapacityType: karpv1.CapacityTypeSpot, InstanceType: \"m5.xlarge\", Zone: \"test-zone-1a\"},\n\t\t\t{CapacityType: karpv1.CapacityTypeSpot, InstanceType: \"m5.xlarge\", Zone: \"test-zone-1b\"},\n\t\t})\n\t\tinstanceTypes, err := cloudProvider.GetInstanceTypes(ctx, nodePool)\n\t\tExpect(err).ToNot(HaveOccurred())\n\n\t\t// Filter down to a single instance type\n\t\tinstanceTypes = lo.Filter(instanceTypes, func(i *corecloudprovider.InstanceType, _ int) bool { return i.Name == \"m5.xlarge\" })\n\n\t\t// Since all the capacity pools are ICEd. This should return back an ICE error\n\t\tinstance, err := awsEnv.InstanceProvider.Create(ctx, nodeClass, nodeClaim, nil, instanceTypes)\n\t\tExpect(corecloudprovider.IsInsufficientCapacityError(err)).To(BeTrue())\n\t\tExpect(instance).To(BeNil())\n\n\t\tExpect(awsEnv.UnavailableOfferingsCache.IsUnavailable(\"m5.xlarge\", \"test-zone-1a\", karpv1.CapacityTypeSpot)).To(BeTrue())\n\t\tExpect(awsEnv.UnavailableOfferingsCache.IsUnavailable(\"m5.xlarge\", \"test-zone-1b\", karpv1.CapacityTypeSpot)).To(BeTrue())\n\t\tExpect(awsEnv.UnavailableOfferingsCache.IsUnavailable(\"m5.xlarge\", \"test-zone-1a\", karpv1.CapacityTypeOnDemand)).To(BeFalse())\n\t\tExpect(awsEnv.UnavailableOfferingsCache.IsUnavailable(\"m5.xlarge\", \"test-zone-1b\", karpv1.CapacityTypeOnDemand)).To(BeFalse())\n\n\t\t// Try creating again for on-demand\n\t\tinstanceTypes, err = cloudProvider.GetInstanceTypes(ctx, nodePool)\n\t\tExpect(err).ToNot(HaveOccurred())\n\n\t\t// Filter down to a single instance type\n\t\tinstanceTypes = lo.Filter(instanceTypes, func(i *corecloudprovider.InstanceType, _ int) bool { return i.Name == \"m5.xlarge\" })\n\n\t\tinstance, err = awsEnv.InstanceProvider.Create(ctx, nodeClass, nodeClaim, nil, instanceTypes)\n\t\tExpect(corecloudprovider.IsInsufficientCapacityError(err)).To(BeTrue())\n\t\tExpect(instance).To(BeNil())\n\n\t\tExpect(awsEnv.UnavailableOfferingsCache.IsUnavailable(\"m5.xlarge\", \"test-zone-1a\", karpv1.CapacityTypeSpot)).To(BeTrue())\n\t\tExpect(awsEnv.UnavailableOfferingsCache.IsUnavailable(\"m5.xlarge\", \"test-zone-1b\", karpv1.CapacityTypeSpot)).To(BeTrue())\n\t\tExpect(awsEnv.UnavailableOfferingsCache.IsUnavailable(\"m5.xlarge\", \"test-zone-1a\", karpv1.CapacityTypeOnDemand)).To(BeTrue())\n\t\tExpect(awsEnv.UnavailableOfferingsCache.IsUnavailable(\"m5.xlarge\", \"test-zone-1b\", karpv1.CapacityTypeOnDemand)).To(BeTrue())\n\t})\n\tIt(\"should return an ICE error when spot instances are used and SpotSLR can't be created\", func() {\n\t\tExpectApplied(ctx, env.Client, nodeClaim, nodePool, nodeClass)\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\t\tawsEnv.EC2API.CreateFleetBehavior.Output.Set(&ec2.CreateFleetOutput{\n\t\t\tErrors: []ec2types.CreateFleetError{\n\t\t\t\t{\n\t\t\t\t\tErrorCode:    lo.ToPtr(\"AuthFailure.ServiceLinkedRoleCreationNotPermitted\"),\n\t\t\t\t\tErrorMessage: lo.ToPtr(\"The provided credentials do not have permission to create the service-linked role for EC2 Spot Instances.\"),\n\t\t\t\t\tLaunchTemplateAndOverrides: &ec2types.LaunchTemplateAndOverridesResponse{\n\t\t\t\t\t\tOverrides: &ec2types.FleetLaunchTemplateOverrides{\n\t\t\t\t\t\t\tInstanceType:     \"m5.xlarge\",\n\t\t\t\t\t\t\tAvailabilityZone: lo.ToPtr(\"test-zone-1a\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tErrorCode:    lo.ToPtr(\"AuthFailure.ServiceLinkedRoleCreationNotPermitted\"),\n\t\t\t\t\tErrorMessage: lo.ToPtr(\"The provided credentials do not have permission to create the service-linked role for EC2 Spot Instances.\"),\n\t\t\t\t\tLaunchTemplateAndOverrides: &ec2types.LaunchTemplateAndOverridesResponse{\n\t\t\t\t\t\tOverrides: &ec2types.FleetLaunchTemplateOverrides{\n\t\t\t\t\t\t\tInstanceType:     \"m5.xlarge\",\n\t\t\t\t\t\t\tAvailabilityZone: lo.ToPtr(\"test-zone-1b\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tinstanceTypes, err := cloudProvider.GetInstanceTypes(ctx, nodePool)\n\t\tExpect(err).ToNot(HaveOccurred())\n\n\t\t// Filter down to a single instance type\n\t\tinstanceTypes = lo.Filter(instanceTypes, func(i *corecloudprovider.InstanceType, _ int) bool {\n\t\t\treturn i.Name == \"m5.xlarge\"\n\t\t})\n\n\t\t// Since all the capacity pools are ICEd. This should return back an ICE error\n\t\tinstance, err := awsEnv.InstanceProvider.Create(ctx, nodeClass, nodeClaim, nil, instanceTypes)\n\t\tExpect(corecloudprovider.IsInsufficientCapacityError(err)).To(BeTrue())\n\t\tExpect(instance).To(BeNil())\n\n\t\t// Capacity should get ICEd when this error is received\n\t\tExpect(awsEnv.UnavailableOfferingsCache.IsUnavailable(\"m5.xlarge\", \"test-zone-1a\", karpv1.CapacityTypeSpot)).To(BeTrue())\n\t\tExpect(awsEnv.UnavailableOfferingsCache.IsUnavailable(\"m5.xlarge\", \"test-zone-1b\", karpv1.CapacityTypeSpot)).To(BeTrue())\n\t\tExpect(awsEnv.UnavailableOfferingsCache.IsUnavailable(\"m5.large\", \"test-zone-1a\", karpv1.CapacityTypeSpot)).To(BeTrue())\n\t\tExpect(awsEnv.UnavailableOfferingsCache.IsUnavailable(\"m5.large\", \"test-zone-1b\", karpv1.CapacityTypeSpot)).To(BeTrue())\n\t\tExpect(awsEnv.UnavailableOfferingsCache.IsUnavailable(\"m5.xlarge\", \"test-zone-1a\", karpv1.CapacityTypeOnDemand)).To(BeFalse())\n\t\tExpect(awsEnv.UnavailableOfferingsCache.IsUnavailable(\"m5.xlarge\", \"test-zone-1b\", karpv1.CapacityTypeOnDemand)).To(BeFalse())\n\t\tExpect(awsEnv.UnavailableOfferingsCache.IsUnavailable(\"m5.large\", \"test-zone-1a\", karpv1.CapacityTypeOnDemand)).To(BeFalse())\n\t\tExpect(awsEnv.UnavailableOfferingsCache.IsUnavailable(\"m5.large\", \"test-zone-1b\", karpv1.CapacityTypeOnDemand)).To(BeFalse())\n\n\t\t// Expect that an event is fired for Spot SLR not being created\n\t\tawsEnv.EventRecorder.DetectedEvent(`Attempted to launch a spot instance but failed due to \"AuthFailure.ServiceLinkedRoleCreationNotPermitted\"`)\n\t})\n\tIt(\"should return an ICE error when max fleet count is reached\", func() {\n\t\tExpectApplied(ctx, env.Client, nodeClaim, nodePool, nodeClass)\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\t\tawsEnv.EC2API.CreateFleetBehavior.Output.Set(&ec2.CreateFleetOutput{\n\t\t\tErrors: []ec2types.CreateFleetError{\n\t\t\t\t{\n\t\t\t\t\tErrorCode:    lo.ToPtr(\"MaxFleetCountExceeded\"),\n\t\t\t\t\tErrorMessage: lo.ToPtr(\"You've reached your quota for maximum Fleet Requests for this account.\"),\n\t\t\t\t\tLaunchTemplateAndOverrides: &ec2types.LaunchTemplateAndOverridesResponse{\n\t\t\t\t\t\tOverrides: &ec2types.FleetLaunchTemplateOverrides{\n\t\t\t\t\t\t\tInstanceType:     \"m5.xlarge\",\n\t\t\t\t\t\t\tAvailabilityZone: lo.ToPtr(\"test-zone-1a\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tinstanceTypes, err := cloudProvider.GetInstanceTypes(ctx, nodePool)\n\t\tExpect(err).ToNot(HaveOccurred())\n\n\t\t// Filter down to a single instance type\n\t\tinstanceTypes = lo.Filter(instanceTypes, func(i *corecloudprovider.InstanceType, _ int) bool {\n\t\t\treturn i.Name == \"m5.xlarge\"\n\t\t})\n\n\t\t// Since all the capacity pools are ICEd. This should return back an ICE error\n\t\tinstance, err := awsEnv.InstanceProvider.Create(ctx, nodeClass, nodeClaim, nil, instanceTypes)\n\t\tfmt.Println(instance)\n\t\tExpect(corecloudprovider.IsInsufficientCapacityError(err)).To(BeTrue())\n\t\tExpect(instance).To(BeNil())\n\n\t\t// Capacity should get ICEd when this error is received\n\t\tExpect(awsEnv.UnavailableOfferingsCache.IsUnavailable(\"m5.xlarge\", \"test-zone-1a\", karpv1.CapacityTypeSpot)).To(BeTrue())\n\t\tExpect(awsEnv.UnavailableOfferingsCache.IsUnavailable(\"m5.xlarge\", \"test-zone-1b\", karpv1.CapacityTypeSpot)).To(BeFalse())\n\t\tExpect(awsEnv.UnavailableOfferingsCache.IsUnavailable(\"m5.xlarge\", \"test-zone-1a\", karpv1.CapacityTypeOnDemand)).To(BeFalse())\n\t\tExpect(awsEnv.UnavailableOfferingsCache.IsUnavailable(\"m5.xlarge\", \"test-zone-1b\", karpv1.CapacityTypeOnDemand)).To(BeFalse())\n\t})\n\tIt(\"should return an ICE error when all attempted instance types return a ReservedCapacityReservation error\", func() {\n\t\tconst targetReservationID = \"cr-m5.large-1a-1\"\n\t\t// Ensure that Karpenter believes a reservation is available, but the API returns no capacity when attempting to launch\n\t\tawsEnv.CapacityReservationProvider.SetAvailableInstanceCount(targetReservationID, 1)\n\t\tawsEnv.EC2API.DescribeCapacityReservationsOutput.Set(&ec2.DescribeCapacityReservationsOutput{\n\t\t\tCapacityReservations: []ec2types.CapacityReservation{\n\t\t\t\t{\n\t\t\t\t\tAvailabilityZone:       lo.ToPtr(\"test-zone-1a\"),\n\t\t\t\t\tInstanceType:           lo.ToPtr(\"m5.large\"),\n\t\t\t\t\tOwnerId:                lo.ToPtr(\"012345678901\"),\n\t\t\t\t\tInstanceMatchCriteria:  ec2types.InstanceMatchCriteriaTargeted,\n\t\t\t\t\tCapacityReservationId:  lo.ToPtr(targetReservationID),\n\t\t\t\t\tAvailableInstanceCount: lo.ToPtr[int32](0),\n\t\t\t\t\tState:                  ec2types.CapacityReservationStateActive,\n\t\t\t\t\tReservationType:        ec2types.CapacityReservationTypeDefault,\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tnodeClass.Status.CapacityReservations = append(nodeClass.Status.CapacityReservations, v1.CapacityReservation{\n\t\t\tID:                    \"cr-m5.large-1a-1\",\n\t\t\tAvailabilityZone:      \"test-zone-1a\",\n\t\t\tInstanceMatchCriteria: string(ec2types.InstanceMatchCriteriaTargeted),\n\t\t\tInstanceType:          \"m5.large\",\n\t\t\tOwnerID:               \"012345678901\",\n\t\t\tState:                 v1.CapacityReservationStateActive,\n\t\t\tReservationType:       v1.CapacityReservationTypeDefault,\n\t\t})\n\t\tnodeClaim.Spec.Requirements = append(\n\t\t\tnodeClaim.Spec.Requirements,\n\t\t\tkarpv1.NodeSelectorRequirementWithMinValues{\n\t\t\t\tKey:      karpv1.CapacityTypeLabelKey,\n\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\tValues:   []string{karpv1.CapacityTypeReserved},\n\t\t\t},\n\t\t)\n\t\tExpectApplied(ctx, env.Client, nodeClaim, nodePool, nodeClass)\n\n\t\tinstanceTypes, err := cloudProvider.GetInstanceTypes(ctx, nodePool)\n\t\tExpect(err).ToNot(HaveOccurred())\n\t\tinstance, err := awsEnv.InstanceProvider.Create(ctx, nodeClass, nodeClaim, nil, instanceTypes)\n\t\tExpect(corecloudprovider.IsInsufficientCapacityError(err)).To(BeTrue())\n\t\tExpect(instance).To(BeNil())\n\n\t\t// Ensure we marked the reservation as unavailable after encountering the error\n\t\tExpect(awsEnv.CapacityReservationProvider.GetAvailableInstanceCount(targetReservationID)).To(Equal(0))\n\t})\n\tIt(\"should not mark capacity reservations unavailable for RequestLimitExceeded CreateFleet errors\", func() {\n\t\tconst targetReservationID = \"cr-m5.large-1a-1\"\n\n\t\t// Ensure Karpenter believes a reservation is available\n\t\tawsEnv.CapacityReservationProvider.SetAvailableInstanceCount(targetReservationID, 1)\n\n\t\t// Make DescribeCapacityReservations show it as available too\n\t\tawsEnv.EC2API.DescribeCapacityReservationsOutput.Set(&ec2.DescribeCapacityReservationsOutput{\n\t\t\tCapacityReservations: []ec2types.CapacityReservation{\n\t\t\t\t{\n\t\t\t\t\tAvailabilityZone:       lo.ToPtr(\"test-zone-1a\"),\n\t\t\t\t\tInstanceType:           lo.ToPtr(\"m5.large\"),\n\t\t\t\t\tOwnerId:                lo.ToPtr(\"012345678901\"),\n\t\t\t\t\tInstanceMatchCriteria:  ec2types.InstanceMatchCriteriaTargeted,\n\t\t\t\t\tCapacityReservationId:  lo.ToPtr(targetReservationID),\n\t\t\t\t\tAvailableInstanceCount: lo.ToPtr[int32](1),\n\t\t\t\t\tState:                  ec2types.CapacityReservationStateActive,\n\t\t\t\t\tReservationType:        ec2types.CapacityReservationTypeDefault,\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\n\t\t// Make the NodeClass believe it has a matching reservation\n\t\tnodeClass.Status.CapacityReservations = append(nodeClass.Status.CapacityReservations, v1.CapacityReservation{\n\t\t\tID:                    targetReservationID,\n\t\t\tAvailabilityZone:      \"test-zone-1a\",\n\t\t\tInstanceMatchCriteria: string(ec2types.InstanceMatchCriteriaTargeted),\n\t\t\tInstanceType:          \"m5.large\",\n\t\t\tOwnerID:               \"012345678901\",\n\t\t\tState:                 v1.CapacityReservationStateActive,\n\t\t\tReservationType:       v1.CapacityReservationTypeDefault,\n\t\t})\n\n\t\t// Force reserved capacity launch\n\t\tnodeClaim.Spec.Requirements = append(\n\t\t\tnodeClaim.Spec.Requirements,\n\t\t\tkarpv1.NodeSelectorRequirementWithMinValues{\n\t\t\t\tKey:      karpv1.CapacityTypeLabelKey,\n\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\tValues:   []string{karpv1.CapacityTypeReserved},\n\t\t\t},\n\t\t)\n\n\t\tExpectApplied(ctx, env.Client, nodeClaim, nodePool, nodeClass)\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\n\t\t// CreateFleet returns throttling errors and launches nothing\n\t\tawsEnv.EC2API.CreateFleetBehavior.Output.Set(&ec2.CreateFleetOutput{\n\t\t\tInstances: []ec2types.CreateFleetInstance{},\n\t\t\tErrors: []ec2types.CreateFleetError{\n\t\t\t\t{\n\t\t\t\t\tErrorCode:    lo.ToPtr(\"RequestLimitExceeded\"),\n\t\t\t\t\tErrorMessage: lo.ToPtr(\"Request limit exceeded.\"),\n\t\t\t\t\tLaunchTemplateAndOverrides: &ec2types.LaunchTemplateAndOverridesResponse{\n\t\t\t\t\t\tOverrides: &ec2types.FleetLaunchTemplateOverrides{\n\t\t\t\t\t\t\tInstanceType:     \"m5.large\",\n\t\t\t\t\t\t\tAvailabilityZone: lo.ToPtr(\"test-zone-1a\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\n\t\tinstanceTypes, err := cloudProvider.GetInstanceTypes(ctx, nodePool)\n\t\tExpect(err).ToNot(HaveOccurred())\n\n\t\t// Keep it deterministic\n\t\tinstanceTypes = lo.Filter(instanceTypes, func(i *corecloudprovider.InstanceType, _ int) bool { return i.Name == \"m5.large\" })\n\n\t\tcreated, err := awsEnv.InstanceProvider.Create(ctx, nodeClass, nodeClaim, nil, instanceTypes)\n\t\tExpect(err).To(HaveOccurred())\n\t\tExpect(created).To(BeNil())\n\n\t\t// Throttling should not mark the reservation unavailable\n\t\tExpect(awsEnv.CapacityReservationProvider.GetAvailableInstanceCount(targetReservationID)).To(Equal(1))\n\t})\n\tIt(\"should treat instances which launched into open ODCRs as on-demand when the ReservedCapacity gate is disabled\", func() {\n\t\tid := fake.InstanceID()\n\t\tawsEnv.EC2API.DescribeInstancesBehavior.Output.Set(&ec2.DescribeInstancesOutput{\n\t\t\tReservations: []ec2types.Reservation{{\n\t\t\t\tInstances: []ec2types.Instance{{\n\t\t\t\t\tState:                 &ec2types.InstanceState{Name: ec2types.InstanceStateNameRunning},\n\t\t\t\t\tPrivateDnsName:        lo.ToPtr(fake.PrivateDNSName()),\n\t\t\t\t\tPlacement:             &ec2types.Placement{AvailabilityZone: lo.ToPtr(fake.DefaultRegion)},\n\t\t\t\t\tLaunchTime:            lo.ToPtr(time.Now().Add(-time.Minute)),\n\t\t\t\t\tInstanceId:            &id,\n\t\t\t\t\tInstanceType:          \"m5.large\",\n\t\t\t\t\tCapacityReservationId: lo.ToPtr(\"cr-foo\"),\n\t\t\t\t}},\n\t\t\t}},\n\t\t})\n\n\t\tcoreoptions.FromContext(ctx).FeatureGates.ReservedCapacity = false\n\t\tnodeClaims, err := cloudProvider.List(ctx)\n\t\tExpect(err).ToNot(HaveOccurred())\n\t\tExpect(nodeClaims).To(HaveLen(1))\n\t\tExpect(nodeClaims[0].Status.ProviderID).To(ContainSubstring(id))\n\t\tExpect(nodeClaims[0].Labels).To(HaveKeyWithValue(karpv1.CapacityTypeLabelKey, karpv1.CapacityTypeOnDemand))\n\t\tExpect(nodeClaims[0].Labels).ToNot(HaveKey(v1.LabelCapacityReservationID))\n\t})\n\tIt(\"should return all NodePool-owned instances from List\", func() {\n\t\tids := sets.New[string]()\n\t\t// Provision instances that have the karpenter.sh/nodepool key\n\t\tfor range 20 {\n\t\t\tinstanceID := fake.InstanceID()\n\t\t\tawsEnv.EC2API.Instances.Store(\n\t\t\t\tinstanceID,\n\t\t\t\tec2types.Instance{\n\t\t\t\t\tState: &ec2types.InstanceState{\n\t\t\t\t\t\tName: ec2types.InstanceStateNameRunning,\n\t\t\t\t\t},\n\t\t\t\t\tTags: []ec2types.Tag{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey:   aws.String(fmt.Sprintf(\"kubernetes.io/cluster/%s\", options.FromContext(ctx).ClusterName)),\n\t\t\t\t\t\t\tValue: aws.String(\"owned\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey:   aws.String(karpv1.NodePoolLabelKey),\n\t\t\t\t\t\t\tValue: aws.String(\"default\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey:   aws.String(v1.LabelNodeClass),\n\t\t\t\t\t\t\tValue: aws.String(\"default\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey:   aws.String(v1.EKSClusterNameTagKey),\n\t\t\t\t\t\t\tValue: aws.String(options.FromContext(ctx).ClusterName),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tPrivateDnsName: aws.String(fake.PrivateDNSName()),\n\t\t\t\t\tPlacement: &ec2types.Placement{\n\t\t\t\t\t\tAvailabilityZone: aws.String(fake.DefaultRegion),\n\t\t\t\t\t},\n\t\t\t\t\t// Launch time was 1m ago\n\t\t\t\t\tLaunchTime:   aws.Time(time.Now().Add(-time.Minute)),\n\t\t\t\t\tInstanceId:   lo.ToPtr(instanceID),\n\t\t\t\t\tInstanceType: \"m5.large\",\n\t\t\t\t},\n\t\t\t)\n\t\t\tids.Insert(instanceID)\n\t\t}\n\t\t// Provision instances that do not have this tag key\n\t\tfor i := 0; i < 20; i++ {\n\t\t\tinstanceID := fake.InstanceID()\n\t\t\tawsEnv.EC2API.Instances.Store(\n\t\t\t\tinstanceID,\n\t\t\t\tec2types.Instance{\n\t\t\t\t\tState: &ec2types.InstanceState{\n\t\t\t\t\t\tName: ec2types.InstanceStateNameRunning,\n\t\t\t\t\t},\n\t\t\t\t\tPrivateDnsName: aws.String(fake.PrivateDNSName()),\n\t\t\t\t\tPlacement: &ec2types.Placement{\n\t\t\t\t\t\tAvailabilityZone: aws.String(fake.DefaultRegion),\n\t\t\t\t\t},\n\t\t\t\t\t// Launch time was 1m ago\n\t\t\t\t\tLaunchTime:   aws.Time(time.Now().Add(-time.Minute)),\n\t\t\t\t\tInstanceId:   lo.ToPtr(instanceID),\n\t\t\t\t\tInstanceType: \"m5.large\",\n\t\t\t\t},\n\t\t\t)\n\t\t}\n\t\tinstances, err := awsEnv.InstanceProvider.List(ctx)\n\t\tExpect(err).To(BeNil())\n\t\tExpect(instances).To(HaveLen(20))\n\n\t\tretrievedIDs := sets.New(lo.Map(instances, func(i *instance.Instance, _ int) string { return i.ID })...)\n\t\tExpect(ids.Equal(retrievedIDs)).To(BeTrue())\n\t})\n\tIt(\"should mark subnets as unavailable when they run out of IPs\", func() {\n\t\tExpectApplied(ctx, env.Client, nodeClaim, nodePool, nodeClass)\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\t\tawsEnv.EC2API.CreateFleetBehavior.Output.Set(&ec2.CreateFleetOutput{\n\t\t\tErrors: []ec2types.CreateFleetError{\n\t\t\t\t{\n\t\t\t\t\tErrorCode:    lo.ToPtr(\"InsufficientFreeAddressesInSubnet\"),\n\t\t\t\t\tErrorMessage: lo.ToPtr(\"There are insufficient free addresses in that subnet to run instance\"),\n\t\t\t\t\tLaunchTemplateAndOverrides: &ec2types.LaunchTemplateAndOverridesResponse{\n\t\t\t\t\t\tOverrides: &ec2types.FleetLaunchTemplateOverrides{\n\t\t\t\t\t\t\tInstanceType:     \"m5.xlarge\",\n\t\t\t\t\t\t\tAvailabilityZone: lo.ToPtr(\"test-zone-1a\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tinstanceTypes, err := cloudProvider.GetInstanceTypes(ctx, nodePool)\n\t\tExpect(err).ToNot(HaveOccurred())\n\n\t\t// We expect to treat that error as an ICE\n\t\tinstance, err := awsEnv.InstanceProvider.Create(ctx, nodeClass, nodeClaim, nil, instanceTypes)\n\t\tExpect(corecloudprovider.IsInsufficientCapacityError(err)).To(BeTrue())\n\t\tExpect(instance).To(BeNil())\n\n\t\t// We should have set the zone used in the request as unavailable for all instance types\n\t\tfor _, instance := range instanceTypes {\n\t\t\tExpect(awsEnv.UnavailableOfferingsCache.IsUnavailable(ec2types.InstanceType(instance.Name), \"test-zone-1a\", \"on-demand\")).To(BeTrue())\n\t\t}\n\t\t// But we should not have set the other zones as unavailable\n\t\tzones := []string{\"test-zone-1b\", \"test-zone-1c\"}\n\t\tfor _, zone := range zones {\n\t\t\tfor _, instance := range instanceTypes {\n\t\t\t\tExpect(awsEnv.UnavailableOfferingsCache.IsUnavailable(ec2types.InstanceType(instance.Name), zone, \"on-demand\")).To(BeFalse())\n\t\t\t}\n\t\t}\n\t})\n\tIt(\"should use priotiztied allocation stragaty for an on-demand nodeclaim using nodeoverlay pricing\", func() {\n\t\tnodeClaim.Annotations = map[string]string{v1alpha1.PriceOverlayAppliedAnnotationKey: \"true\"}\n\t\tnodeClaim.Spec.Requirements = []karpv1.NodeSelectorRequirementWithMinValues{\n\t\t\t{\n\t\t\t\tKey:      karpv1.CapacityTypeLabelKey,\n\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\tValues: []string{\n\t\t\t\t\t\"on-demand\",\n\t\t\t\t},\n\t\t\t},\n\t\t}\n\t\tExpectApplied(ctx, env.Client, nodeClaim, nodePool, nodeClass)\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\t\tinstanceTypes, err := cloudProvider.GetInstanceTypes(ctx, nodePool)\n\t\tExpect(err).ToNot(HaveOccurred())\n\n\t\t_, err = awsEnv.InstanceProvider.Create(ctx, nodeClass, nodeClaim, nil, instanceTypes)\n\t\tExpect(err).To(BeNil())\n\n\t\tExpect(awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Len()).To(BeNumerically(\"==\", 1))\n\t\tpriotiztied := awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Pop()\n\n\t\tExpect(priotiztied.OnDemandOptions.AllocationStrategy).To(Equal(ec2types.FleetOnDemandAllocationStrategyPrioritized))\n\t})\n\tIt(\"should use lowest price allocation stragaty by default for on-demand nodeclaims\", func() {\n\t\tnodeClaim.Spec.Requirements = []karpv1.NodeSelectorRequirementWithMinValues{\n\t\t\t{\n\t\t\t\tKey:      karpv1.CapacityTypeLabelKey,\n\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\tValues: []string{\n\t\t\t\t\t\"on-demand\",\n\t\t\t\t},\n\t\t\t},\n\t\t}\n\t\tExpectApplied(ctx, env.Client, nodeClaim, nodePool, nodeClass)\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\t\tinstanceTypes, err := cloudProvider.GetInstanceTypes(ctx, nodePool)\n\t\tExpect(err).ToNot(HaveOccurred())\n\n\t\t_, err = awsEnv.InstanceProvider.Create(ctx, nodeClass, nodeClaim, nil, instanceTypes)\n\t\tExpect(err).To(BeNil())\n\n\t\tExpect(awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Len()).To(BeNumerically(\"==\", 1))\n\t\tpriotiztied := awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Pop()\n\n\t\tExpect(priotiztied.OnDemandOptions.AllocationStrategy).To(Equal(ec2types.FleetOnDemandAllocationStrategyLowestPrice))\n\t})\n\tIt(\"should use capacity optimized prioritized allocation stragaty for an spot nodeclaim using nodeoverlay\", func() {\n\t\tnodeClaim.Annotations = map[string]string{v1alpha1.PriceOverlayAppliedAnnotationKey: \"true\"}\n\t\tnodeClaim.Spec.Requirements = []karpv1.NodeSelectorRequirementWithMinValues{\n\t\t\t{\n\t\t\t\tKey:      karpv1.CapacityTypeLabelKey,\n\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\tValues: []string{\n\t\t\t\t\t\"spot\",\n\t\t\t\t},\n\t\t\t},\n\t\t}\n\t\tExpectApplied(ctx, env.Client, nodeClaim, nodePool, nodeClass)\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\t\tinstanceTypes, err := cloudProvider.GetInstanceTypes(ctx, nodePool)\n\t\tExpect(err).ToNot(HaveOccurred())\n\n\t\t_, err = awsEnv.InstanceProvider.Create(ctx, nodeClass, nodeClaim, nil, instanceTypes)\n\t\tExpect(err).To(BeNil())\n\n\t\tExpect(awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Len()).To(BeNumerically(\"==\", 1))\n\t\tpriotiztied := awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Pop()\n\n\t\tExpect(priotiztied.SpotOptions.AllocationStrategy).To(Equal(ec2types.SpotAllocationStrategyCapacityOptimizedPrioritized))\n\t})\n\tIt(\"should use price capacity optimized allocation stragaty by default for spot nodeclaims\", func() {\n\t\tnodeClaim.Spec.Requirements = []karpv1.NodeSelectorRequirementWithMinValues{\n\t\t\t{\n\t\t\t\tKey:      karpv1.CapacityTypeLabelKey,\n\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\tValues: []string{\n\t\t\t\t\t\"spot\",\n\t\t\t\t},\n\t\t\t},\n\t\t}\n\t\tExpectApplied(ctx, env.Client, nodeClaim, nodePool, nodeClass)\n\t\tnodeClass = ExpectExists(ctx, env.Client, nodeClass)\n\t\tinstanceTypes, err := cloudProvider.GetInstanceTypes(ctx, nodePool)\n\t\tExpect(err).ToNot(HaveOccurred())\n\n\t\t_, err = awsEnv.InstanceProvider.Create(ctx, nodeClass, nodeClaim, nil, instanceTypes)\n\t\tExpect(err).To(BeNil())\n\n\t\tExpect(awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Len()).To(BeNumerically(\"==\", 1))\n\t\tpriotiztied := awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Pop()\n\n\t\tExpect(priotiztied.SpotOptions.AllocationStrategy).To(Equal(ec2types.SpotAllocationStrategyPriceCapacityOptimized))\n\t})\n})\n"
  },
  {
    "path": "pkg/providers/instance/types.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage instance\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go-v2/service/ec2\"\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\t\"github.com/awslabs/operatorpkg/option\"\n\t\"github.com/imdario/mergo\"\n\t\"github.com/samber/lo\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/utils\"\n\n\tkarpv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n\tkarpopts \"sigs.k8s.io/karpenter/pkg/operator/options\"\n)\n\n// Instance is an internal data representation of either an ec2.Instance or an ec2.FleetInstance\n// It contains all the common data that is needed to inject into the Machine from either of these responses\ntype Instance struct {\n\tLaunchTime                 time.Time\n\tState                      ec2types.InstanceStateName\n\tID                         string\n\tImageID                    string\n\tType                       ec2types.InstanceType\n\tZone                       string\n\tCapacityType               string\n\tSecurityGroupIDs           []string\n\tSubnetID                   string\n\tTags                       map[string]string\n\tEFAEnabled                 bool\n\tCapacityReservationDetails *CapacityReservationDetails\n\tTenancy                    string\n}\n\ntype CapacityReservationDetails struct {\n\tID            string\n\tType          v1.CapacityReservationType\n\tInterruptible bool\n}\n\nfunc NewInstance(ctx context.Context, instance ec2types.Instance) *Instance {\n\tcapacityType := capacityTypeFromInstance(ctx, instance)\n\tvar capacityReservationID string\n\tif capacityType == karpv1.CapacityTypeReserved {\n\t\tcapacityReservationID = *instance.CapacityReservationId\n\t}\n\tcapacityReservationDetails := lo.Ternary(capacityType != karpv1.CapacityTypeReserved, nil, &CapacityReservationDetails{\n\t\tID: capacityReservationID,\n\t\tType: lo.Ternary(instance.InstanceLifecycle == ec2types.InstanceLifecycleTypeCapacityBlock,\n\t\t\tv1.CapacityReservationTypeCapacityBlock, v1.CapacityReservationTypeDefault),\n\t\tInterruptible: instance.InstanceLifecycle == ec2types.InstanceLifecycleTypeInterruptibleCapacityReservation,\n\t})\n\treturn &Instance{\n\t\tLaunchTime: lo.FromPtr(instance.LaunchTime),\n\t\tState:      instance.State.Name,\n\t\tID:         lo.FromPtr(instance.InstanceId),\n\t\tImageID:    lo.FromPtr(instance.ImageId),\n\t\tType:       instance.InstanceType,\n\t\tZone:       lo.FromPtr(instance.Placement.AvailabilityZone),\n\t\t// NOTE: Only set the capacity type to reserved and assign a reservation ID if the feature gate is enabled. It's\n\t\t// possible for these to be set if the instance launched into an open ODCR, but treating it as reserved would induce\n\t\t// drift.\n\t\tCapacityType: capacityType,\n\t\tSecurityGroupIDs: lo.Map(instance.SecurityGroups, func(securitygroup ec2types.GroupIdentifier, _ int) string {\n\t\t\treturn lo.FromPtr(securitygroup.GroupId)\n\t\t}),\n\t\tSubnetID: lo.FromPtr(instance.SubnetId),\n\t\tTags:     lo.SliceToMap(instance.Tags, func(t ec2types.Tag) (string, string) { return lo.FromPtr(t.Key), lo.FromPtr(t.Value) }),\n\t\tEFAEnabled: lo.ContainsBy(instance.NetworkInterfaces, func(item ec2types.InstanceNetworkInterface) bool {\n\t\t\treturn item.InterfaceType != nil && *item.InterfaceType == string(ec2types.NetworkInterfaceTypeEfa)\n\t\t}),\n\t\tCapacityReservationDetails: capacityReservationDetails,\n\t\tTenancy:                    tenancyFromInstance(instance),\n\t}\n}\n\nfunc tenancyFromInstance(instance ec2types.Instance) string {\n\ttenancy := instance.Placement.Tenancy\n\treturn string(lo.Ternary(tenancy == \"\", ec2types.TenancyDefault, tenancy))\n}\n\nfunc capacityTypeFromInstance(ctx context.Context, instance ec2types.Instance) string {\n\tif instance.SpotInstanceRequestId != nil {\n\t\treturn karpv1.CapacityTypeSpot\n\t}\n\tif karpopts.FromContext(ctx).FeatureGates.ReservedCapacity &&\n\t\tinstance.CapacityReservationId != nil &&\n\t\tinstance.CapacityReservationSpecification.CapacityReservationPreference == ec2types.CapacityReservationPreferenceCapacityReservationsOnly {\n\t\treturn karpv1.CapacityTypeReserved\n\t}\n\treturn karpv1.CapacityTypeOnDemand\n}\n\ntype NewInstanceFromFleetOpts = option.Function[Instance]\n\nfunc WithCapacityReservationDetails(capacityReservationDetails *CapacityReservationDetails) NewInstanceFromFleetOpts {\n\treturn func(i *Instance) {\n\t\ti.CapacityReservationDetails = capacityReservationDetails\n\t}\n}\n\nfunc WithEFAEnabled() NewInstanceFromFleetOpts {\n\treturn func(i *Instance) { i.EFAEnabled = true }\n}\n\nfunc NewInstanceFromFleet(\n\tout ec2types.CreateFleetInstance,\n\tcapacityType string,\n\ttags map[string]string,\n\ttenancyType string,\n\topts ...NewInstanceFromFleetOpts,\n) *Instance {\n\tresolved := option.Resolve(opts...)\n\tlo.Must0(mergo.Merge(resolved, &Instance{\n\t\tLaunchTime:   time.Now(), // estimate the launch time since we just launched\n\t\tState:        ec2types.InstanceStateNamePending,\n\t\tID:           out.InstanceIds[0],\n\t\tImageID:      lo.FromPtr(out.LaunchTemplateAndOverrides.Overrides.ImageId),\n\t\tType:         out.InstanceType,\n\t\tZone:         lo.FromPtr(out.LaunchTemplateAndOverrides.Overrides.AvailabilityZone),\n\t\tCapacityType: capacityType,\n\t\tSubnetID:     lo.FromPtr(out.LaunchTemplateAndOverrides.Overrides.SubnetId),\n\t\tTags:         tags,\n\t\tTenancy:      tenancyType,\n\t}))\n\treturn resolved\n}\n\ntype CreateFleetInputBuilder struct {\n\tcapacityType          string\n\ttagSpecifications     []ec2types.TagSpecification\n\tlaunchTemplateConfigs []ec2types.FleetLaunchTemplateConfigRequest\n\n\tcontextID                        *string\n\tcapacityReservationType          v1.CapacityReservationType\n\tcapacityReservationInterruptible bool\n\toverlay                          bool\n}\n\nfunc NewCreateFleetInputBuilder(capacityType string, tags map[string]string, launchTemplateConfigs []ec2types.FleetLaunchTemplateConfigRequest) *CreateFleetInputBuilder {\n\tvar taggedResources = []ec2types.ResourceType{\n\t\tec2types.ResourceTypeInstance,\n\t\tec2types.ResourceTypeVolume,\n\t\tec2types.ResourceTypeFleet,\n\t}\n\treturn &CreateFleetInputBuilder{\n\t\tcapacityType: capacityType,\n\t\ttagSpecifications: lo.Map(taggedResources, func(resource ec2types.ResourceType, _ int) ec2types.TagSpecification {\n\t\t\treturn ec2types.TagSpecification{ResourceType: resource, Tags: utils.EC2MergeTags(tags)}\n\t\t}),\n\t\tlaunchTemplateConfigs: launchTemplateConfigs,\n\t\toverlay:               false,\n\t}\n}\n\nfunc (b *CreateFleetInputBuilder) WithContextID(contextID string) *CreateFleetInputBuilder {\n\tb.contextID = &contextID\n\treturn b\n}\n\nfunc (b *CreateFleetInputBuilder) WithOverlay() *CreateFleetInputBuilder {\n\tb.overlay = true\n\treturn b\n}\n\nfunc (b *CreateFleetInputBuilder) WithCapacityReservationType(crt v1.CapacityReservationType, interruptible bool) *CreateFleetInputBuilder {\n\tif b.capacityType != karpv1.CapacityTypeReserved {\n\t\tpanic(\"can not specify capacity reservation type when capacity type is not reserved\")\n\t}\n\tb.capacityReservationType = crt\n\tb.capacityReservationInterruptible = interruptible\n\treturn b\n}\n\nfunc (b *CreateFleetInputBuilder) defaultTargetCapacityType() ec2types.DefaultTargetCapacityType {\n\tswitch b.capacityType {\n\tcase karpv1.CapacityTypeReserved:\n\t\tif b.capacityReservationType == v1.CapacityReservationTypeCapacityBlock {\n\t\t\treturn ec2types.DefaultTargetCapacityTypeCapacityBlock\n\t\t} else if b.capacityReservationInterruptible {\n\t\t\treturn ec2types.DefaultTargetCapacityTypeReservedCapacity\n\t\t} else {\n\t\t\treturn ec2types.DefaultTargetCapacityTypeOnDemand\n\t\t}\n\tcase karpv1.CapacityTypeOnDemand, karpv1.CapacityTypeSpot:\n\t\treturn ec2types.DefaultTargetCapacityType(b.capacityType)\n\t}\n\tpanic(fmt.Sprintf(\"invalid capacity type %q provided to create fleet input\", b.capacityType))\n}\n\nfunc (b *CreateFleetInputBuilder) Build() *ec2.CreateFleetInput {\n\tinput := &ec2.CreateFleetInput{\n\t\tType:                  ec2types.FleetTypeInstant,\n\t\tContext:               b.contextID,\n\t\tLaunchTemplateConfigs: b.launchTemplateConfigs,\n\t\tTargetCapacitySpecification: &ec2types.TargetCapacitySpecificationRequest{\n\t\t\tDefaultTargetCapacityType: b.defaultTargetCapacityType(),\n\t\t\tTotalTargetCapacity:       lo.ToPtr[int32](1),\n\t\t},\n\t\tTagSpecifications: b.tagSpecifications,\n\t}\n\tif b.capacityType == karpv1.CapacityTypeSpot {\n\t\tinput.SpotOptions = &ec2types.SpotOptionsRequest{\n\t\t\tAllocationStrategy: lo.Ternary(b.overlay, ec2types.SpotAllocationStrategyCapacityOptimizedPrioritized, ec2types.SpotAllocationStrategyPriceCapacityOptimized),\n\t\t}\n\t} else if b.capacityReservationInterruptible {\n\t\tinput.ReservedCapacityOptions = &ec2types.ReservedCapacityOptionsRequest{\n\t\t\tReservationTypes: []ec2types.FleetReservationType{\n\t\t\t\tec2types.FleetReservationTypeInterruptibleCapacityReservation,\n\t\t\t},\n\t\t}\n\t} else if b.capacityReservationType != v1.CapacityReservationTypeCapacityBlock {\n\t\tinput.OnDemandOptions = &ec2types.OnDemandOptionsRequest{\n\t\t\tAllocationStrategy: lo.Ternary(b.overlay, ec2types.FleetOnDemandAllocationStrategyPrioritized, ec2types.FleetOnDemandAllocationStrategyLowestPrice),\n\t\t}\n\t}\n\treturn input\n}\n"
  },
  {
    "path": "pkg/providers/instanceprofile/instanceprofile.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage instanceprofile\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"strings\"\n\n\t\"github.com/aws/aws-sdk-go-v2/service/iam\"\n\tiamtypes \"github.com/aws/aws-sdk-go-v2/service/iam/types\"\n\t\"github.com/aws/smithy-go\"\n\t\"github.com/awslabs/operatorpkg/serrors\"\n\tcache \"github.com/patrickmn/go-cache\"\n\t\"github.com/samber/lo\"\n\n\t\"github.com/aws/karpenter-provider-aws/pkg/operator/options\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\tsdk \"github.com/aws/karpenter-provider-aws/pkg/aws\"\n\tawserrors \"github.com/aws/karpenter-provider-aws/pkg/errors\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/utils\"\n)\n\ntype Provider interface {\n\tGet(context.Context, string) (*iamtypes.InstanceProfile, error)\n\tCreate(context.Context, string, string, map[string]string, string, bool) error\n\tDelete(context.Context, string) error\n\tListClusterProfiles(context.Context) ([]*iamtypes.InstanceProfile, error)\n\tListNodeClassProfiles(context.Context, *v1.EC2NodeClass) ([]*iamtypes.InstanceProfile, error)\n\tIsProtected(string) bool\n\tSetProtectedState(string, bool)\n}\n\ntype DefaultProvider struct {\n\tiamapi                 sdk.IAMAPI\n\tinstanceProfileCache   *cache.Cache // instanceProfileName -> *iamtypes.InstanceProfile\n\troleNotFoundErrorCache RoleNotFoundErrorCache\n\tprotectedProfileCache  *cache.Cache // Cache to account for eventual consistency delays when garbage collecting\n\tregion                 string\n}\n\nfunc NewDefaultProvider(\n\tiamapi sdk.IAMAPI,\n\tinstanceProfileCache *cache.Cache,\n\troleCache *cache.Cache,\n\tprotectedProfileCache *cache.Cache,\n\tregion string,\n) *DefaultProvider {\n\treturn &DefaultProvider{\n\t\tiamapi:                 iamapi,\n\t\tinstanceProfileCache:   instanceProfileCache,\n\t\troleNotFoundErrorCache: RoleNotFoundErrorCache{Cache: roleCache},\n\t\tprotectedProfileCache:  protectedProfileCache,\n\t\tregion:                 region,\n\t}\n}\n\nfunc GetProfileCacheKey(profileName string) string {\n\treturn \"instance-profile:\" + profileName\n}\n\nfunc (p *DefaultProvider) Get(ctx context.Context, instanceProfileName string) (*iamtypes.InstanceProfile, error) {\n\tprofileCacheKey := GetProfileCacheKey(instanceProfileName)\n\tif instanceProfile, ok := p.instanceProfileCache.Get(profileCacheKey); ok {\n\t\treturn instanceProfile.(*iamtypes.InstanceProfile), nil\n\t}\n\tout, err := p.iamapi.GetInstanceProfile(ctx, &iam.GetInstanceProfileInput{\n\t\tInstanceProfileName: lo.ToPtr(instanceProfileName),\n\t})\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tp.instanceProfileCache.SetDefault(profileCacheKey, out.InstanceProfile)\n\treturn out.InstanceProfile, nil\n}\n\nfunc (p *DefaultProvider) Create(\n\tctx context.Context,\n\tinstanceProfileName string,\n\troleName string,\n\ttags map[string]string,\n\tnodeClassUID string,\n\tusePath bool,\n) error {\n\t// Don't attempt to create an instance profile if the role hasn't been found. This prevents runaway instance profile\n\t// creation by the NodeClass controller when there's a missing role.\n\tif err, ok := p.roleNotFoundErrorCache.HasError(roleName); ok {\n\t\treturn fmt.Errorf(\"role not found, %w\", err)\n\t}\n\n\tshouldUpdate := false\n\tprofileCacheKey := GetProfileCacheKey(instanceProfileName)\n\tinstanceProfile, err := p.Get(ctx, instanceProfileName)\n\tif err != nil {\n\t\tif !awserrors.IsNotFound(err) {\n\t\t\treturn serrors.Wrap(fmt.Errorf(\"getting instance profile, %w\", err), \"instance-profile\", instanceProfileName)\n\t\t}\n\t\tinput := &iam.CreateInstanceProfileInput{\n\t\t\tInstanceProfileName: lo.ToPtr(instanceProfileName),\n\t\t\tTags:                utils.IAMMergeTags(tags),\n\t\t}\n\t\tif usePath {\n\t\t\tinput.Path = lo.ToPtr(fmt.Sprintf(\"/karpenter/%s/%s/%s/\", p.region, options.FromContext(ctx).ClusterName, nodeClassUID))\n\t\t}\n\t\to, err := p.iamapi.CreateInstanceProfile(ctx, input)\n\t\tif err != nil {\n\t\t\treturn serrors.Wrap(err, \"instance-profile\", instanceProfileName)\n\t\t}\n\t\tinstanceProfile = o.InstanceProfile\n\t\tshouldUpdate = true\n\t}\n\n\tupdatedRole, err := p.ensureRole(ctx, instanceProfile, roleName)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"ensuring role attached, %w\", err)\n\t}\n\t// Add the role to the cached instance profile for detection in the ensureRole check based on the cache entry\n\tinstanceProfile.Roles = []iamtypes.Role{{\n\t\tRoleName: lo.ToPtr(roleName),\n\t}}\n\n\tif shouldUpdate || updatedRole {\n\t\tp.instanceProfileCache.SetDefault(profileCacheKey, instanceProfile)\n\t}\n\treturn nil\n}\n\n// ensureRole ensures that the correct role is attached to the provided instance profile. If a non-matching role is\n// found already attached, it's removed.\nfunc (p *DefaultProvider) ensureRole(ctx context.Context, instanceProfile *iamtypes.InstanceProfile, roleName string) (bool, error) {\n\t// Instance profiles can only have a single role assigned to them so this profile either has 1 or 0 roles\n\t// https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html\n\tif len(instanceProfile.Roles) == 1 {\n\t\tif lo.FromPtr(instanceProfile.Roles[0].RoleName) == roleName {\n\t\t\treturn false, nil\n\t\t}\n\t\t// Instance profiles can only have a single role assigned to them so this profile either has 1 or 0 roles\n\t\t// https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html\n\t\tif _, err := p.iamapi.RemoveRoleFromInstanceProfile(ctx, &iam.RemoveRoleFromInstanceProfileInput{\n\t\t\tInstanceProfileName: instanceProfile.InstanceProfileName,\n\t\t\tRoleName:            instanceProfile.Roles[0].RoleName,\n\t\t}); err != nil {\n\t\t\treturn false, serrors.Wrap(\n\t\t\t\tfmt.Errorf(\"removing role for instance profile, %w\", err),\n\t\t\t\t\"role\", lo.FromPtr(instanceProfile.Roles[0].RoleName),\n\t\t\t\t\"instance-profile\", lo.FromPtr(instanceProfile.InstanceProfileName),\n\t\t\t)\n\t\t}\n\t}\n\n\t// If the role has a path, ignore the path and take the role name only since AddRoleToInstanceProfile\n\t// does not support paths in the role name.\n\troleName = lo.LastOr(strings.Split(roleName, \"/\"), roleName)\n\tif _, err := p.iamapi.AddRoleToInstanceProfile(ctx, &iam.AddRoleToInstanceProfileInput{\n\t\tInstanceProfileName: instanceProfile.InstanceProfileName,\n\t\tRoleName:            lo.ToPtr(roleName),\n\t}); err != nil {\n\t\terr = serrors.Wrap(\n\t\t\tfmt.Errorf(\"adding role to instance profile, %w\", err),\n\t\t\t\"role\", roleName,\n\t\t\t\"instance-profile\", lo.FromPtr(instanceProfile.InstanceProfileName),\n\t\t)\n\t\tif IsRoleNotFoundError(err) {\n\t\t\tp.roleNotFoundErrorCache.SetError(roleName, err)\n\t\t}\n\t\treturn true, err\n\t}\n\treturn true, nil\n}\n\nfunc (p *DefaultProvider) Delete(ctx context.Context, instanceProfileName string) error {\n\tprofileCacheKey := GetProfileCacheKey(instanceProfileName)\n\tout, err := p.iamapi.GetInstanceProfile(ctx, &iam.GetInstanceProfileInput{\n\t\tInstanceProfileName: lo.ToPtr(instanceProfileName),\n\t})\n\tif err != nil {\n\t\treturn awserrors.IgnoreNotFound(serrors.Wrap(fmt.Errorf(\"getting instance profile, %w\", err), \"instance-profile\", instanceProfileName))\n\t}\n\t// Instance profiles can only have a single role assigned to them so this profile either has 1 or 0 roles\n\t// https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html\n\tif len(out.InstanceProfile.Roles) == 1 {\n\t\tif _, err = p.iamapi.RemoveRoleFromInstanceProfile(ctx, &iam.RemoveRoleFromInstanceProfileInput{\n\t\t\tInstanceProfileName: lo.ToPtr(instanceProfileName),\n\t\t\tRoleName:            out.InstanceProfile.Roles[0].RoleName,\n\t\t}); err != nil {\n\t\t\treturn serrors.Wrap(fmt.Errorf(\"removing role from instance profile, %w\", err), \"role\", lo.FromPtr(out.InstanceProfile.Roles[0].RoleName), \"instance-profile\", instanceProfileName)\n\t\t}\n\t}\n\tif _, err = p.iamapi.DeleteInstanceProfile(ctx, &iam.DeleteInstanceProfileInput{\n\t\tInstanceProfileName: lo.ToPtr(instanceProfileName),\n\t}); err != nil {\n\t\treturn awserrors.IgnoreNotFound(serrors.Wrap(fmt.Errorf(\"deleting instance profile, %w\", err), \"instance-profile\", instanceProfileName))\n\t}\n\tp.instanceProfileCache.Delete(profileCacheKey)\n\tp.SetProtectedState(instanceProfileName, false)\n\treturn nil\n}\n\nfunc (p *DefaultProvider) ListClusterProfiles(ctx context.Context) ([]*iamtypes.InstanceProfile, error) {\n\tinput := &iam.ListInstanceProfilesInput{\n\t\tPathPrefix: lo.ToPtr(fmt.Sprintf(\"/karpenter/%s/%s/\", p.region, options.FromContext(ctx).ClusterName)),\n\t}\n\n\tpaginator := iam.NewListInstanceProfilesPaginator(p.iamapi, input)\n\n\tvar profiles []*iamtypes.InstanceProfile\n\tfor paginator.HasMorePages() {\n\t\tout, err := paginator.NextPage(ctx)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"listing instance profiles, %w\", err)\n\t\t}\n\t\tprofiles = append(profiles, lo.ToSlicePtr(out.InstanceProfiles)...)\n\t}\n\treturn profiles, nil\n}\n\nfunc (p *DefaultProvider) ListNodeClassProfiles(ctx context.Context, nodeClass *v1.EC2NodeClass) ([]*iamtypes.InstanceProfile, error) {\n\tinput := &iam.ListInstanceProfilesInput{\n\t\tPathPrefix: lo.ToPtr(fmt.Sprintf(\"/karpenter/%s/%s/%s/\", p.region, options.FromContext(ctx).ClusterName, string(nodeClass.UID))),\n\t}\n\n\tpaginator := iam.NewListInstanceProfilesPaginator(p.iamapi, input)\n\n\tvar profiles []*iamtypes.InstanceProfile\n\tfor paginator.HasMorePages() {\n\t\tout, err := paginator.NextPage(ctx)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"listing instance profiles, %w\", err)\n\t\t}\n\t\tprofiles = append(profiles, lo.ToSlicePtr(out.InstanceProfiles)...)\n\t}\n\treturn profiles, nil\n}\n\nfunc (p *DefaultProvider) IsProtected(profileName string) bool {\n\t_, exists := p.protectedProfileCache.Get(profileName)\n\treturn exists\n}\n\nfunc (p *DefaultProvider) SetProtectedState(profileName string, protected bool) {\n\tif !protected {\n\t\tp.protectedProfileCache.Delete(profileName)\n\t} else {\n\t\tp.protectedProfileCache.SetDefault(profileName, struct{}{})\n\t}\n}\n\n// IsRoleNotFoundError converts a smithy.APIError returned by AddRoleToInstanceProfile to a RoleNotFoundError.\nfunc IsRoleNotFoundError(err error) bool {\n\tif err == nil {\n\t\treturn false\n\t}\n\tapiErr, ok := lo.ErrorsAs[smithy.APIError](err)\n\tif !ok {\n\t\treturn false\n\t}\n\tif apiErr.ErrorCode() != \"NoSuchEntity\" {\n\t\treturn false\n\t}\n\t// Differentiate between the instance profile not being found, and the role.\n\tif !strings.Contains(apiErr.ErrorMessage(), \"role\") {\n\t\treturn false\n\t}\n\treturn true\n}\n\n// RoleNotFoundErrorCache is a wrapper around a go-cache for handling role not found errors returned by AddRoleToInstanceProfile.\ntype RoleNotFoundErrorCache struct {\n\t*cache.Cache\n}\n\n// HasError returns the last RoleNotFoundError encountered when attempting to add the given role to an instance profile.\nfunc (rc RoleNotFoundErrorCache) HasError(roleName string) (error, bool) {\n\tif err, ok := rc.Get(roleName); ok {\n\t\treturn err.(error), true\n\t}\n\treturn nil, false\n}\n\nfunc (rc RoleNotFoundErrorCache) SetError(roleName string, err error) {\n\trc.SetDefault(roleName, err)\n}\n"
  },
  {
    "path": "pkg/providers/instanceprofile/suite_test.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage instanceprofile_test\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\t\"testing\"\n\t\"time\"\n\n\tmetav1 \"k8s.io/apimachinery/pkg/apis/meta/v1\"\n\n\t\"github.com/aws/aws-sdk-go-v2/aws\"\n\tiamtypes \"github.com/aws/aws-sdk-go-v2/service/iam/types\"\n\t\"github.com/samber/lo\"\n\n\tawserrors \"github.com/aws/karpenter-provider-aws/pkg/errors\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/fake\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/instanceprofile\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\n\t\"sigs.k8s.io/karpenter/pkg/test/v1alpha1\"\n\n\t\"github.com/aws/karpenter-provider-aws/pkg/apis\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/operator/options\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/test\"\n\n\tcoreoptions \"sigs.k8s.io/karpenter/pkg/operator/options\"\n\tcoretest \"sigs.k8s.io/karpenter/pkg/test\"\n\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n\t. \"sigs.k8s.io/karpenter/pkg/test/expectations\"\n\t. \"sigs.k8s.io/karpenter/pkg/utils/testing\"\n)\n\nconst nodeRole = \"NodeRole\"\n\nvar ctx context.Context\nvar stop context.CancelFunc\nvar env *coretest.Environment\nvar awsEnv *test.Environment\nvar nodeClass test.TestNodeClass\n\nfunc TestAWS(t *testing.T) {\n\tctx = TestContextWithLogger(t)\n\tRegisterFailHandler(Fail)\n\tRunSpecs(t, \"InstanceProfileProvider\")\n}\n\nvar _ = BeforeSuite(func() {\n\tenv = coretest.NewEnvironment(coretest.WithCRDs(apis.CRDs...), coretest.WithCRDs(v1alpha1.CRDs...))\n\tctx = coreoptions.ToContext(ctx, coretest.Options(coretest.OptionsFields{FeatureGates: coretest.FeatureGates{ReservedCapacity: lo.ToPtr(true)}}))\n\tctx = options.ToContext(ctx, test.Options())\n\tctx, stop = context.WithCancel(ctx)\n\tawsEnv = test.NewEnvironment(ctx, env)\n})\n\nvar _ = AfterSuite(func() {\n\tstop()\n\tExpect(env.Stop()).To(Succeed(), \"Failed to stop environment\")\n})\n\nvar _ = BeforeEach(func() {\n\tctx = coreoptions.ToContext(ctx, coretest.Options(coretest.OptionsFields{FeatureGates: coretest.FeatureGates{ReservedCapacity: lo.ToPtr(true)}}))\n\tctx = options.ToContext(ctx, test.Options())\n\tnodeClass = test.TestNodeClass{\n\t\tEC2NodeClass: v1.EC2NodeClass{\n\t\t\tSpec: v1.EC2NodeClassSpec{\n\t\t\t\tAMISelectorTerms: []v1.AMISelectorTerm{{\n\t\t\t\t\tAlias: \"al2@latest\",\n\t\t\t\t}},\n\t\t\t\tSubnetSelectorTerms: []v1.SubnetSelectorTerm{\n\t\t\t\t\t{\n\t\t\t\t\t\tTags: map[string]string{\n\t\t\t\t\t\t\t\"*\": \"*\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tSecurityGroupSelectorTerms: []v1.SecurityGroupSelectorTerm{\n\t\t\t\t\t{\n\t\t\t\t\t\tTags: map[string]string{\n\t\t\t\t\t\t\t\"*\": \"*\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\tawsEnv.Reset()\n})\n\nvar _ = AfterEach(func() {\n\tExpectCleanedUp(ctx, env.Client)\n})\n\nvar _ = Describe(\"InstanceProfileProvider\", func() {\n\tDescribeTable(\n\t\t\"should support IAM roles\",\n\t\tfunc(roleWithPath, role string) {\n\t\t\tconst profileName = \"profile-A\"\n\t\t\tnodeClass.Spec.Role = roleWithPath\n\t\t\tExpect(awsEnv.InstanceProfileProvider.Create(ctx, profileName, role, nil, string(nodeClass.UID), true)).To(Succeed())\n\t\t\tExpect(profileName).ToNot(BeNil())\n\t\t\tExpect(awsEnv.IAMAPI.InstanceProfiles[profileName].Roles).To(HaveLen(1))\n\t\t\tExpect(aws.ToString(awsEnv.IAMAPI.InstanceProfiles[profileName].Roles[0].RoleName)).To(Equal(role))\n\t\t},\n\t\tEntry(\"with custom paths\", fmt.Sprintf(\"CustomPath/%s\", nodeRole), nodeRole),\n\t\tEntry(\"without custom paths\", nodeRole, nodeRole),\n\t)\n\n\tIt(\"should list all instance profiles for a NodeClass\", func() {\n\t\t// Create and apply first NodeClass\n\t\tnodeClass1 := test.TestNodeClass{\n\t\t\tEC2NodeClass: v1.EC2NodeClass{\n\t\t\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\t\t\tName: \"nodeclass-1\",\n\t\t\t\t},\n\t\t\t\tSpec: nodeClass.Spec,\n\t\t\t},\n\t\t}\n\t\tnodeClass1.Spec.Role = \"role-1\"\n\t\tExpectApplied(ctx, env.Client, &nodeClass1.EC2NodeClass)\n\n\t\t// Create and apply second NodeClass\n\t\tnodeClass2 := test.TestNodeClass{\n\t\t\tEC2NodeClass: v1.EC2NodeClass{\n\t\t\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\t\t\tName: \"nodeclass-2\",\n\t\t\t\t},\n\t\t\t\tSpec: nodeClass.Spec,\n\t\t\t},\n\t\t}\n\t\tnodeClass2.Spec.Role = \"role-2\"\n\t\tExpectApplied(ctx, env.Client, &nodeClass2.EC2NodeClass)\n\n\t\t// Create instance profiles using the UIDs from the applied NodeClasses\n\t\tprofile1 := \"profile-1\"\n\t\tprofile2 := \"profile-2\"\n\n\t\tawsEnv.IAMAPI.InstanceProfiles = map[string]*iamtypes.InstanceProfile{\n\t\t\tprofile1: {\n\t\t\t\tInstanceProfileName: lo.ToPtr(profile1),\n\t\t\t\tRoles: []iamtypes.Role{\n\t\t\t\t\t{\n\t\t\t\t\t\tRoleId:   aws.String(fake.RoleID()),\n\t\t\t\t\t\tRoleName: aws.String(\"role-1\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tPath: lo.ToPtr(fmt.Sprintf(\"/karpenter/%s/%s/%s/\", fake.DefaultRegion, options.FromContext(ctx).ClusterName, string(nodeClass1.UID))),\n\t\t\t},\n\t\t\tprofile2: {\n\t\t\t\tInstanceProfileName: lo.ToPtr(profile2),\n\t\t\t\tRoles: []iamtypes.Role{\n\t\t\t\t\t{\n\t\t\t\t\t\tRoleId:   aws.String(fake.RoleID()),\n\t\t\t\t\t\tRoleName: aws.String(\"role-2\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tPath: lo.ToPtr(fmt.Sprintf(\"/karpenter/%s/%s/%s/\", fake.DefaultRegion, options.FromContext(ctx).ClusterName, string(nodeClass2.UID))),\n\t\t\t},\n\t\t}\n\n\t\t// List profiles for first NodeClass\n\t\tprofiles, err := awsEnv.InstanceProfileProvider.ListNodeClassProfiles(ctx, &nodeClass1.EC2NodeClass)\n\t\tExpect(err).To(BeNil())\n\n\t\t// Should only get profiles for first NodeClass\n\t\tExpect(profiles).To(HaveLen(1))\n\t\tExpect(aws.ToString(profiles[0].InstanceProfileName)).To(Equal(profile1))\n\t})\n\n\tIt(\"should list all instance profiles for a Cluster\", func() {\n\t\t// Create and apply first NodeClass\n\t\tnodeClass1 := test.TestNodeClass{\n\t\t\tEC2NodeClass: v1.EC2NodeClass{\n\t\t\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\t\t\tName: \"nodeclass-1\",\n\t\t\t\t},\n\t\t\t\tSpec: nodeClass.Spec, // Use the spec from BeforeEach\n\t\t\t},\n\t\t}\n\t\tnodeClass1.Spec.Role = \"role-1\"\n\t\tExpectApplied(ctx, env.Client, &nodeClass1.EC2NodeClass)\n\n\t\t// Create and apply second NodeClass\n\t\tnodeClass2 := test.TestNodeClass{\n\t\t\tEC2NodeClass: v1.EC2NodeClass{\n\t\t\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\t\t\tName: \"nodeclass-2\",\n\t\t\t\t},\n\t\t\t\tSpec: nodeClass.Spec, // Use the spec from BeforeEach\n\t\t\t},\n\t\t}\n\t\tnodeClass2.Spec.Role = \"role-2\"\n\t\tExpectApplied(ctx, env.Client, &nodeClass2.EC2NodeClass)\n\n\t\tprofile1 := \"profile-1\"\n\t\tprofile2 := \"profile-2\"\n\t\tprofile3 := \"profile-3\"\n\n\t\totherClusterCtx := options.ToContext(ctx, test.Options(test.OptionsFields{\n\t\t\tClusterName: lo.ToPtr(\"other-cluster\"),\n\t\t}))\n\n\t\t// Create instance profiles\n\t\tawsEnv.IAMAPI.InstanceProfiles = map[string]*iamtypes.InstanceProfile{\n\t\t\tprofile1: {\n\t\t\t\tInstanceProfileName: lo.ToPtr(profile1),\n\t\t\t\tRoles: []iamtypes.Role{\n\t\t\t\t\t{\n\t\t\t\t\t\tRoleId:   aws.String(fake.RoleID()),\n\t\t\t\t\t\tRoleName: aws.String(\"role-1\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tPath: lo.ToPtr(fmt.Sprintf(\"/karpenter/%s/%s/%s/\", fake.DefaultRegion, options.FromContext(ctx).ClusterName, string(nodeClass1.UID))),\n\t\t\t},\n\t\t\tprofile2: {\n\t\t\t\tInstanceProfileName: lo.ToPtr(profile2),\n\t\t\t\tRoles: []iamtypes.Role{\n\t\t\t\t\t{\n\t\t\t\t\t\tRoleId:   aws.String(fake.RoleID()),\n\t\t\t\t\t\tRoleName: aws.String(\"role-2\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tPath: lo.ToPtr(fmt.Sprintf(\"/karpenter/%s/%s/%s/\", fake.DefaultRegion, options.FromContext(ctx).ClusterName, string(nodeClass2.UID))),\n\t\t\t},\n\t\t\tprofile3: {\n\t\t\t\tInstanceProfileName: lo.ToPtr(profile3),\n\t\t\t\tRoles: []iamtypes.Role{\n\t\t\t\t\t{\n\t\t\t\t\t\tRoleId:   aws.String(fake.RoleID()),\n\t\t\t\t\t\tRoleName: aws.String(\"role-3\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tPath: lo.ToPtr(fmt.Sprintf(\"/karpenter/%s/%s/%s/\", fake.DefaultRegion, options.FromContext(otherClusterCtx).ClusterName, \"some-uid\")),\n\t\t\t},\n\t\t}\n\n\t\t// List all cluster profiles\n\t\tprofiles, err := awsEnv.InstanceProfileProvider.ListClusterProfiles(ctx)\n\t\tExpect(err).To(BeNil())\n\n\t\t// Should get both profiles in first cluster and not the other one\n\t\tExpect(profiles).To(HaveLen(2))\n\t\tprofileNames := []string{\n\t\t\taws.ToString(profiles[0].InstanceProfileName),\n\t\t\taws.ToString(profiles[1].InstanceProfileName),\n\t\t}\n\t\tExpect(profileNames).To(ContainElements(profile1, profile2))\n\t\tExpect(profileNames).ToNot(ContainElement(profile3))\n\t})\n\n\tIt(\"should create an instance profile with the correct path and name\", func() {\n\t\t// Create instance profile\n\t\tprofileName := \"profile-A\"\n\t\tnodeClassUID := \"test-uid\"\n\t\texpectedPath := fmt.Sprintf(\"/karpenter/%s/%s/%s/\", fake.DefaultRegion, options.FromContext(ctx).ClusterName, nodeClassUID)\n\n\t\tExpect(awsEnv.InstanceProfileProvider.Create(ctx, profileName, nodeRole, nil, nodeClassUID, true)).To(Succeed())\n\n\t\t// Get the created profile\n\t\tprofile, err := awsEnv.InstanceProfileProvider.Get(ctx, profileName)\n\t\tExpect(err).To(BeNil())\n\n\t\t// Verify name and path\n\t\tExpect(awsEnv.IAMAPI.InstanceProfiles).To(HaveKey(profileName))\n\t\tExpect(awsEnv.IAMAPI.InstanceProfiles).To(HaveLen(1))\n\t\tExpect(aws.ToString(profile.InstanceProfileName)).To(Equal(profileName))\n\t\tExpect(aws.ToString(profile.Path)).To(Equal(expectedPath))\n\t})\n\n\tIt(\"should delete an instance profile with the correct name\", func() {\n\t\t// Create instance profile first\n\t\tprofileName := \"profile-A\"\n\t\tnodeClassUID := \"test-uid\"\n\n\t\tExpect(awsEnv.InstanceProfileProvider.Create(ctx, profileName, nodeRole, nil, nodeClassUID, true)).To(Succeed())\n\n\t\t// Verify profile exists\n\t\tExpect(awsEnv.IAMAPI.InstanceProfiles).To(HaveKey(profileName))\n\t\t_, err := awsEnv.InstanceProfileProvider.Get(ctx, profileName)\n\t\tExpect(err).To(BeNil())\n\n\t\t// Delete the profile\n\t\tExpect(awsEnv.InstanceProfileProvider.Delete(ctx, profileName)).To(Succeed())\n\n\t\t// Verify profile no longer exists\n\t\t_, err = awsEnv.InstanceProfileProvider.Get(ctx, profileName)\n\t\tExpect(awserrors.IsNotFound(err)).To(BeTrue())\n\n\t\t// Verify it's removed from IAMAPI\n\t\tExpect(awsEnv.IAMAPI.InstanceProfiles).ToNot(HaveKey(profileName))\n\t})\n\n\tIt(\"should reflect IsProtected updates\", func() {\n\t\t// Create a profile\n\t\tprofileName := \"profile-A\"\n\t\tExpect(awsEnv.InstanceProfileProvider.Create(ctx, profileName, nodeRole, nil, \"test-uid\", true)).To(Succeed())\n\n\t\t// Initially should not be protected (protection is set in instance profile reconciler)\n\t\tExpect(awsEnv.InstanceProfileProvider.IsProtected(profileName)).To(BeFalse())\n\n\t\t// Set to protected\n\t\tawsEnv.InstanceProfileProvider.SetProtectedState(profileName, true)\n\t\tExpect(awsEnv.InstanceProfileProvider.IsProtected(profileName)).To(BeTrue())\n\n\t\t// Set back to unprotected\n\t\tawsEnv.InstanceProfileProvider.SetProtectedState(profileName, false)\n\t\tExpect(awsEnv.InstanceProfileProvider.IsProtected(profileName)).To(BeFalse())\n\t})\n\n\tIt(\"should not update instance profile cache item on multiple create calls\", func() {\n\t\troleName := \"test-role\"\n\t\tprofileName := \"test-profile\"\n\t\terr := awsEnv.InstanceProfileProvider.Create(ctx, profileName, roleName, nil, \"test-uid\", true)\n\t\t_, initialExpirationTime, found := awsEnv.InstanceProfileCache.GetWithExpiration(instanceprofile.GetProfileCacheKey(profileName))\n\t\tExpect(found).To(BeTrue())\n\t\tExpect(err).ToNot(HaveOccurred())\n\t\ttime.Sleep(time.Second)\n\n\t\terr = awsEnv.InstanceProfileProvider.Create(ctx, profileName, roleName, nil, \"test-uid\", true)\n\t\tExpect(err).ToNot(HaveOccurred())\n\t\t_, expirationTime, found := awsEnv.InstanceProfileCache.GetWithExpiration(instanceprofile.GetProfileCacheKey(profileName))\n\t\tExpect(found).To(BeTrue())\n\t\tExpect(expirationTime).To(Equal(initialExpirationTime))\n\t})\n\n\tContext(\"Role Cache\", func() {\n\t\tconst roleName = \"test-role\"\n\t\tBeforeEach(func() {\n\t\t\tawsEnv.IAMAPI.EnableRoleValidation = true\n\t\t\tawsEnv.IAMAPI.Roles = map[string]*iamtypes.Role{\n\t\t\t\troleName: &iamtypes.Role{RoleName: lo.ToPtr(roleName)},\n\t\t\t}\n\t\t})\n\t\tIt(\"should not cache role not found errors when the role exists\", func() {\n\t\t\terr := awsEnv.InstanceProfileProvider.Create(ctx, \"test-profile\", roleName, nil, \"test-uid\", true)\n\t\t\tExpect(err).ToNot(HaveOccurred())\n\t\t\t_, ok := awsEnv.RoleCache.Get(roleName)\n\t\t\tExpect(ok).To(BeFalse())\n\t\t})\n\t\tIt(\"should cache role not found errors when the role does not\", func() {\n\t\t\tmissingRoleName := \"non-existent-role\"\n\t\t\terr := awsEnv.InstanceProfileProvider.Create(ctx, \"test-profile\", missingRoleName, nil, \"test-uid\", true)\n\t\t\tExpect(err).To(HaveOccurred())\n\t\t\t_, ok := awsEnv.RoleCache.Get(missingRoleName)\n\t\t\tExpect(ok).To(BeTrue())\n\t\t})\n\t\tIt(\"should not attempt to create instance profile when role is cached as not found\", func() {\n\t\t\tmissingRoleName := \"non-existent-role\"\n\t\t\tawsEnv.RoleCache.SetDefault(missingRoleName, errors.New(\"role not found\"))\n\n\t\t\terr := awsEnv.InstanceProfileProvider.Create(ctx, \"test-profile\", missingRoleName, nil, \"test-uid\", true)\n\t\t\tExpect(err).To(HaveOccurred())\n\n\t\t\tExpect(awsEnv.IAMAPI.InstanceProfiles).To(HaveLen(0))\n\t\t\tExpect(awsEnv.IAMAPI.CreateInstanceProfileBehavior.Calls()).To(BeZero())\n\t\t})\n\t})\n})\n"
  },
  {
    "path": "pkg/providers/instancetype/instancetype.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage instancetype\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"sync\"\n\n\t\"k8s.io/apimachinery/pkg/api/resource\"\n\t\"sigs.k8s.io/karpenter/pkg/scheduling\"\n\n\tawscache \"github.com/aws/karpenter-provider-aws/pkg/cache\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/amifamily\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/capacityreservation\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/instancetype/offering\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/pricing\"\n\n\t\"github.com/mitchellh/hashstructure/v2\"\n\t\"github.com/patrickmn/go-cache\"\n\tcorev1 \"k8s.io/api/core/v1\"\n\t\"sigs.k8s.io/controller-runtime/pkg/client\"\n\t\"sigs.k8s.io/controller-runtime/pkg/log\"\n\tkarpv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n\n\t\"github.com/aws/aws-sdk-go-v2/aws\"\n\t\"github.com/aws/aws-sdk-go-v2/service/ec2\"\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\t\"github.com/samber/lo\"\n\t\"k8s.io/apimachinery/pkg/util/sets\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\tsdk \"github.com/aws/karpenter-provider-aws/pkg/aws\"\n\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/subnet\"\n\n\t\"sigs.k8s.io/karpenter/pkg/cloudprovider\"\n\t\"sigs.k8s.io/karpenter/pkg/utils/pretty\"\n)\n\ntype NodeClass interface {\n\tclient.Object\n\tAMIFamily() string\n\tAMIs() []v1.AMI\n\tBlockDeviceMappings() []*v1.BlockDeviceMapping\n\tCapacityReservations() []v1.CapacityReservation\n\tInstanceStorePolicy() *v1.InstanceStorePolicy\n\tKubeletConfiguration() *v1.KubeletConfiguration\n\tZoneInfo() []v1.ZoneInfo\n}\n\ntype Provider interface {\n\tGet(context.Context, NodeClass, ec2types.InstanceType) (*cloudprovider.InstanceType, error)\n\tList(context.Context, NodeClass) ([]*cloudprovider.InstanceType, error)\n}\n\ntype DefaultProvider struct {\n\tec2api                sdk.EC2API\n\tsubnetProvider        subnet.Provider\n\tinstanceTypesResolver Resolver\n\n\t// Values stored *before* considering insufficient capacity errors from the unavailableOfferings cache.\n\t// Fully initialized Instance Types are also cached based on the set of all instance types, zones, unavailableOfferings cache,\n\t// EC2NodeClass, and kubelet configuration from the NodePool\n\n\tmuInstanceTypesInfo sync.RWMutex\n\t// TODO @engedaam: Look into only storing the needed EC2InstanceTypeInfo\n\tinstanceTypesInfo map[ec2types.InstanceType]ec2types.InstanceTypeInfo\n\n\tmuInstanceTypesOfferings sync.RWMutex\n\tinstanceTypesOfferings   map[ec2types.InstanceType]sets.Set[string]\n\tallZones                 sets.Set[string]\n\n\tinstanceTypesCache      *cache.Cache\n\tdiscoveredCapacityCache *cache.Cache\n\tcm                      *pretty.ChangeMonitor\n\n\tofferingProvider *offering.DefaultProvider\n}\n\nfunc NewDefaultProvider(\n\tinstanceTypesCache *cache.Cache,\n\tofferingCache *cache.Cache,\n\tdiscoveredCapacityCache *cache.Cache,\n\tec2api sdk.EC2API,\n\tsubnetProvider subnet.Provider,\n\tpricingProvider pricing.Provider,\n\tcapacityReservationProvider capacityreservation.Provider,\n\tunavailableOfferingsCache *awscache.UnavailableOfferings,\n\tinstanceTypesResolver Resolver,\n) *DefaultProvider {\n\treturn &DefaultProvider{\n\t\tec2api:                  ec2api,\n\t\tsubnetProvider:          subnetProvider,\n\t\tinstanceTypesInfo:       map[ec2types.InstanceType]ec2types.InstanceTypeInfo{},\n\t\tinstanceTypesOfferings:  map[ec2types.InstanceType]sets.Set[string]{},\n\t\tinstanceTypesResolver:   instanceTypesResolver,\n\t\tinstanceTypesCache:      instanceTypesCache,\n\t\tdiscoveredCapacityCache: discoveredCapacityCache,\n\t\tcm:                      pretty.NewChangeMonitor(),\n\t\tofferingProvider: offering.NewDefaultProvider(\n\t\t\tpricingProvider,\n\t\t\tcapacityReservationProvider,\n\t\t\tunavailableOfferingsCache,\n\t\t\tofferingCache,\n\t\t),\n\t}\n}\n\n//nolint:gocyclo\nfunc (p *DefaultProvider) List(ctx context.Context, nodeClass NodeClass) ([]*cloudprovider.InstanceType, error) {\n\tp.muInstanceTypesInfo.RLock()\n\tp.muInstanceTypesOfferings.RLock()\n\tdefer p.muInstanceTypesInfo.RUnlock()\n\tdefer p.muInstanceTypesOfferings.RUnlock()\n\n\tif len(p.instanceTypesInfo) == 0 {\n\t\treturn nil, fmt.Errorf(\"no instance types found\")\n\t}\n\tif len(p.instanceTypesOfferings) == 0 {\n\t\treturn nil, fmt.Errorf(\"no instance types offerings found\")\n\t}\n\tif len(nodeClass.ZoneInfo()) == 0 {\n\t\treturn nil, fmt.Errorf(\"no subnets found\")\n\t}\n\n\tkey := p.cacheKey(nodeClass)\n\tvar instanceTypes []*cloudprovider.InstanceType\n\tif item, ok := p.instanceTypesCache.Get(key); ok {\n\t\t// Ensure what's returned from this function is a shallow-copy of the slice (not a deep-copy of the data itself)\n\t\t// so that modifications to the ordering of the data don't affect the original\n\t\tinstanceTypes = item.([]*cloudprovider.InstanceType)\n\t} else {\n\t\tinstanceTypes = lo.FilterMapToSlice(p.instanceTypesInfo, func(name ec2types.InstanceType, info ec2types.InstanceTypeInfo) (*cloudprovider.InstanceType, bool) {\n\t\t\tit, err := p.get(ctx, nodeClass, name)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, false\n\t\t\t}\n\t\t\treturn it, true\n\t\t})\n\t\tp.instanceTypesCache.SetDefault(key, instanceTypes)\n\t}\n\t// Offerings aren't cached along with the rest of the instance type info because reserved offerings need to have up to\n\t// date capacity information. Rather than incurring a cache miss each time an instance is launched into a reserved\n\t// offering (or terminated), offerings are injected to the cached instance types on each call. Note that on-demand and\n\t// spot offerings are still cached - only reserved offerings are generated each time.\n\treturn p.offeringProvider.InjectOfferings(\n\t\tctx,\n\t\tinstanceTypes,\n\t\tnodeClass,\n\t\tp.allZones,\n\t), nil\n}\n\nfunc (p *DefaultProvider) Get(ctx context.Context, nodeClass NodeClass, name ec2types.InstanceType) (*cloudprovider.InstanceType, error) {\n\tp.muInstanceTypesInfo.RLock()\n\tp.muInstanceTypesOfferings.RLock()\n\tdefer p.muInstanceTypesInfo.RUnlock()\n\tdefer p.muInstanceTypesOfferings.RUnlock()\n\n\tif len(p.instanceTypesInfo) == 0 {\n\t\treturn nil, fmt.Errorf(\"no instance types found\")\n\t}\n\tif len(p.instanceTypesOfferings) == 0 {\n\t\treturn nil, fmt.Errorf(\"no instance types offerings found\")\n\t}\n\tif len(nodeClass.ZoneInfo()) == 0 {\n\t\treturn nil, fmt.Errorf(\"no subnets found\")\n\t}\n\tvar instanceType *cloudprovider.InstanceType\n\tif item, ok := p.instanceTypesCache.Get(p.cacheKey(nodeClass)); ok {\n\t\tinstanceType, _ = lo.Find(item.([]*cloudprovider.InstanceType), func(i *cloudprovider.InstanceType) bool {\n\t\t\treturn ec2types.InstanceType(i.Name) == name\n\t\t})\n\t}\n\tif instanceType == nil {\n\t\tvar err error\n\t\tinstanceType, err = p.get(ctx, nodeClass, name)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\treturn p.offeringProvider.InjectOfferings(ctx, []*cloudprovider.InstanceType{instanceType}, nodeClass, p.allZones)[0], nil\n}\n\nfunc (p *DefaultProvider) get(ctx context.Context, nodeClass NodeClass, name ec2types.InstanceType) (*cloudprovider.InstanceType, error) {\n\tinfo, ok := p.instanceTypesInfo[name]\n\tif !ok {\n\t\treturn nil, fmt.Errorf(\"instance type %s not found in cache\", name)\n\t}\n\tit := p.instanceTypesResolver.Resolve(ctx, info, p.instanceTypesOfferings[info.InstanceType].UnsortedList(), nodeClass)\n\tif it == nil {\n\t\treturn nil, fmt.Errorf(\"failed to generate instance type %s\", name)\n\t}\n\tif cached, ok := p.discoveredCapacityCache.Get(discoveredCapacityCacheKey(it.Name, nodeClass)); ok {\n\t\tit.Capacity[corev1.ResourceMemory] = cached.(resource.Quantity)\n\t}\n\tInstanceTypeVCPU.Set(float64(lo.FromPtr(info.VCpuInfo.DefaultVCpus)), map[string]string{\n\t\tinstanceTypeLabel: string(info.InstanceType),\n\t})\n\tInstanceTypeMemory.Set(float64(lo.FromPtr(info.MemoryInfo.SizeInMiB)*1024*1024), map[string]string{\n\t\tinstanceTypeLabel: string(info.InstanceType),\n\t})\n\treturn it, nil\n}\n\nfunc (p *DefaultProvider) cacheKey(nodeClass NodeClass) string {\n\t// Compute fully initialized instance types hash key\n\tsubnetZonesHash, _ := hashstructure.Hash(nodeClass.ZoneInfo(), hashstructure.FormatV2, &hashstructure.HashOptions{SlicesAsSets: true})\n\t// Compute hash key against node class AMIs (used to force cache rebuild when AMIs change)\n\tamiHash, _ := hashstructure.Hash(nodeClass.AMIs(), hashstructure.FormatV2, &hashstructure.HashOptions{SlicesAsSets: true})\n\treturn fmt.Sprintf(\"%016x-%016x-%s\",\n\t\tamiHash,\n\t\tsubnetZonesHash,\n\t\tp.instanceTypesResolver.CacheKey(nodeClass),\n\t)\n}\n\nfunc (p *DefaultProvider) UpdateInstanceTypes(ctx context.Context) error {\n\t// DO NOT REMOVE THIS LOCK ----------------------------------------------------------------------------\n\t// We lock here so that multiple callers to getInstanceTypeOfferings do not result in cache misses and multiple\n\t// calls to EC2 when we could have just made one call.\n\tp.muInstanceTypesInfo.Lock()\n\tdefer p.muInstanceTypesInfo.Unlock()\n\n\tvar instanceTypes []ec2types.InstanceTypeInfo\n\tpaginator := ec2.NewDescribeInstanceTypesPaginator(p.ec2api, &ec2.DescribeInstanceTypesInput{\n\t\tFilters: []ec2types.Filter{\n\t\t\t{\n\t\t\t\tName:   aws.String(\"supported-virtualization-type\"),\n\t\t\t\tValues: []string{\"hvm\"},\n\t\t\t},\n\t\t\t{\n\t\t\t\tName:   aws.String(\"processor-info.supported-architecture\"),\n\t\t\t\tValues: []string{\"x86_64\", \"arm64\"},\n\t\t\t},\n\t\t},\n\t\t// MaxResults for DescribeInstanceTypes is capped at 100\n\t\tMaxResults: lo.ToPtr[int32](100),\n\t})\n\tfor paginator.HasMorePages() {\n\t\tpage, err := paginator.NextPage(ctx)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"describing instance types, %w\", err)\n\t\t}\n\t\tinstanceTypes = append(instanceTypes, page.InstanceTypes...)\n\t}\n\n\tif p.cm.HasChanged(\"instance-types\", instanceTypes) {\n\t\t// Only update instanceTypesSeqNun with the instance types have been changed\n\t\t// This is to not create new keys with duplicate instance types option\n\t\tp.instanceTypesCache.Flush() // None of the cached instance type info is valid when the instance type info changes\n\t\tlog.FromContext(ctx).WithValues(\"count\", len(instanceTypes)).V(1).Info(\"discovered instance types\")\n\t}\n\tp.instanceTypesInfo = lo.SliceToMap(instanceTypes, func(i ec2types.InstanceTypeInfo) (ec2types.InstanceType, ec2types.InstanceTypeInfo) {\n\t\treturn i.InstanceType, i\n\t})\n\treturn nil\n}\n\nfunc (p *DefaultProvider) UpdateInstanceTypeOfferings(ctx context.Context) error {\n\t// DO NOT REMOVE THIS LOCK ----------------------------------------------------------------------------\n\t// We lock here so that multiple callers to GetInstanceTypes do not result in cache misses and multiple\n\t// calls to EC2 when we could have just made one call. This lock is here because multiple callers to EC2 result\n\t// in A LOT of extra memory generated from the response for simultaneous callers.\n\t// TODO @joinnis: This can be made more efficient by holding a Read lock and only obtaining the Write if not in cache\n\tp.muInstanceTypesOfferings.Lock()\n\tdefer p.muInstanceTypesOfferings.Unlock()\n\n\t// Get offerings from EC2\n\tinstanceTypeOfferings := map[ec2types.InstanceType]sets.Set[string]{}\n\n\tpaginator := ec2.NewDescribeInstanceTypeOfferingsPaginator(p.ec2api, &ec2.DescribeInstanceTypeOfferingsInput{\n\t\tLocationType: ec2types.LocationTypeAvailabilityZone,\n\t\t// MaxResults for DescribeInstanceTypeOfferings is capped at 1000\n\t\tMaxResults: lo.ToPtr[int32](1000),\n\t})\n\n\tfor paginator.HasMorePages() {\n\t\tpage, err := paginator.NextPage(ctx)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"describing instance type zone offerings, %w\", err)\n\t\t}\n\n\t\tfor _, offering := range page.InstanceTypeOfferings {\n\t\t\tif _, ok := instanceTypeOfferings[offering.InstanceType]; !ok {\n\t\t\t\tinstanceTypeOfferings[offering.InstanceType] = sets.New[string]()\n\t\t\t}\n\t\t\tinstanceTypeOfferings[offering.InstanceType].Insert(lo.FromPtr(offering.Location))\n\t\t}\n\t}\n\n\tif p.cm.HasChanged(\"instance-type-offering\", instanceTypeOfferings) {\n\t\t// Only update instanceTypesSeqNun with the instance type offerings  have been changed\n\t\t// This is to not create new keys with duplicate instance type offerings option\n\t\tp.instanceTypesCache.Flush() // None of the cached instance type info is valid when the instance type offerings info changes\n\t\tlog.FromContext(ctx).WithValues(\"instance-type-count\", len(instanceTypeOfferings)).V(1).Info(\"discovered offerings for instance types\")\n\t}\n\tp.instanceTypesOfferings = instanceTypeOfferings\n\n\tallZones := sets.New[string]()\n\tfor _, offeringZones := range instanceTypeOfferings {\n\t\tfor zone := range offeringZones {\n\t\t\tallZones.Insert(zone)\n\t\t}\n\t}\n\tif p.cm.HasChanged(\"zones\", allZones) {\n\t\tlog.FromContext(ctx).WithValues(\"zones\", allZones.UnsortedList()).V(1).Info(\"discovered zones\")\n\t}\n\tp.allZones = allZones\n\treturn nil\n}\n\nfunc (p *DefaultProvider) UpdateInstanceTypeCapacityFromNode(ctx context.Context, node *corev1.Node, nodeClaim *karpv1.NodeClaim, nodeClass NodeClass) error {\n\t// Get mappings for most recent AMIs\n\tinstanceTypeName := node.Labels[corev1.LabelInstanceTypeStable]\n\tamiMap := amifamily.MapToInstanceTypes([]*cloudprovider.InstanceType{{\n\t\tName:         instanceTypeName,\n\t\tRequirements: scheduling.NewLabelRequirements(node.Labels),\n\t}}, nodeClass.AMIs())\n\t// Ensure NodeClaim AMI is current\n\tif !lo.ContainsBy(amiMap[nodeClaim.Status.ImageID], func(i *cloudprovider.InstanceType) bool {\n\t\treturn i.Name == instanceTypeName\n\t}) {\n\t\treturn nil\n\t}\n\n\tkey := discoveredCapacityCacheKey(instanceTypeName, nodeClass)\n\tactualCapacity := node.Status.Capacity.Memory()\n\tif cachedCapacity, ok := p.discoveredCapacityCache.Get(key); !ok || actualCapacity.Cmp(cachedCapacity.(resource.Quantity)) < 1 {\n\t\t// Update the capacity in the cache if it is less than or equal to the current cached capacity. We update when it's equal to refresh the TTL.\n\t\tp.discoveredCapacityCache.SetDefault(key, *actualCapacity)\n\t\t// Only log if we haven't discovered the capacity for the instance type yet or the discovered capacity is **less** than the cached capacity\n\t\tif !ok || actualCapacity.Cmp(cachedCapacity.(resource.Quantity)) < 0 {\n\t\t\tlog.FromContext(ctx).WithValues(\"memory-capacity\", actualCapacity, \"instance-type\", instanceTypeName).V(1).Info(\"updating discovered capacity cache\")\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (p *DefaultProvider) Reset() {\n\tp.instanceTypesInfo = map[ec2types.InstanceType]ec2types.InstanceTypeInfo{}\n\tp.instanceTypesOfferings = map[ec2types.InstanceType]sets.Set[string]{}\n\tp.instanceTypesCache.Flush()\n\tp.discoveredCapacityCache.Flush()\n}\n\nfunc discoveredCapacityCacheKey(instanceType string, nodeClass NodeClass) string {\n\tamiHash, _ := hashstructure.Hash(nodeClass.AMIs(), hashstructure.FormatV2, &hashstructure.HashOptions{SlicesAsSets: true})\n\treturn fmt.Sprintf(\"%s-%016x\", instanceType, amiHash)\n}\n"
  },
  {
    "path": "pkg/providers/instancetype/metrics.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage instancetype\n\nimport (\n\topmetrics \"github.com/awslabs/operatorpkg/metrics\"\n\t\"github.com/prometheus/client_golang/prometheus\"\n\tcrmetrics \"sigs.k8s.io/controller-runtime/pkg/metrics\"\n\n\t\"sigs.k8s.io/karpenter/pkg/metrics\"\n)\n\nconst (\n\tcloudProviderSubsystem = \"cloudprovider\"\n\tinstanceTypeLabel      = \"instance_type\"\n)\n\nvar (\n\tInstanceTypeVCPU = opmetrics.NewPrometheusGauge(\n\t\tcrmetrics.Registry,\n\t\tprometheus.GaugeOpts{\n\t\t\tNamespace: metrics.Namespace,\n\t\t\tSubsystem: cloudProviderSubsystem,\n\t\t\tName:      \"instance_type_cpu_cores\",\n\t\t\tHelp:      \"VCPUs cores for a given instance type.\",\n\t\t},\n\t\t[]string{\n\t\t\tinstanceTypeLabel,\n\t\t},\n\t)\n\tInstanceTypeMemory = opmetrics.NewPrometheusGauge(\n\t\tcrmetrics.Registry,\n\t\tprometheus.GaugeOpts{\n\t\t\tNamespace: metrics.Namespace,\n\t\t\tSubsystem: cloudProviderSubsystem,\n\t\t\tName:      \"instance_type_memory_bytes\",\n\t\t\tHelp:      \"Memory, in bytes, for a given instance type.\",\n\t\t},\n\t\t[]string{\n\t\t\tinstanceTypeLabel,\n\t\t},\n\t)\n)\n"
  },
  {
    "path": "pkg/providers/instancetype/offering/offering.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage offering\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"sync\"\n\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\t\"github.com/mitchellh/hashstructure/v2\"\n\t\"github.com/patrickmn/go-cache\"\n\t\"github.com/samber/lo\"\n\tcorev1 \"k8s.io/api/core/v1\"\n\t\"k8s.io/apimachinery/pkg/util/sets\"\n\tkarpv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n\t\"sigs.k8s.io/karpenter/pkg/cloudprovider\"\n\t\"sigs.k8s.io/karpenter/pkg/operator/options\"\n\t\"sigs.k8s.io/karpenter/pkg/scheduling\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\tawscache \"github.com/aws/karpenter-provider-aws/pkg/cache\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/capacityreservation\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/pricing\"\n)\n\ntype Provider interface {\n\tInjectOfferings(context.Context, []*cloudprovider.InstanceType, *v1.EC2NodeClass, []string) []*cloudprovider.InstanceType\n}\n\ntype NodeClass interface {\n\tCapacityReservations() []v1.CapacityReservation\n\tZoneInfo() []v1.ZoneInfo\n}\n\ntype DefaultProvider struct {\n\tpricingProvider                pricing.Provider\n\tcapacityReservationProvider    capacityreservation.Provider\n\tunavailableOfferings           *awscache.UnavailableOfferings\n\tlastUnavailableOfferingsSeqNum sync.Map // instance type -> seqNum\n\tcache                          *cache.Cache\n}\n\nfunc NewDefaultProvider(\n\tpricingProvider pricing.Provider,\n\tcapacityReservationProvider capacityreservation.Provider,\n\tunavailableOfferingsCache *awscache.UnavailableOfferings,\n\tofferingCache *cache.Cache,\n) *DefaultProvider {\n\treturn &DefaultProvider{\n\t\tpricingProvider:             pricingProvider,\n\t\tcapacityReservationProvider: capacityReservationProvider,\n\t\tunavailableOfferings:        unavailableOfferingsCache,\n\t\tcache:                       offeringCache,\n\t}\n}\n\nfunc (p *DefaultProvider) InjectOfferings(\n\tctx context.Context,\n\tinstanceTypes []*cloudprovider.InstanceType,\n\tnodeClass NodeClass,\n\tallZones sets.Set[string],\n) []*cloudprovider.InstanceType {\n\tsubnetZonesToZoneIDs := lo.SliceToMap(nodeClass.ZoneInfo(), func(info v1.ZoneInfo) (string, string) {\n\t\treturn info.Zone, info.ZoneID\n\t})\n\tvar its []*cloudprovider.InstanceType\n\tfor _, it := range instanceTypes {\n\t\tofferings := p.createOfferings(\n\t\t\tctx,\n\t\t\tit,\n\t\t\tnodeClass,\n\t\t\tallZones,\n\t\t\tsubnetZonesToZoneIDs,\n\t\t)\n\t\t// NOTE: By making this copy one level deep, we can modify the offerings without mutating the results from previous\n\t\t// GetInstanceTypes calls. This should still be done with caution - it is currently done here in the provider, and\n\t\t// once in the instance provider (filterReservedInstanceTypes)\n\t\tits = append(its, &cloudprovider.InstanceType{\n\t\t\tName:         it.Name,\n\t\t\tRequirements: it.Requirements,\n\t\t\tOfferings:    offerings,\n\t\t\tCapacity:     it.Capacity,\n\t\t\tOverhead:     it.Overhead,\n\t\t})\n\t}\n\treturn its\n}\n\n//nolint:gocyclo\nfunc (p *DefaultProvider) createOfferings(\n\tctx context.Context,\n\tit *cloudprovider.InstanceType,\n\tnodeClass NodeClass,\n\tallZones sets.Set[string],\n\tsubnetZonesToZoneIDs map[string]string,\n) cloudprovider.Offerings {\n\tvar offerings []*cloudprovider.Offering\n\titZones := sets.New(it.Requirements.Get(corev1.LabelTopologyZone).Values()...)\n\n\t// If the sequence number has changed for the unavailable offerings, we know that we can't use the previously cached value\n\tlastSeqNum, ok := p.lastUnavailableOfferingsSeqNum.Load(ec2types.InstanceType(it.Name))\n\tif !ok {\n\t\tlastSeqNum = 0\n\t}\n\tseqNum := p.unavailableOfferings.SeqNum(ec2types.InstanceType(it.Name))\n\tif ofs, ok := p.cache.Get(p.cacheKeyFromInstanceType(it)); ok && lastSeqNum == seqNum {\n\t\tofferings = append(offerings, ofs.([]*cloudprovider.Offering)...)\n\t} else {\n\t\tvar cachedOfferings []*cloudprovider.Offering\n\t\tfor zone := range allZones {\n\t\t\tfor _, capacityType := range it.Requirements.Get(karpv1.CapacityTypeLabelKey).Values() {\n\t\t\t\t// Reserved capacity types are constructed separately\n\t\t\t\tif capacityType == karpv1.CapacityTypeReserved {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tisUnavailable := p.unavailableOfferings.IsUnavailable(ec2types.InstanceType(it.Name), zone, capacityType)\n\t\t\t\tvar price float64\n\t\t\t\tvar hasPrice bool\n\t\t\t\tswitch capacityType {\n\t\t\t\tcase karpv1.CapacityTypeOnDemand:\n\t\t\t\t\tprice, hasPrice = p.pricingProvider.OnDemandPrice(ec2types.InstanceType(it.Name))\n\t\t\t\tcase karpv1.CapacityTypeSpot:\n\t\t\t\t\tprice, hasPrice = p.pricingProvider.SpotPrice(ec2types.InstanceType(it.Name), zone)\n\t\t\t\tdefault:\n\t\t\t\t\tpanic(fmt.Sprintf(\"invalid capacity type %q in requirements for instance type %q\", capacityType, it.Name))\n\t\t\t\t}\n\t\t\t\toffering := &cloudprovider.Offering{\n\t\t\t\t\tRequirements: scheduling.NewRequirements(\n\t\t\t\t\t\tscheduling.NewRequirement(karpv1.CapacityTypeLabelKey, corev1.NodeSelectorOpIn, capacityType),\n\t\t\t\t\t\tscheduling.NewRequirement(corev1.LabelTopologyZone, corev1.NodeSelectorOpIn, zone),\n\t\t\t\t\t\tscheduling.NewRequirement(cloudprovider.ReservationIDLabel, corev1.NodeSelectorOpDoesNotExist),\n\t\t\t\t\t\tscheduling.NewRequirement(v1.LabelCapacityReservationType, corev1.NodeSelectorOpDoesNotExist),\n\t\t\t\t\t\tscheduling.NewRequirement(v1.LabelCapacityReservationInterruptible, corev1.NodeSelectorOpDoesNotExist),\n\t\t\t\t\t),\n\t\t\t\t\tPrice:     price,\n\t\t\t\t\tAvailable: !isUnavailable && hasPrice && itZones.Has(zone),\n\t\t\t\t}\n\t\t\t\tif id, ok := subnetZonesToZoneIDs[zone]; ok {\n\t\t\t\t\toffering.Requirements.Add(scheduling.NewRequirement(v1.LabelTopologyZoneID, corev1.NodeSelectorOpIn, id))\n\t\t\t\t}\n\t\t\t\tcachedOfferings = append(cachedOfferings, offering)\n\t\t\t}\n\t\t}\n\t\tp.cache.SetDefault(p.cacheKeyFromInstanceType(it), cachedOfferings)\n\t\tp.lastUnavailableOfferingsSeqNum.Store(ec2types.InstanceType(it.Name), seqNum)\n\t\tofferings = append(offerings, cachedOfferings...)\n\t}\n\tif !options.FromContext(ctx).FeatureGates.ReservedCapacity {\n\t\treturn offerings\n\t}\n\n\tcapacityReservations := nodeClass.CapacityReservations()\n\tfor i := range capacityReservations {\n\t\tif capacityReservations[i].InstanceType != it.Name {\n\t\t\tcontinue\n\t\t}\n\t\treservation := &capacityReservations[i]\n\t\tprice := 0.0\n\t\tif odPrice, ok := p.pricingProvider.OnDemandPrice(ec2types.InstanceType(it.Name)); ok {\n\t\t\t// Divide the on-demand price by a sufficiently large constant. This allows us to treat the reservation as \"free\",\n\t\t\t// while maintaining relative ordering for consolidation. If the pricing details are unavailable for whatever reason,\n\t\t\t// still succeed to create the offering and leave the price at zero. This will break consolidation, but will allow\n\t\t\t// users to utilize the instances they're already paying for.\n\t\t\tprice = odPrice / 10_000_000.0\n\t\t}\n\t\treservationCapacity := p.capacityReservationProvider.GetAvailableInstanceCount(reservation.ID)\n\t\toffering := &cloudprovider.Offering{\n\t\t\tRequirements: scheduling.NewRequirements(\n\t\t\t\tscheduling.NewRequirement(karpv1.CapacityTypeLabelKey, corev1.NodeSelectorOpIn, karpv1.CapacityTypeReserved),\n\t\t\t\tscheduling.NewRequirement(corev1.LabelTopologyZone, corev1.NodeSelectorOpIn, reservation.AvailabilityZone),\n\t\t\t\tscheduling.NewRequirement(cloudprovider.ReservationIDLabel, corev1.NodeSelectorOpIn, reservation.ID),\n\t\t\t\tscheduling.NewRequirement(v1.LabelCapacityReservationType, corev1.NodeSelectorOpIn, string(reservation.ReservationType)),\n\t\t\t\tscheduling.NewRequirement(v1.LabelCapacityReservationInterruptible, corev1.NodeSelectorOpIn, fmt.Sprintf(\"%t\", reservation.Interruptible)),\n\t\t\t),\n\t\t\tPrice:               price,\n\t\t\tAvailable:           reservationCapacity != 0 && itZones.Has(reservation.AvailabilityZone) && reservation.State != v1.CapacityReservationStateExpiring,\n\t\t\tReservationCapacity: reservationCapacity,\n\t\t}\n\t\tif id, ok := subnetZonesToZoneIDs[reservation.AvailabilityZone]; ok {\n\t\t\toffering.Requirements.Add(scheduling.NewRequirement(v1.LabelTopologyZoneID, corev1.NodeSelectorOpIn, id))\n\t\t}\n\t\tofferings = append(offerings, offering)\n\t}\n\treturn offerings\n}\n\nfunc (p *DefaultProvider) cacheKeyFromInstanceType(it *cloudprovider.InstanceType) string {\n\tzonesHash, _ := hashstructure.Hash(\n\t\tit.Requirements.Get(corev1.LabelTopologyZone).Values(),\n\t\thashstructure.FormatV2,\n\t\t&hashstructure.HashOptions{SlicesAsSets: true},\n\t)\n\tcapacityTypesHash, _ := hashstructure.Hash(\n\t\tit.Requirements.Get(karpv1.CapacityTypeLabelKey).Values(),\n\t\thashstructure.FormatV2,\n\t\t&hashstructure.HashOptions{SlicesAsSets: true},\n\t)\n\treturn fmt.Sprintf(\n\t\t\"%s-%016x-%016x\",\n\t\tit.Name,\n\t\tzonesHash,\n\t\tcapacityTypesHash,\n\t)\n}\n"
  },
  {
    "path": "pkg/providers/instancetype/suite_test.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage instancetype_test\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"math\"\n\t\"reflect\"\n\t\"sort\"\n\t\"strings\"\n\t\"sync\"\n\t\"testing\"\n\t\"time\"\n\n\t\"sigs.k8s.io/karpenter/pkg/test/v1alpha1\"\n\n\t\"github.com/aws/aws-sdk-go-v2/aws\"\n\t\"github.com/aws/aws-sdk-go-v2/service/ec2\"\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\t\"github.com/awslabs/operatorpkg/object\"\n\t\"github.com/awslabs/operatorpkg/status\"\n\t\"github.com/imdario/mergo\"\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n\t\"github.com/samber/lo\"\n\tcorev1 \"k8s.io/api/core/v1\"\n\t\"k8s.io/apimachinery/pkg/api/resource\"\n\tmetav1 \"k8s.io/apimachinery/pkg/apis/meta/v1\"\n\t\"k8s.io/apimachinery/pkg/util/sets\"\n\t\"k8s.io/client-go/tools/record\"\n\tclock \"k8s.io/utils/clock/testing\"\n\n\tkarpv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n\tcorecloudprovider \"sigs.k8s.io/karpenter/pkg/cloudprovider\"\n\t\"sigs.k8s.io/karpenter/pkg/controllers/provisioning\"\n\t\"sigs.k8s.io/karpenter/pkg/controllers/state\"\n\t\"sigs.k8s.io/karpenter/pkg/events\"\n\tcoreoptions \"sigs.k8s.io/karpenter/pkg/operator/options\"\n\t\"sigs.k8s.io/karpenter/pkg/scheduling\"\n\tcoretest \"sigs.k8s.io/karpenter/pkg/test\"\n\n\t. \"sigs.k8s.io/karpenter/pkg/test/expectations\"\n\t. \"sigs.k8s.io/karpenter/pkg/utils/testing\"\n\n\t\"sigs.k8s.io/karpenter/pkg/utils/resources\"\n\n\t\"github.com/aws/karpenter-provider-aws/pkg/apis\"\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/cloudprovider\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/fake\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/operator/options\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/instancetype\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/test\"\n)\n\nvar ctx context.Context\nvar env *coretest.Environment\nvar awsEnv *test.Environment\nvar fakeClock *clock.FakeClock\nvar prov *provisioning.Provisioner\nvar cluster *state.Cluster\nvar cloudProvider *cloudprovider.CloudProvider\n\nfunc TestAWS(t *testing.T) {\n\tctx = TestContextWithLogger(t)\n\tRegisterFailHandler(Fail)\n\tRunSpecs(t, \"InstanceTypeProvider\")\n}\n\nvar _ = BeforeSuite(func() {\n\tenv = coretest.NewEnvironment(coretest.WithCRDs(apis.CRDs...), coretest.WithCRDs(v1alpha1.CRDs...))\n\tctx = coreoptions.ToContext(ctx, coretest.Options(coretest.OptionsFields{FeatureGates: coretest.FeatureGates{ReservedCapacity: lo.ToPtr(true)}}))\n\tctx = options.ToContext(ctx, test.Options())\n\tawsEnv = test.NewEnvironment(ctx, env)\n\tfakeClock = &clock.FakeClock{}\n\tcloudProvider = cloudprovider.New(awsEnv.InstanceTypesProvider, awsEnv.InstanceProvider, events.NewRecorder(&record.FakeRecorder{}),\n\t\tenv.Client, awsEnv.AMIProvider, awsEnv.SecurityGroupProvider, awsEnv.CapacityReservationProvider, awsEnv.InstanceTypeStore)\n\tcluster = state.NewCluster(fakeClock, env.Client, cloudProvider)\n\tprov = provisioning.NewProvisioner(env.Client, events.NewRecorder(&record.FakeRecorder{}), cloudProvider, cluster, fakeClock)\n})\n\nvar _ = AfterSuite(func() {\n\tExpect(env.Stop()).To(Succeed(), \"Failed to stop environment\")\n})\n\nvar _ = BeforeEach(func() {\n\tctx = coreoptions.ToContext(ctx, coretest.Options(coretest.OptionsFields{FeatureGates: coretest.FeatureGates{ReservedCapacity: lo.ToPtr(true)}}))\n\tctx = options.ToContext(ctx, test.Options())\n\tcluster.Reset()\n\tawsEnv.Reset()\n})\n\nvar _ = AfterEach(func() {\n\tExpectCleanedUp(ctx, env.Client)\n})\n\nvar _ = Describe(\"InstanceTypeProvider\", func() {\n\tvar nodeClass, windowsNodeClass *v1.EC2NodeClass\n\tvar nodePool, windowsNodePool *karpv1.NodePool\n\tBeforeEach(func() {\n\t\tnodeClass = test.EC2NodeClass(\n\t\t\tv1.EC2NodeClass{\n\t\t\t\tStatus: v1.EC2NodeClassStatus{\n\t\t\t\t\tInstanceProfile: \"test-profile\",\n\t\t\t\t\tSecurityGroups: []v1.SecurityGroup{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tID: \"sg-test1\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tID: \"sg-test2\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tID: \"sg-test3\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tSubnets: []v1.Subnet{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tID:   \"subnet-test1\",\n\t\t\t\t\t\t\tZone: \"test-zone-1a\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tID:   \"subnet-test2\",\n\t\t\t\t\t\t\tZone: \"test-zone-1b\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tID:   \"subnet-test3\",\n\t\t\t\t\t\t\tZone: \"test-zone-1c\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t)\n\t\tnodeClass.StatusConditions().SetTrue(status.ConditionReady)\n\t\tnodePool = coretest.NodePool(karpv1.NodePool{\n\t\t\tSpec: karpv1.NodePoolSpec{\n\t\t\t\tTemplate: karpv1.NodeClaimTemplate{\n\t\t\t\t\tSpec: karpv1.NodeClaimTemplateSpec{\n\t\t\t\t\t\tRequirements: []karpv1.NodeSelectorRequirementWithMinValues{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tKey:      karpv1.CapacityTypeLabelKey,\n\t\t\t\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\t\t\t\tValues:   []string{karpv1.CapacityTypeOnDemand},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tNodeClassRef: &karpv1.NodeClassReference{\n\t\t\t\t\t\t\tGroup: object.GVK(nodeClass).Group,\n\t\t\t\t\t\t\tKind:  object.GVK(nodeClass).Kind,\n\t\t\t\t\t\t\tName:  nodeClass.Name,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\twindowsNodeClass = test.EC2NodeClass(v1.EC2NodeClass{\n\t\t\tSpec: v1.EC2NodeClassSpec{\n\t\t\t\tAMISelectorTerms: []v1.AMISelectorTerm{{\n\t\t\t\t\tAlias: \"windows2022@latest\",\n\t\t\t\t}},\n\t\t\t},\n\t\t\tStatus: v1.EC2NodeClassStatus{\n\t\t\t\tInstanceProfile: \"test-profile\",\n\t\t\t\tSecurityGroups:  nodeClass.Status.SecurityGroups,\n\t\t\t\tSubnets:         nodeClass.Status.Subnets,\n\t\t\t\tAMIs: []v1.AMI{\n\t\t\t\t\t{\n\t\t\t\t\t\tID: \"ami-window-test1\",\n\t\t\t\t\t\tRequirements: []corev1.NodeSelectorRequirement{\n\t\t\t\t\t\t\t{Key: corev1.LabelArchStable, Operator: corev1.NodeSelectorOpIn, Values: []string{karpv1.ArchitectureAmd64}},\n\t\t\t\t\t\t\t{Key: corev1.LabelOSStable, Operator: corev1.NodeSelectorOpIn, Values: []string{string(corev1.Windows)}},\n\t\t\t\t\t\t\t{Key: corev1.LabelWindowsBuild, Operator: corev1.NodeSelectorOpIn, Values: []string{v1.Windows2022Build}},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\twindowsNodeClass.StatusConditions().SetTrue(status.ConditionReady)\n\t\twindowsNodePool = coretest.NodePool(karpv1.NodePool{\n\t\t\tSpec: karpv1.NodePoolSpec{\n\t\t\t\tTemplate: karpv1.NodeClaimTemplate{\n\t\t\t\t\tSpec: karpv1.NodeClaimTemplateSpec{\n\t\t\t\t\t\tRequirements: []karpv1.NodeSelectorRequirementWithMinValues{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tKey:      karpv1.CapacityTypeLabelKey,\n\t\t\t\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\t\t\t\tValues:   []string{karpv1.CapacityTypeOnDemand},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tNodeClassRef: &karpv1.NodeClassReference{\n\t\t\t\t\t\t\tGroup: object.GVK(windowsNodeClass).Group,\n\t\t\t\t\t\t\tKind:  object.GVK(windowsNodeClass).Kind,\n\t\t\t\t\t\t\tName:  windowsNodeClass.Name,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\t_, err := awsEnv.SubnetProvider.List(ctx, nodeClass) // Hydrate the subnet cache\n\t\tExpect(err).To(BeNil())\n\t\tExpect(awsEnv.InstanceTypesProvider.UpdateInstanceTypes(ctx)).To(Succeed())\n\t\tExpect(awsEnv.InstanceTypesProvider.UpdateInstanceTypeOfferings(ctx)).To(Succeed())\n\t})\n\n\tIt(\"should support individual instance type labels\", func() {\n\t\tExpectApplied(ctx, env.Client, nodePool, windowsNodePool, nodeClass, windowsNodeClass)\n\n\t\tnodeSelector := map[string]string{\n\t\t\t// Well known\n\t\t\tkarpv1.NodePoolLabelKey:        nodePool.Name,\n\t\t\tcorev1.LabelTopologyRegion:     fake.DefaultRegion,\n\t\t\tcorev1.LabelTopologyZone:       \"test-zone-1a\",\n\t\t\tcorev1.LabelInstanceTypeStable: \"g4dn.8xlarge\",\n\t\t\tcorev1.LabelOSStable:           \"linux\",\n\t\t\tcorev1.LabelArchStable:         \"amd64\",\n\t\t\tkarpv1.CapacityTypeLabelKey:    \"on-demand\",\n\t\t\t// Well Known to AWS\n\t\t\tv1.LabelInstanceTenancy:                      \"default\",\n\t\t\tv1.LabelInstanceHypervisor:                   \"nitro\",\n\t\t\tv1.LabelInstanceEncryptionInTransitSupported: \"true\",\n\t\t\tv1.LabelInstanceCategory:                     \"g\",\n\t\t\tv1.LabelInstanceCapabilityFlex:               \"false\",\n\t\t\tv1.LabelInstanceGeneration:                   \"4\",\n\t\t\tv1.LabelInstanceFamily:                       \"g4dn\",\n\t\t\tv1.LabelInstanceSize:                         \"8xlarge\",\n\t\t\tv1.LabelInstanceCPU:                          \"32\",\n\t\t\tv1.LabelInstanceCPUManufacturer:              \"intel\",\n\t\t\tv1.LabelInstanceCPUSustainedClockSpeedMhz:    \"2500\",\n\t\t\tv1.LabelInstanceMemory:                       \"131072\",\n\t\t\tv1.LabelInstanceEBSBandwidth:                 \"9500\",\n\t\t\tv1.LabelInstanceNetworkBandwidth:             \"50000\",\n\t\t\tv1.LabelInstanceGPUName:                      \"t4\",\n\t\t\tv1.LabelInstanceGPUManufacturer:              \"nvidia\",\n\t\t\tv1.LabelInstanceGPUCount:                     \"1\",\n\t\t\tv1.LabelInstanceGPUMemory:                    \"16384\",\n\t\t\tv1.LabelInstanceLocalNVME:                    \"900\",\n\t\t\t// TODO - NVIDIA/GPU instances should not have Neuron/accelerator labels\n\t\t\tv1.LabelInstanceAcceleratorName:         \"inferentia2\",\n\t\t\tv1.LabelInstanceAcceleratorManufacturer: \"aws\",\n\t\t\tv1.LabelInstanceAcceleratorCount:        \"1\",\n\t\t\tv1.LabelTopologyZoneID:                  \"tstz1-1a\",\n\t\t\t// Deprecated Labels\n\t\t\tcorev1.LabelFailureDomainBetaRegion: fake.DefaultRegion,\n\t\t\tcorev1.LabelFailureDomainBetaZone:   \"test-zone-1a\",\n\t\t\t\"beta.kubernetes.io/arch\":           \"amd64\",\n\t\t\t\"beta.kubernetes.io/os\":             \"linux\",\n\t\t\tcorev1.LabelInstanceType:            \"g4dn.8xlarge\",\n\t\t\t\"topology.ebs.csi.aws.com/zone\":     \"test-zone-1a\",\n\t\t\tcorev1.LabelWindowsBuild:            v1.Windows2022Build,\n\t\t}\n\n\t\t// Ensure that we're exercising all well known labels\n\t\tExpect(lo.Keys(nodeSelector)).To(ContainElements(append(karpv1.WellKnownLabels.Difference(sets.New(\n\t\t\t// TODO: add back to test with a preconfigured reserved instance type\n\t\t\tv1.LabelCapacityReservationID,\n\t\t\tv1.LabelCapacityReservationType,\n\t\t\tv1.LabelCapacityReservationInterruptible,\n\t\t)).UnsortedList(), lo.Keys(karpv1.NormalizedLabels)...)))\n\n\t\tvar pods []*corev1.Pod\n\t\tfor key, value := range nodeSelector {\n\t\t\tpods = append(pods, coretest.UnschedulablePod(coretest.PodOptions{NodeSelector: map[string]string{key: value}}))\n\t\t}\n\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pods...)\n\t\tfor _, pod := range pods {\n\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t}\n\t})\n\tIt(\"should support combined instance type labels\", func() {\n\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\n\t\tnodeSelector := map[string]string{\n\t\t\t// Well known\n\t\t\tkarpv1.NodePoolLabelKey:        nodePool.Name,\n\t\t\tcorev1.LabelTopologyRegion:     fake.DefaultRegion,\n\t\t\tcorev1.LabelTopologyZone:       \"test-zone-1a\",\n\t\t\tcorev1.LabelInstanceTypeStable: \"g4dn.8xlarge\",\n\t\t\tcorev1.LabelOSStable:           \"linux\",\n\t\t\tcorev1.LabelArchStable:         \"amd64\",\n\t\t\tkarpv1.CapacityTypeLabelKey:    \"on-demand\",\n\t\t\t// Well Known to AWS\n\t\t\tv1.LabelInstanceTenancy:                      \"default\",\n\t\t\tv1.LabelInstanceHypervisor:                   \"nitro\",\n\t\t\tv1.LabelInstanceEncryptionInTransitSupported: \"true\",\n\t\t\tv1.LabelInstanceCategory:                     \"g\",\n\t\t\tv1.LabelInstanceCapabilityFlex:               \"false\",\n\t\t\tv1.LabelInstanceGeneration:                   \"4\",\n\t\t\tv1.LabelInstanceFamily:                       \"g4dn\",\n\t\t\tv1.LabelInstanceSize:                         \"8xlarge\",\n\t\t\tv1.LabelInstanceCPU:                          \"32\",\n\t\t\tv1.LabelInstanceCPUManufacturer:              \"intel\",\n\t\t\tv1.LabelInstanceCPUSustainedClockSpeedMhz:    \"2500\",\n\t\t\tv1.LabelInstanceMemory:                       \"131072\",\n\t\t\tv1.LabelInstanceEBSBandwidth:                 \"9500\",\n\t\t\tv1.LabelInstanceNetworkBandwidth:             \"50000\",\n\t\t\tv1.LabelInstanceGPUName:                      \"t4\",\n\t\t\tv1.LabelInstanceGPUManufacturer:              \"nvidia\",\n\t\t\tv1.LabelInstanceGPUCount:                     \"1\",\n\t\t\tv1.LabelInstanceGPUMemory:                    \"16384\",\n\t\t\tv1.LabelInstanceLocalNVME:                    \"900\",\n\t\t\tv1.LabelTopologyZoneID:                       \"tstz1-1a\",\n\t\t\t// Deprecated Labels\n\t\t\tcorev1.LabelFailureDomainBetaRegion: fake.DefaultRegion,\n\t\t\tcorev1.LabelFailureDomainBetaZone:   \"test-zone-1a\",\n\t\t\t\"beta.kubernetes.io/arch\":           \"amd64\",\n\t\t\t\"beta.kubernetes.io/os\":             \"linux\",\n\t\t\tcorev1.LabelInstanceType:            \"g4dn.8xlarge\",\n\t\t\t\"topology.ebs.csi.aws.com/zone\":     \"test-zone-1a\",\n\t\t}\n\n\t\t// Ensure that we're exercising all well known labels except for the accelerator and capacity reservation labels\n\t\tExpect(lo.Keys(nodeSelector)).To(ContainElements(\n\t\t\tappend(\n\t\t\t\tkarpv1.WellKnownLabels.Difference(sets.New(\n\t\t\t\t\tv1.LabelCapacityReservationID,\n\t\t\t\t\tv1.LabelCapacityReservationType,\n\t\t\t\t\tv1.LabelCapacityReservationInterruptible,\n\t\t\t\t\tv1.LabelInstanceAcceleratorCount,\n\t\t\t\t\tv1.LabelInstanceAcceleratorName,\n\t\t\t\t\tv1.LabelInstanceAcceleratorManufacturer,\n\t\t\t\t\tcorev1.LabelWindowsBuild,\n\t\t\t\t)).UnsortedList(), lo.Keys(karpv1.NormalizedLabels)...)))\n\n\t\tpod := coretest.UnschedulablePod(coretest.PodOptions{NodeSelector: nodeSelector})\n\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\tExpectScheduled(ctx, env.Client, pod)\n\t})\n\tIt(\"should support instance type labels with accelerator\", func() {\n\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\n\t\tnodeSelector := map[string]string{\n\t\t\t// Well known\n\t\t\tkarpv1.NodePoolLabelKey:        nodePool.Name,\n\t\t\tcorev1.LabelTopologyRegion:     fake.DefaultRegion,\n\t\t\tcorev1.LabelTopologyZone:       \"test-zone-1a\",\n\t\t\tcorev1.LabelInstanceTypeStable: \"inf2.xlarge\",\n\t\t\tcorev1.LabelOSStable:           \"linux\",\n\t\t\tcorev1.LabelArchStable:         \"amd64\",\n\t\t\tkarpv1.CapacityTypeLabelKey:    \"on-demand\",\n\t\t\t// Well Known to AWS\n\t\t\tv1.LabelInstanceTenancy:                      \"default\",\n\t\t\tv1.LabelInstanceHypervisor:                   \"nitro\",\n\t\t\tv1.LabelInstanceEncryptionInTransitSupported: \"true\",\n\t\t\tv1.LabelInstanceCategory:                     \"inf\",\n\t\t\tv1.LabelInstanceCapabilityFlex:               \"false\",\n\t\t\tv1.LabelInstanceGeneration:                   \"2\",\n\t\t\tv1.LabelInstanceFamily:                       \"inf2\",\n\t\t\tv1.LabelInstanceSize:                         \"xlarge\",\n\t\t\tv1.LabelInstanceCPU:                          \"4\",\n\t\t\tv1.LabelInstanceCPUSustainedClockSpeedMhz:    \"3600\",\n\t\t\tv1.LabelInstanceCPUManufacturer:              \"amd\",\n\t\t\tv1.LabelInstanceMemory:                       \"16384\",\n\t\t\tv1.LabelInstanceEBSBandwidth:                 \"10000\",\n\t\t\tv1.LabelInstanceNetworkBandwidth:             \"2083\",\n\t\t\tv1.LabelInstanceAcceleratorName:              \"inferentia2\",\n\t\t\tv1.LabelInstanceAcceleratorManufacturer:      \"aws\",\n\t\t\tv1.LabelInstanceAcceleratorCount:             \"1\",\n\t\t\tv1.LabelTopologyZoneID:                       \"tstz1-1a\",\n\t\t\t// Deprecated Labels\n\t\t\tcorev1.LabelFailureDomainBetaRegion: fake.DefaultRegion,\n\t\t\tcorev1.LabelFailureDomainBetaZone:   \"test-zone-1a\",\n\t\t\t\"beta.kubernetes.io/arch\":           \"amd64\",\n\t\t\t\"beta.kubernetes.io/os\":             \"linux\",\n\t\t\tcorev1.LabelInstanceType:            \"inf2.xlarge\",\n\t\t\t\"topology.ebs.csi.aws.com/zone\":     \"test-zone-1a\",\n\t\t}\n\n\t\t// Ensure that we're exercising all well known labels except for the gpu, nvme and capacity reservation id labels\n\t\texpectedLabels := append(karpv1.WellKnownLabels.Difference(sets.New(\n\t\t\tv1.LabelCapacityReservationID,\n\t\t\tv1.LabelCapacityReservationType,\n\t\t\tv1.LabelCapacityReservationInterruptible,\n\t\t\tv1.LabelInstanceGPUCount,\n\t\t\tv1.LabelInstanceGPUName,\n\t\t\tv1.LabelInstanceGPUManufacturer,\n\t\t\tv1.LabelInstanceGPUMemory,\n\t\t\tv1.LabelInstanceLocalNVME,\n\t\t\tcorev1.LabelWindowsBuild,\n\t\t)).UnsortedList(), lo.Keys(karpv1.NormalizedLabels)...)\n\t\tExpect(lo.Keys(nodeSelector)).To(ContainElements(expectedLabels))\n\n\t\tpod := coretest.UnschedulablePod(coretest.PodOptions{NodeSelector: nodeSelector})\n\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\tExpectScheduled(ctx, env.Client, pod)\n\t})\n\tIt(\"should not launch AWS Pod ENI on a t3\", func() {\n\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\tpod := coretest.UnschedulablePod(coretest.PodOptions{\n\t\t\tNodeSelector: map[string]string{\n\t\t\t\tcorev1.LabelInstanceTypeStable: \"t3.large\",\n\t\t\t},\n\t\t\tResourceRequirements: corev1.ResourceRequirements{\n\t\t\t\tRequests: corev1.ResourceList{v1.ResourceAWSPodENI: resource.MustParse(\"1\")},\n\t\t\t\tLimits:   corev1.ResourceList{v1.ResourceAWSPodENI: resource.MustParse(\"1\")},\n\t\t\t},\n\t\t})\n\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\tExpectNotScheduled(ctx, env.Client, pod)\n\t})\n\tIt(\"should order the instance types by price and only consider the cheapest ones\", func() {\n\t\tinstances := fake.MakeInstances()\n\t\tawsEnv.EC2API.DescribeInstanceTypesOutput.Set(&ec2.DescribeInstanceTypesOutput{\n\t\t\tInstanceTypes: fake.MakeInstances(),\n\t\t})\n\t\tawsEnv.EC2API.DescribeInstanceTypeOfferingsOutput.Set(&ec2.DescribeInstanceTypeOfferingsOutput{\n\t\t\tInstanceTypeOfferings: fake.MakeInstanceOfferings(instances),\n\t\t})\n\t\tExpect(awsEnv.InstanceTypesProvider.UpdateInstanceTypes(ctx)).To(Succeed())\n\t\tExpect(awsEnv.InstanceTypesProvider.UpdateInstanceTypeOfferings(ctx)).To(Succeed())\n\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\tpod := coretest.UnschedulablePod(coretest.PodOptions{\n\t\t\tResourceRequirements: corev1.ResourceRequirements{\n\t\t\t\tRequests: corev1.ResourceList{corev1.ResourceCPU: resource.MustParse(\"1\")},\n\t\t\t\tLimits:   corev1.ResourceList{corev1.ResourceCPU: resource.MustParse(\"1\")},\n\t\t\t},\n\t\t})\n\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\tExpectScheduled(ctx, env.Client, pod)\n\t\tits, err := cloudProvider.GetInstanceTypes(ctx, nodePool)\n\t\tExpect(err).To(BeNil())\n\t\t// Order all the instances by their price\n\t\t// We need some way to deterministically order them if their prices match\n\t\treqs := scheduling.NewNodeSelectorRequirementsWithMinValues(nodePool.Spec.Template.Spec.Requirements...)\n\t\tsort.Slice(its, func(i, j int) bool {\n\t\t\tiPrice := its[i].Offerings.Compatible(reqs).Cheapest().Price\n\t\t\tjPrice := its[j].Offerings.Compatible(reqs).Cheapest().Price\n\t\t\tif iPrice == jPrice {\n\t\t\t\treturn its[i].Name < its[j].Name\n\t\t\t}\n\t\t\treturn iPrice < jPrice\n\t\t})\n\t\t// Expect that the launch template overrides gives the 100 cheapest instance types\n\t\texpected := sets.New(lo.Map(its[:100], func(i *corecloudprovider.InstanceType, _ int) string {\n\t\t\treturn i.Name\n\t\t})...)\n\t\tExpect(awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Len()).To(Equal(1))\n\t\tcall := awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Pop()\n\t\tExpect(call.LaunchTemplateConfigs).To(HaveLen(1))\n\n\t\tExpect(call.LaunchTemplateConfigs[0].Overrides).To(HaveLen(60))\n\t\tfor _, override := range call.LaunchTemplateConfigs[0].Overrides {\n\t\t\tExpect(expected.Has(string(override.InstanceType))).To(BeTrue(), fmt.Sprintf(\"expected %s to exist in set\", string(override.InstanceType)))\n\t\t}\n\t})\n\tIt(\"should order the instance types by price and only consider the spot types that are cheaper than the cheapest on-demand\", func() {\n\t\tinstances := fake.MakeInstances()\n\t\tawsEnv.EC2API.DescribeInstanceTypesOutput.Set(&ec2.DescribeInstanceTypesOutput{\n\t\t\tInstanceTypes: fake.MakeInstances(),\n\t\t})\n\t\tawsEnv.EC2API.DescribeInstanceTypeOfferingsOutput.Set(&ec2.DescribeInstanceTypeOfferingsOutput{\n\t\t\tInstanceTypeOfferings: fake.MakeInstanceOfferings(instances),\n\t\t})\n\t\tExpect(awsEnv.InstanceTypesProvider.UpdateInstanceTypes(ctx)).To(Succeed())\n\t\tExpect(awsEnv.InstanceTypesProvider.UpdateInstanceTypeOfferings(ctx)).To(Succeed())\n\n\t\tnodePool.Spec.Template.Spec.Requirements = []karpv1.NodeSelectorRequirementWithMinValues{\n\t\t\t{\n\t\t\t\tKey:      karpv1.CapacityTypeLabelKey,\n\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\tValues: []string{\n\t\t\t\t\tkarpv1.CapacityTypeSpot,\n\t\t\t\t\tkarpv1.CapacityTypeOnDemand,\n\t\t\t\t},\n\t\t\t},\n\t\t}\n\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\tawsEnv.EC2API.DescribeSpotPriceHistoryBehavior.Output.Set(generateSpotPricing(cloudProvider, nodePool))\n\t\tExpect(awsEnv.PricingProvider.UpdateSpotPricing(ctx)).To(Succeed())\n\t\tExpect(awsEnv.InstanceTypesProvider.UpdateInstanceTypes(ctx)).To(Succeed())\n\t\tExpect(awsEnv.InstanceTypesProvider.UpdateInstanceTypeOfferings(ctx)).To(Succeed())\n\n\t\tpod := coretest.UnschedulablePod(coretest.PodOptions{\n\t\t\tResourceRequirements: corev1.ResourceRequirements{\n\t\t\t\tRequests: corev1.ResourceList{corev1.ResourceCPU: resource.MustParse(\"1\")},\n\t\t\t\tLimits:   corev1.ResourceList{corev1.ResourceCPU: resource.MustParse(\"1\")},\n\t\t\t},\n\t\t})\n\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\tExpectScheduled(ctx, env.Client, pod)\n\n\t\tits, err := cloudProvider.GetInstanceTypes(ctx, nodePool)\n\t\tExpect(err).To(BeNil())\n\t\t// Order all the instances by their price\n\t\t// We need some way to deterministically order them if their prices match\n\t\treqs := scheduling.NewNodeSelectorRequirementsWithMinValues(nodePool.Spec.Template.Spec.Requirements...)\n\t\tsort.Slice(its, func(i, j int) bool {\n\t\t\tiPrice := its[i].Offerings.Compatible(reqs).Cheapest().Price\n\t\t\tjPrice := its[j].Offerings.Compatible(reqs).Cheapest().Price\n\t\t\tif iPrice == jPrice {\n\t\t\t\treturn its[i].Name < its[j].Name\n\t\t\t}\n\t\t\treturn iPrice < jPrice\n\t\t})\n\n\t\tExpect(awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Len()).To(Equal(1))\n\t\tcall := awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Pop()\n\t\tExpect(call.LaunchTemplateConfigs).To(HaveLen(1))\n\n\t\t// find the cheapest OD price that works\n\t\tcheapestODPrice := math.MaxFloat64\n\t\tfor _, override := range call.LaunchTemplateConfigs[0].Overrides {\n\t\t\todPrice, ok := awsEnv.PricingProvider.OnDemandPrice(override.InstanceType)\n\t\t\tExpect(ok).To(BeTrue())\n\t\t\tif odPrice < cheapestODPrice {\n\t\t\t\tcheapestODPrice = odPrice\n\t\t\t}\n\t\t}\n\t\t// and our spot prices should be cheaper than the OD price\n\t\tfor _, override := range call.LaunchTemplateConfigs[0].Overrides {\n\t\t\tspotPrice, ok := awsEnv.PricingProvider.SpotPrice(override.InstanceType, *override.AvailabilityZone)\n\t\t\tExpect(ok).To(BeTrue())\n\t\t\tExpect(spotPrice).To(BeNumerically(\"<\", cheapestODPrice))\n\t\t}\n\t})\n\tIt(\"should not remove expensive metal instanceTypeOptions if any of the requirement with minValues is provided\", func() {\n\t\t// Construct requirements with minValues for capacityType requirement.\n\t\tnodePool.Spec.Template.Spec.Requirements = []karpv1.NodeSelectorRequirementWithMinValues{\n\t\t\t{\n\t\t\t\tKey:       karpv1.CapacityTypeLabelKey,\n\t\t\t\tOperator:  corev1.NodeSelectorOpIn,\n\t\t\t\tValues:    []string{karpv1.CapacityTypeSpot},\n\t\t\t\tMinValues: lo.ToPtr(1),\n\t\t\t},\n\t\t}\n\n\t\t// Apply requirements and schedule pods.\n\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\tpod := coretest.UnschedulablePod(coretest.PodOptions{\n\t\t\tResourceRequirements: corev1.ResourceRequirements{\n\t\t\t\tRequests: corev1.ResourceList{corev1.ResourceCPU: resource.MustParse(\"1\")},\n\t\t\t\tLimits:   corev1.ResourceList{corev1.ResourceCPU: resource.MustParse(\"1\")},\n\t\t\t},\n\t\t})\n\n\t\t// Check if pods are scheduled and if CreateFleet has the expensive instance-types.\n\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\tExpectScheduled(ctx, env.Client, pod)\n\t\tExpect(awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Len()).To(Equal(1))\n\t\tcall := awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Pop()\n\t\tvar expensiveInstanceType bool\n\t\tfor _, ltc := range call.LaunchTemplateConfigs {\n\t\t\tfor _, ovr := range ltc.Overrides {\n\t\t\t\tif strings.Contains(string(ovr.InstanceType), \"metal\") {\n\t\t\t\t\texpensiveInstanceType = true\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tExpect(expensiveInstanceType).To(BeTrue())\n\t})\n\tIt(\"should de-prioritize metal\", func() {\n\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\tpod := coretest.UnschedulablePod(coretest.PodOptions{\n\t\t\tResourceRequirements: corev1.ResourceRequirements{\n\t\t\t\tRequests: corev1.ResourceList{corev1.ResourceCPU: resource.MustParse(\"1\")},\n\t\t\t\tLimits:   corev1.ResourceList{corev1.ResourceCPU: resource.MustParse(\"1\")},\n\t\t\t},\n\t\t})\n\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\tExpectScheduled(ctx, env.Client, pod)\n\n\t\tExpect(awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Len()).To(Equal(1))\n\t\tcall := awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Pop()\n\t\tfor _, ltc := range call.LaunchTemplateConfigs {\n\t\t\tfor _, ovr := range ltc.Overrides {\n\t\t\t\tExpect(strings.Contains(string(ovr.InstanceType), \"metal\")).To(BeFalse())\n\t\t\t}\n\t\t}\n\t})\n\tIt(\"should de-prioritize gpu types\", func() {\n\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\tpod := coretest.UnschedulablePod(coretest.PodOptions{\n\t\t\tResourceRequirements: corev1.ResourceRequirements{\n\t\t\t\tRequests: corev1.ResourceList{corev1.ResourceCPU: resource.MustParse(\"1\")},\n\t\t\t\tLimits:   corev1.ResourceList{corev1.ResourceCPU: resource.MustParse(\"1\")},\n\t\t\t},\n\t\t})\n\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\tExpectScheduled(ctx, env.Client, pod)\n\n\t\tExpect(awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Len()).To(Equal(1))\n\t\tcall := awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Pop()\n\t\tfor _, ltc := range call.LaunchTemplateConfigs {\n\t\t\tfor _, ovr := range ltc.Overrides {\n\t\t\t\tExpect(strings.HasPrefix(string(ovr.InstanceType), \"g\")).To(BeFalse())\n\t\t\t}\n\t\t}\n\t})\n\tIt(\"should launch on metal\", func() {\n\t\t// add a nodePool requirement for instance type exists to remove our default filter for metal sizes\n\t\tnodePool.Spec.Template.Spec.Requirements = append(nodePool.Spec.Template.Spec.Requirements, karpv1.NodeSelectorRequirementWithMinValues{\n\t\t\tKey:      corev1.LabelInstanceTypeStable,\n\t\t\tOperator: corev1.NodeSelectorOpExists,\n\t\t})\n\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\tpod := coretest.UnschedulablePod(coretest.PodOptions{\n\t\t\tNodeSelector: map[string]string{\n\t\t\t\tv1.LabelInstanceSize: \"metal\",\n\t\t\t},\n\t\t\tResourceRequirements: corev1.ResourceRequirements{\n\t\t\t\tRequests: corev1.ResourceList{corev1.ResourceCPU: resource.MustParse(\"1\")},\n\t\t\t\tLimits:   corev1.ResourceList{corev1.ResourceCPU: resource.MustParse(\"1\")},\n\t\t\t},\n\t\t})\n\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\tExpectScheduled(ctx, env.Client, pod)\n\t})\n\tIt(\"should launch vpc.amazonaws.com/pod-eni on a compatible instance type\", func() {\n\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\tpod := coretest.UnschedulablePod(coretest.PodOptions{\n\t\t\tResourceRequirements: corev1.ResourceRequirements{\n\t\t\t\tRequests: corev1.ResourceList{v1.ResourceAWSPodENI: resource.MustParse(\"1\")},\n\t\t\t\tLimits:   corev1.ResourceList{v1.ResourceAWSPodENI: resource.MustParse(\"1\")},\n\t\t\t},\n\t\t})\n\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\tnode := ExpectScheduled(ctx, env.Client, pod)\n\t\tExpect(node.Labels).To(HaveKey(corev1.LabelInstanceTypeStable))\n\t\tsupportsPodENI := func() bool {\n\t\t\tlimits, ok := instancetype.Limits[node.Labels[corev1.LabelInstanceTypeStable]]\n\t\t\treturn ok && limits.IsTrunkingCompatible\n\t\t}\n\t\tExpect(supportsPodENI()).To(Equal(true))\n\t})\n\tIt(\"should launch pod in flex instance type\", func() {\n\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\tpod := coretest.UnschedulablePod(coretest.PodOptions{\n\t\t\tNodeSelector: map[string]string{\n\t\t\t\tv1.LabelInstanceCapabilityFlex: \"true\",\n\t\t\t},\n\t\t})\n\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\tnode := ExpectScheduled(ctx, env.Client, pod)\n\t\tExpect(node.Labels).To(HaveKeyWithValue(v1.LabelInstanceCapabilityFlex, \"true\"))\n\t\tExpect(node.Labels).To(HaveKeyWithValue(corev1.LabelInstanceTypeStable, MatchRegexp(\".*flex.*\")))\n\t})\n\tIt(\"should not launch pod when flex instances are disallowed\", func() {\n\t\tnodePool.Spec.Template.Spec.Requirements = append(nodePool.Spec.Template.Spec.Requirements, karpv1.NodeSelectorRequirementWithMinValues{\n\t\t\tKey:      v1.LabelInstanceCapabilityFlex,\n\t\t\tOperator: corev1.NodeSelectorOpNotIn,\n\t\t\tValues:   []string{\"true\"},\n\t\t})\n\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\tpod := coretest.UnschedulablePod(coretest.PodOptions{\n\t\t\tNodeSelector: map[string]string{\n\t\t\t\tv1.LabelInstanceCapabilityFlex: \"true\",\n\t\t\t},\n\t\t})\n\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\tExpectNotScheduled(ctx, env.Client, pod)\n\t})\n\tIt(\"should launch pod in non-flex instances\", func() {\n\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\tpod := coretest.UnschedulablePod(coretest.PodOptions{\n\t\t\tNodeSelector: map[string]string{\n\t\t\t\tv1.LabelInstanceCapabilityFlex: \"false\",\n\t\t\t},\n\t\t})\n\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\tnode := ExpectScheduled(ctx, env.Client, pod)\n\t\tExpect(node.Labels).To(HaveKeyWithValue(v1.LabelInstanceCapabilityFlex, \"false\"))\n\t\tExpect(node.Labels).ToNot(HaveKeyWithValue(corev1.LabelInstanceTypeStable, MatchRegexp(\"^.*flex.*\")))\n\t})\n\tIt(\"should launch vpc.amazonaws.com/PrivateIPv4Address on a compatible instance type\", func() {\n\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{Alias: \"windows2022@latest\"}}\n\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\tpod := coretest.UnschedulablePod(coretest.PodOptions{\n\t\t\tResourceRequirements: corev1.ResourceRequirements{\n\t\t\t\tRequests: corev1.ResourceList{v1.ResourcePrivateIPv4Address: resource.MustParse(\"1\")},\n\t\t\t\tLimits:   corev1.ResourceList{v1.ResourcePrivateIPv4Address: resource.MustParse(\"1\")},\n\t\t\t},\n\t\t})\n\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\tnode := ExpectScheduled(ctx, env.Client, pod)\n\t\tExpect(node.Labels).To(HaveKey(corev1.LabelInstanceTypeStable))\n\t\tlimits, ok := instancetype.Limits[node.Labels[corev1.LabelInstanceTypeStable]]\n\t\tExpect(ok).To(BeTrue())\n\t\tExpect(limits.IPv4PerInterface).ToNot(BeZero())\n\t})\n\tIt(\"should not launch instance type for vpc.amazonaws.com/PrivateIPv4Address if VPC resource controller doesn't advertise it\", func() {\n\t\t// Create a \"test\" instance type that has PrivateIPv4Addresses but isn't advertised in the VPC limits config\n\t\tawsEnv.EC2API.DescribeInstanceTypesOutput.Set(&ec2.DescribeInstanceTypesOutput{\n\t\t\tInstanceTypes: []ec2types.InstanceTypeInfo{\n\t\t\t\t{\n\t\t\t\t\tInstanceType: \"test\",\n\t\t\t\t\tProcessorInfo: &ec2types.ProcessorInfo{\n\t\t\t\t\t\tSupportedArchitectures: []ec2types.ArchitectureType{ec2types.ArchitectureTypeX8664},\n\t\t\t\t\t},\n\t\t\t\t\tVCpuInfo: &ec2types.VCpuInfo{\n\t\t\t\t\t\tDefaultCores: aws.Int32(1),\n\t\t\t\t\t\tDefaultVCpus: aws.Int32(2),\n\t\t\t\t\t},\n\t\t\t\t\tMemoryInfo: &ec2types.MemoryInfo{\n\t\t\t\t\t\tSizeInMiB: aws.Int64(8192),\n\t\t\t\t\t},\n\t\t\t\t\tNetworkInfo: &ec2types.NetworkInfo{\n\t\t\t\t\t\tIpv4AddressesPerInterface: aws.Int32(10),\n\t\t\t\t\t\tDefaultNetworkCardIndex:   aws.Int32(0),\n\t\t\t\t\t\tNetworkCards: []ec2types.NetworkCardInfo{{\n\t\t\t\t\t\t\tNetworkCardIndex:         lo.ToPtr(int32(0)),\n\t\t\t\t\t\t\tMaximumNetworkInterfaces: aws.Int32(3),\n\t\t\t\t\t\t}},\n\t\t\t\t\t},\n\t\t\t\t\tSupportedUsageClasses: fake.DefaultSupportedUsageClasses,\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tawsEnv.EC2API.DescribeInstanceTypeOfferingsOutput.Set(&ec2.DescribeInstanceTypeOfferingsOutput{\n\t\t\tInstanceTypeOfferings: []ec2types.InstanceTypeOffering{\n\t\t\t\t{\n\t\t\t\t\tInstanceType: \"test\",\n\t\t\t\t\tLocation:     aws.String(\"test-zone-1a\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tExpect(awsEnv.InstanceTypesProvider.UpdateInstanceTypes(ctx)).To(Succeed())\n\t\tExpect(awsEnv.InstanceTypesProvider.UpdateInstanceTypeOfferings(ctx)).To(Succeed())\n\n\t\tnodePool.Spec.Template.Spec.Requirements = append(nodePool.Spec.Template.Spec.Requirements, karpv1.NodeSelectorRequirementWithMinValues{\n\t\t\tKey:      corev1.LabelInstanceTypeStable,\n\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\tValues:   []string{\"test\"},\n\t\t})\n\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{Alias: \"windows2022@latest\"}}\n\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\tpod := coretest.UnschedulablePod(coretest.PodOptions{\n\t\t\tResourceRequirements: corev1.ResourceRequirements{\n\t\t\t\tRequests: corev1.ResourceList{v1.ResourcePrivateIPv4Address: resource.MustParse(\"1\")},\n\t\t\t\tLimits:   corev1.ResourceList{v1.ResourcePrivateIPv4Address: resource.MustParse(\"1\")},\n\t\t\t},\n\t\t})\n\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\tExpectNotScheduled(ctx, env.Client, pod)\n\t})\n\tIt(\"should launch instances for nvidia.com/gpu resource requests\", func() {\n\t\tnodeNames := sets.NewString()\n\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\tpods := []*corev1.Pod{\n\t\t\tcoretest.UnschedulablePod(coretest.PodOptions{\n\t\t\t\tResourceRequirements: corev1.ResourceRequirements{\n\t\t\t\t\tRequests: corev1.ResourceList{v1.ResourceNVIDIAGPU: resource.MustParse(\"1\")},\n\t\t\t\t\tLimits:   corev1.ResourceList{v1.ResourceNVIDIAGPU: resource.MustParse(\"1\")},\n\t\t\t\t},\n\t\t\t}),\n\t\t\t// Should pack onto same instance\n\t\t\tcoretest.UnschedulablePod(coretest.PodOptions{\n\t\t\t\tResourceRequirements: corev1.ResourceRequirements{\n\t\t\t\t\tRequests: corev1.ResourceList{v1.ResourceNVIDIAGPU: resource.MustParse(\"2\")},\n\t\t\t\t\tLimits:   corev1.ResourceList{v1.ResourceNVIDIAGPU: resource.MustParse(\"2\")},\n\t\t\t\t},\n\t\t\t}),\n\t\t\t// Should pack onto a separate instance\n\t\t\tcoretest.UnschedulablePod(coretest.PodOptions{\n\t\t\t\tResourceRequirements: corev1.ResourceRequirements{\n\t\t\t\t\tRequests: corev1.ResourceList{v1.ResourceNVIDIAGPU: resource.MustParse(\"4\")},\n\t\t\t\t\tLimits:   corev1.ResourceList{v1.ResourceNVIDIAGPU: resource.MustParse(\"4\")},\n\t\t\t\t},\n\t\t\t}),\n\t\t}\n\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pods...)\n\t\tfor _, pod := range pods {\n\t\t\tnode := ExpectScheduled(ctx, env.Client, pod)\n\t\t\tExpect(node.Labels).To(HaveKeyWithValue(corev1.LabelInstanceTypeStable, \"p3.8xlarge\"))\n\t\t\tnodeNames.Insert(node.Name)\n\t\t}\n\t\tExpect(nodeNames.Len()).To(Equal(2))\n\t})\n\tIt(\"should launch instances for habana.ai/gaudi resource requests\", func() {\n\t\tnodeNames := sets.NewString()\n\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\tpods := []*corev1.Pod{\n\t\t\tcoretest.UnschedulablePod(coretest.PodOptions{\n\t\t\t\tResourceRequirements: corev1.ResourceRequirements{\n\t\t\t\t\tRequests: corev1.ResourceList{v1.ResourceHabanaGaudi: resource.MustParse(\"1\")},\n\t\t\t\t\tLimits:   corev1.ResourceList{v1.ResourceHabanaGaudi: resource.MustParse(\"1\")},\n\t\t\t\t},\n\t\t\t}),\n\t\t\tcoretest.UnschedulablePod(coretest.PodOptions{\n\t\t\t\tResourceRequirements: corev1.ResourceRequirements{\n\t\t\t\t\tRequests: corev1.ResourceList{v1.ResourceHabanaGaudi: resource.MustParse(\"2\")},\n\t\t\t\t\tLimits:   corev1.ResourceList{v1.ResourceHabanaGaudi: resource.MustParse(\"2\")},\n\t\t\t\t},\n\t\t\t}),\n\t\t\tcoretest.UnschedulablePod(coretest.PodOptions{\n\t\t\t\tResourceRequirements: corev1.ResourceRequirements{\n\t\t\t\t\tRequests: corev1.ResourceList{v1.ResourceHabanaGaudi: resource.MustParse(\"4\")},\n\t\t\t\t\tLimits:   corev1.ResourceList{v1.ResourceHabanaGaudi: resource.MustParse(\"4\")},\n\t\t\t\t},\n\t\t\t}),\n\t\t}\n\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pods...)\n\t\tfor _, pod := range pods {\n\t\t\tnode := ExpectScheduled(ctx, env.Client, pod)\n\t\t\tExpect(node.Labels).To(HaveKeyWithValue(corev1.LabelInstanceTypeStable, \"dl1.24xlarge\"))\n\t\t\tnodeNames.Insert(node.Name)\n\t\t}\n\t\tExpect(nodeNames.Len()).To(Equal(1))\n\t})\n\tIt(\"should launch instances for aws.amazon.com/neuron resource requests\", func() {\n\t\tnodeNames := sets.NewString()\n\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\tpods := []*corev1.Pod{\n\t\t\tcoretest.UnschedulablePod(coretest.PodOptions{\n\t\t\t\tResourceRequirements: corev1.ResourceRequirements{\n\t\t\t\t\tRequests: corev1.ResourceList{v1.ResourceAWSNeuron: resource.MustParse(\"2\")},\n\t\t\t\t\tLimits:   corev1.ResourceList{v1.ResourceAWSNeuron: resource.MustParse(\"2\")},\n\t\t\t\t},\n\t\t\t}),\n\t\t\t// Should pack onto same instance\n\t\t\tcoretest.UnschedulablePod(coretest.PodOptions{\n\t\t\t\tResourceRequirements: corev1.ResourceRequirements{\n\t\t\t\t\tRequests: corev1.ResourceList{v1.ResourceAWSNeuron: resource.MustParse(\"2\")},\n\t\t\t\t\tLimits:   corev1.ResourceList{v1.ResourceAWSNeuron: resource.MustParse(\"2\")},\n\t\t\t\t},\n\t\t\t}),\n\t\t\t// Should pack onto a separate instance\n\t\t\tcoretest.UnschedulablePod(coretest.PodOptions{\n\t\t\t\tResourceRequirements: corev1.ResourceRequirements{\n\t\t\t\t\tRequests: corev1.ResourceList{v1.ResourceAWSNeuron: resource.MustParse(\"4\")},\n\t\t\t\t\tLimits:   corev1.ResourceList{v1.ResourceAWSNeuron: resource.MustParse(\"4\")},\n\t\t\t\t},\n\t\t\t}),\n\t\t}\n\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pods...)\n\t\tfor _, pod := range pods {\n\t\t\tnode := ExpectScheduled(ctx, env.Client, pod)\n\t\t\tExpect(node.Labels).To(HaveKeyWithValue(corev1.LabelInstanceTypeStable, \"inf2.24xlarge\"))\n\t\t\tnodeNames.Insert(node.Name)\n\t\t}\n\t\tExpect(nodeNames.Len()).To(Equal(2))\n\t})\n\tIt(\"should launch trn1 instances for aws.amazon.com/neuron resource requests\", func() {\n\t\tnodeNames := sets.NewString()\n\t\tnodePool.Spec.Template.Spec.Requirements = []karpv1.NodeSelectorRequirementWithMinValues{\n\t\t\t{\n\t\t\t\tKey:      corev1.LabelInstanceTypeStable,\n\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\tValues:   []string{\"trn1.2xlarge\"},\n\t\t\t},\n\t\t}\n\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\tpods := []*corev1.Pod{\n\t\t\tcoretest.UnschedulablePod(coretest.PodOptions{\n\t\t\t\tResourceRequirements: corev1.ResourceRequirements{\n\t\t\t\t\tRequests: corev1.ResourceList{v1.ResourceAWSNeuron: resource.MustParse(\"1\")},\n\t\t\t\t\tLimits:   corev1.ResourceList{v1.ResourceAWSNeuron: resource.MustParse(\"1\")},\n\t\t\t\t},\n\t\t\t}),\n\t\t}\n\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pods...)\n\t\tfor _, pod := range pods {\n\t\t\tnode := ExpectScheduled(ctx, env.Client, pod)\n\t\t\tExpect(node.Labels).To(HaveKeyWithValue(corev1.LabelInstanceTypeStable, \"trn1.2xlarge\"))\n\t\t\tnodeNames.Insert(node.Name)\n\t\t}\n\t\tExpect(nodeNames.Len()).To(Equal(1))\n\t})\n\tIt(\"should launch inf2 instances for aws.amazon.com/neuroncore resource requests\", func() {\n\t\tnodeNames := sets.NewString()\n\t\tnodePool.Spec.Template.Spec.Requirements = []karpv1.NodeSelectorRequirementWithMinValues{\n\t\t\t{\n\n\t\t\t\tKey:      corev1.LabelInstanceTypeStable,\n\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\tValues:   []string{\"inf2.xlarge\"},\n\t\t\t},\n\t\t}\n\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\tpods := []*corev1.Pod{\n\t\t\tcoretest.UnschedulablePod(coretest.PodOptions{\n\t\t\t\tResourceRequirements: corev1.ResourceRequirements{\n\t\t\t\t\tRequests: corev1.ResourceList{v1.ResourceAWSNeuronCore: resource.MustParse(\"2\")},\n\t\t\t\t\tLimits:   corev1.ResourceList{v1.ResourceAWSNeuronCore: resource.MustParse(\"2\")},\n\t\t\t\t},\n\t\t\t}),\n\t\t}\n\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pods...)\n\t\tfor _, pod := range pods {\n\t\t\tnode := ExpectScheduled(ctx, env.Client, pod)\n\t\t\tExpect(node.Labels).To(HaveKeyWithValue(corev1.LabelInstanceTypeStable, \"inf2.xlarge\"))\n\t\t\tnodeNames.Insert(node.Name)\n\t\t}\n\t\tExpect(nodeNames.Len()).To(Equal(1))\n\t})\n\tIt(\"should launch instances for vpc.amazonaws.com/efa resource requests\", func() {\n\t\tnodePool.Spec.Template.Spec.Requirements = []karpv1.NodeSelectorRequirementWithMinValues{\n\t\t\t{\n\t\t\t\tKey:      corev1.LabelInstanceTypeStable,\n\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\tValues:   []string{\"dl1.24xlarge\"},\n\t\t\t},\n\t\t}\n\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\tpods := []*corev1.Pod{\n\t\t\tcoretest.UnschedulablePod(coretest.PodOptions{\n\t\t\t\tResourceRequirements: corev1.ResourceRequirements{\n\t\t\t\t\tRequests: corev1.ResourceList{v1.ResourceEFA: resource.MustParse(\"1\")},\n\t\t\t\t\tLimits:   corev1.ResourceList{v1.ResourceEFA: resource.MustParse(\"1\")},\n\t\t\t\t},\n\t\t\t}),\n\t\t\tcoretest.UnschedulablePod(coretest.PodOptions{\n\t\t\t\tResourceRequirements: corev1.ResourceRequirements{\n\t\t\t\t\tRequests: corev1.ResourceList{v1.ResourceEFA: resource.MustParse(\"2\")},\n\t\t\t\t\tLimits:   corev1.ResourceList{v1.ResourceEFA: resource.MustParse(\"2\")},\n\t\t\t\t},\n\t\t\t}),\n\t\t}\n\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pods...)\n\t\tnodes := sets.NewString()\n\t\tfor _, pod := range pods {\n\t\t\tnode := ExpectScheduled(ctx, env.Client, pod)\n\t\t\tExpect(node.Labels).To(HaveKeyWithValue(corev1.LabelInstanceTypeStable, \"dl1.24xlarge\"))\n\t\t\tnodes.Insert(node.Name)\n\t\t}\n\t\tExpect(nodes.Len()).To(Equal(1))\n\t})\n\tIt(\"should launch instances for amd.com/gpu resource requests\", func() {\n\t\tnodeNames := sets.NewString()\n\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\tpods := []*corev1.Pod{\n\t\t\tcoretest.UnschedulablePod(coretest.PodOptions{\n\t\t\t\tResourceRequirements: corev1.ResourceRequirements{\n\t\t\t\t\tRequests: corev1.ResourceList{v1.ResourceAMDGPU: resource.MustParse(\"1\")},\n\t\t\t\t\tLimits:   corev1.ResourceList{v1.ResourceAMDGPU: resource.MustParse(\"1\")},\n\t\t\t\t},\n\t\t\t}),\n\t\t\t// Should pack onto same instance\n\t\t\tcoretest.UnschedulablePod(coretest.PodOptions{\n\t\t\t\tResourceRequirements: corev1.ResourceRequirements{\n\t\t\t\t\tRequests: corev1.ResourceList{v1.ResourceAMDGPU: resource.MustParse(\"2\")},\n\t\t\t\t\tLimits:   corev1.ResourceList{v1.ResourceAMDGPU: resource.MustParse(\"2\")},\n\t\t\t\t},\n\t\t\t}),\n\t\t\t// Should pack onto a separate instance\n\t\t\tcoretest.UnschedulablePod(coretest.PodOptions{\n\t\t\t\tResourceRequirements: corev1.ResourceRequirements{\n\t\t\t\t\tRequests: corev1.ResourceList{v1.ResourceAMDGPU: resource.MustParse(\"4\")},\n\t\t\t\t\tLimits:   corev1.ResourceList{v1.ResourceAMDGPU: resource.MustParse(\"4\")},\n\t\t\t\t},\n\t\t\t}),\n\t\t}\n\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pods...)\n\t\tfor _, pod := range pods {\n\t\t\tnode := ExpectScheduled(ctx, env.Client, pod)\n\t\t\tExpect(node.Labels).To(HaveKeyWithValue(corev1.LabelInstanceTypeStable, \"g4ad.16xlarge\"))\n\t\t\tnodeNames.Insert(node.Name)\n\t\t}\n\t\tExpect(nodeNames.Len()).To(Equal(2))\n\t})\n\tIt(\"should not launch instances w/ instance storage for ephemeral storage resource requests when exceeding blockDeviceMapping\", func() {\n\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\tpod := coretest.UnschedulablePod(coretest.PodOptions{\n\t\t\tResourceRequirements: corev1.ResourceRequirements{\n\t\t\t\tRequests: corev1.ResourceList{corev1.ResourceEphemeralStorage: resource.MustParse(\"5000Gi\")},\n\t\t\t},\n\t\t})\n\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\tExpectNotScheduled(ctx, env.Client, pod)\n\t})\n\tIt(\"should launch instances w/ instance storage for ephemeral storage resource requests when disks are mounted for ephemeral-storage\", func() {\n\t\tnodeClass.Spec.InstanceStorePolicy = lo.ToPtr(v1.InstanceStorePolicyRAID0)\n\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\tpod := coretest.UnschedulablePod(coretest.PodOptions{\n\t\t\tResourceRequirements: corev1.ResourceRequirements{\n\t\t\t\tRequests: corev1.ResourceList{corev1.ResourceEphemeralStorage: resource.MustParse(\"5000Gi\")},\n\t\t\t},\n\t\t})\n\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\tnode := ExpectScheduled(ctx, env.Client, pod)\n\t\tExpect(node.Labels[corev1.LabelInstanceTypeStable]).To(Equal(\"m6idn.32xlarge\"))\n\t\tExpect(*node.Status.Capacity.StorageEphemeral()).To(Equal(resource.MustParse(\"7600G\")))\n\t})\n\tIt(\"should not set pods to 110 if using ENI-based pod density\", func() {\n\t\tinstanceInfo, err := awsEnv.EC2API.DescribeInstanceTypes(ctx, &ec2.DescribeInstanceTypesInput{})\n\t\tExpect(err).To(BeNil())\n\t\tnodeClass.Spec.Kubelet = &v1.KubeletConfiguration{}\n\t\tfor _, info := range instanceInfo.InstanceTypes {\n\t\t\tit := instancetype.NewInstanceType(ctx,\n\t\t\t\tinfo,\n\t\t\t\tfake.DefaultRegion,\n\t\t\t\tnil,\n\t\t\t\tnil,\n\t\t\t\tnodeClass.Spec.BlockDeviceMappings,\n\t\t\t\tnodeClass.Spec.InstanceStorePolicy,\n\t\t\t\tnodeClass.Spec.Kubelet.MaxPods,\n\t\t\t\tnodeClass.Spec.Kubelet.PodsPerCore,\n\t\t\t\tnodeClass.Spec.Kubelet.KubeReserved,\n\t\t\t\tnodeClass.Spec.Kubelet.SystemReserved,\n\t\t\t\tnodeClass.Spec.Kubelet.EvictionHard,\n\t\t\t\tnodeClass.Spec.Kubelet.EvictionSoft,\n\t\t\t\tnodeClass.AMIFamily(),\n\t\t\t\tnil,\n\t\t\t)\n\t\t\tExpect(it.Capacity.Pods().Value()).ToNot(BeNumerically(\"==\", 110))\n\t\t}\n\t})\n\tIt(\"should set pods to 110 if AMI Family doesn't support\", func() {\n\t\tinstanceInfo, err := awsEnv.EC2API.DescribeInstanceTypes(ctx, &ec2.DescribeInstanceTypesInput{})\n\t\tExpect(err).To(BeNil())\n\t\tnodeClass.Spec.Kubelet = &v1.KubeletConfiguration{}\n\t\tfor _, info := range instanceInfo.InstanceTypes {\n\t\t\tit := instancetype.NewInstanceType(ctx,\n\t\t\t\tinfo,\n\t\t\t\tfake.DefaultRegion,\n\t\t\t\tnil,\n\t\t\t\tnil,\n\t\t\t\twindowsNodeClass.Spec.BlockDeviceMappings,\n\t\t\t\twindowsNodeClass.Spec.InstanceStorePolicy,\n\t\t\t\tnodeClass.Spec.Kubelet.MaxPods,\n\t\t\t\tnodeClass.Spec.Kubelet.PodsPerCore,\n\t\t\t\tnodeClass.Spec.Kubelet.KubeReserved,\n\t\t\t\tnodeClass.Spec.Kubelet.SystemReserved,\n\t\t\t\tnodeClass.Spec.Kubelet.EvictionHard,\n\t\t\t\tnodeClass.Spec.Kubelet.EvictionSoft,\n\t\t\t\twindowsNodeClass.AMIFamily(),\n\t\t\t\tnil,\n\t\t\t)\n\t\t\tExpect(it.Capacity.Pods().Value()).To(BeNumerically(\"==\", 110))\n\t\t}\n\t})\n\tContext(\"Metrics\", func() {\n\t\tIt(\"should expose vcpu metrics for instance types\", func() {\n\t\t\tinstanceTypes, err := awsEnv.InstanceTypesProvider.List(ctx, nodeClass)\n\t\t\tExpect(err).To(BeNil())\n\t\t\tExpect(len(instanceTypes)).To(BeNumerically(\">\", 0))\n\t\t\tfor _, it := range instanceTypes {\n\t\t\t\tmetric, ok := FindMetricWithLabelValues(\"karpenter_cloudprovider_instance_type_cpu_cores\", map[string]string{\n\t\t\t\t\t\"instance_type\": it.Name,\n\t\t\t\t})\n\t\t\t\tExpect(ok).To(BeTrue())\n\t\t\t\tExpect(metric).To(Not(BeNil()))\n\t\t\t\tvalue := metric.GetGauge().Value\n\t\t\t\tExpect(aws.ToFloat64(value)).To(BeNumerically(\">\", 0))\n\t\t\t}\n\t\t})\n\t\tIt(\"should expose memory metrics for instance types\", func() {\n\t\t\tinstanceTypes, err := awsEnv.InstanceTypesProvider.List(ctx, nodeClass)\n\t\t\tExpect(err).To(BeNil())\n\t\t\tExpect(len(instanceTypes)).To(BeNumerically(\">\", 0))\n\t\t\tfor _, it := range instanceTypes {\n\t\t\t\tmetric, ok := FindMetricWithLabelValues(\"karpenter_cloudprovider_instance_type_memory_bytes\", map[string]string{\n\t\t\t\t\t\"instance_type\": it.Name,\n\t\t\t\t})\n\t\t\t\tExpect(ok).To(BeTrue())\n\t\t\t\tExpect(metric).To(Not(BeNil()))\n\t\t\t\tvalue := metric.GetGauge().Value\n\t\t\t\tExpect(aws.ToFloat64(value)).To(BeNumerically(\">\", 0))\n\t\t\t}\n\t\t})\n\t})\n\tIt(\"should launch instances in local zones\", func() {\n\t\tnodeClass.Status.Subnets = []v1.Subnet{\n\t\t\t{\n\t\t\t\tID:   \"subnet-test1\",\n\t\t\t\tZone: \"test-zone-1a-local\",\n\t\t\t},\n\t\t}\n\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\tpod := coretest.UnschedulablePod(coretest.PodOptions{\n\t\t\tNodeRequirements: []corev1.NodeSelectorRequirement{{\n\t\t\t\tKey:      corev1.LabelTopologyZone,\n\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\tValues:   []string{\"test-zone-1a-local\"},\n\t\t\t}},\n\t\t})\n\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\tExpectScheduled(ctx, env.Client, pod)\n\t})\n\tContext(\"Overhead\", func() {\n\t\tvar info ec2types.InstanceTypeInfo\n\t\tBeforeEach(func() {\n\t\t\tctx = options.ToContext(ctx, test.Options(test.OptionsFields{\n\t\t\t\tClusterName: lo.ToPtr(\"karpenter-cluster\"),\n\t\t\t}))\n\n\t\t\tvar ok bool\n\t\t\tinstanceInfo, err := awsEnv.EC2API.DescribeInstanceTypes(ctx, &ec2.DescribeInstanceTypesInput{})\n\t\t\tExpect(err).To(BeNil())\n\t\t\tinfo, ok = lo.Find(instanceInfo.InstanceTypes, func(i ec2types.InstanceTypeInfo) bool {\n\t\t\t\treturn i.InstanceType == \"m5.xlarge\"\n\t\t\t})\n\t\t\tExpect(ok).To(BeTrue())\n\t\t})\n\t\tContext(\"System Reserved Resources\", func() {\n\t\t\tIt(\"should use defaults when no kubelet is specified\", func() {\n\t\t\t\tnodeClass.Spec.Kubelet = &v1.KubeletConfiguration{}\n\t\t\t\tit := instancetype.NewInstanceType(ctx,\n\t\t\t\t\tinfo,\n\t\t\t\t\tfake.DefaultRegion,\n\t\t\t\t\tnil,\n\t\t\t\t\tnil,\n\t\t\t\t\tnodeClass.Spec.BlockDeviceMappings,\n\t\t\t\t\tnodeClass.Spec.InstanceStorePolicy,\n\t\t\t\t\tnodeClass.Spec.Kubelet.MaxPods,\n\t\t\t\t\tnodeClass.Spec.Kubelet.PodsPerCore,\n\t\t\t\t\tnodeClass.Spec.Kubelet.KubeReserved,\n\t\t\t\t\tnodeClass.Spec.Kubelet.SystemReserved,\n\t\t\t\t\tnodeClass.Spec.Kubelet.EvictionHard,\n\t\t\t\t\tnodeClass.Spec.Kubelet.EvictionSoft,\n\t\t\t\t\tnodeClass.AMIFamily(),\n\t\t\t\t\tnil,\n\t\t\t\t)\n\t\t\t\tExpect(it.Overhead.SystemReserved.Cpu().String()).To(Equal(\"0\"))\n\t\t\t\tExpect(it.Overhead.SystemReserved.Memory().String()).To(Equal(\"0\"))\n\t\t\t\tExpect(it.Overhead.SystemReserved.StorageEphemeral().String()).To(Equal(\"0\"))\n\t\t\t})\n\t\t\tIt(\"should override system reserved cpus when specified\", func() {\n\t\t\t\tnodeClass.Spec.Kubelet = &v1.KubeletConfiguration{\n\t\t\t\t\tSystemReserved: map[string]string{\n\t\t\t\t\t\tstring(corev1.ResourceCPU):              \"2\",\n\t\t\t\t\t\tstring(corev1.ResourceMemory):           \"20Gi\",\n\t\t\t\t\t\tstring(corev1.ResourceEphemeralStorage): \"10Gi\",\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t\tit := instancetype.NewInstanceType(ctx,\n\t\t\t\t\tinfo,\n\t\t\t\t\tfake.DefaultRegion,\n\t\t\t\t\tnil,\n\t\t\t\t\tnil,\n\t\t\t\t\tnodeClass.Spec.BlockDeviceMappings,\n\t\t\t\t\tnodeClass.Spec.InstanceStorePolicy,\n\t\t\t\t\tnodeClass.Spec.Kubelet.MaxPods,\n\t\t\t\t\tnodeClass.Spec.Kubelet.PodsPerCore,\n\t\t\t\t\tnodeClass.Spec.Kubelet.KubeReserved,\n\t\t\t\t\tnodeClass.Spec.Kubelet.SystemReserved,\n\t\t\t\t\tnodeClass.Spec.Kubelet.EvictionHard,\n\t\t\t\t\tnodeClass.Spec.Kubelet.EvictionSoft,\n\t\t\t\t\tnodeClass.AMIFamily(),\n\t\t\t\t\tnil,\n\t\t\t\t)\n\t\t\t\tExpect(it.Overhead.SystemReserved.Cpu().String()).To(Equal(\"2\"))\n\t\t\t\tExpect(it.Overhead.SystemReserved.Memory().String()).To(Equal(\"20Gi\"))\n\t\t\t\tExpect(it.Overhead.SystemReserved.StorageEphemeral().String()).To(Equal(\"10Gi\"))\n\t\t\t})\n\t\t})\n\t\tContext(\"Kube Reserved Resources\", func() {\n\t\t\tIt(\"should use defaults when no kubelet is specified\", func() {\n\t\t\t\tnodeClass.Spec.Kubelet = &v1.KubeletConfiguration{}\n\t\t\t\tit := instancetype.NewInstanceType(ctx,\n\t\t\t\t\tinfo,\n\t\t\t\t\tfake.DefaultRegion,\n\t\t\t\t\tnil,\n\t\t\t\t\tnil,\n\t\t\t\t\tnodeClass.Spec.BlockDeviceMappings,\n\t\t\t\t\tnodeClass.Spec.InstanceStorePolicy,\n\t\t\t\t\tnodeClass.Spec.Kubelet.MaxPods,\n\t\t\t\t\tnodeClass.Spec.Kubelet.PodsPerCore,\n\t\t\t\t\tnodeClass.Spec.Kubelet.KubeReserved,\n\t\t\t\t\tnodeClass.Spec.Kubelet.SystemReserved,\n\t\t\t\t\tnodeClass.Spec.Kubelet.EvictionHard,\n\t\t\t\t\tnodeClass.Spec.Kubelet.EvictionSoft,\n\t\t\t\t\tnodeClass.AMIFamily(),\n\t\t\t\t\tnil,\n\t\t\t\t)\n\t\t\t\tExpect(it.Overhead.KubeReserved.Cpu().String()).To(Equal(\"80m\"))\n\t\t\t\tExpect(it.Overhead.KubeReserved.Memory().String()).To(Equal(\"893Mi\"))\n\t\t\t\tExpect(it.Overhead.KubeReserved.StorageEphemeral().String()).To(Equal(\"1Gi\"))\n\t\t\t})\n\t\t\tIt(\"should override kube reserved when specified\", func() {\n\t\t\t\tnodeClass.Spec.Kubelet = &v1.KubeletConfiguration{\n\t\t\t\t\tSystemReserved: map[string]string{\n\t\t\t\t\t\tstring(corev1.ResourceCPU):              \"1\",\n\t\t\t\t\t\tstring(corev1.ResourceMemory):           \"20Gi\",\n\t\t\t\t\t\tstring(corev1.ResourceEphemeralStorage): \"1Gi\",\n\t\t\t\t\t},\n\t\t\t\t\tKubeReserved: map[string]string{\n\t\t\t\t\t\tstring(corev1.ResourceCPU):              \"2\",\n\t\t\t\t\t\tstring(corev1.ResourceMemory):           \"10Gi\",\n\t\t\t\t\t\tstring(corev1.ResourceEphemeralStorage): \"2Gi\",\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t\tit := instancetype.NewInstanceType(ctx,\n\t\t\t\t\tinfo,\n\t\t\t\t\tfake.DefaultRegion,\n\t\t\t\t\tnil,\n\t\t\t\t\tnil,\n\t\t\t\t\tnodeClass.Spec.BlockDeviceMappings,\n\t\t\t\t\tnodeClass.Spec.InstanceStorePolicy,\n\t\t\t\t\tnodeClass.Spec.Kubelet.MaxPods,\n\t\t\t\t\tnodeClass.Spec.Kubelet.PodsPerCore,\n\t\t\t\t\tnodeClass.Spec.Kubelet.KubeReserved,\n\t\t\t\t\tnodeClass.Spec.Kubelet.SystemReserved,\n\t\t\t\t\tnodeClass.Spec.Kubelet.EvictionHard,\n\t\t\t\t\tnodeClass.Spec.Kubelet.EvictionSoft,\n\t\t\t\t\tnodeClass.AMIFamily(),\n\t\t\t\t\tnil,\n\t\t\t\t)\n\t\t\t\tExpect(it.Overhead.KubeReserved.Cpu().String()).To(Equal(\"2\"))\n\t\t\t\tExpect(it.Overhead.KubeReserved.Memory().String()).To(Equal(\"10Gi\"))\n\t\t\t\tExpect(it.Overhead.KubeReserved.StorageEphemeral().String()).To(Equal(\"2Gi\"))\n\t\t\t})\n\t\t})\n\t\tContext(\"Eviction Thresholds\", func() {\n\t\t\tBeforeEach(func() {\n\t\t\t\tctx = options.ToContext(ctx, test.Options(test.OptionsFields{\n\t\t\t\t\tVMMemoryOverheadPercent: lo.ToPtr[float64](0),\n\t\t\t\t}))\n\t\t\t})\n\t\t\tContext(\"Eviction Hard\", func() {\n\t\t\t\tIt(\"should override eviction threshold when specified as a quantity\", func() {\n\t\t\t\t\tnodeClass.Spec.Kubelet = &v1.KubeletConfiguration{\n\t\t\t\t\t\tSystemReserved: map[string]string{\n\t\t\t\t\t\t\tstring(corev1.ResourceMemory): \"20Gi\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tKubeReserved: map[string]string{\n\t\t\t\t\t\t\tstring(corev1.ResourceMemory): \"10Gi\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tEvictionHard: map[string]string{\n\t\t\t\t\t\t\tinstancetype.MemoryAvailable: \"500Mi\",\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\t\t\t\t\tit := instancetype.NewInstanceType(ctx,\n\t\t\t\t\t\tinfo,\n\t\t\t\t\t\tfake.DefaultRegion,\n\t\t\t\t\t\tnil,\n\t\t\t\t\t\tnil,\n\t\t\t\t\t\tnodeClass.Spec.BlockDeviceMappings,\n\t\t\t\t\t\tnodeClass.Spec.InstanceStorePolicy,\n\t\t\t\t\t\tnodeClass.Spec.Kubelet.MaxPods,\n\t\t\t\t\t\tnodeClass.Spec.Kubelet.PodsPerCore,\n\t\t\t\t\t\tnodeClass.Spec.Kubelet.KubeReserved,\n\t\t\t\t\t\tnodeClass.Spec.Kubelet.SystemReserved,\n\t\t\t\t\t\tnodeClass.Spec.Kubelet.EvictionHard,\n\t\t\t\t\t\tnodeClass.Spec.Kubelet.EvictionSoft,\n\t\t\t\t\t\tnodeClass.AMIFamily(),\n\t\t\t\t\t\tnil,\n\t\t\t\t\t)\n\t\t\t\t\tExpect(it.Overhead.EvictionThreshold.Memory().String()).To(Equal(\"500Mi\"))\n\t\t\t\t})\n\t\t\t\tIt(\"should override eviction threshold when specified as a percentage value\", func() {\n\t\t\t\t\tnodeClass.Spec.Kubelet = &v1.KubeletConfiguration{\n\t\t\t\t\t\tSystemReserved: map[string]string{\n\t\t\t\t\t\t\tstring(corev1.ResourceMemory): \"20Gi\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tKubeReserved: map[string]string{\n\t\t\t\t\t\t\tstring(corev1.ResourceMemory): \"10Gi\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tEvictionHard: map[string]string{\n\t\t\t\t\t\t\tinstancetype.MemoryAvailable: \"10%\",\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\t\t\t\t\tit := instancetype.NewInstanceType(ctx,\n\t\t\t\t\t\tinfo,\n\t\t\t\t\t\tfake.DefaultRegion,\n\t\t\t\t\t\tnil,\n\t\t\t\t\t\tnil,\n\t\t\t\t\t\tnodeClass.Spec.BlockDeviceMappings,\n\t\t\t\t\t\tnodeClass.Spec.InstanceStorePolicy,\n\t\t\t\t\t\tnodeClass.Spec.Kubelet.MaxPods,\n\t\t\t\t\t\tnodeClass.Spec.Kubelet.PodsPerCore,\n\t\t\t\t\t\tnodeClass.Spec.Kubelet.KubeReserved,\n\t\t\t\t\t\tnodeClass.Spec.Kubelet.SystemReserved,\n\t\t\t\t\t\tnodeClass.Spec.Kubelet.EvictionHard,\n\t\t\t\t\t\tnodeClass.Spec.Kubelet.EvictionSoft,\n\t\t\t\t\t\tnodeClass.AMIFamily(),\n\t\t\t\t\t\tnil,\n\t\t\t\t\t)\n\t\t\t\t\tExpect(it.Overhead.EvictionThreshold.Memory().Value()).To(BeNumerically(\"~\", float64(it.Capacity.Memory().Value())*0.1, 10))\n\t\t\t\t})\n\t\t\t\tIt(\"should consider the eviction threshold disabled when specified as 100%\", func() {\n\t\t\t\t\tnodeClass.Spec.Kubelet = &v1.KubeletConfiguration{\n\t\t\t\t\t\tSystemReserved: map[string]string{\n\t\t\t\t\t\t\tstring(corev1.ResourceMemory): \"20Gi\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tKubeReserved: map[string]string{\n\t\t\t\t\t\t\tstring(corev1.ResourceMemory): \"10Gi\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tEvictionHard: map[string]string{\n\t\t\t\t\t\t\tinstancetype.MemoryAvailable: \"100%\",\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\t\t\t\t\tit := instancetype.NewInstanceType(ctx,\n\t\t\t\t\t\tinfo,\n\t\t\t\t\t\tfake.DefaultRegion,\n\t\t\t\t\t\tnil,\n\t\t\t\t\t\tnil,\n\t\t\t\t\t\tnodeClass.Spec.BlockDeviceMappings,\n\t\t\t\t\t\tnodeClass.Spec.InstanceStorePolicy,\n\t\t\t\t\t\tnodeClass.Spec.Kubelet.MaxPods,\n\t\t\t\t\t\tnodeClass.Spec.Kubelet.PodsPerCore,\n\t\t\t\t\t\tnodeClass.Spec.Kubelet.KubeReserved,\n\t\t\t\t\t\tnodeClass.Spec.Kubelet.SystemReserved,\n\t\t\t\t\t\tnodeClass.Spec.Kubelet.EvictionHard,\n\t\t\t\t\t\tnodeClass.Spec.Kubelet.EvictionSoft,\n\t\t\t\t\t\tnodeClass.AMIFamily(),\n\t\t\t\t\t\tnil,\n\t\t\t\t\t)\n\t\t\t\t\tExpect(it.Overhead.EvictionThreshold.Memory().String()).To(Equal(\"0\"))\n\t\t\t\t})\n\t\t\t\tIt(\"should used default eviction threshold for memory when evictionHard not specified\", func() {\n\t\t\t\t\tnodeClass.Spec.Kubelet = &v1.KubeletConfiguration{\n\t\t\t\t\t\tSystemReserved: map[string]string{\n\t\t\t\t\t\t\tstring(corev1.ResourceMemory): \"20Gi\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tKubeReserved: map[string]string{\n\t\t\t\t\t\t\tstring(corev1.ResourceMemory): \"10Gi\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tEvictionSoft: map[string]string{\n\t\t\t\t\t\t\tinstancetype.MemoryAvailable: \"50Mi\",\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\t\t\t\t\tit := instancetype.NewInstanceType(ctx,\n\t\t\t\t\t\tinfo,\n\t\t\t\t\t\tfake.DefaultRegion,\n\t\t\t\t\t\tnil,\n\t\t\t\t\t\tnil,\n\t\t\t\t\t\tnodeClass.Spec.BlockDeviceMappings,\n\t\t\t\t\t\tnodeClass.Spec.InstanceStorePolicy,\n\t\t\t\t\t\tnodeClass.Spec.Kubelet.MaxPods,\n\t\t\t\t\t\tnodeClass.Spec.Kubelet.PodsPerCore,\n\t\t\t\t\t\tnodeClass.Spec.Kubelet.KubeReserved,\n\t\t\t\t\t\tnodeClass.Spec.Kubelet.SystemReserved,\n\t\t\t\t\t\tnodeClass.Spec.Kubelet.EvictionHard,\n\t\t\t\t\t\tnodeClass.Spec.Kubelet.EvictionSoft,\n\t\t\t\t\t\tnodeClass.AMIFamily(),\n\t\t\t\t\t\tnil,\n\t\t\t\t\t)\n\t\t\t\t\tExpect(it.Overhead.EvictionThreshold.Memory().String()).To(Equal(\"100Mi\"))\n\t\t\t\t})\n\t\t\t})\n\t\t\tContext(\"Eviction Soft\", func() {\n\t\t\t\tIt(\"should use default threshold when only evictionSoft is specified\", func() {\n\t\t\t\t\tnodeClass.Spec.Kubelet = &v1.KubeletConfiguration{\n\t\t\t\t\t\tSystemReserved: map[string]string{\n\t\t\t\t\t\t\tstring(corev1.ResourceMemory): \"20Gi\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tKubeReserved: map[string]string{\n\t\t\t\t\t\t\tstring(corev1.ResourceMemory): \"10Gi\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tEvictionSoft: map[string]string{\n\t\t\t\t\t\t\tinstancetype.MemoryAvailable: \"500Mi\",\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\t\t\t\t\tit := instancetype.NewInstanceType(ctx,\n\t\t\t\t\t\tinfo,\n\t\t\t\t\t\tfake.DefaultRegion,\n\t\t\t\t\t\tnil,\n\t\t\t\t\t\tnil,\n\t\t\t\t\t\tnodeClass.Spec.BlockDeviceMappings,\n\t\t\t\t\t\tnodeClass.Spec.InstanceStorePolicy,\n\t\t\t\t\t\tnodeClass.Spec.Kubelet.MaxPods,\n\t\t\t\t\t\tnodeClass.Spec.Kubelet.PodsPerCore,\n\t\t\t\t\t\tnodeClass.Spec.Kubelet.KubeReserved,\n\t\t\t\t\t\tnodeClass.Spec.Kubelet.SystemReserved,\n\t\t\t\t\t\tnodeClass.Spec.Kubelet.EvictionHard,\n\t\t\t\t\t\tnodeClass.Spec.Kubelet.EvictionSoft,\n\t\t\t\t\t\tnodeClass.AMIFamily(),\n\t\t\t\t\t\tnil,\n\t\t\t\t\t)\n\t\t\t\t\tExpect(it.Overhead.EvictionThreshold.Memory().String()).To(Equal(\"100Mi\"))\n\t\t\t\t})\n\t\t\t\tIt(\"should use evictionHard percentage and ignore evictionSoft percentage\", func() {\n\t\t\t\t\tnodeClass.Spec.Kubelet = &v1.KubeletConfiguration{\n\t\t\t\t\t\tSystemReserved: map[string]string{\n\t\t\t\t\t\t\tstring(corev1.ResourceMemory): \"20Gi\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tKubeReserved: map[string]string{\n\t\t\t\t\t\t\tstring(corev1.ResourceMemory): \"10Gi\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tEvictionHard: map[string]string{\n\t\t\t\t\t\t\tinstancetype.MemoryAvailable: \"5%\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tEvictionSoft: map[string]string{\n\t\t\t\t\t\t\tinstancetype.MemoryAvailable: \"10%\",\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\t\t\t\t\tit := instancetype.NewInstanceType(ctx,\n\t\t\t\t\t\tinfo,\n\t\t\t\t\t\tfake.DefaultRegion,\n\t\t\t\t\t\tnil,\n\t\t\t\t\t\tnil,\n\t\t\t\t\t\tnodeClass.Spec.BlockDeviceMappings,\n\t\t\t\t\t\tnodeClass.Spec.InstanceStorePolicy,\n\t\t\t\t\t\tnodeClass.Spec.Kubelet.MaxPods,\n\t\t\t\t\t\tnodeClass.Spec.Kubelet.PodsPerCore,\n\t\t\t\t\t\tnodeClass.Spec.Kubelet.KubeReserved,\n\t\t\t\t\t\tnodeClass.Spec.Kubelet.SystemReserved,\n\t\t\t\t\t\tnodeClass.Spec.Kubelet.EvictionHard,\n\t\t\t\t\t\tnodeClass.Spec.Kubelet.EvictionSoft,\n\t\t\t\t\t\tnodeClass.AMIFamily(),\n\t\t\t\t\t\tnil,\n\t\t\t\t\t)\n\t\t\t\t\tExpect(it.Overhead.EvictionThreshold.Memory().Value()).To(BeNumerically(\"~\", float64(it.Capacity.Memory().Value())*0.05, 10))\n\t\t\t\t})\n\t\t\t\tIt(\"should use default threshold when evictionSoft is 100% (ignored)\", func() {\n\t\t\t\t\tnodeClass.Spec.Kubelet = &v1.KubeletConfiguration{\n\t\t\t\t\t\tSystemReserved: map[string]string{\n\t\t\t\t\t\t\tstring(corev1.ResourceMemory): \"20Gi\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tKubeReserved: map[string]string{\n\t\t\t\t\t\t\tstring(corev1.ResourceMemory): \"10Gi\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tEvictionSoft: map[string]string{\n\t\t\t\t\t\t\tinstancetype.MemoryAvailable: \"100%\",\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\t\t\t\t\tit := instancetype.NewInstanceType(ctx,\n\t\t\t\t\t\tinfo,\n\t\t\t\t\t\tfake.DefaultRegion,\n\t\t\t\t\t\tnil,\n\t\t\t\t\t\tnil,\n\t\t\t\t\t\tnodeClass.Spec.BlockDeviceMappings,\n\t\t\t\t\t\tnodeClass.Spec.InstanceStorePolicy,\n\t\t\t\t\t\tnodeClass.Spec.Kubelet.MaxPods,\n\t\t\t\t\t\tnodeClass.Spec.Kubelet.PodsPerCore,\n\t\t\t\t\t\tnodeClass.Spec.Kubelet.KubeReserved,\n\t\t\t\t\t\tnodeClass.Spec.Kubelet.SystemReserved,\n\t\t\t\t\t\tnodeClass.Spec.Kubelet.EvictionHard,\n\t\t\t\t\t\tnodeClass.Spec.Kubelet.EvictionSoft,\n\t\t\t\t\t\tnodeClass.AMIFamily(),\n\t\t\t\t\t\tnil,\n\t\t\t\t\t)\n\t\t\t\t\tExpect(it.Overhead.EvictionThreshold.Memory().String()).To(Equal(\"100Mi\"))\n\t\t\t\t})\n\t\t\t\tIt(\"should ignore eviction threshold when using Bottlerocket AMI\", func() {\n\t\t\t\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{Alias: \"bottlerocket@latest\"}}\n\t\t\t\t\tnodeClass.Spec.Kubelet = &v1.KubeletConfiguration{\n\t\t\t\t\t\tSystemReserved: map[string]string{\n\t\t\t\t\t\t\tstring(corev1.ResourceMemory): \"20Gi\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tKubeReserved: map[string]string{\n\t\t\t\t\t\t\tstring(corev1.ResourceMemory): \"10Gi\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tEvictionHard: map[string]string{\n\t\t\t\t\t\t\tinstancetype.MemoryAvailable: \"1Gi\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tEvictionSoft: map[string]string{\n\t\t\t\t\t\t\tinstancetype.MemoryAvailable: \"10Gi\",\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\t\t\t\t\tit := instancetype.NewInstanceType(ctx,\n\t\t\t\t\t\tinfo,\n\t\t\t\t\t\tfake.DefaultRegion,\n\t\t\t\t\t\tnil,\n\t\t\t\t\t\tnil,\n\t\t\t\t\t\tnodeClass.Spec.BlockDeviceMappings,\n\t\t\t\t\t\tnodeClass.Spec.InstanceStorePolicy,\n\t\t\t\t\t\tnodeClass.Spec.Kubelet.MaxPods,\n\t\t\t\t\t\tnodeClass.Spec.Kubelet.PodsPerCore,\n\t\t\t\t\t\tnodeClass.Spec.Kubelet.KubeReserved,\n\t\t\t\t\t\tnodeClass.Spec.Kubelet.SystemReserved,\n\t\t\t\t\t\tnodeClass.Spec.Kubelet.EvictionHard,\n\t\t\t\t\t\tnodeClass.Spec.Kubelet.EvictionSoft,\n\t\t\t\t\t\tnodeClass.AMIFamily(),\n\t\t\t\t\t\tnil,\n\t\t\t\t\t)\n\t\t\t\t\tExpect(it.Overhead.EvictionThreshold.Memory().String()).To(Equal(\"1Gi\"))\n\t\t\t\t})\n\t\t\t})\n\t\t\tIt(\"should take the default eviction threshold when none is specified\", func() {\n\t\t\t\tnodeClass.Spec.Kubelet = &v1.KubeletConfiguration{}\n\t\t\t\tit := instancetype.NewInstanceType(ctx,\n\t\t\t\t\tinfo,\n\t\t\t\t\tfake.DefaultRegion,\n\t\t\t\t\tnil,\n\t\t\t\t\tnil,\n\t\t\t\t\tnodeClass.Spec.BlockDeviceMappings,\n\t\t\t\t\tnodeClass.Spec.InstanceStorePolicy,\n\t\t\t\t\tnodeClass.Spec.Kubelet.MaxPods,\n\t\t\t\t\tnodeClass.Spec.Kubelet.PodsPerCore,\n\t\t\t\t\tnodeClass.Spec.Kubelet.KubeReserved,\n\t\t\t\t\tnodeClass.Spec.Kubelet.SystemReserved,\n\t\t\t\t\tnodeClass.Spec.Kubelet.EvictionHard,\n\t\t\t\t\tnodeClass.Spec.Kubelet.EvictionSoft,\n\t\t\t\t\tnodeClass.AMIFamily(),\n\t\t\t\t\tnil,\n\t\t\t\t)\n\t\t\t\tExpect(it.Overhead.EvictionThreshold.Cpu().String()).To(Equal(\"0\"))\n\t\t\t\tExpect(it.Overhead.EvictionThreshold.Memory().String()).To(Equal(\"100Mi\"))\n\t\t\t\tExpect(it.Overhead.EvictionThreshold.StorageEphemeral().AsApproximateFloat64()).To(BeNumerically(\"~\", resources.Quantity(\"2Gi\").AsApproximateFloat64()))\n\t\t\t})\n\t\t\tIt(\"should use only evictionHard for overhead, ignoring evictionSoft\", func() {\n\t\t\t\tnodeClass.Spec.Kubelet = &v1.KubeletConfiguration{\n\t\t\t\t\tSystemReserved: map[string]string{\n\t\t\t\t\t\tstring(corev1.ResourceMemory): \"20Gi\",\n\t\t\t\t\t},\n\t\t\t\t\tKubeReserved: map[string]string{\n\t\t\t\t\t\tstring(corev1.ResourceMemory): \"10Gi\",\n\t\t\t\t\t},\n\t\t\t\t\tEvictionSoft: map[string]string{\n\t\t\t\t\t\tinstancetype.MemoryAvailable: \"3Gi\",\n\t\t\t\t\t},\n\t\t\t\t\tEvictionHard: map[string]string{\n\t\t\t\t\t\tinstancetype.MemoryAvailable: \"1Gi\",\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t\tit := instancetype.NewInstanceType(ctx,\n\t\t\t\t\tinfo,\n\t\t\t\t\tfake.DefaultRegion,\n\t\t\t\t\tnil,\n\t\t\t\t\tnil,\n\t\t\t\t\tnodeClass.Spec.BlockDeviceMappings,\n\t\t\t\t\tnodeClass.Spec.InstanceStorePolicy,\n\t\t\t\t\tnodeClass.Spec.Kubelet.MaxPods,\n\t\t\t\t\tnodeClass.Spec.Kubelet.PodsPerCore,\n\t\t\t\t\tnodeClass.Spec.Kubelet.KubeReserved,\n\t\t\t\t\tnodeClass.Spec.Kubelet.SystemReserved,\n\t\t\t\t\tnodeClass.Spec.Kubelet.EvictionHard,\n\t\t\t\t\tnodeClass.Spec.Kubelet.EvictionSoft,\n\t\t\t\t\tnodeClass.AMIFamily(),\n\t\t\t\t\tnil,\n\t\t\t\t)\n\t\t\t\t// Should use evictionHard (1Gi), not evictionSoft (3Gi)\n\t\t\t\tExpect(it.Overhead.EvictionThreshold.Memory().String()).To(Equal(\"1Gi\"))\n\t\t\t})\n\t\t\tIt(\"should use only evictionHard percentage for overhead, ignoring evictionSoft\", func() {\n\t\t\t\tnodeClass.Spec.Kubelet = &v1.KubeletConfiguration{\n\t\t\t\t\tSystemReserved: map[string]string{\n\t\t\t\t\t\tstring(corev1.ResourceMemory): \"20Gi\",\n\t\t\t\t\t},\n\t\t\t\t\tKubeReserved: map[string]string{\n\t\t\t\t\t\tstring(corev1.ResourceMemory): \"10Gi\",\n\t\t\t\t\t},\n\t\t\t\t\tEvictionSoft: map[string]string{\n\t\t\t\t\t\tinstancetype.MemoryAvailable: \"2%\",\n\t\t\t\t\t},\n\t\t\t\t\tEvictionHard: map[string]string{\n\t\t\t\t\t\tinstancetype.MemoryAvailable: \"5%\",\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t\tit := instancetype.NewInstanceType(ctx,\n\t\t\t\t\tinfo,\n\t\t\t\t\tfake.DefaultRegion,\n\t\t\t\t\tnil,\n\t\t\t\t\tnil,\n\t\t\t\t\tnodeClass.Spec.BlockDeviceMappings,\n\t\t\t\t\tnodeClass.Spec.InstanceStorePolicy,\n\t\t\t\t\tnodeClass.Spec.Kubelet.MaxPods,\n\t\t\t\t\tnodeClass.Spec.Kubelet.PodsPerCore,\n\t\t\t\t\tnodeClass.Spec.Kubelet.KubeReserved,\n\t\t\t\t\tnodeClass.Spec.Kubelet.SystemReserved,\n\t\t\t\t\tnodeClass.Spec.Kubelet.EvictionHard,\n\t\t\t\t\tnodeClass.Spec.Kubelet.EvictionSoft,\n\t\t\t\t\tnodeClass.AMIFamily(),\n\t\t\t\t\tnil,\n\t\t\t\t)\n\t\t\t\t// Should use evictionHard (5%), not evictionSoft (2%)\n\t\t\t\tExpect(it.Overhead.EvictionThreshold.Memory().Value()).To(BeNumerically(\"~\", float64(it.Capacity.Memory().Value())*0.05, 10))\n\t\t\t})\n\t\t\tIt(\"should use only evictionHard value with mixed percentage/value types\", func() {\n\t\t\t\tnodeClass.Spec.Kubelet = &v1.KubeletConfiguration{\n\t\t\t\t\tSystemReserved: map[string]string{\n\t\t\t\t\t\tstring(corev1.ResourceMemory): \"20Gi\",\n\t\t\t\t\t},\n\t\t\t\t\tKubeReserved: map[string]string{\n\t\t\t\t\t\tstring(corev1.ResourceMemory): \"10Gi\",\n\t\t\t\t\t},\n\t\t\t\t\tEvictionSoft: map[string]string{\n\t\t\t\t\t\tinstancetype.MemoryAvailable: \"10%\",\n\t\t\t\t\t},\n\t\t\t\t\tEvictionHard: map[string]string{\n\t\t\t\t\t\tinstancetype.MemoryAvailable: \"1Gi\",\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t\tit := instancetype.NewInstanceType(ctx,\n\t\t\t\t\tinfo,\n\t\t\t\t\tfake.DefaultRegion,\n\t\t\t\t\tnil,\n\t\t\t\t\tnil,\n\t\t\t\t\tnodeClass.Spec.BlockDeviceMappings,\n\t\t\t\t\tnodeClass.Spec.InstanceStorePolicy,\n\t\t\t\t\tnodeClass.Spec.Kubelet.MaxPods,\n\t\t\t\t\tnodeClass.Spec.Kubelet.PodsPerCore,\n\t\t\t\t\tnodeClass.Spec.Kubelet.KubeReserved,\n\t\t\t\t\tnodeClass.Spec.Kubelet.SystemReserved,\n\t\t\t\t\tnodeClass.Spec.Kubelet.EvictionHard,\n\t\t\t\t\tnodeClass.Spec.Kubelet.EvictionSoft,\n\t\t\t\t\tnodeClass.AMIFamily(),\n\t\t\t\t\tnil,\n\t\t\t\t)\n\t\t\t\t// Should use evictionHard (1Gi), not evictionSoft (10%)\n\t\t\t\tExpect(it.Overhead.EvictionThreshold.Memory().String()).To(Equal(\"1Gi\"))\n\t\t\t})\n\t\t})\n\t\tIt(\"should default max pods based off of network interfaces\", func() {\n\t\t\tinstanceInfo, err := awsEnv.EC2API.DescribeInstanceTypes(ctx, &ec2.DescribeInstanceTypesInput{})\n\t\t\tExpect(err).To(BeNil())\n\t\t\tnodeClass.Spec.Kubelet = &v1.KubeletConfiguration{}\n\t\t\tfor _, info := range instanceInfo.InstanceTypes {\n\t\t\t\tif info.InstanceType == \"t3.large\" {\n\t\t\t\t\tit := instancetype.NewInstanceType(ctx,\n\t\t\t\t\t\tinfo,\n\t\t\t\t\t\tfake.DefaultRegion,\n\t\t\t\t\t\tnil,\n\t\t\t\t\t\tnil,\n\t\t\t\t\t\tnodeClass.Spec.BlockDeviceMappings,\n\t\t\t\t\t\tnodeClass.Spec.InstanceStorePolicy,\n\t\t\t\t\t\tnodeClass.Spec.Kubelet.MaxPods,\n\t\t\t\t\t\tnodeClass.Spec.Kubelet.PodsPerCore,\n\t\t\t\t\t\tnodeClass.Spec.Kubelet.KubeReserved,\n\t\t\t\t\t\tnodeClass.Spec.Kubelet.SystemReserved,\n\t\t\t\t\t\tnodeClass.Spec.Kubelet.EvictionHard,\n\t\t\t\t\t\tnodeClass.Spec.Kubelet.EvictionSoft,\n\t\t\t\t\t\tnodeClass.AMIFamily(),\n\t\t\t\t\t\tnil,\n\t\t\t\t\t)\n\t\t\t\t\tExpect(it.Capacity.Pods().Value()).To(BeNumerically(\"==\", 35))\n\t\t\t\t}\n\t\t\t\tif info.InstanceType == \"m6idn.32xlarge\" {\n\t\t\t\t\tit := instancetype.NewInstanceType(ctx,\n\t\t\t\t\t\tinfo,\n\t\t\t\t\t\tfake.DefaultRegion,\n\t\t\t\t\t\tnil,\n\t\t\t\t\t\tnil,\n\t\t\t\t\t\tnodeClass.Spec.BlockDeviceMappings,\n\t\t\t\t\t\tnodeClass.Spec.InstanceStorePolicy,\n\t\t\t\t\t\tnodeClass.Spec.Kubelet.MaxPods,\n\t\t\t\t\t\tnodeClass.Spec.Kubelet.PodsPerCore,\n\t\t\t\t\t\tnodeClass.Spec.Kubelet.KubeReserved,\n\t\t\t\t\t\tnodeClass.Spec.Kubelet.SystemReserved,\n\t\t\t\t\t\tnodeClass.Spec.Kubelet.EvictionHard,\n\t\t\t\t\t\tnodeClass.Spec.Kubelet.EvictionSoft,\n\t\t\t\t\t\tnodeClass.AMIFamily(),\n\t\t\t\t\t\tnil,\n\t\t\t\t\t)\n\t\t\t\t\tExpect(it.Capacity.Pods().Value()).To(BeNumerically(\"==\", 394))\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t\tIt(\"should set max-pods to user-defined value if specified\", func() {\n\t\t\tinstanceInfo, err := awsEnv.EC2API.DescribeInstanceTypes(ctx, &ec2.DescribeInstanceTypesInput{})\n\t\t\tExpect(err).To(BeNil())\n\t\t\tnodeClass.Spec.Kubelet = &v1.KubeletConfiguration{\n\t\t\t\tMaxPods: lo.ToPtr(int32(10)),\n\t\t\t}\n\t\t\tfor _, info := range instanceInfo.InstanceTypes {\n\t\t\t\tit := instancetype.NewInstanceType(ctx,\n\t\t\t\t\tinfo,\n\t\t\t\t\tfake.DefaultRegion,\n\t\t\t\t\tnil,\n\t\t\t\t\tnil,\n\t\t\t\t\tnodeClass.Spec.BlockDeviceMappings,\n\t\t\t\t\tnodeClass.Spec.InstanceStorePolicy,\n\t\t\t\t\tnodeClass.Spec.Kubelet.MaxPods,\n\t\t\t\t\tnodeClass.Spec.Kubelet.PodsPerCore,\n\t\t\t\t\tnodeClass.Spec.Kubelet.KubeReserved,\n\t\t\t\t\tnodeClass.Spec.Kubelet.SystemReserved,\n\t\t\t\t\tnodeClass.Spec.Kubelet.EvictionHard,\n\t\t\t\t\tnodeClass.Spec.Kubelet.EvictionSoft,\n\t\t\t\t\tnodeClass.AMIFamily(),\n\t\t\t\t\tnil,\n\t\t\t\t)\n\t\t\t\tExpect(it.Capacity.Pods().Value()).To(BeNumerically(\"==\", 10))\n\t\t\t}\n\t\t})\n\t\tDescribeTable(\n\t\t\t\"should set max-pods to user-defined value if specified\",\n\t\t\tfunc(alias string, family string, maxPods int, memory string) {\n\t\t\t\tinstanceInfo, err := awsEnv.EC2API.DescribeInstanceTypes(ctx, &ec2.DescribeInstanceTypesInput{})\n\t\t\t\tExpect(err).To(BeNil())\n\t\t\t\tt3Large, ok := lo.Find(instanceInfo.InstanceTypes, func(info ec2types.InstanceTypeInfo) bool {\n\t\t\t\t\treturn info.InstanceType == \"t3.large\"\n\t\t\t\t})\n\t\t\t\tExpect(ok).To(Equal(true))\n\n\t\t\t\tnodeClass.Spec.AMIFamily = lo.ToPtr(family)\n\t\t\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{Alias: alias}}\n\t\t\t\tnodeClass.Spec.Kubelet = &v1.KubeletConfiguration{\n\t\t\t\t\tMaxPods: lo.ToPtr(int32(10)),\n\t\t\t\t}\n\t\t\t\tit := instancetype.NewInstanceType(ctx,\n\t\t\t\t\tt3Large,\n\t\t\t\t\tfake.DefaultRegion,\n\t\t\t\t\tnil,\n\t\t\t\t\tnil,\n\t\t\t\t\tnodeClass.Spec.BlockDeviceMappings,\n\t\t\t\t\tnodeClass.Spec.InstanceStorePolicy,\n\t\t\t\t\tnodeClass.Spec.Kubelet.MaxPods,\n\t\t\t\t\tnodeClass.Spec.Kubelet.PodsPerCore,\n\t\t\t\t\tnodeClass.Spec.Kubelet.KubeReserved,\n\t\t\t\t\tnodeClass.Spec.Kubelet.SystemReserved,\n\t\t\t\t\tnodeClass.Spec.Kubelet.EvictionHard,\n\t\t\t\t\tnodeClass.Spec.Kubelet.EvictionSoft,\n\t\t\t\t\tnodeClass.AMIFamily(),\n\t\t\t\t\tnil,\n\t\t\t\t)\n\t\t\t\t// t3.large\n\t\t\t\t// maxInterfaces = 3\n\t\t\t\t// maxIPv4PerInterface = 12\n\t\t\t\t// reservedENIs = 1\n\t\t\t\tExpect(it.Capacity.Pods().Value()).To(BeNumerically(\"==\", maxPods))\n\t\t\t\t// 11 * pods + 255\n\t\t\t\tExpect(it.Overhead.KubeReserved.Memory().String()).To(Equal(memory))\n\t\t\t},\n\t\t\tEntry(\"al2 (latest)\", \"al2@latest\", v1.AMIFamilyAL2, 10, \"640Mi\"),                            // 11 * 35 + 255\n\t\t\tEntry(\"al2023 (latest)\", \"al2023@latest\", v1.AMIFamilyAL2023, 10, \"640Mi\"),                   // 11 * 35 + 255\n\t\t\tEntry(\"bottlerocket (latest)\", \"bottlerocket@latest\", v1.AMIFamilyBottlerocket, 10, \"365Mi\"), // 11 * 10 + 255\n\t\t\tEntry(\"windows2019 (latest)\", \"windows2019@latest\", v1.AMIFamilyWindows2019, 10, \"365Mi\"),    // 11 * 10 + 255\n\t\t\tEntry(\"windows2022 (latest)\", \"windows2022@latest\", v1.AMIFamilyWindows2022, 10, \"365Mi\"),    // 11 * 10 + 255\n\t\t\tEntry(\"windows2025 (latest)\", \"windows2025@latest\", v1.AMIFamilyWindows2025, 10, \"365Mi\"),    // 11 * 10 + 255\n\t\t\tEntry(\"custom\", fake.ImageID(), v1.AMIFamilyCustom, 10, \"640Mi\"),                             // 11 * 35 + 255\n\t\t)\n\t\tIt(\"should override max-pods value\", func() {\n\t\t\tinstanceInfo, err := awsEnv.EC2API.DescribeInstanceTypes(ctx, &ec2.DescribeInstanceTypesInput{})\n\t\t\tExpect(err).To(BeNil())\n\t\t\tnodeClass.Spec.Kubelet = &v1.KubeletConfiguration{\n\t\t\t\tMaxPods: lo.ToPtr(int32(10)),\n\t\t\t}\n\t\t\tfor _, info := range instanceInfo.InstanceTypes {\n\t\t\t\tit := instancetype.NewInstanceType(ctx,\n\t\t\t\t\tinfo,\n\t\t\t\t\tfake.DefaultRegion,\n\t\t\t\t\tnil,\n\t\t\t\t\tnil,\n\t\t\t\t\tnodeClass.Spec.BlockDeviceMappings,\n\t\t\t\t\tnodeClass.Spec.InstanceStorePolicy,\n\t\t\t\t\tnodeClass.Spec.Kubelet.MaxPods,\n\t\t\t\t\tnodeClass.Spec.Kubelet.PodsPerCore,\n\t\t\t\t\tnodeClass.Spec.Kubelet.KubeReserved,\n\t\t\t\t\tnodeClass.Spec.Kubelet.SystemReserved,\n\t\t\t\t\tnodeClass.Spec.Kubelet.EvictionHard,\n\t\t\t\t\tnodeClass.Spec.Kubelet.EvictionSoft,\n\t\t\t\t\tnodeClass.AMIFamily(),\n\t\t\t\t\tnil,\n\t\t\t\t)\n\t\t\t\tExpect(it.Capacity.Pods().Value()).To(BeNumerically(\"==\", 10))\n\t\t\t}\n\t\t})\n\t\tDescribeTable(\n\t\t\t\"should reserve ENIs when aws.reservedENIs is set and use it in max-pods calculation\",\n\t\t\tfunc(alias string, family string, maxPods int, memory string) {\n\t\t\t\tctx = options.ToContext(ctx, test.Options(test.OptionsFields{\n\t\t\t\t\tReservedENIs: lo.ToPtr(1),\n\t\t\t\t}))\n\t\t\t\tinstanceInfo, err := awsEnv.EC2API.DescribeInstanceTypes(ctx, &ec2.DescribeInstanceTypesInput{})\n\t\t\t\tExpect(err).To(BeNil())\n\t\t\t\tt3Large, ok := lo.Find(instanceInfo.InstanceTypes, func(info ec2types.InstanceTypeInfo) bool {\n\t\t\t\t\treturn info.InstanceType == \"t3.large\"\n\t\t\t\t})\n\t\t\t\tExpect(ok).To(Equal(true))\n\n\t\t\t\tnodeClass.Spec.AMIFamily = lo.ToPtr(family)\n\t\t\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{Alias: alias}}\n\t\t\t\tnodeClass.Spec.Kubelet = &v1.KubeletConfiguration{}\n\n\t\t\t\tit := instancetype.NewInstanceType(ctx,\n\t\t\t\t\tt3Large,\n\t\t\t\t\tfake.DefaultRegion,\n\t\t\t\t\tnil,\n\t\t\t\t\tnil,\n\t\t\t\t\tnodeClass.Spec.BlockDeviceMappings,\n\t\t\t\t\tnodeClass.Spec.InstanceStorePolicy,\n\t\t\t\t\tnodeClass.Spec.Kubelet.MaxPods,\n\t\t\t\t\tnodeClass.Spec.Kubelet.PodsPerCore,\n\t\t\t\t\tnodeClass.Spec.Kubelet.KubeReserved,\n\t\t\t\t\tnodeClass.Spec.Kubelet.SystemReserved,\n\t\t\t\t\tnodeClass.Spec.Kubelet.EvictionHard,\n\t\t\t\t\tnodeClass.Spec.Kubelet.EvictionSoft,\n\t\t\t\t\tnodeClass.AMIFamily(),\n\t\t\t\t\tnil,\n\t\t\t\t)\n\t\t\t\t// t3.large\n\t\t\t\t// maxInterfaces = 3\n\t\t\t\t// maxIPv4PerInterface = 12\n\t\t\t\t// reservedENIs = 1\n\t\t\t\tExpect(it.Capacity.Pods().Value()).To(BeNumerically(\"==\", maxPods))\n\t\t\t\t// 11 * pods + 255\n\t\t\t\tExpect(it.Overhead.KubeReserved.Memory().String()).To(Equal(memory))\n\t\t\t},\n\t\t\tEntry(\"al2 (latest)\", \"al2@latest\", v1.AMIFamilyAL2, 24, \"640Mi\"),                            // 11 * 35 + 255\n\t\t\tEntry(\"al2023 (latest)\", \"al2023@latest\", v1.AMIFamilyAL2023, 24, \"640Mi\"),                   // 11 * 35 + 255\n\t\t\tEntry(\"bottlerocket (latest)\", \"bottlerocket@latest\", v1.AMIFamilyBottlerocket, 24, \"519Mi\"), // 11 * 24 + 255\n\t\t\tEntry(\"windows2019 (latest)\", \"windows2019@latest\", v1.AMIFamilyWindows2019, 110, \"1465Mi\"),  // 11 * 110 + 255\n\t\t\tEntry(\"windows2022 (latest)\", \"windows2022@latest\", v1.AMIFamilyWindows2022, 110, \"1465Mi\"),  // 11 * 110 + 255\n\t\t\tEntry(\"windows2025 (latest)\", \"windows2025@latest\", v1.AMIFamilyWindows2025, 110, \"1465Mi\"),  // 11 * 110 + 255\n\t\t\tEntry(\"custom\", fake.ImageID(), v1.AMIFamilyCustom, 24, \"640Mi\"),                             // 11 * 35 + 255\n\t\t)\n\t\tIt(\"should reserve ENIs when aws.reservedENIs is set and not go below 0 ENIs in max-pods calculation\", func() {\n\t\t\tctx = options.ToContext(ctx, test.Options(test.OptionsFields{\n\t\t\t\tReservedENIs: lo.ToPtr(1_000_000),\n\t\t\t}))\n\n\t\t\tinstanceInfo, err := awsEnv.EC2API.DescribeInstanceTypes(ctx, &ec2.DescribeInstanceTypesInput{})\n\t\t\tExpect(err).To(BeNil())\n\t\t\tt3Large, ok := lo.Find(instanceInfo.InstanceTypes, func(info ec2types.InstanceTypeInfo) bool {\n\t\t\t\treturn info.InstanceType == \"t3.large\"\n\t\t\t})\n\t\t\tExpect(ok).To(Equal(true))\n\t\t\tnodeClass.Spec.Kubelet = &v1.KubeletConfiguration{}\n\t\t\tit := instancetype.NewInstanceType(ctx,\n\t\t\t\tt3Large,\n\t\t\t\tfake.DefaultRegion,\n\t\t\t\tnil,\n\t\t\t\tnil,\n\t\t\t\tnodeClass.Spec.BlockDeviceMappings,\n\t\t\t\tnodeClass.Spec.InstanceStorePolicy,\n\t\t\t\tnodeClass.Spec.Kubelet.MaxPods,\n\t\t\t\tnodeClass.Spec.Kubelet.PodsPerCore,\n\t\t\t\tnodeClass.Spec.Kubelet.KubeReserved,\n\t\t\t\tnodeClass.Spec.Kubelet.SystemReserved,\n\t\t\t\tnodeClass.Spec.Kubelet.EvictionHard,\n\t\t\t\tnodeClass.Spec.Kubelet.EvictionSoft,\n\t\t\t\tnodeClass.AMIFamily(),\n\t\t\t\tnil,\n\t\t\t)\n\t\t\t// t3.large\n\t\t\t// maxInterfaces = 3\n\t\t\t// maxIPv4PerInterface = 12\n\t\t\t// reservedENIs = 1,000,000\n\t\t\t// max(3 - 1,000,000, 0) * (12 - 1) + 2 = 2\n\t\t\t// if max-pods is 2, we output 0\n\t\t\tmaxPods := 0\n\t\t\tExpect(it.Capacity.Pods().Value()).To(BeNumerically(\"==\", maxPods))\n\t\t})\n\t\tIt(\"should override pods-per-core value\", func() {\n\t\t\tinstanceInfo, err := awsEnv.EC2API.DescribeInstanceTypes(ctx, &ec2.DescribeInstanceTypesInput{})\n\t\t\tExpect(err).To(BeNil())\n\t\t\tnodeClass.Spec.Kubelet = &v1.KubeletConfiguration{\n\t\t\t\tPodsPerCore: lo.ToPtr(int32(1)),\n\t\t\t}\n\t\t\tfor _, info := range instanceInfo.InstanceTypes {\n\t\t\t\tit := instancetype.NewInstanceType(ctx,\n\t\t\t\t\tinfo,\n\t\t\t\t\tfake.DefaultRegion,\n\t\t\t\t\tnil,\n\t\t\t\t\tnil,\n\t\t\t\t\tnodeClass.Spec.BlockDeviceMappings,\n\t\t\t\t\tnodeClass.Spec.InstanceStorePolicy,\n\t\t\t\t\tnodeClass.Spec.Kubelet.MaxPods,\n\t\t\t\t\tnodeClass.Spec.Kubelet.PodsPerCore,\n\t\t\t\t\tnodeClass.Spec.Kubelet.KubeReserved,\n\t\t\t\t\tnodeClass.Spec.Kubelet.SystemReserved,\n\t\t\t\t\tnodeClass.Spec.Kubelet.EvictionHard,\n\t\t\t\t\tnodeClass.Spec.Kubelet.EvictionSoft,\n\t\t\t\t\tnodeClass.AMIFamily(),\n\t\t\t\t\tnil,\n\t\t\t\t)\n\t\t\t\tExpect(it.Capacity.Pods().Value()).To(BeNumerically(\"==\", lo.FromPtr(info.VCpuInfo.DefaultVCpus)))\n\t\t\t}\n\t\t})\n\t\tIt(\"should take the minimum of pods-per-core and max-pods\", func() {\n\t\t\tinstanceInfo, err := awsEnv.EC2API.DescribeInstanceTypes(ctx, &ec2.DescribeInstanceTypesInput{})\n\t\t\tExpect(err).To(BeNil())\n\t\t\tnodeClass.Spec.Kubelet = &v1.KubeletConfiguration{\n\t\t\t\tPodsPerCore: lo.ToPtr(int32(4)),\n\t\t\t\tMaxPods:     lo.ToPtr(int32(20)),\n\t\t\t}\n\t\t\tfor _, info := range instanceInfo.InstanceTypes {\n\t\t\t\tit := instancetype.NewInstanceType(ctx,\n\t\t\t\t\tinfo,\n\t\t\t\t\tfake.DefaultRegion,\n\t\t\t\t\tnil,\n\t\t\t\t\tnil,\n\t\t\t\t\tnodeClass.Spec.BlockDeviceMappings,\n\t\t\t\t\tnodeClass.Spec.InstanceStorePolicy,\n\t\t\t\t\tnodeClass.Spec.Kubelet.MaxPods,\n\t\t\t\t\tnodeClass.Spec.Kubelet.PodsPerCore,\n\t\t\t\t\tnodeClass.Spec.Kubelet.KubeReserved,\n\t\t\t\t\tnodeClass.Spec.Kubelet.SystemReserved,\n\t\t\t\t\tnodeClass.Spec.Kubelet.EvictionHard,\n\t\t\t\t\tnodeClass.Spec.Kubelet.EvictionSoft,\n\t\t\t\t\tnodeClass.AMIFamily(),\n\t\t\t\t\tnil,\n\t\t\t\t)\n\t\t\t\tExpect(it.Capacity.Pods().Value()).To(BeNumerically(\"==\", lo.Min([]int32{20, lo.FromPtr(info.VCpuInfo.DefaultVCpus) * 4})))\n\t\t\t}\n\t\t})\n\t\tIt(\"should ignore pods-per-core when using Bottlerocket AMI\", func() {\n\t\t\tinstanceInfo, err := awsEnv.EC2API.DescribeInstanceTypes(ctx, &ec2.DescribeInstanceTypesInput{})\n\t\t\tExpect(err).To(BeNil())\n\t\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{Alias: \"bottlerocket@latest\"}}\n\t\t\tnodeClass.Spec.Kubelet = &v1.KubeletConfiguration{\n\t\t\t\tPodsPerCore: lo.ToPtr(int32(1)),\n\t\t\t}\n\t\t\tfor _, info := range instanceInfo.InstanceTypes {\n\t\t\t\tit := instancetype.NewInstanceType(ctx,\n\t\t\t\t\tinfo,\n\t\t\t\t\tfake.DefaultRegion,\n\t\t\t\t\tnil,\n\t\t\t\t\tnil,\n\t\t\t\t\tnodeClass.Spec.BlockDeviceMappings,\n\t\t\t\t\tnodeClass.Spec.InstanceStorePolicy,\n\t\t\t\t\tnodeClass.Spec.Kubelet.MaxPods,\n\t\t\t\t\tnodeClass.Spec.Kubelet.PodsPerCore,\n\t\t\t\t\tnodeClass.Spec.Kubelet.KubeReserved,\n\t\t\t\t\tnodeClass.Spec.Kubelet.SystemReserved,\n\t\t\t\t\tnodeClass.Spec.Kubelet.EvictionHard,\n\t\t\t\t\tnodeClass.Spec.Kubelet.EvictionSoft,\n\t\t\t\t\tnodeClass.AMIFamily(),\n\t\t\t\t\tnil,\n\t\t\t\t)\n\t\t\t\tlimitedPods := instancetype.ENILimitedPods(ctx, info, 0)\n\t\t\t\tExpect(it.Capacity.Pods().Value()).To(BeNumerically(\"==\", limitedPods.Value()))\n\t\t\t}\n\t\t})\n\t\tIt(\"should take limited pod density to be the default pods number when pods-per-core is 0\", func() {\n\t\t\tinstanceInfo, err := awsEnv.EC2API.DescribeInstanceTypes(ctx, &ec2.DescribeInstanceTypesInput{})\n\t\t\tExpect(err).To(BeNil())\n\t\t\tnodeClass.Spec.Kubelet = &v1.KubeletConfiguration{\n\t\t\t\tPodsPerCore: lo.ToPtr(int32(0)),\n\t\t\t}\n\t\t\tfor _, info := range instanceInfo.InstanceTypes {\n\t\t\t\tif info.InstanceType == \"t3.large\" {\n\t\t\t\t\tit := instancetype.NewInstanceType(ctx,\n\t\t\t\t\t\tinfo,\n\t\t\t\t\t\tfake.DefaultRegion,\n\t\t\t\t\t\tnil,\n\t\t\t\t\t\tnil,\n\t\t\t\t\t\tnodeClass.Spec.BlockDeviceMappings,\n\t\t\t\t\t\tnodeClass.Spec.InstanceStorePolicy,\n\t\t\t\t\t\tnodeClass.Spec.Kubelet.MaxPods,\n\t\t\t\t\t\tnodeClass.Spec.Kubelet.PodsPerCore,\n\t\t\t\t\t\tnodeClass.Spec.Kubelet.KubeReserved,\n\t\t\t\t\t\tnodeClass.Spec.Kubelet.SystemReserved,\n\t\t\t\t\t\tnodeClass.Spec.Kubelet.EvictionHard,\n\t\t\t\t\t\tnodeClass.Spec.Kubelet.EvictionSoft,\n\t\t\t\t\t\tnodeClass.AMIFamily(),\n\t\t\t\t\t\tnil,\n\t\t\t\t\t)\n\t\t\t\t\tExpect(it.Capacity.Pods().Value()).To(BeNumerically(\"==\", 35))\n\t\t\t\t}\n\t\t\t\tif info.InstanceType == \"m6idn.32xlarge\" {\n\t\t\t\t\tit := instancetype.NewInstanceType(ctx,\n\t\t\t\t\t\tinfo,\n\t\t\t\t\t\tfake.DefaultRegion,\n\t\t\t\t\t\tnil,\n\t\t\t\t\t\tnil,\n\t\t\t\t\t\tnodeClass.Spec.BlockDeviceMappings,\n\t\t\t\t\t\tnodeClass.Spec.InstanceStorePolicy,\n\t\t\t\t\t\tnodeClass.Spec.Kubelet.MaxPods,\n\t\t\t\t\t\tnodeClass.Spec.Kubelet.PodsPerCore,\n\t\t\t\t\t\tnodeClass.Spec.Kubelet.KubeReserved,\n\t\t\t\t\t\tnodeClass.Spec.Kubelet.SystemReserved,\n\t\t\t\t\t\tnodeClass.Spec.Kubelet.EvictionHard,\n\t\t\t\t\t\tnodeClass.Spec.Kubelet.EvictionSoft,\n\t\t\t\t\t\tnodeClass.AMIFamily(),\n\t\t\t\t\t\tnil,\n\t\t\t\t\t)\n\t\t\t\t\tExpect(it.Capacity.Pods().Value()).To(BeNumerically(\"==\", 394))\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t\tIt(\"shouldn't report more resources than are actually available on instances\", func() {\n\t\t\tawsEnv.EC2API.DescribeSubnetsBehavior.Output.Set(&ec2.DescribeSubnetsOutput{\n\t\t\t\tSubnets: []ec2types.Subnet{\n\t\t\t\t\t{\n\t\t\t\t\t\tAvailabilityZone: aws.String(\"us-west-2a\"),\n\t\t\t\t\t\tSubnetId:         aws.String(\"subnet-12345\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t})\n\t\t\tawsEnv.EC2API.DescribeInstanceTypeOfferingsOutput.Set(&ec2.DescribeInstanceTypeOfferingsOutput{\n\t\t\t\tInstanceTypeOfferings: []ec2types.InstanceTypeOffering{\n\t\t\t\t\t{\n\t\t\t\t\t\tInstanceType: \"t4g.small\",\n\t\t\t\t\t\tLocation:     aws.String(\"us-west-2a\"),\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tInstanceType: \"t4g.medium\",\n\t\t\t\t\t\tLocation:     aws.String(\"us-west-2a\"),\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tInstanceType: \"t4g.xlarge\",\n\t\t\t\t\t\tLocation:     aws.String(\"us-west-2a\"),\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tInstanceType: \"m5.large\",\n\t\t\t\t\t\tLocation:     aws.String(\"us-west-2a\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t})\n\t\t\tawsEnv.EC2API.DescribeInstanceTypesOutput.Set(&ec2.DescribeInstanceTypesOutput{\n\t\t\t\tInstanceTypes: []ec2types.InstanceTypeInfo{\n\t\t\t\t\t{InstanceType: \"t4g.small\"},\n\t\t\t\t\t{InstanceType: \"t4g.medium\"},\n\t\t\t\t\t{InstanceType: \"t4g.xlarge\"},\n\t\t\t\t\t{InstanceType: \"m5.large\"},\n\t\t\t\t},\n\t\t\t})\n\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\tits, err := cloudProvider.GetInstanceTypes(ctx, nodePool)\n\t\t\tExpect(err).To(BeNil())\n\n\t\t\tinstanceTypes := map[string]*corecloudprovider.InstanceType{}\n\t\t\tfor _, it := range its {\n\t\t\t\tinstanceTypes[it.Name] = it\n\t\t\t}\n\n\t\t\tfor _, tc := range []struct {\n\t\t\t\tInstanceType string\n\t\t\t\t// Actual allocatable values as reported by the node from kubelet. You find these\n\t\t\t\t// by launching the node and inspecting the node status allocatable.\n\t\t\t\tMemory resource.Quantity\n\t\t\t\tCPU    resource.Quantity\n\t\t\t}{\n\t\t\t\t{\n\t\t\t\t\tInstanceType: \"t4g.small\",\n\t\t\t\t\tMemory:       resource.MustParse(\"1408312Ki\"),\n\t\t\t\t\tCPU:          resource.MustParse(\"1930m\"),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tInstanceType: \"t4g.medium\",\n\t\t\t\t\tMemory:       resource.MustParse(\"3377496Ki\"),\n\t\t\t\t\tCPU:          resource.MustParse(\"1930m\"),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tInstanceType: \"t4g.xlarge\",\n\t\t\t\t\tMemory:       resource.MustParse(\"15136012Ki\"),\n\t\t\t\t\tCPU:          resource.MustParse(\"3920m\"),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tInstanceType: \"m5.large\",\n\t\t\t\t\tMemory:       resource.MustParse(\"7220184Ki\"),\n\t\t\t\t\tCPU:          resource.MustParse(\"1930m\"),\n\t\t\t\t},\n\t\t\t} {\n\t\t\t\tit, ok := instanceTypes[tc.InstanceType]\n\t\t\t\tExpect(ok).To(BeTrue(), fmt.Sprintf(\"didn't find instance type %q, add to instanceTypeTestData in ./hack/codegen.sh\", tc.InstanceType))\n\n\t\t\t\tallocatable := it.Allocatable()\n\t\t\t\t// We need to ensure that our estimate of the allocatable resources <= the value that kubelet reports.  If it's greater,\n\t\t\t\t// we can launch nodes that can't actually run the pods.\n\t\t\t\tExpect(allocatable.Memory().AsApproximateFloat64()).To(BeNumerically(\"<=\", tc.Memory.AsApproximateFloat64()),\n\t\t\t\t\tfmt.Sprintf(\"memory estimate for %s was too large, had %s vs %s\", tc.InstanceType, allocatable.Memory().String(), tc.Memory.String()))\n\t\t\t\tExpect(allocatable.Cpu().AsApproximateFloat64()).To(BeNumerically(\"<=\", tc.CPU.AsApproximateFloat64()),\n\t\t\t\t\tfmt.Sprintf(\"CPU estimate for %s was too large, had %s vs %s\", tc.InstanceType, allocatable.Cpu().String(), tc.CPU.String()))\n\t\t\t}\n\t\t})\n\t})\n\tContext(\"Insufficient Capacity Error Cache\", func() {\n\t\tIt(\"should launch instances of different type on second reconciliation attempt with Insufficient Capacity Error Cache fallback\", func() {\n\t\t\tawsEnv.EC2API.InsufficientCapacityPools.Set([]fake.CapacityPool{{CapacityType: karpv1.CapacityTypeOnDemand, InstanceType: \"inf2.24xlarge\", Zone: \"test-zone-1a\"}})\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\tpods := []*corev1.Pod{\n\t\t\t\tcoretest.UnschedulablePod(coretest.PodOptions{\n\t\t\t\t\tNodeSelector: map[string]string{corev1.LabelTopologyZone: \"test-zone-1a\"},\n\t\t\t\t\tResourceRequirements: corev1.ResourceRequirements{\n\t\t\t\t\t\tRequests: corev1.ResourceList{v1.ResourceAWSNeuron: resource.MustParse(\"1\")},\n\t\t\t\t\t\tLimits:   corev1.ResourceList{v1.ResourceAWSNeuron: resource.MustParse(\"1\")},\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t\tcoretest.UnschedulablePod(coretest.PodOptions{\n\t\t\t\t\tNodeSelector: map[string]string{corev1.LabelTopologyZone: \"test-zone-1a\"},\n\t\t\t\t\tResourceRequirements: corev1.ResourceRequirements{\n\t\t\t\t\t\tRequests: corev1.ResourceList{v1.ResourceAWSNeuron: resource.MustParse(\"1\")},\n\t\t\t\t\t\tLimits:   corev1.ResourceList{v1.ResourceAWSNeuron: resource.MustParse(\"1\")},\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t}\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pods...)\n\t\t\t// it should've tried to pack them on a single inf2.24xlarge then hit an insufficient capacity error\n\t\t\tfor _, pod := range pods {\n\t\t\t\tExpectNotScheduled(ctx, env.Client, pod)\n\t\t\t}\n\t\t\tnodeNames := sets.NewString()\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pods...)\n\t\t\tfor _, pod := range pods {\n\t\t\t\tnode := ExpectScheduled(ctx, env.Client, pod)\n\t\t\t\tExpect(node.Labels).To(HaveKeyWithValue(v1.LabelInstanceAcceleratorName, \"inferentia2\"))\n\t\t\t\tnodeNames.Insert(node.Name)\n\t\t\t}\n\t\t\tExpect(nodeNames.Len()).To(Equal(2))\n\t\t})\n\t\tIt(\"should launch instances in a different zone on second reconciliation attempt with Insufficient Capacity Error Cache fallback\", func() {\n\t\t\tawsEnv.EC2API.InsufficientCapacityPools.Set([]fake.CapacityPool{{CapacityType: karpv1.CapacityTypeOnDemand, InstanceType: \"p3.8xlarge\", Zone: \"test-zone-1a\"}})\n\t\t\tpod := coretest.UnschedulablePod(coretest.PodOptions{\n\t\t\t\tNodeSelector: map[string]string{corev1.LabelInstanceTypeStable: \"p3.8xlarge\"},\n\t\t\t\tResourceRequirements: corev1.ResourceRequirements{\n\t\t\t\t\tRequests: corev1.ResourceList{v1.ResourceNVIDIAGPU: resource.MustParse(\"1\")},\n\t\t\t\t\tLimits:   corev1.ResourceList{v1.ResourceNVIDIAGPU: resource.MustParse(\"1\")},\n\t\t\t\t},\n\t\t\t})\n\t\t\tpod.Spec.Affinity = &corev1.Affinity{NodeAffinity: &corev1.NodeAffinity{PreferredDuringSchedulingIgnoredDuringExecution: []corev1.PreferredSchedulingTerm{\n\t\t\t\t{\n\t\t\t\t\tWeight: 1, Preference: corev1.NodeSelectorTerm{MatchExpressions: []corev1.NodeSelectorRequirement{\n\t\t\t\t\t\t{Key: corev1.LabelTopologyZone, Operator: corev1.NodeSelectorOpIn, Values: []string{\"test-zone-1a\"}},\n\t\t\t\t\t}},\n\t\t\t\t},\n\t\t\t}}}\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\t// it should've tried to pack them in test-zone-1a on a p3.8xlarge then hit insufficient capacity, the next attempt will try test-zone-1b\n\t\t\tExpectNotScheduled(ctx, env.Client, pod)\n\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\tnode := ExpectScheduled(ctx, env.Client, pod)\n\t\t\tExpect(node.Labels).To(SatisfyAll(\n\t\t\t\tHaveKeyWithValue(corev1.LabelInstanceTypeStable, \"p3.8xlarge\"),\n\t\t\t\tHaveKeyWithValue(corev1.LabelTopologyZone, \"test-zone-1b\")))\n\t\t})\n\t\tIt(\"should launch smaller instances than optimal if larger instance launch results in Insufficient Capacity Error\", func() {\n\t\t\tawsEnv.EC2API.InsufficientCapacityPools.Set([]fake.CapacityPool{\n\t\t\t\t{CapacityType: karpv1.CapacityTypeOnDemand, InstanceType: \"m5.xlarge\", Zone: \"test-zone-1a\"},\n\t\t\t})\n\t\t\tnodePool.Spec.Template.Spec.Requirements = append(nodePool.Spec.Template.Spec.Requirements, karpv1.NodeSelectorRequirementWithMinValues{\n\t\t\t\tKey:      corev1.LabelInstanceType,\n\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\tValues:   []string{\"m5.large\", \"m5.xlarge\"},\n\t\t\t})\n\t\t\tpods := []*corev1.Pod{}\n\t\t\tfor i := 0; i < 2; i++ {\n\t\t\t\tpods = append(pods, coretest.UnschedulablePod(coretest.PodOptions{\n\t\t\t\t\tResourceRequirements: corev1.ResourceRequirements{\n\t\t\t\t\t\tRequests: corev1.ResourceList{corev1.ResourceCPU: resource.MustParse(\"1\")},\n\t\t\t\t\t},\n\t\t\t\t\tNodeSelector: map[string]string{\n\t\t\t\t\t\tcorev1.LabelTopologyZone: \"test-zone-1a\",\n\t\t\t\t\t},\n\t\t\t\t}))\n\t\t\t}\n\t\t\t// Provisions 2 m5.large instances since m5.xlarge was ICE'd\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pods...)\n\t\t\tfor _, pod := range pods {\n\t\t\t\tExpectNotScheduled(ctx, env.Client, pod)\n\t\t\t}\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pods...)\n\t\t\tfor _, pod := range pods {\n\t\t\t\tnode := ExpectScheduled(ctx, env.Client, pod)\n\t\t\t\tExpect(node.Labels[corev1.LabelInstanceTypeStable]).To(Equal(\"m5.large\"))\n\t\t\t}\n\t\t})\n\t\tIt(\"should launch instances on later reconciliation attempt with Insufficient Capacity Error Cache expiry\", func() {\n\t\t\tawsEnv.EC2API.InsufficientCapacityPools.Set([]fake.CapacityPool{{CapacityType: karpv1.CapacityTypeOnDemand, InstanceType: \"inf2.24xlarge\", Zone: \"test-zone-1a\"}})\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\tpod := coretest.UnschedulablePod(coretest.PodOptions{\n\t\t\t\tNodeSelector: map[string]string{corev1.LabelInstanceTypeStable: \"inf2.24xlarge\"},\n\t\t\t\tResourceRequirements: corev1.ResourceRequirements{\n\t\t\t\t\tRequests: corev1.ResourceList{v1.ResourceAWSNeuron: resource.MustParse(\"2\")},\n\t\t\t\t\tLimits:   corev1.ResourceList{v1.ResourceAWSNeuron: resource.MustParse(\"2\")},\n\t\t\t\t},\n\t\t\t})\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\tExpectNotScheduled(ctx, env.Client, pod)\n\t\t\t// capacity shortage is over - expire the item from the cache and try again\n\t\t\tawsEnv.EC2API.InsufficientCapacityPools.Set([]fake.CapacityPool{})\n\t\t\tawsEnv.UnavailableOfferingsCache.Delete(\"inf2.24xlarge\", \"test-zone-1a\", karpv1.CapacityTypeOnDemand)\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\tnode := ExpectScheduled(ctx, env.Client, pod)\n\t\t\tExpect(node.Labels).To(HaveKeyWithValue(corev1.LabelInstanceTypeStable, \"inf2.24xlarge\"))\n\t\t})\n\t\tIt(\"should launch instances in a different zone on second reconciliation attempt with Insufficient Capacity Error Cache fallback (Habana)\", func() {\n\t\t\tawsEnv.EC2API.InsufficientCapacityPools.Set([]fake.CapacityPool{{CapacityType: karpv1.CapacityTypeOnDemand, InstanceType: \"dl1.24xlarge\", Zone: \"test-zone-1a\"}})\n\t\t\tpod := coretest.UnschedulablePod(coretest.PodOptions{\n\t\t\t\tNodeSelector: map[string]string{corev1.LabelInstanceTypeStable: \"dl1.24xlarge\"},\n\t\t\t\tResourceRequirements: corev1.ResourceRequirements{\n\t\t\t\t\tRequests: corev1.ResourceList{v1.ResourceHabanaGaudi: resource.MustParse(\"1\")},\n\t\t\t\t\tLimits:   corev1.ResourceList{v1.ResourceHabanaGaudi: resource.MustParse(\"1\")},\n\t\t\t\t},\n\t\t\t})\n\t\t\tpod.Spec.Affinity = &corev1.Affinity{NodeAffinity: &corev1.NodeAffinity{PreferredDuringSchedulingIgnoredDuringExecution: []corev1.PreferredSchedulingTerm{\n\t\t\t\t{\n\t\t\t\t\tWeight: 1, Preference: corev1.NodeSelectorTerm{MatchExpressions: []corev1.NodeSelectorRequirement{\n\t\t\t\t\t\t{Key: corev1.LabelTopologyZone, Operator: corev1.NodeSelectorOpIn, Values: []string{\"test-zone-1a\"}},\n\t\t\t\t\t}},\n\t\t\t\t},\n\t\t\t}}}\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\t// it should've tried to pack them in test-zone-1a on a dl1.24xlarge then hit insufficient capacity, the next attempt will try test-zone-1b\n\t\t\tExpectNotScheduled(ctx, env.Client, pod)\n\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\tnode := ExpectScheduled(ctx, env.Client, pod)\n\t\t\tExpect(node.Labels).To(SatisfyAll(\n\t\t\t\tHaveKeyWithValue(corev1.LabelInstanceTypeStable, \"dl1.24xlarge\"),\n\t\t\t\tHaveKeyWithValue(corev1.LabelTopologyZone, \"test-zone-1b\")))\n\t\t})\n\t\tIt(\"should launch on-demand capacity if flexible to both spot and on-demand, but spot is unavailable\", func() {\n\t\t\tExpect(func() error {\n\t\t\t\toutput, err := awsEnv.EC2API.DescribeInstanceTypes(ctx, &ec2.DescribeInstanceTypesInput{})\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\n\t\t\t\t// Call the function with the output and false (indicating it's not the last page)\n\t\t\t\t_ = func(dito *ec2.DescribeInstanceTypesOutput) bool {\n\t\t\t\t\tfor _, it := range dito.InstanceTypes {\n\t\t\t\t\t\tawsEnv.EC2API.InsufficientCapacityPools.Add(fake.CapacityPool{\n\t\t\t\t\t\t\tCapacityType: karpv1.CapacityTypeSpot,\n\t\t\t\t\t\t\tInstanceType: string(it.InstanceType),\n\t\t\t\t\t\t\tZone:         \"test-zone-1a\",\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t\treturn true\n\t\t\t\t}(output)\n\n\t\t\t\treturn nil\n\t\t\t}()).To(Succeed())\n\t\t\tnodePool.Spec.Template.Spec.Requirements = []karpv1.NodeSelectorRequirementWithMinValues{\n\t\t\t\t{Key: karpv1.CapacityTypeLabelKey, Operator: corev1.NodeSelectorOpIn, Values: []string{karpv1.CapacityTypeSpot, karpv1.CapacityTypeOnDemand}},\n\t\t\t\t{Key: corev1.LabelTopologyZone, Operator: corev1.NodeSelectorOpIn, Values: []string{\"test-zone-1a\"}},\n\t\t\t}\n\t\t\t// Spot Unavailable\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\tpod := coretest.UnschedulablePod()\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\tExpectNotScheduled(ctx, env.Client, pod)\n\t\t\t// include deprioritized instance types\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\t// Fallback to OD\n\t\t\tnode := ExpectScheduled(ctx, env.Client, pod)\n\t\t\tExpect(node.Labels).To(HaveKeyWithValue(karpv1.CapacityTypeLabelKey, karpv1.CapacityTypeOnDemand))\n\t\t})\n\t\tIt(\"should return all instance types, even though with no offerings due to Insufficient Capacity Error\", func() {\n\t\t\tawsEnv.EC2API.InsufficientCapacityPools.Set([]fake.CapacityPool{\n\t\t\t\t{CapacityType: karpv1.CapacityTypeOnDemand, InstanceType: \"m5.xlarge\", Zone: \"test-zone-1a\"},\n\t\t\t\t{CapacityType: karpv1.CapacityTypeOnDemand, InstanceType: \"m5.xlarge\", Zone: \"test-zone-1b\"},\n\t\t\t\t{CapacityType: karpv1.CapacityTypeSpot, InstanceType: \"m5.xlarge\", Zone: \"test-zone-1a\"},\n\t\t\t\t{CapacityType: karpv1.CapacityTypeSpot, InstanceType: \"m5.xlarge\", Zone: \"test-zone-1b\"},\n\t\t\t})\n\t\t\tnodePool.Spec.Template.Spec.Requirements = nil\n\t\t\tnodePool.Spec.Template.Spec.Requirements = append(nodePool.Spec.Template.Spec.Requirements, karpv1.NodeSelectorRequirementWithMinValues{\n\t\t\t\tKey:      corev1.LabelInstanceType,\n\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\tValues:   []string{\"m5.xlarge\"},\n\t\t\t},\n\t\t\t)\n\t\t\tnodePool.Spec.Template.Spec.Requirements = append(nodePool.Spec.Template.Spec.Requirements, karpv1.NodeSelectorRequirementWithMinValues{\n\t\t\t\tKey:      karpv1.CapacityTypeLabelKey,\n\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\tValues:   []string{\"spot\", \"on-demand\"},\n\t\t\t})\n\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\tfor _, ct := range []string{karpv1.CapacityTypeOnDemand, karpv1.CapacityTypeSpot} {\n\t\t\t\tfor _, zone := range []string{\"test-zone-1a\", \"test-zone-1b\"} {\n\t\t\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov,\n\t\t\t\t\t\tcoretest.UnschedulablePod(coretest.PodOptions{\n\t\t\t\t\t\t\tResourceRequirements: corev1.ResourceRequirements{\n\t\t\t\t\t\t\t\tRequests: corev1.ResourceList{corev1.ResourceCPU: resource.MustParse(\"1\")},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tNodeSelector: map[string]string{\n\t\t\t\t\t\t\t\tkarpv1.CapacityTypeLabelKey: ct,\n\t\t\t\t\t\t\t\tcorev1.LabelTopologyZone:    zone,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}))\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tinstanceTypes, err := cloudProvider.GetInstanceTypes(ctx, nodePool)\n\t\t\tExpect(err).To(BeNil())\n\t\t\tinstanceTypeNames := sets.NewString()\n\t\t\tfor _, it := range instanceTypes {\n\t\t\t\tinstanceTypeNames.Insert(it.Name)\n\t\t\t\tif it.Name == \"m5.xlarge\" {\n\t\t\t\t\t// should have no valid offerings\n\t\t\t\t\tExpect(it.Offerings.Available()).To(HaveLen(0))\n\t\t\t\t}\n\t\t\t}\n\t\t\tExpect(instanceTypeNames.Has(\"m5.xlarge\"))\n\t\t})\n\t\tIt(\"should not return an offering when marking an offering as unavailable in the Insufficient Capacity Error Cache\", func() {\n\t\t\tExpectApplied(ctx, env.Client, nodeClass)\n\n\t\t\t// Initial list of GetInstanceTypes\n\t\t\tinstanceTypes, err := cloudProvider.GetInstanceTypes(ctx, nodePool)\n\t\t\tExpect(err).ToNot(HaveOccurred())\n\n\t\t\tm5InstanceType, ok := lo.Find(instanceTypes, func(it *corecloudprovider.InstanceType) bool {\n\t\t\t\treturn it.Name == string(ec2types.InstanceTypeM5Large)\n\t\t\t})\n\t\t\tExpect(ok).To(BeTrue())\n\t\t\tExpect(m5InstanceType.Offerings.Available()).To(HaveLen(6))\n\n\t\t\t// Mark spot m5.xlarge instance as unavailable in a few zones, nothing should change\n\t\t\tawsEnv.UnavailableOfferingsCache.MarkUnavailable(ctx, ec2types.InstanceTypeM5Xlarge, \"test-zone-1a\", karpv1.CapacityTypeSpot, map[string]string{\"reason\": \"test\"})\n\t\t\tawsEnv.UnavailableOfferingsCache.MarkUnavailable(ctx, ec2types.InstanceTypeM5Xlarge, \"test-zone-1b\", karpv1.CapacityTypeSpot, map[string]string{\"reason\": \"test\"})\n\t\t\tExpect(err).ToNot(HaveOccurred())\n\t\t\tm5InstanceType, ok = lo.Find(instanceTypes, func(it *corecloudprovider.InstanceType) bool {\n\t\t\t\treturn it.Name == string(ec2types.InstanceTypeM5Large)\n\t\t\t})\n\t\t\tExpect(ok).To(BeTrue())\n\t\t\tExpect(m5InstanceType.Offerings.Available()).To(HaveLen(6))\n\n\t\t\t// Mark spot m5.large instance in test-zone-1a as unavailable\n\t\t\tawsEnv.UnavailableOfferingsCache.MarkUnavailable(ctx, ec2types.InstanceTypeM5Large, \"test-zone-1a\", karpv1.CapacityTypeSpot, map[string]string{\"reason\": \"test\"})\n\t\t\tinstanceTypes, err = cloudProvider.GetInstanceTypes(ctx, nodePool)\n\t\t\tExpect(err).ToNot(HaveOccurred())\n\t\t\tm5InstanceType, ok = lo.Find(instanceTypes, func(it *corecloudprovider.InstanceType) bool {\n\t\t\t\treturn it.Name == string(ec2types.InstanceTypeM5Large)\n\t\t\t})\n\t\t\tExpect(ok).To(BeTrue())\n\t\t\tExpect(m5InstanceType.Offerings.Available()).To(HaveLen(5))\n\t\t\tExpect(m5InstanceType.Offerings.Compatible(scheduling.NewLabelRequirements(map[string]string{\n\t\t\t\tcorev1.LabelTopologyZone:    \"test-zone-1a\",\n\t\t\t\tkarpv1.CapacityTypeLabelKey: karpv1.CapacityTypeSpot,\n\t\t\t}))[0].Available).To(BeFalse())\n\n\t\t\t// Mark on-demand m5.large instance in test-zone-1b and test-zone-1c as unavailable\n\t\t\tawsEnv.UnavailableOfferingsCache.MarkUnavailable(ctx, ec2types.InstanceTypeM5Large, \"test-zone-1b\", karpv1.CapacityTypeOnDemand, map[string]string{\"reason\": \"test\"})\n\t\t\tawsEnv.UnavailableOfferingsCache.MarkUnavailable(ctx, ec2types.InstanceTypeM5Large, \"test-zone-1c\", karpv1.CapacityTypeOnDemand, map[string]string{\"reason\": \"test\"})\n\n\t\t\tinstanceTypes, err = cloudProvider.GetInstanceTypes(ctx, nodePool)\n\t\t\tExpect(err).ToNot(HaveOccurred())\n\t\t\tm5InstanceType, ok = lo.Find(instanceTypes, func(it *corecloudprovider.InstanceType) bool {\n\t\t\t\treturn it.Name == string(ec2types.InstanceTypeM5Large)\n\t\t\t})\n\t\t\tExpect(ok).To(BeTrue())\n\t\t\tExpect(m5InstanceType.Offerings.Available()).To(HaveLen(3))\n\t\t\tExpect(m5InstanceType.Offerings.Compatible(scheduling.NewLabelRequirements(map[string]string{\n\t\t\t\tcorev1.LabelTopologyZone:    \"test-zone-1a\",\n\t\t\t\tkarpv1.CapacityTypeLabelKey: karpv1.CapacityTypeSpot,\n\t\t\t}))[0].Available).To(BeFalse())\n\t\t\tExpect(m5InstanceType.Offerings.Compatible(scheduling.NewLabelRequirements(map[string]string{\n\t\t\t\tcorev1.LabelTopologyZone:    \"test-zone-1b\",\n\t\t\t\tkarpv1.CapacityTypeLabelKey: karpv1.CapacityTypeOnDemand,\n\t\t\t}))[0].Available).To(BeFalse())\n\t\t\tExpect(m5InstanceType.Offerings.Compatible(scheduling.NewLabelRequirements(map[string]string{\n\t\t\t\tcorev1.LabelTopologyZone:    \"test-zone-1c\",\n\t\t\t\tkarpv1.CapacityTypeLabelKey: karpv1.CapacityTypeOnDemand,\n\t\t\t}))[0].Available).To(BeFalse())\n\t\t})\n\t\tIt(\"should not return a capacity type when marking a capacity type as unavailable in the Insufficient Capacity Error Cache\", func() {\n\t\t\tExpectApplied(ctx, env.Client, nodeClass)\n\n\t\t\t// Initial list of GetInstanceTypes\n\t\t\tinstanceTypes, err := cloudProvider.GetInstanceTypes(ctx, nodePool)\n\t\t\tExpect(err).ToNot(HaveOccurred())\n\t\t\tcapacityTypes := sets.New[string]()\n\t\t\tfor _, it := range instanceTypes {\n\t\t\t\tfor _, of := range it.Offerings.Available() {\n\t\t\t\t\tcapacityTypes.Insert(of.CapacityType())\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tExpect(capacityTypes).To(HaveLen(2))\n\t\t\tExpect(capacityTypes.UnsortedList()).To(ConsistOf([]string{karpv1.CapacityTypeOnDemand, karpv1.CapacityTypeSpot}))\n\n\t\t\t// Mark one of the zones as unavailable\n\t\t\tawsEnv.UnavailableOfferingsCache.MarkCapacityTypeUnavailable(karpv1.CapacityTypeSpot)\n\n\t\t\t// Initial list of GetInstanceTypes\n\t\t\tinstanceTypes, err = cloudProvider.GetInstanceTypes(ctx, nodePool)\n\t\t\tExpect(err).ToNot(HaveOccurred())\n\t\t\tcapacityTypes = sets.New[string]()\n\t\t\tfor _, it := range instanceTypes {\n\t\t\t\tfor _, of := range it.Offerings.Available() {\n\t\t\t\t\tcapacityTypes.Insert(of.CapacityType())\n\t\t\t\t}\n\t\t\t}\n\t\t\tExpect(capacityTypes).To(HaveLen(1))\n\t\t\tExpect(capacityTypes.UnsortedList()).To(ConsistOf([]string{karpv1.CapacityTypeOnDemand}))\n\t\t})\n\t\tIt(\"should not return a zone when marking a zone as unavailable in the Insufficient Capacity Error Cache\", func() {\n\t\t\tExpectApplied(ctx, env.Client, nodeClass)\n\n\t\t\t// Initial list of GetInstanceTypes\n\t\t\tinstanceTypes, err := cloudProvider.GetInstanceTypes(ctx, nodePool)\n\t\t\tExpect(err).ToNot(HaveOccurred())\n\t\t\tzones := sets.New[string]()\n\t\t\tfor _, it := range instanceTypes {\n\t\t\t\tfor _, of := range it.Offerings.Available() {\n\t\t\t\t\tzones.Insert(of.Zone())\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tExpect(zones).To(HaveLen(3))\n\t\t\tExpect(zones.UnsortedList()).To(ConsistOf([]string{\"test-zone-1a\", \"test-zone-1b\", \"test-zone-1c\"}))\n\n\t\t\t// Mark one of the zones as unavailable\n\t\t\tawsEnv.UnavailableOfferingsCache.MarkAZUnavailable(\"test-zone-1a\")\n\n\t\t\t// Initial list of GetInstanceTypes\n\t\t\tinstanceTypes, err = cloudProvider.GetInstanceTypes(ctx, nodePool)\n\t\t\tExpect(err).ToNot(HaveOccurred())\n\t\t\tzones = sets.New[string]()\n\t\t\tfor _, it := range instanceTypes {\n\t\t\t\tfor _, of := range it.Offerings.Available() {\n\t\t\t\t\tzones.Insert(of.Zone())\n\t\t\t\t}\n\t\t\t}\n\t\t\tExpect(zones).To(HaveLen(2))\n\t\t\tExpect(zones.UnsortedList()).To(ConsistOf([]string{\"test-zone-1b\", \"test-zone-1c\"}))\n\t\t})\n\t})\n\tContext(\"CapacityType\", func() {\n\t\tIt(\"should default to on-demand\", func() {\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\tpod := coretest.UnschedulablePod()\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\tnode := ExpectScheduled(ctx, env.Client, pod)\n\t\t\tExpect(node.Labels).To(HaveKeyWithValue(karpv1.CapacityTypeLabelKey, karpv1.CapacityTypeOnDemand))\n\t\t})\n\t\tIt(\"should launch spot capacity if flexible to both spot and on demand\", func() {\n\t\t\tnodePool.Spec.Template.Spec.Requirements = []karpv1.NodeSelectorRequirementWithMinValues{\n\t\t\t\t{Key: karpv1.CapacityTypeLabelKey, Operator: corev1.NodeSelectorOpIn, Values: []string{karpv1.CapacityTypeSpot, karpv1.CapacityTypeOnDemand}}}\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\tpod := coretest.UnschedulablePod()\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\tnode := ExpectScheduled(ctx, env.Client, pod)\n\t\t\tExpect(node.Labels).To(HaveKeyWithValue(karpv1.CapacityTypeLabelKey, karpv1.CapacityTypeSpot))\n\t\t})\n\t\tIt(\"should fail to launch capacity when there is no zonal availability for spot\", func() {\n\t\t\tnow := time.Now()\n\t\t\tawsEnv.EC2API.DescribeSpotPriceHistoryBehavior.Output.Set(&ec2.DescribeSpotPriceHistoryOutput{\n\t\t\t\tSpotPriceHistory: []ec2types.SpotPrice{\n\t\t\t\t\t{\n\t\t\t\t\t\tAvailabilityZone: aws.String(\"test-zone-1a\"),\n\t\t\t\t\t\tInstanceType:     \"m5.large\",\n\t\t\t\t\t\tSpotPrice:        aws.String(\"0.004\"),\n\t\t\t\t\t\tTimestamp:        &now,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t})\n\t\t\tExpect(awsEnv.PricingProvider.UpdateSpotPricing(ctx)).To(Succeed())\n\n\t\t\tnodePool.Spec.Template.Spec.Requirements = []karpv1.NodeSelectorRequirementWithMinValues{\n\t\t\t\t{Key: karpv1.CapacityTypeLabelKey, Operator: corev1.NodeSelectorOpIn, Values: []string{karpv1.CapacityTypeSpot}},\n\t\t\t\t{Key: corev1.LabelInstanceTypeStable, Operator: corev1.NodeSelectorOpIn, Values: []string{\"m5.large\"}},\n\t\t\t\t{Key: corev1.LabelTopologyZone, Operator: corev1.NodeSelectorOpIn, Values: []string{\"test-zone-1b\"}},\n\t\t\t}\n\n\t\t\t// Instance type with no zonal availability for spot shouldn't be scheduled\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\tpod := coretest.UnschedulablePod()\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\tExpectNotScheduled(ctx, env.Client, pod)\n\t\t})\n\t\tIt(\"should succeed to launch spot instance when zonal availability exists\", func() {\n\t\t\tnow := time.Now()\n\t\t\tawsEnv.EC2API.DescribeSpotPriceHistoryBehavior.Output.Set(&ec2.DescribeSpotPriceHistoryOutput{\n\t\t\t\tSpotPriceHistory: []ec2types.SpotPrice{\n\t\t\t\t\t{\n\t\t\t\t\t\tAvailabilityZone: aws.String(\"test-zone-1a\"),\n\t\t\t\t\t\tInstanceType:     \"m5.large\",\n\t\t\t\t\t\tSpotPrice:        aws.String(\"0.004\"),\n\t\t\t\t\t\tTimestamp:        &now,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t})\n\t\t\tExpect(awsEnv.PricingProvider.UpdateSpotPricing(ctx)).To(Succeed())\n\n\t\t\t// not restricting to the zone so we can get any zone\n\t\t\tnodePool.Spec.Template.Spec.Requirements = []karpv1.NodeSelectorRequirementWithMinValues{\n\t\t\t\t{Key: karpv1.CapacityTypeLabelKey, Operator: corev1.NodeSelectorOpIn, Values: []string{karpv1.CapacityTypeSpot}},\n\t\t\t\t{Key: corev1.LabelInstanceTypeStable, Operator: corev1.NodeSelectorOpIn, Values: []string{\"m5.large\"}},\n\t\t\t}\n\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\tpod := coretest.UnschedulablePod()\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\tnode := ExpectScheduled(ctx, env.Client, pod)\n\t\t\tExpect(node.Labels).To(HaveKeyWithValue(karpv1.NodePoolLabelKey, nodePool.Name))\n\t\t})\n\t})\n\tContext(\"Ephemeral Storage\", func() {\n\t\tBeforeEach(func() {\n\t\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{Alias: \"al2@latest\"}}\n\t\t\tnodeClass.Spec.BlockDeviceMappings = []*v1.BlockDeviceMapping{\n\t\t\t\t{\n\t\t\t\t\tDeviceName: aws.String(\"/dev/xvda\"),\n\t\t\t\t\tEBS: &v1.BlockDevice{\n\t\t\t\t\t\tSnapshotID:               aws.String(\"snap-xxxxxxxx\"),\n\t\t\t\t\t\tVolumeInitializationRate: aws.Int32(100),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}\n\t\t})\n\t\tIt(\"should default to EBS defaults when volumeSize is not defined in blockDeviceMappings for custom AMIs\", func() {\n\t\t\tnodeClass.Spec.AMIFamily = lo.ToPtr(v1.AMIFamilyCustom)\n\t\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{\n\t\t\t\t{\n\t\t\t\t\tTags: map[string]string{\n\t\t\t\t\t\t\"*\": \"*\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\tpod := coretest.UnschedulablePod()\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\tnode := ExpectScheduled(ctx, env.Client, pod)\n\t\t\tExpect(*node.Status.Capacity.StorageEphemeral()).To(Equal(resource.MustParse(\"20Gi\")))\n\t\t\tExpect(awsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.Len()).To(BeNumerically(\">=\", 1))\n\t\t\tawsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.ForEach(func(ltInput *ec2.CreateLaunchTemplateInput) {\n\t\t\t\tExpect(ltInput.LaunchTemplateData.BlockDeviceMappings).To(HaveLen(1))\n\t\t\t\tExpect(*ltInput.LaunchTemplateData.BlockDeviceMappings[0].DeviceName).To(Equal(\"/dev/xvda\"))\n\t\t\t\tExpect(*ltInput.LaunchTemplateData.BlockDeviceMappings[0].Ebs.SnapshotId).To(Equal(\"snap-xxxxxxxx\"))\n\t\t\t\tExpect(*ltInput.LaunchTemplateData.BlockDeviceMappings[0].Ebs.VolumeInitializationRate).To(Equal(int32(100)))\n\t\t\t})\n\t\t})\n\t\tIt(\"should default to EBS defaults when volumeSize is not defined in blockDeviceMappings for AL2 Root volume\", func() {\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\tpod := coretest.UnschedulablePod()\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\tnode := ExpectScheduled(ctx, env.Client, pod)\n\t\t\tExpect(*node.Status.Capacity.StorageEphemeral()).To(Equal(resource.MustParse(\"20Gi\")))\n\t\t\tExpect(awsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.Len()).To(BeNumerically(\">=\", 1))\n\t\t\tawsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.ForEach(func(ltInput *ec2.CreateLaunchTemplateInput) {\n\t\t\t\tExpect(ltInput.LaunchTemplateData.BlockDeviceMappings).To(HaveLen(1))\n\t\t\t\tExpect(*ltInput.LaunchTemplateData.BlockDeviceMappings[0].DeviceName).To(Equal(\"/dev/xvda\"))\n\t\t\t\tExpect(*ltInput.LaunchTemplateData.BlockDeviceMappings[0].Ebs.SnapshotId).To(Equal(\"snap-xxxxxxxx\"))\n\t\t\t\tExpect(*ltInput.LaunchTemplateData.BlockDeviceMappings[0].Ebs.VolumeInitializationRate).To(Equal(int32(100)))\n\t\t\t})\n\t\t})\n\t\tIt(\"should default to EBS defaults when volumeSize is not defined in blockDeviceMappings for AL2023 Root volume\", func() {\n\t\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{Alias: \"al2023@latest\"}}\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\tpod := coretest.UnschedulablePod()\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\tnode := ExpectScheduled(ctx, env.Client, pod)\n\t\t\tExpect(*node.Status.Capacity.StorageEphemeral()).To(Equal(resource.MustParse(\"20Gi\")))\n\t\t\tExpect(awsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.Len()).To(BeNumerically(\">=\", 1))\n\t\t\tawsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.ForEach(func(ltInput *ec2.CreateLaunchTemplateInput) {\n\t\t\t\tExpect(ltInput.LaunchTemplateData.BlockDeviceMappings).To(HaveLen(1))\n\t\t\t\tExpect(*ltInput.LaunchTemplateData.BlockDeviceMappings[0].DeviceName).To(Equal(\"/dev/xvda\"))\n\t\t\t\tExpect(*ltInput.LaunchTemplateData.BlockDeviceMappings[0].Ebs.SnapshotId).To(Equal(\"snap-xxxxxxxx\"))\n\t\t\t\tExpect(*ltInput.LaunchTemplateData.BlockDeviceMappings[0].Ebs.VolumeInitializationRate).To(Equal(int32(100)))\n\t\t\t})\n\t\t})\n\t\tIt(\"should default to EBS defaults when volumeSize is not defined in blockDeviceMappings for Bottlerocket Root volume\", func() {\n\t\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{Alias: \"bottlerocket@latest\"}}\n\t\t\tnodeClass.Spec.BlockDeviceMappings[0].DeviceName = aws.String(\"/dev/xvdb\")\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\tpod := coretest.UnschedulablePod()\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\tnode := ExpectScheduled(ctx, env.Client, pod)\n\t\t\tExpect(*node.Status.Capacity.StorageEphemeral()).To(Equal(resource.MustParse(\"20Gi\")))\n\t\t\tExpect(awsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.Len()).To(BeNumerically(\">=\", 1))\n\t\t\tawsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.ForEach(func(ltInput *ec2.CreateLaunchTemplateInput) {\n\t\t\t\tExpect(awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Len()).To(Equal(1))\n\t\t\t\tExpect(ltInput.LaunchTemplateData.BlockDeviceMappings).To(HaveLen(1))\n\t\t\t\tExpect(*ltInput.LaunchTemplateData.BlockDeviceMappings[0].DeviceName).To(Equal(\"/dev/xvdb\"))\n\t\t\t\tExpect(*ltInput.LaunchTemplateData.BlockDeviceMappings[0].Ebs.SnapshotId).To(Equal(\"snap-xxxxxxxx\"))\n\t\t\t\tExpect(*ltInput.LaunchTemplateData.BlockDeviceMappings[0].Ebs.VolumeInitializationRate).To(Equal(int32(100)))\n\t\t\t})\n\t\t})\n\t})\n\tContext(\"Metadata Options\", func() {\n\t\tIt(\"should default metadata options on generated launch template\", func() {\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\tpod := coretest.UnschedulablePod()\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t\tExpect(awsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.Len()).To(BeNumerically(\">=\", 1))\n\t\t\tawsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.ForEach(func(ltInput *ec2.CreateLaunchTemplateInput) {\n\t\t\t\tExpect(ltInput.LaunchTemplateData.MetadataOptions.HttpEndpoint).To(Equal(ec2types.LaunchTemplateInstanceMetadataEndpointStateEnabled))\n\t\t\t\tExpect(ltInput.LaunchTemplateData.MetadataOptions.HttpProtocolIpv6).To(Equal(ec2types.LaunchTemplateInstanceMetadataProtocolIpv6Disabled))\n\t\t\t\tExpect(lo.FromPtr(ltInput.LaunchTemplateData.MetadataOptions.HttpPutResponseHopLimit)).To(Equal(int32(1)))\n\t\t\t\tExpect(ltInput.LaunchTemplateData.MetadataOptions.HttpTokens).To(Equal(ec2types.LaunchTemplateHttpTokensStateRequired))\n\t\t\t})\n\t\t})\n\t\tIt(\"should set metadata options on generated launch template from nodePool configuration\", func() {\n\t\t\tnodeClass.Spec.MetadataOptions = &v1.MetadataOptions{\n\t\t\t\tHTTPEndpoint:            aws.String(string(ec2types.LaunchTemplateInstanceMetadataEndpointStateDisabled)),\n\t\t\t\tHTTPProtocolIPv6:        aws.String(string(ec2types.LaunchTemplateInstanceMetadataProtocolIpv6Enabled)),\n\t\t\t\tHTTPPutResponseHopLimit: aws.Int64(1),\n\t\t\t\tHTTPTokens:              aws.String(string(ec2types.LaunchTemplateHttpTokensStateOptional)),\n\t\t\t}\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\tpod := coretest.UnschedulablePod()\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t\tExpect(awsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.Len()).To(BeNumerically(\">=\", 1))\n\t\t\tawsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.ForEach(func(ltInput *ec2.CreateLaunchTemplateInput) {\n\t\t\t\tExpect(ltInput.LaunchTemplateData.MetadataOptions.HttpEndpoint).To(Equal(ec2types.LaunchTemplateInstanceMetadataEndpointStateDisabled))\n\t\t\t\tExpect(ltInput.LaunchTemplateData.MetadataOptions.HttpProtocolIpv6).To(Equal(ec2types.LaunchTemplateInstanceMetadataProtocolIpv6Enabled))\n\t\t\t\tExpect(lo.FromPtr(ltInput.LaunchTemplateData.MetadataOptions.HttpPutResponseHopLimit)).To(Equal(int32(1)))\n\t\t\t\tExpect(ltInput.LaunchTemplateData.MetadataOptions.HttpTokens).To(Equal(ec2types.LaunchTemplateHttpTokensStateOptional))\n\t\t\t})\n\t\t})\n\t})\n\tContext(\"Offerings\", func() {\n\t\tIt(\"should create a single offering per instance pool\", func() {\n\t\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\t\t// Test twice to ensure we get the same result for a cache miss and hit\n\t\t\tfor range 2 {\n\t\t\t\tinstanceTypes, err := cloudProvider.GetInstanceTypes(ctx, nodePool)\n\t\t\t\tExpect(err).ToNot(HaveOccurred())\n\t\t\t\ttype instancePool struct {\n\t\t\t\t\tinstanceType string\n\t\t\t\t\tzone         string\n\t\t\t\t\tcapacityType string\n\t\t\t\t}\n\t\t\t\tpools := sets.New[instancePool]()\n\t\t\t\tfor _, it := range instanceTypes {\n\t\t\t\t\tfor _, o := range it.Offerings {\n\t\t\t\t\t\tpool := instancePool{\n\t\t\t\t\t\t\tinstanceType: it.Name,\n\t\t\t\t\t\t\tzone:         o.Zone(),\n\t\t\t\t\t\t\tcapacityType: o.CapacityType(),\n\t\t\t\t\t\t}\n\t\t\t\t\t\tExpect(pools.Has(pool)).To(BeFalse())\n\t\t\t\t\t\tpools.Insert(pool)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t})\n\tContext(\"Provider Cache\", func() {\n\t\tIt(\"should return the same set of instance types from the cache when no changes are made\", func() {\n\t\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\t\tlist1, err := cloudProvider.GetInstanceTypes(ctx, nodePool)\n\t\t\tExpect(err).ToNot(HaveOccurred())\n\n\t\t\tlist2, err := cloudProvider.GetInstanceTypes(ctx, nodePool)\n\t\t\tExpect(err).ToNot(HaveOccurred())\n\t\t\tExpectSameInstanceTypeLists(list1, list2)\n\t\t})\n\t\t// Keeping the Cache testing in one IT block to validate the combinatorial expansion of instance types generated by different configs\n\t\tIt(\"changes to kubelet configuration fields should result in a different set of instances types\", func() {\n\t\t\t// We should expect these kubelet configuration fields to change the result of the instance type call\n\t\t\t// kubelet.kubeReserved\n\t\t\t// kubelet.systemReserved\n\t\t\t// kubelet.evictionHard\n\t\t\t// kubelet.maxPods\n\t\t\tnodeClass.Spec.Kubelet = &v1.KubeletConfiguration{\n\t\t\t\tKubeReserved:   map[string]string{string(corev1.ResourceCPU): \"1\"},\n\t\t\t\tSystemReserved: map[string]string{string(corev1.ResourceCPU): \"1\"},\n\t\t\t\tEvictionHard:   map[string]string{\"memory.available\": \"5%\"},\n\t\t\t\tEvictionSoft:   map[string]string{\"nodefs.available\": \"10%\"},\n\t\t\t\tEvictionSoftGracePeriod: map[string]metav1.Duration{\n\t\t\t\t\t\"nodefs.available\": {Duration: time.Minute},\n\t\t\t\t},\n\t\t\t\tMaxPods: aws.Int32(10),\n\t\t\t}\n\t\t\tkubeletChanges := []*v1.KubeletConfiguration{\n\t\t\t\t{KubeReserved: map[string]string{string(corev1.ResourceCPU): \"20\"}},\n\t\t\t\t{SystemReserved: map[string]string{string(corev1.ResourceMemory): \"10Gi\"}},\n\t\t\t\t{EvictionHard: map[string]string{\"memory.available\": \"52%\"}},\n\t\t\t\t{MaxPods: aws.Int32(20)},\n\t\t\t}\n\t\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\t\t// Adding the general set of to the instancetype into the cache\n\t\t\tfullInstanceTypeResult, err := cloudProvider.GetInstanceTypes(ctx, nodePool)\n\t\t\tExpect(err).To(BeNil())\n\n\t\t\tinstanceTypeResults := [][]*corecloudprovider.InstanceType{fullInstanceTypeResult}\n\t\t\tsorted := nodePool.DeepCopy()\n\t\t\tfor _, change := range kubeletChanges {\n\t\t\t\tnodePool = sorted.DeepCopy()\n\t\t\t\tExpect(mergo.Merge(nodeClass.Spec.Kubelet, change, mergo.WithOverride, mergo.WithSliceDeepCopy)).To(BeNil())\n\t\t\t\t// Calling the provider and storing the instance type list to the instancetype provider cache\n\t\t\t\t_, err := awsEnv.InstanceTypesProvider.List(ctx, nodeClass)\n\t\t\t\tExpect(err).To(BeNil())\n\t\t\t\t// We are making sure to pull from the cache\n\t\t\t\tinstancetypes, err := awsEnv.InstanceTypesProvider.List(ctx, nodeClass)\n\t\t\t\tExpect(err).To(BeNil())\n\t\t\t\tinstanceTypeResults = append(instanceTypeResults, instancetypes)\n\t\t\t}\n\n\t\t\t// Based on the nodeclass configuration, we expect to have 4 unique set of instance types\n\t\t\tExpectUniqueInstanceTypeLists(instanceTypeResults...)\n\t\t})\n\t\tIt(\"changes to nodeclass fields should result in a different set of instances types\", func() {\n\t\t\t// We should expect these nodeclass fields to change the result of the instance type\n\t\t\t// nodeClass.instanceStorePolicy\n\t\t\t// nodeClass.amiSelectorTerms (alias)\n\t\t\t// nodeClass.blockDeviceMapping.rootVolume\n\t\t\t// nodeClass.blockDeviceMapping.volumeSize\n\t\t\t// nodeClass.blockDeviceMapping.deviceName\n\t\t\tnodeClass.Spec.BlockDeviceMappings = []*v1.BlockDeviceMapping{\n\t\t\t\t{\n\t\t\t\t\tDeviceName: lo.ToPtr(\"/dev/xvda\"),\n\t\t\t\t\tEBS:        &v1.BlockDevice{VolumeSize: resource.NewScaledQuantity(20, resource.Giga)},\n\t\t\t\t\tRootVolume: false,\n\t\t\t\t},\n\t\t\t}\n\t\t\tnodeClassChanges := []*v1.EC2NodeClass{\n\t\t\t\t{Spec: v1.EC2NodeClassSpec{InstanceStorePolicy: lo.ToPtr(v1.InstanceStorePolicyRAID0)}},\n\t\t\t\t{Spec: v1.EC2NodeClassSpec{AMISelectorTerms: []v1.AMISelectorTerm{{Alias: \"bottlerocket@latest\"}}}},\n\t\t\t\t{\n\t\t\t\t\tSpec: v1.EC2NodeClassSpec{\n\t\t\t\t\t\tBlockDeviceMappings: []*v1.BlockDeviceMapping{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tDeviceName: lo.ToPtr(\"/dev/xvda\"),\n\t\t\t\t\t\t\t\tEBS:        &v1.BlockDevice{VolumeSize: resource.NewScaledQuantity(20, resource.Giga)},\n\t\t\t\t\t\t\t\tRootVolume: false,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tDeviceName: lo.ToPtr(\"/dev/sda1\"),\n\t\t\t\t\t\t\t\tEBS:        &v1.BlockDevice{VolumeSize: resource.NewScaledQuantity(10, resource.Giga)},\n\t\t\t\t\t\t\t\tRootVolume: true,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tSpec: v1.EC2NodeClassSpec{\n\t\t\t\t\t\tBlockDeviceMappings: []*v1.BlockDeviceMapping{{\n\t\t\t\t\t\t\tDeviceName: lo.ToPtr(\"/dev/xvda\"),\n\t\t\t\t\t\t\tEBS:        &v1.BlockDevice{VolumeSize: resource.NewScaledQuantity(15, resource.Giga)},\n\t\t\t\t\t\t\tRootVolume: false,\n\t\t\t\t\t\t}},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tSpec: v1.EC2NodeClassSpec{\n\t\t\t\t\t\tBlockDeviceMappings: []*v1.BlockDeviceMapping{{\n\t\t\t\t\t\t\tDeviceName: lo.ToPtr(\"/dev/yvda\"),\n\t\t\t\t\t\t\tEBS:        &v1.BlockDevice{VolumeSize: resource.NewScaledQuantity(25, resource.Giga)},\n\t\t\t\t\t\t\tRootVolume: true,\n\t\t\t\t\t\t}},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}\n\t\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\t\tnodePool.Spec.Template.Spec.NodeClassRef.Name = nodeClass.Name\n\t\t\t// Adding the general set of to the instancetype into the cache\n\t\t\tfullInstanceTypeResult, err := cloudProvider.GetInstanceTypes(ctx, nodePool)\n\t\t\tExpect(err).To(BeNil())\n\n\t\t\tinstanceTypeResults := [][]*corecloudprovider.InstanceType{fullInstanceTypeResult}\n\t\t\tsorted := nodeClass.DeepCopy()\n\t\t\tfor _, change := range nodeClassChanges {\n\t\t\t\tnodeClass = sorted.DeepCopy()\n\t\t\t\tExpect(mergo.Merge(nodeClass, change, mergo.WithOverride)).To(BeNil())\n\t\t\t\t// Calling the provider and storing the instance type list to the instancetype provider cache\n\t\t\t\t_, err := awsEnv.InstanceTypesProvider.List(ctx, nodeClass)\n\t\t\t\tExpect(err).To(BeNil())\n\t\t\t\t// We are making sure to pull from the cache\n\t\t\t\tits, err := awsEnv.InstanceTypesProvider.List(ctx, nodeClass)\n\t\t\t\tExpect(err).To(BeNil())\n\t\t\t\tinstanceTypeResults = append(instanceTypeResults, its)\n\t\t\t}\n\n\t\t\t// Based on the nodeclass configuration, we expect to have 5 unique set of instance types\n\t\t\tExpectUniqueInstanceTypeLists(instanceTypeResults...)\n\t\t})\n\t\tIt(\"updates to the instanceTypeInfo should result in a different set of instance types\", func() {\n\t\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\t\t// Initial list of GetInstanceTypes\n\t\t\tlist1, err := cloudProvider.GetInstanceTypes(ctx, nodePool)\n\t\t\tExpect(err).ToNot(HaveOccurred())\n\n\t\t\t// Update the instance types but don't change anything -- everything should remain cached\n\t\t\tExpect(awsEnv.InstanceTypesProvider.UpdateInstanceTypes(ctx))\n\t\t\tlist2, err := cloudProvider.GetInstanceTypes(ctx, nodePool)\n\t\t\tExpect(err).ToNot(HaveOccurred())\n\t\t\tExpectSameInstanceTypeLists(list1, list2)\n\n\t\t\t// Now, update the instance types, we should refresh the cache\n\t\t\tout, err := awsEnv.EC2API.DescribeInstanceTypes(ctx, &ec2.DescribeInstanceTypesInput{})\n\t\t\tExpect(err).ToNot(HaveOccurred())\n\t\t\tawsEnv.EC2API.DescribeInstanceTypesOutput.Set(&ec2.DescribeInstanceTypesOutput{\n\t\t\t\tInstanceTypes: append([]ec2types.InstanceTypeInfo{}, out.InstanceTypes[1:]...), // Drop one of the instance types from the response\n\t\t\t})\n\t\t\tExpect(awsEnv.InstanceTypesProvider.UpdateInstanceTypes(ctx))\n\n\t\t\tlist3, err := cloudProvider.GetInstanceTypes(ctx, nodePool)\n\t\t\tExpect(err).ToNot(HaveOccurred())\n\t\t\tExpectUniqueInstanceTypeLists(list2, list3)\n\t\t})\n\t\tIt(\"updates to the instanceTypeOfferingInfo should result in a different set of instance types\", func() {\n\t\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\t\t// Initial list of GetInstanceTypes\n\t\t\tlist1, err := cloudProvider.GetInstanceTypes(ctx, nodePool)\n\t\t\tExpect(err).ToNot(HaveOccurred())\n\n\t\t\t// Update the instance types but don't change anything -- everything should remain cached\n\t\t\tExpect(awsEnv.InstanceTypesProvider.UpdateInstanceTypeOfferings(ctx))\n\t\t\tlist2, err := cloudProvider.GetInstanceTypes(ctx, nodePool)\n\t\t\tExpect(err).ToNot(HaveOccurred())\n\t\t\tExpectSameInstanceTypeLists(list1, list2)\n\n\t\t\t// Now, update the instance types, we should refresh the cache\n\t\t\tout, err := awsEnv.EC2API.DescribeInstanceTypeOfferings(ctx, &ec2.DescribeInstanceTypeOfferingsInput{})\n\t\t\tExpect(err).ToNot(HaveOccurred())\n\n\t\t\tawsEnv.EC2API.DescribeInstanceTypeOfferingsOutput.Set(&ec2.DescribeInstanceTypeOfferingsOutput{InstanceTypeOfferings: append(\n\t\t\t\t[]ec2types.InstanceTypeOffering{\n\t\t\t\t\t{\n\t\t\t\t\t\tInstanceType: \"m5.xlarge\",\n\t\t\t\t\t\tLocation:     lo.ToPtr(\"test-zone-1c\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tout.InstanceTypeOfferings..., // Add an instance type offering option\n\t\t\t)})\n\t\t\tExpect(awsEnv.InstanceTypesProvider.UpdateInstanceTypeOfferings(ctx))\n\n\t\t\tlist3, err := cloudProvider.GetInstanceTypes(ctx, nodePool)\n\t\t\tExpect(err).ToNot(HaveOccurred())\n\t\t\tExpectUniqueInstanceTypeLists(list2, list3)\n\t\t})\n\t\tIt(\"returning an ICE error only results in a cache miss for that instance type\", func() {\n\t\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\t\t// Initial list of GetInstanceTypes\n\t\t\tlist1, err := cloudProvider.GetInstanceTypes(ctx, nodePool)\n\t\t\tExpect(err).ToNot(HaveOccurred())\n\n\t\t\tawsEnv.UnavailableOfferingsCache.MarkUnavailable(ctx, \"m5.xlarge\", \"test-zone-1a\", karpv1.CapacityTypeSpot, map[string]string{\"reason\": \"test\"})\n\t\t\tlist2, err := cloudProvider.GetInstanceTypes(ctx, nodePool)\n\t\t\tExpect(err).ToNot(HaveOccurred())\n\n\t\t\t// Only the m5.xlarge instance type should cache miss\n\t\t\tExpect(list2).To(HaveLen(len(list1)))\n\t\t\tfor _, it2 := range list2 {\n\t\t\t\tit, ok := lo.Find(list1, func(it *corecloudprovider.InstanceType) bool {\n\t\t\t\t\treturn it.Name == it2.Name\n\t\t\t\t})\n\t\t\t\tExpect(ok).To(BeTrue())\n\t\t\t\tif it2.Name == \"m5.xlarge\" {\n\t\t\t\t\tExpect(it2).ToNot(Equal(it))\n\t\t\t\t\tfor _, of2 := range it2.Offerings {\n\t\t\t\t\t\tExpect(it.Offerings).ToNot(ContainElement(BeIdenticalTo(of2)))\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tExpect(it2).To(Equal(it))\n\t\t\t\t\tExpect(it2.Offerings).To(ContainElements(lo.Map(it.Offerings, func(of *corecloudprovider.Offering, _ int) any { return BeIdenticalTo(of) })...))\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t\tIt(\"returning an ICE error for capacity type results in a cache miss for every instance type\", func() {\n\t\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\t\t// Initial list of GetInstanceTypes\n\t\t\tlist1, err := cloudProvider.GetInstanceTypes(ctx, nodePool)\n\t\t\tExpect(err).ToNot(HaveOccurred())\n\n\t\t\tawsEnv.UnavailableOfferingsCache.MarkCapacityTypeUnavailable(karpv1.CapacityTypeSpot)\n\t\t\tlist2, err := cloudProvider.GetInstanceTypes(ctx, nodePool)\n\t\t\tExpect(err).ToNot(HaveOccurred())\n\n\t\t\tExpect(list2).To(HaveLen(len(list1)))\n\t\t\tfor _, it2 := range list2 {\n\t\t\t\tit, ok := lo.Find(list1, func(it *corecloudprovider.InstanceType) bool {\n\t\t\t\t\treturn it.Name == it2.Name\n\t\t\t\t})\n\t\t\t\tExpect(ok).To(BeTrue())\n\t\t\t\tfor _, of2 := range it2.Offerings {\n\t\t\t\t\tExpect(it.Offerings).ToNot(ContainElement(BeIdenticalTo(of2)))\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tawsEnv.UnavailableOfferingsCache.MarkAZUnavailable(\"test-zone-1a\")\n\t\t\tlist3, err := cloudProvider.GetInstanceTypes(ctx, nodePool)\n\t\t\tExpect(err).ToNot(HaveOccurred())\n\n\t\t\tExpect(list3).To(HaveLen(len(list2)))\n\t\t\tfor _, it3 := range list3 {\n\t\t\t\tit2, ok := lo.Find(list2, func(it2 *corecloudprovider.InstanceType) bool {\n\t\t\t\t\treturn it2.Name == it3.Name\n\t\t\t\t})\n\t\t\t\tExpect(ok).To(BeTrue())\n\t\t\t\tfor _, of3 := range it3.Offerings {\n\t\t\t\t\tExpect(it2.Offerings).ToNot(ContainElement(BeIdenticalTo(of3)))\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t})\n\tContext(\"Tenancy\", func() {\n\t\tIt(\"Should use default tenancy when no requirement is given for tenancy\", func() {\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\tpod := coretest.UnschedulablePod()\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\tnode := ExpectScheduled(ctx, env.Client, pod)\n\t\t\tExpect(node.Labels).To(HaveKeyWithValue(v1.LabelInstanceTenancy, string(ec2types.TenancyDefault)))\n\t\t})\n\t\tIt(\"Should use default tenancy if tenancy requirement specifies both default and dedicated tenancies\", func() {\n\t\t\tnodePool.Spec.Template.Spec.Requirements = []karpv1.NodeSelectorRequirementWithMinValues{\n\t\t\t\t{\n\t\t\t\t\tKey:      v1.LabelInstanceTenancy,\n\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\tValues: []string{\n\t\t\t\t\t\tstring(ec2types.TenancyDefault),\n\t\t\t\t\t\tstring(ec2types.TenancyDedicated),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\tpod := coretest.UnschedulablePod()\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\tnode := ExpectScheduled(ctx, env.Client, pod)\n\t\t\tExpect(node.Labels).To(HaveKeyWithValue(v1.LabelInstanceTenancy, string(ec2types.TenancyDefault)))\n\t\t})\n\t\tIt(\"Should launch with default tenancy when required\", func() {\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\n\t\t\tpod := coretest.UnschedulablePod(coretest.PodOptions{\n\t\t\t\tNodeSelector: map[string]string{v1.LabelInstanceTenancy: string(ec2types.TenancyDefault)},\n\t\t\t})\n\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\tnode := ExpectScheduled(ctx, env.Client, pod)\n\t\t\tExpect(node.Labels).To(HaveKeyWithValue(v1.LabelInstanceTenancy, string(ec2types.TenancyDefault)))\n\t\t})\n\t\tIt(\"Should launch with dedicated tenancy when required\", func() {\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\n\t\t\tpod := coretest.UnschedulablePod(coretest.PodOptions{\n\t\t\t\tNodeSelector: map[string]string{v1.LabelInstanceTenancy: string(ec2types.TenancyDedicated)},\n\t\t\t})\n\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\tnode := ExpectScheduled(ctx, env.Client, pod)\n\t\t\tExpect(node.Labels).To(HaveKeyWithValue(v1.LabelInstanceTenancy, string(ec2types.TenancyDedicated)))\n\t\t})\n\t\tDescribeTable(\n\t\t\t\"does not allow tenancy violations\",\n\t\t\tfunc(npTenancy string, podTenancy string) {\n\t\t\t\tnodePool.Spec.Template.Spec.Requirements = []karpv1.NodeSelectorRequirementWithMinValues{\n\t\t\t\t\t{\n\t\t\t\t\t\tKey:      v1.LabelInstanceTenancy,\n\t\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\t\tValues: []string{\n\t\t\t\t\t\t\tnpTenancy,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\t\tpod := coretest.UnschedulablePod(coretest.PodOptions{\n\t\t\t\t\tNodeSelector: map[string]string{v1.LabelInstanceTenancy: podTenancy},\n\t\t\t\t})\n\t\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\t\tExpectNotScheduled(ctx, env.Client, pod)\n\t\t\t},\n\t\t\tEntry(\"dedicated np\", string(ec2types.TenancyDedicated), string(ec2types.TenancyDefault)),\n\t\t\tEntry(\"default np\", string(ec2types.TenancyDefault), string(ec2types.TenancyDedicated)),\n\t\t)\n\t})\n\tIt(\"should not cause data races when calling List() simultaneously\", func() {\n\t\tmu := sync.RWMutex{}\n\t\tvar instanceTypeOrder []string\n\t\twg := sync.WaitGroup{}\n\t\tfor range 10000 {\n\t\t\twg.Go(func() {\n\t\t\t\tdefer GinkgoRecover()\n\t\t\t\tinstanceTypes, err := awsEnv.InstanceTypesProvider.List(ctx, nodeClass)\n\t\t\t\tExpect(err).ToNot(HaveOccurred())\n\n\t\t\t\t// Sort everything in parallel and ensure that we don't get data races\n\t\t\t\tsort.Slice(instanceTypes, func(i, j int) bool {\n\t\t\t\t\treturn instanceTypes[i].Name < instanceTypes[j].Name\n\t\t\t\t})\n\t\t\t\t// Get the ordering of the instance types based on name\n\t\t\t\ttempInstanceTypeOrder := lo.Map(instanceTypes, func(i *corecloudprovider.InstanceType, _ int) string {\n\t\t\t\t\treturn i.Name\n\t\t\t\t})\n\t\t\t\t// Expect that all the elements in the instance type list are unique\n\t\t\t\tExpect(lo.Uniq(tempInstanceTypeOrder)).To(HaveLen(len(tempInstanceTypeOrder)))\n\n\t\t\t\t// We have to lock since we are doing simultaneous access to this value\n\t\t\t\tmu.Lock()\n\t\t\t\tif len(instanceTypeOrder) == 0 {\n\t\t\t\t\tinstanceTypeOrder = tempInstanceTypeOrder\n\t\t\t\t} else {\n\t\t\t\t\tExpect(tempInstanceTypeOrder).To(BeEquivalentTo(instanceTypeOrder))\n\t\t\t\t}\n\t\t\t\tmu.Unlock()\n\t\t\t})\n\t\t}\n\t\twg.Wait()\n\t})\n\tContext(\"Capacity Blocks\", func() {\n\t\tconst crInstanceType = \"c6g.large\"\n\t\tconst crZone = \"test-zone-1a\"\n\t\tconst crID = \"cr-123\"\n\t\tconst crCapacity = 1\n\t\tBeforeEach(func() {\n\t\t\tawsEnv.CapacityReservationProvider.SetAvailableInstanceCount(crID, crCapacity)\n\t\t\tnodeClass.Status.CapacityReservations = []v1.CapacityReservation{{\n\t\t\t\tAvailabilityZone: crZone,\n\t\t\t\tID:               crID,\n\t\t\t\tInstanceType:     crInstanceType,\n\t\t\t\tReservationType:  v1.CapacityReservationTypeCapacityBlock,\n\t\t\t}}\n\t\t})\n\t\tDescribeTable(\n\t\t\t\"should create an offering for a capacity block\",\n\t\t\tfunc(state v1.CapacityReservationState) {\n\t\t\t\tnodeClass.Status.CapacityReservations[0].State = state\n\t\t\t\tinstanceTypes, err := awsEnv.InstanceTypesProvider.List(ctx, nodeClass)\n\t\t\t\tExpect(err).ToNot(HaveOccurred())\n\n\t\t\t\tvar instanceType *corecloudprovider.InstanceType\n\t\t\t\tfor _, it := range instanceTypes {\n\t\t\t\t\tif it.Name == crInstanceType {\n\t\t\t\t\t\tinstanceType = it\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tExpect(instanceType).ToNot(BeNil())\n\n\t\t\t\tvar offering *corecloudprovider.Offering\n\t\t\t\tfor _, o := range instanceType.Offerings {\n\t\t\t\t\tif o.CapacityType() == karpv1.CapacityTypeReserved {\n\t\t\t\t\t\tif offering != nil {\n\t\t\t\t\t\t\tFail(\"only a single reserved offering should exist\")\n\t\t\t\t\t\t}\n\t\t\t\t\t\toffering = o\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tExpect(offering).ToNot(BeNil())\n\n\t\t\t\tExpect(offering.Requirements.Has(karpv1.CapacityTypeLabelKey)).To(BeTrue())\n\t\t\t\tExpect(offering.Requirements.Get(karpv1.CapacityTypeLabelKey).Any()).To(Equal(karpv1.CapacityTypeReserved))\n\t\t\t\tExpect(offering.Requirements.Has(corev1.LabelTopologyZone)).To(BeTrue())\n\t\t\t\tExpect(offering.Requirements.Get(corev1.LabelTopologyZone).Any()).To(Equal(crZone))\n\t\t\t\tExpect(offering.Requirements.Has(v1.LabelCapacityReservationType)).To(BeTrue())\n\t\t\t\tExpect(offering.Requirements.Get(v1.LabelCapacityReservationType).Any()).To(Equal(string(v1.CapacityReservationTypeCapacityBlock)))\n\t\t\t\tExpect(offering.Requirements.Has(v1.LabelCapacityReservationID)).To(BeTrue())\n\t\t\t\tExpect(offering.Requirements.Get(v1.LabelCapacityReservationID).Any()).To(Equal(crID))\n\t\t\t\tExpect(offering.Available).To(Equal(state != v1.CapacityReservationStateExpiring))\n\t\t\t\tExpect(offering.ReservationCapacity).To(Equal(crCapacity))\n\t\t\t},\n\t\t\tEntry(\"when the capacity block is active\", v1.CapacityReservationStateActive),\n\t\t\tEntry(\"when the capacity block is expiring\", v1.CapacityReservationStateExpiring),\n\t\t)\n\t})\n})\n\nfunc ExpectSameInstanceTypeLists(instanceTypesLists ...[]*corecloudprovider.InstanceType) {\n\tGinkgoHelper()\n\n\tfor _, itList := range instanceTypesLists {\n\t\tsort.Slice(itList, func(x int, y int) bool {\n\t\t\treturn itList[x].Name < itList[y].Name\n\t\t})\n\t}\n\tfor x := range instanceTypesLists {\n\t\tfor y := range instanceTypesLists {\n\t\t\tif x == y {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tExpect(instanceTypesLists[x]).To(HaveLen(len(instanceTypesLists[y])))\n\t\t\tfor i := range instanceTypesLists[x] {\n\t\t\t\tExpectIdenticalInstanceTypes(instanceTypesLists[x][i], instanceTypesLists[y][i])\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunc ExpectUniqueInstanceTypeLists(instanceTypesLists ...[]*corecloudprovider.InstanceType) {\n\tGinkgoHelper()\n\n\tfor _, itList := range instanceTypesLists {\n\t\tsort.Slice(itList, func(x int, y int) bool {\n\t\t\treturn itList[x].Name < itList[y].Name\n\t\t})\n\t}\n\tfor x := range instanceTypesLists {\n\t\tfor y := range instanceTypesLists {\n\t\t\tif x == y {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tExpect(reflect.DeepEqual(instanceTypesLists[x], instanceTypesLists[y])).To(BeFalse())\n\t\t}\n\t}\n}\n\nfunc ExpectIdenticalInstanceTypes(instanceTypes ...*corecloudprovider.InstanceType) {\n\tGinkgoHelper()\n\n\tfor x := range instanceTypes {\n\t\tfor y := range instanceTypes {\n\t\t\tif x == y {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\t// We have to compare a subset of the instance type fields because we create a new pointer for the instance type each time we call GetInstanceTypes()\n\t\t\tExpect(instanceTypes[x].Name).To(BeIdenticalTo(instanceTypes[y].Name))\n\t\t\tExpect(reflect.ValueOf(instanceTypes[x].Requirements).Pointer()).To(BeIdenticalTo(reflect.ValueOf(instanceTypes[y].Requirements).Pointer()))\n\t\t\tExpect(reflect.ValueOf(instanceTypes[x].Capacity).Pointer()).To(BeIdenticalTo(reflect.ValueOf(instanceTypes[y].Capacity).Pointer()))\n\t\t\tExpect(reflect.ValueOf(instanceTypes[x].Overhead).Pointer()).To(BeIdenticalTo(reflect.ValueOf(instanceTypes[y].Overhead).Pointer()))\n\t\t}\n\t}\n}\n\n// generateSpotPricing creates a spot price history output for use in a mock that has all spot offerings discounted by 50%\n// vs the on-demand offering.\nfunc generateSpotPricing(cp *cloudprovider.CloudProvider, nodePool *karpv1.NodePool) *ec2.DescribeSpotPriceHistoryOutput {\n\trsp := &ec2.DescribeSpotPriceHistoryOutput{}\n\tinstanceTypes, err := cp.GetInstanceTypes(ctx, nodePool)\n\tawsEnv.InstanceTypesProvider.Reset()\n\tExpect(err).To(Succeed())\n\tt := fakeClock.Now()\n\n\tfor _, it := range instanceTypes {\n\t\tinstanceType := it\n\t\tonDemandPrice := 1.00\n\t\tfor _, o := range it.Offerings {\n\t\t\tif o.Requirements.Get(karpv1.CapacityTypeLabelKey).Any() == karpv1.CapacityTypeOnDemand {\n\t\t\t\tonDemandPrice = o.Price\n\t\t\t}\n\t\t}\n\t\tfor _, o := range instanceType.Offerings {\n\t\t\tif o.Requirements.Get(karpv1.CapacityTypeLabelKey).Any() != karpv1.CapacityTypeSpot {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tzone := o.Requirements.Get(corev1.LabelTopologyZone).Any()\n\t\t\tspotPrice := fmt.Sprintf(\"%0.3f\", onDemandPrice*0.5)\n\t\t\trsp.SpotPriceHistory = append(rsp.SpotPriceHistory, ec2types.SpotPrice{\n\t\t\t\tAvailabilityZone: lo.ToPtr(zone),\n\t\t\t\tInstanceType:     ec2types.InstanceType(instanceType.Name),\n\t\t\t\tSpotPrice:        lo.ToPtr(spotPrice),\n\t\t\t\tTimestamp:        lo.ToPtr(t),\n\t\t\t})\n\t\t}\n\t}\n\treturn rsp\n}\n"
  },
  {
    "path": "pkg/providers/instancetype/types.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage instancetype\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"math\"\n\t\"regexp\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/aws/aws-sdk-go-v2/aws\"\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\t\"github.com/mitchellh/hashstructure/v2\"\n\t\"github.com/samber/lo\"\n\tcorev1 \"k8s.io/api/core/v1\"\n\t\"k8s.io/apimachinery/pkg/api/resource\"\n\t\"k8s.io/apimachinery/pkg/util/sets\"\n\tkarpv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/operator/options\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/amifamily\"\n\n\t\"sigs.k8s.io/karpenter/pkg/cloudprovider\"\n\t\"sigs.k8s.io/karpenter/pkg/scheduling\"\n\t\"sigs.k8s.io/karpenter/pkg/utils/resources\"\n)\n\nconst (\n\tMemoryAvailable = \"memory.available\"\n\tNodeFSAvailable = \"nodefs.available\"\n)\n\nvar (\n\tinstanceTypeScheme = regexp.MustCompile(`(^[a-z]+)(\\-[0-9]+tb)?([0-9]+).*\\.`)\n)\n\ntype ZoneData struct {\n\tName      string\n\tID        string\n\tAvailable bool\n}\n\ntype Resolver interface {\n\t// CacheKey tells the InstanceType cache if something changes about the InstanceTypes or Offerings based on the NodeClass.\n\tCacheKey(NodeClass) string\n\t// Resolve generates an InstanceType based on raw InstanceTypeInfo and NodeClass setting data\n\tResolve(ctx context.Context, info ec2types.InstanceTypeInfo, zones []string, nodeClass NodeClass) *cloudprovider.InstanceType\n}\n\ntype DefaultResolver struct {\n\tregion string\n}\n\nfunc NewDefaultResolver(region string) *DefaultResolver {\n\treturn &DefaultResolver{\n\t\tregion: region,\n\t}\n}\n\nfunc (d *DefaultResolver) CacheKey(nodeClass NodeClass) string {\n\tkc := &v1.KubeletConfiguration{}\n\tif resolved := nodeClass.KubeletConfiguration(); resolved != nil {\n\t\tkc = resolved\n\t}\n\tkcHash, _ := hashstructure.Hash(kc, hashstructure.FormatV2, &hashstructure.HashOptions{SlicesAsSets: true})\n\tblockDeviceMappingsHash, _ := hashstructure.Hash(nodeClass.BlockDeviceMappings(), hashstructure.FormatV2, &hashstructure.HashOptions{SlicesAsSets: true})\n\tcapacityReservationHash, _ := hashstructure.Hash(nodeClass.CapacityReservations(), hashstructure.FormatV2, nil)\n\treturn fmt.Sprintf(\n\t\t\"%016x-%016x-%016x-%s-%s\",\n\t\tkcHash,\n\t\tblockDeviceMappingsHash,\n\t\tcapacityReservationHash,\n\t\tlo.FromPtr((*string)(nodeClass.InstanceStorePolicy())),\n\t\tnodeClass.AMIFamily(),\n\t)\n}\n\nfunc (d *DefaultResolver) Resolve(ctx context.Context, info ec2types.InstanceTypeInfo, zones []string, nodeClass NodeClass) *cloudprovider.InstanceType {\n\t// !!! Important !!!\n\t// Any changes to the values passed into the NewInstanceType method will require making updates to the cache key\n\t// so that Karpenter is able to cache the set of InstanceTypes based on values that alter the set of instance types\n\t// !!! Important !!!\n\tkc := &v1.KubeletConfiguration{}\n\tif resolved := nodeClass.KubeletConfiguration(); resolved != nil {\n\t\tkc = resolved\n\t}\n\treturn NewInstanceType(\n\t\tctx,\n\t\tinfo,\n\t\td.region,\n\t\tzones,\n\t\tnodeClass.ZoneInfo(),\n\t\tnodeClass.BlockDeviceMappings(),\n\t\tnodeClass.InstanceStorePolicy(),\n\t\tkc.MaxPods,\n\t\tkc.PodsPerCore,\n\t\tkc.KubeReserved,\n\t\tkc.SystemReserved,\n\t\tkc.EvictionHard,\n\t\tkc.EvictionSoft,\n\t\tnodeClass.AMIFamily(),\n\t\tlo.Filter(nodeClass.CapacityReservations(), func(cr v1.CapacityReservation, _ int) bool {\n\t\t\treturn cr.InstanceType == string(info.InstanceType)\n\t\t}),\n\t)\n}\n\nfunc NewInstanceType(\n\tctx context.Context,\n\tinfo ec2types.InstanceTypeInfo,\n\tregion string,\n\tofferingZones []string,\n\tsubnetZoneInfo []v1.ZoneInfo,\n\tblockDeviceMappings []*v1.BlockDeviceMapping,\n\tinstanceStorePolicy *v1.InstanceStorePolicy,\n\tmaxPods *int32,\n\tpodsPerCore *int32,\n\tkubeReserved map[string]string,\n\tsystemReserved map[string]string,\n\tevictionHard map[string]string,\n\tevictionSoft map[string]string,\n\tamiFamilyType string,\n\tcapacityReservations []v1.CapacityReservation,\n) *cloudprovider.InstanceType {\n\tamiFamily := amifamily.GetAMIFamily(amiFamilyType, &amifamily.Options{})\n\tit := &cloudprovider.InstanceType{\n\t\tName:         string(info.InstanceType),\n\t\tRequirements: computeRequirements(info, region, offeringZones, subnetZoneInfo, amiFamily, capacityReservations),\n\t\tCapacity:     computeCapacity(ctx, info, amiFamily, blockDeviceMappings, instanceStorePolicy, maxPods, podsPerCore),\n\t\tOverhead: &cloudprovider.InstanceTypeOverhead{\n\t\t\tKubeReserved:      kubeReservedResources(cpu(info), lo.Ternary(amiFamily.FeatureFlags().UsesENILimitedMemoryOverhead, ENILimitedPods(ctx, info, 0), pods(ctx, info, amiFamily, maxPods, podsPerCore)), kubeReserved),\n\t\t\tSystemReserved:    systemReservedResources(systemReserved),\n\t\t\tEvictionThreshold: evictionThreshold(memory(ctx, info), ephemeralStorage(info, amiFamily, blockDeviceMappings, instanceStorePolicy), evictionHard),\n\t\t},\n\t}\n\tif it.Requirements.Compatible(scheduling.NewRequirements(scheduling.NewRequirement(corev1.LabelOSStable, corev1.NodeSelectorOpIn, string(corev1.Windows)))) == nil {\n\t\tit.Capacity[v1.ResourcePrivateIPv4Address] = *privateIPv4Address(string(info.InstanceType))\n\t}\n\treturn it\n}\n\n//nolint:gocyclo\nfunc computeRequirements(\n\tinfo ec2types.InstanceTypeInfo,\n\tregion string,\n\tofferingZones []string,\n\tsubnetZoneInfo []v1.ZoneInfo,\n\tamiFamily amifamily.AMIFamily,\n\tcapacityReservations []v1.CapacityReservation,\n) scheduling.Requirements {\n\tcapacityTypes := lo.FilterMap(info.SupportedUsageClasses, func(uc ec2types.UsageClassType, _ int) (string, bool) {\n\t\tif uc != ec2types.UsageClassTypeOnDemand && uc != ec2types.UsageClassTypeSpot {\n\t\t\treturn \"\", false\n\t\t}\n\t\treturn string(uc), true\n\t})\n\tif len(capacityReservations) != 0 {\n\t\tcapacityTypes = append(capacityTypes, karpv1.CapacityTypeReserved)\n\t}\n\n\t// Available zones is the set intersection between zones where the instance type is available, and zones which are\n\t// available via the provided EC2NodeClass.\n\tavailableZones := sets.New(offeringZones...).Intersection(sets.New(lo.Map(subnetZoneInfo, func(info v1.ZoneInfo, _ int) string {\n\t\treturn info.Zone\n\t})...))\n\trequirements := scheduling.NewRequirements(\n\t\t// Well Known Upstream\n\t\tscheduling.NewRequirement(corev1.LabelInstanceTypeStable, corev1.NodeSelectorOpIn, string(info.InstanceType)),\n\t\tscheduling.NewRequirement(corev1.LabelArchStable, corev1.NodeSelectorOpIn, getArchitecture(info)),\n\t\tscheduling.NewRequirement(corev1.LabelOSStable, corev1.NodeSelectorOpIn, getOS(info, amiFamily)...),\n\t\tscheduling.NewRequirement(corev1.LabelTopologyZone, corev1.NodeSelectorOpIn, availableZones.UnsortedList()...),\n\t\tscheduling.NewRequirement(corev1.LabelTopologyRegion, corev1.NodeSelectorOpIn, region),\n\t\tscheduling.NewRequirement(corev1.LabelWindowsBuild, corev1.NodeSelectorOpDoesNotExist),\n\t\t// Well Known to Karpenter\n\t\tscheduling.NewRequirement(karpv1.CapacityTypeLabelKey, corev1.NodeSelectorOpIn, capacityTypes...),\n\t\t// Well Known to AWS\n\t\tscheduling.NewRequirement(v1.LabelInstanceCPU, corev1.NodeSelectorOpIn, fmt.Sprint(lo.FromPtr(info.VCpuInfo.DefaultVCpus))),\n\t\tscheduling.NewRequirement(v1.LabelInstanceCPUManufacturer, corev1.NodeSelectorOpDoesNotExist),\n\t\tscheduling.NewRequirement(v1.LabelInstanceCPUSustainedClockSpeedMhz, corev1.NodeSelectorOpDoesNotExist),\n\t\tscheduling.NewRequirement(v1.LabelInstanceMemory, corev1.NodeSelectorOpIn, fmt.Sprint(lo.FromPtr(info.MemoryInfo.SizeInMiB))),\n\t\tscheduling.NewRequirement(v1.LabelInstanceEBSBandwidth, corev1.NodeSelectorOpDoesNotExist),\n\t\tscheduling.NewRequirement(v1.LabelInstanceNetworkBandwidth, corev1.NodeSelectorOpDoesNotExist),\n\t\tscheduling.NewRequirement(v1.LabelInstanceCategory, corev1.NodeSelectorOpDoesNotExist),\n\t\tscheduling.NewRequirement(v1.LabelInstanceCapabilityFlex, corev1.NodeSelectorOpDoesNotExist),\n\t\tscheduling.NewRequirement(v1.LabelInstanceFamily, corev1.NodeSelectorOpDoesNotExist),\n\t\tscheduling.NewRequirement(v1.LabelInstanceGeneration, corev1.NodeSelectorOpDoesNotExist),\n\t\tscheduling.NewRequirement(v1.LabelInstanceLocalNVME, corev1.NodeSelectorOpDoesNotExist),\n\t\tscheduling.NewRequirement(v1.LabelInstanceSize, corev1.NodeSelectorOpDoesNotExist),\n\t\tscheduling.NewRequirement(v1.LabelInstanceGPUName, corev1.NodeSelectorOpDoesNotExist),\n\t\tscheduling.NewRequirement(v1.LabelInstanceGPUManufacturer, corev1.NodeSelectorOpDoesNotExist),\n\t\tscheduling.NewRequirement(v1.LabelInstanceGPUCount, corev1.NodeSelectorOpDoesNotExist),\n\t\tscheduling.NewRequirement(v1.LabelInstanceGPUMemory, corev1.NodeSelectorOpDoesNotExist),\n\t\tscheduling.NewRequirement(v1.LabelInstanceAcceleratorName, corev1.NodeSelectorOpDoesNotExist),\n\t\tscheduling.NewRequirement(v1.LabelInstanceAcceleratorManufacturer, corev1.NodeSelectorOpDoesNotExist),\n\t\tscheduling.NewRequirement(v1.LabelInstanceAcceleratorCount, corev1.NodeSelectorOpDoesNotExist),\n\t\tscheduling.NewRequirement(v1.LabelInstanceHypervisor, corev1.NodeSelectorOpIn, string(info.Hypervisor)),\n\t\tscheduling.NewRequirement(v1.LabelInstanceEncryptionInTransitSupported, corev1.NodeSelectorOpIn, fmt.Sprint(aws.ToBool(info.NetworkInfo.EncryptionInTransitSupported))),\n\t\tscheduling.NewRequirement(v1.LabelInstanceTenancy, corev1.NodeSelectorOpIn, string(ec2types.TenancyDefault), string(ec2types.TenancyDedicated)),\n\t)\n\t// Only add zone-id label when available in offerings. It may not be available if a user has upgraded from a\n\t// previous version of Karpenter w/o zone-id support and the nodeclass subnet status has not yet updated.\n\tif zoneIDs := lo.FilterMap(subnetZoneInfo, func(info v1.ZoneInfo, _ int) (string, bool) {\n\t\tif !availableZones.Has(info.Zone) {\n\t\t\treturn \"\", false\n\t\t}\n\t\treturn info.ZoneID, true\n\t}); len(zoneIDs) != 0 {\n\t\trequirements.Add(scheduling.NewRequirement(v1.LabelTopologyZoneID, corev1.NodeSelectorOpIn, zoneIDs...))\n\t}\n\tif len(capacityReservations) != 0 {\n\t\trequirements.Add(scheduling.NewRequirement(cloudprovider.ReservationIDLabel, corev1.NodeSelectorOpIn, lo.Map(capacityReservations, func(cr v1.CapacityReservation, _ int) string {\n\t\t\treturn cr.ID\n\t\t})...))\n\t\trequirements.Add(scheduling.NewRequirement(v1.LabelCapacityReservationType, corev1.NodeSelectorOpIn, lo.Map(capacityReservations, func(cr v1.CapacityReservation, _ int) string {\n\t\t\treturn string(cr.ReservationType)\n\t\t})...))\n\t\trequirements.Add(scheduling.NewRequirement(v1.LabelCapacityReservationInterruptible, corev1.NodeSelectorOpIn, lo.Map(capacityReservations, func(cr v1.CapacityReservation, _ int) string {\n\t\t\treturn fmt.Sprintf(\"%t\", cr.Interruptible)\n\t\t})...))\n\t} else {\n\t\trequirements.Add(scheduling.NewRequirement(cloudprovider.ReservationIDLabel, corev1.NodeSelectorOpDoesNotExist))\n\t\trequirements.Add(scheduling.NewRequirement(v1.LabelCapacityReservationType, corev1.NodeSelectorOpDoesNotExist))\n\t\trequirements.Add(scheduling.NewRequirement(v1.LabelCapacityReservationInterruptible, corev1.NodeSelectorOpDoesNotExist))\n\t}\n\t// Instance Type Labels\n\tinstanceFamilyParts := instanceTypeScheme.FindStringSubmatch(string(info.InstanceType))\n\tif len(instanceFamilyParts) == 4 {\n\t\trequirements[v1.LabelInstanceCategory].Insert(instanceFamilyParts[1])\n\t\trequirements[v1.LabelInstanceGeneration].Insert(instanceFamilyParts[3])\n\t}\n\tinstanceTypeParts := strings.Split(string(info.InstanceType), \".\")\n\tif len(instanceTypeParts) == 2 {\n\t\trequirements.Get(v1.LabelInstanceFamily).Insert(instanceTypeParts[0])\n\t\trequirements.Get(v1.LabelInstanceSize).Insert(instanceTypeParts[1])\n\t}\n\tif info.InstanceStorageInfo != nil && info.InstanceStorageInfo.NvmeSupport != ec2types.EphemeralNvmeSupportUnsupported && info.InstanceStorageInfo.TotalSizeInGB != nil {\n\t\trequirements[v1.LabelInstanceLocalNVME].Insert(fmt.Sprint(lo.FromPtr(info.InstanceStorageInfo.TotalSizeInGB)))\n\t}\n\tif strings.Contains(instanceTypeParts[0], \"-flex\") {\n\t\trequirements[v1.LabelInstanceCapabilityFlex].Insert(\"true\")\n\t} else {\n\t\trequirements[v1.LabelInstanceCapabilityFlex].Insert(\"false\")\n\t}\n\n\t// Network bandwidth\n\tif bandwidth, ok := InstanceTypeBandwidthMegabits[string(info.InstanceType)]; ok {\n\t\trequirements[v1.LabelInstanceNetworkBandwidth].Insert(fmt.Sprint(bandwidth))\n\t}\n\t// GPU Labels\n\tif info.GpuInfo != nil && len(info.GpuInfo.Gpus) == 1 {\n\t\tgpu := info.GpuInfo.Gpus[0]\n\t\trequirements.Get(v1.LabelInstanceGPUName).Insert(lowerKabobCase(aws.ToString(gpu.Name)))\n\t\trequirements.Get(v1.LabelInstanceGPUManufacturer).Insert(lowerKabobCase(aws.ToString(gpu.Manufacturer)))\n\t\trequirements.Get(v1.LabelInstanceGPUCount).Insert(fmt.Sprint(lo.FromPtr(gpu.Count)))\n\t\trequirements.Get(v1.LabelInstanceGPUMemory).Insert(fmt.Sprint(lo.FromPtr(gpu.MemoryInfo.SizeInMiB)))\n\t}\n\t// Accelerators - excluding Neuron\n\tif info.InferenceAcceleratorInfo != nil && len(info.InferenceAcceleratorInfo.Accelerators) == 1 && info.NeuronInfo == nil {\n\t\taccelerator := info.InferenceAcceleratorInfo.Accelerators[0]\n\t\trequirements.Get(v1.LabelInstanceAcceleratorName).Insert(lowerKabobCase(aws.ToString(accelerator.Name)))\n\t\trequirements.Get(v1.LabelInstanceAcceleratorManufacturer).Insert(lowerKabobCase(aws.ToString(accelerator.Manufacturer)))\n\t\trequirements.Get(v1.LabelInstanceAcceleratorCount).Insert(fmt.Sprint(lo.FromPtr(accelerator.Count)))\n\t}\n\t// Neuron\n\tif info.NeuronInfo != nil && len(info.NeuronInfo.NeuronDevices) == 1 {\n\t\tdevice := info.NeuronInfo.NeuronDevices[0]\n\t\trequirements.Get(v1.LabelInstanceAcceleratorName).Insert(lowerKabobCase(lo.FromPtr(device.Name)))\n\t\trequirements.Get(v1.LabelInstanceAcceleratorManufacturer).Insert(lowerKabobCase(\"aws\"))\n\t\trequirements.Get(v1.LabelInstanceAcceleratorCount).Insert(fmt.Sprint(lo.FromPtr(device.Count)))\n\t}\n\t// Windows Build Version Labels\n\tif family, ok := amiFamily.(*amifamily.Windows); ok {\n\t\trequirements.Get(corev1.LabelWindowsBuild).Insert(family.Build)\n\t}\n\t// CPU Manufacturer, valid options: aws, intel, amd\n\tif info.ProcessorInfo != nil {\n\t\trequirements.Get(v1.LabelInstanceCPUManufacturer).Insert(lowerKabobCase(aws.ToString(info.ProcessorInfo.Manufacturer)))\n\t}\n\t// CPU Sustained Clock Speed\n\tif info.ProcessorInfo != nil {\n\t\t// Convert from Ghz to Mhz and round to nearest whole number - converting from float64 to int to support Gt and Lt operators\n\t\trequirements.Get(v1.LabelInstanceCPUSustainedClockSpeedMhz).Insert(fmt.Sprint(int(math.Round(aws.ToFloat64(info.ProcessorInfo.SustainedClockSpeedInGhz) * 1000))))\n\t}\n\t// EBS Max Bandwidth\n\tif info.EbsInfo != nil && info.EbsInfo.EbsOptimizedInfo != nil && info.EbsInfo.EbsOptimizedSupport == ec2types.EbsOptimizedSupportDefault {\n\t\trequirements.Get(v1.LabelInstanceEBSBandwidth).Insert(fmt.Sprint(lo.FromPtr(info.EbsInfo.EbsOptimizedInfo.MaximumBandwidthInMbps)))\n\t}\n\treturn requirements\n}\n\nfunc getOS(info ec2types.InstanceTypeInfo, amiFamily amifamily.AMIFamily) []string {\n\tif _, ok := amiFamily.(*amifamily.Windows); ok {\n\t\tif getArchitecture(info) == karpv1.ArchitectureAmd64 {\n\t\t\treturn []string{string(corev1.Windows)}\n\t\t}\n\t\treturn []string{}\n\t}\n\treturn []string{string(corev1.Linux)}\n}\n\nfunc getArchitecture(info ec2types.InstanceTypeInfo) string {\n\tfor _, architecture := range info.ProcessorInfo.SupportedArchitectures {\n\t\tif value, ok := v1.AWSToKubeArchitectures[string(architecture)]; ok {\n\t\t\treturn value\n\t\t}\n\t}\n\treturn fmt.Sprint(info.ProcessorInfo.SupportedArchitectures) // Unrecognized, but used for error printing\n}\n\nfunc computeCapacity(ctx context.Context, info ec2types.InstanceTypeInfo, amiFamily amifamily.AMIFamily,\n\tblockDeviceMapping []*v1.BlockDeviceMapping, instanceStorePolicy *v1.InstanceStorePolicy,\n\tmaxPods *int32, podsPerCore *int32) corev1.ResourceList {\n\n\tresourceList := corev1.ResourceList{\n\t\tcorev1.ResourceCPU:              *cpu(info),\n\t\tcorev1.ResourceMemory:           *memory(ctx, info),\n\t\tcorev1.ResourceEphemeralStorage: *ephemeralStorage(info, amiFamily, blockDeviceMapping, instanceStorePolicy),\n\t\tcorev1.ResourcePods:             *pods(ctx, info, amiFamily, maxPods, podsPerCore),\n\t\tv1.ResourceAWSPodENI:            *awsPodENI(string(info.InstanceType)),\n\t\tv1.ResourceNVIDIAGPU:            *nvidiaGPUs(info),\n\t\tv1.ResourceAMDGPU:               *amdGPUs(info),\n\t\tv1.ResourceAWSNeuron:            *awsNeuronDevices(info),\n\t\tv1.ResourceAWSNeuronCore:        *awsNeuronCores(info),\n\t\tv1.ResourceHabanaGaudi:          *habanaGaudis(info),\n\t\tv1.ResourceEFA:                  *efas(info),\n\t}\n\treturn resourceList\n}\n\nfunc cpu(info ec2types.InstanceTypeInfo) *resource.Quantity {\n\treturn resources.Quantity(fmt.Sprint(*info.VCpuInfo.DefaultVCpus))\n}\n\nfunc memory(ctx context.Context, info ec2types.InstanceTypeInfo) *resource.Quantity {\n\tsizeInMib := *info.MemoryInfo.SizeInMiB\n\t// Gravitons have an extra 64 MiB of cma reserved memory that we can't use\n\tif len(info.ProcessorInfo.SupportedArchitectures) > 0 && info.ProcessorInfo.SupportedArchitectures[0] == \"arm64\" {\n\t\tsizeInMib -= 64\n\t}\n\tmem := resources.Quantity(fmt.Sprintf(\"%dMi\", sizeInMib))\n\t// Account for VM overhead in calculation\n\tmem.Sub(resource.MustParse(fmt.Sprintf(\"%dMi\", int64(math.Ceil(float64(mem.Value())*options.FromContext(ctx).VMMemoryOverheadPercent/1024/1024)))))\n\treturn mem\n}\n\n// Setting ephemeral-storage to be either the default value, what is defined in blockDeviceMappings, or the combined size of local store volumes.\nfunc ephemeralStorage(info ec2types.InstanceTypeInfo, amiFamily amifamily.AMIFamily, blockDeviceMappings []*v1.BlockDeviceMapping, instanceStorePolicy *v1.InstanceStorePolicy) *resource.Quantity {\n\t// If local store disks have been configured for node ephemeral-storage, use the total size of the disks.\n\tif lo.FromPtr(instanceStorePolicy) == v1.InstanceStorePolicyRAID0 {\n\t\tif info.InstanceStorageInfo != nil && info.InstanceStorageInfo.TotalSizeInGB != nil {\n\t\t\treturn resources.Quantity(fmt.Sprintf(\"%dG\", *info.InstanceStorageInfo.TotalSizeInGB))\n\t\t}\n\t}\n\tif len(blockDeviceMappings) != 0 {\n\t\t// First check if there's a root volume configured in blockDeviceMappings.\n\t\tif blockDeviceMapping, ok := lo.Find(blockDeviceMappings, func(bdm *v1.BlockDeviceMapping) bool {\n\t\t\treturn bdm.RootVolume\n\t\t}); ok && blockDeviceMapping.EBS.VolumeSize != nil {\n\t\t\treturn blockDeviceMapping.EBS.VolumeSize\n\t\t}\n\t\tswitch amiFamily.(type) {\n\t\tcase *amifamily.Custom:\n\t\t\t// We can't know if a custom AMI is going to have a volume size.\n\t\t\tvolumeSize := blockDeviceMappings[len(blockDeviceMappings)-1].EBS.VolumeSize\n\t\t\treturn lo.Ternary(volumeSize != nil, volumeSize, amifamily.DefaultEBS.VolumeSize)\n\t\tdefault:\n\t\t\t// If a block device mapping exists in the provider for the root volume, use the volume size specified in the provider. If not, use the default\n\t\t\tif blockDeviceMapping, ok := lo.Find(blockDeviceMappings, func(bdm *v1.BlockDeviceMapping) bool {\n\t\t\t\treturn *bdm.DeviceName == *amiFamily.EphemeralBlockDevice()\n\t\t\t}); ok && blockDeviceMapping.EBS.VolumeSize != nil {\n\t\t\t\treturn blockDeviceMapping.EBS.VolumeSize\n\t\t\t}\n\t\t}\n\t}\n\t//Return the ephemeralBlockDevice size if defined in ami\n\tif ephemeralBlockDevice, ok := lo.Find(amiFamily.DefaultBlockDeviceMappings(), func(item *v1.BlockDeviceMapping) bool {\n\t\treturn *amiFamily.EphemeralBlockDevice() == *item.DeviceName\n\t}); ok {\n\t\treturn ephemeralBlockDevice.EBS.VolumeSize\n\t}\n\treturn amifamily.DefaultEBS.VolumeSize\n}\n\n// awsPodENI relies on the VPC resource controller to populate the vpc.amazonaws.com/pod-eni resource\nfunc awsPodENI(instanceTypeName string) *resource.Quantity {\n\t// https://docs.aws.amazon.com/eks/latest/userguide/security-groups-for-pods.html#supported-instance-types\n\tlimits, ok := Limits[instanceTypeName]\n\tif ok && limits.IsTrunkingCompatible {\n\t\treturn resources.Quantity(fmt.Sprint(limits.BranchInterface))\n\t}\n\treturn resources.Quantity(\"0\")\n}\n\nfunc nvidiaGPUs(info ec2types.InstanceTypeInfo) *resource.Quantity {\n\tcount := int32(0)\n\tif info.GpuInfo != nil {\n\t\tfor _, gpu := range info.GpuInfo.Gpus {\n\t\t\tif *gpu.Manufacturer == \"NVIDIA\" {\n\t\t\t\tcount += *gpu.Count\n\t\t\t}\n\t\t}\n\t}\n\treturn resources.Quantity(fmt.Sprint(count))\n}\n\nfunc amdGPUs(info ec2types.InstanceTypeInfo) *resource.Quantity {\n\tcount := int32(0)\n\tif info.GpuInfo != nil {\n\t\tfor _, gpu := range info.GpuInfo.Gpus {\n\t\t\tif *gpu.Manufacturer == \"AMD\" {\n\t\t\t\tcount += *gpu.Count\n\t\t\t}\n\t\t}\n\t}\n\treturn resources.Quantity(fmt.Sprint(count))\n}\n\nfunc awsNeuronCores(info ec2types.InstanceTypeInfo) *resource.Quantity {\n\tcount := int32(0)\n\tif info.NeuronInfo != nil {\n\t\tneuronDevice := info.NeuronInfo.NeuronDevices[0]\n\t\tneuronCorePerDevice := neuronDevice.CoreInfo.Count\n\t\tcount = *neuronDevice.Count * *neuronCorePerDevice\n\t}\n\treturn resources.Quantity(fmt.Sprint(count))\n}\n\nfunc awsNeuronDevices(info ec2types.InstanceTypeInfo) *resource.Quantity {\n\tcount := int32(0)\n\tif info.NeuronInfo != nil {\n\t\tfor _, device := range info.NeuronInfo.NeuronDevices {\n\t\t\tcount += *device.Count\n\t\t}\n\t}\n\treturn resources.Quantity(fmt.Sprint(count))\n}\n\nfunc habanaGaudis(info ec2types.InstanceTypeInfo) *resource.Quantity {\n\tcount := int32(0)\n\tif info.GpuInfo != nil {\n\t\tfor _, gpu := range info.GpuInfo.Gpus {\n\t\t\tif *gpu.Manufacturer == \"Habana\" {\n\t\t\t\tcount += *gpu.Count\n\t\t\t}\n\t\t}\n\t}\n\treturn resources.Quantity(fmt.Sprint(count))\n}\n\nfunc efas(info ec2types.InstanceTypeInfo) *resource.Quantity {\n\tcount := int32(0)\n\tif info.NetworkInfo != nil && info.NetworkInfo.EfaInfo != nil && info.NetworkInfo.EfaInfo.MaximumEfaInterfaces != nil {\n\t\tcount = *info.NetworkInfo.EfaInfo.MaximumEfaInterfaces\n\t}\n\treturn resources.Quantity(fmt.Sprint(count))\n}\n\nfunc ENILimitedPods(ctx context.Context, info ec2types.InstanceTypeInfo, reservedENIs int) *resource.Quantity {\n\t// The number of pods per node is calculated using the formula:\n\t// max number of ENIs * (IPv4 Addresses per ENI -1) + 2\n\t// https://github.com/awslabs/amazon-eks-ami/blob/main/templates/shared/runtime/eni-max-pods.txt\n\n\t// VPC CNI only uses the default network interface\n\t// https://github.com/aws/amazon-vpc-cni-k8s/blob/3294231c0dce52cfe473bf6c62f47956a3b333b6/scripts/gen_vpc_ip_limits.go#L162\n\tnetworkInterfaces := *info.NetworkInfo.NetworkCards[*info.NetworkInfo.DefaultNetworkCardIndex].MaximumNetworkInterfaces\n\tusableNetworkInterfaces := lo.Max([]int64{int64(int(networkInterfaces) - reservedENIs), 0})\n\tif usableNetworkInterfaces == 0 {\n\t\treturn resource.NewQuantity(0, resource.DecimalSI)\n\t}\n\taddressesPerInterface := *info.NetworkInfo.Ipv4AddressesPerInterface\n\treturn resources.Quantity(fmt.Sprint(usableNetworkInterfaces*(int64(addressesPerInterface)-1) + 2))\n}\n\nfunc privateIPv4Address(instanceTypeName string) *resource.Quantity {\n\t//https://github.com/aws/amazon-vpc-resource-controller-k8s/blob/ecbd6965a0100d9a070110233762593b16023287/pkg/provider/ip/provider.go#L297\n\tlimits, ok := Limits[instanceTypeName]\n\tif !ok {\n\t\treturn resources.Quantity(\"0\")\n\t}\n\treturn resources.Quantity(fmt.Sprint(limits.IPv4PerInterface - 1))\n}\n\nfunc systemReservedResources(systemReserved map[string]string) corev1.ResourceList {\n\treturn lo.MapEntries(systemReserved, func(k string, v string) (corev1.ResourceName, resource.Quantity) {\n\t\treturn corev1.ResourceName(k), resource.MustParse(v)\n\t})\n}\n\nfunc kubeReservedResources(cpus, pods *resource.Quantity, kubeReserved map[string]string) corev1.ResourceList {\n\tresources := corev1.ResourceList{\n\t\tcorev1.ResourceMemory:           resource.MustParse(fmt.Sprintf(\"%dMi\", (11*pods.Value())+255)),\n\t\tcorev1.ResourceEphemeralStorage: resource.MustParse(\"1Gi\"), // default kube-reserved ephemeral-storage\n\t}\n\t// kube-reserved Computed from\n\t// https://github.com/bottlerocket-os/bottlerocket/pull/1388/files#diff-bba9e4e3e46203be2b12f22e0d654ebd270f0b478dd34f40c31d7aa695620f2fR611\n\tfor _, cpuRange := range []struct {\n\t\tstart      int64\n\t\tend        int64\n\t\tpercentage float64\n\t}{\n\t\t{start: 0, end: 1000, percentage: 0.06},\n\t\t{start: 1000, end: 2000, percentage: 0.01},\n\t\t{start: 2000, end: 4000, percentage: 0.005},\n\t\t{start: 4000, end: 1 << 31, percentage: 0.0025},\n\t} {\n\t\tif cpu := cpus.MilliValue(); cpu >= cpuRange.start {\n\t\t\tr := float64(cpuRange.end - cpuRange.start)\n\t\t\tif cpu < cpuRange.end {\n\t\t\t\tr = float64(cpu - cpuRange.start)\n\t\t\t}\n\t\t\tcpuOverhead := resources.Cpu()\n\t\t\tcpuOverhead.Add(*resource.NewMilliQuantity(int64(r*cpuRange.percentage), resource.DecimalSI))\n\t\t\tresources[corev1.ResourceCPU] = *cpuOverhead\n\t\t}\n\t}\n\treturn lo.Assign(resources, lo.MapEntries(kubeReserved, func(k string, v string) (corev1.ResourceName, resource.Quantity) {\n\t\treturn corev1.ResourceName(k), resource.MustParse(v)\n\t}))\n}\n\nfunc evictionThreshold(memory *resource.Quantity, storage *resource.Quantity, evictionHard map[string]string) corev1.ResourceList {\n\toverhead := corev1.ResourceList{\n\t\tcorev1.ResourceMemory:           resource.MustParse(\"100Mi\"),\n\t\tcorev1.ResourceEphemeralStorage: resource.MustParse(fmt.Sprint(math.Ceil(float64(storage.Value()) / 100 * 10))),\n\t}\n\n\toverride := corev1.ResourceList{}\n\t// Only use evictionHard for allocatable memory calculation\n\t// evictionSoft should not impact allocatable capacity as it's only a warning threshold\n\t// See: https://kubernetes.io/docs/tasks/administer-cluster/reserve-compute-resources/#eviction-thresholds\n\tif evictionHard != nil {\n\t\tif v, ok := evictionHard[MemoryAvailable]; ok {\n\t\t\toverride[corev1.ResourceMemory] = computeEvictionSignal(*memory, v)\n\t\t}\n\t\tif v, ok := evictionHard[NodeFSAvailable]; ok {\n\t\t\toverride[corev1.ResourceEphemeralStorage] = computeEvictionSignal(*storage, v)\n\t\t}\n\t}\n\t// Assign merges maps from left to right so overrides will always be taken last\n\treturn lo.Assign(overhead, override)\n}\n\nfunc pods(ctx context.Context, info ec2types.InstanceTypeInfo, amiFamily amifamily.AMIFamily, maxPods *int32, podsPerCore *int32) *resource.Quantity {\n\tvar count int64\n\tswitch {\n\tcase maxPods != nil:\n\t\tcount = int64(lo.FromPtr(maxPods))\n\tcase amiFamily.FeatureFlags().SupportsENILimitedPodDensity:\n\t\tcount = ENILimitedPods(ctx, info, options.FromContext(ctx).ReservedENIs).Value()\n\tdefault:\n\t\tcount = 110\n\n\t}\n\tif lo.FromPtr(podsPerCore) > 0 && amiFamily.FeatureFlags().PodsPerCoreEnabled {\n\t\tcount = lo.Min([]int64{int64(lo.FromPtr(podsPerCore)) * int64(lo.FromPtr(info.VCpuInfo.DefaultVCpus)), count})\n\t}\n\treturn resources.Quantity(fmt.Sprint(count))\n}\n\nfunc lowerKabobCase(s string) string {\n\treturn strings.ToLower(strings.ReplaceAll(s, \" \", \"-\"))\n}\n\n// computeEvictionSignal computes the resource quantity value for an eviction signal value, computed off the\n// base capacity value if the signal value is a percentage or as a resource quantity if the signal value isn't a percentage\nfunc computeEvictionSignal(capacity resource.Quantity, signalValue string) resource.Quantity {\n\tif strings.HasSuffix(signalValue, \"%\") {\n\t\tp := mustParsePercentage(signalValue)\n\n\t\t// Calculation is node.capacity * signalValue if percentage\n\t\t// From https://kubernetes.io/docs/concepts/scheduling-eviction/node-pressure-eviction/#eviction-signals\n\t\treturn resource.MustParse(fmt.Sprint(math.Ceil(capacity.AsApproximateFloat64() / 100 * p)))\n\t}\n\treturn resource.MustParse(signalValue)\n}\n\nfunc mustParsePercentage(v string) float64 {\n\tp, err := strconv.ParseFloat(strings.Trim(v, \"%\"), 64)\n\tif err != nil {\n\t\tpanic(fmt.Sprintf(\"expected percentage value to be a float but got %s, %v\", v, err))\n\t}\n\t// Setting percentage value to 100% is considered disabling the threshold according to\n\t// https://kubernetes.io/docs/reference/config-api/kubelet-config.v1beta1/\n\tif p == 100 {\n\t\tp = 0\n\t}\n\treturn p\n}\n"
  },
  {
    "path": "pkg/providers/instancetype/zz_generated.bandwidth.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage instancetype\n\n// GENERATED FILE. DO NOT EDIT DIRECTLY.\n// Update hack/code/bandwidth_gen.go and re-generate to edit\n// You can add instance types by adding to the --instance-types CLI flag\n\nvar (\n\tInstanceTypeBandwidthMegabits = map[string]int64{\n\t\t// c1.medium has vague bandwidth information, bandwidth is Moderate\n\t\t// c1.xlarge has vague bandwidth information, bandwidth is High\n\t\t// c3.2xlarge has vague bandwidth information, bandwidth is High\n\t\t// c3.4xlarge has vague bandwidth information, bandwidth is High\n\t\t// c3.large has vague bandwidth information, bandwidth is Moderate\n\t\t// c3.xlarge has vague bandwidth information, bandwidth is Moderate\n\t\t// c4.2xlarge has vague bandwidth information, bandwidth is High\n\t\t// c4.4xlarge has vague bandwidth information, bandwidth is High\n\t\t// c4.large has vague bandwidth information, bandwidth is Moderate\n\t\t// c4.xlarge has vague bandwidth information, bandwidth is High\n\t\t// d2.2xlarge has vague bandwidth information, bandwidth is High\n\t\t// d2.4xlarge has vague bandwidth information, bandwidth is High\n\t\t// d2.xlarge has vague bandwidth information, bandwidth is Moderate\n\t\t// i2.2xlarge has vague bandwidth information, bandwidth is High\n\t\t// i2.4xlarge has vague bandwidth information, bandwidth is High\n\t\t// i2.xlarge has vague bandwidth information, bandwidth is Moderate\n\t\t// m1.large has vague bandwidth information, bandwidth is Moderate\n\t\t// m1.medium has vague bandwidth information, bandwidth is Moderate\n\t\t// m1.small has vague bandwidth information, bandwidth is Low\n\t\t// m1.xlarge has vague bandwidth information, bandwidth is High\n\t\t// m2.2xlarge has vague bandwidth information, bandwidth is Moderate\n\t\t// m2.4xlarge has vague bandwidth information, bandwidth is High\n\t\t// m2.xlarge has vague bandwidth information, bandwidth is Moderate\n\t\t// m3.2xlarge has vague bandwidth information, bandwidth is High\n\t\t// m3.large has vague bandwidth information, bandwidth is Moderate\n\t\t// m3.medium has vague bandwidth information, bandwidth is Moderate\n\t\t// m3.xlarge has vague bandwidth information, bandwidth is High\n\t\t// m4.2xlarge has vague bandwidth information, bandwidth is High\n\t\t// m4.4xlarge has vague bandwidth information, bandwidth is High\n\t\t// m4.large has vague bandwidth information, bandwidth is Moderate\n\t\t// m4.xlarge has vague bandwidth information, bandwidth is High\n\t\t// r3.2xlarge has vague bandwidth information, bandwidth is High\n\t\t// r3.4xlarge has vague bandwidth information, bandwidth is High\n\t\t// r3.large has vague bandwidth information, bandwidth is Moderate\n\t\t// r3.xlarge has vague bandwidth information, bandwidth is Moderate\n\t\t// t1.micro has vague bandwidth information, bandwidth is Very Low\n\t\t// t2.2xlarge has vague bandwidth information, bandwidth is Moderate\n\t\t// t2.large has vague bandwidth information, bandwidth is Low to Moderate\n\t\t// t2.medium has vague bandwidth information, bandwidth is Low to Moderate\n\t\t// t2.micro has vague bandwidth information, bandwidth is Low to Moderate\n\t\t// t2.nano has vague bandwidth information, bandwidth is Low to Moderate\n\t\t// t2.small has vague bandwidth information, bandwidth is Low to Moderate\n\t\t// t2.xlarge has vague bandwidth information, bandwidth is Moderate\n\t\t\"t3.nano\":              32,\n\t\t\"t3a.nano\":             32,\n\t\t\"t4g.nano\":             32,\n\t\t\"t3.micro\":             64,\n\t\t\"t3a.micro\":            64,\n\t\t\"t4g.micro\":            64,\n\t\t\"t3.small\":             128,\n\t\t\"t3a.small\":            128,\n\t\t\"t4g.small\":            128,\n\t\t\"t3.medium\":            256,\n\t\t\"t3a.medium\":           256,\n\t\t\"t4g.medium\":           256,\n\t\t\"c7a.medium\":           390,\n\t\t\"c7i-flex.large\":       390,\n\t\t\"m7a.medium\":           390,\n\t\t\"m7i-flex.large\":       390,\n\t\t\"r7a.medium\":           390,\n\t\t\"c8i-flex.large\":       468,\n\t\t\"m8i-flex.large\":       468,\n\t\t\"r8i-flex.large\":       468,\n\t\t\"a1.medium\":            500,\n\t\t\"c6g.medium\":           500,\n\t\t\"c6gd.medium\":          500,\n\t\t\"m6g.medium\":           500,\n\t\t\"m6gd.medium\":          500,\n\t\t\"r6g.medium\":           500,\n\t\t\"r6gd.medium\":          500,\n\t\t\"x2gd.medium\":          500,\n\t\t\"t3.large\":             512,\n\t\t\"t3a.large\":            512,\n\t\t\"t4g.large\":            512,\n\t\t\"c7g.medium\":           520,\n\t\t\"c7gd.medium\":          520,\n\t\t\"c8a.medium\":           520,\n\t\t\"c8g.medium\":           520,\n\t\t\"c8gd.medium\":          520,\n\t\t\"m7g.medium\":           520,\n\t\t\"m7gd.medium\":          520,\n\t\t\"m8a.medium\":           520,\n\t\t\"m8g.medium\":           520,\n\t\t\"m8gd.medium\":          520,\n\t\t\"r7g.medium\":           520,\n\t\t\"r7gd.medium\":          520,\n\t\t\"r8a.medium\":           520,\n\t\t\"r8g.medium\":           520,\n\t\t\"r8gd.medium\":          520,\n\t\t\"x8g.medium\":           520,\n\t\t\"x1e.xlarge\":           625,\n\t\t\"a1.large\":             750,\n\t\t\"c5.large\":             750,\n\t\t\"c5a.large\":            750,\n\t\t\"c5ad.large\":           750,\n\t\t\"c5d.large\":            750,\n\t\t\"c6g.large\":            750,\n\t\t\"c6gd.large\":           750,\n\t\t\"i3.large\":             750,\n\t\t\"m5.large\":             750,\n\t\t\"m5a.large\":            750,\n\t\t\"m5ad.large\":           750,\n\t\t\"m5d.large\":            750,\n\t\t\"m6g.large\":            750,\n\t\t\"m6gd.large\":           750,\n\t\t\"r4.large\":             750,\n\t\t\"r5.large\":             750,\n\t\t\"r5a.large\":            750,\n\t\t\"r5ad.large\":           750,\n\t\t\"r5b.large\":            750,\n\t\t\"r5d.large\":            750,\n\t\t\"r6g.large\":            750,\n\t\t\"r6gd.large\":           750,\n\t\t\"x2gd.large\":           750,\n\t\t\"z1d.large\":            750,\n\t\t\"c6a.large\":            781,\n\t\t\"c6i.large\":            781,\n\t\t\"c6id.large\":           781,\n\t\t\"c7a.large\":            781,\n\t\t\"c7i-flex.xlarge\":      781,\n\t\t\"c7i.large\":            781,\n\t\t\"i4g.large\":            781,\n\t\t\"i4i.large\":            781,\n\t\t\"m6a.large\":            781,\n\t\t\"m6i.large\":            781,\n\t\t\"m6id.large\":           781,\n\t\t\"m7a.large\":            781,\n\t\t\"m7i-flex.xlarge\":      781,\n\t\t\"m7i.large\":            781,\n\t\t\"r6a.large\":            781,\n\t\t\"r6i.large\":            781,\n\t\t\"r6id.large\":           781,\n\t\t\"r7a.large\":            781,\n\t\t\"r7i.large\":            781,\n\t\t\"r7iz.large\":           781,\n\t\t\"c7g.large\":            937,\n\t\t\"c7gd.large\":           937,\n\t\t\"c8a.large\":            937,\n\t\t\"c8g.large\":            937,\n\t\t\"c8gd.large\":           937,\n\t\t\"c8i-flex.xlarge\":      937,\n\t\t\"c8i.large\":            937,\n\t\t\"m7g.large\":            937,\n\t\t\"m7gd.large\":           937,\n\t\t\"m8a.large\":            937,\n\t\t\"m8g.large\":            937,\n\t\t\"m8gd.large\":           937,\n\t\t\"m8i-flex.xlarge\":      937,\n\t\t\"m8i.large\":            937,\n\t\t\"r7g.large\":            937,\n\t\t\"r7gd.large\":           937,\n\t\t\"r8a.large\":            937,\n\t\t\"r8g.large\":            937,\n\t\t\"r8gd.large\":           937,\n\t\t\"r8i-flex.xlarge\":      937,\n\t\t\"r8i.large\":            937,\n\t\t\"x8g.large\":            937,\n\t\t\"x8i.large\":            937,\n\t\t\"t3.xlarge\":            1024,\n\t\t\"t3a.xlarge\":           1024,\n\t\t\"t4g.xlarge\":           1024,\n\t\t\"i7i.large\":            1171,\n\t\t\"i8g.large\":            1172,\n\t\t\"a1.xlarge\":            1250,\n\t\t\"c5.xlarge\":            1250,\n\t\t\"c5a.xlarge\":           1250,\n\t\t\"c5ad.xlarge\":          1250,\n\t\t\"c5d.xlarge\":           1250,\n\t\t\"c6g.xlarge\":           1250,\n\t\t\"c6gd.xlarge\":          1250,\n\t\t\"g5g.xlarge\":           1250,\n\t\t\"i3.xlarge\":            1250,\n\t\t\"m5.xlarge\":            1250,\n\t\t\"m5a.xlarge\":           1250,\n\t\t\"m5ad.xlarge\":          1250,\n\t\t\"m5d.xlarge\":           1250,\n\t\t\"m6g.xlarge\":           1250,\n\t\t\"m6gd.xlarge\":          1250,\n\t\t\"r4.xlarge\":            1250,\n\t\t\"r5.xlarge\":            1250,\n\t\t\"r5a.xlarge\":           1250,\n\t\t\"r5ad.xlarge\":          1250,\n\t\t\"r5b.xlarge\":           1250,\n\t\t\"r5d.xlarge\":           1250,\n\t\t\"r6g.xlarge\":           1250,\n\t\t\"r6gd.xlarge\":          1250,\n\t\t\"x1e.2xlarge\":          1250,\n\t\t\"x2gd.xlarge\":          1250,\n\t\t\"z1d.xlarge\":           1250,\n\t\t\"g6f.large\":            1500,\n\t\t\"c6a.xlarge\":           1562,\n\t\t\"c6i.xlarge\":           1562,\n\t\t\"c6id.xlarge\":          1562,\n\t\t\"c7a.xlarge\":           1562,\n\t\t\"c7i-flex.2xlarge\":     1562,\n\t\t\"c7i.xlarge\":           1562,\n\t\t\"is4gen.medium\":        1562,\n\t\t\"m6a.xlarge\":           1562,\n\t\t\"m6i.xlarge\":           1562,\n\t\t\"m6id.xlarge\":          1562,\n\t\t\"m7a.xlarge\":           1562,\n\t\t\"m7i-flex.2xlarge\":     1562,\n\t\t\"m7i.xlarge\":           1562,\n\t\t\"r6a.xlarge\":           1562,\n\t\t\"r6i.xlarge\":           1562,\n\t\t\"r6id.xlarge\":          1562,\n\t\t\"r7a.xlarge\":           1562,\n\t\t\"r7i.xlarge\":           1562,\n\t\t\"r7iz.xlarge\":          1562,\n\t\t\"x8aedz.large\":         1562,\n\t\t\"c6gn.medium\":          1600,\n\t\t\"c8a.xlarge\":           1875,\n\t\t\"c8g.xlarge\":           1875,\n\t\t\"c8gd.xlarge\":          1875,\n\t\t\"c8i-flex.2xlarge\":     1875,\n\t\t\"c8i.xlarge\":           1875,\n\t\t\"i4g.xlarge\":           1875,\n\t\t\"i4i.xlarge\":           1875,\n\t\t\"m8a.xlarge\":           1875,\n\t\t\"m8g.xlarge\":           1875,\n\t\t\"m8gd.xlarge\":          1875,\n\t\t\"m8i-flex.2xlarge\":     1875,\n\t\t\"m8i.xlarge\":           1875,\n\t\t\"r8a.xlarge\":           1875,\n\t\t\"r8g.xlarge\":           1875,\n\t\t\"r8gd.xlarge\":          1875,\n\t\t\"r8i-flex.2xlarge\":     1875,\n\t\t\"r8i.xlarge\":           1875,\n\t\t\"x2iedn.xlarge\":        1875,\n\t\t\"x8g.xlarge\":           1875,\n\t\t\"x8i.xlarge\":           1875,\n\t\t\"c7g.xlarge\":           1876,\n\t\t\"c7gd.xlarge\":          1876,\n\t\t\"m7g.xlarge\":           1876,\n\t\t\"m7gd.xlarge\":          1876,\n\t\t\"r7g.xlarge\":           1876,\n\t\t\"r7gd.xlarge\":          1876,\n\t\t\"g4ad.xlarge\":          2000,\n\t\t\"t3.2xlarge\":           2048,\n\t\t\"t3a.2xlarge\":          2048,\n\t\t\"t4g.2xlarge\":          2048,\n\t\t\"c8gb.medium\":          2083,\n\t\t\"i7ie.large\":           2083,\n\t\t\"inf2.xlarge\":          2083,\n\t\t\"m8gb.medium\":          2083,\n\t\t\"r8gb.medium\":          2083,\n\t\t\"i3en.large\":           2100,\n\t\t\"i8ge.large\":           2100,\n\t\t\"m5dn.large\":           2100,\n\t\t\"m5n.large\":            2100,\n\t\t\"r5dn.large\":           2100,\n\t\t\"r5n.large\":            2100,\n\t\t\"i7i.xlarge\":           2343,\n\t\t\"i8g.xlarge\":           2344,\n\t\t\"a1.2xlarge\":           2500,\n\t\t\"c5.2xlarge\":           2500,\n\t\t\"c5a.2xlarge\":          2500,\n\t\t\"c5ad.2xlarge\":         2500,\n\t\t\"c5d.2xlarge\":          2500,\n\t\t\"c6g.2xlarge\":          2500,\n\t\t\"c6gd.2xlarge\":         2500,\n\t\t\"f1.2xlarge\":           2500,\n\t\t\"g5.xlarge\":            2500,\n\t\t\"g5g.2xlarge\":          2500,\n\t\t\"g6.xlarge\":            2500,\n\t\t\"g6e.xlarge\":           2500,\n\t\t\"g6f.xlarge\":           2500,\n\t\t\"h1.2xlarge\":           2500,\n\t\t\"i3.2xlarge\":           2500,\n\t\t\"m5.2xlarge\":           2500,\n\t\t\"m5a.2xlarge\":          2500,\n\t\t\"m5ad.2xlarge\":         2500,\n\t\t\"m5d.2xlarge\":          2500,\n\t\t\"m6g.2xlarge\":          2500,\n\t\t\"m6gd.2xlarge\":         2500,\n\t\t\"p3.2xlarge\":           2500,\n\t\t\"r4.2xlarge\":           2500,\n\t\t\"r5.2xlarge\":           2500,\n\t\t\"r5a.2xlarge\":          2500,\n\t\t\"r5ad.2xlarge\":         2500,\n\t\t\"r5b.2xlarge\":          2500,\n\t\t\"r5d.2xlarge\":          2500,\n\t\t\"r6g.2xlarge\":          2500,\n\t\t\"r6gd.2xlarge\":         2500,\n\t\t\"x1e.4xlarge\":          2500,\n\t\t\"x2gd.2xlarge\":         2500,\n\t\t\"z1d.2xlarge\":          2500,\n\t\t\"c5n.large\":            3000,\n\t\t\"c6gn.large\":           3000,\n\t\t\"d3.xlarge\":            3000,\n\t\t\"m5zn.large\":           3000,\n\t\t\"vt1.3xlarge\":          3120,\n\t\t\"c6a.2xlarge\":          3125,\n\t\t\"c6i.2xlarge\":          3125,\n\t\t\"c6id.2xlarge\":         3125,\n\t\t\"c6in.large\":           3125,\n\t\t\"c7a.2xlarge\":          3125,\n\t\t\"c7gn.medium\":          3125,\n\t\t\"c7i-flex.4xlarge\":     3125,\n\t\t\"c7i.2xlarge\":          3125,\n\t\t\"c8gn.medium\":          3125,\n\t\t\"im4gn.large\":          3125,\n\t\t\"is4gen.large\":         3125,\n\t\t\"m6a.2xlarge\":          3125,\n\t\t\"m6i.2xlarge\":          3125,\n\t\t\"m6id.2xlarge\":         3125,\n\t\t\"m6idn.large\":          3125,\n\t\t\"m6in.large\":           3125,\n\t\t\"m7a.2xlarge\":          3125,\n\t\t\"m7i-flex.4xlarge\":     3125,\n\t\t\"m7i.2xlarge\":          3125,\n\t\t\"m8gn.medium\":          3125,\n\t\t\"r6a.2xlarge\":          3125,\n\t\t\"r6i.2xlarge\":          3125,\n\t\t\"r6id.2xlarge\":         3125,\n\t\t\"r6idn.large\":          3125,\n\t\t\"r6in.large\":           3125,\n\t\t\"r7a.2xlarge\":          3125,\n\t\t\"r7i.2xlarge\":          3125,\n\t\t\"r7iz.2xlarge\":         3125,\n\t\t\"r8gn.medium\":          3125,\n\t\t\"trn1.2xlarge\":         3125,\n\t\t\"x8aedz.xlarge\":        3125,\n\t\t\"c7g.2xlarge\":          3750,\n\t\t\"c7gd.2xlarge\":         3750,\n\t\t\"c8a.2xlarge\":          3750,\n\t\t\"c8g.2xlarge\":          3750,\n\t\t\"c8gd.2xlarge\":         3750,\n\t\t\"c8i-flex.4xlarge\":     3750,\n\t\t\"c8i.2xlarge\":          3750,\n\t\t\"m7g.2xlarge\":          3750,\n\t\t\"m7gd.2xlarge\":         3750,\n\t\t\"m8a.2xlarge\":          3750,\n\t\t\"m8g.2xlarge\":          3750,\n\t\t\"m8gd.2xlarge\":         3750,\n\t\t\"m8i-flex.4xlarge\":     3750,\n\t\t\"m8i.2xlarge\":          3750,\n\t\t\"r7g.2xlarge\":          3750,\n\t\t\"r7gd.2xlarge\":         3750,\n\t\t\"r8a.2xlarge\":          3750,\n\t\t\"r8g.2xlarge\":          3750,\n\t\t\"r8gd.2xlarge\":         3750,\n\t\t\"r8i-flex.4xlarge\":     3750,\n\t\t\"r8i.2xlarge\":          3750,\n\t\t\"x8g.2xlarge\":          3750,\n\t\t\"x8i.2xlarge\":          3750,\n\t\t\"m5dn.xlarge\":          4100,\n\t\t\"m5n.xlarge\":           4100,\n\t\t\"r5dn.xlarge\":          4100,\n\t\t\"r5n.xlarge\":           4100,\n\t\t\"c8gb.large\":           4166,\n\t\t\"i7ie.xlarge\":          4166,\n\t\t\"m8gb.large\":           4166,\n\t\t\"r8gb.large\":           4166,\n\t\t\"g4ad.2xlarge\":         4167,\n\t\t\"i3en.xlarge\":          4200,\n\t\t\"i8ge.xlarge\":          4200,\n\t\t\"i4g.2xlarge\":          4687,\n\t\t\"i4i.2xlarge\":          4687,\n\t\t\"i7i.2xlarge\":          4687,\n\t\t\"i8g.2xlarge\":          4688,\n\t\t\"a1.4xlarge\":           5000,\n\t\t\"a1.metal\":             5000,\n\t\t\"c5.4xlarge\":           5000,\n\t\t\"c5a.4xlarge\":          5000,\n\t\t\"c5ad.4xlarge\":         5000,\n\t\t\"c5d.4xlarge\":          5000,\n\t\t\"c5n.xlarge\":           5000,\n\t\t\"c6g.4xlarge\":          5000,\n\t\t\"c6gd.4xlarge\":         5000,\n\t\t\"f1.4xlarge\":           5000,\n\t\t\"g3.4xlarge\":           5000,\n\t\t\"g4dn.xlarge\":          5000,\n\t\t\"g5.2xlarge\":           5000,\n\t\t\"g5g.4xlarge\":          5000,\n\t\t\"g6.2xlarge\":           5000,\n\t\t\"g6e.2xlarge\":          5000,\n\t\t\"g6f.2xlarge\":          5000,\n\t\t\"h1.4xlarge\":           5000,\n\t\t\"i3.4xlarge\":           5000,\n\t\t\"inf1.2xlarge\":         5000,\n\t\t\"inf1.xlarge\":          5000,\n\t\t\"m5.4xlarge\":           5000,\n\t\t\"m5a.4xlarge\":          5000,\n\t\t\"m5ad.4xlarge\":         5000,\n\t\t\"m5d.4xlarge\":          5000,\n\t\t\"m5zn.xlarge\":          5000,\n\t\t\"m6g.4xlarge\":          5000,\n\t\t\"m6gd.4xlarge\":         5000,\n\t\t\"r4.4xlarge\":           5000,\n\t\t\"r5.4xlarge\":           5000,\n\t\t\"r5a.4xlarge\":          5000,\n\t\t\"r5ad.4xlarge\":         5000,\n\t\t\"r5b.4xlarge\":          5000,\n\t\t\"r5d.4xlarge\":          5000,\n\t\t\"r6g.4xlarge\":          5000,\n\t\t\"r6gd.4xlarge\":         5000,\n\t\t\"x1e.8xlarge\":          5000,\n\t\t\"x2gd.4xlarge\":         5000,\n\t\t\"x2iedn.2xlarge\":       5000,\n\t\t\"z1d.3xlarge\":          5000,\n\t\t\"d3.2xlarge\":           6000,\n\t\t\"d3en.xlarge\":          6000,\n\t\t\"c6a.4xlarge\":          6250,\n\t\t\"c6i.4xlarge\":          6250,\n\t\t\"c6id.4xlarge\":         6250,\n\t\t\"c6in.xlarge\":          6250,\n\t\t\"c7a.4xlarge\":          6250,\n\t\t\"c7gn.large\":           6250,\n\t\t\"c7i-flex.8xlarge\":     6250,\n\t\t\"c7i.4xlarge\":          6250,\n\t\t\"c8gn.large\":           6250,\n\t\t\"im4gn.xlarge\":         6250,\n\t\t\"is4gen.xlarge\":        6250,\n\t\t\"m6a.4xlarge\":          6250,\n\t\t\"m6i.4xlarge\":          6250,\n\t\t\"m6id.4xlarge\":         6250,\n\t\t\"m6idn.xlarge\":         6250,\n\t\t\"m6in.xlarge\":          6250,\n\t\t\"m7a.4xlarge\":          6250,\n\t\t\"m7i-flex.8xlarge\":     6250,\n\t\t\"m7i.4xlarge\":          6250,\n\t\t\"m8gn.large\":           6250,\n\t\t\"r6a.4xlarge\":          6250,\n\t\t\"r6i.4xlarge\":          6250,\n\t\t\"r6id.4xlarge\":         6250,\n\t\t\"r6idn.xlarge\":         6250,\n\t\t\"r6in.xlarge\":          6250,\n\t\t\"r7a.4xlarge\":          6250,\n\t\t\"r7i.4xlarge\":          6250,\n\t\t\"r7iz.4xlarge\":         6250,\n\t\t\"r8gn.large\":           6250,\n\t\t\"vt1.6xlarge\":          6250,\n\t\t\"c6gn.xlarge\":          6300,\n\t\t\"c7g.4xlarge\":          7500,\n\t\t\"c7gd.4xlarge\":         7500,\n\t\t\"c8a.4xlarge\":          7500,\n\t\t\"c8g.4xlarge\":          7500,\n\t\t\"c8gd.4xlarge\":         7500,\n\t\t\"c8i-flex.8xlarge\":     7500,\n\t\t\"c8i.4xlarge\":          7500,\n\t\t\"m5a.8xlarge\":          7500,\n\t\t\"m5ad.8xlarge\":         7500,\n\t\t\"m7g.4xlarge\":          7500,\n\t\t\"m7gd.4xlarge\":         7500,\n\t\t\"m8a.4xlarge\":          7500,\n\t\t\"m8g.4xlarge\":          7500,\n\t\t\"m8gd.4xlarge\":         7500,\n\t\t\"m8i-flex.8xlarge\":     7500,\n\t\t\"m8i.4xlarge\":          7500,\n\t\t\"r5a.8xlarge\":          7500,\n\t\t\"r5ad.8xlarge\":         7500,\n\t\t\"r7g.4xlarge\":          7500,\n\t\t\"r7gd.4xlarge\":         7500,\n\t\t\"r8a.4xlarge\":          7500,\n\t\t\"r8g.4xlarge\":          7500,\n\t\t\"r8gd.4xlarge\":         7500,\n\t\t\"r8i-flex.8xlarge\":     7500,\n\t\t\"r8i.4xlarge\":          7500,\n\t\t\"x8g.4xlarge\":          7500,\n\t\t\"x8i.4xlarge\":          7500,\n\t\t\"m5dn.2xlarge\":         8125,\n\t\t\"m5n.2xlarge\":          8125,\n\t\t\"r5dn.2xlarge\":         8125,\n\t\t\"r5n.2xlarge\":          8125,\n\t\t\"c8gb.xlarge\":          8333,\n\t\t\"g4ad.4xlarge\":         8333,\n\t\t\"i7ie.2xlarge\":         8333,\n\t\t\"m8gb.xlarge\":          8333,\n\t\t\"r8gb.xlarge\":          8333,\n\t\t\"i3en.2xlarge\":         8400,\n\t\t\"i8ge.2xlarge\":         8400,\n\t\t\"c7i-flex.12xlarge\":    9375,\n\t\t\"i4g.4xlarge\":          9375,\n\t\t\"i4i.4xlarge\":          9375,\n\t\t\"i7i.4xlarge\":          9375,\n\t\t\"i8g.4xlarge\":          9375,\n\t\t\"m7i-flex.12xlarge\":    9375,\n\t\t\"x8aedz.3xlarge\":       9375,\n\t\t\"c3.8xlarge\":           10000,\n\t\t\"c4.8xlarge\":           10000,\n\t\t\"c5a.8xlarge\":          10000,\n\t\t\"c5ad.8xlarge\":         10000,\n\t\t\"c5n.2xlarge\":          10000,\n\t\t\"d2.8xlarge\":           10000,\n\t\t\"g3.8xlarge\":           10000,\n\t\t\"g4dn.2xlarge\":         10000,\n\t\t\"g5.4xlarge\":           10000,\n\t\t\"g6.4xlarge\":           10000,\n\t\t\"g6f.4xlarge\":          10000,\n\t\t\"gr6.4xlarge\":          10000,\n\t\t\"gr6f.4xlarge\":         10000,\n\t\t\"h1.8xlarge\":           10000,\n\t\t\"i2.8xlarge\":           10000,\n\t\t\"i3.8xlarge\":           10000,\n\t\t\"m4.10xlarge\":          10000,\n\t\t\"m5.8xlarge\":           10000,\n\t\t\"m5a.12xlarge\":         10000,\n\t\t\"m5ad.12xlarge\":        10000,\n\t\t\"m5d.8xlarge\":          10000,\n\t\t\"m5zn.2xlarge\":         10000,\n\t\t\"mac-m4.metal\":         10000,\n\t\t\"mac-m4pro.metal\":      10000,\n\t\t\"mac2-m1ultra.metal\":   10000,\n\t\t\"mac2-m2.metal\":        10000,\n\t\t\"mac2-m2pro.metal\":     10000,\n\t\t\"mac2.metal\":           10000,\n\t\t\"p2.8xlarge\":           10000,\n\t\t\"p3.8xlarge\":           10000,\n\t\t\"r3.8xlarge\":           10000,\n\t\t\"r4.8xlarge\":           10000,\n\t\t\"r5.8xlarge\":           10000,\n\t\t\"r5a.12xlarge\":         10000,\n\t\t\"r5ad.12xlarge\":        10000,\n\t\t\"r5b.8xlarge\":          10000,\n\t\t\"r5d.8xlarge\":          10000,\n\t\t\"x1.16xlarge\":          10000,\n\t\t\"x1e.16xlarge\":         10000,\n\t\t\"c8i-flex.12xlarge\":    11250,\n\t\t\"m8i-flex.12xlarge\":    11250,\n\t\t\"r8i-flex.12xlarge\":    11250,\n\t\t\"c5.12xlarge\":          12000,\n\t\t\"c5.9xlarge\":           12000,\n\t\t\"c5a.12xlarge\":         12000,\n\t\t\"c5ad.12xlarge\":        12000,\n\t\t\"c5d.12xlarge\":         12000,\n\t\t\"c5d.9xlarge\":          12000,\n\t\t\"c6g.8xlarge\":          12000,\n\t\t\"c6gd.8xlarge\":         12000,\n\t\t\"g5g.8xlarge\":          12000,\n\t\t\"m5.12xlarge\":          12000,\n\t\t\"m5a.16xlarge\":         12000,\n\t\t\"m5ad.16xlarge\":        12000,\n\t\t\"m5d.12xlarge\":         12000,\n\t\t\"m6g.8xlarge\":          12000,\n\t\t\"m6gd.8xlarge\":         12000,\n\t\t\"r5.12xlarge\":          12000,\n\t\t\"r5a.16xlarge\":         12000,\n\t\t\"r5ad.16xlarge\":        12000,\n\t\t\"r5b.12xlarge\":         12000,\n\t\t\"r5d.12xlarge\":         12000,\n\t\t\"r6g.8xlarge\":          12000,\n\t\t\"r6gd.8xlarge\":         12000,\n\t\t\"x2gd.8xlarge\":         12000,\n\t\t\"z1d.6xlarge\":          12000,\n\t\t\"c6a.8xlarge\":          12500,\n\t\t\"c6gn.2xlarge\":         12500,\n\t\t\"c6i.8xlarge\":          12500,\n\t\t\"c6id.8xlarge\":         12500,\n\t\t\"c6in.2xlarge\":         12500,\n\t\t\"c7a.8xlarge\":          12500,\n\t\t\"c7gn.xlarge\":          12500,\n\t\t\"c7i-flex.16xlarge\":    12500,\n\t\t\"c7i.8xlarge\":          12500,\n\t\t\"c8gn.xlarge\":          12500,\n\t\t\"d3.4xlarge\":           12500,\n\t\t\"d3en.2xlarge\":         12500,\n\t\t\"f2.6xlarge\":           12500,\n\t\t\"i3en.3xlarge\":         12500,\n\t\t\"i7ie.3xlarge\":         12500,\n\t\t\"i7ie.6xlarge\":         12500,\n\t\t\"i8ge.3xlarge\":         12500,\n\t\t\"im4gn.2xlarge\":        12500,\n\t\t\"is4gen.2xlarge\":       12500,\n\t\t\"m6a.8xlarge\":          12500,\n\t\t\"m6i.8xlarge\":          12500,\n\t\t\"m6id.8xlarge\":         12500,\n\t\t\"m6idn.2xlarge\":        12500,\n\t\t\"m6in.2xlarge\":         12500,\n\t\t\"m7a.8xlarge\":          12500,\n\t\t\"m7i-flex.16xlarge\":    12500,\n\t\t\"m7i.8xlarge\":          12500,\n\t\t\"m8gn.xlarge\":          12500,\n\t\t\"r6a.8xlarge\":          12500,\n\t\t\"r6i.8xlarge\":          12500,\n\t\t\"r6id.8xlarge\":         12500,\n\t\t\"r6idn.2xlarge\":        12500,\n\t\t\"r6in.2xlarge\":         12500,\n\t\t\"r7a.8xlarge\":          12500,\n\t\t\"r7i.8xlarge\":          12500,\n\t\t\"r7iz.8xlarge\":         12500,\n\t\t\"r8gn.xlarge\":          12500,\n\t\t\"x2iedn.4xlarge\":       12500,\n\t\t\"x2iezn.2xlarge\":       12500,\n\t\t\"c5n.4xlarge\":          15000,\n\t\t\"c7g.8xlarge\":          15000,\n\t\t\"c7gd.8xlarge\":         15000,\n\t\t\"c8a.8xlarge\":          15000,\n\t\t\"c8g.8xlarge\":          15000,\n\t\t\"c8gd.8xlarge\":         15000,\n\t\t\"c8i-flex.16xlarge\":    15000,\n\t\t\"c8i.8xlarge\":          15000,\n\t\t\"g4ad.8xlarge\":         15000,\n\t\t\"m5zn.3xlarge\":         15000,\n\t\t\"m7g.8xlarge\":          15000,\n\t\t\"m7gd.8xlarge\":         15000,\n\t\t\"m8a.8xlarge\":          15000,\n\t\t\"m8g.8xlarge\":          15000,\n\t\t\"m8gd.8xlarge\":         15000,\n\t\t\"m8i-flex.16xlarge\":    15000,\n\t\t\"m8i.8xlarge\":          15000,\n\t\t\"r7g.8xlarge\":          15000,\n\t\t\"r7gd.8xlarge\":         15000,\n\t\t\"r8a.8xlarge\":          15000,\n\t\t\"r8g.8xlarge\":          15000,\n\t\t\"r8gd.8xlarge\":         15000,\n\t\t\"r8i-flex.16xlarge\":    15000,\n\t\t\"r8i.8xlarge\":          15000,\n\t\t\"x2iezn.4xlarge\":       15000,\n\t\t\"x8g.8xlarge\":          15000,\n\t\t\"x8i.8xlarge\":          15000,\n\t\t\"m5dn.4xlarge\":         16250,\n\t\t\"m5n.4xlarge\":          16250,\n\t\t\"r5dn.4xlarge\":         16250,\n\t\t\"r5n.4xlarge\":          16250,\n\t\t\"c8gb.2xlarge\":         16666,\n\t\t\"m8gb.2xlarge\":         16666,\n\t\t\"r8gb.2xlarge\":         16666,\n\t\t\"inf2.8xlarge\":         16667,\n\t\t\"c6a.12xlarge\":         18750,\n\t\t\"c6i.12xlarge\":         18750,\n\t\t\"c6id.12xlarge\":        18750,\n\t\t\"c7a.12xlarge\":         18750,\n\t\t\"c7i.12xlarge\":         18750,\n\t\t\"i4g.8xlarge\":          18750,\n\t\t\"i4i.8xlarge\":          18750,\n\t\t\"m6a.12xlarge\":         18750,\n\t\t\"m6i.12xlarge\":         18750,\n\t\t\"m6id.12xlarge\":        18750,\n\t\t\"m7a.12xlarge\":         18750,\n\t\t\"m7i.12xlarge\":         18750,\n\t\t\"r6a.12xlarge\":         18750,\n\t\t\"r6i.12xlarge\":         18750,\n\t\t\"r6id.12xlarge\":        18750,\n\t\t\"r7a.12xlarge\":         18750,\n\t\t\"r7i.12xlarge\":         18750,\n\t\t\"x8aedz.6xlarge\":       18750,\n\t\t\"c5a.16xlarge\":         20000,\n\t\t\"c5a.24xlarge\":         20000,\n\t\t\"c5ad.16xlarge\":        20000,\n\t\t\"c5ad.24xlarge\":        20000,\n\t\t\"c6g.12xlarge\":         20000,\n\t\t\"c6gd.12xlarge\":        20000,\n\t\t\"g4dn.4xlarge\":         20000,\n\t\t\"g6e.4xlarge\":          20000,\n\t\t\"m5.16xlarge\":          20000,\n\t\t\"m5a.24xlarge\":         20000,\n\t\t\"m5ad.24xlarge\":        20000,\n\t\t\"m5d.16xlarge\":         20000,\n\t\t\"m6g.12xlarge\":         20000,\n\t\t\"m6gd.12xlarge\":        20000,\n\t\t\"r5.16xlarge\":          20000,\n\t\t\"r5a.24xlarge\":         20000,\n\t\t\"r5ad.24xlarge\":        20000,\n\t\t\"r5b.16xlarge\":         20000,\n\t\t\"r5d.16xlarge\":         20000,\n\t\t\"r6g.12xlarge\":         20000,\n\t\t\"r6gd.12xlarge\":        20000,\n\t\t\"x2gd.12xlarge\":        20000,\n\t\t\"c7g.12xlarge\":         22500,\n\t\t\"c7gd.12xlarge\":        22500,\n\t\t\"c8a.12xlarge\":         22500,\n\t\t\"c8g.12xlarge\":         22500,\n\t\t\"c8gd.12xlarge\":        22500,\n\t\t\"c8i.12xlarge\":         22500,\n\t\t\"m7g.12xlarge\":         22500,\n\t\t\"m7gd.12xlarge\":        22500,\n\t\t\"m8a.12xlarge\":         22500,\n\t\t\"m8g.12xlarge\":         22500,\n\t\t\"m8gd.12xlarge\":        22500,\n\t\t\"m8i.12xlarge\":         22500,\n\t\t\"r7g.12xlarge\":         22500,\n\t\t\"r7gd.12xlarge\":        22500,\n\t\t\"r8a.12xlarge\":         22500,\n\t\t\"r8g.12xlarge\":         22500,\n\t\t\"r8gd.12xlarge\":        22500,\n\t\t\"r8i.12xlarge\":         22500,\n\t\t\"x8g.12xlarge\":         22500,\n\t\t\"x8i.12xlarge\":         22500,\n\t\t\"c5.18xlarge\":          25000,\n\t\t\"c5.24xlarge\":          25000,\n\t\t\"c5.metal\":             25000,\n\t\t\"c5d.18xlarge\":         25000,\n\t\t\"c5d.24xlarge\":         25000,\n\t\t\"c5d.metal\":            25000,\n\t\t\"c6a.16xlarge\":         25000,\n\t\t\"c6g.16xlarge\":         25000,\n\t\t\"c6g.metal\":            25000,\n\t\t\"c6gd.16xlarge\":        25000,\n\t\t\"c6gd.metal\":           25000,\n\t\t\"c6gn.4xlarge\":         25000,\n\t\t\"c6i.16xlarge\":         25000,\n\t\t\"c6id.16xlarge\":        25000,\n\t\t\"c6in.4xlarge\":         25000,\n\t\t\"c7a.16xlarge\":         25000,\n\t\t\"c7gn.2xlarge\":         25000,\n\t\t\"c7i.16xlarge\":         25000,\n\t\t\"c8gn.2xlarge\":         25000,\n\t\t\"d3.8xlarge\":           25000,\n\t\t\"d3en.4xlarge\":         25000,\n\t\t\"f1.16xlarge\":          25000,\n\t\t\"f2.12xlarge\":          25000,\n\t\t\"g3.16xlarge\":          25000,\n\t\t\"g4ad.16xlarge\":        25000,\n\t\t\"g5.16xlarge\":          25000,\n\t\t\"g5.8xlarge\":           25000,\n\t\t\"g5g.16xlarge\":         25000,\n\t\t\"g5g.metal\":            25000,\n\t\t\"g6.16xlarge\":          25000,\n\t\t\"g6.8xlarge\":           25000,\n\t\t\"g6e.8xlarge\":          25000,\n\t\t\"gr6.8xlarge\":          25000,\n\t\t\"h1.16xlarge\":          25000,\n\t\t\"i3.16xlarge\":          25000,\n\t\t\"i3.metal\":             25000,\n\t\t\"i3en.6xlarge\":         25000,\n\t\t\"i7i.8xlarge\":          25000,\n\t\t\"i7ie.12xlarge\":        25000,\n\t\t\"i8g.8xlarge\":          25000,\n\t\t\"im4gn.4xlarge\":        25000,\n\t\t\"inf1.6xlarge\":         25000,\n\t\t\"is4gen.4xlarge\":       25000,\n\t\t\"m4.16xlarge\":          25000,\n\t\t\"m5.24xlarge\":          25000,\n\t\t\"m5.metal\":             25000,\n\t\t\"m5d.24xlarge\":         25000,\n\t\t\"m5d.metal\":            25000,\n\t\t\"m5dn.8xlarge\":         25000,\n\t\t\"m5n.8xlarge\":          25000,\n\t\t\"m6a.16xlarge\":         25000,\n\t\t\"m6g.16xlarge\":         25000,\n\t\t\"m6g.metal\":            25000,\n\t\t\"m6gd.16xlarge\":        25000,\n\t\t\"m6gd.metal\":           25000,\n\t\t\"m6i.16xlarge\":         25000,\n\t\t\"m6id.16xlarge\":        25000,\n\t\t\"m6idn.4xlarge\":        25000,\n\t\t\"m6in.4xlarge\":         25000,\n\t\t\"m7a.16xlarge\":         25000,\n\t\t\"m7i.16xlarge\":         25000,\n\t\t\"m8gn.2xlarge\":         25000,\n\t\t\"mac1.metal\":           25000,\n\t\t\"p2.16xlarge\":          25000,\n\t\t\"p3.16xlarge\":          25000,\n\t\t\"r4.16xlarge\":          25000,\n\t\t\"r5.24xlarge\":          25000,\n\t\t\"r5.metal\":             25000,\n\t\t\"r5b.24xlarge\":         25000,\n\t\t\"r5b.metal\":            25000,\n\t\t\"r5d.24xlarge\":         25000,\n\t\t\"r5d.metal\":            25000,\n\t\t\"r5dn.8xlarge\":         25000,\n\t\t\"r5n.8xlarge\":          25000,\n\t\t\"r6a.16xlarge\":         25000,\n\t\t\"r6g.16xlarge\":         25000,\n\t\t\"r6g.metal\":            25000,\n\t\t\"r6gd.16xlarge\":        25000,\n\t\t\"r6gd.metal\":           25000,\n\t\t\"r6i.16xlarge\":         25000,\n\t\t\"r6id.16xlarge\":        25000,\n\t\t\"r6idn.4xlarge\":        25000,\n\t\t\"r6in.4xlarge\":         25000,\n\t\t\"r7a.16xlarge\":         25000,\n\t\t\"r7i.16xlarge\":         25000,\n\t\t\"r7iz.12xlarge\":        25000,\n\t\t\"r7iz.16xlarge\":        25000,\n\t\t\"r7iz.metal-16xl\":      25000,\n\t\t\"r8gn.2xlarge\":         25000,\n\t\t\"vt1.24xlarge\":         25000,\n\t\t\"x1.32xlarge\":          25000,\n\t\t\"x1e.32xlarge\":         25000,\n\t\t\"x2gd.16xlarge\":        25000,\n\t\t\"x2gd.metal\":           25000,\n\t\t\"x2iedn.8xlarge\":       25000,\n\t\t\"z1d.12xlarge\":         25000,\n\t\t\"z1d.metal\":            25000,\n\t\t\"i4i.12xlarge\":         28120,\n\t\t\"i7i.12xlarge\":         28120,\n\t\t\"i8g.12xlarge\":         28120,\n\t\t\"c7g.16xlarge\":         30000,\n\t\t\"c7g.metal\":            30000,\n\t\t\"c7gd.16xlarge\":        30000,\n\t\t\"c7gd.metal\":           30000,\n\t\t\"c8a.16xlarge\":         30000,\n\t\t\"c8g.16xlarge\":         30000,\n\t\t\"c8gd.16xlarge\":        30000,\n\t\t\"c8i.16xlarge\":         30000,\n\t\t\"m7g.16xlarge\":         30000,\n\t\t\"m7g.metal\":            30000,\n\t\t\"m7gd.16xlarge\":        30000,\n\t\t\"m7gd.metal\":           30000,\n\t\t\"m8a.16xlarge\":         30000,\n\t\t\"m8g.16xlarge\":         30000,\n\t\t\"m8gd.16xlarge\":        30000,\n\t\t\"m8i.16xlarge\":         30000,\n\t\t\"r7g.16xlarge\":         30000,\n\t\t\"r7g.metal\":            30000,\n\t\t\"r7gd.16xlarge\":        30000,\n\t\t\"r7gd.metal\":           30000,\n\t\t\"r8a.16xlarge\":         30000,\n\t\t\"r8g.16xlarge\":         30000,\n\t\t\"r8gd.16xlarge\":        30000,\n\t\t\"r8i.16xlarge\":         30000,\n\t\t\"x8g.16xlarge\":         30000,\n\t\t\"x8i.16xlarge\":         30000,\n\t\t\"c8gb.4xlarge\":         33330,\n\t\t\"m8gb.4xlarge\":         33330,\n\t\t\"r8gb.4xlarge\":         33330,\n\t\t\"g6e.16xlarge\":         35000,\n\t\t\"c6a.24xlarge\":         37500,\n\t\t\"c6i.24xlarge\":         37500,\n\t\t\"c6id.24xlarge\":        37500,\n\t\t\"c7a.24xlarge\":         37500,\n\t\t\"c7i.24xlarge\":         37500,\n\t\t\"c7i.metal-24xl\":       37500,\n\t\t\"i4g.16xlarge\":         37500,\n\t\t\"i4i.16xlarge\":         37500,\n\t\t\"i7i.16xlarge\":         37500,\n\t\t\"i7ie.18xlarge\":        37500,\n\t\t\"i8g.16xlarge\":         37500,\n\t\t\"i8ge.6xlarge\":         37500,\n\t\t\"m6a.24xlarge\":         37500,\n\t\t\"m6i.24xlarge\":         37500,\n\t\t\"m6id.24xlarge\":        37500,\n\t\t\"m7a.24xlarge\":         37500,\n\t\t\"m7i.24xlarge\":         37500,\n\t\t\"m7i.metal-24xl\":       37500,\n\t\t\"r6a.24xlarge\":         37500,\n\t\t\"r6i.24xlarge\":         37500,\n\t\t\"r6id.24xlarge\":        37500,\n\t\t\"r7a.24xlarge\":         37500,\n\t\t\"r7i.24xlarge\":         37500,\n\t\t\"r7i.metal-24xl\":       37500,\n\t\t\"x8aedz.12xlarge\":      37500,\n\t\t\"x8aedz.metal-12xl\":    37500,\n\t\t\"c8a.24xlarge\":         40000,\n\t\t\"c8a.metal-24xl\":       40000,\n\t\t\"c8g.24xlarge\":         40000,\n\t\t\"c8g.metal-24xl\":       40000,\n\t\t\"c8gd.24xlarge\":        40000,\n\t\t\"c8gd.metal-24xl\":      40000,\n\t\t\"c8i.24xlarge\":         40000,\n\t\t\"d3en.6xlarge\":         40000,\n\t\t\"g5.12xlarge\":          40000,\n\t\t\"g6.12xlarge\":          40000,\n\t\t\"m8a.24xlarge\":         40000,\n\t\t\"m8a.metal-24xl\":       40000,\n\t\t\"m8g.24xlarge\":         40000,\n\t\t\"m8g.metal-24xl\":       40000,\n\t\t\"m8gd.24xlarge\":        40000,\n\t\t\"m8gd.metal-24xl\":      40000,\n\t\t\"m8i.24xlarge\":         40000,\n\t\t\"r8a.24xlarge\":         40000,\n\t\t\"r8a.metal-24xl\":       40000,\n\t\t\"r8g.24xlarge\":         40000,\n\t\t\"r8g.metal-24xl\":       40000,\n\t\t\"r8gd.24xlarge\":        40000,\n\t\t\"r8gd.metal-24xl\":      40000,\n\t\t\"r8i.24xlarge\":         40000,\n\t\t\"x8g.24xlarge\":         40000,\n\t\t\"x8g.metal-24xl\":       40000,\n\t\t\"x8i.24xlarge\":         40000,\n\t\t\"c5n.9xlarge\":          50000,\n\t\t\"c6a.32xlarge\":         50000,\n\t\t\"c6a.48xlarge\":         50000,\n\t\t\"c6a.metal\":            50000,\n\t\t\"c6gn.8xlarge\":         50000,\n\t\t\"c6i.32xlarge\":         50000,\n\t\t\"c6i.metal\":            50000,\n\t\t\"c6id.32xlarge\":        50000,\n\t\t\"c6id.metal\":           50000,\n\t\t\"c6in.8xlarge\":         50000,\n\t\t\"c7a.32xlarge\":         50000,\n\t\t\"c7a.48xlarge\":         50000,\n\t\t\"c7a.metal-48xl\":       50000,\n\t\t\"c7gn.4xlarge\":         50000,\n\t\t\"c7i.48xlarge\":         50000,\n\t\t\"c7i.metal-48xl\":       50000,\n\t\t\"c8g.48xlarge\":         50000,\n\t\t\"c8g.metal-48xl\":       50000,\n\t\t\"c8gd.48xlarge\":        50000,\n\t\t\"c8gd.metal-48xl\":      50000,\n\t\t\"c8gn.4xlarge\":         50000,\n\t\t\"c8i.32xlarge\":         50000,\n\t\t\"d3en.8xlarge\":         50000,\n\t\t\"g4dn.12xlarge\":        50000,\n\t\t\"g4dn.16xlarge\":        50000,\n\t\t\"g4dn.8xlarge\":         50000,\n\t\t\"g5.24xlarge\":          50000,\n\t\t\"g6.24xlarge\":          50000,\n\t\t\"g7e.2xlarge\":          50000,\n\t\t\"g7e.4xlarge\":          50000,\n\t\t\"i3en.12xlarge\":        50000,\n\t\t\"i7ie.24xlarge\":        50000,\n\t\t\"i7ie.metal-24xl\":      50000,\n\t\t\"im4gn.8xlarge\":        50000,\n\t\t\"inf2.24xlarge\":        50000,\n\t\t\"is4gen.8xlarge\":       50000,\n\t\t\"m5dn.12xlarge\":        50000,\n\t\t\"m5n.12xlarge\":         50000,\n\t\t\"m5zn.6xlarge\":         50000,\n\t\t\"m6a.32xlarge\":         50000,\n\t\t\"m6a.48xlarge\":         50000,\n\t\t\"m6a.metal\":            50000,\n\t\t\"m6i.32xlarge\":         50000,\n\t\t\"m6i.metal\":            50000,\n\t\t\"m6id.32xlarge\":        50000,\n\t\t\"m6id.metal\":           50000,\n\t\t\"m6idn.8xlarge\":        50000,\n\t\t\"m6in.8xlarge\":         50000,\n\t\t\"m7a.32xlarge\":         50000,\n\t\t\"m7a.48xlarge\":         50000,\n\t\t\"m7a.metal-48xl\":       50000,\n\t\t\"m7i.48xlarge\":         50000,\n\t\t\"m7i.metal-48xl\":       50000,\n\t\t\"m8g.48xlarge\":         50000,\n\t\t\"m8g.metal-48xl\":       50000,\n\t\t\"m8gd.48xlarge\":        50000,\n\t\t\"m8gd.metal-48xl\":      50000,\n\t\t\"m8gn.4xlarge\":         50000,\n\t\t\"m8i.32xlarge\":         50000,\n\t\t\"r5dn.12xlarge\":        50000,\n\t\t\"r5n.12xlarge\":         50000,\n\t\t\"r6a.32xlarge\":         50000,\n\t\t\"r6a.48xlarge\":         50000,\n\t\t\"r6a.metal\":            50000,\n\t\t\"r6i.32xlarge\":         50000,\n\t\t\"r6i.metal\":            50000,\n\t\t\"r6id.32xlarge\":        50000,\n\t\t\"r6id.metal\":           50000,\n\t\t\"r6idn.8xlarge\":        50000,\n\t\t\"r6in.8xlarge\":         50000,\n\t\t\"r7a.32xlarge\":         50000,\n\t\t\"r7a.48xlarge\":         50000,\n\t\t\"r7a.metal-48xl\":       50000,\n\t\t\"r7i.48xlarge\":         50000,\n\t\t\"r7i.metal-48xl\":       50000,\n\t\t\"r7iz.32xlarge\":        50000,\n\t\t\"r7iz.metal-32xl\":      50000,\n\t\t\"r8g.48xlarge\":         50000,\n\t\t\"r8g.metal-48xl\":       50000,\n\t\t\"r8gd.48xlarge\":        50000,\n\t\t\"r8gd.metal-48xl\":      50000,\n\t\t\"r8gn.4xlarge\":         50000,\n\t\t\"r8i.32xlarge\":         50000,\n\t\t\"u-3tb1.56xlarge\":      50000,\n\t\t\"x2idn.16xlarge\":       50000,\n\t\t\"x2iedn.16xlarge\":      50000,\n\t\t\"x2iezn.6xlarge\":       50000,\n\t\t\"x8g.48xlarge\":         50000,\n\t\t\"x8g.metal-48xl\":       50000,\n\t\t\"x8i.32xlarge\":         50000,\n\t\t\"i4i.24xlarge\":         56250,\n\t\t\"i7i.24xlarge\":         56250,\n\t\t\"i7i.metal-24xl\":       56250,\n\t\t\"i8g.24xlarge\":         56250,\n\t\t\"i8g.metal-24xl\":       56250,\n\t\t\"c8gb.8xlarge\":         66660,\n\t\t\"m8gb.8xlarge\":         66660,\n\t\t\"r8gb.8xlarge\":         66660,\n\t\t\"c6gn.12xlarge\":        75000,\n\t\t\"c6in.12xlarge\":        75000,\n\t\t\"c8a.48xlarge\":         75000,\n\t\t\"c8a.metal-48xl\":       75000,\n\t\t\"c8i.48xlarge\":         75000,\n\t\t\"c8i.metal-48xl\":       75000,\n\t\t\"d3en.12xlarge\":        75000,\n\t\t\"i4i.32xlarge\":         75000,\n\t\t\"i4i.metal\":            75000,\n\t\t\"i8ge.12xlarge\":        75000,\n\t\t\"m5dn.16xlarge\":        75000,\n\t\t\"m5n.16xlarge\":         75000,\n\t\t\"m6idn.12xlarge\":       75000,\n\t\t\"m6in.12xlarge\":        75000,\n\t\t\"m8a.48xlarge\":         75000,\n\t\t\"m8a.metal-48xl\":       75000,\n\t\t\"m8i.48xlarge\":         75000,\n\t\t\"m8i.metal-48xl\":       75000,\n\t\t\"r5dn.16xlarge\":        75000,\n\t\t\"r5n.16xlarge\":         75000,\n\t\t\"r6idn.12xlarge\":       75000,\n\t\t\"r6in.12xlarge\":        75000,\n\t\t\"r8a.48xlarge\":         75000,\n\t\t\"r8a.metal-48xl\":       75000,\n\t\t\"r8i.48xlarge\":         75000,\n\t\t\"r8i.metal-48xl\":       75000,\n\t\t\"x2idn.24xlarge\":       75000,\n\t\t\"x2iedn.24xlarge\":      75000,\n\t\t\"x2iezn.8xlarge\":       75000,\n\t\t\"x8aedz.24xlarge\":      75000,\n\t\t\"x8aedz.metal-24xl\":    75000,\n\t\t\"x8i.48xlarge\":         75000,\n\t\t\"x8i.metal-48xl\":       75000,\n\t\t\"x8i.64xlarge\":         80000,\n\t\t\"c5n.18xlarge\":         100000,\n\t\t\"c5n.metal\":            100000,\n\t\t\"c6gn.16xlarge\":        100000,\n\t\t\"c6in.16xlarge\":        100000,\n\t\t\"c7gn.8xlarge\":         100000,\n\t\t\"c8gb.12xlarge\":        100000,\n\t\t\"c8gn.8xlarge\":         100000,\n\t\t\"c8i.96xlarge\":         100000,\n\t\t\"c8i.metal-96xl\":       100000,\n\t\t\"dl2q.24xlarge\":        100000,\n\t\t\"f2.48xlarge\":          100000,\n\t\t\"g4dn.metal\":           100000,\n\t\t\"g5.48xlarge\":          100000,\n\t\t\"g6.48xlarge\":          100000,\n\t\t\"g6e.12xlarge\":         100000,\n\t\t\"g7e.8xlarge\":          100000,\n\t\t\"hpc6a.48xlarge\":       100000,\n\t\t\"i3en.24xlarge\":        100000,\n\t\t\"i3en.metal\":           100000,\n\t\t\"i7i.48xlarge\":         100000,\n\t\t\"i7i.metal-48xl\":       100000,\n\t\t\"i7ie.48xlarge\":        100000,\n\t\t\"i7ie.metal-48xl\":      100000,\n\t\t\"i8g.48xlarge\":         100000,\n\t\t\"im4gn.16xlarge\":       100000,\n\t\t\"inf1.24xlarge\":        100000,\n\t\t\"inf2.48xlarge\":        100000,\n\t\t\"m5dn.24xlarge\":        100000,\n\t\t\"m5dn.metal\":           100000,\n\t\t\"m5n.24xlarge\":         100000,\n\t\t\"m5n.metal\":            100000,\n\t\t\"m5zn.12xlarge\":        100000,\n\t\t\"m5zn.metal\":           100000,\n\t\t\"m6idn.16xlarge\":       100000,\n\t\t\"m6in.16xlarge\":        100000,\n\t\t\"m8gb.12xlarge\":        100000,\n\t\t\"m8gn.8xlarge\":         100000,\n\t\t\"m8i.96xlarge\":         100000,\n\t\t\"m8i.metal-96xl\":       100000,\n\t\t\"p3dn.24xlarge\":        100000,\n\t\t\"p5.4xlarge\":           100000,\n\t\t\"r5dn.24xlarge\":        100000,\n\t\t\"r5dn.metal\":           100000,\n\t\t\"r5n.24xlarge\":         100000,\n\t\t\"r5n.metal\":            100000,\n\t\t\"r6idn.16xlarge\":       100000,\n\t\t\"r6in.16xlarge\":        100000,\n\t\t\"r8gb.12xlarge\":        100000,\n\t\t\"r8gn.8xlarge\":         100000,\n\t\t\"r8i.96xlarge\":         100000,\n\t\t\"r8i.metal-96xl\":       100000,\n\t\t\"u-12tb1.112xlarge\":    100000,\n\t\t\"u-12tb1.metal\":        100000,\n\t\t\"u-18tb1.112xlarge\":    100000,\n\t\t\"u-18tb1.metal\":        100000,\n\t\t\"u-24tb1.112xlarge\":    100000,\n\t\t\"u-24tb1.metal\":        100000,\n\t\t\"u-6tb1.112xlarge\":     100000,\n\t\t\"u-6tb1.56xlarge\":      100000,\n\t\t\"u-6tb1.metal\":         100000,\n\t\t\"u-9tb1.112xlarge\":     100000,\n\t\t\"u-9tb1.metal\":         100000,\n\t\t\"u7i-12tb.224xlarge\":   100000,\n\t\t\"u7i-6tb.112xlarge\":    100000,\n\t\t\"u7i-8tb.112xlarge\":    100000,\n\t\t\"x2idn.32xlarge\":       100000,\n\t\t\"x2idn.metal\":          100000,\n\t\t\"x2iedn.32xlarge\":      100000,\n\t\t\"x2iedn.metal\":         100000,\n\t\t\"x2iezn.12xlarge\":      100000,\n\t\t\"x2iezn.metal\":         100000,\n\t\t\"x8i.96xlarge\":         100000,\n\t\t\"x8i.metal-96xl\":       100000,\n\t\t\"i8ge.18xlarge\":        112500,\n\t\t\"c8gb.16xlarge\":        133330,\n\t\t\"m8gb.16xlarge\":        133330,\n\t\t\"r8gb.16xlarge\":        133330,\n\t\t\"c6in.24xlarge\":        150000,\n\t\t\"c7gn.12xlarge\":        150000,\n\t\t\"c8gn.12xlarge\":        150000,\n\t\t\"i8ge.24xlarge\":        150000,\n\t\t\"i8ge.metal-24xl\":      150000,\n\t\t\"m6idn.24xlarge\":       150000,\n\t\t\"m6in.24xlarge\":        150000,\n\t\t\"m8gn.12xlarge\":        150000,\n\t\t\"r6idn.24xlarge\":       150000,\n\t\t\"r6in.24xlarge\":        150000,\n\t\t\"r8gn.12xlarge\":        150000,\n\t\t\"i8ge.48xlarge\":        180000,\n\t\t\"i8ge.metal-48xl\":      180000,\n\t\t\"c6in.32xlarge\":        200000,\n\t\t\"c6in.metal\":           200000,\n\t\t\"c7gn.16xlarge\":        200000,\n\t\t\"c7gn.metal\":           200000,\n\t\t\"c8gb.24xlarge\":        200000,\n\t\t\"c8gb.metal-24xl\":      200000,\n\t\t\"c8gn.16xlarge\":        200000,\n\t\t\"g6e.24xlarge\":         200000,\n\t\t\"hpc6id.32xlarge\":      200000,\n\t\t\"hpc7g.16xlarge\":       200000,\n\t\t\"hpc7g.4xlarge\":        200000,\n\t\t\"hpc7g.8xlarge\":        200000,\n\t\t\"m6idn.32xlarge\":       200000,\n\t\t\"m6idn.metal\":          200000,\n\t\t\"m6in.32xlarge\":        200000,\n\t\t\"m6in.metal\":           200000,\n\t\t\"m8gb.24xlarge\":        200000,\n\t\t\"m8gn.16xlarge\":        200000,\n\t\t\"r6idn.32xlarge\":       200000,\n\t\t\"r6idn.metal\":          200000,\n\t\t\"r6in.32xlarge\":        200000,\n\t\t\"r6in.metal\":           200000,\n\t\t\"r8gb.24xlarge\":        200000,\n\t\t\"r8gb.metal-24xl\":      200000,\n\t\t\"r8gn.16xlarge\":        200000,\n\t\t\"u7in-16tb.224xlarge\":  200000,\n\t\t\"u7in-24tb.224xlarge\":  200000,\n\t\t\"u7in-32tb.224xlarge\":  200000,\n\t\t\"u7inh-32tb.480xlarge\": 200000,\n\t\t\"c8gn.24xlarge\":        300000,\n\t\t\"c8gn.metal-24xl\":      300000,\n\t\t\"hpc7a.12xlarge\":       300000,\n\t\t\"hpc7a.24xlarge\":       300000,\n\t\t\"hpc7a.48xlarge\":       300000,\n\t\t\"hpc7a.96xlarge\":       300000,\n\t\t\"m8gn.24xlarge\":        300000,\n\t\t\"r8gn.24xlarge\":        300000,\n\t\t\"r8gn.metal-24xl\":      300000,\n\t\t\"dl1.24xlarge\":         400000,\n\t\t\"g6e.48xlarge\":         400000,\n\t\t\"g7e.12xlarge\":         400000,\n\t\t\"p4d.24xlarge\":         400000,\n\t\t\"p4de.24xlarge\":        400000,\n\t\t\"c8gn.48xlarge\":        600000,\n\t\t\"c8gn.metal-48xl\":      600000,\n\t\t\"m8gn.48xlarge\":        600000,\n\t\t\"r8gn.48xlarge\":        600000,\n\t\t\"r8gn.metal-48xl\":      600000,\n\t\t\"g7e.24xlarge\":         800000,\n\t\t\"trn1.32xlarge\":        800000,\n\t\t\"g7e.48xlarge\":         1600000,\n\t\t\"trn1n.32xlarge\":       1600000,\n\t\t\"p5.48xlarge\":          3200000,\n\t\t\"p5e.48xlarge\":         3200000,\n\t\t\"p5en.48xlarge\":        3200000,\n\t\t\"p6-b200.48xlarge\":     3200000,\n\t\t\"p6e-gb200.36xlarge\":   3200000,\n\t\t\"trn2.48xlarge\":        3200000,\n\t\t\"trn2u.48xlarge\":       3200000,\n\t\t\"p6-b300.48xlarge\":     6400000,\n\t}\n)\n"
  },
  {
    "path": "pkg/providers/instancetype/zz_generated.vpclimits.go",
    "content": "// Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"). You may\n// not use this file except in compliance with the License. A copy of the\n// License is located at\n//\n//     http://aws.amazon.com/apache2.0/\n//\n// or in the \"license\" file accompanying this file. This file is distributed\n// on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either\n// express or implied. See the License for the specific language governing\n// permissions and limitations under the License.\n\n// This file is generated via an internal script not available on GitHub. This is\n// done because the Instance to Branch ENI limits is not publicly available. We are\n// working with concerned teams to evaluate if this API can be exposed via aws-sdk-go\n// so we can get this information at runtime.\n\n// Code generated by go generate; DO NOT EDIT.\n// This file was generated at 2025-12-29T06:02:49Z\n\n// WARNING: please add @ellistarn, @bwagner5, or @jonathan-innis from aws/karpenter to reviewers\n// if you are updating this file since Karpenter is depending on this file to calculate max pods.\n\npackage instancetype\n\ntype NetworkCard struct {\n\t// max number of interfaces supported per card\n\tMaximumNetworkInterfaces int64\n\t// the index of current card\n\tNetworkCardIndex   int64\n\tNetworkPerformance string\n}\n\ntype VPCLimits struct {\n\tInterface               int\n\tIPv4PerInterface        int\n\tIsTrunkingCompatible    bool\n\tBranchInterface         int\n\tNetworkCards            []NetworkCard\n\tDefaultNetworkCardIndex int\n\tHypervisor              string\n\tIsBareMetal             bool\n}\n\n// VPC Limits and flags for ENI and IPv4 Addresses\nvar Limits = map[string]*VPCLimits{\n\t\"a1.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"a1.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"a1.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         9,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"a1.medium\": {\n\t\tInterface:               2,\n\t\tIPv4PerInterface:        4,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         10,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"a1.metal\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"a1.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c1.medium\": {\n\t\tInterface:               2,\n\t\tIPv4PerInterface:        6,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"xen\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c1.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"xen\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c3.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"xen\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c3.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"xen\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c3.8xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"xen\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c3.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"xen\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c3.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"xen\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c4.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"xen\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c4.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"xen\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c4.8xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"xen\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c4.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"xen\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c4.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"xen\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c5.12xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c5.18xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c5.24xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c5.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c5.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c5.9xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c5.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         9,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c5.metal\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"c5.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c5a.12xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c5a.16xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c5a.24xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c5a.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c5a.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c5a.8xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c5a.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         9,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c5a.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c5ad.12xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c5ad.16xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c5ad.24xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c5ad.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c5ad.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c5ad.8xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c5ad.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         9,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c5ad.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c5d.12xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c5d.18xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c5d.24xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c5d.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c5d.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c5d.9xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c5d.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         9,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c5d.metal\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"c5d.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c5n.18xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c5n.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c5n.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c5n.9xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c5n.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         9,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c5n.metal\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"c5n.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c6a.12xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         114,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c6a.16xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c6a.24xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c6a.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c6a.32xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c6a.48xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c6a.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c6a.8xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         84,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c6a.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         9,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c6a.metal\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"c6a.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c6g.12xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c6g.16xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c6g.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c6g.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c6g.8xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c6g.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         9,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c6g.medium\": {\n\t\tInterface:               2,\n\t\tIPv4PerInterface:        4,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         4,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c6g.metal\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"c6g.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c6gd.12xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c6gd.16xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c6gd.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c6gd.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c6gd.8xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c6gd.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         9,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c6gd.medium\": {\n\t\tInterface:               2,\n\t\tIPv4PerInterface:        4,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         4,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c6gd.metal\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"c6gd.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c6gn.12xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c6gn.16xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c6gn.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c6gn.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c6gn.8xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c6gn.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         9,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c6gn.medium\": {\n\t\tInterface:               2,\n\t\tIPv4PerInterface:        4,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         4,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c6gn.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c6i.12xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         114,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c6i.16xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c6i.24xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c6i.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c6i.32xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c6i.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c6i.8xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         84,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c6i.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         9,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c6i.metal\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"c6i.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c6id.12xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         114,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c6id.16xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c6id.24xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c6id.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c6id.32xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c6id.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c6id.8xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         84,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c6id.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         9,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c6id.metal\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"c6id.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c6in.12xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         114,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c6in.16xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c6in.24xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c6in.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c6in.32xlarge\": {\n\t\tInterface:               16,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         106,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         1,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c6in.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c6in.8xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         84,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c6in.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         9,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c6in.metal\": {\n\t\tInterface:               16,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         106,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         1,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"c6in.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c7a.12xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         114,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c7a.16xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c7a.24xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c7a.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c7a.32xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c7a.48xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c7a.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c7a.8xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         84,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c7a.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         9,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c7a.medium\": {\n\t\tInterface:               2,\n\t\tIPv4PerInterface:        4,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         4,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c7a.metal-48xl\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"c7a.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c7g.12xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c7g.16xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c7g.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c7g.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c7g.8xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c7g.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         9,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c7g.medium\": {\n\t\tInterface:               2,\n\t\tIPv4PerInterface:        4,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         4,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c7g.metal\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"c7g.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c7gd.12xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c7gd.16xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c7gd.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c7gd.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c7gd.8xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c7gd.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         9,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c7gd.medium\": {\n\t\tInterface:               2,\n\t\tIPv4PerInterface:        4,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         4,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c7gd.metal\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"c7gd.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c7gn.12xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c7gn.16xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c7gn.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c7gn.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c7gn.8xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c7gn.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         9,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c7gn.medium\": {\n\t\tInterface:               2,\n\t\tIPv4PerInterface:        4,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         4,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c7gn.metal\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"c7gn.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c7i-flex.12xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         114,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c7i-flex.16xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c7i-flex.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c7i-flex.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         34,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c7i-flex.8xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c7i-flex.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         3,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c7i-flex.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         8,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c7i.12xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         114,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c7i.16xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c7i.24xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c7i.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c7i.48xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c7i.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c7i.8xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         84,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c7i.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         9,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c7i.metal-24xl\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"c7i.metal-48xl\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"c7i.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c8a.12xlarge\": {\n\t\tInterface:               12,\n\t\tIPv4PerInterface:        64,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         110,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 12,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c8a.16xlarge\": {\n\t\tInterface:               16,\n\t\tIPv4PerInterface:        64,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         106,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 16,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c8a.24xlarge\": {\n\t\tInterface:               16,\n\t\tIPv4PerInterface:        64,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         106,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 16,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c8a.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        40,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c8a.48xlarge\": {\n\t\tInterface:               24,\n\t\tIPv4PerInterface:        64,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         98,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 24,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c8a.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        40,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c8a.8xlarge\": {\n\t\tInterface:               10,\n\t\tIPv4PerInterface:        40,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         82,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 10,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c8a.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        20,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         9,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c8a.medium\": {\n\t\tInterface:               2,\n\t\tIPv4PerInterface:        4,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         4,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c8a.metal-24xl\": {\n\t\tInterface:               16,\n\t\tIPv4PerInterface:        64,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         106,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 16,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"c8a.metal-48xl\": {\n\t\tInterface:               24,\n\t\tIPv4PerInterface:        64,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         98,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 24,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"c8a.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        20,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c8g.12xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c8g.16xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c8g.24xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c8g.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c8g.48xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c8g.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c8g.8xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c8g.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         9,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c8g.medium\": {\n\t\tInterface:               2,\n\t\tIPv4PerInterface:        4,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         4,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c8g.metal-24xl\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"c8g.metal-48xl\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"c8g.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c8gb.12xlarge\": {\n\t\tInterface:               12,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         50,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 12,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c8gb.16xlarge\": {\n\t\tInterface:               16,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         106,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 16,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c8gb.24xlarge\": {\n\t\tInterface:               24,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         98,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 24,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c8gb.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c8gb.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c8gb.8xlarge\": {\n\t\tInterface:               10,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         52,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 10,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c8gb.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         9,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c8gb.medium\": {\n\t\tInterface:               2,\n\t\tIPv4PerInterface:        4,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         4,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c8gb.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c8gd.12xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c8gd.16xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c8gd.24xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c8gd.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c8gd.48xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c8gd.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c8gd.8xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c8gd.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         9,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c8gd.medium\": {\n\t\tInterface:               2,\n\t\tIPv4PerInterface:        4,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         4,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c8gd.metal-24xl\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"c8gd.metal-48xl\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"c8gd.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c8gn.12xlarge\": {\n\t\tInterface:               12,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         50,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 12,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c8gn.16xlarge\": {\n\t\tInterface:               16,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         106,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 16,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c8gn.24xlarge\": {\n\t\tInterface:               24,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         98,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 24,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c8gn.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c8gn.48xlarge\": {\n\t\tInterface:               24,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         98,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 12,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 12,\n\t\t\t\tNetworkCardIndex:         1,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c8gn.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c8gn.8xlarge\": {\n\t\tInterface:               10,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         52,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 10,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c8gn.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         9,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c8gn.medium\": {\n\t\tInterface:               2,\n\t\tIPv4PerInterface:        4,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         4,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c8gn.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c8i-flex.12xlarge\": {\n\t\tInterface:               12,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         110,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 12,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c8i-flex.16xlarge\": {\n\t\tInterface:               16,\n\t\tIPv4PerInterface:        64,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         106,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 16,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c8i-flex.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c8i-flex.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         34,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c8i-flex.8xlarge\": {\n\t\tInterface:               10,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         52,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 10,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c8i-flex.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        20,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         3,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c8i-flex.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         8,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c8i.12xlarge\": {\n\t\tInterface:               12,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         110,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 12,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c8i.16xlarge\": {\n\t\tInterface:               16,\n\t\tIPv4PerInterface:        64,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         106,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 16,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c8i.24xlarge\": {\n\t\tInterface:               16,\n\t\tIPv4PerInterface:        64,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         106,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 16,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c8i.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c8i.32xlarge\": {\n\t\tInterface:               24,\n\t\tIPv4PerInterface:        64,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         98,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 24,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c8i.48xlarge\": {\n\t\tInterface:               24,\n\t\tIPv4PerInterface:        64,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         98,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 24,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c8i.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c8i.8xlarge\": {\n\t\tInterface:               10,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         82,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 10,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c8i.96xlarge\": {\n\t\tInterface:               24,\n\t\tIPv4PerInterface:        64,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         98,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 24,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c8i.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        20,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         9,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"c8i.metal-48xl\": {\n\t\tInterface:               24,\n\t\tIPv4PerInterface:        64,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         98,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 24,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"c8i.metal-96xl\": {\n\t\tInterface:               24,\n\t\tIPv4PerInterface:        64,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         98,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 24,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"c8i.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"d2.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"xen\",\n\t\tIsBareMetal: false,\n\t},\n\t\"d2.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"xen\",\n\t\tIsBareMetal: false,\n\t},\n\t\"d2.8xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"xen\",\n\t\tIsBareMetal: false,\n\t},\n\t\"d2.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"xen\",\n\t\tIsBareMetal: false,\n\t},\n\t\"d3.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        5,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         92,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"d3.4xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         118,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"d3.8xlarge\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        20,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         119,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"d3.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        3,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         42,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"d3en.12xlarge\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         119,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"d3en.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        5,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         58,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"d3en.4xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         118,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"d3en.6xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         118,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"d3en.8xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        20,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         118,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"d3en.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        3,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         24,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"dl1.24xlarge\": {\n\t\tInterface:               60,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         62,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         1,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         2,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         3,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"dl2q.24xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"f1.16xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"xen\",\n\t\tIsBareMetal: false,\n\t},\n\t\"f1.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"xen\",\n\t\tIsBareMetal: false,\n\t},\n\t\"f1.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"xen\",\n\t\tIsBareMetal: false,\n\t},\n\t\"f2.12xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         114,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"f2.48xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"f2.6xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         84,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"g4ad.16xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         6,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"g4ad.2xlarge\": {\n\t\tInterface:               2,\n\t\tIPv4PerInterface:        4,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         12,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"g4ad.4xlarge\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         11,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"g4ad.8xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         10,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"g4ad.xlarge\": {\n\t\tInterface:               2,\n\t\tIPv4PerInterface:        4,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         12,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"g4dn.12xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"g4dn.16xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         118,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"g4dn.2xlarge\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         39,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"g4dn.4xlarge\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         59,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"g4dn.8xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         58,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"g4dn.metal\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"g4dn.xlarge\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         39,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"g5.12xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"g5.16xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         114,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"g5.24xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"g5.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         17,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"g5.48xlarge\": {\n\t\tInterface:               7,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         115,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 7,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"g5.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         34,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"g5.8xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         84,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"g5.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         4,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"g5g.16xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"g5g.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"g5g.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"g5g.8xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"g5g.metal\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"g5g.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"g6.12xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         114,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"g6.16xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"g6.24xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"g6.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"g6.48xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"g6.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"g6.8xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         84,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"g6.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"g6e.12xlarge\": {\n\t\tInterface:               10,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         112,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 10,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"g6e.16xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"g6e.24xlarge\": {\n\t\tInterface:               20,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         102,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 10,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 10,\n\t\t\t\tNetworkCardIndex:         1,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"g6e.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"g6e.48xlarge\": {\n\t\tInterface:               40,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         82,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 10,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 10,\n\t\t\t\tNetworkCardIndex:         1,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 10,\n\t\t\t\tNetworkCardIndex:         2,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 10,\n\t\t\t\tNetworkCardIndex:         3,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"g6e.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"g6e.8xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         84,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"g6e.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"g6f.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"g6f.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"g6f.large\": {\n\t\tInterface:               2,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         10,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"g6f.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"gr6.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"gr6.8xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         84,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"gr6f.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"h1.16xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"xen\",\n\t\tIsBareMetal: false,\n\t},\n\t\"h1.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"xen\",\n\t\tIsBareMetal: false,\n\t},\n\t\"h1.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"xen\",\n\t\tIsBareMetal: false,\n\t},\n\t\"h1.8xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"xen\",\n\t\tIsBareMetal: false,\n\t},\n\t\"i2.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"xen\",\n\t\tIsBareMetal: false,\n\t},\n\t\"i2.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"xen\",\n\t\tIsBareMetal: false,\n\t},\n\t\"i2.8xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"xen\",\n\t\tIsBareMetal: false,\n\t},\n\t\"i2.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"xen\",\n\t\tIsBareMetal: false,\n\t},\n\t\"i3.16xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"xen\",\n\t\tIsBareMetal: false,\n\t},\n\t\"i3.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"xen\",\n\t\tIsBareMetal: false,\n\t},\n\t\"i3.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"xen\",\n\t\tIsBareMetal: false,\n\t},\n\t\"i3.8xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"xen\",\n\t\tIsBareMetal: false,\n\t},\n\t\"i3.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"xen\",\n\t\tIsBareMetal: false,\n\t},\n\t// i3.metal is removed from latest EC2 update. We keep it for now for compatibility\n\t\"i3.metal\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         120,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"i3.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"xen\",\n\t\tIsBareMetal: false,\n\t},\n\t\"i3en.12xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"i3en.24xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"i3en.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         28,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"i3en.3xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"i3en.6xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"i3en.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         5,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"i3en.metal\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"i3en.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         12,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"i4g.16xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"i4g.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"i4g.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"i4g.8xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"i4g.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         9,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"i4g.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"i4i.12xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         112,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"i4i.16xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         120,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"i4i.24xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         105,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"i4i.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         26,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"i4i.32xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         120,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"i4i.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         52,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"i4i.8xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         112,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"i4i.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"i4i.metal\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         120,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"i4i.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         6,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"i7i.12xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         84,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"i7i.16xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"i7i.24xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"i7i.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"i7i.48xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"i7i.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"i7i.8xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         84,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"i7i.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         9,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"i7i.metal-24xl\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"i7i.metal-48xl\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"i7i.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"i7ie.12xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"i7ie.18xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"i7ie.24xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"i7ie.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         27,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"i7ie.3xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         27,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"i7ie.48xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"i7ie.6xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"i7ie.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         19,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"i7ie.metal-24xl\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"i7ie.metal-48xl\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"i7ie.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         27,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"i8g.12xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"i8g.16xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"i8g.24xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"i8g.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"i8g.48xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"i8g.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"i8g.8xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"i8g.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         9,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"i8g.metal-24xl\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"i8g.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"i8ge.12xlarge\": {\n\t\tInterface:               12,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         50,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 12,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"i8ge.18xlarge\": {\n\t\tInterface:               16,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         106,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 16,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"i8ge.24xlarge\": {\n\t\tInterface:               16,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         106,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 16,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"i8ge.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         27,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"i8ge.3xlarge\": {\n\t\tInterface:               6,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         25,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 6,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"i8ge.48xlarge\": {\n\t\tInterface:               24,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         98,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 24,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"i8ge.6xlarge\": {\n\t\tInterface:               10,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         52,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 10,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"i8ge.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         19,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"i8ge.metal-24xl\": {\n\t\tInterface:               16,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         106,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 16,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"i8ge.metal-48xl\": {\n\t\tInterface:               24,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         98,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 24,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"i8ge.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         27,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"im4gn.16xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"im4gn.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"im4gn.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"im4gn.8xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"im4gn.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         9,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"im4gn.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"inf1.24xlarge\": {\n\t\tInterface:               11,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         111,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 11,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"inf1.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"inf1.6xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"inf1.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"inf2.24xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"inf2.48xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"inf2.8xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         84,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"inf2.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"is4gen.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"is4gen.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"is4gen.8xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"is4gen.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         9,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"is4gen.medium\": {\n\t\tInterface:               2,\n\t\tIPv4PerInterface:        4,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         4,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"is4gen.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m1.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"xen\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m1.medium\": {\n\t\tInterface:               2,\n\t\tIPv4PerInterface:        6,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"xen\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m1.small\": {\n\t\tInterface:               2,\n\t\tIPv4PerInterface:        4,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"xen\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m1.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"xen\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m2.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"xen\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m2.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"xen\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m2.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"xen\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m3.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"xen\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m3.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"xen\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m3.medium\": {\n\t\tInterface:               2,\n\t\tIPv4PerInterface:        6,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"xen\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m3.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"xen\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m4.10xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"xen\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m4.16xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"xen\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m4.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"xen\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m4.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"xen\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m4.large\": {\n\t\tInterface:               2,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"xen\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m4.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"xen\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m5.12xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m5.16xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m5.24xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m5.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m5.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m5.8xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m5.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         9,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m5.metal\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         120,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"m5.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m5a.12xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m5a.16xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m5a.24xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m5a.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m5a.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m5a.8xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m5a.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         9,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m5a.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m5ad.12xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m5ad.16xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m5ad.24xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m5ad.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m5ad.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m5ad.8xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m5ad.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         9,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m5ad.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m5d.12xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m5d.16xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m5d.24xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m5d.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m5d.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m5d.8xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m5d.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         9,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m5d.metal\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"m5d.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m5dn.12xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m5dn.16xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m5dn.24xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m5dn.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m5dn.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m5dn.8xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m5dn.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         9,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m5dn.metal\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"m5dn.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m5n.12xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m5n.16xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m5n.24xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m5n.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m5n.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m5n.8xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m5n.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         9,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m5n.metal\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"m5n.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m5zn.12xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m5zn.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         62,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m5zn.3xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         92,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m5zn.6xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         114,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m5zn.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         13,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m5zn.metal\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"m5zn.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         29,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m6a.12xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         114,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m6a.16xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m6a.24xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m6a.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m6a.32xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m6a.48xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m6a.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m6a.8xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         84,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m6a.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         9,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m6a.metal\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"m6a.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m6g.12xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m6g.16xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m6g.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m6g.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m6g.8xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m6g.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         9,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m6g.medium\": {\n\t\tInterface:               2,\n\t\tIPv4PerInterface:        4,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         4,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m6g.metal\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"m6g.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m6gd.12xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m6gd.16xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m6gd.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m6gd.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m6gd.8xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m6gd.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         9,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m6gd.medium\": {\n\t\tInterface:               2,\n\t\tIPv4PerInterface:        4,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         4,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m6gd.metal\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"m6gd.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m6i.12xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         114,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m6i.16xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m6i.24xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m6i.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m6i.32xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m6i.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m6i.8xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         84,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m6i.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         9,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m6i.metal\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"m6i.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m6id.12xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         114,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m6id.16xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m6id.24xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m6id.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m6id.32xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m6id.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m6id.8xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         84,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m6id.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         9,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m6id.metal\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"m6id.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m6idn.12xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         114,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m6idn.16xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m6idn.24xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m6idn.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m6idn.32xlarge\": {\n\t\tInterface:               16,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         106,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         1,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m6idn.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m6idn.8xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         84,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m6idn.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         9,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m6idn.metal\": {\n\t\tInterface:               16,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         106,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         1,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"m6idn.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m6in.12xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         114,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m6in.16xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m6in.24xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m6in.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m6in.32xlarge\": {\n\t\tInterface:               16,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         106,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         1,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m6in.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m6in.8xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         84,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m6in.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         9,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m6in.metal\": {\n\t\tInterface:               16,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         106,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         1,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"m6in.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m7a.12xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         114,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m7a.16xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m7a.24xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m7a.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m7a.32xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m7a.48xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m7a.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m7a.8xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         84,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m7a.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         9,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m7a.medium\": {\n\t\tInterface:               2,\n\t\tIPv4PerInterface:        4,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         4,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m7a.metal-48xl\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"m7a.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m7g.12xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m7g.16xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m7g.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m7g.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m7g.8xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m7g.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         9,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m7g.medium\": {\n\t\tInterface:               2,\n\t\tIPv4PerInterface:        4,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         4,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m7g.metal\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"m7g.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m7gd.12xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m7gd.16xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m7gd.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m7gd.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m7gd.8xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m7gd.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         9,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m7gd.medium\": {\n\t\tInterface:               2,\n\t\tIPv4PerInterface:        4,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         4,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m7gd.metal\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"m7gd.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m7i-flex.12xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         114,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m7i-flex.16xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m7i-flex.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m7i-flex.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         34,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m7i-flex.8xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m7i-flex.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         3,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m7i-flex.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         8,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m7i.12xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         114,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m7i.16xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m7i.24xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m7i.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m7i.48xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m7i.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m7i.8xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         84,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m7i.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         9,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m7i.metal-24xl\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"m7i.metal-48xl\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"m7i.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m8a.12xlarge\": {\n\t\tInterface:               12,\n\t\tIPv4PerInterface:        64,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         110,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 12,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m8a.16xlarge\": {\n\t\tInterface:               16,\n\t\tIPv4PerInterface:        64,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         106,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 16,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m8a.24xlarge\": {\n\t\tInterface:               16,\n\t\tIPv4PerInterface:        64,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         106,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 16,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m8a.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        40,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m8a.48xlarge\": {\n\t\tInterface:               24,\n\t\tIPv4PerInterface:        64,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         98,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 24,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m8a.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        40,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m8a.8xlarge\": {\n\t\tInterface:               10,\n\t\tIPv4PerInterface:        40,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         82,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 10,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m8a.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        20,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         9,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m8a.medium\": {\n\t\tInterface:               2,\n\t\tIPv4PerInterface:        4,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         4,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m8a.metal-24xl\": {\n\t\tInterface:               16,\n\t\tIPv4PerInterface:        64,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         106,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 16,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"m8a.metal-48xl\": {\n\t\tInterface:               24,\n\t\tIPv4PerInterface:        64,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         98,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 24,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"m8a.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        20,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m8g.12xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m8g.16xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m8g.24xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m8g.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m8g.48xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m8g.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m8g.8xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m8g.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         9,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m8g.medium\": {\n\t\tInterface:               2,\n\t\tIPv4PerInterface:        4,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         4,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m8g.metal-24xl\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"m8g.metal-48xl\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"m8g.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m8gb.12xlarge\": {\n\t\tInterface:               12,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         50,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 12,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m8gb.16xlarge\": {\n\t\tInterface:               16,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         106,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 16,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m8gb.24xlarge\": {\n\t\tInterface:               24,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         98,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 24,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m8gb.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m8gb.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m8gb.8xlarge\": {\n\t\tInterface:               10,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         52,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 10,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m8gb.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         9,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m8gb.medium\": {\n\t\tInterface:               2,\n\t\tIPv4PerInterface:        4,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         4,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m8gb.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m8gd.12xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m8gd.16xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m8gd.24xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m8gd.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m8gd.48xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m8gd.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m8gd.8xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m8gd.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         9,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m8gd.medium\": {\n\t\tInterface:               2,\n\t\tIPv4PerInterface:        4,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         4,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m8gd.metal-24xl\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"m8gd.metal-48xl\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"m8gd.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m8gn.12xlarge\": {\n\t\tInterface:               12,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         50,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 12,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m8gn.16xlarge\": {\n\t\tInterface:               16,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         106,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 16,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m8gn.24xlarge\": {\n\t\tInterface:               24,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         98,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 24,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m8gn.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m8gn.48xlarge\": {\n\t\tInterface:               24,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         98,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 12,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 12,\n\t\t\t\tNetworkCardIndex:         1,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m8gn.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m8gn.8xlarge\": {\n\t\tInterface:               10,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         52,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 10,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m8gn.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         9,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m8gn.medium\": {\n\t\tInterface:               2,\n\t\tIPv4PerInterface:        4,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         4,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m8gn.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m8i-flex.12xlarge\": {\n\t\tInterface:               12,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         110,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 12,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m8i-flex.16xlarge\": {\n\t\tInterface:               16,\n\t\tIPv4PerInterface:        64,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         106,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 16,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m8i-flex.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m8i-flex.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         34,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m8i-flex.8xlarge\": {\n\t\tInterface:               10,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         52,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 10,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m8i-flex.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        20,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         3,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m8i-flex.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         8,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m8i.12xlarge\": {\n\t\tInterface:               12,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         110,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 12,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m8i.16xlarge\": {\n\t\tInterface:               16,\n\t\tIPv4PerInterface:        64,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         106,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 16,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m8i.24xlarge\": {\n\t\tInterface:               16,\n\t\tIPv4PerInterface:        64,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         106,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 16,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m8i.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m8i.32xlarge\": {\n\t\tInterface:               24,\n\t\tIPv4PerInterface:        64,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         98,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 24,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m8i.48xlarge\": {\n\t\tInterface:               24,\n\t\tIPv4PerInterface:        64,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         98,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 24,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m8i.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m8i.8xlarge\": {\n\t\tInterface:               10,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         82,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 10,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m8i.96xlarge\": {\n\t\tInterface:               24,\n\t\tIPv4PerInterface:        64,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         98,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 24,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m8i.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        20,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         9,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"m8i.metal-48xl\": {\n\t\tInterface:               24,\n\t\tIPv4PerInterface:        64,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         98,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 24,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"m8i.metal-96xl\": {\n\t\tInterface:               24,\n\t\tIPv4PerInterface:        64,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         98,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 24,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"m8i.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"mac-m4.metal\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         6,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"mac-m4pro.metal\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         6,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"mac1.metal\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         6,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"mac2-m1ultra.metal\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         6,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"mac2-m2.metal\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         6,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"mac2-m2pro.metal\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         6,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"mac2.metal\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         6,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"p3.16xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"xen\",\n\t\tIsBareMetal: false,\n\t},\n\t\"p3.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"xen\",\n\t\tIsBareMetal: false,\n\t},\n\t\"p3.8xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"xen\",\n\t\tIsBareMetal: false,\n\t},\n\t\"p3dn.24xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"p4d.24xlarge\": {\n\t\tInterface:               60,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         62,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         1,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         2,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         3,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"p4de.24xlarge\": {\n\t\tInterface:               60,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         62,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         1,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         2,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         3,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"p5.48xlarge\": {\n\t\tInterface:               64,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         120,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         1,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         2,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         3,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         4,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         5,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         6,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         7,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         8,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         9,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         10,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         11,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         12,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         13,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         14,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         15,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         16,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         17,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         18,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         19,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         20,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         21,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         22,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         23,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         24,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         25,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         26,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         27,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         28,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         29,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         30,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         31,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"p5.4xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         58,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"p5e.48xlarge\": {\n\t\tInterface:               64,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         120,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         1,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         2,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         3,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         4,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         5,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         6,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         7,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         8,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         9,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         10,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         11,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         12,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         13,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         14,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         15,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         16,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         17,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         18,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         19,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         20,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         21,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         22,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         23,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         24,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         25,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         26,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         27,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         28,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         29,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         30,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         31,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"p5en.48xlarge\": {\n\t\tInterface:               64,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         120,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         1,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         2,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         3,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         4,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         5,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         6,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         7,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         8,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         9,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         10,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         11,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         12,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         13,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         14,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         15,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"p6-b200.48xlarge\": {\n\t\tInterface:               32,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         120,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         1,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         2,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         3,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         4,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         5,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         6,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         7,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"p6-b300.48xlarge\": {\n\t\tInterface:               68,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         120,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         1,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         2,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         3,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         4,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         5,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         6,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         7,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         8,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         9,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         10,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         11,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         12,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         13,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         14,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         15,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         16,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r3.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"xen\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r3.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"xen\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r3.8xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"xen\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r3.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"xen\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r3.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"xen\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r4.16xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"xen\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r4.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"xen\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r4.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"xen\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r4.8xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"xen\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r4.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"xen\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r4.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"xen\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r5.12xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r5.16xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r5.24xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r5.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r5.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r5.8xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r5.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         9,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r5.metal\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         120,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"r5.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r5a.12xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r5a.16xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r5a.24xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r5a.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r5a.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r5a.8xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r5a.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         9,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r5a.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r5ad.12xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r5ad.16xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r5ad.24xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r5ad.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r5ad.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r5ad.8xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r5ad.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         9,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r5ad.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r5b.12xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r5b.16xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r5b.24xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r5b.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r5b.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r5b.8xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r5b.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         9,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r5b.metal\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"r5b.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r5d.12xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r5d.16xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r5d.24xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r5d.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r5d.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r5d.8xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r5d.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         9,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r5d.metal\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"r5d.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r5dn.12xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r5dn.16xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r5dn.24xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r5dn.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r5dn.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r5dn.8xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r5dn.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         9,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r5dn.metal\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"r5dn.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r5n.12xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r5n.16xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r5n.24xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r5n.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r5n.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r5n.8xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r5n.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         9,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r5n.metal\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"r5n.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r6a.12xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         114,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r6a.16xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r6a.24xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r6a.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r6a.32xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r6a.48xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r6a.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r6a.8xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         84,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r6a.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         9,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r6a.metal\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"r6a.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r6g.12xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r6g.16xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r6g.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r6g.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r6g.8xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r6g.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         9,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r6g.medium\": {\n\t\tInterface:               2,\n\t\tIPv4PerInterface:        4,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         4,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r6g.metal\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"r6g.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r6gd.12xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r6gd.16xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r6gd.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r6gd.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r6gd.8xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r6gd.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         9,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r6gd.medium\": {\n\t\tInterface:               2,\n\t\tIPv4PerInterface:        4,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         4,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r6gd.metal\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"r6gd.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r6i.12xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         114,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r6i.16xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r6i.24xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r6i.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r6i.32xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r6i.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r6i.8xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         84,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r6i.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         9,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r6i.metal\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"r6i.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r6id.12xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         114,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r6id.16xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r6id.24xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r6id.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r6id.32xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r6id.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r6id.8xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         84,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r6id.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         9,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r6id.metal\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"r6id.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r6idn.12xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         114,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r6idn.16xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r6idn.24xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r6idn.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r6idn.32xlarge\": {\n\t\tInterface:               16,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         106,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         1,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r6idn.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r6idn.8xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         84,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r6idn.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         9,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r6idn.metal\": {\n\t\tInterface:               16,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         106,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         1,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"r6idn.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r6in.12xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         114,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r6in.16xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r6in.24xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r6in.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r6in.32xlarge\": {\n\t\tInterface:               16,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         106,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         1,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r6in.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r6in.8xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         84,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r6in.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         9,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r6in.metal\": {\n\t\tInterface:               16,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         106,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         1,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"r6in.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r7a.12xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         114,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r7a.16xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r7a.24xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r7a.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r7a.32xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r7a.48xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r7a.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r7a.8xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         84,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r7a.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         9,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r7a.medium\": {\n\t\tInterface:               2,\n\t\tIPv4PerInterface:        4,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         4,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r7a.metal-48xl\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"r7a.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r7g.12xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r7g.16xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r7g.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r7g.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r7g.8xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r7g.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         9,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r7g.medium\": {\n\t\tInterface:               2,\n\t\tIPv4PerInterface:        4,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         4,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r7g.metal\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"r7g.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r7gd.12xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r7gd.16xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r7gd.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r7gd.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r7gd.8xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r7gd.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         9,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r7gd.medium\": {\n\t\tInterface:               2,\n\t\tIPv4PerInterface:        4,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         4,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r7gd.metal\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"r7gd.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r7i.12xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         114,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r7i.16xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r7i.24xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r7i.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r7i.48xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r7i.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r7i.8xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         84,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r7i.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         9,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r7i.metal-24xl\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"r7i.metal-48xl\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"r7i.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r7iz.12xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         114,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r7iz.16xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r7iz.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r7iz.32xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r7iz.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r7iz.8xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         84,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r7iz.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         9,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r7iz.metal-16xl\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"r7iz.metal-32xl\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"r7iz.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r8a.12xlarge\": {\n\t\tInterface:               12,\n\t\tIPv4PerInterface:        64,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         110,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 12,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r8a.16xlarge\": {\n\t\tInterface:               16,\n\t\tIPv4PerInterface:        64,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         106,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 16,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r8a.24xlarge\": {\n\t\tInterface:               16,\n\t\tIPv4PerInterface:        64,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         106,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 16,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r8a.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        40,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r8a.48xlarge\": {\n\t\tInterface:               24,\n\t\tIPv4PerInterface:        64,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         98,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 24,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r8a.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        40,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r8a.8xlarge\": {\n\t\tInterface:               10,\n\t\tIPv4PerInterface:        40,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         82,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 10,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r8a.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        20,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         9,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r8a.medium\": {\n\t\tInterface:               2,\n\t\tIPv4PerInterface:        4,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         4,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r8a.metal-24xl\": {\n\t\tInterface:               16,\n\t\tIPv4PerInterface:        64,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         106,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 16,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"r8a.metal-48xl\": {\n\t\tInterface:               24,\n\t\tIPv4PerInterface:        64,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         98,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 24,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"r8a.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        20,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r8g.12xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r8g.16xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r8g.24xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r8g.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r8g.48xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r8g.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r8g.8xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r8g.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         9,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r8g.medium\": {\n\t\tInterface:               2,\n\t\tIPv4PerInterface:        4,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         4,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r8g.metal-24xl\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"r8g.metal-48xl\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"r8g.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r8gb.12xlarge\": {\n\t\tInterface:               12,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         50,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 12,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r8gb.16xlarge\": {\n\t\tInterface:               16,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         106,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 16,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r8gb.24xlarge\": {\n\t\tInterface:               24,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         98,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 24,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r8gb.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r8gb.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r8gb.8xlarge\": {\n\t\tInterface:               10,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         52,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 10,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r8gb.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         9,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r8gb.medium\": {\n\t\tInterface:               2,\n\t\tIPv4PerInterface:        4,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         4,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r8gb.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r8gd.12xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r8gd.16xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r8gd.24xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r8gd.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r8gd.48xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r8gd.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r8gd.8xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r8gd.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         9,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r8gd.medium\": {\n\t\tInterface:               2,\n\t\tIPv4PerInterface:        4,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         4,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r8gd.metal-24xl\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"r8gd.metal-48xl\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"r8gd.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r8gn.12xlarge\": {\n\t\tInterface:               12,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         50,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 12,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r8gn.16xlarge\": {\n\t\tInterface:               16,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         106,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 16,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r8gn.24xlarge\": {\n\t\tInterface:               24,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         98,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 24,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r8gn.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r8gn.48xlarge\": {\n\t\tInterface:               24,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         98,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 12,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 12,\n\t\t\t\tNetworkCardIndex:         1,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r8gn.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r8gn.8xlarge\": {\n\t\tInterface:               10,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         52,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 10,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r8gn.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         9,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r8gn.medium\": {\n\t\tInterface:               2,\n\t\tIPv4PerInterface:        4,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         4,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r8gn.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r8i-flex.12xlarge\": {\n\t\tInterface:               12,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         110,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 12,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r8i-flex.16xlarge\": {\n\t\tInterface:               16,\n\t\tIPv4PerInterface:        64,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         106,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 16,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r8i-flex.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r8i-flex.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         34,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r8i-flex.8xlarge\": {\n\t\tInterface:               10,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         52,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 10,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r8i-flex.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        20,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         3,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r8i-flex.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         8,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r8i.12xlarge\": {\n\t\tInterface:               12,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         110,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 12,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r8i.16xlarge\": {\n\t\tInterface:               16,\n\t\tIPv4PerInterface:        64,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         106,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 16,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r8i.24xlarge\": {\n\t\tInterface:               16,\n\t\tIPv4PerInterface:        64,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         106,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 16,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r8i.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r8i.32xlarge\": {\n\t\tInterface:               24,\n\t\tIPv4PerInterface:        64,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         98,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 24,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r8i.48xlarge\": {\n\t\tInterface:               24,\n\t\tIPv4PerInterface:        64,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         98,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 24,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r8i.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r8i.8xlarge\": {\n\t\tInterface:               10,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         82,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 10,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r8i.96xlarge\": {\n\t\tInterface:               24,\n\t\tIPv4PerInterface:        64,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         98,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 24,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r8i.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        20,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         9,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"r8i.metal-48xl\": {\n\t\tInterface:               24,\n\t\tIPv4PerInterface:        64,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         98,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 24,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"r8i.metal-96xl\": {\n\t\tInterface:               24,\n\t\tIPv4PerInterface:        64,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         98,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 24,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"r8i.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"t1.micro\": {\n\t\tInterface:               2,\n\t\tIPv4PerInterface:        2,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"xen\",\n\t\tIsBareMetal: false,\n\t},\n\t\"t2.2xlarge\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"xen\",\n\t\tIsBareMetal: false,\n\t},\n\t\"t2.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        12,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"xen\",\n\t\tIsBareMetal: false,\n\t},\n\t\"t2.medium\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        6,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"xen\",\n\t\tIsBareMetal: false,\n\t},\n\t\"t2.micro\": {\n\t\tInterface:               2,\n\t\tIPv4PerInterface:        2,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"xen\",\n\t\tIsBareMetal: false,\n\t},\n\t\"t2.nano\": {\n\t\tInterface:               2,\n\t\tIPv4PerInterface:        2,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"xen\",\n\t\tIsBareMetal: false,\n\t},\n\t\"t2.small\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        4,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"xen\",\n\t\tIsBareMetal: false,\n\t},\n\t\"t2.xlarge\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"xen\",\n\t\tIsBareMetal: false,\n\t},\n\t\"t3.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"t3.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        12,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"t3.medium\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        6,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"t3.micro\": {\n\t\tInterface:               2,\n\t\tIPv4PerInterface:        2,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"t3.nano\": {\n\t\tInterface:               2,\n\t\tIPv4PerInterface:        2,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"t3.small\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        4,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"t3.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"t3a.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"t3a.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        12,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"t3a.medium\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        6,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"t3a.micro\": {\n\t\tInterface:               2,\n\t\tIPv4PerInterface:        2,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"t3a.nano\": {\n\t\tInterface:               2,\n\t\tIPv4PerInterface:        2,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"t3a.small\": {\n\t\tInterface:               2,\n\t\tIPv4PerInterface:        4,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"t3a.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"t4g.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"t4g.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        12,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"t4g.medium\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        6,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"t4g.micro\": {\n\t\tInterface:               2,\n\t\tIPv4PerInterface:        2,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"t4g.nano\": {\n\t\tInterface:               2,\n\t\tIPv4PerInterface:        2,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"t4g.small\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        4,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"t4g.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"trn1.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         17,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"trn1.32xlarge\": {\n\t\tInterface:               40,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         82,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 5,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 5,\n\t\t\t\tNetworkCardIndex:         1,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 5,\n\t\t\t\tNetworkCardIndex:         2,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 5,\n\t\t\t\tNetworkCardIndex:         3,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 5,\n\t\t\t\tNetworkCardIndex:         4,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 5,\n\t\t\t\tNetworkCardIndex:         5,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 5,\n\t\t\t\tNetworkCardIndex:         6,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 5,\n\t\t\t\tNetworkCardIndex:         7,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"trn1n.32xlarge\": {\n\t\tInterface:               80,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         120,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 5,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 5,\n\t\t\t\tNetworkCardIndex:         1,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 5,\n\t\t\t\tNetworkCardIndex:         2,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 5,\n\t\t\t\tNetworkCardIndex:         3,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 5,\n\t\t\t\tNetworkCardIndex:         4,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 5,\n\t\t\t\tNetworkCardIndex:         5,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 5,\n\t\t\t\tNetworkCardIndex:         6,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 5,\n\t\t\t\tNetworkCardIndex:         7,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 5,\n\t\t\t\tNetworkCardIndex:         8,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 5,\n\t\t\t\tNetworkCardIndex:         9,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 5,\n\t\t\t\tNetworkCardIndex:         10,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 5,\n\t\t\t\tNetworkCardIndex:         11,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 5,\n\t\t\t\tNetworkCardIndex:         12,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 5,\n\t\t\t\tNetworkCardIndex:         13,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 5,\n\t\t\t\tNetworkCardIndex:         14,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 5,\n\t\t\t\tNetworkCardIndex:         15,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"u-3tb1.56xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         6,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"u-6tb1.112xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"u-6tb1.56xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"u7i-12tb.224xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"u7i-6tb.112xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"u7i-8tb.112xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"u7in-16tb.224xlarge\": {\n\t\tInterface:               16,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         106,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         1,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"u7in-24tb.224xlarge\": {\n\t\tInterface:               16,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         106,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         1,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"u7in-32tb.224xlarge\": {\n\t\tInterface:               16,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         106,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         1,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"vt1.24xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"vt1.3xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"vt1.6xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"x1.16xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"xen\",\n\t\tIsBareMetal: false,\n\t},\n\t\"x1.32xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"xen\",\n\t\tIsBareMetal: false,\n\t},\n\t\"x1e.16xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"xen\",\n\t\tIsBareMetal: false,\n\t},\n\t\"x1e.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"xen\",\n\t\tIsBareMetal: false,\n\t},\n\t\"x1e.32xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"xen\",\n\t\tIsBareMetal: false,\n\t},\n\t\"x1e.4xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"xen\",\n\t\tIsBareMetal: false,\n\t},\n\t\"x1e.8xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"xen\",\n\t\tIsBareMetal: false,\n\t},\n\t\"x1e.xlarge\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    false,\n\t\tBranchInterface:         0,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"xen\",\n\t\tIsBareMetal: false,\n\t},\n\t\"x2gd.12xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"x2gd.16xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"x2gd.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"x2gd.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"x2gd.8xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"x2gd.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         9,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"x2gd.medium\": {\n\t\tInterface:               2,\n\t\tIPv4PerInterface:        4,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         10,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"x2gd.metal\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"x2gd.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"x2idn.16xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"x2idn.24xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"x2idn.32xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"x2idn.metal\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"x2iedn.16xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"x2iedn.24xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"x2iedn.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         27,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"x2iedn.32xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"x2iedn.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"x2iedn.8xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         114,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"x2iedn.metal\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"x2iedn.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         11,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"x2iezn.12xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"x2iezn.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         62,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"x2iezn.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         114,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"x2iezn.6xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         114,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"x2iezn.8xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         114,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"x2iezn.metal\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"x8aedz.12xlarge\": {\n\t\tInterface:               16,\n\t\tIPv4PerInterface:        64,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         106,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 16,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"x8aedz.24xlarge\": {\n\t\tInterface:               16,\n\t\tIPv4PerInterface:        64,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         106,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 16,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"x8aedz.3xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        40,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         34,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"x8aedz.6xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        40,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"x8aedz.large\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        20,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         8,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"x8aedz.metal-12xl\": {\n\t\tInterface:               16,\n\t\tIPv4PerInterface:        64,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         106,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 16,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"x8aedz.metal-24xl\": {\n\t\tInterface:               16,\n\t\tIPv4PerInterface:        64,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         106,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 16,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"x8aedz.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        20,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"x8g.12xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"x8g.16xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"x8g.24xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"x8g.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         38,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"x8g.48xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"x8g.4xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"x8g.8xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"x8g.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         9,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"x8g.medium\": {\n\t\tInterface:               2,\n\t\tIPv4PerInterface:        4,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         4,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 2,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"x8g.metal-24xl\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"x8g.metal-48xl\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"x8g.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         18,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"z1d.12xlarge\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"z1d.2xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         58,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"z1d.3xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"z1d.6xlarge\": {\n\t\tInterface:               8,\n\t\tIPv4PerInterface:        30,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         54,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 8,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"z1d.large\": {\n\t\tInterface:               3,\n\t\tIPv4PerInterface:        10,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         13,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 3,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n\t\"z1d.metal\": {\n\t\tInterface:               15,\n\t\tIPv4PerInterface:        50,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         107,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 15,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"\",\n\t\tIsBareMetal: true,\n\t},\n\t\"z1d.xlarge\": {\n\t\tInterface:               4,\n\t\tIPv4PerInterface:        15,\n\t\tIsTrunkingCompatible:    true,\n\t\tBranchInterface:         28,\n\t\tDefaultNetworkCardIndex: 0,\n\t\tNetworkCards: []NetworkCard{\n\t\t\t{\n\t\t\t\tMaximumNetworkInterfaces: 4,\n\t\t\t\tNetworkCardIndex:         0,\n\t\t\t},\n\t\t},\n\t\tHypervisor:  \"nitro\",\n\t\tIsBareMetal: false,\n\t},\n}\n"
  },
  {
    "path": "pkg/providers/launchtemplate/launchtemplate.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage launchtemplate\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"math\"\n\t\"net\"\n\t\"sync\"\n\t\"sync/atomic\"\n\t\"time\"\n\n\t\"github.com/awslabs/operatorpkg/option\"\n\t\"github.com/awslabs/operatorpkg/serrors\"\n\t\"go.uber.org/multierr\"\n\t\"sigs.k8s.io/controller-runtime/pkg/log\"\n\n\t\"github.com/aws/aws-sdk-go-v2/aws\"\n\t\"github.com/aws/aws-sdk-go-v2/service/ec2\"\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\t\"github.com/aws/aws-sdk-go-v2/service/eks\"\n\t\"github.com/mitchellh/hashstructure/v2\"\n\t\"github.com/patrickmn/go-cache\"\n\t\"github.com/samber/lo\"\n\tcorev1 \"k8s.io/api/core/v1\"\n\t\"k8s.io/apimachinery/pkg/api/resource\"\n\tkarpv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\tawserrors \"github.com/aws/karpenter-provider-aws/pkg/errors\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/operator/options\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/amifamily\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/securitygroup\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/subnet\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/utils\"\n\n\t\"sigs.k8s.io/karpenter/pkg/cloudprovider\"\n\t\"sigs.k8s.io/karpenter/pkg/utils/pretty\"\n\n\tsdk \"github.com/aws/karpenter-provider-aws/pkg/aws\"\n)\n\ntype DefaultProviderOpts = option.Function[defaultProviderOpts]\n\ntype defaultProviderOpts struct {\n\tlaunchModeProvider LaunchModeProvider\n}\n\nfunc WithLaunchModeProvider(provider LaunchModeProvider) DefaultProviderOpts {\n\treturn func(opts *defaultProviderOpts) {\n\t\topts.launchModeProvider = provider\n\t}\n}\n\ntype DefaultProvider struct {\n\tsync.Mutex\n\tLaunchModeProvider\n\tec2api                sdk.EC2API\n\teksapi                sdk.EKSAPI\n\tamiFamily             amifamily.Resolver\n\tsecurityGroupProvider securitygroup.Provider\n\tsubnetProvider        subnet.Provider\n\tcache                 *cache.Cache\n\tcm                    *pretty.ChangeMonitor\n\tKubeDNSIP             net.IP\n\tCABundle              *string\n\tClusterEndpoint       string\n\tClusterCIDR           atomic.Pointer[string]\n\tClusterIPFamily       corev1.IPFamily\n}\n\nfunc NewDefaultProvider(\n\tctx context.Context,\n\tcache *cache.Cache,\n\tec2api sdk.EC2API,\n\teksapi sdk.EKSAPI,\n\tamiFamily amifamily.Resolver,\n\tsecurityGroupProvider securitygroup.Provider,\n\tsubnetProvider subnet.Provider,\n\tcaBundle *string,\n\tstartAsync <-chan struct{},\n\tkubeDNSIP net.IP,\n\tclusterEndpoint string,\n\topts ...DefaultProviderOpts,\n) *DefaultProvider {\n\tresolvedOpts := option.Resolve(opts...)\n\tif resolvedOpts.launchModeProvider == nil {\n\t\tresolvedOpts.launchModeProvider = defaultLaunchModeProvider{}\n\t}\n\tl := &DefaultProvider{\n\t\tLaunchModeProvider:    resolvedOpts.launchModeProvider,\n\t\tec2api:                ec2api,\n\t\teksapi:                eksapi,\n\t\tamiFamily:             amiFamily,\n\t\tsecurityGroupProvider: securityGroupProvider,\n\t\tsubnetProvider:        subnetProvider,\n\t\tcache:                 cache,\n\t\tCABundle:              caBundle,\n\t\tcm:                    pretty.NewChangeMonitor(),\n\t\tKubeDNSIP:             kubeDNSIP,\n\t\tClusterEndpoint:       clusterEndpoint,\n\t\tClusterIPFamily:       lo.Ternary(kubeDNSIP != nil && kubeDNSIP.To4() == nil, corev1.IPv6Protocol, corev1.IPv4Protocol),\n\t}\n\tl.cache.OnEvicted(l.cachedEvictedFunc(ctx))\n\tgo func() {\n\t\t// only hydrate cache once elected leader\n\t\tselect {\n\t\tcase <-startAsync:\n\t\tcase <-ctx.Done():\n\t\t\treturn\n\t\t}\n\t\tl.hydrateCache(ctx)\n\t}()\n\treturn l\n}\n\nfunc (p *DefaultProvider) EnsureAll(\n\tctx context.Context,\n\tnodeClass *v1.EC2NodeClass,\n\tnodeClaim *karpv1.NodeClaim,\n\tinstanceTypes []*cloudprovider.InstanceType,\n\tcapacityType string,\n\ttags map[string]string,\n\ttenancyType string,\n) ([]*LaunchTemplate, error) {\n\tp.Lock()\n\tdefer p.Unlock()\n\n\topts, err := p.CreateAMIOptions(ctx, nodeClass, lo.Assign(\n\t\tnodeClaim.Labels,\n\t\tmap[string]string{karpv1.CapacityTypeLabelKey: capacityType},\n\t), tags)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tresolvedLaunchTemplates, err := p.amiFamily.Resolve(nodeClass, nodeClaim, instanceTypes, capacityType, tenancyType, opts)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tvar launchTemplates []*LaunchTemplate\n\tfor _, resolvedLaunchTemplate := range resolvedLaunchTemplates {\n\t\t// Ensure the launch template exists, or create it\n\t\tec2LaunchTemplate, err := p.ensureLaunchTemplate(ctx, resolvedLaunchTemplate)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tlaunchTemplates = append(launchTemplates, &LaunchTemplate{\n\t\t\tName:                  *ec2LaunchTemplate.LaunchTemplateName,\n\t\t\tInstanceTypes:         resolvedLaunchTemplate.InstanceTypes,\n\t\t\tImageID:               resolvedLaunchTemplate.AMIID,\n\t\t\tCapacityReservationID: resolvedLaunchTemplate.CapacityReservationID,\n\t\t})\n\t}\n\treturn launchTemplates, nil\n}\n\n// InvalidateCache deletes a launch template from cache if it exists\nfunc (p *DefaultProvider) InvalidateCache(ctx context.Context, ltName string, ltID string) {\n\tctx = log.IntoContext(ctx, log.FromContext(ctx).WithValues(\"launch-template-name\", ltName, \"launch-template-id\", ltID))\n\tp.Lock()\n\tdefer p.Unlock()\n\tdefer p.cache.OnEvicted(p.cachedEvictedFunc(ctx))\n\tp.cache.OnEvicted(nil)\n\tlog.FromContext(ctx).V(1).Info(\"invalidating launch template in the cache because it no longer exists\")\n\tp.cache.Delete(ltName)\n}\n\nfunc LaunchTemplateName(options *amifamily.LaunchTemplate) string {\n\treturn fmt.Sprintf(\"%s/%d\", v1.LaunchTemplateNamePrefix, lo.Must(hashstructure.Hash(options, hashstructure.FormatV2, &hashstructure.HashOptions{SlicesAsSets: true})))\n}\n\nfunc (p *DefaultProvider) CreateAMIOptions(ctx context.Context, nodeClass *v1.EC2NodeClass, labels, tags map[string]string) (*amifamily.Options, error) {\n\tlabels = InjectDoNotSyncTaintsLabel(nodeClass.AMIFamily(), labels)\n\t// Relying on the status rather than an API call means that Karpenter is subject to a race\n\t// condition where EC2NodeClass spec changes haven't propagated to the status once a node\n\t// has launched.\n\t// If a user changes their EC2NodeClass and shortly after Karpenter launches a node,\n\t// in the worst case, the node could be drifted and re-created.\n\t// TODO @aengeda: add status generation fields to gate node creation until the status is updated from a spec change\n\t// Get constrained security groups\n\tif len(nodeClass.Status.SecurityGroups) == 0 {\n\t\treturn nil, fmt.Errorf(\"no security groups are present in the status\")\n\t}\n\treturn &amifamily.Options{\n\t\tClusterName:              options.FromContext(ctx).ClusterName,\n\t\tClusterEndpoint:          p.ClusterEndpoint,\n\t\tClusterCIDR:              p.ClusterCIDR.Load(),\n\t\tInstanceProfile:          nodeClass.Status.InstanceProfile,\n\t\tInstanceStorePolicy:      nodeClass.Spec.InstanceStorePolicy,\n\t\tAMISelectorTerms:         nodeClass.Spec.AMISelectorTerms,\n\t\tAMIs:                     nodeClass.Status.AMIs,\n\t\tSecurityGroups:           nodeClass.Status.SecurityGroups,\n\t\tTags:                     tags,\n\t\tLabels:                   labels,\n\t\tCABundle:                 p.CABundle,\n\t\tKubeDNSIP:                p.KubeDNSIP,\n\t\tAssociatePublicIPAddress: nodeClass.Spec.AssociatePublicIPAddress,\n\t\tIPPrefixCount:            nodeClass.Spec.IPPrefixCount,\n\t\tNodeClassName:            nodeClass.Name,\n\t}, nil\n}\n\nfunc (p *DefaultProvider) ensureLaunchTemplate(ctx context.Context, options *amifamily.LaunchTemplate) (ec2types.LaunchTemplate, error) {\n\tvar launchTemplate ec2types.LaunchTemplate\n\tname := LaunchTemplateName(options)\n\tctx = log.IntoContext(ctx, log.FromContext(ctx).WithValues(\"launch-template-name\", name))\n\t// Read from cache\n\tif launchTemplate, ok := p.cache.Get(name); ok {\n\t\tp.cache.SetDefault(name, launchTemplate)\n\t\treturn launchTemplate.(ec2types.LaunchTemplate), nil\n\t}\n\t// Attempt to find an existing LT.\n\toutput, err := p.ec2api.DescribeLaunchTemplates(ctx, &ec2.DescribeLaunchTemplatesInput{\n\t\tLaunchTemplateNames: []string{name},\n\t})\n\t// Create LT if one doesn't exist\n\tif awserrors.IsNotFound(err) {\n\t\tlaunchTemplate, err = p.createLaunchTemplate(ctx, options)\n\t\tif err != nil {\n\t\t\treturn ec2types.LaunchTemplate{}, fmt.Errorf(\"creating launch template, %w\", err)\n\t\t}\n\t} else if err != nil {\n\t\treturn ec2types.LaunchTemplate{}, fmt.Errorf(\"describing launch templates, %w\", err)\n\t} else if len(output.LaunchTemplates) != 1 {\n\t\treturn ec2types.LaunchTemplate{}, serrors.Wrap(fmt.Errorf(\"expected to find one launch template\"), \"launch-template-count\", len(output.LaunchTemplates))\n\t} else {\n\t\tif p.cm.HasChanged(\"launchtemplate-\"+name, name) {\n\t\t\tlog.FromContext(ctx).V(1).Info(\"discovered launch template\")\n\t\t}\n\t\tlaunchTemplate = output.LaunchTemplates[0]\n\t}\n\tp.cache.SetDefault(name, launchTemplate)\n\treturn launchTemplate, nil\n}\n\nfunc (p *DefaultProvider) createLaunchTemplate(ctx context.Context, options *amifamily.LaunchTemplate) (ec2types.LaunchTemplate, error) {\n\tuserData, err := options.UserData.Script(ctx)\n\tif err != nil {\n\t\treturn ec2types.LaunchTemplate{}, err\n\t}\n\tcreateLaunchTemplateInput := NewCreateLaunchTemplateInputBuilder(options, p.ClusterIPFamily, userData).WithLaunchModeProvider(p).Build(ctx)\n\toutput, err := p.ec2api.CreateLaunchTemplate(ctx, createLaunchTemplateInput)\n\tif err != nil {\n\t\treturn ec2types.LaunchTemplate{}, err\n\t}\n\tlog.FromContext(ctx).WithValues(\"id\", aws.ToString(output.LaunchTemplate.LaunchTemplateId)).V(1).Info(\"created launch template\")\n\treturn lo.FromPtr(output.LaunchTemplate), nil\n}\n\n// generateNetworkInterfaces generates network interfaces for the launch template.\nfunc generateNetworkInterfaces(options *amifamily.LaunchTemplate, clusterIPFamily corev1.IPFamily) []ec2types.LaunchTemplateInstanceNetworkInterfaceSpecificationRequest {\n\tif options.EFACount != 0 {\n\t\treturn lo.Times(options.EFACount, func(i int) ec2types.LaunchTemplateInstanceNetworkInterfaceSpecificationRequest {\n\t\t\treturn ec2types.LaunchTemplateInstanceNetworkInterfaceSpecificationRequest{\n\t\t\t\t//nolint: gosec\n\t\t\t\tNetworkCardIndex: lo.ToPtr(int32(i)),\n\t\t\t\t// Some networking magic to ensure that one network card has higher priority than all the others (important if an instance needs a public IP w/o adding an EIP to every network card)\n\t\t\t\tDeviceIndex:     lo.ToPtr(lo.Ternary[int32](i == 0, 0, 1)),\n\t\t\t\tInterfaceType:   lo.ToPtr(string(ec2types.NetworkInterfaceTypeEfa)),\n\t\t\t\tIpv4PrefixCount: lo.Ternary(clusterIPFamily == corev1.IPv6Protocol, nil, options.IPPrefixCount),\n\t\t\t\tIpv6PrefixCount: lo.Ternary(clusterIPFamily == corev1.IPv6Protocol, options.IPPrefixCount, nil),\n\t\t\t\tGroups:          lo.Map(options.SecurityGroups, func(s v1.SecurityGroup, _ int) string { return s.ID }),\n\t\t\t\t// Instances launched with multiple pre-configured network interfaces cannot set AssociatePublicIPAddress to true. This is an EC2 limitation. However, this does not apply for instances\n\t\t\t\t// with a single EFA network interface, and we should support those use cases. Launch failures with multiple enis should be considered user misconfiguration.\n\t\t\t\tAssociatePublicIpAddress: options.AssociatePublicIPAddress,\n\t\t\t\tPrimaryIpv6:              lo.Ternary(clusterIPFamily == corev1.IPv6Protocol, lo.ToPtr(true), nil),\n\t\t\t\tIpv6AddressCount:         lo.Ternary(clusterIPFamily == corev1.IPv6Protocol, lo.ToPtr(int32(1)), nil),\n\t\t\t}\n\t\t})\n\t}\n\n\treturn []ec2types.LaunchTemplateInstanceNetworkInterfaceSpecificationRequest{\n\t\t{\n\t\t\tAssociatePublicIpAddress: options.AssociatePublicIPAddress,\n\t\t\tDeviceIndex:              aws.Int32(0),\n\t\t\tIpv4PrefixCount:          lo.Ternary(clusterIPFamily == corev1.IPv6Protocol, nil, options.IPPrefixCount),\n\t\t\tIpv6PrefixCount:          lo.Ternary(clusterIPFamily == corev1.IPv6Protocol, options.IPPrefixCount, nil),\n\t\t\tGroups: lo.Map(options.SecurityGroups, func(s v1.SecurityGroup, _ int) string {\n\t\t\t\treturn s.ID\n\t\t\t}),\n\t\t\tPrimaryIpv6:      lo.Ternary(clusterIPFamily == corev1.IPv6Protocol, lo.ToPtr(true), nil),\n\t\t\tIpv6AddressCount: lo.Ternary(clusterIPFamily == corev1.IPv6Protocol, lo.ToPtr(int32(1)), nil),\n\t\t},\n\t}\n}\n\nfunc blockDeviceMappings(blockDeviceMappings []*v1.BlockDeviceMapping) []ec2types.LaunchTemplateBlockDeviceMappingRequest {\n\tif len(blockDeviceMappings) == 0 {\n\t\t// The EC2 API fails with empty slices and expects nil.\n\t\treturn nil\n\t}\n\tvar blockDeviceMappingsRequest []ec2types.LaunchTemplateBlockDeviceMappingRequest\n\tfor _, blockDeviceMapping := range blockDeviceMappings {\n\t\tblockDeviceMappingsRequest = append(blockDeviceMappingsRequest, ec2types.LaunchTemplateBlockDeviceMappingRequest{\n\t\t\tDeviceName: blockDeviceMapping.DeviceName,\n\t\t\tEbs: &ec2types.LaunchTemplateEbsBlockDeviceRequest{\n\t\t\t\tDeleteOnTermination: blockDeviceMapping.EBS.DeleteOnTermination,\n\t\t\t\tEncrypted:           blockDeviceMapping.EBS.Encrypted,\n\t\t\t\tVolumeType:          ec2types.VolumeType(aws.ToString(blockDeviceMapping.EBS.VolumeType)),\n\t\t\t\t//Lints here can be removed when we update options.EBS.IOPS and Throughput type to be int32\n\t\t\t\t//nolint: gosec\n\t\t\t\tIops: lo.EmptyableToPtr(int32(lo.FromPtr(blockDeviceMapping.EBS.IOPS))),\n\t\t\t\t//nolint: gosec\n\t\t\t\tThroughput:               lo.EmptyableToPtr(int32(lo.FromPtr(blockDeviceMapping.EBS.Throughput))),\n\t\t\t\tKmsKeyId:                 blockDeviceMapping.EBS.KMSKeyID,\n\t\t\t\tSnapshotId:               blockDeviceMapping.EBS.SnapshotID,\n\t\t\t\tVolumeInitializationRate: blockDeviceMapping.EBS.VolumeInitializationRate,\n\t\t\t\tVolumeSize:               volumeSize(blockDeviceMapping.EBS.VolumeSize),\n\t\t\t},\n\t\t})\n\t}\n\treturn blockDeviceMappingsRequest\n}\n\n// volumeSize returns a GiB scaled value from a resource quantity or nil if the resource quantity passed in is nil\nfunc volumeSize(quantity *resource.Quantity) *int32 {\n\tif quantity == nil {\n\t\treturn nil\n\t}\n\t// Converts the value to Gi and rounds up the value to the nearest Gi\n\treturn lo.ToPtr(int32(math.Ceil(quantity.AsApproximateFloat64() / math.Pow(2, 30))))\n}\n\n// hydrateCache queries for existing Launch Templates created by Karpenter for the current cluster and adds to the LT cache.\n// Any error during hydration will result in a panic\nfunc (p *DefaultProvider) hydrateCache(ctx context.Context) {\n\tclusterName := options.FromContext(ctx).ClusterName\n\tctx = log.IntoContext(ctx, log.FromContext(ctx).WithValues(\"tag-key\", v1.EKSClusterNameTagKey, \"tag-value\", clusterName))\n\n\tpaginator := ec2.NewDescribeLaunchTemplatesPaginator(p.ec2api, &ec2.DescribeLaunchTemplatesInput{\n\t\tFilters: []ec2types.Filter{\n\t\t\t{\n\t\t\t\tName:   aws.String(fmt.Sprintf(\"tag:%s\", v1.EKSClusterNameTagKey)),\n\t\t\t\tValues: []string{clusterName},\n\t\t\t},\n\t\t},\n\t\t// MaxResults for DescribeLaunchTemplates is capped at 200\n\t\tMaxResults: lo.ToPtr[int32](200),\n\t})\n\n\tfor paginator.HasMorePages() {\n\t\tpage, err := paginator.NextPage(ctx)\n\t\tif err != nil {\n\t\t\tlog.FromContext(ctx).Error(err, \"unable to hydrate the AWS launch template cache\")\n\t\t\treturn\n\t\t}\n\n\t\tfor _, lt := range page.LaunchTemplates {\n\t\t\tp.cache.SetDefault(*lt.LaunchTemplateName, lt)\n\t\t}\n\t}\n\n\tlog.FromContext(ctx).WithValues(\"count\", p.cache.ItemCount()).V(1).Info(\"hydrated launch template cache\")\n}\n\nfunc (p *DefaultProvider) cachedEvictedFunc(ctx context.Context) func(string, any) {\n\treturn func(key string, lt any) {\n\t\tp.Lock()\n\t\tdefer p.Unlock()\n\t\tif _, expiration, _ := p.cache.GetWithExpiration(key); expiration.After(time.Now()) {\n\t\t\treturn\n\t\t}\n\t\tlaunchTemplate := lt.(ec2types.LaunchTemplate)\n\t\tif _, err := p.ec2api.DeleteLaunchTemplate(ctx, &ec2.DeleteLaunchTemplateInput{LaunchTemplateId: launchTemplate.LaunchTemplateId}); awserrors.IgnoreNotFound(err) != nil {\n\t\t\tlog.FromContext(ctx).WithValues(\"launch-template\", launchTemplate.LaunchTemplateName).Error(err, \"failed to delete launch template\")\n\t\t\treturn\n\t\t}\n\t\tlog.FromContext(ctx).WithValues(\n\t\t\t\"id\", aws.ToString(launchTemplate.LaunchTemplateId),\n\t\t\t\"name\", aws.ToString(launchTemplate.LaunchTemplateName),\n\t\t).V(1).Info(\"deleted launch template\")\n\t}\n}\n\nfunc (p *DefaultProvider) DeleteAll(ctx context.Context, nodeClass *v1.EC2NodeClass) error {\n\tclusterName := options.FromContext(ctx).ClusterName\n\tvar ltNames []*string\n\n\tpaginator := ec2.NewDescribeLaunchTemplatesPaginator(p.ec2api, &ec2.DescribeLaunchTemplatesInput{\n\t\tFilters: []ec2types.Filter{\n\t\t\t{\n\t\t\t\tName:   aws.String(fmt.Sprintf(\"tag:%s\", v1.EKSClusterNameTagKey)),\n\t\t\t\tValues: []string{clusterName},\n\t\t\t},\n\t\t\t{\n\t\t\t\tName:   aws.String(fmt.Sprintf(\"tag:%s\", v1.NodeClassTagKey)),\n\t\t\t\tValues: []string{nodeClass.Name},\n\t\t\t},\n\t\t},\n\t\t// MaxResults for DescribeLaunchTemplates is capped at 200\n\t\tMaxResults: lo.ToPtr[int32](200),\n\t})\n\n\tfor paginator.HasMorePages() {\n\t\tpage, err := paginator.NextPage(ctx)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"fetching launch templates, %w\", err)\n\t\t}\n\n\t\tfor _, lt := range page.LaunchTemplates {\n\t\t\tltNames = append(ltNames, lt.LaunchTemplateName)\n\t\t}\n\t}\n\n\tvar deleteErr error\n\tfor _, name := range ltNames {\n\t\t_, err := p.ec2api.DeleteLaunchTemplate(ctx, &ec2.DeleteLaunchTemplateInput{LaunchTemplateName: name})\n\t\tdeleteErr = multierr.Append(deleteErr, err)\n\t}\n\tif len(ltNames) > 0 {\n\t\tlog.FromContext(ctx).WithValues(\"launchTemplates\", utils.PrettySlice(lo.FromSlicePtr(ltNames), 5)).V(1).Info(\"deleted launch templates\")\n\t}\n\tif deleteErr != nil {\n\t\treturn fmt.Errorf(\"deleting launch templates, %w\", deleteErr)\n\t}\n\treturn nil\n}\nfunc (p *DefaultProvider) ResolveClusterCIDR(ctx context.Context) error {\n\tif p.ClusterCIDR.Load() != nil {\n\t\treturn nil\n\t}\n\tout, err := p.eksapi.DescribeCluster(ctx, &eks.DescribeClusterInput{\n\t\tName: aws.String(options.FromContext(ctx).ClusterName),\n\t})\n\tif err != nil {\n\t\treturn err\n\t}\n\tif ipv4CIDR := out.Cluster.KubernetesNetworkConfig.ServiceIpv4Cidr; ipv4CIDR != nil {\n\t\tp.ClusterCIDR.Store(ipv4CIDR)\n\t\tlog.FromContext(ctx).WithValues(\"cluster-cidr\", *ipv4CIDR).V(1).Info(\"discovered cluster CIDR\")\n\t\treturn nil\n\t}\n\tif ipv6CIDR := out.Cluster.KubernetesNetworkConfig.ServiceIpv6Cidr; ipv6CIDR != nil {\n\t\tp.ClusterCIDR.Store(ipv6CIDR)\n\t\tlog.FromContext(ctx).WithValues(\"cluster-cidr\", *ipv6CIDR).V(1).Info(\"discovered cluster CIDR\")\n\t\treturn nil\n\t}\n\treturn fmt.Errorf(\"no CIDR found in DescribeCluster response\")\n}\n\n// InjectDoNotSyncTaintsLabel adds a label for all non-custom AMI families. It is exported just for ease\n// of testing.\n// This label is to tell karpenter that it should *not* sync taints. This is to work around a race condition.\n// By default, this label is not added to the custom AMI family as users may still want their taints synced. Startup\n// taints will be racy for custom AMIs if they do not add this label, however.\n// https://github.com/kubernetes-sigs/karpenter/issues/1772\nfunc InjectDoNotSyncTaintsLabel(amiFamilyName string, labels map[string]string) map[string]string {\n\tif amiFamilyName != v1.AMIFamilyCustom {\n\t\treturn lo.Assign(labels, map[string]string{karpv1.NodeDoNotSyncTaintsLabelKey: \"true\"})\n\t}\n\treturn labels\n}\n"
  },
  {
    "path": "pkg/providers/launchtemplate/suite_test.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage launchtemplate_test\n\nimport (\n\t\"context\"\n\t\"encoding/base64\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net\"\n\t\"os\"\n\t\"strconv\"\n\t\"strings\"\n\t\"testing\"\n\t\"time\"\n\n\t\"sigs.k8s.io/karpenter/pkg/test/v1alpha1\"\n\n\t\"github.com/aws/aws-sdk-go-v2/aws\"\n\t\"github.com/aws/aws-sdk-go-v2/service/ec2\"\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\t\"github.com/aws/smithy-go\"\n\tadmv1alpha1 \"github.com/awslabs/amazon-eks-ami/nodeadm/api/v1alpha1\"\n\t\"github.com/awslabs/operatorpkg/object\"\n\topstatus \"github.com/awslabs/operatorpkg/status\"\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n\t\"github.com/samber/lo\"\n\tcorev1 \"k8s.io/api/core/v1\"\n\t\"k8s.io/apimachinery/pkg/api/resource\"\n\tmetav1 \"k8s.io/apimachinery/pkg/apis/meta/v1\"\n\t\"k8s.io/apimachinery/pkg/runtime\"\n\t\"k8s.io/apimachinery/pkg/util/sets\"\n\t\"k8s.io/client-go/tools/record\"\n\tclock \"k8s.io/utils/clock/testing\"\n\t\"sigs.k8s.io/controller-runtime/pkg/client\"\n\t\"sigs.k8s.io/yaml\"\n\n\tkarpv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n\tcorecloudprovider \"sigs.k8s.io/karpenter/pkg/cloudprovider\"\n\t\"sigs.k8s.io/karpenter/pkg/controllers/provisioning\"\n\t\"sigs.k8s.io/karpenter/pkg/controllers/state\"\n\t\"sigs.k8s.io/karpenter/pkg/events\"\n\tcoreoptions \"sigs.k8s.io/karpenter/pkg/operator/options\"\n\tcoretest \"sigs.k8s.io/karpenter/pkg/test\"\n\n\t. \"sigs.k8s.io/karpenter/pkg/test/expectations\"\n\t. \"sigs.k8s.io/karpenter/pkg/utils/testing\"\n\n\t\"github.com/aws/karpenter-provider-aws/pkg/apis\"\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/cloudprovider\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/controllers/nodeclass\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/fake\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/operator/options\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/amifamily\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/amifamily/bootstrap\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/amifamily/bootstrap/mime\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/instancetype\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/launchtemplate\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/test\"\n)\n\nvar ctx context.Context\nvar stop context.CancelFunc\nvar env *coretest.Environment\nvar awsEnv *test.Environment\nvar fakeClock *clock.FakeClock\nvar prov *provisioning.Provisioner\nvar cluster *state.Cluster\nvar cloudProvider *cloudprovider.CloudProvider\nvar recorder events.Recorder\n\nfunc TestAWS(t *testing.T) {\n\tctx = TestContextWithLogger(t)\n\tRegisterFailHandler(Fail)\n\tRunSpecs(t, \"LaunchTemplateProvider\")\n}\n\nvar _ = BeforeSuite(func() {\n\tenv = coretest.NewEnvironment(\n\t\tcoretest.WithCRDs(test.DisableCapacityReservationIDValidation(apis.CRDs)...),\n\t\tcoretest.WithCRDs(v1alpha1.CRDs...),\n\t\tcoretest.WithFieldIndexers(coretest.NodePoolNodeClassRefFieldIndexer(ctx)),\n\t)\n\tctx = coreoptions.ToContext(ctx, coretest.Options(coretest.OptionsFields{FeatureGates: coretest.FeatureGates{ReservedCapacity: lo.ToPtr(true)}}))\n\tctx = options.ToContext(ctx, test.Options())\n\tctx, stop = context.WithCancel(ctx)\n\tawsEnv = test.NewEnvironment(ctx, env)\n\n\tfakeClock = &clock.FakeClock{}\n\trecorder = events.NewRecorder(&record.FakeRecorder{})\n\tcloudProvider = cloudprovider.New(awsEnv.InstanceTypesProvider, awsEnv.InstanceProvider, recorder,\n\t\tenv.Client, awsEnv.AMIProvider, awsEnv.SecurityGroupProvider, awsEnv.CapacityReservationProvider, awsEnv.InstanceTypeStore)\n\tcluster = state.NewCluster(fakeClock, env.Client, cloudProvider)\n\tprov = provisioning.NewProvisioner(env.Client, recorder, cloudProvider, cluster, fakeClock)\n})\n\nvar _ = AfterSuite(func() {\n\tstop()\n\tExpect(env.Stop()).To(Succeed(), \"Failed to stop environment\")\n})\n\nvar _ = BeforeEach(func() {\n\tctx = coreoptions.ToContext(ctx, coretest.Options(coretest.OptionsFields{FeatureGates: coretest.FeatureGates{ReservedCapacity: lo.ToPtr(true)}}))\n\tctx = options.ToContext(ctx, test.Options())\n\tcluster.Reset()\n\tawsEnv.Reset()\n})\n\nvar _ = AfterEach(func() {\n\tExpectCleanedUp(ctx, env.Client)\n})\n\nvar _ = Describe(\"LaunchTemplate Provider\", func() {\n\tvar nodePool *karpv1.NodePool\n\tvar nodeClass *v1.EC2NodeClass\n\tBeforeEach(func() {\n\t\tnodeClass = test.EC2NodeClass(\n\t\t\tv1.EC2NodeClass{\n\t\t\t\tStatus: v1.EC2NodeClassStatus{\n\t\t\t\t\tInstanceProfile: \"test-profile\",\n\t\t\t\t\tSecurityGroups: []v1.SecurityGroup{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tID: \"sg-test1\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tID: \"sg-test2\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tID: \"sg-test3\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tSubnets: []v1.Subnet{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tID:   \"subnet-test1\",\n\t\t\t\t\t\t\tZone: \"test-zone-1a\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tID:   \"subnet-test2\",\n\t\t\t\t\t\t\tZone: \"test-zone-1b\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tID:   \"subnet-test3\",\n\t\t\t\t\t\t\tZone: \"test-zone-1c\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t)\n\t\tnodeClass.StatusConditions().SetTrue(opstatus.ConditionReady)\n\t\tnodePool = coretest.NodePool(karpv1.NodePool{\n\t\t\tSpec: karpv1.NodePoolSpec{\n\t\t\t\tTemplate: karpv1.NodeClaimTemplate{\n\t\t\t\t\tObjectMeta: karpv1.ObjectMeta{\n\t\t\t\t\t\t// TODO @joinnis: Move this into the coretest.NodePool function\n\t\t\t\t\t\tLabels: map[string]string{coretest.DiscoveryLabel: \"unspecified\"},\n\t\t\t\t\t},\n\t\t\t\t\tSpec: karpv1.NodeClaimTemplateSpec{\n\t\t\t\t\t\tRequirements: []karpv1.NodeSelectorRequirementWithMinValues{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tKey:      karpv1.CapacityTypeLabelKey,\n\t\t\t\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\t\t\t\tValues:   []string{karpv1.CapacityTypeOnDemand},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tNodeClassRef: &karpv1.NodeClassReference{\n\t\t\t\t\t\t\tGroup: object.GVK(nodeClass).Group,\n\t\t\t\t\t\t\tKind:  object.GVK(nodeClass).Kind,\n\t\t\t\t\t\t\tName:  nodeClass.Name,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\t_, err := awsEnv.SubnetProvider.List(ctx, nodeClass) // Hydrate the subnet cache\n\t\tExpect(err).To(BeNil())\n\t\tExpect(awsEnv.InstanceTypesProvider.UpdateInstanceTypes(ctx)).To(Succeed())\n\t\tExpect(awsEnv.InstanceTypesProvider.UpdateInstanceTypeOfferings(ctx)).To(Succeed())\n\t})\n\tIt(\"should not add the do not sync taints label to nodes when AMI type is custom\", func() {\n\t\tlabels := launchtemplate.InjectDoNotSyncTaintsLabel(\"Custom\", make(map[string]string))\n\t\tExpect(labels).To(HaveLen(0))\n\t})\n\n\tIt(\"should add the do not sync taints label to nodes when AMI type is al2\", func() {\n\t\tlabels := launchtemplate.InjectDoNotSyncTaintsLabel(\"AL2\", make(map[string]string))\n\t\tExpect(labels).To(HaveLen(1))\n\t\tExpect(labels).Should(HaveKeyWithValue(karpv1.NodeDoNotSyncTaintsLabelKey, \"true\"))\n\t})\n\n\tIt(\"should add the do not sync taints label to nodes when AMI type is al2023\", func() {\n\t\tlabels := launchtemplate.InjectDoNotSyncTaintsLabel(\"AL2023\", make(map[string]string))\n\t\tExpect(labels).To(HaveLen(1))\n\t\tExpect(labels).Should(HaveKeyWithValue(karpv1.NodeDoNotSyncTaintsLabelKey, \"true\"))\n\t})\n\n\tIt(\"should add the do not sync taints label to nodes when AMI type is br\", func() {\n\t\tlabels := launchtemplate.InjectDoNotSyncTaintsLabel(\"Bottlerocket\", make(map[string]string))\n\t\tExpect(labels).To(HaveLen(1))\n\t\tExpect(labels).Should(HaveKeyWithValue(karpv1.NodeDoNotSyncTaintsLabelKey, \"true\"))\n\t})\n\n\tIt(\"should add the do not sync taints label to nodes when AMI type is windows\", func() {\n\t\tlabels := launchtemplate.InjectDoNotSyncTaintsLabel(\"Windows\", make(map[string]string))\n\t\tExpect(labels).To(HaveLen(1))\n\t\tExpect(labels).Should(HaveKeyWithValue(karpv1.NodeDoNotSyncTaintsLabelKey, \"true\"))\n\t})\n\tIt(\"should create unique launch templates for multiple identical nodeClasses\", func() {\n\t\tnodeClass2 := test.EC2NodeClass(v1.EC2NodeClass{\n\t\t\tStatus: v1.EC2NodeClassStatus{\n\t\t\t\tInstanceProfile: \"test-profile\",\n\t\t\t\tSubnets:         nodeClass.Status.Subnets,\n\t\t\t\tSecurityGroups:  nodeClass.Status.SecurityGroups,\n\t\t\t\tAMIs:            nodeClass.Status.AMIs,\n\t\t\t},\n\t\t})\n\t\t_, err := awsEnv.SubnetProvider.List(ctx, nodeClass2) // Hydrate the subnet cache\n\t\tExpect(err).To(BeNil())\n\t\tnodePool2 := coretest.NodePool(karpv1.NodePool{\n\t\t\tSpec: karpv1.NodePoolSpec{\n\t\t\t\tTemplate: karpv1.NodeClaimTemplate{\n\t\t\t\t\tSpec: karpv1.NodeClaimTemplateSpec{\n\t\t\t\t\t\tRequirements: []karpv1.NodeSelectorRequirementWithMinValues{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tKey:      karpv1.CapacityTypeLabelKey,\n\t\t\t\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\t\t\t\tValues:   []string{karpv1.CapacityTypeSpot},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tNodeClassRef: &karpv1.NodeClassReference{\n\t\t\t\t\t\t\tGroup: object.GVK(nodeClass2).Group,\n\t\t\t\t\t\t\tKind:  object.GVK(nodeClass2).Kind,\n\t\t\t\t\t\t\tName:  nodeClass2.Name,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tnodeClass2.Status.SecurityGroups = []v1.SecurityGroup{\n\t\t\t{\n\t\t\t\tID: \"sg-test1\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tID: \"sg-test2\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tID: \"sg-test3\",\n\t\t\t},\n\t\t}\n\t\tnodeClass2.Status.Subnets = []v1.Subnet{\n\t\t\t{\n\t\t\t\tID:   \"subnet-test1\",\n\t\t\t\tZone: \"test-zone-1a\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tID:   \"subnet-test2\",\n\t\t\t\tZone: \"test-zone-1b\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tID:   \"subnet-test3\",\n\t\t\t\tZone: \"test-zone-1c\",\n\t\t\t},\n\t\t}\n\t\tnodeClass2.StatusConditions().SetTrue(opstatus.ConditionReady)\n\n\t\tpods := []*corev1.Pod{\n\t\t\tcoretest.UnschedulablePod(coretest.PodOptions{NodeRequirements: []corev1.NodeSelectorRequirement{\n\t\t\t\t{\n\t\t\t\t\tKey:      karpv1.CapacityTypeLabelKey,\n\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\tValues:   []string{karpv1.CapacityTypeSpot},\n\t\t\t\t},\n\t\t\t},\n\t\t\t}),\n\t\t\tcoretest.UnschedulablePod(coretest.PodOptions{NodeRequirements: []corev1.NodeSelectorRequirement{\n\t\t\t\t{\n\t\t\t\t\tKey:      karpv1.CapacityTypeLabelKey,\n\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\tValues:   []string{karpv1.CapacityTypeOnDemand},\n\t\t\t\t},\n\t\t\t},\n\t\t\t}),\n\t\t}\n\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass, nodePool2, nodeClass2)\n\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pods...)\n\t\tltConfigCount := len(awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Pop().LaunchTemplateConfigs) + len(awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Pop().LaunchTemplateConfigs)\n\t\tExpect(ltConfigCount).To(BeNumerically(\"==\", awsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.Len()))\n\t\tnodeClasses := [2]string{nodeClass.Name, nodeClass2.Name}\n\t\tawsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.ForEach(func(ltInput *ec2.CreateLaunchTemplateInput) {\n\t\t\tfor _, value := range ltInput.LaunchTemplateData.TagSpecifications[0].Tags {\n\t\t\t\tif *value.Key == v1.LabelNodeClass {\n\t\t\t\t\tExpect(*value.Value).To(BeElementOf(nodeClasses))\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t})\n\tIt(\"should default to a generated launch template\", func() {\n\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\tpod := coretest.UnschedulablePod()\n\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\tExpectScheduled(ctx, env.Client, pod)\n\n\t\tExpect(awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Len()).To(BeNumerically(\"==\", 1))\n\t\tcreateFleetInput := awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Pop()\n\t\tExpect(len(createFleetInput.LaunchTemplateConfigs)).To(BeNumerically(\"==\", awsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.Len()))\n\t\tExpect(awsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.Len()).To(BeNumerically(\"==\", 5))\n\t\tawsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.ForEach(func(ltInput *ec2.CreateLaunchTemplateInput) {\n\t\t\tlaunchTemplate, ok := lo.Find(createFleetInput.LaunchTemplateConfigs, func(ltConfig ec2types.FleetLaunchTemplateConfigRequest) bool {\n\t\t\t\treturn *ltConfig.LaunchTemplateSpecification.LaunchTemplateName == *ltInput.LaunchTemplateName\n\t\t\t})\n\t\t\tExpect(ok).To(BeTrue())\n\t\t\tExpect(ltInput.LaunchTemplateData.BlockDeviceMappings[0].Ebs.Encrypted).To(Equal(aws.Bool(true)))\n\t\t\tExpect(*launchTemplate.LaunchTemplateSpecification.Version).To(Equal(\"$Latest\"))\n\t\t})\n\t})\n\tIt(\"should fail to provision if the instance profile isn't ready\", func() {\n\t\tnodeClass.Status.InstanceProfile = \"\"\n\t\tnodeClass.StatusConditions().SetFalse(v1.ConditionTypeInstanceProfileReady, \"reason\", \"message\")\n\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\tpod := coretest.UnschedulablePod()\n\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\tExpectNotScheduled(ctx, env.Client, pod)\n\t})\n\tIt(\"should use the instance profile on the EC2NodeClass when specified\", func() {\n\t\tnodeClass.Spec.Role = \"\"\n\t\tnodeClass.Spec.InstanceProfile = aws.String(\"overridden-profile\")\n\t\tnodeClass.Status.InstanceProfile = \"overridden-profile\"\n\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\tpod := coretest.UnschedulablePod()\n\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\tExpectScheduled(ctx, env.Client, pod)\n\t\tExpect(awsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.Len()).To(BeNumerically(\"==\", 5))\n\t\tawsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.ForEach(func(ltInput *ec2.CreateLaunchTemplateInput) {\n\t\t\tExpect(*ltInput.LaunchTemplateData.IamInstanceProfile.Name).To(Equal(\"overridden-profile\"))\n\t\t})\n\t})\n\tContext(\"Cache\", func() {\n\t\tIt(\"should use same launch template for equivalent constraints\", func() {\n\t\t\tt1 := corev1.Toleration{\n\t\t\t\tKey:      \"Abacus\",\n\t\t\t\tOperator: \"Equal\",\n\t\t\t\tValue:    \"Zebra\",\n\t\t\t\tEffect:   \"NoSchedule\",\n\t\t\t}\n\t\t\tt2 := corev1.Toleration{\n\t\t\t\tKey:      \"Zebra\",\n\t\t\t\tOperator: \"Equal\",\n\t\t\t\tValue:    \"Abacus\",\n\t\t\t\tEffect:   \"NoSchedule\",\n\t\t\t}\n\t\t\tt3 := corev1.Toleration{\n\t\t\t\tKey:      \"Boar\",\n\t\t\t\tOperator: \"Equal\",\n\t\t\t\tValue:    \"Abacus\",\n\t\t\t\tEffect:   \"NoSchedule\",\n\t\t\t}\n\n\t\t\t// constrain the packer to a single launch template type\n\t\t\trr := corev1.ResourceRequirements{\n\t\t\t\tRequests: corev1.ResourceList{\n\t\t\t\t\tcorev1.ResourceCPU:   resource.MustParse(\"24\"),\n\t\t\t\t\tv1.ResourceNVIDIAGPU: resource.MustParse(\"1\"),\n\t\t\t\t},\n\t\t\t\tLimits: corev1.ResourceList{v1.ResourceNVIDIAGPU: resource.MustParse(\"1\")},\n\t\t\t}\n\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\tpod1 := coretest.UnschedulablePod(coretest.PodOptions{\n\t\t\t\tTolerations:          []corev1.Toleration{t1, t2, t3},\n\t\t\t\tResourceRequirements: rr,\n\t\t\t})\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod1)\n\t\t\tExpectScheduled(ctx, env.Client, pod1)\n\t\t\tExpect(awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Len()).To(Equal(1))\n\t\t\tcreateFleetInput := awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Pop()\n\t\t\tlts1 := sets.NewString()\n\t\t\tfor _, ltConfig := range createFleetInput.LaunchTemplateConfigs {\n\t\t\t\tlts1.Insert(*ltConfig.LaunchTemplateSpecification.LaunchTemplateName)\n\t\t\t}\n\n\t\t\tpod2 := coretest.UnschedulablePod(coretest.PodOptions{\n\t\t\t\tTolerations:          []corev1.Toleration{t2, t3, t1},\n\t\t\t\tResourceRequirements: rr,\n\t\t\t})\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod2)\n\n\t\t\tExpectScheduled(ctx, env.Client, pod2)\n\t\t\tExpect(awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Len()).To(Equal(1))\n\t\t\tcreateFleetInput = awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Pop()\n\t\t\tlts2 := sets.NewString()\n\t\t\tfor _, ltConfig := range createFleetInput.LaunchTemplateConfigs {\n\t\t\t\tlts2.Insert(*ltConfig.LaunchTemplateSpecification.LaunchTemplateName)\n\t\t\t}\n\t\t\tExpect(lts1.Equal(lts2)).To(BeTrue())\n\t\t})\n\t\tIt(\"should recover from an out-of-sync launch template cache\", func() {\n\t\t\tnodeClass.Spec.Kubelet = &v1.KubeletConfiguration{MaxPods: aws.Int32(1)}\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\tpod := coretest.UnschedulablePod()\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t\tExpect(awsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.Len()).To(BeNumerically(\"==\", 2))\n\t\t\tawsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.ForEach(func(ltInput *ec2.CreateLaunchTemplateInput) {\n\t\t\t\tltName := aws.ToString(ltInput.LaunchTemplateName)\n\t\t\t\tlt, ok := awsEnv.LaunchTemplateCache.Get(ltName)\n\t\t\t\tExpect(ok).To(Equal(true))\n\t\t\t\t// Remove expiration from cached LT\n\t\t\t\tawsEnv.LaunchTemplateCache.Set(ltName, lt, -1)\n\t\t\t})\n\t\t\tawsEnv.EC2API.CreateFleetBehavior.Error.Set(&smithy.GenericAPIError{\n\t\t\t\tCode:    \"InvalidLaunchTemplateName.NotFoundException\",\n\t\t\t\tMessage: \"The launch template name is invalid.\",\n\t\t\t}, fake.MaxCalls(1))\n\t\t\tpod = coretest.UnschedulablePod()\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t\t// should call fleet twice. Once will fail on invalid LT and the next will succeed\n\t\t\tExpect(awsEnv.EC2API.CreateFleetBehavior.FailedCalls()).To(BeNumerically(\"==\", 1))\n\t\t\tExpect(awsEnv.EC2API.CreateFleetBehavior.SuccessfulCalls()).To(BeNumerically(\"==\", 2))\n\n\t\t})\n\t\t// Testing launch template hash key will produce unique hashes\n\t\tIt(\"should generate different launch template names based on amifamily option configuration\", func() {\n\t\t\toptions := []*amifamily.Options{\n\t\t\t\t{},\n\t\t\t\t{ClusterName: \"test-name\"},\n\t\t\t\t{ClusterEndpoint: \"test-endpoint\"},\n\t\t\t\t{ClusterCIDR: lo.ToPtr(\"test-cidr\")},\n\t\t\t\t{InstanceProfile: \"test-profile\"},\n\t\t\t\t{InstanceStorePolicy: lo.ToPtr(v1.InstanceStorePolicyRAID0)},\n\t\t\t\t{SecurityGroups: []v1.SecurityGroup{{Name: \"test-sg\"}}},\n\t\t\t\t{Tags: map[string]string{\"test-key\": \"test-value\"}},\n\t\t\t\t{KubeDNSIP: net.ParseIP(\"192.0.0.2\")},\n\t\t\t\t{AssociatePublicIPAddress: lo.ToPtr(true)},\n\t\t\t\t{NodeClassName: \"test-name\"},\n\t\t\t}\n\t\t\tlaunchtemplateResult := []string{}\n\t\t\tfor _, option := range options {\n\t\t\t\tlt := &amifamily.LaunchTemplate{Options: option}\n\t\t\t\tlaunchtemplateResult = append(launchtemplateResult, launchtemplate.LaunchTemplateName(lt))\n\t\t\t}\n\t\t\tExpect(len(launchtemplateResult)).To(BeNumerically(\"==\", 11))\n\t\t\tExpect(lo.Uniq(launchtemplateResult)).To(Equal(launchtemplateResult))\n\t\t})\n\t\tIt(\"should not generate different launch template names based on CABundle and Labels\", func() {\n\t\t\toptions := []*amifamily.Options{\n\t\t\t\t{},\n\t\t\t\t{CABundle: lo.ToPtr(\"test-bundle\")},\n\t\t\t\t{Labels: map[string]string{\"test-key\": \"test-value\"}},\n\t\t\t}\n\t\t\tlaunchtemplateResult := []string{}\n\t\t\tfor _, option := range options {\n\t\t\t\tlt := &amifamily.LaunchTemplate{Options: option}\n\t\t\t\tlaunchtemplateResult = append(launchtemplateResult, launchtemplate.LaunchTemplateName(lt))\n\t\t\t}\n\t\t\tExpect(len(lo.Uniq(launchtemplateResult))).To(BeNumerically(\"==\", 1))\n\t\t\tExpect(lo.Uniq(launchtemplateResult)[0]).To(Equal(launchtemplate.LaunchTemplateName(&amifamily.LaunchTemplate{Options: &amifamily.Options{}})))\n\t\t})\n\t\tIt(\"should generate different launch template names based on kubelet configuration\", func() {\n\t\t\tkubeletChanges := []*v1.KubeletConfiguration{\n\t\t\t\t{},\n\t\t\t\t{KubeReserved: map[string]string{string(corev1.ResourceCPU): \"20\"}},\n\t\t\t\t{SystemReserved: map[string]string{string(corev1.ResourceMemory): \"10Gi\"}},\n\t\t\t\t{EvictionHard: map[string]string{\"memory.available\": \"52%\"}},\n\t\t\t\t{EvictionSoft: map[string]string{\"nodefs.available\": \"132%\"}},\n\t\t\t\t{MaxPods: aws.Int32(20)},\n\t\t\t}\n\t\t\tlaunchtemplateResult := []string{}\n\t\t\tfor _, kubelet := range kubeletChanges {\n\t\t\t\tlt := &amifamily.LaunchTemplate{UserData: bootstrap.EKS{Options: bootstrap.Options{KubeletConfig: kubelet}}}\n\t\t\t\tlaunchtemplateResult = append(launchtemplateResult, launchtemplate.LaunchTemplateName(lt))\n\t\t\t}\n\t\t\tExpect(len(launchtemplateResult)).To(BeNumerically(\"==\", 6))\n\t\t\tExpect(lo.Uniq(launchtemplateResult)).To(Equal(launchtemplateResult))\n\t\t})\n\t\tIt(\"should generate different launch template names based on bootstrap configuration\", func() {\n\t\t\tbootstrapOptions := []*bootstrap.Options{\n\t\t\t\t{},\n\t\t\t\t{ClusterName: \"test-name\"},\n\t\t\t\t{ClusterEndpoint: \"test-endpoint\"},\n\t\t\t\t{ClusterCIDR: lo.ToPtr(\"test-cidr\")},\n\t\t\t\t{Taints: []corev1.Taint{{Key: \"test-key\", Value: \"test-value\"}}},\n\t\t\t\t{Labels: map[string]string{\"test-key\": \"test-value\"}},\n\t\t\t\t{CABundle: lo.ToPtr(\"test-bundle\")},\n\t\t\t\t{ContainerRuntime: lo.ToPtr(\"test-cri\")},\n\t\t\t\t{CustomUserData: lo.ToPtr(\"test-cidr\")},\n\t\t\t}\n\t\t\tlaunchtemplateResult := []string{}\n\t\t\tfor _, option := range bootstrapOptions {\n\t\t\t\tlt := &amifamily.LaunchTemplate{UserData: bootstrap.EKS{Options: *option}}\n\t\t\t\tlaunchtemplateResult = append(launchtemplateResult, launchtemplate.LaunchTemplateName(lt))\n\t\t\t}\n\t\t\tExpect(len(launchtemplateResult)).To(BeNumerically(\"==\", 9))\n\t\t\tExpect(lo.Uniq(launchtemplateResult)).To(Equal(launchtemplateResult))\n\t\t})\n\t\tIt(\"should generate different launch template names based on launchtemplate option configuration\", func() {\n\t\t\tlaunchtemplates := []*amifamily.LaunchTemplate{\n\t\t\t\t{},\n\t\t\t\t{BlockDeviceMappings: []*v1.BlockDeviceMapping{{DeviceName: lo.ToPtr(\"test-block\")}}},\n\t\t\t\t{AMIID: \"test-ami\"},\n\t\t\t\t{DetailedMonitoring: true},\n\t\t\t\t{EFACount: 12},\n\t\t\t\t{CapacityType: \"spot\"},\n\t\t\t}\n\t\t\tlaunchtemplateResult := []string{}\n\t\t\tfor _, lt := range launchtemplates {\n\t\t\t\tlaunchtemplateResult = append(launchtemplateResult, launchtemplate.LaunchTemplateName(lt))\n\t\t\t}\n\t\t\tExpect(len(launchtemplateResult)).To(BeNumerically(\"==\", 6))\n\t\t\tExpect(lo.Uniq(launchtemplateResult)).To(Equal(launchtemplateResult))\n\t\t})\n\t\tIt(\"should not generate different launch template names based on instance types\", func() {\n\t\t\tlaunchtemplates := []*amifamily.LaunchTemplate{\n\t\t\t\t{},\n\t\t\t\t{InstanceTypes: []*corecloudprovider.InstanceType{{Name: \"test-instance-type\"}}},\n\t\t\t}\n\t\t\tlaunchtemplateResult := []string{}\n\t\t\tfor _, lt := range launchtemplates {\n\t\t\t\tlaunchtemplateResult = append(launchtemplateResult, launchtemplate.LaunchTemplateName(lt))\n\t\t\t}\n\t\t\tExpect(len(lo.Uniq(launchtemplateResult))).To(BeNumerically(\"==\", 1))\n\t\t\tExpect(lo.Uniq(launchtemplateResult)[0]).To(Equal(launchtemplate.LaunchTemplateName(&amifamily.LaunchTemplate{})))\n\t\t})\n\t})\n\tContext(\"Labels\", func() {\n\t\tIt(\"should apply labels to the node\", func() {\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\tpod := coretest.UnschedulablePod()\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\tnode := ExpectScheduled(ctx, env.Client, pod)\n\t\t\tExpect(node.Labels).To(HaveKey(corev1.LabelOSStable))\n\t\t\tExpect(node.Labels).To(HaveKey(corev1.LabelArchStable))\n\t\t\tExpect(node.Labels).To(HaveKey(corev1.LabelInstanceTypeStable))\n\t\t})\n\t})\n\tContext(\"Tags\", func() {\n\t\tIt(\"should request that tags be applied to both instances and volumes\", func() {\n\t\t\tnodeClass.Spec.Tags = map[string]string{\n\t\t\t\t\"tag1\": \"tag1value\",\n\t\t\t\t\"tag2\": \"tag2value\",\n\t\t\t}\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\tpod := coretest.UnschedulablePod()\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t\tExpect(awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Len()).To(Equal(1))\n\t\t\tcreateFleetInput := awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Pop()\n\t\t\tExpect(createFleetInput.TagSpecifications).To(HaveLen(3))\n\n\t\t\t// tags should be included in instance, volume, and fleet tag specification\n\t\t\tExpect(createFleetInput.TagSpecifications[0].ResourceType).To(Equal(ec2types.ResourceTypeInstance))\n\t\t\tExpectTags(createFleetInput.TagSpecifications[0].Tags, nodeClass.Spec.Tags)\n\n\t\t\tExpect(createFleetInput.TagSpecifications[1].ResourceType).To(Equal(ec2types.ResourceTypeVolume))\n\t\t\tExpectTags(createFleetInput.TagSpecifications[1].Tags, nodeClass.Spec.Tags)\n\n\t\t\tExpect(createFleetInput.TagSpecifications[2].ResourceType).To(Equal(ec2types.ResourceTypeFleet))\n\t\t\tExpectTags(createFleetInput.TagSpecifications[2].Tags, nodeClass.Spec.Tags)\n\t\t})\n\t\tIt(\"should request that tags be applied to both network interfaces and spot instance requests\", func() {\n\t\t\tnodeClass.Spec.Tags = map[string]string{\n\t\t\t\t\"tag1\": \"tag1value\",\n\t\t\t\t\"tag2\": \"tag2value\",\n\t\t\t}\n\t\t\tnodePool.Spec.Template.Spec.Requirements = []karpv1.NodeSelectorRequirementWithMinValues{\n\t\t\t\t{\n\t\t\t\t\tKey:      karpv1.CapacityTypeLabelKey,\n\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\tValues:   []string{karpv1.CapacityTypeSpot},\n\t\t\t\t},\n\t\t\t}\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\tpod := coretest.UnschedulablePod()\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t\tawsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.ForEach(func(i *ec2.CreateLaunchTemplateInput) {\n\t\t\t\tExpect(i.LaunchTemplateData.TagSpecifications).To(HaveLen(2))\n\n\t\t\t\t// tags should be included in instance, volume, and fleet tag specification\n\t\t\t\tExpect(i.LaunchTemplateData.TagSpecifications[0].ResourceType).To(Equal(ec2types.ResourceTypeNetworkInterface))\n\t\t\t\tExpectTags(i.LaunchTemplateData.TagSpecifications[0].Tags, nodeClass.Spec.Tags)\n\n\t\t\t\tExpect(i.LaunchTemplateData.TagSpecifications[1].ResourceType).To(Equal(ec2types.ResourceTypeSpotInstancesRequest))\n\t\t\t\tExpectTags(i.LaunchTemplateData.TagSpecifications[1].Tags, nodeClass.Spec.Tags)\n\t\t\t})\n\t\t})\n\t\tIt(\"should override default tag names\", func() {\n\t\t\t// these tags are defaulted, so ensure users can override them\n\t\t\tnodeClass.Spec.Tags = map[string]string{\n\t\t\t\t\"Name\": \"myname\",\n\t\t\t}\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\tpod := coretest.UnschedulablePod()\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t\tExpect(awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Len()).To(Equal(1))\n\t\t\tcreateFleetInput := awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Pop()\n\t\t\tExpect(createFleetInput.TagSpecifications).To(HaveLen(3))\n\n\t\t\t// tags should be included in instance, volume, and fleet tag specification\n\t\t\tExpect(createFleetInput.TagSpecifications[0].ResourceType).To(Equal(ec2types.ResourceTypeInstance))\n\t\t\tExpectTags(createFleetInput.TagSpecifications[0].Tags, nodeClass.Spec.Tags)\n\n\t\t\tExpect(createFleetInput.TagSpecifications[1].ResourceType).To(Equal(ec2types.ResourceTypeVolume))\n\t\t\tExpectTags(createFleetInput.TagSpecifications[1].Tags, nodeClass.Spec.Tags)\n\n\t\t\tExpect(createFleetInput.TagSpecifications[2].ResourceType).To(Equal(ec2types.ResourceTypeFleet))\n\t\t\tExpectTags(createFleetInput.TagSpecifications[2].Tags, nodeClass.Spec.Tags)\n\t\t})\n\t})\n\tContext(\"Block Device Mappings\", func() {\n\t\tIt(\"should default AL2 block device mappings\", func() {\n\t\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{Alias: \"al2@latest\"}}\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\tpod := coretest.UnschedulablePod()\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t\tExpect(awsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.Len()).To(BeNumerically(\"==\", 5))\n\t\t\tawsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.ForEach(func(ltInput *ec2.CreateLaunchTemplateInput) {\n\t\t\t\tExpect(len(ltInput.LaunchTemplateData.BlockDeviceMappings)).To(Equal(1))\n\t\t\t\tExpect(lo.FromPtr(ltInput.LaunchTemplateData.BlockDeviceMappings[0].Ebs.VolumeSize)).To(Equal(int32(20)))\n\t\t\t\tExpect(ltInput.LaunchTemplateData.BlockDeviceMappings[0].Ebs.VolumeType).To(Equal(ec2types.VolumeType(\"gp3\")))\n\t\t\t\tExpect(lo.FromPtr(ltInput.LaunchTemplateData.BlockDeviceMappings[0].Ebs.Iops)).To(Equal(int32(0)))\n\t\t\t})\n\t\t})\n\t\tIt(\"should default AL2023 block device mappings\", func() {\n\t\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{Alias: \"al2023@latest\"}}\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\tpod := coretest.UnschedulablePod()\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t\tExpect(awsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.Len()).To(BeNumerically(\"==\", 5))\n\t\t\tawsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.ForEach(func(ltInput *ec2.CreateLaunchTemplateInput) {\n\t\t\t\tExpect(len(ltInput.LaunchTemplateData.BlockDeviceMappings)).To(Equal(1))\n\t\t\t\tExpect(lo.FromPtr(ltInput.LaunchTemplateData.BlockDeviceMappings[0].Ebs.VolumeSize)).To(Equal(int32(20)))\n\t\t\t\tExpect(ltInput.LaunchTemplateData.BlockDeviceMappings[0].Ebs.VolumeType).To(Equal(ec2types.VolumeType(\"gp3\")))\n\t\t\t\tExpect(lo.FromPtr(ltInput.LaunchTemplateData.BlockDeviceMappings[0].Ebs.Iops)).To(Equal(int32(0)))\n\t\t\t})\n\t\t})\n\t\tIt(\"should use custom block device mapping\", func() {\n\t\t\tnodeClass.Spec.BlockDeviceMappings = []*v1.BlockDeviceMapping{\n\t\t\t\t{\n\t\t\t\t\tDeviceName: aws.String(\"/dev/xvda\"),\n\t\t\t\t\tEBS: &v1.BlockDevice{\n\t\t\t\t\t\tDeleteOnTermination: aws.Bool(true),\n\t\t\t\t\t\tEncrypted:           aws.Bool(true),\n\t\t\t\t\t\tVolumeType:          aws.String(\"io2\"),\n\t\t\t\t\t\tVolumeSize:          lo.ToPtr(resource.MustParse(\"200G\")),\n\t\t\t\t\t\tIOPS:                aws.Int64(10_000),\n\t\t\t\t\t\tKMSKeyID:            aws.String(\"arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tDeviceName: aws.String(\"/dev/xvdb\"),\n\t\t\t\t\tEBS: &v1.BlockDevice{\n\t\t\t\t\t\tDeleteOnTermination: aws.Bool(true),\n\t\t\t\t\t\tEncrypted:           aws.Bool(true),\n\t\t\t\t\t\tVolumeType:          aws.String(\"io2\"),\n\t\t\t\t\t\tVolumeSize:          lo.ToPtr(resource.MustParse(\"200Gi\")),\n\t\t\t\t\t\tIOPS:                aws.Int64(10_000),\n\t\t\t\t\t\tKMSKeyID:            aws.String(\"arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\tpod := coretest.UnschedulablePod()\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t\tExpect(awsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.Len()).To(BeNumerically(\"==\", 5))\n\t\t\tawsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.ForEach(func(ltInput *ec2.CreateLaunchTemplateInput) {\n\t\t\t\tExpect(ltInput.LaunchTemplateData.BlockDeviceMappings[0].Ebs).To(Equal(&ec2types.LaunchTemplateEbsBlockDeviceRequest{\n\t\t\t\t\tVolumeSize:          aws.Int32(187),\n\t\t\t\t\tVolumeType:          ec2types.VolumeType(\"io2\"),\n\t\t\t\t\tIops:                aws.Int32(10_000),\n\t\t\t\t\tDeleteOnTermination: aws.Bool(true),\n\t\t\t\t\tEncrypted:           aws.Bool(true),\n\t\t\t\t\tKmsKeyId:            aws.String(\"arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab\"),\n\t\t\t\t}))\n\t\t\t\tExpect(ltInput.LaunchTemplateData.BlockDeviceMappings[1].Ebs).To(Equal(&ec2types.LaunchTemplateEbsBlockDeviceRequest{\n\t\t\t\t\tVolumeSize:          aws.Int32(200),\n\t\t\t\t\tVolumeType:          \"io2\",\n\t\t\t\t\tIops:                aws.Int32(10_000),\n\t\t\t\t\tDeleteOnTermination: aws.Bool(true),\n\t\t\t\t\tEncrypted:           aws.Bool(true),\n\t\t\t\t\tKmsKeyId:            aws.String(\"arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab\"),\n\t\t\t\t}))\n\t\t\t})\n\t\t})\n\t\tIt(\"should round up for custom block device mappings when specified in gigabytes\", func() {\n\t\t\tnodeClass.Spec.BlockDeviceMappings = []*v1.BlockDeviceMapping{\n\t\t\t\t{\n\t\t\t\t\tDeviceName: aws.String(\"/dev/xvda\"),\n\t\t\t\t\tEBS: &v1.BlockDevice{\n\t\t\t\t\t\tDeleteOnTermination: aws.Bool(true),\n\t\t\t\t\t\tEncrypted:           aws.Bool(true),\n\t\t\t\t\t\tVolumeType:          aws.String(\"io2\"),\n\t\t\t\t\t\tVolumeSize:          lo.ToPtr(resource.MustParse(\"4G\")),\n\t\t\t\t\t\tIOPS:                aws.Int64(10_000),\n\t\t\t\t\t\tKMSKeyID:            aws.String(\"arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tDeviceName: aws.String(\"/dev/xvdb\"),\n\t\t\t\t\tEBS: &v1.BlockDevice{\n\t\t\t\t\t\tDeleteOnTermination: aws.Bool(true),\n\t\t\t\t\t\tEncrypted:           aws.Bool(true),\n\t\t\t\t\t\tVolumeType:          aws.String(\"io2\"),\n\t\t\t\t\t\tVolumeSize:          lo.ToPtr(resource.MustParse(\"2G\")),\n\t\t\t\t\t\tIOPS:                aws.Int64(10_000),\n\t\t\t\t\t\tKMSKeyID:            aws.String(\"arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\tpod := coretest.UnschedulablePod()\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t\tExpect(awsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.Len()).To(BeNumerically(\"==\", 5))\n\t\t\tawsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.ForEach(func(ltInput *ec2.CreateLaunchTemplateInput) {\n\t\t\t\t// Both of these values are rounded up when converting to Gibibytes\n\t\t\t\tExpect(lo.FromPtr(ltInput.LaunchTemplateData.BlockDeviceMappings[0].Ebs.VolumeSize)).To(BeNumerically(\"==\", 4))\n\t\t\t\tExpect(lo.FromPtr(ltInput.LaunchTemplateData.BlockDeviceMappings[1].Ebs.VolumeSize)).To(BeNumerically(\"==\", 2))\n\t\t\t})\n\t\t})\n\t\tIt(\"should default bottlerocket second volume with root volume size\", func() {\n\t\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{Alias: \"bottlerocket@latest\"}}\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\tpod := coretest.UnschedulablePod()\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t\tExpect(awsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.Len()).To(BeNumerically(\"==\", 5))\n\t\t\tawsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.ForEach(func(ltInput *ec2.CreateLaunchTemplateInput) {\n\t\t\t\tExpect(len(ltInput.LaunchTemplateData.BlockDeviceMappings)).To(Equal(2))\n\t\t\t\t// Bottlerocket control volume\n\t\t\t\tExpect(lo.FromPtr(ltInput.LaunchTemplateData.BlockDeviceMappings[0].Ebs.VolumeSize)).To(Equal(int32(4)))\n\t\t\t\tExpect(ltInput.LaunchTemplateData.BlockDeviceMappings[0].Ebs.VolumeType).To(Equal(ec2types.VolumeType(\"gp3\")))\n\t\t\t\tExpect(lo.FromPtr(ltInput.LaunchTemplateData.BlockDeviceMappings[0].Ebs.Iops)).To(Equal(int32(0)))\n\t\t\t\t// Bottlerocket user volume\n\t\t\t\tExpect(lo.FromPtr(ltInput.LaunchTemplateData.BlockDeviceMappings[1].Ebs.VolumeSize)).To(Equal(int32(20)))\n\t\t\t\tExpect(ltInput.LaunchTemplateData.BlockDeviceMappings[1].Ebs.VolumeType).To(Equal(ec2types.VolumeType(\"gp3\")))\n\t\t\t\tExpect(lo.FromPtr(ltInput.LaunchTemplateData.BlockDeviceMappings[1].Ebs.Iops)).To(Equal(int32(0)))\n\t\t\t})\n\t\t})\n\t\tIt(\"should not default block device mappings for custom AMIFamilies\", func() {\n\t\t\tnodeClass.Spec.AMIFamily = lo.ToPtr(v1.AMIFamilyCustom)\n\t\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{Tags: map[string]string{\"*\": \"*\"}}}\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\tpod := coretest.UnschedulablePod()\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t\tExpect(awsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.Len()).To(BeNumerically(\"==\", 2))\n\t\t\tawsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.ForEach(func(ltInput *ec2.CreateLaunchTemplateInput) {\n\t\t\t\tExpect(len(ltInput.LaunchTemplateData.BlockDeviceMappings)).To(Equal(0))\n\t\t\t})\n\t\t})\n\t\tIt(\"should use custom block device mapping for custom AMIFamilies\", func() {\n\t\t\tnodeClass.Spec.AMIFamily = lo.ToPtr(v1.AMIFamilyCustom)\n\t\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{Tags: map[string]string{\"*\": \"*\"}}}\n\t\t\tnodeClass.Spec.BlockDeviceMappings = []*v1.BlockDeviceMapping{\n\t\t\t\t{\n\t\t\t\t\tDeviceName: aws.String(\"/dev/xvda\"),\n\t\t\t\t\tEBS: &v1.BlockDevice{\n\t\t\t\t\t\tDeleteOnTermination: aws.Bool(true),\n\t\t\t\t\t\tEncrypted:           aws.Bool(true),\n\t\t\t\t\t\tVolumeType:          aws.String(\"io2\"),\n\t\t\t\t\t\tVolumeSize:          lo.ToPtr(resource.MustParse(\"40Gi\")),\n\t\t\t\t\t\tIOPS:                aws.Int64(10_000),\n\t\t\t\t\t\tKMSKeyID:            aws.String(\"arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\tpod := coretest.UnschedulablePod()\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t\tExpect(awsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.Len()).To(BeNumerically(\"==\", 2))\n\t\t\tawsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.ForEach(func(ltInput *ec2.CreateLaunchTemplateInput) {\n\t\t\t\tExpect(len(ltInput.LaunchTemplateData.BlockDeviceMappings)).To(Equal(1))\n\t\t\t\tExpect(lo.FromPtr(ltInput.LaunchTemplateData.BlockDeviceMappings[0].Ebs.VolumeSize)).To(Equal(int32(40)))\n\t\t\t\tExpect(ltInput.LaunchTemplateData.BlockDeviceMappings[0].Ebs.VolumeType).To(Equal(ec2types.VolumeType(\"io2\")))\n\t\t\t\tExpect(lo.FromPtr(ltInput.LaunchTemplateData.BlockDeviceMappings[0].Ebs.Iops)).To(Equal(int32(10_000)))\n\t\t\t\tExpect(lo.FromPtr(ltInput.LaunchTemplateData.BlockDeviceMappings[0].Ebs.DeleteOnTermination)).To(BeTrue())\n\t\t\t\tExpect(lo.FromPtr(ltInput.LaunchTemplateData.BlockDeviceMappings[0].Ebs.Encrypted)).To(BeTrue())\n\t\t\t\tExpect(lo.FromPtr(ltInput.LaunchTemplateData.BlockDeviceMappings[0].Ebs.KmsKeyId)).To(Equal(\"arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab\"))\n\t\t\t})\n\t\t})\n\t})\n\tContext(\"Ephemeral Storage\", func() {\n\t\tIt(\"should pack pods when a daemonset has an ephemeral-storage request\", func() {\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass, coretest.DaemonSet(\n\t\t\t\tcoretest.DaemonSetOptions{PodOptions: coretest.PodOptions{\n\t\t\t\t\tResourceRequirements: corev1.ResourceRequirements{\n\t\t\t\t\t\tRequests: corev1.ResourceList{corev1.ResourceCPU: resource.MustParse(\"1\"),\n\t\t\t\t\t\t\tcorev1.ResourceMemory:           resource.MustParse(\"1Gi\"),\n\t\t\t\t\t\t\tcorev1.ResourceEphemeralStorage: resource.MustParse(\"1Gi\")}},\n\t\t\t\t}},\n\t\t\t))\n\t\t\tpod := coretest.UnschedulablePod()\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t})\n\t\tIt(\"should pack pods with any ephemeral-storage request\", func() {\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\tpod := coretest.UnschedulablePod(coretest.PodOptions{ResourceRequirements: corev1.ResourceRequirements{\n\t\t\t\tRequests: map[corev1.ResourceName]resource.Quantity{\n\t\t\t\t\tcorev1.ResourceEphemeralStorage: resource.MustParse(\"1G\"),\n\t\t\t\t}}})\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t})\n\t\tIt(\"should pack pods with large ephemeral-storage request\", func() {\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\tpod := coretest.UnschedulablePod(coretest.PodOptions{ResourceRequirements: corev1.ResourceRequirements{\n\t\t\t\tRequests: map[corev1.ResourceName]resource.Quantity{\n\t\t\t\t\tcorev1.ResourceEphemeralStorage: resource.MustParse(\"10Gi\"),\n\t\t\t\t}}})\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t})\n\t\tIt(\"should not pack pods if the sum of pod ephemeral-storage and overhead exceeds node capacity\", func() {\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\tpod := coretest.UnschedulablePod(coretest.PodOptions{ResourceRequirements: corev1.ResourceRequirements{\n\t\t\t\tRequests: map[corev1.ResourceName]resource.Quantity{\n\t\t\t\t\tcorev1.ResourceEphemeralStorage: resource.MustParse(\"19Gi\"),\n\t\t\t\t}}})\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\tExpectNotScheduled(ctx, env.Client, pod)\n\t\t})\n\t\tIt(\"should pack pods if the pod's ephemeral-storage exceeds node capacity and instance storage is mounted\", func() {\n\t\t\tnodeClass.Spec.InstanceStorePolicy = lo.ToPtr(v1.InstanceStorePolicyRAID0)\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\tpod := coretest.UnschedulablePod(coretest.PodOptions{ResourceRequirements: corev1.ResourceRequirements{\n\t\t\t\tRequests: map[corev1.ResourceName]resource.Quantity{\n\t\t\t\t\t// Default node ephemeral-storage capacity is 20Gi\n\t\t\t\t\tcorev1.ResourceEphemeralStorage: resource.MustParse(\"5000Gi\"),\n\t\t\t\t}}})\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\tnode := ExpectScheduled(ctx, env.Client, pod)\n\t\t\tExpect(node.Labels[corev1.LabelInstanceTypeStable]).To(Equal(\"m6idn.32xlarge\"))\n\t\t\tExpect(*node.Status.Capacity.StorageEphemeral()).To(Equal(resource.MustParse(\"7600G\")))\n\t\t})\n\t\tIt(\"should launch multiple nodes if sum of pod ephemeral-storage requests exceeds a single nodes capacity\", func() {\n\t\t\tvar nodes []*corev1.Node\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\tpods := []*corev1.Pod{\n\t\t\t\tcoretest.UnschedulablePod(coretest.PodOptions{ResourceRequirements: corev1.ResourceRequirements{\n\t\t\t\t\tRequests: map[corev1.ResourceName]resource.Quantity{\n\t\t\t\t\t\tcorev1.ResourceEphemeralStorage: resource.MustParse(\"10Gi\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t}),\n\t\t\t\tcoretest.UnschedulablePod(coretest.PodOptions{ResourceRequirements: corev1.ResourceRequirements{\n\t\t\t\t\tRequests: map[corev1.ResourceName]resource.Quantity{\n\t\t\t\t\t\tcorev1.ResourceEphemeralStorage: resource.MustParse(\"10Gi\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t}),\n\t\t\t}\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pods...)\n\t\t\tfor _, pod := range pods {\n\t\t\t\tnodes = append(nodes, ExpectScheduled(ctx, env.Client, pod))\n\t\t\t}\n\t\t\tExpect(nodes).To(HaveLen(2))\n\t\t})\n\t\tIt(\"should only pack pods with ephemeral-storage requests that will fit on an available node\", func() {\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\tpods := []*corev1.Pod{\n\t\t\t\tcoretest.UnschedulablePod(coretest.PodOptions{ResourceRequirements: corev1.ResourceRequirements{\n\t\t\t\t\tRequests: map[corev1.ResourceName]resource.Quantity{\n\t\t\t\t\t\tcorev1.ResourceEphemeralStorage: resource.MustParse(\"10Gi\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t}),\n\t\t\t\tcoretest.UnschedulablePod(coretest.PodOptions{ResourceRequirements: corev1.ResourceRequirements{\n\t\t\t\t\tRequests: map[corev1.ResourceName]resource.Quantity{\n\t\t\t\t\t\tcorev1.ResourceEphemeralStorage: resource.MustParse(\"150Gi\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t}),\n\t\t\t}\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pods...)\n\t\t\tExpectScheduled(ctx, env.Client, pods[0])\n\t\t\tExpectNotScheduled(ctx, env.Client, pods[1])\n\t\t})\n\t\tIt(\"should not pack pod if no available instance types have enough storage\", func() {\n\t\t\tExpectApplied(ctx, env.Client, nodePool)\n\t\t\tpod := coretest.UnschedulablePod(coretest.PodOptions{ResourceRequirements: corev1.ResourceRequirements{\n\t\t\t\tRequests: map[corev1.ResourceName]resource.Quantity{\n\t\t\t\t\tcorev1.ResourceEphemeralStorage: resource.MustParse(\"150Gi\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\t})\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\tExpectNotScheduled(ctx, env.Client, pod)\n\t\t})\n\t\tIt(\"should pack pods using the blockdevicemappings from the provider spec when defined\", func() {\n\t\t\tnodeClass.Spec.BlockDeviceMappings = []*v1.BlockDeviceMapping{\n\t\t\t\t{\n\t\t\t\t\tDeviceName: aws.String(\"/dev/xvda\"),\n\t\t\t\t\tEBS: &v1.BlockDevice{\n\t\t\t\t\t\tVolumeSize: resource.NewScaledQuantity(50, resource.Giga),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tDeviceName: aws.String(\"/dev/xvdb\"),\n\t\t\t\t\tEBS: &v1.BlockDevice{\n\t\t\t\t\t\tVolumeSize: resource.NewScaledQuantity(20, resource.Giga),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\tpod := coretest.UnschedulablePod(coretest.PodOptions{ResourceRequirements: corev1.ResourceRequirements{\n\t\t\t\tRequests: map[corev1.ResourceName]resource.Quantity{\n\t\t\t\t\tcorev1.ResourceEphemeralStorage: resource.MustParse(\"25Gi\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\t})\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\n\t\t\t// capacity isn't recorded on the node any longer, but we know the pod should schedule\n\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t})\n\t\tIt(\"should pack pods using blockdevicemappings for Custom AMIFamily\", func() {\n\t\t\tnodeClass.Spec.AMIFamily = lo.ToPtr(v1.AMIFamilyCustom)\n\t\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{Tags: map[string]string{\"*\": \"*\"}}}\n\t\t\tnodeClass.Spec.BlockDeviceMappings = []*v1.BlockDeviceMapping{\n\t\t\t\t{\n\t\t\t\t\tDeviceName: aws.String(\"/dev/xvda\"),\n\t\t\t\t\tEBS: &v1.BlockDevice{\n\t\t\t\t\t\tVolumeSize: resource.NewScaledQuantity(20, resource.Giga),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tDeviceName: aws.String(\"/dev/xvdb\"),\n\t\t\t\t\tEBS: &v1.BlockDevice{\n\t\t\t\t\t\tVolumeSize: resource.NewScaledQuantity(40, resource.Giga),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\tpod := coretest.UnschedulablePod(coretest.PodOptions{ResourceRequirements: corev1.ResourceRequirements{\n\t\t\t\tRequests: map[corev1.ResourceName]resource.Quantity{\n\t\t\t\t\t// this pod can only be satisfied if `/dev/xvdb` will house all the pods.\n\t\t\t\t\tcorev1.ResourceEphemeralStorage: resource.MustParse(\"25Gi\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\t})\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\n\t\t\t// capacity isn't recorded on the node any longer, but we know the pod should schedule\n\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t})\n\t\tIt(\"should pack pods using the configured root volume in blockdevicemappings\", func() {\n\t\t\tnodeClass.Spec.AMIFamily = lo.ToPtr(v1.AMIFamilyCustom)\n\t\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{Tags: map[string]string{\"*\": \"*\"}}}\n\t\t\tnodeClass.Spec.BlockDeviceMappings = []*v1.BlockDeviceMapping{\n\t\t\t\t{\n\t\t\t\t\tDeviceName: aws.String(\"/dev/xvda\"),\n\t\t\t\t\tEBS: &v1.BlockDevice{\n\t\t\t\t\t\tVolumeSize: resource.NewScaledQuantity(20, resource.Giga),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tDeviceName: aws.String(\"/dev/xvdb\"),\n\t\t\t\t\tEBS: &v1.BlockDevice{\n\t\t\t\t\t\tVolumeSize: resource.NewScaledQuantity(40, resource.Giga),\n\t\t\t\t\t},\n\t\t\t\t\tRootVolume: true,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tDeviceName: aws.String(\"/dev/xvdc\"),\n\t\t\t\t\tEBS: &v1.BlockDevice{\n\t\t\t\t\t\tVolumeSize: resource.NewScaledQuantity(20, resource.Giga),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\tpod := coretest.UnschedulablePod(coretest.PodOptions{ResourceRequirements: corev1.ResourceRequirements{\n\t\t\t\tRequests: map[corev1.ResourceName]resource.Quantity{\n\t\t\t\t\t// this pod can only be satisfied if `/dev/xvdb` will house all the pods.\n\t\t\t\t\tcorev1.ResourceEphemeralStorage: resource.MustParse(\"25Gi\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\t})\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\n\t\t\t// capacity isn't recorded on the node any longer, but we know the pod should schedule\n\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t})\n\t})\n\tContext(\"AL2\", func() {\n\t\tvar info ec2types.InstanceTypeInfo\n\t\tBeforeEach(func() {\n\t\t\tvar ok bool\n\t\t\tvar instanceInfo []ec2types.InstanceTypeInfo\n\t\t\tout, err := awsEnv.EC2API.DescribeInstanceTypes(ctx, &ec2.DescribeInstanceTypesInput{\n\t\t\t\tFilters: []ec2types.Filter{\n\t\t\t\t\t{\n\t\t\t\t\t\tName:   aws.String(\"supported-virtualization-type\"),\n\t\t\t\t\t\tValues: []string{\"hvm\"},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tName:   aws.String(\"processor-info.supported-architecture\"),\n\t\t\t\t\t\tValues: []string{\"x86_64\", \"arm64\"},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t})\n\t\t\tinstanceInfo = out.InstanceTypes\n\t\t\tExpect(err).To(BeNil())\n\t\t\tinfo, ok = lo.Find(instanceInfo, func(i ec2types.InstanceTypeInfo) bool {\n\t\t\t\treturn i.InstanceType == \"m5.xlarge\"\n\t\t\t})\n\t\t\tExpect(ok).To(BeTrue())\n\t\t})\n\n\t\tIt(\"should calculate memory overhead based on eni limited pods\", func() {\n\t\t\tctx = options.ToContext(ctx, test.Options(test.OptionsFields{\n\t\t\t\tVMMemoryOverheadPercent: lo.ToPtr[float64](0),\n\t\t\t}))\n\n\t\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{Alias: \"al2@latest\"}}\n\t\t\tnodeClass.Spec.Kubelet = &v1.KubeletConfiguration{}\n\t\t\tit := instancetype.NewInstanceType(ctx,\n\t\t\t\tinfo,\n\t\t\t\t\"\",\n\t\t\t\tnil,\n\t\t\t\tnil,\n\t\t\t\tnodeClass.Spec.BlockDeviceMappings,\n\t\t\t\tnodeClass.Spec.InstanceStorePolicy,\n\t\t\t\tnodeClass.Spec.Kubelet.MaxPods,\n\t\t\t\tnodeClass.Spec.Kubelet.PodsPerCore,\n\t\t\t\tnodeClass.Spec.Kubelet.KubeReserved,\n\t\t\t\tnodeClass.Spec.Kubelet.SystemReserved,\n\t\t\t\tnodeClass.Spec.Kubelet.EvictionHard,\n\t\t\t\tnodeClass.Spec.Kubelet.EvictionSoft,\n\t\t\t\tnodeClass.AMIFamily(),\n\t\t\t\tnil,\n\t\t\t)\n\n\t\t\toverhead := it.Overhead.Total()\n\t\t\tExpect(overhead.Memory().String()).To(Equal(\"993Mi\"))\n\t\t})\n\t})\n\tContext(\"Bottlerocket\", func() {\n\t\tvar info ec2types.InstanceTypeInfo\n\t\tBeforeEach(func() {\n\t\t\tvar ok bool\n\t\t\tvar instanceInfo []ec2types.InstanceTypeInfo\n\t\t\tout, err := awsEnv.EC2API.DescribeInstanceTypes(ctx, &ec2.DescribeInstanceTypesInput{\n\t\t\t\tFilters: []ec2types.Filter{\n\t\t\t\t\t{\n\t\t\t\t\t\tName:   aws.String(\"supported-virtualization-type\"),\n\t\t\t\t\t\tValues: []string{\"hvm\"},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tName:   aws.String(\"processor-info.supported-architecture\"),\n\t\t\t\t\t\tValues: []string{\"x86_64\", \"arm64\"},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t})\n\t\t\tinstanceInfo = out.InstanceTypes\n\t\t\tExpect(err).To(BeNil())\n\t\t\tinfo, ok = lo.Find(instanceInfo, func(i ec2types.InstanceTypeInfo) bool {\n\t\t\t\treturn i.InstanceType == \"m5.xlarge\"\n\t\t\t})\n\t\t\tExpect(ok).To(BeTrue())\n\t\t})\n\n\t\tIt(\"should calculate memory overhead based on eni limited pods\", func() {\n\t\t\tctx = options.ToContext(ctx, test.Options(test.OptionsFields{\n\t\t\t\tVMMemoryOverheadPercent: lo.ToPtr[float64](0),\n\t\t\t}))\n\n\t\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{Alias: \"bottlerocket@latest\"}}\n\t\t\tnodeClass.Spec.Kubelet = &v1.KubeletConfiguration{}\n\t\t\tit := instancetype.NewInstanceType(ctx,\n\t\t\t\tinfo,\n\t\t\t\t\"\",\n\t\t\t\tnil,\n\t\t\t\tnil,\n\t\t\t\tnodeClass.Spec.BlockDeviceMappings,\n\t\t\t\tnodeClass.Spec.InstanceStorePolicy,\n\t\t\t\tnodeClass.Spec.Kubelet.MaxPods,\n\t\t\t\tnodeClass.Spec.Kubelet.PodsPerCore,\n\t\t\t\tnodeClass.Spec.Kubelet.KubeReserved,\n\t\t\t\tnodeClass.Spec.Kubelet.SystemReserved,\n\t\t\t\tnodeClass.Spec.Kubelet.EvictionHard,\n\t\t\t\tnodeClass.Spec.Kubelet.EvictionSoft,\n\t\t\t\tnodeClass.AMIFamily(),\n\t\t\t\tnil,\n\t\t\t)\n\n\t\t\toverhead := it.Overhead.Total()\n\t\t\tExpect(overhead.Memory().String()).To(Equal(\"993Mi\"))\n\t\t})\n\t\tIt(\"should calculate memory overhead based on max pods\", func() {\n\t\t\tctx = options.ToContext(ctx, test.Options(test.OptionsFields{\n\t\t\t\tVMMemoryOverheadPercent: lo.ToPtr[float64](0),\n\t\t\t}))\n\n\t\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{Alias: \"bottlerocket@latest\"}}\n\t\t\tnodeClass.Spec.Kubelet = &v1.KubeletConfiguration{MaxPods: lo.ToPtr[int32](110)}\n\t\t\tit := instancetype.NewInstanceType(ctx,\n\t\t\t\tinfo,\n\t\t\t\t\"\",\n\t\t\t\tnil,\n\t\t\t\tnil,\n\t\t\t\tnodeClass.Spec.BlockDeviceMappings,\n\t\t\t\tnodeClass.Spec.InstanceStorePolicy,\n\t\t\t\tnodeClass.Spec.Kubelet.MaxPods,\n\t\t\t\tnodeClass.Spec.Kubelet.PodsPerCore,\n\t\t\t\tnodeClass.Spec.Kubelet.KubeReserved,\n\t\t\t\tnodeClass.Spec.Kubelet.SystemReserved,\n\t\t\t\tnodeClass.Spec.Kubelet.EvictionHard,\n\t\t\t\tnodeClass.Spec.Kubelet.EvictionSoft,\n\t\t\t\tnodeClass.AMIFamily(),\n\t\t\t\tnil,\n\t\t\t)\n\t\t\toverhead := it.Overhead.Total()\n\t\t\tExpect(overhead.Memory().String()).To(Equal(\"1565Mi\"))\n\t\t})\n\t})\n\tContext(\"User Data\", func() {\n\t\tIt(\"should specify --use-max-pods=false when using ENI-based pod density\", func() {\n\t\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{Alias: \"al2@latest\"}}\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\tpod := coretest.UnschedulablePod()\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t\tExpectLaunchTemplatesCreatedWithUserDataContaining(\"--use-max-pods false\")\n\t\t})\n\t\tIt(\"should specify --use-max-pods=false and --max-pods user value when user specifies maxPods in NodePool\", func() {\n\t\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{Alias: \"al2@latest\"}}\n\t\t\tnodeClass.Spec.Kubelet = &v1.KubeletConfiguration{MaxPods: aws.Int32(10)}\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\tpod := coretest.UnschedulablePod()\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t\tExpectLaunchTemplatesCreatedWithUserDataContaining(\"--use-max-pods false\", \"--max-pods=10\")\n\t\t})\n\t\tIt(\"should generate different launch templates for different maxPods values when specifying kubelet configuration\", func() {\n\t\t\t// We validate that we no longer combine instance types into the same launch template with the same --max-pods values\n\t\t\t// that shouldn't have been combined but were combined due to a pointer error\n\t\t\tnodeClass.Spec.Kubelet = &v1.KubeletConfiguration{\n\t\t\t\tClusterDNS: []string{\"test\"},\n\t\t\t}\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\tpod := coretest.UnschedulablePod()\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t\t// We expect to generate 5 launch templates for our image/max-pods combination where we were only generating 2 before\n\t\t\tExpect(awsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.Len()).To(BeNumerically(\"==\", 5))\n\t\t})\n\t\tIt(\"should specify systemReserved when overriding system reserved values\", func() {\n\t\t\tnodeClass.Spec.Kubelet = &v1.KubeletConfiguration{\n\t\t\t\tSystemReserved: map[string]string{\n\t\t\t\t\tstring(corev1.ResourceCPU):              \"500m\",\n\t\t\t\t\tstring(corev1.ResourceMemory):           \"1Gi\",\n\t\t\t\t\tstring(corev1.ResourceEphemeralStorage): \"2Gi\",\n\t\t\t\t},\n\t\t\t}\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\tpod := coretest.UnschedulablePod()\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t\tExpect(awsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.Len()).To(BeNumerically(\"==\", 5))\n\t\t\tfor _, userData := range ExpectUserDataExistsFromCreatedLaunchTemplates() {\n\t\t\t\tsystemReserved := ExpectParseNodeConfigKubeletField[corev1.ResourceList](userData, \"systemReserved\")\n\t\t\t\tExpectResources(corev1.ResourceList{\n\t\t\t\t\tcorev1.ResourceCPU:              resource.MustParse(\"500m\"),\n\t\t\t\t\tcorev1.ResourceMemory:           resource.MustParse(\"1Gi\"),\n\t\t\t\t\tcorev1.ResourceEphemeralStorage: resource.MustParse(\"2Gi\"),\n\t\t\t\t}, systemReserved)\n\t\t\t}\n\t\t})\n\t\tIt(\"should specify kubeReserved when overriding system reserved values\", func() {\n\t\t\tnodeClass.Spec.Kubelet = &v1.KubeletConfiguration{\n\t\t\t\tKubeReserved: map[string]string{\n\t\t\t\t\tstring(corev1.ResourceCPU):              \"500m\",\n\t\t\t\t\tstring(corev1.ResourceMemory):           \"1Gi\",\n\t\t\t\t\tstring(corev1.ResourceEphemeralStorage): \"2Gi\",\n\t\t\t\t},\n\t\t\t}\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\tpod := coretest.UnschedulablePod()\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t\tExpect(awsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.Len()).To(BeNumerically(\"==\", 5))\n\t\t\tfor _, userData := range ExpectUserDataExistsFromCreatedLaunchTemplates() {\n\t\t\t\tkubeReserved := ExpectParseNodeConfigKubeletField[corev1.ResourceList](userData, \"kubeReserved\")\n\t\t\t\tExpectResources(corev1.ResourceList{\n\t\t\t\t\tcorev1.ResourceCPU:              resource.MustParse(\"500m\"),\n\t\t\t\t\tcorev1.ResourceMemory:           resource.MustParse(\"1Gi\"),\n\t\t\t\t\tcorev1.ResourceEphemeralStorage: resource.MustParse(\"2Gi\"),\n\t\t\t\t}, kubeReserved)\n\t\t\t}\n\t\t})\n\t\tIt(\"should pass evictionHard threshold values when specified\", func() {\n\t\t\tnodeClass.Spec.Kubelet = &v1.KubeletConfiguration{\n\t\t\t\tEvictionHard: map[string]string{\n\t\t\t\t\t\"memory.available\":  \"10%\",\n\t\t\t\t\t\"nodefs.available\":  \"15%\",\n\t\t\t\t\t\"nodefs.inodesFree\": \"5%\",\n\t\t\t\t},\n\t\t\t}\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\tpod := coretest.UnschedulablePod()\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t\tExpect(awsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.Len()).To(BeNumerically(\"==\", 5))\n\t\t\tfor _, userData := range ExpectUserDataExistsFromCreatedLaunchTemplates() {\n\t\t\t\tevictionHard := ExpectParseNodeConfigKubeletField[map[string]string](userData, \"evictionHard\")\n\t\t\t\tExpect(evictionHard).To(HaveKeyWithValue(\"memory.available\", \"10%\"))\n\t\t\t\tExpect(evictionHard).To(HaveKeyWithValue(\"nodefs.available\", \"15%\"))\n\t\t\t\tExpect(evictionHard).To(HaveKeyWithValue(\"nodefs.inodesFree\", \"5%\"))\n\t\t\t}\n\t\t})\n\t\tIt(\"should pass evictionSoft threshold values when specified\", func() {\n\t\t\tnodeClass.Spec.Kubelet = &v1.KubeletConfiguration{\n\t\t\t\tEvictionSoft: map[string]string{\n\t\t\t\t\t\"memory.available\":  \"10%\",\n\t\t\t\t\t\"nodefs.available\":  \"15%\",\n\t\t\t\t\t\"nodefs.inodesFree\": \"5%\",\n\t\t\t\t},\n\t\t\t\tEvictionSoftGracePeriod: map[string]metav1.Duration{\n\t\t\t\t\t\"memory.available\":  {Duration: time.Minute},\n\t\t\t\t\t\"nodefs.available\":  {Duration: time.Second * 180},\n\t\t\t\t\t\"nodefs.inodesFree\": {Duration: time.Minute * 5},\n\t\t\t\t},\n\t\t\t}\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\tpod := coretest.UnschedulablePod()\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t\tExpect(awsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.Len()).To(BeNumerically(\"==\", 5))\n\t\t\tfor _, userData := range ExpectUserDataExistsFromCreatedLaunchTemplates() {\n\t\t\t\tevictionSoft := ExpectParseNodeConfigKubeletField[map[string]string](userData, \"evictionSoft\")\n\t\t\t\tExpect(evictionSoft).To(HaveKeyWithValue(\"memory.available\", \"10%\"))\n\t\t\t\tExpect(evictionSoft).To(HaveKeyWithValue(\"nodefs.available\", \"15%\"))\n\t\t\t\tExpect(evictionSoft).To(HaveKeyWithValue(\"nodefs.inodesFree\", \"5%\"))\n\t\t\t}\n\t\t})\n\t\tIt(\"should pass evictionSoftGracePeriod values when specified\", func() {\n\t\t\tnodeClass.Spec.Kubelet = &v1.KubeletConfiguration{\n\t\t\t\tEvictionSoftGracePeriod: map[string]metav1.Duration{\n\t\t\t\t\t\"memory.available\":  {Duration: time.Minute},\n\t\t\t\t\t\"nodefs.available\":  {Duration: time.Second * 180},\n\t\t\t\t\t\"nodefs.inodesFree\": {Duration: time.Minute * 5},\n\t\t\t\t},\n\t\t\t\tEvictionSoft: map[string]string{\n\t\t\t\t\t\"memory.available\":  \"10%\",\n\t\t\t\t\t\"nodefs.available\":  \"15%\",\n\t\t\t\t\t\"nodefs.inodesFree\": \"5%\",\n\t\t\t\t},\n\t\t\t}\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\tpod := coretest.UnschedulablePod()\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t\tExpect(awsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.Len()).To(BeNumerically(\"==\", 5))\n\t\t\tfor _, userData := range ExpectUserDataExistsFromCreatedLaunchTemplates() {\n\t\t\t\tevictionSoftGracePeriod := ExpectParseNodeConfigKubeletField[map[string]string](userData, \"evictionSoftGracePeriod\")\n\t\t\t\tExpect(evictionSoftGracePeriod).To(HaveKeyWithValue(\"memory.available\", \"1m0s\"))\n\t\t\t\tExpect(evictionSoftGracePeriod).To(HaveKeyWithValue(\"nodefs.available\", \"3m0s\"))\n\t\t\t\tExpect(evictionSoftGracePeriod).To(HaveKeyWithValue(\"nodefs.inodesFree\", \"5m0s\"))\n\t\t\t}\n\t\t})\n\t\tIt(\"should pass evictionMaxPodGracePeriod when specified\", func() {\n\t\t\tnodeClass.Spec.Kubelet = &v1.KubeletConfiguration{\n\t\t\t\tEvictionMaxPodGracePeriod: aws.Int32(300),\n\t\t\t}\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\tpod := coretest.UnschedulablePod()\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t\tfor _, userData := range ExpectUserDataExistsFromCreatedLaunchTemplates() {\n\t\t\t\tevictionMaxPodGracePeriod := ExpectParseNodeConfigKubeletField[int64](userData, \"evictionMaxPodGracePeriod\")\n\t\t\t\tExpect(evictionMaxPodGracePeriod).To(BeNumerically(\"==\", 300))\n\t\t\t}\n\t\t})\n\t\tIt(\"should specify podsPerCore\", func() {\n\t\t\tnodeClass.Spec.Kubelet = &v1.KubeletConfiguration{\n\t\t\t\tPodsPerCore: aws.Int32(2),\n\t\t\t}\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\tpod := coretest.UnschedulablePod()\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t\tfor _, userData := range ExpectUserDataExistsFromCreatedLaunchTemplates() {\n\t\t\t\tpodsPerCore := ExpectParseNodeConfigKubeletField[int64](userData, \"podsPerCore\")\n\t\t\t\tExpect(podsPerCore).To(BeNumerically(\"==\", 2))\n\t\t\t}\n\t\t})\n\t\tIt(\"should specify podsPerCore with maxPods enabled\", func() {\n\t\t\tnodeClass.Spec.Kubelet = &v1.KubeletConfiguration{\n\t\t\t\tPodsPerCore: aws.Int32(2),\n\t\t\t\tMaxPods:     aws.Int32(100),\n\t\t\t}\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\tpod := coretest.UnschedulablePod()\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t\tfor _, userData := range ExpectUserDataExistsFromCreatedLaunchTemplates() {\n\t\t\t\tpodsPerCore := ExpectParseNodeConfigKubeletField[int64](userData, \"podsPerCore\")\n\t\t\t\tExpect(podsPerCore).To(BeNumerically(\"==\", 2))\n\t\t\t\tmaxPods := ExpectParseNodeConfigKubeletField[int64](userData, \"maxPods\")\n\t\t\t\tExpect(maxPods).To(BeNumerically(\"==\", 100))\n\t\t\t}\n\t\t})\n\t\tIt(\"should specify clusterDNS when running in an ipv6 cluster\", func() {\n\t\t\tawsEnv.LaunchTemplateProvider.KubeDNSIP = net.ParseIP(\"fd4b:121b:812b::a\")\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\tpod := coretest.UnschedulablePod()\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t\tfor _, userData := range ExpectUserDataExistsFromCreatedLaunchTemplates() {\n\t\t\t\tclusterDNS := ExpectParseNodeConfigKubeletField[[]string](userData, \"clusterDNS\")\n\t\t\t\tExpect(clusterDNS).To(HaveLen(1))\n\t\t\t\tExpect(clusterDNS[0]).To(Equal(\"fd4b:121b:812b::a\"))\n\t\t\t}\n\t\t})\n\t\tIt(\"should specify clusterDNS when running in an ipv4 cluster\", func() {\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\tpod := coretest.UnschedulablePod()\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t\tfor _, userData := range ExpectUserDataExistsFromCreatedLaunchTemplates() {\n\t\t\t\tclusterDNS := ExpectParseNodeConfigKubeletField[[]string](userData, \"clusterDNS\")\n\t\t\t\tExpect(clusterDNS).To(HaveLen(1))\n\t\t\t\tExpect(clusterDNS[0]).To(Equal(\"10.0.100.10\"))\n\t\t\t}\n\t\t})\n\t\tIt(\"should pass ImageGCHighThresholdPercent when specified\", func() {\n\t\t\tnodeClass.Spec.Kubelet = &v1.KubeletConfiguration{\n\t\t\t\tImageGCHighThresholdPercent: aws.Int32(50),\n\t\t\t}\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\tpod := coretest.UnschedulablePod()\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t\tfor _, userData := range ExpectUserDataExistsFromCreatedLaunchTemplates() {\n\t\t\t\timageGCHighThresholdPercent := ExpectParseNodeConfigKubeletField[int64](userData, \"imageGCHighThresholdPercent\")\n\t\t\t\tExpect(imageGCHighThresholdPercent).To(BeNumerically(\"==\", 50))\n\t\t\t}\n\t\t})\n\t\tIt(\"should pass ImageGCLowThresholdPercent when specified\", func() {\n\t\t\tnodeClass.Spec.Kubelet = &v1.KubeletConfiguration{\n\t\t\t\tImageGCLowThresholdPercent: aws.Int32(50),\n\t\t\t}\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\tpod := coretest.UnschedulablePod()\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t\tfor _, userData := range ExpectUserDataExistsFromCreatedLaunchTemplates() {\n\t\t\t\timageGCLowThresholdPercent := ExpectParseNodeConfigKubeletField[int64](userData, \"imageGCLowThresholdPercent\")\n\t\t\t\tExpect(imageGCLowThresholdPercent).To(BeNumerically(\"==\", 50))\n\t\t\t}\n\t\t})\n\t\tIt(\"should pass cpuCFSQuota when specified\", func() {\n\t\t\tnodeClass.Spec.Kubelet = &v1.KubeletConfiguration{\n\t\t\t\tCPUCFSQuota: aws.Bool(false),\n\t\t\t}\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\tpod := coretest.UnschedulablePod()\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t\tfor _, userData := range ExpectUserDataExistsFromCreatedLaunchTemplates() {\n\t\t\t\tcpuCFSQuota := ExpectParseNodeConfigKubeletField[bool](userData, \"cpuCFSQuota\")\n\t\t\t\tExpect(cpuCFSQuota).To(BeFalse())\n\t\t\t}\n\t\t})\n\t\tDescribeTable(\n\t\t\t\"should not pass any labels in restricted domains\",\n\t\t\tfunc(label string) {\n\t\t\t\tnodePool.Spec.Template.Labels = lo.Assign(nodePool.Spec.Template.Labels, map[string]string{\n\t\t\t\t\tlabel: \"foobar\",\n\t\t\t\t})\n\t\t\t\tnodePool.Spec.Template.Spec.Requirements = lo.MapToSlice(nodePool.Spec.Template.Labels, func(k, v string) karpv1.NodeSelectorRequirementWithMinValues {\n\t\t\t\t\treturn karpv1.NodeSelectorRequirementWithMinValues{\n\t\t\t\t\t\tKey:      k,\n\t\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\t\tValues:   []string{v},\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\t\tpod := coretest.UnschedulablePod()\n\t\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t\t\tExpectLaunchTemplatesCreatedWithUserDataNotContaining(label)\n\t\t\t},\n\t\t\tEntry(corev1.LabelNamespaceNodeRestriction, corev1.LabelNamespaceNodeRestriction+\"/bar\"),\n\t\t\tEntry(\"kubernetes.io\", \"kubernetes.io/bar\"),\n\t\t\tEntry(\"k8s.io\", \"k8s.io/bar\"),\n\t\t\tEntry(\"*.\"+corev1.LabelNamespaceNodeRestriction, \"foo.\"+corev1.LabelNamespaceNodeRestriction+\"/bar\"),\n\t\t\tEntry(\"kubernetes.io suffix\", \"foo.kubernetes.io/bar\"),\n\t\t\tEntry(\"*.k8s.io\", \"foo.k8s.io/bar\"),\n\t\t)\n\t\tIt(\"should specify --local-disks raid0 when instance-store policy is set on AL2\", func() {\n\t\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{Alias: \"al2@latest\"}}\n\t\t\tnodeClass.Spec.InstanceStorePolicy = lo.ToPtr(v1.InstanceStorePolicyRAID0)\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\tpod := coretest.UnschedulablePod()\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\tExpectScheduled(ctx, env.Client, pod)\n\n\t\t\tExpect(awsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.Len()).To(BeNumerically(\"==\", 5))\n\t\t\tExpectLaunchTemplatesCreatedWithUserDataContaining(\"--local-disks raid0\")\n\t\t})\n\t\tIt(\"should specify RAID0 bootstrap-command when instance-store policy is set on Bottlerocket\", func() {\n\t\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{Alias: \"bottlerocket@latest\"}}\n\t\t\tnodeClass.Spec.InstanceStorePolicy = lo.ToPtr(v1.InstanceStorePolicyRAID0)\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\tpod := coretest.UnschedulablePod()\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\tExpectScheduled(ctx, env.Client, pod)\n\n\t\t\tExpect(awsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.Len()).To(BeNumerically(\"==\", 5))\n\t\t\tExpectLaunchTemplatesCreatedWithUserDataContaining(`\n[settings.bootstrap-commands.000-mount-instance-storage]\ncommands = [['apiclient', 'ephemeral-storage', 'init'], ['apiclient', 'ephemeral-storage', 'bind']]\nmode = 'always'\nessential = true\n`)\n\t\t})\n\t\tIt(\"should merge bootstrap-commands when instance-store policy is set on Bottlerocket\", func() {\n\t\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{Alias: \"bottlerocket@latest\"}}\n\t\t\tnodeClass.Spec.InstanceStorePolicy = lo.ToPtr(v1.InstanceStorePolicyRAID0)\n\t\t\tnodeClass.Spec.UserData = lo.ToPtr(`\n[settings.bootstrap-commands.111-say-hello]\ncommands = [['echo', 'hello']]\nmode = 'always'\nessential = true\n`)\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\tpod := coretest.UnschedulablePod()\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\tExpectScheduled(ctx, env.Client, pod)\n\n\t\t\tExpect(awsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.Len()).To(BeNumerically(\"==\", 5))\n\t\t\tExpectLaunchTemplatesCreatedWithUserDataContaining(`\n[settings.bootstrap-commands]\n[settings.bootstrap-commands.000-mount-instance-storage]\ncommands = [['apiclient', 'ephemeral-storage', 'init'], ['apiclient', 'ephemeral-storage', 'bind']]\nmode = 'always'\nessential = true\n\n[settings.bootstrap-commands.111-say-hello]\ncommands = [['echo', 'hello']]\nmode = 'always'\nessential = true\n`)\n\t\t})\n\t\tIt(\"should use explicit directories for Bottlerocket v1.45.0\", func() {\n\t\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{Alias: \"bottlerocket@v1.45.0\"}}\n\t\t\tnodeClass.Spec.InstanceStorePolicy = lo.ToPtr(v1.InstanceStorePolicyRAID0)\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\tpod := coretest.UnschedulablePod()\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\tExpectScheduled(ctx, env.Client, pod)\n\n\t\t\tExpect(awsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.Len()).To(BeNumerically(\"==\", 5))\n\t\t\tExpectLaunchTemplatesCreatedWithUserDataContaining(`\n[settings.bootstrap-commands.000-mount-instance-storage]\ncommands = [['apiclient', 'ephemeral-storage', 'init'], ['apiclient', 'ephemeral-storage', 'bind', '--dirs', '/var/lib/containerd', '/var/lib/kubelet', '/var/log/pods']]\nmode = 'always'\nessential = true\n`)\n\t\t})\n\t\tIt(\"should use default bind for Bottlerocket v1.46.0\", func() {\n\t\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{Alias: \"bottlerocket@v1.46.0\"}}\n\t\t\tnodeClass.Spec.InstanceStorePolicy = lo.ToPtr(v1.InstanceStorePolicyRAID0)\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\tpod := coretest.UnschedulablePod()\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\tExpectScheduled(ctx, env.Client, pod)\n\n\t\t\tExpect(awsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.Len()).To(BeNumerically(\"==\", 5))\n\t\t\tExpectLaunchTemplatesCreatedWithUserDataContaining(`\n[settings.bootstrap-commands.000-mount-instance-storage]\ncommands = [['apiclient', 'ephemeral-storage', 'init'], ['apiclient', 'ephemeral-storage', 'bind']]\nmode = 'always'\nessential = true\n`)\n\t\t})\n\t\tContext(\"Bottlerocket\", func() {\n\t\t\tBeforeEach(func() {\n\t\t\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{Alias: \"bottlerocket@latest\"}}\n\t\t\t\tnodeClass.Spec.Kubelet = &v1.KubeletConfiguration{MaxPods: lo.ToPtr[int32](110)}\n\t\t\t})\n\t\t\tIt(\"should merge in custom user data\", func() {\n\t\t\t\tcontent, err := os.ReadFile(\"testdata/br_userdata_input.golden\")\n\t\t\t\tExpect(err).To(BeNil())\n\t\t\t\tnodeClass.Spec.UserData = aws.String(fmt.Sprintf(string(content), karpv1.NodePoolLabelKey))\n\t\t\t\tnodePool.Spec.Template.Spec.Taints = []corev1.Taint{{Key: \"foo\", Value: \"bar\", Effect: corev1.TaintEffectNoExecute}}\n\t\t\t\tnodePool.Spec.Template.Spec.StartupTaints = []corev1.Taint{{Key: \"baz\", Value: \"bin\", Effect: corev1.TaintEffectNoExecute}}\n\t\t\t\tExpectApplied(ctx, env.Client, nodeClass, nodePool)\n\t\t\t\tpod := coretest.UnschedulablePod(coretest.PodOptions{\n\t\t\t\t\tTolerations: []corev1.Toleration{{Operator: corev1.TolerationOpExists}},\n\t\t\t\t})\n\t\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t\t\tcontent, err = os.ReadFile(\"testdata/br_userdata_merged.golden\")\n\t\t\t\tExpect(err).To(BeNil())\n\t\t\t\tExpectLaunchTemplatesCreatedWithUserData(fmt.Sprintf(string(content), nodeClass.Name, karpv1.NodePoolLabelKey, nodePool.Name))\n\t\t\t})\n\t\t\tIt(\"should bootstrap when custom user data is empty\", func() {\n\t\t\t\tnodePool.Spec.Template.Spec.Taints = []corev1.Taint{{Key: \"foo\", Value: \"bar\", Effect: corev1.TaintEffectNoExecute}}\n\t\t\t\tnodePool.Spec.Template.Spec.StartupTaints = []corev1.Taint{{Key: \"baz\", Value: \"bin\", Effect: corev1.TaintEffectNoExecute}}\n\t\t\t\tExpectApplied(ctx, env.Client, nodeClass, nodePool)\n\t\t\t\tExpect(env.Client.Get(ctx, client.ObjectKeyFromObject(nodePool), nodePool)).To(Succeed())\n\t\t\t\tpod := coretest.UnschedulablePod(coretest.PodOptions{\n\t\t\t\t\tTolerations: []corev1.Toleration{{Operator: corev1.TolerationOpExists}},\n\t\t\t\t})\n\t\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t\t\tcontent, err := os.ReadFile(\"testdata/br_userdata_unmerged.golden\")\n\t\t\t\tExpect(err).To(BeNil())\n\t\t\t\tExpectLaunchTemplatesCreatedWithUserData(fmt.Sprintf(string(content), nodeClass.Name, karpv1.NodePoolLabelKey, nodePool.Name))\n\t\t\t})\n\t\t\tIt(\"should not bootstrap when provider ref points to a non-existent EC2NodeClass resource\", func() {\n\t\t\t\tnodePool.Spec.Template.Spec.NodeClassRef = &karpv1.NodeClassReference{\n\t\t\t\t\tGroup: \"doesnotexist\",\n\t\t\t\t\tKind:  \"doesnotexist\",\n\t\t\t\t\tName:  \"doesnotexist\",\n\t\t\t\t}\n\t\t\t\tExpectApplied(ctx, env.Client, nodePool)\n\t\t\t\tpod := coretest.UnschedulablePod()\n\t\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\t\t// This will not be scheduled since we were pointed to a non-existent EC2NodeClass resource.\n\t\t\t\tExpectNotScheduled(ctx, env.Client, pod)\n\t\t\t})\n\t\t\tIt(\"should not bootstrap on invalid toml user data\", func() {\n\t\t\t\tnodeClass.Spec.UserData = aws.String(\"#/bin/bash\\n ./not-toml.sh\")\n\t\t\t\tExpectApplied(ctx, env.Client, nodeClass, nodePool)\n\t\t\t\tpod := coretest.UnschedulablePod()\n\t\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\t\t// This will not be scheduled since userData cannot be generated for the prospective node.\n\t\t\t\tExpectNotScheduled(ctx, env.Client, pod)\n\t\t\t})\n\t\t\tIt(\"should override system reserved values in user data\", func() {\n\t\t\t\tnodeClass.Spec.Kubelet = &v1.KubeletConfiguration{\n\t\t\t\t\tSystemReserved: map[string]string{\n\t\t\t\t\t\tstring(corev1.ResourceCPU):              \"2\",\n\t\t\t\t\t\tstring(corev1.ResourceMemory):           \"3Gi\",\n\t\t\t\t\t\tstring(corev1.ResourceEphemeralStorage): \"10Gi\",\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\t\tpod := coretest.UnschedulablePod()\n\t\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t\t\tExpect(awsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.Len()).To(BeNumerically(\"==\", 2))\n\t\t\t\tawsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.ForEach(func(ltInput *ec2.CreateLaunchTemplateInput) {\n\t\t\t\t\tuserData, err := base64.StdEncoding.DecodeString(*ltInput.LaunchTemplateData.UserData)\n\t\t\t\t\tExpect(err).To(BeNil())\n\t\t\t\t\tconfig := &bootstrap.BottlerocketConfig{}\n\t\t\t\t\tExpect(config.UnmarshalTOML(ctx, userData)).To(Succeed())\n\t\t\t\t\tExpect(len(config.Settings.Kubernetes.SystemReserved)).To(Equal(3))\n\t\t\t\t\tExpect(config.Settings.Kubernetes.SystemReserved[corev1.ResourceCPU.String()]).To(Equal(\"2\"))\n\t\t\t\t\tExpect(config.Settings.Kubernetes.SystemReserved[corev1.ResourceMemory.String()]).To(Equal(\"3Gi\"))\n\t\t\t\t\tExpect(config.Settings.Kubernetes.SystemReserved[corev1.ResourceEphemeralStorage.String()]).To(Equal(\"10Gi\"))\n\t\t\t\t})\n\t\t\t})\n\t\t\tIt(\"should override kube reserved values in user data\", func() {\n\t\t\t\tnodeClass.Spec.Kubelet = &v1.KubeletConfiguration{\n\t\t\t\t\tKubeReserved: map[string]string{\n\t\t\t\t\t\tstring(corev1.ResourceCPU):              \"2\",\n\t\t\t\t\t\tstring(corev1.ResourceMemory):           \"3Gi\",\n\t\t\t\t\t\tstring(corev1.ResourceEphemeralStorage): \"10Gi\",\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\t\tpod := coretest.UnschedulablePod()\n\t\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t\t\tExpect(awsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.Len()).To(BeNumerically(\"==\", 5))\n\t\t\t\tawsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.ForEach(func(ltInput *ec2.CreateLaunchTemplateInput) {\n\t\t\t\t\tuserData, err := base64.StdEncoding.DecodeString(*ltInput.LaunchTemplateData.UserData)\n\t\t\t\t\tExpect(err).To(BeNil())\n\t\t\t\t\tconfig := &bootstrap.BottlerocketConfig{}\n\t\t\t\t\tExpect(config.UnmarshalTOML(ctx, userData)).To(Succeed())\n\t\t\t\t\tExpect(len(config.Settings.Kubernetes.KubeReserved)).To(Equal(3))\n\t\t\t\t\tExpect(config.Settings.Kubernetes.KubeReserved[corev1.ResourceCPU.String()]).To(Equal(\"2\"))\n\t\t\t\t\tExpect(config.Settings.Kubernetes.KubeReserved[corev1.ResourceMemory.String()]).To(Equal(\"3Gi\"))\n\t\t\t\t\tExpect(config.Settings.Kubernetes.KubeReserved[corev1.ResourceEphemeralStorage.String()]).To(Equal(\"10Gi\"))\n\t\t\t\t})\n\t\t\t})\n\t\t\tIt(\"should override soft eviction values in user data\", func() {\n\t\t\t\tnodeClass.Spec.Kubelet = &v1.KubeletConfiguration{\n\t\t\t\t\tEvictionSoft: map[string]string{\"memory.available\": \"10%\"},\n\t\t\t\t\tEvictionSoftGracePeriod: map[string]metav1.Duration{\n\t\t\t\t\t\t\"memory.available\": {Duration: time.Minute},\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\t\tpod := coretest.UnschedulablePod()\n\t\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t\t\tExpect(awsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.Len()).To(BeNumerically(\"==\", 5))\n\t\t\t\tExpectLaunchTemplatesCreatedWithUserDataContaining(`\n[settings.kubernetes.eviction-soft]\n'memory.available' = '10%'\n\n[settings.kubernetes.eviction-soft-grace-period]\n'memory.available' = '1m0s'\n`)\n\t\t\t})\n\t\t\tIt(\"should override max pod grace period in user data\", func() {\n\t\t\t\tnodeClass.Spec.Kubelet = &v1.KubeletConfiguration{\n\t\t\t\t\tMaxPods:                   aws.Int32(35),\n\t\t\t\t\tEvictionMaxPodGracePeriod: aws.Int32(10),\n\t\t\t\t}\n\t\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\t\tpod := coretest.UnschedulablePod()\n\t\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t\t\tExpect(awsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.Len()).To(BeNumerically(\"==\", 2))\n\t\t\t\tExpectLaunchTemplatesCreatedWithUserDataContaining(`\n[settings.kubernetes]\napi-server = 'https://test-cluster'\ncluster-certificate = 'Y2EtYnVuZGxlCg=='\ncluster-name = 'test-cluster'\ncluster-dns-ip = '10.0.100.10'\nmax-pods = 35\neviction-max-pod-grace-period = 10\n`)\n\t\t\t})\n\t\t\tIt(\"should override kube reserved values in user data\", func() {\n\t\t\t\tnodeClass.Spec.Kubelet = &v1.KubeletConfiguration{\n\t\t\t\t\tEvictionHard: map[string]string{\n\t\t\t\t\t\t\"memory.available\":  \"10%\",\n\t\t\t\t\t\t\"nodefs.available\":  \"15%\",\n\t\t\t\t\t\t\"nodefs.inodesFree\": \"5%\",\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\t\tpod := coretest.UnschedulablePod()\n\t\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t\t\tExpect(awsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.Len()).To(BeNumerically(\"==\", 5))\n\t\t\t\tawsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.ForEach(func(ltInput *ec2.CreateLaunchTemplateInput) {\n\t\t\t\t\tuserData, err := base64.StdEncoding.DecodeString(*ltInput.LaunchTemplateData.UserData)\n\t\t\t\t\tExpect(err).To(BeNil())\n\t\t\t\t\tconfig := &bootstrap.BottlerocketConfig{}\n\t\t\t\t\tExpect(config.UnmarshalTOML(ctx, userData)).To(Succeed())\n\t\t\t\t\tExpect(len(config.Settings.Kubernetes.EvictionHard)).To(Equal(3))\n\t\t\t\t\tExpect(config.Settings.Kubernetes.EvictionHard[\"memory.available\"]).To(Equal(\"10%\"))\n\t\t\t\t\tExpect(config.Settings.Kubernetes.EvictionHard[\"nodefs.available\"]).To(Equal(\"15%\"))\n\t\t\t\t\tExpect(config.Settings.Kubernetes.EvictionHard[\"nodefs.inodesFree\"]).To(Equal(\"5%\"))\n\t\t\t\t})\n\t\t\t})\n\t\t\tIt(\"should specify max pods value when passing maxPods in configuration\", func() {\n\t\t\t\tnodeClass.Spec.Kubelet = &v1.KubeletConfiguration{\n\t\t\t\t\tMaxPods: aws.Int32(10),\n\t\t\t\t}\n\t\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\t\tpod := coretest.UnschedulablePod()\n\t\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t\t\tExpect(awsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.Len()).To(BeNumerically(\"==\", 2))\n\t\t\t\tawsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.ForEach(func(ltInput *ec2.CreateLaunchTemplateInput) {\n\t\t\t\t\tuserData, err := base64.StdEncoding.DecodeString(*ltInput.LaunchTemplateData.UserData)\n\t\t\t\t\tExpect(err).To(BeNil())\n\t\t\t\t\tconfig := &bootstrap.BottlerocketConfig{}\n\t\t\t\t\tExpect(config.UnmarshalTOML(ctx, userData)).To(Succeed())\n\t\t\t\t\tExpect(config.Settings.Kubernetes.MaxPods).ToNot(BeNil())\n\t\t\t\t\tExpect(*config.Settings.Kubernetes.MaxPods).To(BeNumerically(\"==\", 10))\n\t\t\t\t})\n\t\t\t})\n\t\t\tIt(\"should pass ImageGCHighThresholdPercent when specified\", func() {\n\t\t\t\tnodeClass.Spec.Kubelet = &v1.KubeletConfiguration{\n\t\t\t\t\tImageGCHighThresholdPercent: aws.Int32(50),\n\t\t\t\t}\n\t\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\t\tpod := coretest.UnschedulablePod()\n\t\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t\t\tExpect(awsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.Len()).To(BeNumerically(\"==\", 5))\n\t\t\t\tawsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.ForEach(func(ltInput *ec2.CreateLaunchTemplateInput) {\n\t\t\t\t\tuserData, err := base64.StdEncoding.DecodeString(*ltInput.LaunchTemplateData.UserData)\n\t\t\t\t\tExpect(err).To(BeNil())\n\t\t\t\t\tconfig := &bootstrap.BottlerocketConfig{}\n\t\t\t\t\tExpect(config.UnmarshalTOML(ctx, userData)).To(Succeed())\n\t\t\t\t\tExpect(config.Settings.Kubernetes.ImageGCHighThresholdPercent).ToNot(BeNil())\n\t\t\t\t\tpercent, err := strconv.Atoi(*config.Settings.Kubernetes.ImageGCHighThresholdPercent)\n\t\t\t\t\tExpect(err).ToNot(HaveOccurred())\n\t\t\t\t\tExpect(percent).To(BeNumerically(\"==\", 50))\n\t\t\t\t})\n\t\t\t})\n\t\t\tIt(\"should pass ImageGCLowThresholdPercent when specified\", func() {\n\t\t\t\tnodeClass.Spec.Kubelet = &v1.KubeletConfiguration{\n\t\t\t\t\tImageGCLowThresholdPercent: aws.Int32(50),\n\t\t\t\t}\n\t\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\t\tpod := coretest.UnschedulablePod()\n\t\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t\t\tExpect(awsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.Len()).To(BeNumerically(\"==\", 5))\n\t\t\t\tawsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.ForEach(func(ltInput *ec2.CreateLaunchTemplateInput) {\n\t\t\t\t\tuserData, err := base64.StdEncoding.DecodeString(*ltInput.LaunchTemplateData.UserData)\n\t\t\t\t\tExpect(err).To(BeNil())\n\t\t\t\t\tconfig := &bootstrap.BottlerocketConfig{}\n\t\t\t\t\tExpect(config.UnmarshalTOML(ctx, userData)).To(Succeed())\n\t\t\t\t\tExpect(config.Settings.Kubernetes.ImageGCLowThresholdPercent).ToNot(BeNil())\n\t\t\t\t\tpercent, err := strconv.Atoi(*config.Settings.Kubernetes.ImageGCLowThresholdPercent)\n\t\t\t\t\tExpect(err).ToNot(HaveOccurred())\n\t\t\t\t\tExpect(percent).To(BeNumerically(\"==\", 50))\n\t\t\t\t})\n\t\t\t})\n\t\t\tIt(\"should pass ClusterDNSIP when discovered\", func() {\n\t\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\t\tpod := coretest.UnschedulablePod()\n\t\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t\t\tExpect(awsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.Len()).To(BeNumerically(\"==\", 2))\n\t\t\t\tawsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.ForEach(func(ltInput *ec2.CreateLaunchTemplateInput) {\n\t\t\t\t\tuserData, err := base64.StdEncoding.DecodeString(*ltInput.LaunchTemplateData.UserData)\n\t\t\t\t\tExpect(err).To(BeNil())\n\t\t\t\t\tconfig := &bootstrap.BottlerocketConfig{}\n\t\t\t\t\tExpect(config.UnmarshalTOML(ctx, userData)).To(Succeed())\n\t\t\t\t\tExpect(config.Settings.Kubernetes.ClusterDNSIP).ToNot(BeNil())\n\t\t\t\t\tExpect(*config.Settings.Kubernetes.ClusterDNSIP).To(Equal(\"10.0.100.10\"))\n\t\t\t\t})\n\t\t\t})\n\t\t\tIt(\"should pass CPUCFSQuota when specified\", func() {\n\t\t\t\tnodeClass.Spec.Kubelet = &v1.KubeletConfiguration{\n\t\t\t\t\tCPUCFSQuota: aws.Bool(false),\n\t\t\t\t}\n\t\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\t\tpod := coretest.UnschedulablePod()\n\t\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t\t\tExpect(awsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.Len()).To(BeNumerically(\"==\", 5))\n\t\t\t\tawsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.ForEach(func(ltInput *ec2.CreateLaunchTemplateInput) {\n\t\t\t\t\tuserData, err := base64.StdEncoding.DecodeString(*ltInput.LaunchTemplateData.UserData)\n\t\t\t\t\tExpect(err).To(BeNil())\n\t\t\t\t\tconfig := &bootstrap.BottlerocketConfig{}\n\t\t\t\t\tExpect(config.UnmarshalTOML(ctx, userData)).To(Succeed())\n\t\t\t\t\tExpect(config.Settings.Kubernetes.CPUCFSQuota).ToNot(BeNil())\n\t\t\t\t\tExpect(*config.Settings.Kubernetes.CPUCFSQuota).To(BeFalse())\n\t\t\t\t})\n\t\t\t})\n\t\t\tIt(\"should specify labels in the Kubelet flags when specified in NodePool\", func() {\n\t\t\t\tdesiredLabels := map[string]string{\n\t\t\t\t\t\"test-label-1\": \"value-1\",\n\t\t\t\t\t\"test-label-2\": \"value-2\",\n\t\t\t\t}\n\t\t\t\tnodePool.Spec.Template.Labels = desiredLabels\n\n\t\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\t\tpod := coretest.UnschedulablePod()\n\t\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t\t\tfor _, userData := range ExpectUserDataExistsFromCreatedLaunchTemplates() {\n\t\t\t\t\tconfig := &bootstrap.BottlerocketConfig{}\n\t\t\t\t\tExpect(config.UnmarshalTOML(ctx, []byte(userData))).To(Succeed())\n\t\t\t\t\tfor k, v := range desiredLabels {\n\t\t\t\t\t\tExpect(config.Settings.Kubernetes.NodeLabels).To(HaveKeyWithValue(k, v))\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\t\t\tIt(\"should specify labels in the Kubelet flags when single value requirements are specified in NodePool\", func() {\n\t\t\t\tdesiredLabels := map[string]string{\n\t\t\t\t\t\"test-label-1\": \"value-1\",\n\t\t\t\t\t\"test-label-2\": \"value-2\",\n\t\t\t\t}\n\t\t\t\tnodePool.Spec.Template.Spec.Requirements = lo.MapToSlice(desiredLabels, func(k, v string) karpv1.NodeSelectorRequirementWithMinValues {\n\t\t\t\t\treturn karpv1.NodeSelectorRequirementWithMinValues{\n\t\t\t\t\t\tKey:      k,\n\t\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\t\tValues:   []string{v},\n\t\t\t\t\t}\n\t\t\t\t})\n\n\t\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\t\tpod := coretest.UnschedulablePod()\n\t\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t\t\tfor _, userData := range ExpectUserDataExistsFromCreatedLaunchTemplates() {\n\t\t\t\t\tconfig := &bootstrap.BottlerocketConfig{}\n\t\t\t\t\tExpect(config.UnmarshalTOML(ctx, []byte(userData))).To(Succeed())\n\t\t\t\t\tfor k, v := range desiredLabels {\n\t\t\t\t\t\tExpect(config.Settings.Kubernetes.NodeLabels).To(HaveKeyWithValue(k, v))\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\t\t})\n\t\tContext(\"AL2 Custom UserData\", func() {\n\t\t\tBeforeEach(func() {\n\t\t\t\tnodeClass.Spec.Kubelet = &v1.KubeletConfiguration{MaxPods: lo.ToPtr[int32](110)}\n\t\t\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{Alias: \"al2@latest\"}}\n\t\t\t})\n\t\t\tIt(\"should merge in custom user data\", func() {\n\t\t\t\tcontent, err := os.ReadFile(\"testdata/al2_userdata_input.golden\")\n\t\t\t\tExpect(err).To(BeNil())\n\t\t\t\tnodeClass.Spec.UserData = aws.String(string(content))\n\t\t\t\tExpectApplied(ctx, env.Client, nodeClass, nodePool)\n\t\t\t\tpod := coretest.UnschedulablePod()\n\t\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t\t\tcontent, err = os.ReadFile(\"testdata/al2_userdata_merged.golden\")\n\t\t\t\tExpect(err).To(BeNil())\n\t\t\t\texpectedUserData := fmt.Sprintf(string(content), nodeClass.Name, karpv1.NodePoolLabelKey, nodePool.Name)\n\t\t\t\tExpectLaunchTemplatesCreatedWithUserData(expectedUserData)\n\t\t\t})\n\t\t\tIt(\"should merge in custom user data when Content-Type is before MIME-Version\", func() {\n\t\t\t\tcontent, err := os.ReadFile(\"testdata/al2_userdata_content_type_first_input.golden\")\n\t\t\t\tExpect(err).To(BeNil())\n\t\t\t\tnodeClass.Spec.UserData = aws.String(string(content))\n\t\t\t\tExpectApplied(ctx, env.Client, nodeClass, nodePool)\n\t\t\t\tpod := coretest.UnschedulablePod()\n\t\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t\t\tcontent, err = os.ReadFile(\"testdata/al2_userdata_merged.golden\")\n\t\t\t\tExpect(err).To(BeNil())\n\t\t\t\texpectedUserData := fmt.Sprintf(string(content), nodeClass.Name, karpv1.NodePoolLabelKey, nodePool.Name)\n\t\t\t\tExpectLaunchTemplatesCreatedWithUserData(expectedUserData)\n\t\t\t})\n\t\t\tIt(\"should merge in custom user data not in multi-part mime format\", func() {\n\t\t\t\tcontent, err := os.ReadFile(\"testdata/al2_no_mime_userdata_input.golden\")\n\t\t\t\tExpect(err).To(BeNil())\n\t\t\t\tnodeClass.Spec.UserData = aws.String(string(content))\n\t\t\t\tExpectApplied(ctx, env.Client, nodeClass, nodePool)\n\t\t\t\tpod := coretest.UnschedulablePod()\n\t\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t\t\tcontent, err = os.ReadFile(\"testdata/al2_userdata_merged.golden\")\n\t\t\t\tExpect(err).To(BeNil())\n\t\t\t\texpectedUserData := fmt.Sprintf(string(content), nodeClass.Name, karpv1.NodePoolLabelKey, nodePool.Name)\n\t\t\t\tExpectLaunchTemplatesCreatedWithUserData(expectedUserData)\n\t\t\t})\n\t\t\tIt(\"should handle empty custom user data\", func() {\n\t\t\t\tnodeClass.Spec.UserData = nil\n\t\t\t\tExpectApplied(ctx, env.Client, nodeClass, nodePool)\n\t\t\t\tpod := coretest.UnschedulablePod()\n\t\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t\t\tcontent, err := os.ReadFile(\"testdata/al2_userdata_unmerged.golden\")\n\t\t\t\tExpect(err).To(BeNil())\n\t\t\t\texpectedUserData := fmt.Sprintf(string(content), nodeClass.Name, karpv1.NodePoolLabelKey, nodePool.Name)\n\t\t\t\tExpectLaunchTemplatesCreatedWithUserData(expectedUserData)\n\t\t\t})\n\t\t})\n\t\tContext(\"AL2023\", func() {\n\t\t\tBeforeEach(func() {\n\t\t\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{Alias: \"al2023@latest\"}}\n\t\t\t})\n\t\t\tContext(\"Kubelet\", func() {\n\t\t\t\tIt(\"should specify taints in the KubeletConfiguration when specified in NodePool\", func() {\n\t\t\t\t\tdesiredTaints := []corev1.Taint{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey:    \"test-taint-1\",\n\t\t\t\t\t\t\tEffect: corev1.TaintEffectNoSchedule,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey:    \"test-taint-2\",\n\t\t\t\t\t\t\tEffect: corev1.TaintEffectNoExecute,\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\t\t\t\t\tnodePool.Spec.Template.Spec.Taints = desiredTaints\n\t\t\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\t\t\tpod := coretest.UnschedulablePod(coretest.UnscheduleablePodOptions(coretest.PodOptions{\n\t\t\t\t\t\tTolerations: []corev1.Toleration{{\n\t\t\t\t\t\t\tOperator: corev1.TolerationOpExists,\n\t\t\t\t\t\t}},\n\t\t\t\t\t}))\n\t\t\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t\t\t\tfor _, userData := range ExpectUserDataExistsFromCreatedLaunchTemplates() {\n\t\t\t\t\t\tconfigs := ExpectParseNodeConfigs(userData)\n\t\t\t\t\t\tExpect(len(configs)).To(Equal(1))\n\t\t\t\t\t\ttaintsRaw, ok := configs[0].Spec.Kubelet.Config[\"registerWithTaints\"]\n\t\t\t\t\t\tExpect(ok).To(BeTrue())\n\t\t\t\t\t\ttaints := []corev1.Taint{}\n\t\t\t\t\t\tExpect(yaml.Unmarshal(taintsRaw.Raw, &taints)).To(Succeed())\n\t\t\t\t\t\tExpect(len(taints)).To(Equal(3))\n\t\t\t\t\t\tExpect(taints).To(ContainElements(lo.Map(desiredTaints, func(t corev1.Taint, _ int) any {\n\t\t\t\t\t\t\treturn any(t)\n\t\t\t\t\t\t})))\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\tIt(\"should specify labels in the Kubelet flags when specified in NodePool\", func() {\n\t\t\t\t\tdesiredLabels := map[string]string{\n\t\t\t\t\t\t\"test-label-1\": \"value-1\",\n\t\t\t\t\t\t\"test-label-2\": \"value-2\",\n\t\t\t\t\t}\n\t\t\t\t\tnodePool.Spec.Template.Labels = desiredLabels\n\n\t\t\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\t\t\tpod := coretest.UnschedulablePod()\n\t\t\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t\t\t\tfor _, userData := range ExpectUserDataExistsFromCreatedLaunchTemplates() {\n\t\t\t\t\t\tconfigs := ExpectParseNodeConfigs(userData)\n\t\t\t\t\t\tExpect(len(configs)).To(Equal(1))\n\t\t\t\t\t\tlabelFlag, ok := lo.Find(configs[0].Spec.Kubelet.Flags, func(flag string) bool {\n\t\t\t\t\t\t\treturn strings.HasPrefix(flag, \"--node-labels\")\n\t\t\t\t\t\t})\n\t\t\t\t\t\tExpect(ok).To(BeTrue())\n\t\t\t\t\t\tfor label, value := range desiredLabels {\n\t\t\t\t\t\t\tExpect(labelFlag).To(ContainSubstring(fmt.Sprintf(\"%s=%s\", label, value)))\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\tIt(\"should specify labels in the Kubelet flags when single value requirements are specified in NodePool\", func() {\n\t\t\t\t\tdesiredLabels := map[string]string{\n\t\t\t\t\t\t\"test-label-1\": \"value-1\",\n\t\t\t\t\t\t\"test-label-2\": \"value-2\",\n\t\t\t\t\t}\n\t\t\t\t\tnodePool.Spec.Template.Spec.Requirements = lo.MapToSlice(desiredLabels, func(k, v string) karpv1.NodeSelectorRequirementWithMinValues {\n\t\t\t\t\t\treturn karpv1.NodeSelectorRequirementWithMinValues{\n\t\t\t\t\t\t\tKey:      k,\n\t\t\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\t\t\tValues:   []string{v},\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\n\t\t\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\t\t\tpod := coretest.UnschedulablePod()\n\t\t\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t\t\t\tfor _, userData := range ExpectUserDataExistsFromCreatedLaunchTemplates() {\n\t\t\t\t\t\tconfigs := ExpectParseNodeConfigs(userData)\n\t\t\t\t\t\tExpect(len(configs)).To(Equal(1))\n\t\t\t\t\t\tlabelFlag, ok := lo.Find(configs[0].Spec.Kubelet.Flags, func(flag string) bool {\n\t\t\t\t\t\t\treturn strings.HasPrefix(flag, \"--node-labels\")\n\t\t\t\t\t\t})\n\t\t\t\t\t\tExpect(ok).To(BeTrue())\n\t\t\t\t\t\tfor label, value := range desiredLabels {\n\t\t\t\t\t\t\tExpect(labelFlag).To(ContainSubstring(fmt.Sprintf(\"%s=%s\", label, value)))\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\tDescribeTable(\n\t\t\t\t\t\"should specify KubletConfiguration field when specified in NodePool\",\n\t\t\t\t\tfunc(field string, kc v1.KubeletConfiguration) {\n\t\t\t\t\t\tnodeClass.Spec.Kubelet = &kc\n\t\t\t\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\t\t\t\tpod := coretest.UnschedulablePod()\n\t\t\t\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\t\t\t\tExpectScheduled(ctx, env.Client, pod)\n\n\t\t\t\t\t\t// Convert provided KubeletConfiguration to an InlineConfig for comparison with NodeConfig\n\t\t\t\t\t\tinlineConfig := func() map[string]runtime.RawExtension {\n\t\t\t\t\t\t\tconfigYAML, err := yaml.Marshal(kc)\n\t\t\t\t\t\t\tExpect(err).To(BeNil())\n\t\t\t\t\t\t\tconfigMap := map[string]any{}\n\t\t\t\t\t\t\tExpect(yaml.Unmarshal(configYAML, &configMap)).To(Succeed())\n\t\t\t\t\t\t\treturn lo.MapValues(configMap, func(v any, _ string) runtime.RawExtension {\n\t\t\t\t\t\t\t\tval, err := json.Marshal(v)\n\t\t\t\t\t\t\t\tExpect(err).To(BeNil())\n\t\t\t\t\t\t\t\treturn runtime.RawExtension{Raw: val}\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}()\n\t\t\t\t\t\tfor _, userData := range ExpectUserDataExistsFromCreatedLaunchTemplates() {\n\t\t\t\t\t\t\tconfigs := ExpectParseNodeConfigs(userData)\n\t\t\t\t\t\t\tExpect(len(configs)).To(Equal(1))\n\t\t\t\t\t\t\tExpect(configs[0].Spec.Kubelet.Config[field]).To(Equal(inlineConfig[field]))\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tEntry(\"systemReserved\", \"systemReserved\", v1.KubeletConfiguration{\n\t\t\t\t\t\tSystemReserved: map[string]string{\n\t\t\t\t\t\t\tstring(corev1.ResourceCPU):              \"500m\",\n\t\t\t\t\t\t\tstring(corev1.ResourceMemory):           \"1Gi\",\n\t\t\t\t\t\t\tstring(corev1.ResourceEphemeralStorage): \"2Gi\",\n\t\t\t\t\t\t},\n\t\t\t\t\t}),\n\t\t\t\t\tEntry(\"kubeReserved\", \"kubeReserved\", v1.KubeletConfiguration{\n\t\t\t\t\t\tKubeReserved: map[string]string{\n\t\t\t\t\t\t\tstring(corev1.ResourceCPU):              \"500m\",\n\t\t\t\t\t\t\tstring(corev1.ResourceMemory):           \"1Gi\",\n\t\t\t\t\t\t\tstring(corev1.ResourceEphemeralStorage): \"2Gi\",\n\t\t\t\t\t\t},\n\t\t\t\t\t}),\n\t\t\t\t\tEntry(\"evictionHard\", \"evictionHard\", v1.KubeletConfiguration{\n\t\t\t\t\t\tEvictionHard: map[string]string{\n\t\t\t\t\t\t\t\"memory.available\":  \"10%\",\n\t\t\t\t\t\t\t\"nodefs.available\":  \"15%\",\n\t\t\t\t\t\t\t\"nodefs.inodesFree\": \"5%\",\n\t\t\t\t\t\t},\n\t\t\t\t\t}),\n\t\t\t\t\tEntry(\"evictionSoft\", \"evictionSoft\", v1.KubeletConfiguration{\n\t\t\t\t\t\tEvictionSoft: map[string]string{\n\t\t\t\t\t\t\t\"memory.available\":  \"10%\",\n\t\t\t\t\t\t\t\"nodefs.available\":  \"15%\",\n\t\t\t\t\t\t\t\"nodefs.inodesFree\": \"5%\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tEvictionSoftGracePeriod: map[string]metav1.Duration{\n\t\t\t\t\t\t\t\"memory.available\":  {Duration: time.Minute},\n\t\t\t\t\t\t\t\"nodefs.available\":  {Duration: time.Second * 180},\n\t\t\t\t\t\t\t\"nodefs.inodesFree\": {Duration: time.Minute * 5},\n\t\t\t\t\t\t},\n\t\t\t\t\t}),\n\t\t\t\t\tEntry(\"evictionSoftGracePeriod\", \"evictionSoftGracePeriod\", v1.KubeletConfiguration{\n\t\t\t\t\t\tEvictionSoft: map[string]string{\n\t\t\t\t\t\t\t\"memory.available\":  \"10%\",\n\t\t\t\t\t\t\t\"nodefs.available\":  \"15%\",\n\t\t\t\t\t\t\t\"nodefs.inodesFree\": \"5%\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tEvictionSoftGracePeriod: map[string]metav1.Duration{\n\t\t\t\t\t\t\t\"memory.available\":  {Duration: time.Minute},\n\t\t\t\t\t\t\t\"nodefs.available\":  {Duration: time.Second * 180},\n\t\t\t\t\t\t\t\"nodefs.inodesFree\": {Duration: time.Minute * 5},\n\t\t\t\t\t\t},\n\t\t\t\t\t}),\n\t\t\t\t\tEntry(\"evictionMaxPodGracePeriod\", \"evictionMaxPodGracePeriod\", v1.KubeletConfiguration{\n\t\t\t\t\t\tEvictionMaxPodGracePeriod: lo.ToPtr[int32](300),\n\t\t\t\t\t}),\n\t\t\t\t\tEntry(\"podsPerCore\", \"podsPerCore\", v1.KubeletConfiguration{\n\t\t\t\t\t\tPodsPerCore: lo.ToPtr[int32](2),\n\t\t\t\t\t}),\n\t\t\t\t\tEntry(\"clusterDNS\", \"clusterDNS\", v1.KubeletConfiguration{\n\t\t\t\t\t\tClusterDNS: []string{\"10.0.100.0\"},\n\t\t\t\t\t}),\n\t\t\t\t\tEntry(\"imageGCHighThresholdPercent\", \"imageGCHighThresholdPercent\", v1.KubeletConfiguration{\n\t\t\t\t\t\tImageGCHighThresholdPercent: lo.ToPtr[int32](50),\n\t\t\t\t\t}),\n\t\t\t\t\tEntry(\"imageGCLowThresholdPercent\", \"imageGCLowThresholdPercent\", v1.KubeletConfiguration{\n\t\t\t\t\t\tImageGCLowThresholdPercent: lo.ToPtr[int32](50),\n\t\t\t\t\t}),\n\t\t\t\t\tEntry(\"cpuCFSQuota\", \"cpuCFSQuota\", v1.KubeletConfiguration{\n\t\t\t\t\t\tCPUCFSQuota: lo.ToPtr(false),\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t})\n\t\t\tIt(\"should set LocalDiskStrategy to Raid0 when specified by the InstanceStorePolicy\", func() {\n\t\t\t\tnodeClass.Spec.InstanceStorePolicy = lo.ToPtr(v1.InstanceStorePolicyRAID0)\n\t\t\t\tExpectApplied(ctx, env.Client, nodeClass, nodePool)\n\t\t\t\tpod := coretest.UnschedulablePod()\n\t\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t\t\tfor _, userData := range ExpectUserDataExistsFromCreatedLaunchTemplates() {\n\t\t\t\t\tconfigs := ExpectParseNodeConfigs(userData)\n\t\t\t\t\tExpect(len(configs)).To(Equal(1))\n\t\t\t\t\tExpect(configs[0].Spec.Instance.LocalStorage.Strategy).To(Equal(admv1alpha1.LocalStorageRAID0))\n\t\t\t\t}\n\t\t\t})\n\t\t\tDescribeTable(\n\t\t\t\t\"should merge custom user data\",\n\t\t\t\tfunc(inputFile *string, mergedFile string) {\n\t\t\t\t\tif inputFile != nil {\n\t\t\t\t\t\tcontent, err := os.ReadFile(\"testdata/\" + *inputFile)\n\t\t\t\t\t\tExpect(err).To(BeNil())\n\t\t\t\t\t\tnodeClass.Spec.UserData = lo.ToPtr(string(content))\n\t\t\t\t\t}\n\t\t\t\t\tnodeClass.Spec.Kubelet = &v1.KubeletConfiguration{MaxPods: lo.ToPtr[int32](110)}\n\t\t\t\t\tExpectApplied(ctx, env.Client, nodeClass, nodePool)\n\t\t\t\t\tpod := coretest.UnschedulablePod()\n\t\t\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t\t\t\tcontent, err := os.ReadFile(\"testdata/\" + mergedFile)\n\t\t\t\t\tExpect(err).To(BeNil())\n\t\t\t\t\texpectedUserData := fmt.Sprintf(string(content), nodeClass.Name, karpv1.NodePoolLabelKey, nodePool.Name)\n\t\t\t\t\tExpectLaunchTemplatesCreatedWithUserData(expectedUserData)\n\t\t\t\t},\n\t\t\t\tEntry(\"MIME\", lo.ToPtr(\"al2023_mime_userdata_input.golden\"), \"al2023_mime_userdata_merged.golden\"),\n\t\t\t\tEntry(\"YAML\", lo.ToPtr(\"al2023_yaml_userdata_input.golden\"), \"al2023_yaml_userdata_merged.golden\"),\n\t\t\t\tEntry(\"shell\", lo.ToPtr(\"al2023_shell_userdata_input.golden\"), \"al2023_shell_userdata_merged.golden\"),\n\t\t\t\tEntry(\"empty\", nil, \"al2023_userdata_unmerged.golden\"),\n\t\t\t)\n\t\t\tIt(\"should fail to create launch templates if cluster CIDR is unresolved\", func() {\n\t\t\t\tawsEnv.LaunchTemplateProvider.ClusterCIDR.Store(nil)\n\t\t\t\tExpectApplied(ctx, env.Client, nodeClass, nodePool)\n\t\t\t\tpod := coretest.UnschedulablePod()\n\t\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\t\tExpectNotScheduled(ctx, env.Client, pod)\n\t\t\t\tExpect(awsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.Len()).To(Equal(0))\n\t\t\t})\n\t\t})\n\t\tContext(\"Custom AMI Selector\", func() {\n\t\t\tIt(\"should use ami selector specified in EC2NodeClass\", func() {\n\t\t\t\tnodeClass.Spec.AMIFamily = lo.ToPtr(v1.AMIFamilyCustom)\n\t\t\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{Tags: map[string]string{\"*\": \"*\"}}}\n\t\t\t\tnodeClass.Status.AMIs = []v1.AMI{\n\t\t\t\t\t{\n\t\t\t\t\t\tID: \"ami-123\",\n\t\t\t\t\t\tRequirements: []corev1.NodeSelectorRequirement{\n\t\t\t\t\t\t\t{Key: corev1.LabelArchStable, Operator: corev1.NodeSelectorOpIn, Values: []string{karpv1.ArchitectureAmd64}},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t\tExpectApplied(ctx, env.Client, nodeClass, nodePool)\n\t\t\t\tpod := coretest.UnschedulablePod()\n\t\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t\t\tExpect(awsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.Len()).To(BeNumerically(\"==\", 1))\n\t\t\t\tawsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.ForEach(func(ltInput *ec2.CreateLaunchTemplateInput) {\n\t\t\t\t\tExpect(\"ami-123\").To(Equal(*ltInput.LaunchTemplateData.ImageId))\n\t\t\t\t})\n\t\t\t})\n\t\t\tIt(\"should copy over userData untouched when AMIFamily is Custom\", func() {\n\t\t\t\tnodeClass.Spec.UserData = aws.String(\"special user data\")\n\t\t\t\tnodeClass.Spec.AMIFamily = lo.ToPtr(v1.AMIFamilyCustom)\n\t\t\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{Tags: map[string]string{\"*\": \"*\"}}}\n\t\t\t\tnodeClass.Status.AMIs = []v1.AMI{\n\t\t\t\t\t{\n\t\t\t\t\t\tID: \"ami-123\",\n\t\t\t\t\t\tRequirements: []corev1.NodeSelectorRequirement{\n\t\t\t\t\t\t\t{Key: corev1.LabelArchStable, Operator: corev1.NodeSelectorOpIn, Values: []string{karpv1.ArchitectureAmd64}},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t\tExpectApplied(ctx, env.Client, nodeClass, nodePool)\n\t\t\t\tpod := coretest.UnschedulablePod()\n\t\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t\t\tExpectLaunchTemplatesCreatedWithUserData(\"special user data\")\n\t\t\t})\n\t\t\tIt(\"should correctly use ami selector with specific IDs in EC2NodeClass\", func() {\n\t\t\t\tnodeClass.Spec.AMIFamily = lo.ToPtr(v1.AMIFamilyCustom)\n\t\t\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{ID: \"ami-123\"}, {ID: \"ami-456\"}}\n\t\t\t\tawsEnv.EC2API.DescribeImagesOutput.Set(&ec2.DescribeImagesOutput{Images: []ec2types.Image{\n\t\t\t\t\t{\n\t\t\t\t\t\tName:         aws.String(coretest.RandomName()),\n\t\t\t\t\t\tImageId:      aws.String(\"ami-123\"),\n\t\t\t\t\t\tArchitecture: \"x86_64\",\n\t\t\t\t\t\tTags:         []ec2types.Tag{{Key: aws.String(corev1.LabelInstanceTypeStable), Value: aws.String(\"m5.large\")}},\n\t\t\t\t\t\tCreationDate: aws.String(\"2022-08-15T12:00:00Z\"),\n\t\t\t\t\t\tState:        ec2types.ImageStateAvailable,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tName:         aws.String(coretest.RandomName()),\n\t\t\t\t\t\tImageId:      aws.String(\"ami-456\"),\n\t\t\t\t\t\tArchitecture: \"x86_64\",\n\t\t\t\t\t\tTags:         []ec2types.Tag{{Key: aws.String(corev1.LabelInstanceTypeStable), Value: aws.String(\"m5.xlarge\")}},\n\t\t\t\t\t\tCreationDate: aws.String(\"2022-08-15T12:00:00Z\"),\n\t\t\t\t\t\tState:        ec2types.ImageStateAvailable,\n\t\t\t\t\t},\n\t\t\t\t}})\n\t\t\t\tExpectApplied(ctx, env.Client, nodeClass, nodePool)\n\t\t\t\tpod := coretest.UnschedulablePod()\n\t\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t\t\t_, err := awsEnv.AMIProvider.List(ctx, nodeClass)\n\t\t\t\tExpect(err).To(BeNil())\n\t\t\t\tExpect(awsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.Len()).To(BeNumerically(\">=\", 2))\n\t\t\t\tactualFilter := awsEnv.EC2API.CalledWithDescribeImagesInput.Pop().Filters\n\t\t\t\texpectedFilter := []ec2types.Filter{\n\t\t\t\t\t{\n\t\t\t\t\t\tName:   aws.String(\"image-id\"),\n\t\t\t\t\t\tValues: []string{\"ami-123\", \"ami-456\"},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tName:   aws.String(\"state\"),\n\t\t\t\t\t\tValues: []string{string(ec2types.ImageStateAvailable)},\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t\tExpect(actualFilter).To(Equal(expectedFilter))\n\t\t\t})\n\t\t\tIt(\"should create multiple launch templates when multiple amis are discovered with non-equivalent requirements\", func() {\n\t\t\t\tnodeClass.Spec.AMIFamily = lo.ToPtr(v1.AMIFamilyCustom)\n\t\t\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{Tags: map[string]string{\"*\": \"*\"}}}\n\t\t\t\tnodeClass.Status.AMIs = []v1.AMI{\n\t\t\t\t\t{\n\t\t\t\t\t\tID: \"ami-123\",\n\t\t\t\t\t\tRequirements: []corev1.NodeSelectorRequirement{\n\t\t\t\t\t\t\t{Key: corev1.LabelArchStable, Operator: corev1.NodeSelectorOpIn, Values: []string{karpv1.ArchitectureAmd64}},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tID: \"ami-456\",\n\t\t\t\t\t\tRequirements: []corev1.NodeSelectorRequirement{\n\t\t\t\t\t\t\t{Key: corev1.LabelArchStable, Operator: corev1.NodeSelectorOpIn, Values: []string{karpv1.ArchitectureArm64}},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t\tExpectApplied(ctx, env.Client, nodeClass, nodePool)\n\t\t\t\tpod := coretest.UnschedulablePod()\n\t\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t\t\tExpect(awsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.Len()).To(BeNumerically(\">=\", 2))\n\t\t\t\texpectedImageIds := sets.New(\"ami-123\", \"ami-456\")\n\t\t\t\tactualImageIds := sets.New[string]()\n\t\t\t\tawsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.ForEach(func(ltInput *ec2.CreateLaunchTemplateInput) {\n\t\t\t\t\tactualImageIds.Insert(*ltInput.LaunchTemplateData.ImageId)\n\t\t\t\t})\n\t\t\t\tExpect(expectedImageIds.Equal(actualImageIds)).To(BeTrue())\n\t\t\t})\n\t\t\tIt(\"should create a launch template with the newest compatible AMI when multiple amis are discovered\", func() {\n\t\t\t\tawsEnv.EC2API.DescribeImagesOutput.Set(&ec2.DescribeImagesOutput{Images: []ec2types.Image{\n\t\t\t\t\t{\n\t\t\t\t\t\tName:         aws.String(coretest.RandomName()),\n\t\t\t\t\t\tImageId:      aws.String(\"ami-123\"),\n\t\t\t\t\t\tArchitecture: \"x86_64\",\n\t\t\t\t\t\tCreationDate: aws.String(\"2020-01-01T12:00:00Z\"),\n\t\t\t\t\t\tState:        ec2types.ImageStateAvailable,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tName:         aws.String(coretest.RandomName()),\n\t\t\t\t\t\tImageId:      aws.String(\"ami-456\"),\n\t\t\t\t\t\tArchitecture: \"x86_64\",\n\t\t\t\t\t\tCreationDate: aws.String(\"2021-01-01T12:00:00Z\"),\n\t\t\t\t\t\tState:        ec2types.ImageStateAvailable,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t// Incompatible because required ARM64\n\t\t\t\t\t\tName:         aws.String(coretest.RandomName()),\n\t\t\t\t\t\tImageId:      aws.String(\"ami-789\"),\n\t\t\t\t\t\tArchitecture: \"arm64\",\n\t\t\t\t\t\tCreationDate: aws.String(\"2022-01-01T12:00:00Z\"),\n\t\t\t\t\t\tState:        ec2types.ImageStateAvailable,\n\t\t\t\t\t},\n\t\t\t\t}})\n\t\t\t\tnodeClass.Spec.AMIFamily = lo.ToPtr(v1.AMIFamilyCustom)\n\t\t\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{Tags: map[string]string{\"*\": \"*\"}}}\n\t\t\t\tnodePool.Spec.Template.Spec.Requirements = []karpv1.NodeSelectorRequirementWithMinValues{\n\t\t\t\t\t{\n\t\t\t\t\t\tKey:      corev1.LabelArchStable,\n\t\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\t\tValues:   []string{karpv1.ArchitectureAmd64},\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t\tExpectApplied(ctx, env.Client, nodeClass, nodePool)\n\n\t\t\t\tcontroller := nodeclass.NewController(awsEnv.Clock, env.Client, cloudProvider, recorder, fake.DefaultRegion, awsEnv.SubnetProvider, awsEnv.SecurityGroupProvider, awsEnv.AMIProvider, awsEnv.InstanceProfileProvider, awsEnv.InstanceTypesProvider, awsEnv.LaunchTemplateProvider, awsEnv.CapacityReservationProvider, awsEnv.EC2API, awsEnv.ValidationCache, awsEnv.RecreationCache, awsEnv.AMIResolver, options.FromContext(ctx).DisableDryRun)\n\t\t\t\tExpectObjectReconciled(ctx, env.Client, controller, nodeClass)\n\n\t\t\t\tpod := coretest.UnschedulablePod()\n\t\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t\t\t// one for validation and one for creation\n\t\t\t\tExpect(awsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.Len()).To(BeNumerically(\"==\", 2))\n\t\t\t\tawsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.ForEach(func(ltInput *ec2.CreateLaunchTemplateInput) {\n\t\t\t\t\tExpect(\"ami-456\").To(Equal(*ltInput.LaunchTemplateData.ImageId))\n\t\t\t\t})\n\t\t\t})\n\n\t\t\tIt(\"should fail if no amis match selector.\", func() {\n\t\t\t\tawsEnv.EC2API.DescribeImagesOutput.Set(&ec2.DescribeImagesOutput{Images: []ec2types.Image{}})\n\t\t\t\tnodeClass.Spec.AMIFamily = lo.ToPtr(v1.AMIFamilyCustom)\n\t\t\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{Tags: map[string]string{\"*\": \"*\"}}}\n\t\t\t\tnodeClass.Status.AMIs = []v1.AMI{}\n\t\t\t\tExpectApplied(ctx, env.Client, nodeClass, nodePool)\n\t\t\t\tpod := coretest.UnschedulablePod()\n\t\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\t\tExpectNotScheduled(ctx, env.Client, pod)\n\t\t\t\tExpect(awsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.Len()).To(Equal(0))\n\t\t\t})\n\t\t\tIt(\"should fail if no instanceType matches ami requirements.\", func() {\n\t\t\t\tawsEnv.EC2API.DescribeImagesOutput.Set(&ec2.DescribeImagesOutput{Images: []ec2types.Image{\n\t\t\t\t\t{Name: aws.String(coretest.RandomName()), ImageId: aws.String(\"ami-123\"), Architecture: \"newnew\", CreationDate: aws.String(\"2022-01-01T12:00:00Z\")}}})\n\t\t\t\tnodeClass.Spec.AMIFamily = lo.ToPtr(v1.AMIFamilyCustom)\n\t\t\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{Tags: map[string]string{\"*\": \"*\"}}}\n\t\t\t\tnodeClass.Status.AMIs = []v1.AMI{\n\t\t\t\t\t{\n\t\t\t\t\t\tID: \"ami-123\",\n\t\t\t\t\t\tRequirements: []corev1.NodeSelectorRequirement{\n\t\t\t\t\t\t\t{Key: corev1.LabelArchStable, Operator: corev1.NodeSelectorOpIn, Values: []string{\"newnew\"}},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t\tExpectApplied(ctx, env.Client, nodeClass, nodePool)\n\t\t\t\tpod := coretest.UnschedulablePod()\n\t\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\t\tExpectNotScheduled(ctx, env.Client, pod)\n\t\t\t\tExpect(awsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.Len()).To(Equal(0))\n\t\t\t})\n\t\t\tIt(\"should choose amis from SSM if no selector specified in EC2NodeClass\", func() {\n\t\t\t\tversion := awsEnv.VersionProvider.Get(ctx)\n\t\t\t\tawsEnv.SSMAPI.Parameters = map[string]string{\n\t\t\t\t\tfmt.Sprintf(\"/aws/service/eks/optimized-ami/%s/amazon-linux-2/recommended/image_id\", version): \"test-ami-123\",\n\t\t\t\t}\n\t\t\t\tnodeClass.Status.AMIs = []v1.AMI{\n\t\t\t\t\t{\n\t\t\t\t\t\tID: \"test-ami-123\",\n\t\t\t\t\t\tRequirements: []corev1.NodeSelectorRequirement{\n\t\t\t\t\t\t\t{Key: corev1.LabelArchStable, Operator: corev1.NodeSelectorOpIn, Values: []string{string(karpv1.ArchitectureAmd64)}},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\t\t\tExpectApplied(ctx, env.Client, nodePool)\n\t\t\t\tpod := coretest.UnschedulablePod()\n\t\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t\t\tinput := awsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.Pop()\n\t\t\t\tExpect(*input.LaunchTemplateData.ImageId).To(ContainSubstring(\"test-ami\"))\n\t\t\t})\n\t\t})\n\t\tContext(\"Public IP Association\", func() {\n\t\t\tDescribeTable(\n\t\t\t\t\"should set 'AssociatePublicIPAddress' based on EC2NodeClass\",\n\t\t\t\tfunc(setValue, expectedValue, isEFA bool) {\n\t\t\t\t\tnodeClass.Spec.AssociatePublicIPAddress = lo.ToPtr(setValue)\n\t\t\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\t\t\tpod := coretest.UnschedulablePod(lo.Ternary(isEFA, coretest.PodOptions{\n\t\t\t\t\t\tResourceRequirements: corev1.ResourceRequirements{\n\t\t\t\t\t\t\tRequests: corev1.ResourceList{v1.ResourceEFA: resource.MustParse(\"2\")},\n\t\t\t\t\t\t\tLimits:   corev1.ResourceList{v1.ResourceEFA: resource.MustParse(\"2\")},\n\t\t\t\t\t\t},\n\t\t\t\t\t}, coretest.PodOptions{}))\n\t\t\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t\t\t\tinput := awsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.Pop()\n\t\t\t\t\tExpect(*input.LaunchTemplateData.NetworkInterfaces[0].AssociatePublicIpAddress).To(Equal(expectedValue))\n\t\t\t\t},\n\t\t\t\tEntry(\"AssociatePublicIPAddress is true\", true, true, false),\n\t\t\t\tEntry(\"AssociatePublicIPAddress is false\", false, false, false),\n\t\t\t\tEntry(\"AssociatePublicIPAddress is true (EFA)\", true, true, true),\n\t\t\t\tEntry(\"AssociatePublicIPAddress is false (EFA)\", false, false, true),\n\t\t\t)\n\t\t})\n\t\tContext(\"IP Prefix Delegation\", func() {\n\t\t\tDescribeTable(\n\t\t\t\t\"should set 'IPv4PrefixCount' based on EC2NodeClass\",\n\t\t\t\tfunc(setValue int) {\n\t\t\t\t\tnodeClass.Spec.IPPrefixCount = lo.ToPtr(int32(setValue))\n\t\t\t\t\tawsEnv.LaunchTemplateProvider.ClusterIPFamily = corev1.IPv4Protocol\n\t\t\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\t\t\tpod := coretest.UnschedulablePod()\n\t\t\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t\t\t\tinput := awsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.Pop()\n\t\t\t\t\tExpect(*input.LaunchTemplateData.NetworkInterfaces[0].Ipv4PrefixCount).To(Equal(int32(setValue)))\n\t\t\t\t},\n\t\t\t\tEntry(\"IPv4PrefixCount is 0\", 0),\n\t\t\t\tEntry(\"IPv4PrefixCount is 1\", 1),\n\t\t\t\tEntry(\"IPv4PrefixCount is 10\", 10),\n\t\t\t\tEntry(\"IPv4PrefixCount is 100\", 100),\n\t\t\t)\n\t\t\tDescribeTable(\n\t\t\t\t\"should set 'IPv6PrefixCount' based on EC2NodeClass\",\n\t\t\t\tfunc(setValue int) {\n\t\t\t\t\tnodeClass.Spec.IPPrefixCount = lo.ToPtr(int32(setValue))\n\t\t\t\t\tawsEnv.LaunchTemplateProvider.ClusterIPFamily = corev1.IPv6Protocol\n\t\t\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\t\t\tpod := coretest.UnschedulablePod()\n\t\t\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t\t\t\tinput := awsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.Pop()\n\t\t\t\t\tExpect(*input.LaunchTemplateData.NetworkInterfaces[0].Ipv6PrefixCount).To(Equal(int32(setValue)))\n\t\t\t\t},\n\t\t\t\tEntry(\"IPv6PrefixCount is 0\", 0),\n\t\t\t\tEntry(\"IPv6PrefixCount is 1\", 1),\n\t\t\t\tEntry(\"IPv6PrefixCount is 10\", 10),\n\t\t\t\tEntry(\"IPv6PrefixCount is 100\", 100),\n\t\t\t)\n\t\t})\n\t\tContext(\"Windows Custom UserData\", func() {\n\t\t\tBeforeEach(func() {\n\t\t\t\tnodePool.Spec.Template.Spec.Requirements = []karpv1.NodeSelectorRequirementWithMinValues{{Key: corev1.LabelOSStable, Operator: corev1.NodeSelectorOpIn, Values: []string{string(corev1.Windows)}}}\n\t\t\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{Alias: \"windows2022@latest\"}}\n\t\t\t\tnodeClass.Spec.Kubelet = &v1.KubeletConfiguration{MaxPods: lo.ToPtr[int32](110)}\n\t\t\t})\n\t\t\tIt(\"should merge and bootstrap with custom user data\", func() {\n\t\t\t\tcontent, err := os.ReadFile(\"testdata/windows_userdata_input.golden\")\n\t\t\t\tExpect(err).To(BeNil())\n\t\t\t\tnodeClass.Spec.UserData = aws.String(string(content))\n\t\t\t\tExpectApplied(ctx, env.Client, nodeClass, nodePool)\n\t\t\t\tExpect(env.Client.Get(ctx, client.ObjectKeyFromObject(nodePool), nodePool)).To(Succeed())\n\t\t\t\tpod := coretest.UnschedulablePod(coretest.PodOptions{\n\t\t\t\t\tNodeSelector: map[string]string{\n\t\t\t\t\t\tcorev1.LabelOSStable:     string(corev1.Windows),\n\t\t\t\t\t\tcorev1.LabelWindowsBuild: \"10.0.20348\",\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t\t\tcontent, err = os.ReadFile(\"testdata/windows_userdata_merged.golden\")\n\t\t\t\tExpect(err).To(BeNil())\n\t\t\t\tExpectLaunchTemplatesCreatedWithUserData(fmt.Sprintf(string(content), nodeClass.Name, karpv1.NodePoolLabelKey, nodePool.Name))\n\t\t\t})\n\t\t\tIt(\"should bootstrap when custom user data is empty\", func() {\n\t\t\t\tExpectApplied(ctx, env.Client, nodeClass, nodePool)\n\t\t\t\tExpect(env.Client.Get(ctx, client.ObjectKeyFromObject(nodePool), nodePool)).To(Succeed())\n\t\t\t\tpod := coretest.UnschedulablePod(coretest.PodOptions{\n\t\t\t\t\tNodeSelector: map[string]string{\n\t\t\t\t\t\tcorev1.LabelOSStable:     string(corev1.Windows),\n\t\t\t\t\t\tcorev1.LabelWindowsBuild: \"10.0.20348\",\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t\t\tcontent, err := os.ReadFile(\"testdata/windows_userdata_unmerged.golden\")\n\t\t\t\tExpect(err).To(BeNil())\n\t\t\t\tExpectLaunchTemplatesCreatedWithUserData(fmt.Sprintf(string(content), nodeClass.Name, karpv1.NodePoolLabelKey, nodePool.Name))\n\t\t\t})\n\t\t})\n\t})\n\tContext(\"Detailed Monitoring\", func() {\n\t\tIt(\"should default detailed monitoring to off\", func() {\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\tpod := coretest.UnschedulablePod()\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t\tExpect(awsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.Len()).To(BeNumerically(\"==\", 5))\n\t\t\tawsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.ForEach(func(ltInput *ec2.CreateLaunchTemplateInput) {\n\t\t\t\tExpect(aws.ToBool(ltInput.LaunchTemplateData.Monitoring.Enabled)).To(BeFalse())\n\t\t\t})\n\t\t})\n\t\tIt(\"should pass detailed monitoring setting to the launch template at creation\", func() {\n\t\t\tnodeClass.Spec.DetailedMonitoring = aws.Bool(true)\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\tpod := coretest.UnschedulablePod()\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t\tExpect(awsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.Len()).To(BeNumerically(\"==\", 5))\n\t\t\tawsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.ForEach(func(ltInput *ec2.CreateLaunchTemplateInput) {\n\t\t\t\tExpect(aws.ToBool(ltInput.LaunchTemplateData.Monitoring.Enabled)).To(BeTrue())\n\t\t\t})\n\t\t})\n\t})\n\tContext(\"Instance Metadata\", func() {\n\t\tIt(\"should set the default instance metadata settings on instances\", func() {\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\tpod := coretest.UnschedulablePod()\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t\tExpect(awsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.Len()).To(BeNumerically(\"==\", 5))\n\t\t\tawsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.ForEach(func(ltInput *ec2.CreateLaunchTemplateInput) {\n\t\t\t\tExpect(ltInput.LaunchTemplateData.MetadataOptions.HttpEndpoint).To(Equal(ec2types.LaunchTemplateInstanceMetadataEndpointStateEnabled))\n\t\t\t\tExpect(ltInput.LaunchTemplateData.MetadataOptions.HttpProtocolIpv6).To(Equal(ec2types.LaunchTemplateInstanceMetadataProtocolIpv6Disabled))\n\t\t\t\tExpect(lo.FromPtr(ltInput.LaunchTemplateData.MetadataOptions.HttpPutResponseHopLimit)).To(BeNumerically(\"==\", 1))\n\t\t\t\tExpect(ltInput.LaunchTemplateData.MetadataOptions.HttpTokens).To(Equal(ec2types.LaunchTemplateHttpTokensStateRequired))\n\t\t\t})\n\t\t})\n\t\tIt(\"should set instance metadata tags to disabled\", func() {\n\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\tpod := coretest.UnschedulablePod()\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t\tExpect(awsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.Len()).To(BeNumerically(\"==\", 5))\n\t\t\tawsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.ForEach(func(ltInput *ec2.CreateLaunchTemplateInput) {\n\t\t\t\tExpect(ltInput.LaunchTemplateData.MetadataOptions.InstanceMetadataTags).To(Equal(ec2types.LaunchTemplateInstanceMetadataTagsStateDisabled))\n\t\t\t})\n\t\t})\n\t})\n\tContext(\"Networking\", func() {\n\t\tContext(\"launch template respect to DNS ip for ipfamily selection\", func() {\n\t\t\tDescribeTable(\n\t\t\t\t\"should select correct ipFamily based on DNS ip\",\n\t\t\t\tfunc(ipFamily corev1.IPFamily) {\n\t\t\t\t\tprovider := launchtemplate.NewDefaultProvider(\n\t\t\t\t\t\tctx,\n\t\t\t\t\t\tawsEnv.LaunchTemplateCache,\n\t\t\t\t\t\tawsEnv.EC2API,\n\t\t\t\t\t\tawsEnv.EKSAPI,\n\t\t\t\t\t\tawsEnv.AMIResolver,\n\t\t\t\t\t\tawsEnv.SecurityGroupProvider,\n\t\t\t\t\t\tawsEnv.SubnetProvider,\n\t\t\t\t\t\tawsEnv.LaunchTemplateProvider.CABundle,\n\t\t\t\t\t\tmake(chan struct{}),\n\t\t\t\t\t\tnet.ParseIP(lo.Ternary(ipFamily == corev1.IPv4Protocol, \"10.0.100.10\", \"fd01:99f0:d47b::a\")),\n\t\t\t\t\t\t\"https://test-cluster\",\n\t\t\t\t\t)\n\t\t\t\t\tExpect(provider.ClusterIPFamily).To(Equal(ipFamily))\n\t\t\t\t},\n\t\t\t\tEntry(\"DNS has ipv4 address\", corev1.IPv4Protocol),\n\t\t\t\tEntry(\"DNS has ipv6 address\", corev1.IPv6Protocol),\n\t\t\t)\n\t\t})\n\t\tContext(\"should provision a v6 address and set v6 primary IP as true when running in an ipv6 cluster\", func() {\n\t\t\tDescribeTable(\n\t\t\t\t\"should set Primary IPv6 as true and provision a IPv6 address\",\n\t\t\t\tfunc(isPublicAddressSet, isPublic, isEFA bool) {\n\t\t\t\t\tawsEnv.LaunchTemplateProvider.ClusterIPFamily = corev1.IPv6Protocol\n\t\t\t\t\tif isPublicAddressSet {\n\t\t\t\t\t\tnodeClass.Spec.AssociatePublicIPAddress = lo.ToPtr(isPublic)\n\t\t\t\t\t}\n\t\t\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\t\t\tpod := coretest.UnschedulablePod(lo.Ternary(isEFA, coretest.PodOptions{\n\t\t\t\t\t\tResourceRequirements: corev1.ResourceRequirements{\n\t\t\t\t\t\t\tRequests: corev1.ResourceList{v1.ResourceEFA: resource.MustParse(\"2\")},\n\t\t\t\t\t\t\tLimits:   corev1.ResourceList{v1.ResourceEFA: resource.MustParse(\"2\")},\n\t\t\t\t\t\t},\n\t\t\t\t\t}, coretest.PodOptions{}))\n\t\t\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t\t\t\tinput := awsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.Pop()\n\n\t\t\t\t\tExpect(len(input.LaunchTemplateData.NetworkInterfaces)).To(BeNumerically(\">=\", 1))\n\t\t\t\t\tif !isPublicAddressSet && !isEFA {\n\t\t\t\t\t\tExpect(input.LaunchTemplateData.NetworkInterfaces[0].AssociatePublicIpAddress).To(BeNil())\n\t\t\t\t\t}\n\t\t\t\t\tif isEFA {\n\t\t\t\t\t\tExpect(lo.FromPtr(input.LaunchTemplateData.NetworkInterfaces[0].InterfaceType)).To(Equal(string(ec2types.NetworkInterfaceTypeEfa)))\n\t\t\t\t\t\tExpect(lo.FromPtr(input.LaunchTemplateData.NetworkInterfaces[0].AssociatePublicIpAddress)).To(Equal(isPublic))\n\t\t\t\t\t}\n\t\t\t\t\tExpect(lo.FromPtr(input.LaunchTemplateData.NetworkInterfaces[0].Ipv6AddressCount)).To(Equal(int32(1)))\n\t\t\t\t\tExpect(lo.FromPtr(input.LaunchTemplateData.NetworkInterfaces[0].PrimaryIpv6)).To(BeTrue())\n\n\t\t\t\t},\n\t\t\t\tEntry(\"AssociatePublicIPAddress is not set and EFA is false\", false, true, false),\n\t\t\t\tEntry(\"AssociatePublicIPAddress is not set and EFA is true\", false, false, true),\n\t\t\t\tEntry(\"AssociatePublicIPAddress is set as true and EFA is true\", true, true, true),\n\t\t\t\tEntry(\"AssociatePublicIPAddress is set as false and EFA is false\", true, false, false),\n\t\t\t)\n\t\t})\n\t})\n\tContext(\"Tenancy\", func() {\n\t\tDescribeTable(\"should set tenancy on launch template\",\n\t\t\tfunc(specTenancy *string, tenancy ec2types.Tenancy) {\n\t\t\t\tExpectApplied(ctx, env.Client, nodePool, nodeClass)\n\t\t\t\tnodeSelector := map[string]string{}\n\t\t\t\tif tenancy != \"\" {\n\t\t\t\t\tnodeSelector[v1.LabelInstanceTenancy] = string(tenancy)\n\t\t\t\t}\n\t\t\t\tpod := coretest.UnschedulablePod(coretest.PodOptions{\n\t\t\t\t\tNodeSelector: nodeSelector,\n\t\t\t\t})\n\t\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\t\tExpectScheduled(ctx, env.Client, pod)\n\t\t\t\tExpect(awsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.Len()).To(BeNumerically(\">=\", 1))\n\t\t\t\tawsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.ForEach(func(ltInput *ec2.CreateLaunchTemplateInput) {\n\t\t\t\t\tExpect(ltInput.LaunchTemplateData.Placement.Tenancy).To(Equal(tenancy))\n\t\t\t\t})\n\t\t\t},\n\t\t\tEntry(\"when not specified\", nil, ec2types.TenancyDefault),\n\t\t\tEntry(\"when default specified\", lo.ToPtr(\"default\"), ec2types.TenancyDefault),\n\t\t\tEntry(\"when dedicated specified\", lo.ToPtr(\"dedicated\"), ec2types.TenancyDedicated),\n\t\t)\n\t})\n\tIt(\"should generate a unique launch template per capacity reservation\", func() {\n\t\tcrs := []ec2types.CapacityReservation{\n\t\t\t{\n\t\t\t\tAvailabilityZone:       lo.ToPtr(\"test-zone-1a\"),\n\t\t\t\tInstanceType:           lo.ToPtr(\"m5.large\"),\n\t\t\t\tOwnerId:                lo.ToPtr(\"012345678901\"),\n\t\t\t\tInstanceMatchCriteria:  ec2types.InstanceMatchCriteriaTargeted,\n\t\t\t\tCapacityReservationId:  lo.ToPtr(\"cr-m5.large-1a-1\"),\n\t\t\t\tAvailableInstanceCount: lo.ToPtr[int32](10),\n\t\t\t\tState:                  ec2types.CapacityReservationStateActive,\n\t\t\t\tReservationType:        ec2types.CapacityReservationTypeDefault,\n\t\t\t\tInterruptible:          lo.ToPtr(false),\n\t\t\t},\n\t\t\t{\n\t\t\t\tAvailabilityZone:       lo.ToPtr(\"test-zone-1a\"),\n\t\t\t\tInstanceType:           lo.ToPtr(\"m5.large\"),\n\t\t\t\tOwnerId:                lo.ToPtr(\"012345678901\"),\n\t\t\t\tInstanceMatchCriteria:  ec2types.InstanceMatchCriteriaTargeted,\n\t\t\t\tCapacityReservationId:  lo.ToPtr(\"cr-m5.large-1a-2\"),\n\t\t\t\tAvailableInstanceCount: lo.ToPtr[int32](15),\n\t\t\t\tState:                  ec2types.CapacityReservationStateActive,\n\t\t\t\tReservationType:        ec2types.CapacityReservationTypeDefault,\n\t\t\t\tInterruptible:          lo.ToPtr(false),\n\t\t\t},\n\t\t\t{\n\t\t\t\tAvailabilityZone:       lo.ToPtr(\"test-zone-1b\"),\n\t\t\t\tInstanceType:           lo.ToPtr(\"m5.large\"),\n\t\t\t\tOwnerId:                lo.ToPtr(\"012345678901\"),\n\t\t\t\tInstanceMatchCriteria:  ec2types.InstanceMatchCriteriaTargeted,\n\t\t\t\tCapacityReservationId:  lo.ToPtr(\"cr-m5.large-1b-1\"),\n\t\t\t\tAvailableInstanceCount: lo.ToPtr[int32](10),\n\t\t\t\tState:                  ec2types.CapacityReservationStateActive,\n\t\t\t\tReservationType:        ec2types.CapacityReservationTypeDefault,\n\t\t\t\tInterruptible:          lo.ToPtr(false),\n\t\t\t},\n\t\t\t{\n\t\t\t\tAvailabilityZone:       lo.ToPtr(\"test-zone-1b\"),\n\t\t\t\tInstanceType:           lo.ToPtr(\"m5.xlarge\"),\n\t\t\t\tOwnerId:                lo.ToPtr(\"012345678901\"),\n\t\t\t\tInstanceMatchCriteria:  ec2types.InstanceMatchCriteriaTargeted,\n\t\t\t\tCapacityReservationId:  lo.ToPtr(\"cr-m5.xlarge-1b-1\"),\n\t\t\t\tAvailableInstanceCount: lo.ToPtr[int32](15),\n\t\t\t\tState:                  ec2types.CapacityReservationStateActive,\n\t\t\t\tReservationType:        ec2types.CapacityReservationTypeDefault,\n\t\t\t\tInterruptible:          lo.ToPtr(false),\n\t\t\t},\n\t\t}\n\t\tawsEnv.EC2API.DescribeCapacityReservationsOutput.Set(&ec2.DescribeCapacityReservationsOutput{\n\t\t\tCapacityReservations: crs,\n\t\t})\n\t\tfor _, cr := range crs {\n\t\t\tnodeClass.Status.CapacityReservations = append(nodeClass.Status.CapacityReservations, lo.Must(v1.CapacityReservationFromEC2(fakeClock, &cr)))\n\t\t\tawsEnv.CapacityReservationProvider.SetAvailableInstanceCount(*cr.CapacityReservationId, int(*cr.AvailableInstanceCount))\n\t\t}\n\n\t\tnodePool.Spec.Template.Spec.Requirements = []karpv1.NodeSelectorRequirementWithMinValues{{\n\t\t\tKey:      karpv1.CapacityTypeLabelKey,\n\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\tValues:   []string{karpv1.CapacityTypeReserved},\n\t\t}}\n\t\tpod := coretest.UnschedulablePod()\n\t\tExpectApplied(ctx, env.Client, pod, nodePool, nodeClass)\n\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\tExpectScheduled(ctx, env.Client, pod)\n\n\t\tlaunchTemplates := map[string]*ec2.CreateLaunchTemplateInput{}\n\t\tfor awsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.Len() != 0 {\n\t\t\tlt := awsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.Pop()\n\t\t\tlaunchTemplates[*lt.LaunchTemplateName] = lt\n\t\t}\n\t\t// We should have created 3 launch templates, rather than 5 since we only create 1 launch template per capacity pool\n\t\tExpect(launchTemplates).To(HaveLen(3))\n\t\treservationIDs := lo.Uniq(lo.Map(lo.Values(launchTemplates), func(input *ec2.CreateLaunchTemplateInput, _ int) string {\n\t\t\treturn *input.LaunchTemplateData.CapacityReservationSpecification.CapacityReservationTarget.CapacityReservationId\n\t\t}))\n\t\tExpect(reservationIDs).To(HaveLen(3))\n\t\tExpect(reservationIDs).To(ConsistOf(\n\t\t\t// We don't include the m5.large offering in 1a because we select the zonal offering with the highest capacity\n\t\t\t\"cr-m5.large-1a-2\",\n\t\t\t\"cr-m5.large-1b-1\",\n\t\t\t\"cr-m5.xlarge-1b-1\",\n\t\t))\n\t\tfor _, input := range launchTemplates {\n\t\t\tExpect(input.LaunchTemplateData.CapacityReservationSpecification.CapacityReservationPreference).To(Equal(ec2types.CapacityReservationPreferenceCapacityReservationsOnly))\n\t\t}\n\n\t\t// Validate that we generate one override per launch template, and the override is for the instance pool associated\n\t\t// with the capacity reservation.\n\t\tExpect(awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Len()).ToNot(Equal(0))\n\t\tcreateFleetInput := awsEnv.EC2API.CreateFleetBehavior.CalledWithInput.Pop()\n\t\tExpect(createFleetInput.LaunchTemplateConfigs).To(HaveLen(3))\n\t\tfor _, ltc := range createFleetInput.LaunchTemplateConfigs {\n\t\t\tExpect(ltc.Overrides).To(HaveLen(1))\n\t\t\tExpect(launchTemplates).To(HaveKey(*ltc.LaunchTemplateSpecification.LaunchTemplateName))\n\t\t\tlt := launchTemplates[*ltc.LaunchTemplateSpecification.LaunchTemplateName]\n\t\t\tcr, ok := lo.Find(crs, func(cr ec2types.CapacityReservation) bool {\n\t\t\t\treturn *cr.CapacityReservationId == *lt.LaunchTemplateData.CapacityReservationSpecification.CapacityReservationTarget.CapacityReservationId\n\t\t\t})\n\t\t\tExpect(ok).To(BeTrue())\n\t\t\tExpect(*ltc.Overrides[0].AvailabilityZone).To(Equal(*cr.AvailabilityZone))\n\t\t\tExpect(ltc.Overrides[0].InstanceType).To(Equal(ec2types.InstanceType(*cr.InstanceType)))\n\t\t}\n\t})\n\tDescribeTable(\n\t\t\"should correctly assign the market type for reserved capacity\", func(cr ec2types.CapacityReservation, expectedMarketType ec2types.MarketType) {\n\t\t\tawsEnv.EC2API.DescribeCapacityReservationsOutput.Set(&ec2.DescribeCapacityReservationsOutput{\n\t\t\t\tCapacityReservations: []ec2types.CapacityReservation{cr},\n\t\t\t})\n\t\t\tnodeClass.Status.CapacityReservations = append(nodeClass.Status.CapacityReservations, lo.Must(v1.CapacityReservationFromEC2(fakeClock, &cr)))\n\t\t\tawsEnv.CapacityReservationProvider.SetAvailableInstanceCount(*cr.CapacityReservationId, int(*cr.AvailableInstanceCount))\n\n\t\t\tnodePool.Spec.Template.Spec.Requirements = []karpv1.NodeSelectorRequirementWithMinValues{{\n\t\t\t\tKey:      karpv1.CapacityTypeLabelKey,\n\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\tValues:   []string{karpv1.CapacityTypeReserved},\n\t\t\t}}\n\t\t\tpod := coretest.UnschedulablePod()\n\t\t\tExpectApplied(ctx, env.Client, pod, nodePool, nodeClass)\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\tExpectScheduled(ctx, env.Client, pod)\n\n\t\t\tlaunchTemplates := map[string]*ec2.CreateLaunchTemplateInput{}\n\t\t\tfor awsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.Len() != 0 {\n\t\t\t\tlt := awsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.Pop()\n\t\t\t\tlaunchTemplates[*lt.LaunchTemplateName] = lt\n\t\t\t}\n\t\t\tExpect(lo.Values(launchTemplates)[0].LaunchTemplateData.InstanceMarketOptions.MarketType).To(Equal(expectedMarketType))\n\t\t},\n\t\tEntry(\n\t\t\t\"with default interruptible reservation type\", ec2types.CapacityReservation{\n\t\t\t\tAvailabilityZone:       lo.ToPtr(\"test-zone-1a\"),\n\t\t\t\tInstanceType:           lo.ToPtr(\"m5.large\"),\n\t\t\t\tOwnerId:                lo.ToPtr(\"012345678901\"),\n\t\t\t\tInstanceMatchCriteria:  ec2types.InstanceMatchCriteriaTargeted,\n\t\t\t\tCapacityReservationId:  lo.ToPtr(\"cr-m5.large-1a-1\"),\n\t\t\t\tAvailableInstanceCount: lo.ToPtr[int32](10),\n\t\t\t\tState:                  ec2types.CapacityReservationStateActive,\n\t\t\t\tReservationType:        ec2types.CapacityReservationTypeDefault,\n\t\t\t\tInterruptible:          lo.ToPtr(true),\n\t\t\t},\n\t\t\tec2types.MarketTypeInterruptibleCapacityReservation,\n\t\t),\n\t\tEntry(\n\t\t\t\"with capacity block reservation type\", ec2types.CapacityReservation{\n\t\t\t\tAvailabilityZone:       lo.ToPtr(\"test-zone-1a\"),\n\t\t\t\tInstanceType:           lo.ToPtr(\"m5.large\"),\n\t\t\t\tOwnerId:                lo.ToPtr(\"012345678901\"),\n\t\t\t\tInstanceMatchCriteria:  ec2types.InstanceMatchCriteriaTargeted,\n\t\t\t\tCapacityReservationId:  lo.ToPtr(\"cr-m5.large-1a-1\"),\n\t\t\t\tAvailableInstanceCount: lo.ToPtr[int32](10),\n\t\t\t\tState:                  ec2types.CapacityReservationStateActive,\n\t\t\t\tReservationType:        ec2types.CapacityReservationTypeCapacityBlock,\n\t\t\t\tInterruptible:          lo.ToPtr(false),\n\t\t\t},\n\t\t\tec2types.MarketTypeCapacityBlock,\n\t\t),\n\t)\n\tDescribeTable(\n\t\t\"should set the capacity reservation specification according to the capacity reservation feature flag\",\n\t\tfunc(enabled bool) {\n\t\t\tcoreoptions.FromContext(ctx).FeatureGates.ReservedCapacity = enabled\n\n\t\t\tpod := coretest.UnschedulablePod()\n\t\t\tExpectApplied(ctx, env.Client, pod, nodePool, nodeClass)\n\t\t\tExpectProvisioned(ctx, env.Client, cluster, cloudProvider, prov, pod)\n\t\t\tExpectScheduled(ctx, env.Client, pod)\n\n\t\t\tvar launchTemplates []*ec2.CreateLaunchTemplateInput\n\t\t\tfor awsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.Len() != 0 {\n\t\t\t\tlaunchTemplates = append(launchTemplates, awsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.Pop())\n\t\t\t}\n\t\t\tfor _, input := range launchTemplates {\n\t\t\t\tcrs := input.LaunchTemplateData.CapacityReservationSpecification\n\t\t\t\tif !enabled {\n\t\t\t\t\tExpect(crs).To(BeNil())\n\t\t\t\t} else {\n\t\t\t\t\tExpect(*crs).To(Equal(ec2types.LaunchTemplateCapacityReservationSpecificationRequest{\n\t\t\t\t\t\tCapacityReservationPreference: ec2types.CapacityReservationPreferenceNone,\n\t\t\t\t\t}))\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tEntry(\"enabled\", true),\n\t\tEntry(\"disabled\", false),\n\t)\n})\n\n// ExpectTags verifies that the expected tags are a subset of the tags found\nfunc ExpectTags(tags []ec2types.Tag, expected map[string]string) {\n\tGinkgoHelper()\n\texistingTags := lo.SliceToMap(tags, func(t ec2types.Tag) (string, string) { return *t.Key, *t.Value })\n\tfor expKey, expValue := range expected {\n\t\tfoundValue, ok := existingTags[expKey]\n\t\tExpect(ok).To(BeTrue(), fmt.Sprintf(\"expected to find tag %s in %s\", expKey, existingTags))\n\t\tExpect(foundValue).To(Equal(expValue))\n\t}\n}\n\nfunc ExpectLaunchTemplatesCreatedWithUserDataContaining(substrings ...string) {\n\tGinkgoHelper()\n\tExpect(awsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.Len()).To(BeNumerically(\">=\", 1))\n\tawsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.ForEach(func(input *ec2.CreateLaunchTemplateInput) {\n\t\tuserData, err := base64.StdEncoding.DecodeString(*input.LaunchTemplateData.UserData)\n\t\tExpectWithOffset(2, err).To(BeNil())\n\t\tfor _, substring := range substrings {\n\t\t\tExpectWithOffset(2, string(userData)).To(ContainSubstring(substring))\n\t\t}\n\t})\n}\n\nfunc ExpectLaunchTemplatesCreatedWithUserDataNotContaining(substrings ...string) {\n\tGinkgoHelper()\n\tExpect(awsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.Len()).To(BeNumerically(\">=\", 1))\n\tawsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.ForEach(func(input *ec2.CreateLaunchTemplateInput) {\n\t\tuserData, err := base64.StdEncoding.DecodeString(*input.LaunchTemplateData.UserData)\n\t\tExpectWithOffset(2, err).To(BeNil())\n\t\tfor _, substring := range substrings {\n\t\t\tExpectWithOffset(2, string(userData)).ToNot(ContainSubstring(substring))\n\t\t}\n\t})\n}\n\nfunc ExpectLaunchTemplatesCreatedWithUserData(expected string) {\n\tGinkgoHelper()\n\tExpect(awsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.Len()).To(BeNumerically(\">=\", 1))\n\tawsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.ForEach(func(input *ec2.CreateLaunchTemplateInput) {\n\t\tuserData, err := base64.StdEncoding.DecodeString(*input.LaunchTemplateData.UserData)\n\t\tExpectWithOffset(2, err).To(BeNil())\n\t\t// Newlines are always added for missing TOML fields, so strip them out before comparisons.\n\t\tactualUserData := strings.ReplaceAll(string(userData), \"\\n\", \"\")\n\t\texpectedUserData := strings.ReplaceAll(expected, \"\\n\", \"\")\n\t\tExpectWithOffset(2, actualUserData).To(Equal(expectedUserData))\n\t})\n}\n\nfunc ExpectUserDataExistsFromCreatedLaunchTemplates() []string {\n\tGinkgoHelper()\n\tExpect(awsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.Len()).To(BeNumerically(\">=\", 1))\n\tuserDatas := []string{}\n\tawsEnv.EC2API.CreateLaunchTemplateBehavior.CalledWithInput.ForEach(func(input *ec2.CreateLaunchTemplateInput) {\n\t\tuserData, err := base64.StdEncoding.DecodeString(*input.LaunchTemplateData.UserData)\n\t\tExpectWithOffset(2, err).To(BeNil())\n\t\tuserDatas = append(userDatas, string(userData))\n\t})\n\treturn userDatas\n}\n\nfunc ExpectParseNodeConfigs(userData string) []admv1alpha1.NodeConfig {\n\tGinkgoHelper()\n\tarchive, err := mime.NewArchive(userData)\n\tExpect(err).To(BeNil())\n\tnodeConfigs := lo.FilterMap(archive, func(entry mime.Entry, _ int) (admv1alpha1.NodeConfig, bool) {\n\t\tconfig := admv1alpha1.NodeConfig{}\n\t\tif entry.ContentType != mime.ContentTypeNodeConfig {\n\t\t\treturn config, false\n\t\t}\n\t\terr := yaml.Unmarshal([]byte(entry.Content), &config)\n\t\tExpect(err).To(BeNil())\n\t\treturn config, true\n\t})\n\tExpect(len(nodeConfigs)).To(BeNumerically(\">=\", 1))\n\treturn nodeConfigs\n}\n\nfunc ExpectParseNodeConfigKubeletField[T any](userData, fieldName string) T {\n\tGinkgoHelper()\n\tconfigs := ExpectParseNodeConfigs(userData)\n\tExpect(len(configs)).To(Equal(1))\n\tvar ret T\n\traw := configs[0].Spec.Kubelet.Config[fieldName]\n\tExpect(yaml.Unmarshal(raw.Raw, &ret)).To(Succeed())\n\treturn ret\n}\n"
  },
  {
    "path": "pkg/providers/launchtemplate/testdata/al2023_mime_userdata_input.golden",
    "content": "MIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"//\"\n\n--//\nContent-Type: application/node.eks.aws\n\napiVersion: node.eks.aws/v1alpha1\nkind: NodeConfig\nspec:\n  cluster:\n    name: test-cluster\n    clusterEndpoint: https://test-cluster\n    certificateAuthority: cluster-ca\n    cidr: 10.100.0.0/16\n  kubelet:\n    config:\n      maxPods: 42\n--//\nContent-Type: text/x-shellscript; charset=\"us-ascii\"\n\n#!/bin/bash\necho \"Hello, AL2023!\"\n--//\n"
  },
  {
    "path": "pkg/providers/launchtemplate/testdata/al2023_mime_userdata_merged.golden",
    "content": "MIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"//\"\n\n--//\nContent-Type: application/node.eks.aws\n\napiVersion: node.eks.aws/v1alpha1\nkind: NodeConfig\nspec:\n  cluster:\n    name: test-cluster\n    clusterEndpoint: https://test-cluster\n    certificateAuthority: cluster-ca\n    cidr: 10.100.0.0/16\n  kubelet:\n    config:\n      maxPods: 42\n--//\nContent-Type: text/x-shellscript; charset=\"us-ascii\"\n\n#!/bin/bash\necho \"Hello, AL2023!\"\n--//\nContent-Type: application/node.eks.aws\n\n# Karpenter Generated NodeConfig\napiVersion: node.eks.aws/v1alpha1\nkind: NodeConfig\nmetadata: {}\nspec:\n  cluster:\n    apiServerEndpoint: https://test-cluster\n    certificateAuthority: Y2EtYnVuZGxlCg==\n    cidr: 10.100.0.0/16\n    name: test-cluster\n  containerd: {}\n  instance:\n    localStorage: {}\n  kubelet:\n    config:\n      clusterDNS:\n      - 10.0.100.10\n      maxPods: 110\n      registerWithTaints:\n      - effect: NoExecute\n        key: karpenter.sh/unregistered\n    flags:\n    - --node-labels=\"karpenter.k8s.aws/ec2nodeclass=%s,karpenter.sh/capacity-type=on-demand,karpenter.sh/do-not-sync-taints=true,%s=%s,testing/cluster=unspecified\"\n\n--//--\n"
  },
  {
    "path": "pkg/providers/launchtemplate/testdata/al2023_shell_userdata_input.golden",
    "content": "#!/bin/bash\necho \"Hello, AL2023!\"\n"
  },
  {
    "path": "pkg/providers/launchtemplate/testdata/al2023_shell_userdata_merged.golden",
    "content": "MIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"//\"\n\n--//\nContent-Type: text/x-shellscript; charset=\"us-ascii\"\n\n#!/bin/bash\necho \"Hello, AL2023!\"\n--//\nContent-Type: application/node.eks.aws\n\n# Karpenter Generated NodeConfig\napiVersion: node.eks.aws/v1alpha1\nkind: NodeConfig\nmetadata: {}\nspec:\n  cluster:\n    apiServerEndpoint: https://test-cluster\n    certificateAuthority: Y2EtYnVuZGxlCg==\n    cidr: 10.100.0.0/16\n    name: test-cluster\n  containerd: {}\n  instance:\n    localStorage: {}\n  kubelet:\n    config:\n      clusterDNS:\n      - 10.0.100.10\n      maxPods: 110\n      registerWithTaints:\n      - effect: NoExecute\n        key: karpenter.sh/unregistered\n    flags:\n    - --node-labels=\"karpenter.k8s.aws/ec2nodeclass=%s,karpenter.sh/capacity-type=on-demand,karpenter.sh/do-not-sync-taints=true,%s=%s,testing/cluster=unspecified\"\n\n--//--\n"
  },
  {
    "path": "pkg/providers/launchtemplate/testdata/al2023_userdata_unmerged.golden",
    "content": "MIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"//\"\n\n--//\nContent-Type: application/node.eks.aws\n\n# Karpenter Generated NodeConfig\napiVersion: node.eks.aws/v1alpha1\nkind: NodeConfig\nmetadata: {}\nspec:\n  cluster:\n    apiServerEndpoint: https://test-cluster\n    certificateAuthority: Y2EtYnVuZGxlCg==\n    cidr: 10.100.0.0/16\n    name: test-cluster\n  containerd: {}\n  instance:\n    localStorage: {}\n  kubelet:\n    config:\n      clusterDNS:\n      - 10.0.100.10\n      maxPods: 110\n      registerWithTaints:\n      - effect: NoExecute\n        key: karpenter.sh/unregistered\n    flags:\n    - --node-labels=\"karpenter.k8s.aws/ec2nodeclass=%s,karpenter.sh/capacity-type=on-demand,karpenter.sh/do-not-sync-taints=true,%s=%s,testing/cluster=unspecified\"\n\n--//--\n"
  },
  {
    "path": "pkg/providers/launchtemplate/testdata/al2023_yaml_userdata_input.golden",
    "content": "apiVersion: node.eks.aws/v1alpha1\nkind: NodeConfig\nspec:\n  cluster:\n    name: test-cluster\n    clusterEndpoint: https://test-cluster\n    certificateAuthority: cluster-ca\n    cidr: 10.100.0.0/16\n  kubelet:\n    config:\n      maxPods: 42\n"
  },
  {
    "path": "pkg/providers/launchtemplate/testdata/al2023_yaml_userdata_merged.golden",
    "content": "MIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"//\"\n\n--//\nContent-Type: application/node.eks.aws\n\napiVersion: node.eks.aws/v1alpha1\nkind: NodeConfig\nspec:\n  cluster:\n    name: test-cluster\n    clusterEndpoint: https://test-cluster\n    certificateAuthority: cluster-ca\n    cidr: 10.100.0.0/16\n  kubelet:\n    config:\n      maxPods: 42\n--//\nContent-Type: application/node.eks.aws\n\n# Karpenter Generated NodeConfig\napiVersion: node.eks.aws/v1alpha1\nkind: NodeConfig\nmetadata: {}\nspec:\n  cluster:\n    apiServerEndpoint: https://test-cluster\n    certificateAuthority: Y2EtYnVuZGxlCg==\n    cidr: 10.100.0.0/16\n    name: test-cluster\n  containerd: {}\n  instance:\n    localStorage: {}\n  kubelet:\n    config:\n      clusterDNS:\n      - 10.0.100.10\n      maxPods: 110\n      registerWithTaints:\n      - effect: NoExecute\n        key: karpenter.sh/unregistered\n    flags:\n    - --node-labels=\"karpenter.k8s.aws/ec2nodeclass=%s,karpenter.sh/capacity-type=on-demand,karpenter.sh/do-not-sync-taints=true,%s=%s,testing/cluster=unspecified\"\n\n--//--\n"
  },
  {
    "path": "pkg/providers/launchtemplate/testdata/al2_no_mime_userdata_input.golden",
    "content": "#!/bin/bash\necho \"Running custom user data script\"\n"
  },
  {
    "path": "pkg/providers/launchtemplate/testdata/al2_userdata_content_type_first_input.golden",
    "content": "Content-Type: multipart/mixed; boundary=\"BOUNDARY\"\nMIME-Version: 1.0\n\n--BOUNDARY\nContent-Type: text/x-shellscript; charset=\"us-ascii\"\n\n#!/bin/bash\necho \"Running custom user data script\"\n\n--BOUNDARY--"
  },
  {
    "path": "pkg/providers/launchtemplate/testdata/al2_userdata_input.golden",
    "content": "MIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"BOUNDARY\"\n\n--BOUNDARY\nContent-Type: text/x-shellscript; charset=\"us-ascii\"\n\n#!/bin/bash\necho \"Running custom user data script\"\n\n--BOUNDARY--"
  },
  {
    "path": "pkg/providers/launchtemplate/testdata/al2_userdata_merged.golden",
    "content": "MIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"//\"\n\n--//\nContent-Type: text/x-shellscript; charset=\"us-ascii\"\n\n#!/bin/bash\necho \"Running custom user data script\"\n\n--//\nContent-Type: text/x-shellscript; charset=\"us-ascii\"\n\n#!/bin/bash -xe\nexec > >(tee /var/log/user-data.log|logger -t user-data -s 2>/dev/console) 2>&1\n/etc/eks/bootstrap.sh 'test-cluster' --apiserver-endpoint 'https://test-cluster' --b64-cluster-ca 'Y2EtYnVuZGxlCg==' \\\n--dns-cluster-ip '10.0.100.10' \\\n--use-max-pods false \\\n--kubelet-extra-args '--node-labels=\"karpenter.k8s.aws/ec2nodeclass=%s,karpenter.sh/capacity-type=on-demand,karpenter.sh/do-not-sync-taints=true,%s=%s,testing/cluster=unspecified\" --register-with-taints=\"karpenter.sh/unregistered:NoExecute\" --max-pods=110'\n--//--\n"
  },
  {
    "path": "pkg/providers/launchtemplate/testdata/al2_userdata_unmerged.golden",
    "content": "MIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"//\"\n\n--//\nContent-Type: text/x-shellscript; charset=\"us-ascii\"\n\n#!/bin/bash -xe\nexec > >(tee /var/log/user-data.log|logger -t user-data -s 2>/dev/console) 2>&1\n/etc/eks/bootstrap.sh 'test-cluster' --apiserver-endpoint 'https://test-cluster' --b64-cluster-ca 'Y2EtYnVuZGxlCg==' \\\n--dns-cluster-ip '10.0.100.10' \\\n--use-max-pods false \\\n--kubelet-extra-args '--node-labels=\"karpenter.k8s.aws/ec2nodeclass=%s,karpenter.sh/capacity-type=on-demand,karpenter.sh/do-not-sync-taints=true,%s=%s,testing/cluster=unspecified\" --register-with-taints=\"karpenter.sh/unregistered:NoExecute\" --max-pods=110'\n--//--\n"
  },
  {
    "path": "pkg/providers/launchtemplate/testdata/br_userdata_input.golden",
    "content": "[settings.kubernetes]\n\"unknown-setting\" = \"unknown\"\napi-server = 'replaceme'\ncloud-provider = 'external'\ncluster-certificate = \"replaceme\"\ncluster-name = 'replaceme'\nmax-pods = 9999999999 # replaceme\n\n[settings.kubernetes.eviction-hard]\n\"memory.available\" = \"12%%\"\n\n[settings.kubernetes.labels]\n\"replace\" = \"me\"\n\n[settings.kubernetes.node-labels]\n\"custom-node-label\" = \"custom\"\n\"%s\" = \"should-be-overridden\"\n\n[settings.kubernetes.node-taints]\n\"replace\" = [\"me:Schedule\"]\n\n[settings.network]\nhostname = \"test.local\"\nhttps-proxy = \"1.2.3.4:8080\"\nno-proxy = [\"localhost\", \"127.0.0.1\"]\nhosts = [[\"10.0.0.0\", [\"test.example.com\", \"test1.example.com\"]]]\n\n[settings.ntp]\ntime-servers = [\"169.254.169.123\"]\n"
  },
  {
    "path": "pkg/providers/launchtemplate/testdata/br_userdata_merged.golden",
    "content": "[settings]\n[settings.kubernetes]\napi-server = 'https://test-cluster'\ncloud-provider = 'external'\ncluster-certificate = 'Y2EtYnVuZGxlCg=='\ncluster-name = 'test-cluster'\ncluster-dns-ip = '10.0.100.10'\nmax-pods = 110\n\n[settings.kubernetes.node-labels]\ncustom-node-label = 'custom'\n'karpenter.k8s.aws/ec2nodeclass' = '%s'\n'karpenter.sh/capacity-type' = 'on-demand'\n'karpenter.sh/do-not-sync-taints' = 'true'\n'%s' = '%s'\n'testing/cluster' = 'unspecified'\n\n[settings.kubernetes.node-taints]\nbaz = ['bin:NoExecute']\nfoo = ['bar:NoExecute']\n'karpenter.sh/unregistered' = [':NoExecute']\n\n[settings.kubernetes.eviction-hard]\n'memory.available' = '12%%'\n\n[settings.network]\nhostname = 'test.local'\nhosts = [['10.0.0.0', ['test.example.com', 'test1.example.com']]]\nhttps-proxy = '1.2.3.4:8080'\nno-proxy = ['localhost', '127.0.0.1']\n\n[settings.ntp]\ntime-servers = ['169.254.169.123']\n"
  },
  {
    "path": "pkg/providers/launchtemplate/testdata/br_userdata_unmerged.golden",
    "content": "[settings]\n[settings.kubernetes]\napi-server = 'https://test-cluster'\ncluster-certificate = 'Y2EtYnVuZGxlCg=='\ncluster-name = 'test-cluster'\ncluster-dns-ip = '10.0.100.10'\nmax-pods = 110\n\n[settings.kubernetes.node-labels]\n'karpenter.k8s.aws/ec2nodeclass' = '%s'\n'karpenter.sh/capacity-type' = 'on-demand'\n'karpenter.sh/do-not-sync-taints' = 'true'\n'%s' = '%s'\n'testing/cluster' = 'unspecified'\n\n[settings.kubernetes.node-taints]\nbaz = ['bin:NoExecute']\nfoo = ['bar:NoExecute']\n'karpenter.sh/unregistered' = [':NoExecute']\n"
  },
  {
    "path": "pkg/providers/launchtemplate/testdata/windows_userdata_input.golden",
    "content": "Write-Host \"Running custom user data script\"\nWrite-Host \"Finished running custom user data script\"\n"
  },
  {
    "path": "pkg/providers/launchtemplate/testdata/windows_userdata_merged.golden",
    "content": "<powershell>\nWrite-Host \"Running custom user data script\"\nWrite-Host \"Finished running custom user data script\"\n[string]$EKSBootstrapScriptFile = \"$env:ProgramFiles\\Amazon\\EKS\\Start-EKSBootstrap.ps1\"\n& $EKSBootstrapScriptFile -EKSClusterName 'test-cluster' -APIServerEndpoint 'https://test-cluster' -Base64ClusterCA 'Y2EtYnVuZGxlCg==' -KubeletExtraArgs '--node-labels=\"karpenter.k8s.aws/ec2nodeclass=%s,karpenter.sh/capacity-type=spot,karpenter.sh/do-not-sync-taints=true,%s=%s,testing/cluster=unspecified\" --register-with-taints=\"karpenter.sh/unregistered:NoExecute\" --max-pods=110' -DNSClusterIP '10.0.100.10'\n</powershell>\n"
  },
  {
    "path": "pkg/providers/launchtemplate/testdata/windows_userdata_unmerged.golden",
    "content": "<powershell>\n[string]$EKSBootstrapScriptFile = \"$env:ProgramFiles\\Amazon\\EKS\\Start-EKSBootstrap.ps1\"\n& $EKSBootstrapScriptFile -EKSClusterName 'test-cluster' -APIServerEndpoint 'https://test-cluster' -Base64ClusterCA 'Y2EtYnVuZGxlCg==' -KubeletExtraArgs '--node-labels=\"karpenter.k8s.aws/ec2nodeclass=%s,karpenter.sh/capacity-type=spot,karpenter.sh/do-not-sync-taints=true,%s=%s,testing/cluster=unspecified\" --register-with-taints=\"karpenter.sh/unregistered:NoExecute\" --max-pods=110' -DNSClusterIP '10.0.100.10'\n</powershell>\n"
  },
  {
    "path": "pkg/providers/launchtemplate/types.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage launchtemplate\n\nimport (\n\t\"context\"\n\n\t\"github.com/aws/aws-sdk-go-v2/service/ec2\"\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\t\"github.com/samber/lo\"\n\tcorev1 \"k8s.io/api/core/v1\"\n\tkarpv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n\t\"sigs.k8s.io/karpenter/pkg/cloudprovider\"\n\t\"sigs.k8s.io/karpenter/pkg/operator/options\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/amifamily\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/utils\"\n)\n\ntype Provider interface {\n\tEnsureAll(context.Context, *v1.EC2NodeClass, *karpv1.NodeClaim,\n\t\t[]*cloudprovider.InstanceType, string, map[string]string, string) ([]*LaunchTemplate, error)\n\tDeleteAll(context.Context, *v1.EC2NodeClass) error\n\tInvalidateCache(context.Context, string, string)\n\tResolveClusterCIDR(context.Context) error\n\tCreateAMIOptions(context.Context, *v1.EC2NodeClass, map[string]string, map[string]string) (*amifamily.Options, error)\n}\n\ntype LaunchTemplate struct {\n\tName                  string\n\tInstanceTypes         []*cloudprovider.InstanceType\n\tImageID               string\n\tCapacityReservationID string\n}\n\ntype LaunchMode int\n\nconst (\n\tLaunchModeOpen LaunchMode = iota\n\tLaunchModeTargeted\n)\n\ntype LaunchModeProvider interface {\n\tLaunchMode(context.Context) LaunchMode\n}\n\ntype defaultLaunchModeProvider struct{}\n\nfunc (defaultLaunchModeProvider) LaunchMode(ctx context.Context) LaunchMode {\n\tif options.FromContext(ctx).FeatureGates.ReservedCapacity {\n\t\treturn LaunchModeTargeted\n\t}\n\treturn LaunchModeOpen\n}\n\ntype CreateLaunchTemplateInputBuilder struct {\n\tLaunchModeProvider\n\toptions         *amifamily.LaunchTemplate\n\tclusterIPFamily corev1.IPFamily\n\tuserData        string\n}\n\nfunc NewCreateLaunchTemplateInputBuilder(\n\toptions *amifamily.LaunchTemplate,\n\tclusterIPFamily corev1.IPFamily,\n\tuserData string,\n) *CreateLaunchTemplateInputBuilder {\n\treturn &CreateLaunchTemplateInputBuilder{\n\t\tLaunchModeProvider: defaultLaunchModeProvider{},\n\t\toptions:            options,\n\t\tclusterIPFamily:    clusterIPFamily,\n\t\tuserData:           userData,\n\t}\n}\n\nfunc (b *CreateLaunchTemplateInputBuilder) WithLaunchModeProvider(provider LaunchModeProvider) *CreateLaunchTemplateInputBuilder {\n\tb.LaunchModeProvider = provider\n\treturn b\n}\n\nfunc (b *CreateLaunchTemplateInputBuilder) Build(ctx context.Context) *ec2.CreateLaunchTemplateInput {\n\tlaunchTemplateDataTags := []ec2types.LaunchTemplateTagSpecificationRequest{{\n\t\tResourceType: ec2types.ResourceTypeNetworkInterface,\n\t\tTags:         utils.EC2MergeTags(b.options.Tags),\n\t}}\n\tif b.options.CapacityType == karpv1.CapacityTypeSpot {\n\t\tlaunchTemplateDataTags = append(launchTemplateDataTags, ec2types.LaunchTemplateTagSpecificationRequest{\n\t\t\tResourceType: ec2types.ResourceTypeSpotInstancesRequest,\n\t\t\tTags:         utils.EC2MergeTags(b.options.Tags),\n\t\t})\n\t}\n\tnetworkInterfaces := generateNetworkInterfaces(b.options, b.clusterIPFamily)\n\tlt := &ec2.CreateLaunchTemplateInput{\n\t\tLaunchTemplateName: lo.ToPtr(LaunchTemplateName(b.options)),\n\t\tLaunchTemplateData: &ec2types.RequestLaunchTemplateData{\n\t\t\tBlockDeviceMappings: blockDeviceMappings(b.options.BlockDeviceMappings),\n\t\t\tIamInstanceProfile: &ec2types.LaunchTemplateIamInstanceProfileSpecificationRequest{\n\t\t\t\tName: lo.ToPtr(b.options.InstanceProfile),\n\t\t\t},\n\t\t\tMonitoring: &ec2types.LaunchTemplatesMonitoringRequest{\n\t\t\t\tEnabled: lo.ToPtr(b.options.DetailedMonitoring),\n\t\t\t},\n\t\t\t// If the network interface is defined, the security groups are defined within it\n\t\t\tSecurityGroupIds: lo.Ternary(networkInterfaces != nil, nil, lo.Map(b.options.SecurityGroups, func(s v1.SecurityGroup, _ int) string { return s.ID })),\n\t\t\tUserData:         lo.ToPtr(b.userData),\n\t\t\tImageId:          lo.ToPtr(b.options.AMIID),\n\t\t\tMetadataOptions: &ec2types.LaunchTemplateInstanceMetadataOptionsRequest{\n\t\t\t\tHttpEndpoint:     ec2types.LaunchTemplateInstanceMetadataEndpointState(lo.FromPtr(b.options.MetadataOptions.HTTPEndpoint)),\n\t\t\t\tHttpProtocolIpv6: ec2types.LaunchTemplateInstanceMetadataProtocolIpv6(lo.FromPtr(b.options.MetadataOptions.HTTPProtocolIPv6)),\n\t\t\t\t//Will be removed when we update options.MetadataOptions.HTTPPutResponseHopLimit type to be int32\n\t\t\t\t//nolint: gosec\n\t\t\t\tHttpPutResponseHopLimit: lo.ToPtr(int32(lo.FromPtr(b.options.MetadataOptions.HTTPPutResponseHopLimit))),\n\t\t\t\tHttpTokens:              ec2types.LaunchTemplateHttpTokensState(lo.FromPtr(b.options.MetadataOptions.HTTPTokens)),\n\t\t\t\t// We statically set the InstanceMetadataTags to \"disabled\" for all new instances since\n\t\t\t\t// account-wide defaults can override instance defaults on metadata settings\n\t\t\t\t// This can cause instance failure on accounts that default to instance tags since Karpenter\n\t\t\t\t// can't support instance tags with its current tags (e.g. kubernetes.io/cluster/*, karpenter.k8s.aws/ec2nodeclass)\n\t\t\t\t// See https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-options.html#instance-metadata-options-order-of-precedence\n\t\t\t\tInstanceMetadataTags: ec2types.LaunchTemplateInstanceMetadataTagsStateDisabled,\n\t\t\t},\n\t\t\tNetworkInterfaces: networkInterfaces,\n\t\t\tTagSpecifications: launchTemplateDataTags,\n\t\t\tPlacement: &ec2types.LaunchTemplatePlacementRequest{\n\t\t\t\tTenancy: ec2types.Tenancy(b.options.Tenancy),\n\t\t\t},\n\t\t},\n\t\tTagSpecifications: []ec2types.TagSpecification{\n\t\t\t{\n\t\t\t\tResourceType: ec2types.ResourceTypeLaunchTemplate,\n\t\t\t\tTags:         utils.EC2MergeTags(b.options.Tags),\n\t\t\t},\n\t\t},\n\t}\n\t// Gate this specifically since the update to CapacityReservationPreference will opt od / spot launches out of open\n\t// ODCRs, which is a breaking change from the pre-native ODCR support behavior.\n\tif b.LaunchMode(ctx) == LaunchModeTargeted {\n\t\tlt.LaunchTemplateData.CapacityReservationSpecification = &ec2types.LaunchTemplateCapacityReservationSpecificationRequest{\n\t\t\tCapacityReservationPreference: lo.Ternary(\n\t\t\t\tb.options.CapacityType == karpv1.CapacityTypeReserved,\n\t\t\t\tec2types.CapacityReservationPreferenceCapacityReservationsOnly,\n\t\t\t\tec2types.CapacityReservationPreferenceNone,\n\t\t\t),\n\t\t\tCapacityReservationTarget: lo.Ternary(\n\t\t\t\tb.options.CapacityType == karpv1.CapacityTypeReserved,\n\t\t\t\t&ec2types.CapacityReservationTarget{\n\t\t\t\t\tCapacityReservationId: &b.options.CapacityReservationID,\n\t\t\t\t},\n\t\t\t\tnil,\n\t\t\t),\n\t\t}\n\t\tlt.LaunchTemplateData.InstanceMarketOptions =\n\t\t\tlo.If(\n\t\t\t\tb.options.CapacityReservationType == v1.CapacityReservationTypeCapacityBlock,\n\t\t\t\t&ec2types.LaunchTemplateInstanceMarketOptionsRequest{\n\t\t\t\t\tMarketType: ec2types.MarketTypeCapacityBlock,\n\t\t\t\t},\n\t\t\t).ElseIf(\n\t\t\t\tb.options.CapacityReservationInterruptible,\n\t\t\t\t&ec2types.LaunchTemplateInstanceMarketOptionsRequest{\n\t\t\t\t\tMarketType: ec2types.MarketTypeInterruptibleCapacityReservation,\n\t\t\t\t},\n\t\t\t).Else(nil)\n\t}\n\treturn lt\n}\n"
  },
  {
    "path": "pkg/providers/pricing/pricing.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage pricing\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n\t\"time\"\n\n\t\"sigs.k8s.io/controller-runtime/pkg/log\"\n\n\tsdk \"github.com/aws/karpenter-provider-aws/pkg/aws\"\n\n\t\"github.com/aws/aws-sdk-go-v2/aws\"\n\t\"github.com/aws/aws-sdk-go-v2/service/ec2\"\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\t\"github.com/aws/aws-sdk-go-v2/service/pricing\"\n\tpricingtypes \"github.com/aws/aws-sdk-go-v2/service/pricing/types\"\n\t\"github.com/samber/lo\"\n\t\"go.uber.org/multierr\"\n\t\"sigs.k8s.io/karpenter/pkg/utils/pretty\"\n)\n\nvar initialOnDemandPrices = lo.Assign(InitialOnDemandPricesAWS, InitialOnDemandPricesUSGov, InitialOnDemandPricesCN)\n\ntype Provider interface {\n\tLivenessProbe(*http.Request) error\n\tInstanceTypes() []ec2types.InstanceType\n\tOnDemandPrice(ec2types.InstanceType) (float64, bool)\n\tSpotPrice(ec2types.InstanceType, string) (float64, bool)\n\tUpdateOnDemandPricing(context.Context) error\n\tUpdateSpotPricing(context.Context) error\n}\n\n// DefaultProvider provides actual pricing data to the AWS cloud provider to allow it to make more informed decisions\n// regarding which instances to launch.  This is initialized at startup with a periodically updated static price list to\n// support running in locations where pricing data is unavailable.  In those cases the static pricing data provides a\n// relative ordering that is still more accurate than our previous pricing model.  In the event that a pricing update\n// fails, the previous pricing information is retained and used which may be the static initial pricing data if pricing\n// updates never succeed.\ntype DefaultProvider struct {\n\tec2         sdk.EC2API\n\tpricing     sdk.PricingAPI\n\tregion      string\n\tisolatedVPC bool\n\tcm          *pretty.ChangeMonitor\n\n\tmuOnDemand     sync.RWMutex\n\tonDemandPrices map[ec2types.InstanceType]float64\n\n\tmuSpot             sync.RWMutex\n\tspotPrices         map[ec2types.InstanceType]zonal\n\tspotPricingUpdated bool\n}\n\n// zonalPricing is used to capture the per-zone price\n// for spot data as well as the default price\n// based on on-demand price when the provisioningController first\n// comes up\ntype zonal struct {\n\tdefaultPrice float64 // Used until we get the spot pricing data\n\tprices       map[string]float64\n}\n\nfunc combineZonalPricing(pricingData ...zonal) zonal {\n\tz := newZonalPricing(0)\n\tfor _, elem := range pricingData {\n\t\tif elem.defaultPrice != 0 {\n\t\t\tz.defaultPrice = elem.defaultPrice\n\t\t}\n\t\tfor zone, price := range elem.prices {\n\t\t\tz.prices[zone] = price\n\t\t}\n\t}\n\treturn z\n}\n\nfunc newZonalPricing(defaultPrice float64) zonal {\n\tz := zonal{\n\t\tprices: map[string]float64{},\n\t}\n\tz.defaultPrice = defaultPrice\n\treturn z\n}\n\n// NewPricingAPI returns a pricing API configured based on a particular region\nfunc NewAPI(cfg aws.Config) *pricing.Client {\n\t// pricing API doesn't have an endpoint in all regions\n\tpricingAPIRegion := \"us-east-1\"\n\tif strings.HasPrefix(cfg.Region, \"ap-\") {\n\t\tpricingAPIRegion = \"ap-south-1\"\n\t} else if strings.HasPrefix(cfg.Region, \"cn-\") {\n\t\tpricingAPIRegion = \"cn-northwest-1\"\n\t} else if strings.HasPrefix(cfg.Region, \"eu-\") {\n\t\tpricingAPIRegion = \"eu-central-1\"\n\t}\n\t//create pricing config using pricing endpoint\n\tpricingCfg := cfg.Copy()\n\tpricingCfg.Region = pricingAPIRegion\n\treturn pricing.NewFromConfig(pricingCfg)\n}\n\nfunc NewDefaultProvider(pricing sdk.PricingAPI, ec2Api sdk.EC2API, region string, isolatedVPC bool) *DefaultProvider {\n\tp := &DefaultProvider{\n\t\tregion:      region,\n\t\tec2:         ec2Api,\n\t\tpricing:     pricing,\n\t\tcm:          pretty.NewChangeMonitor(),\n\t\tisolatedVPC: isolatedVPC,\n\t}\n\t// sets the pricing data from the static default state for the provider\n\tp.Reset()\n\n\treturn p\n}\n\n// InstanceTypes returns the list of all instance types for which either a spot or on-demand price is known.\nfunc (p *DefaultProvider) InstanceTypes() []ec2types.InstanceType {\n\tp.muOnDemand.RLock()\n\tp.muSpot.RLock()\n\tdefer p.muOnDemand.RUnlock()\n\tdefer p.muSpot.RUnlock()\n\treturn lo.Union(lo.Keys(p.onDemandPrices), lo.Keys(p.spotPrices))\n}\n\n// OnDemandPrice returns the last known on-demand price for a given instance type, returning an error if there is no\n// known on-demand pricing for the instance type.\nfunc (p *DefaultProvider) OnDemandPrice(instanceType ec2types.InstanceType) (float64, bool) {\n\tp.muOnDemand.RLock()\n\tdefer p.muOnDemand.RUnlock()\n\tprice, ok := p.onDemandPrices[instanceType]\n\tif !ok {\n\t\treturn 0.0, false\n\t}\n\treturn price, true\n}\n\n// SpotPrice returns the last known spot price for a given instance type and zone, returning an error\n// if there is no known spot pricing for that instance type or zone\nfunc (p *DefaultProvider) SpotPrice(instanceType ec2types.InstanceType, zone string) (float64, bool) {\n\tp.muSpot.RLock()\n\tdefer p.muSpot.RUnlock()\n\tif val, ok := p.spotPrices[instanceType]; ok {\n\t\tif !p.spotPricingUpdated {\n\t\t\treturn val.defaultPrice, true\n\t\t}\n\t\tif price, ok := p.spotPrices[instanceType].prices[zone]; ok {\n\t\t\treturn price, true\n\t\t}\n\t\treturn 0.0, false\n\t}\n\treturn 0.0, false\n}\n\nfunc (p *DefaultProvider) UpdateOnDemandPricing(ctx context.Context) error {\n\t// standard on-demand instances\n\tvar wg sync.WaitGroup\n\tvar onDemandPrices, onDemandMetalPrices map[ec2types.InstanceType]float64\n\tvar onDemandErr, onDemandMetalErr error\n\n\t// if we are in isolated vpc, skip updating on demand pricing\n\t// as pricing api may not be available\n\tif p.isolatedVPC {\n\t\tif p.cm.HasChanged(\"on-demand-prices\", nil) {\n\t\t\tlog.FromContext(ctx).V(1).Info(\"running in an isolated VPC, on-demand pricing information will not be updated\")\n\t\t}\n\t\treturn nil\n\t}\n\n\tif strings.HasPrefix(p.region, \"us-gov\") {\n\t\tif p.cm.HasChanged(\"on-demand-prices\", nil) {\n\t\t\tlog.FromContext(ctx).V(1).Info(\"pricing APIs aren't available in AWS GovCloud regions, on-demand pricing information will not be updated\")\n\t\t}\n\t\treturn nil\n\t}\n\n\tp.muOnDemand.Lock()\n\tdefer p.muOnDemand.Unlock()\n\n\twg.Go(func() {\n\t\tonDemandPrices, onDemandErr = p.fetchOnDemandPricing(ctx,\n\t\t\tpricingtypes.Filter{\n\t\t\t\tField: aws.String(\"tenancy\"),\n\t\t\t\tType:  \"TERM_MATCH\",\n\t\t\t\tValue: aws.String(\"Shared\"),\n\t\t\t},\n\t\t\tpricingtypes.Filter{\n\t\t\t\tField: aws.String(\"productFamily\"),\n\t\t\t\tType:  \"TERM_MATCH\",\n\t\t\t\tValue: aws.String(\"Compute Instance\"),\n\t\t\t})\n\t})\n\n\t// bare metal on-demand prices\n\twg.Go(func() {\n\t\tonDemandMetalPrices, onDemandMetalErr = p.fetchOnDemandPricing(ctx,\n\t\t\tpricingtypes.Filter{\n\t\t\t\tField: aws.String(\"tenancy\"),\n\t\t\t\tType:  \"TERM_MATCH\",\n\t\t\t\tValue: aws.String(\"Dedicated\"),\n\t\t\t},\n\t\t\tpricingtypes.Filter{\n\t\t\t\tField: aws.String(\"productFamily\"),\n\t\t\t\tType:  \"TERM_MATCH\",\n\t\t\t\tValue: aws.String(\"Compute Instance (bare metal)\"),\n\t\t\t})\n\t})\n\n\twg.Wait()\n\n\terr := multierr.Append(onDemandErr, onDemandMetalErr)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"retreiving on-demand pricing data, %w\", err)\n\t}\n\n\tif len(onDemandPrices) == 0 || len(onDemandMetalPrices) == 0 {\n\t\treturn fmt.Errorf(\"no on-demand pricing found\")\n\t}\n\n\t// Maintain previously retrieved pricing data\n\tp.onDemandPrices = lo.Assign(p.onDemandPrices, onDemandPrices, onDemandMetalPrices)\n\tif p.cm.HasChanged(\"on-demand-prices\", p.onDemandPrices) {\n\t\tlog.FromContext(ctx).WithValues(\"instance-type-count\", len(p.onDemandPrices)).V(1).Info(\"updated on-demand pricing\")\n\t}\n\treturn nil\n}\n\nfunc (p *DefaultProvider) fetchOnDemandPricing(ctx context.Context, additionalFilters ...pricingtypes.Filter) (map[ec2types.InstanceType]float64, error) {\n\tprices := map[ec2types.InstanceType]float64{}\n\tfilters := append([]pricingtypes.Filter{\n\t\t{\n\t\t\tField: aws.String(\"regionCode\"),\n\t\t\tType:  \"TERM_MATCH\",\n\t\t\tValue: aws.String(p.region),\n\t\t},\n\t\t{\n\t\t\tField: aws.String(\"serviceCode\"),\n\t\t\tType:  \"TERM_MATCH\",\n\t\t\tValue: aws.String(\"AmazonEC2\"),\n\t\t},\n\t\t{\n\t\t\tField: aws.String(\"preInstalledSw\"),\n\t\t\tType:  \"TERM_MATCH\",\n\t\t\tValue: aws.String(\"NA\"),\n\t\t},\n\t\t{\n\t\t\tField: aws.String(\"operatingSystem\"),\n\t\t\tType:  \"TERM_MATCH\",\n\t\t\tValue: aws.String(\"Linux\"),\n\t\t},\n\t\t{\n\t\t\tField: aws.String(\"capacitystatus\"),\n\t\t\tType:  \"TERM_MATCH\",\n\t\t\tValue: aws.String(\"Used\"),\n\t\t},\n\t\t{\n\t\t\tField: aws.String(\"marketoption\"),\n\t\t\tType:  \"TERM_MATCH\",\n\t\t\tValue: aws.String(\"OnDemand\"),\n\t\t}},\n\t\tadditionalFilters...)\n\n\tinput := &pricing.GetProductsInput{\n\t\tFilters:     filters,\n\t\tServiceCode: aws.String(\"AmazonEC2\"),\n\t\t// MaxResults for DescribeInstances is capped at 100\n\t\tMaxResults: lo.ToPtr[int32](100),\n\t}\n\n\tpaginator := pricing.NewGetProductsPaginator(p.pricing, input)\n\tfor paginator.HasMorePages() {\n\t\toutput, err := paginator.NextPage(ctx)\n\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"getting pricing data, %w\", err)\n\t\t}\n\t\tprices = lo.Assign(prices, p.onDemandPage(ctx, output))\n\t}\n\n\treturn prices, nil\n}\n\nfunc (p *DefaultProvider) spotPage(ctx context.Context, output *ec2.DescribeSpotPriceHistoryOutput) map[ec2types.InstanceType]zonal {\n\tresult := map[ec2types.InstanceType]zonal{}\n\tfor _, sph := range output.SpotPriceHistory {\n\t\tspotPriceStr := aws.ToString(sph.SpotPrice)\n\t\tspotPrice, err := strconv.ParseFloat(spotPriceStr, 64)\n\t\t// these errors shouldn't occur, but if pricing API does have an error, we ignore the record\n\t\tif err != nil {\n\t\t\tlog.FromContext(ctx).V(1).Info(fmt.Sprintf(\"unable to parse price record %#v\", sph))\n\t\t\tcontinue\n\t\t}\n\t\tif sph.Timestamp == nil {\n\t\t\tcontinue\n\t\t}\n\t\tinstanceType := sph.InstanceType\n\t\taz := aws.ToString(sph.AvailabilityZone)\n\t\t_, ok := result[instanceType]\n\t\tif !ok {\n\t\t\tresult[instanceType] = zonal{\n\t\t\t\tprices: map[string]float64{},\n\t\t\t}\n\t\t}\n\t\tresult[instanceType].prices[az] = spotPrice\n\n\t}\n\treturn result\n}\n\n// turning off cyclo here, it measures as a 12 due to all of the type checks of the pricing data which returns a deeply\n// nested map[string]any\n// nolint: gocyclo\nfunc (p *DefaultProvider) onDemandPage(ctx context.Context, output *pricing.GetProductsOutput) map[ec2types.InstanceType]float64 {\n\t// this isn't the full pricing struct, just the portions we care about\n\ttype priceItem struct {\n\t\tProduct struct {\n\t\t\tAttributes struct {\n\t\t\t\tInstanceType string\n\t\t\t}\n\t\t}\n\t\tTerms struct {\n\t\t\tOnDemand map[string]struct {\n\t\t\t\tPriceDimensions map[string]struct {\n\t\t\t\t\tPricePerUnit map[string]string\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tresult := map[ec2types.InstanceType]float64{}\n\tcurrency := \"USD\"\n\tif strings.HasPrefix(p.region, \"cn-\") {\n\t\tcurrency = \"CNY\"\n\t}\n\tfor _, outer := range output.PriceList {\n\t\tpItem := &priceItem{}\n\t\tif err := json.Unmarshal([]byte(outer), pItem); err != nil {\n\t\t\tlog.FromContext(ctx).Error(err, \"failed unmarshaling pricing data\")\n\t\t}\n\t\tif pItem.Product.Attributes.InstanceType == \"\" {\n\t\t\tcontinue\n\t\t}\n\t\tfor _, term := range pItem.Terms.OnDemand {\n\t\t\tfor _, v := range term.PriceDimensions {\n\t\t\t\tprice, err := strconv.ParseFloat(v.PricePerUnit[currency], 64)\n\t\t\t\tif err != nil || price == 0 {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tresult[ec2types.InstanceType(pItem.Product.Attributes.InstanceType)] = price\n\t\t\t}\n\t\t}\n\t}\n\n\treturn result\n}\n\n// nolint: gocyclo\nfunc (p *DefaultProvider) UpdateSpotPricing(ctx context.Context) error {\n\tprices := map[ec2types.InstanceType]zonal{}\n\n\tp.muSpot.Lock()\n\tdefer p.muSpot.Unlock()\n\n\tinput := &ec2.DescribeSpotPriceHistoryInput{\n\t\tProductDescriptions: []string{\n\t\t\t\"Linux/UNIX\",\n\t\t\t\"Linux/UNIX (Amazon VPC)\",\n\t\t},\n\t\t// get the latest spot price for each instance type\n\t\tStartTime: aws.Time(time.Now()),\n\t\t// MaxResults for DescribeSpotPriceHistory is set at 2000 arbitrarily since EC2 doesn't seem to limit page size here\n\t\tMaxResults: lo.ToPtr[int32](2000),\n\t}\n\n\tpaginator := ec2.NewDescribeSpotPriceHistoryPaginator(p.ec2, input)\n\tfor paginator.HasMorePages() {\n\t\toutput, err := paginator.NextPage(ctx)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"retrieving spot pricing data, %w\", err)\n\t\t}\n\t\tfor it, z := range p.spotPage(ctx, output) {\n\t\t\tprices[it] = combineZonalPricing(prices[it], z)\n\t\t}\n\t}\n\tif len(prices) == 0 {\n\t\treturn fmt.Errorf(\"no spot pricing found\")\n\t}\n\ttotalOfferings := 0\n\tfor it, zoneData := range prices {\n\t\t// Maintain previously retrieved pricing data\n\t\tp.spotPrices[it] = combineZonalPricing(p.spotPrices[it], zoneData)\n\t\ttotalOfferings += len(zoneData.prices)\n\t}\n\n\tp.spotPricingUpdated = true\n\tif p.cm.HasChanged(\"spot-prices\", p.spotPrices) {\n\t\tlog.FromContext(ctx).WithValues(\n\t\t\t\"instance-type-count\", len(p.spotPrices),\n\t\t\t\"offering-count\", totalOfferings).V(1).Info(\"updated spot pricing with instance types and offerings\")\n\t}\n\treturn nil\n}\n\nfunc (p *DefaultProvider) LivenessProbe(_ *http.Request) error {\n\t// ensure we don't deadlock and nolint for the empty critical section\n\tp.muOnDemand.Lock()\n\tp.muSpot.Lock()\n\t//nolint: staticcheck\n\tp.muOnDemand.Unlock()\n\tp.muSpot.Unlock()\n\treturn nil\n}\n\nfunc populateInitialSpotPricing(pricing map[ec2types.InstanceType]float64) map[ec2types.InstanceType]zonal {\n\tm := map[ec2types.InstanceType]zonal{}\n\tfor it, price := range pricing {\n\t\tm[it] = newZonalPricing(price)\n\t}\n\treturn m\n}\n\nfunc (p *DefaultProvider) Reset() {\n\t// see if we've got region specific pricing data\n\tstaticPricing, ok := initialOnDemandPrices[p.region]\n\tif !ok {\n\t\t// and if not, fall back to the always available us-east-1\n\t\tstaticPricing = initialOnDemandPrices[\"us-east-1\"]\n\t}\n\n\tp.onDemandPrices = staticPricing\n\t// default our spot pricing to the same as the on-demand pricing until a price update\n\tp.spotPrices = populateInitialSpotPricing(staticPricing)\n\tp.spotPricingUpdated = false\n}\n"
  },
  {
    "path": "pkg/providers/pricing/zz_generated.pricing_aws.go",
    "content": "//go:build !ignore_autogenerated\n\n/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage pricing\n\n// generated at 2026-01-21T19:34:29Z for us-east-1\n\nimport ec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\nvar InitialOnDemandPricesAWS = map[string]map[ec2types.InstanceType]float64{\n\t// us-east-1\n\t\"us-east-1\": {\n\t\t// a1 family\n\t\t\"a1.2xlarge\": 0.204000, \"a1.4xlarge\": 0.408000, \"a1.large\": 0.051000, \"a1.medium\": 0.025500,\n\t\t\"a1.metal\": 0.408000, \"a1.xlarge\": 0.102000,\n\t\t// c1 family\n\t\t\"c1.medium\": 0.130000, \"c1.xlarge\": 0.520000,\n\t\t// c3 family\n\t\t\"c3.2xlarge\": 0.420000, \"c3.4xlarge\": 0.840000, \"c3.8xlarge\": 1.680000, \"c3.large\": 0.105000,\n\t\t\"c3.xlarge\": 0.210000,\n\t\t// c4 family\n\t\t\"c4.2xlarge\": 0.398000, \"c4.4xlarge\": 0.796000, \"c4.8xlarge\": 1.591000, \"c4.large\": 0.100000,\n\t\t\"c4.xlarge\": 0.199000,\n\t\t// c5 family\n\t\t\"c5.12xlarge\": 2.040000, \"c5.18xlarge\": 3.060000, \"c5.24xlarge\": 4.080000, \"c5.2xlarge\": 0.340000,\n\t\t\"c5.4xlarge\": 0.680000, \"c5.9xlarge\": 1.530000, \"c5.large\": 0.085000, \"c5.metal\": 4.080000,\n\t\t\"c5.xlarge\": 0.170000,\n\t\t// c5a family\n\t\t\"c5a.12xlarge\": 1.848000, \"c5a.16xlarge\": 2.464000, \"c5a.24xlarge\": 3.696000, \"c5a.2xlarge\": 0.308000,\n\t\t\"c5a.4xlarge\": 0.616000, \"c5a.8xlarge\": 1.232000, \"c5a.large\": 0.077000, \"c5a.xlarge\": 0.154000,\n\t\t// c5ad family\n\t\t\"c5ad.12xlarge\": 2.064000, \"c5ad.16xlarge\": 2.752000, \"c5ad.24xlarge\": 4.128000, \"c5ad.2xlarge\": 0.344000,\n\t\t\"c5ad.4xlarge\": 0.688000, \"c5ad.8xlarge\": 1.376000, \"c5ad.large\": 0.086000, \"c5ad.xlarge\": 0.172000,\n\t\t// c5d family\n\t\t\"c5d.12xlarge\": 2.304000, \"c5d.18xlarge\": 3.456000, \"c5d.24xlarge\": 4.608000, \"c5d.2xlarge\": 0.384000,\n\t\t\"c5d.4xlarge\": 0.768000, \"c5d.9xlarge\": 1.728000, \"c5d.large\": 0.096000, \"c5d.metal\": 4.608000,\n\t\t\"c5d.xlarge\": 0.192000,\n\t\t// c5n family\n\t\t\"c5n.18xlarge\": 3.888000, \"c5n.2xlarge\": 0.432000, \"c5n.4xlarge\": 0.864000, \"c5n.9xlarge\": 1.944000,\n\t\t\"c5n.large\": 0.108000, \"c5n.metal\": 3.888000, \"c5n.xlarge\": 0.216000,\n\t\t// c6a family\n\t\t\"c6a.12xlarge\": 1.836000, \"c6a.16xlarge\": 2.448000, \"c6a.24xlarge\": 3.672000, \"c6a.2xlarge\": 0.306000,\n\t\t\"c6a.32xlarge\": 4.896000, \"c6a.48xlarge\": 7.344000, \"c6a.4xlarge\": 0.612000, \"c6a.8xlarge\": 1.224000,\n\t\t\"c6a.large\": 0.076500, \"c6a.metal\": 7.344000, \"c6a.xlarge\": 0.153000,\n\t\t// c6g family\n\t\t\"c6g.12xlarge\": 1.632000, \"c6g.16xlarge\": 2.176000, \"c6g.2xlarge\": 0.272000, \"c6g.4xlarge\": 0.544000,\n\t\t\"c6g.8xlarge\": 1.088000, \"c6g.large\": 0.068000, \"c6g.medium\": 0.034000, \"c6g.metal\": 2.306600,\n\t\t\"c6g.xlarge\": 0.136000,\n\t\t// c6gd family\n\t\t\"c6gd.12xlarge\": 1.843200, \"c6gd.16xlarge\": 2.457600, \"c6gd.2xlarge\": 0.307200, \"c6gd.4xlarge\": 0.614400,\n\t\t\"c6gd.8xlarge\": 1.228800, \"c6gd.large\": 0.076800, \"c6gd.medium\": 0.038400, \"c6gd.metal\": 2.605100,\n\t\t\"c6gd.xlarge\": 0.153600,\n\t\t// c6gn family\n\t\t\"c6gn.12xlarge\": 2.073600, \"c6gn.16xlarge\": 2.764800, \"c6gn.2xlarge\": 0.345600, \"c6gn.4xlarge\": 0.691200,\n\t\t\"c6gn.8xlarge\": 1.382400, \"c6gn.large\": 0.086400, \"c6gn.medium\": 0.043200, \"c6gn.xlarge\": 0.172800,\n\t\t// c6i family\n\t\t\"c6i.12xlarge\": 2.040000, \"c6i.16xlarge\": 2.720000, \"c6i.24xlarge\": 4.080000, \"c6i.2xlarge\": 0.340000,\n\t\t\"c6i.32xlarge\": 5.440000, \"c6i.4xlarge\": 0.680000, \"c6i.8xlarge\": 1.360000, \"c6i.large\": 0.085000,\n\t\t\"c6i.metal\": 5.440000, \"c6i.xlarge\": 0.170000,\n\t\t// c6id family\n\t\t\"c6id.12xlarge\": 2.419200, \"c6id.16xlarge\": 3.225600, \"c6id.24xlarge\": 4.838400, \"c6id.2xlarge\": 0.403200,\n\t\t\"c6id.32xlarge\": 6.451200, \"c6id.4xlarge\": 0.806400, \"c6id.8xlarge\": 1.612800, \"c6id.large\": 0.100800,\n\t\t\"c6id.metal\": 6.451200, \"c6id.xlarge\": 0.201600,\n\t\t// c6in family\n\t\t\"c6in.12xlarge\": 2.721600, \"c6in.16xlarge\": 3.628800, \"c6in.24xlarge\": 5.443200, \"c6in.2xlarge\": 0.453600,\n\t\t\"c6in.32xlarge\": 7.257600, \"c6in.4xlarge\": 0.907200, \"c6in.8xlarge\": 1.814400, \"c6in.large\": 0.113400,\n\t\t\"c6in.metal\": 7.257600, \"c6in.xlarge\": 0.226800,\n\t\t// c7a family\n\t\t\"c7a.12xlarge\": 2.463360, \"c7a.16xlarge\": 3.284480, \"c7a.24xlarge\": 4.926720, \"c7a.2xlarge\": 0.410560,\n\t\t\"c7a.32xlarge\": 6.568960, \"c7a.48xlarge\": 9.853440, \"c7a.4xlarge\": 0.821120, \"c7a.8xlarge\": 1.642240,\n\t\t\"c7a.large\": 0.102640, \"c7a.medium\": 0.051320, \"c7a.metal-48xl\": 9.853440, \"c7a.xlarge\": 0.205280,\n\t\t// c7g family\n\t\t\"c7g.12xlarge\": 1.740000, \"c7g.16xlarge\": 2.320000, \"c7g.2xlarge\": 0.290000, \"c7g.4xlarge\": 0.580000,\n\t\t\"c7g.8xlarge\": 1.160000, \"c7g.large\": 0.072500, \"c7g.medium\": 0.036300, \"c7g.metal\": 2.320000,\n\t\t\"c7g.xlarge\": 0.145000,\n\t\t// c7gd family\n\t\t\"c7gd.12xlarge\": 2.177300, \"c7gd.16xlarge\": 2.903000, \"c7gd.2xlarge\": 0.362900, \"c7gd.4xlarge\": 0.725800,\n\t\t\"c7gd.8xlarge\": 1.451500, \"c7gd.large\": 0.090700, \"c7gd.medium\": 0.045400, \"c7gd.metal\": 2.903000,\n\t\t\"c7gd.xlarge\": 0.181400,\n\t\t// c7gn family\n\t\t\"c7gn.12xlarge\": 2.995200, \"c7gn.16xlarge\": 3.993600, \"c7gn.2xlarge\": 0.499200, \"c7gn.4xlarge\": 0.998400,\n\t\t\"c7gn.8xlarge\": 1.996800, \"c7gn.large\": 0.124800, \"c7gn.medium\": 0.062400, \"c7gn.metal\": 3.993600,\n\t\t\"c7gn.xlarge\": 0.249600,\n\t\t// c7i-flex family\n\t\t\"c7i-flex.12xlarge\": 2.034900, \"c7i-flex.16xlarge\": 2.713200, \"c7i-flex.2xlarge\": 0.339150,\n\t\t\"c7i-flex.4xlarge\": 0.678300, \"c7i-flex.8xlarge\": 1.356600, \"c7i-flex.large\": 0.084790,\n\t\t\"c7i-flex.xlarge\": 0.169580,\n\t\t// c7i family\n\t\t\"c7i.12xlarge\": 2.142000, \"c7i.16xlarge\": 2.856000, \"c7i.24xlarge\": 4.284000, \"c7i.2xlarge\": 0.357000,\n\t\t\"c7i.48xlarge\": 8.568000, \"c7i.4xlarge\": 0.714000, \"c7i.8xlarge\": 1.428000, \"c7i.large\": 0.089250,\n\t\t\"c7i.metal-24xl\": 4.712400, \"c7i.metal-48xl\": 8.568000, \"c7i.xlarge\": 0.178500,\n\t\t// c8a family\n\t\t\"c8a.12xlarge\": 2.586480, \"c8a.16xlarge\": 3.448640, \"c8a.24xlarge\": 5.172960, \"c8a.2xlarge\": 0.431080,\n\t\t\"c8a.48xlarge\": 10.345920, \"c8a.4xlarge\": 0.862160, \"c8a.8xlarge\": 1.724320, \"c8a.large\": 0.107770,\n\t\t\"c8a.medium\": 0.053890, \"c8a.metal-24xl\": 5.690260, \"c8a.metal-48xl\": 10.345920, \"c8a.xlarge\": 0.215540,\n\t\t// c8g family\n\t\t\"c8g.12xlarge\": 1.914240, \"c8g.16xlarge\": 2.552320, \"c8g.24xlarge\": 3.828480, \"c8g.2xlarge\": 0.319040,\n\t\t\"c8g.48xlarge\": 7.656960, \"c8g.4xlarge\": 0.638080, \"c8g.8xlarge\": 1.276160, \"c8g.large\": 0.079760,\n\t\t\"c8g.medium\": 0.039880, \"c8g.metal-24xl\": 4.211330, \"c8g.metal-48xl\": 7.656960, \"c8g.xlarge\": 0.159520,\n\t\t// c8gb family\n\t\t\"c8gb.12xlarge\": 2.844000, \"c8gb.16xlarge\": 3.792000, \"c8gb.24xlarge\": 5.688000, \"c8gb.2xlarge\": 0.474000,\n\t\t\"c8gb.4xlarge\": 0.948000, \"c8gb.8xlarge\": 1.896000, \"c8gb.large\": 0.118500, \"c8gb.medium\": 0.059250,\n\t\t\"c8gb.metal-24xl\": 6.029280, \"c8gb.xlarge\": 0.237000,\n\t\t// c8gd family\n\t\t\"c8gd.12xlarge\": 2.351520, \"c8gd.16xlarge\": 3.135360, \"c8gd.24xlarge\": 4.703040, \"c8gd.2xlarge\": 0.391920,\n\t\t\"c8gd.48xlarge\": 9.406080, \"c8gd.4xlarge\": 0.783840, \"c8gd.8xlarge\": 1.567680, \"c8gd.large\": 0.097980,\n\t\t\"c8gd.medium\": 0.048990, \"c8gd.metal-24xl\": 5.173340, \"c8gd.metal-48xl\": 9.406080, \"c8gd.xlarge\": 0.195960,\n\t\t// c8gn family\n\t\t\"c8gn.12xlarge\": 2.844000, \"c8gn.16xlarge\": 3.792000, \"c8gn.24xlarge\": 5.688000, \"c8gn.2xlarge\": 0.474000,\n\t\t\"c8gn.48xlarge\": 11.376000, \"c8gn.4xlarge\": 0.948000, \"c8gn.8xlarge\": 1.896000, \"c8gn.large\": 0.118500,\n\t\t\"c8gn.medium\": 0.059300, \"c8gn.metal-24xl\": 6.029300, \"c8gn.metal-48xl\": 11.376000,\n\t\t\"c8gn.xlarge\": 0.237000,\n\t\t// c8i-flex family\n\t\t\"c8i-flex.12xlarge\": 2.136480, \"c8i-flex.16xlarge\": 2.848640, \"c8i-flex.2xlarge\": 0.356080,\n\t\t\"c8i-flex.4xlarge\": 0.712160, \"c8i-flex.8xlarge\": 1.424320, \"c8i-flex.large\": 0.089020,\n\t\t\"c8i-flex.xlarge\": 0.178040,\n\t\t// c8i family\n\t\t\"c8i.12xlarge\": 2.249040, \"c8i.16xlarge\": 2.998720, \"c8i.24xlarge\": 4.498080, \"c8i.2xlarge\": 0.374840,\n\t\t\"c8i.32xlarge\": 5.997440, \"c8i.48xlarge\": 8.996160, \"c8i.4xlarge\": 0.749680, \"c8i.8xlarge\": 1.499360,\n\t\t\"c8i.96xlarge\": 17.992320, \"c8i.large\": 0.093710, \"c8i.metal-48xl\": 9.895780, \"c8i.metal-96xl\": 17.992320,\n\t\t\"c8i.xlarge\": 0.187420,\n\t\t// cr1 family\n\t\t\"cr1.8xlarge\": 3.500000,\n\t\t// d2 family\n\t\t\"d2.2xlarge\": 1.380000, \"d2.4xlarge\": 2.760000, \"d2.8xlarge\": 5.520000, \"d2.xlarge\": 0.690000,\n\t\t// d3 family\n\t\t\"d3.2xlarge\": 0.999000, \"d3.4xlarge\": 1.998000, \"d3.8xlarge\": 3.995520, \"d3.xlarge\": 0.499000,\n\t\t// d3en family\n\t\t\"d3en.12xlarge\": 6.308640, \"d3en.2xlarge\": 1.051000, \"d3en.4xlarge\": 2.103000, \"d3en.6xlarge\": 3.154000,\n\t\t\"d3en.8xlarge\": 4.205760, \"d3en.xlarge\": 0.526000,\n\t\t// dl1 family\n\t\t\"dl1.24xlarge\": 13.109040,\n\t\t// f1 family\n\t\t\"f1.16xlarge\": 13.200000, \"f1.2xlarge\": 1.650000, \"f1.4xlarge\": 3.300000,\n\t\t// f2 family\n\t\t\"f2.12xlarge\": 3.960000, \"f2.48xlarge\": 15.840000, \"f2.6xlarge\": 1.980000,\n\t\t// g2 family\n\t\t\"g2.2xlarge\": 0.650000, \"g2.8xlarge\": 2.600000,\n\t\t// g3 family\n\t\t\"g3.16xlarge\": 4.560000, \"g3.4xlarge\": 1.140000, \"g3.8xlarge\": 2.280000,\n\t\t// g3s family\n\t\t\"g3s.xlarge\": 0.750000,\n\t\t// g4ad family\n\t\t\"g4ad.16xlarge\": 3.468000, \"g4ad.2xlarge\": 0.541170, \"g4ad.4xlarge\": 0.867000, \"g4ad.8xlarge\": 1.734000,\n\t\t\"g4ad.xlarge\": 0.378530,\n\t\t// g4dn family\n\t\t\"g4dn.12xlarge\": 3.912000, \"g4dn.16xlarge\": 4.352000, \"g4dn.2xlarge\": 0.752000, \"g4dn.4xlarge\": 1.204000,\n\t\t\"g4dn.8xlarge\": 2.176000, \"g4dn.metal\": 7.824000, \"g4dn.xlarge\": 0.526000,\n\t\t// g5 family\n\t\t\"g5.12xlarge\": 5.672000, \"g5.16xlarge\": 4.096000, \"g5.24xlarge\": 8.144000, \"g5.2xlarge\": 1.212000,\n\t\t\"g5.48xlarge\": 16.288000, \"g5.4xlarge\": 1.624000, \"g5.8xlarge\": 2.448000, \"g5.xlarge\": 1.006000,\n\t\t// g5g family\n\t\t\"g5g.16xlarge\": 2.744000, \"g5g.2xlarge\": 0.556000, \"g5g.4xlarge\": 0.828000, \"g5g.8xlarge\": 1.372000,\n\t\t\"g5g.metal\": 2.744000, \"g5g.xlarge\": 0.420000,\n\t\t// g6 family\n\t\t\"g6.12xlarge\": 4.601600, \"g6.16xlarge\": 3.396800, \"g6.24xlarge\": 6.675200, \"g6.2xlarge\": 0.977600,\n\t\t\"g6.48xlarge\": 13.350400, \"g6.4xlarge\": 1.323200, \"g6.8xlarge\": 2.014400, \"g6.xlarge\": 0.804800,\n\t\t// g6e family\n\t\t\"g6e.12xlarge\": 10.492640, \"g6e.16xlarge\": 7.577190, \"g6e.24xlarge\": 15.065590, \"g6e.2xlarge\": 2.242080,\n\t\t\"g6e.48xlarge\": 30.131180, \"g6e.4xlarge\": 3.004240, \"g6e.8xlarge\": 4.528560, \"g6e.xlarge\": 1.861000,\n\t\t// g6f family\n\t\t\"g6f.2xlarge\": 0.475000, \"g6f.4xlarge\": 0.950000, \"g6f.large\": 0.202000, \"g6f.xlarge\": 0.237500,\n\t\t// g7e family\n\t\t\"g7e.12xlarge\": 8.286080, \"g7e.24xlarge\": 16.572160, \"g7e.2xlarge\": 3.363120, \"g7e.48xlarge\": 33.144320,\n\t\t\"g7e.4xlarge\": 3.998160, \"g7e.8xlarge\": 5.268240,\n\t\t// gr6 family\n\t\t\"gr6.4xlarge\": 1.539200, \"gr6.8xlarge\": 2.446400,\n\t\t// gr6f family\n\t\t\"gr6f.4xlarge\": 1.066000,\n\t\t// h1 family\n\t\t\"h1.16xlarge\": 3.744000, \"h1.2xlarge\": 0.468000, \"h1.4xlarge\": 0.936000, \"h1.8xlarge\": 1.872000,\n\t\t// hpc7g family\n\t\t\"hpc7g.16xlarge\": 1.683200, \"hpc7g.4xlarge\": 1.683200, \"hpc7g.8xlarge\": 1.683200,\n\t\t// i2 family\n\t\t\"i2.2xlarge\": 1.705000, \"i2.4xlarge\": 3.410000, \"i2.8xlarge\": 6.820000, \"i2.xlarge\": 0.853000,\n\t\t// i3 family\n\t\t\"i3.16xlarge\": 4.992000, \"i3.2xlarge\": 0.624000, \"i3.4xlarge\": 1.248000, \"i3.8xlarge\": 2.496000,\n\t\t\"i3.large\": 0.156000, \"i3.metal\": 4.992000, \"i3.xlarge\": 0.312000,\n\t\t// i3en family\n\t\t\"i3en.12xlarge\": 5.424000, \"i3en.24xlarge\": 10.848000, \"i3en.2xlarge\": 0.904000, \"i3en.3xlarge\": 1.356000,\n\t\t\"i3en.6xlarge\": 2.712000, \"i3en.large\": 0.226000, \"i3en.metal\": 10.848000, \"i3en.xlarge\": 0.452000,\n\t\t// i4g family\n\t\t\"i4g.16xlarge\": 4.942080, \"i4g.2xlarge\": 0.617760, \"i4g.4xlarge\": 1.235520, \"i4g.8xlarge\": 2.471040,\n\t\t\"i4g.large\": 0.154440, \"i4g.xlarge\": 0.308880,\n\t\t// i4i family\n\t\t\"i4i.12xlarge\": 4.118000, \"i4i.16xlarge\": 5.491000, \"i4i.24xlarge\": 8.236800, \"i4i.2xlarge\": 0.686000,\n\t\t\"i4i.32xlarge\": 10.982400, \"i4i.4xlarge\": 1.373000, \"i4i.8xlarge\": 2.746000, \"i4i.large\": 0.172000,\n\t\t\"i4i.metal\": 10.982000, \"i4i.xlarge\": 0.343000,\n\t\t// i7i family\n\t\t\"i7i.12xlarge\": 4.530200, \"i7i.16xlarge\": 6.040300, \"i7i.24xlarge\": 9.060500, \"i7i.2xlarge\": 0.755000,\n\t\t\"i7i.48xlarge\": 18.121000, \"i7i.4xlarge\": 1.510100, \"i7i.8xlarge\": 3.020200, \"i7i.large\": 0.188800,\n\t\t\"i7i.metal-24xl\": 9.620400, \"i7i.metal-48xl\": 19.240800, \"i7i.xlarge\": 0.377500,\n\t\t// i7ie family\n\t\t\"i7ie.12xlarge\": 6.237600, \"i7ie.18xlarge\": 9.356400, \"i7ie.24xlarge\": 12.475200, \"i7ie.2xlarge\": 1.039600,\n\t\t\"i7ie.3xlarge\": 1.559400, \"i7ie.48xlarge\": 24.950400, \"i7ie.6xlarge\": 3.118800, \"i7ie.large\": 0.259900,\n\t\t\"i7ie.metal-24xl\": 13.284400, \"i7ie.metal-48xl\": 26.568700, \"i7ie.xlarge\": 0.519800,\n\t\t// i8g family\n\t\t\"i8g.12xlarge\": 4.118400, \"i8g.16xlarge\": 5.491200, \"i8g.24xlarge\": 8.236800, \"i8g.2xlarge\": 0.686400,\n\t\t\"i8g.48xlarge\": 16.473600, \"i8g.4xlarge\": 1.372800, \"i8g.8xlarge\": 2.745600, \"i8g.large\": 0.171600,\n\t\t\"i8g.metal-24xl\": 9.060480, \"i8g.xlarge\": 0.343200,\n\t\t// i8ge family\n\t\t\"i8ge.12xlarge\": 5.695200, \"i8ge.18xlarge\": 8.542800, \"i8ge.24xlarge\": 11.390400, \"i8ge.2xlarge\": 0.949200,\n\t\t\"i8ge.3xlarge\": 1.423800, \"i8ge.48xlarge\": 22.780800, \"i8ge.6xlarge\": 2.847600, \"i8ge.large\": 0.237300,\n\t\t\"i8ge.metal-24xl\": 12.131300, \"i8ge.metal-48xl\": 24.262600, \"i8ge.xlarge\": 0.474600,\n\t\t// im4gn family\n\t\t\"im4gn.16xlarge\": 5.820670, \"im4gn.2xlarge\": 0.727580, \"im4gn.4xlarge\": 1.455170, \"im4gn.8xlarge\": 2.910340,\n\t\t\"im4gn.large\": 0.181900, \"im4gn.xlarge\": 0.363790,\n\t\t// inf1 family\n\t\t\"inf1.24xlarge\": 4.721000, \"inf1.2xlarge\": 0.362000, \"inf1.6xlarge\": 1.180000, \"inf1.xlarge\": 0.228000,\n\t\t// inf2 family\n\t\t\"inf2.24xlarge\": 6.490630, \"inf2.48xlarge\": 12.981270, \"inf2.8xlarge\": 1.967860, \"inf2.xlarge\": 0.758200,\n\t\t// is4gen family\n\t\t\"is4gen.2xlarge\": 1.152600, \"is4gen.4xlarge\": 2.305200, \"is4gen.8xlarge\": 4.610400,\n\t\t\"is4gen.large\": 0.288150, \"is4gen.medium\": 0.144080, \"is4gen.xlarge\": 0.576300,\n\t\t// m1 family\n\t\t\"m1.large\": 0.175000, \"m1.medium\": 0.087000, \"m1.small\": 0.044000, \"m1.xlarge\": 0.350000,\n\t\t// m2 family\n\t\t\"m2.2xlarge\": 0.490000, \"m2.4xlarge\": 0.980000, \"m2.xlarge\": 0.245000,\n\t\t// m3 family\n\t\t\"m3.2xlarge\": 0.532000, \"m3.large\": 0.133000, \"m3.medium\": 0.067000, \"m3.xlarge\": 0.266000,\n\t\t// m4 family\n\t\t\"m4.10xlarge\": 2.000000, \"m4.16xlarge\": 3.200000, \"m4.2xlarge\": 0.400000, \"m4.4xlarge\": 0.800000,\n\t\t\"m4.large\": 0.100000, \"m4.xlarge\": 0.200000,\n\t\t// m5 family\n\t\t\"m5.12xlarge\": 2.304000, \"m5.16xlarge\": 3.072000, \"m5.24xlarge\": 4.608000, \"m5.2xlarge\": 0.384000,\n\t\t\"m5.4xlarge\": 0.768000, \"m5.8xlarge\": 1.536000, \"m5.large\": 0.096000, \"m5.metal\": 4.608000,\n\t\t\"m5.xlarge\": 0.192000,\n\t\t// m5a family\n\t\t\"m5a.12xlarge\": 2.064000, \"m5a.16xlarge\": 2.752000, \"m5a.24xlarge\": 4.128000, \"m5a.2xlarge\": 0.344000,\n\t\t\"m5a.4xlarge\": 0.688000, \"m5a.8xlarge\": 1.376000, \"m5a.large\": 0.086000, \"m5a.xlarge\": 0.172000,\n\t\t// m5ad family\n\t\t\"m5ad.12xlarge\": 2.472000, \"m5ad.16xlarge\": 3.296000, \"m5ad.24xlarge\": 4.944000, \"m5ad.2xlarge\": 0.412000,\n\t\t\"m5ad.4xlarge\": 0.824000, \"m5ad.8xlarge\": 1.648000, \"m5ad.large\": 0.103000, \"m5ad.xlarge\": 0.206000,\n\t\t// m5d family\n\t\t\"m5d.12xlarge\": 2.712000, \"m5d.16xlarge\": 3.616000, \"m5d.24xlarge\": 5.424000, \"m5d.2xlarge\": 0.452000,\n\t\t\"m5d.4xlarge\": 0.904000, \"m5d.8xlarge\": 1.808000, \"m5d.large\": 0.113000, \"m5d.metal\": 5.424000,\n\t\t\"m5d.xlarge\": 0.226000,\n\t\t// m5dn family\n\t\t\"m5dn.12xlarge\": 3.264000, \"m5dn.16xlarge\": 4.352000, \"m5dn.24xlarge\": 6.528000, \"m5dn.2xlarge\": 0.544000,\n\t\t\"m5dn.4xlarge\": 1.088000, \"m5dn.8xlarge\": 2.176000, \"m5dn.large\": 0.136000, \"m5dn.metal\": 6.528000,\n\t\t\"m5dn.xlarge\": 0.272000,\n\t\t// m5n family\n\t\t\"m5n.12xlarge\": 2.856000, \"m5n.16xlarge\": 3.808000, \"m5n.24xlarge\": 5.712000, \"m5n.2xlarge\": 0.476000,\n\t\t\"m5n.4xlarge\": 0.952000, \"m5n.8xlarge\": 1.904000, \"m5n.large\": 0.119000, \"m5n.metal\": 5.712000,\n\t\t\"m5n.xlarge\": 0.238000,\n\t\t// m5zn family\n\t\t\"m5zn.12xlarge\": 3.964100, \"m5zn.2xlarge\": 0.660700, \"m5zn.3xlarge\": 0.991000, \"m5zn.6xlarge\": 1.982000,\n\t\t\"m5zn.large\": 0.165200, \"m5zn.metal\": 4.360500, \"m5zn.xlarge\": 0.330300,\n\t\t// m6a family\n\t\t\"m6a.12xlarge\": 2.073600, \"m6a.16xlarge\": 2.764800, \"m6a.24xlarge\": 4.147200, \"m6a.2xlarge\": 0.345600,\n\t\t\"m6a.32xlarge\": 5.529600, \"m6a.48xlarge\": 8.294400, \"m6a.4xlarge\": 0.691200, \"m6a.8xlarge\": 1.382400,\n\t\t\"m6a.large\": 0.086400, \"m6a.metal\": 8.294400, \"m6a.xlarge\": 0.172800,\n\t\t// m6g family\n\t\t\"m6g.12xlarge\": 1.848000, \"m6g.16xlarge\": 2.464000, \"m6g.2xlarge\": 0.308000, \"m6g.4xlarge\": 0.616000,\n\t\t\"m6g.8xlarge\": 1.232000, \"m6g.large\": 0.077000, \"m6g.medium\": 0.038500, \"m6g.metal\": 2.611200,\n\t\t\"m6g.xlarge\": 0.154000,\n\t\t// m6gd family\n\t\t\"m6gd.12xlarge\": 2.169600, \"m6gd.16xlarge\": 2.892800, \"m6gd.2xlarge\": 0.361600, \"m6gd.4xlarge\": 0.723200,\n\t\t\"m6gd.8xlarge\": 1.446400, \"m6gd.large\": 0.090400, \"m6gd.medium\": 0.045200, \"m6gd.metal\": 3.066400,\n\t\t\"m6gd.xlarge\": 0.180800,\n\t\t// m6i family\n\t\t\"m6i.12xlarge\": 2.304000, \"m6i.16xlarge\": 3.072000, \"m6i.24xlarge\": 4.608000, \"m6i.2xlarge\": 0.384000,\n\t\t\"m6i.32xlarge\": 6.144000, \"m6i.4xlarge\": 0.768000, \"m6i.8xlarge\": 1.536000, \"m6i.large\": 0.096000,\n\t\t\"m6i.metal\": 6.144000, \"m6i.xlarge\": 0.192000,\n\t\t// m6id family\n\t\t\"m6id.12xlarge\": 2.847600, \"m6id.16xlarge\": 3.796800, \"m6id.24xlarge\": 5.695200, \"m6id.2xlarge\": 0.474600,\n\t\t\"m6id.32xlarge\": 7.593600, \"m6id.4xlarge\": 0.949200, \"m6id.8xlarge\": 1.898400, \"m6id.large\": 0.118650,\n\t\t\"m6id.metal\": 7.593600, \"m6id.xlarge\": 0.237300,\n\t\t// m6idn family\n\t\t\"m6idn.12xlarge\": 3.818880, \"m6idn.16xlarge\": 5.091840, \"m6idn.24xlarge\": 7.637760,\n\t\t\"m6idn.2xlarge\": 0.636480, \"m6idn.32xlarge\": 10.183680, \"m6idn.4xlarge\": 1.272960, \"m6idn.8xlarge\": 2.545920,\n\t\t\"m6idn.large\": 0.159120, \"m6idn.metal\": 10.183680, \"m6idn.xlarge\": 0.318240,\n\t\t// m6in family\n\t\t\"m6in.12xlarge\": 3.341520, \"m6in.16xlarge\": 4.455360, \"m6in.24xlarge\": 6.683040, \"m6in.2xlarge\": 0.556920,\n\t\t\"m6in.32xlarge\": 8.910720, \"m6in.4xlarge\": 1.113840, \"m6in.8xlarge\": 2.227680, \"m6in.large\": 0.139230,\n\t\t\"m6in.metal\": 8.910720, \"m6in.xlarge\": 0.278460,\n\t\t// m7a family\n\t\t\"m7a.12xlarge\": 2.782080, \"m7a.16xlarge\": 3.709440, \"m7a.24xlarge\": 5.564160, \"m7a.2xlarge\": 0.463680,\n\t\t\"m7a.32xlarge\": 7.418880, \"m7a.48xlarge\": 11.128320, \"m7a.4xlarge\": 0.927360, \"m7a.8xlarge\": 1.854720,\n\t\t\"m7a.large\": 0.115920, \"m7a.medium\": 0.057960, \"m7a.metal-48xl\": 11.128320, \"m7a.xlarge\": 0.231840,\n\t\t// m7g family\n\t\t\"m7g.12xlarge\": 1.958400, \"m7g.16xlarge\": 2.611200, \"m7g.2xlarge\": 0.326400, \"m7g.4xlarge\": 0.652800,\n\t\t\"m7g.8xlarge\": 1.305600, \"m7g.large\": 0.081600, \"m7g.medium\": 0.040800, \"m7g.metal\": 2.611200,\n\t\t\"m7g.xlarge\": 0.163200,\n\t\t// m7gd family\n\t\t\"m7gd.12xlarge\": 2.562800, \"m7gd.16xlarge\": 3.417100, \"m7gd.2xlarge\": 0.427100, \"m7gd.4xlarge\": 0.854300,\n\t\t\"m7gd.8xlarge\": 1.708600, \"m7gd.large\": 0.106800, \"m7gd.medium\": 0.053400, \"m7gd.metal\": 3.417100,\n\t\t\"m7gd.xlarge\": 0.213600,\n\t\t// m7i-flex family\n\t\t\"m7i-flex.12xlarge\": 2.298240, \"m7i-flex.16xlarge\": 3.064320, \"m7i-flex.2xlarge\": 0.383040,\n\t\t\"m7i-flex.4xlarge\": 0.766080, \"m7i-flex.8xlarge\": 1.532160, \"m7i-flex.large\": 0.095760,\n\t\t\"m7i-flex.xlarge\": 0.191520,\n\t\t// m7i family\n\t\t\"m7i.12xlarge\": 2.419200, \"m7i.16xlarge\": 3.225600, \"m7i.24xlarge\": 4.838400, \"m7i.2xlarge\": 0.403200,\n\t\t\"m7i.48xlarge\": 9.676800, \"m7i.4xlarge\": 0.806400, \"m7i.8xlarge\": 1.612800, \"m7i.large\": 0.100800,\n\t\t\"m7i.metal-24xl\": 5.322240, \"m7i.metal-48xl\": 9.676800, \"m7i.xlarge\": 0.201600,\n\t\t// m8a family\n\t\t\"m8a.12xlarge\": 2.921280, \"m8a.16xlarge\": 3.895040, \"m8a.24xlarge\": 5.842560, \"m8a.2xlarge\": 0.486880,\n\t\t\"m8a.48xlarge\": 11.685120, \"m8a.4xlarge\": 0.973760, \"m8a.8xlarge\": 1.947520, \"m8a.large\": 0.121720,\n\t\t\"m8a.medium\": 0.060860, \"m8a.metal-24xl\": 6.426820, \"m8a.metal-48xl\": 11.685120, \"m8a.xlarge\": 0.243440,\n\t\t// m8g family\n\t\t\"m8g.12xlarge\": 2.154240, \"m8g.16xlarge\": 2.872320, \"m8g.24xlarge\": 4.308480, \"m8g.2xlarge\": 0.359040,\n\t\t\"m8g.48xlarge\": 8.616960, \"m8g.4xlarge\": 0.718080, \"m8g.8xlarge\": 1.436160, \"m8g.large\": 0.089760,\n\t\t\"m8g.medium\": 0.044880, \"m8g.metal-24xl\": 4.739330, \"m8g.metal-48xl\": 8.616960, \"m8g.xlarge\": 0.179520,\n\t\t// m8gb family\n\t\t\"m8gb.12xlarge\": 3.492000, \"m8gb.16xlarge\": 4.656000, \"m8gb.24xlarge\": 6.984000, \"m8gb.2xlarge\": 0.582000,\n\t\t\"m8gb.4xlarge\": 1.164000, \"m8gb.8xlarge\": 2.328000, \"m8gb.large\": 0.145500, \"m8gb.medium\": 0.072750,\n\t\t\"m8gb.xlarge\": 0.291000,\n\t\t// m8gd family\n\t\t\"m8gd.12xlarge\": 2.767680, \"m8gd.16xlarge\": 3.690240, \"m8gd.24xlarge\": 5.535360, \"m8gd.2xlarge\": 0.461280,\n\t\t\"m8gd.48xlarge\": 11.070720, \"m8gd.4xlarge\": 0.922560, \"m8gd.8xlarge\": 1.845120, \"m8gd.large\": 0.115320,\n\t\t\"m8gd.medium\": 0.057660, \"m8gd.metal-24xl\": 6.088900, \"m8gd.metal-48xl\": 11.070720,\n\t\t\"m8gd.xlarge\": 0.230640,\n\t\t// m8gn family\n\t\t\"m8gn.12xlarge\": 3.492000, \"m8gn.16xlarge\": 4.656000, \"m8gn.24xlarge\": 6.984000, \"m8gn.2xlarge\": 0.582000,\n\t\t\"m8gn.48xlarge\": 13.968000, \"m8gn.4xlarge\": 1.164000, \"m8gn.8xlarge\": 2.328000, \"m8gn.large\": 0.145500,\n\t\t\"m8gn.medium\": 0.072800, \"m8gn.xlarge\": 0.291000,\n\t\t// m8i-flex family\n\t\t\"m8i-flex.12xlarge\": 2.413200, \"m8i-flex.16xlarge\": 3.217600, \"m8i-flex.2xlarge\": 0.402200,\n\t\t\"m8i-flex.4xlarge\": 0.804400, \"m8i-flex.8xlarge\": 1.608800, \"m8i-flex.large\": 0.100550,\n\t\t\"m8i-flex.xlarge\": 0.201100,\n\t\t// m8i family\n\t\t\"m8i.12xlarge\": 2.540160, \"m8i.16xlarge\": 3.386880, \"m8i.24xlarge\": 5.080320, \"m8i.2xlarge\": 0.423360,\n\t\t\"m8i.32xlarge\": 6.773760, \"m8i.48xlarge\": 10.160640, \"m8i.4xlarge\": 0.846720, \"m8i.8xlarge\": 1.693440,\n\t\t\"m8i.96xlarge\": 20.321280, \"m8i.large\": 0.105840, \"m8i.metal-48xl\": 10.160640, \"m8i.metal-96xl\": 20.321280,\n\t\t\"m8i.xlarge\": 0.211680,\n\t\t// p2 family\n\t\t\"p2.16xlarge\": 14.400000, \"p2.8xlarge\": 7.200000, \"p2.xlarge\": 0.900000,\n\t\t// p3 family\n\t\t\"p3.16xlarge\": 24.480000, \"p3.2xlarge\": 3.060000, \"p3.8xlarge\": 12.240000,\n\t\t// p3dn family\n\t\t\"p3dn.24xlarge\": 31.212000,\n\t\t// p4d family\n\t\t\"p4d.24xlarge\": 21.957642,\n\t\t// p4de family\n\t\t\"p4de.24xlarge\": 27.447050,\n\t\t// p5 family\n\t\t\"p5.48xlarge\": 55.040000, \"p5.4xlarge\": 6.880000,\n\t\t// p5en family\n\t\t\"p5en.48xlarge\": 63.296000,\n\t\t// p6-b200 family\n\t\t\"p6-b200.48xlarge\": 113.932800,\n\t\t// r3 family\n\t\t\"r3.2xlarge\": 0.665000, \"r3.4xlarge\": 1.330000, \"r3.8xlarge\": 2.660000, \"r3.large\": 0.166000,\n\t\t\"r3.xlarge\": 0.333000,\n\t\t// r4 family\n\t\t\"r4.16xlarge\": 4.256000, \"r4.2xlarge\": 0.532000, \"r4.4xlarge\": 1.064000, \"r4.8xlarge\": 2.128000,\n\t\t\"r4.large\": 0.133000, \"r4.xlarge\": 0.266000,\n\t\t// r5 family\n\t\t\"r5.12xlarge\": 3.024000, \"r5.16xlarge\": 4.032000, \"r5.24xlarge\": 6.048000, \"r5.2xlarge\": 0.504000,\n\t\t\"r5.4xlarge\": 1.008000, \"r5.8xlarge\": 2.016000, \"r5.large\": 0.126000, \"r5.metal\": 6.048000,\n\t\t\"r5.xlarge\": 0.252000,\n\t\t// r5a family\n\t\t\"r5a.12xlarge\": 2.712000, \"r5a.16xlarge\": 3.616000, \"r5a.24xlarge\": 5.424000, \"r5a.2xlarge\": 0.452000,\n\t\t\"r5a.4xlarge\": 0.904000, \"r5a.8xlarge\": 1.808000, \"r5a.large\": 0.113000, \"r5a.xlarge\": 0.226000,\n\t\t// r5ad family\n\t\t\"r5ad.12xlarge\": 3.144000, \"r5ad.16xlarge\": 4.192000, \"r5ad.24xlarge\": 6.288000, \"r5ad.2xlarge\": 0.524000,\n\t\t\"r5ad.4xlarge\": 1.048000, \"r5ad.8xlarge\": 2.096000, \"r5ad.large\": 0.131000, \"r5ad.xlarge\": 0.262000,\n\t\t// r5b family\n\t\t\"r5b.12xlarge\": 3.576000, \"r5b.16xlarge\": 4.768000, \"r5b.24xlarge\": 7.152000, \"r5b.2xlarge\": 0.596000,\n\t\t\"r5b.4xlarge\": 1.192000, \"r5b.8xlarge\": 2.384000, \"r5b.large\": 0.149000, \"r5b.metal\": 7.867200,\n\t\t\"r5b.xlarge\": 0.298000,\n\t\t// r5d family\n\t\t\"r5d.12xlarge\": 3.456000, \"r5d.16xlarge\": 4.608000, \"r5d.24xlarge\": 6.912000, \"r5d.2xlarge\": 0.576000,\n\t\t\"r5d.4xlarge\": 1.152000, \"r5d.8xlarge\": 2.304000, \"r5d.large\": 0.144000, \"r5d.metal\": 6.912000,\n\t\t\"r5d.xlarge\": 0.288000,\n\t\t// r5dn family\n\t\t\"r5dn.12xlarge\": 4.008000, \"r5dn.16xlarge\": 5.344000, \"r5dn.24xlarge\": 8.016000, \"r5dn.2xlarge\": 0.668000,\n\t\t\"r5dn.4xlarge\": 1.336000, \"r5dn.8xlarge\": 2.672000, \"r5dn.large\": 0.167000, \"r5dn.metal\": 8.016000,\n\t\t\"r5dn.xlarge\": 0.334000,\n\t\t// r5n family\n\t\t\"r5n.12xlarge\": 3.576000, \"r5n.16xlarge\": 4.768000, \"r5n.24xlarge\": 7.152000, \"r5n.2xlarge\": 0.596000,\n\t\t\"r5n.4xlarge\": 1.192000, \"r5n.8xlarge\": 2.384000, \"r5n.large\": 0.149000, \"r5n.metal\": 7.152000,\n\t\t\"r5n.xlarge\": 0.298000,\n\t\t// r6a family\n\t\t\"r6a.12xlarge\": 2.721600, \"r6a.16xlarge\": 3.628800, \"r6a.24xlarge\": 5.443200, \"r6a.2xlarge\": 0.453600,\n\t\t\"r6a.32xlarge\": 7.257600, \"r6a.48xlarge\": 10.886400, \"r6a.4xlarge\": 0.907200, \"r6a.8xlarge\": 1.814400,\n\t\t\"r6a.large\": 0.113400, \"r6a.metal\": 10.886400, \"r6a.xlarge\": 0.226800,\n\t\t// r6g family\n\t\t\"r6g.12xlarge\": 2.419200, \"r6g.16xlarge\": 3.225600, \"r6g.2xlarge\": 0.403200, \"r6g.4xlarge\": 0.806400,\n\t\t\"r6g.8xlarge\": 1.612800, \"r6g.large\": 0.100800, \"r6g.medium\": 0.050400, \"r6g.metal\": 3.419100,\n\t\t\"r6g.xlarge\": 0.201600,\n\t\t// r6gd family\n\t\t\"r6gd.12xlarge\": 2.764800, \"r6gd.16xlarge\": 3.686400, \"r6gd.2xlarge\": 0.460800, \"r6gd.4xlarge\": 0.921600,\n\t\t\"r6gd.8xlarge\": 1.843200, \"r6gd.large\": 0.115200, \"r6gd.medium\": 0.057600, \"r6gd.metal\": 3.907600,\n\t\t\"r6gd.xlarge\": 0.230400,\n\t\t// r6i family\n\t\t\"r6i.12xlarge\": 3.024000, \"r6i.16xlarge\": 4.032000, \"r6i.24xlarge\": 6.048000, \"r6i.2xlarge\": 0.504000,\n\t\t\"r6i.32xlarge\": 8.064000, \"r6i.4xlarge\": 1.008000, \"r6i.8xlarge\": 2.016000, \"r6i.large\": 0.126000,\n\t\t\"r6i.metal\": 8.064000, \"r6i.xlarge\": 0.252000,\n\t\t// r6id family\n\t\t\"r6id.12xlarge\": 3.628800, \"r6id.16xlarge\": 4.838400, \"r6id.24xlarge\": 7.257600, \"r6id.2xlarge\": 0.604800,\n\t\t\"r6id.32xlarge\": 9.676800, \"r6id.4xlarge\": 1.209600, \"r6id.8xlarge\": 2.419200, \"r6id.large\": 0.151200,\n\t\t\"r6id.metal\": 9.676800, \"r6id.xlarge\": 0.302400,\n\t\t// r6idn family\n\t\t\"r6idn.12xlarge\": 4.689360, \"r6idn.16xlarge\": 6.252480, \"r6idn.24xlarge\": 9.378720,\n\t\t\"r6idn.2xlarge\": 0.781560, \"r6idn.32xlarge\": 12.504960, \"r6idn.4xlarge\": 1.563120, \"r6idn.8xlarge\": 3.126240,\n\t\t\"r6idn.large\": 0.195390, \"r6idn.metal\": 12.504960, \"r6idn.xlarge\": 0.390780,\n\t\t// r6in family\n\t\t\"r6in.12xlarge\": 4.183920, \"r6in.16xlarge\": 5.578560, \"r6in.24xlarge\": 8.367840, \"r6in.2xlarge\": 0.697320,\n\t\t\"r6in.32xlarge\": 11.157120, \"r6in.4xlarge\": 1.394640, \"r6in.8xlarge\": 2.789280, \"r6in.large\": 0.174330,\n\t\t\"r6in.metal\": 11.157120, \"r6in.xlarge\": 0.348660,\n\t\t// r7a family\n\t\t\"r7a.12xlarge\": 3.651600, \"r7a.16xlarge\": 4.868800, \"r7a.24xlarge\": 7.303200, \"r7a.2xlarge\": 0.608600,\n\t\t\"r7a.32xlarge\": 9.737600, \"r7a.48xlarge\": 14.606400, \"r7a.4xlarge\": 1.217200, \"r7a.8xlarge\": 2.434400,\n\t\t\"r7a.large\": 0.152150, \"r7a.medium\": 0.076080, \"r7a.metal-48xl\": 14.606400, \"r7a.xlarge\": 0.304300,\n\t\t// r7g family\n\t\t\"r7g.12xlarge\": 2.570400, \"r7g.16xlarge\": 3.427200, \"r7g.2xlarge\": 0.428400, \"r7g.4xlarge\": 0.856800,\n\t\t\"r7g.8xlarge\": 1.713600, \"r7g.large\": 0.107100, \"r7g.medium\": 0.053600, \"r7g.metal\": 3.427200,\n\t\t\"r7g.xlarge\": 0.214200,\n\t\t// r7gd family\n\t\t\"r7gd.12xlarge\": 3.265900, \"r7gd.16xlarge\": 4.354600, \"r7gd.2xlarge\": 0.544300, \"r7gd.4xlarge\": 1.088600,\n\t\t\"r7gd.8xlarge\": 2.177300, \"r7gd.large\": 0.136100, \"r7gd.medium\": 0.068000, \"r7gd.metal\": 4.354600,\n\t\t\"r7gd.xlarge\": 0.272200,\n\t\t// r7i family\n\t\t\"r7i.12xlarge\": 3.175200, \"r7i.16xlarge\": 4.233600, \"r7i.24xlarge\": 6.350400, \"r7i.2xlarge\": 0.529200,\n\t\t\"r7i.48xlarge\": 12.700800, \"r7i.4xlarge\": 1.058400, \"r7i.8xlarge\": 2.116800, \"r7i.large\": 0.132300,\n\t\t\"r7i.metal-24xl\": 6.985440, \"r7i.metal-48xl\": 12.700800, \"r7i.xlarge\": 0.264600,\n\t\t// r7iz family\n\t\t\"r7iz.12xlarge\": 4.464000, \"r7iz.16xlarge\": 5.952000, \"r7iz.2xlarge\": 0.744000, \"r7iz.32xlarge\": 11.904000,\n\t\t\"r7iz.4xlarge\": 1.488000, \"r7iz.8xlarge\": 2.976000, \"r7iz.large\": 0.186000, \"r7iz.metal-16xl\": 6.547200,\n\t\t\"r7iz.metal-32xl\": 13.094400, \"r7iz.xlarge\": 0.372000,\n\t\t// r8a family\n\t\t\"r8a.12xlarge\": 3.834240, \"r8a.16xlarge\": 5.112320, \"r8a.24xlarge\": 7.668480, \"r8a.2xlarge\": 0.639040,\n\t\t\"r8a.48xlarge\": 15.336960, \"r8a.4xlarge\": 1.278080, \"r8a.8xlarge\": 2.556160, \"r8a.large\": 0.159760,\n\t\t\"r8a.medium\": 0.079880, \"r8a.metal-24xl\": 8.435330, \"r8a.metal-48xl\": 15.336960, \"r8a.xlarge\": 0.319520,\n\t\t// r8g family\n\t\t\"r8g.12xlarge\": 2.827680, \"r8g.16xlarge\": 3.770240, \"r8g.24xlarge\": 5.655360, \"r8g.2xlarge\": 0.471280,\n\t\t\"r8g.48xlarge\": 11.310720, \"r8g.4xlarge\": 0.942560, \"r8g.8xlarge\": 1.885120, \"r8g.large\": 0.117820,\n\t\t\"r8g.medium\": 0.058910, \"r8g.metal-24xl\": 6.220900, \"r8g.metal-48xl\": 11.310720, \"r8g.xlarge\": 0.235640,\n\t\t// r8gb family\n\t\t\"r8gb.12xlarge\": 4.372320, \"r8gb.16xlarge\": 5.829760, \"r8gb.24xlarge\": 8.744640, \"r8gb.2xlarge\": 0.728720,\n\t\t\"r8gb.4xlarge\": 1.457440, \"r8gb.8xlarge\": 2.914880, \"r8gb.large\": 0.182180, \"r8gb.medium\": 0.091090,\n\t\t\"r8gb.metal-24xl\": 18.538640, \"r8gb.xlarge\": 0.364360,\n\t\t// r8gd family\n\t\t\"r8gd.12xlarge\": 3.527040, \"r8gd.16xlarge\": 4.702720, \"r8gd.24xlarge\": 7.054080, \"r8gd.2xlarge\": 0.587840,\n\t\t\"r8gd.48xlarge\": 14.108160, \"r8gd.4xlarge\": 1.175680, \"r8gd.8xlarge\": 2.351360, \"r8gd.large\": 0.146960,\n\t\t\"r8gd.medium\": 0.073480, \"r8gd.metal-24xl\": 7.759490, \"r8gd.metal-48xl\": 14.108160,\n\t\t\"r8gd.xlarge\": 0.293920,\n\t\t// r8gn family\n\t\t\"r8gn.12xlarge\": 4.372300, \"r8gn.16xlarge\": 5.829800, \"r8gn.24xlarge\": 8.744600, \"r8gn.2xlarge\": 0.728700,\n\t\t\"r8gn.48xlarge\": 17.489300, \"r8gn.4xlarge\": 1.457400, \"r8gn.8xlarge\": 2.914900, \"r8gn.large\": 0.182200,\n\t\t\"r8gn.medium\": 0.091100, \"r8gn.metal-24xl\": 9.269300, \"r8gn.metal-48xl\": 17.489300,\n\t\t\"r8gn.xlarge\": 0.364400,\n\t\t// r8i-flex family\n\t\t\"r8i-flex.12xlarge\": 3.167280, \"r8i-flex.16xlarge\": 4.223040, \"r8i-flex.2xlarge\": 0.527880,\n\t\t\"r8i-flex.4xlarge\": 1.055760, \"r8i-flex.8xlarge\": 2.111520, \"r8i-flex.large\": 0.131970,\n\t\t\"r8i-flex.xlarge\": 0.263940,\n\t\t// r8i family\n\t\t\"r8i.12xlarge\": 3.334080, \"r8i.16xlarge\": 4.445440, \"r8i.24xlarge\": 6.668160, \"r8i.2xlarge\": 0.555680,\n\t\t\"r8i.32xlarge\": 8.890880, \"r8i.48xlarge\": 13.336320, \"r8i.4xlarge\": 1.111360, \"r8i.8xlarge\": 2.222720,\n\t\t\"r8i.96xlarge\": 26.672640, \"r8i.large\": 0.138920, \"r8i.metal-48xl\": 14.669950, \"r8i.metal-96xl\": 26.672640,\n\t\t\"r8i.xlarge\": 0.277840,\n\t\t// t1 family\n\t\t\"t1.micro\": 0.020000,\n\t\t// t2 family\n\t\t\"t2.2xlarge\": 0.371200, \"t2.large\": 0.092800, \"t2.medium\": 0.046400, \"t2.micro\": 0.011600,\n\t\t\"t2.nano\": 0.005800, \"t2.small\": 0.023000, \"t2.xlarge\": 0.185600,\n\t\t// t3 family\n\t\t\"t3.2xlarge\": 0.332800, \"t3.large\": 0.083200, \"t3.medium\": 0.041600, \"t3.micro\": 0.010400,\n\t\t\"t3.nano\": 0.005200, \"t3.small\": 0.020800, \"t3.xlarge\": 0.166400,\n\t\t// t3a family\n\t\t\"t3a.2xlarge\": 0.300800, \"t3a.large\": 0.075200, \"t3a.medium\": 0.037600, \"t3a.micro\": 0.009400,\n\t\t\"t3a.nano\": 0.004700, \"t3a.small\": 0.018800, \"t3a.xlarge\": 0.150400,\n\t\t// t4g family\n\t\t\"t4g.2xlarge\": 0.268800, \"t4g.large\": 0.067200, \"t4g.medium\": 0.033600, \"t4g.micro\": 0.008400,\n\t\t\"t4g.nano\": 0.004200, \"t4g.small\": 0.016800, \"t4g.xlarge\": 0.134400,\n\t\t// trn1 family\n\t\t\"trn1.2xlarge\": 1.343750, \"trn1.32xlarge\": 21.500000,\n\t\t// trn1n family\n\t\t\"trn1n.32xlarge\": 24.780000,\n\t\t// u-12tb1 family\n\t\t\"u-12tb1.112xlarge\": 109.200000,\n\t\t// u-18tb1 family\n\t\t\"u-18tb1.112xlarge\": 163.800000,\n\t\t// u-24tb1 family\n\t\t\"u-24tb1.112xlarge\": 218.400000,\n\t\t// u-3tb1 family\n\t\t\"u-3tb1.56xlarge\": 27.300000,\n\t\t// u-6tb1 family\n\t\t\"u-6tb1.112xlarge\": 54.600000, \"u-6tb1.56xlarge\": 46.403910,\n\t\t// u-9tb1 family\n\t\t\"u-9tb1.112xlarge\": 81.900000,\n\t\t// u7i-12tb family\n\t\t\"u7i-12tb.224xlarge\": 125.581820,\n\t\t// u7i-6tb family\n\t\t\"u7i-6tb.112xlarge\": 62.790000,\n\t\t// u7i-8tb family\n\t\t\"u7i-8tb.112xlarge\": 83.720000,\n\t\t// u7in-16tb family\n\t\t\"u7in-16tb.224xlarge\": 180.475580,\n\t\t// u7in-24tb family\n\t\t\"u7in-24tb.224xlarge\": 270.731280,\n\t\t// u7in-32tb family\n\t\t\"u7in-32tb.224xlarge\": 360.986950,\n\t\t// vt1 family\n\t\t\"vt1.24xlarge\": 5.200000, \"vt1.3xlarge\": 0.650000, \"vt1.6xlarge\": 1.300000,\n\t\t// x1 family\n\t\t\"x1.16xlarge\": 6.669000, \"x1.32xlarge\": 13.338000,\n\t\t// x1e family\n\t\t\"x1e.16xlarge\": 13.344000, \"x1e.2xlarge\": 1.668000, \"x1e.32xlarge\": 26.688000, \"x1e.4xlarge\": 3.336000,\n\t\t\"x1e.8xlarge\": 6.672000, \"x1e.xlarge\": 0.834000,\n\t\t// x2gd family\n\t\t\"x2gd.12xlarge\": 4.008000, \"x2gd.16xlarge\": 5.344000, \"x2gd.2xlarge\": 0.668000, \"x2gd.4xlarge\": 1.336000,\n\t\t\"x2gd.8xlarge\": 2.672000, \"x2gd.large\": 0.167000, \"x2gd.medium\": 0.083500, \"x2gd.metal\": 5.878400,\n\t\t\"x2gd.xlarge\": 0.334000,\n\t\t// x2idn family\n\t\t\"x2idn.16xlarge\": 6.669000, \"x2idn.24xlarge\": 10.003500, \"x2idn.32xlarge\": 13.338000,\n\t\t\"x2idn.metal\": 13.338000,\n\t\t// x2iedn family\n\t\t\"x2iedn.16xlarge\": 13.338000, \"x2iedn.24xlarge\": 20.007000, \"x2iedn.2xlarge\": 1.667250,\n\t\t\"x2iedn.32xlarge\": 26.676000, \"x2iedn.4xlarge\": 3.334500, \"x2iedn.8xlarge\": 6.669000,\n\t\t\"x2iedn.metal\": 26.676000, \"x2iedn.xlarge\": 0.833630,\n\t\t// x2iezn family\n\t\t\"x2iezn.12xlarge\": 10.008000, \"x2iezn.2xlarge\": 1.668000, \"x2iezn.4xlarge\": 3.336000,\n\t\t\"x2iezn.6xlarge\": 5.004000, \"x2iezn.8xlarge\": 6.672000, \"x2iezn.metal\": 10.008000,\n\t\t// x8g family\n\t\t\"x8g.12xlarge\": 4.689600, \"x8g.16xlarge\": 6.252800, \"x8g.24xlarge\": 9.379200, \"x8g.2xlarge\": 0.781600,\n\t\t\"x8g.48xlarge\": 18.758400, \"x8g.4xlarge\": 1.563200, \"x8g.8xlarge\": 3.126400, \"x8g.large\": 0.195400,\n\t\t\"x8g.medium\": 0.097700, \"x8g.metal-24xl\": 10.317120, \"x8g.metal-48xl\": 18.758400, \"x8g.xlarge\": 0.390800,\n\t\t// x8i family\n\t\t\"x8i.12xlarge\": 5.251920, \"x8i.16xlarge\": 7.002560, \"x8i.24xlarge\": 10.503840, \"x8i.2xlarge\": 0.875320,\n\t\t\"x8i.32xlarge\": 14.005120, \"x8i.48xlarge\": 21.007680, \"x8i.4xlarge\": 1.750640, \"x8i.64xlarge\": 28.010240,\n\t\t\"x8i.8xlarge\": 3.501280, \"x8i.96xlarge\": 48.744380, \"x8i.large\": 0.218830, \"x8i.metal-48xl\": 23.108450,\n\t\t\"x8i.metal-96xl\": 48.744380, \"x8i.xlarge\": 0.437660,\n\t\t// z1d family\n\t\t\"z1d.12xlarge\": 4.464000, \"z1d.2xlarge\": 0.744000, \"z1d.3xlarge\": 1.116000, \"z1d.6xlarge\": 2.232000,\n\t\t\"z1d.large\": 0.186000, \"z1d.metal\": 4.464000, \"z1d.xlarge\": 0.372000,\n\t},\n}\n"
  },
  {
    "path": "pkg/providers/pricing/zz_generated.pricing_aws_cn.go",
    "content": "//go:build !ignore_autogenerated\n\n/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage pricing\n\n// generated at 2024-11-06T01:00:11Z for cn-north-1\n\nimport ec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\nvar InitialOnDemandPricesCN = map[string]map[ec2types.InstanceType]float64{\n\t\"cn-north-1\": {\n\t\t// c3 family\n\t\t\"c3.2xlarge\": 4.217000, \"c3.4xlarge\": 8.434000, \"c3.8xlarge\": 16.869000, \"c3.large\": 1.054000,\n\t\t\"c3.xlarge\": 2.109000,\n\t\t// c4 family\n\t\t\"c4.2xlarge\": 4.535000, \"c4.4xlarge\": 9.071000, \"c4.8xlarge\": 18.141000, \"c4.large\": 1.134000,\n\t\t\"c4.xlarge\": 2.268000,\n\t\t// c5 family\n\t\t\"c5.12xlarge\": 17.745000, \"c5.18xlarge\": 26.617000, \"c5.24xlarge\": 35.490000, \"c5.2xlarge\": 2.957000,\n\t\t\"c5.4xlarge\": 5.915000, \"c5.9xlarge\": 13.309000, \"c5.large\": 0.739000, \"c5.metal\": 35.490000,\n\t\t\"c5.xlarge\": 1.479000,\n\t\t// c5a family\n\t\t\"c5a.12xlarge\": 15.937000, \"c5a.16xlarge\": 21.250000, \"c5a.24xlarge\": 31.875000, \"c5a.2xlarge\": 2.656000,\n\t\t\"c5a.4xlarge\": 5.312000, \"c5a.8xlarge\": 10.625000, \"c5a.large\": 0.664000, \"c5a.xlarge\": 1.328000,\n\t\t// c5d family\n\t\t\"c5d.12xlarge\": 21.852000, \"c5d.18xlarge\": 32.779000, \"c5d.24xlarge\": 43.705000, \"c5d.2xlarge\": 3.642000,\n\t\t\"c5d.4xlarge\": 7.284000, \"c5d.9xlarge\": 16.389000, \"c5d.large\": 0.911000, \"c5d.metal\": 43.705000,\n\t\t\"c5d.xlarge\": 1.821000,\n\t\t// c6g family\n\t\t\"c6g.12xlarge\": 14.064400, \"c6g.16xlarge\": 18.752600, \"c6g.2xlarge\": 2.344100, \"c6g.4xlarge\": 4.688100,\n\t\t\"c6g.8xlarge\": 9.376300, \"c6g.large\": 0.586000, \"c6g.medium\": 0.293000, \"c6g.metal\": 19.390900,\n\t\t\"c6g.xlarge\": 1.172000,\n\t\t// c6gn family\n\t\t\"c6gn.12xlarge\": 17.869700, \"c6gn.16xlarge\": 23.826270, \"c6gn.2xlarge\": 2.978280, \"c6gn.4xlarge\": 5.956570,\n\t\t\"c6gn.8xlarge\": 11.913140, \"c6gn.large\": 0.744570, \"c6gn.medium\": 0.372290, \"c6gn.xlarge\": 1.489140,\n\t\t// c6i family\n\t\t\"c6i.12xlarge\": 17.744830, \"c6i.16xlarge\": 23.659780, \"c6i.24xlarge\": 35.489660, \"c6i.2xlarge\": 2.957470,\n\t\t\"c6i.32xlarge\": 47.319550, \"c6i.4xlarge\": 5.914940, \"c6i.8xlarge\": 11.829890, \"c6i.large\": 0.739370,\n\t\t\"c6i.metal\": 47.319550, \"c6i.xlarge\": 1.478740,\n\t\t// c7g family\n\t\t\"c7g.12xlarge\": 15.083100, \"c7g.16xlarge\": 20.110800, \"c7g.2xlarge\": 2.513900, \"c7g.4xlarge\": 5.027700,\n\t\t\"c7g.8xlarge\": 10.055400, \"c7g.large\": 0.628500, \"c7g.medium\": 0.314200, \"c7g.metal\": 20.110800,\n\t\t\"c7g.xlarge\": 1.256900,\n\t\t// d2 family\n\t\t\"d2.2xlarge\": 13.345000, \"d2.4xlarge\": 26.690000, \"d2.8xlarge\": 53.380000, \"d2.xlarge\": 6.673000,\n\t\t// g3 family\n\t\t\"g3.16xlarge\": 64.817900, \"g3.4xlarge\": 16.204500, \"g3.8xlarge\": 32.409000,\n\t\t// g3s family\n\t\t\"g3s.xlarge\": 11.282000,\n\t\t// g4dn family\n\t\t\"g4dn.12xlarge\": 38.849000, \"g4dn.16xlarge\": 43.218000, \"g4dn.2xlarge\": 7.468000, \"g4dn.4xlarge\": 11.956000,\n\t\t\"g4dn.8xlarge\": 21.609000, \"g4dn.xlarge\": 5.223000,\n\t\t// g5 family\n\t\t\"g5.12xlarge\": 53.640920, \"g5.16xlarge\": 38.736460, \"g5.24xlarge\": 77.018980, \"g5.2xlarge\": 11.462060,\n\t\t\"g5.48xlarge\": 154.037950, \"g5.4xlarge\": 15.358400, \"g5.8xlarge\": 23.151090, \"g5.xlarge\": 9.513890,\n\t\t// i2 family\n\t\t\"i2.2xlarge\": 20.407000, \"i2.4xlarge\": 40.815000, \"i2.8xlarge\": 81.630000, \"i2.xlarge\": 10.204000,\n\t\t// i3 family\n\t\t\"i3.16xlarge\": 49.948000, \"i3.2xlarge\": 6.244000, \"i3.4xlarge\": 12.487000, \"i3.8xlarge\": 24.974000,\n\t\t\"i3.large\": 1.561000, \"i3.xlarge\": 3.122000,\n\t\t// i3en family\n\t\t\"i3en.12xlarge\": 54.302000, \"i3en.24xlarge\": 108.605000, \"i3en.2xlarge\": 9.050000, \"i3en.3xlarge\": 13.576000,\n\t\t\"i3en.6xlarge\": 27.151000, \"i3en.large\": 2.263000, \"i3en.xlarge\": 4.525000,\n\t\t// i4i family\n\t\t\"i4i.12xlarge\": 43.665000, \"i4i.16xlarge\": 58.221000, \"i4i.24xlarge\": 87.330860, \"i4i.2xlarge\": 7.278000,\n\t\t\"i4i.32xlarge\": 116.441150, \"i4i.4xlarge\": 14.555000, \"i4i.8xlarge\": 29.110000, \"i4i.large\": 1.819000,\n\t\t\"i4i.xlarge\": 3.639000,\n\t\t// inf1 family\n\t\t\"inf1.24xlarge\": 47.342000, \"inf1.2xlarge\": 3.630000, \"inf1.6xlarge\": 11.835000, \"inf1.xlarge\": 2.288000,\n\t\t// m1 family\n\t\t\"m1.small\": 0.442000,\n\t\t// m3 family\n\t\t\"m3.2xlarge\": 6.942000, \"m3.large\": 1.735000, \"m3.medium\": 0.868000, \"m3.xlarge\": 3.471000,\n\t\t// m4 family\n\t\t\"m4.10xlarge\": 28.121000, \"m4.16xlarge\": 44.995000, \"m4.2xlarge\": 5.624000, \"m4.4xlarge\": 11.248000,\n\t\t\"m4.large\": 1.405000, \"m4.xlarge\": 2.815000,\n\t\t// m5 family\n\t\t\"m5.12xlarge\": 24.317000, \"m5.16xlarge\": 32.423000, \"m5.24xlarge\": 48.634000, \"m5.2xlarge\": 4.053000,\n\t\t\"m5.4xlarge\": 8.106000, \"m5.8xlarge\": 16.211000, \"m5.large\": 1.013000, \"m5.metal\": 48.634000,\n\t\t\"m5.xlarge\": 2.026000,\n\t\t// m5a family\n\t\t\"m5a.12xlarge\": 21.852000, \"m5a.16xlarge\": 29.137000, \"m5a.24xlarge\": 43.705000, \"m5a.2xlarge\": 3.642000,\n\t\t\"m5a.4xlarge\": 7.284000, \"m5a.8xlarge\": 14.568000, \"m5a.large\": 0.911000, \"m5a.xlarge\": 1.821000,\n\t\t// m5d family\n\t\t\"m5d.12xlarge\": 30.561000, \"m5d.16xlarge\": 40.747000, \"m5d.24xlarge\": 61.121000, \"m5d.2xlarge\": 5.093000,\n\t\t\"m5d.4xlarge\": 10.187000, \"m5d.8xlarge\": 20.374000, \"m5d.large\": 1.273000, \"m5d.metal\": 61.121000,\n\t\t\"m5d.xlarge\": 2.547000,\n\t\t// m6g family\n\t\t\"m6g.12xlarge\": 19.289300, \"m6g.16xlarge\": 25.719100, \"m6g.2xlarge\": 3.214900, \"m6g.4xlarge\": 6.429800,\n\t\t\"m6g.8xlarge\": 12.859500, \"m6g.large\": 0.803700, \"m6g.medium\": 0.401900, \"m6g.metal\": 26.486300,\n\t\t\"m6g.xlarge\": 1.607400,\n\t\t// m6i family\n\t\t\"m6i.12xlarge\": 24.316990, \"m6i.16xlarge\": 32.422660, \"m6i.24xlarge\": 48.633980, \"m6i.2xlarge\": 4.052830,\n\t\t\"m6i.32xlarge\": 64.845310, \"m6i.4xlarge\": 8.105660, \"m6i.8xlarge\": 16.211330, \"m6i.large\": 1.013210,\n\t\t\"m6i.metal\": 64.845310, \"m6i.xlarge\": 2.026420,\n\t\t// m7g family\n\t\t\"m7g.12xlarge\": 20.669400, \"m7g.16xlarge\": 27.559300, \"m7g.2xlarge\": 3.444900, \"m7g.4xlarge\": 6.889800,\n\t\t\"m7g.8xlarge\": 13.779600, \"m7g.large\": 0.861200, \"m7g.medium\": 0.430600, \"m7g.metal\": 27.559300,\n\t\t\"m7g.xlarge\": 1.722500,\n\t\t// p2 family\n\t\t\"p2.16xlarge\": 169.792000, \"p2.8xlarge\": 84.896000, \"p2.xlarge\": 10.612000,\n\t\t// p3 family\n\t\t\"p3.16xlarge\": 288.627000, \"p3.2xlarge\": 36.078000, \"p3.8xlarge\": 144.314000,\n\t\t// r3 family\n\t\t\"r3.2xlarge\": 9.803600, \"r3.4xlarge\": 19.607300, \"r3.8xlarge\": 39.214700, \"r3.large\": 2.450900,\n\t\t\"r3.xlarge\": 4.901800,\n\t\t// r4 family\n\t\t\"r4.16xlarge\": 62.746000, \"r4.2xlarge\": 7.842000, \"r4.4xlarge\": 15.683000, \"r4.8xlarge\": 31.373000,\n\t\t\"r4.large\": 1.959000, \"r4.xlarge\": 3.924000,\n\t\t// r5 family\n\t\t\"r5.12xlarge\": 29.246000, \"r5.16xlarge\": 38.995000, \"r5.24xlarge\": 58.492000, \"r5.2xlarge\": 4.874000,\n\t\t\"r5.4xlarge\": 9.749000, \"r5.8xlarge\": 19.497000, \"r5.large\": 1.219000, \"r5.metal\": 58.492000,\n\t\t\"r5.xlarge\": 2.437000,\n\t\t// r5a family\n\t\t\"r5a.12xlarge\": 26.322000, \"r5a.16xlarge\": 35.095000, \"r5a.24xlarge\": 52.643000, \"r5a.2xlarge\": 4.387000,\n\t\t\"r5a.4xlarge\": 8.774000, \"r5a.8xlarge\": 17.548000, \"r5a.large\": 1.097000, \"r5a.xlarge\": 2.193000,\n\t\t// r5d family\n\t\t\"r5d.12xlarge\": 35.490000, \"r5d.16xlarge\": 47.320000, \"r5d.24xlarge\": 70.979000, \"r5d.2xlarge\": 5.915000,\n\t\t\"r5d.4xlarge\": 11.830000, \"r5d.8xlarge\": 23.660000, \"r5d.large\": 1.479000, \"r5d.metal\": 70.979000,\n\t\t\"r5d.xlarge\": 2.957000,\n\t\t// r6g family\n\t\t\"r6g.12xlarge\": 23.199700, \"r6g.16xlarge\": 30.933000, \"r6g.2xlarge\": 3.866600, \"r6g.4xlarge\": 7.733200,\n\t\t\"r6g.8xlarge\": 15.466500, \"r6g.large\": 0.966700, \"r6g.medium\": 0.483300, \"r6g.metal\": 31.847000,\n\t\t\"r6g.xlarge\": 1.933300,\n\t\t// r6gd family\n\t\t\"r6gd.12xlarge\": 28.096000, \"r6gd.16xlarge\": 37.461300, \"r6gd.2xlarge\": 4.682700, \"r6gd.4xlarge\": 9.365300,\n\t\t\"r6gd.8xlarge\": 18.730700, \"r6gd.large\": 1.170700, \"r6gd.medium\": 0.585300, \"r6gd.metal\": 37.461300,\n\t\t\"r6gd.xlarge\": 2.341300,\n\t\t// r6i family\n\t\t\"r6i.12xlarge\": 29.246110, \"r6i.16xlarge\": 38.994820, \"r6i.24xlarge\": 58.492220, \"r6i.2xlarge\": 4.874350,\n\t\t\"r6i.32xlarge\": 77.989630, \"r6i.4xlarge\": 9.748700, \"r6i.8xlarge\": 19.497410, \"r6i.large\": 1.218590,\n\t\t\"r6i.metal\": 77.989630, \"r6i.xlarge\": 2.437180,\n\t\t// r7g family\n\t\t\"r7g.12xlarge\": 24.875600, \"r7g.16xlarge\": 33.167500, \"r7g.2xlarge\": 4.145900, \"r7g.4xlarge\": 8.291900,\n\t\t\"r7g.8xlarge\": 16.583800, \"r7g.large\": 1.036500, \"r7g.medium\": 0.518200, \"r7g.metal\": 33.167500,\n\t\t\"r7g.xlarge\": 2.073000,\n\t\t// t1 family\n\t\t\"t1.micro\": 0.221000,\n\t\t// t2 family\n\t\t\"t2.2xlarge\": 3.392000, \"t2.large\": 0.851000, \"t2.medium\": 0.426000, \"t2.micro\": 0.106000,\n\t\t\"t2.nano\": 0.060600, \"t2.small\": 0.212000, \"t2.xlarge\": 1.696000,\n\t\t// t3 family\n\t\t\"t3.2xlarge\": 2.103100, \"t3.large\": 0.525800, \"t3.medium\": 0.262900, \"t3.micro\": 0.065700,\n\t\t\"t3.nano\": 0.032900, \"t3.small\": 0.131400, \"t3.xlarge\": 1.051500,\n\t\t// t3a family\n\t\t\"t3a.2xlarge\": 1.892800, \"t3a.large\": 0.473200, \"t3a.medium\": 0.236600, \"t3a.micro\": 0.059100,\n\t\t\"t3a.nano\": 0.029600, \"t3a.small\": 0.118300, \"t3a.xlarge\": 0.946400,\n\t\t// t4g family\n\t\t\"t4g.2xlarge\": 1.621100, \"t4g.large\": 0.405300, \"t4g.medium\": 0.202600, \"t4g.micro\": 0.050700,\n\t\t\"t4g.nano\": 0.025300, \"t4g.small\": 0.101300, \"t4g.xlarge\": 0.810600,\n\t\t// u-12tb1 family\n\t\t\"u-12tb1.112xlarge\": 1074.685080,\n\t\t// u-6tb1 family\n\t\t\"u-6tb1.112xlarge\": 537.342540, \"u-6tb1.56xlarge\": 456.681190,\n\t\t// u-9tb1 family\n\t\t\"u-9tb1.112xlarge\": 805.979580,\n\t\t// x1 family\n\t\t\"x1.16xlarge\": 68.876000, \"x1.32xlarge\": 137.752000,\n\t\t// x2idn family\n\t\t\"x2idn.16xlarge\": 68.870760, \"x2idn.24xlarge\": 103.306140, \"x2idn.32xlarge\": 137.741520,\n\t\t\"x2idn.metal\": 137.741520,\n\t\t// x2iedn family\n\t\t\"x2iedn.16xlarge\": 137.741520, \"x2iedn.24xlarge\": 206.612280, \"x2iedn.2xlarge\": 17.217690,\n\t\t\"x2iedn.32xlarge\": 275.483040, \"x2iedn.4xlarge\": 34.435380, \"x2iedn.8xlarge\": 68.870760,\n\t\t\"x2iedn.metal\": 275.483040, \"x2iedn.xlarge\": 8.608850,\n\t},\n}\n"
  },
  {
    "path": "pkg/providers/pricing/zz_generated.pricing_aws_us_gov.go",
    "content": "//go:build !ignore_autogenerated\n\n/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage pricing\n\n// generated at 2025-06-30T13:16:30Z for us-east-1\n\nimport ec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\nvar InitialOnDemandPricesUSGov = map[string]map[ec2types.InstanceType]float64{\n\t// us-gov-east-1\n\t\"us-gov-east-1\": {\n\t\t// c5 family\n\t\t\"c5.12xlarge\": 2.448000, \"c5.18xlarge\": 3.672000, \"c5.24xlarge\": 4.896000, \"c5.2xlarge\": 0.408000,\n\t\t\"c5.4xlarge\": 0.816000, \"c5.9xlarge\": 1.836000, \"c5.large\": 0.102000, \"c5.metal\": 4.896000,\n\t\t\"c5.xlarge\": 0.204000,\n\t\t// c5a family\n\t\t\"c5a.12xlarge\": 2.208000, \"c5a.16xlarge\": 2.944000, \"c5a.24xlarge\": 4.416000, \"c5a.2xlarge\": 0.368000,\n\t\t\"c5a.4xlarge\": 0.736000, \"c5a.8xlarge\": 1.472000, \"c5a.large\": 0.092000, \"c5a.xlarge\": 0.184000,\n\t\t// c5d family\n\t\t\"c5d.18xlarge\": 4.176000, \"c5d.2xlarge\": 0.464000, \"c5d.4xlarge\": 0.928000, \"c5d.9xlarge\": 2.088000,\n\t\t\"c5d.large\": 0.116000, \"c5d.xlarge\": 0.232000,\n\t\t// c5n family\n\t\t\"c5n.18xlarge\": 4.680000, \"c5n.2xlarge\": 0.520000, \"c5n.4xlarge\": 1.040000, \"c5n.9xlarge\": 2.340000,\n\t\t\"c5n.large\": 0.130000, \"c5n.metal\": 4.680000, \"c5n.xlarge\": 0.260000,\n\t\t// c6g family\n\t\t\"c6g.12xlarge\": 1.958400, \"c6g.16xlarge\": 2.611200, \"c6g.2xlarge\": 0.326400, \"c6g.4xlarge\": 0.652800,\n\t\t\"c6g.8xlarge\": 1.305600, \"c6g.large\": 0.081600, \"c6g.medium\": 0.040800, \"c6g.metal\": 2.767900,\n\t\t\"c6g.xlarge\": 0.163200,\n\t\t// c6gd family\n\t\t\"c6gd.12xlarge\": 2.227200, \"c6gd.16xlarge\": 2.969600, \"c6gd.2xlarge\": 0.371200, \"c6gd.4xlarge\": 0.742400,\n\t\t\"c6gd.8xlarge\": 1.484800, \"c6gd.large\": 0.092800, \"c6gd.medium\": 0.046400, \"c6gd.metal\": 2.969600,\n\t\t\"c6gd.xlarge\": 0.185600,\n\t\t// c6gn family\n\t\t\"c6gn.12xlarge\": 2.496000, \"c6gn.16xlarge\": 3.328000, \"c6gn.2xlarge\": 0.416000, \"c6gn.4xlarge\": 0.832000,\n\t\t\"c6gn.8xlarge\": 1.664000, \"c6gn.large\": 0.104000, \"c6gn.medium\": 0.052000, \"c6gn.xlarge\": 0.208000,\n\t\t// c6i family\n\t\t\"c6i.12xlarge\": 2.448000, \"c6i.16xlarge\": 3.264000, \"c6i.24xlarge\": 4.896000, \"c6i.2xlarge\": 0.408000,\n\t\t\"c6i.32xlarge\": 6.528000, \"c6i.4xlarge\": 0.816000, \"c6i.8xlarge\": 1.632000, \"c6i.large\": 0.102000,\n\t\t\"c6i.metal\": 6.528000, \"c6i.xlarge\": 0.204000,\n\t\t// c6in family\n\t\t\"c6in.12xlarge\": 3.276000, \"c6in.16xlarge\": 4.368000, \"c6in.24xlarge\": 6.552000, \"c6in.2xlarge\": 0.546000,\n\t\t\"c6in.32xlarge\": 8.736000, \"c6in.4xlarge\": 1.092000, \"c6in.8xlarge\": 2.184000, \"c6in.large\": 0.136500,\n\t\t\"c6in.metal\": 8.736000, \"c6in.xlarge\": 0.273000,\n\t\t// c7g family\n\t\t\"c7g.12xlarge\": 2.080800, \"c7g.16xlarge\": 2.774400, \"c7g.2xlarge\": 0.346800, \"c7g.4xlarge\": 0.693600,\n\t\t\"c7g.8xlarge\": 1.387200, \"c7g.large\": 0.086700, \"c7g.medium\": 0.043400, \"c7g.metal\": 2.774400,\n\t\t\"c7g.xlarge\": 0.173400,\n\t\t// c7gd family\n\t\t\"c7gd.12xlarge\": 2.630900, \"c7gd.16xlarge\": 3.507800, \"c7gd.2xlarge\": 0.438500, \"c7gd.4xlarge\": 0.877000,\n\t\t\"c7gd.8xlarge\": 1.753900, \"c7gd.large\": 0.109600, \"c7gd.medium\": 0.054800, \"c7gd.metal\": 3.507800,\n\t\t\"c7gd.xlarge\": 0.219200,\n\t\t// c7i family\n\t\t\"c7i.12xlarge\": 2.570400, \"c7i.16xlarge\": 3.427200, \"c7i.24xlarge\": 5.140800, \"c7i.2xlarge\": 0.428400,\n\t\t\"c7i.48xlarge\": 10.281600, \"c7i.4xlarge\": 0.856800, \"c7i.8xlarge\": 1.713600, \"c7i.large\": 0.107100,\n\t\t\"c7i.metal-24xl\": 5.654880, \"c7i.metal-48xl\": 10.281600, \"c7i.xlarge\": 0.214200,\n\t\t// d2 family\n\t\t\"d2.2xlarge\": 1.656000, \"d2.4xlarge\": 3.312000, \"d2.8xlarge\": 6.624000, \"d2.xlarge\": 0.828000,\n\t\t// g4dn family\n\t\t\"g4dn.12xlarge\": 4.931000, \"g4dn.16xlarge\": 5.486000, \"g4dn.2xlarge\": 0.948000, \"g4dn.4xlarge\": 1.518000,\n\t\t\"g4dn.8xlarge\": 2.743000, \"g4dn.xlarge\": 0.663000,\n\t\t// hpc6a family\n\t\t\"hpc6a.48xlarge\": 3.467000,\n\t\t// i3 family\n\t\t\"i3.16xlarge\": 6.016000, \"i3.2xlarge\": 0.752000, \"i3.4xlarge\": 1.504000, \"i3.8xlarge\": 3.008000,\n\t\t\"i3.large\": 0.188000, \"i3.metal\": 6.016000, \"i3.xlarge\": 0.376000,\n\t\t// i3en family\n\t\t\"i3en.12xlarge\": 6.552000, \"i3en.24xlarge\": 13.104000, \"i3en.2xlarge\": 1.092000, \"i3en.3xlarge\": 1.638000,\n\t\t\"i3en.6xlarge\": 3.276000, \"i3en.large\": 0.273000, \"i3en.metal\": 13.104000, \"i3en.xlarge\": 0.546000,\n\t\t// i4i family\n\t\t\"i4i.12xlarge\": 4.963000, \"i4i.16xlarge\": 6.618000, \"i4i.24xlarge\": 9.926400, \"i4i.2xlarge\": 0.827000,\n\t\t\"i4i.32xlarge\": 13.235200, \"i4i.4xlarge\": 1.654000, \"i4i.8xlarge\": 3.309000, \"i4i.large\": 0.207000,\n\t\t\"i4i.metal\": 13.235000, \"i4i.xlarge\": 0.414000,\n\t\t// i7ie family\n\t\t\"i7ie.12xlarge\": 7.534800, \"i7ie.18xlarge\": 11.302200, \"i7ie.24xlarge\": 15.069600, \"i7ie.2xlarge\": 1.255800,\n\t\t\"i7ie.3xlarge\": 1.883700, \"i7ie.48xlarge\": 30.139200, \"i7ie.6xlarge\": 3.767400, \"i7ie.large\": 0.314000,\n\t\t\"i7ie.metal-24xl\": 16.047600, \"i7ie.metal-48xl\": 32.095300, \"i7ie.xlarge\": 0.627900,\n\t\t// inf1 family\n\t\t\"inf1.24xlarge\": 5.953000, \"inf1.2xlarge\": 0.456000, \"inf1.6xlarge\": 1.488000, \"inf1.xlarge\": 0.288000,\n\t\t// m5 family\n\t\t\"m5.12xlarge\": 2.904000, \"m5.16xlarge\": 3.872000, \"m5.24xlarge\": 5.808000, \"m5.2xlarge\": 0.484000,\n\t\t\"m5.4xlarge\": 0.968000, \"m5.8xlarge\": 1.936000, \"m5.large\": 0.121000, \"m5.metal\": 5.808000,\n\t\t\"m5.xlarge\": 0.242000,\n\t\t// m5a family\n\t\t\"m5a.12xlarge\": 2.616000, \"m5a.16xlarge\": 3.488000, \"m5a.24xlarge\": 5.232000, \"m5a.2xlarge\": 0.436000,\n\t\t\"m5a.4xlarge\": 0.872000, \"m5a.8xlarge\": 1.744000, \"m5a.large\": 0.109000, \"m5a.xlarge\": 0.218000,\n\t\t// m5d family\n\t\t\"m5d.12xlarge\": 3.432000, \"m5d.16xlarge\": 4.576000, \"m5d.24xlarge\": 6.864000, \"m5d.2xlarge\": 0.572000,\n\t\t\"m5d.4xlarge\": 1.144000, \"m5d.8xlarge\": 2.288000, \"m5d.large\": 0.143000, \"m5d.metal\": 6.864000,\n\t\t\"m5d.xlarge\": 0.286000,\n\t\t// m5dn family\n\t\t\"m5dn.12xlarge\": 4.104000, \"m5dn.16xlarge\": 5.472000, \"m5dn.24xlarge\": 8.208000, \"m5dn.2xlarge\": 0.684000,\n\t\t\"m5dn.4xlarge\": 1.368000, \"m5dn.8xlarge\": 2.736000, \"m5dn.large\": 0.171000, \"m5dn.metal\": 8.208000,\n\t\t\"m5dn.xlarge\": 0.342000,\n\t\t// m5n family\n\t\t\"m5n.12xlarge\": 3.576000, \"m5n.16xlarge\": 4.768000, \"m5n.24xlarge\": 7.152000, \"m5n.2xlarge\": 0.596000,\n\t\t\"m5n.4xlarge\": 1.192000, \"m5n.8xlarge\": 2.384000, \"m5n.large\": 0.149000, \"m5n.metal\": 7.152000,\n\t\t\"m5n.xlarge\": 0.298000,\n\t\t// m6g family\n\t\t\"m6g.12xlarge\": 2.323200, \"m6g.16xlarge\": 3.097600, \"m6g.2xlarge\": 0.387200, \"m6g.4xlarge\": 0.774400,\n\t\t\"m6g.8xlarge\": 1.548800, \"m6g.large\": 0.096800, \"m6g.medium\": 0.048400, \"m6g.metal\": 3.283500,\n\t\t\"m6g.xlarge\": 0.193600,\n\t\t// m6gd family\n\t\t\"m6gd.12xlarge\": 2.745600, \"m6gd.16xlarge\": 3.660800, \"m6gd.2xlarge\": 0.457600, \"m6gd.4xlarge\": 0.915200,\n\t\t\"m6gd.8xlarge\": 1.830400, \"m6gd.large\": 0.114400, \"m6gd.medium\": 0.057200, \"m6gd.metal\": 3.880400,\n\t\t\"m6gd.xlarge\": 0.228800,\n\t\t// m6i family\n\t\t\"m6i.12xlarge\": 2.904000, \"m6i.16xlarge\": 3.872000, \"m6i.24xlarge\": 5.808000, \"m6i.2xlarge\": 0.484000,\n\t\t\"m6i.32xlarge\": 7.744000, \"m6i.4xlarge\": 0.968000, \"m6i.8xlarge\": 1.936000, \"m6i.large\": 0.121000,\n\t\t\"m6i.metal\": 7.744000, \"m6i.xlarge\": 0.242000,\n\t\t// m7g family\n\t\t\"m7g.12xlarge\": 2.467200, \"m7g.16xlarge\": 3.289600, \"m7g.2xlarge\": 0.411200, \"m7g.4xlarge\": 0.822400,\n\t\t\"m7g.8xlarge\": 1.644800, \"m7g.large\": 0.102800, \"m7g.medium\": 0.051400, \"m7g.metal\": 3.289600,\n\t\t\"m7g.xlarge\": 0.205600,\n\t\t// m7i-flex family\n\t\t\"m7i-flex.12xlarge\": 2.896800, \"m7i-flex.16xlarge\": 3.862400, \"m7i-flex.2xlarge\": 0.482800,\n\t\t\"m7i-flex.4xlarge\": 0.965600, \"m7i-flex.8xlarge\": 1.931200, \"m7i-flex.large\": 0.120700,\n\t\t\"m7i-flex.xlarge\": 0.241400,\n\t\t// m7i family\n\t\t\"m7i.12xlarge\": 3.049200, \"m7i.16xlarge\": 4.065600, \"m7i.24xlarge\": 6.098400, \"m7i.2xlarge\": 0.508200,\n\t\t\"m7i.48xlarge\": 12.196800, \"m7i.4xlarge\": 1.016400, \"m7i.8xlarge\": 2.032800, \"m7i.large\": 0.127050,\n\t\t\"m7i.metal-24xl\": 6.708240, \"m7i.metal-48xl\": 12.196800, \"m7i.xlarge\": 0.254100,\n\t\t// p3dn family\n\t\t\"p3dn.24xlarge\": 37.454000,\n\t\t// r5 family\n\t\t\"r5.12xlarge\": 3.624000, \"r5.16xlarge\": 4.832000, \"r5.24xlarge\": 7.248000, \"r5.2xlarge\": 0.604000,\n\t\t\"r5.4xlarge\": 1.208000, \"r5.8xlarge\": 2.416000, \"r5.large\": 0.151000, \"r5.metal\": 7.248000,\n\t\t\"r5.xlarge\": 0.302000,\n\t\t// r5a family\n\t\t\"r5a.12xlarge\": 3.264000, \"r5a.16xlarge\": 4.352000, \"r5a.24xlarge\": 6.528000, \"r5a.2xlarge\": 0.544000,\n\t\t\"r5a.4xlarge\": 1.088000, \"r5a.8xlarge\": 2.176000, \"r5a.large\": 0.136000, \"r5a.xlarge\": 0.272000,\n\t\t// r5d family\n\t\t\"r5d.12xlarge\": 4.152000, \"r5d.16xlarge\": 5.536000, \"r5d.24xlarge\": 8.304000, \"r5d.2xlarge\": 0.692000,\n\t\t\"r5d.4xlarge\": 1.384000, \"r5d.8xlarge\": 2.768000, \"r5d.large\": 0.173000, \"r5d.metal\": 8.304000,\n\t\t\"r5d.xlarge\": 0.346000,\n\t\t// r5dn family\n\t\t\"r5dn.12xlarge\": 4.824000, \"r5dn.16xlarge\": 6.432000, \"r5dn.24xlarge\": 9.648000, \"r5dn.2xlarge\": 0.804000,\n\t\t\"r5dn.4xlarge\": 1.608000, \"r5dn.8xlarge\": 3.216000, \"r5dn.large\": 0.201000, \"r5dn.metal\": 9.648000,\n\t\t\"r5dn.xlarge\": 0.402000,\n\t\t// r5n family\n\t\t\"r5n.12xlarge\": 4.296000, \"r5n.16xlarge\": 5.728000, \"r5n.24xlarge\": 8.592000, \"r5n.2xlarge\": 0.716000,\n\t\t\"r5n.4xlarge\": 1.432000, \"r5n.8xlarge\": 2.864000, \"r5n.large\": 0.179000, \"r5n.metal\": 8.592000,\n\t\t\"r5n.xlarge\": 0.358000,\n\t\t// r6g family\n\t\t\"r6g.12xlarge\": 2.899200, \"r6g.16xlarge\": 3.865600, \"r6g.2xlarge\": 0.483200, \"r6g.4xlarge\": 0.966400,\n\t\t\"r6g.8xlarge\": 1.932800, \"r6g.large\": 0.120800, \"r6g.medium\": 0.060400, \"r6g.metal\": 4.097500,\n\t\t\"r6g.xlarge\": 0.241600,\n\t\t// r6gd family\n\t\t\"r6gd.12xlarge\": 3.321600, \"r6gd.16xlarge\": 4.428800, \"r6gd.2xlarge\": 0.553600, \"r6gd.4xlarge\": 1.107200,\n\t\t\"r6gd.8xlarge\": 2.214400, \"r6gd.large\": 0.138400, \"r6gd.medium\": 0.069200, \"r6gd.metal\": 4.428800,\n\t\t\"r6gd.xlarge\": 0.276800,\n\t\t// r6i family\n\t\t\"r6i.12xlarge\": 3.624000, \"r6i.16xlarge\": 4.832000, \"r6i.24xlarge\": 7.248000, \"r6i.2xlarge\": 0.604000,\n\t\t\"r6i.32xlarge\": 9.664000, \"r6i.4xlarge\": 1.208000, \"r6i.8xlarge\": 2.416000, \"r6i.large\": 0.151000,\n\t\t\"r6i.metal\": 9.664000, \"r6i.xlarge\": 0.302000,\n\t\t// r7g family\n\t\t\"r7g.12xlarge\": 3.080600, \"r7g.16xlarge\": 4.107500, \"r7g.2xlarge\": 0.513400, \"r7g.4xlarge\": 1.026900,\n\t\t\"r7g.8xlarge\": 2.053800, \"r7g.large\": 0.128400, \"r7g.medium\": 0.064200, \"r7g.metal\": 4.107500,\n\t\t\"r7g.xlarge\": 0.256700,\n\t\t// r7gd family\n\t\t\"r7gd.12xlarge\": 3.923500, \"r7gd.16xlarge\": 5.231400, \"r7gd.2xlarge\": 0.653900, \"r7gd.4xlarge\": 1.307800,\n\t\t\"r7gd.8xlarge\": 2.615700, \"r7gd.large\": 0.163500, \"r7gd.medium\": 0.081700, \"r7gd.metal\": 5.231400,\n\t\t\"r7gd.xlarge\": 0.327000,\n\t\t// r7i family\n\t\t\"r7i.12xlarge\": 3.805200, \"r7i.16xlarge\": 5.073600, \"r7i.24xlarge\": 7.610400, \"r7i.2xlarge\": 0.634200,\n\t\t\"r7i.48xlarge\": 15.220800, \"r7i.4xlarge\": 1.268400, \"r7i.8xlarge\": 2.536800, \"r7i.large\": 0.158550,\n\t\t\"r7i.metal-24xl\": 8.371440, \"r7i.metal-48xl\": 15.220800, \"r7i.xlarge\": 0.317100,\n\t\t// t3 family\n\t\t\"t3.2xlarge\": 0.390400, \"t3.large\": 0.097600, \"t3.medium\": 0.048800, \"t3.micro\": 0.012200,\n\t\t\"t3.nano\": 0.006100, \"t3.small\": 0.024400, \"t3.xlarge\": 0.195200,\n\t\t// t3a family\n\t\t\"t3a.2xlarge\": 0.351400, \"t3a.large\": 0.087800, \"t3a.medium\": 0.043900, \"t3a.micro\": 0.011000,\n\t\t\"t3a.nano\": 0.005500, \"t3a.small\": 0.022000, \"t3a.xlarge\": 0.175700,\n\t\t// t4g family\n\t\t\"t4g.2xlarge\": 0.313600, \"t4g.large\": 0.078400, \"t4g.medium\": 0.039200, \"t4g.micro\": 0.009800,\n\t\t\"t4g.nano\": 0.004900, \"t4g.small\": 0.019600, \"t4g.xlarge\": 0.156800,\n\t\t// u-12tb1 family\n\t\t\"u-12tb1.112xlarge\": 130.867000,\n\t\t// u-24tb1 family\n\t\t\"u-24tb1.112xlarge\": 261.730000,\n\t\t// u-6tb1 family\n\t\t\"u-6tb1.112xlarge\": 65.433000, \"u-6tb1.56xlarge\": 55.610750,\n\t\t// u-9tb1 family\n\t\t\"u-9tb1.112xlarge\": 98.150000,\n\t\t// x1 family\n\t\t\"x1.16xlarge\": 8.003000, \"x1.32xlarge\": 16.006000,\n\t\t// x1e family\n\t\t\"x1e.16xlarge\": 16.000000, \"x1e.2xlarge\": 2.000000, \"x1e.32xlarge\": 32.000000, \"x1e.4xlarge\": 4.000000,\n\t\t\"x1e.8xlarge\": 8.000000, \"x1e.xlarge\": 1.000000,\n\t\t// x2idn family\n\t\t\"x2idn.16xlarge\": 8.003000, \"x2idn.24xlarge\": 12.004500, \"x2idn.32xlarge\": 16.006000,\n\t\t\"x2idn.metal\": 16.006000,\n\t\t// x2iedn family\n\t\t\"x2iedn.16xlarge\": 16.006000, \"x2iedn.24xlarge\": 24.009000, \"x2iedn.2xlarge\": 2.000750,\n\t\t\"x2iedn.32xlarge\": 32.012000, \"x2iedn.4xlarge\": 4.001500, \"x2iedn.8xlarge\": 8.003000,\n\t\t\"x2iedn.metal\": 32.012000, \"x2iedn.xlarge\": 1.000380,\n\t},\n\n\t// us-gov-west-1\n\t\"us-gov-west-1\": {\n\t\t// c1 family\n\t\t\"c1.medium\": 0.157000, \"c1.xlarge\": 0.628000,\n\t\t// c3 family\n\t\t\"c3.2xlarge\": 0.504000, \"c3.4xlarge\": 1.008000, \"c3.8xlarge\": 2.016000, \"c3.large\": 0.126000,\n\t\t\"c3.xlarge\": 0.252000,\n\t\t// c4 family\n\t\t\"c4.2xlarge\": 0.479000, \"c4.4xlarge\": 0.958000, \"c4.8xlarge\": 1.915000, \"c4.large\": 0.120000,\n\t\t\"c4.xlarge\": 0.239000,\n\t\t// c5 family\n\t\t\"c5.12xlarge\": 2.448000, \"c5.18xlarge\": 3.672000, \"c5.24xlarge\": 4.896000, \"c5.2xlarge\": 0.408000,\n\t\t\"c5.4xlarge\": 0.816000, \"c5.9xlarge\": 1.836000, \"c5.large\": 0.102000, \"c5.metal\": 4.896000,\n\t\t\"c5.xlarge\": 0.204000,\n\t\t// c5a family\n\t\t\"c5a.12xlarge\": 2.208000, \"c5a.16xlarge\": 2.944000, \"c5a.24xlarge\": 4.416000, \"c5a.2xlarge\": 0.368000,\n\t\t\"c5a.4xlarge\": 0.736000, \"c5a.8xlarge\": 1.472000, \"c5a.large\": 0.092000, \"c5a.xlarge\": 0.184000,\n\t\t// c5d family\n\t\t\"c5d.12xlarge\": 2.784000, \"c5d.18xlarge\": 4.176000, \"c5d.24xlarge\": 5.568000, \"c5d.2xlarge\": 0.464000,\n\t\t\"c5d.4xlarge\": 0.928000, \"c5d.9xlarge\": 2.088000, \"c5d.large\": 0.116000, \"c5d.metal\": 5.568000,\n\t\t\"c5d.xlarge\": 0.232000,\n\t\t// c5n family\n\t\t\"c5n.18xlarge\": 4.680000, \"c5n.2xlarge\": 0.520000, \"c5n.4xlarge\": 1.040000, \"c5n.9xlarge\": 2.340000,\n\t\t\"c5n.large\": 0.130000, \"c5n.metal\": 4.680000, \"c5n.xlarge\": 0.260000,\n\t\t// c6g family\n\t\t\"c6g.12xlarge\": 1.958400, \"c6g.16xlarge\": 2.611200, \"c6g.2xlarge\": 0.326400, \"c6g.4xlarge\": 0.652800,\n\t\t\"c6g.8xlarge\": 1.305600, \"c6g.large\": 0.081600, \"c6g.medium\": 0.040800, \"c6g.metal\": 2.767900,\n\t\t\"c6g.xlarge\": 0.163200,\n\t\t// c6gd family\n\t\t\"c6gd.12xlarge\": 2.227200, \"c6gd.16xlarge\": 2.969600, \"c6gd.2xlarge\": 0.371200, \"c6gd.4xlarge\": 0.742400,\n\t\t\"c6gd.8xlarge\": 1.484800, \"c6gd.large\": 0.092800, \"c6gd.medium\": 0.046400, \"c6gd.metal\": 2.969600,\n\t\t\"c6gd.xlarge\": 0.185600,\n\t\t// c6gn family\n\t\t\"c6gn.12xlarge\": 2.496000, \"c6gn.16xlarge\": 3.328000, \"c6gn.2xlarge\": 0.416000, \"c6gn.4xlarge\": 0.832000,\n\t\t\"c6gn.8xlarge\": 1.664000, \"c6gn.large\": 0.104000, \"c6gn.medium\": 0.052000, \"c6gn.xlarge\": 0.208000,\n\t\t// c6i family\n\t\t\"c6i.12xlarge\": 2.448000, \"c6i.16xlarge\": 3.264000, \"c6i.24xlarge\": 4.896000, \"c6i.2xlarge\": 0.408000,\n\t\t\"c6i.32xlarge\": 6.528000, \"c6i.4xlarge\": 0.816000, \"c6i.8xlarge\": 1.632000, \"c6i.large\": 0.102000,\n\t\t\"c6i.metal\": 6.528000, \"c6i.xlarge\": 0.204000,\n\t\t// c6id family\n\t\t\"c6id.12xlarge\": 2.923200, \"c6id.16xlarge\": 3.897600, \"c6id.24xlarge\": 5.846400, \"c6id.2xlarge\": 0.487200,\n\t\t\"c6id.32xlarge\": 7.795200, \"c6id.4xlarge\": 0.974400, \"c6id.8xlarge\": 1.948800, \"c6id.large\": 0.121800,\n\t\t\"c6id.metal\": 7.795200, \"c6id.xlarge\": 0.243600,\n\t\t// c6in family\n\t\t\"c6in.12xlarge\": 3.276000, \"c6in.16xlarge\": 4.368000, \"c6in.24xlarge\": 6.552000, \"c6in.2xlarge\": 0.546000,\n\t\t\"c6in.32xlarge\": 8.736000, \"c6in.4xlarge\": 1.092000, \"c6in.8xlarge\": 2.184000, \"c6in.large\": 0.136500,\n\t\t\"c6in.metal\": 8.736000, \"c6in.xlarge\": 0.273000,\n\t\t// c7g family\n\t\t\"c7g.12xlarge\": 2.080800, \"c7g.16xlarge\": 2.774400, \"c7g.2xlarge\": 0.346800, \"c7g.4xlarge\": 0.693600,\n\t\t\"c7g.8xlarge\": 1.387200, \"c7g.large\": 0.086700, \"c7g.medium\": 0.043400, \"c7g.metal\": 2.774400,\n\t\t\"c7g.xlarge\": 0.173400,\n\t\t// c7gd family\n\t\t\"c7gd.12xlarge\": 2.630900, \"c7gd.16xlarge\": 3.507800, \"c7gd.2xlarge\": 0.438500, \"c7gd.4xlarge\": 0.877000,\n\t\t\"c7gd.8xlarge\": 1.753900, \"c7gd.large\": 0.109600, \"c7gd.medium\": 0.054800, \"c7gd.metal\": 3.507800,\n\t\t\"c7gd.xlarge\": 0.219200,\n\t\t// c7i-flex family\n\t\t\"c7i-flex.12xlarge\": 2.442000, \"c7i-flex.16xlarge\": 3.256000, \"c7i-flex.2xlarge\": 0.407000,\n\t\t\"c7i-flex.4xlarge\": 0.814000, \"c7i-flex.8xlarge\": 1.628000, \"c7i-flex.large\": 0.101750,\n\t\t\"c7i-flex.xlarge\": 0.203500,\n\t\t// c7i family\n\t\t\"c7i.12xlarge\": 2.570400, \"c7i.16xlarge\": 3.427200, \"c7i.24xlarge\": 5.140800, \"c7i.2xlarge\": 0.428400,\n\t\t\"c7i.48xlarge\": 10.281600, \"c7i.4xlarge\": 0.856800, \"c7i.8xlarge\": 1.713600, \"c7i.large\": 0.107100,\n\t\t\"c7i.metal-24xl\": 5.654880, \"c7i.metal-48xl\": 10.281600, \"c7i.xlarge\": 0.214200,\n\t\t// cc2 family\n\t\t\"cc2.8xlarge\": 2.250000,\n\t\t// d2 family\n\t\t\"d2.2xlarge\": 1.656000, \"d2.4xlarge\": 3.312000, \"d2.8xlarge\": 6.624000, \"d2.xlarge\": 0.828000,\n\t\t// d3 family\n\t\t\"d3.2xlarge\": 1.197000, \"d3.4xlarge\": 2.394000, \"d3.8xlarge\": 4.787760, \"d3.xlarge\": 0.598000,\n\t\t// f1 family\n\t\t\"f1.16xlarge\": 15.840000, \"f1.2xlarge\": 1.980000, \"f1.4xlarge\": 3.960000,\n\t\t// g3 family\n\t\t\"g3.16xlarge\": 5.280000, \"g3.4xlarge\": 1.320000, \"g3.8xlarge\": 2.640000,\n\t\t// g3s family\n\t\t\"g3s.xlarge\": 0.868000,\n\t\t// g4dn family\n\t\t\"g4dn.12xlarge\": 4.931000, \"g4dn.16xlarge\": 5.486000, \"g4dn.2xlarge\": 0.948000, \"g4dn.4xlarge\": 1.518000,\n\t\t\"g4dn.8xlarge\": 2.743000, \"g4dn.metal\": 9.862000, \"g4dn.xlarge\": 0.663000,\n\t\t// g6 family\n\t\t\"g6.12xlarge\": 5.800030, \"g6.16xlarge\": 4.281450, \"g6.24xlarge\": 8.413670, \"g6.2xlarge\": 1.232200,\n\t\t\"g6.48xlarge\": 16.827340, \"g6.4xlarge\": 1.667810, \"g6.8xlarge\": 2.539030, \"g6.xlarge\": 1.014400,\n\t\t// gr6 family\n\t\t\"gr6.4xlarge\": 1.940100, \"gr6.8xlarge\": 3.083590,\n\t\t// hpc6a family\n\t\t\"hpc6a.48xlarge\": 3.467000,\n\t\t// hpc6id family\n\t\t\"hpc6id.32xlarge\": 6.854400,\n\t\t// hpc7a family\n\t\t\"hpc7a.12xlarge\": 8.667400, \"hpc7a.24xlarge\": 8.667400, \"hpc7a.48xlarge\": 8.667400,\n\t\t\"hpc7a.96xlarge\": 8.667400,\n\t\t// hpc7g family\n\t\t\"hpc7g.16xlarge\": 2.026200, \"hpc7g.4xlarge\": 2.026200, \"hpc7g.8xlarge\": 2.026200,\n\t\t// hs1 family\n\t\t\"hs1.8xlarge\": 5.520000,\n\t\t// i2 family\n\t\t\"i2.2xlarge\": 2.046000, \"i2.4xlarge\": 4.092000, \"i2.8xlarge\": 8.184000, \"i2.xlarge\": 1.023000,\n\t\t// i3 family\n\t\t\"i3.16xlarge\": 6.016000, \"i3.2xlarge\": 0.752000, \"i3.4xlarge\": 1.504000, \"i3.8xlarge\": 3.008000,\n\t\t\"i3.large\": 0.188000, \"i3.metal\": 6.016000, \"i3.xlarge\": 0.376000,\n\t\t// i3en family\n\t\t\"i3en.12xlarge\": 6.552000, \"i3en.24xlarge\": 13.104000, \"i3en.2xlarge\": 1.092000, \"i3en.3xlarge\": 1.638000,\n\t\t\"i3en.6xlarge\": 3.276000, \"i3en.large\": 0.273000, \"i3en.metal\": 13.104000, \"i3en.xlarge\": 0.546000,\n\t\t// i3p family\n\t\t\"i3p.16xlarge\": 6.016000,\n\t\t// i4i family\n\t\t\"i4i.12xlarge\": 4.963000, \"i4i.16xlarge\": 6.618000, \"i4i.24xlarge\": 9.926400, \"i4i.2xlarge\": 0.827000,\n\t\t\"i4i.32xlarge\": 13.235200, \"i4i.4xlarge\": 1.654000, \"i4i.8xlarge\": 3.309000, \"i4i.large\": 0.207000,\n\t\t\"i4i.metal\": 13.235000, \"i4i.xlarge\": 0.414000,\n\t\t// inf1 family\n\t\t\"inf1.24xlarge\": 5.953000, \"inf1.2xlarge\": 0.456000, \"inf1.6xlarge\": 1.488000, \"inf1.xlarge\": 0.288000,\n\t\t// m1 family\n\t\t\"m1.large\": 0.211000, \"m1.medium\": 0.106000, \"m1.small\": 0.053000, \"m1.xlarge\": 0.423000,\n\t\t// m2 family\n\t\t\"m2.2xlarge\": 0.586000, \"m2.4xlarge\": 1.171000, \"m2.xlarge\": 0.293000,\n\t\t// m3 family\n\t\t\"m3.2xlarge\": 0.672000, \"m3.large\": 0.168000, \"m3.medium\": 0.084000, \"m3.xlarge\": 0.336000,\n\t\t// m4 family\n\t\t\"m4.10xlarge\": 2.520000, \"m4.16xlarge\": 4.032000, \"m4.2xlarge\": 0.504000, \"m4.4xlarge\": 1.008000,\n\t\t\"m4.large\": 0.126000, \"m4.xlarge\": 0.252000,\n\t\t// m5 family\n\t\t\"m5.12xlarge\": 2.904000, \"m5.16xlarge\": 3.872000, \"m5.24xlarge\": 5.808000, \"m5.2xlarge\": 0.484000,\n\t\t\"m5.4xlarge\": 0.968000, \"m5.8xlarge\": 1.936000, \"m5.large\": 0.121000, \"m5.metal\": 5.808000,\n\t\t\"m5.xlarge\": 0.242000,\n\t\t// m5a family\n\t\t\"m5a.12xlarge\": 2.616000, \"m5a.16xlarge\": 3.488000, \"m5a.24xlarge\": 5.232000, \"m5a.2xlarge\": 0.436000,\n\t\t\"m5a.4xlarge\": 0.872000, \"m5a.8xlarge\": 1.744000, \"m5a.large\": 0.109000, \"m5a.xlarge\": 0.218000,\n\t\t// m5ad family\n\t\t\"m5ad.12xlarge\": 3.144000, \"m5ad.16xlarge\": 4.192000, \"m5ad.24xlarge\": 6.288000, \"m5ad.2xlarge\": 0.524000,\n\t\t\"m5ad.4xlarge\": 1.048000, \"m5ad.8xlarge\": 2.096000, \"m5ad.large\": 0.131000, \"m5ad.xlarge\": 0.262000,\n\t\t// m5d family\n\t\t\"m5d.12xlarge\": 3.432000, \"m5d.16xlarge\": 4.576000, \"m5d.24xlarge\": 6.864000, \"m5d.2xlarge\": 0.572000,\n\t\t\"m5d.4xlarge\": 1.144000, \"m5d.8xlarge\": 2.288000, \"m5d.large\": 0.143000, \"m5d.metal\": 6.864000,\n\t\t\"m5d.xlarge\": 0.286000,\n\t\t// m5dn family\n\t\t\"m5dn.12xlarge\": 4.104000, \"m5dn.16xlarge\": 5.472000, \"m5dn.24xlarge\": 8.208000, \"m5dn.2xlarge\": 0.684000,\n\t\t\"m5dn.4xlarge\": 1.368000, \"m5dn.8xlarge\": 2.736000, \"m5dn.large\": 0.171000, \"m5dn.metal\": 8.208000,\n\t\t\"m5dn.xlarge\": 0.342000,\n\t\t// m5n family\n\t\t\"m5n.12xlarge\": 3.576000, \"m5n.16xlarge\": 4.768000, \"m5n.24xlarge\": 7.152000, \"m5n.2xlarge\": 0.596000,\n\t\t\"m5n.4xlarge\": 1.192000, \"m5n.8xlarge\": 2.384000, \"m5n.large\": 0.149000, \"m5n.metal\": 7.152000,\n\t\t\"m5n.xlarge\": 0.298000,\n\t\t// m6g family\n\t\t\"m6g.12xlarge\": 2.323200, \"m6g.16xlarge\": 3.097600, \"m6g.2xlarge\": 0.387200, \"m6g.4xlarge\": 0.774400,\n\t\t\"m6g.8xlarge\": 1.548800, \"m6g.large\": 0.096800, \"m6g.medium\": 0.048400, \"m6g.metal\": 3.283500,\n\t\t\"m6g.xlarge\": 0.193600,\n\t\t// m6gd family\n\t\t\"m6gd.12xlarge\": 2.745600, \"m6gd.16xlarge\": 3.660800, \"m6gd.2xlarge\": 0.457600, \"m6gd.4xlarge\": 0.915200,\n\t\t\"m6gd.8xlarge\": 1.830400, \"m6gd.large\": 0.114400, \"m6gd.medium\": 0.057200, \"m6gd.metal\": 3.880400,\n\t\t\"m6gd.xlarge\": 0.228800,\n\t\t// m6i family\n\t\t\"m6i.12xlarge\": 2.904000, \"m6i.16xlarge\": 3.872000, \"m6i.24xlarge\": 5.808000, \"m6i.2xlarge\": 0.484000,\n\t\t\"m6i.32xlarge\": 7.744000, \"m6i.4xlarge\": 0.968000, \"m6i.8xlarge\": 1.936000, \"m6i.large\": 0.121000,\n\t\t\"m6i.metal\": 7.744000, \"m6i.xlarge\": 0.242000,\n\t\t// m6id family\n\t\t\"m6id.12xlarge\": 3.604800, \"m6id.16xlarge\": 4.806400, \"m6id.24xlarge\": 7.209600, \"m6id.2xlarge\": 0.600800,\n\t\t\"m6id.32xlarge\": 9.612800, \"m6id.4xlarge\": 1.201600, \"m6id.8xlarge\": 2.403200, \"m6id.large\": 0.150200,\n\t\t\"m6id.metal\": 9.612800, \"m6id.xlarge\": 0.300400,\n\t\t// m6idn family\n\t\t\"m6idn.12xlarge\": 4.801680, \"m6idn.16xlarge\": 6.402240, \"m6idn.24xlarge\": 9.603360,\n\t\t\"m6idn.2xlarge\": 0.800280, \"m6idn.32xlarge\": 12.804480, \"m6idn.4xlarge\": 1.600560, \"m6idn.8xlarge\": 3.201120,\n\t\t\"m6idn.large\": 0.200070, \"m6idn.metal\": 12.804480, \"m6idn.xlarge\": 0.400140,\n\t\t// m6in family\n\t\t\"m6in.12xlarge\": 4.183920, \"m6in.16xlarge\": 5.578560, \"m6in.24xlarge\": 8.367840, \"m6in.2xlarge\": 0.697320,\n\t\t\"m6in.32xlarge\": 11.157120, \"m6in.4xlarge\": 1.394640, \"m6in.8xlarge\": 2.789280, \"m6in.large\": 0.174330,\n\t\t\"m6in.metal\": 11.157120, \"m6in.xlarge\": 0.348660,\n\t\t// m7g family\n\t\t\"m7g.12xlarge\": 2.468200, \"m7g.16xlarge\": 3.290900, \"m7g.2xlarge\": 0.411400, \"m7g.4xlarge\": 0.822700,\n\t\t\"m7g.8xlarge\": 1.645400, \"m7g.large\": 0.102800, \"m7g.medium\": 0.051400, \"m7g.metal\": 3.290900,\n\t\t\"m7g.xlarge\": 0.205700,\n\t\t// m7i-flex family\n\t\t\"m7i-flex.12xlarge\": 2.896800, \"m7i-flex.16xlarge\": 3.862400, \"m7i-flex.2xlarge\": 0.482800,\n\t\t\"m7i-flex.4xlarge\": 0.965600, \"m7i-flex.8xlarge\": 1.931200, \"m7i-flex.large\": 0.120700,\n\t\t\"m7i-flex.xlarge\": 0.241400,\n\t\t// m7i family\n\t\t\"m7i.12xlarge\": 3.049200, \"m7i.16xlarge\": 4.065600, \"m7i.24xlarge\": 6.098400, \"m7i.2xlarge\": 0.508200,\n\t\t\"m7i.48xlarge\": 12.196800, \"m7i.4xlarge\": 1.016400, \"m7i.8xlarge\": 2.032800, \"m7i.large\": 0.127050,\n\t\t\"m7i.metal-24xl\": 6.708240, \"m7i.metal-48xl\": 12.196800, \"m7i.xlarge\": 0.254100,\n\t\t// p2 family\n\t\t\"p2.16xlarge\": 17.280000, \"p2.8xlarge\": 8.640000, \"p2.xlarge\": 1.080000,\n\t\t// p3 family\n\t\t\"p3.16xlarge\": 29.376000, \"p3.2xlarge\": 3.672000, \"p3.8xlarge\": 14.688000,\n\t\t// p3dn family\n\t\t\"p3dn.24xlarge\": 37.454000,\n\t\t// p4d family\n\t\t\"p4d.24xlarge\": 26.351100,\n\t\t// p5 family\n\t\t\"p5.48xlarge\": 66.048000,\n\t\t// p5en family\n\t\t\"p5en.48xlarge\": 75.955200,\n\t\t// r3 family\n\t\t\"r3.2xlarge\": 0.798000, \"r3.4xlarge\": 1.596000, \"r3.8xlarge\": 3.192000, \"r3.large\": 0.200000,\n\t\t\"r3.xlarge\": 0.399000,\n\t\t// r4 family\n\t\t\"r4.16xlarge\": 5.107200, \"r4.2xlarge\": 0.638400, \"r4.4xlarge\": 1.276800, \"r4.8xlarge\": 2.553600,\n\t\t\"r4.large\": 0.159600, \"r4.xlarge\": 0.319200,\n\t\t// r5 family\n\t\t\"r5.12xlarge\": 3.624000, \"r5.16xlarge\": 4.832000, \"r5.24xlarge\": 7.248000, \"r5.2xlarge\": 0.604000,\n\t\t\"r5.4xlarge\": 1.208000, \"r5.8xlarge\": 2.416000, \"r5.large\": 0.151000, \"r5.metal\": 7.248000,\n\t\t\"r5.xlarge\": 0.302000,\n\t\t// r5a family\n\t\t\"r5a.12xlarge\": 3.264000, \"r5a.16xlarge\": 4.352000, \"r5a.24xlarge\": 6.528000, \"r5a.2xlarge\": 0.544000,\n\t\t\"r5a.4xlarge\": 1.088000, \"r5a.8xlarge\": 2.176000, \"r5a.large\": 0.136000, \"r5a.xlarge\": 0.272000,\n\t\t// r5ad family\n\t\t\"r5ad.12xlarge\": 3.792000, \"r5ad.16xlarge\": 5.056000, \"r5ad.24xlarge\": 7.584000, \"r5ad.2xlarge\": 0.632000,\n\t\t\"r5ad.4xlarge\": 1.264000, \"r5ad.8xlarge\": 2.528000, \"r5ad.large\": 0.158000, \"r5ad.xlarge\": 0.316000,\n\t\t// r5d family\n\t\t\"r5d.12xlarge\": 4.152000, \"r5d.16xlarge\": 5.536000, \"r5d.24xlarge\": 8.304000, \"r5d.2xlarge\": 0.692000,\n\t\t\"r5d.4xlarge\": 1.384000, \"r5d.8xlarge\": 2.768000, \"r5d.large\": 0.173000, \"r5d.metal\": 8.304000,\n\t\t\"r5d.xlarge\": 0.346000,\n\t\t// r5dn family\n\t\t\"r5dn.12xlarge\": 4.824000, \"r5dn.16xlarge\": 6.432000, \"r5dn.24xlarge\": 9.648000, \"r5dn.2xlarge\": 0.804000,\n\t\t\"r5dn.4xlarge\": 1.608000, \"r5dn.8xlarge\": 3.216000, \"r5dn.large\": 0.201000, \"r5dn.metal\": 9.648000,\n\t\t\"r5dn.xlarge\": 0.402000,\n\t\t// r5n family\n\t\t\"r5n.12xlarge\": 4.296000, \"r5n.16xlarge\": 5.728000, \"r5n.24xlarge\": 8.592000, \"r5n.2xlarge\": 0.716000,\n\t\t\"r5n.4xlarge\": 1.432000, \"r5n.8xlarge\": 2.864000, \"r5n.large\": 0.179000, \"r5n.metal\": 8.592000,\n\t\t\"r5n.xlarge\": 0.358000,\n\t\t// r6g family\n\t\t\"r6g.12xlarge\": 2.899200, \"r6g.16xlarge\": 3.865600, \"r6g.2xlarge\": 0.483200, \"r6g.4xlarge\": 0.966400,\n\t\t\"r6g.8xlarge\": 1.932800, \"r6g.large\": 0.120800, \"r6g.medium\": 0.060400, \"r6g.metal\": 4.097500,\n\t\t\"r6g.xlarge\": 0.241600,\n\t\t// r6gd family\n\t\t\"r6gd.12xlarge\": 3.321600, \"r6gd.16xlarge\": 4.428800, \"r6gd.2xlarge\": 0.553600, \"r6gd.4xlarge\": 1.107200,\n\t\t\"r6gd.8xlarge\": 2.214400, \"r6gd.large\": 0.138400, \"r6gd.medium\": 0.069200, \"r6gd.metal\": 4.428800,\n\t\t\"r6gd.xlarge\": 0.276800,\n\t\t// r6i family\n\t\t\"r6i.12xlarge\": 3.624000, \"r6i.16xlarge\": 4.832000, \"r6i.24xlarge\": 7.248000, \"r6i.2xlarge\": 0.604000,\n\t\t\"r6i.32xlarge\": 9.664000, \"r6i.4xlarge\": 1.208000, \"r6i.8xlarge\": 2.416000, \"r6i.large\": 0.151000,\n\t\t\"r6i.metal\": 9.664000, \"r6i.xlarge\": 0.302000,\n\t\t// r6id family\n\t\t\"r6id.12xlarge\": 4.360800, \"r6id.16xlarge\": 5.814400, \"r6id.24xlarge\": 8.721600, \"r6id.2xlarge\": 0.726800,\n\t\t\"r6id.32xlarge\": 11.628800, \"r6id.4xlarge\": 1.453600, \"r6id.8xlarge\": 2.907200, \"r6id.large\": 0.181700,\n\t\t\"r6id.metal\": 11.628800, \"r6id.xlarge\": 0.363400,\n\t\t// r6idn family\n\t\t\"r6idn.12xlarge\": 5.644080, \"r6idn.16xlarge\": 7.525440, \"r6idn.24xlarge\": 11.288160,\n\t\t\"r6idn.2xlarge\": 0.940680, \"r6idn.32xlarge\": 15.050880, \"r6idn.4xlarge\": 1.881360, \"r6idn.8xlarge\": 3.762720,\n\t\t\"r6idn.large\": 0.235170, \"r6idn.metal\": 15.050880, \"r6idn.xlarge\": 0.470340,\n\t\t// r6in family\n\t\t\"r6in.12xlarge\": 5.026320, \"r6in.16xlarge\": 6.701760, \"r6in.24xlarge\": 10.052640, \"r6in.2xlarge\": 0.837720,\n\t\t\"r6in.32xlarge\": 13.403520, \"r6in.4xlarge\": 1.675440, \"r6in.8xlarge\": 3.350880, \"r6in.large\": 0.209430,\n\t\t\"r6in.metal\": 13.403520, \"r6in.xlarge\": 0.418860,\n\t\t// r7g family\n\t\t\"r7g.12xlarge\": 3.080600, \"r7g.16xlarge\": 4.107500, \"r7g.2xlarge\": 0.513400, \"r7g.4xlarge\": 1.026900,\n\t\t\"r7g.8xlarge\": 2.053800, \"r7g.large\": 0.128400, \"r7g.medium\": 0.064200, \"r7g.metal\": 4.107500,\n\t\t\"r7g.xlarge\": 0.256700,\n\t\t// r7gd family\n\t\t\"r7gd.12xlarge\": 3.925000, \"r7gd.16xlarge\": 5.233300, \"r7gd.2xlarge\": 0.654200, \"r7gd.4xlarge\": 1.308300,\n\t\t\"r7gd.8xlarge\": 2.616600, \"r7gd.large\": 0.163500, \"r7gd.medium\": 0.081800, \"r7gd.metal\": 5.233300,\n\t\t\"r7gd.xlarge\": 0.327100,\n\t\t// r7i family\n\t\t\"r7i.12xlarge\": 3.805200, \"r7i.16xlarge\": 5.073600, \"r7i.24xlarge\": 7.610400, \"r7i.2xlarge\": 0.634200,\n\t\t\"r7i.48xlarge\": 15.220800, \"r7i.4xlarge\": 1.268400, \"r7i.8xlarge\": 2.536800, \"r7i.large\": 0.158550,\n\t\t\"r7i.metal-24xl\": 8.371440, \"r7i.metal-48xl\": 15.220800, \"r7i.xlarge\": 0.317100,\n\t\t// r8g family\n\t\t\"r8g.12xlarge\": 3.388440, \"r8g.16xlarge\": 4.517920, \"r8g.24xlarge\": 6.776880, \"r8g.2xlarge\": 0.564740,\n\t\t\"r8g.48xlarge\": 13.553760, \"r8g.4xlarge\": 1.129480, \"r8g.8xlarge\": 2.258960, \"r8g.large\": 0.141190,\n\t\t\"r8g.medium\": 0.070590, \"r8g.metal-24xl\": 7.454570, \"r8g.metal-48xl\": 13.553760, \"r8g.xlarge\": 0.282370,\n\t\t// t1 family\n\t\t\"t1.micro\": 0.024000,\n\t\t// t2 family\n\t\t\"t2.2xlarge\": 0.435200, \"t2.large\": 0.108800, \"t2.medium\": 0.054400, \"t2.micro\": 0.013600,\n\t\t\"t2.nano\": 0.006800, \"t2.small\": 0.027200, \"t2.xlarge\": 0.217600,\n\t\t// t3 family\n\t\t\"t3.2xlarge\": 0.390400, \"t3.large\": 0.097600, \"t3.medium\": 0.048800, \"t3.micro\": 0.012200,\n\t\t\"t3.nano\": 0.006100, \"t3.small\": 0.024400, \"t3.xlarge\": 0.195200,\n\t\t// t3a family\n\t\t\"t3a.2xlarge\": 0.351400, \"t3a.large\": 0.087800, \"t3a.medium\": 0.043900, \"t3a.micro\": 0.011000,\n\t\t\"t3a.nano\": 0.005500, \"t3a.small\": 0.022000, \"t3a.xlarge\": 0.175700,\n\t\t// t4g family\n\t\t\"t4g.2xlarge\": 0.313600, \"t4g.large\": 0.078400, \"t4g.medium\": 0.039200, \"t4g.micro\": 0.009800,\n\t\t\"t4g.nano\": 0.004900, \"t4g.small\": 0.019600, \"t4g.xlarge\": 0.156800,\n\t\t// u-12tb1 family\n\t\t\"u-12tb1.112xlarge\": 130.867000,\n\t\t// u-24tb1 family\n\t\t\"u-24tb1.112xlarge\": 261.730000,\n\t\t// u-3tb1 family\n\t\t\"u-3tb1.56xlarge\": 32.716500,\n\t\t// u-6tb1 family\n\t\t\"u-6tb1.112xlarge\": 65.433000, \"u-6tb1.56xlarge\": 55.610750,\n\t\t// u-9tb1 family\n\t\t\"u-9tb1.112xlarge\": 98.150000,\n\t\t// u7in-24tb family\n\t\t\"u7in-24tb.224xlarge\": 324.443680,\n\t\t// x1 family\n\t\t\"x1.16xlarge\": 8.003000, \"x1.32xlarge\": 16.006000,\n\t\t// x1e family\n\t\t\"x1e.16xlarge\": 16.000000, \"x1e.2xlarge\": 2.000000, \"x1e.32xlarge\": 32.000000, \"x1e.4xlarge\": 4.000000,\n\t\t\"x1e.8xlarge\": 8.000000, \"x1e.xlarge\": 1.000000,\n\t\t// x2idn family\n\t\t\"x2idn.16xlarge\": 8.003000, \"x2idn.24xlarge\": 12.004500, \"x2idn.32xlarge\": 16.006000,\n\t\t\"x2idn.metal\": 16.006000,\n\t\t// x2iedn family\n\t\t\"x2iedn.16xlarge\": 16.006000, \"x2iedn.24xlarge\": 24.009000, \"x2iedn.2xlarge\": 2.000750,\n\t\t\"x2iedn.32xlarge\": 32.012000, \"x2iedn.4xlarge\": 4.001500, \"x2iedn.8xlarge\": 8.003000,\n\t\t\"x2iedn.metal\": 32.012000, \"x2iedn.xlarge\": 1.000380,\n\t},\n}\n"
  },
  {
    "path": "pkg/providers/securitygroup/securitygroup.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage securitygroup\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"sync\"\n\n\t\"github.com/aws/aws-sdk-go-v2/aws\"\n\t\"github.com/aws/aws-sdk-go-v2/service/ec2\"\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\t\"github.com/patrickmn/go-cache\"\n\t\"github.com/samber/lo\"\n\t\"sigs.k8s.io/controller-runtime/pkg/log\"\n\n\t\"sigs.k8s.io/karpenter/pkg/utils/pretty\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\tsdk \"github.com/aws/karpenter-provider-aws/pkg/aws\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/utils\"\n)\n\ntype Provider interface {\n\tList(context.Context, *v1.EC2NodeClass) ([]ec2types.SecurityGroup, error)\n}\n\ntype DefaultProvider struct {\n\tsync.Mutex\n\tec2api sdk.EC2API\n\tcache  *cache.Cache\n\tcm     *pretty.ChangeMonitor\n}\n\nfunc NewDefaultProvider(ec2api sdk.EC2API, cache *cache.Cache) *DefaultProvider {\n\treturn &DefaultProvider{\n\t\tec2api: ec2api,\n\t\tcm:     pretty.NewChangeMonitor(),\n\t\t// TODO: Remove cache cache when we utilize the security groups from the EC2NodeClass.status\n\t\tcache: cache,\n\t}\n}\n\nfunc (p *DefaultProvider) List(ctx context.Context, nodeClass *v1.EC2NodeClass) ([]ec2types.SecurityGroup, error) {\n\tp.Lock()\n\tdefer p.Unlock()\n\n\tsecurityGroups, err := p.getSecurityGroups(ctx, nodeClass)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tsecurityGroupIDs := lo.Map(securityGroups, func(s ec2types.SecurityGroup, _ int) string { return aws.ToString(s.GroupId) })\n\tif p.cm.HasChanged(fmt.Sprintf(\"security-groups/%s\", nodeClass.Name), securityGroupIDs) {\n\t\tlog.FromContext(ctx).\n\t\t\tWithValues(\"security-groups\", securityGroupIDs).\n\t\t\tV(1).Info(\"discovered security groups\")\n\t}\n\treturn securityGroups, nil\n}\n\nfunc (p *DefaultProvider) getSecurityGroups(ctx context.Context, nodeClass *v1.EC2NodeClass) ([]ec2types.SecurityGroup, error) {\n\tfilterSets := getFilterSets(nodeClass.Spec.SecurityGroupSelectorTerms)\n\thash := utils.GetNodeClassHash(nodeClass)\n\tif sg, ok := p.cache.Get(hash); ok {\n\t\t// Ensure what's returned from this function is a shallow-copy of the slice (not a deep-copy of the data itself)\n\t\t// so that modifications to the ordering of the data don't affect the original\n\t\treturn append([]ec2types.SecurityGroup{}, sg.([]ec2types.SecurityGroup)...), nil\n\t}\n\tsecurityGroups := map[string]ec2types.SecurityGroup{}\n\tfor _, filters := range filterSets {\n\t\tpaginator := ec2.NewDescribeSecurityGroupsPaginator(p.ec2api, &ec2.DescribeSecurityGroupsInput{\n\t\t\tMaxResults: aws.Int32(500),\n\t\t\tFilters:    filters,\n\t\t})\n\t\tfor paginator.HasMorePages() {\n\t\t\toutput, err := paginator.NextPage(ctx)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"describing security groups %+v, %w\", filterSets, err)\n\t\t\t}\n\t\t\tfor i := range output.SecurityGroups {\n\t\t\t\tsecurityGroups[lo.FromPtr(output.SecurityGroups[i].GroupId)] = output.SecurityGroups[i]\n\t\t\t}\n\t\t}\n\t}\n\tp.cache.SetDefault(hash, lo.Values(securityGroups))\n\treturn lo.Values(securityGroups), nil\n}\n\nfunc getFilterSets(terms []v1.SecurityGroupSelectorTerm) (res [][]ec2types.Filter) {\n\tidFilter := ec2types.Filter{Name: aws.String(\"group-id\")}\n\tnameFilter := ec2types.Filter{Name: aws.String(\"group-name\")}\n\tfor _, term := range terms {\n\t\tswitch {\n\t\tcase term.ID != \"\":\n\t\t\tidFilter.Values = append(idFilter.Values, term.ID)\n\t\tcase term.Name != \"\":\n\t\t\tnameFilter.Values = append(nameFilter.Values, term.Name)\n\t\tdefault:\n\t\t\tvar filters []ec2types.Filter\n\t\t\tfor k, v := range term.Tags {\n\t\t\t\tif v == \"*\" {\n\t\t\t\t\tfilters = append(filters, ec2types.Filter{\n\t\t\t\t\t\tName:   aws.String(\"tag-key\"),\n\t\t\t\t\t\tValues: []string{k},\n\t\t\t\t\t})\n\t\t\t\t} else {\n\t\t\t\t\tfilters = append(filters, ec2types.Filter{\n\t\t\t\t\t\tName:   aws.String(fmt.Sprintf(\"tag:%s\", k)),\n\t\t\t\t\t\tValues: []string{v},\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\t\t\tres = append(res, filters)\n\t\t}\n\t}\n\tif len(idFilter.Values) > 0 {\n\t\tres = append(res, []ec2types.Filter{idFilter})\n\t}\n\tif len(nameFilter.Values) > 0 {\n\t\tres = append(res, []ec2types.Filter{nameFilter})\n\t}\n\treturn res\n}\n"
  },
  {
    "path": "pkg/providers/securitygroup/suite_test.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage securitygroup_test\n\nimport (\n\t\"context\"\n\t\"sort\"\n\t\"sync\"\n\t\"testing\"\n\n\t\"sigs.k8s.io/karpenter/pkg/test/v1alpha1\"\n\n\t\"github.com/aws/aws-sdk-go-v2/aws\"\n\t\"github.com/aws/aws-sdk-go-v2/service/ec2\"\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\t\"github.com/samber/lo\"\n\n\t\"github.com/aws/karpenter-provider-aws/pkg/apis\"\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/operator/options\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/test\"\n\n\tcoreoptions \"sigs.k8s.io/karpenter/pkg/operator/options\"\n\tcoretest \"sigs.k8s.io/karpenter/pkg/test\"\n\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n\t. \"sigs.k8s.io/karpenter/pkg/test/expectations\"\n\t. \"sigs.k8s.io/karpenter/pkg/utils/testing\"\n)\n\nvar ctx context.Context\nvar stop context.CancelFunc\nvar env *coretest.Environment\nvar awsEnv *test.Environment\nvar nodeClass *v1.EC2NodeClass\n\nfunc TestAWS(t *testing.T) {\n\tctx = TestContextWithLogger(t)\n\tRegisterFailHandler(Fail)\n\tRunSpecs(t, \"SecurityGroupProvider\")\n}\n\nvar _ = BeforeSuite(func() {\n\tenv = coretest.NewEnvironment(coretest.WithCRDs(apis.CRDs...), coretest.WithCRDs(v1alpha1.CRDs...))\n\tctx = coreoptions.ToContext(ctx, coretest.Options(coretest.OptionsFields{FeatureGates: coretest.FeatureGates{ReservedCapacity: lo.ToPtr(true)}}))\n\tctx = options.ToContext(ctx, test.Options())\n\tctx, stop = context.WithCancel(ctx)\n\tawsEnv = test.NewEnvironment(ctx, env)\n})\n\nvar _ = AfterSuite(func() {\n\tstop()\n\tExpect(env.Stop()).To(Succeed(), \"Failed to stop environment\")\n})\n\nvar _ = BeforeEach(func() {\n\tctx = coreoptions.ToContext(ctx, coretest.Options(coretest.OptionsFields{FeatureGates: coretest.FeatureGates{ReservedCapacity: lo.ToPtr(true)}}))\n\tctx = options.ToContext(ctx, test.Options())\n\tnodeClass = test.EC2NodeClass(v1.EC2NodeClass{\n\t\tSpec: v1.EC2NodeClassSpec{\n\t\t\tAMISelectorTerms: []v1.AMISelectorTerm{{\n\t\t\t\tAlias: \"al2@latest\",\n\t\t\t}},\n\t\t\tSubnetSelectorTerms: []v1.SubnetSelectorTerm{\n\t\t\t\t{\n\t\t\t\t\tTags: map[string]string{\n\t\t\t\t\t\t\"*\": \"*\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tSecurityGroupSelectorTerms: []v1.SecurityGroupSelectorTerm{\n\t\t\t\t{\n\t\t\t\t\tTags: map[string]string{\n\t\t\t\t\t\t\"*\": \"*\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t})\n\tawsEnv.Reset()\n})\n\nvar _ = AfterEach(func() {\n\tExpectCleanedUp(ctx, env.Client)\n})\n\nvar _ = Describe(\"SecurityGroupProvider\", func() {\n\tIt(\"should default to the clusters security groups\", func() {\n\t\tsecurityGroups, err := awsEnv.SecurityGroupProvider.List(ctx, nodeClass)\n\t\tExpect(err).To(BeNil())\n\t\tExpectConsistsOfSecurityGroups([]ec2types.SecurityGroup{\n\t\t\t{\n\t\t\t\tGroupId:   aws.String(\"sg-test1\"),\n\t\t\t\tGroupName: aws.String(\"securityGroup-test1\"),\n\t\t\t},\n\t\t\t{\n\t\t\t\tGroupId:   aws.String(\"sg-test2\"),\n\t\t\t\tGroupName: aws.String(\"securityGroup-test2\"),\n\t\t\t},\n\t\t\t{\n\t\t\t\tGroupId:   aws.String(\"sg-test3\"),\n\t\t\t\tGroupName: aws.String(\"securityGroup-test3\"),\n\t\t\t},\n\t\t}, securityGroups)\n\t})\n\tIt(\"should discover security groups by tag\", func() {\n\t\tawsEnv.EC2API.DescribeSecurityGroupsBehavior.Output.Set(&ec2.DescribeSecurityGroupsOutput{SecurityGroups: []ec2types.SecurityGroup{\n\t\t\t{GroupName: aws.String(\"test-sgName-1\"), GroupId: aws.String(\"test-sg-1\"), Tags: []ec2types.Tag{{Key: aws.String(\"kubernetes.io/cluster/test-cluster\"), Value: aws.String(\"test-sg-1\")}}},\n\t\t\t{GroupName: aws.String(\"test-sgName-2\"), GroupId: aws.String(\"test-sg-2\"), Tags: []ec2types.Tag{{Key: aws.String(\"kubernetes.io/cluster/test-cluster\"), Value: aws.String(\"test-sg-2\")}}},\n\t\t}})\n\t\tsecurityGroups, err := awsEnv.SecurityGroupProvider.List(ctx, nodeClass)\n\t\tExpect(err).To(BeNil())\n\t\tExpectConsistsOfSecurityGroups([]ec2types.SecurityGroup{\n\t\t\t{\n\t\t\t\tGroupId:   aws.String(\"test-sg-1\"),\n\t\t\t\tGroupName: aws.String(\"test-sgName-1\"),\n\t\t\t},\n\t\t\t{\n\t\t\t\tGroupId:   aws.String(\"test-sg-2\"),\n\t\t\t\tGroupName: aws.String(\"test-sgName-2\"),\n\t\t\t},\n\t\t}, securityGroups)\n\t})\n\tIt(\"should discover security groups by multiple tag values\", func() {\n\t\tnodeClass.Spec.SecurityGroupSelectorTerms = []v1.SecurityGroupSelectorTerm{\n\t\t\t{\n\t\t\t\tTags: map[string]string{\"Name\": \"test-security-group-1\"},\n\t\t\t},\n\t\t\t{\n\t\t\t\tTags: map[string]string{\"Name\": \"test-security-group-2\"},\n\t\t\t},\n\t\t}\n\t\tsecurityGroups, err := awsEnv.SecurityGroupProvider.List(ctx, nodeClass)\n\t\tExpect(err).To(BeNil())\n\t\tExpectConsistsOfSecurityGroups([]ec2types.SecurityGroup{\n\t\t\t{\n\t\t\t\tGroupId:   aws.String(\"sg-test1\"),\n\t\t\t\tGroupName: aws.String(\"securityGroup-test1\"),\n\t\t\t},\n\t\t\t{\n\t\t\t\tGroupId:   aws.String(\"sg-test2\"),\n\t\t\t\tGroupName: aws.String(\"securityGroup-test2\"),\n\t\t\t},\n\t\t}, securityGroups)\n\t})\n\tIt(\"should discover security groups by ID\", func() {\n\t\tnodeClass.Spec.SecurityGroupSelectorTerms = []v1.SecurityGroupSelectorTerm{\n\t\t\t{\n\t\t\t\tID: \"sg-test1\",\n\t\t\t},\n\t\t}\n\t\tsecurityGroups, err := awsEnv.SecurityGroupProvider.List(ctx, nodeClass)\n\t\tExpect(err).To(BeNil())\n\t\tExpectConsistsOfSecurityGroups([]ec2types.SecurityGroup{\n\t\t\t{\n\t\t\t\tGroupId:   aws.String(\"sg-test1\"),\n\t\t\t\tGroupName: aws.String(\"securityGroup-test1\"),\n\t\t\t},\n\t\t}, securityGroups)\n\t})\n\tIt(\"should discover security groups by IDs\", func() {\n\t\tnodeClass.Spec.SecurityGroupSelectorTerms = []v1.SecurityGroupSelectorTerm{\n\t\t\t{\n\t\t\t\tID: \"sg-test1\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tID: \"sg-test2\",\n\t\t\t},\n\t\t}\n\t\tsecurityGroups, err := awsEnv.SecurityGroupProvider.List(ctx, nodeClass)\n\t\tExpect(err).To(BeNil())\n\t\tExpectConsistsOfSecurityGroups([]ec2types.SecurityGroup{\n\t\t\t{\n\t\t\t\tGroupId:   aws.String(\"sg-test1\"),\n\t\t\t\tGroupName: aws.String(\"securityGroup-test1\"),\n\t\t\t},\n\t\t\t{\n\t\t\t\tGroupId:   aws.String(\"sg-test2\"),\n\t\t\t\tGroupName: aws.String(\"securityGroup-test2\"),\n\t\t\t},\n\t\t}, securityGroups)\n\t})\n\tIt(\"should discover security groups by IDs and tags\", func() {\n\t\tnodeClass.Spec.SecurityGroupSelectorTerms = []v1.SecurityGroupSelectorTerm{\n\t\t\t{\n\t\t\t\tID:   \"sg-test1\",\n\t\t\t\tTags: map[string]string{\"foo\": \"bar\"},\n\t\t\t},\n\t\t\t{\n\t\t\t\tID:   \"sg-test2\",\n\t\t\t\tTags: map[string]string{\"foo\": \"bar\"},\n\t\t\t},\n\t\t}\n\t\tsecurityGroups, err := awsEnv.SecurityGroupProvider.List(ctx, nodeClass)\n\t\tExpect(err).To(BeNil())\n\t\tExpectConsistsOfSecurityGroups([]ec2types.SecurityGroup{\n\t\t\t{\n\t\t\t\tGroupId:   aws.String(\"sg-test1\"),\n\t\t\t\tGroupName: aws.String(\"securityGroup-test1\"),\n\t\t\t},\n\t\t\t{\n\t\t\t\tGroupId:   aws.String(\"sg-test2\"),\n\t\t\t\tGroupName: aws.String(\"securityGroup-test2\"),\n\t\t\t},\n\t\t}, securityGroups)\n\t})\n\tIt(\"should discover security groups by IDs intersected with tags\", func() {\n\t\tnodeClass.Spec.SecurityGroupSelectorTerms = []v1.SecurityGroupSelectorTerm{\n\t\t\t{\n\t\t\t\tID:   \"sg-test2\",\n\t\t\t\tTags: map[string]string{\"foo\": \"bar\"},\n\t\t\t},\n\t\t}\n\t\tsecurityGroups, err := awsEnv.SecurityGroupProvider.List(ctx, nodeClass)\n\t\tExpect(err).To(BeNil())\n\t\tExpectConsistsOfSecurityGroups([]ec2types.SecurityGroup{\n\t\t\t{\n\t\t\t\tGroupId:   aws.String(\"sg-test2\"),\n\t\t\t\tGroupName: aws.String(\"securityGroup-test2\"),\n\t\t\t},\n\t\t}, securityGroups)\n\t})\n\tIt(\"should discover security groups by names\", func() {\n\t\tnodeClass.Spec.SecurityGroupSelectorTerms = []v1.SecurityGroupSelectorTerm{\n\t\t\t{\n\t\t\t\tName: \"securityGroup-test2\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tName: \"securityGroup-test3\",\n\t\t\t},\n\t\t}\n\t\tsecurityGroups, err := awsEnv.SecurityGroupProvider.List(ctx, nodeClass)\n\t\tExpect(err).To(BeNil())\n\t\tExpectConsistsOfSecurityGroups([]ec2types.SecurityGroup{\n\t\t\t{\n\t\t\t\tGroupId:   aws.String(\"sg-test2\"),\n\t\t\t\tGroupName: aws.String(\"securityGroup-test2\"),\n\t\t\t},\n\t\t\t{\n\t\t\t\tGroupId:   aws.String(\"sg-test3\"),\n\t\t\t\tGroupName: aws.String(\"securityGroup-test3\"),\n\t\t\t},\n\t\t}, securityGroups)\n\t})\n\tIt(\"should discover security groups by names intersected with tags\", func() {\n\t\tnodeClass.Spec.SecurityGroupSelectorTerms = []v1.SecurityGroupSelectorTerm{\n\t\t\t{\n\t\t\t\tName: \"securityGroup-test3\",\n\t\t\t\tTags: map[string]string{\"TestTag\": \"*\"},\n\t\t\t},\n\t\t}\n\t\tsecurityGroups, err := awsEnv.SecurityGroupProvider.List(ctx, nodeClass)\n\t\tExpect(err).To(BeNil())\n\t\tExpectConsistsOfSecurityGroups([]ec2types.SecurityGroup{\n\t\t\t{\n\t\t\t\tGroupId:   aws.String(\"sg-test3\"),\n\t\t\t\tGroupName: aws.String(\"securityGroup-test3\"),\n\t\t\t},\n\t\t}, securityGroups)\n\t})\n\tContext(\"Provider Cache\", func() {\n\t\tIt(\"should resolve security groups from cache that are filtered by id\", func() {\n\t\t\texpectedSecurityGroups := []ec2types.SecurityGroup{\n\t\t\t\t{\n\t\t\t\t\tGroupId: aws.String(\"test-sg-id-1\"), GroupName: aws.String(\"test-sg-name-1\"),\n\t\t\t\t\tTags: []ec2types.Tag{{Key: aws.String(\"Name\"), Value: aws.String(\"test-sg-1\")}},\n\t\t\t\t},\n\t\t\t}\n\t\t\tawsEnv.EC2API.DescribeSecurityGroupsBehavior.Output.Set(&ec2.DescribeSecurityGroupsOutput{SecurityGroups: expectedSecurityGroups})\n\t\t\tfor _, sg := range expectedSecurityGroups {\n\t\t\t\tnodeClass.Spec.SecurityGroupSelectorTerms = []v1.SecurityGroupSelectorTerm{\n\t\t\t\t\t{\n\t\t\t\t\t\tID: *sg.GroupId,\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t\t// Call list to request from aws and store in the cache\n\t\t\t\t_, err := awsEnv.SecurityGroupProvider.List(ctx, nodeClass)\n\t\t\t\tExpect(err).To(BeNil())\n\t\t\t}\n\n\t\t\tExpect(awsEnv.SecurityGroupCache.Items()).To(HaveLen(1))\n\t\t\tfor _, cachedObject := range awsEnv.SecurityGroupCache.Items() {\n\t\t\t\tcachedSecurityGroup := cachedObject.Object.([]ec2types.SecurityGroup)\n\t\t\t\tExpect(cachedSecurityGroup).To(HaveLen(1))\n\t\t\t\tlo.Contains(lo.ToSlicePtr(expectedSecurityGroups), lo.ToPtr(cachedSecurityGroup[0]))\n\t\t\t}\n\t\t})\n\t\tIt(\"should resolve security groups from cache that are filtered by Name\", func() {\n\t\t\texpectedSecurityGroups := []ec2types.SecurityGroup{\n\t\t\t\t{\n\t\t\t\t\tGroupId: aws.String(\"test-sg-id-1\"), GroupName: aws.String(\"test-sg-name-1\"),\n\t\t\t\t\tTags: []ec2types.Tag{{Key: aws.String(\"Name\"), Value: aws.String(\"test-sg-1\")}},\n\t\t\t\t},\n\t\t\t}\n\t\t\tawsEnv.EC2API.DescribeSecurityGroupsBehavior.Output.Set(&ec2.DescribeSecurityGroupsOutput{SecurityGroups: expectedSecurityGroups})\n\t\t\tfor _, sg := range expectedSecurityGroups {\n\t\t\t\tnodeClass.Spec.SecurityGroupSelectorTerms = []v1.SecurityGroupSelectorTerm{\n\t\t\t\t\t{\n\t\t\t\t\t\tName: *sg.GroupName,\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t\t// Call list to request from aws and store in the cache\n\t\t\t\t_, err := awsEnv.SecurityGroupProvider.List(ctx, nodeClass)\n\t\t\t\tExpect(err).To(BeNil())\n\t\t\t}\n\n\t\t\tExpect(awsEnv.SecurityGroupCache.Items()).To(HaveLen(1))\n\t\t\tfor _, cachedObject := range awsEnv.SecurityGroupCache.Items() {\n\t\t\t\tcachedSecurityGroup := cachedObject.Object.([]ec2types.SecurityGroup)\n\t\t\t\tExpect(cachedSecurityGroup).To(HaveLen(1))\n\t\t\t\tlo.Contains(lo.ToSlicePtr(expectedSecurityGroups), lo.ToPtr(cachedSecurityGroup[0]))\n\t\t\t}\n\t\t})\n\t\tIt(\"should resolve security groups from cache that are filtered by tags\", func() {\n\t\t\texpectedSecurityGroups := []ec2types.SecurityGroup{\n\t\t\t\t{\n\t\t\t\t\tGroupId: aws.String(\"test-sg-id-1\"), GroupName: aws.String(\"test-sg-name-1\"),\n\t\t\t\t\tTags: []ec2types.Tag{{Key: aws.String(\"Name\"), Value: aws.String(\"test-sg-1\")}},\n\t\t\t\t},\n\t\t\t}\n\t\t\tawsEnv.EC2API.DescribeSecurityGroupsBehavior.Output.Set(&ec2.DescribeSecurityGroupsOutput{SecurityGroups: expectedSecurityGroups})\n\t\t\ttagSet := lo.Map(expectedSecurityGroups, func(sg ec2types.SecurityGroup, _ int) map[string]string {\n\t\t\t\ttag, _ := lo.Find(sg.Tags, func(tag ec2types.Tag) bool {\n\t\t\t\t\treturn lo.FromPtr(tag.Key) == \"Name\"\n\t\t\t\t})\n\t\t\t\treturn map[string]string{\"Name\": lo.FromPtr(tag.Value)}\n\t\t\t})\n\t\t\tfor _, tag := range tagSet {\n\t\t\t\tnodeClass.Spec.SecurityGroupSelectorTerms = []v1.SecurityGroupSelectorTerm{\n\t\t\t\t\t{\n\t\t\t\t\t\tTags: tag,\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t\t// Call list to request from aws and store in the cache\n\t\t\t\t_, err := awsEnv.SecurityGroupProvider.List(ctx, nodeClass)\n\t\t\t\tExpect(err).To(BeNil())\n\t\t\t}\n\n\t\t\tExpect(awsEnv.SecurityGroupCache.Items()).To(HaveLen(1))\n\t\t\tfor _, cachedObject := range awsEnv.SecurityGroupCache.Items() {\n\t\t\t\tcachedSecurityGroup := cachedObject.Object.([]ec2types.SecurityGroup)\n\t\t\t\tExpect(cachedSecurityGroup).To(HaveLen(1))\n\t\t\t\tlo.Contains(lo.ToSlicePtr(expectedSecurityGroups), lo.ToPtr(cachedSecurityGroup[0]))\n\t\t\t}\n\t\t})\n\t\tIt(\"should correctly disambiguate AND vs OR semantics for tags\", func() {\n\t\t\t// AND semantics\n\t\t\tawsEnv.EC2API.DescribeSecurityGroupsBehavior.MultiOut.Add(&ec2.DescribeSecurityGroupsOutput{SecurityGroups: []ec2types.SecurityGroup{\n\t\t\t\t{GroupName: aws.String(\"test-sgName-3\"), GroupId: aws.String(\"test-sg-3\"), Tags: []ec2types.Tag{{Key: aws.String(\"tag-key-1\"), Value: aws.String(\"tag-value-1\")}, {Key: aws.String(\"tag-key-2\"), Value: aws.String(\"tag-value-2\")}}},\n\t\t\t}})\n\t\t\tnodeClass.Spec.SecurityGroupSelectorTerms = []v1.SecurityGroupSelectorTerm{\n\t\t\t\t{\n\t\t\t\t\tTags: map[string]string{\"tag-key-1\": \"tag-value-1\", \"tag-key-2\": \"tag-value-2\"},\n\t\t\t\t},\n\t\t\t}\n\t\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\t\tsecurityGroups, err := awsEnv.SecurityGroupProvider.List(ctx, nodeClass)\n\t\t\tExpect(err).To(BeNil())\n\t\t\tExpectConsistsOfSecurityGroups([]ec2types.SecurityGroup{\n\t\t\t\t{\n\t\t\t\t\tGroupId:   aws.String(\"test-sg-3\"),\n\t\t\t\t\tGroupName: aws.String(\"test-sgName-3\"),\n\t\t\t\t},\n\t\t\t}, securityGroups)\n\n\t\t\t// OR semantics\n\t\t\tawsEnv.EC2API.DescribeSecurityGroupsBehavior.MultiOut.Add(&ec2.DescribeSecurityGroupsOutput{SecurityGroups: []ec2types.SecurityGroup{\n\t\t\t\t{GroupName: aws.String(\"test-sgName-2\"), GroupId: aws.String(\"test-sg-2\"), Tags: []ec2types.Tag{{Key: aws.String(\"tag-key-2\"), Value: aws.String(\"tag-value-2\")}}},\n\t\t\t}})\n\t\t\tawsEnv.EC2API.DescribeSecurityGroupsBehavior.MultiOut.Add(&ec2.DescribeSecurityGroupsOutput{SecurityGroups: []ec2types.SecurityGroup{\n\t\t\t\t{GroupName: aws.String(\"test-sgName-1\"), GroupId: aws.String(\"test-sg-1\"), Tags: []ec2types.Tag{{Key: aws.String(\"tag-key-1\"), Value: aws.String(\"tag-value-1\")}}},\n\t\t\t}})\n\t\t\tnodeClass.Spec.SecurityGroupSelectorTerms = []v1.SecurityGroupSelectorTerm{\n\t\t\t\t{\n\t\t\t\t\tTags: map[string]string{\"tag-key-1\": \"tag-value-1\"},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tTags: map[string]string{\"tag-key-2\": \"tag-value-2\"},\n\t\t\t\t},\n\t\t\t}\n\t\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\t\tsecurityGroups, err = awsEnv.SecurityGroupProvider.List(ctx, nodeClass)\n\t\t\tExpect(err).To(BeNil())\n\t\t\tExpectConsistsOfSecurityGroups([]ec2types.SecurityGroup{\n\t\t\t\t{\n\t\t\t\t\tGroupId:   aws.String(\"test-sg-1\"),\n\t\t\t\t\tGroupName: aws.String(\"test-sgName-1\"),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tGroupId:   aws.String(\"test-sg-2\"),\n\t\t\t\t\tGroupName: aws.String(\"test-sgName-2\"),\n\t\t\t\t},\n\t\t\t}, securityGroups)\n\n\t\t\tcacheItems := awsEnv.SecurityGroupCache.Items()\n\t\t\t// There should be 2 cache entries one for each semantic.\n\t\t\tExpect(cacheItems).To(HaveLen(2))\n\t\t\t// Extract cached security group arrays for comparison\n\t\t\tcachedSecurityGroups := make([][]ec2types.SecurityGroup, 0, len(cacheItems))\n\t\t\tfor _, item := range cacheItems {\n\t\t\t\tcachedSecurityGroups = append(cachedSecurityGroups, item.Object.([]ec2types.SecurityGroup))\n\t\t\t}\n\t\t\t// Expect cache to contain result of both look ups.\n\t\t\tExpect(cachedSecurityGroups).To(ContainElement(ContainElements(\n\t\t\t\t[]ec2types.SecurityGroup{\n\t\t\t\t\t{\n\t\t\t\t\t\tGroupId:   aws.String(\"test-sg-1\"),\n\t\t\t\t\t\tGroupName: aws.String(\"test-sgName-1\"),\n\t\t\t\t\t\tTags:      []ec2types.Tag{{Key: aws.String(\"tag-key-1\"), Value: aws.String(\"tag-value-1\")}},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tGroupId:   aws.String(\"test-sg-2\"),\n\t\t\t\t\t\tGroupName: aws.String(\"test-sgName-2\"),\n\t\t\t\t\t\tTags:      []ec2types.Tag{{Key: aws.String(\"tag-key-2\"), Value: aws.String(\"tag-value-2\")}},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t)))\n\t\t\tExpect(cachedSecurityGroups).To(ContainElement(\n\t\t\t\t[]ec2types.SecurityGroup{\n\t\t\t\t\t{\n\t\t\t\t\t\tGroupId:   aws.String(\"test-sg-3\"),\n\t\t\t\t\t\tGroupName: aws.String(\"test-sgName-3\"),\n\t\t\t\t\t\tTags:      []ec2types.Tag{{Key: aws.String(\"tag-key-1\"), Value: aws.String(\"tag-value-1\")}, {Key: aws.String(\"tag-key-2\"), Value: aws.String(\"tag-value-2\")}},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t))\n\t\t})\n\t})\n\tIt(\"should not cause data races when calling List() simultaneously\", func() {\n\t\twg := sync.WaitGroup{}\n\t\tfor range 10000 {\n\t\t\twg.Go(func() {\n\t\t\t\tdefer GinkgoRecover()\n\t\t\t\tsecurityGroups, err := awsEnv.SecurityGroupProvider.List(ctx, nodeClass)\n\t\t\t\tExpect(err).ToNot(HaveOccurred())\n\n\t\t\t\tExpect(securityGroups).To(HaveLen(3))\n\t\t\t\t// Sort everything in parallel and ensure that we don't get data races\n\t\t\t\tsort.Slice(securityGroups, func(i, j int) bool {\n\t\t\t\t\treturn *securityGroups[i].GroupId < *securityGroups[j].GroupId\n\t\t\t\t})\n\t\t\t\tExpect(securityGroups).To(BeEquivalentTo([]ec2types.SecurityGroup{\n\t\t\t\t\t{\n\t\t\t\t\t\tGroupId:   lo.ToPtr(\"sg-test1\"),\n\t\t\t\t\t\tGroupName: lo.ToPtr(\"securityGroup-test1\"),\n\t\t\t\t\t\tTags: []ec2types.Tag{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tKey:   lo.ToPtr(\"Name\"),\n\t\t\t\t\t\t\t\tValue: lo.ToPtr(\"test-security-group-1\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tKey:   lo.ToPtr(\"foo\"),\n\t\t\t\t\t\t\t\tValue: lo.ToPtr(\"bar\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tGroupId:   lo.ToPtr(\"sg-test2\"),\n\t\t\t\t\t\tGroupName: lo.ToPtr(\"securityGroup-test2\"),\n\t\t\t\t\t\tTags: []ec2types.Tag{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tKey:   lo.ToPtr(\"Name\"),\n\t\t\t\t\t\t\t\tValue: lo.ToPtr(\"test-security-group-2\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tKey:   lo.ToPtr(\"foo\"),\n\t\t\t\t\t\t\t\tValue: lo.ToPtr(\"bar\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tGroupId:   lo.ToPtr(\"sg-test3\"),\n\t\t\t\t\t\tGroupName: lo.ToPtr(\"securityGroup-test3\"),\n\t\t\t\t\t\tTags: []ec2types.Tag{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tKey:   lo.ToPtr(\"Name\"),\n\t\t\t\t\t\t\t\tValue: lo.ToPtr(\"test-security-group-3\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tKey: lo.ToPtr(\"TestTag\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tKey:   lo.ToPtr(\"foo\"),\n\t\t\t\t\t\t\t\tValue: lo.ToPtr(\"bar\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t}))\n\t\t\t})\n\t\t}\n\t\twg.Wait()\n\t})\n\tIt(\"should handle empty pages when describing security groups\", func() {\n\t\tawsEnv.EC2API.DescribeSecurityGroupsBehavior.OutputPages.Add(&ec2.DescribeSecurityGroupsOutput{SecurityGroups: []ec2types.SecurityGroup{}})\n\t\tawsEnv.EC2API.DescribeSecurityGroupsBehavior.OutputPages.Add(\n\t\t\t&ec2.DescribeSecurityGroupsOutput{\n\t\t\t\tSecurityGroups: []ec2types.SecurityGroup{\n\t\t\t\t\t{\n\t\t\t\t\t\tGroupId:   aws.String(\"test-sg-1000\"),\n\t\t\t\t\t\tGroupName: aws.String(\"test-sgName-1000\"),\n\t\t\t\t\t\tTags: []ec2types.Tag{\n\t\t\t\t\t\t\t{Key: aws.String(\"Name\"), Value: aws.String(\"test-security-group-1000\")},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t)\n\t\tsecurityGroups, err := awsEnv.SecurityGroupProvider.List(ctx, nodeClass)\n\t\tExpect(err).To(BeNil())\n\t\tExpectConsistsOfSecurityGroups([]ec2types.SecurityGroup{\n\t\t\t{\n\t\t\t\tGroupId:   aws.String(\"test-sg-1000\"),\n\t\t\t\tGroupName: aws.String(\"test-sgName-1000\"),\n\t\t\t},\n\t\t}, securityGroups)\n\t\tExpect(awsEnv.EC2API.DescribeSecurityGroupsBehavior.Calls()).To(Equal(2))\n\t})\n\tIt(\"should not overwrite found values when handling multiple pages of security groups\", func() {\n\t\tawsEnv.EC2API.DescribeSecurityGroupsBehavior.OutputPages.Add(&ec2.DescribeSecurityGroupsOutput{\n\t\t\tSecurityGroups: []ec2types.SecurityGroup{\n\t\t\t\t{\n\t\t\t\t\tGroupId:   aws.String(\"test-sg-1\"),\n\t\t\t\t\tGroupName: aws.String(\"test-sgName-1\"),\n\t\t\t\t\tTags: []ec2types.Tag{\n\t\t\t\t\t\t{Key: aws.String(\"Name\"), Value: aws.String(\"test-security-group-1\")},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tawsEnv.EC2API.DescribeSecurityGroupsBehavior.OutputPages.Add(\n\t\t\t&ec2.DescribeSecurityGroupsOutput{\n\t\t\t\tSecurityGroups: []ec2types.SecurityGroup{\n\t\t\t\t\t{\n\t\t\t\t\t\tGroupId:   aws.String(\"test-sg-2\"),\n\t\t\t\t\t\tGroupName: aws.String(\"test-sgName-2\"),\n\t\t\t\t\t\tTags: []ec2types.Tag{\n\t\t\t\t\t\t\t{Key: aws.String(\"Name\"), Value: aws.String(\"test-security-group-2\")},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t)\n\t\tawsEnv.EC2API.DescribeSecurityGroupsBehavior.OutputPages.Add(\n\t\t\t&ec2.DescribeSecurityGroupsOutput{\n\t\t\t\tSecurityGroups: []ec2types.SecurityGroup{\n\t\t\t\t\t{\n\t\t\t\t\t\tGroupId:   aws.String(\"test-sg-3\"),\n\t\t\t\t\t\tGroupName: aws.String(\"test-sgName-3\"),\n\t\t\t\t\t\tTags: []ec2types.Tag{\n\t\t\t\t\t\t\t{Key: aws.String(\"Name\"), Value: aws.String(\"test-security-group-3\")},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t)\n\t\tsecurityGroups, err := awsEnv.SecurityGroupProvider.List(ctx, nodeClass)\n\t\tExpect(err).To(BeNil())\n\t\tExpectConsistsOfSecurityGroups([]ec2types.SecurityGroup{\n\t\t\t{\n\t\t\t\tGroupId:   aws.String(\"test-sg-1\"),\n\t\t\t\tGroupName: aws.String(\"test-sgName-1\"),\n\t\t\t},\n\t\t\t{\n\t\t\t\tGroupId:   aws.String(\"test-sg-2\"),\n\t\t\t\tGroupName: aws.String(\"test-sgName-2\"),\n\t\t\t},\n\t\t\t{\n\t\t\t\tGroupId:   aws.String(\"test-sg-3\"),\n\t\t\t\tGroupName: aws.String(\"test-sgName-3\"),\n\t\t\t},\n\t\t}, securityGroups)\n\t\tExpect(awsEnv.EC2API.DescribeSecurityGroupsBehavior.Calls()).To(Equal(3))\n\t})\n})\n\nfunc ExpectConsistsOfSecurityGroups(expected, actual []ec2types.SecurityGroup) {\n\tGinkgoHelper()\n\tExpect(actual).To(HaveLen(len(expected)))\n\tfor _, elem := range expected {\n\t\t_, ok := lo.Find(actual, func(s ec2types.SecurityGroup) bool {\n\t\t\treturn lo.FromPtr(s.GroupId) == lo.FromPtr(elem.GroupId) &&\n\t\t\t\tlo.FromPtr(s.GroupName) == lo.FromPtr(elem.GroupName)\n\t\t})\n\t\tExpect(ok).To(BeTrue(), `Expected security group with {\"GroupId\": %q, \"GroupName\": %q} to exist`, lo.FromPtr(elem.GroupId), lo.FromPtr(elem.GroupName))\n\t}\n}\n"
  },
  {
    "path": "pkg/providers/sqs/sqs.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage sqs\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"strings\"\n\n\t\"github.com/aws/aws-sdk-go-v2/aws\"\n\t\"github.com/aws/aws-sdk-go-v2/service/sqs\"\n\tsqstypes \"github.com/aws/aws-sdk-go-v2/service/sqs/types\"\n\t\"github.com/samber/lo\"\n\n\tsdk \"github.com/aws/karpenter-provider-aws/pkg/aws\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/operator/options\"\n)\n\ntype Provider interface {\n\tName() string\n\tGetSQSMessages(context.Context) ([]*sqstypes.Message, error)\n\tSendMessage(context.Context, any) (string, error)\n\tDeleteSQSMessage(context.Context, *sqstypes.Message) error\n}\n\ntype DefaultProvider struct {\n\tclient sdk.SQSAPI\n\n\tqueueURL string\n}\n\nfunc NewDefaultProvider(client sdk.SQSAPI, queueURL string) (*DefaultProvider, error) {\n\treturn &DefaultProvider{\n\t\tclient:   client,\n\t\tqueueURL: queueURL,\n\t}, nil\n}\n\nfunc (p *DefaultProvider) Name() string {\n\tss := strings.Split(p.queueURL, \"/\")\n\treturn ss[len(ss)-1]\n}\n\nfunc (p *DefaultProvider) GetSQSMessages(ctx context.Context) ([]*sqstypes.Message, error) {\n\tinput := &sqs.ReceiveMessageInput{\n\t\tMaxNumberOfMessages: int32(10),\n\t\tVisibilityTimeout:   int32(20), // Seconds\n\t\tWaitTimeSeconds:     int32(20), // Seconds, maximum for long polling\n\t\tAttributeNames: []sqstypes.QueueAttributeName{\n\t\t\tsqstypes.QueueAttributeName(sqstypes.MessageSystemAttributeNameSentTimestamp),\n\t\t},\n\t\tMessageAttributeNames: []string{\n\t\t\tstring(sqstypes.QueueAttributeNameAll),\n\t\t},\n\t\tQueueUrl: aws.String(p.queueURL),\n\t}\n\n\tresult, err := p.client.ReceiveMessage(ctx, input)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"receiving sqs messages, %w\", err)\n\t}\n\n\treturn lo.ToSlicePtr(result.Messages), nil\n}\n\nfunc (p *DefaultProvider) SendMessage(ctx context.Context, body any) (string, error) {\n\traw, err := json.Marshal(body)\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"marshaling the passed body as json, %w\", err)\n\t}\n\tinput := &sqs.SendMessageInput{\n\t\tMessageBody: aws.String(string(raw)),\n\t\tQueueUrl:    aws.String(p.queueURL),\n\t}\n\tresult, err := p.client.SendMessage(ctx, input)\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"sending messages to sqs queue, %w\", err)\n\t}\n\treturn aws.ToString(result.MessageId), nil\n}\n\nfunc (p *DefaultProvider) DeleteSQSMessage(ctx context.Context, msg *sqstypes.Message) error {\n\tinput := &sqs.DeleteMessageInput{\n\t\tQueueUrl:      aws.String(p.queueURL),\n\t\tReceiptHandle: msg.ReceiptHandle,\n\t}\n\n\tif _, err := p.client.DeleteMessage(ctx, input); err != nil {\n\t\treturn fmt.Errorf(\"deleting messages from sqs queue, %w\", err)\n\t}\n\treturn nil\n}\n\nfunc NewSQSProvider(ctx context.Context, sqsapi *sqs.Client) (Provider, error) {\n\tout, err := sqsapi.GetQueueUrl(ctx, &sqs.GetQueueUrlInput{QueueName: lo.ToPtr(options.FromContext(ctx).InterruptionQueue)})\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn NewDefaultProvider(sqsapi, lo.FromPtr(out.QueueUrl))\n}\n"
  },
  {
    "path": "pkg/providers/ssm/provider.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage ssm\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"sync\"\n\n\t\"github.com/awslabs/operatorpkg/serrors\"\n\t\"github.com/patrickmn/go-cache\"\n\t\"github.com/samber/lo\"\n\t\"sigs.k8s.io/controller-runtime/pkg/log\"\n\n\tsdk \"github.com/aws/karpenter-provider-aws/pkg/aws\"\n)\n\ntype Provider interface {\n\tGet(context.Context, Parameter) (string, error)\n}\n\ntype DefaultProvider struct {\n\tsync.Mutex\n\tcache  *cache.Cache\n\tssmapi sdk.SSMAPI\n}\n\nfunc NewDefaultProvider(ssmapi sdk.SSMAPI, cache *cache.Cache) *DefaultProvider {\n\treturn &DefaultProvider{\n\t\tssmapi: ssmapi,\n\t\tcache:  cache,\n\t}\n}\n\nfunc (p *DefaultProvider) Get(ctx context.Context, parameter Parameter) (string, error) {\n\tp.Lock()\n\tdefer p.Unlock()\n\tif entry, ok := p.cache.Get(parameter.CacheKey()); ok {\n\t\treturn entry.(CacheEntry).Value, nil\n\t}\n\tresult, err := p.ssmapi.GetParameter(ctx, parameter.GetParameterInput())\n\tif err != nil {\n\t\treturn \"\", serrors.Wrap(fmt.Errorf(\"getting ssm parameter, %w\", err), \"parameter\", parameter.Name)\n\t}\n\tp.cache.Set(parameter.CacheKey(), CacheEntry{\n\t\tParameter: parameter,\n\t\tValue:     lo.FromPtr(result.Parameter.Value),\n\t}, parameter.GetCacheDuration())\n\tlog.FromContext(ctx).WithValues(\"parameter\", parameter.Name, \"value\", result.Parameter.Value).Info(\"discovered ssm parameter\")\n\treturn lo.FromPtr(result.Parameter.Value), nil\n}\n"
  },
  {
    "path": "pkg/providers/ssm/types.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage ssm\n\nimport (\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go-v2/service/ssm\"\n\t\"github.com/samber/lo\"\n)\n\nconst (\n\tCustomParameterType = \"custom\"\n)\n\ntype Parameter struct {\n\tName string\n\tType string\n\t// IsMutable indicates if the value associated with an SSM parameter is expected to change. An example of a mutable\n\t// parameter would be any of the \"latest\" or \"recommended\" AMI parameters which are updated each time a new AMI is\n\t// released. On the otherhand, we would consider a parameter parameter for a specific AMI version to be immutable.\n\tIsMutable bool\n}\n\nfunc (p *Parameter) GetParameterInput() *ssm.GetParameterInput {\n\treturn &ssm.GetParameterInput{\n\t\tName: lo.ToPtr(p.Name),\n\t}\n}\n\nfunc (p *Parameter) CacheKey() string {\n\treturn p.Name\n}\n\n// GetCacheDuration returns the appropriate cache duration based on the parameter type\nfunc (p Parameter) GetCacheDuration() time.Duration {\n\tif p.Type == CustomParameterType {\n\t\treturn 5 * time.Minute\n\t}\n\treturn 24 * time.Hour\n}\n\ntype CacheEntry struct {\n\tParameter Parameter\n\tValue     string\n}\n"
  },
  {
    "path": "pkg/providers/subnet/subnet.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage subnet\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"sync\"\n\n\t\"github.com/aws/aws-sdk-go-v2/aws\"\n\t\"github.com/aws/aws-sdk-go-v2/service/ec2\"\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\t\"github.com/awslabs/operatorpkg/serrors\"\n\n\t\"github.com/patrickmn/go-cache\"\n\t\"github.com/samber/lo\"\n\tcorev1 \"k8s.io/api/core/v1\"\n\t\"sigs.k8s.io/controller-runtime/pkg/log\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/utils\"\n\n\tkarpv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n\t\"sigs.k8s.io/karpenter/pkg/cloudprovider\"\n\t\"sigs.k8s.io/karpenter/pkg/scheduling\"\n\t\"sigs.k8s.io/karpenter/pkg/utils/pretty\"\n\n\tsdk \"github.com/aws/karpenter-provider-aws/pkg/aws\"\n)\n\ntype Provider interface {\n\tLivenessProbe(*http.Request) error\n\tList(context.Context, *v1.EC2NodeClass) ([]ec2types.Subnet, error)\n\tZonalSubnetsForLaunch(context.Context, *v1.EC2NodeClass, []*cloudprovider.InstanceType, string) (map[string]*Subnet, error)\n\tUpdateInflightIPs(*ec2.CreateFleetInput, *ec2.CreateFleetOutput, []*cloudprovider.InstanceType, []*Subnet, string)\n}\n\ntype DefaultProvider struct {\n\tsync.Mutex\n\tec2api                        sdk.EC2API\n\tcache                         *cache.Cache\n\tavailableIPAddressCache       *cache.Cache\n\tassociatePublicIPAddressCache *cache.Cache\n\tcm                            *pretty.ChangeMonitor\n\tinflightIPs                   map[string]int32\n}\n\ntype Subnet struct {\n\tID                      string\n\tZone                    string\n\tZoneID                  string\n\tAvailableIPAddressCount int32\n}\n\nfunc NewDefaultProvider(ec2api sdk.EC2API, cache *cache.Cache, availableIPAddressCache *cache.Cache, associatePublicIPAddressCache *cache.Cache) *DefaultProvider {\n\treturn &DefaultProvider{\n\t\tec2api: ec2api,\n\t\tcm:     pretty.NewChangeMonitor(),\n\t\t// TODO: Remove cache when we utilize the resolved subnets from the EC2NodeClass.status\n\t\t// Subnets are sorted on AvailableIpAddressCount, descending order\n\t\tcache:                         cache,\n\t\tavailableIPAddressCache:       availableIPAddressCache,\n\t\tassociatePublicIPAddressCache: associatePublicIPAddressCache,\n\t\t// inflightIPs is used to track IPs from known launched instances\n\t\tinflightIPs: map[string]int32{},\n\t}\n}\n\nfunc (p *DefaultProvider) List(ctx context.Context, nodeClass *v1.EC2NodeClass) ([]ec2types.Subnet, error) {\n\tp.Lock()\n\tdefer p.Unlock()\n\tfilterSets := getFilterSets(nodeClass.Spec.SubnetSelectorTerms)\n\tif len(filterSets) == 0 {\n\t\treturn []ec2types.Subnet{}, nil\n\t}\n\thash := utils.GetNodeClassHash(nodeClass)\n\tif subnets, ok := p.cache.Get(hash); ok {\n\t\t// Ensure what's returned from this function is a shallow-copy of the slice (not a deep-copy of the data itself)\n\t\t// so that modifications to the ordering of the data don't affect the original\n\t\treturn append([]ec2types.Subnet{}, subnets.([]ec2types.Subnet)...), nil\n\t}\n\t// Ensure that all the subnets that are returned here are unique\n\tsubnets := map[string]ec2types.Subnet{}\n\tfor _, filters := range filterSets {\n\t\tpaginator := ec2.NewDescribeSubnetsPaginator(p.ec2api, &ec2.DescribeSubnetsInput{\n\t\t\tFilters:    filters,\n\t\t\tMaxResults: lo.ToPtr(int32(500)),\n\t\t})\n\t\tfor paginator.HasMorePages() {\n\t\t\toutput, err := paginator.NextPage(ctx)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, serrors.Wrap(fmt.Errorf(\"describing subnets with filters, %w\", err), \"filters\", pretty.Concise(filters))\n\t\t\t}\n\t\t\tfor i := range output.Subnets {\n\t\t\t\tsubnets[lo.FromPtr(output.Subnets[i].SubnetId)] = output.Subnets[i]\n\t\t\t\tp.availableIPAddressCache.SetDefault(lo.FromPtr(output.Subnets[i].SubnetId), lo.FromPtr(output.Subnets[i].AvailableIpAddressCount))\n\t\t\t\tp.associatePublicIPAddressCache.SetDefault(lo.FromPtr(output.Subnets[i].SubnetId), lo.FromPtr(output.Subnets[i].MapPublicIpOnLaunch))\n\t\t\t\t// subnets can be leaked here, if a subnets is never called received from ec2\n\t\t\t\t// we are accepting it for now, as this will be an insignificant amount of memory\n\t\t\t\tdelete(p.inflightIPs, lo.FromPtr(output.Subnets[i].SubnetId)) // remove any previously tracked IP addresses since we just refreshed from EC2\n\t\t\t}\n\t\t}\n\t}\n\tp.cache.SetDefault(hash, lo.Values(subnets))\n\tif p.cm.HasChanged(fmt.Sprintf(\"subnets/%s\", nodeClass.Name), lo.Keys(subnets)) {\n\t\tlog.FromContext(ctx).\n\t\t\tWithValues(\"subnets\", lo.Map(lo.Values(subnets), func(s ec2types.Subnet, _ int) v1.Subnet {\n\t\t\t\treturn v1.Subnet{\n\t\t\t\t\tID:     lo.FromPtr(s.SubnetId),\n\t\t\t\t\tZone:   lo.FromPtr(s.AvailabilityZone),\n\t\t\t\t\tZoneID: lo.FromPtr(s.AvailabilityZoneId),\n\t\t\t\t}\n\t\t\t})).V(1).Info(\"discovered subnets\")\n\t}\n\treturn lo.Values(subnets), nil\n}\n\n// ZonalSubnetsForLaunch returns a mapping of zone to the subnet with the most available IP addresses and deducts the passed ips from the available count\nfunc (p *DefaultProvider) ZonalSubnetsForLaunch(ctx context.Context, nodeClass *v1.EC2NodeClass, instanceTypes []*cloudprovider.InstanceType, capacityType string) (map[string]*Subnet, error) {\n\tif len(nodeClass.Status.Subnets) == 0 {\n\t\treturn nil, fmt.Errorf(\"no subnets matched selector %v\", nodeClass.Spec.SubnetSelectorTerms)\n\t}\n\n\tp.Lock()\n\tdefer p.Unlock()\n\n\tzonalSubnets := map[string]*Subnet{}\n\tavailableIPAddressCount := map[string]int32{}\n\tfor _, subnet := range nodeClass.Status.Subnets {\n\t\tif subnetAvailableIP, ok := p.availableIPAddressCache.Get(subnet.ID); ok {\n\t\t\tavailableIPAddressCount[subnet.ID] = subnetAvailableIP.(int32)\n\t\t}\n\t}\n\n\tfor _, subnet := range nodeClass.Status.Subnets {\n\t\tif v, ok := zonalSubnets[subnet.Zone]; ok {\n\t\t\tcurrentZonalSubnetIPAddressCount := v.AvailableIPAddressCount\n\t\t\tnewZonalSubnetIPAddressCount := availableIPAddressCount[subnet.ID]\n\t\t\tif ips, ok := p.inflightIPs[v.ID]; ok {\n\t\t\t\tcurrentZonalSubnetIPAddressCount = ips\n\t\t\t}\n\t\t\tif ips, ok := p.inflightIPs[subnet.ID]; ok {\n\t\t\t\tnewZonalSubnetIPAddressCount = ips\n\t\t\t}\n\n\t\t\tif currentZonalSubnetIPAddressCount >= newZonalSubnetIPAddressCount {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\t\tzonalSubnets[subnet.Zone] = &Subnet{ID: subnet.ID, Zone: subnet.Zone, ZoneID: subnet.ZoneID, AvailableIPAddressCount: availableIPAddressCount[subnet.ID]}\n\t}\n\n\tfor _, subnet := range zonalSubnets {\n\t\tpredictedIPsUsed := p.minPods(instanceTypes, scheduling.NewRequirements(\n\t\t\tscheduling.NewRequirement(karpv1.CapacityTypeLabelKey, corev1.NodeSelectorOpIn, capacityType),\n\t\t\tscheduling.NewRequirement(corev1.LabelTopologyZone, corev1.NodeSelectorOpIn, subnet.Zone),\n\t\t))\n\t\tprevIPs := subnet.AvailableIPAddressCount\n\t\tif trackedIPs, ok := p.inflightIPs[subnet.ID]; ok {\n\t\t\tprevIPs = trackedIPs\n\t\t}\n\t\tp.inflightIPs[subnet.ID] = prevIPs - predictedIPsUsed\n\t}\n\treturn zonalSubnets, nil\n}\n\n// UpdateInflightIPs is used to refresh the in-memory IP usage by adding back unused IPs after a CreateFleet response is returned\nfunc (p *DefaultProvider) UpdateInflightIPs(createFleetInput *ec2.CreateFleetInput, createFleetOutput *ec2.CreateFleetOutput, instanceTypes []*cloudprovider.InstanceType,\n\tsubnets []*Subnet, capacityType string) {\n\tp.Lock()\n\tdefer p.Unlock()\n\n\t// Process the CreateFleetInput to pull out all the requested subnetIDs\n\tfleetInputSubnets := lo.Compact(lo.Uniq(lo.FlatMap(createFleetInput.LaunchTemplateConfigs, func(req ec2types.FleetLaunchTemplateConfigRequest, _ int) []string {\n\t\treturn lo.Map(req.Overrides, func(override ec2types.FleetLaunchTemplateOverridesRequest, _ int) string {\n\t\t\treturn lo.FromPtr(override.SubnetId)\n\t\t})\n\t})))\n\n\t// Process the CreateFleetOutput to pull out all the fulfilled subnetIDs\n\tvar fleetOutputSubnets []string\n\tif createFleetOutput != nil {\n\t\tfleetOutputSubnets = lo.Compact(lo.Uniq(lo.Map(createFleetOutput.Instances, func(fleetInstance ec2types.CreateFleetInstance, _ int) string {\n\t\t\tif fleetInstance.LaunchTemplateAndOverrides == nil || fleetInstance.LaunchTemplateAndOverrides.Overrides == nil {\n\t\t\t\treturn \"\"\n\t\t\t}\n\t\t\treturn lo.FromPtr(fleetInstance.LaunchTemplateAndOverrides.Overrides.SubnetId)\n\t\t})))\n\t}\n\n\t// 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\n\tsubnetIDsToAddBackIPs, _ := lo.Difference(fleetInputSubnets, fleetOutputSubnets)\n\n\t// Aggregate all the cached subnets ip address count\n\tcachedAvailableIPAddressMap := lo.MapEntries(p.availableIPAddressCache.Items(), func(k string, v cache.Item) (string, int32) {\n\t\treturn k, v.Object.(int32)\n\t})\n\n\t// Update the inflight IP tracking of subnets stored in the cache that have not be synchronized since the initial\n\t// deduction of IP addresses before the instance launch\n\tfor cachedSubnetID, cachedIPAddressCount := range cachedAvailableIPAddressMap {\n\t\tif !lo.Contains(subnetIDsToAddBackIPs, cachedSubnetID) {\n\t\t\tcontinue\n\t\t}\n\t\toriginalSubnet, ok := lo.Find(subnets, func(subnet *Subnet) bool {\n\t\t\treturn subnet.ID == cachedSubnetID\n\t\t})\n\t\tif !ok {\n\t\t\tcontinue\n\t\t}\n\t\t// If the cached subnet IP address count hasn't changed from the original subnet used to\n\t\t// launch the instance, then we need to update the tracked IPs\n\t\tif originalSubnet.AvailableIPAddressCount == cachedIPAddressCount {\n\t\t\t// other IPs deducted were opportunistic and need to be readded since Fleet didn't pick those subnets to launch into\n\t\t\tif ips, ok := p.inflightIPs[originalSubnet.ID]; ok {\n\t\t\t\tminPods := p.minPods(instanceTypes, scheduling.NewRequirements(\n\t\t\t\t\tscheduling.NewRequirement(karpv1.CapacityTypeLabelKey, corev1.NodeSelectorOpIn, capacityType),\n\t\t\t\t\tscheduling.NewRequirement(corev1.LabelTopologyZone, corev1.NodeSelectorOpIn, originalSubnet.Zone),\n\t\t\t\t))\n\t\t\t\tp.inflightIPs[originalSubnet.ID] = ips + minPods\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunc (p *DefaultProvider) LivenessProbe(_ *http.Request) error {\n\tp.Lock()\n\t//nolint: staticcheck\n\tp.Unlock()\n\treturn nil\n}\n\nfunc (p *DefaultProvider) minPods(instanceTypes []*cloudprovider.InstanceType, reqs scheduling.Requirements) int32 {\n\t// filter for instance types available in the zone and capacity type being requested\n\tfilteredInstanceTypes := lo.Filter(instanceTypes, func(it *cloudprovider.InstanceType, _ int) bool {\n\t\treturn it.Offerings.Available().HasCompatible(reqs)\n\t})\n\tif len(filteredInstanceTypes) == 0 {\n\t\treturn 0\n\t}\n\t// Get minimum pods to use when selecting a subnet and deducting what will be launched\n\tpods, _ := lo.MinBy(filteredInstanceTypes, func(i *cloudprovider.InstanceType, j *cloudprovider.InstanceType) bool {\n\t\treturn i.Capacity.Pods().Cmp(*j.Capacity.Pods()) < 0\n\t}).Capacity.Pods().AsInt64()\n\t//nolint:gosec\n\treturn int32(pods)\n}\n\nfunc getFilterSets(terms []v1.SubnetSelectorTerm) (res [][]ec2types.Filter) {\n\tidFilter := ec2types.Filter{Name: aws.String(\"subnet-id\")}\n\tfor _, term := range terms {\n\t\tswitch {\n\t\tcase term.ID != \"\":\n\t\t\tidFilter.Values = append(idFilter.Values, term.ID)\n\t\tdefault:\n\t\t\tvar filters []ec2types.Filter\n\t\t\tfor k, v := range term.Tags {\n\t\t\t\tif v == \"*\" {\n\t\t\t\t\tfilters = append(filters, ec2types.Filter{\n\t\t\t\t\t\tName:   aws.String(\"tag-key\"),\n\t\t\t\t\t\tValues: []string{k},\n\t\t\t\t\t})\n\t\t\t\t} else {\n\t\t\t\t\tfilters = append(filters, ec2types.Filter{\n\t\t\t\t\t\tName:   aws.String(fmt.Sprintf(\"tag:%s\", k)),\n\t\t\t\t\t\tValues: []string{v},\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\t\t\tres = append(res, filters)\n\t\t}\n\t}\n\tif len(idFilter.Values) > 0 {\n\t\tres = append(res, []ec2types.Filter{idFilter})\n\t}\n\treturn res\n}\n"
  },
  {
    "path": "pkg/providers/subnet/suite_test.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage subnet_test\n\nimport (\n\t\"context\"\n\t\"sort\"\n\t\"sync\"\n\t\"testing\"\n\n\t\"sigs.k8s.io/karpenter/pkg/test/v1alpha1\"\n\n\t\"github.com/aws/aws-sdk-go-v2/aws\"\n\t\"github.com/aws/aws-sdk-go-v2/service/ec2\"\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\t\"github.com/samber/lo\"\n\n\t\"github.com/aws/karpenter-provider-aws/pkg/apis\"\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/operator/options\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/test\"\n\n\tcoreoptions \"sigs.k8s.io/karpenter/pkg/operator/options\"\n\tcoretest \"sigs.k8s.io/karpenter/pkg/test\"\n\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n\t. \"sigs.k8s.io/karpenter/pkg/test/expectations\"\n\t. \"sigs.k8s.io/karpenter/pkg/utils/testing\"\n)\n\nvar ctx context.Context\nvar stop context.CancelFunc\nvar env *coretest.Environment\nvar awsEnv *test.Environment\nvar nodeClass *v1.EC2NodeClass\n\nfunc TestAWS(t *testing.T) {\n\tctx = TestContextWithLogger(t)\n\tRegisterFailHandler(Fail)\n\tRunSpecs(t, \"SubnetProvider\")\n}\n\nvar _ = BeforeSuite(func() {\n\tenv = coretest.NewEnvironment(coretest.WithCRDs(apis.CRDs...), coretest.WithCRDs(v1alpha1.CRDs...))\n\tctx = coreoptions.ToContext(ctx, coretest.Options(coretest.OptionsFields{FeatureGates: coretest.FeatureGates{ReservedCapacity: lo.ToPtr(true)}}))\n\tctx = options.ToContext(ctx, test.Options())\n\tctx, stop = context.WithCancel(ctx)\n\tawsEnv = test.NewEnvironment(ctx, env)\n})\n\nvar _ = AfterSuite(func() {\n\tstop()\n\tExpect(env.Stop()).To(Succeed(), \"Failed to stop environment\")\n})\n\nvar _ = BeforeEach(func() {\n\tctx = coreoptions.ToContext(ctx, coretest.Options(coretest.OptionsFields{FeatureGates: coretest.FeatureGates{ReservedCapacity: lo.ToPtr(true)}}))\n\tctx = options.ToContext(ctx, test.Options())\n\tnodeClass = test.EC2NodeClass(v1.EC2NodeClass{\n\t\tSpec: v1.EC2NodeClassSpec{\n\t\t\tAMISelectorTerms: []v1.AMISelectorTerm{{\n\t\t\t\tAlias: \"al2@latest\",\n\t\t\t}},\n\t\t\tSubnetSelectorTerms: []v1.SubnetSelectorTerm{\n\t\t\t\t{\n\t\t\t\t\tTags: map[string]string{\n\t\t\t\t\t\t\"*\": \"*\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tSecurityGroupSelectorTerms: []v1.SecurityGroupSelectorTerm{\n\t\t\t\t{\n\t\t\t\t\tTags: map[string]string{\n\t\t\t\t\t\t\"*\": \"*\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t})\n\tawsEnv.Reset()\n})\n\nvar _ = AfterEach(func() {\n\tExpectCleanedUp(ctx, env.Client)\n})\n\nvar _ = Describe(\"SubnetProvider\", func() {\n\tContext(\"List\", func() {\n\t\tIt(\"should discover subnet by ID\", func() {\n\t\t\tnodeClass.Spec.SubnetSelectorTerms = []v1.SubnetSelectorTerm{\n\t\t\t\t{\n\t\t\t\t\tID: \"subnet-test1\",\n\t\t\t\t},\n\t\t\t}\n\t\t\tsubnets, err := awsEnv.SubnetProvider.List(ctx, nodeClass)\n\t\t\tExpect(err).To(BeNil())\n\t\t\tExpectConsistsOfSubnets([]ec2types.Subnet{\n\t\t\t\t{\n\t\t\t\t\tSubnetId:                lo.ToPtr(\"subnet-test1\"),\n\t\t\t\t\tAvailabilityZone:        lo.ToPtr(\"test-zone-1a\"),\n\t\t\t\t\tAvailabilityZoneId:      lo.ToPtr(\"tstz1-1a\"),\n\t\t\t\t\tAvailableIpAddressCount: lo.ToPtr[int32](100),\n\t\t\t\t\tVpcId:                   lo.ToPtr(\"vpc-test1\"),\n\t\t\t\t},\n\t\t\t}, subnets)\n\t\t})\n\t\tIt(\"should discover subnets by IDs\", func() {\n\t\t\tnodeClass.Spec.SubnetSelectorTerms = []v1.SubnetSelectorTerm{\n\t\t\t\t{\n\t\t\t\t\tID: \"subnet-test1\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tID: \"subnet-test2\",\n\t\t\t\t},\n\t\t\t}\n\t\t\tsubnets, err := awsEnv.SubnetProvider.List(ctx, nodeClass)\n\t\t\tExpect(err).To(BeNil())\n\t\t\tExpectConsistsOfSubnets([]ec2types.Subnet{\n\t\t\t\t{\n\t\t\t\t\tSubnetId:                lo.ToPtr(\"subnet-test1\"),\n\t\t\t\t\tAvailabilityZone:        lo.ToPtr(\"test-zone-1a\"),\n\t\t\t\t\tAvailabilityZoneId:      lo.ToPtr(\"tstz1-1a\"),\n\t\t\t\t\tAvailableIpAddressCount: lo.ToPtr[int32](100),\n\t\t\t\t\tVpcId:                   lo.ToPtr(\"vpc-test1\"),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tSubnetId:                lo.ToPtr(\"subnet-test2\"),\n\t\t\t\t\tAvailabilityZone:        lo.ToPtr(\"test-zone-1b\"),\n\t\t\t\t\tAvailabilityZoneId:      lo.ToPtr(\"tstz1-1b\"),\n\t\t\t\t\tAvailableIpAddressCount: lo.ToPtr[int32](100),\n\t\t\t\t\tVpcId:                   lo.ToPtr(\"vpc-test1\"),\n\t\t\t\t},\n\t\t\t}, subnets)\n\t\t})\n\t\tIt(\"should discover subnets by IDs and tags\", func() {\n\t\t\tnodeClass.Spec.SubnetSelectorTerms = []v1.SubnetSelectorTerm{\n\t\t\t\t{\n\t\t\t\t\tID:   \"subnet-test1\",\n\t\t\t\t\tTags: map[string]string{\"foo\": \"bar\"},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tID:   \"subnet-test2\",\n\t\t\t\t\tTags: map[string]string{\"foo\": \"bar\"},\n\t\t\t\t},\n\t\t\t}\n\t\t\tsubnets, err := awsEnv.SubnetProvider.List(ctx, nodeClass)\n\t\t\tExpect(err).To(BeNil())\n\t\t\tExpectConsistsOfSubnets([]ec2types.Subnet{\n\t\t\t\t{\n\t\t\t\t\tSubnetId:                lo.ToPtr(\"subnet-test1\"),\n\t\t\t\t\tAvailabilityZone:        lo.ToPtr(\"test-zone-1a\"),\n\t\t\t\t\tAvailabilityZoneId:      lo.ToPtr(\"tstz1-1a\"),\n\t\t\t\t\tAvailableIpAddressCount: lo.ToPtr[int32](100),\n\t\t\t\t\tVpcId:                   lo.ToPtr(\"vpc-test1\"),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tSubnetId:                lo.ToPtr(\"subnet-test2\"),\n\t\t\t\t\tAvailabilityZone:        lo.ToPtr(\"test-zone-1b\"),\n\t\t\t\t\tAvailabilityZoneId:      lo.ToPtr(\"tstz1-1b\"),\n\t\t\t\t\tAvailableIpAddressCount: lo.ToPtr[int32](100),\n\t\t\t\t\tVpcId:                   lo.ToPtr(\"vpc-test1\"),\n\t\t\t\t},\n\t\t\t}, subnets)\n\t\t})\n\t\tIt(\"should discover subnets by a single tag\", func() {\n\t\t\tnodeClass.Spec.SubnetSelectorTerms = []v1.SubnetSelectorTerm{\n\t\t\t\t{\n\t\t\t\t\tTags: map[string]string{\"Name\": \"test-subnet-1\"},\n\t\t\t\t},\n\t\t\t}\n\t\t\tsubnets, err := awsEnv.SubnetProvider.List(ctx, nodeClass)\n\t\t\tExpect(err).To(BeNil())\n\t\t\tExpectConsistsOfSubnets([]ec2types.Subnet{\n\t\t\t\t{\n\t\t\t\t\tSubnetId:                lo.ToPtr(\"subnet-test1\"),\n\t\t\t\t\tAvailabilityZone:        lo.ToPtr(\"test-zone-1a\"),\n\t\t\t\t\tAvailabilityZoneId:      lo.ToPtr(\"tstz1-1a\"),\n\t\t\t\t\tAvailableIpAddressCount: lo.ToPtr[int32](100),\n\t\t\t\t\tVpcId:                   lo.ToPtr(\"vpc-test1\"),\n\t\t\t\t},\n\t\t\t}, subnets)\n\t\t})\n\t\tIt(\"should discover subnets by multiple tag values\", func() {\n\t\t\tnodeClass.Spec.SubnetSelectorTerms = []v1.SubnetSelectorTerm{\n\t\t\t\t{\n\t\t\t\t\tTags: map[string]string{\"Name\": \"test-subnet-1\"},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tTags: map[string]string{\"Name\": \"test-subnet-2\"},\n\t\t\t\t},\n\t\t\t}\n\t\t\tsubnets, err := awsEnv.SubnetProvider.List(ctx, nodeClass)\n\t\t\tExpect(err).To(BeNil())\n\t\t\tExpectConsistsOfSubnets([]ec2types.Subnet{\n\t\t\t\t{\n\t\t\t\t\tSubnetId:                lo.ToPtr(\"subnet-test1\"),\n\t\t\t\t\tAvailabilityZone:        lo.ToPtr(\"test-zone-1a\"),\n\t\t\t\t\tAvailabilityZoneId:      lo.ToPtr(\"tstz1-1a\"),\n\t\t\t\t\tAvailableIpAddressCount: lo.ToPtr[int32](100),\n\t\t\t\t\tVpcId:                   lo.ToPtr(\"vpc-test1\"),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tSubnetId:                lo.ToPtr(\"subnet-test2\"),\n\t\t\t\t\tAvailabilityZone:        lo.ToPtr(\"test-zone-1b\"),\n\t\t\t\t\tAvailabilityZoneId:      lo.ToPtr(\"tstz1-1b\"),\n\t\t\t\t\tAvailableIpAddressCount: lo.ToPtr[int32](100),\n\t\t\t\t\tVpcId:                   lo.ToPtr(\"vpc-test1\"),\n\t\t\t\t},\n\t\t\t}, subnets)\n\t\t})\n\t\tIt(\"should discover subnets by IDs intersected with tags\", func() {\n\t\t\tnodeClass.Spec.SubnetSelectorTerms = []v1.SubnetSelectorTerm{\n\t\t\t\t{\n\t\t\t\t\tID:   \"subnet-test2\",\n\t\t\t\t\tTags: map[string]string{\"foo\": \"bar\"},\n\t\t\t\t},\n\t\t\t}\n\t\t\tsubnets, err := awsEnv.SubnetProvider.List(ctx, nodeClass)\n\t\t\tExpect(err).To(BeNil())\n\t\t\tExpectConsistsOfSubnets([]ec2types.Subnet{\n\t\t\t\t{\n\t\t\t\t\tSubnetId:                lo.ToPtr(\"subnet-test2\"),\n\t\t\t\t\tAvailabilityZone:        lo.ToPtr(\"test-zone-1b\"),\n\t\t\t\t\tAvailabilityZoneId:      lo.ToPtr(\"tstz1-1b\"),\n\t\t\t\t\tAvailableIpAddressCount: lo.ToPtr[int32](100),\n\t\t\t\t\tVpcId:                   lo.ToPtr(\"vpc-test1\"),\n\t\t\t\t},\n\t\t\t}, subnets)\n\t\t})\n\t\tIt(\"should handle empty pages when describing subnets\", func() {\n\t\t\tawsEnv.EC2API.DescribeSubnetsBehavior.OutputPages.Add(&ec2.DescribeSubnetsOutput{Subnets: []ec2types.Subnet{}})\n\t\t\tawsEnv.EC2API.DescribeSubnetsBehavior.OutputPages.Add(\n\t\t\t\t&ec2.DescribeSubnetsOutput{\n\t\t\t\t\tSubnets: []ec2types.Subnet{\n\t\t\t\t\t\t{SubnetId: aws.String(\"test-subnet-1000\"), AvailabilityZone: aws.String(\"test-zone-1a\"), AvailabilityZoneId: aws.String(\"tstz1-1a\"), AvailableIpAddressCount: aws.Int32(10),\n\t\t\t\t\t\t\tTags: []ec2types.Tag{{Key: aws.String(\"Name\"), Value: aws.String(\"test-subnet-1000\")}},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t)\n\t\t\tsubnets, err := awsEnv.SubnetProvider.List(ctx, nodeClass)\n\t\t\tExpect(err).To(BeNil())\n\t\t\tExpectConsistsOfSubnets([]ec2types.Subnet{\n\t\t\t\t{\n\t\t\t\t\tSubnetId:                lo.ToPtr(\"test-subnet-1000\"),\n\t\t\t\t\tAvailabilityZone:        lo.ToPtr(\"test-zone-1a\"),\n\t\t\t\t\tAvailabilityZoneId:      lo.ToPtr(\"tstz1-1a\"),\n\t\t\t\t\tAvailableIpAddressCount: lo.ToPtr[int32](10),\n\t\t\t\t\tVpcId:                   lo.ToPtr(\"vpc-test-1\"),\n\t\t\t\t},\n\t\t\t}, subnets)\n\t\t\tExpect(awsEnv.EC2API.DescribeSubnetsBehavior.Calls()).To(Equal(2))\n\t\t})\n\t\tIt(\"should not overwrite found values when handling multiple pages of subnets\", func() {\n\t\t\tawsEnv.EC2API.DescribeSubnetsBehavior.OutputPages.Add(&ec2.DescribeSubnetsOutput{Subnets: []ec2types.Subnet{\n\t\t\t\t{SubnetId: aws.String(\"test-subnet-1\"), AvailabilityZone: aws.String(\"test-zone-1a\"), AvailabilityZoneId: aws.String(\"tstz1-1a\"), AvailableIpAddressCount: aws.Int32(10),\n\t\t\t\t\tTags: []ec2types.Tag{{Key: aws.String(\"Name\"), Value: aws.String(\"test-subnet-1\")}},\n\t\t\t\t},\n\t\t\t}})\n\t\t\tawsEnv.EC2API.DescribeSubnetsBehavior.OutputPages.Add(\n\t\t\t\t&ec2.DescribeSubnetsOutput{\n\t\t\t\t\tSubnets: []ec2types.Subnet{\n\t\t\t\t\t\t{SubnetId: aws.String(\"test-subnet-2\"), AvailabilityZone: aws.String(\"test-zone-1a\"), AvailabilityZoneId: aws.String(\"tstz1-1a\"), AvailableIpAddressCount: aws.Int32(10),\n\t\t\t\t\t\t\tTags:  []ec2types.Tag{{Key: aws.String(\"Name\"), Value: aws.String(\"test-subnet-2\")}},\n\t\t\t\t\t\t\tVpcId: lo.ToPtr(\"vpc-test1\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t)\n\t\t\tawsEnv.EC2API.DescribeSubnetsBehavior.OutputPages.Add(\n\t\t\t\t&ec2.DescribeSubnetsOutput{\n\t\t\t\t\tSubnets: []ec2types.Subnet{\n\t\t\t\t\t\t{SubnetId: aws.String(\"test-subnet-3\"), AvailabilityZone: aws.String(\"test-zone-1a\"), AvailabilityZoneId: aws.String(\"tstz1-1a\"), AvailableIpAddressCount: aws.Int32(10),\n\t\t\t\t\t\t\tTags:  []ec2types.Tag{{Key: aws.String(\"Name\"), Value: aws.String(\"test-subnet-3\")}},\n\t\t\t\t\t\t\tVpcId: lo.ToPtr(\"vpc-test1\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t)\n\t\t\tsubnets, err := awsEnv.SubnetProvider.List(ctx, nodeClass)\n\t\t\tExpect(err).To(BeNil())\n\t\t\tExpectConsistsOfSubnets([]ec2types.Subnet{\n\t\t\t\t{SubnetId: aws.String(\"test-subnet-1\"), AvailabilityZone: aws.String(\"test-zone-1a\"), AvailabilityZoneId: aws.String(\"tstz1-1a\"), AvailableIpAddressCount: aws.Int32(10),\n\t\t\t\t\tTags:  []ec2types.Tag{{Key: aws.String(\"Name\"), Value: aws.String(\"test-subnet-1\")}},\n\t\t\t\t\tVpcId: lo.ToPtr(\"vpc-test1\"),\n\t\t\t\t},\n\t\t\t\t{SubnetId: aws.String(\"test-subnet-2\"), AvailabilityZone: aws.String(\"test-zone-1a\"), AvailabilityZoneId: aws.String(\"tstz1-1a\"), AvailableIpAddressCount: aws.Int32(10),\n\t\t\t\t\tTags:  []ec2types.Tag{{Key: aws.String(\"Name\"), Value: aws.String(\"test-subnet-2\")}},\n\t\t\t\t\tVpcId: lo.ToPtr(\"vpc-test1\"),\n\t\t\t\t},\n\t\t\t\t{SubnetId: aws.String(\"test-subnet-3\"), AvailabilityZone: aws.String(\"test-zone-1a\"), AvailabilityZoneId: aws.String(\"tstz1-1a\"), AvailableIpAddressCount: aws.Int32(10),\n\t\t\t\t\tTags:  []ec2types.Tag{{Key: aws.String(\"Name\"), Value: aws.String(\"test-subnet-3\")}},\n\t\t\t\t\tVpcId: lo.ToPtr(\"vpc-test1\"),\n\t\t\t\t},\n\t\t\t}, subnets)\n\t\t\tExpect(awsEnv.EC2API.DescribeSubnetsBehavior.Calls()).To(Equal(3))\n\t\t})\n\t})\n\tContext(\"Provider Cache\", func() {\n\t\tIt(\"should resolve subnets from cache that are filtered by id\", func() {\n\t\t\texpectedSubnets := []ec2types.Subnet{\n\t\t\t\t{\n\t\t\t\t\tSubnetId: aws.String(\"test-subnet-id-1\"), SubnetArn: aws.String(\"test-subnet-arn-1\"),\n\t\t\t\t\tTags: []ec2types.Tag{{Key: aws.String(\"Name\"), Value: aws.String(\"test-subnet-1\")}},\n\t\t\t\t},\n\t\t\t}\n\t\t\tawsEnv.EC2API.DescribeSubnetsBehavior.Output.Set(&ec2.DescribeSubnetsOutput{Subnets: expectedSubnets})\n\t\t\tfor _, subnet := range expectedSubnets {\n\t\t\t\tnodeClass.Spec.SubnetSelectorTerms = []v1.SubnetSelectorTerm{\n\t\t\t\t\t{\n\t\t\t\t\t\tID: *subnet.SubnetId,\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t\t// Call list to request from aws and store in the cache\n\t\t\t\t_, err := awsEnv.SubnetProvider.List(ctx, nodeClass)\n\t\t\t\tExpect(err).To(BeNil())\n\t\t\t}\n\n\t\t\tExpect(awsEnv.SubnetCache.Items()).To(HaveLen(1))\n\t\t\tfor _, cachedObject := range awsEnv.SubnetCache.Items() {\n\t\t\t\tcachedSubnet := cachedObject.Object.([]ec2types.Subnet)\n\t\t\t\tExpect(cachedSubnet).To(HaveLen(1))\n\t\t\t\tlo.Contains(lo.ToSlicePtr(expectedSubnets), lo.ToPtr(cachedSubnet[0]))\n\t\t\t}\n\t\t})\n\t\tIt(\"should resolve subnets from cache that are filtered by tags\", func() {\n\t\t\texpectedSubnets := []ec2types.Subnet{\n\t\t\t\t{\n\t\t\t\t\tSubnetId: aws.String(\"test-subnet-id-1\"), SubnetArn: aws.String(\"test-subnet-arn-1\"),\n\t\t\t\t\tTags: []ec2types.Tag{{Key: aws.String(\"Name\"), Value: aws.String(\"test-subnet-1\")}},\n\t\t\t\t},\n\t\t\t}\n\t\t\tawsEnv.EC2API.DescribeSubnetsBehavior.Output.Set(&ec2.DescribeSubnetsOutput{Subnets: expectedSubnets})\n\t\t\ttagSet := lo.Map(expectedSubnets, func(subnet ec2types.Subnet, _ int) map[string]string {\n\t\t\t\ttag, _ := lo.Find(subnet.Tags, func(tag ec2types.Tag) bool {\n\t\t\t\t\treturn lo.FromPtr(tag.Key) == \"Name\"\n\t\t\t\t})\n\t\t\t\treturn map[string]string{\"Name\": lo.FromPtr(tag.Value)}\n\t\t\t})\n\t\t\tfor _, tag := range tagSet {\n\t\t\t\tnodeClass.Spec.SubnetSelectorTerms = []v1.SubnetSelectorTerm{\n\t\t\t\t\t{\n\t\t\t\t\t\tTags: tag,\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t\t// Call list to request from aws and store in the cache\n\t\t\t\t_, err := awsEnv.SubnetProvider.List(ctx, nodeClass)\n\t\t\t\tExpect(err).To(BeNil())\n\t\t\t}\n\n\t\t\tExpect(awsEnv.SubnetCache.Items()).To(HaveLen(1))\n\t\t\tfor _, cachedObject := range awsEnv.SubnetCache.Items() {\n\t\t\t\tcachedSubnet := cachedObject.Object.([]ec2types.Subnet)\n\t\t\t\tExpect(cachedSubnet).To(HaveLen(1))\n\t\t\t\tlo.Contains(lo.ToSlicePtr(expectedSubnets), lo.ToPtr(cachedSubnet[0]))\n\t\t\t}\n\t\t})\n\t\tIt(\"should correctly disambiguate AND vs OR semantics for tags\", func() {\n\t\t\t// AND semantics\n\t\t\tawsEnv.EC2API.DescribeSubnetsBehavior.MultiOut.Add(&ec2.DescribeSubnetsOutput{Subnets: []ec2types.Subnet{\n\t\t\t\t{\n\t\t\t\t\tSubnetId: aws.String(\"test-subnet-id-3\"), SubnetArn: aws.String(\"test-subnet-arn-3\"),\n\t\t\t\t\tTags: []ec2types.Tag{{Key: aws.String(\"tag-key-1\"), Value: aws.String(\"tag-value-1\")}, {Key: aws.String(\"tag-key-2\"), Value: aws.String(\"tag-value-2\")}},\n\t\t\t\t},\n\t\t\t}})\n\t\t\tnodeClass.Spec.SubnetSelectorTerms = []v1.SubnetSelectorTerm{\n\t\t\t\t{\n\t\t\t\t\tTags: map[string]string{\"tag-key-1\": \"tag-value-1\", \"tag-key-2\": \"tag-value-2\"},\n\t\t\t\t},\n\t\t\t}\n\t\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\t\tsubnets, err := awsEnv.SubnetProvider.List(ctx, nodeClass)\n\t\t\tExpect(err).To(BeNil())\n\t\t\tExpectConsistsOfSubnets([]ec2types.Subnet{\n\t\t\t\t{\n\t\t\t\t\tSubnetId:  aws.String(\"test-subnet-id-3\"),\n\t\t\t\t\tSubnetArn: aws.String(\"test-subnet-arn-3\"),\n\t\t\t\t},\n\t\t\t}, subnets)\n\n\t\t\t// OR semantics\n\t\t\tawsEnv.EC2API.DescribeSubnetsBehavior.MultiOut.Add(&ec2.DescribeSubnetsOutput{Subnets: []ec2types.Subnet{\n\t\t\t\t{SubnetId: aws.String(\"test-subnet-id-2\"), SubnetArn: aws.String(\"test-subnet-arn-2\"), Tags: []ec2types.Tag{{Key: aws.String(\"tag-key-2\"), Value: aws.String(\"tag-value-2\")}}},\n\t\t\t}})\n\t\t\tawsEnv.EC2API.DescribeSubnetsBehavior.MultiOut.Add(&ec2.DescribeSubnetsOutput{Subnets: []ec2types.Subnet{\n\t\t\t\t{SubnetId: aws.String(\"test-subnet-id-1\"), SubnetArn: aws.String(\"test-subnet-arn-1\"), Tags: []ec2types.Tag{{Key: aws.String(\"tag-key-1\"), Value: aws.String(\"tag-value-1\")}}},\n\t\t\t}})\n\t\t\tnodeClass.Spec.SubnetSelectorTerms = []v1.SubnetSelectorTerm{\n\t\t\t\t{\n\t\t\t\t\tTags: map[string]string{\"tag-key-1\": \"tag-value-1\"},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tTags: map[string]string{\"tag-key-2\": \"tag-value-2\"},\n\t\t\t\t},\n\t\t\t}\n\t\t\tExpectApplied(ctx, env.Client, nodeClass)\n\t\t\tsubnets, err = awsEnv.SubnetProvider.List(ctx, nodeClass)\n\t\t\tExpect(err).To(BeNil())\n\t\t\tExpectConsistsOfSubnets([]ec2types.Subnet{\n\t\t\t\t{\n\t\t\t\t\tSubnetId:  aws.String(\"test-subnet-id-1\"),\n\t\t\t\t\tSubnetArn: aws.String(\"test-subnet-arn-1\"),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tSubnetId:  aws.String(\"test-subnet-id-2\"),\n\t\t\t\t\tSubnetArn: aws.String(\"test-subnet-arn-2\"),\n\t\t\t\t},\n\t\t\t}, subnets)\n\n\t\t\tcacheItems := awsEnv.SubnetCache.Items()\n\t\t\t// There should be 2 cache entries one for each semantic.\n\t\t\tExpect(cacheItems).To(HaveLen(2))\n\t\t\t// Extract cached subnet arrays for comparison\n\t\t\tcachedSubnets := make([][]ec2types.Subnet, 0, len(cacheItems))\n\t\t\tfor _, item := range cacheItems {\n\t\t\t\tcachedSubnets = append(cachedSubnets, item.Object.([]ec2types.Subnet))\n\t\t\t}\n\t\t\t// Expect cache to contain result of both look ups.\n\t\t\tExpect(cachedSubnets).To(ContainElement(ContainElements(\n\t\t\t\t[]ec2types.Subnet{\n\t\t\t\t\t{\n\t\t\t\t\t\tSubnetId:  aws.String(\"test-subnet-id-1\"),\n\t\t\t\t\t\tSubnetArn: aws.String(\"test-subnet-arn-1\"),\n\t\t\t\t\t\tTags:      []ec2types.Tag{{Key: aws.String(\"tag-key-1\"), Value: aws.String(\"tag-value-1\")}},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tSubnetId:  aws.String(\"test-subnet-id-2\"),\n\t\t\t\t\t\tSubnetArn: aws.String(\"test-subnet-arn-2\"),\n\t\t\t\t\t\tTags:      []ec2types.Tag{{Key: aws.String(\"tag-key-2\"), Value: aws.String(\"tag-value-2\")}},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t)))\n\t\t\tExpect(cachedSubnets).To(ContainElement(\n\t\t\t\t[]ec2types.Subnet{\n\t\t\t\t\t{\n\t\t\t\t\t\tSubnetId:  aws.String(\"test-subnet-id-3\"),\n\t\t\t\t\t\tSubnetArn: aws.String(\"test-subnet-arn-3\"),\n\t\t\t\t\t\tTags:      []ec2types.Tag{{Key: aws.String(\"tag-key-1\"), Value: aws.String(\"tag-value-1\")}, {Key: aws.String(\"tag-key-2\"), Value: aws.String(\"tag-value-2\")}},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t))\n\t\t})\n\t})\n\tIt(\"should not cause data races when calling List() simultaneously\", func() {\n\t\twg := sync.WaitGroup{}\n\t\tfor range 10000 {\n\t\t\twg.Go(func() {\n\t\t\t\tdefer GinkgoRecover()\n\t\t\t\tsubnets, err := awsEnv.SubnetProvider.List(ctx, nodeClass)\n\t\t\t\tExpect(err).ToNot(HaveOccurred())\n\n\t\t\t\tExpect(subnets).To(HaveLen(4))\n\t\t\t\t// Sort everything in parallel and ensure that we don't get data races\n\t\t\t\tsort.Slice(subnets, func(i, j int) bool {\n\t\t\t\t\tif int(*subnets[i].AvailableIpAddressCount) != int(*subnets[j].AvailableIpAddressCount) {\n\t\t\t\t\t\treturn int(*subnets[i].AvailableIpAddressCount) > int(*subnets[j].AvailableIpAddressCount)\n\t\t\t\t\t}\n\t\t\t\t\treturn *subnets[i].SubnetId < *subnets[j].SubnetId\n\t\t\t\t})\n\t\t\t\tExpect(subnets).To(BeEquivalentTo([]ec2types.Subnet{\n\t\t\t\t\t{\n\t\t\t\t\t\tAvailabilityZone:        lo.ToPtr(\"test-zone-1a\"),\n\t\t\t\t\t\tAvailabilityZoneId:      lo.ToPtr(\"tstz1-1a\"),\n\t\t\t\t\t\tAvailableIpAddressCount: lo.ToPtr[int32](100),\n\t\t\t\t\t\tSubnetId:                lo.ToPtr(\"subnet-test1\"),\n\t\t\t\t\t\tMapPublicIpOnLaunch:     lo.ToPtr(false),\n\t\t\t\t\t\tTags: []ec2types.Tag{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tKey:   lo.ToPtr(\"Name\"),\n\t\t\t\t\t\t\t\tValue: lo.ToPtr(\"test-subnet-1\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tKey:   lo.ToPtr(\"foo\"),\n\t\t\t\t\t\t\t\tValue: lo.ToPtr(\"bar\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tVpcId: lo.ToPtr(\"vpc-test1\"),\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tAvailabilityZone:        lo.ToPtr(\"test-zone-1b\"),\n\t\t\t\t\t\tAvailabilityZoneId:      lo.ToPtr(\"tstz1-1b\"),\n\t\t\t\t\t\tAvailableIpAddressCount: lo.ToPtr[int32](100),\n\t\t\t\t\t\tMapPublicIpOnLaunch:     lo.ToPtr(true),\n\t\t\t\t\t\tSubnetId:                lo.ToPtr(\"subnet-test2\"),\n\n\t\t\t\t\t\tTags: []ec2types.Tag{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tKey:   lo.ToPtr(\"Name\"),\n\t\t\t\t\t\t\t\tValue: lo.ToPtr(\"test-subnet-2\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tKey:   lo.ToPtr(\"foo\"),\n\t\t\t\t\t\t\t\tValue: lo.ToPtr(\"bar\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tVpcId: lo.ToPtr(\"vpc-test1\"),\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tAvailabilityZone:        lo.ToPtr(\"test-zone-1c\"),\n\t\t\t\t\t\tAvailabilityZoneId:      lo.ToPtr(\"tstz1-1c\"),\n\t\t\t\t\t\tAvailableIpAddressCount: lo.ToPtr[int32](100),\n\t\t\t\t\t\tSubnetId:                lo.ToPtr(\"subnet-test3\"),\n\t\t\t\t\t\tTags: []ec2types.Tag{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tKey:   lo.ToPtr(\"Name\"),\n\t\t\t\t\t\t\t\tValue: lo.ToPtr(\"test-subnet-3\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tKey: lo.ToPtr(\"TestTag\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tKey:   lo.ToPtr(\"foo\"),\n\t\t\t\t\t\t\t\tValue: lo.ToPtr(\"bar\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tVpcId: lo.ToPtr(\"vpc-test1\"),\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tAvailabilityZone:        lo.ToPtr(\"test-zone-1a-local\"),\n\t\t\t\t\t\tAvailabilityZoneId:      lo.ToPtr(\"tstz1-1alocal\"),\n\t\t\t\t\t\tAvailableIpAddressCount: lo.ToPtr[int32](100),\n\t\t\t\t\t\tSubnetId:                lo.ToPtr(\"subnet-test4\"),\n\t\t\t\t\t\tMapPublicIpOnLaunch:     lo.ToPtr(true),\n\t\t\t\t\t\tTags: []ec2types.Tag{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tKey:   lo.ToPtr(\"Name\"),\n\t\t\t\t\t\t\t\tValue: lo.ToPtr(\"test-subnet-4\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tVpcId: lo.ToPtr(\"vpc-test1\"),\n\t\t\t\t\t},\n\t\t\t\t}))\n\t\t\t})\n\t\t}\n\t\twg.Wait()\n\t})\n})\n\nfunc ExpectConsistsOfSubnets(expected, actual []ec2types.Subnet) {\n\tGinkgoHelper()\n\tExpect(actual).To(HaveLen(len(expected)))\n\tfor _, elem := range expected {\n\t\t_, ok := lo.Find(actual, func(s ec2types.Subnet) bool {\n\t\t\treturn lo.FromPtr(s.SubnetId) == lo.FromPtr(elem.SubnetId) &&\n\t\t\t\tlo.FromPtr(s.AvailabilityZoneId) == lo.FromPtr(elem.AvailabilityZoneId) &&\n\t\t\t\tlo.FromPtr(s.AvailabilityZone) == lo.FromPtr(elem.AvailabilityZone) &&\n\t\t\t\tlo.FromPtr(s.AvailableIpAddressCount) == lo.FromPtr(elem.AvailableIpAddressCount)\n\t\t})\n\t\tExpect(ok).To(BeTrue(), `Expected subnet with {\"SubnetId\": %q, \"AvailabilityZone\": %q, \"AvailableIpAddressCount\": %q} to exist`, lo.FromPtr(elem.SubnetId), lo.FromPtr(elem.AvailabilityZone), lo.FromPtr(elem.AvailableIpAddressCount))\n\t}\n}\n"
  },
  {
    "path": "pkg/providers/version/suite_test.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage version_test\n\nimport (\n\t\"context\"\n\t\"testing\"\n\n\t\"sigs.k8s.io/karpenter/pkg/test/v1alpha1\"\n\n\tcoreoptions \"sigs.k8s.io/karpenter/pkg/operator/options\"\n\tcoretest \"sigs.k8s.io/karpenter/pkg/test\"\n\n\t\"github.com/samber/lo\"\n\n\t\"github.com/aws/karpenter-provider-aws/pkg/apis\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/operator/options\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/test\"\n\n\tcontrollersversion \"github.com/aws/karpenter-provider-aws/pkg/controllers/providers/version\"\n\tenvironmentaws \"github.com/aws/karpenter-provider-aws/test/pkg/environment/aws\"\n\t\"github.com/aws/karpenter-provider-aws/test/pkg/environment/common\"\n\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n\t. \"sigs.k8s.io/karpenter/pkg/test/expectations\"\n\t. \"sigs.k8s.io/karpenter/pkg/utils/testing\"\n)\n\nvar ctx context.Context\nvar stop context.CancelFunc\nvar env *coretest.Environment\nvar awsEnv *test.Environment\nvar testEnv *environmentaws.Environment\nvar versionController *controllersversion.Controller\n\nfunc TestAWS(t *testing.T) {\n\tctx = TestContextWithLogger(t)\n\tRegisterFailHandler(Fail)\n\tRunSpecs(t, \"VersionProvider\")\n}\n\nvar _ = BeforeSuite(func() {\n\tenv = coretest.NewEnvironment(coretest.WithCRDs(apis.CRDs...), coretest.WithCRDs(v1alpha1.CRDs...))\n\tctx = coreoptions.ToContext(ctx, coretest.Options(coretest.OptionsFields{FeatureGates: coretest.FeatureGates{ReservedCapacity: lo.ToPtr(true)}}))\n\tctx = options.ToContext(ctx, test.Options())\n\tctx, stop = context.WithCancel(ctx)\n\tawsEnv = test.NewEnvironment(ctx, env)\n\ttestEnv = &environmentaws.Environment{Environment: &common.Environment{KubeClient: env.KubernetesInterface}}\n\tversionController = controllersversion.NewController(awsEnv.VersionProvider, awsEnv.VersionProvider.UpdateVersionWithValidation)\n})\n\nvar _ = AfterSuite(func() {\n\tstop()\n\tExpect(env.Stop()).To(Succeed(), \"Failed to stop environment\")\n})\n\nvar _ = BeforeEach(func() {\n\tawsEnv.Reset()\n\tawsEnv.EKSAPI.Reset()\n})\n\nvar _ = AfterEach(func() {\n\tExpectCleanedUp(ctx, env.Client)\n})\n\nvar _ = Describe(\"Operator\", func() {\n\n\tContext(\"with EKS_CONTROL_PLANE=true\", func() {\n\t\tIt(\"should resolve Kubernetes Version via Describe Cluster with no errors\", func() {\n\t\t\toptions.FromContext(ctx).EKSControlPlane = true\n\t\t\tExpectSingletonReconciled(ctx, versionController)\n\t\t\tversion := awsEnv.VersionProvider.Get(ctx)\n\t\t\tExpect(version).To(Equal(\"1.29\"))\n\t\t})\n\t})\n\n\tContext(\"with EKS_CONTROL_PLANE=false\", func() {\n\t\tIt(\"should resolve Kubernetes Version via K8s API\", func() {\n\t\t\toptions.FromContext(ctx).EKSControlPlane = false\n\t\t\tExpectSingletonReconciled(ctx, versionController)\n\t\t\tversion := awsEnv.VersionProvider.Get(ctx)\n\t\t\tExpect(version).To(Equal(testEnv.K8sVersion()))\n\t\t})\n\t})\n})\n"
  },
  {
    "path": "pkg/providers/version/version.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage version\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync/atomic\"\n\n\t\"github.com/awslabs/operatorpkg/serrors\"\n\t\"github.com/samber/lo\"\n\t\"k8s.io/apimachinery/pkg/util/version\"\n\t\"k8s.io/client-go/kubernetes\"\n\t\"sigs.k8s.io/controller-runtime/pkg/log\"\n\n\t\"github.com/aws/aws-sdk-go-v2/service/eks\"\n\n\tsdk \"github.com/aws/karpenter-provider-aws/pkg/aws\"\n\n\t\"github.com/aws/karpenter-provider-aws/pkg/operator/options\"\n\n\t\"sigs.k8s.io/karpenter/pkg/utils/pretty\"\n)\n\nconst (\n\t// Karpenter's supported version of Kubernetes\n\t// If a user runs a karpenter image on a k8s version outside the min and max,\n\t// One error message will be fired to notify\n\tMinK8sVersion = \"1.26\"\n\tMaxK8sVersion = \"1.35\"\n)\n\ntype Provider interface {\n\tGet(ctx context.Context) string\n}\n\n// DefaultProvider get the APIServer version. This will be initialized at start up and allows karpenter to have an understanding of the cluster version\n// for decision making. The version is cached to help reduce the amount of calls made to the API Server\ntype DefaultProvider struct {\n\tcm                  *pretty.ChangeMonitor\n\tkubernetesInterface kubernetes.Interface\n\teksapi              sdk.EKSAPI\n\tversion             atomic.Pointer[string]\n}\n\nfunc NewDefaultProvider(kubernetesInterface kubernetes.Interface, eksapi sdk.EKSAPI) *DefaultProvider {\n\treturn &DefaultProvider{\n\t\tcm:                  pretty.NewChangeMonitor(),\n\t\tkubernetesInterface: kubernetesInterface,\n\t\teksapi:              eksapi,\n\t}\n}\n\nfunc (p *DefaultProvider) Get(ctx context.Context) string {\n\treturn *p.version.Load()\n}\n\nfunc (p *DefaultProvider) UpdateVersion(ctx context.Context) error {\n\tvar version string\n\tvar err error\n\n\tif options.FromContext(ctx).EKSControlPlane {\n\t\tversion, err = p.getEKSVersion(ctx)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"validating kubernetes version, %w\", err)\n\t\t}\n\t} else {\n\t\tversion, err = p.getK8sVersion()\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"validating kubernetes version, %w\", err)\n\t\t}\n\t}\n\tp.version.Store(&version)\n\treturn nil\n}\nfunc (p *DefaultProvider) UpdateVersionWithValidation(ctx context.Context) error {\n\terr := p.UpdateVersion(ctx)\n\tif err != nil {\n\t\treturn err\n\t}\n\tversion := p.Get(ctx)\n\tif p.cm.HasChanged(\"kubernetes-version\", version) {\n\t\tlog.FromContext(ctx).WithValues(\"version\", version).V(1).Info(\"discovered kubernetes version\")\n\t\tif err := validateK8sVersion(version); err != nil {\n\t\t\treturn fmt.Errorf(\"validating kubernetes version, %w\", err)\n\t\t}\n\t}\n\treturn nil\n}\n\n// SupportedK8sVersions returns a slice of version strings in format \"major.minor\" for all versions of k8s supported by\n// this version of Karpenter.\n// Note: Assumes k8s only has a single major version (1.x)\nfunc SupportedK8sVersions() []string {\n\tminMinor := lo.Must(strconv.Atoi(strings.Split(MinK8sVersion, \".\")[1]))\n\tmaxMinor := lo.Must(strconv.Atoi(strings.Split(MaxK8sVersion, \".\")[1]))\n\tversions := make([]string, 0, maxMinor-minMinor+1)\n\tfor i := minMinor; i <= maxMinor; i++ {\n\t\tversions = append(versions, fmt.Sprintf(\"1.%d\", i))\n\t}\n\treturn versions\n}\n\nfunc validateK8sVersion(v string) error {\n\tk8sVersion := version.MustParseGeneric(v)\n\n\t// We will only error if the user is running karpenter on a k8s version,\n\t// that is out of the range of the minK8sVersion and maxK8sVersion\n\tif k8sVersion.LessThan(version.MustParseGeneric(MinK8sVersion)) ||\n\t\tversion.MustParseGeneric(MaxK8sVersion).LessThan(k8sVersion) {\n\t\treturn serrors.Wrap(fmt.Errorf(\"karpenter is not compatible with kubernetes version\"), \"version\", k8sVersion)\n\t}\n\n\treturn nil\n}\n\nfunc (p *DefaultProvider) getEKSVersion(ctx context.Context) (string, error) {\n\toutput, err := p.eksapi.DescribeCluster(ctx, &eks.DescribeClusterInput{\n\t\tName: lo.ToPtr(options.FromContext(ctx).ClusterName),\n\t})\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\treturn lo.FromPtr(output.Cluster.Version), nil\n}\n\nfunc (p *DefaultProvider) getK8sVersion() (string, error) {\n\toutput, err := p.kubernetesInterface.Discovery().ServerVersion()\n\tif err != nil || output == nil {\n\t\treturn \"\", fmt.Errorf(\"getting kubernetes version from the kubernetes API\")\n\t}\n\treturn fmt.Sprintf(\"%s.%s\", output.Major, strings.TrimSuffix(output.Minor, \"+\")), err\n}\n\n// SupportsDefaultBind checks if the Bottlerocket AMI version supports default bind (>= 1.46.0)\n// This function is used to determine whether to use the new default bind command or the legacy\n// command with explicit directory paths for ephemeral storage binding.\nfunc SupportsDefaultBind(amiVersion string) bool {\n\tif amiVersion == \"\" {\n\t\treturn false\n\t}\n\n\t// Handle @latest - assume it's the newest version\n\tif amiVersion == \"latest\" {\n\t\treturn true\n\t}\n\n\tversion := strings.TrimLeft(amiVersion, \"v\")\n\tparts := strings.Split(version, \".\")\n\tif len(parts) < 3 {\n\t\treturn false\n\t}\n\n\tmajor, err := strconv.Atoi(parts[0])\n\tif err != nil {\n\t\treturn false\n\t}\n\tminor, err := strconv.Atoi(parts[1])\n\tif err != nil {\n\t\treturn false\n\t}\n\n\treturn major > 1 || (major == 1 && minor >= 46)\n}\n"
  },
  {
    "path": "pkg/providers/version/version_test.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage version_test\n\nimport (\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/version\"\n)\n\nvar _ = Describe(\"SupportsDefaultBind\", func() {\n\tDescribeTable(\"should return correct result for version\",\n\t\tfunc(versionStr string, expected bool) {\n\t\t\tresult := version.SupportsDefaultBind(versionStr)\n\t\t\tExpect(result).To(Equal(expected))\n\t\t},\n\t\tEntry(\"1.45.0\", \"1.45.0\", false),\n\t\tEntry(\"1.46.0\", \"1.46.0\", true),\n\t\tEntry(\"1.47.0\", \"1.47.0\", true),\n\t\tEntry(\"2.0.0\", \"2.0.0\", true),\n\t\tEntry(\"v1.45.0\", \"v1.45.0\", false),\n\t\tEntry(\"v1.46.0\", \"v1.46.0\", true),\n\t\tEntry(\"1.9.0\", \"1.9.0\", false),\n\t\tEntry(\"latest\", \"latest\", true),\n\t\tEntry(\"invalid\", \"invalid\", false),\n\t\tEntry(\"1\", \"1\", false),\n\t\tEntry(\"empty\", \"\", false),\n\t\tEntry(\"1.46\", \"1.46\", false),\n\t\tEntry(\"abc.def.ghi\", \"abc.def.ghi\", false),\n\t)\n})\n"
  },
  {
    "path": "pkg/test/environment.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage test\n\nimport (\n\t\"context\"\n\t\"net\"\n\t\"time\"\n\n\t\"github.com/patrickmn/go-cache\"\n\t\"github.com/samber/lo\"\n\tcorev1 \"k8s.io/api/core/v1\"\n\tclock \"k8s.io/utils/clock/testing\"\n\tctrlcache \"sigs.k8s.io/controller-runtime/pkg/cache\"\n\t\"sigs.k8s.io/controller-runtime/pkg/client\"\n\tkarpv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n\t\"sigs.k8s.io/karpenter/pkg/controllers/nodeoverlay\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\tawscache \"github.com/aws/karpenter-provider-aws/pkg/cache\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/fake\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/amifamily\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/capacityreservation\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/instance\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/instanceprofile\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/instancetype\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/launchtemplate\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/pricing\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/securitygroup\"\n\tssmp \"github.com/aws/karpenter-provider-aws/pkg/providers/ssm\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/subnet\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/version\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/utils\"\n\n\tcoretest \"sigs.k8s.io/karpenter/pkg/test\"\n\n\tcrmetrics \"sigs.k8s.io/controller-runtime/pkg/metrics\"\n)\n\nfunc init() {\n\tkarpv1.NormalizedLabels = lo.Assign(karpv1.NormalizedLabels, map[string]string{\"topology.ebs.csi.aws.com/zone\": corev1.LabelTopologyZone})\n\tcoretest.SetDefaultNodeClassType(&v1.EC2NodeClass{})\n}\n\ntype Environment struct {\n\t// Mock\n\tClock             *clock.FakeClock\n\tEventRecorder     *coretest.EventRecorder\n\tInstanceTypeStore *nodeoverlay.InstanceTypeStore\n\n\t// API\n\tEC2API     *fake.EC2API\n\tEKSAPI     *fake.EKSAPI\n\tSSMAPI     *fake.SSMAPI\n\tIAMAPI     *fake.IAMAPI\n\tPricingAPI *fake.PricingAPI\n\n\t// Cache\n\tAMICache                             *cache.Cache\n\tEC2Cache                             *cache.Cache\n\tInstanceTypeCache                    *cache.Cache\n\tInstanceCache                        *cache.Cache\n\tOfferingCache                        *cache.Cache\n\tUnavailableOfferingsCache            *awscache.UnavailableOfferings\n\tLaunchTemplateCache                  *cache.Cache\n\tSubnetCache                          *cache.Cache\n\tAvailableIPAdressCache               *cache.Cache\n\tAssociatePublicIPAddressCache        *cache.Cache\n\tSecurityGroupCache                   *cache.Cache\n\tInstanceProfileCache                 *cache.Cache\n\tRoleCache                            *cache.Cache\n\tSSMCache                             *cache.Cache\n\tDiscoveredCapacityCache              *cache.Cache\n\tCapacityReservationCache             *cache.Cache\n\tCapacityReservationAvailabilityCache *cache.Cache\n\tValidationCache                      *cache.Cache\n\tRecreationCache                      *cache.Cache\n\tProtectedProfilesCache               *cache.Cache\n\n\t// Providers\n\tCapacityReservationProvider *capacityreservation.DefaultProvider\n\tInstanceTypesResolver       *instancetype.DefaultResolver\n\tInstanceTypesProvider       *instancetype.DefaultProvider\n\tInstanceProvider            *instance.DefaultProvider\n\tSubnetProvider              *subnet.DefaultProvider\n\tSecurityGroupProvider       *securitygroup.DefaultProvider\n\tInstanceProfileProvider     *instanceprofile.DefaultProvider\n\tPricingProvider             *pricing.DefaultProvider\n\tAMIProvider                 *amifamily.DefaultProvider\n\tAMIResolver                 *amifamily.DefaultResolver\n\tVersionProvider             *version.DefaultProvider\n\tLaunchTemplateProvider      *launchtemplate.DefaultProvider\n\tSSMProvider                 *ssmp.DefaultProvider\n}\n\nfunc NewEnvironment(ctx context.Context, env *coretest.Environment) *Environment {\n\t// Mock\n\tclock := &clock.FakeClock{}\n\tstore := nodeoverlay.NewInstanceTypeStore()\n\n\t// API\n\tec2api := fake.NewEC2API()\n\teksapi := fake.NewEKSAPI()\n\tssmapi := fake.NewSSMAPI()\n\tiamapi := fake.NewIAMAPI()\n\n\t// cache\n\tamiCache := cache.New(awscache.DefaultTTL, awscache.DefaultCleanupInterval)\n\tec2Cache := cache.New(awscache.DefaultTTL, awscache.DefaultCleanupInterval)\n\tinstanceTypeCache := cache.New(awscache.DefaultTTL, awscache.DefaultCleanupInterval)\n\tinstanceCache := cache.New(awscache.DefaultTTL, awscache.DefaultCleanupInterval)\n\tofferingCache := cache.New(awscache.DefaultTTL, awscache.DefaultCleanupInterval)\n\tdiscoveredCapacityCache := cache.New(awscache.DiscoveredCapacityCacheTTL, awscache.DefaultCleanupInterval)\n\tunavailableOfferingsCache := awscache.NewUnavailableOfferings()\n\tlaunchTemplateCache := cache.New(awscache.DefaultTTL, awscache.DefaultCleanupInterval)\n\tsubnetCache := cache.New(awscache.DefaultTTL, awscache.DefaultCleanupInterval)\n\tavailableIPAdressCache := cache.New(awscache.AvailableIPAddressTTL, awscache.DefaultCleanupInterval)\n\tassociatePublicIPAddressCache := cache.New(awscache.AssociatePublicIPAddressTTL, awscache.DefaultCleanupInterval)\n\tsecurityGroupCache := cache.New(awscache.DefaultTTL, awscache.DefaultCleanupInterval)\n\tinstanceProfileCache := cache.New(awscache.DefaultTTL, awscache.DefaultCleanupInterval)\n\troleCache := cache.New(awscache.DefaultTTL, awscache.DefaultCleanupInterval)\n\tprotectedProfilesCache := cache.New(awscache.DefaultTTL, awscache.DefaultCleanupInterval)\n\tssmCache := cache.New(awscache.DefaultTTL, awscache.DefaultCleanupInterval)\n\tcapacityReservationCache := cache.New(awscache.DefaultTTL, awscache.DefaultCleanupInterval)\n\tcapacityReservationAvailabilityCache := cache.New(24*time.Hour, awscache.DefaultCleanupInterval)\n\tvalidationCache := cache.New(awscache.DefaultTTL, awscache.DefaultCleanupInterval)\n\trecreationCache := cache.New(awscache.DefaultTTL, awscache.DefaultCleanupInterval)\n\tfakePricingAPI := &fake.PricingAPI{}\n\teventRecorder := coretest.NewEventRecorder()\n\n\t// Providers\n\tpricingProvider := pricing.NewDefaultProvider(fakePricingAPI, ec2api, fake.DefaultRegion, false)\n\tsubnetProvider := subnet.NewDefaultProvider(ec2api, subnetCache, availableIPAdressCache, associatePublicIPAddressCache)\n\tsecurityGroupProvider := securitygroup.NewDefaultProvider(ec2api, securityGroupCache)\n\tversionProvider := version.NewDefaultProvider(env.KubernetesInterface, eksapi)\n\t// Ensure we're able to hydrate the version before starting any reliant controllers.\n\t// Version updates are hydrated asynchronously after this, in the event of a failure\n\t// the previously resolved value will be used.\n\tlo.Must0(versionProvider.UpdateVersion(ctx))\n\tinstanceProfileProvider := instanceprofile.NewDefaultProvider(iamapi, instanceProfileCache, roleCache, protectedProfilesCache, fake.DefaultRegion)\n\tssmProvider := ssmp.NewDefaultProvider(ssmapi, ssmCache)\n\tamiProvider := amifamily.NewDefaultProvider(clock, versionProvider, ssmProvider, ec2api, amiCache)\n\tamiResolver := amifamily.NewDefaultResolver(fake.DefaultRegion)\n\tinstanceTypesResolver := instancetype.NewDefaultResolver(fake.DefaultRegion)\n\tcapacityReservationProvider := capacityreservation.NewProvider(ec2api, clock, capacityReservationCache, capacityReservationAvailabilityCache)\n\tinstanceTypesProvider := instancetype.NewDefaultProvider(instanceTypeCache, offeringCache, discoveredCapacityCache, ec2api, subnetProvider, pricingProvider, capacityReservationProvider, unavailableOfferingsCache, instanceTypesResolver)\n\t// Ensure we're able to hydrate instance types before starting any reliant controllers.\n\t// Instance type updates are hydrated asynchronously after this by controllers.\n\tlo.Must0(instanceTypesProvider.UpdateInstanceTypes(ctx))\n\tlo.Must0(instanceTypesProvider.UpdateInstanceTypeOfferings(ctx))\n\tlaunchTemplateProvider := launchtemplate.NewDefaultProvider(\n\t\tctx,\n\t\tlaunchTemplateCache,\n\t\tec2api,\n\t\teksapi,\n\t\tamiResolver,\n\t\tsecurityGroupProvider,\n\t\tsubnetProvider,\n\t\tlo.ToPtr(\"ca-bundle\"),\n\t\tmake(chan struct{}),\n\t\tnet.ParseIP(\"10.0.100.10\"),\n\t\t\"https://test-cluster\",\n\t)\n\tlaunchTemplateProvider.CABundle = lo.ToPtr(\"Y2EtYnVuZGxlCg==\")\n\tlaunchTemplateProvider.ClusterCIDR.Store(lo.ToPtr(\"10.100.0.0/16\"))\n\tlaunchTemplateProvider.KubeDNSIP = net.ParseIP(\"10.0.100.10\")\n\tlaunchTemplateProvider.ClusterEndpoint = \"https://test-cluster\"\n\tinstanceProvider := instance.NewDefaultProvider(\n\t\tctx,\n\t\t\"\",\n\t\teventRecorder,\n\t\tec2api,\n\t\tunavailableOfferingsCache,\n\t\tsubnetProvider,\n\t\tlaunchTemplateProvider,\n\t\tcapacityReservationProvider,\n\t\tinstanceCache,\n\t)\n\n\treturn &Environment{\n\t\tClock:             clock,\n\t\tEventRecorder:     eventRecorder,\n\t\tInstanceTypeStore: store,\n\n\t\tEC2API:     ec2api,\n\t\tEKSAPI:     eksapi,\n\t\tSSMAPI:     ssmapi,\n\t\tIAMAPI:     iamapi,\n\t\tPricingAPI: fakePricingAPI,\n\n\t\tAMICache:          amiCache,\n\t\tEC2Cache:          ec2Cache,\n\t\tInstanceTypeCache: instanceTypeCache,\n\t\tInstanceCache:     instanceCache,\n\t\tOfferingCache:     offeringCache,\n\n\t\tLaunchTemplateCache:                  launchTemplateCache,\n\t\tSubnetCache:                          subnetCache,\n\t\tAvailableIPAdressCache:               availableIPAdressCache,\n\t\tAssociatePublicIPAddressCache:        associatePublicIPAddressCache,\n\t\tSecurityGroupCache:                   securityGroupCache,\n\t\tInstanceProfileCache:                 instanceProfileCache,\n\t\tRoleCache:                            roleCache,\n\t\tUnavailableOfferingsCache:            unavailableOfferingsCache,\n\t\tSSMCache:                             ssmCache,\n\t\tDiscoveredCapacityCache:              discoveredCapacityCache,\n\t\tCapacityReservationCache:             capacityReservationCache,\n\t\tCapacityReservationAvailabilityCache: capacityReservationAvailabilityCache,\n\t\tValidationCache:                      validationCache,\n\t\tRecreationCache:                      recreationCache,\n\t\tProtectedProfilesCache:               protectedProfilesCache,\n\n\t\tCapacityReservationProvider: capacityReservationProvider,\n\t\tInstanceTypesResolver:       instanceTypesResolver,\n\t\tInstanceTypesProvider:       instanceTypesProvider,\n\t\tInstanceProvider:            instanceProvider,\n\t\tSubnetProvider:              subnetProvider,\n\t\tSecurityGroupProvider:       securityGroupProvider,\n\t\tLaunchTemplateProvider:      launchTemplateProvider,\n\t\tInstanceProfileProvider:     instanceProfileProvider,\n\t\tPricingProvider:             pricingProvider,\n\t\tAMIProvider:                 amiProvider,\n\t\tAMIResolver:                 amiResolver,\n\t\tVersionProvider:             versionProvider,\n\t\tSSMProvider:                 ssmProvider,\n\t}\n}\n\nfunc (env *Environment) Reset() {\n\tenv.Clock.SetTime(time.Time{})\n\tenv.EC2API.Reset()\n\tenv.EKSAPI.Reset()\n\tenv.SSMAPI.Reset()\n\tenv.IAMAPI.Reset()\n\tenv.PricingAPI.Reset()\n\tenv.PricingProvider.Reset()\n\tenv.InstanceTypesProvider.Reset()\n\n\tenv.AMICache.Flush()\n\tenv.EC2Cache.Flush()\n\tenv.InstanceCache.Flush()\n\tenv.UnavailableOfferingsCache.Flush()\n\tenv.OfferingCache.Flush()\n\tenv.LaunchTemplateCache.Flush()\n\tenv.SubnetCache.Flush()\n\tenv.AssociatePublicIPAddressCache.Flush()\n\tenv.AvailableIPAdressCache.Flush()\n\tenv.SecurityGroupCache.Flush()\n\tenv.InstanceProfileCache.Flush()\n\tenv.SSMCache.Flush()\n\tenv.DiscoveredCapacityCache.Flush()\n\tenv.CapacityReservationCache.Flush()\n\tenv.ValidationCache.Flush()\n\tenv.RecreationCache.Flush()\n\tenv.ProtectedProfilesCache.Flush()\n\tmfs, err := crmetrics.Registry.Gather()\n\tif err != nil {\n\t\tfor _, mf := range mfs {\n\t\t\tfor _, metric := range mf.GetMetric() {\n\t\t\t\tif metric != nil {\n\t\t\t\t\tmetric.Reset()\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tenv.LaunchTemplateProvider.CABundle = lo.ToPtr(\"Y2EtYnVuZGxlCg==\")\n\tenv.LaunchTemplateProvider.ClusterCIDR.Store(lo.ToPtr(\"10.100.0.0/16\"))\n\tenv.LaunchTemplateProvider.KubeDNSIP = net.ParseIP(\"10.0.100.10\")\n\tenv.LaunchTemplateProvider.ClusterEndpoint = \"https://test-cluster\"\n}\n\nfunc NodeInstanceIDFieldIndexer(ctx context.Context) func(ctrlcache.Cache) error {\n\treturn func(c ctrlcache.Cache) error {\n\t\treturn c.IndexField(ctx, &corev1.Node{}, \"spec.instanceID\", func(obj client.Object) []string {\n\t\t\tif obj.(*corev1.Node).Spec.ProviderID == \"\" {\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\tid, e := utils.ParseInstanceID(obj.(*corev1.Node).Spec.ProviderID)\n\t\t\tif e != nil || id == \"\" {\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\treturn []string{id}\n\t\t})\n\t}\n}\n\nfunc NodeClaimInstanceIDFieldIndexer(ctx context.Context) func(ctrlcache.Cache) error {\n\treturn func(c ctrlcache.Cache) error {\n\t\treturn c.IndexField(ctx, &karpv1.NodeClaim{}, \"status.instanceID\", func(obj client.Object) []string {\n\t\t\tif obj.(*karpv1.NodeClaim).Status.ProviderID == \"\" {\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\tid, e := utils.ParseInstanceID(obj.(*karpv1.NodeClaim).Status.ProviderID)\n\t\t\tif e != nil || id == \"\" {\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\treturn []string{id}\n\t\t})\n\t}\n}\n"
  },
  {
    "path": "pkg/test/nodeclass.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage test\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/imdario/mergo\"\n\tcorev1 \"k8s.io/api/core/v1\"\n\n\tkarpv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n\t\"sigs.k8s.io/karpenter/pkg/test\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n)\n\nfunc EC2NodeClass(overrides ...v1.EC2NodeClass) *v1.EC2NodeClass {\n\toptions := v1.EC2NodeClass{}\n\tfor _, override := range overrides {\n\t\tif err := mergo.Merge(&options, override, mergo.WithOverride); err != nil {\n\t\t\tpanic(fmt.Sprintf(\"Failed to merge settings: %s\", err))\n\t\t}\n\t}\n\tif len(options.Spec.AMISelectorTerms) == 0 {\n\t\toptions.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{Alias: \"al2023@latest\"}}\n\t\toptions.Status.AMIs = []v1.AMI{\n\t\t\t{\n\t\t\t\tID: \"ami-test1\",\n\t\t\t\tRequirements: []corev1.NodeSelectorRequirement{\n\t\t\t\t\t{Key: corev1.LabelArchStable, Operator: corev1.NodeSelectorOpIn, Values: []string{karpv1.ArchitectureAmd64}},\n\t\t\t\t\t{Key: v1.LabelInstanceGPUCount, Operator: corev1.NodeSelectorOpDoesNotExist},\n\t\t\t\t\t{Key: v1.LabelInstanceAcceleratorCount, Operator: corev1.NodeSelectorOpDoesNotExist},\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tID: \"ami-test2\",\n\t\t\t\tRequirements: []corev1.NodeSelectorRequirement{\n\t\t\t\t\t{Key: corev1.LabelArchStable, Operator: corev1.NodeSelectorOpIn, Values: []string{karpv1.ArchitectureAmd64}},\n\t\t\t\t\t{Key: v1.LabelInstanceGPUCount, Operator: corev1.NodeSelectorOpExists},\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tID: \"ami-test3\",\n\t\t\t\tRequirements: []corev1.NodeSelectorRequirement{\n\t\t\t\t\t{Key: corev1.LabelArchStable, Operator: corev1.NodeSelectorOpIn, Values: []string{karpv1.ArchitectureAmd64}},\n\t\t\t\t\t{Key: v1.LabelInstanceAcceleratorCount, Operator: corev1.NodeSelectorOpExists},\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tID: \"ami-test4\",\n\t\t\t\tRequirements: []corev1.NodeSelectorRequirement{\n\t\t\t\t\t{Key: corev1.LabelArchStable, Operator: corev1.NodeSelectorOpIn, Values: []string{karpv1.ArchitectureArm64}},\n\t\t\t\t\t{Key: v1.LabelInstanceGPUCount, Operator: corev1.NodeSelectorOpDoesNotExist},\n\t\t\t\t\t{Key: v1.LabelInstanceAcceleratorCount, Operator: corev1.NodeSelectorOpDoesNotExist},\n\t\t\t\t},\n\t\t\t},\n\t\t}\n\t}\n\tif options.Spec.Role == \"\" {\n\t\toptions.Spec.Role = \"test-role\"\n\t\toptions.Status.InstanceProfile = \"test-profile\"\n\t}\n\tif len(options.Spec.SecurityGroupSelectorTerms) == 0 {\n\t\toptions.Spec.SecurityGroupSelectorTerms = []v1.SecurityGroupSelectorTerm{\n\t\t\t{\n\t\t\t\tTags: map[string]string{\n\t\t\t\t\t\"*\": \"*\",\n\t\t\t\t},\n\t\t\t},\n\t\t}\n\t\toptions.Status.SecurityGroups = []v1.SecurityGroup{\n\t\t\t{\n\t\t\t\tID: \"sg-test1\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tID: \"sg-test2\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tID: \"sg-test3\",\n\t\t\t},\n\t\t}\n\t}\n\tif len(options.Spec.SubnetSelectorTerms) == 0 {\n\t\toptions.Spec.SubnetSelectorTerms = []v1.SubnetSelectorTerm{\n\t\t\t{\n\t\t\t\tTags: map[string]string{\n\t\t\t\t\t\"*\": \"*\",\n\t\t\t\t},\n\t\t\t},\n\t\t}\n\t\toptions.Status.Subnets = []v1.Subnet{\n\t\t\t{\n\t\t\t\tID:     \"subnet-test1\",\n\t\t\t\tZone:   \"test-zone-1a\",\n\t\t\t\tZoneID: \"tstz1-1a\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tID:     \"subnet-test2\",\n\t\t\t\tZone:   \"test-zone-1b\",\n\t\t\t\tZoneID: \"tstz1-1b\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tID:     \"subnet-test3\",\n\t\t\t\tZone:   \"test-zone-1c\",\n\t\t\t\tZoneID: \"tstz1-1c\",\n\t\t\t},\n\t\t}\n\t}\n\treturn &v1.EC2NodeClass{\n\t\tObjectMeta: test.ObjectMeta(options.ObjectMeta),\n\t\tSpec:       options.Spec,\n\t\tStatus:     options.Status,\n\t}\n}\n\ntype TestNodeClass struct {\n\tv1.EC2NodeClass\n}\n\nfunc (t *TestNodeClass) InstanceProfileTags(clusterName string) map[string]string {\n\treturn nil\n}\n"
  },
  {
    "path": "pkg/test/options.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage test\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/imdario/mergo\"\n\t\"github.com/samber/lo\"\n\n\t\"github.com/aws/karpenter-provider-aws/pkg/operator/options\"\n)\n\ntype OptionsFields struct {\n\tClusterCABundle         *string\n\tClusterName             *string\n\tClusterEndpoint         *string\n\tIsolatedVPC             *bool\n\tEKSControlPlane         *bool\n\tVMMemoryOverheadPercent *float64\n\tInterruptionQueue       *string\n\tReservedENIs            *int\n\tDisableDryRun           *bool\n}\n\nfunc Options(overrides ...OptionsFields) *options.Options {\n\topts := OptionsFields{}\n\tfor _, override := range overrides {\n\t\tif err := mergo.Merge(&opts, override, mergo.WithOverride); err != nil {\n\t\t\tpanic(fmt.Sprintf(\"Failed to merge settings: %s\", err))\n\t\t}\n\t}\n\treturn &options.Options{\n\t\tClusterCABundle:         lo.FromPtrOr(opts.ClusterCABundle, \"\"),\n\t\tClusterName:             lo.FromPtrOr(opts.ClusterName, \"test-cluster\"),\n\t\tClusterEndpoint:         lo.FromPtrOr(opts.ClusterEndpoint, \"https://test-cluster\"),\n\t\tIsolatedVPC:             lo.FromPtrOr(opts.IsolatedVPC, false),\n\t\tEKSControlPlane:         lo.FromPtrOr(opts.EKSControlPlane, false),\n\t\tVMMemoryOverheadPercent: lo.FromPtrOr(opts.VMMemoryOverheadPercent, 0.075),\n\t\tInterruptionQueue:       lo.FromPtrOr(opts.InterruptionQueue, \"\"),\n\t\tReservedENIs:            lo.FromPtrOr(opts.ReservedENIs, 0),\n\t\tDisableDryRun:           lo.FromPtrOr(opts.DisableDryRun, false),\n\t}\n}\n"
  },
  {
    "path": "pkg/test/utils.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage test\n\nimport (\n\tapiextensionsv1 \"k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1\"\n\n\t\"github.com/aws/karpenter-provider-aws/pkg/apis\"\n)\n\nfunc RemoveNodeClassTagValidation(crds []*apiextensionsv1.CustomResourceDefinition) []*apiextensionsv1.CustomResourceDefinition {\n\tfor _, crd := range apis.CRDs {\n\t\tif crd.Name != \"ec2nodeclasses.karpenter.k8s.aws\" {\n\t\t\tcontinue\n\t\t}\n\t\toverrideProperties := crd.Spec.Versions[0].Schema.OpenAPIV3Schema.Properties[\"spec\"].Properties[\"tags\"]\n\t\toverrideProperties.XValidations = nil\n\t\tcrd.Spec.Versions[0].Schema.OpenAPIV3Schema.Properties[\"spec\"].Properties[\"tags\"] = overrideProperties\n\t}\n\treturn crds\n}\n\n// DisableCapacityReservationIDValidation updates the regex validation used for capacity reservation IDs to allow any\n// string after the \"cr-\" prefix. This enables us to embed useful debugging information in the reservation ID, such as\n// the instance type and zone.\nfunc DisableCapacityReservationIDValidation(crds []*apiextensionsv1.CustomResourceDefinition) []*apiextensionsv1.CustomResourceDefinition {\n\tfor _, crd := range crds {\n\t\tif crd.Name != \"ec2nodeclasses.karpenter.k8s.aws\" {\n\t\t\tcontinue\n\t\t}\n\t\t// Disable validation for the selector terms\n\t\tidProps := crd.Spec.Versions[0].Schema.OpenAPIV3Schema.Properties[\"spec\"].Properties[\"capacityReservationSelectorTerms\"].Items.Schema.Properties[\"id\"]\n\t\tidProps.Pattern = \"\"\n\t\tcrd.Spec.Versions[0].Schema.OpenAPIV3Schema.Properties[\"spec\"].Properties[\"capacityReservationSelectorTerms\"].Items.Schema.Properties[\"id\"] = idProps\n\n\t\t// Disable validation for the status\n\t\tidProps = crd.Spec.Versions[0].Schema.OpenAPIV3Schema.Properties[\"status\"].Properties[\"capacityReservations\"].Items.Schema.Properties[\"id\"]\n\t\tidProps.Pattern = \"\"\n\t\tcrd.Spec.Versions[0].Schema.OpenAPIV3Schema.Properties[\"status\"].Properties[\"capacityReservations\"].Items.Schema.Properties[\"id\"] = idProps\n\t}\n\treturn crds\n}\n"
  },
  {
    "path": "pkg/utils/suite_test.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage utils_test\n\nimport (\n\t\"testing\"\n\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n\tmetav1 \"k8s.io/apimachinery/pkg/apis/meta/v1\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/utils\"\n)\n\nfunc TestUtils(t *testing.T) {\n\tRegisterFailHandler(Fail)\n\tRunSpecs(t, \"Utils Suite\")\n}\n\nvar _ = Describe(\"GetNodeClassHash\", func() {\n\tIt(\"should return formatted hash with UID and Generation\", func() {\n\t\tnodeClass := &v1.EC2NodeClass{\n\t\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\t\tUID:        \"test-uid-123\",\n\t\t\t\tGeneration: 5,\n\t\t\t},\n\t\t}\n\t\thash := utils.GetNodeClassHash(nodeClass)\n\t\tExpect(hash).To(Equal(\"test-uid-123-5\"))\n\t})\n})\n"
  },
  {
    "path": "pkg/utils/utils.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage utils\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"regexp\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/aws/aws-sdk-go-v2/aws\"\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\tiamtypes \"github.com/aws/aws-sdk-go-v2/service/iam/types\"\n\t\"github.com/awslabs/operatorpkg/serrors\"\n\tkarpv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\n\t\"github.com/samber/lo\"\n)\n\nvar (\n\tinstanceIDRegex = regexp.MustCompile(`(?P<Provider>.*):///(?P<AZ>.*)/(?P<InstanceID>.*)`)\n)\n\n// ParseInstanceID parses the provider ID stored on the node to get the instance ID\n// associated with a node\nfunc ParseInstanceID(providerID string) (string, error) {\n\tmatches := instanceIDRegex.FindStringSubmatch(providerID)\n\tif matches == nil {\n\t\treturn \"\", serrors.Wrap(fmt.Errorf(\"provider id does not match known format\"), \"provider-id\", providerID)\n\t}\n\tfor i, name := range instanceIDRegex.SubexpNames() {\n\t\tif name == \"InstanceID\" {\n\t\t\treturn matches[i], nil\n\t\t}\n\t}\n\treturn \"\", serrors.Wrap(fmt.Errorf(\"provider id does not match known format\"), \"provider-id\", providerID)\n}\n\n// EC2MergeTags takes a variadic list of maps and merges them together into a list of\n// EC2 tags to be passed into EC2 API calls\nfunc EC2MergeTags(tags ...map[string]string) []ec2types.Tag {\n\treturn lo.MapToSlice(lo.Assign(tags...), func(k, v string) ec2types.Tag {\n\t\treturn ec2types.Tag{Key: aws.String(k), Value: aws.String(v)}\n\t})\n}\n\n// EC2MergeTags takes a variadic list of maps and merges them together into a list of\n// EC2 tags to be passed into EC2 API calls\nfunc IAMMergeTags(tags ...map[string]string) []iamtypes.Tag {\n\treturn lo.MapToSlice(lo.Assign(tags...), func(k, v string) iamtypes.Tag {\n\t\treturn iamtypes.Tag{Key: aws.String(k), Value: aws.String(v)}\n\t})\n}\n\n// PrettySlice truncates a slice after a certain number of max items to ensure\n// that the Slice isn't too long\nfunc PrettySlice[T any](s []T, maxItems int) string {\n\tvar sb strings.Builder\n\tfor i, elem := range s {\n\t\tif i > maxItems-1 {\n\t\t\tfmt.Fprintf(&sb, \" and %d other(s)\", len(s)-i)\n\t\t\tbreak\n\t\t} else if i > 0 {\n\t\t\tfmt.Fprint(&sb, \", \")\n\t\t}\n\t\tfmt.Fprint(&sb, elem)\n\t}\n\treturn sb.String()\n}\n\n// WithDefaultFloat64 returns the float64 value of the supplied environment variable or, if not present,\n// the supplied default value. If the float64 conversion fails, returns the default\nfunc WithDefaultFloat64(key string, def float64) float64 {\n\tval, ok := os.LookupEnv(key)\n\tif !ok {\n\t\treturn def\n\t}\n\tf, err := strconv.ParseFloat(val, 64)\n\tif err != nil {\n\t\treturn def\n\t}\n\treturn f\n}\n\nfunc GetTags(nodeClass *v1.EC2NodeClass, nodeClaim *karpv1.NodeClaim, clusterName string) (map[string]string, error) {\n\tvar invalidTags []string\n\tfor key := range nodeClass.Spec.Tags {\n\t\tfor _, exp := range v1.RestrictedTagPatterns {\n\t\t\tif exp.MatchString(key) {\n\t\t\t\tinvalidTags = append(invalidTags, key)\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\tif len(invalidTags) != 0 {\n\t\tquotedTags := lo.Map(invalidTags, func(tag string, _ int) string {\n\t\t\treturn fmt.Sprintf(\"%q\", tag)\n\t\t})\n\t\treturn nil, serrors.Wrap(fmt.Errorf(\"tags failed validation requirements\"), \"tags\", strings.Join(quotedTags, \", \"))\n\t}\n\tstaticTags := map[string]string{\n\t\tfmt.Sprintf(\"kubernetes.io/cluster/%s\", clusterName): \"owned\",\n\t\tkarpv1.NodePoolLabelKey:                              nodeClaim.Labels[karpv1.NodePoolLabelKey],\n\t\tv1.EKSClusterNameTagKey:                              clusterName,\n\t\tv1.LabelNodeClass:                                    nodeClass.Name,\n\t}\n\treturn lo.Assign(nodeClass.Spec.Tags, staticTags), nil\n}\n\nfunc GetNodeClassHash(nodeClass *v1.EC2NodeClass) string {\n\treturn fmt.Sprintf(\"%s-%d\", nodeClass.UID, nodeClass.Generation)\n}\n"
  },
  {
    "path": "test/README.md",
    "content": "# E2E Testing\n\nKarpenter leverages Github Actions to run our E2E test suites. These suites are triggered by:\n1. Periodic schedule runs every 8 hours\n2. New commits to the `main` branch\n3. `/karpenter snapshot` review comments by maintainers on Pull Requests\n\n![GithubActions Architecture](./assets/gha_architecture.png)\n\n## Directories\n- `./.github/workflows`: Workflow files run within this repository. Relevant files for E2E testing are prefixed with `e2e-`\n- `./.github/actions/e2e`: Composite actions utilized by the E2E workflows\n- `./test/cloudformation`: Testing IAM Roles, Managed Prometheus Workspace, Managed Grafana Workspace\n- `./test/suites`: Directories defining test suites\n- `./test/pkg`: Common utilities and expectations\n- `./test/hack`: Testing scripts\n\n## Enabling Github Action Runs in Your AWS Account\n\n1. Deploy the [Cloudformation stacks](https://github.com/aws/karpenter-provider-aws/tree/main/test/cloudformation/README.md) into your account to enable Managed Prometheus, Managed Grafana, and the Github Actions runner policies.\n2. Set the following [Github Actions environment variables](https://docs.github.com/en/actions/learn-github-actions/variables#defining-configuration-variables-for-multiple-workflows) in your repository fork under `Settings/Secrets and Variables/Actions`:\n   ```yaml\n   AWS_REGION: <region>\n   ACCOUNT_ID: <account-id>\n   ROLE_NAME: <github-actions-role-name>\n   PROMETHEUS_REGION: <managed-prometheus-hosted-region>\n   TIMESTREAM_REGION: <timestream-hosted-region>\n   WORKSPACE_ID: <managed-prometheus-workspace-id>\n   ```\n3. Trigger a `workflow_dispatch` event against the branch with your workflow changes to run the tests in GHA.\n4. [Optional] Update the `SLACK_WEBHOOK_URL` secret to reference a custom slack webhook url for publishing build notification messages into your build notification slack channel."
  },
  {
    "path": "test/assets/gha_architecture.excalidraw",
    "content": "{\n  \"type\": \"excalidraw\",\n  \"version\": 2,\n  \"source\": \"https://excalidraw.com\",\n  \"elements\": [\n    {\n      \"type\": \"rectangle\",\n      \"version\": 1038,\n      \"versionNonce\": 2004857194,\n      \"isDeleted\": false,\n      \"id\": \"zx6FbKXOyMyw9PcqxxUMQ\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 1,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 1,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 1338.4659888251404,\n      \"y\": 2019.4958816356511,\n      \"strokeColor\": \"#1e1e1e\",\n      \"backgroundColor\": \"#ffd8a8\",\n      \"width\": 291,\n      \"height\": 318,\n      \"seed\": 923071512,\n      \"groupIds\": [],\n      \"frameId\": null,\n      \"roundness\": {\n        \"type\": 3\n      },\n      \"boundElements\": [\n        {\n          \"type\": \"text\",\n          \"id\": \"xF3jIBoPXaQBUHcdMvPVl\"\n        },\n        {\n          \"id\": \"wEyvVv5EcEsO8baENVIwa\",\n          \"type\": \"arrow\"\n        },\n        {\n          \"id\": \"6cESX7bgFsuHc1sCgYS82\",\n          \"type\": \"arrow\"\n        }\n      ],\n      \"updated\": 1689638439513,\n      \"link\": null,\n      \"locked\": false\n    },\n    {\n      \"type\": \"text\",\n      \"version\": 1043,\n      \"versionNonce\": 111014454,\n      \"isDeleted\": false,\n      \"id\": \"xF3jIBoPXaQBUHcdMvPVl\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 1,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 1,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 1431.2760245307068,\n      \"y\": 2153.495881635651,\n      \"strokeColor\": \"#1e1e1e\",\n      \"backgroundColor\": \"#ffec99\",\n      \"width\": 105.37992858886719,\n      \"height\": 50,\n      \"seed\": 2004791576,\n      \"groupIds\": [],\n      \"frameId\": null,\n      \"roundness\": null,\n      \"boundElements\": [],\n      \"updated\": 1689638439513,\n      \"link\": null,\n      \"locked\": false,\n      \"fontSize\": 20,\n      \"fontFamily\": 1,\n      \"text\": \"E2EMatrix\\nWorkflow\",\n      \"textAlign\": \"center\",\n      \"verticalAlign\": \"middle\",\n      \"containerId\": \"zx6FbKXOyMyw9PcqxxUMQ\",\n      \"originalText\": \"E2EMatrix\\nWorkflow\",\n      \"lineHeight\": 1.25,\n      \"baseline\": 43\n    },\n    {\n      \"type\": \"rectangle\",\n      \"version\": 494,\n      \"versionNonce\": 807007274,\n      \"isDeleted\": false,\n      \"id\": \"ydScV4RG6JNPMyyKhEh1B\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 1,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 1,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 449.31704846903347,\n      \"y\": 2222.225984324751,\n      \"strokeColor\": \"#1e1e1e\",\n      \"backgroundColor\": \"#ffd8a8\",\n      \"width\": 290.2452256944443,\n      \"height\": 113.95941840277783,\n      \"seed\": 1506793240,\n      \"groupIds\": [],\n      \"frameId\": null,\n      \"roundness\": {\n        \"type\": 3\n      },\n      \"boundElements\": [\n        {\n          \"type\": \"text\",\n          \"id\": \"aBc0QFwVzV-XOL9jJqDO9\"\n        },\n        {\n          \"id\": \"LjXbFhpzOARqWOIL8suGb\",\n          \"type\": \"arrow\"\n        },\n        {\n          \"id\": \"FEs_R4uABm_3APoxvsd2u\",\n          \"type\": \"arrow\"\n        }\n      ],\n      \"updated\": 1689638439513,\n      \"link\": null,\n      \"locked\": false\n    },\n    {\n      \"type\": \"text\",\n      \"version\": 453,\n      \"versionNonce\": 1842232182,\n      \"isDeleted\": false,\n      \"id\": \"aBc0QFwVzV-XOL9jJqDO9\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 1,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 1,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 553.149698547701,\n      \"y\": 2254.20569352614,\n      \"strokeColor\": \"#1e1e1e\",\n      \"backgroundColor\": \"#ffec99\",\n      \"width\": 82.57992553710938,\n      \"height\": 50,\n      \"seed\": 1693791256,\n      \"groupIds\": [],\n      \"frameId\": null,\n      \"roundness\": null,\n      \"boundElements\": [],\n      \"updated\": 1689638439513,\n      \"link\": null,\n      \"locked\": false,\n      \"fontSize\": 20,\n      \"fontFamily\": 1,\n      \"text\": \"Release\\nWorkflow\",\n      \"textAlign\": \"center\",\n      \"verticalAlign\": \"middle\",\n      \"containerId\": \"ydScV4RG6JNPMyyKhEh1B\",\n      \"originalText\": \"Release\\nWorkflow\",\n      \"lineHeight\": 1.25,\n      \"baseline\": 43\n    },\n    {\n      \"type\": \"rectangle\",\n      \"version\": 619,\n      \"versionNonce\": 1239277290,\n      \"isDeleted\": false,\n      \"id\": \"RBY-AA-xzHVPzhbUsnR-C\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 1,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 1,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 449.5010666654831,\n      \"y\": 2012.5323112579276,\n      \"strokeColor\": \"#1e1e1e\",\n      \"backgroundColor\": \"#ffd8a8\",\n      \"width\": 290.2452256944443,\n      \"height\": 113.95941840277783,\n      \"seed\": 2103898392,\n      \"groupIds\": [],\n      \"frameId\": null,\n      \"roundness\": {\n        \"type\": 3\n      },\n      \"boundElements\": [\n        {\n          \"type\": \"text\",\n          \"id\": \"0lw0dRe0f7MAsoXpZ-_Hn\"\n        },\n        {\n          \"id\": \"LjXbFhpzOARqWOIL8suGb\",\n          \"type\": \"arrow\"\n        },\n        {\n          \"id\": \"NMa4r9h0IuGf7sbFF4tcF\",\n          \"type\": \"arrow\"\n        },\n        {\n          \"id\": \"8xuZYTSmuvCzVDHfjW2AT\",\n          \"type\": \"arrow\"\n        }\n      ],\n      \"updated\": 1689638439513,\n      \"link\": null,\n      \"locked\": false\n    },\n    {\n      \"type\": \"text\",\n      \"version\": 612,\n      \"versionNonce\": 849566902,\n      \"isDeleted\": false,\n      \"id\": \"0lw0dRe0f7MAsoXpZ-_Hn\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 1,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 1,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 550.7137216269631,\n      \"y\": 2044.5120204593165,\n      \"strokeColor\": \"#1e1e1e\",\n      \"backgroundColor\": \"#ffec99\",\n      \"width\": 87.81991577148438,\n      \"height\": 50,\n      \"seed\": 2056850968,\n      \"groupIds\": [],\n      \"frameId\": null,\n      \"roundness\": null,\n      \"boundElements\": [],\n      \"updated\": 1689638439513,\n      \"link\": null,\n      \"locked\": false,\n      \"fontSize\": 20,\n      \"fontFamily\": 1,\n      \"text\": \"Snapshot\\nWorkflow\",\n      \"textAlign\": \"center\",\n      \"verticalAlign\": \"middle\",\n      \"containerId\": \"RBY-AA-xzHVPzhbUsnR-C\",\n      \"originalText\": \"Snapshot\\nWorkflow\",\n      \"lineHeight\": 1.25,\n      \"baseline\": 43\n    },\n    {\n      \"type\": \"arrow\",\n      \"version\": 824,\n      \"versionNonce\": 1096184234,\n      \"isDeleted\": false,\n      \"id\": \"LjXbFhpzOARqWOIL8suGb\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 1,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 1,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 591.0856275751004,\n      \"y\": 2131.248348584316,\n      \"strokeColor\": \"#1e1e1e\",\n      \"backgroundColor\": \"#ffd8a8\",\n      \"width\": 0.027945959923272312,\n      \"height\": 84.26778330987963,\n      \"seed\": 629115672,\n      \"groupIds\": [],\n      \"frameId\": null,\n      \"roundness\": {\n        \"type\": 2\n      },\n      \"boundElements\": [\n        {\n          \"type\": \"text\",\n          \"id\": \"hvbPfKSTJ--D_5iQhlo1V\"\n        }\n      ],\n      \"updated\": 1689638439513,\n      \"link\": null,\n      \"locked\": false,\n      \"startBinding\": {\n        \"elementId\": \"RBY-AA-xzHVPzhbUsnR-C\",\n        \"focus\": 0.024235507586258358,\n        \"gap\": 4.756618923610176\n      },\n      \"endBinding\": {\n        \"elementId\": \"ydScV4RG6JNPMyyKhEh1B\",\n        \"focus\": -0.02344678146888711,\n        \"gap\": 6.709852430555429\n      },\n      \"lastCommittedPoint\": null,\n      \"startArrowhead\": null,\n      \"endArrowhead\": \"arrow\",\n      \"points\": [\n        [\n          0,\n          0\n        ],\n        [\n          -0.027945959923272312,\n          84.26778330987963\n        ]\n      ]\n    },\n    {\n      \"type\": \"text\",\n      \"version\": 289,\n      \"versionNonce\": 2059556342,\n      \"isDeleted\": false,\n      \"id\": \"hvbPfKSTJ--D_5iQhlo1V\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 1,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 1,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 526.6526312942311,\n      \"y\": 2161.0320824150285,\n      \"strokeColor\": \"#1e1e1e\",\n      \"backgroundColor\": \"#ffd8a8\",\n      \"width\": 129.3199005126953,\n      \"height\": 25,\n      \"seed\": 143550488,\n      \"groupIds\": [],\n      \"frameId\": null,\n      \"roundness\": null,\n      \"boundElements\": [],\n      \"updated\": 1689638439513,\n      \"link\": null,\n      \"locked\": false,\n      \"fontSize\": 20,\n      \"fontFamily\": 1,\n      \"text\": \"Workflow Call\",\n      \"textAlign\": \"center\",\n      \"verticalAlign\": \"middle\",\n      \"containerId\": \"LjXbFhpzOARqWOIL8suGb\",\n      \"originalText\": \"Workflow Call\",\n      \"lineHeight\": 1.25,\n      \"baseline\": 18\n    },\n    {\n      \"type\": \"arrow\",\n      \"version\": 771,\n      \"versionNonce\": 1236184170,\n      \"isDeleted\": false,\n      \"id\": \"NMa4r9h0IuGf7sbFF4tcF\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 1,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 1,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 349.38017669736695,\n      \"y\": 2068.1971216105867,\n      \"strokeColor\": \"#1e1e1e\",\n      \"backgroundColor\": \"#ffd8a8\",\n      \"width\": 90.39301168752382,\n      \"height\": 0.5085024882375819,\n      \"seed\": 824668776,\n      \"groupIds\": [],\n      \"frameId\": null,\n      \"roundness\": {\n        \"type\": 2\n      },\n      \"boundElements\": [],\n      \"updated\": 1689638439513,\n      \"link\": null,\n      \"locked\": false,\n      \"startBinding\": {\n        \"elementId\": \"w_0ld6IswNXpEgV8wxJq-\",\n        \"focus\": 0.15991981584903864,\n        \"gap\": 9.502781993065412\n      },\n      \"endBinding\": {\n        \"elementId\": \"RBY-AA-xzHVPzhbUsnR-C\",\n        \"focus\": 0.04662092029527796,\n        \"gap\": 9.727878280592279\n      },\n      \"lastCommittedPoint\": null,\n      \"startArrowhead\": null,\n      \"endArrowhead\": \"arrow\",\n      \"points\": [\n        [\n          0,\n          0\n        ],\n        [\n          90.39301168752382,\n          -0.5085024882375819\n        ]\n      ]\n    },\n    {\n      \"type\": \"text\",\n      \"version\": 511,\n      \"versionNonce\": 1865426742,\n      \"isDeleted\": false,\n      \"id\": \"w_0ld6IswNXpEgV8wxJq-\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 1,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 1,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 140.69756987519997,\n      \"y\": 2054.2222273958178,\n      \"strokeColor\": \"#1e1e1e\",\n      \"backgroundColor\": \"#ffd8a8\",\n      \"width\": 199.17982482910156,\n      \"height\": 25,\n      \"seed\": 727508328,\n      \"groupIds\": [],\n      \"frameId\": null,\n      \"roundness\": null,\n      \"boundElements\": [\n        {\n          \"id\": \"NMa4r9h0IuGf7sbFF4tcF\",\n          \"type\": \"arrow\"\n        }\n      ],\n      \"updated\": 1689638439513,\n      \"link\": null,\n      \"locked\": false,\n      \"fontSize\": 20,\n      \"fontFamily\": 1,\n      \"text\": \"/karpenter snapshot\",\n      \"textAlign\": \"center\",\n      \"verticalAlign\": \"top\",\n      \"containerId\": null,\n      \"originalText\": \"/karpenter snapshot\",\n      \"lineHeight\": 1.25,\n      \"baseline\": 18\n    },\n    {\n      \"type\": \"rectangle\",\n      \"version\": 1119,\n      \"versionNonce\": 2024902442,\n      \"isDeleted\": false,\n      \"id\": \"YAeafx3Z0eq7baYx2A05D\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 1,\n      \"strokeStyle\": \"dotted\",\n      \"roughness\": 1,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 429.9531569521829,\n      \"y\": 1992.32371706073,\n      \"strokeColor\": \"#1e1e1e\",\n      \"backgroundColor\": \"transparent\",\n      \"width\": 1745.7013872742664,\n      \"height\": 364.2878220685807,\n      \"seed\": 1839253528,\n      \"groupIds\": [],\n      \"frameId\": null,\n      \"roundness\": {\n        \"type\": 3\n      },\n      \"boundElements\": [],\n      \"updated\": 1689638439513,\n      \"link\": null,\n      \"locked\": false\n    },\n    {\n      \"type\": \"image\",\n      \"version\": 791,\n      \"versionNonce\": 1347539062,\n      \"isDeleted\": false,\n      \"id\": \"jGo18omOFGmSJKJ_tOBWU\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 1,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 1,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 431.4175548453951,\n      \"y\": 1938.1175848579485,\n      \"strokeColor\": \"transparent\",\n      \"backgroundColor\": \"#ffec99\",\n      \"width\": 42.16512706419505,\n      \"height\": 42.4997709297839,\n      \"seed\": 327157016,\n      \"groupIds\": [],\n      \"frameId\": null,\n      \"roundness\": null,\n      \"boundElements\": [],\n      \"updated\": 1689638439513,\n      \"link\": null,\n      \"locked\": false,\n      \"status\": \"saved\",\n      \"fileId\": \"3eb9928c23359ad1751a73b8eeb4fd9cab1a5977\",\n      \"scale\": [\n        1,\n        1\n      ]\n    },\n    {\n      \"type\": \"text\",\n      \"version\": 712,\n      \"versionNonce\": 1925847530,\n      \"isDeleted\": false,\n      \"id\": \"cpdurWJPPLnhc2n21xfck\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 1,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 1,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 485.7477491067342,\n      \"y\": 1947.4146768718372,\n      \"strokeColor\": \"#1e1e1e\",\n      \"backgroundColor\": \"transparent\",\n      \"width\": 66.50584411621094,\n      \"height\": 26.453993055555575,\n      \"seed\": 342860312,\n      \"groupIds\": [],\n      \"frameId\": null,\n      \"roundness\": null,\n      \"boundElements\": [],\n      \"updated\": 1689638439513,\n      \"link\": null,\n      \"locked\": false,\n      \"fontSize\": 21.16319444444446,\n      \"fontFamily\": 1,\n      \"text\": \"Github\",\n      \"textAlign\": \"center\",\n      \"verticalAlign\": \"top\",\n      \"containerId\": null,\n      \"originalText\": \"Github\",\n      \"lineHeight\": 1.25,\n      \"baseline\": 18\n    },\n    {\n      \"type\": \"rectangle\",\n      \"version\": 1566,\n      \"versionNonce\": 166482358,\n      \"isDeleted\": false,\n      \"id\": \"Ik1LKRH-0ZWp6By1fD9Q4\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 1,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 1,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 891.8454915818555,\n      \"y\": 2011.2681839841187,\n      \"strokeColor\": \"#1e1e1e\",\n      \"backgroundColor\": \"#ffd8a8\",\n      \"width\": 290.2452256944443,\n      \"height\": 113.95941840277783,\n      \"seed\": 1486241560,\n      \"groupIds\": [],\n      \"frameId\": null,\n      \"roundness\": {\n        \"type\": 3\n      },\n      \"boundElements\": [\n        {\n          \"type\": \"text\",\n          \"id\": \"_eY-2UjDXYmKsBLh4G3zV\"\n        },\n        {\n          \"id\": \"wEyvVv5EcEsO8baENVIwa\",\n          \"type\": \"arrow\"\n        },\n        {\n          \"id\": \"Vk2-I-e0f9L-iQdMc8m7j\",\n          \"type\": \"arrow\"\n        },\n        {\n          \"id\": \"5Rwi2AVgkRJeTRa3jfOjy\",\n          \"type\": \"arrow\"\n        },\n        {\n          \"id\": \"lct3SlksUzwIrgmcySwz7\",\n          \"type\": \"arrow\"\n        }\n      ],\n      \"updated\": 1689638439513,\n      \"link\": null,\n      \"locked\": false\n    },\n    {\n      \"type\": \"text\",\n      \"version\": 1586,\n      \"versionNonce\": 386092202,\n      \"isDeleted\": false,\n      \"id\": \"_eY-2UjDXYmKsBLh4G3zV\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 1,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 1,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 949.9581785867925,\n      \"y\": 2043.2478931855076,\n      \"strokeColor\": \"#1e1e1e\",\n      \"backgroundColor\": \"#ffec99\",\n      \"width\": 174.0198516845703,\n      \"height\": 50,\n      \"seed\": 246324248,\n      \"groupIds\": [],\n      \"frameId\": null,\n      \"roundness\": null,\n      \"boundElements\": [],\n      \"updated\": 1689638439513,\n      \"link\": null,\n      \"locked\": false,\n      \"fontSize\": 20,\n      \"fontFamily\": 1,\n      \"text\": \"E2EMatrixTrigger\\nWorkflow\",\n      \"textAlign\": \"center\",\n      \"verticalAlign\": \"middle\",\n      \"containerId\": \"Ik1LKRH-0ZWp6By1fD9Q4\",\n      \"originalText\": \"E2EMatrixTrigger\\nWorkflow\",\n      \"lineHeight\": 1.25,\n      \"baseline\": 43\n    },\n    {\n      \"type\": \"rectangle\",\n      \"version\": 905,\n      \"versionNonce\": 1193585398,\n      \"isDeleted\": false,\n      \"id\": \"ZShjs7XLLYImCeNL499wN\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 1,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 1,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 1784.4785296743084,\n      \"y\": 2063.0477413118924,\n      \"strokeColor\": \"#1e1e1e\",\n      \"backgroundColor\": \"#b2f2bb\",\n      \"width\": 109,\n      \"height\": 97,\n      \"seed\": 872762728,\n      \"groupIds\": [\n        \"l-qSDUs0bxWJCSUlhREA8\",\n        \"0Z0NZ1N-stQ3ruoUwrh0v\"\n      ],\n      \"frameId\": null,\n      \"roundness\": {\n        \"type\": 3\n      },\n      \"boundElements\": [\n        {\n          \"type\": \"text\",\n          \"id\": \"JN9meyuee8ffzaLJpz2kj\"\n        }\n      ],\n      \"updated\": 1689638439513,\n      \"link\": null,\n      \"locked\": false\n    },\n    {\n      \"type\": \"text\",\n      \"version\": 552,\n      \"versionNonce\": 721954666,\n      \"isDeleted\": false,\n      \"id\": \"JN9meyuee8ffzaLJpz2kj\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 1,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 1,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 1805.9465625112225,\n      \"y\": 2091.547741311893,\n      \"strokeColor\": \"#1e1e1e\",\n      \"backgroundColor\": \"transparent\",\n      \"width\": 66.06393432617188,\n      \"height\": 40,\n      \"seed\": 1808228456,\n      \"groupIds\": [\n        \"l-qSDUs0bxWJCSUlhREA8\",\n        \"0Z0NZ1N-stQ3ruoUwrh0v\"\n      ],\n      \"frameId\": null,\n      \"roundness\": null,\n      \"boundElements\": [],\n      \"updated\": 1689638439513,\n      \"link\": null,\n      \"locked\": false,\n      \"fontSize\": 16,\n      \"fontFamily\": 1,\n      \"text\": \"E2E\\nWorkflow\",\n      \"textAlign\": \"center\",\n      \"verticalAlign\": \"middle\",\n      \"containerId\": \"ZShjs7XLLYImCeNL499wN\",\n      \"originalText\": \"E2E\\nWorkflow\",\n      \"lineHeight\": 1.25,\n      \"baseline\": 34\n    },\n    {\n      \"type\": \"rectangle\",\n      \"version\": 982,\n      \"versionNonce\": 109042742,\n      \"isDeleted\": false,\n      \"id\": \"ONG100YUxxWmVunscsp7X\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 1,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 1,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 1909.7337428237965,\n      \"y\": 2063.0477413118924,\n      \"strokeColor\": \"#1e1e1e\",\n      \"backgroundColor\": \"#b2f2bb\",\n      \"width\": 109,\n      \"height\": 97,\n      \"seed\": 286047768,\n      \"groupIds\": [\n        \"l-qSDUs0bxWJCSUlhREA8\",\n        \"0Z0NZ1N-stQ3ruoUwrh0v\"\n      ],\n      \"frameId\": null,\n      \"roundness\": {\n        \"type\": 3\n      },\n      \"boundElements\": [\n        {\n          \"type\": \"text\",\n          \"id\": \"WMomcdywApT2ZUIwAYBmI\"\n        }\n      ],\n      \"updated\": 1689638439513,\n      \"link\": null,\n      \"locked\": false\n    },\n    {\n      \"type\": \"text\",\n      \"version\": 629,\n      \"versionNonce\": 119777834,\n      \"isDeleted\": false,\n      \"id\": \"WMomcdywApT2ZUIwAYBmI\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 1,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 1,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 1931.2017756607106,\n      \"y\": 2091.5477413118924,\n      \"strokeColor\": \"#1e1e1e\",\n      \"backgroundColor\": \"transparent\",\n      \"width\": 66.06393432617188,\n      \"height\": 40,\n      \"seed\": 301808408,\n      \"groupIds\": [\n        \"l-qSDUs0bxWJCSUlhREA8\",\n        \"0Z0NZ1N-stQ3ruoUwrh0v\"\n      ],\n      \"frameId\": null,\n      \"roundness\": null,\n      \"boundElements\": [],\n      \"updated\": 1689638439513,\n      \"link\": null,\n      \"locked\": false,\n      \"fontSize\": 16,\n      \"fontFamily\": 1,\n      \"text\": \"E2E\\nWorkflow\",\n      \"textAlign\": \"center\",\n      \"verticalAlign\": \"middle\",\n      \"containerId\": \"ONG100YUxxWmVunscsp7X\",\n      \"originalText\": \"E2E\\nWorkflow\",\n      \"lineHeight\": 1.25,\n      \"baseline\": 34\n    },\n    {\n      \"type\": \"rectangle\",\n      \"version\": 936,\n      \"versionNonce\": 769844598,\n      \"isDeleted\": false,\n      \"id\": \"jW60wmbj7FjIi_AD9-SM5\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 1,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 1,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 2034.9889559732842,\n      \"y\": 2063.0477413118924,\n      \"strokeColor\": \"#1e1e1e\",\n      \"backgroundColor\": \"#b2f2bb\",\n      \"width\": 109,\n      \"height\": 97,\n      \"seed\": 587662952,\n      \"groupIds\": [\n        \"l-qSDUs0bxWJCSUlhREA8\",\n        \"0Z0NZ1N-stQ3ruoUwrh0v\"\n      ],\n      \"frameId\": null,\n      \"roundness\": {\n        \"type\": 3\n      },\n      \"boundElements\": [\n        {\n          \"type\": \"text\",\n          \"id\": \"bZj-pUBLvThFnUsodahL4\"\n        }\n      ],\n      \"updated\": 1689638439513,\n      \"link\": null,\n      \"locked\": false\n    },\n    {\n      \"type\": \"text\",\n      \"version\": 584,\n      \"versionNonce\": 1111545066,\n      \"isDeleted\": false,\n      \"id\": \"bZj-pUBLvThFnUsodahL4\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 1,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 1,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 2056.4569888101983,\n      \"y\": 2091.5477413118924,\n      \"strokeColor\": \"#1e1e1e\",\n      \"backgroundColor\": \"transparent\",\n      \"width\": 66.06393432617188,\n      \"height\": 40,\n      \"seed\": 1680472424,\n      \"groupIds\": [\n        \"l-qSDUs0bxWJCSUlhREA8\",\n        \"0Z0NZ1N-stQ3ruoUwrh0v\"\n      ],\n      \"frameId\": null,\n      \"roundness\": null,\n      \"boundElements\": [],\n      \"updated\": 1689638439513,\n      \"link\": null,\n      \"locked\": false,\n      \"fontSize\": 16,\n      \"fontFamily\": 1,\n      \"text\": \"E2E\\nWorkflow\",\n      \"textAlign\": \"center\",\n      \"verticalAlign\": \"middle\",\n      \"containerId\": \"jW60wmbj7FjIi_AD9-SM5\",\n      \"originalText\": \"E2E\\nWorkflow\",\n      \"lineHeight\": 1.25,\n      \"baseline\": 34\n    },\n    {\n      \"type\": \"rectangle\",\n      \"version\": 999,\n      \"versionNonce\": 512935606,\n      \"isDeleted\": false,\n      \"id\": \"uwujjrTorSg9hDTAdQ-dM\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 1,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 1,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 1784.4785296743084,\n      \"y\": 2181.196026572877,\n      \"strokeColor\": \"#1e1e1e\",\n      \"backgroundColor\": \"#b2f2bb\",\n      \"width\": 109,\n      \"height\": 97,\n      \"seed\": 1359424104,\n      \"groupIds\": [\n        \"tVtFftecavi73ZmlBmgej\",\n        \"0Z0NZ1N-stQ3ruoUwrh0v\"\n      ],\n      \"frameId\": null,\n      \"roundness\": {\n        \"type\": 3\n      },\n      \"boundElements\": [\n        {\n          \"type\": \"text\",\n          \"id\": \"PtCqQI-K2TGD9xVfWEjXs\"\n        },\n        {\n          \"id\": \"6cESX7bgFsuHc1sCgYS82\",\n          \"type\": \"arrow\"\n        }\n      ],\n      \"updated\": 1689638439513,\n      \"link\": null,\n      \"locked\": false\n    },\n    {\n      \"type\": \"text\",\n      \"version\": 645,\n      \"versionNonce\": 1575659434,\n      \"isDeleted\": false,\n      \"id\": \"PtCqQI-K2TGD9xVfWEjXs\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 1,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 1,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 1805.9465625112225,\n      \"y\": 2209.696026572877,\n      \"strokeColor\": \"#1e1e1e\",\n      \"backgroundColor\": \"transparent\",\n      \"width\": 66.06393432617188,\n      \"height\": 40,\n      \"seed\": 646290792,\n      \"groupIds\": [\n        \"tVtFftecavi73ZmlBmgej\",\n        \"0Z0NZ1N-stQ3ruoUwrh0v\"\n      ],\n      \"frameId\": null,\n      \"roundness\": null,\n      \"boundElements\": [],\n      \"updated\": 1689638439513,\n      \"link\": null,\n      \"locked\": false,\n      \"fontSize\": 16,\n      \"fontFamily\": 1,\n      \"text\": \"E2E\\nWorkflow\",\n      \"textAlign\": \"center\",\n      \"verticalAlign\": \"middle\",\n      \"containerId\": \"uwujjrTorSg9hDTAdQ-dM\",\n      \"originalText\": \"E2E\\nWorkflow\",\n      \"lineHeight\": 1.25,\n      \"baseline\": 34\n    },\n    {\n      \"type\": \"rectangle\",\n      \"version\": 1076,\n      \"versionNonce\": 1228177398,\n      \"isDeleted\": false,\n      \"id\": \"TgOFbRaMBGaX5egDc-OD_\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 1,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 1,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 1909.7337428237965,\n      \"y\": 2181.196026572877,\n      \"strokeColor\": \"#1e1e1e\",\n      \"backgroundColor\": \"#b2f2bb\",\n      \"width\": 109,\n      \"height\": 97,\n      \"seed\": 1237168232,\n      \"groupIds\": [\n        \"tVtFftecavi73ZmlBmgej\",\n        \"0Z0NZ1N-stQ3ruoUwrh0v\"\n      ],\n      \"frameId\": null,\n      \"roundness\": {\n        \"type\": 3\n      },\n      \"boundElements\": [\n        {\n          \"type\": \"text\",\n          \"id\": \"YUDS8s6XVx8_ybV66jejG\"\n        },\n        {\n          \"id\": \"VEgOVHwe_DF_Qkg__nClU\",\n          \"type\": \"arrow\"\n        }\n      ],\n      \"updated\": 1689638439513,\n      \"link\": null,\n      \"locked\": false\n    },\n    {\n      \"type\": \"text\",\n      \"version\": 722,\n      \"versionNonce\": 1917592170,\n      \"isDeleted\": false,\n      \"id\": \"YUDS8s6XVx8_ybV66jejG\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 1,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 1,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 1931.2017756607106,\n      \"y\": 2209.696026572877,\n      \"strokeColor\": \"#1e1e1e\",\n      \"backgroundColor\": \"transparent\",\n      \"width\": 66.06393432617188,\n      \"height\": 40,\n      \"seed\": 310076264,\n      \"groupIds\": [\n        \"tVtFftecavi73ZmlBmgej\",\n        \"0Z0NZ1N-stQ3ruoUwrh0v\"\n      ],\n      \"frameId\": null,\n      \"roundness\": null,\n      \"boundElements\": [],\n      \"updated\": 1689638439513,\n      \"link\": null,\n      \"locked\": false,\n      \"fontSize\": 16,\n      \"fontFamily\": 1,\n      \"text\": \"E2E\\nWorkflow\",\n      \"textAlign\": \"center\",\n      \"verticalAlign\": \"middle\",\n      \"containerId\": \"TgOFbRaMBGaX5egDc-OD_\",\n      \"originalText\": \"E2E\\nWorkflow\",\n      \"lineHeight\": 1.25,\n      \"baseline\": 34\n    },\n    {\n      \"type\": \"rectangle\",\n      \"version\": 1030,\n      \"versionNonce\": 1103958326,\n      \"isDeleted\": false,\n      \"id\": \"WJad1dCQfYU113-Q8DsbL\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 1,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 1,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 2034.9889559732846,\n      \"y\": 2181.196026572877,\n      \"strokeColor\": \"#1e1e1e\",\n      \"backgroundColor\": \"#b2f2bb\",\n      \"width\": 109,\n      \"height\": 97,\n      \"seed\": 2131408488,\n      \"groupIds\": [\n        \"tVtFftecavi73ZmlBmgej\",\n        \"0Z0NZ1N-stQ3ruoUwrh0v\"\n      ],\n      \"frameId\": null,\n      \"roundness\": {\n        \"type\": 3\n      },\n      \"boundElements\": [\n        {\n          \"type\": \"text\",\n          \"id\": \"FQQItP-gE33UgRWmU0mz0\"\n        }\n      ],\n      \"updated\": 1689638439513,\n      \"link\": null,\n      \"locked\": false\n    },\n    {\n      \"type\": \"text\",\n      \"version\": 677,\n      \"versionNonce\": 1513112874,\n      \"isDeleted\": false,\n      \"id\": \"FQQItP-gE33UgRWmU0mz0\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 1,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 1,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 2056.4569888101987,\n      \"y\": 2209.696026572877,\n      \"strokeColor\": \"#1e1e1e\",\n      \"backgroundColor\": \"transparent\",\n      \"width\": 66.06393432617188,\n      \"height\": 40,\n      \"seed\": 1681369448,\n      \"groupIds\": [\n        \"tVtFftecavi73ZmlBmgej\",\n        \"0Z0NZ1N-stQ3ruoUwrh0v\"\n      ],\n      \"frameId\": null,\n      \"roundness\": null,\n      \"boundElements\": [],\n      \"updated\": 1689638439513,\n      \"link\": null,\n      \"locked\": false,\n      \"fontSize\": 16,\n      \"fontFamily\": 1,\n      \"text\": \"E2E\\nWorkflow\",\n      \"textAlign\": \"center\",\n      \"verticalAlign\": \"middle\",\n      \"containerId\": \"WJad1dCQfYU113-Q8DsbL\",\n      \"originalText\": \"E2E\\nWorkflow\",\n      \"lineHeight\": 1.25,\n      \"baseline\": 34\n    },\n    {\n      \"type\": \"rectangle\",\n      \"version\": 991,\n      \"versionNonce\": 1405188726,\n      \"isDeleted\": false,\n      \"id\": \"15Mkx4Dr4UcXXpPVwJB9V\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 1,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 1,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 438.6076717057281,\n      \"y\": 2480.6215606694573,\n      \"strokeColor\": \"#1e1e1e\",\n      \"backgroundColor\": \"#ffec99\",\n      \"width\": 297,\n      \"height\": 135,\n      \"seed\": 551124584,\n      \"groupIds\": [],\n      \"frameId\": null,\n      \"roundness\": {\n        \"type\": 3\n      },\n      \"boundElements\": [\n        {\n          \"type\": \"text\",\n          \"id\": \"Su1cyCVgtBbW6CAy_Ttk9\"\n        },\n        {\n          \"id\": \"FEs_R4uABm_3APoxvsd2u\",\n          \"type\": \"arrow\"\n        }\n      ],\n      \"updated\": 1689638439513,\n      \"link\": null,\n      \"locked\": false\n    },\n    {\n      \"type\": \"text\",\n      \"version\": 701,\n      \"versionNonce\": 1593970666,\n      \"isDeleted\": false,\n      \"id\": \"Su1cyCVgtBbW6CAy_Ttk9\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 1,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 1,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 567.14768025065,\n      \"y\": 2535.6215606694573,\n      \"strokeColor\": \"#1e1e1e\",\n      \"backgroundColor\": \"transparent\",\n      \"width\": 39.91998291015625,\n      \"height\": 25,\n      \"seed\": 1894609256,\n      \"groupIds\": [],\n      \"frameId\": null,\n      \"roundness\": null,\n      \"boundElements\": [],\n      \"updated\": 1689638439513,\n      \"link\": null,\n      \"locked\": false,\n      \"fontSize\": 20,\n      \"fontFamily\": 1,\n      \"text\": \"ECR\",\n      \"textAlign\": \"center\",\n      \"verticalAlign\": \"middle\",\n      \"containerId\": \"15Mkx4Dr4UcXXpPVwJB9V\",\n      \"originalText\": \"ECR\",\n      \"lineHeight\": 1.25,\n      \"baseline\": 18\n    },\n    {\n      \"type\": \"arrow\",\n      \"version\": 556,\n      \"versionNonce\": 366394294,\n      \"isDeleted\": false,\n      \"id\": \"FEs_R4uABm_3APoxvsd2u\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 1,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 1,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 591.0647752299711,\n      \"y\": 2342.4813696972346,\n      \"strokeColor\": \"#1e1e1e\",\n      \"backgroundColor\": \"#ffd8a8\",\n      \"width\": 2.2135855194266014,\n      \"height\": 134.6625434027776,\n      \"seed\": 537592936,\n      \"groupIds\": [],\n      \"frameId\": null,\n      \"roundness\": {\n        \"type\": 2\n      },\n      \"boundElements\": [\n        {\n          \"type\": \"text\",\n          \"id\": \"_gCTeR5690FN4O9SexSwa\"\n        }\n      ],\n      \"updated\": 1689638439513,\n      \"link\": null,\n      \"locked\": false,\n      \"startBinding\": {\n        \"elementId\": \"ydScV4RG6JNPMyyKhEh1B\",\n        \"focus\": 0.015985015275346313,\n        \"gap\": 6.295966969705887\n      },\n      \"endBinding\": {\n        \"elementId\": \"15Mkx4Dr4UcXXpPVwJB9V\",\n        \"focus\": 0.0038552751774837946,\n        \"gap\": 3.477647569444798\n      },\n      \"lastCommittedPoint\": null,\n      \"startArrowhead\": null,\n      \"endArrowhead\": \"arrow\",\n      \"points\": [\n        [\n          0,\n          0\n        ],\n        [\n          -2.2135855194266014,\n          134.6625434027776\n        ]\n      ]\n    },\n    {\n      \"type\": \"text\",\n      \"version\": 258,\n      \"versionNonce\": 1691124394,\n      \"isDeleted\": false,\n      \"id\": \"_gCTeR5690FN4O9SexSwa\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 1,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 1,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 512.1180471675234,\n      \"y\": 2384.8126413986233,\n      \"strokeColor\": \"#1e1e1e\",\n      \"backgroundColor\": \"#ffd8a8\",\n      \"width\": 155.67987060546875,\n      \"height\": 50,\n      \"seed\": 1543386984,\n      \"groupIds\": [],\n      \"frameId\": null,\n      \"roundness\": null,\n      \"boundElements\": [],\n      \"updated\": 1689638439513,\n      \"link\": null,\n      \"locked\": false,\n      \"fontSize\": 20,\n      \"fontFamily\": 1,\n      \"text\": \"Publish\\nSnapshot Image\",\n      \"textAlign\": \"center\",\n      \"verticalAlign\": \"middle\",\n      \"containerId\": \"FEs_R4uABm_3APoxvsd2u\",\n      \"originalText\": \"Publish\\nSnapshot Image\",\n      \"lineHeight\": 1.25,\n      \"baseline\": 43\n    },\n    {\n      \"id\": \"FpNnYTrGoht3yLUvqDB0y\",\n      \"type\": \"image\",\n      \"x\": 1837.5441596965306,\n      \"y\": 2488.5563964981598,\n      \"width\": 89.73490006102757,\n      \"height\": 89.73490006102757,\n      \"angle\": 0,\n      \"strokeColor\": \"transparent\",\n      \"backgroundColor\": \"#a5d8ff\",\n      \"fillStyle\": \"solid\",\n      \"strokeWidth\": 1,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 1,\n      \"opacity\": 100,\n      \"groupIds\": [],\n      \"frameId\": null,\n      \"roundness\": null,\n      \"seed\": 1881677672,\n      \"version\": 371,\n      \"versionNonce\": 2117194998,\n      \"isDeleted\": false,\n      \"boundElements\": [],\n      \"updated\": 1689638439513,\n      \"link\": null,\n      \"locked\": false,\n      \"status\": \"saved\",\n      \"fileId\": \"2e97dee7f2688d55000982b629929327c636e9de\",\n      \"scale\": [\n        1,\n        1\n      ]\n    },\n    {\n      \"type\": \"image\",\n      \"version\": 464,\n      \"versionNonce\": 372940138,\n      \"isDeleted\": false,\n      \"id\": \"yNGyZoscp7B-GPf8hL4A_\",\n      \"fillStyle\": \"solid\",\n      \"strokeWidth\": 1,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 1,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 1921.6691897130663,\n      \"y\": 2532.989142286835,\n      \"strokeColor\": \"transparent\",\n      \"backgroundColor\": \"#a5d8ff\",\n      \"width\": 89.73490006102757,\n      \"height\": 89.73490006102757,\n      \"seed\": 772101992,\n      \"groupIds\": [],\n      \"frameId\": null,\n      \"roundness\": null,\n      \"boundElements\": [],\n      \"updated\": 1689638439513,\n      \"link\": null,\n      \"locked\": false,\n      \"status\": \"saved\",\n      \"fileId\": \"2e97dee7f2688d55000982b629929327c636e9de\",\n      \"scale\": [\n        1,\n        1\n      ]\n    },\n    {\n      \"type\": \"image\",\n      \"version\": 484,\n      \"versionNonce\": 1985463862,\n      \"isDeleted\": false,\n      \"id\": \"oQeJzkHmSqZ0rbf1xElOj\",\n      \"fillStyle\": \"solid\",\n      \"strokeWidth\": 1,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 1,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 2005.9894686253056,\n      \"y\": 2488.8379181617333,\n      \"strokeColor\": \"transparent\",\n      \"backgroundColor\": \"#a5d8ff\",\n      \"width\": 89.73490006102757,\n      \"height\": 89.73490006102757,\n      \"seed\": 227850856,\n      \"groupIds\": [],\n      \"frameId\": null,\n      \"roundness\": null,\n      \"boundElements\": [],\n      \"updated\": 1689638439513,\n      \"link\": null,\n      \"locked\": false,\n      \"status\": \"saved\",\n      \"fileId\": \"2e97dee7f2688d55000982b629929327c636e9de\",\n      \"scale\": [\n        1,\n        1\n      ]\n    },\n    {\n      \"id\": \"VEgOVHwe_DF_Qkg__nClU\",\n      \"type\": \"arrow\",\n      \"x\": 1967.0815203827542,\n      \"y\": 2284.6472390336157,\n      \"width\": 2.424718844326435,\n      \"height\": 202.78641121274086,\n      \"angle\": 0,\n      \"strokeColor\": \"#1e1e1e\",\n      \"backgroundColor\": \"#a5d8ff\",\n      \"fillStyle\": \"solid\",\n      \"strokeWidth\": 1,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 1,\n      \"opacity\": 100,\n      \"groupIds\": [],\n      \"frameId\": null,\n      \"roundness\": {\n        \"type\": 2\n      },\n      \"seed\": 709660008,\n      \"version\": 313,\n      \"versionNonce\": 278356010,\n      \"isDeleted\": false,\n      \"boundElements\": [\n        {\n          \"type\": \"text\",\n          \"id\": \"i2PSFPyeHM6-vj_aiVyZb\"\n        }\n      ],\n      \"updated\": 1689638439513,\n      \"link\": null,\n      \"locked\": false,\n      \"points\": [\n        [\n          0,\n          0\n        ],\n        [\n          0,\n          128.09235692591574\n        ],\n        [\n          -2.424718844326435,\n          202.78641121274086\n        ]\n      ],\n      \"lastCommittedPoint\": null,\n      \"startBinding\": {\n        \"elementId\": \"TgOFbRaMBGaX5egDc-OD_\",\n        \"focus\": -0.052252799246929535,\n        \"gap\": 6.451212460738589\n      },\n      \"endBinding\": null,\n      \"startArrowhead\": null,\n      \"endArrowhead\": \"arrow\"\n    },\n    {\n      \"id\": \"i2PSFPyeHM6-vj_aiVyZb\",\n      \"type\": \"text\",\n      \"x\": 1902.1015780609769,\n      \"y\": 2375.2395959595315,\n      \"width\": 129.9598846435547,\n      \"height\": 75,\n      \"angle\": 0,\n      \"strokeColor\": \"#1e1e1e\",\n      \"backgroundColor\": \"#a5d8ff\",\n      \"fillStyle\": \"solid\",\n      \"strokeWidth\": 1,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 1,\n      \"opacity\": 100,\n      \"groupIds\": [],\n      \"frameId\": null,\n      \"roundness\": null,\n      \"seed\": 1526713624,\n      \"version\": 128,\n      \"versionNonce\": 1865256822,\n      \"isDeleted\": false,\n      \"boundElements\": [],\n      \"updated\": 1689638439513,\n      \"link\": null,\n      \"locked\": false,\n      \"text\": \"Create\\nEKS Clusters\\n& Run Tests\",\n      \"fontSize\": 20,\n      \"fontFamily\": 1,\n      \"textAlign\": \"center\",\n      \"verticalAlign\": \"middle\",\n      \"baseline\": 68,\n      \"containerId\": \"VEgOVHwe_DF_Qkg__nClU\",\n      \"originalText\": \"Create\\nEKS Clusters\\n& Run Tests\",\n      \"lineHeight\": 1.25,\n      \"isFrameName\": false\n    },\n    {\n      \"id\": \"8xuZYTSmuvCzVDHfjW2AT\",\n      \"type\": \"arrow\",\n      \"x\": 742.3441658065158,\n      \"y\": 2070.0838811210956,\n      \"width\": 154.7006948056004,\n      \"height\": 0,\n      \"angle\": 0,\n      \"strokeColor\": \"#1e1e1e\",\n      \"backgroundColor\": \"#a5d8ff\",\n      \"fillStyle\": \"solid\",\n      \"strokeWidth\": 1,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 1,\n      \"opacity\": 100,\n      \"groupIds\": [],\n      \"frameId\": null,\n      \"roundness\": {\n        \"type\": 2\n      },\n      \"seed\": 433847400,\n      \"version\": 1375,\n      \"versionNonce\": 265145066,\n      \"isDeleted\": false,\n      \"boundElements\": [\n        {\n          \"type\": \"text\",\n          \"id\": \"jCG_3WsbgpuPNC96qVP1p\"\n        }\n      ],\n      \"updated\": 1689638439513,\n      \"link\": null,\n      \"locked\": false,\n      \"points\": [\n        [\n          0,\n          0\n        ],\n        [\n          154.7006948056004,\n          0\n        ]\n      ],\n      \"lastCommittedPoint\": null,\n      \"startBinding\": {\n        \"elementId\": \"RBY-AA-xzHVPzhbUsnR-C\",\n        \"focus\": 0.010036215870418811,\n        \"gap\": 2.597873446588494\n      },\n      \"endBinding\": null,\n      \"startArrowhead\": null,\n      \"endArrowhead\": \"arrow\"\n    },\n    {\n      \"id\": \"jCG_3WsbgpuPNC96qVP1p\",\n      \"type\": \"text\",\n      \"x\": 767.1618465857958,\n      \"y\": 2095.9741763696106,\n      \"width\": 82.57992553710938,\n      \"height\": 50,\n      \"angle\": 0,\n      \"strokeColor\": \"#1e1e1e\",\n      \"backgroundColor\": \"#a5d8ff\",\n      \"fillStyle\": \"solid\",\n      \"strokeWidth\": 1,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 1,\n      \"opacity\": 100,\n      \"groupIds\": [],\n      \"frameId\": null,\n      \"roundness\": null,\n      \"seed\": 404696344,\n      \"version\": 50,\n      \"versionNonce\": 1962422454,\n      \"isDeleted\": false,\n      \"boundElements\": [],\n      \"updated\": 1689638439513,\n      \"link\": null,\n      \"locked\": false,\n      \"text\": \"Workflow\\nRun\",\n      \"fontSize\": 20,\n      \"fontFamily\": 1,\n      \"textAlign\": \"center\",\n      \"verticalAlign\": \"middle\",\n      \"baseline\": 43,\n      \"containerId\": \"8xuZYTSmuvCzVDHfjW2AT\",\n      \"originalText\": \"Workflow\\nRun\",\n      \"lineHeight\": 1.25,\n      \"isFrameName\": false\n    },\n    {\n      \"id\": \"i0XldMqFH7QTdX4MrWuYX\",\n      \"type\": \"image\",\n      \"x\": 1061.5670760700414,\n      \"y\": 2280.200467452464,\n      \"width\": 34.630072019303526,\n      \"height\": 34.630072019303526,\n      \"angle\": 0,\n      \"strokeColor\": \"transparent\",\n      \"backgroundColor\": \"#a5d8ff\",\n      \"fillStyle\": \"solid\",\n      \"strokeWidth\": 1,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 1,\n      \"opacity\": 100,\n      \"groupIds\": [\n        \"L18-4rT-VF2UIQafmXyX8\"\n      ],\n      \"frameId\": null,\n      \"roundness\": null,\n      \"seed\": 1279708440,\n      \"version\": 1202,\n      \"versionNonce\": 443080106,\n      \"isDeleted\": false,\n      \"boundElements\": null,\n      \"updated\": 1689638439513,\n      \"link\": null,\n      \"locked\": false,\n      \"status\": \"saved\",\n      \"fileId\": \"04355948b0b713cca14d736c37b9bdc03c6e40f7\",\n      \"scale\": [\n        1,\n        1\n      ]\n    },\n    {\n      \"id\": \"QuOM2BPEcGyQoHQQC5izB\",\n      \"type\": \"text\",\n      \"x\": 1106.0301906075292,\n      \"y\": 2282.6717965780917,\n      \"width\": 114.07196044921875,\n      \"height\": 35,\n      \"angle\": 0,\n      \"strokeColor\": \"#1971c2\",\n      \"backgroundColor\": \"#a5d8ff\",\n      \"fillStyle\": \"solid\",\n      \"strokeWidth\": 1,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 1,\n      \"opacity\": 100,\n      \"groupIds\": [\n        \"L18-4rT-VF2UIQafmXyX8\"\n      ],\n      \"frameId\": null,\n      \"roundness\": null,\n      \"seed\": 531443992,\n      \"version\": 331,\n      \"versionNonce\": 1130146294,\n      \"isDeleted\": false,\n      \"boundElements\": [\n        {\n          \"id\": \"Vk2-I-e0f9L-iQdMc8m7j\",\n          \"type\": \"arrow\"\n        }\n      ],\n      \"updated\": 1689638439513,\n      \"link\": null,\n      \"locked\": false,\n      \"text\": \"CronTab\",\n      \"fontSize\": 28,\n      \"fontFamily\": 1,\n      \"textAlign\": \"center\",\n      \"verticalAlign\": \"top\",\n      \"baseline\": 25,\n      \"containerId\": null,\n      \"originalText\": \"CronTab\",\n      \"lineHeight\": 1.25,\n      \"isFrameName\": false\n    },\n    {\n      \"id\": \"wEyvVv5EcEsO8baENVIwa\",\n      \"type\": \"arrow\",\n      \"x\": 1189.8001466965363,\n      \"y\": 2065.533247969305,\n      \"width\": 141.0332721063089,\n      \"height\": 114.06309847749162,\n      \"angle\": 0,\n      \"strokeColor\": \"#1e1e1e\",\n      \"backgroundColor\": \"#a5d8ff\",\n      \"fillStyle\": \"solid\",\n      \"strokeWidth\": 1,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 1,\n      \"opacity\": 100,\n      \"groupIds\": [],\n      \"frameId\": null,\n      \"roundness\": {\n        \"type\": 2\n      },\n      \"seed\": 1223970920,\n      \"version\": 933,\n      \"versionNonce\": 764647530,\n      \"isDeleted\": false,\n      \"boundElements\": [\n        {\n          \"type\": \"text\",\n          \"id\": \"SpstzqSSkwRlTooN57fkI\"\n        }\n      ],\n      \"updated\": 1689638439513,\n      \"link\": null,\n      \"locked\": false,\n      \"points\": [\n        [\n          0,\n          0\n        ],\n        [\n          141.0332721063089,\n          114.06309847749162\n        ]\n      ],\n      \"lastCommittedPoint\": null,\n      \"startBinding\": {\n        \"elementId\": \"Ik1LKRH-0ZWp6By1fD9Q4\",\n        \"focus\": -0.7244060923212213,\n        \"gap\": 7.709429420236631\n      },\n      \"endBinding\": {\n        \"elementId\": \"zx6FbKXOyMyw9PcqxxUMQ\",\n        \"focus\": -0.4516085294190243,\n        \"gap\": 7.632570022295113\n      },\n      \"startArrowhead\": null,\n      \"endArrowhead\": \"arrow\"\n    },\n    {\n      \"id\": \"SpstzqSSkwRlTooN57fkI\",\n      \"type\": \"text\",\n      \"x\": 1191.5194290468153,\n      \"y\": 2197.630740951582,\n      \"width\": 82.57992553710938,\n      \"height\": 50,\n      \"angle\": 0,\n      \"strokeColor\": \"#1e1e1e\",\n      \"backgroundColor\": \"#a5d8ff\",\n      \"fillStyle\": \"solid\",\n      \"strokeWidth\": 1,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 1,\n      \"opacity\": 100,\n      \"groupIds\": [],\n      \"frameId\": null,\n      \"roundness\": null,\n      \"seed\": 855556968,\n      \"version\": 59,\n      \"versionNonce\": 1499462454,\n      \"isDeleted\": false,\n      \"boundElements\": [],\n      \"updated\": 1689638439513,\n      \"link\": null,\n      \"locked\": false,\n      \"text\": \"Workflow\\nCall\",\n      \"fontSize\": 20,\n      \"fontFamily\": 1,\n      \"textAlign\": \"center\",\n      \"verticalAlign\": \"middle\",\n      \"baseline\": 43,\n      \"containerId\": \"wEyvVv5EcEsO8baENVIwa\",\n      \"originalText\": \"Workflow\\nCall\",\n      \"lineHeight\": 1.25,\n      \"isFrameName\": false\n    },\n    {\n      \"id\": \"6cESX7bgFsuHc1sCgYS82\",\n      \"type\": \"arrow\",\n      \"x\": 1633.8869489676626,\n      \"y\": 2178.4318397705515,\n      \"width\": 139.6801518523589,\n      \"height\": 1.6709672934680384,\n      \"angle\": 0,\n      \"strokeColor\": \"#1e1e1e\",\n      \"backgroundColor\": \"#a5d8ff\",\n      \"fillStyle\": \"solid\",\n      \"strokeWidth\": 1,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 1,\n      \"opacity\": 100,\n      \"groupIds\": [],\n      \"frameId\": null,\n      \"roundness\": {\n        \"type\": 2\n      },\n      \"seed\": 964221544,\n      \"version\": 105,\n      \"versionNonce\": 1763244842,\n      \"isDeleted\": false,\n      \"boundElements\": [\n        {\n          \"type\": \"text\",\n          \"id\": \"wHwrd6JDsjh5PBj9YMfr1\"\n        }\n      ],\n      \"updated\": 1689638439513,\n      \"link\": null,\n      \"locked\": false,\n      \"points\": [\n        [\n          0,\n          0\n        ],\n        [\n          139.6801518523589,\n          -1.6709672934680384\n        ]\n      ],\n      \"lastCommittedPoint\": null,\n      \"startBinding\": {\n        \"elementId\": \"zx6FbKXOyMyw9PcqxxUMQ\",\n        \"focus\": 0.01075916354074502,\n        \"gap\": 4.42096014252229\n      },\n      \"endBinding\": {\n        \"elementId\": \"uwujjrTorSg9hDTAdQ-dM\",\n        \"focus\": 1.0928891590966363,\n        \"gap\": 10.911428854286896\n      },\n      \"startArrowhead\": null,\n      \"endArrowhead\": \"arrow\"\n    },\n    {\n      \"id\": \"wHwrd6JDsjh5PBj9YMfr1\",\n      \"type\": \"text\",\n      \"x\": 1662.4370621252874,\n      \"y\": 2152.5963561238177,\n      \"width\": 82.57992553710938,\n      \"height\": 50,\n      \"angle\": 0,\n      \"strokeColor\": \"#1e1e1e\",\n      \"backgroundColor\": \"#a5d8ff\",\n      \"fillStyle\": \"solid\",\n      \"strokeWidth\": 1,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 1,\n      \"opacity\": 100,\n      \"groupIds\": [],\n      \"frameId\": null,\n      \"roundness\": null,\n      \"seed\": 1396902504,\n      \"version\": 43,\n      \"versionNonce\": 224863350,\n      \"isDeleted\": false,\n      \"boundElements\": [],\n      \"updated\": 1689638439513,\n      \"link\": null,\n      \"locked\": false,\n      \"text\": \"Workflow\\nCall\",\n      \"fontSize\": 20,\n      \"fontFamily\": 1,\n      \"textAlign\": \"center\",\n      \"verticalAlign\": \"middle\",\n      \"baseline\": 43,\n      \"containerId\": \"6cESX7bgFsuHc1sCgYS82\",\n      \"originalText\": \"Workflow\\nCall\",\n      \"lineHeight\": 1.25,\n      \"isFrameName\": false\n    },\n    {\n      \"id\": \"Vk2-I-e0f9L-iQdMc8m7j\",\n      \"type\": \"arrow\",\n      \"x\": 1137.8572131675867,\n      \"y\": 2269.9172990879333,\n      \"width\": 0.3433140037047906,\n      \"height\": 140.4611474351741,\n      \"angle\": 0,\n      \"strokeColor\": \"#1e1e1e\",\n      \"backgroundColor\": \"#a5d8ff\",\n      \"fillStyle\": \"solid\",\n      \"strokeWidth\": 1,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 1,\n      \"opacity\": 100,\n      \"groupIds\": [],\n      \"frameId\": null,\n      \"roundness\": {\n        \"type\": 2\n      },\n      \"seed\": 1923988072,\n      \"version\": 246,\n      \"versionNonce\": 996410858,\n      \"isDeleted\": false,\n      \"boundElements\": [\n        {\n          \"type\": \"text\",\n          \"id\": \"Bxks7uSjjWXTIKMdOD2ZE\"\n        }\n      ],\n      \"updated\": 1689638439513,\n      \"link\": null,\n      \"locked\": false,\n      \"points\": [\n        [\n          0,\n          0\n        ],\n        [\n          0.3433140037047906,\n          -140.4611474351741\n        ]\n      ],\n      \"lastCommittedPoint\": null,\n      \"startBinding\": {\n        \"elementId\": \"QuOM2BPEcGyQoHQQC5izB\",\n        \"focus\": -0.44294774983716523,\n        \"gap\": 12.754497490158428\n      },\n      \"endBinding\": {\n        \"elementId\": \"Ik1LKRH-0ZWp6By1fD9Q4\",\n        \"focus\": -0.6979258835382003,\n        \"gap\": 4.228549265862853\n      },\n      \"startArrowhead\": null,\n      \"endArrowhead\": \"arrow\"\n    },\n    {\n      \"id\": \"Bxks7uSjjWXTIKMdOD2ZE\",\n      \"type\": \"text\",\n      \"x\": 1095.884047747773,\n      \"y\": 2184.4895662064328,\n      \"width\": 81.95991516113281,\n      \"height\": 25,\n      \"angle\": 0,\n      \"strokeColor\": \"#1e1e1e\",\n      \"backgroundColor\": \"#a5d8ff\",\n      \"fillStyle\": \"solid\",\n      \"strokeWidth\": 1,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 1,\n      \"opacity\": 100,\n      \"groupIds\": [],\n      \"frameId\": null,\n      \"roundness\": null,\n      \"seed\": 963487336,\n      \"version\": 56,\n      \"versionNonce\": 557262262,\n      \"isDeleted\": false,\n      \"boundElements\": null,\n      \"updated\": 1689638439513,\n      \"link\": null,\n      \"locked\": false,\n      \"text\": \"Schedule\",\n      \"fontSize\": 20,\n      \"fontFamily\": 1,\n      \"textAlign\": \"center\",\n      \"verticalAlign\": \"middle\",\n      \"baseline\": 18,\n      \"containerId\": \"Vk2-I-e0f9L-iQdMc8m7j\",\n      \"originalText\": \"Schedule\",\n      \"lineHeight\": 1.25,\n      \"isFrameName\": false\n    },\n    {\n      \"id\": \"Ins50Jw18EcAyJGZiaNuo\",\n      \"type\": \"rectangle\",\n      \"x\": 105.86909118689437,\n      \"y\": 2019.0179274360937,\n      \"width\": 280.3138448232727,\n      \"height\": 96.18959550225486,\n      \"angle\": 0,\n      \"strokeColor\": \"#6741d9\",\n      \"backgroundColor\": \"transparent\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 1,\n      \"strokeStyle\": \"dotted\",\n      \"roughness\": 1,\n      \"opacity\": 100,\n      \"groupIds\": [],\n      \"frameId\": null,\n      \"roundness\": {\n        \"type\": 3\n      },\n      \"seed\": 1930353000,\n      \"version\": 353,\n      \"versionNonce\": 226474154,\n      \"isDeleted\": false,\n      \"boundElements\": [],\n      \"updated\": 1689638439513,\n      \"link\": null,\n      \"locked\": false\n    },\n    {\n      \"id\": \"6YfyvzKo_19zwekfE5FPI\",\n      \"type\": \"text\",\n      \"x\": 116.99252108134874,\n      \"y\": 1989.2220378172397,\n      \"width\": 124.97988891601562,\n      \"height\": 25,\n      \"angle\": 0,\n      \"strokeColor\": \"#6741d9\",\n      \"backgroundColor\": \"transparent\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 1,\n      \"strokeStyle\": \"dotted\",\n      \"roughness\": 1,\n      \"opacity\": 100,\n      \"groupIds\": [],\n      \"frameId\": null,\n      \"roundness\": null,\n      \"seed\": 1308810600,\n      \"version\": 128,\n      \"versionNonce\": 1442119414,\n      \"isDeleted\": false,\n      \"boundElements\": [],\n      \"updated\": 1689638439513,\n      \"link\": null,\n      \"locked\": false,\n      \"text\": \"Pull Request\",\n      \"fontSize\": 20,\n      \"fontFamily\": 1,\n      \"textAlign\": \"center\",\n      \"verticalAlign\": \"top\",\n      \"baseline\": 18,\n      \"containerId\": null,\n      \"originalText\": \"Pull Request\",\n      \"lineHeight\": 1.25,\n      \"isFrameName\": false\n    },\n    {\n      \"id\": \"5Rwi2AVgkRJeTRa3jfOjy\",\n      \"type\": \"arrow\",\n      \"x\": 1043.190929382677,\n      \"y\": 2008.2020467484817,\n      \"width\": 770.6246879843595,\n      \"height\": 160.7488699004357,\n      \"angle\": 0,\n      \"strokeColor\": \"#1e1e1e\",\n      \"backgroundColor\": \"transparent\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 1,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 1,\n      \"opacity\": 100,\n      \"groupIds\": [],\n      \"frameId\": null,\n      \"roundness\": {\n        \"type\": 2\n      },\n      \"seed\": 281116440,\n      \"version\": 391,\n      \"versionNonce\": 1863783274,\n      \"isDeleted\": false,\n      \"boundElements\": [\n        {\n          \"type\": \"text\",\n          \"id\": \"GnXAw1tZcQGEXZvg6RLw4\"\n        }\n      ],\n      \"updated\": 1689638439513,\n      \"link\": null,\n      \"locked\": false,\n      \"points\": [\n        [\n          0,\n          0\n        ],\n        [\n          -422.972677503117,\n          -160.7488699004357\n        ],\n        [\n          -770.6246879843595,\n          -26.83537147933953\n        ]\n      ],\n      \"lastCommittedPoint\": null,\n      \"startBinding\": {\n        \"elementId\": \"Ik1LKRH-0ZWp6By1fD9Q4\",\n        \"focus\": 0.5565788356234082,\n        \"gap\": 3.0661372356370293\n      },\n      \"endBinding\": null,\n      \"startArrowhead\": null,\n      \"endArrowhead\": \"arrow\"\n    },\n    {\n      \"id\": \"GnXAw1tZcQGEXZvg6RLw4\",\n      \"type\": \"text\",\n      \"x\": 547.5783211544625,\n      \"y\": 1822.453176848046,\n      \"width\": 145.2798614501953,\n      \"height\": 50,\n      \"angle\": 0,\n      \"strokeColor\": \"#1e1e1e\",\n      \"backgroundColor\": \"transparent\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 1,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 1,\n      \"opacity\": 100,\n      \"groupIds\": [],\n      \"frameId\": null,\n      \"roundness\": null,\n      \"seed\": 1874353176,\n      \"version\": 47,\n      \"versionNonce\": 2469942,\n      \"isDeleted\": false,\n      \"boundElements\": [],\n      \"updated\": 1689638439513,\n      \"link\": null,\n      \"locked\": false,\n      \"text\": \"Write\\nCommit Status\",\n      \"fontSize\": 20,\n      \"fontFamily\": 1,\n      \"textAlign\": \"center\",\n      \"verticalAlign\": \"middle\",\n      \"baseline\": 43,\n      \"containerId\": \"5Rwi2AVgkRJeTRa3jfOjy\",\n      \"originalText\": \"Write\\nCommit Status\",\n      \"lineHeight\": 1.25,\n      \"isFrameName\": false\n    },\n    {\n      \"type\": \"arrow\",\n      \"version\": 351,\n      \"versionNonce\": 1150851830,\n      \"isDeleted\": false,\n      \"id\": \"lct3SlksUzwIrgmcySwz7\",\n      \"fillStyle\": \"solid\",\n      \"strokeWidth\": 1,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 1,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 955.8074252133456,\n      \"y\": 2266.0600401173,\n      \"strokeColor\": \"#1e1e1e\",\n      \"backgroundColor\": \"#a5d8ff\",\n      \"width\": 2.352954868625602,\n      \"height\": 132.41916836476366,\n      \"seed\": 47722102,\n      \"groupIds\": [],\n      \"frameId\": null,\n      \"roundness\": {\n        \"type\": 2\n      },\n      \"boundElements\": [\n        {\n          \"type\": \"text\",\n          \"id\": \"H_nEPeotuC4bz8Wd9A1G-\"\n        }\n      ],\n      \"updated\": 1689638454553,\n      \"link\": null,\n      \"locked\": false,\n      \"startBinding\": {\n        \"elementId\": \"7mzPBRE3ckDMTePbAvrm0\",\n        \"focus\": 0.11306126567038408,\n        \"gap\": 11.033902015193235\n      },\n      \"endBinding\": {\n        \"elementId\": \"Ik1LKRH-0ZWp6By1fD9Q4\",\n        \"focus\": 0.5794337576119544,\n        \"gap\": 8.413269365640076\n      },\n      \"lastCommittedPoint\": null,\n      \"startArrowhead\": null,\n      \"endArrowhead\": \"arrow\",\n      \"points\": [\n        [\n          0,\n          0\n        ],\n        [\n          -2.352954868625602,\n          -132.41916836476366\n        ]\n      ]\n    },\n    {\n      \"type\": \"text\",\n      \"version\": 113,\n      \"versionNonce\": 464402806,\n      \"isDeleted\": false,\n      \"id\": \"H_nEPeotuC4bz8Wd9A1G-\",\n      \"fillStyle\": \"solid\",\n      \"strokeWidth\": 1,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 1,\n      \"opacity\": 100,\n      \"angle\": 0,\n      \"x\": 913.6170158724602,\n      \"y\": 2178.8714454701235,\n      \"strokeColor\": \"#1e1e1e\",\n      \"backgroundColor\": \"#a5d8ff\",\n      \"width\": 77.69992065429688,\n      \"height\": 50,\n      \"seed\": 402059190,\n      \"groupIds\": [],\n      \"frameId\": null,\n      \"roundness\": null,\n      \"boundElements\": [],\n      \"updated\": 1689638439513,\n      \"link\": null,\n      \"locked\": false,\n      \"fontSize\": 20,\n      \"fontFamily\": 1,\n      \"text\": \"Push to\\nMain\",\n      \"textAlign\": \"center\",\n      \"verticalAlign\": \"middle\",\n      \"containerId\": \"lct3SlksUzwIrgmcySwz7\",\n      \"originalText\": \"Push to\\nMain\",\n      \"lineHeight\": 1.25,\n      \"baseline\": 43\n    },\n    {\n      \"id\": \"7mzPBRE3ckDMTePbAvrm0\",\n      \"type\": \"image\",\n      \"x\": 932.0359667696287,\n      \"y\": 2277.0939421324933,\n      \"width\": 43.61772648971691,\n      \"height\": 43.61772648971691,\n      \"angle\": 0,\n      \"strokeColor\": \"transparent\",\n      \"backgroundColor\": \"transparent\",\n      \"fillStyle\": \"hachure\",\n      \"strokeWidth\": 1,\n      \"strokeStyle\": \"solid\",\n      \"roughness\": 1,\n      \"opacity\": 100,\n      \"groupIds\": [],\n      \"frameId\": null,\n      \"roundness\": null,\n      \"seed\": 1607703222,\n      \"version\": 274,\n      \"versionNonce\": 589185462,\n      \"isDeleted\": false,\n      \"boundElements\": [\n        {\n          \"id\": \"lct3SlksUzwIrgmcySwz7\",\n          \"type\": \"arrow\"\n        }\n      ],\n      \"updated\": 1689638454552,\n      \"link\": null,\n      \"locked\": false,\n      \"status\": \"saved\",\n      \"fileId\": \"06e43fd4c9e10ae4c800aac63ffacde8fb0877b3\",\n      \"scale\": [\n        1,\n        1\n      ]\n    }\n  ],\n  \"appState\": {\n    \"gridSize\": null,\n    \"viewBackgroundColor\": \"#ffffff\"\n  },\n  \"files\": {\n    \"3eb9928c23359ad1751a73b8eeb4fd9cab1a5977\": {\n      \"mimeType\": \"image/png\",\n      \"id\": \"3eb9928c23359ad1751a73b8eeb4fd9cab1a5977\",\n      \"dataURL\": \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPwAAAD+CAYAAAAeY2hsAAAAAXNSR0IArs4c6QAAIABJREFUeF7tnQnYdtW4x/8OnYzHlCGlVEIopFSGlDGEdJKEDFHJLEOmDCXDkTIclJRIkiLNSSOVDJGpQiohIkOGjMe5fu9376/ne97neZ+997PX3uve+76v67ne9/ve/ey91r3Wf6+17uF/30ghoYHQwGA0cKPB9DQ6GhoIDSgAH5MgNDAgDQTgBzTY0dXQQADexxxgnMY/tPymku4oadWRz53t/24uiQ/X3GzkJ7/zQa4f+fzVfufnX+xzjaRfSrp65MP/cQ3y7wkfHxodaCsD8HkNPOPxH2Of/5K0jqR7S1rPfq4t6S6SbtlR8/8k6ReSfiLpB5Iutp+XSbpO0v+NfXgxhGSggQB8t4MAuG8y8rmrpI0kbWjgBuCrd9vEyk//mb0AeAlcKOkbkq6S9M+RDy+EkA40EIBvV+k3lrSSpP+0bTUr96aSNpO0iSQA30cB8BdIOl/SVyWxE+A48XdJ/5D0rz52Osc+BeDTjgr6ZQVf2c7TbMW3lLSFpAdKun3ax2d792slfVPSWZLOtKMBdoO/2S4gjgCJhi4A37xi0SkrOAYzzt/3kvRo+9xHEqt8yA0aYHX/vqTT7HOJ2QF4AbADCPA3OFsC8M0pk606RrQ72Bn8MZIeLolVPaS8BjAEni3pi2YD+LUkjIRs/UPm1EAAfj4FslrfQtJtJd1D0pMlPV7SWvPdNr5tGrhc0kmSviDph5J+J+nPceavPz8C8NV1h87wbQNyLOicx58k6UFmkKt+x/jGLA2wun9N0nF27scTAPiJB4gt/yztjfw9AF9eWeiKLTv+b9xm20h6hKRVyt8irmxAA7+RdIakY23LTzwAW/4AfgnlBuBnKwlf+a0lrSHpIZKebm60ML7N1l3KKzD24eb7tKRzJf1U0h8s4Cflc13fOwA/ffgAOqv33SQ9UtL2ku7verT72/hvSzpK0umSrpDELiCCeyaMdwB+sVIA+p0krWsGuO0stLW/cOlPzwjoOdoMfT+S9KsA/oqDG4BfUR+s6PjNt5W0owG/P3AYTk8A+hGSPicJvz4rfohlYIUilgXI3FPSVpJ2lrRmKKUXGrhS0scknSLpUgvo6UXH6nZi6Cs8aaL4z3GtvUASkXAh/dMAkXwfNZce/nzi+AcpQwU8/WZFJ2nl+ZIePMjRH16nz5N0sFn3WfEH58obIuAJfSVIZhcLmBnetI8eE8BzkAXzELo7GBkS4Elo2cACZna3SLnBDHR0dJEGiNT7kAXwfMcSdXqvpqEAHl/65pJ2s2187wc2OlhaAwTvfETSOebDL/1Fjxf2HfCEwrJ9f5qkZ1rKqsdxijan1QCpuIdL+oxt8wnV7aX0GfCwyWxtqzq+9ZDQwCwN4LNntT/BWHlmXe/u730EPGd1aKOeLWmHWNXdzcmuG8xqf6Skw4yOCxKO3kjfAE9I7ONsVd/Y2F97M1jRkdY0QBz+1221P9lCdFt7eMoH9QXw9IPEFs7qrOxws4eEBubVAJz8rPSc7UnQce+37wPgMcw9StJzJUErBTlFSGigKQ1AsgHd1qGSvmS5903du/X7eAc8Kzlpq7ta5FzkqLc+hQbxQHLvicw70NJwWfldimfAY3l/jqSdrMySywGIRrvSACW32OJ/3F4ArhpPY70Cnth3QmOhmYKNJiQ00JYGYNX5vCXjEJvvSrwBHpcbVvgXWuRcURTRldKjse41gOuOyLwPW+qtG9edJ8DfZuS8vn4wxLoHjfcOwKRLDH5xrmflz168AJ6SyBBTkMpKXDw0VCGhga41gL8e7nxy7Q+RlH3mnQfAr2ZW+OdJ4veQ0EBuGoAnH2YdUm6hzc5Wcgc8q/mLLPElgmmynUbRMEm46j5hKbdQa2UpOQMe6qmXWPQcpBUhoYHcNcCWHp78D0qCNTc7yRXw95X0cklPkXS77LQWDQoNTNfAbyUdI+l9VhU3K13lCPgHSHqlpCeGjz2ruRKNKa+B31sdvP0tBr/8NxNfmRvgWdlfY1VYoY4OCQ141cB1FqDzPzmt9DkBnjP7qyU9NVZ2r3M82j2mAXzzZNrtZ+WuO1dQLoDHGs82HhoqyjCHhAb6ogHO9NBnvVdS59b7HACPb/2lkvCzR+nlvkzz6MeoBih1hZ/+A5J+3qVqugY8EXRQRsMmC1tNSGigrxqg3h18eVBjX9NVJ7sEPFt3yjuxukcEXVczIJ7bpgZY3d9vobjw4rcuXQEeVhrO66+TtHbrvY4Hhga608BPJL3DzvWw6bQqXQCeZ+Jjf4uk+0UiTKvjHQ/rXgMk3Fxk8//4tnnyugA85BWAfUtJN+le/9GC0EDrGvinpDMNB62SaLQNeGip2MbDLrty62qOB4YG8tHA38xHz/aeAhitSJuAJ9vtZZJeLAmm2ZDQwNA1QEkrEm2Iu2+FGLMtwANwaKTfJCky34Y+zaP/oxogw25vo8FOXtOuDcDDToORjpjidWOsQwOhgUUaIJWWsHKMeBj1kkkbgCf7bR8jn2zjecmUFTcODSTSABVtKGn1RknfSvSMhdumBiDndvLa98jMIn+FJGiJoLiGHPP2UXQy5TTL4t7EsZO2yrYZ//damcWAYLknyeaAlOf5lIDHCo81npzgXEgsPinpDZKwkKJgjhvFhwAgqs5uYj/XyGKaRiPqaIAV81z7fNNy0slcY7vM3/hQpegWkj4lCVdxDkKizSvMes8cbVxSAv6hlixAkcdc5GGSvjKlMUyAlWwnQiQgRxFSdZ8Ucf65DN+S7QDMjO1xVt+d2PXixc7LfVIhSOY/BU2Icc9FKFoJtdu0eTpXO1MBfh2zyFPJNRe5yoyGZd+cvAAofIGHgZcXZa2eYCtDLn2KdkhkorFKQxMNZTTjC2d82UqvHOd4OeRUl5ByVljuL2t6gFMAHqYaUl2xyucUScf56LWSKAxYVQrws+2HG39HSWT6hXSnAcJTDzb+uGsrgny01czRz1rZsu56s+KT2ZFgteclBnNOY5IC8FuYTxFSi5zkgWYBLfvmn9R29MWZn7z9bW07mNORJSd9p2gL2/YTLVjlfEl/bsCNxZj+t4E+RZvr3hPDMrErZ9W9wbQJ3OT9sHzuZdvfJu87770oDnB3SdfPe6Ox799c0maW4rt1JAI1rN0bbodVnYqtpJbis2YFbFLw1HA0yGlbT//o89vsqNJIf5tc4TF0YeQ6NEPFYZ1nK56q6B+rPis9flSotUOa08BRdp79foVzedWn41HCD05CV07C8ZNVniNHI6m0TQJ+QztzkPKam6A0QF/n/F6lL+gT196bJT22yhfj2kUaIJuMUGyyyeY5hpVRLed42JLfXubilq/BVoFN7MImntsU4KGnwn+IUSxHwZ7w0xYmTtF39MpqQRowrsCQ8hoocsVPSLB1n9YKdmgbSbqgfDNbvfJdFs+CN2EuaQLwvB1ZzaDjJZAhN7nUBjN5YsKEjnPGx53HVn/VhhWDAQtuNCIG+UCfNPoTCiXqmPPBdsGH3ycJ7byZffidDxRkqxv92OhPfsdD0XQFX7LF3mlkj12M1a2MVTZH1mSMkwSxnTrvS7AJwK9nb59ct7CcfwDdtMneMA4n3g4eALb529VwVTL5f2y1yL8rqfh0XaX0LpLWH/lsYIbRqqnPGOA+b7uhH7QxGFOewWLFrgIvU44C2NlFXzxP4+YFPIP7jMwilcb18VbjECsbcDOPPpf6LkE8AJ7QXl6She6LUE9+sgpjnDpb0leNCgkONE9CrAJ2HGwZD5d0H9s50N/iQ3/oL8QPnJt5KacyqJbVHUbnd1uUW9nvtH0d7M4EGdXeAc0DeL7LwBIcQBhqrrK9rSBNu3Lq9hd7AkEVO9gNAPg5BnLOkI0GWtRtZIPfIxCL/ATAv7m9ALg9R0AAhr85ByGsGuPugTk0ZkobyKTDgIedo5Yhcx7Ac9YhDplzV85CvTq2irUUlKhj2D0gAuGYQVLHkIQMRWwEED/k8hJG//jg2ZUkiWFvcIAxjH9UUi2a67qAL6yaR0gibj5nwYPQGfF/zoqJtq2gAbCwZpNBLon0S+ARx2iyACuTZdQFPFZaasHl6oYrdM1bkAg70g5DQgOzNEAiDd6CnHJAJrUZ4kvSztklVZI6gGfrQ/4whpbcy0PxNnyQER9UUkxcPEgNwNvwvQQu1KaVebUkbFPkE1QKJqsDePzJBJRwfs9dMILhLhzaOTn3ccm1fcTUf1kSdp/chRx+PFCV2G6rAp6tDrnhX5CE9TV3wb315AB87sOUTfsA/GkWqJVNo6Y0BLqubYzVp7TxsyrgObuzur8wd21Y+6A5grQiVngnA9ZxMwH86ZLIC/EgcNpDlFHaKF0F8JzdySlndYec0oMQvLJVAN7DUGXRRgBP/nmOCWCTFES0Jas8iTWlzvJVAI/f/VWSXp/F0JRrBK6LR4XRrpyy4qoFBmP88EQHehFW+PeWneNlAY/fHSUQ85y73310oIhBx0pfK0jBy4hHOxvTAFZ6SCTv2tgd098ITxTsSwSXzfTLlwU8MfO7SnpP+vY3+gRi0wllLX3GafTpcTNvGsDNTBo1eQ+ehKQa+P1mxtiXATzXELyC393L2WZ0sMhU+2FmobWeJtNQ2so8J6mJ3AZvwhme9FlYbpcMIS8DeLKIuBn8Wh4FPzyW11JGDY8djDY3ogGM0th7Tmnkbu3f5FmSjp5FhVUG8LjiPuGYsontzocySL9sfwrEE6togG387hayWuV7uVx7kvE+LBluOwvwhSsOVwWMKB7lSEspbJqx1qMuos3TNcD8JtW7SFv2pisyL0lBJoV26m52FuBhAXmdkTZ4U0DRXs41xA9E8I3XEWyn3aTt4sb15IUa1wyhthSAgRJroiwFeP62mvFo3bsdnSd7CsYYuO1yyolP1tm4cWUNMNfvOS99VOWnNv8FEn8INCMgZ+JcXwrwMIA8ziLrmm9au3d8sTGZlI45brd58bSONUCOCG5nQlW9CwVRppJdLgV4fO8wa3g904wOHEk0vLziHO99OqdpP+d3ClFwBvYuh1uuy0Sf/DTAF7530ktzpO2tOiis7DCsxra+qub6f32xnYcNOHfiizKjQcksyp9N9MlPAzzbecjycqqbXaazS13zRCtEGOf4eTXZr++DATIqj+9RtyirhiudstkryDTAQzJIZN3je6KEM2ybQ9xxAL4ng9pQN8DAura45VZbrm4Xj5P09Em1GCYBvrDOY/HDVeFdSIYgoIJU2QC799FM037mPNvgD0uioIZ3IVmMI+wia/0kwBNsQwVUVnjvcrlV66CiSITWeh/NtO1n3j/JUk1JuPIu1LyHu2KFeT8J8IQYYp3fyXmPCT6AVfegSWcZ532L5qfRAHMf9xyssDnWSazSa3Jf6MsKFX0mAR4SADKGqB3mWXhpAfjIhfc8iu23nZx4otUwWnsWCotCxrlChOk44Pk35Y3xW3sW3IlYKkuRAnjuaLS9cQ1A9gJQPuaEzHIpBRBXAAvvctvVOOA5x7CdofaZV8EPiZGO80vXBQq96nDo7V7Z2I7JsqQ4hVdhp0IuzPJz/CTAk0zv2VL5fmPWja2812maR7vZ2r9N0ovyaE6tVnzHGHinAp7cd0z5rPQeBWYb6m4tmSLosWPR5tY1UKSGU54ZxiePAtCxxS2neBtf4cm0IabYo0Dgx/YFX+ofPXYg2pydBii2wgpPDftZqeTZNd4aRA7Jchaf8U7QMU801KNKps4WhrpLyrB35jo60a6sNIABj9RqDHjUuPco+47yWYwD/hyz0nvrGFZIDHVkCs1k7vTWuWhvpxoga5SYFFJnPa7yWOk3LzQ42gFSBLFwE0fvTTBOPNMqf0b4rLfRy7u9hZuOxYRwVW8C9dUqRWr4KOA3lvQ1b72x9u5lb+CwzDsdwMybjcUeEhUopDwKxVi+TsNHAb+Hw0IT9IHCATtackzEy3ucjvm3GYv9ppKOkLRG/s1d1EJKxO03DnjYXeGf9yaHSXqjJEIJQ0IDqTSwuqR9JD071QMS3vczBXPV6ApPGCoWSU/CeZ0BOGZS7q+njkRbs9cAti0y0FhgvBnvLpa0QERbNJyfhKF6o/ihWCSJ/tALh7Eue8y4biAYge780w4DcaB4IxPw3wXg15L0E4fDQQogBrurHLY9muxPA1SVJdz2Of6arrUlXV4AHr43aHG8yQvsjTuVeN9bh6K9WWuAHHl2lKReexPIPY4vAE90HVF2noQ83ydb+t/MutieOhZtzVYD+ORJHycT0xv92xsk7VsAHncDby5Pgl9xZ0nQC4eEBtrSAME3hNoSt+JJsD3sWACeSDVvUUSc398i6UpPWo+2utfAmjbvvJ3jWRg3KAD/N7PieRoNSDoOlvR7T42OtrrXABRwJGlBLuFJ8MKtDOBxxS0irHfQk+2seECw2jgYrB41EfcWRu6jHfZppYKD3luUGgkBVAuBey/87w5nnuMmg5ktrIoRCWeeZHUaT2A9pI+eBL55ilx6TfbxpOto62INkBtPuCrneU+yCYDHtXWsp1ZLOk/SbmGhdzZq/WkunI8HWkKNp15tA+BfKAl2Tk/yOUl7SqJWXEhooG0N3EPSu22xbPvZ8zxvdwC/t2WbzXOjtr/7SUlvJlSw7QfH80ID0kKYKiG2EKZ6kn0APEEE3qpsENpIqiK58CGhgbY1wNn9TRb41faz53neIQD+RIdloT8g6V2Sfj5P7+O7oYGaGiA3niOlN876kwD8WZIoSeNJ3mNVPq/21Ohoa280sKqkV0qCScaTnA3gqZvujYKXRB8qzCwn2Pek9Wirew1QsOWlo/TPTnp0AYC/yGFpKbbzB0j6pRNFRzP7pYE7S3q5VSf21LPvAPhLJeFm8CSAnVhmymKFhAba1gDlm8jlAPSe5IcAnmwzb0ycxA1Q5dZbSLCnyRFtna4BjHaUNaP4iSf5KYD/lSTOJJ6ELDnccpEa62nU+tNW3HIwJZM150muAfDXSbqVp1ZL+oTlJEfgjbOB60lz4YCEi4ESVJ7kjwVb7UqeWm08drxhPRJvOlN1NHeCBoi0Y4fpjSXqHwAeCltv9eDhFHuNJOrBh4QG2taA11j6fwJ4yCCpg+1JvmIGk+Cz8zRq/WnrfS3hDEJLT3IdgCdaDb+iJ6FKDucnClCEhAba1gAFKbAjLVRzcSRXA3jOwRghPAkRdk+xvHhP7Y629kMDD5ZEivadnHXnMgD/PUn3cdZwOPgeK+lMZ+2O5vZDA1tKOlWSN2P3dwE8NFHeOLaZNqzwJ5jRsR/TKHrhQQOQvm4t6fMeGjvWxoVYeo/ZcvRjF6vXHWWmHM48x032XG7qDAB/sqStHA4AflAy5n7tsO3RZL8auINlyhEH4k1OBPDwa1P32ptQHot6WVd4a3i017UG7mZBN97orVD6UQAe98KzHA4BefzEMn/fYdujyX41gIEbirXNHHbhUADPtvglDhtPLvw2Djn1Hao6mjyiAchiMNjBeuNN9gfw5PVCuetNKBFNzWvcI4QHh4QGUmsAC/2jzTtE6Whv8koA/zRJR3prubUXAgKqyBIeHBIaSK0BQtCfbbvi1M9Kcf/tADxbFM7DHgWw7yXpKo+Njza70wDEF6TF7uyu5csavDGA5yzilSqKuvbPjJJTTqefv2aTNEMRlPv7a/pCi+8E4BGvFVipa09tvNPjHO90CvppNud3QmpJzfZWNbbQ8o0KwF8r6XZ+dL9CS+EWo7Df75y2P5rtQwO3sa08NRE8ChhfpQD8hZIe4LEX5iKhKEAE4DgdQCfNhugVpuTtnbR3vJlg/IEF4En1IxnFo2Cw207SNyThqgsJDTStAVxwLIhHWSHJpu/fxv2IHdi2APx7Jb2ijacmegYlrw+X9KdE94/bDlsDJMywslN4tcCMN43sT3msovFknnEO9irHWbRgVJP1OoJ5txt33H6Ot/Nod1dJBxWA39A5XRQGCaLuLpD0r7znTrTOmQbYzm8k6Vin4bSFuqHlurAA/E0lkVfuMVyw6BAstgdF1J0zOOXfXGo2EF1HiXKvgm2LY8lfR88jEEOu57VHks61gYGjz2tcgWP197bppMOSHfcoxz28uCDcHAX8YQ4raYyOwd8tzZfz/F8dD040PR8NrGzkMHAv3DyfZlVuCSnw7FJWsDiSIkuqrGchCgqLPdTbIaGBeTUAK+37LMFs3nt1+X1q2S8cSUZX+E0lnd9lqxp4NnXyYO85WxLMtiGhgboaIJT2oUZHfdu6N8nke5B1LCTIjQKe1D/CUz0b7ujTIZbj/9tMlB3N8KkBQP522zH67MGyVmOwoy8shouCCC6VRN0sz/IbSTsaG2+s8p5Hsru2F6v7px1WZRrXGvUX71n853jUEKl/pJt6F8IICTQIRlvvI9lN+28v6X97cHZHe0SgLuesHAf88yx8sBs1N/fU6yXRF3IEsN6HhAbKauA/JT1REl4rfNfeBbIOjrkLMg54asxd5jheeHRwMFJQv/vK8Mt7n7OttR88EEaLGw6DnXchHmUdSZdPAzy1sqjIur73npqxgtxlKIlY8UNCA7M0QMQpBSb2lHTjWRc7+DuMUIQFL7dlja/wdPKdkl7loDNlmkiMPWd54qAjxr6MxoZ7DXOffAySyKgu0wchfx+CmOVzfxzw/PsRkr7Uh95aH74taQdJWCsj5LZHA9tgV5j3eKewynslgpmkjkdaheXl835Sbu8qknDPeaW8mtRxiAt2l8SKHxIaGNcAcx6rvFc2m0kjylzHHbfCnJ8EeOKHAQjbm74IlvqD7agS5/m+jGoz/cASDwEMsebM/b4IOSW8wCB6XS6TAE/QAefeD/al59YP2HCIi35TbO17NrL1u8Ncf5ek3Zwnx0zSwIssXXyFqkyTAM//kSbbxyKNhNtiuX9H/TkS3+yJBgA7HhySxggr75NwZqfo5SXji9s0fi4UgOFu4z5pwfpyjQUXsdKH5b6HA1yiS/DKU0+Rks/eE2MmdfdrVgNvIX5+1paevxNtREodZv0+yu/NIgu9deTO93GEp/cJgJMqSgGTW/a067jV6eOiKNNpKzz/fy9JX+9JeOGkcYXSC8MGfkqi8UL6rwECyva11a9PBrrRkfujpAeZp22RG3opyl229TBl8Cbsq2DBhM+eM/2Jfe1k9GtBAySFUW34fpI4v/dVSBx7TpEOW3ZLX2zrIZMgrrjPwluQoBySJQ6IMNzeDTVb+NcbMQq5In0XgsxIGpuYGr7UCs/f1pR0jqS79l1LkjDmQYSJ6w7GnBDfGoDIhVgSKM/Y4lIbru/C0fThkqjPMDGqdFYVDSh68VOitCEIW3yyBY834Ac3ns9RJ8KMSkqElsI62+ct/OgIES2ITYpz/ESZBXgUxRvjtJ6kzJaZvrwZseJ/z2qBf2baeajMzeKaVjVwZ2NeJsIM0BNFN2uOt9rAhA9j3vKC+/JSpdPLKGM1yzYjzW5Igo/+V5Lg6/+4Van9y5AU4KivMNRAawb/wd0l8W/v3IxV1U/VpW0l/WKpL5YBPG9JEk8IVBiiYPzgfP9dows6IarbZDMNWNGZ5BiqWNEBeh/y2OsoeA9L7cXdPFXKAL4ItT0lofGOhJbzzDXGikoILA2H/B+DIdZV0ha3lHSXjrZpBDHQLs74JBcdPettWmfU4julNEAqK6s5RjnqtmOQG8o5fZKCMNY9blIo7fjFZQDPd24tidptuDdSyEcsxv2XFh3Edhp6XbZlsPDwgY0EF8uDJW1j5xWMim0LyQgYRX4u6QxJxxiffzDkph0JdppbSNrO5gCrO/831BV9VNv7GH7+MGsIygIe4BGw8EVJ5A43LcS1E/wyK7ad9hIhxUBjUyCE8GEdpTXyQiIsl3jlH5ll/1Qz9vG3kPk1QIg3lY0fbysYbmJe8syBsnN3/lbkfQeYmR8jCTqrmfOuitIA+pslvThB/0+33QNB/2WFVZ+dB2e4VxtZX5X+lH1OmetY9QE/xxC2V6z8Z0r6VlBll1HfCtdgJCZpC4vz5naEI9mFHV6s5ovVScz8W8uSu1QBCMreRBKrWNNJB6zsJOpgGKT6TRXhbb+qHTl2yiD2n7cs530+vAQIgiAnofjAJhTb/2UjjI2GNE4CY9ixUcOcsWRMWd15qQ/N2l5l7nO0fKwkFspZu+OF+1YBPNczGGy9FypRNiwYxEhsoMb71MCBKc8stvoYcmgfRQBzEV4A7AAYED680PDxswX7sRkBMQT+rMyWLJdOVWwH4MW4BmUyn3XNCItlncUDgxsLCp8AeHnl4i7GrlY6QKwq4ItAnJPt7Vu+aeWuhJWGlZ4qtgS/VBUmDCvFpyStXeOFVvV5da4nQIIPLwI+xe/sBvCh8hKgxj0BFIT4equRhzGNVYdtOWOAX5wXMKBnvvEB1MWnjg7jO8t2kFjmCX1fgdVmKeVUBTz3wk1Gkgln5xRC42EPfZtN/jrPuK8lEDDZ6vSxzjOb+A7gp70E/MBHQBJE6cFsogEN3IPzNjstXtwQoRZ9auDWcYsRDeAdInz4qipaqQMGzlVYBUnD4/dUgttrfyuTU/VcT5vw1cLaQyWROv1M1a9Z92WXg/eB7D2v5BwY2KhnBp1Y3+ijZo1fG3/HBvQU85pVsgfVBQKWVHx/5N2mFiLbiAG4uMaDcNmR596Fv75GcxeMeW+Q9GFJAN+z4EF5mVmQPfcjx7ZzdqdCDotiJakLeL5HkXnA2AYnGNF3u1j6aqUOSnq+cY5zhsxdPmZHGSz7fRDO8LiM+lCROJfxYLe7tQV7VS6sUhfwdB6/PG9w3jRtCCQVLzBjVtWOku5K8EbOFmAMdZzb+8a8s5WlGnPECplfA+ys4Wz4TZ1bzQN4nkf0HXHlbQ0mrixWbHzaVYSXE5S9JFfkKqyEnHm9b+XH9UtUJIkd9C9kPg2w6JH6e1Hd28wLeM7GBLu0WbSCFRCjFgCuItSLx8efY7QWkXkQF1SJNKzS966v3dTiI4h15w3wAAALvklEQVSFD6mvAaJc4ZmsGqey/InzAp4bUbQCpg0y2doSXD6UByLZpoqcZYQeVb7TxrUET7C6V7K4ttGwhp6B1R7Da6zy9RVKqDbVZOoYrxsFPGGQMNvy5mmL+hd3FSs2rsEqriuivIhyYwLmIlT4AQwn5dKgRO3gLA9d2gaJ7t/n20K9xk76C+O14qp2uokVnmeSr06gTJvWWAgpdpb0zYohqSTavDMjAx4uFkoe9Z0bHx4Dkq/wtoRU08DhkvaSdHm1ry2+uinAY/0ms+kQA/+87Sr7fSrC7m3RRlUs9xgan1r2IQmvgzLrtS3bQBJ2Z+at8eqwyre1E5zZIAcXAHJ2s4TQzkx/ndWfpgDPc4ioYtvBWbStASXsFFfdZy01dVZ/i7/jk8dAhpehS4GHDGMd57MhCLHfJDd1rXcvumYrj4Ga4/KiOnF1OtEk4Hk+setsTyEUbPre0/r3VXPVEZxTZZUn5BY2XjK22mrreB/YaUD+gbtlCIKu2ZHlsLvKXd/MZYrAgCcSqhqRpic694PWmtBQatO1JWwVOQtXfQuSsomxjLZ24a7D04Dlumq729Jr089hF8g5niKeIUtrALcz9SDImKyykC1516YBz8MK3zyGsaaJMqZ1BgMeyRr8rHrOweBIOu39JZHp1ZaQ3sh2HtAPScjwYlvf1rHPo24JvtpzXp/7pI6nADzPYWtPEgggbGvlREGQYc4k8pugCBI99jMWVKLyUull9NEYYwA8hS6GJAVJCfx0IYs1AEnKJyW9vcmtfPGYVBO72NqTN9+WgYZwQyYTW6E6WyBeTBgAd7PyRLwEmhbaBSU3pBYY6kj/hfduSII/HmYjaMdDFmuAeUyV20a38qkBz/3ZzrPC86ZqI6OOZz7XYvvrVojhRQXBB0ksT5B0R+M8nyfphiMG7WHnca0B/Fhzs3hjs2kCoNCMMycizHaxNsmEY2fMCp8kpyLVCl90hUJ+BLrgR2wjug0abVbpedNLWe0hV6RcNuyp0DZhcMI+gUtv/AVQ0FQV7LVE/7GS8yGriXBI3IDnm0XeG4tNE0Av7gEbEYCniETIDRpgzhDHQtj4FakUkxrwtBsmUqLwYMlJXR0EQxhhvtBeNxGXjn7IsCP5A6MeL4E7mHEP0Be8dAXQSWqAlw5CSj4MHC63Ia7k0+YsRlIAz/ErZJkGmD8sVkTTETmaTNoAPKslYOfcBmhSC29JYtPZPqcQdAa9MjsWXiq8mXnRhJTTAEcmcroJ0gpZpoFvG/ssoC9FN11XcW0AnrYBEN7o+GAZ8JRC4UciujB+JFVeyk70+N4cj1jhOeaFLCOhJBYD4ta6tqfSemwL8DQIAxjpfRjEKP6XUjgHsaOoQ3Wdsl1x72VMSazwu4YyFuYnlOykl7NQJZc2AU9nCK3E9/y0xEY8tvOEb8LtPmQDWfIJVOMBUFcDeKLIhiwcBYnBIAiJakStSNuAp1MPsS0MbpmUQTnw2L3ELPZ1/PKtDMAAHxKAX3bUhIyFI+65bc6BLgAPyCn3TGfXT9hZLOh4B9gy1eG1T9i0Qd86AL8sBJxzO/EYrdqZugA8s52gnGeYNR0q41SCEYREDQIZkhtEUnWiZ/cdOuBhJ6ZoKvkbSYJrlpovXQGeNhF9B2MNRryUlnvKNsEZR858bfK/noGuy+4MGfBY5NlxUn+gk11nl4Bn0lFkEOMNFlvcNamEwBcMRaz0tfi8UzVsgPcdKuAhXD3QUsdZhDqRrgFPp4vYdcpW4bJJJYS5QuDPSn9hqofEfWdqYIiAZ5GBr4HVvVLxx5narHhBDoCnyaTTctYmOCe1j55oJqLx4IL/dUV9xeXza2BogMfXTlANvAeNMdfUHYZcAE/7iVOH0BELfurij2ypGASqy57X1Xmq7qA5/96QAI/NCEs8xJ3QkXcuOQEeZZBoQ2AOobGE46YWElvw10MmCV89ARBVGXNSt7Fv9x8K4PEKnWyBNUkTYqpMkNwAT9vJlyal9tGSqEvWhpDZBhkmA0OGG+csSvESsde0ZR+dc2zhJznyrfph21DmjGcMAfB/tuw3GJzZQWYjOQIe5WwiCe4zKr6m3t6PDwa59NBP8ZMzPqAvPrhSAClhkVAIFz/5nWg+gor4kDpLKjC7FJhzyKXnJ6m2eCYoykB+/DEV6bWzmThzNKTvgGeBgBgVNiN2jllJroBHSVAgwUZLfntqQ96sQQHogB73HkYYgD4O+lHAA/pRwAN2+oAXggnPCwH+PeIDOvHHzupwwr/3GfDMDc7sWOOzpC7LGfDMuXtLomImyTZMlD4JVN5vHCA5Rl8Bz2JAMgyVlKmRkKXkDniUtq4RS8KPB9tMX4QVHsCnIurIVU99BDxHP6rDMKadu96WGngPgKf9UBrDVUcobsqIvDZBQtQVgB9a5F/fAE8E3UclUedwXi7F5PPPC+BRxGqSiMYjDDdl7H1ypdsDDjKG0gB8Wxpv/jkAnFX9MOMybP4JDd/RE+DpOqw5BOZwrud8nzKfvmFVL7odgGeFH1q0Xx9WeFypBNJ8wGq2uxlDb4AHNaTWbmnkFg9LzJyTEvRsAwF8K9RGKTtS8d7eAY93htLNWOIhscDn7kY8Ah7l4vIiKo/tPdzx+Lm9CWc+AN9Z5lRHCvMMeGIwjpbE7owgLXdBU14BX8xVLPgk3FAeatWOJnDdx5ITDeAx+gxJvAL+akttJQcja0v8UpPJO+CLcz0Rea+StN6EqjC5gomMPQDPRBqSeAM8uRVUDiJMlgg610ewPgAesBBzDznmHlazjHJQucuhZqUPwOc7UhQY4ZxOZWHIJl2d1yeptS+AL871pNgSlYfPPiWZRhNTFEIECgdSmmpI4mWFx/KOneVIi5zrBd15nwBfgIbAHFZ7Su5ulrHrDsCzpScrb0iSO+AxxJHhBjsSq3qvbCx9BDzgWVnSvSTtaJb8FLXe5wUpwRoAntTcIUnOgCf5hQhIDHOXWEZkr8amr4AfX+1h0tnIctBzGUBirwF8pxxnHSgjR8CT6Ui6Msw0lPTu1ao+OsZ9B3yx2lPiirBc3Hc362CST3okDLoAPvv464b1lRvgYaYhc5EdFwxIcBv0VoYA+NHVnjM9YbmPyGBEKUSA0e7KDNrSZhNyAvxpVsgRoorerupDW+FH+8vZfg1z3eHCY+XvSo4wwEOpNSTJAfD41XG1nW07LNxvg5AhrfCjA0o8Phl3VJil8g3UU20LhiFWeOi0hiRdAp7MRKzvhMdiO3HvV686cYYK+EJPlLuitt0udsZvM2AH/y6Ap9bYkKQLwLOCE+hEDDwv2KHRii2fX0MHPIpAB6TdErRDMYwntIQ+6JAw2rmNy66pp7YBf4IRSkJDTjDNoEuHB+BvmLVk4MEou6Gk5xvwU+bbU/KKFf5HNYHj9WttAJ7gmRMtUo6yYmQk9iJSbt5BD8Av1iDbeiYlgTtQapF+m8KVd5QBfmgrPMcoCnvuPu/knfB9XGxQf5OJSFERiCUHY5Aro88A/HQtseIToccZHx8+UXtN0mUPNZaeFyqAp9hIU8KZHK8HOuWMTt56rOgTtBuAnz3l2NaTjYc77xmSdrJCErO/ufQVTPq3DnRikuewt7EXzaNH8hAImCGmgRBlrO7uSCnmUUDV7wbgy2uM4hE3NQPfVpJ2kATFFv9fVfADY7D7XNUv9uT6LSTta8lNVbtEfjoUU3g5TrX8dGinoiZgCU0G4EsoaewSdMZ2n3P9OpK2l7SdlbwuczfOlAfYtrbpunVlnp/DNWzr2dLvWWGVx9aBoRPbB67M6213NGire9XBDMBX1diK1xfgh1NvYzvrL1UPj5UI8sp3DJDpZlzTGEZfY6HO04qG8kLE2s62neQW/s3ZPEBec94G4Gsqboo9hO09rj18+Wz717JimKRdXmTb0C/3PUGjgkpXMu4CeAmpJYgFH1BjeDvFwI5Lje16gLyCYqddGoBvQIlxi9CAFw0E4L2MVLQzNNCABgLwDSgxbhEa8KKBALyXkYp2hgYa0MD/A8NqYc4cq6z0AAAAAElFTkSuQmCC\",\n      \"created\": 1688108569668,\n      \"lastRetrieved\": 1689638386800\n    },\n    \"2e97dee7f2688d55000982b629929327c636e9de\": {\n      \"mimeType\": \"image/png\",\n      \"id\": \"2e97dee7f2688d55000982b629929327c636e9de\",\n      \"dataURL\": \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA+gAAAPoCAYAAABNo9TkAAAAAXNSR0IArs4c6QAAIABJREFUeF7svevS7DiuLLZ69sPax5fYO074we1z7J8z7RBb0EBZiQspVn3V3TkRE72+EsVLAiSRAEj99kv/EwJCQAgIASEgBISAEBACQkAICAEhIAR+HIHffrwH6oAQEAJCQAgIASEgBISAEBACQkAICAEh8EsEXUogBISAEBACQkAICAEhIASEgBAQAkLgCxAQQf8CIagLQkAICAEhIASEgBAQAkJACAgBISAERNClA0JACAgBISAEhIAQEAJCQAgIASEgBL4AARH0LxCCuiAEhIAQEAJCQAgIASEgBISAEBACQkAEXTogBISAEBACQkAICAEhIASEgBAQAkLgCxAQQf8CIagLQkAICAEhIASEgBAQAkJACAgBISAERNClA0JACAgBISAEhIAQEAJCQAgIASEgBL4AARH0LxCCuiAEhIAQEAJCQAgIASEgBISAEBACQkAEXTogBISAEBACQkAICAEhIASEgBAQAkLgCxAQQf8CIagLQkAICAEhIASEgBAQAkJACAgBISAERNClA0JACAgBISAEhIAQEAJCQAgIASEgBL4AARH0LxCCuiAEhIAQEAJCQAgIASEgBISAEBACQkAEXTogBISAEBACQkAICAEhIASEgBAQAkLgCxAQQf8CIagLQkAICAEhIASEgBAQAkJACAgBISAERNClA0JACAgBISAEhIAQEAJCQAgIASEgBL4AARH0LxCCuiAEhIAQEAJCQAgIASEgBISAEBACQkAEXTogBISAEBACQkAICAEhIASEgBAQAkLgCxAQQf8CIagLQkAICAEhIASEgBAQAkJACAgBISAERNClA0JACAgBISAEhIAQEAJCQAgIASEgBL4AARH0LxCCuiAEhIAQEAJCQAgIASEgBISAEBACQkAEXTogBISAEBACQkAICAEhIASEgBAQAkLgCxAQQf8CIagLQkAICAEhIASEgBAQAkJACAgBISAERNClA0JACAgBISAEhIAQEAJCQAgIASEgBL4AARH0LxCCuiAEhIAQEAJCQAgIASEgBISAEBACQkAEXTogBISAEBACQkAICAEhIASEgBAQAkLgCxAQQf8CIagLQkAICAEhIASEgBAQAkJACAgBISAERNClA0JACAgBISAEhIAQEAJCQAgIASEgBL4AARH0LxCCuiAEhIAQEAJCQAgIASEgBISAEBACQkAEXTogBISAEBACQkAICAEhIASEgBAQAkLgCxAQQf8CIagLQkAICAEhIASEgBAQAkJACAgBISAERNClA0JACAgBISAEhIAQEAJCQAgIASEgBL4AARH0LxCCuiAEhIAQEAJCQAgIASEgBISAEBACQkAEXTogBISAEBACQkAICAEhIASEgBAQAkLgCxAQQf8CIagLQkAICAEhIASEgBAQAkJACAgBISAERNClA0JACAgBISAEhIAQEAJCQAgIASEgBL4AARH0LxCCuiAEhIAQEAJCQAgIASEgBISAEBACQkAEXTogBISAEBACQkAICAEhIASEgBAQAkLgCxAQQf8CIagLQkAICAEhIASEgBAQAkJACAgBISAERNClA0JACAgBISAEhIAQEAJCQAgIASEgBL4AARH0LxCCuiAEhIAQEAJCQAgIASEgBISAEBACQkAEXTogBISAEBACQkAICAEhIASEgBAQAkLgCxAQQf8CIagLQkAICAEhIASEgBAQAkJACAgBISAERNClA0JACAgBISAEhIAQEAJCQAgIASEgBL4AARH0LxCCuiAEhIAQEAJCQAgIASEgBISAEBACQkAEXTogBISAEBACQkAICAEhIASEgBAQAkLgCxAQQf8CIagLQkAICAEhIASEgBAQAkJACAgBISAERNClA0JACAgBISAEhIAQEAJCQAgIASEgBL4AARH0LxCCuiAEhIAQEAJCQAgIASEgBISAEBACQkAEXTogBISAEBACQkAICAEhIASEgBAQAkLgCxAQQf8CIagLQkAICAEhIASEgBAQAkJACAgBISAERNClA0JACAgBISAEhIAQEAJCQAgIASEgBL4AARH0LxCCuiAEhIAQEAJCQAgIASEgBISAEBACQkAEXTogBISAEBACQkAICAEhIASEgBAQAkLgCxAQQf8CIagLQkAICAEhIASEgBAQAkJACAgBISAERNClA0JACAgBISAEhIAQEAJCQAgIASEgBL4AARH0LxCCuiAEhIAQEAJCQAgIASEgBISAEBACQkAEXTogBISAEBACQkAICAEhIASEgBAQAkLgCxAQQf8CIagLQkAICAEhIASEgBAQAkJACAgBISAERNClA0JACAgBISAEhIAQEAJCQAgIASEgBL4AARH0LxCCuiAEhIAQEAJCQAgIASEgBISAEBACQkAEXTogBISAEBACQkAICAEhIASEgBAQAkLgCxAQQf8CIagLQkAICAEhIASEgBAQAkJACAgBISAERNClA0JACAgBISAEhIAQEAJCQAgIASEgBL4AARH0LxCCuiAEhIAQEAJCQAgIASEgBISAEBACQkAEXTogBISAEBACQkAICAEhIASEgBAQAkLgCxAQQf8CIagLQkAICAEhIASEgBAQAkJACAgBISAERNClA0JACAgBISAEhIAQEAJCQAgIASEgBL4AARH0LxCCuiAEhIAQEAJCQAgIASEgBISAEBACQkAEXTogBISAEBACQkAICAEhIASEgBAQAkLgCxAQQf8CIagLQkAICAEhIASEgBAQAkJACAgBISAERNClA0JACAgBISAEhIAQEAJCQAgIASEgBL4AARH0LxCCuiAEhIAQEAJCQAgIASEgBISAEBACQkAEXTogBISAEBACQkAICAEhIASEgBAQAkLgCxAQQf8CIagLQkAICAEhIASEgBAQAkJACAgBISAERNClA0JACAgBISAEhIAQEAJCQAgIASEgBL4AARH0LxCCuiAEhIAQEAJCQAgIASEgBISAEBACQkAEXTogBISAEBACQkAICAEhIASEgBAQAkLgCxAQQf8CIagLQkAICAEhIASEgBAQAkJACAgBISAERNClA0JACAgBISAEhIAQEAJCQAgIASEgBL4AARH0LxCCuiAEhIAQEAJCQAgIASEgBISAEBACQkAEXTogBISAEBACQkAICAEhIASEgBAQAkLgCxAQQf8CIagLQkAICAEhIASEgBAQAkJACAgBISAERNClA0JACAgBISAEhIAQEAJCQAgIASEgBL4AARH0LxCCuiAEhIAQEAJCQAgIASEgBISAEBACQkAEXTogBISAEBACQkAICAEhIASEgBAQAkLgCxAQQf8CIagLQkAICAEhIASEgBAQAkJACAgBISAERNClA0JACAgBISAEhIAQEAJCQAgIASEgBL4AARH0LxCCuiAEhIAQEAJCQAgIASEgBISAEBACQkAEXTogBISAEBACQkAICAEhIASEgBAQAkLgCxAQQf8CIagLQkAICAEhIASEgBAQAkJACAgBISAERNA/rAP/3//56/fff39t9Lfffv2y3/HfR2n/23j7kNxRD0rQ/3b+exR1v1+vujatR//4j1+/fv/XH+WPNqP//faPP8qNrpz/9r/Ze9lvx7Pjf1aP1bVTJIYbw5fhPPpjYz/Gd/Zxtk++XXs3krtvs8K96sc//vHr179OuVRlj+dHefvf8Z7/u/P+u8v8dujjP089+49TX/7569fxu//fUab6zcq8zKVgEEx3ho66efFUXtc8IXPRdyvSp2yOrsiGzVdWD87/S8f/9e/1ANeGm7zOcjb/bS1Y6fP1ziEXW9xsjfXrpP1mOn/8ffy/M8etnm4HfXnTF7/uR+s2W9MHkGdf7d8DuLMz+Az3l2ivoIJ19d4UsDlwj/+Bq2E8Fhu3Z9naOrPGMgwQh5uSwf5o2D6RpZdF1Z8V/FDW9jfq8fH3gZ3pkf3tMe6IzOsQ0zN83qkzk0nn/WMMuIfZHJ3Rl05bnyjD+u7H11l/uv1kup2tD34ditYebBvlw+Rl70SyXJn/VudTHcj6y3Bm48368lS2mQyrtStak9h+scD+fvvPF8bR1UyVW0BgQUQLreiVC4H/9/+4zKrxW0QWGAkYZMA2YLKRj7rOlrxNiHMan9mUM7LhSccuAoIq4Em9PTuIujfU8e+XOrxT4/dfv37/LcYzUsGIuI/17Pc/CCsS64zYm0ztfSR5SKi8U+Zd08RIe0Xef5qcezLusbDfjYAbYbcy/nf27w6u1TxkzjMv604bM2Vw/l9j/ZIVu0PkcY5X83kGn1HWDCe/wHljii18RsjNiPLEB42bo8zhCMrIPhq4ti6bQYTEyj9Ho8kDkBnLzOCOxortIcisHWYEMqxZPzxBRHJeGdaedHYcFdekCJwX0VzpEpGXDef8oasP18ZGHOlIsFlb1k907Bjuvh+z60LVPrEvRhe9PkfjWyX13QVgJ6HttrlazuZNh9T6cfm5Us2bqm9sjbptsI1gj5U/+ng4zDN98w4J/x4j5U/HVo1953McF5PtJ3QzIvBsPkZriN+fsnUK8BNB36lQdV2zy3pdo0qkCBwE3YxvFlEde+BJPFuRusBYy8gue+XFPgAWz8j7qqh95Byj77ORtMjojzISEF8vAy8XT8wzJwXKKiJyrF0W/XyXQ+RoHwk6Enf/96psn76HEXNPxjFC/rQtpvNez282jJuTqDOVQ2tVpsy5k7U99twz+2O1zaeYooNt6D1kyszO8bJPGaEcHQADlJETH0lHAtchy369tDa9EeQNJUZy0EiaIZEz5Bz7EYGLfcSovMcV62CGKzpCSqFC1gBrL3JUMIOziyeTY0XIo7q7bXZkYPppffFy9E57LAf7+IhMe2dLZgEiscO6sN9Px9vRCSvjCa/Xt5k6fqos9v3oBxLVdxBXPwfZOrDLsRI5JTzejMhGYzZn6ifI75NsANSnd8iQ6SyuWTfD5fyD7T+4pjbYoAj6ZxeNhkg+26G/emtHirsZ0jZWRsgpDucCe5Q/0pEvgldsnC/2GzgALmP+XKDHHn+muvt+jIjyf/z69a8jnfhs0xOBTlTNDHaf1n5bTzYtwhlBv7UHRwsu265I8V8hQIgZknmGqelKlMq80o9ojv10BD20UyG1vZvyPnTtTJGfjaxjRD3KmmDyiWSSRemR5CMWTHfa60ZzUb2lrbujBTg/8WjLtY6RYy/4bJDzc0GizjVGtkPFSNKxjYQf70YGIxo2UQSLtb+DjDCDeSjU2WBG5JsyvYpVJH7HeLBPM0Z4Np7Io8wM02ic7HfDuktSb5shyGgsNiQS+RRXqxNJtaW3+/oZofbPK0dChPNtAUgySioCjzJ+gk3HTvgUQZqdi768j8pGEVpbw5600303mwuVcw/lGY0tyxSwflby/ZRsce+YldE7+hntkbif2JpUyX5iHoqgV2DufS6CvhfPsrboDPptD4RoXSvSisaKI/O34EcwGTMCgnnzGRE3osHOpVfn0b3hXwJZFIjI0Fiz4LxvhK+VzciadSNrz5cZNqETSCtL4iEYPnKepbl/QwR9ZqiYEo9kfGBNzqZ32sDodaQ3mYNkZzQ7S3nf6aRpYePunBgYw3nygZUzsKJsHvt9e+q7J0s4INzxfMQRn5lxlZHba3IHzoLbwk7KMFI1QHVppJEBVfUrMtiwbjTksL2u08TvQRbVRQJ5/O0dEH78aMxmhmNlVCJZrMpHis/qiWSOsuwayJ1Jx2Tk9fxo2+TkiVRFdCpcGGlnjggbA4vCVm10x8/KsWh0VN87yNJM3zvR2Q6pnVlzcC3M5jLK2o9tVoZIZGdwOspWWRGfkiXL1LCxoDzR8WDjmB17Vb67HrN9EHlCtfZDX0TQK+HsfS6CvhfPsrbqkjhMf2cp1EakLhLMpBgYCy88Hsmq2YbZYu0340SDkJBnf7NU97cY7kRCEWFnxKc6M84i91FkfNjhQaR+J7mrlLIi5t9weVz3sriB6UnK8b/+WYUJPo8Iu5dh9yhEdLTlsrsmLox7t55UczjCcSbV/dE87xqc3ujDRdAbWkZ0jvLeCDQD1SKX0brHCI03lLqEZ9Yg9oKI+uAN+6G45w9sLNkzJnQmByRymTPE6uwa3pHcmVPCG6HVmGcsomiP9G2syLEywJEYWPkoyj4zJtQjv9ejHjM7IMJ3BYdskWZkyJevHBOzG8A7yrPobFf/d/bnxShsrA3+nePfmfPBr72M8LJ3I/n9BD4R1pFzyKfkv6O/q2ufHweuUX6NTHRLBH3nxKvrWl2665pVgiKAl8R5o3zYTBBdxTOx7FwqNnQj+cfFaUYE3YVnlQ3n+7U7QsdugGY3wl/7/7ngbT+7CsBlkfSxfj2YLVHKfVZnRL668qguhRv7ZnDre0Xav2V6+6h5dpP7aiTd5M5IdZR2fuktOF+6csuwZZkamQPoU3JiGTMDO0h7H/05F58WMa/Iys4BenLu661IuRtT2B00aDsE2EdCq7UHcUKiyshyVWc0mEwmrB9jY3OV+XaPfxu+Vm6GXEWOgWsSBu0+0ZuOTiLeNjYbe6cO1keGr/1mDhDUXY/nrPOgkjWOy+OOOr+CeRbBzOpjEdh3kKXumCoCa/VkjofOvKgMO3wezU1cn9DBssvhEskX5fdu0tuV4zCayFcG8P1P6h+TKZuHOFejtSCRrQj6jKI8L7u6RT9v+W9aAzuDblBUqdSVIW7vDyJgizkYeWYUR3bNNTfJRXVeZLdz60VZamcU51XHWkI+xcSM+szQ76Se+/4xjENidXyO7rw5/qijkxZNsfiCWciI+jeeSceb3NnN7lkZezarF6gjzHG2e0nLMjsiPaoyPHY4CTrjRGKOd07gRZG3OlfJC+tYZUwZKT8WPk9wugaojwpfC3lx8/tNmQI0M3Le7VtLUJ1CQRlPwMYCWKT523Mf6TUjsUM+InyRZGB3WT+xzAym6PzI2suMZ28wd9rPdNn02IgMYn28izruHU+evGYkLyLdrP/RmDpjfaCW12cTf5KQz/Y/IqRHPTg3do4LHUnvlE2UMdAd485xz8rHl8dxYF1MXmyMs33orq+4v/i9BNfQGXJ/LPH6zNqs1B6V/wJq8Kj/f7qXfQS9IglRhK51CVVglFzzsbkQVxH7yuCvLo5jN7pT8nEuetm51VZErqkxeLSg81rlYLmtm0EaM0ba/TsV+er0sVuG3fDu3/2GtPdrr4GL4Oz3J1HzCCc8gnKUi6La1dyoZJG1Vc3Lqu5PPf/JoyspYWSRSCSLZhA218oXTCuDCo2loUxJemkV1YraY2O9LSzBBWeZkjBMWPtR+qonh9W4ZpU1i9xGkfxr0Ug+IRXpQRW1jIxiJEedcUYRUO9oOurxuowZIKbXnduxOzqc6R3Ts844Z8vMpEnP1v1T5SuixwhrR17VeKr5s6K3UZs2Rq+T+Bu++y1E3frVyfKInCw7x8Ich9E+F61Zxf7z23/pO+jV9Nn5XAR9J5qNuuwza9E5VHbm3JOAKq32dpMsS2GByAxzoF72BLnh/BY5N4OyGDd+ZikrHpVl6e07CfkYSvIt9Sfp7X68GZkzOQ/7yqVHI9F797ljlM9PRtIxhX1g1LyZPfpEmz+bbvUxnWQZEShLfO/dsmJHJVA3PxHdbyx1owi7LK66VK5b97ZyaMRYtNHWtxkjKiP+Vp8niew3ZjzN7NQdwhg4cF8w9aS046iwtr3R6n87GogIozWOkd50wwgu3kOM/V6FEaUIW2bw3haA8w/EJXMCZJkRfvysT/ZupGM+Sn5t4sllgx15+jbHxhTUx35nuDBy1+lHZ7IjSa+Inq9zZo53+vKkDCN8fixH3TMZJ52+ZMSeEfaOHr8YEucPiDWmr9t778wc6GBSZV9l44vGYL9n+jari9U65dc+nMM4hsJZqgh6R3H2lZnZ9ve1+jeuKTqDfu2nRWQ1Oidtvx//HZ9g80amNwKzxdbJZRQj336+2j8X6BshcZO7ih6ybyPjLe4+Lfad58+NmN9sr5Wb9Cf1mpEt1IOuY6DCe7Jrozj7bvrx+6ej53hbOxsLI/JDheFzYZ30d1p/MBfQ0Ralpa/g33mHRdI/7cCZSWe/9DswMLc43ZixGRmgjNR4g6aKFnXIRRZhZEQS12vWRqddXw8qU9anjuLdFssktZ0R9aPt4/9G1I+xoFNktg+XYjVu08e+V0Yr7pno+K6wyKJSvu2uTJlcMe2Wed6tjOGPjgqrNyMIHecRCwx4jGbGGelBFrXEZ6u69O73slRpvz7ORJd39pk5glBf/VoZyZjJmzlTjKhbPR4f+41hsXPMVV1VtDzLGDrqZvvezjFVjha2dqGzNpKpUtwr7dj+XAR9O6R5hUjQszT3KN25Q8bCMgfRsG+on9K/7eXEQWBk3dLmrvWWkP3OJ9hu9ow7i/5iQ8Ji5tPbxxrinm8x7F0HMuJjxTpy6KhX5HS5bM6FM/6ddjtl8LK4g5yPfWa3B7/TGVIGb3ePouaXzBY/u1Z1r6MvVR07nmOGzbCnzk2ZPdvSZuP756wddLotz+HMKOkOEOvwZMYbmH7H7EYIsz5kDoCK6FwLxCQp9e8NBWlERXEMT0mWJ4nWh4hAdvAbG0ISTWckOyPeXb1BGWA0KyI5s/V3ytt4ovmAziBzilh5dOrPtIk6ZPIw2fq6KqdXp11fBoluFW2ejVDO9mdn+ZksgCftMj1lUXKvQ8T+m+pCN0KNzgprJLJBOkc3pjraKMx0EI+SHNV8wm7CNajq/sR8VAS9AnPvcxH0vXiWtR0EHYlddRb9treBxKbOJRNpVzYNZrxc9tz54ljDoz65TToi7tW30W3smfEefWc5Esbo73nBW2r7bSbGVXr7gOvEksl1l0OgVNKF6Pk7o+qdCHpnTOxTbZ33umW6x1O69c2W8/PQ688n9ea2Vp3GCDrWhp5nhkpkLM4CEi4ADULrjc+OUdUhrNlia32NylwLrxtUp81ZzHY7IGwPiDIF/HNGmBn2u8bNrJ9O3REBzgzjCFeMYq9aZL5PkTMichZ4InGUOTD/JyET0bi97pqeur3/RQU7GHf0tiJ4jNh15nKn7XeUQceCtRE5HFiq+K7xoS5nBB7Xpsjht4JZhMlRVzbWn3DCIEn340VdRMfL0/525iZbg6M1IZijIugrSrz+zup2sN7i3/zNKsW9gic6FxumQlvE/B9nVqG7GX20FU3EsyM4p32K+42cB/UMcpBt1smA2Xn06BNtqynwM86RMYyHMyZqD6ObFanKnlfvVjqGz6NPrr2TlGd9zKLm/j1LZ7ff2HfRZ7G41c+yTcDBctmuxNmzm0RnZ9HR8bNDl2ew6zjiPnKkpUP+mVHoo40zA8eymSGV9c0bzNG6vWqk3ZQ6iahH467afVlQSHo7u5CvInLHO/+ROFsYZteEdBucJ7TVXlX1qaMbjEx33qvKYL0sYu7TiK28Jw82PsSkattwi0jAtQif/3i4j750x5P1LKLun/lKnhKkDj5VGXQ4RGM66un2t5qblbPJyxVltmMuHPWzcdsY7blh58fdxaDC/dPP35UVsSprNnfRyWfTVre4f1Rbdi+TH+38n7GxWYLeJeRlJD3wsI/6KyDPhfhSFkdCorTZsj/QJjuTfhRBo70y4vEceza0l/PCJxDHp9Pwf/48NktnHmscEDY8olCdV7Y2mcwxOluJ7F3P8Xb3sX+eG85PEXYca3TufOiTS3Hfcct75XCxvnnZP3XyoJ68jJ/MT9+Pd6W6r+icv+U9en859b3qUGXQeOMxMuy9kdoh3xWJMmNpKGswgNld2xPVKGKL6awsldV356jTzpBHODM8gn3ouhvYxoYXyVWy7JCFSj6+jU59JquKlFayxLa6bTNMImcDyt10+/hvFIldjYRGMma6PavLlR7Yc0aCfuosd7fPvu94HtvXsRolx3Vgtl9e3zMnk80HJlvmdMCx+bFXUfJMj1fGt+sd7HckT7avPHU84DqXOWGqtekyHP44QqQI+i4F6dXzruWx1/rfsNQsQR9ropPS7C3Rt/Je2n4RbRoEN8LpN9tTjrOk/GbvkbPo7PKp6NzqTJo7uxTO+pLd5G6ywMin/30H+WHEPkp9f1e0/LZn/uPfF8P5M+j47584lx6lv0c3vWMU/R0kPTrKMPZCdzt/d/ljjh+rC3UPb3C/9DpY6Vf60+13VY59YnH71xo6xgkrY4YTPosMTDS00Mhia2xkSEXE1htTERGrQM+eV+0+tRaYc8JnJkRnRw07fN7ct16GzIhKRDhW27gmHslIuG185LN6HWKcYWl6EhFlwxz1yZwuK9kiFSnvjOkp1ky3I8ealf2zRGSjKPMxjqeELtJHpsMoR7MDI9l1ZYrjO+rN1tpoHfuJ8+fZmsr2hZtxdcrPxrtTnplD0ssN+8/2pbOMCPqTDXb+3adb7nyLf/M38DNr3kCOiBmLvuFNzamhnRkkpwaMvflMf/fFr73eGYRsrx2/gTZVxr8RcFauOrOOxn2mVlUELiPsUb0tIn6ec7/hkmymWQT+tocG6dKtPm2cf0jILYL+rkh6dlP70NPj3OR5c7v/237DC+S6n1tj2GcwZlF1nLez4phZIwYGp0PAz7FoXlbz9YYD3I4/O44hk4kLIlfq/0MZgACV6UJmiUAE269tuJ6yXdSTSoumVNF2tk6zgeMCfS3SZ+GuUZwqsXsYRXhnjfKj30YCTTbW9+O/UepnRkDYM3ReoB6wvxELlKmNtTJ6s7qZ3lSZCpWMWGQ8c7TcJjE4DyIsowwBdPIzmWZzMCL1O61SJHlHf1gk3X73eujLLi9AEy8yksper6KuOwm7tR+tTZFO+zno5Wl9N72N5IPjZpF0JOPVuKvnE6JaKhrJzSpbzYxY6kyyN1IC8EcjIuirYK+9t3MpXOvB3+yt//m///r9SYorRtPHpDmliEa4PXsh+O5c+oCfpST5jf9IbTnfuVIR3cW/f8xcFx08vidu/XJG3M0j06TbAAAgAElEQVQZkRjn155wlkFDnpFzn9peEfLU5gk+c4c4h9g2oqQRgfP9isj6T6a6+zR/T87fRcjfsTRkF8XtSn/PjjY8mfuZfkTPomg+RtpX+hVmLyS3uo95cxoi/vI4THXHZ8u6kBGqKFJwrFkWRfTkxBtQ/sy0lfFE/FwTab99uxHJzUjWLAGP6mIECw3ybByVUI76jzPiWbqur8MbsN749oTKxhIZs6tGODNK2dg72Hd0LirDnC+2R6O1Zs6OzIrrkj4vd6u3iqQz0obOEUbgrK0OlpWOZc+Zw+fbIqxR/yO5VRkBXbwqR1O2Znh9Azsx/CIE6xfKv4qis7Ui+42t1118npTL5hxb46I10P++uq49GYdfE85/i6DvALRfhwh6H6stJWdS3Csih2eV8e9hX0QSBkNg/EmI+vW7K8/2YE/cb6nusAin0fIj2ndE5pxBFxnuw2bBC++chJ6QdCboiHR1o9Y2biYjbA+dMNi2Lz8T9awUGL97fpRnv2E9nTPo7yLxsze843fQxxw5o8H+GV4wl2FXRcz9u2w+rsqw026UHv8uHap0bOANzrnoKMsUSa8Mzk7HXiZiEH03I+tos9pB0YDt9IORGuZEtbp2EZ3KKI8i6WMxBiyqPqERa1ge7zGnCNZnBuuK3PGdjGgyjLEvVR8Y+e86BBi23nDOotu4UY/JZ5b2+V/Dm6VQZ6SgGrNvCx1BDP/bgtSYVy+bUMMRhOTIE/ix2QXp4j9Jjny/bMyRI6uztqQbWfKZwu571Dic6BjTw+N1PIrgsYiqn828mejmVFHMEmAZHJnj6BP6F81n2N9E0Kck/7hwZV48bkAV3BHAz6w9Obf9Yk+e0mQG/8tZdNzYIyMiEeBFNk6DhY0lIx9ZiuvL2EhUjpH3YRd8OFUISTqOuUPAus6YMb5Ezpc9uXDWeWauMlIepbi/i5z7/mZEnV0ah2fPMXo+cD6if5v+FxHljm50uxDpYTQvo/Wj295KOUbGrZ7qTPrMBZArfWu9g8YWI85oUPm/O8TmpthBqn1G2I/3K4I8FHwh/R8thk47GbCZU8D6iG16A/co8ySa7glFJhss11KW4Nvs7N1duOI+brpgOHkHCI4XHU+oxzPZHl6/UM9QP6N62e9P9a1Dlrqy/alyEYn9ZH+i+cDWJS+zat1iY6gi6zj/oyMMn8TH2upmsHzKZq3WOHSmAWa//Vfpkv4JlP+ybYqgf1i0MxH0y3Alt4OPPY55z+E28SiC7iO64+z5oQk+9d3Orp6doEEHI4Euvf2FcPh097OurlOiQ+A9GWcRtx2R9Io8D1vkkMXhRCBnfl9U7NxAjnov7INsB5Qxi65j/TtJXxRBj6Lm7z6H/mS6YvScEfCVS+M6+oH9ZhkZu44vZP1hjgI/H7tz84kcuu+275k4F6d0rrNoYrcjWXTRIh/n+jl1YdPxzvE+RjVfJrT7oROhekJiKjLF+hZZEVU/PJlkUVYkctbOk4gS3ciIs8ITWySbHoNz3a8/hYKWbhKtZDLo6mpVrkPKbbwrToksu4DNwWisle5U48TnGC1HAsWi6bNtfKJ8tBYdbbOU/qd9QocPEmyUUzSPrR9WflW+mOXAIs/+SM2niO8szpnTAZ1Is3XPlI8IezD3FUGfAfd5WRH05xhO1bB6Bj0yrFmae9QhNL4pkQs0Ysxji5RDavm1hpuhjLbIykYfDCL6nvLNZjoX6KeR9Ip4RanoNMKNKVoT56NYZHTYUCeuLafAlJb2ClfkvVfL/lLZd9LxornoTHpG1CsSX+kNjngXMbd6WfvV+uH16fj3TidPJWH8xGJWPvqKQ9XG0nNvvPjoIhqp3oiN5vkuUpkR6BmjNzLMPFC4bmMkDI13BHm1P1Ek1ztDXiaR+wEdH0z4bPzoMGB/j8lBUrD9b/Zed/xZuyuKmzk+rD6P8W3zPP9APfN2wUrqe0bOfd1PCdwsXlmE85NEifU7SmVHUlpFjJ+sPWyeRVFWtB27+p/JrBOBRpy+lZRH42T93ymz7pzI9oRTtiLoXTD3lBNB34NjuxYk6KuGcGSE3/ZaF81FA5x2+Jygo+5gRC9z+GjjWGDOF262K0bWRyeeG/8YNR/VPliUo8jbKtE6+mPkFR0oXg4zsmf1WF0+yo5k79MRUfxOeud8envybCxYfZ5tYLuY4h7pTZTmPmx+ciRhRj88NFn7vi3m2FltsyOaFSLu76NozfMO8ex0dkxiF+FmRqk3Ho92bTc148oM1MiArgxYJEmevNgYcLzsnXPdbQ27MtLQOWGVZmNhUdWhiOfLjLz58SE5NNm0BjRZKBp/ZCmxcWd1+I2V1cmcICsYR8NGnbY+mFPD673V4fb3S8dndNfLEuXOdNrra9XOpHiv4l3it1r/7vcYWY9kdfyeBQR2943VFzmJsrYzWUcRZ19fRGqjiHrl2NiNE8t+wDZ+Sm7RvuH7p++g79aIsj4R9BKivQUOgj72n0nkK7KYRXNbRreboKO8bcqunziH/V577aluYc7IYdmnc7HuRMxRQoxwP011j4h2dcyARUdvYz8X5BIPooYse2Klnh0ajtF0T9St/k+cRV8dC4u6e4JeRc077XaJs69rRp5RpoWtN1Equyfqly29wZHWwaQqg6T+5ohbIeMr73hDmEXVjHRhFNXS14/fq4yZJ0QEjeGZvWWGYFaGeCXMTltMPvab7UmGN6a7Vu37DauDEXN+WB0ZucZxRrKNSAxGkVd0Y9bREhFl0/3IcdDpWzXnEMtOnR1Zd8vgnK5SpH8iupmNhRG/bh+75Soss3nrHXCdeRfNsWic1jdbY1F+LA3+eCf6vRrrrudZhsSnsgKquWmGvdnj/6kz6LvE36mnO106dalMA4Esxb0yxqvnvvnMWH8x2O1zZqc2XETCGxAwthfb5fzBB0Wuf5/1jv77wEmDBHTPoXfOnyNJXyXt0XfTPQEriXmhK15+SJoyOTdU8K1F8FNs/kz6sPUeZDp0O969MC76rvoN3zOKjt9Yb/cFskjwveiIyo7Mh8qph3q1O9W+i1FWjmXGhLe7H1j/81k2TavPkVHDDP2KmKeDJxfE4QKLxi8jNxXhmTTSRpdZJDiL/naAjfqBBP34m5EoHGdlgHfG7Q1U+3dnLC8TPZAlc654GVs97LeqH4ZT18rzOKOM0cnE2r5t7sEFhFkZX2dnvJVeV/iw5x/Yn1a6Fb7TWXPGxrupVb/eRDpgupPYj9ca0tVNG4OPemfy+zYnS5SxEaW3M5ntcqZUqhDN0SOwqEviKvS2Pp+ZHlsb/rtWVhH0YQMkUonOkr7YA+RiOU/wbwTAyDWkq0e+snCPNTJydoYSdEfWy7EGn2OycWQps9Gnmy57J/lE26xu+gvisjGF+BteLs25kyYdpUx3HTndcrN4WHkWVV+t6+l7VUp7FkHfET2P5idzxKAOZXLqkvAIvyjzppqbT+UR9if4hnoaSX9XZ16EBgubf+7X7Gj99gbWsTgi6cEIvCfB1hYayF3Cs4rRiyc2IZpHG08irayPSM5nIr1HfZFRm5E7JBZPHQ/ZuDqEpyKr/nnX6cB0G/Utwh6dQp26vP6ydrCOTD67iXmV7r6SqbE633a9NxOBnSF+2XpQOdjYutiR86y8o3R4T9oPnDOnxQwmKzLLsjZ8fSxja6W9Te+IoG8CslmNCHoTqF3FMMUdz4G+izRFZ5OvfdM0AQyGKJo+1uJk4bzt4UDc7Rz6jQSAETT+PM68AEmvDHsk5lY+ipavRtHDfoBj5MV2cTPu5iRxG0JGupgco8gn6hI6CGaPWbDoeDUv8J2q/DueVxH1wSuOyOv5PfRrTsD30bEcfj99Z99RNjvXhSrVfozzNKIxE2fnGDt1+U8p+vPo0bfU07soMvKyQmwYufKGsRERTyq9UeiJlTcIO/3sEHMkdrOG7ligSSQUrYZuO1X7zPg/fmOXYpmBnTk6qva8gyQj/kguWT+vjWbhG95sIniMPaGNLLZqrGNSn33r6Jf1yacN+7aZo8i3EW6Q5PZ6X7Yi/74NHHMHg6hffpyY9WK61lmwfqJMROKQkD4dR7TmzMoa68lkWh0/8GsDi64/JeHvJuqVPh7Pq2yAWZ2b2etgPuqSuFmwn5UXQX+G3/TbFkFn5z6HPXRKZNYgZ0Y3RueqFFbW5vXbOanH33YW0GnPaMt9Ug3PZr/0Be8ICjSxQ9AjY33gCRE5LzBPzrtEPcLZj5fhbqSnIsUsTR6VLEqLZsq4I1V6WsndC3hJHJ5D/7Zz6dEt7+8k4zbvqzUh0qFdawUj5SbKSm+f6MiLfgdRdJvPAwdntHgSb3WFx1mYcTJjeHqD0d7z//XrWGXcVdEjW2dfAHJkC8mbJ8sdYrcqOBz7EM5Z2ROidClckkZvMkCSSPal6eGxcdnYwIm89TRmZTSvWGpRnex31GsjTTh2c2p4LLKLrbq64HG/JnHw+TvrG3tnWuDuMsjj3Sj6ulLvu9/JIv/4LHJA7OxjtLaivNh8ivrB9KfKeDA5Hv9dIbfVuj2LWbe/zKFibe06ohD1vbMH6pK4Wck/Lr+y7D9u9O9cgX0HPYpmZlFPj9tRzsiPN6wjI/+ye0DiGMG/9ka8VZp5PW8d+mMzpeTRfwsdIhUWKe/qREbYGRlHEj72hnOxywh6l7C3++0i6zey472+C4swS5GO0pYzkjVL8rrjHnvlP/743vu115zj/BZyXqW/X3Nn8jw6S43vHF1AbCvH2owsOg4gv1ZUxzJm2l4tWx1XuS1Ds0dXKmLUMa58B1jEhxFX3HnRKPTrpC9b9deM32shdyRn126PxCgirhmhRcO7My4zvDGibnUdvx/1WF2MTDIl7BJZdAhEeEayyyYA6kjlXOkSX9OHyHGDz30fmQMqwm92cnfkjfjOjHmmPx2iy6LUu4ncTJ87ZdGeyO5kwLF05POyUQXZEVgXI4PdtSmKqPvMpQ4pR7vrp2WJDpRqDJ/oL9EBpbh3Jt6+Mt1psa/Fv3lNLIKORnsnvbUbyc1S6F+iq+eEtHde2gAj4vrz3Dhv667Vdco7W++RNNDvzDb0hhHv4zV/qdSwR2Djsmgcfr5t9tNtWWo6tWvI7DPHC2YgRO+jc2aM76yXOV+eprk3xBAWYRfEfQtJjzqNn1p753l06wM6WLxMK/yfOFpY9s6T+qq+PnnOUt/b6e2zxme3vI/sMpJm8z0imGOxOqN4nqBdilGc/7b3I7LXIdZdEpQZ3UjyrF9GBu2/R1s2XiyTZQIcbZuBanUc79u6Ho2hOzbs/4yjYUapkQB7Odu/Mxx8WzNjSzdjSIX3To+MFBzPDgfmP8kXC45+Hs+YTntdQD1n+sowmsF8pWyUQr5S1853IsdC9bsng74/nuTO9rO7RmZOF6/ruJZhPw89O3SKEVl2JAYJvLcBKzI8i8XT8qxvUUbE07bwfeY8cWVE0HcDntcngv5ZvH/ZGfRrn3ES6BjDnTK+7ojovZBicu70ikQc0V+LTLFF9NxkmTKN9o/Iuu37/ub2s640ip4YHiyydo3dbqZ3ix3e/rw7Sn6z68hZdMwuGLBFkfXjYcNLyqKrMzryDvXHiPnRhifnP3Gz+8o4o4vj/I3u/ux69d30mYg66+/OSHoHj+goxaf1KzuHPuw4FzVnzrbOWFtlMkKF5AONeh/l3RGNw754Un6ux3RMuH5XA4/GfC20UAFzTFTksUOoZxwCRuCta564e4dANXY6CYMz+RW5yJ5X5AZly+RbYbwy1rFwAwk6+mL9tTYzK5L1y/Y1Nq7bJko6zerLHChPx80itguZbqvdmHovciTgEQSTK6u8YXPcXot0syMTv2YiMRwL+8J9DpHzAcfKnBEPsxmnZOULV1la7DnLjniHXsLaJIK+LOWlF0XQl2Bbf8lfEscMXZauvt7av9+sovRjPTzT2um55SD6wmyLyN7w59SHjeHJqTM6orT7Cgd20zMa7Hh2FevcSdoj8uzH3smWoHbiOXMrBwz2oXuEosL6yfNPfGrtSf9YyruRbyPnVr//vSLoN9uzuEwQy+L83HkmnGVcIH4RWX+Cc/ZudQmcn9e3OVuRnRuwxYVVTwd3GExIzLLzujNGaUZugrV6DAcjsswCmMHwmgjnPxIH7tV+ZnVEDgGMjh/teAOfpbgambQosNtjUtGGG1iRwtuxpjypjSLKL5OPtBvJGB0kXZJTyZw5hFAHvfOjwpylVDP99DLDsTBn0NM5i+9n0eij7LdFX48+MaeCjQuJ6SwhTxftIMOH6bP/LdNR9iwirF4WON5s/IYZ9pNhsxOvrq5m442I+pv6KYLeFdqecp0tZU9LqmUgwCLonmSxNNNZ6KJzydhOh9xFbQ+i1/TYURLvCKbf5yviYYb7i3OjiLSPvd8t4LO3va/IIMM7i3x3I5TRMYfb3ncagRWuAx9370C3D7O4jL3w1BsfSbeo+yfJO4uQV+PJPsdm7z5Jg8+OSWDqeyZT5pDrHJsY9jBkdTxZJyo8R3vNLzVgWYysf8Wn2Jhh6ImiNwZxzfJp20jAGJCZd7QT2UIjeQDckRhc3mWvRG1eEwMukptpz8oiqTUMWAor4smG1iWwfoxRH24b2flCJ5Lo+9UlyogdOkbGgu7wruqN+tB5L7MDjLR7wo5ywDayNhnGWN+sTJsqfysWRatX6nrXOywtGtO/rW3/e5Q23rT36HC8TJm8TV+jda6L0axDpTq28WTM3T77cjPRdN83JtcdJB1kJYK+ItT1d7rb8XoLevOGQJTizshcRNZ3kKfIgKdtukl6vXf+dqvHaVO2545nsImOVzH93f/d0KOIvGdkfDR7LnQrt7pn3aqi12NPyrIWGmOm+1mSNv+uDI1uV7PPrv3kDe9R1DxKZ7/sdXdxHIug7yTrnSyYrhxebGQ315CQM8L+6XT7alx4f8QlHzSwGImsKr8qm4y4szRKNESNwFhEuGsQdojTuabehteJoEdGMr77okTuh6wdRiYjGWROCHyHRQetjE99ZRh326k2Nt+nijR39c7rn/2bkVDmOJhtg8kUMxVMV83xNKtTle5GBA7nDpI+jw3D7CkWjPD6OncQoqd9ZHMC+3j8zRxaT9vuyNXL0MojC1nNjGBZNH7+s7PphgWO/VtlmaXh+2fRuB7KWAT9IYCTr4ugTwL2tDgSdGoLOak8IeOYlnq0NUXMvb1l0VW3qKbp4FlEGzOhCBHHNPfVtPdrn3YkfOBASPm1v58LOTP6u1kDkVzb0ch//fr1+3kr/tjTXHQ7i7L6diP5Y9+eYvt0TmBE/Wl9u9+Pvo8+9Ai+lc4I+SxJZ+nk7NhJJbeOnlTR8my9eLI27ZaRn9Njvpzn0pfT36MOdoxQJErMSPT1I3k0AmRGFhK9qg/XohekRr8sACRy/iQKGRncEaadtrpjNsxY9Bxx7LRbKWpE7P17s+1ETgCPa+bkmG2vGiM+j4gx/r5CtDI5M0JXOXt2Y8FIYOVU+zayF42hOn4zqyfUCCqcnDsZSUTYcb1djaK/S66dzIcoE2KHjJI6RNDfDDBUv3M6fLbnf9LWGEHvpCpf5HEiDTky0KMzpyyFNiUBmaf77PBLEffDbW89NZFF70ZVzY0Wv4kcfS+ZnWHF37zR3z2b/tvxSTk3q6pUY0bGmKwrdY+iq1FmRodcdcpU/fKp6/aptSqd/c9ws7uPrA/1/OcfZH3lf1VaOx49GHoZZJc8lVmH1Fv7Nw6Cn2VcAWLynd0OtHCOz5BDHENmbGEE0qLp1wLwIOXc1iDvLKjWayRUnTW3i01E6thYs3YNM5+Ga79ZXZZOjYQWI8G+fJTt0NHJKBLYeXdMpsYN5xVpRzmztit5Mp1h9fhy9m/8jcnA6vJjqfoUYcgs19W6KjmxtGOWrYFE/V0Erurv8bybKu3Jqq+3cjp0+uB1O3LemG1nZdnfuEZUBDZK18fxYcTZnu8aexejrFzmZECHStX/Dfoogr5DqP06RND7WG0p6b+DjhVmqaTX3tZI+86iYtGziiS8DN5udrdvn9vCei7EN+KJCyxBciji+e7YZ22cflNvSiC6YGo04W53z2587hDyTplIxoxgUTJ9Gu2DeKEBDwsuOlh82/7ZJY7A2cOitQz6p2QwS3dvivojxbII+tApIOZI1p9E1TsOno+AEJxNZ3r1sf5MZMGszNXH42BGaZZaaoYlktAqPZutkVH0EtOR3bp7nT+vopIRMEiIfb88earqr4hW5RTwhBnHywil7V2GM/a1YyVFbfp90eNWYZBhHJHxCrdMoStMb5uJcyh43URs/b5veoZ9iPqcOT264+yWW5noTxw6K+3teMcT28jpYO1kqdQ7+uLXHa8bs/OCrXOZQ6XqO8PoGwm7jcP3bQMBr+ARQa8Q2vu8s/XsbfFvXluW4u4j2wgTi25f+18SvcI6WdrzZUfBOdSDQB0kLCNi45k3bMyQN74dGDtj/4XF9eY8ODt1rdcTmsouncq+cc7SYdGg323gR2Q6iowOO4/J2S3KnegnOmhe7KUTcMyy+OS0rSLsn+zLNTfOVHb8ezVqHtrfi7e7+zm8C59oPWJrCtOjT5P37NK4zvzfgtuxFh5zyBYuZvAZAfdro0/JjshMFpVEg5f9jYZwFIXE9isSxYCLImbMAJ8hxNZnxMv3IXIUMALeJSIVgUVC+YQcdt9lGL8YDolWV7hnUViGh+n10SSShaytqK6x6Z39N5l65wTq+ISNsGWuH5Xg/LaKP0CWlsYQEdDs/HJ3jix1iMgXnV3ROlXJO9JfRmpZen807m+RbeVwMf1clQuZlyLoq2CuvVep+FqteitEoLrF/WV/BQlFZNmI12pUk6VaY0S3JVbcSF3/2R7bIYwvZPHc7GfHGt0WzSLuwzYgZ9FbGEwWYkQIiXp13jhqErHDdGnm+Flta3LYL8Wr76c/rX/2fXZx3I0HwAVxWaQ8SoHvOFWGHQrEPZKblZ0d62z5yPH3jvazjBjrd2du4/GX2TFPl/dEHImFrwxJvV/z/aK5sltHRHkscC69mhnFEVFkvzOCOpQhOQdfEUTDqEtYXzZP0nYVObxN8MlLAW28vt8egyeyRBzZ3yZT1iaT97RCuxewfSQLKDNPavBZJd/u2P14qjqfjJ29W0XUv4HURenSuBYdf2dnnD85ll1k3cY4Q9oNh24G0ztxydL6j376Ptrf2J8NjhYR9N0LR17fypb/2R7+xVqrLonLDPGxx7oIJxLUacIaROsicmjtM9I3bALTJjQK0dA6N89bsfMPtnff6m7qQyfN/cWec55VH1Uf7W9Oc4owvNmHQUYDK/MyluBW7ixCz6B9qmNNcY1i/rK4m82wGfuZPrGyEXH3F8bhGXWK7YNz65medOdL1zng62N3RDBH3uxa9FQm9n73CItv71OOuNsYfbRxLKwQLbS11EeKjch3wIoI801xgooycnM88/1gBHwoDIzHR0LZv/070f5xCZl8b9kwZAa41YfriI0zI4/WZsf4jpwRESFFB4Vh0JFvhBfK1zth8J2jv5aVUbXpnUh+nB5vb01au+iUwCwQ0/ujnm5/IqcT09tPE/WxkX3p99FRxhHxNHJuY6l0Y9fzbC2xNiqnXpb1MZM9gBhE87+zLuzCh8kPMx98mchptNrn4zjrf7Y/xPmuUf+t6hVB/7C4K4J+2SAJeR62iCPqq0OInAFYdyuSbmfS0YiERXe0iR0mm+gtPdY9z8bNomhGFDpRuA6OT4h6lDLM2mWZBRjZniFYTK9YGnsk63cTLoyef/J76Jncqyj6sHnJ5XA+Yv7kArm0b+CEYVH1l6k2cRymMx/G+M9d5KcyLy7dhu+p4+cVIyK+RNAjYzIVmCMhFbgsdTYzrKJnUfQRyZQnbxegpJNPCA9Gw3ybSOTYHmHlff+yzAQrb8TP3kMHw9hQz4celwPTY27bs2jsjJiyfrFylR5Y3yLnt2/HY4hYRWPE9iO99mPv6j7aAubcsb4gnpk1mrWJehXhzGRs45/V6ywTI4s+e7xXiVJHZ3aWYSnhK/V3ZBitPZnssr5khN2vB15m357azvp9/Mai6IjNQ51TBH1F8dffEUFfx27pTSPoEbnKSBeLfq5GOJEAYmTMDy5qd9gAToOuvhQL8W0/te+AO/uI2jbO+Lj20qb2sqjai11yLm54Hh2/jT7G7C6aW1KC4CWPM5KdMDU9WXAjh0CUnsycAr6r7ybpY4/5x69fdtu7b/ubCLwRcnaT+9CPxqfXnuhN51jCDgdet4+R3rxDX6JU9tt65Yh69DlF+hm26PNsQ6gL6c4RgIxI+ci0EUofAfEGKjsv+bKguR8isoiRbIxMYp0dEhM5BBiG2J6P9kZru4/MYv+9ce/HbIarRWvRGRDhbeUqozYb800xixnldSArGukPjr+5P5bzvNJ9FkX3mHq9ibDMdKurJx39PAbry3XfKUGCAh2yNFvnzvJZNHlsxJDmjk6Hak6s9pXNJZMZzqUdsovGiRjcjJHVwW16L0pnt+qjyPmG5kXQN4A4UcWuJXyiyb930W4EfdgzQH7tt47xvUrcrz0ebov3hBH75iV6lLPL5fD3YzxXBN0trugAj+ysAQeJGlaRu8751FG1I+mopWjoI3F/ElmPZkRE2I2sRunqx+8Hyb1lIZBGMofPO8gVG2dEyMf+CCmp3/j5NR9hR+J+6fHi59cYXizrhR17eTr/b7YQyeaJMjz8GtWJ6L9rN4g+t8ica7svgAzHFKUJvyw25w9GcmyBZIbXDOGJiBYuwOzvrqAK5+wtUv2UKCEuUR8xlZeldTOsj/qM1GN6PNukOvhanf59+83jzsbCCElFXvEd5gSpiA4bF2vX66c/muHHjHMgs0A7zp6oDNZbjbGr351yLPvFv/cuctvpG92E3aV+ndTunf1HZ1mmn0yGuIacNuJtmFUUvXo+jBEAbicGq3LD99j8w36y7ICJsYig7xJWrx4R9PX9LUwAACAASURBVB5O20r9j//27wzvVVIXEa8Oca8GwiL4jBSMPdei3yRt9nrn3EBHWducQevYGk1tVv/ptTdqbnQbdIXdzucVEbvwt6jLKQ90jkTRVt/XLHLvy32CtGeEfeyT50bpv6m+E/eVuqo0eHY2fdgR7mb41dvgWZYEppyvjKn7DsvEYe1/QncGppDmbr/d9Pg0QtEht7oet7CKvJBmUGKUm0VJGFn0Z3pZBNYvrt549e0xYsjIc0VyMkJlIGU4IBa4MSDQzJj3pN3wygRkRu3xnrUXpbhaPRUOLYUg5/Sx/tV2mMwx2yBzwmS4RnL0bWLGAmLsHSRu/3q5+T3CsUPcfT8jvbktCk7+XflF5ZDwRc6dp+3sfp8RvKONaj7M9GNm/rN6K93uyLrT34i0R9HpnRh1+letaV5u9u/jv5GMfX1ZVuZ/6Qz6U/HMvP9GmjPTjb9P2dlb3BEZRqaOMlUUuYsw1h/ukdX32COve7EpMrvB2xZjrD674PgMHGQbHGWGof7PPzbdLC02i5q/YJ+kzi6dYyW3c4++F1kCl+1RzF7mbKF7XiLLTxEr7Jf/1JpFzj8dQa+Idzg3XIp79E303efSI6IcHo3oLgiNcpWTwHS6UdW2Itn58yxivjWazqKML4ruDGBPwH0E0s9zK+MJZaiIzbT8jKztkAjbC65FjNwmz9rsktWoreh3jK5b2x5/24BmiVbm+KjGkz2PnkXkB/vBCPgTzL3h7+thJMfrrd/YvaPJ6mAOJ19/x8bwdX3K2s30ZCJaeQ115Z2Vecvk9cZ06bSLuOb59YLZkGgkrozf3sExY3r/Uc4TctN///uT9lffRfKdjWd2LTvrUgR9VThr731qyVrr3V/wrYugFxt0FkFFWDBV2Rvl3XTnJ1C/pEonXtIrBd5vnMe/DyLtOoEBnuPRtQa7giupvJ1zrKNLQMg9Ce8Y8p0yq7hnUVLEpEvUb7bPifGOrIxojFW0HN/z5X/6EjmWzs4IPUbJ2bl1XxeeX5/Rj5VMl5n6O2Uxuye7S6FT3zvKMKdcdoRlqQ8ZKZ2pEHdoJIvMeMffVvrCopQz/Y7KotPCL+wvG1uTvLO2sjH7iK4nq+c+9BIjQvLI9u6KNFvdzNvsn0VkegV7H21kzgKss3IazPSBydlkbZl0Nm6rl8msIqdZnysCHxkZT61idqTCxhg5hOx5Nd4ZGTwpG5H1o05GWFfaqtYlr7/R/Flp98WwgFv3mayO3xip3YXFjnGwcZm8Oo6Whu6JoL9DUHGdT5eiz/b2L9DazBn00MYpbm8ea9miZKMIOkbJoijvS9toJNgmXRkMZOMdVfk0dxdN70R6Z4i5YY+kfHSBLNQYQd9BzrOoaCjjYpGNyHpbni5b4yen408T9GzsnbPo3Qg6K5cR8WzN8M8688WXrxyGqKsZPrNt79IzP29n5udM2aW+RoYqGvN+TYzmOfvdRyKjttCpurpurwAQkVIW6fUYZLj5s7Q3RSafs4uMbJ/REI2LEUQkFvZuRBjRSYDlq708IzqZQ4Q5f6q2orFkZBjl6J0UppsoL3bm19+oz+TBbApGwld0dNc7VRr5rnZW64lSu62+DtFbbTvdVM+Hs04kdIhZ/62e7DiCXxfw38zR8lNkvZKZl539u0HG6RRTivs7tDuss7scf7RTf+XGZgh6RZp2RqeqKOsssUsdBKfWXYZvN+UOFONq40xzZ6SVkYEq5d3IdrpfnAv02433oBMe31XCw2QaZWOwNlbbXZ3f7Pw5pr9/Og3+slfdeXIcX3Xr+9Db8yK5LnF/aSP47j2bE/7dXTKcWR+s/V1tv2BBzqFfcoJ5629zH1iRLzS8bY5HRC6aIEhAGImu3vXPZ9sfALkKZo1lbNuTp0tAi1HzrC9R6ucxluP/FiFHR0bXmD3eP+avP1vdGWslqxmsmYOFpf16nBb3XdrtiKD7fnmcTZcqR321WWROD9Qpr79PdLfqE3vuSVRFchfJ03S3usQOK66yAKY70nyBzQfm3EJWszpONm521vxT8mrCNIqhvrG1jI2laEMR9BkhPC8rgv4cw6kaSoIebByMON1sAHfTMiP2U52cKJylWr9U49LYLXX6MvjAcMBU+DDw09RgRspnz+eylPe3XixFzqNfNkdAyF6OGwTn3FE2SPjZc0x3fxfBGvvL+bk1lgbvo+fZZXGfJOuY3o6XvmFq+zFGI+MRKfe/R5ktbKpm0W6mHxPTvVW0ysKxSryDcdjOzbnc6oQrxC6Di5xwKUHPIpWznarKIxa+bW+URoZYVf/LBHc/ZMT5WoAWiTRV2PNHJJSMYN42vckz9lHbUQTbiAjbk1cJXriRkc6tthHJNiLkjLRfk3TCKYPReoxemwPE6vYODSTyYxNwZ307+syyBfx7iCfKPVp/nsohIrQzWTCd8T8pEzmxrM6I5M7KKOsj058sM2NsomeFTHaZ3PBZNT6GQ5Tyzn5/Ipun71bOoQkHgwj6U2HMvf8mk2iuE3+n0gdBP4zDfxwRtyPye3wOqzGhWQrpRXJtjfqQNBmZy4zrW6T/GGvkxT/GkYzh2sPhs083Jzx4WUdTG3GZjbB15TuGTj5n1Z0b2Rg7upPum4h38Am+bl93lfumM+kpfi46buUqQl9hVEWsvT51nWhPHC6+Dd/3yFm4M/unwoo97xx3YXM9/R76CoH3xpOtU4wg4yCy1Ewsy4hLp41LWYEIY7TWl+sKIyOqSOx8nZHR/ZRE3ZT2/MP6YVgffca9pNsujpf9jdh160b8PWmJ/m3vZKSdYZLJ1+OE5Bf13I/twAJJgv+7wgH1MZuHN2MhGEzVXlfHrVxEkCaI0WyTU+WrCPMMeZ1qmBTurgtjgyMOuoyoRw6abp+ZMzSKQmey9c9260BHVp5vZP33+nv+WwS9qyx7ym2kLns69FevBSPonqzfiGsARGaYH6/4KOc7L/i6bIJTg6Jo9IvRn3m5D4eF/2RboJ24x6Kt6VPfO7e4d1Lax34AqbN4sdTAv+lwmdXziACNfpFb2CnZSjaDKEMjisZWTo8nZK/CJvvU2jd/fq26MO7FPv/nv1PfK0yq50jS3+3cqwi76a2tWV0nQjXOG6dw6ersjgib0/YOWwfQedr+WkOXbEdkF417H81FUsUIzgxQ3tit+t0hOEOopwG94rTIjPSXSdL4PFanPovu2hp5/O1/I8Zq+7NgTBbZPmj44XtPrDUvV/z3ywYKTvRZXTJ9Mr3svs8w8WPukhlG2Ff0Jup3h8D7qDnTneM3Np7uGLuYvqscBpWe9HtmjfD6wKLnUUS9KzNPWA/sIkdodCb9XXg/rZdlcURjTbIiRNCfCmLu/SdL/lxLKj0QKFPcJyKpldFtkFdkatgD5FvmlchYKiuL1qb1HOSSkdpo8XUaS20c0Gh0WIzHpEwHo/Gq25hWyXj3vd8Oh0UyQ1l0spO2j+SJntMnUfMXG6ehMyt6Vend2DchBR4vjdv5abbsc2vRs+pGdz9Gdv68Ootuz7tZF4wwM8dOB/usDOtPFEW3et6lI52xMKebJ+o0it6pmJWZMUQ7bXgiguuEJ5hYF5JwZrxiX5lhjGtpxwjujKtThjkKIuP82gjdOfFMFpkxa7ge789aT1mbOB7MInga/UOZRxijnKP3orGzMUbE27D0emT1Wvo702v7rZpP2K7HkGUWWD/QAfZUrzFiGWG/M128M4dWymSZO+9yOGQ6NTOnhqG7MG+zqDTDkGWDDKNlBfBN71RZEtYMi64fz06HxG//fXrV2zSAv2c1s1vM3xOljaP2BL1L1LrNR9HOyz45pf3EIO5E8D3ZZYQxbJ8YXeMnsqi+2I/+dnen1WZgr465kwo79nW4XMrLdrecvT6wyPcq8UK5ZXqDKcqZjq5iz+rEM+kszf2TZ8/bc9NdIhfd8j70KPmGetVWRtarZ1XdXhcw+j76ndyB4Z+zcva824eZct35e43vNFBw/vrn2+ezX/eiaOZt0rvUTjTqkdilE9MZq4wIsXcz0jMjmKxsZHRX5NE/r8gbts/KMzISEcdq7Kv98QQ5Gv+lnM0z+Wzs9lsVTZ8ZR1W2ItDHcyvjMzIqrKO5MhYa8vIsaZstn/X3J0lbB8doDmCGwKfGwZw96JhblU/1XoaFj6h3cP2mMiwbwvoHzxRB/6zgRNA/i/cfEfRgIbgZfgsecxa9nklz7xIpFjl/2fMTg/0gVczIH3UQkj4roqHU8Dk2vzF3x1m1u/3byVWDwfNuJkM32hp1I0t370TuF4e39Fr0GbZ3knd2rtxfBHfZ0eRMOj47/sYoehVVv9mlyb0BnfT2zhzp6lMUQUedGdOWHNdYUoA3vfQSUc+iO2/qw0u1hxFlRurxX29U+X2kIkxVf1+8osFFcZWhO9MPJKXXREk6W7V/mygBqcU+GsbH7xghq9qLcGNDQGdN5+9wwYZLtJB8eywZybH9uNKL7nMbC2YoWCTdMEYy7nXbSHvWpndqzPaN6dsGm+TWjZVoZncc7ywXEVRrk2We7OhPtF6gXDLnZDVHx4abRNezKPqfgZxnOuefFY4XEfQdCt2vQwS9j9WWkp0Ud2zoiSHsjfEojbtjjKf7IblRvJsyPtZFcu78JUp1Lp4vto77YRTBSDou2p2F2i/W3fIOoCyaHuG4PSpHLsfrnkuviPiw286Vo4qkv5u4s4g6YvxOUv5kUWCRdB9BH2rozqHPEPTQZg8uIsT5urImROnt1peX4ybgxPN9Xmn/iSz8u37++s+wsTsndrV5q6cySCNjy8iLGYy2u3d3eSSDRtAqYpcRmIX1c2AROT5sbTbAZsnTjHPAEw88r+kxRVLXxTvdVMkN1UiiV5QvI/y3CXj+wcYyK9MID69XRgyQjCNx8vJDZ9RtEpOLDcPN12/eK6AuvIOkaOGTV4/uQOh2uUvsjvp2RtG78zRbJ66NZyKtnel2B4OdY+/KZqWcz7jKdC5wOoigr4C+/s6OrWS99b/hm//jv/36nV081LnJfRYuFrlCQrXDEGZp1sPGctpVEbmxDxtRz7QyMA5CmxYjcuT92TTY1K764EKdyffam+Cc+Iq8o3a8jKOo7Ep7M3ruL4yLyPqnL46rzqVnZ9qjseNn22YwurhMMB+xrhnnWqcfUYaHn/NRps879Yc50i6sgm+p46cWb5zmuEvjyI6ICO1V+fmPqpwv79ctew+NLVsEowg6ExZbT1+8oCS6FEVcsc9jkWic/fRtRiQS60JMTL9XiWzmoPDPjn+zC5aO/mWXZXVJB5PTOyw1Nt6u/CKSHhEmK8/0hpFV1Bkj48d/fdteFr4Nhlel19GY0Mk/Fq4J0ofyxEizkSEr5+d1Z4H9xjKRA+JpX9na4OXBZBXJq9IX1leMMKPMjr9nbcAnF+w9wbPjeIDxiKA/AXz+3Xcs+/O9+Bu9YQQdLyIaa4hdxHBO8CuqurgZYJTTDOJh5xBj3YuhE7XvnmvtGNkvZdBgc4vstUYHabxmx1maux9vx1GA6lgReBZx83WwKJw9f0fk3MbbHWtHPpfdBtkSlR7N1L1rGWCkHb+d7i+Z29XurnqefoKtM49Rbi86H0S3Z+Tp1x/USVuLsIzXs114duuJLoyr5ret3Tcn6xMy1u0wK2frOiMu16IDpDkiulH9aNiuGLoZOeyM31suEfm7LcLnH2jxVHtrJEczbr1TgKWKdsZSlamIZfR+pYO+71Eb14Qsvjl9W3TIp1RfFpigjPWDOZlmzv9n44l0j+lUJZt3PWck/aeInB8jOgXtWeRUYJ8U2zGOSr5jUQ4ycVCncR7gOtmVMTsCYO92Lo7bgUu3r0xu3lEUHGfQJXGzAD8rL4L+DL/pt+076MeL0Te1/bPx70NKC5Jiqcpj3YLITXRGdGZwLEpmfU/PvGab5dnPaxxn2fG32VsupT2109iCPjNAVxajaN6x0v4M02Tb1Y3uHutKnkjcj/JHlNnIUpTizuTZieJPDnWqOEbNs5ejc+lTDT4sHN3uPublP/9defRJtiEDd4Z9NrI+43jDzBg/9Iiod+r39XTWjScR/ZlshcoRd9l1LrrO7qGw9ftFVSrChC9kEY4biG5/MBJjiyHbN8wQ9GXsvdH5JAsgcZzeDOLI6O1iELVzCSGYiFH0vCLiDHuL1h5ysH9j+xjNXV0fupgz+XinjI0/G+9sWzimWSzx/U77fkxjcXSEq0uofDnEjT2zdvCZl/mMM2tGF5Dg/gRZm+lvVRazBKrys8+93Wjvgl172cwza4LJl2UApMbF+bBzVIE5LWbH/67ymZPh2Br+a4WJvKuzf/16F2jfXx+Ud47QR9BfiBAYflnklfVxNaLNjO3ubxFWFUl82fNdKjZG927pr7Awjz+DBTjCY9S/uNEyI776HnoVJa+ez+hj5JS59rAg5T1KMe62jdkaM5HWbhsr5SIC/2my3iGK2afZZon4i01Mzp6z+ZH99oQoXzZukvXiy3h9Zb+v6MILJkEae1Y3c86Fx5OQSKABuWUQQKaRTGK6ZWT4szU0iox3nJ0zUfWKtHejZQeeEXl7gnU2Xv/sGLPhv8uyyhzY1ZjQecA82IzUVL/5sSFZx78rMn48ZynennRZfzy22M7sxX2oKx7LiPztkmklN3v+royMbvvdclHKPnMwzqZ/d/oQ6djutYA5piInakR0IwIfHZnpjL9TpuvsjWRm2b36zFoH7W1lPr3kbOv4n7Wig6CPveHcbAaRwZT2Nw4uSm1lxnc3RRoNaLwMaoz31DRP3CInwItBDgaBRdBf1mW3gI5XXAFvc1zPmjhHkbXqG8rXOJJPsDW7UBaLIpEvpOQkSEZcoyjpTCS0Im4o5+rvcrBQICPhdv78eAVT32fbmS3fIeVDTYNPsHWi6LN9ysqjLjx10nX7VulupV/ddnA+Vu954t39NvpOZ9vo37FYeRJTGaPHO55sG2m0362uylCuSPPLwuJ+YI6IzNKIIlyXwIpz/Vg3M6QZcTzq95kDTCG8wZo5Clg5hvE7IqNs/Ihdx9JjzgBGVj1OESF/GmX3/bd/e6KOsora8ySt0qeK0O0aU7Xw+OfVPJ2p691lPVHHtrJxPL0FPVsTI6dUJOuOjDtlhsFxgpBFzN+xHjyVM8seOMeiCPpTcOfe7yzbczWqdIpAluI+jDuMMAG5u/aqoyxZ9KL0ZE+QWQfRCN4dAZ2NqF/GKTJrND5PDWZrdOq8DzQ/iyS/pIY72bA7BTpTYbtBHzTKHDPMaZL12etWpWeDD0C0voPHO8r48+afvtE9I9mrY8Wb3lfrmXnvKUmuSPhlOxNH3o0PfEinOunuSOCXL/qcJcN0ASck1huhWSS9G33MCCojct0I/IwiMpLFiOVRDvu0ijOLELK6fRTMsPf7jL3TNfArXH7Ceot0oNMXRpb9GCMHwW0BcFkK+K79bXJYlTfTnbGhNS88rOQ2+/xbIumdKGyUGv4TjobMubRrDh6yjDII2DPUUa8L30jWQVd1Bn128j4r31lWn7Wgt28I+Aj6dV75kAIuJmQB2Xm+mUVOZyPmlWgzozwy+DHCPvZKTBssIi435yga/L+77Hb3DAnC2I8fkIEoFTaT4U6yHqW6+/sAMtI1E0G/2Uk/sKJk59D9M3YxnCfsnybv5fyByLqdUcd0d/b5te4n2dBxV+nNU6IezbMxz+FiOszE2dH25dxYSG+nvJicR6/kOp5XZKVVSVLIDGXbV1h0yxvNfr+xqDuLhFf98qSoQ7iQZB1tdoxntl96XH29WX2dttiYDV/bm9Bx7I3zCrPO84hsRiQkcGR3mrqVuW2mTdl0GjGbx9+ZwHTBZIp7Pv7d3XdQJzu4VsS8ygDp4BGVmcnC+AaCFxF0G58fT9Rf9juTE1tfUIeGIXf+GK0ZXsei9cvqMT3LHBFPMwKe6Mvud8H5oAj6boDz+rrL2md79RduzQi6DTGL1LwQ0/Om95lITSe1nJHisWYtagcjd1EEHZ0CYfpztnAGi3BFMsfwcIzOYMui6Vnau8nWE+7ufQKfIOk4va5xmmHunRO42ZDNsxNN707pJ06RbhvfdKN7lgaPl8EhQfeXyg1VPi+Py3BAEjymTkHEsuwXJq9s3nWeYbZH5DToyvsd5aILPqO1eczr7BNsT6J9HePez1skpUaKj3pYWua1WQWp5tj3zBAu1txrKFZHRqAzA53tXRXRSidOcCs0tuP7hJfxYfuVc2BWJ1b269k2vC6sTqzuuCsCZs4R1M9M9lWfMyLIdNfX98QRVBHbbI7j7dvVGD/1PEp5z7J5sG8dp0Omw5EOoeMJbchVjNABYfV4hx6eQ/8TEXpF0FcVY+29lSV9rSW9NRA4UtwPjx4zii+jz24mJ+ntRuCG0VqdnyOYY8Rs7Dnk4iZ7deflYb47EVFgEb3yVuGrs+c/zkX5ZugbF298F33UUhkRwcYcfSfZE/SBuVvId5JyhnEnMmlEixKoYpNkBK66a2BA/CBDYXU5QXJ+1IMXxv1UJL06s56ltncj5gy3ypHl14gVp12n/kiebL2ysit9WdWb27yC6Dub89ec7hKgbrmZAfgo+hCiI9ieLPpyKxaBf4dFE2fWUr/2Vphgu5WjoFrXj/cX9tSX/alz9pRORCefLIrI8Db5sn1ph0xW9CLYI0sV9nKM0qqPMr4cys45m2/ZiZEzEsfn54fH1uvyriyFEpCzQJUFcxTrENpue7PlshT4mdT37hiq9QH7X5F1Wx9wLj1x7A0Dg8glOpceXSJnY+liMyu7qvype4qgV0Dtff502d3bm79BbRhBf1lDyE3uZiDPfOCgE6l6aRvJ61mgQ7aium6GLXxD+xoXtEPbA6PEX67HyHTlfL/ahoj5aAZmBY0SnguWP3seqS/7jnIUUWdkfSeBjzIqUBY2lohER/rFHC8Ml09dQDb2x3/88Rk5TIX3l8ZZuW9dgjpp7VHfV8h7l1S/iyRXUfOfcO7c1jKY/zNZTanD8V0KaGvaTHTRkxl8LyLD1n+/AJvh66NWts7OkvcKn8hZMBu9ftnQguwBJCXYvj+eZZkKRrRmxs4IJGJN9q5RZKYdVmcHcyS+Oy3LzPFiRByxxT5HGSSM5KGesvH7MjvHWmFtz7NMl24dnyqHBNVHjLML1J70D5036HDxc4WtDez5Sn8ipwU6LFbqfuc7Qb8VQX8n6K91/8TS8tkRfllr/pI4NPjwe9rD+D0ltJIuPTt0TC0da5S1f27A9vfxX//tbLqHEUJ+7f/ks0++PV+fT4O/lWGbJBgjpdPUzQB2Bn8HkXz6GbZZOWayMPzwLHpEeGYIOpK1KHXaR9yH/Qi6tWO8lx1TkPOjHJL3d36CrYqS49ijS+ay76nvxA/n67sIedVn5jBgqfBVPavPq6NIL2u3I/Bt8p55FbvRoqicN7iQPB9/RxfFGQHCyHLUDiPIL0qdfOYycwpE9ZgxzSLFTOArhHVGcdD4nhlT1g4jHQyTsai6ByhvfAfxqHQtIrAo+8i67OAfkfKj7+b08FHyiPRdCxjBBHFCPfLvWlmcozst6NkI9DeS9M4YGGHvZAd4ve1GkrP1KHKyVOtI9RwxYNkDLoPyWnvf5ayYWbtsfvljE34p0WfWZtF8VH7n8vKoI3+Xl7MIepSKfO0TwY3u9pxFWlkkCgmvN8LHPuRSjzOCasTqIDT27yyyxVKhs/Yq0ng9DwyQliPcGQLDboCLqi5sF0gk+wxbJCuMxEef3mOOmt+OIxONmYz4szlHxw+b4YxODZsHMjMiQv5TUdF3EvJ3rmtPouqV7KN+R3N4ZZyYzZGdhe9kBP2Y8wDI+M6MlylcGbHyv3mj0CKOvgFzCGM0Eo3hiDzhOowpwEiAcM3KiFtF6jJSyYhjVJ85Kxrr6S0TgkXSozq65KISfoZfRSKujchljGWkOCK6XqZIXpm8Pe6VI6Aaf1S/vef1vVMXlqn6N6O/K+1n77C0aV9+l451+p2Rcny/IqtRe9V4OrJi65HpkG+3Wms6mGQ6iHcGZMS8GvdMX6qymWPhfFcR9ArEvc8729DeFv/mtR0EnRGlGzEqoi+MpFWwotHYiUjdbLdAU6J60Nhm0XnW54zMsQj3UceN2BWbZsDl/8gCZOQc059cpytHRiWT6Lz6ba+Az+k9Mf4xG+KyuVbuIEg2joqQM9w65LxTpsL82jfPyPrxd5Xq/ukz6SxqHkXMLX3dXxjHLovrprlXOvLuqHVGxDPZ/hQ5T/sEDtVy7lZGZle56cLqzuz66OqYAGcEHY1KI6vMiE0HTiLkvg40lNmi3CGYUXTM48jIufU9Wdtvw7NylRPA+szI04zRb+3MvIPyeAd5ZA4YxHq2z7M6nzmBTMcyubL+RrqclWX9NswjDGaxqaLRR79nyN6T9WP13W40GUkqrkWr7Xdky+aOlxXKrZJjlNJva63JjTmQZgn5bPknOP7j1y+dQX8C4Py7IujzmD16YxB0M9yCNO/KEL0ikIseYhYFy6JXY987NeVJOnLkmDjq9/V2iNhLmWjjPjftm3PfLbAve2pyDv+yMYnRh/1JL45KbuNf/Z56VymrLA0v61HnuQEc47NMiRuJIhtERLIYucNsDiRakVOmO96snCfmf5YoekTe/Tg9Ge8Q8y4prspVJDnTi876g2uEHzM6hXbox2odUyntY/Fbbel8D8nCbbGDuv2CZ4bk8ZsnhZZCbATdytkt9BWpivpjC2gUyboW2ODcdJcg25AzEnWbMORrHiaXWQvJ2vQYMsLIfovOSd8UPblJ38oxcrGLNDJVxb3XY7fabqXDOGdMhz0GXt9YHzvTrqPrq7rSaZ+VYenRVu6ThG21/+mmfD7EcbxjXGj8RUSc/R6tVZ6c+wvf/JijFH88pnG8EzlP34F9o05F0BsgbSwyu/1sbPrvWVV1SdxtLz43Hf+99EFYSGRmrBdJ5L1Lmi7bJjg/PpvimkXOMcV17HOw8TLDmxJ4p8mpObjimgAAIABJREFUk/xM38eIeWYDlcTD4Y5azdLc8YK46NvoUcStjMQFU6uTCo96co2dbZi2gTSmMstOQDkykvaTxOsbSHt0Bn3Md/eddPt7zKF/9j651hDbyxcecH0Y7TrnXTVXsjY7DgCvIz+pG7f1whnM2ecUb8+yT651BNMtE0Ww/O/MCvDR4KMtZiD73/yiy0hZ5UTIjOUqYsUW7xfP61mIEbsxaeDb9B3LCMdkpNzqiyKgVrc5QLyDBPvty7xsLoVzB0kpZiV0yHPmbBmT33XKY9vBr6vDrBxidrTtdRbH6skPyhv/rkj5tQhOXsA3o8cdbDqR2mjudur/RBkktNYmOiG6tkYku65McS0x3TBd3y1DGxc7820Y/OTZdFjDRNA/MSn+3ca7l9HPjuZP0JoR9JAwwyd8rr3AGcHXb6dBYKT9Nvw3LCSR8c0Ic2Vsd0WFRjiNqDJGDobD1Z/fXr/OMox+9/s1TrfJL0VyAxmwCFtE0g2n7nfUu7i+2HpAsuh4i7PoXlcjsj32O3OSOIOuS7Y62RUMA7zBHcv4m96HTXPe+m7lPpXmHl0i57+JfrMhApJ+6c1J1neQdk/EcV3q6N2q7CK9qnTmaXvVmDBLBi+KGzbdbJYTMyRXjEs0NI+55iPmZnhG0ZwqwpuBM9vfjExHFsqsIZ6VZ2OJommVUpghf01Ad6mZke3M8LZ+MrI7oxvM4XFNJBhERtwRB0/68T0/ZnQOdJ5V2KLDw7fhscF+vcvKRbuj6v/q8yzV3erEdcZHb2fXoNV+Pn0vGsNMvbPrgp8Tfs1j85jJu+OUiqLgGDH364Ifc5YxMYyVc42ZwWmxrAj6InCLr71r6Vrszl//tf/5v/36vUrn9AbpQRw7UZkucl3iXJV7Eikbax8598yi59e+3iRzN2fF+b35ykj2tgzaMNdeH51Pdwt5Fi0/ikWR86tNyIDIboYezRaXBkY60Uk1xkyJm066ijM9waj57PGIdxOsy7Zx59GP36LPsXXn2E+UY+fOr7mzEFGv5r/N4aHX5yRhOtNdJ1h7kQ56XUSdYmnw3T48lZvPYGLzs5v50i2X9jcz6qNnFgE2Mo/GJ0vBzkgjkrSOMTsUyqXcIyGcIeys/ai/HsyOgyFygOO7SJSNpI+FBoxriwLj7x3FjMhihvkTJ4TfKH0b2Neu/NgYswwEJFNed7Eun9lg+3U3gJGV6ziW/PvdNjvyrspUpM6//y6Cl0X4r83XnaNHxxU6GVbT3nFuoL6yOVvJKnJOVXrsdTpbh1nU/F1yqnTJ23u6xX0CredFRdCfYzhVQzfFvROdYUbg6My5uAxD75DwpJQjQ5tFVT+ZcjptaPtxkwX1sh2Ys+BYDM+oOkvjGxBP4soUxTsPosv/thjsfpE9DfDIUYQpy54oh6S52DyYQ8bIHUZmV3B9N5nHCPvUpP9wYR9tj9LgZ7vEotWV/jD5rsg26ivWxRwFs+N8Z3l2NKlyHt5uCu8Qx+4AMqMU1zVvrK4aiRlxzUid289aQ0PSxMg+I2kzZDWTA3uGkTErE5Goihx0gEBibO+g06KL74zueRkY1tjnzhirMkxPvWyPf7OorP3elSPb5zOSxwhhROY7srQyVSSdRcp/Mj3aj63qe1QWCe0MXjM6W9WL86bSTRzP8TdLY4/KRc4KrOdT2RGnHBRBrxRl7/MNFGNvh/7qtXUJ+gwOKyR8pn5fNop0jX3epS5H6adVVOyyI07NZOeUq9RWq8Oi6bd1eoaoM8ORpGhfRGFi0fbGOkuNjeSzZOSvChveY4QoIlz+9yhy3iXV6ATaNJyXSPllB5GI+q4231HPk8+traa+d7Mw/LrwZOydCDs6eo72djoEqv6zb6Vn94JU9b31ORqv3hD2zzCq7jvViS4OBThfihymFTlGkr0KTEROh6KsVoqLJGQAXIsKwcGnuDInCOIWOUcyQlgNa2LPqqpKn686BlilmfPheIZECKPrqN9Zxxm2zC5gjqBdOrUKvI9gR7rz0wSe9bHT11VMbK5jBobVh2tU5pyJ5MvmVJZNgBiwsUWyXHWYLuIngr4I3OJrP72ELHb7z/vaCkG/pQq7M+rdz3SNNanwtLEIZ5Ry3iVWHeM8InJRqmorYo+b6mkk3nA8ouYkk7Lce4Nb3vG9LkZowLOz6Dsj6BGxehk3GedLBsW//vj++g4ShLLJdKdKle9iX60i2SVxnzqT/iIXOHN+2RXkLDp+eq1LxrvlokwbL7uOLLo6mdrRsJN12q3kv/t55JR7WTvg04rX8x0RoaMOT2JYnVaGGbGeHO02DjPi5UHK0kujSJePeEbt+Da6pDeSCZJAn65rumr/nUmXtT6uEuuIcGTExPQlshb9OCJ9ejKZOvgwmTIi7nFDDDv6HI2P6ZeRwdP+uLJhEK8n2FTvdkh6Vcenn2O0nWVBVJHjHWslMwZn5l80R7tp7kdb73ZWTMpWBH0SsIfFRdAfAjj7ekTQMyOVRWbG2n8uUjs+zZW2X3wOrhvRvtk/QZ1RenUUnfe/X2TFa3VksIHgrvX8XFSz9X1Un22yVkd04Z87O+5lZzJFku7Prvsy0Rn0WUI/Q5AuWR/n+wk5R9KGUc0XJ8mZdWGkbowPviCAOjE7556W/+nb3KOL47Jx2TvZ2fTs/RmSftksp5Hald8qia6cidF6tNpeinMwx3F9ZkeWqNP0XYZlRCCOjvoII5JGW+vsfUzXrgzliKRgvREhZqnEKJDIEEYs2d/M4O4QwmpRQRyRdCChZM89dmios4g76xPi6stkJB8xqDCO2kG9Gws9eMZZv1cdEF6vvCPkPLJGb+tnVrAfT9aXSG8j/Xgyrkrn2PPoGMVKXbvf6RJVnxFRpfHP9LFaH/z8i3S0KmPvVSn+2XPmsPihzAcR9BkFe15WBP05hlM1dCLoESHHhi4D77wMzZ4z4ta5BbxL1DDqnf3t+9ytfwpQIHS3d2EBHu2bbQBkwgg3TghmX4yL++AmcrTHLkwcWR+2CaTfYVQt+oTe2Ac6xvAseFA+Ilej7w6M3aSZ1VdFyh8ONXw9uvGdEfWfiqQPfTg+1XV+Vi0aTPSZNjynvoIli6C/rFEwod4h02hdyXR5Zbyr77B7Jt6dKZOtg+kzWzMxJfN4yUiOJ5edqGMFHJJVM3p3EOWs7YqwWz+sjg6xrMZqddq8MEzHRHZnpvGCrCjau+rQiRwx1g8ce2dcL5P//CGKWnfw7BDaSI4eT6uHXXS4MrZIR73Odvq+2vbMe2wuz7z/qbKMpO4k5N1xzDgLozUq0nnrQ0S6j+cRWe84R3esxwlOIuhdJdpTTgR9D47tWjoEPbUpDomdN7tbuRtx27wpMOO3axCPPeyhhrFo2bAhgk91+WcXjpmn9OxfZeegDXkZ/wuGDEt1ZTLvlGNnXGcj6Can6NKvF7srk2mQ9s4yIy79hXR6du+A16V3kLxsznnCbiTdiPlPEvQLvyTt3Y/LUt5Xo+rVIhetFXROVpUtPMdsjWj9eUckfaa7mVNuZe7OtH1bE4dgzl+YUchInBmQUaP+XLUv4+uq1mM0bi9FJ9+drvY71m5G6CJnQRfkyGCPNhj2uxnivi7vHOn2BfFnfYvwqyLmXecJ4m99yuRWyfS2qLlsNqavnpwe9SKBRn1mBCfrTzRHXjz2Z6exrpmxrsjdjw+dPqv1rb5XRZGretHREK01VT2zz5m9k82bsfEkjczKPHOwvJmQ4yhE0GeV51n5h/TpWeN/x7dXCXpIiiHFMoue3/CeXSTcyxnZGmvTG7QKU6Ovff7ccFkq9c0YPcd72UPee29R+EIhqa3nDTrnOHii21XELfr82oVJdIZ1sVMsUhrJuEN+rAzKlN07UOlTp73FYb+89mf6/JpPcffEnJF0S2efSWuPZGWgZfP13euD6UzmyPm0k+fF0HHHk7oXyX2MvFtnZ86vZtFQJKFWlkWqzLg1IoV/w3rbntt+T/J1e2Max4B9wMZm91A/XsMW++V/P55lqe3twZ8FI7wZxr7uiqAintciQDqIBDly3KANwRwZkdOD6ZAd4zBMvY535Gpy6PQDcT7qR6fTDOm7NvbFywxZtHZWd36yPEuF/0A24cuQMydbpkNs/nScFdERAPz9aPtDzgoR9M9OhDdQqc8O4M/W2ipBr8Y5jDzy3e93GnUsYuWN444hfhjKFpWMouKdyC6LtFPylhh4L1jZ+ejgm+3Z+GYIQPdIw8DWGfb2d3Z8IZP/0yMHfvwrRBnf9+TuZb8jXwiY1bVqDvnnUZo71vHT59MvzEgUHdPbh50YfBO9S869jDrzkpXvrAszsuqUTR14ZwUrOtxpG8tEDrjOpZ+t9jok4qioYyReAnTRxzHxgCxUkZyoT8ywtfoZqQHH6svFWxVAGTZoDXUIONZXGfFGELEcI+YmI4v8Wv8YcWfjrgi5f4dFxDukssI76xfuxZ32IplkZB1x9DqN+u11oNLpaOxMJ8biSwh297cZnKNUcXaWOxvj6vhn+nrbdINPkUWOwndmBFT6lNiRY0iRns6suRGOP3hkQQR9VbnX3hNBX8Nt+a0Zgn4z2Mi556oTV+TTeRufEnZ2rpMZtk+N3Si62hlzVca+b/4SBQxmw+iLfVP+rPyyZ8hld5hhkC7YpLPMUMeLAJkcI6Lelfno95mi7rvVIfJRxNTqQX3o1FnK8U3ZGlW7Wcp79e7M85XL4ag9fJ5VH3bDP/8osTvNPUpvn3FUzWBTlY2yPn6qP1l/o/n+iTsnRr/QALbOmhFq0UczPO0dTxwr0ogGa2UAVwL2fXxSV+dd2xdwDBWB90Y8ywjA5+b0MFx9qntlqVVkyo/htrg3Lm1D8o6YHc+9jqD++L+7csVyFdZsTPjbtRm5/kZOmadHCrD/mS6sYrLyHkaeK71ZaeMd7+D5a9/Gp6PpOJcYWcdsnBVMsswBlNs7nRWu7yLoK4Jcf6da9tdr1psUgRmCnhp1p+QwisWisSxic9U9s/GdL3XIVRZd7bzfUR9G4r1hfu3H7qbwYWMef/uUNxtXcETteMwMfv87K9ONFKJ8UrlDauzsDf5dso5ju9k6wS3rvoxlRgz9XDACWHYGyjZyAvlMjK4MKn3rRNS/JZr+Yhue0XVMe/ckHSPoT4k8OqlQJh0ZPXHyRdk9hg11olVKsPA8yo6pouX45YYxHytDtEM2Z8YQkQok9D6yey26TdI2BgbR+eo3ZiCPhb1xO/ilAOS75Ph+9PdtoSu+6JEu5u5iOItueiz8v72xbkTexuzH1GmPlWdjxXKdCDfDt2rP5O1l+LKIER3p6DLiiW1450MVFfXtdfe0rH2WtdAZU1RmNTr7gxHZcLhZFkCUsr+TpOKaNLO2MpmzgXYyHaL37Pcotb2rn5P6JoI+CdjD4iLoDwGcfd0I+qzxmZHaiJRnZMw/65C2qH0WOa2iVNXYVwg8ErE0vd0JLezL8QkxktXpI+fjSIEn787QyMZYjX9UQz7fhGdVUYb+PXYXwWUnnZ9Im9Xd1PYjpJ2Ns6NHVb8YuepgWtXbfW5k/Vtude9G2vHW9+omd0baVyPvmcOui3slY9StztrUcRR0+xfNW/t9cIPToML5nRF2uj7PGIzRABgBj4z8yvj3Dk8zDpnzN+p3NZ6IuFbGcFVvR7idiJnVM+vwjsbl++Wjhz6qbpHrzhiuxT9xTOAYVhwWma4xjDp4RWX875WTB/XXnBxWh79N32PViaQjsY+yJcYCcFbuLe/KsdTBaEYHIkdfRHDfRPZuXc7Wl+6zyoE5g1Fq7CTOwCzL5okcoyyno5+RwyIbw6JMRdB3KVGvHhH0Hk7bSv0//+uv3ztRvZlzyb5zFzHzkoVb373BuDqwjGhhnT7KzyLcs31InRVu3JXxPerxm+YABnrjv9MddPTFRsQ+YL3nQp3JOLvBPUuBz0j8GGrjArmug4SRropEzcr6pttEtk/q2/3ut0fQcbwYQb/sUvf5torEv9QZOGquupMjIV15VPM/OhsfOXbG9PzgTsjmNv6WOdjSeTxLSFl5RmaMDPpIL1svMyE+MVDJunyt1Sv1Vo6C1Dt7DnImohzhwgi6kUd/ZtiwNhxY5GzF6O7oCxJQG0vmgGHOnwoD5gix/TnqQ3fR8Lrq6/IE3JPnSqc81lafzRFP0K3dqr6ZcWT4d+phDp/jvQ9dNNbpYlomS/1+XHnDyOu08WQ/6aTz430CXnZsHVhZG8g4RdA7wt9X5oka7evF36imI4K+g8SEBPmMvA6DE6QbkTP83f/dIWtZ5Coy4GeM4qoPGCmrDPQXdTs32KueaFaQTXbg7Dbklz2e1LVD/mzKRCmw2SVyqbF/NvLbGXG3/5rs0PEy6joBiFKIO7rC5MneY+3tXEo6ae1HexhRx0+w/dSn2BgBxwi4pbIPmRJijnjOXiaXySPSkWzNqOS7Qt7Rafiu+TkwtvWZZMj4sVUk3uat1Vnh8ug5I3GeRPqorjXkieShVz5KeBtokN4+Bggp6xiZtDIDhMYIKzIakfKs7lXihWSULujFt9H9OzP9qJwTKMOIuGI0uNMHdEgwGT51fFRyjlSFESOv214POmP1OLIxscg5Ymp1zLTnxzeTEYPEtzGlvqbIjuh55pRLNzJ4yNa6zvqUtdFJ6x/GSFLJBpIugv5ZjX+qNp/t7V+gtV0EPV0v/Hel3QVnN0JFJvJMdNUbtR1C/Faj99Ri1kaZav4Pl8qebKLMnsIgwSjjIoQR0Rw2iY/Mwxn5a1//x69f/zpu3T7S7Z1hf+3ZZzTcn0OPDPbsUrnOtOpkTHhyTsd39Pc4Dw0RhqxuVvYaf4BbZzzvLOO/lT72zB3Gw8MOYxo83vDuifrQIXex3GrTFVm2eTDae7ATVQ68az6RizaftDuDSzcjCrNjrnl79N3fwH84zRrZMDN9fCnrDVYzENGItdT2IcyzBjzTGpELtoAiCUdyeK6xL6nCjOw8GnzwcuSs6LRVEUePh+Fp+Fp01kd87d8e3+48QqLMor7WB9avbjsRLhkZYn1baa9yRNhzfzzDcDC8PQZ+LLP61ukLw+qps6Kjl2OTcgU3ELlus4/LZdF0P47oUrXHHXAVsHli61XUTsfxwpwsnbT/N9gdIug7Faaua2XZq2tViRCBTxD0sSYQQnfbX8C482cjd4ivipSuGsYdY9xH5mws2F529vw2fhcRRhvG132R03NB9un146c3zrTZ9FiU76qhz3BmeHuZedw7smQYG54YrR+21BeQ9m8i6BHR9t8+Z/N9B0HP1hF08Pn5sUOGTLeyNemd8zPFwUXSI3KOazNzyK3O4am1PiLnnjwi2cF1j6UGUwUMIuhI6pkBjEZvZQRHpBudBS8L5/kDGuZWjrXrHR1jwQoM/GizQUdJlK48JdikcOREebqfUe92cEY7G0slW/8uetk9yTmeHf+PzqKzPsy07fU0kjnTL4ZzpZe7ZO/reQPZS7uZEVD2YnYOu5O6z5wSXScS0zGb215+s06djhx3zf8ORscU+e+tXKVOz1WmgcDTZbbRhIp4BOwM+g4jlNo15IwnLddYcLtGX2QMjzXKfb967FGJxq0SNhaptrYwkkv7YBfCnRvf9Y5lHzSw8u3ZXnwFf9yYd8gdU9mjC/92O106MzlLRb+lNPsIRVBxFYFlKfa+qh1Yd8Z8lPGknH2GrVvPp8vN3Ow+5nPwHfWn/Y7WhV0yjMg5azfKBHk6xur96S9wVBWi4RiRvk49SG7sHUbafWSXrZ1dYtMhzr4fOI5Zot7BIRp3ZklV442wxf74NuzfnlhU7XTGh33xMogcEZ16x+KRHEVA/JDM7CSlfozeoWTjwLP/qMPWN4a99dNnljA9xrlpf19GQ4FXF/OonCd2rEzT5nnajfT9GZKOWTtHxRhBHxv1m3rsdSqbM7vWpAgbjwPqsY3/QYaECPqb9CeoVgT9s3j/sgj6bX1+oxRukfSFDbxL0hmMGCU7yrDI2aoRXqVGR1E6NMCtX9cYcIH1gzsxvERmabN+P4U0d4aNd1x0onfdFNkXm+7ckGbkSM+cT9z83hkP6n90TCKanpnshy3oDDqvB++e7nhuPUtv/8TZ9OiG9+oTa3jj+5gj5+fa2L8zXLNoNsoG14LVtWFVzhFhn9Xpmfazr3BYPd1b32fm+Uwfy7J+zZw1gisCQzeX5LNbjEg+jV5VBHxMirOjmRFejbWTunopxfkPT9atHys2ReUoYMTDjztcrLPvlxZR867cFmybW3dtbJ5Y29h8HxD7cmJAAUbkZp0g2J8VWR/dikg6I3l+Tn8iXbzCdWae4Hhm16eZ9cevPczJlDm5vA4zfZ5xWFifmeOiwjZ5LoL+ALyFV1en9kJTeuVAwN/ivtMY7RK4yyCGFPgn0daZyPfY88g57bcawA3CHGrnQtTgtt+694e8Oxv8hLHho+nZJ5w+NfsqOXYcE1VGhNehqr3uuHcTwQ5R/wRB74w/O58+sHbfUe/UV5Wp1guU6U7Z3LI4yO4XtbWzD9Tec0ajT2HHrzIc73Yv+6zk0HqekTJGXGwc0Rpmxr0/S511pNP+ACWIzlZraRXV7WQdzETMcKxIitHRwaJgjEhjxPZJZB2dCMypEDkjcHwM38pJMRadgNTjfuwjzpkeWT9Yv/1vRzkWMfd64EmP/e7HmdkMTN6diVjpcTYHOvX7Mpg23SHkD6Kys91rla/GYJV8qt9MJyqZekLeLVuR+MjR0sRBBL2lfdsKiaBvg7JXEX4HPbsEq1djXeoyeE9pZ2Q8u9H91lK1YEC3MsN4t/FbRVfHXnZurLcIXmQ4nL/f+gkb/fgTHQFnGzcbomvY1GItS7BU+NHNSQ+yv729bDSQe2qDk8u7RvnmpmF1PyHrT3WwuvE9+3b6LKZPymMU3NfFLopjKe3+N3snq3foXPB5tXesf9XRCD///fj9GoUYvzMLo+1cJTe/z87lJ7oTvotRI2bspwtAEg2f7TD2ZaeFw9ZuT9x8Wx3iOLmHXqT1aIeR9J1jvU2M8w82VubAQHIdyTAr5/HDf7NxYrRyh96wCOi5z1/n1aP09077qC8Mj6wPnTZWyniSl0XOV+r+1DtR5DiyKSZtjZdhsLlvusJk2J0jM3h1MwUejFUEfUYgz8u+a0l/3rO/aA2Y4s4MvxWyUEWlbvut/xSbLSKuQETgkbxHkU6rCg1eT6DwbPiKAcxwqoxsVCuKNfPew0y5iiSG2Iuz3N+un11o1jA2srRY9p30QUqKW5+rz7F5uXZT0jN5DNUzp1Hjcrcs84Lp0xhzo953LzUsmv6T0fMo7R1x6HymbQa7am4yneqknM/IGNeg27oIcxyPScyMdUdZHz3H9dvm8zUnZ4+yRM7ITse9AW/1WAQXSZxfBCOi5Ul1p300fAcYQYp5RoJnCfIF9kR6fdQvrIsRboYFw/4oh/jb34wEzsg+cgRE2K1ielPwJHre1Y+oHFq8kYPFdArlhITVdPGo12eHZE5wxB8dP4hhpUM7MM9wjcbygOg9FSN930fNfQGMptuzT/V/loyvyBMj58xB4S+Cy8aePBNBf4vmhpWKoH8W75cU9xej+A0SeTm/6CO9JNW9dQnZyiJCCFkn5XmHiFja7NhbI4LojMZBXE0uuJmenbsRdrt0Djo+6jhxi443zJCNDBeW+j7GC5vtk6MNl+1SREc7JKsjY+/E8Xpjcvypc+fDPj4+iefSUfEmd1/mGz67dsnOnSt/WYvgzPmwWf/5R6mdt7yjcw5l6+ep9XF1nqAjkzkRcU3y2TYDgy9w+jAnXOWA68yxpTIsrTKKwnWM44hAeiLvnZis06zs0uCaL0VOhmifzEhyl0CzMQb7U3pBWzRERiSzzIBO1kAlqzHBIMV9LACEtHeIT2WndB0jYwE/+2DjjEjQ8bv1LWsf20YdYlkEhsW1ECZ3HzRVtyyG4/wUsS07NlFgMmtwouZzQyRfZDBdvjbbwJH41ImIa60/FoNOC4YDXqaXYCWCPq0Zj154Ax181J+//MvHGXQcJBIPNEhnouMZgFEEa/weGRiuwlUDMIq0ZynJaBRXihFhFBn/WF8USb/IORpDZwXjPVvQCmPg6ou9i3YHzMajXvsOejX+F52CzzeNveJcuH8iLZYRo8w5s0KCmLMliqzP4rm7PN76vrv+2fo6l8kNHVog6Nn6FTldorWB6UVHV6I1yOMUkXVcjwcO7usU2To2LYfgs2ujD86ZunLfhP+m+vTnvWYHgkZpFuFh6+YKCWCRyAEcLLirY3lZZIlRHkU/K6KY9YkZ4J4s+n3Dk9ajzcjYxv5kTpGh8NBBZi+wMXbHHeyvL7JD0tqwW9rOCcM0Gu/RFjuPjVZ0ZlXb+1aXlfXvsDEa/E8wrvQeU6StfCeCvjJfq/7MPsdIuY8YH3Xt7mM2Z16sfDcYlHWlw8wBOovNUZ5lGEw6LkTQV4Bff0cEfR27pTf9GfSX/R5SoM0QZAbiUuPnS+y72Vdk90yD9unOZhxee0SRKh2NKxtvRsg7BniEByMHSNqvcbnI2EubbDFe+Aybjw5c+zCR+4tR0TV0EsVgF04xmXYdMZVTxHcFCZLpdpjBcG6mHXJn7czKeve8quZkdg79m1LeOynw/pb3p9H0yHmD+lPh231etdd16nXbmym3ch4ds2Wyv2f6UpY1wxHJlTl8jwr8ZXBoMPsGIuM5MoLH5G2kml+LA4leWR3lQF2BrM2XDS4gtuFmldx2zt5BnK2Mdxh7sseIQVRvRjAYpqz8inXp8Y3+7dv3/feRdyQ9fv9EGUZ/Z9HHoz6G7Uqae9RXj2kXy8hBNKPjviwjvUjkWSbBansz72XEtUtqsyyImb50y3bn4DCQks8SrtiDTG7Y78KJIYLeFfSect1pv6c11TJS3CsYVg3EbqT9xUA9F+Hse9ovRp83DqoBkefdqPoTct7pFka/WHrrS4Qs8na7RRVti+vR+eCFnHuDk72xpIGlAAAgAElEQVR8DiYz4FmE7bJlIPoWnVO/2TvOEdMl7Vd7kPYeRUrHsE88D+wPEts93x7aua6+ndHNjj7NlvGk/VtIekbQ2XfTq2+js+eVcwcdN+904I25CRFxdlyC6fYu/aqcIrfPZRIli+6PeJm3M6R2VpnRsDdjD4mGGZcswvUfGy6MY8TO1uzIsPVkqzKOL0WAdGzmqGAYrhjXVo93ihztGYa2H/v01uMdiwpHll4U0Q0X1+aYsyiw1c1wQDlhPbZPehmh7LryO97zUXOUq//bZOudAH7P9v/2DhLfX8SUOQ2QrHfn4BOd6raBOsiyYmbrekf5KOPkaCu7JM7mC5brRt5x/nud8HrtxxwRdi9P/+9Zp0SFhR9zJAs3fhH0dyhsXKcI+mfxvhH0btrlLpIakbvsMiJMi2ZErUPeZlKcO+OtynQir964nj5nOjlzxtrtFtrR9mlY3Bz/jQ16yPFINW70oYqmRU6ZndMiimy/2CvOkI+yHMaeB7e+r6Qm7xxfVVd2SRyS8p8i6YwgRt89v+zWg0ydae+MuFe4eFnebJbAuVPJfpUsZ+twtkZ0xrerDDrU8FNsmPE0sKrSFxmRReOxdCe7F7JIpEXSrT7WN4w+VlH1qP+M5CVOz2sEHZKTOTgiYTfW6VBPovZYuqonBBgZ9E4RTyCf9A0JyG0ja2p+pYMdTCtnQCZXRpyYriD5Yk6nKBprzpOxWJJ9OyJvhm+EQTRu5rBoiuNWrEMGqzVmpd2Vd6K+zkSNu0R8tn+Z4w71obMGddrHcR/vRL9ZfX79tfLHf0XQO4i/pczT5fktnforV2rfQc+ihCwd+J2Y0Ij672dUCRbgVYJu/Z8ha2hwH38bgbELuVaNcoZnlLnQOsdMiDXaidf+fJYdazH5xNhF3mF2tvpBBta9GK76xF7nc2sdx8iwO46L9E552t87dJyRLSRZO3Vmpc+esOO/fX3fQNaRePv+se+nr+DRfYc5Zt5xFhwdPqaf0Zr90/o0+ueyoBDP8WyFWHYEE5Fy/66P4h6LnkUuzfjzBKbTZrcMI1odA7gzpqgPfs1mJK5jcVn7EZnDeq+NxWUfeGMc62FEhLUVRZivzTy4GIth08G9iymTj383ij52+8BkiG2aTlud+I79jeQswu62sC4cdbD3kbSPxaE7YRrlWNScXUpmc/tbCPzRH+ZAaQy5XaSzxjI9YY6WbO3o6HFG0A2Lm7FB8CHrhCLobW3YUnDn1N3Sob96JUbQr/W0iFCg8VdFjmfxyww7b/i9GH0HufonvxXcE0JGQG970amBWYppVn56vNDesG1OGWRR2wt3sgjfnkWGQtJRJORd0rFyXvWGJTnacOv+5kvlDoJ/bJJ+fJe9QpwRQ/+SFSpyBkSOFpP1pwh79G10f4s7Opw+fcN7lVo9ZHDe5o7nzi11vUpxz+Zo5LCrjjkwJ2Znbayi5aibSNbZeux1uNOH2TUrKp8dU2lfCNkxKjsd7tZj5aL0WG+s+vPrrA9Rm0jMswhrROY6Y67KeA/tmEjVC8VzNt4M9yi9vYoUIgHI2s3a74zXOyPQkZMuHMGN2DMQM9KNRwRQhl6O9swf1TAH1PEsG38lg2tROf8REe+MrEVOl45cPI6YJm3PVu6UmJHP7rJI0NGx0JVJt1/Z+oR1YNZDh4R3+3GUixwr6EDJZHqo9H9/vIrN9PpvX3Z2qv7tAXsKwEHQmREXRf4ysrZiDF7kxZMzi+L676PbBWiw0eDtwdfZyGpDCoCLCHxGlmdkUJE4aveRWXHDOjC8bje+J530r18G/5Gx4CLqww6IvpsOi3emB9mxhkiWo20g752jDpVcWGTSxnn8F8/9VvXNPK8i61ZXhOXKXMv6F10Y91NR8xksfdkowo7fUMeL5FZIfRTZNt3ZFcnOnIpZG9k5+VV8q/ei1PfqaEtV79TzDjn3adXeKY0GohGcLPJm69+qEWv9ZdZPp87IAYCgReSu08aUAKCwEV26uQUVdy83i/oVkfgxOQlZRcKZ9dnaRNytbvbc/+bLZRavj4ZHgRMjOr4er49MbzvEr3K+oM5GTqd36xbK/5si5LNzhkXUO7Kabee2YZI7HPzzaq5UbR/vH0fP0NFk7zEnBUbbTaaKoFdov/25CPrbIb43UF0SlxFKNER3k4YX+4J88mcYfkH6+y4oO9Gx6TPjhPxWeCJhtH4x3Mdv3gi9sXCCjFuIX4p+YFay6Ft00dQOuUbk/Kg7imra73ZxXEffo4jsbQ8Mbuvv1L8Di6gOFll/Z3urdXdS21cI+GVTwxl01s/IgdeVIYuMV1k8/h3MwjA9XsV09r3IgXazBcmnFseaF3yFo3OXSLufGLExBy4zHNG5a5Fzb1Qe62V2wZPVkZFnXGjfEbVipHwoRxHxjcihN9g7jhA0xL3AvEysrpW0X+yHH5snqzburtJgPdl7rCwj8N22PfHGMaAeIoliehSRnjEBg8vpvJ5ciyEQOv+71dVxOnRx6JZjKdSoa926dpbDdYf1iV2keJTrkPNOmWo80TyOHIaz86hqn60Jmb7qDPoMolvLfoAKbO3vn74yI+gREb/WX2KksojqmLsNKXZSSW/R8HNRiD635i8puvrc9KZiX6rI6tiHHKnKlKBTLsOeGf5R2uutH5Fhhhvq+feNlDKnqkXPz/IWXcexd8Y7ROlucR94us/p2XP/O/6b/T07GSsinj2/teWiPYMsBtGOmTnWmUOz483K4+3tWJY9/3T6++x4n0TJM8ckO4ISHZNgJHtFthhFr9aslTY6+LIMmE5WDNZd3QLf6ct0GZZW6cmNj5bb7z7Fski3HP3JSGtFaJE0pxtLkLKcGdsVkbP2kOD5frCIWjUuNo4o3b0r1G5kNiLOnXaqsVYEnjkKOu12yjCnxNgUJ842M3J3/GYRT2bHoV2R2RldJ1BnvOnmlURo7b2mLfi0K1ve7/R1BzH3nc10mcmYOR4bdv/VJEtlnxn3OX6luG/RuHYlMyJuV6qCMQJZBL0iFMMecRLbmRI86nXf9c4ION4gPPap4tvo2fOZcUcp/6upycd7RnyQCCDeKNWrzcojehpgY5zepgyMHr8+o+HfJeTZHGRpsSsGfCXzmXWAkXM29komrE2MfLLsC6u3wjfSv5mxUvvZbZY+zd0uQ8y+of60bXu/cx6d4gu3uY/14Lifwp1dfxJRnx1fFF3v1hM5iirdunCEXbXSqW6/unM6Khfd6p7O44oUPel8FPE8fo/IzLlPTTUbjYGRn4iIdgkqVZIirXVqMElhw8YyEIz4Y+TcqmDkcgcRYWQ2ylZ4gmuE9ViA3MOOI6ZytPi2GFkaG8hZCMfq9bnKiMBMCrTQvQHRGZeX9TutfeaM26XXn6rHj2GV0M72lcnXdGnFwZdlEFDDA9ZanP/gJBVBnxXws/LvnLLPevYXfbtKcU+NsODzUmM/akaYV2C9Gbynxlxnkh2xH+tKkFYZGbfoZIjIExq/LKrWGRtGxqJ+Gaa3fTkzvJmxyYwPjCAdt5mbPeGeDVLpjAyLoHs5M5l3L46LsGJGfHjvQMcDCw1FZHnoDtHvWacJjgvJlpdr9Oxd0dBKP9nn2Oydbz2b3vlm+pDtG8g6Zt5kxBznSuUUrJ5HevYJ3cnmOD5jmTN+nS4/xVYp7exzT2IwrdhHeT0RMSK5QuaqdTkijrPjqsr7vYORLDPKxwI1caEcI5aRQwLX6yxyX41n9fkMqQw3KSDgl3EQEHPDFnFfHYOvD+swHbYyeLb/CeaZoynTY2JzjG7P6NksVl7Xdjh9ZtuPyrMz2FZ25bjHy0ZQ6GbkCIp0yq+XXbbWIelRGXRSgOxE0HcpYq+ersh7talUiUB1SZw3Mr1RzojZ03TOGSP0xfBzxJx9xsvOqj+587GKqlZk1YSROS8YBixLAY3/sM7Iu+4NMKclL/aK+2G0gcaHm7Ej+n8Qn2MRPTfbdKzOeXJVmzhU2E3Q7zinbp9viyKXKKOIBM28j7pz4WEOqNPgYW2tOodebLnTiPE3uUep7RhV/7Z0d7wUbqg73P5eLo5JgWytqiLms87L7rqIDoIxZnc0CZ1RT8YfchVyT4gvG10iN/p66t9yJkxmbGaGK75nfzPj8NxnbpceRY7BbO31628UmcIywZq9hdh0LK8dBIphkqW7+zazM/8zMlghGdXYI8eEEc9k33yZS1Vb4eQ7H7CotyfmpkfMWWT9jfQBsfNOhkg/sc5qfNXzaPyM5HWd9t9A2q2v7Ew6O16DzpYnC3rmsLsM1+JyxUzOHZlm4z/q9ricZUXQnwh9/t3ONjFfq94IEeimuDPj78XmgVu+Z2GfSeW8GX3B+Xhjk+1P/DQM8ipK1iHpswY6G2tKAtCzzYwiv9G6jfW2/7pz5z5ijv2hsMEt8J5YekP8slsIWcdnLO3dG/OZYd850tBxwFx9gpXqkum5aY6/LdJGAMrI+7UfBlko70prx25+4zfRu2sKi6TjmXSsq5v23iXMbJ501ofuGL0usswfdOx9Ipr+sie4uyaqdbh6PotLWR6JOCMsaJFUhqYZzVW5iLyjoezW5ms8LpOpdDgz54MZ0r7uiGhFEdZqfDfld3/4+o6+mdHtHR/272shDCL4jFQhOX1RyCTdPIrsVnWUilYUYFZvB99qrEezPisE93zUrYikzji+Iqy8TdLFq4NBVpePQHfuj+j2a3c55gj0bbD0dnteOSB2yC5aJ9DOvDakZjYEO4YQOSIYHscx1v+rXAF3S+tvXZ8I+ofF/3//L79+t1upZ5tm0Zmx9yfRvuk2AuLGSN5YR9iCdd5o7o3YrB+VAc4i2tfaRCJWL3vWxK3QrN6b7dOYMRcpwE2yaZC8RIxtwYYNdDf5qAh5JMPlCBxUaJF01k6kI95xYnhUZQecTo4smo714juz8+q23/3j1y/2/XM7b37ZAlDOouY/ke5epbKPdeg8d279jwh4l5g/wbiKqj+p268Rfv2N1p1P9OW2RjWcb9cY/Pr9xLisAI3qjozO24BOwugjOjZ/mXM0a2sIDAgoEnBPnpkToRpr9XyFPPk9oKr/Em6Qbot1sbRfT9rN8Wk4VUSOOaNx7/N97I7Hl4v6wGTPdKQaQ9UnprfMCeRT3hMHctpcd152nE3X4nz+o2HPVFC8PGdEEAt9QwT96FOUBTB7WeUMSJXu4PzN7MhMnp1Ud8QAnSywNiiCPiPo52XfMT2f9+ovXMNB0DspurMQvCNa4wkbuzTuWkc8Se6cQT83xw4xr84gY3R8q7Mi+g45EU7arptlL3s4MxQskssyFcy4AkOTkcwr/R36G10Ih5f/sWh5Rcar5wgd04Hot5t9dmI00vwPnTPjcXHj/zSJYvMbz6D7Mpj6/m0p7mw8O1PcO+thpjfZEaGVupkDJ9Ltd6zNrT4XzlZWx+z8HXV0CQSWNfLiCbIZjMdv/nd0BNu6uTjfX8a+g8R1SR9aXVHU/LbgwSVkXcstIgPesPcp79EYgn0qjacxwurJezSGDo4ZEX+ZiORTZZGThLVd6Xf03EfTkZxHeNocqdpsLQBnoQ6enfqiMpgqzYI23XnaLfekv9m7URYARpqjSyxt/VrpH5urUT3MCTbTZscx4es7x68I+gzIz8t2l/nnLamGgUDnkrgqJTtLf99pDN4i9mDsZZcRddOgvUpk6fYZkUcsWEQ1aidc+4KI+0tkuzpiEFwAZ3vw8d9hh/7LkcxzRqJtc7sh9uXhH5kM/zoimG5GV3rExu8zItAp8/jM6sQaUDlvrKpQ3/FyE8i0QIdKlMaepbev4DsBwUtRvMn9k5F09u3zIxL+YgvDuXN/m/vQ+/PG9xkcKl3InDxP50O3n2z9+lTbA9fiLPqLnILPLrLxLpH2LnDeUPTWyPHvYw4f/2WRQSO1WcopI4i2+EakuIquXwtPMzqNi/2LIOAH1i+M6FfYVpEzxMWwZunZvi2/pkYEskssI6LeIcgZ4YwcLSiHruW7Qm49Buj8YET9+O1YF4/1dCaFuusAYdkL3fFXupY998QdszSe1Lv7XY+513GMokep70/G1p0vNyP2/IOtVZlcI12OnBLWpjt7L4K+W/ny+j4xTT87oi9vLYugs65XkRo0DLGOVRIxexs4psCzS+IGEf2Pk0hWG9GEHD1JjyKhLIIWEe7LBmvcmo8EjqadF95OXKNvMnU4jPUVjFX7jUXwV6KGmDVB5er7ZJ7VjfK87UXJ8QRGziMyl/1+tBeluVPC4qL3Ox1irC1Gyq3cN0bRWdS888k1LNOd/pmzctjkoD/R+pCtvdF6EPUxWpNX1+IuFjPl2O3uH7/R3UgTRtD9QDBF2BMwZr2sEEdf51gMXAeiZyuW08tCTz6/thKptj5nfULSiJeYmSz8eD1BsYwGc5gw5wmdRMEYrT3EG3/v4MxkjkT9msTFLOlkM2AV2L53kPgsEdQlHFvWdkbkqvHPLAw7yrIUd3bB2k9Hy+mGSy5Hi0j78f47x8CcWLg22Rgyx14k0yyKHshQBH3HBOnX0Vn++rWpZIlAFEHPokSZYYcG59NzyVd9yTnGypiNIq3sc10ZYCuRMzPKx77//7P3djG7bdd50Np7n+M67QV2gpDgKqdJqlxE1K4jqKiCfU7+XIQUJcFBolw0tkuVtoBsJTWkyU1TLAWiRKAqEY2TcBNQcEnITfNbn0YVFbRxbKMIBZJyfMUFKPbhgmKcs/dGc+415h7rWc/4mXPN9/1+9rJknf29a/6OMeaY4xljzDk7n56L+mOGetOPwQVjbZ5gOGwcMMk30tGePQJCIoG1InMYafei65kL4zRthXeal/o35DHWjebE+ooyL7JtXqPcTUbSR+enI/CXSn33wHrkyByd185WD+676HEQTBtT8qZ3uobLfEpmTq8DLgsoMD1WG6U6+qiNYYwIsqhkVRIBBS2ApOv2RlAz5Rl41PTynAx6Spm+cC7yt9BMgHf53UpNtr5VpTyQes+cHuB43mVNRLxsSp04WNomDfLA+hx1kOwUgRqH55hBhwhGYzUAzPIbaWHJVpamI4rIyuLo1SMjfffUibJNpC10ulh9jAJ2T19mZGsWL5n8yfo/L4nrkawpZWexdcpgXoRGSgS96c9B6ltRdQbURmjaE4XcADjxrq9p27rvajyv882kTHpgmX2bYfhmI+rVxlG8w3PyJhgoxm5RckILsuGWTyV1WQziWlalOGpHaYuor991ND8rY+yeASt7Ao30XofLiCxadTzHFKuDPNEXGFryVO1PFS3f7ZMizytTLh1Nb7aCMnL0xXI3EVH3Lo/brH+V2i6p8TOAusc7zb+ZsqfXv5YjveasuzOOOlBbH50p7VY9TRdLL7ffe4zIiOBR1I9F1XUdD8gwg7YKw/ohMw8ENbp+FQDVSRR1zQBu3AtGgG9Ecxk3tq1/Z2m8DFRJG3XD6nSGWLzNjD9TxgOkai9tdyegw6AtFjmDlnRCSDsazHm8R3nElHA2VwGAbMyMrt5aGLQ/MywIy0Rp1WEDBwpkQLmVBYDdXtvhgDxjeuKI7kCHqZ7vw2U5L4k7IHcDVW9yiQ4M9+5XkXfQtTHHZtUb/dVt6EgSAslLgwjmPPCiL9oozESwPRDNQFu1PSZIedRvtd9UFH3DP7VJ7/iaHNtmPzaeubMcBdn5M2AegXVm1GccMNmVHDmLZjpmkE7IK+88uszHW7dH1vTOLlhveJffMaqepe/schnALufQNVAfHceozkB+9fIm2+/RfkbpstkPDDDPjq/I2sUn2PTv3dF0NgkPoINRuHmPt3zTRqQGRRFQtogJTtBNMQTiFpgbZVQEtKT/XdoUSR3XY/CirQhgBWTjcYKNEDkgtTdqiHNK7oGjJN5dYuj1l41So/xa8lwNg3XkWlZlMt5RAXQm9BKAyfUorbN0YWNEZ5qeu17PvfO7VnkGWiNgbl0ih/Uy6z9yVlYjdzCbBecWOC/OFPdrCd2zfkaX63VHeY96E4BuRlnJXDPG4zWATBUY6wI1YgSylMnsBXLayZBhPwPQUT1GV8YXFiUzbT1YUexseFt55e1ydWP7pk00NtUGuRvjgMeUnUGN6CXfWSTdOruebTNTzlozyB/9HjpzmnhrpdpT4Ghp8155izxF4J5Zr5n5RmXYu+n6+babiKhXHbFeFIf/ZvMZuTQuoou3NmdFsDNjyMgZ6tSsMy3Tv1fGO4PuOdg236zo4OHBGRew6f60ocvAKxuDjvrqOh5Ax3YQ3O5SmlSFrBNC92EZ7FlLrQdI4Vyq8gNjn40nujyrh/8arLPxyJjqQiENZ+fLnAJZh47VR9Q3yqvQTcYijhGUv/I3zrX87V0i58kwcyZoXnv/7uGlV5aliOPZbgvIzxrDrHYw+q91Ua+z6siYcO2w9evpwahvkkVwRtAjos39nlX7c3t9gVvzIuiYThsZa14Ux4r4WtH1HpZgWruX5ln7U1KWBeg7u8i4hVsbuBknRc880Xi2/q56MTjvvgHiJMVQ16/zgIHu9li4wE7bL83ucC65s+iAUbXartqA2M3u7Am+KVE2h1mZjIYsr6O2dg6ApNaMZCI7PqucBuAMmF/zlvfdelW3ueNt7wjgpe6l3kdHx47lYMnwg+kYz9ma1emXlhU2N3a/hHeXROOTOoKTodlQmQj8S7RXlJ3oKA8wm0pv8Nyy1V5P5DOaJwNvZP8YAq+6bdFpAiLL3DDlGi+NywDmaH64cSV165BMZSsx4BPVjRwAzOEucxegroGf5vGRc+h04UeTufB3Fn32gO01QW809YwTgV2IF7Wb1U26HHO8oP7T66saqp1hWXBGnBH0UUaO1bsN6nBs5He0lnWLuxXNrWuKpLjsAN1aRn7vid5EpMykc0obu7TJVcLquOBpn6jfnu+W4azbyEbPrGi8Nuw9p8RGh5an1h6s58q151yUZSOcqsUiuGqlbgAB6lxldG1kSinmLBjA9Paey/+umeZe9yAtZ0yrBZs8A3HMQYa0YxkSWfr2yLdXFt9Ir7Z1lII3q/MD7ejouQbnoze647qzdGcoKwfmRO1hcC5KmWvLSV0nxnOZVgaMu44z4GsGLa1+WFTOMkAjI1/3gf/WulqDWva7Nog9Y5jNiYG8JizkvXkLIOsxZOmP56Y3i0ndVi10lLlFdM30z2jPHBOZtiIAomkWlRX+HrWShbaMv/q3Mh5xPDEnQZbWDLjpuWTmjXKXoX1vmZuKPPeM00v5Rv2jHViljyy/rPF4Th9Z48hLKyukh+c4HjXPE6D3CM/xskdVz/ERvGAtyC3uzDjLRlvE8GQAwooW1fU8kdvSj3VGebO/E6Mww/Yux0DwHJcG1G3sBj2OGM7YNqY/b+aNm3CgXD2HKdpTG9uCzPPIHM39xAGFeKY1w/9MmUvIuwXWXV6qwV6CtqV5ndLOaMMi6hka3kQZL7V9diS9N9NoBj20E8BcLxP18Ywxo87GNqefQ5cOEKCVv3U6sHZQY+S8lJXyCG4ioljAnwF0rVAjYzebOh2ND79bgNySI8+BggBY+mKZCBg5R3DgPUMVzdECIdm1wXiBv2XoYMliNP7sd4veQkuvHV0321+mPT1n+Xck2zP6r5vZ2tDMaPOssUXteFF0BOlRWz3fPTlmvNRt92T1oC5QWTUnQO9h2PGyWTV4vKezhUoBiaBjNHYmeK46P/n+bxZ0sDZ39gNGyNcz1rpcT+pzJgobgfhZ0bJMP5YTIBVljSIGOqpO1tKuukpvb3uvtBFswt7FcCydvcqGAc4vZtQDDXD99IDkDJgS+d/seXDDu5V5cQ3VJ+BcbnW/LxH0SneVLj+Llpa+7ZGbjV4Lnldj47acebPmSPtMPJ8Z3R1S2tV6oEenp+fmRQFZI17kEQ3VKlSoQBLn3hEosXR67UwYsa6Y0xYdBmhsj/TJ2twI9EoPpKuVbn2JzAVG30iAegEm8sijpfdNnEQ9PBceYIQdZUAukhNeRDTwvjOHSF3Qa6We8R8Zh1X3NkbVWRTdiqyzrB5rrizCngHhbJ3ujPH1hxHd4PDmPIN+CaG327zp5Xjd2d6C3jRA9ww0L8LOQII1NQ80jBqjo2RkUffMmcfR/qodRs5qy+89dKTGbhC1r/seudnd5G3GyOw1QMQWnbjS2dNsQh/rAjn5nnG6ZPjtRbk13xmve9YKS2lHQB9lZGTmM6uMBurs37P6mdkOA+BWFL3392icjJdRncx3y0G6sa0G7ojI9D27DDuaNHqXSGpsGSNVgxUER5Iq3BvNYk4BlkI6EvWN5hR9zxDuSKQVwaLei/S5dBmHjrQLveuGl3ySjG6oiZvp20YDDfTui56zReZRNw8y0EzUPsuvtjGufUl/eJSg9KnpbEWemQMF5RXHFtEC+cr+zswXy1jAd6StS9fxUt1xTdz0efqsHtByjPMz5ntG0C8taNv2J5rt1x34Xe2NRdD1XHoi2r00uAZY3/WRvN19Q4Mny/KwRM2096/Tw2tFvLNgqvSto5DemfPh6LpkHDirsLVdzrKTu4yqjiUX6OkIoXl0wjBqonOq1W5ZDTRmqGN0bRYoz8o7OmVGslMYT5mzx3MUjPRrzRFvbNfvn+s6GElvtoNz/CBL15Fy7Nk17yk2DdYzqe6ZMnrcFg9xbp5jZoQOrA5z0Eq5mbLTO94IkFvtTVnnGaBqldGgshewWaAlaseKRFs6XUCW3tssgnptW/uh51DI9EMFdf1RA0QBaXocGPm15trD48hCHQHLzKEg7eB/d4ph/SEal7fo2EYu9Nwoc/WHJYeRfFr81POsG7ricdYpwWgzShedNs7Ocpe+2B529Jx3r3LE8ixiPgugZ9b/ZnMjl8AdcZgR2pwA/ajA9NUfXU59vZylGwUKQN+sKcWB6Aw6Go0RMNzZHNYTaVeUAvb27izxsDISmNNj1BGSiYzV/c55q7wnvba2I5u35pNcurdKk6XLhbYIJGfRPNMO3gI/mjUhz3hgaaYAACAASURBVKcxZ4nQvJKKGL/MYUFtFxLVxCMK0TrVY7gm0MIz6uxvPeebuOUd30Df6EK4+d26RC4jcz1lmNPuGtlFKBvsKEzPPEbKslcb6LoA43gKGLcG7AE462ImbcDraCP+O4ou6e8IYqqSIVFeBpb1bxZo7gHrlCnrj9i/BdosuuLmIfOU1Gqcy86wUNFdBCfShuxdGXC+UQpqjqN2SgRiMzzNAp1RB0kZg5XxgX0Lf5AP0TwZXa02etoaUTxexBbPeDO63BQwR0eCp49EJ7E14Z1jz9LTithY65MZiZ1r6gToWebMKdfJnjmdvsitaIDOom8aaFh0OmI8ZqPoR/rI8td75qeCHPKcz4hhOGPOHj0iR4kY4p4Bjt82bRLvNi5cjUk3gAM22s08CsgvoEinMBob88hlgFWWyc39l7owbmN/kJuz9dwjnmVkmPH1GpFXPTZ2gzuOnb2XnpnfNctEUXU2lsxt77181jxlwF2Po0dHWo49a3zXcuxYAD3zgkPXOu4FZlnhs4xOATzlv1F0MNtXVM4D/0cAj0c71qfnEMhafNKuZCUwgCoOBg3kNfCwQG3v2VtwTO/46YFizylRjQxgqiVPzAkj9T2aytiyYEqGg9kg2pmT4aHVrwfStUMq00dm/tGa0fPVdog4BC1wq9vtPcqSHdPRctc4T4/OpWjMni60ZFy1eQL0iMBzv2eX4dxeX+DW2Bl0IYcVAa56EN7Z7o0AexFd3T/rawa7msFZgNMKvBFsj4DvzX6zSnMmHX1GRNlzsHhjKGOOQLuWhdoWKNbNfg8GCtbdBQgSq54B8kzqe5OliSnVJXL+1Bnzbr5KDqLoaAZkIa8smWPlEPDhWvL6z4xNt+fd8o43vJd6N3mRHJ47l7fSdYS959+RjvKAuuXA0/Tv5QUbj6UvRB9onaEB+oy+Lfp4AF3qaCDedTmcB44QGIUMdC5xEzAu4FBAuT6nq4G67osBZ/wNjVpr7LocAiEL/PREuyOgLoCpKeH1HxngxYDpRrms9Je5a1prMFjqZECVBSyQhhZgxrnWReQIkUc7rGbRgrV/xPHCZETmofvSwFXLsQZUeGbdkz/8JrTUPLHWyKz5RuudRZhvKmoejRXXidY7daNV2RHyt9SZOScm4x6ARzmP5vlwWc5L4iIizf2eMNXndviitxaluIuxVnWmAcrZN+u33d6jOM4Mwksag4z39N10PUYSRW/2h5NGzuYdpT5LHUYDy8C36GU5RBgNaBuobNFIDDZVVr3t52QjZmM4KguY2l5leyJw9+RAf8vqHC+ayWQH+/ecLkdpmZ2DVU5H2o+2dcn6DLh7T7LNHAtzpiBI1/p5pO/IqbdzzE1+HrPJbOI2d2t+mPnU9KbheB2hE61jGZvaAEbFl9E3nhFbGR7c8I76NBGJcmni6f7dxhZcrNZDfA80a2CuHRQa/OuL44Ruep8aGQvSHy1WK0rf01dbFHCbeTZqrqPbEYD1ZEXTUo9f7/0YldXtMRuB0QGdIEymhG9IGw8xRHP3eOKBWF1PA9qZ4HZEXryL4zJp+iN99tTxnFs97ah5nhH0HsIdL3sC9OM07GoBAXrTfwCcvWh6V4dGYZbKycaS7SuTAt3aVxt5NYDXv7tuBu7cDDzDuO5F5Lb17Nw13dDp4QG7anuQ5/Bqe2QT3YA83IzlyS8YtF7gGqBnIrc9z61lIu7I/1lHGLJ8wrRhBshH5CCTpnwJgM4i5t459AikX/NMOqa04+VwdQmQM+n6UrieG90jHumMpJ29SnbJDD+9qL0lsyijWjdl+syuhUy5aP0zoD6cBWWBYNGFLGrtGch6gjpdOJr4TACAytf725unHjNxrtbPGkxqWlnldZt6L/X4IHUwjV0AKrtZXMYiZUzBB0eDpgcbE4IPaz6sv6zDpW1YpBEvKwGBfY+too8UlG7xzHMZe/m/PtuvMxiY8ySSeW1viCxZIP5SiIGtZXRGCD3Kf2ddxJahzZEyPan6vf1E6wJ1SkZ3BGM4AXovk46Vv9RyOzaqe1ybRdAt45ClOTIAyIy6LAmxrhe1z7bZW846i34JAIdAHccq9GWp0b3zavs7rLJsKivyoo094Rll+2vltTIWzOh/Mrrm1We08oz3YcN+gClMBnqyJnSXzJFm8V1+v/Yas4D8AOmuVsVKga82x6PxYTCHWJQdUW3WCQ48a9SYeVHnSJ6HnKmTPAr2ONvqWOGljmHuaP3EADk2jGnW5TuLxOkUYSlT/stAzmZxG5FzLFMFxIi0MwsLAVsWwGXAc1M+6z96IszYvrXPeLxBZ4j0rwFVZr6sb0b33QYepLo3JZwsVwXc4G9kPeM8pR02f5yvBuFCbw3e2RED5gSJLulDp5GeL86d0c5zVIwqAgusszPquo+biKhHTkL93QLro3RylTisf3QaWXWRnyCrJ0C/BLPsNiMVc93RvAC9sQg6M9DaPqsMtWoHQNo7I5kGmdk6Vn9HWGKleYdRZXKxWJ2HSnffAbpVkUQppHXPWaVeO0Yy0VWkRTZC5tHBy5TY8RoNBbV66ydNA9mY1aA9cFKbIo6EHV3Is3k9MsIujeupny0r59ajzIne9ZHuf2DdZtseKWedT8ez6Td5Ln23vgCI63PqLHqeia5btEMdzMAw6tXs+s/wy1qbR5yvmX6b3k865axsp6o+VMQr5XDrAZx6Mtl66KWUv9HqGTHsj44hyxwLqOq54Xwwmo4gbNTqYwC+KtB1MtFxAkbnXrAu+xQ6CRiI7pknkxUGVlAOZf5HaYz9Sz/62ICmldVfhp5t0UPmheYl43WPsycr3z3lbkPaeM94S1kNypGnXluRTsrqH8Zr1q9jW25E/vvdmx56qXOWDyjQo8JOYk6ggJfiHkVyrPRpD+R5BikD8nX/A3AxYdq0CRY5R4PxyJnlUQM6omfGSdLmQd4oR2JoI9xse12pDYiLs6Zc3JEI9LA+N30ZaXmZVHhPPqKb+jOylTL2Ew1hVJL97abOGX0g//Qawn/L34nhXqzIbQblbd2s6e0b4+BA5LznvXTm1KGyQjjUoxs2czOewPTkZbSvjGD1HFna6RZyZIlvAAOKqwlIUJcpRTTwi86TqCNLz+7pS8piJD1p+NbqPeBqIzwJoIXjkGisq7yNtHMZayRIVjQ9E82zNjUEpnWBOONEvkRj1u0xGjNnyFFwHo1Jty//xpvLMVMhQ+Pdwl1/QCAuNNHlPSfQCM1LHSvazOgzCnwjWo98j6LoMrfyX+/GeQbKI6BuyWs0D3T8ReXX72cEPUmoScVOgD6JkNlmLIBe15nxNNRmn1g5ZqVJ171TRdmPgFSc0yUNQumrgh0llfrG90ojI7qu60cRequsFTW7VBTL649F9zf0DxQss1l2+7F1/r1jc9f82DzXpjrDMladaamyxtl+PL7A1lVbh4+V9xsIl11Tmeh9pDeOrrnoZnc5d67Pn1/zLDqbv3U+fcOvFax7T61FEXWLj1Y0XWTD4lkvrxD0e7LA9gbU9ZEsjX73wDpb27qfWc617rFjCrAGpBrksPPp5buz/oc8ohvhTc7G87x6ANZwttZeIycA7iuWw6EuBnL2XfZvDRiF3npTygAPd0GsH61IetvkVbkeJwXbX610bi+a79E8w0OZB4JXvLWd8fVIxoKMW/jszcOiS0bekkuhFrupdPGeMfaUtTJOjq4NS9cwvRDppTPFvYej08ueAH06Sf0GeyLoVmq0Nsw0kKu6dJCjLMVSZoKR9kuRbJM+iRt9olPr+ba2VwdRKgbgerIJonPMEbDzIrw4/drXquDbPk82aTcQIZkSYrfBuddRWXLtqsDBkmDztCIaiJV/M/5kQRfLutjsfYS22baPTlgi5gV4Vzvn4bLgv29DansGmLe1DBfIsd976NazNq12I35GfVh6Ch0GKFc987xE2cxTbbrfi4J2pvA0MKub5zoaPBPK6maN5cgj2htljYC0q2Qn3uzO+sG5arp5dwDob+CInyaXFq+rcbT2wlK1PWeI1NVA3OLnTL5tFjo4VzDdXbJB9Li0I0rmgPRhc0NmWLKNtmaHY9/ktxWNRjDrnUf3smGmCVqyocx8UMd4UfZkt5tiWu6tdeC1q2TtjKCPMGC8ziCcG+/wRa/pRdDR8MqcJbfOUaOxGBmPdd0mAGwvaMukSuK5RgTa+h3eXvnxomQs0m5lMSCY6x3Hbs8zaJ12CCiDotZZDU/6b2OwdfETQ6PKCn5TbWRkSYoz3tamIQ0WMyV0maO09mSbgvQ1etYzz2iMDMD3ytSM8WQujLvpCDqjpXfre0T7nu89UXXdrubNDD6JzNZlLS80BPePzBxDRm/jGq9jXY1LzHSKnKc9PHLLajBR/q0vydKGLxrB2kjOgvKeQTPgyABjIyqk8EcAcmM8BLe694zbK2uNyQJT7Pfo3Hp2rHosDIQeBc4yDkztdvbJzdC9KLPHu3Vfb/t0Bmyh/GLf8t2TKeaAYA4Kj65HaB7xXR9XuU2A3Bo3jreUYxkB3rxn6KVonWh5Q/6V/ecHzjPokWjO/H4C9JnUTLRlXRKHkXBsCoExi2pbBloWpCI4nWVounu8czlRlM7O2h2JzjBQrME7AqkeuliAv9lhxm3NCVF6fpTBWsXEsG86F6LnAghGMjIseliRtdqXYZiN8C9DK7aeMGOCrbGMQyqKcEZrdWT8M+qwJ9lKu7cNoMut7ZiyXuWIXCSny7d1Binx1Q553H8jPMtyOcILppvxN+wz2huOjCdbFwG8dfN7qr0e8Jlq0ClkGcrEGK2tZCwkBE26e4w+4lxZ+xawsegU/e45AixSWVHTHvpLGwyIZFOy2wIOnA4MAEeAMor4Mrpa/MP+o7bZvKQN1oeeC+OBpnVVbmshcVLNcoTguBmQ75GRbFmW4i91LbBevs+eNxtvFCXHaL/+W8bY6yDsAevMqaPlVfOUze+MoGeldHq5zPYzvdMXucFsBN0ywhA4eunnM1LTmXGYAS0ZHlPjVEVWTdtBKd1RQGcZxnVvg0hV9Hc01wjQR0Z6KqrurOTIfmv6Wd+BYBmnT9djjGt/0dw82jAAP3qmVW5tr8MuY1T0yERFU8BLeepL+73rAIF8b/1Izo58t9Lgb0Pq+04XKlAuN7tXvhMQfoQmuq4Hmmf1Yeo7466IbGT90uNj7ePajpyto3o8NTc5Z44gB1PcxRCNjN8oBdUDWJkIVmpSRiHmLGB9in63nAEWWJRu8Yz/ZrGot7qxHANM2ehyRJfs3LNWb9ZxhO2hY2BWJFmDcN2H/FvT2tq/IxrSxbz+yEAd9sMcXVl6j4yt1LkGCD8yNgTk2JZ2MIz201sv6wTSjrqyrM9b3Hspfaj8pZfOocHdx8rZS+KYcWgBjaojFWCSuhoAaCAVAULPUMRvPQBtE01OPOsTATg2zqOGHssiYPS8hGwiEI8cLBvaJyIxVkCgzEVH1uvcDmy0Vnqs9wzTUb5l+eGtIWvNZdtm9am9Y13ON9LRQJ0ozf22RdApDQGke+B81pNskY71WJHRk7363ZPXTH8DopOqkgHndL1nAVFqFEYhK9rFjOYj/fTMhQE8MIyPDGV3mRvq91kAshoi60hZxFcDSF1uxArNOEE8Z4iec3b+1gYa1c9mRESedKQZcwRoZ5T+d6kr9S0HFNJL5KQZQEQKdaQ+mzVwSJhVZZYNI5/R+Tarz0u0ox0MeAznEs6HlCHIJ3oC9EsIgN3miGq87gjvWW8FoEcgIQOgWVR15hlEJLsF9i9hCFoGXtsn4KKxI+cbLUCujXEv8hmBaEZHnQXR5qRWIjvuwKKtjfarwq1zWRu0giYIvLUdWO0INLDIuDZziowTY/2yFFkp2gvW25vnEDnPqA7GZ10vK9+V9uvZdRaNZ5kv2Qh6dgyZ+UZldCT9pqLnLEVdjxvPo1dcoJ5lw383uSIp7ZEurm0Th0p2jWbXf1QO9VS1nVWmzzVlhMkQHlnRLzpEd4xEMjntO1OKI4Z8pPN2SpWcJ8dJReBGj531j31SJpGn6SwLMJpjoVvRd1Lfy1LQkdfyb+0kQeCo/7YY7wHlumCNeaLTAOduAeQjAug5Ijwae44kBtSFbqVNofFmI+P3zVRa6RvhN4rWuJgOHQMWfaz5RbI1Qu9oHUdZMSN9ZusgL3Gs3oV3pQ92idylou5MXhW/ToCeZfqccidAn0PHdCujKe7SQRRl9c4Qm2eFncvhsN+N/l6lp8c4jAzi6HIi68muui+vRkItU8DaEzjrHGwMliGORjpzjqQFIFEwSqelKfei9B2P9oYeEEFoRrQ6t65tnQ2YHEhzz8oIu1yq8RZox4A8prcnyL0p4jpCjMbK3AqYtRwv7HctU8z5laVX7/yi8hJdt86nV3vhybP53ob/scvjyrgk9R3PqHtjjnQT08GYZu7p31F6eQ5bdAZhH5ZjdXQsvfW0PrfunZA2ex1zvWPZlMfom4AzJteRcV++l4wOFjX2QJ8G1Y0Ixrn32aCG9V0XDrwrrn8bITjOn9FdNhpGA037DA2Yg5nVQ4dIpu3d4iIAdrNpBu+zj/QpY4iOGOA4BAQKfTQwd5WiA9I1egB7InV3w4g8eXVuM0iPxh1ddBfpoCO0RD62jQ7uMjhT3I9QeajuCdCHyDZeKZvifsRY1KNjhr607YEAAR11fyZnsqv+VwBdG6/j1Hles7ZdHAfKu5i9iKjdJJzxxjuDZVEroYeef7MrgluWM3Txoq/MObMDlGCgVN5JxsFKD20ztTaNJ22bfUacOJtou+GsEdmxeGdlPxy5uT9D5yavKupuRbR7wDLKDIJzXDO9UfTejI2IFgyIyxNspa4G7Lqt2wLSrch5XZ/krPooYO/Rx5bO7AHLEfDW+hazM7SOEj3VI8ORzGS/Izj3ouqtTQRY2c5mlNPWkP53xjhmZTKR3I0yXidhAcoea82jY6adI+CxCh3ZUDDlWkAygnZ0koyOhQGPzNzb4jKcLj3fm3Gw/sMCtZH8eo4eTW9WTtNXO2CkXtR3RH9vTgy4XxrMXyq6HNHp6Hcrss7WR0YnWTKjdYP1by0bZwT9KGeH6/eoq+FOzorPKRBF0JkB70XmvOgKGmfauO8x2KwxXTqSzOQmTJeMNhPVqAWmLOM4imzr8Wr6Zo17XT9rzIcOGA3OnQ1ZdHlTCOp2+TouFXGwQHePTCFvrcyInvOs2QicxUe9Xnbj0xfoCZGMTTKig+WEyYL1a+hTFiG/LaB8xxuS3n7JC+OoXlI7acT/I/yLdJO3f8yWL6aLrblZYD26PO4Ircy6CF51Cqo2kjXw0RlKEciK9iALPF/CGtOK3cmu2t05kiG8BgAyZ0xfl3YwLRrnGkUQM+PR/Npspk5lxivmXKCL3ngKb7eZrpUtYBrJizVGvS/riLr0j/wWB4nUk3KWbO8UrZoHsyUwg8QDgtGcs/xm5W5Jdlf3FPS4MwC8u4NkBUcPnSnuSRpOKnaJLWHS0O5nMxFA94BB1YmJ97Mx7bLtkYn3dLWB5wFLFs2VfmYbgpu9Vp8/NzY8DdSyoC1Dd6Rj3efWTYmlOGcNdQTjFh1ZpMxcJWv2QW0bjLTKO6Mis03QEbspo55r2/RD2qfOBHVZoHeDew8fe8pSuwudE4rP1HFCNtPM2sH17K2brCwd1ZrsDLoAc/zv0b4uUZ9F1PFMe08UXa9F76iC1gXIR0sfz5p/xkk7q69MO7iOq5zDvSGZdmiZKJLoNRzVxbRhbTBjSnTpZ8SItsB5EzTjgs5KxGGq7Suioq8C7PTB5j86HJlH+W/v81JRnxaPe+e7MwicaDry1Ppb0/goQI1kGcF3jwNExhb1sTHM1j9mZH9EPPa+Y/Q8enFB2hpZy0fGadVl0f/sHGaMx3KqrG2f76DPIHK+jZkqP9/rC1yyF6Dv9ongvLgXnbOM/B7jf6T9Hna7wAZufrciONFZx8x4okjVZm9aV1GGvj20ZrzH31p7Loo2zpERQmxsC5ayf0BjsFv5q93p3Ojfc/lUhq+sjJcZgU4RlrJeeVAMk9Wgt7IapG/WJmZz6LKRw+uITPXQTEfVbyKazi6Hs8ZvXSTXM9+RspEsRbyM+rTAeLX9Ew7YqP1LfmfrX69vnQIvemHaeLyoKEZ9PeDIgA6CEi/iWRmlZgXO0/qFGckeIXrAXmafkDH0tLvZENUza/g78wzr+WbSkyNHgrdHaXo3JUvO3c8SvMjj3bOfYlmWEaF5p48UWJkNMj5pS9+lkAHoekzCF8/7r+W/Z+6MH3pO3vfbHFG35pBZBzLnWc6FiN/ladnzmbVZmiHVztElkurkLPScAhFA99Jvq+5V0T0LLEg5Mdp0Pf3N44sHlLEeRtOx31H+Y7qmtNOiwsXWWS+Cw6ipdUHckRvfPTrq4wPRfKPoqqafxXNG82ZvrBvkJhvCOtenL4VD40W+gdzpSMsoKGCXR7HMB8bXShM1n6MR8wy/NG0zIKtn/Wzkev0Dj6Nk1200F/nOnlqL6t6Wi+EqLVRauzVudpu7PLnGnl6L5s++e9Fr5szslSNzbsmb5XX9jT64wZ1/hgN1hFfddYRGDNRZjUXRR88IRrBTBX1/UZM5j8jAbopGlAy01CsTPQAe5yFOkDIE5iBhk9RAJDNXRjsEkegM0d8zfGfj8Oqx/keiztb8I/liziGd+q5lQNOmd/F4tO9ta0Z5tH9mgdoZY9Nt4BEbBPCznA0ZuSVZMydAn81wv71elXzd0d3D3iKA7k3ZAqxt302k5mpA1Wv0R6AjAo0ZYNPD8l3UcZXmDNCr/Rgp8tY8GAhHevbSVMpb6bOat3XI8LRStW8ePrtZe2eAGx73Rrf1O+6lVS+vtNl8Y+ewxdYr4xKDUo+zx4hDe5FkTCBva5cXAOsoW0J3+d2KkpffsxFtth6ydVEOZq8tYUV0SdxNRNLbmnBAugfg8fK4KOXdA+GRvmZOVF0ny0dP9zNZ1XroiM7v0ceZstFZdFnPU5xuGRCHg8YLmaqCzcxMRY1VNo1bk4FDpUPNuiPp5r20yIBT3EOtAUd9W2BOg5WeiKLQ0IrkahobNkCS48+K9YLirsYThTWIi6LKZawod9IFgtbM3k2Nh7XBm0YXnvzcVoDeNl7g++yjIJFY6fWv5OAE6BHh5n6/6SU0dzZ3oLUjAD2angWgPeM9AgQI+qyUX+wjatfcy50z9rKx6Ci4bsd60qcndTLrhJB+MUrGftdjzKTBZ2ljRcQsg3yTDq86qbrY2oy1ciavxmzoLw4S5zZ7Ty6ss6vVDoQn8/Qt7zNufI+yGrxxj8o68plFXHG9WbIxmskQ6RQG0OWW99sUUd/RMoiwIyhnEfVMlF3LzdOXl+XBn1iWh1/5DcuTL/zusrz5fFSWfpwlOxUnOMef8NtMh86Dr1yWLy//Qp3sy1/4PyORat/T59IjgJfu0SmIBmklqHpT2jPoM0DGVOrqgxVdbZtKYqLeWNgcWdsZBwD2c4RHelzMIs3QN1MmIh9zaEcWskfTzea4/jESLfdkRzshPHDOIrGaz1bmABtvltfaEaDXk5a5GXyL+Mq+Z51uI22P1IkcK6VNdMSwfjw9leUbk9v1txOgjzB3vE6kfsZbPmtSCmQBOkZxWaQ2Q2IrEoiGfyknUdisoWdFbqouToC1zPijMjvDU11GpJ9bq/Q7eFGRN1+ZM4uIHQVPmQiZprnQbNOvTmMTW2GlSaMxAeOyr7Yn78o5JAHq6z92diVolQwo9/jsPa83A5xj3160stkWRL5dsNXpscf1H62D8n0W2GPp7/g+OjuPfpPR9MYXAswlms7+m6GrV6aA8pfe94PL8sq3LMsrr+6LvvH6snzmp5Ynv/3J+i2KqPeMJ6unLd3EdEa2/8df923LS+/9j5blX3z3srz9Hdtq65yffvrZnGs/xj0T1h0Toa7OGpvZcqLodPS7rFkWIRT9htYTe7M7A0CsPhJOU5NfmX4bc2RDINHVnnaswVjgA8GtgCbsU/7Wl2VZ+jTDb88ZY1nEvXTQfdSFb0Ta2XizVnlmrrvNDe4HwMwEFqmVfnrBugboFlgfcYpklVQpZ80vI0s9/cwu62WMZC78671YjukgPaeVTydAn81ov72sKrjuqO5xb1mA7pEgivLudDJJfe8lcdTnSPQ+OwaaYsoujFMbSHTWPAJ2Uh/BWnaes8ASGtcsOi5GPwN1bgotGhFZhojRrbRHG4MG70573sVwO/k1vN2Mx95v1U6CSLw1RCpzxhGSiO6sj0z7COaaPe04v2bKXbVv1uMTGrTrm95lTFYqfKdIHSqOALynMRZRr2tPvaWu22vA/F/7gT1AZR1/8fPL47/zSo2qW9H0nvEeLTsaQX/wNV+/LN/5K8vyzq+Oh/DFzy/L6399Wd745PL0C9viVraTlNqsUwOIZNdyPFBRaHDeu/Qrhm75t/yt9ZFlLEeAzgJmmHLdFj05klUFND07uyCOBYGVBZgndF2bsICmOJVnzDEaKwOKWfpGvNbtIH+tPThqM/pubmxKZsQBxebJnCK7jTm42X7nuYf1lcnUiPg28v3IMZaR/kbqsIwHdCrUDXqk8Y464Mw6b3HvoN2EotdQfROGeX+a2AH0zsgao4QHGi0jv+37EyTAitLrsR4FDlEEBtPeWWS9jOeoUWdFVzFjAKPm2aMBmi9etC1MY1eGz4b2yhja8cTwZqNztdIRL45bB+5lEPSsYpbu3mgDT7Nt5My4NLCn72xZDcy1k6TSR1++pzJKMuuXtVvZOcHRlp1btty10twzl8J5Y46eXzOB+OMtSC88ePiNH1iWV//THEiFQb313//7y8N//LdbJN3KNIocoloemM7QANyTTdTdLg3f84Fl+a7/Nisaz8sVoP6Zn16Wz3x8B9RxTbOnFo/q7NoHgkABfzpFWM+MRX3xN2kTz7o2BbkCfAH3FuUYQNbjAiN5A8pHgVqWi7MjnCxSx3iRcYKM2k4IOuAS4gAAIABJREFUihloFvr00NdyNGhaW44Z1h/KJvLCkkct74ze5bvURdmSb968o3lafVqOIJTFHppn5VivUZljtu5tKceyAa48lxOgX1cYJsCz6w74rvdWATpuLKMbDRCjx6gbjaBs9prEk2+6/FGQbto31rl18C5idLXH8MvStu2zanNlxrIY2Fl5tkAb8gPpHfVT21WV6h6KN7sbg9zttxr8B6A0mje7TMp6pknfMYBl2I3R4Y3/mh7waoKVUYH82a2v5Br3+JxxCFh0vdTaw/6uBdgj+dmsizUKrm9wx+94uzs7f/7wT37D8uBb/gueyt4zoF/8nuXxP/nkLpKeacLTQxkdIX2E8gqDqSntf/HXMkO0y7z5xrL8zicqUJfz+dm7JNjFn7WjCCz0jJi1hdE2DSa9S6hGQQYDTAygY/QxinL3pCf3RHWPzhOBUxNQyA7wQHTE46yMWHQWK9mba0TfaAzMEj9KW6SL5RzBSLrul+1b0bgsgC7rdWOkOHy2ykX9e/KA57glKl3qYDQ6uWdH4jf9+8hZdDaXSCa1fl3LngB9OjfdBk+Afl16L2/+peXp7lxMxxisCK5leG0MUbiFOxOFjQz7Mh45e4rtjRqDVS94Fx4F72bjpXB6HGLUYYp7BoDjfKxxsrZ2Ef3OaGgE3FCEMGpeDVxc7avSbWXlfDlJPWv9G1ltmz2ZAPVNFC8yJtczq09K9NLQUNbN7RZYn/G0UzayvZmr2hgjGcNopnd0ofAbszREBrw1G63nDlVUi3pn03vbunR5vL19oxshlb0A9Lq+Hy3LNGAuHX7pzeWtj79zefBHax+JXTgrO2x/8MA4RtcZD8olcMsH3xjKGKA8/eLnlye/+0vLw3/8UTP1nUXSLyofnrGq+cN0F0a2Spny/970Uw/YtM0HqIDe1YsSaVJKfWaM6AjxgBS2551Pr4qTDABBuOUAGQWHLHoc9dHTlyW/KFNaliOaRk4Hj4/eeHQ91of81jP/jExJGe/cfU87N1EWM0twDN7Z9QnjPQH6BCJ2NJEwDTpaO4uGFNgB9Ct66RgA0AYd+7c1oSiSg/UwxTsklCpgARd3fyiSvUo3A+w60srA3kh03aOvjPUoHap9AQaGFdXV9GFAVwPzWhZuX99F1o07k5rtiNpEbbT1nxO0jXXTu3enQA8vs/LuOWE0INrYIpq+CeCO7WTAVM+6Gi3LzqXrtm5LFD16ak1AeBk7TYH/qmV59D2fOh4xJ4R+8g9/Yll+5aPPlh08nTiyTiIAX+dInJ4Znf/gA59Ylnd9aFRc/Hqf/Zll+fsfNiPqR3Vz16AjkC4KEaO+otc8/Uacnm1sEbjS4LEyUs0qAjMRyLGcAvh7FyGDwuK8wLHL39K3/hvtJA/YZcaaiR5qWuv+PF5uNt3EGe22eUJZj/5HgDObE8r1ZtMiThnkk7lpGnKKMoz1I5nN8BfLsCMrUsZypF3RNg+nxM6kl0r6Dgw2n8gJE3a8NfpOgJ4h2LwyE0zmeYN5EVqacUlchk6WwWaBh6hNK/JmgdLsGVzWbsbYxPF6Z9Qlerw7iw2NZIGcNqARLG/258S79BHdo++e84JFzmhUVowBZQhWWuHGpTZOL9iTcVRE86p7ODlrbqWnI0Bnf8+IotdxAV8ZTVk2SRZ4ofxbIAqBHY7tUoAeL4zTt7fLv/V/y7huGrR7N7nvgPrLy/LwW398efhNH8mI6ViZNYr+8K3nDresfJj2cOLIkeXcK20yR8HjR8vy0t9kIcexaZu1VqBeLpOzsmPqGDOXPGbBFxuM1oXl39rA1QYwei/FUEbQOWLkZ6KtlRjrgFj0F3X6bsN0wGNVJORCL91mFqSOiIk+H23NrYeuGvBFstELjIUPaEmjk8GiP+OTBVA9mmdALUvv9s6il7Ehz8W5MsJXdCyJnHltZeY1MhZWpzfjZVa/ve2wYyHWnQ118+3tAMqrNXEC9IO07Kx+AvROgh0t3gA63v5qbTgdG5EX1aO2iJPynjEWEVxjJLfqX+MM7wgde4B7HUvpWxlYLfoK33qBG85pt/cGAM4zsCO6sL4tkG7xY9MHMwZlXwZjk9o2cl5dNUptQ9icaURdOwBWcB6lZHu3QVvnVlNGfsSI4DsD8Zk1Jc0ykH4pwH1wqps099LWbXhuzZuTpLrrNPb677evT6Zlb2Y/SLi3/qtvXx78r7++a6XXiRo5Y3UHvXI15ex5D51URJ0dVylNXWP97pmSALQC6CU9u26AxuQj4BGB9AxYi/qI+OKNvSmqqJHO7zJvPPtfmmH3Acj56cghsVkE6x+W3wnbQmeMnrt8y9A6cg6wMTLyoRPIIrEVNdZOD4uPmgbaBu05y4z9eDKt14qenzW+DL0zoufdI4H1J9jomSENl8kC954OwEFzAvQe4h0vewL04zTsaqFdEqc3HPl3+e9BQJ4ZjGWk9QCITD+sjGd8ZgG4V44B86bjWYqncyN4e7sUJpKJoJYqmShqJr01Y4BHPMXzypl+67T1uXT1BrrH/10Q4qCWsd5B9y6Hazw/6j0uJHi6LE8Tcyg8QD54EctK3vUOB732MtkqUhePTCCftRyOrlmvHr6Zbr2hfom+Z7RZI+vylvmVgHkb96f+xvL4Nz6+mUaPDs7qS6RT5GAU2ar//eYfXJbX/pMZpO5rA1LfU5V7AFCqwaAQRhcl4qirFSAhUUcrNbk4h7Se0uV1WxmAg+BtNNKtwRXOc90XrP1xF9nP0toDlDIGHcEdnVtmPGz+bVMhDcwCjODIlj141yPrLxqD4Yzf3xKr5JG16QFVtgZ2BgE8GYiTuyRfI95PsBeiLlLfvZR8aSBTRpdNdewXOgH6BCJ2NJEwOztaO4uGFNhF0MMa2wI9RhmLoG72exJBF+OMpkJ3jlXaKv+N0nEHmk5VobeByyZibGgsQmNFqS16WoPTPLGMcS9qbPGUAXRN9+yRg2aDrJpBBw8oXdYKLSJewKycN1f/bvJUheJZJTbPKGLO6Ir3CbDz6OYt0CkpyhViaxPBUOO544hDGUEQrkczsk5HaJyjwN25NE5S3l/6s+NPpmVpYpb79M8tj//uB+tnS07SjjRnMJGDj+k2kcGLnj/PEDBIfb+RaLroMIzAWkBWykeRyKZ8tVJ1ziZvNh8jJZ3ROAJyEV+8eVbFrhrIWJhZx4oGf+xsrTevbODDip7j7zjP8rfOnIhoGH1n0eeoTu/3SF5Le57ManqPyhSC92x2QO9cM+V7oumZ9maUYWfPrWM38ju7KC4r/8GYT4A+g6n5NjLqM9/aWTKkQL0kTv8PPXaY+h62OFbAM9rGWvRraUPTi6LP6Nt9M72ARpLa5p17jMbkAbONDeUA06gP6zsC9gjcWUCdgbY6r7XjZi+s9IuOBVg21473xsZu8dCkA2RCWCBd6lvjP2LwRw4XpLH8vZGfdf1HjjgG6DLA+9pp8nhefVTOZ9UTYP7o6yY9mXZkYAqgMz1Rfsvw9MgQon5vHKDLAEnqe+YJxSm08c7p4l6O+kxH0DMXnUmZ3mh5U2zrPyzAlAFSHkiVfvTGYDkqSlkNNI8AWOSBtI0R56xFm6GDpinO9xL9bBaj4ejw+Krp7Ql+JqItmQr6CEFVSM4LBVg2WnyMdxm+ZMpEfXvfLVB8W6Lr0djL90mAHLs6AfoRweqvm1Uz/S2fNSgFNgCdeboiuk1aeBkAwIZyKYPRA+3RWNs+6jy/hoZoncdavvU9QQFnx1r3UuOptWyK8055qtXMnBDSZ91nV4ODRfTLb+UccTOAwavNnN5oy3h0sIBsJPq7+Sb4rW99720/U76kv5fIiUVvJnfIB48eKCNWxNzjp5UGj/MbWdsspR3bvU1Psd0KYC4EAoCeiXRnZDIqE+koLXO3BqDLpJKXye1o0BOlJQ7cTXsY3fRSTRGg6ihXVcTB02UWWK5KhETNNwpn/QO9rLpM1L9W7DhevS/IeDJzigQU5yA01MGLnZJZf7ACHNY8tT1lepUJHTM0zdIWN8/dRgdy0tuuR28mQ9oZouVMQLu0F40j+t6zJiOZifqK6st3vEhPfr9S4MwdpqdnrG/WfHBe5e8IW5QjfN9v3qqRpfBZroMCJ0DvINaMog2gswtPrA6ihXNwYFFEm51rHe2SAQ4W9c2CuJ5Ia2SYtn2SAfVk5LiHLlYUtI1jcHVG4BjBZEhrFs0ZNMRaX2pD9aK6LH2dPbW2s2kM8G49r9fDt0xZ5O3G5oRMCjN7QYzACenwEfiOvrM5R8+t7Wzohzd3gdyDCz6ZlpEHWsaIoLP1P8If1ifTDV42xq0D6DIpiKgPOeIYQIhAb2OOAsdoHJc2yv8xPVjrc/1dg4ssaNHj0LoYgSM4V4dl1aNVbySUgSn8je05SDMBjDhHlv6OE48AHetfO27QccII29vHbhNTwJzxUbcf9cXkFn/z+MjWhfym+VDaRLvFGxu2OyygCWdXpu0eQIvtXdhON4cfgfORQKDR2RlBzwjRvDKDEGDeAF60ltolcbho0DuM52EYoZIKQRtlaZBKJGP0zHCmfxbJnSUbFliqfbJNae2YpjurzSZLSwRnEUDuMcY13ereqMCf/B1FUDcOGJE7bejBO814cVydHzEgLJuu3q5P3n6uv7ENfiUgu0/Ak5HomTbrybZZctfsn8RrCYwemn9sfWTWo+Vc65GxLD2saDo+sXbVW97ffoUn07IEwnLkDPrORh/YoTN6CcswJ22RkYffc8E30EfppusVoP47P7Ysb/xee7EjOn7T1W0vYGagR4Bl+SZp3gjgLbDlAUEWxQW9XYcjMtQL6HS9zSYG+h51thdd7iK+U1jThYFpqZoFrlZXFlBHmmb76ZWnUd710hnHhUcKrOxCbYNGTgSUxSzN9Zry5pXlQQ9tegJpPe32lh2JnksfDEtgJk9yPCdATxJqUrGB7X9Szy9oM7sz6EgHpgizl8skaepFUTb7sAJ7LMqC3Y0a/Uci6MkpdxXDaMyRc8l1TwKApgcTgXWs3zURUjiKoDW7Rp5PU0C6fktqjCYva4Nt7zTS+jdyJ0cPEinsjB6ZrAqMws806tFJwtbUbtxJZ1uzVcARo39nMjW6No/KG6t/lTfRr/xk2hCdEgBd1j9rf4SnUXZN6UdntNzaCDoS5I3Xl+X1v1KB+ka/qqM6R/X4pmEPaGmDeLP4Hf3Zuf53juWmABLvlzPQFwmwBsQ6ksz6lX0Cy/VEVpFuGvyVbxpAelHYUg8zFHppjXPE/mZlKdDNTP1oOVgwsh/x0vouziNpj537ZzaAxVekc9Y5gUGTDrtjdOqbegyUe4B2VJ6ODtYD7XqNSD9WULBjHCdA7yDWhKJJc3tCT2cTlQIVoGdSUhi9soogW87gSRRdCVNyO3nNItwzIuoRUNtEjWAlzDLmLIOYOSWaHYBjQZAM9NUp6ixajuywnC1WFNc86+hFd4gMbOi93vBe917SDgUfAx5y64m20q/F41m8t5aBl1KcXTrMCRA5gjy+Nz5kBwDlvLPoLBVe/1aamhZVvwvAXGgXpLhn5GeQXalqRV7uDECXGa1A/ek//b3nd2is39q6toBCFkCkqAdnxJtyJ+nvAiJ77kBh0e0IqOox9EbTWd0ImA7o681eg31qulsR36rI4CKzwWihy+ZMdsFu44WL37JyxNoZrdtTD+eosz+q0jaeYxu1Pz1gjrIUyV7PPL2yaKtbEfXROc8aJ2tH6xPv2EfH2E+AfkmG7ds+Afp16f0MoOP/mBLQZTJnqgbm0RtNkS4QPHlniPWwEAAWI12n4G72X0MyM+mbHikaSFFR2sIRjDo22wCMJjHyIhDHnA44P003KxW51DGBszNRzzGAIF76qLYNZE3surAMw0D+mO3bHAsjhtyAvGuesvT2On+D3we6q1WjqHqThUKLdQxZHrKxWf2F/D06UaifBe6l2lGQfqNPpo3QLXkGna1X1t1IRF1kk+m/OwnQhTAFqH/mp5blM58c4UxcR+/ZqBMZUJYyZS9HIBKl0eqUcYx+s2h2ZaqaQk+EdZYuZs5b5hTw+mObBgtuyFylvNKhLXoudC9lBJDovj2QoueCtMwAxSxNcb6WE4Dx94glbzmmtFzqeWv6bgy8wDGCdIjmy9YV9ufNO0v3eLW3PTlT9NaW8fSMdQkerIsToF+Xu0eW9XVHek96MwE6zs/bMDo8XjPIZqVF67ZLmXrzd1KiIqDNovilv1EjFOlA56TAmfluNih9BtSz4N0yjjEinqWpN0eMrnrnl9M0ZrxWxqRlI27kRv5Qqe/MAZShgb4AbtOHkTJ/Gy6M0+A9vVbLOnv0rLR3RCL6dkmw7p1HFyBe/lv+h9H0NB3WgrfqZvaewX/655Yn/90HqZMSHSxedkRPl6hzPEfOnTiDHk3+zTeW5VMf40Cdeg07opwWsKlCvQJB/W9My9agMZrHTrmvPzCAngF2FliuApIcjOcsQOXPAHtVYOQ2+kz36ARBOlj0R1Cux1n+7bXrzQnpKXQczVRg/I4cLTMAqeeMkDlpMCflMbqux2KtE3SkaJrhv3vkMiM/PWVYJBp/68l+6el7pKx1xAbbYmtE9BWWXXl+AvQRhozXyari8R7OmhsKuGfQ8YxIqWmB8QuCdDTcMUKeiehmo+oe+M/0kxGvzWVh6jx4pm7dF3S03UmNzrYXlRsxxiOHR7ZPKw1a6tN+LOMr6lRFlqVokxu1Ie9kSW3+3jGGTHq7l+YuvMdpRA4Yb9qZrJVS38uo0O1n2rMyJi4J0C0aeO+i90bQ7ywwF+IMprhXuVx37rQzLbEWWZFbf0lcdl4eUI/a8ADvZjEGz56J8SsZcQiGtJEvOi7a5y1ApfRnHaKOwsvfCEYjOuBcrXYQLDMgf9TytJwreq4yXn22WgPJUecA0gl5gPPVdPJonM0mYDw/sAfvhoS01X9rJ5OWMTxGoEG8yD3KC8qA5zDDsoxWkQOjR76xLMvc0ED4NgF0qsgVltC86jz+cQL0I0LUX/eomuzv8QWv8YUPLU/dS5LQq1XoFW3SB2nKoqtiBEZAIQvEZYg9BiUzQnvqj5BFv42uIwnZ1PZMnxGoyqa0en1l+rCi6pTGxAgpNBHAVXkFhkmtosG0vixPBs9uONcbv6p/lPfsYrgyh529dcXNlkVKqx1Dbrk/IltWP5k2cTzZOlE5jLJnI+m38sm0aLLsewKgM4fZqGxk9AX2d28Aukz+i59fltf/el/quxUB7OU5A8SiM2ft8dZY0cnAAF0UgfXokKFRBCLRiRDRF+nJADeCNqmDadrR3GVP0mOMshD0eLIAUxwIu00JMjsYP6uiNjIg2O+Mfmpf3mU34LfyN8sKQUeT3s9FzrOy1DNPJj8ZvkZypucpZSMbYdZ6zowtU8aLqmccDWcEPUPl6WVOgD6dpH6DAtDT0aILAfYo4spSzL20aJx1T9loLFW/r5I6A7zqsVrRdfZEl67HzjA/fGSfZd/0SUCpzJFlK+hv2oDOiq7Fy50NoGic6gc2+N2eq8E5sS/Q1ml8Xj/U6oaGii4AZDy2ALo+d34kOp7lB8rCRq7IhYCVF4+fGUPWWrGAHJMrC+BFzriR+bE6XhS9lJfU92oXaUPoNj+ZNkIcleIeVfcyjUbqWnXuPUCXieuIuhcxNAmVTIWPgKt2bFbhh6fY6gJelmVd//QSNSmDYAQj2ViuFxALLTwnQAYkRwIbfUdnsZ6X/Lv8lwFkAeazgNtGmZNMBT2OaF6Z78zJwxwFmbY2G09wtAGdKyg7QlcNTMtvMrZepGGtSeboYDyfTXehFZ7jtujsAfhrgHcW8a8bqhFJT8rLGUFPEmpSsd5lM6nbF7eZ8Jk1vYi0UkCSWSlEB0nLIm3sLGs2mpkB32zIaChWHZyU1p4+d+CVPO21iTSr77Oe5vIAdBT5zDhCeuiBvDBpXm54FnvEiiqsjTF7ivWD6e3e0YqNXdT5HJuX+l739TWqbvE3+n5wCe5AOOOB8FRoJBcuSt9MpuRbNgKbXeO9881eHNecmHfpZvYeYiQi6KL3UAdv5F/pxdk8u3cRdOSPkfp+bUddG5YA9uhiWB0JFpsBo8VWBNcDdBoYZUGsjnKisscIqAZTmbWigR/2s9tE1CVl7DK+phwJcGRzje4IYI4KbaMwh4n3PUMPnIPQ03KMMJspy9eNkiHHNzDdvW6eK9DX/UZOqt556356MgZG5q3HhqCXRaXZMdWe+Y2WtQA5tofj81LciSPhBOijDBqrl4Q8Y42ftfYUKABdR8/DSHrG42XdwDjIgGy0GiNu0VnX7HC8KGG2jUw5Fj1H8NYTXUWjbhQYM/qLoV73puDZtczcM2UscG4CPMs4Y53BZln7Aq+8BdCZ3MlYGf/08YRKxws4WTL03Ng75C6EjSOoOEDWMjJfzGrYgTa1oVplWWaEpqeWs945HS2vo+VVL/7xZXnw5354efTejy7L299xtPnbVz8J0HHgnn6YnQVx7wG6EPfIGXUmWdkosy7HsuVY9JyB3p2QqB+sSLoU6QEumb4z9IjAth6bTvuO6Cr1pJw+c67HZUXXRy1iC6wjcK4K9qAqwr6ifbeHv0yOmPxsNjOoJPPDaHrGOYFz0fSKMkJw7JGD5CAb5LWV2kzkUNN9XSOC3ju3TJp7Ed0fOCy9vSN7ocsfVRUvNPFGJm+eQbcuocCF710aVwZkpNb0gMVs2cjYR4CXadcD5+mI6shFcHKLuKIfO59c9wugMUt3Z9HXaP7a8EawZoEoBOtHwTuL2Ftp95UWRYOsm2rrW2kVOade21C/t/mJs0HXKb9pQ4sstNJePVJAzpBb6xKBuVcXLwYcWes9dSx+NzJEMi1nxFbCWc6yxrO1YZYdUz7NBnpVNT3cpq8z+rRz6O/5C8tL7/9by/LOr+4h490qSwB6pCO0PCCf8NsMYrwwAF2IhUA9G/0bAa66jnbES2pwdM6VMZiNg4HhKOJqRd9HhAqtTCvj6giQFNtH2vAuwpL+JTrfO1cGIqtiFaUKt8Hrb5p+bL4j8ubVOWrhj0RmdeYBgnSkRXa+SF/5W4N23VbGGTAiy1YdBLi3DYSj8w8zcPW8rEyBE6DPlJhUW0eXb6qTs9BzCugUdzd6zhaUbEKaoKgIJiqGCKxlIm89gJGBFAEUDDCMtj0qj9ohUftevfPt34n0aGpTGWfStcHdM1dvfgwAIN214S//Fj6kace8/MYrNlZAoM1fMucU+Kz/hA3ZOpceZUXUppyb+s0n9wxiPHi6LE9Bs2aAVwTSPdmxoqp6/WB97UDzshLSPB8oiOfRH/zJP708+vafWJZXXh1o7Y5V6Yygo/5B3YjrNrt2UTZ1Pw8+8IlledeH7hhhJwx3dkQ9AjoI1ssUMns5ghIvyrhTAOoHBKkRWLaAFfu9F0D2AmbGbsw8ZH9n+vHo4AFy3LzIfmVe6GaJb9YJhOUsK1+no0dRcjYfPafSR/m/PlogbVpZDN488YgCo5+uz/ikf8vw+qja6E1vz6zvo2Py6ns6yQr0nRH0S3Jk1/YJ0K9K7mURgB6mtnubTvl2JY+dB5pliBits1LfS1sZoGLqbSWtswDrKPutKHovmNNG9s5+0oAU/p3NJhieHzgNtPGPfZeNuc5baxNiJOjAQ20Pgg7NBlgLtkCL+nvnJFHvp7O5tvRw55y6FVmPMiU29kGZP2xqDKi3ORIQr+fvRbbxvLnmTYbfI8D80uvt0de+QMBcmDQI0JmeYBkTGVmIyrxwEXQkSAHqv/OJZfnMx5flzYBa2Wgg6knMAhJAg9FBAUCPyAV1YuxHYJgBcQE/WilH6cERQNfK3opy6n43ynT9AwHwTvCTF/XpegIk5TehPXOQ6HoIprK8RtriWBhw7AXOHi/opkjS7LOOCG8JsA1e9kRvnpoXUdZINFfMDEEZ09kbkfLLfGfHUrxz3Zk2L1UmchJivxpjlG/lktoToF+KO7TdE6BfldzPAXp3tyztJFIE0ffuQTyv4EVddwDuQD9WVZZef4FuzCYltTu8MAw2PhYF6xk3m/doOnIUTZdx9YLiXarfavjtnD1gh1WgL+nthjMmM1e8rX1jE62bDp5LxzKZZ/WOXCRl0V7GYQGuGUCZRUz1/Gf0kZbpdy7L2/6dT92NiPmX3px7Fr4ToG9kVDnsqg3KniucsLtPB+hvvL4sn/mpZXntR5flHa+kxeTGC/YAdQEFVlQSo4060qjBirSj+RhdXJYhFIIcBqYRbDXFRMBd5BRY9X9tgpW15DQCU9KWTlU3DQbnGREEkayN3mgn0tRbi1G2AhsPcYC3O1yw/AQ9kBGrHW915Nw7j87G60X0PecPG6gnRyO094jBHAyT74hK8WJmIYU9HnzsPIM+k7RRW9dautE4Xpjv7Aw6vTTO8nZhqpZQrje9ZhLFdWotgkcG1C9p/PeC9pFoPktrl1CwRJF1yvskMj+zbQzQ2mynwcvjRsBilxNGIuzFAytvo6/GmrbXtDKiGWkQLdey1PPsmtArU0ei4gyMZ38bkQHLkdMr47pv5miptvNqwGwyINaK1nrt/R1pUC6Ae/itP748/KaPjJDnunUKkP7NDy6PvmeyI6EToOP6F52geaF5OUPXPvzun12W93zvPHq/8fry9BOvPdNn7/nA/QfqFuUQYG0WqkoXln1dFOXIPs/AYjb9twfAeNFNFkVnCt8CWLMtVQTl2vEROQYyqyECkVFKdtvUwSHCNkwrasxAbrTh1g3BuciOya2ea/m3DgzJGHRWADo7sD/LiYN88cbZUzbDz0wZZptn1muv8yczlkwZjJCXOsF4zwh6hrDzysxWe/NGdk9b8p5Zo2nvUVqKtaCutOitFHgElJqdXeBurWhFiHRE1eszEqddVFHf9F1WybppCPjWF4w14EOisx7A0wa2jM+LansOBS/KPWqoW7ztjtbpTV39u7Yj/CWvuFBbAFPajU06O2fNn8YDxUf8rdqXl9eXAAAgAElEQVQvJJ09kq/oewVfT+yz69oRJnLjOpjI+megH0F5lm7RfKzvd+pm9gImf/M/WB7//u8uDx4ty6N/7zIAvbxxX9rH/1m/YzmUDdQrzPGS5d8lAXpbW3cVqH/+U8vy9z8cp74zYrOMuKLLJBqMl5xh2nv52wLEFnMZaEQLEPVpD0D3hMoD71Wpqo3Aaic7FuxLAxEEqBo47hZgZyp4RPe6MFUh6oU23m9vi4Wk9UfOHssZIOPJ0D5SGGIj6eMajA8yFtmftMyLHDBUwkC8Ls8cQIzees5ZB1E0d/yOQD1K2+9t/9LlSWp7E78zxf3S1N+0fwL0q5J7WXQEXQB5+jx6Jnp+wbR2NPzaolWgiZ2dzRj9mTJe/5qNR89jdgFhfblY1oA4IHMIjqWpkTlb84yAOQN1TBZCTRPQq/ZTzmqj7QZaK3L4ZC6Py55D38jZCtTDYw6d/Pbor/mdjXh7kXPPsTPSl7WO7yow16x76fvmA/S3fuGDDZxnAXkkTkxHYJQ9C9ovkeIuEXScR42o/9kfXJZ/6V3RFG/X98/+zLK8/uFl+YJSVCyqmRk1Ah0846ojkl46re4LgTk6TBEootdU18/MgZVhfWqw1DaQ9R89eykD3dY4sawegwWepYw1LxapzpRFukYR4VFrnTlHormysfQ4hJgzCPktZVCOPTpEY7BAt9XmDOcE8jpjp+s6VwqmtS6joJ8UJI6GM4I+qgDH6o0u+bHezloNoHe9hW7RLZM+w+peWCFoo79074FvFtXLiImOGnkApO4JE6XcekMbI+rt4jTYfGSs2ShsBkQ322adZ8/RgoxjBPkpPN3YgAQ0t7PgjP4GTzY2i9qM2z6Kl9c5mzmbWyatvcoMudW90Rki7FGWREaetZxiVgijsy7jyXdWfli5zLrJyM/Du/Jk2hc/v7z1y395Wf6XX6csuzRApza98byexS/GjxHnXbPRLpjibmKor/n6ZXn1J+/GvQR6EhqoR0CiKRMVEdWRKwTm6HhnEUUGFK1x9IxPxsrATASm6mZhcBpBu5T1HAI9wD2ym5AGmPbugTq9f2VoyQCrB5yPAkcEqkgL5jCxQLv8boFulGULAOr6Fj2scbJb3bFfNqe6sTo7sJXFkN20IxnDdSzltQ1+YXu8ayoss0edoT/PoHdR83DhidDl8FheiAZYBF1PvCuarhd7s6jU8yzZhZ8tBxyyIjUINpoedQBkD/OjCLduK4quZvvFPht4UTeY6/R3OatuAXXWbxZM7fYwoKum/+j8pA3MiEBeZtsvdGj2iJFyJ/Srba5lmnNAdbSxXZiRB06hUaA+ArzR8ZJ1xKTpuBb0oufNCUTuJIjWzswzzHfmZvYvvbm89as/vCz/6G+7bLgJgN4rF5ZuYO1EzpUiKw++a/4Z9Cc//VpzmnqR/Qf3AaiPMhDBGwIaFj0XvSplvbRgugGRi9RGx99TT+vwnQDDDz1RZgaA5ahA+SagD9Oj1f7TNi1jnwmnOQLeR/vSg0EnBwL+CJiW7wLWPJTAnBx4Mz7KrrRd/qtlFu3QXrvUcyD00nSGI0jzg533Lt9xHffOORTAAwVIqvsZQT9Az4GqJ0AfINqRKvqZNWmnPJtU/meB8xC0M2+7c45k875qh0IYMe4jI3CzpxjRImpLkLT6nsh9hodelIqOad388Zw6nnPG57haW4lNwXOKIC29OVp88Xhc2rMyHtxoKxhgO6eJ2lhxj7XsG90fiyZHcpdNe6+2mnPmnN32nnlqrwe4l+faykbuRUJ7U5gjZxCTs0qL1dBj9Bd5u0vAfPlH/9ny1j/4+LJ8KdYIlwDoj//uBzcdS5p7Nt29Z70K/3oyIy5xBr0AdPlfZiz3AqhH0cdI/PAcdSYq6LVpgWJT4arGEvuUOx3s++hcsDM2hwgol+8C2jVoytzAPUoPBNF1gaq7BTLWeTSvttCMTIYe2mtgzWiuf9M0EecARmeF5ixbIDuviPeerOEYM/SO1qn1HbNdL3wUNTXMbKq7NHY+s5Yi68xClxTJmeO8N22xW9y9yQ2BdqYMrHT4DoCeYYIHkq3UXTHSLJARgS1t7FkgJpsSvNP34DQwgd262bDzyD1gLKJxlNp6JJ2V9R05KTTvSn0TOEvkohZaeyKRi/ZJIuhQVCusWkS1tfk7IGQkU1b0fPZ585DfBJwzeUdAHTlgIgBu8dIab+3vK5flbd/xi8vyDd8ZTevmv3/qb6SBuQz20gA9C8ot4nlOl2r7k4yKaB1c8wx6JBRFvpZv/sSyvOtDUdHb9b2kvuvL5DCah3pQ/11mglHfpgAAVEpEkkXXdR0NArU+rkICpMtGHhHs6HRx6QPb1l0xB4blRMAx93AbNxBdF20kPaeZKckR/3E+lgMAf884V6RtBMWjToYMb7XsoYxpkC4OACnD0IklJ9n5RA6QI3RAvlkA2FufTJYn2+g9y6WWVevijKB3U+9QhROgHyJff+USQS+gu8r9w2dRc/mfRNLl767IuTUU5g3uH3a6BkZYvYgvgnmrEy9ll9XxQGN6IlBQn6dmad+1T7Wa9Jl03RSebR4dD9ZDJwca3pEh3vbQjiyGujfjmfDgzoHaD2yym9R2gyCNtPpIgZBc030FIZv5qk3XugyuDkvd3G/KImyum7sHejfeA8zX/NZ6pPzeeAIbey9oRzlna7vqsTv4ZNrTP+wn/iUAulwS1xs599Z/pEf1Wo+ocIkIerkkDp2xokui8dRy9wWoe5ONIog6oo56R+pGz1k1QYCntTyQLvq7/DcLHCOm7ryuawUWWWV9ynzlW0Q7FlXFvqQMA0czAFPG+ZCdP/LRVACGA+YoKLUc7sQBH95HYMlC5Hxgzh9tZ2h5ZfONaBB9ZzTXDh/2KoO+8b5upNFCufD3yKFQMgnPd9AvzIRt8ydAvyq5n93iXteiAucsxR1veNeg3hwyS2vPbiZGOYzKRCmVETnRyO8xzKK2PcO0p24GqOn2NOhmwDyd4p4cZBQpq3sRRMuOZhB4fPeitzuQxyLphrGHe3K0R9fz/mXeqxHJ0rFNGVnXjuVYaTaQcXmcxeMj2RNsrWRkPOuM8drKpLLftZvZH//aR5an//vnkqtsX+ymAbqAeG/9W04V0bOarxk5uTRAz4zBlNO7DNT1re/WBJmBj2VZZhzbyyPQutnQjDcvWfSxF6Qzpc70P0b5V52+mT727YEobzMRGkoZBlQ8h8ioRol4YgHMbH8s2tw2MqMR7RSIQGkUtfY2bA+8Q7CjjtSTM51hosvhXLQMMeeHR9eIFta69Nq0Ml1Znawdn5WNbDnQQSdAzxJuTrkToM+hY7oVAei6goB1jKCXMuFt7xghZyNBz9wNLHbvrOEoeMSpYuRcjNI0cxIFGXjfRGUxoryusGtdHraxs+DN8CPGsGkkk4i7xetN/yoSXtsGY2IDTtcNuv4GA9nZXesPdT9F7aY22TKWh4+enS8356Yi6izlHc+fY/r70XT4DEA3jxSQzAZZDwjSPLG3nC+PvvWHl0fv/eiyvP0diVVzg0XeeH05Csxl9JcA6HIGvYDvyh/yHvpM6lnZRZYz61Ip7syRUJc5ScOP5n+nI+oFqH/ROB/MADpGK1nUTZ+bFrCj9atcjuYBOCG6VrAeoLQin4x5DHiaSlh9QAcBcxhEwqL3GuvfAvhK+/rfGjhqGyoC2pkxaXrr8r0OkExfSH+pE9ETwa/QQzZl/d2SLZTfjcGyroOsvcrGQ2yJ57fTEuNhtS02X3Dsl0ZJzMkmA5p5tCIjG16Z8wz6UQp217+06HUP6L5XwBT3Ml8rOt79TrpFPIysl3KeUtDtTATzVhq2F+1t+9aApF4i1d20I0h6tNzkHqVwb8A72ZAzETMr08FzjPSstUzmhOUgEWO8OKB2xwP0ho2bt8PzyG6sYwFAnnIcEKIgONfAm6W4H4maezyJshiqrbEaS9ZakzIZudAOAqn36Bv/wvLS+//Wsrzzq3vE5/ply5Npv/pDy/KZn5/W96UAunX2vOdMOpMNJgNan2KaOZOJS0XQkSkjwBzbuLNA/Y3Xl+X1v7Isb/yeL6sY6dVKEPd4AU+yfyOY0ZlM0QrZeUFVBS9KydqNQD56YEsbrE7WHtB1M1FQoaMGnVaE3UpJzvSzE15yQRyL8mLb8rdFI0ZPpKkHSDNjiORHvmP2nKaxHpOMB23U3qg3sycY/ZpShImM8DFLC00T68K4ibZ377BMO/dMcZ9FylQ7WTWXauwsFFOARdCxFoukxy1DCYyssxQt7ybJCcrBA42RcXjEYLOM1Z6U54jeDbzoKCtELVt/JC3ausm9grtyjpiB2WBQjN7RPGbSpO6xq0axgGIpY/bJUDdoKOaA32B8ZWxYjh8Zg46ge8cavBvfa1sqCo9lzRv7V8aMgnkW2db0N/meWNfYdmnrrt3M/uW/9/F6jGjm/y4B0MsZ9Mq3ks2RjKIfBe7eOhV6ydq5BECXW9yZnB3R+83Ovqup7xFQ16nXGjSKzpOIb1VKxvvP1vpH3auj7NJeI7DxHJsVgc0AnSji6s2pCe0659KWjB+/oUJAJ4eVUYWWsmc5Z+ZbFyE5SiC/a5pjXz1OkaxDBBzaLVVN921FrD0lixu2lmGL9gjkLd5n6WzRGuc8uln0jEP3wY5SyPfJe9fo1Fogb23gTHEfpuRQxROgD5FtvJLc4q4vhyutWefQN+t5XbSHL49jqXOTFYIFINoeD8+keRE9D0RGYFyMUSulcpyTvGb2/Dq7LE6DNTYvBuYYIGYpzJq+lnNE/x5Fa/FYgpU2bQJJTB9HT38A1jegXNs56CBQBo+WAZS3LDBgl8x56e/VtlDPtI0C8oyc6og38gOjqda6wN9f+ro/vTz69p9YlldezQzh5sp86c1FP5kW6siBkV4CoOtn1jyAzkA5+y1at1UejajatSLo8g46k9HsOsyw715G1C0gW40IRRXtfNcAIpOa7YE6BDttQ1//0RvlZIxkXlivnCUMXnRZjzuKMrPghtTXxwlKuTL24mgTkBlZ2NZcERgjnetCJk6YEd5p+jFAngXmo0BV7dF1Ttr5hN8ielqywOgSyRkaGRmlkynDgLkVQJtsl2eGR8usYz4B+jAFhyqOivtQZ2elZbFucUeAjje9h9EgXPTM226VwVSiRJRto9ONm79ZynMEDMSARGNRDM9RA86KLo+2t5k/gM1NRLWssPW8ddtjldJF8Fbp06mUPWcI44GXDptZo1FmRJun0i4WnXe/WxqJRWfAIIh4TMeAbTg3ufekul8KiHu8Y1kLer2JLDB52dHuDj2Z9uQf/sTy5Dc+ujz5Z8+lV+vLWWD9EgBdbnGvem+NoFeewVn0bBq8tTajdW05rC4RQS+3uIue17pidjZPa/uuRtT/j88uy//48WX5zCefsw+Bxrq/1AIsI07rTQE7lvPTA6qVYeswsD4TLgusZUEc64M5cXXfrG2rPw2+rKgum5cGUvK9c79uzXrOlia86z/03K2otvBXymZpjfO0aI97c0/72lmiZYnNE4GxppPIeZbmbL1I/8zLz0B5zzwjRcvs8lLHynjtnW/U/8HvJ0A/SMDO6idA7yTY0eJeirv1zFrXWfRIAegULs8zfEAxeFEcTT+M+FlR9FEQbQG2qp8HLiPK8N6NYBnn1NllY9FzbBmgZo0XARqjxwh9MnxnkVzpv9oXYnA+VTyKvPrKbpSb3FtbpR1Ivddyt7NNgqfW8MZ+jKhnZETKIN976ka8RcfMZm09WZan63Ns2M6jP7EsD7/1x5eH3/SRGcO5bBu/+0vLl3/5u55dskX+x7KSpNgIaL8UQK+yqlLcNzpy/T17eVxmDXqyg98uBdC9DJydPpgkRS2i/vXfffsvN9RzfvONZfnUx7ZAfae4yBnmojcxVb0tAONZpygCW4XVuNRO2j4C4CNeW31jNHTUsrUAWhmXTr32Ir3RHNj3iKaa7keActQ30lHztC5M4+hE29RUBxYP0DHhOUgQuEqb8t8omITgHrMBhK4Rz6J5R/Uz39Eex7lFc830cbDMCdAPErCz+qga6+zmLC4UiM6gsxvdR4zJDcWtlBq24DuUQq8xGJWPInsesKL7jhPZZwai5SCYKb06Om4BtKMp0RadI1A/On/XKbFqGBYds1LtK70LgFTpuLWsMpBqn2ALYLCoNrNu0JuyuGl3Mjg6xoA8ruOAewiwy6MRdxeQr50JvdExVj4XYP7gz92tm9kf/4H9ZBpG0IXeYSaSIwuXBujNxn28P5OeTXH3RLlX/5a2LgHQ5Qy6pbP1796xlM5l24pXoP7uH1yWP/PhZXnHK6PNXL+eAPXPffJ5tFxGIY7NS9wrw0DOqqMbYMPUdoy2ZyxNBlI9QM6yA45wxQKK6HCQuVlZijIuyzmSGWPkiChtIM0z7boKgtwtwPia4aXVD3Ok6M1ZO0HEwaRT3lEWxV4tv8vRgqZIHWeC54g5Mr+jPGCZAbcAmDc1c14Sd5TDXfVvUhS7BnpfCkcAvRpF6yLV59SzT7GZdGIgvXYGqXHeBj/ABAs4WBGUuu/D82CsWxbh9YBp3c+MFL7ZkfsMmTCNfRSgRUa3pqcelxfJtugx0pduS/PcHQtunk5qpWXT6TfRtR2H5XtkjV0AN3JB3DCvSzaA0tiHHDFq03/p2+4HMBcdieuPHR8aAeqXBOg4ZomYX+pcOq5/BMLy96N/62eX5T3fm1FpuTJvvL4gQEfHrOjqUYdhbiDL0oD6u//S7X+VQE9KgPpn19R33Ncs4CigTgOf8lt0Lt0CizuhHQSNERhl6d0zI5q7TcFI59f2EoJGTYtsqr1HVwZkkd4YDdbgNaIPOh0Q1Dp7bhhF9xagyJ44lFB29bj00ctSTo8JZVjLseVQqcZQ0gnhlWWoKaJ3VimJjMl8pF4UXe9p/0DZM4J+gHgDVU+APkC0I1W8d9A9w7KuW+PczVCEnZ1HlwFc8NkHZhgiSLIuuDpC950tYUTXq14eWBUp8KqiqOzN7PTZc2MzQDAsc2ZOEha9Hklr13RFGqDhjX0ynjQ7QY4gkM1WoueeXcei67Ln1k3a+V+GDuyyuEZvSJNnl8ix7rPA/QECdfhbZJhFH/Xc7tqTaU8+zZ9Ms4C5prEu46W+e3JxCYBeLonTIBzPoSNAnxFJ9+aI2RXXAOhaT10iYh7tG3c+ol7OqGNkUQCMNvDRUxkRRhSmFalm7bGyMyK9DHRpPW55YQf2cvN2dU1LvO1dIr96nDrSbtE6CyaZ0xp/i/iZAZEI8jcbPKS498qTlI8cE+gcYLItslmi5gL2MzRuyoak6xsBnGYvMEdRRPPMdy94VupPDpplhmSS8oygHyFfd90R9dXdyVnhOQUyZ9A14Ebwrc+jt/0ie2GGxwh2SUWUWhN9DxiPxiADxm4aNLRvASuW0quNwvLvmRcU1XnAxXCtPwHp+km2lfYNtEsGgfq9gXe1yaacAusKR6dH3d8mrP6Itown1vGCze9k7nWfXjdJAenZNL+NLUOiB6Xd8uzak5JebBg+GeBe6WoAdJEBHXXX5dMOGpB7Tw6Yc+Yu3cz++Ld+fHn8Gz8SbiFZkK4b6nVsXgKgyyVxHjD3Lo8LCXNQVi6V4u4587RuwjUX/d1Ljw3+KDrn3R9Yltd+9G6mvstlciy622PkMyCndaKAIyv6iSDPA5cbBjjRTRMxqA/oCMgAUk9gcM4y77aZwxl/yx7C33vGxcAsc0xUI0aldFtOEas9dKzgXNvmpaLQaD9Y8/KcEM2IVZkc7Kk7dl+S9CdHCbRDRH+Tup5jAGXac/4cUTJRXZ01UMriKwFSv2c9R312fD8j6B3EmlB0gok+YRQvUBNZgN701sNlsW5017/XtfzEjrKnSMyU4MaiNS6WcRrPgEgxyBC41T1HAbK2R5AL3jLlmFEofbBxegDWfTfbic5v7BEF5NnZdCSrF2HNpqwyp4iXsZBxXPQa2z3OggqcC+BdnyuT6Cc62ZvNBG/R19/1RXFrxZ2TntUz5Do6g77hMTgaRu4XwGyL1FomhV7+U3fnybQCzJ/+Dz+yuZl9dN6l3khKO/Z3CYAuEXR2SZz8ptPd9WVxVvq7Xo89b6azNXTJCLqV2o7jQN12RA6ydR+85x4AdZysBs5i+RVDv7wYICAnS6CNklv/8ECeFYVf9XOU1UQvpkMQ1QQn+b64Pu8czRvBHctA1EC8N3iRBc5szh5gr8YVTC5yEFhANoMWLOcOi04TR/nO4V7q4ZENlBnWp3dsIwLqTLYj+ZjxXdvf0p53XKVXxiaM8QToE4jY0URmyXU0dxaNKKABehT10efOEYxLPxEoN7/3nD1nN79HE01+xwhf3U/gDHpv1CSKdFpRX+xXphC1Z001Aq47+wmi6703hGedIbt+SZS97oHBTffRd4u30nazp5QWKnWKzO54oY3Lxpic8YFVd/s50YJtbmTztwC6l/a+2fNJxks2vT25rFoWQHVwfNWyvO07fnFZvuE7s9VvrBx7Mm32YLz7PLy+LgHQSwS9rQO4yV2Ddg3WM2nvs2h2SYCu1z9z2m3WzA1ZKncaqOvL5DCKzcBRY0jnLe0skl6VvKGf6yaflFAPxEk7O29r8rZxawwegNObiXY6rM72zXn+Mj4WAY0AcpI09Dx15974XPmQ+wNwfhZPdZ89vN0s8LV/nf2h5QrlV4C7N1+UZ9aG5eTRsuXJ6hFeWqntyH/moNCylZWXCeVOgD6BiB1NZNVkR5NnUY8CvWfQ8Yk1vDhumNqY0l4a0uk1V/bOMdDM0nMjUBjRQ+qzSHLT9WBwuJH0ZLQcjU191rLtI5gaDanubXwlU6IY8zWs3GHsrA14wFmP0zoPijw44hiw+qjjUIZS6xM2Wf1nG/tKkw3IX6PotVntAFL0Y7LVEy1nsuelu+vIuAXQDwH3P7Ysb/s37seTadG67v0+AtKvDdBxTlYkHcuNRM2bDgJ9dg2AvpsnWCWoIzJZPb3yYJVvry/ch4g6GvoRAOqxDiMgLfp8FmOosl1/xD1R/2392xuXB9g1TRHs6b+Zg3mz2Sb3cctR3Rawcbaa8bIn2q35ZwH3WTxmQBrsgWYfWPNCAF8q6BvfI6cSk6GNEQeyNmCHteZGgHqpPONoa+d6PAF6J8EOFu9RwQe7OqsXCmRucbcohUYlnlWva3ZNiWcpna08S6WRTr009yuAdpaqzSLqVV8T6e0Bi5m0dg3aIucAbc94V9sqW9Ox5UkxJQiHgJohUJp+mXm2dHOSrpahO6a0MsMbeSp1dscfLINnjfqj7Vn3T1WHOUh2++8qX7XvWcaHcUY9m/qOF8RR1v6xZXn5fffjZvZL7hqePmX9XhqgW3PFSHopN/Nc+kbubwlAz0bUI508W37ubET9dz6xLJ/7+LJ8UQHBI8+ARYRFwK6j3FWAnbPMXtsIltnfun38dzTuzHfpk0U29Xloiap7bY4AO2vO0g/SmvVv9av3VbLP06MGE/fGNlSx7cp/2Zl05gyRsjOAq+WU8RwtozIdyRyeS5fyV7DHcWgnQI+YNff7CdDn0jNsbRSge+/64hn1MojRm4rrBBCk6zQtmeFBJZgBdFXvG2eDZxpmXh96DFYKfMh0VSCat37rW98eiqAdAbv87bXPIuds7F7GgGs7gXFvjYUBdZbRQHm8bpCtDf1euto82/6qNs0aDVvBtgD2XR9BRL2L13BrP7sEjp0vP+KMeelf/2vLS+//kWV5+zt6hnr9sm+8vjz+tY8sb/3+56ZcVnhkAhldWXTs2/7qp5bllVePdLWt++mfW3SKe9U1a5q7PmteMYZ6G90C7FadIwO+RAT96SdeM5+8lLF6+mCm7s/SZpcJc1cj6gLUvwBneyft65SeLCKKAL4KeTKKvEMN8AMDlnVxreWifhgA1mf0I/Amfck4rBRluvmC88Ir0xbLwdvVs4vAojtzCAiNBTRrpIH0ywBbcXZop1KppyPl2aOYHv9EDvVctdxo3iJ6iuRqlM6lHgbVstmuk0H8CdCPMLG/7gnQ+2l2qMYoQG/7pwGMo7PoqUHjos9s2koBROBzp99VqjGmLUYRzqonO99L7zHsWNs99VP0Xgu5oNo4r9z25qSjJAPcpU0vst1Lgx4wrnna5sd4DMZdA7RG+iIL5lTFh95wuUxOH8cDDWml10ZvpGt+yXjxDfVG/3IGP8lXqfPSv/xty0vf8V/e/vecv/j55a1f/aGFPZnWK1s9a8x7I9263wPbv4kIOqa168h5FWFybl2PuzfdHfXEJQF6Zr9APcxk5JJyE8nYnY+ov9n5jJPWsUU3lmeuRFcxRYsgUvQuI2wvwMFoLwIp3Xf5N2vf2DNcvmNauwaoAhg1MBIgqaPCkWBlgRVzJmwUgOP08OgdRdiRtm3zChwhQh9pHy8nZPPRddAZgM4YAfIRfXfG6PqDdhZoWcXftf3AymX675X30qYVTc/0N6HMCdAnELGjiROgdxBrRtEZAF2fQ5cx6ShQXcedBj6dG56NsVK6JvRlpZszoK4jwVG0F423HqOw6l0Swc8YhL1nl/Vb2ZoX7Qyk83RXAXrtTPpaOQLkFgjPnu9kNPB4yIB62+MTjprKZ8sAXLXYLvKsNsCdLWdE+5tC7NCMGXDOLpBDEK6Bexagl5vZH37Lf748+Nr3zlBPl2vjS28u5Wb2t3792ZNpet1m1tOsgTGgnn0j/aYAOoLytm7K7dsqut5sZIi2H6HdJQD6k59+jQ4p0s2Ws6/NO7jU8ggdWN3NGr2Lz7OVSX32Z5bl9Q8viwB1BDgY3WTR0iaQQfQX9fcRhjBwzsCa/o0B+NEoqOUMaAaZuhlfR9I1MBW7KXIcWHSy6GmBTGwnAxBZ9LgqHQP4o7OiYx810+c9OWHnt0WGIycH+67na3n2vTWgx5ot17MOrPPqPVkaPf1B2ROgHyDeQNWe5TPQ/FkFKZAB6NHt7qXNCOLYD/4AACAASURBVJBbEfUwWsSi6Nl0mgF2Z4E5AvEowp6JvAhQiNrS5XqcA1lyeLeCszbYeWWaFp3ZgFEBE7CsizCHRXaeWM4C7ZrGQvtN3UzUoFZ8XqtWUQZ82zthvk1uVH0vDb4nLdMC6RYw986l38Un0x7/P8+BOdL0miBdyxIeHULdq7/fRoDOzqL3Rs299XtNgC7jsIA6pr3r8hu7+MpAfaMfS+r7u79v7lGIUQXbU48Bddk/MlaiBWxEjyJwA/3s6lG9j6Huz8zRisrqeek+BvbNOgwETxgxj878R4AymutMB0jUF+Nr+Y05RDaLM3GMIXtpmh6Dlj8MGGk5lvFFvMD5WX0xR1GGdl6ZaP7WEVRp84JvpJ8A/Shz++pnVG9fi2dplwIZgO6uXfUuet0T1KVw3g3vbgo8et/waRA8gz4hYr4xaiQCih5wiGAzA45F4nqM/VK2vrMtl4utY0CQWPWzGmcWqFIHhHFxXO3D+6aiG0fOKctcvOwEoTVG2nuWdw8fLHlA/mo+bMaCBqI1UBJV13JV/63fTV8/siMYNWuhrI0iO/LvBIEwK0JnT7CMCf1bfTLt/T+7LO/53kRPN1tEnkwrwBxprNdblAVz6VlgtpGlK68B0Nl76Ju1YTzFhs+wRWfZMzQtfHn43ZNl7Y3XFyuC7o3Jy8BBnTCqdzI02fBi3QfpkZWv+fplefUn7zZQl8nK/o/RdItgCFoqgxIp5r0MaEqFvHvugfIMGI8cAVZ0Fcck+5KAJtnDvcyEUQcBox9a+Efb9vZZpKvwvRkTTtQ9u3+XtixHiJazMpZSLopiIz0ivm8UABD8KG1H5H/kWOpIP2udE6AfIN5A1ROgDxDtSJVRgM4iO3g5HEbVqy7rBdNWqgzz7jJP3VEvsAOExRDTYAmBtWWsRUabF809AlJ7ZUVSufX55DondeGY1WYWtPdGqJrNQaLN5ZsFtqKUVdO+I1oJ+6h/qxTBxl9rg5XL5NZO26V6zpO/10jDtsD6jjZyM/u3/81ekbp++d/9peXLv/xdy9NyERX5n+XowrWLVaM1PGuiLOW9tH0NgJ6ZA4LvKAW+rtFyVng9sx71odftTUTQLX2D4/acqNEcr/X9wX0B6iP7uqOLN8BpRtRVM5Q5CJpQHbiMrkdo2Nz1uDKR16xDxNxIyebGLP4jINWi69GxV2UFb6Nn6M+yPRlIxyfXGLi2nDx6bNa/exxSI8DeCqplaHSgzAnQDxBvoOoJ0AeIdqTKKEBnfbLoefY85dAcMLWmNKI3bmcTHwVrbJyYvq7LWGBRQLZEy1kd64wjA+i9EUBv/tb587b3BefP6x4BjhgG1iNg7tFaG83l39n5Z/kejS1Kh8exC4Cv+yRs0BknuSULOhXzCGBMH2u4g0+mlZvZGZhijrVIDx2hsaczo2/MsXkpgH40ar7BJhBhr7phPase0Zp9v0mAbo0XdYX19zUcbBmaVt38yh2PqOvn2ehG4Xg6GYipm4hqSEdQpbyUQSvVAr/YpjdOq7+NYdBx8zuOGfsWQIVjjwIoveDNow2jRyabIALwDIxG0fTMwsmUwXP8mP2pZQhvgNffJOLu9Ykyo+WayZPFu16e0s1q/ZFlt+rAWdI+z5C6Tvdj+uBgttZZbpQCJ0AfpdxgvZkAvQzBOjPpPb02OPR9tegszLSOnjfEziGyFFkEA1W5GBHg3mFaDoIeMBEBdrzhWz/H1f4t84FUy575RE6JTLSzZ944tkzmwoihXdsFY2v3m/pe+yAG42Zu68aqf+u9DFC6RKcMuxTurj2Z9kf/2+daxg47PqHZwdZstZdu8PywHh97eu1SAH23Jow09iY76ik2/fwa+96jC1jZ2wjQtS7Hf8vfOJdLyRXeK1FlWD/3pHVM0dPl9cNv/sSyvOtDR1lz3frRZXJ14upG943yJUO1LM8j4CXyvEbAXn9nKdfW2LAemztGzzVJ8MZ3TZtM5oIV6WVzED7pPti85DePpha9Nop+/SPjCGBjs6Rc981S3vV3Br6tCH92vlXRqLnh3xF9wTYZhr04d22Tlz6svwe1xwnQBwk3WO0E6IOEG602G6Azo1J+Y2cp2SVx4cVxOFkGzEUZZC6oIJtONtJq6mvjcrNZYLruHWrjReAq39nvGVnJRtE3wOaCqxeBszX/zNxYGS9irmmJQE/Tt+6JKw1MAxxS2+l41826yQruu9iHOqPuGv6BsWmB+5ffdbeeTHvrn/z88mA1gth688C65XDDoyshn0cFkdTDzCQB69cC6HS9KNAenTfXl8SxS+RY+9bFctcG6CP7AKvD9NdEEUk3ZWY23QegLlTQes6KpkYUYyB3BCRHAEuPWUAVA48eaNX18N/4tz4HjanWVtRWPz0mNLCcCxpoWvOROXuAXerWzde5M0DzUfPaoyHOO5KF3u+Wg0R+12nveize/hzJETphkLY9jqaesh5tdDaGZYdn7HOnjxOg9wrnsfIXNPGPDey+1p4B0DO3vCP9ovPpAua731O3zqzrAWS8wDBgK7IqoCwCbljOApxWJC+SPy8aPxKtyUTUq7FXwOF6/prd8m3RLTqfzoDSZi9WmoKBJ+a8wPpSRupLn4xeVmS/2g8QZd2l24P3WuhFDQ/DeNgoRtCSOjsD5STivfVsXmnn0dd84/Lyn/+xO/dkWrP/QEYs/kcg/ppgvIwxo09LmZsC6AjIN3QF4F7XhzpvngXolr67NkCP9K4la5YjlumLbB9Hy0WvNtT27wNQFx2qAQIDMPo3BHcboV7/yEZdexnlRT6bgAWNytjE/sG/q2JRb8zrdhFUs6ODpXzGbkIgaYHVahARuvbSjpVn9PRAvgVIe4CqBaA9Rw9DO1b2giefKKse6O+ZU1VWB265Z/Imcihj1tk9COij4xZnivuM1dLVxgnQu8h1vPAMgG6Nwnrjt+r6dWF2XxonnVmpNNZg2FmgQfIheMUoqtUsA98aQFlgKhPFYQA9AmeD06c3u7u3vasL5Rgwr7+VlQ9ANkqzsug+6uTw6GFFxeoeZty439or2RQ4RxZp0AOQKLr6re2762bN7MvNXt1xhELz764B8z/6Bz+yPPiyL82WgyXkndiQiVT3S603nJno1bf91U/NvZX70z+3vPULHwzVQnRG3dR/KhW+rpuB99FvK0CPdH7kMAyJPrkA6uvdEZevvAep7xngktHD0s5s69QCXbP7QTqU9iUqrgGY9MvOEZdyVoQ9K5sZsJ5tC8tlI8xI20x0XuaNTh5z0cMHr562exAMR+A4+q7lFo0FYmuMkr6rnuX86WrkeeEzgj5IuMFql1RNg0O639UuCdA9ynnv+x6iOHrdLnRBhQWII4BkGfEZoL7bk1YAFvV5iJ6qciaq3vYENTbr2a7NHlEA7Mq7jEOi1MXIpo4kW1Ft6dMDU5GjxEpXZTw0ASAzKIj28+wOoUHtg73s4zg8aOT8ncvyFf/m5GesZgkftFOeTPvy3/vosvx/2w/UObManFkA7Tl4WBvZdo+Qgl3AeVMAfWQeCOr139YTbKyfSwD0x3/ntaZLRuam1yHTxUxvj/Zj1eu9e8LLnGk6vFzm98/dUaD+xuvL8lt/eVne+P1n0ym6sGRyWFE5L9K52ahIRDECSpauZ8BNg3ZkdhTp1ZHTndAZN6hLHYxeCnDMANiMMPcC6Iimm4VG7mvR9ZEu7O8s8rDGlY1wl3HLMQOM9Iuclv/qC+TK36xf7TgIDQVFME+OZAyz+O7Jhk71z8gQKXMC9EHCDVbLLpPB5s9qSIEC0K9hYOp+M+A8ndpunT8XRXgwhSYrMb2gMmoXeWK1b6WQsxRxL+0yGo/3HZ8Xawbegcviesdj0aHuNx1aJQL9O7tnbZulmVOnS9IAa/stbKYsa8ByGOzsOyMK/OArluXl9/3w8uguPJn2xuvLl//r13ZPpu10GKZjGvdMVNsHDGVr7Qg9r60vqyp7+DzrSP6+qRR3tjazUXV2Xr3yIHh2TaLtlwDo+h30jJ7t1U1NHzq6QuSwR1dldLJ1QRzloXqdY3dJ5F1NfUegrifOABIDKPJbUwDBO+pYnhLbAcwIttj+pUGmBd40yN5tXKR/djyQAcWjkXSLxvr3tmjWf2RAZV1EQUo27r9eZFnzW5/ddxee+ogOmMgpr+VR8xx5kFFALFMA6Y7ynP070z+WYRmv3vnzzHGKM8V9hBOH6nSY0of6OSuvFPjDDy5PjxoFmTOTQnAPnGtQrs+g67ppxkW3SZaGJnjwNvs9SSnGCGrVkYGhZs2RGY+lffZUGwLNunetG8YIvzdRcBg/tT9W40BS2vWt73UsLK09yVwvewHn5kW1k9212/Z3No7OEuhIJ9+0g5tyZGCoynWu6wVxKIf177WtnbNHjhwIMH/vR5fl7cUCv8X/e+P15fGvfWQpN7Nn1oeWf1kfWSeaxWdrTbH1NDvSznTsbY+ge2fVqx4ceG7tEgB9RgRdZIY5d0TnR3vBiF4eWbEYPdd/S3uor1s/9wWoR5HQjUJ13u/u0NddvLKyn7C/S/ePEXbdXwSiMlFla54esUodfXFdF2GNDIi6SHsb0pux8awf0kD3gd88WpubniObYgPI3FiGhef4OEIPa7yZc+mlbvI5tjOCfkBmB6peQiQGhvHiVGEAfXaECC+E0+madS0+eQYy8X/d59Q14MYFXhrH7/LbBdnNIp66O214MwCQGZplFG5sjBtcWXVe0P/uLHrS0MAsACv6eem5M7BnOQcssNaMejijX/fT1WO/i+ivlTaBAOIwibIlXn7fX1teev+P3ClgnnHMaBAktMMMA5SZxgdjjbA2Ix0Zfc+s66jMbQfoja4rEI9uc8fvAuD175cA6DqCfoRvkQMois6P6n8Xy6ioOOqbSL50+V3ZuwrU33xjWT71sWX53CefT0n2HmuPxCgri7qOAmcWVd1sXnCLeWPK+o/Rfi3m66i7AGEpK1FkiaB7AF1/005or189F/bvpI1gyrXnDPCyELyF0jMmD5xqhwMCdd2/0NWSG/yd0V6XYTLfM6eMEtFZrmiHl78tOUrc8H4C9AwD5pW5QRgxbxJ3qaXMGfQjRktECxZRR8DuAfVUKjw7dxZ5f52BW+CMgUVpRkev8d9e1JcNI2MIlnpWnxFPer5HZx/x/Hmjx6p82XvbPf1jWU3LiM5Yd4ace84SN0K2Qdx7CtTPzsa525cNz/1dezLt8W///LNL+Faj0APX7JvU82Sq8KXoEc0fXGMM5PcAqhmy1ezkNd39NgD0KLVdg+yGLeBddf17tPYvBdCPZBdFY27zm5Fxk+0sWc7S35koe+1CgPpXv7Ys73gl2estKKaBOovIesAZAc5RQGMBWDYGz0KOxiHgWx/7s1ih+2aBD9YXs6kiB8RuA19/8OYSzTMrXgjYSz0GcEfBuzcOoanep9EGQHqO0FI7k5oiIjSeRdMs7Us5Btx76p8p7p3UOl78BOjHadjVQgagdzXYWdh649dKd0/d+p6JpOtxZj3BnXNjxT1wbQE4FsEbHUo2HZcZlZk+3fnBmXTvRvdmMINzBYGSjCmKpDPgXvfjDo0TRcA0fdg4N3zUF8VAtGAD5ozxWbbbJrijNvy7eDM7XgDnyR/LrEDeZhxbCKRx7envEej2ykZ1M2vtNgD0nX1tgO+mT9RN7ixirm92r+tTpcGXby/925MvMSxHJ9ZL4iKQHsmPtf7Z71aGSzSGjFwcKcOAeaq9AtTf/YPL8mc+fLeBuhWRlt+tKK9FpFFwxxysOkU5M44IdHnnghFAIZAs36M0ZK9/y8mh6VwVgCJsNB93gwguydspsvUH3aeMGcfBHDyZRaPnJm1IPW0fWC8QWXarjsBrmdFj2hgKibP7mfmMlLFs9WRbZwQ9SahJxTrM5Uk9vuDNIEDvMUCPkE5HzjHlHdt1o+RW2hAbHJ45vzIwlyFZgFv/Xvemg6vBiuZaxmGWn1HUnLVj3Ro8YhBmDGVv7mx8FmDKAikdTU0b5AbK3vy8bqR1PmvDO9tNzr+Ty2wffe3desu8PJk2AsyR5nqtmWupRM0LYFTGSsYBhM4eXKdZmcmuNyx308+sjY7btZ/hCbZSFt9MvyRAl7Ed0blML1l6SMvkpeXFpTtJgd+sJfJEJnOstjp3Haj/z5/cKtqmSICKOuodgchRYMn2fwbMR9q3IsV6mjqlvQqsemrNAn66fs+4PIeE7vugTdTmgNFq5oCpSqjj1n4G1KOoNxsHXkgXyVdTXsE5eFQEnnwx/vbwM9okmC1e6uiATCLL9QToEaHnfj+6/OaO5gVojQF006CdTA8PpEtae12za0pnBOTp8CwvsXVBHFMKCUUxQppM1G9jLJFn1Vzjyynfk54bzU3OS9f9DN4ER0O0/q2Mvs1+rp5aq23B39E4rO9e5FuPeTMW68ZzuAwuOyY01K1MBqGXAPJCg3rJmepI24Z0zy0F3rksb3v/zy2P/tW/mB3ijZWznkzz+Cl8E3pFqe+ZVPdoreGaYc5M5ny7lNPzNkbQM0KUuTyO3ep+aYCeWaMZ5yCjgQfUmQwfcRRkeKD1sLnOIONJyqX08n0C6jJxpngRqPcA6Ai8MeXuRUQR7GUFoQqDAndR+rXejKRuT19RWeY8qApfgWWkg+m9jjoj3xlotuaZBa2GM37ndZfhaJCuo+vl31mUZM0D54Jz6P17gMS1irbNPcDu2N8nQB8l/li9rOiNtX7W2lFAA/RrefK9W9/Ze786rV0D97rG2flyffEcuxhOlEP570Tw7UVQPKNNDDRdxuMF+5aN4Oo+jkb+NtHGZCSG0kHxUN/6zs6ne2AbI6F1TwdjAutb2QQjhrjVdrPvVu2245+1eaNRwv4Ggj784+uTaXfkZvbyZNqTPzyumBkAspxQGkSzFxCi0XgyFK1bttaj/qzvdxWg43wwjb2tF0hvL79fMsVd+rWOOWT1s17vVnaGyAE7QjFTRnpli2VHWVlOG6Dugc13f2BZXvvRu5n6riPqjbEDN3ZHEWdNP/y36P0qGASoWlYzpmcfvflc2hPAiKAKo9DMtvIALQPmuk2cfxYcZxeB5WyZ1Q/jq/ym56kdJDJn/dSa0DUC0jtFa8iO5/1HmmRp6ZXzLsvT9c5L4mZQe2obJ0CfSs64sXKLOxoLca25JSwAzm5/P9QzXkohjR08B8PGxKLj1tgZSMwYiV6/O91MouleRDAaa5YP2uDDyDl7eq3K4sNn6f1PHq+3mWc7S5bLZg94YCvrKNDGuh6ePmta+1Ee8/bNSnUjBsNdAuZP/+C3lie/+R+6T6YlWUmLMWcVAvFG40JL554Dto6qvWxkWOhvrMxMJ+hdAOjsErmei+XwkrlLAPRyiztz7uF6vWRU23PuXrJfU8+TLCd0nqYi6bqDuwzU5dZ3jKJrixWBjpUeXTc5RZgokm59j8ATAmYEgRgJb5uVckBgZL2UwRvHrftUpL3ey84YjS0QOQMxeBF75FVV8ORsPCtHDTTDueNteEYQqlaJnAeyv1kZBjLuyIGk+4r6HNm8mW2OvxE6nBH0EWKP15mx3MZ7fwFr6mfWNGhAUrDUzR5yZaLm0p5VNoyWWwPCVBrZZFh5K/W9Z7KkrGWASVGkfflb6KANtCMGfhQV3kTEB1biLrLInviRFHH4ZqW9HyR7q245Qer+RObaS+ds9oRlbDeQrt+Ix00fDa51dm979W49mfbl3/vcM4dE8L+Slv4UeNPrGNH81Tyt7TzegnNZc17UE4eMa0brSen7qO60yHQXAHrE4x091ZNs8k2nxF/iFvdySVzrS2W5oG7o1QnW3Fm2B5PTUSdtL82z5aP7Qsy307UeKzrsPgB1RjQd3WaAh4Gk3QIg4NjLsCr1McqM+0aWwVY5jHiW8egougfYejMUEZwz+uBvEbjsAZSsf5bdMGAf7chrRZJLQdkfZezs2WDkQ6nXS2+RFS+KnpUnj87RXPXLAixgZszrBOhHF3df/Rli39fjC14aAfpNeOsZINfRczyrXvXQuqARtLPb300WM+DOCieVXgSAs6J2FChn+2FGaTa63NtH6wuB+brJ1GiMbDidjWdBG0ZWrSyHozRAh8rOxoBshp0DRm/O6+Yo0apmKzxdlpe+7huXt/27n1yWd351J8WuXPyLn1/e+tUfWv7of/r5dv+AHkEGrGdHzEC9Jee9wNmSn8oiBeyupUPvG0Bnqe76t0LnSwB0FkHfZbgMWCbZ/WDn2FR99cpodp1kymG6O3OiCiiva8C4W8Ts6w4D9bc++8nlJTwnXCYagcHouwWYvAhoU3AA7jXhvX6tCL2OYEoZBrSEDhKt1enYGUHT45d/W84MdEawDAbtKIl44tXfbFIwEcNZ3jPdsKxOdRd6eMBd8zjit9BF5E3THekX0TArZ9aELZnC5wDPCHooMpcuMLANXnpI97v9cgadRW9vwuBkl8EJ4Mb/HuIKi5JbT1lkO0qCeDHmdZTO66KHD70p2QxwZKc7sxy+la7BujYA2z4eRF9HgLemHYuCTp2vumiOtYsp75syD5blpTt8M7uVFtudLtvJEATN2WhoxvnD5I052Tw92zmdWvw+AXRMe7fS4K+R4r6xyw3HS1Z+GF9ZBD3SxUf665Et6wx6s9/Xizv1ej28du8qUP+dTyzL5z6+LG+u1NHRV4y6MkDUC9YxumuBywhs9QiEVRYBux6LRNel7iWyEiNaV0NLOSwYrTUQtdL9N8pA/eGl3Ed8Zf1q4I1gvHSrz51L++hYYTRhiEqPz5JTBtJFhi+J0rRTKHH09Iygz1jM+TYuyfr8KF6gkjqC3vS6uon7WtEgTXI8k84i6B6LUs+yeSk3pfFECm6vmLB02AY6SVTVMspGjLWeaE7vvEbLo6Ha/l5pz1ImmTEYgShv7rvodUIDMQO72gPBLfssUmY5BvSZdKFviZi//Od/bHnwte8dJfl16n3pzeXxb/34Up5Me/r/2l1i5Jzx9rDxD92z7IZ6w/u65q21xXjLQL/IAc56ZM1GzLpPAD2aq0TSLxVBr7ans+/N4J+1/tncM9kaEc16v/c+nxldKNfsiexrHPcBqCNo9gBQL4N0eQuMMXCIv0UAcmOMreCQ9c0AcAQISzsdwYwNiVikH/ubFdlGEO1F5SN6snHXjYIcT0B5QTBuZRCIU6QcEeq9DNBzVDCnkDXfWbTXtreV+r4KxgnQjyiR/roJ87i/0bOGTQG8JE4bmDOMkiztMaW96nG1OPGJNQuE4+/075fIpsMGegGQjt1YoB2jctqAjGga8S0CtCIDGPHb7NHGpXPZzABpKzrXuAM6aOxFm2NArAg0W/yKaBzxqM0fNB6ef668+Kq792RaAeY6M2IjO+Rt5Sy9RspZYEd+x++aN5hNYcmDl7VxqbPE9wmgswh61XnlngAxxh5dJsUdz6Cz9Pbses+WQxmz5Jo5EHv7YG1HF/VF68xLZz/sVLvrQP3/JheBMeAeEXmjNBM3x0ftRSnQFpDcKT04g463beMlcqW+pMFbFj6LBmNU2wLoLJqtx9xjI3h9jPBQp+rThRhcGmeB+GoYqAYzTg8G/iOZ8RwuEVCP2sbvGDHX340sjBOg9xL5WPkToB+jX3dtAejMKO1ubHIF62y6Pn9unUXvGop1KYVsLF2N9RW2oshV/6rVEBn5M4y2S8mAjoyzlPU6V9jAs0ZeVM5zRpR+MYK9sYngzfOebJKM4wWdGbvo7lcsy9u/+YeXR3fgybRyM/sf/cL7lsf/V07+8VhDrtaxUvrSRXSEzFw/O3s2kKPRvi8B0L/833zQfLryGPXHa+ub3C+R4l4AepQhMTObyaIE2wu0jmJjGJWdXm7QY0jowF4BAJ5Lr3PIRtH1wO4iUC/j/+zPLMvrH36e+t42VoPqEYC0ovB14zTOnWM00/rbFEYAjmKLyH8ZCC/fLNCoAWQ036xwYlS7ClrHO+GbzT7pVGF01HzIIpgoqp4Zm0TNhe5lbHp8eF59tzEZc0ZHjsxP1x+lc5a3VoYr3Bt1AvQsQeeUy4r3nN7OVhYN0L1IUwQQR0np3e5e2vQukNN9emnt9NsVUtyjlOeNDnYi0izCxyLs0t4so80yGEd5bUUqq/7HFH9Ic282jpXV0LFhWE4RBNWj8/TqRTJRv7/9jgHzX/n+5fE//e2QXBhR77kczjPwMxkhKGMscyK7fqysC1zPSBCMxjN561m79xmgX/MMuo6gNz2j9JGna7MyEy6OtUCPQzHb5qxymO2kdbJ3WVz6vXRroAWov/v7luWVV2dN5TrtFKD+Wx9eli+o7qxIsb5ojVnBHqBrQmhMi0V+rbR3to9mIutSBi+Wk99Lu2zvzkR+2bQ8p0UTTACss9CF5RjQ/ZZ/exHmuiF1iKGURfDsne+33ku3utV9yPiyjh7PAdRhm+2GZl0gJ/ryY11U7CD4WdRadidlrkgBluIuxqxnYPZEE2dMJ7rJ3Yuku2fSy+CsyygwdevgRDLGl+7CcphIGf2282wHCjNKe8ADkmr0fOOhVMrExpAxvuteu6aq9ch9BMZlnWm6vu21u/FkWo2YAzCPeGwdZ0Dwje8ta1kaisSRdWs5Y3YynjQgR3h9UJ1c5JK4S0XQD6dUP3qW7n6pCPpOX63GKjuyo/Vyjz6gBk/gmPX6Pyo/I/X1Gs/c8m71sVvHGRD4ytcvy6s/eTeBeomol9T3nVFF3tTWwA2BKKZzszPJOq2aRUMRfHmCoKO0Ug55hc4FjOxeMnqeRRGRLeDReaccjOyC3gUVjclqT2czsKh5BpiXMuW8upanjfGp/rBkbrMxdzoceucOkfPadcnK+Y9PgN4rdkfK9/iUjvRz1l0pgCnuGjTIv3d7ygBY6SW4PpOu6+JN7+Vb7yVym7F4Hjp2tqp2CLNJGPEZA36jH0kEp+2PTsrsCIi2IoJHjc8MzxtoCy5Yq7Ko6G4CNVD8XrTTimDu9uNAK42Ad+T175pHBgAAIABJREFUXXwyLcPfHS3hmb0m071PNBV5IO+k946JrUsPgHnrOIqIo5zg8Yre9XafI+gWH68F0D056nFe9urjKLtHy0hv271rI1OeRdW7n1tbO0o73+46UC+3vrMobIbgVhnm4MCoqwbuVjsS6UZQVsrLb1b2oR6DBu1SnkXZvXt+MuOthoEIELl4jWUP7AzawEnSNikDmKNDRJfP8DRywkgbUdaDzlJA27UHELPxYHRd012PT37v6Y/RKEpxX+XmTHHPCNi8MidAn0fLVEvWGXQLpFhgZLaxYKW+47vnmUmm3kb3Ut69NKLMABJlouh63R/XW4bNvbXDcWK15QEW1m80JiZHLCrU9jR8J934G43AMu4nj7cgPmNkR2X092iu8r3HGfPyn7p7N7M/+Wfb+xEqjYpslignvl0KBMYIXK2qnm7ScrCzo0bOsRpAnjludH9Vnta5IHBGAK9T1xG8WRHQDDiP5O0SAP2tX/hgJUOYdZTQaZcock2AjmC5yaaKrltOlQx/qy2bePlBdD+jJ/YfycwoT7zsmCj1nb3WUOc+cgmrBg8FqP8rH1+Wb/jO0WndTD19Rv0IUGegiQoJuS28CfP6Dw2oJAJemQTn3HX7+t4YdiZd6st/MZCB76UnAh0mwxBUrnuSeVN6D+ct54cFmFnfG0NCOQSizJHou9BWZ1IIX6RP7VjBVPQsHSxZQ8R2FJjLeDyAXjeoZ4GyE6BnGTin3AnQ59Ax3Yp+Zg3PSGqDhEV/tIERpf31Gg7R2fS2jmGT1ze/lzIuoI/OodcGHFIe2VBUs5YhiPQfAfG9dMfZsmhR0/vEYRAZnNR+kOipZAbALd9VziB6rn87+iYvM7JxLSAdcJ5ZOku9uwjM8ck0nLP37NJOriBino2eZctlFKAF0rMZEbv5J142iPRkZtxS5pIAvdpATwL92TNYp6yV/s5+vwRAf/LTr22OsGj+W85EjGTLXrixwzscphZ5MCsjk/Ke1UWT2NeaidY/c861vWTQ+Vbrv2NZlm/+xLK860Ozp3TZ9gSos9R3r+cIBHlR4wxAi9rfKfPVAeCdMddt6uhurw2VAax1MZIz4Jm5Zzmu28dIP/bTS09dHlO70QGugbMG5r1IyqOr5fxgdGZz7Z1/lgeFzWeKewe1jhftFavjPb7gLeAlcZ4BcFMbv7AIU9kRjGtWYoo8PtO2Y3ukCNsgoGbvBjMgb9qo14bgCD9GALQeMhqMA9MJq2z6gE2fvY0ul7HQb2FvzwpYhjA6TzzDPMOPh//83XsyrUTM5X9WxLB9N1LYGRvYGdZSjp1JrzwaibhBx15UlDkhR+S9d42N9FGmdQmAXs6gl/8dOjaUXHOZYhqkl39f4h10dkmclncvC+KoPs7QwNJPkbMno4+y/WfLeefSMVMmdWQp23Epd5+B+iiAaoJsXJjWC55YUIMBuKrI4X4f6Quj7Vqve/ZUlAqu0/LrojFuuJexabRh0deKnksbdGNTP/bS15L3KOWbjRPvVhKaSIaEdwbdGkdPxoflEMkeXfDW/jq3E6D3KMjjZU+AfpyGXS2wM+i6AWY8YkpnV4cTC3uAXUfOu95Tj86kj6a7HwTyCNKRR3W/MCI2Fr9YSrZn1LFo+iWNQOt8Y52rjrjM2gQd2fSAKdKA0uSOPZn2pZ9/37J88ZmBU8mrNHOW56wcHk1gTzIJG45mRuyAjTIYn5KdJpqjtY48QM6+Rf1oMfRofSmAPnKMaKJab01dK4LuAXScl8c7DeQjR9YRemHb2YyPI32a9jrJdtrRTDntmJNtd8u7B342G59xydV9BuoeINQAlUXRvciuBk2Z/TQbyZbxYgAEI+qSSt+Uv3o7vUdwGYjvAZUb5WuMQUetWSR9twDIBDQv6kbl3Pre6zyQfa60y+xOPFrg8duKnmdoqtvNyFQPn0vZM8W9l2KHy58A/TAJ+xrwALpleCJQuw2AnYF1vFCuy/Bk3kf8bRSsJ1lkRWuzQHy24cYAenIqXcWsi+PY5UN447d1I/gO1K8j8mS81oE0fgaY3DJ3DJiXm9nf+oPf3ty7I8yrynnV0FmQ7jE+c+u75lsmvT26OC7D7zrN5E7US4eofyZzFg2vAdCvleaeURCXjKCXG+LlvfUm73AZ5wYb4rOQqmwPD0XWvFR669sOB6i12SPDGdpnyzAHnHc8yW23BwSysl+5LMurdzT1/bM/uiz/P3vvA6tbdtWH7ffum+fBdlIbVCMRtcwztjGRU3uwkU1VNB7j2gapxYS4qSGUmQkohThRPSBKHMZKmYRCRMaBWCDVwTOACU2m1DRphQ024wkNf+oZbMpEBo/xe6gSLWAzg4Tt5zfvvlvtfc86b53fWf/2Pvt8937zjiVr3v3O/rv22muv31prr33p8WPy1NDBFLjDx4inuQVQceBqXR+kcrw8zVNzZEQ96/ywQoOFNSdvvt4aoEFkIiwannvTgL9lELDGwKMUeCQDGk6kcc8EjZP93QPmHq2jwmYLca+gVJ+iQbWoT2dbK2nyDjod6lkp4wqq5r2NhmbWKrHRdbHeSCfFUvuv1MdMGfXCijqE3EbnqpWzjCWSktayFhHvcUu7koI5GhWE5HASDXhYu+SNzb+dpeRlg3TxDE9cQSdlG3+LrNszvna/nkwjYD6uJYEOVBL5CwOkezRIbunJJs3D3iO8vUzDyfwu7Se+j2qMkSgfucFMMp5pe0j7fS2Anud7WkLcx32XwzHzy0B/7d0pvfzOyPaLlbn4UMoe9AzQz567HoVEax4Fx5J8iBj3IoPUojAkfkKZ30UuV1xbKf2Dx7wqSqYl7NYj4r561C8+lNLDfyuli49P38zmACcCHNFbS/Jco5sHsDx68+/obaZvGOYslUNQjoAe+9EMD5IhAEEieZ2xjZmSIiTcs+YogWYE2ZI32gOxWCf/jXf7aeykp5LnnHvYtfnxdcKkcxLdcTwSD3lz4n0G9YktxL1mMy4vG1yW5R1tLRxT4FN3pqOsAKAS4CkFkkJykjS1FMpFb6Rrk+JCT/Ks83oLw9u50iUpjB6oyPVbFTUrfJcrsVGPYy8eKf0xaTECdfh9HCO/99Y4CE5nTfnOv5//8lekm775wXTmi25p7GlH1Z64lK6+7/vTld/42eMs7Fmxzv8duqfQdgmUjvOPHrpDm1rG58mZLxi+It7z3lTTDJDWnliyz/j4I4aAXQB0KZdHbzrXtLdGkriaEHcu8/DfEx4GjzrJYC7L+RlqGQIkA7lk/JEinDg/tvKmtT64nyN5Jbyopxp+qCq770CdPOo4aQuk828IJCWQWhiUHwBVFD5OqpvblYwCUlN0XpOOxEEmgvhc39OlcL4IFPn8cDxSf9qYo0BeIx9HOp6RRWqDdE6pLn6jNeHrSnSh37AdqV3rN80QEWGfSh1iIme3JHERCncrswH0bqSMNeTdQUclQgMpkiKwhkIQm9W8lJUkzgLwY0voTbdCg6xBOgdMjXfXBE4OoWrXxouW6OUtUs8z7rUVPDTSUz7SU2ytijAqyZJBYh8zs/MEcONe15wEnoIHi1fDY5Ew2DVA+ijPDM+6BpAIdGnGKWnPoJycKBvc4GQ8qUhtrAnQ87g4OJf+3SqLl9Q7DQBdOxOt33sZML3zQQLpS+hdW9e7tiLiHW6QG0BA2etreNPzAPY19J086gTUW7y+RWixVYh4cy0m4GcClsO283cLUGpZyCWdSfLQeoYKa+61jM7ngjTQaILoxgOm3ndrzBykS2PFuhj27q2lNRdunJFo0RHlbR70FsZtr9Nx6doHcSPV/NO/mY4wpN2bfy1Ym8kC5z1vr3/vu3X3HEPeqa2qu5bRrKO5cc/i600GvkuRDlQEATv/u8joYXfVACdRoYK7mRHwWjnNWXEvbBLf35Y8O94YtJDk2VkFQKp4zL/uR9KZF9zmdXGy3y8/mQ4fvi899aF7EwFzSYey1pzzEfKdVC/z2njFQChAwDwaBpubWAWoDwAdDZA0X27Y4WBr6V4ikkh70/OirwXQtatDniGzSoY27oTTAtAtoFx4dABBFjCv5R3JUIRynZP1JMG69KQa7vE19rHIVpp3cF896k9eTOlX/vuU/u8H9V3keUA9EKmFuUugkdryotQ0sMZDriVw1yIrogfbKICDnaDnOeJJLwKBtR81dCOttTXjhg2pn/GghmR0RHfUUWsMA+g553SneeN8cTxB0ot6yeZBX0C9+qobQK+n2aIangdd8wJxxVLyCkmKSa1C0jIx7/109AR5Sqc5hmgiudyIANStUFkN9GoeYM1ogsCiAKazx28ct6yRFlpJSulanqJR2cS76VliZIPBEBrHAV/LveXImhBP7NuTaZ/7N3enM5enVwOQv8WzlIfrssN7sp+H36U93rrvrSz+nmxYQ/lH8I68XjtPBOWR+rzMWgAdaes+UektRsfvpwGgS0ZSCZBHQHoNaSTZZI3ltIB1a46evF5jH8/GQ0D9ltek9JwLNUtysmUjQD2P0PKS87Bu/HdvbdzSlzglpYRmLZTmRgrNmy+BRc04IR2W3PM86CJjMS1kHgGwZvTwwD9f21EhB2OABN7xGkIet+ZIQhoWRU9YDM8gRGOV6N2ytkOdzYO+gHgNVXuLhIYh3FhV6A76TPZAllrpsB9lAg8/Bi9tJPQ5ophGVgXBOXrSqY1uoZtSkjgu6BoykloA0aNBVIHj7dQAqtw+B/aWN3+UwwujJVzATPxGd9dIcLPnfzy6Rb+PAO2ZKd38tfekg9vuTunmrN2d3v8dfeLhlJ9MO/o0G6MSnuadxTOPnKBYzPhJscZ7d9G9jP3lvHeeb2pZFclLGQXSllcVDWsRD6xn7NoVQM90lO6ia8bNNT3ppwGgF94zzkeJ7/haokHbW2frbLYMpliv1znbsq9mc2BnJxpXS1lJ4R8aGUG75hn3Bqglf82i/Na3pfSV3/70BOqjwmZk4Z4oesLTXxa4rPW8ogcX759zzzr/5q3vjNkUD3YuJ41ZA9ZevwbPTqqiJ7wW9Uheam3PoIebG0nyPPn8ednoXKR+JUViVAhtB4FH4tnSbh70WpItKl/Lqos62ypfTxLXgxYzBZ41umvlwALr0lwXK5VWojgpAUpF6LvkTfcUfs0DP8rJ4RCy1szjCc17g4DGa6fme/G45HBkGj/7W/XGcK8vfz8dOkZvzUyp3jNgnp9Me+rjj4xggmg386jQIassxOS8Hf4YdRj2N4IFqTlJDmCYu5XJ3fOoed8jvIae8lGvFQyRkfZmSoWSQEwCcRqYy78/4y2/ktKF21uGINd59P505efuEr9ZYe9Vz1cuHO2aAF16as0arue9toD3UpCujUsyMEn8W7b8DrQt6U56JJEcn58I4MdJBT16NYAj31F/6dMQqFs0sEAfgqsaII6MisYRbUwIFr176DMhO/wgRQjwsghgkQ7YLgJaDCnXvMu5HfzGgXrLXox4rXO//D46nx8aPSp0UleMS/zEf1vCQ6zzzYPurkTXAi1s2nUAN1pjOcQdleZa7wAqAJpndS2lZHYGDNZ58vBoa6q9na7ygGR5137LjVSGtffgPcvb591pnShFQyi8FlJPCh4P4+TtcwWwxjhTw3szRQ/fJmZemtLuNQD2FQS/+bX79WRaAeYURcBfacj/ZndkpfBH15POdI0isCUlJ/hygJZbwEr6V7pkERIaKO8J1i1+ju4raW96LKjVyb+v7UHXrgthyPuia0IeAeD7mgC9cihj8RqZxfmotT+UvVo7p8lgriWP80LcVRrVAO4IoVHoZQDxhSldvfCWdO7Vdz89PeoSGEXAScCyVTOPrhOV4+HXdH4TkMxlaseBoHBUVod/aKA5Mm8Cmd4cLSCtHbYI3rEN/t3jbylnEp83nwe15UUs1IblS/sLdQdvHsL3DaA3EG1Bldrtt6CrrWqmgHUHPap4RDxnSO0a0LZ0pSRvOrYZ8qBHAXpunHvU89+ewAtMMroe2JS0PjX3I2mttP5REdyVIUYimfbsjxQyzetrYG7fnkz7/K/9bJmWtifL2ghRByNo1xSBgViSvjMDAnR443+FBYvIAcnD7m2XHuBcoqMExnEvRQG7NQfJm47ldw3QowbNkCz1FlD5vhZA597z/O+y9sPb67VDxbXj9dFrHeH/2v698i3ntdfmZI5gPJudR5hHZAAQvfKI1IzVLUvn+K1vSuk1P/z0AeoaYCqMP1BFA+tYhsrXgkYKsZ4xyGAB5voWnksE5BExaGA58rtVZqIsBA0FHjDPbXKgGzgvXX6NFpCyvNN4aH3z+LMslGgd4R8+P81jvtCTvgH06IL3KbcB9D50DLciAXRNacCDnXtXJcWDFFwajFW+7OWF95XDk4aC1hvqkTaLQnpuKBm5gy41uiC8SAu1xFBdKXS3R5ijFjFBa4p8oNG0xgARKYtPd9XcWd63zOyXP3hvSp/zE//N9pgkcaWwPfK8C/rb2MTwD+wj/02Z3LU9zn9Hr5qU4R3fUtZ4KgrUzwxzPuLRBqzRyB6bjaFyT6O33JI9uw5xt8ay7yHuV3/iNWV6EiCvDXuX6MTXlb7XrPUMv1Tef+fy17oy0eMsUGU7gHJeTgt5P16U4H3pyEGtDk5IrMW9thxEvOxpBtQnC6G8rykBdY/eNeuG96KL4jCsPQf9+Tcsq51f0u/emKy2aoCkZOSWPPUckBOvj8qyYgQgGmB73vj43Pj4+Bis5HGc9rk+tcH79QwSFh9541f4bQPo3kbs+30D6H3p6bZGSeI88Ow1JHlRJ7If7l0u7c8bj/cdlUoeDi99q1ZCMTwrDwiTykkKvKHUS6DUM4xIIeqSwqgpcR4dpTXG3/jfS72LZewsa7s3Pipfznzt/vlwOOTvz/iK/XoyLQPznJkd95OoiEc8BHBQznQN4f605wXwDG9a+GvhSUGx17Lz4/pGQbzLQ8Ib6WaEAp5iyp6eGCXgfjv3ymv0W9uDbtHlpN5FX9ODXvit0WuOtNIMOiRnNTno7RWPV61xeOdH776jY5UA+prXVqLjMss93TzqM8YBsM5lWiOYmtGTg28CfdJTbVIIdjnQA55s3oc3x7I5h0IEJlvnLYF06t9qG+fkzVEC7NQ30lcyvJNeypPscgBei8h432hEoPlbtOE0CvS9AfQu0izcSGBJwm1tBQMUyACdlIZA8VLEAniSYom/1fYXHZenUHp30ousGp4gWw2Qk0Dkg60If9eULInGXBkcZSO8Yc5/L2feEMVQq6xp0RWz8OeGxRTnjBm8yQM6/Jffv5burXEFMP/73BendP4N96eDV97RMMLdVrn2q+9I45Np8Oay5L2eGHH44TgYOkYjBlMGJD1lNLYTjwzTHtsnQ4cRCVPGxxUhhXSa0j7TsZTw2F2tiMTf0t6hcnyfSvuT/+ZFpuwySZxEz6WRRy1rtAZAzx50AubkMcf/SmPVongiv9cYeCLRQh4tNTmM/Oi10+u7lHtCuo+uhb1HI2N6jfdY8RGyge+zR/3/eTClJxwKSWCPV5EAbASk8Takq4Oc1pEEvNY0EFVwgCz9e1SKAkYAy2s8O6yGH9BzLpXTgLkH2HFtpL44ANc84x4Sy9/RmAK6hZgUr2b8RSF1noXdsrh3FXFeYx5bePW375UUqAXoHnCzAKQW6ue1WTmlUHFJucRkR+G7lNqzLXgI4ch4dnfucZf+3fC0z0RWDzuLA3D83grOZ+eLEi2xZghl0Z+Eu49eErIze5aZPT+Zdu1TxxTnSrdnBJvtMQ7OSW8gYG1IYekMngB0OlNBsZP2eHTfRzzseJ2B+CEkDCoLId01IO3NT/seNXadlAcdn6/UnmCrNnIG1mHXAD0wpEmRWjDNz8Ra+egZa7Wxn6ZzOEJfLWFkpG5TGVHIMXAuAcaX7mno+2/985R+5wd9oK4BvxoCe2Af29LuoGMkogTipKglCUxTnxbQlowQGnC0+sC+JCu4Rc+atrV2NF0VjSoU7p7b0SIYpD48g4Vk5KoF7azfzYNeswGXl90A+nIaVrUgZXGvaqCxsKSEesqKp/C2DKXmOTYVsHvJ4/h3BXxLGd9b5uN5byyvXEt/kToSkCSAGamPZSYKG3tyTTwvhLeys/fl7LP36y3z/GTa1ccfmYSyR2hnKf15P2X+HyPR0NouSGMPgMz4iwH2iAHIeoJJ4gMpjD3qXcMoCi103qMzeifF6wVeI/Dd2sdU9KQAuqr7DbJtzazuawD0w//p+A46Tw5n3T2XvtXK3VFXFwyntUA9wlqaUcmTD2uMRdvH5UxgRlYsp+5rz3MXIZBWJgKKeMKtffWoc6COwHFkVoOQ/Ozg9S2NXqMtJtiltq2cHrkMeYP5MC3eQFDK5ymFodP3BYByRkHPaFAEE4TeR+lr8T0amcrmGyrUtC+te2S/aUYwnK/T1gbQI8TuV2YD6P1oGWoJ76DzA7kGELd4lSIKe2gSnQut4hHSgHnnsat6Bj5BJtx5Rc+KZzCR+vK8uqiY7mL66Fn/gtft35NpkkLPf8O9JEVKoFGsnIU8HJ0lgqO35gm0zvQIUFKK4B4KlU/SXfXKxbbupvLEcRN9zFDwy3y1PAS1Y2PAatJ/p7fSrTYpWuKkQ9wlkklPsPX0pK8F0Amc45z4nXQJmNcmkcPztWwbpvXUnLmVLDt72YH4SJPJq45FeCYR97RkMOu1f6top4Vgk1AkMMezXe+pR/3a7/xCOvtbdx971D0QxUEdB1atADZiDOF9EiDn/RGIbx3DTAAMP2iAnffDx2/1r81T8z5LzNoyvwh9OQ9rBhFOC+5dHy39woCRlyR+sYwiyobdAHqVJFtceAPoi0lY1wB50LmiIN1jRUWC92LdudS8p6iA1o26f2nrKTbJI2SGv2t3pnhIe54Chmr1n9asRcmDzhU1CZTz9aX61poTr2C7Uj9FTg+CuYe3Bp/k4mMpCeC++cF05otu2QGlF3TxxKV09X3fn+jJtNqWpBDW2f5mb6TTGtDza2N/aElnSsG4r3neAg7MBc85tTvyDjuQ0cBA4FwNA2d7R1LauWe9zJ3dVZey+xcadADvyMPa+C3wI62fZPA4CQ+69NRaEWWC9zx8RaiCwdcE6FoW98I/nZLH0VS1PRo5F3sAZ8njLxnZK5ama1HrxY3JPo2AjtaRtbSNZ/o+AvVMr4/+ZEoPf3tKTwr37ouwNLKM99DiMbyd98kNIlL+Hm44qRkLL6tFk2ne7Foe42erVdc4g2dr0ALatb6Jhhj9Ge0D945lfODAHtfL6W8D6LWMt6x8zXZa1tNWu1CA30FHr1tL+JsEAEcAIDwPIymePRSQpcuLgJ0rofnfVcqndu8HhR8/bBqfa/NCLT26oJdVC9eNrpHVHucLb1yt33P/51+8f5nZjz4rP5nGFXzJA4bGDmlPSwa4yV7XDlNMDie8gESe9NJHQTbHIxb5aDh8sSyutZbJHcPbNa/6SLMVDGJo0OL0j+4dqRz9phnUCl//7V9J6cLtrVtjXu/R+9OVn7urqT3uJccXMXqGvK8B0OmZtZFPDo7D3TMoX5IsLkJIS15H6vcqg+dwVL536195hk0zphWZ0sGgpo7fkIGTOhxAWWAmA/Vbv7Pvfu1FfKsdAupSMjmiUQ+t3TKG8Pbp35SgjIM7K5lcYZhA1nc6sxA0enVbDRYWkNXo6o0F5xDhZS3kHQ0J3PgRyQXA14vfa2e6wSyEn39zeHwD6LsQAtf76LHVdzviPe+N30H3Qt5Q0Z4p0kwZj5DFA4Nln67IEZo3iMYufa9+XsgC4bkjtAA3AnON3lFPSdTbHVlXr4y27jVKoabY8r6f8WXPSzd9w79KZ15wmzekk/1++cl0+PB9id4yb/W64v6l/eMB+bE/TVmAPYiOBiJeqc5A/Kw5CntH73rFgTz2JYSyS++loyKvlVmDAdBLinyf/87gVZJx6M0c581k7EmGuKPHHOmnRSRVGTaFRVkDoOMd9MKOg8ech7DXhrN7MtmTzT140pOTkixGXusxjiVtaMk/l7RZ6lqgMNI4v3vOPa7c+0hnfP4t//9LX5zS7T++/0CdA7daHS2XtzKA8wMF/83DoKkNrT2ifYthlvOGdC5G+EMVAMZ780hXzZMvtS0Bd4/HI4YRKkN0toC51x8ft1YWaV8OcbZfGb9tAH0JI9bXrd3q9T1sNSYUkELcl5LIUgpQIVja15L6FkDvcpdS85zzQWsJ5qiMlRhlyQHExiCFNmqAHT2G1EwNuJ7IaLbj0fvburb7+GRa+tz12WqRLDX7CtfPoqValh/MwuFvAXB+H33UsRi4tCJnvMz70l1VyZsuZX8ex+KEyNfwniTT0Cte8IDC69G9g+t/kgBdoo8UdTQRdYzmrV71NQA6edA5KC/rFQhr7wngvWijKE96oJx4EeUM7lPsL8qn0XFOzgFI5smfV0NPuXR9pcmb7oET604tnuEEIsYDcQAUGqh5ugD1ySIOfyhgyvRgS2uBYe4IVrU1wP4lVEF6lQXExw0BHK2FuUc829HNwc/e2UYMRgJE+8I1JHppb9JjEj/sJwrSJWNEEU5GYjzaZ0PdDaC3LHJ7nQ2gt9OuqSaFuPNDWzqoex7OEe+QBAR7ADhPicxzl95Cx7DNJmJjJW6J9IC41mFDPS+sUlLcJBDP+cTzwEveXay/NFpi3zKz5yfTDv/kmAoSYNWW3FPAtf0lrddsn9HzazxZDFc++aFKhykMFMdXqjDv+fjvCmlfQPvh0BHUi7yfXKYAIbFNSn1w41sGiLK/sjKneHbQ866t22kJcddewiBZmv/bS36uDdCtZHFW2HskFD7COidpwNbO3BrZFJljtIxlqPP27gjws5ElCrTDA1Pu9tCelp5PLZtg2PM8ai4D9a/8npRe9jejvZ+Ocjz0XfJ4eqOMgjjeDo9YoLOHaMnPIg4wW7zn3tipL+7NlyIoKs63sUvLe0znsFcmMn6pDK4J6QD4/Wg6AAAgAElEQVT8zj/W4zTg4+P8jnXQ8M+/e+Ccl83n6NvG3POts97qVVCghaUrmt+KIgUwi3uRPQFPDwJ2729RHgiZxLH/07Ji2rvpVRmK0fIoHdgS4G4A4RrdWsMqJQNNT6MNrXuLEWbfgHl+Mu3K7z0yy6o8O/uGw0+LWqDyNYC9nKEsc7v2b3ffSdZvsmpT4j8E0kJmd0tu0Dcp8d84d7i7amV+L3MfQDr30NHvhQcrFbqIMWSiUyi0d+nNClCfp82DzudgGUI9mWmFwa8F0Om++UyXFLzo/Dm2WXkhz0pkbWdGrRXORsvoPdGRA+d/ZE6tZbQEcdKetZ5la+3frcdlnxbmTo1Ihk4JQD4npXT7P99foJ6TydH/oh5m9Djj32gMHoU+GEiku/94N50vaos+xc8yBKXlAAGvtjQXy1CE4FgzYCC4rUVMGgDGO/d8LcvBCO+h82z59N3dOEYBNDpINBaqbx70JUSvr1vLbvU9bDUmFOAe9LLPhhWQwmyjIC2XK+8r031UABpFnrFvlpKLxoKlXtbo8ke8QrktSZl071lGQ9+jg+1YTvLeeYpdy5pIHvkWI89Nr/rWdPN/9WMp3Zw1nFP8vz/8aLry899RgPmoZ7C9pu29FtpGqIDrjP2UteDKpRW2OBzQliNl1FcEYF++oQJEYP9sStdywq7Kk0F7Tx1pg0q/Rbvs9b5GdBkK5t+OjLFJsi3C+94a5jZOiwddGqt0RSiX88C5N++1ALrXL4a/8/KRUHit/YhxzRrbGkbSyPnsGQ09eka/SwkiJ7SvNKhF+52V0wDEIPtUL72WfGs8BIZ/EOB5ugL1ZsILFfm5JN1lLwzM3kVHQG49H6bJcg0w0/p789PC3y2+4jwiGT0QVPcIsfeMIgjUkdb570xfKXIF25b+RiOGpBeweW4A3WO8vt8r1bC+nd+IrSFAL/JGeTO7VkmW6Cm1TQrB5OAFK77Xdw9FxQPlUnbisMKpgXIpiVyL0tFiFWYE1+hr3WWO0NxTQMczKOBd5fxx8IKvTl/wbf9ib55Mu/zvfnZi/MJ5833n8bpEM+sKQVSuScBxlkiJ3koHZaB4pglU57WETse2mfNDMr4VnhqUHi3EFeejec1LM04yuYnMadl3BnE5PbmMqzWCzuY77JXT7EGnMWuvYZzGO+jieSUki4vup0i5iHzUDKRROREZB569GMnkRTZFzoLqcQz7UYt6KXuKRcScmDdd84xyeULyUjun8f3ufQfqlPV9qUZvAVgevYCGX4nZLNCuMadkdUawPJxX4SzxGDJuedatTaOBVxpP7YbTyktXC3DM+W/kd2kcRE9OQzR+IM9oERn5fP97W4h7r2WOtLN0O0f62MowCkgAXQIAnGjeYSwpHZoiwn/XFNeyzxmA8/pvWWALnHvthUG61BACdwTsuY52p80b2ILv0rpQcy2ebr6GoiIsGIWkcgWY/5f/415lZqcn0zQQLSnaa/A439dFuWWRLRjqTus1WwNBEZqcr/AU29gnB+bDwY30IGDeHHav8DveUffur05kXYennCQvOqcvRhPR2ngA7DQDdA+YE425p50ij04ixB1Zhz+xNso9eHrNEq8tGd+tM25NeYDnvSafNfm/4JgJV9U86dH8E25HlofUrewUkDy+HNBI4J1+22eg/tEfTukPHp8Tx/P08u/aFYK8Xvn/+DRt7s26Ox31ps8EgpF3YDjPZs+F1aIZ7p3mId4GQC3DlMLBNRp7tNdYmcC39hRwZI94TiQvSoHGvnnQI9RepUwtS68yiBupUc+Drnq5YKW4AmF5BTzvvBYWr1nwd6G4cH7AZ9a4J8gNbbcYCwXgpNOT50iLD7TrChHvEJ8ZN9BwAJP/vc9PpllznOkBw76SQGotPTVF27qq4oJjwdqNgHcSucYP0xEJDP8Yvk3GoygQVMYLeR27EN5V1oA6Pr1WA+AtGo9jgTWVDDWScZLAqwbU1wToktGgVgpFn7GsMXCuFeKu3UEf15DdRW8B37W0I/nXagyN9Bc5pyPn/5pncCQ6ptCKedulv8tvtIatHssIUaVznAtE9EaSvKMyHMQQAM3/3VegfvGhlB7+W8dAHWV7LVhEUG6BSXyulupG1lAU6spTX9KcCrMFOorO3/IoYzcCiA2M5LiIZiCgBvi+ISNI/oYRAbx8hA4TBQkMIRNlYk7XzYMeXt0uBWuXs0unN3IjBaBLlikj2Q2GbkaU1HHPsiRJWM/zskf63cVaegrlDKhLYew4UC8EvnP4bSud0LMe9rwqHXprnhWTZ73x/nTwyjtah7yzeoe/+UC6/PN3Js9jru2XctYZ+6NmIlEw70WmmOPhYH34d2nPeWJ47BPC3Ucj3KAsLKGFBOR5Ariau+c1dJ/oGoIM9fgdgbrFE2sB9CV0r6UVl6XoQZcMnmsBdBq3BNTRm86TxOEza4V1A8+z1dJpHF/lVaCl/Vj1d30ee170UcdQEkHiXGaGuFovumCsnNztkQAPB/Dc02slkyNve/7v0wGoE6jj2r4FVqV1sX6jdsnAoelOkme6lgeGs6rwFnqyowBc22QSf0m0GxmfNVRbt0ZQkLGD5sv5E3keEZ3lRZf2y+RAndN4A+g1C7e87AbQl9OwqgXyoHuKY5FDC1cnK36UPM47+Lliepq85+gxz+P0AHsuE/auWyHuRLTWMC0hvwCugxaOq54hwBMtHh+N9575+rekc2+499QngDv6xMOJP5lWtQGNNUEFuCdwkpTrUPsCKA95CwaimHoVtF3GQ44LRfZwz3qRGfzZHepTeWN5BD2Bu658TZd62EmWcrlmRi7Afic5epqTxEX3AI9IisjStQG6eS4dHD/1hyCeJ5Dj4LyXpx2NovxsjNLZK9fLoOf1U/s9EjGDhjfvJQbrjfXa8U3KR4FkYXQIz6aGpHBlHFQu80Uppdv2POt7ZK4zBSXwbJ4Ujl2UMHZPegl49sAvRmgs1JtnPBkxTniM7BmXxsMRQLFENw7QeUQIrm/0qib3mqO+UYTf9cltz6x5C933e29W7ju6p2Fr1h10Pt2Ip40Uz15ksry1vfqoaUe7V0ltSEnkNKWzCrCPHehvJ9fMI1LWMtiMugRk4sffI/1oZZ51x+n3mmdgTk+mLQVtGhgPgeYFhK5Z57Eb6dAcPk7O/QoFbDL/nBmdR9yB1zCitE9klwLAi7xaMTKlvHWe9QnlVEPaS2Hu3CiK5dfwoH/+X9xVxrzUGFvLkpKRU7qTflIA3cviroFx9LBHvOvSnrR4Zc31kgy2UpRH7XovKW/tf54obqlMDo+xxetaFIMBNFJ99K7jAKR+9tGj/uTFlH7q+Snlp9mWAOXC+BB6zn/T6IfRCrycNh4OGj3G4PIevfQ4ZqktDYCXw4QdtNrfVv+tCEvzjKMxQjpPMQGiRz/6ru0rNofNgx4lZp9yrezTp/cbsBUNoEvgeNw3javk3m8V6K+NY5cKZCThkZTsaDE7SffZVgQU1ng1A00rgNTq5X6e9eb70tmveeti8q3WADyZtlQRjHiv1jJWRSNnMIplVo8f4JrCMygrpShTXLiXHO9nn81ey2t+6L+U8V0Lc0cvO2Z/xjvpPflIAzz8zjcCrnGvgCd9DYB+5eeOAXqPO+gFg+Rn8oSoBo2mUsg7L3tSAH08+wYvelkjI8O7BNjxN/o7sv+JJ5BPVF5ZyLTemJojcCrHFTXGWW+na7JhIqZYMsil8nxsNws2Em4cWOEdIDrT8+/kjfTohOCFgPotr0npORe82if/nYN0U/FQPOZRHZTTX0oeR2sR9e7ysWqGas0wjeBf8jZHVkbzfnvjwbFH+ioCRrgXLgF2/uRd/t4CzJF2OCf4vgH06CL2KRfddn1621pJE4A+vPE7KslciWYrY4Ey/s075CfywrjzLikh+NtJLqV2j5IU1C5jk7K9d2nYb8Qy1qDi6Ldmlzj/1d+abv5vfnppM+vUf+JSuvxv3p6u/l8/Mz7vgx2Nz401SrIaj1UvEBXZh9wgNumXJ4uBg7zMZWicOyCk8z4XG8XNUFiaX6tByGMI7Tm2mvDZyT4Z3kevkYF8L0n7Cq8IrQHQd+FBR2OmtjaSV32XAF1LHKfdSad5SMC9Ntzdi2zB6xFj341yx90fcP6v3Z83HvweAfKSIa5rBA16xIsCwELZNWAlleHgvggD4X1pBEm53BemlP7K21L6ym8//UA9J5D76ddMl1LyYEueVInWEpjj3nIygPB1sRweRHPN+EzrIoW0awefxNitUQT8UOVj0YA69a3RGN+UnygGQqQC9SkZoWrlEKe1tvkFPthC3Gsl5bLytcu6rLet9gjQI4qkpKQvJWGNwq15cbUx1LS9ZB7WU0FaKHtViLv2lIg2aO85C6gXWXuukHEvJw93rFXapH7/wj+8ePreNr/8ZDp8+L50+YP3lgRwvROMWfSXIkW0nAytPCyt4eRsrklMJSlJuT48V8b/1ozkOIby96Bc9DROWNndaxV4zfvmRSRZnlEE5lR2DYBOHvRRl+uUtFDiTe1pSysaaZcAveif4DGnBHH0rXXPRepJxjqUwyg70LMtnYGt56J0/uJZgG333KcRmmEZKzFkbzk+9m0BSgRS9DeCI+5J1zyvEkGo7+xRf+keAPUHXiRneJ8tJITDIyjmdMW6BOYtQ0iEuTQDy7gpnfvaGO4eQTsaCEc+kiI0cE6thgCcH9EBM7lrv6MRn53jkyeEySilrQWnF0Xjbe+gRzi3W5kIy3brbGsoTT3oAkG0QzmiCLTQV1Nkpf6KjDK8bS39L6lj3aPM7YZBOR+ElkyGg/bSeL/76TWAXdQRWDSEBDB5Ha7QnXvhV6dn3v1rS5agb93LT6Yrv/yj6alf/Qfp2p8fNz0qfHDYdQuLhBngfohMkGhqeeEkRXo8hwVALvY7HMi5n8zb41pzpUKQ6DM9B/obxzYoHUVXHULdkXfy79dy4i6QA7RWUtI4nIt3pzVCc6+MBdB5XW29JVC1BkDPHnRPtkcjqDyaeN934kH/w4+mq//0Vm8ok+/oIedZ3XNBLby98CRLNKeV9WQqnXuaoU4DyTO+V6LWtLMW+bSMH/KQtIJ/cc48uSMzlEzGYSSAlELbRxk31CvyfBBIogyXwLbGLVpZAh7SG9L8+geCMe7d9c53DXxloP6lb0rpNT98Oj3qH/3JlH7h26dh1JbHumqnQmHrfnRNu5pFGdevbFQhPByvOFC5sqGcJ9o0hIQAnfctANua6U6FH7uGQUYl7v3m45f6jRgppNB/ZW9tHvTmlWyquAH0JrK1V8IQ90hGZusA1zx+WIdGrB3oHrjgSorWdjtV2mta3nRqVUp+pPaIoe1UEA/v/Du3FI+dLQPu3jpItOdrWqOwPfubT8/dc3oyjYA5KnaWQimFS7dz1HFNDTRxBdl6IUFbk4gxRjLS4Xxm66xY/ktbvLKikJiGCbyHJrx5jvIFk0cVmipvpZOi3tPDZtFZ8oJK9CU+yOUPXvDSdPDXfyGl596ylLWu13/0/sQ96DV7t2YQ3vvoo4gb7q9zoN7dg547e+JSSg99b7r6Gw/WTGNWVsrurt07r+0I9yCXCaNscgxrPb3Z/Jz3vOi1c60tb4WuS3tYi+bh+742csYdswXeUR5qScwIpHue3MIcwt3tl55CoH75yZR+6LnX3w3H0PA8FzwjokYTfgbx++f0O7XD++QIBI0iFniOAmsOzlvQDhq/+WEq8cV4EA7/aOlTY24E4JzvyCiVx8fn7OVQitCRrdd2B92VPF0L9GSfrgN7ujYmJomj8BF24PNDGJUDS8FsBWsSvRH8R8Lp1lIycXzSvUpURJt5CLO71oa88449S7wwSE05HGU/OyRQcdM86JL35y9894fSmRfc1kymHhXpybSrfzRvrcyFWfdR+av2ogfBKe49vv8sgxhfHywnrSmfsWaEk34nPh8VZUmKK4f5DMeDV28kN3otpMV2DncE5NbfUjbo6vVtZEhNnpZQ97/0vHT+r/7PKV24vbF1o9qj9yfyoGOpnuDOGziXpVh2FYBOnQxA/fDxB9PRp+1RYuh7wRHDE2wz2rGn2Vo96NimJZMja+Xtf0kWqHo66AlrGsy9PayOkQEDSW4XmTqUWbTPLfCI3/g96sJAw+gxFJuEpPRMGPdiikqTEHZ92oD6j565ntG9LIQwEQm4W1tUWgd2dpeqJTTL8VpH9SXLAON5zK051yAi7YxE73pNmzS2iVUdCI9OJBoH5+/8m8er3sEg6BCbB90jWt/vtazTt/cbsLURoNcKwIFWkmeIwIAEjouSSQch2/S8bI23iZZMA4K9l9Ty/lgZiyWlsynkHSfkWSR7E4C1Z3nXebeakQR/P0mAnoH55/7130uHn/j1JoqZycQYcFyi/Fk83tsQxfcw32Nc+S9nt6CcS2Ci6ENk+KPQ2OzBHmQA6haaPrCG8i9lgLbeSu7pWTd1THYaHp1P6fzXrxxhAh50HJsG/KK8F8norpWh38+/+d0pvfzOpj0arpSB+icfSocfuMsF6jNeh7fS8Vk1/o565Mk1EXMZoem0z6R9Eg19D9OJ7X9exzr/a9peUlaKmCnyCkLiSx+D8AnJZguALxmwuNAKWI0AHW+c+ft/cko86vke+qXHZWAeoWmNUQQtwrT+4yHHgGTZTJURiJphgNpHj3dkfl4Zb60Zj0+MH9ygHWlD41GcE7Ul0U6KStDGF+hvA+gec/T9vgH0vvR0WysAXQAQ0mE1AWSQ8d3y+kSBhaRA8PBGBAdlXwPHRJVFlzAdC0h3Kb3mRfAuZXLnAk+74xYB8Yql2DKWzJRTZS0iHp3c1okA9OHJtM9/7BFvSa6DUcXTwvdMLYjTDF0YPqop4K18LwHxUVdBb7bwNx+PxA95XGVsxIMQ4kc0cx0ewfBdTCLnLupQwLuvWuYpPMUkyUlL0a/ZT2Voz0jpplffkw5uuzulm/OF0hX/Z3jQV+xVbFp72nJVD7o0kkfvN4E6vo8uvZdulaFv1XzBxmp503uum3XGi7p0IBdJq9yqnZe1v4seYXnPW8GLNEjtytoodOFpNpSb3sS5V5i3KXlR6beT9qgTQC8L4U3Q+I7g21s3ydPLoxiiQ5E815bHWRon9uWFevPyPDJA6pf3p3nZqT04n00SWLyc+yGvOa0r8SZ/fo2DeLzTTrxvWO83gB5l0j7llmzPPiO4wVr51B3HgVWkRNc+ExWx1M9kD2QGlrxy2jJEFJmoZ3fNpZYyFPP+JAAe8qjjPfOW9ztXmLimvI1yX8gGfZIe9KNPX0qf/z/enp76jZ+posYuEorhgCQvNb8iULN/rMl6ews9Y57hZdKeopSMZ29QIfE89p7C7z3HJGV0F8EHKPS1QD3CdOe+6lvSuW985/rAnAYzAPSJ7meALM6DkfksKbNTD7o00EfvT0e/dV86fPwxdxoYxj7KQCUE3m3QwiTDvkJDHv+76MfRxI+NfXn7cskce9Y9yasr4r1wmhyCSf43XnELysoZ3TzAelJAnTK5jxtlepUstP4STaT5SqASQ7ExmrSV3nxti5ItGCA8j7rVt/bNALQTWiKw53+HiA65DtAQwMfBDR8YAcJ12Nyv5VCCNd0AenSh+pTbAHofOoZbKQAdn0GCja96hJhnTPL0ITjzlOfwoAPZ23v2VTMuKkte8wy68Tf62wLkVE/1vvODRvKstww6UEfy1kjVODjDfyNf0N878aCzzOxHn7keYs2VWI0MBaCyQ6zWmBUJofTKeKHngSWc621KyCynCfaLCr8K1iXrvqEYoI4w0V8EsDjuc1SqDEJwEO7RSysrJZHy1s7ri77f9KKXprOv/dHd52NgHnQE31yeaqHSu5C5OwlxtxYqv938kZ9Ihx9+sNw5L3skmJlde6KNh71Te5ZMrTFAr71WkpzXotp2adBRZTjcRZcSzJU1iESdRTd0bTkElnRPugys8sUWC/hTe+h13TVQ5wDdk+NcN40AZ/SS8zlzwwed7fm7FIYthWuLm1RIzqcZRmo823zc0fZGRYsNFBFWxGOu0Zl+13iM+BaNEDhvPk4PAfI+83bYnlmrlS6LynvLs6jxrfKcAgTQxwQlDKyHFM5hw1ge1KWKG9aXAJ8EEJb2G+UXBOPa+765PSsBEvUX9qTjYYIHi/e3NMFoUhShrsQDNWuwKkAXnkzjU/C8x5Oy9ESPFPItHD6ad3WJIrgrj5UFBrS15b/n+uUJNq5korKR/3YUr0JWIWnlCAaG+pMxMWXP40ME4ta99CXrZsmUVRPARYQZ86Av3csevSPDwTJZdu48xF0bqJP5nYN2BOYSUI881SbJK80QSmW9yKaWdbDqaNE+PTz40bHWhLOPdFIAeUgH8gYmASoNZEmghuSlJDex7xrQinVxTLsC6vwtdGlMHn29efDvmICPAz7y7BIY94wFkXF5UQvafK11tIA9Gls83pMQVwS0ezTnkZ6crnzsUuSCBPYNnXTzoEeYsF+ZDaD3o2WopfEOurbhFqwIWtJnZwl7Q7WcPdBXDWjC+ujxkdoPEaihkHZ/knvFOQgPAXJtHFbIVq6DIfEN84lU0TwpkudNU97XAujak2mReUllRmUTnukiD7v0jE/hv45eGe7R1pRwyWg1AmZlX1t7LhoJIdFMBWxkEGQejIkXXfDuE1gno+KoywjGESukXRpTzRUG6zm2KsX+GTtIABdg9sP3vz1d/aV7Z3I4V5VCqD35Huiyusj5r39bSq/5R9X1VqsAmd8xu7vmNafxaJnfl47XAspL266pj3KK85L0raZtrayXT4Lyg8xUHpDPVXuYN1YLysRDBjyxHMxw8MblOIK6JUCLt7t2MjlMEqcZa1vCvaMMRecPAVwC6Twcu9b4YYFjCWTXetStufFDFPkAPdpRGtWWo/lo+wGNCWScovJo1Bf63wB67aIsK78ADi7r+EatnQH6LPkRv6/mrEhLuJ3nXUFg4XnxCviB8FcrJJOvtTeWGr7wshRb99KrQDoPzZIGaIHyiIc8UiZIGK7EWyGO+dtf/J7Oz6w9cSl97scupKf+v7nxJzj8WTEOwi0FcUxWNniPNWWvNqFYq1KrhqBT/gm2z2sMYwjSqsJYBdni6TSSU6PoH0PF8d9sccYxFUFx/EED4tLvGAZbQAZLGId8IBloROPMLhPABRj+6gOvT9ce+6UZGJdAFf22K5A+Rh695HXp3B3vD8xmx0WeuJSuPfbedPRrd4czv0tPtfUcNXqt+d7see6pcpDt7133LWJeIW8ElTONp5JXD8HFkoWLAHr0PHr91YLJkRBgGGBju3rhdenc6344pS95mdd73XeeJA5r9jZA0Blgrd/EQhx4xztC6whFJF070rbGPwjS+Rg0unIwz87LyPAnZfiYNGOEtK9yI/xOei6T922+ToQOjjNbiHv1uiyssAH0hQSsrf4n35aOJko/t2JJjVWE/US9qkUODCuvKQ78+0TOCPUkZYADFN7fTLlmycyWKDHaG+hRL/piwI4hRku9t4Es75Inl3veiO6astbbg54955/9qfmTTLXrirwXCYfOAH2cJ4XE0xrAoTtmMjfugkf2tbRHNABVSwNLCce9Ze0vnu8ib90x/J06UBQSfsZL+7/Qm0fhKO2UsTYqHtJ9dC0U3ouW2HkCuAADXX37mXT4meOCUoSGBcYtfurFa3lcZ5+Z0rm3PbG7xHkBus2KKJnf13hyDfeCJG9zGU0OawbUHmsmGe80o4EpM1rWwKkTMcRxT7u3n5uHGAH/kkHe09OiA7KMA9LYbnlhSnd8PNp6rJwH0DWPunooCffArZFgdALXnWr6zjrSgdG3BPxpXAhiy6YdPlqoKALgvVWQwLRXJ/Id25U85ixH05jfh+uqND9FAdg86JGF6FdmA+j9aBlqKQN06ZDnd0bLYS0dCIJw0MJtSUmwDu2igJ0dlHawvkc9NZL3zwP/IUItLCQBdgLhCNo5HejfZvcaGK/JjrlwfqRgWYCcK2GSArgGQP/MA8cAPco/NWTgyqYUAlz6XWIYgacMrbHhWFDxtrxpvebM23E96YqFvYzTG9Agd0YRoRjpotEbUneSEabIMKZQoJKvJY7jfJATwB28/h0pXbjdm+Vuvw9voOP+5ftaM7judqApnfuGld+D7zWhTNMPfV86+NQfjwnlCj2zEj/8j4e49wh316JftEiXnrLR61uS+fy3HkaBpUsnRctgm82h797gLLBMdT3DO9fJIuDbA1GFQYhZU0oXVgbomrfVC8su1l7nmTaJHpanl8898vb85AAMPBnnrU9tezRe6QBFZKUdsmhEKIdeYC4abyOwltaX83b+t5Y7STCWbADdEyp9v28AvS893dZmHnTMlOxkeKcOPOXNsuxbinTroY3jKXJmEEprgDWL0AjOMUO7dR+9ypPOB4Fh7h3D1l2mGgpEQOOoqK4Q4p496Byg91QGNf7yQqcjCqBH35lHnwFUrnCj0cBrN/pdAv98HdEYMNEz+HN7XNpzb0FQIZisAVemSJ9csN8tD1vpCqMiqE/lSsOJJ4CzFveJS+nKj19IR38qF7JkO8rUVnmtDU/M57EPXnQ+oYsPpaMP/N3yRBt/Ex0TyWnPs0X3pXQWkzyInr+RvjQjfCRyjY9R6qs3/0TmM45JCIHXjG7NhlcNlFnAJQ8Qvbw0aJ6DRvo3975LnklOIM2bz39fG6Bb4+EyPnhGmOsvGSe4I4qMsWhkp77xe+uYOCjGcxDPtdY+RiYXErJqNNe8+hJKs2iZ29dC5/Pv/K45nz8ZXYxokQ2g10i45WU3gL6chlUtcIDOlWxSQieNOSE3nkfRUtxx0LlsCX/N90yE++WR8prX4KQ86lq290hSOZpvCLBLVnYeSoQhc9Ih3hnQR9aw9x10DaBzJVDz+nibaFTQhoNHCof0srdPvjcevJKhgO9jC0xLCr1GG2tvl/OXJXx097mlkFA01bcAACAASURBVAwnQDmbB7CLRv1CKqY8SFGIkzLDRD3ln0C3VC5ieCl0wLvppyQBnMXP+e754e/80qyIBMQ8D7vEex7dvb0mfT/78m9J5978npaqJ1eHZX7n98/LWcueasOM7taAI/LL8mzjvq0ljma80YyDUn8af9TwDdKzdh6k70QTyLW0X+pEPNZS4xJ4HgU4ACBJi+agUrpqZXmXTwqgczqgMVf6WztDtd9zGwQCaW2KEB861owblm4kfUMvMvKB9PdMwYUfaE6awQdpp3nVOXC2eCzC8NK5rs3NAvn0TaMlm8sG0CML06/MBtD70TLUkgbQRwVYyLJcZJiUJMkB8GWvBt5cnsiWgSO88DjetgTALet+iFAdCnGAbiWMy12FgHhkTGhVpzo8/J1biDWrcaSvoYwFGqkZaT3WCnGXDDWR3yqmLBaVQqCb7jUyBUMCyt6e4oPTAFbrXNEAQPuwyAjI5yDt/1JfitKhg31kmOkb9GXOENI4OTx4okt+P53RcmKMgIz8Ej2419w1yJyyBHDa+l79ub+Rrj36s7M7yjP9UHhScCm4a+U5qnf2P3tLOvfGf7a0md3XV4C6dke97KXDaWh8zaAt4yjKwZp28ZyWZAvueUlWaTKtdiwaSLeyupfxKZ7zWfJcJWqmapwWoNIAEvcycqCF5zZ5GhFgenoZ79cCs/nbWh70P3h8eucaASUaNqqIPhTObebrJdxZYbWDjo5cFn+jcWlX2VodHZJVGs/EIhgC4ecRntPK4DjwPJ4IgcA1A66PRtaQG1EET/oG0CNE7FdmA+j9aBlqKb+D7oJfsIyV8rhZ6L4shXhyKxdXloUne3CgXPGjA77IokHhtw55S2mQlBFLyayx4OMcvIzuvDy+ja7dSac6JnhHAaiBb35wVB4iEa8N0kPy5KKXZS2AzpXEiPHA2jjc+COVs0CcdH+Z9tG4p1ijLXTG/ULNuV7tgLTwxoOKdpXiDYpA+VNQLMffWXl0UJS/2UnCjUGo0Jje8ixvsmdTuHeOSn2RT4PsO40J4GbL+4cfTYf/+o50+InfnkQ/iDwNtLT20BKZGZGhM7n63JTOf9fFlJ57S4CDT1mRDNQ/8q50+OEfnGR+x1D3WnDueczxjNTO31pqRfrFMtaZXNt/a3nLkIryPHxFKeLZrB0wglQOxKN3pNFjGhkDl827TBIn0RC9tBwxSKFUND8PyKLeRMAw15OMItge6VAt6y4ZZvg6wXlWpmTN1RuDBP6jBgHseyJMlAR5Wtt8XvwQJ4MURn0KeuoG0CMbuF+ZDaD3o2WoJUwSxxX68u9ayxrbwJIne5SXTrb0JYqeBuDL0PgdWIVCkTIh4gYKaffTeVXyvAeamxeRALvlJa8N32oa1PVICg7i1gTonK/XWF/PWz7ZVxzwKHeWvURElqEA990EoAq5GDRPd+PSjtWi+1+UMZoSYQxqVPYH5QXn7e1/LYxd6lLyyp1/8UvT2df+aDrzgtuWkm69+pefTFffd086/NV3mn1EjTHliBj42dpXa+y5iYzMIe9v+If7CdTzRIbM7+nJ41lh8rhCZ5ZcbimDaEC55zpJckgz7vSO7InSx/Kua571UYcZztHm++jRQVrlMEJO8pZrSbcKU1VmPF/Lg37p8bbwf0QMHhD3aG4ZBYhe2Gc0GW/EEcKBqrU2WM6b16iABNe7F13xHC/CbRgMRnzgfHnehfwN6Zd1+b/PTfFRImzlWimwAfRWyjXWI4AuhcGN1mJ+B1wL5WnsH4EGevomYagLnqGyvHkSgIkonY1TLtXwPjq1ZXnTa/orXvZz8KakFYZVBsXCvzqvszR2VBLXvIPO+9cUxxr6Rspy7/h4Pgp7iTy0vRQ9D6CXMzJgqNLmaCn33jpLHjM+nvydck9MQt/pjvvQgeh0oDmxiJ3ZPPE5torkkRqAP/iPnpdu+oZ/deqB+eHD96Wjf3fv+JTauFaD4jOhvfLyAQIpvp4aTy3hNeQnLTKJ5OmZ55/SLPkRgZHLGEA92oRnXIns0Z7XF6zxSLKEn8eSkS1Kh97lpKgZsY9BOJlGVg6wageqGd357+QBjoDC8XCCEGVJG9+lBz2Piwv6CCi1ALoH3jmY5IYOzVtN46mhMa51jfece/Il4FsOUki6FuUtyzAhrUG0Xa9cBJQTHwjrv3nQPQL3/b4B9L70dFuTPOgIZse/jWyKljLPFXDp8C37D8LgqT1U7tDbp9WTABH/DcfkAfKeSqa1KFZovPa2urvIMy0XrJGBUCLeRIsCyNeY/s3XIP97LQ96xJOzhiLI901R1galCQE5/1ZoIuR3iHjUJfDEFe2ZbqDsuQg/aYq1JDu09izD2FhHORHKuU6ecqDXqLuQogwDGEGlp7A5hDjzBSmd//o9ePLr0fvT5f/lrpQ+z5LrWVdcHIXTMwD1BHcRXqQyXD4e/IcpHbz23Sm9/PiZxb3735D5/donHytDt8LcvRD4Wnntnam1tJT69+QHPyPwnKjtv7Y8B+JeXTSqenLaa8/8zsEM9y6i15yDN22ft4LKL31xSnd9bNE0ZpXzO+j8DrrWuuRdtn7DdmrkvUZr7sklvUk6o/hvVMdCNxGAjAYEy2DB50r1ovOX+onWldbOMnyMwlu5v46GkiIYrl9h2wB6363otbYBdI9Cnb9zgC55r8t+GIB5Uby4Z1UKp3LuOPGDWfOm0RRrQ1Stgxz7jYT1rgHaapZPSiRnPclW0/bEW54r8uQn+e/WAxwGIdFdG+cuPOiaIaaXAWbkaUiuSCBc9EAOUo+UO8mjLil+muIteTU1w1gvRVhTwvlao7HA2//kPSltK0wz02t4fgwWTVdIjJ51+C26fzIwv+nV96SD2+5O6ebnRKvtvtzFh9Lh+9+anvr4b5eIHYpM0NahZg+gIYYmZwEvks/Ic2sSZu+BOiSUa6GVJSe4PJLkhrR/a8fgySk06EhG+No+I+VbgDhmeXejniTgFRmcVEYD5XgXfZBrY/AvneWkm2kJYj0Qludykh50pInl2a3xpHOgS7QrwkpYBAYOy9cOSXVNdtD4R0NK0rytNtArj4Ox7rrX0FibJPI0zYuMGrmeFDEyjHsLcW8VJm31NoDeRrfmWh5Al7yAI1C3Nu8wIkuRI4VNAu0RAM0nXeMlsMpKoGFNoG69kU7J4vg8pfvoTRnfveRxCzxsGjNycCyV2QVA5+BgaUiux3M1d5pnusfKVwxwLVywDAN0584kuaWAq4KLKRWivDGiH6lNAuWUUMfaxy44HWTdTa/8lnTuG995uoH5E5fS4b98YwHmIy2MsP/J3Id979JD0l2FPlraaT7MWEU0bhag/lVvS+nW79jPe+oDUD/88INllp7XPELDKHDmbdWsJxpD0RggGQ09w0+tnIrQoaYMgvoJQG8B4y11OGiRrqUR6EIvKiWSozBomrhkjNfA15p30AtjC1nJa2jEvbXewkb6sjzbUtb8WseG5ORSFSgwGlgedE5LnKe2tpanW/PeezTmh3HEyo5zkuqwSN7Ngx5dgD7lNoDeh47hVvAOOh6QM/CMAksSEgpwL20JWd5n4MS6QzoURkVBUhw0760GFCVDAY2tRjEJEz9QEJ9my1UQkKsAXXvSQjrUaw+W2vIBhX5XAJ0PRfP89lxvKYFcOT9ZaDb3nmOmYPxmsY3nLZMUYE3p9WjgfUc6lzmz99K1deC5L3KZcU6G8jUTS8MPYoQcRSzksXAvuxHyf/Blr0g3fd2PnPp75jkB3NV/e5wATpJ/npdU1Q0ZzUadS8gJgqAsIOJWLSIZQMsb6vuaUA4yv9cmjtMAMK4pL0f7lniqdcE8o543htZ+e9aTPOaqfM77Iz+Pt7KxVU30hue8lSwuQqRdedAjgBzPAskTHHAgmdP2PM/8yideEyybBowNnrc9Mu+yCTE0LLJ4UEbS4zH6lf9N/Y4K8fCPGsRGXvFoHRoj7R++xoORaQPoDWu/oEp06RZ0sVXlFJAAOj+QpUNTpCAH6kKBonRrFjRWPupxpzFGLOoREKaF+o3yaEFSrSUcJ91J97K6ux51K7N7HiwJROnQWTIZo25eo7XuoGvdtniQek1f865zZU4C8FL/Fn/z8t58se1I5Ai26RkINHky6YvANYSra/laUV8ZQTkB7qFT/jvKD22u+5QA7qkP3Xt8z3xQXrz186KU+PfIukq8UCOnaww+LftwdmVon4H65SdT+vfvTYcfuCtR5vcWmnj7kX+PnIVREG7JZOzH4+Ml8/bqalneTU+612iv75bOxTVpTavmgD3LDPSsowc+/722B92jjQYsR0Y1niBbCthzHxw0Es00YC3lbNIcG5pXm/fpOcM82lnfLYPHRIkIGAe4VTxqdMCxSfUE2p/5/i2L+5Jlr627AfRaii0srz2zhoo9/3sGZvmqSZZMbYyDUIoABzyklyhzkqfcan9JX9Hlke6b57r8TXRqS/ot2o9abqU76JFx0Xqs7UH3lEf0GkkKqdXGhK+yQYobOBghRhA+8D+/ny5lClaBunKoRwG7tMebwtEjiwxlNA/dqGeRTAElVPOml7PbUHImug0Ad7qbXnShoeA+JYC78r670rVPy4sQ4XnO5yMNmCIZ4Xn0nEsy04p6apGxkScqkSpios2//Lp07rbvS+nC7Q2cfAqqsMzvPULfpRmhIbxlvTRK7fr8X7JiPLqJy3cpSspNGGeBlxZgIwF2fq6TbsY9o1pOIQ4k+VjWShKXn1mL/E+yxiJq4AAxt6mdCxYoLoJQCCknL3D+jo4MHvKOdEUALM2VG0jQey1uSjY3Te/25hihOdFiPCi4MqM0EOmXytTsA07zM9sza9Hl61VuA+i9KBlsJwLQUZEvh7MkgJw+NW+b5XnhSrNkSY8ogprCYXn0JbDWUymhMWkecg7C8S46hr27HnNrXTRgboVjdQhvp3XlNN21B13iayRVJEIjuNUmIcdl/gOIpySM+KwY7TNX0RsGwEGSNyY0Ulmh50XHqYwg0YwE1Ja0/jhmc29LXnZ2ehRasCfVcK8jrUbj/DP3KwHc1cd/exaZVCNPPf6W+ETaI2jY0fjvJL2hRacezi2SmZOkm1/8vHT+1T+0v5nfH3tvOvr1tyfK/O7JAOs7P/+0vaPJhV6yQjKa05g9vl0y9xl/M2OrdV1pHBuX68OPKMPHvy1PYRGSzrvVPBqOg0AOfmhg3rltgSoCj7tOEhddSJw70a4wqXCvPdruuKjG/W+e6Iz6K8KmQ9/SvDhfSF712rlJ5T2+a0FqWpvS78jXnK6MJluSuB6LHW+jZdnjrW8lZxTQADp6RFCxHhsaVmw8cCqFYcTbh8rC0sPZUmBnivuCp6ha2E17H53a4u+koye9m2edg3bM+Golj+MT9pQBgThre9Aj67GE1zxvZTlXhXu7kmIn3knPew33m6AARsYx9kntMQCOoc98v2nKd/6deJcr1hrwx/7pbw3ozfpFTwouLkTnTAxu/C105qm46VX7mQAuwtdYBoH3+F3L8BzsRDISSfzjgTjve3A4YjErWql8+w9SOv+G/X6iLX3kJxIllBv3Vr4PfTAlieW91gzYkvG6dT0iBiAuK1A2kUxt7b+lnhT2rt0zjxpXJ/oU94biALW8MtpEpHvoEqhDzRvPb5KTJ+1Bl+aJ3mktlN0KcUe91QOoo0ImZHKntigpH7VFRg5PR44CWb6OZSMoTMC98VGEhTziRcZ6c+JDw7Mb+d2b/wbQW8RWlzpR9unS2dZISloWd344o4IlAQ3uBSx0rdiwEmCWlPzSrAIk+CFOzwlp7RKY8BQQfvhLwKGXEmm9fS7xKIJ07056mM95+BD+G++jRxPOBIF6XquT8KCjsmmtqfbN8zZNPEHs+TXuIUcldHKegQdH2l/WHrLa5ntZmwcaxCQ6tBraTIV7OIipzKwPUCLGPwmcQwI48qiTLkN6wbkX7F8CuMierjHUaEDHk5UTPmXGJ8kA4MnQXvI0QptcxnsR48wXDW+pP//2p0Xm9yhdNAM2nb8ar0jtL1lTzUmw1EAfpUNNOSn03UwO54EUq/Na8IheWBKU9F+MlkMgS57gPKY176BLADqqRyJNLJBH+ikdBPxAwDBzPCykfvJv/Ck7Olh4cjMJ2UTnNhGyxh37Sr17xmLIJ6PiwErS3CQ68AZr5mbxMx8T0Tn/d/j3dge9RkotL7sB9OU0rGoBPeiSB4QfyBJAHn9jG23ym7ZxazYxa0MDVZZ3L9fxFFZUCMy5VlF5eWHNcx7O6C5kfx9HZVnl+VUGfpBHPenCumnU2KUH3QLVxO8ePy1f1estTADNoBBxAE8GsBHsQxhltadGGXzEWz7ZzhWh79b+0wAdlz1juCd7DWJ8q1bwJog6EQPvB3sCzA8fvi9RArhWnrMMKJoXcwaEAsY2ybu6BKS1zpfX8xJt8nD3XA+BewbqR//xnmd+f+h70+HjD04Sykn31b0zcoIVdhxdhjJbAvA9+MVrw7qHXjASvM5RZNgamdwtQIVeSfSkcy8vfssD1vb6SXvQtTlLYLIsBrsmgF5hbaE1vZT/XmMQIGBJ/XHgzg0CHuNJ3yVDD/7G6UBtcKCN3z0DEJ61hcFhcI26vUsC0FU3gO5SrGuBDaB3JaffGGZx92soz/dwUMEstLMEWKQgD0q2mpkZnlrDcWmHtQYeWpTEsOIaIdoOyogJkKx+pfA36beitQoNBRR2bd2k30/Cg+6Nr9VbU/sG+uxu42Al5qHukqJXA8wjAFnylpd+Oyvjlpdu1CHgSbbJ2LiixhQMSbfA387me+ZvvD8dvPKOHezK9i4Of/OBdOV9d6Yzf9beBq+pgWdrfaNyUzPsUv9RcBXtrw9FjlupikC6dc+B+icfEjO/1wLzsuXY/myVk9I6SobylvO/J494SeAoYRw+keneIZ9sUOe++dIJcU846WieoR2B1q486EvpIhhsS5MWMBWZUUnEht7x3C43iuA1wSJkr3t+R703gng0wOz9Hmmb1tcD5d56KOfxzEASBe7eeIbvG0BfKhTq6kdYqq7FrbRJAS9JnHdwS54vVLAnf0uCzbG+aUBZOrQjy615k7jSgf+mv7nCyftCxXJtRdMKi9cUzqZkctJ99AiRc5lKAL+WB33pWliRFR4pIqB45CnyitNBrnhjylkvJCIqPHotpbMHsScNNeWYX/3o4aWSwJsE0L0rJxYIoGgDaz0KMH/1PengtrtTuvk53tKd3PeLD6XD9781PfXx355445YMyKO35fmO7h9LrvIzoPBv4KSXIpiW0ECrqyWOs+TluVe9KaVbv/Npkfndoqknv7SzXjqbUa5o+92q640nyqvmnI0XOGZjExLIoWzm4H0N/g21iUm3uFdXC8XmYdsEmJ7/wpTu+Hioy3ChB16UEmZxRyDtNaZZZsuhyCpzuYMh9UUweR1BW9r9aSuPjwVSowB2VBoEo44GlokW3HjhzTcIlMtwkLbSb8x5N1kXc0OCYYXRfAPoFfzaoajHLh262JrgFPAAOilT0mHKlaxZmDvctR2VMhQeynJoB7FlEKhZWakdTYGwvH09FIKacfOyUrKjSVbiISSdh8c39WWF51WC8PFcEZKlrQXQvTlH1rDFg+wZt/i4MPEQ/zZR8HKCMword6RlZA8hbSwwrYH1CP28NdAApNgnUxrGemRR53zF6HP+9rekc2+493QD8ycupSvveVO6dvGRQi71eT2PmI5MtYwu3Cs6yuzG/qS9jsB8vLLROUIjOmQr6ihyfejghS9JZ77y7v3N/P7o/enot+4LZX6PGHmidPfKcXmLuodksG+Rz94YlnznIe34HNukXfT01nTqgSdsi4PGyQHD/qCQa/II49l/Eh50iSZ87pYnmeri3WkPTGrroBkCEKjn+khvzOOTy2j6U7QfLId0kdZZM1LU8F45HIBvJEfbRMmp7UAoD/PdAHoHmlY0sQH0CmL1KNoC0LXDcKKo48FjCQ5pHyoJh1S5uYKCJ4EVrnTmf+/acz47c3PW4ew1Hf5bzgXnvlvIky6FaEkHfgcmJH7aFUCvAZSSMljOpgZ+i3p/ZgrpsJ6SJ0YCcRqwqzEYTM5VJpVraIesISndVcCc6wPcSDF4HaRw/5wA7vw3vSulL3lZB05dqYnLT6ar77snXf237xQ95tq6Fz5ccLc1yo9l1tdSOhryeKDci/KVtv5I1bVCp6Orhx71SL0xodzL74wUP31lLj6UpMzvKOssA463bhE+0eQtP3clQ3qLPF57ERCkLwp/VxUfJyzeAvFa7hlMEMvDty+8OKW7PtaXdOhBl7zItZ7lyQEGw/Xa8r6XTVFxHYHrUpbXPtKvR3kN2PN6tf1oRoCokaO2P2+O7PsG0CuI1aHoBtA7ELGmCQmgexZqPKQlwDILkxVWVlKoPSs9AgcNMGjAWVISIoqD1C/+VkP3JWW9p9bwqbYWhXMcX4333Ho7PTDhkwboEu8RGLEURAQsgalWF5kooCxJWq876K38XROGrO0z9OhyryqNC5V/cd8zReLcC/cjMzslgDv63PFMtWzQCNKj634mR1ww2evJVwTR3ONdY5yp2UtRcFXTv7bBosk2ef2QQXOo8HTP/I5r5UVALF2z6NnM+XQX8ljiL8lrvsSApu7xGnCIA0VQLoW+kzcYE5jlv9cKcb/4uJ5ojABeBOhFaeM5jBBIa8gk/57/z73j9BvRnj+3Nh5owp11Xl6LdohoDjS3VjRl0ZC3jVcHJONDOdSUQXvriU4+oZkNoEcYol+ZVpbqN4IbrCXLgx4Bs1qZySEZtbQx2kcOZkuxQ8Ugl6Xn16JLbFnzUSGIttm7nAXWm/vSLOvUoJZILn9f4NHbFUCX6CLxC3qyEcQ207ex4gjeUAGAcGi1eeFA5OAY61mGOiobAVfePkIlv5zp1nvx0ikxGC0Onp3SzX/t9L9hnRPAHX7gznTt09dD2a27qhFAHimjrbG0jqKnclDay35BBR7CNRHce/tHM/ZIBpvIHq7dZjVRSF7bBai/8E0p3f6P9/uJNsj8HjHweLTp9V2TT73ar22HwLi0D1sNbLVjMMsjKKX9S/tWejq1CGMGQtf0oGth6Pz3GoJIeifNx/JkYx8RICmFuI+HpJBoDkE0glEuW6PGgomAVfrMZbQIBaJNLY0RqFN9j25WP0FDywbQaxZredkNoC+nYVUL0jvoVQ2wwp5CXxQ2y3KpCeihjyiYIAWfz8Oz5HMlMGqYwPapX8sD2Erb1nrV3vMBfI9eIytJXM2dqsAE1gDof37/ccgpemm14Xh8Mp65Soh7tL55NhlJikYgZYS9B0gdKuLtt/EchqfWLBpgm+ixnegY8JJD5uXcttT+2WftRwK4o088nJ76xe8Z75kXfYk9y8T/tu6gt4Bxk+fYyauFEGN9cZ2Zkl9jZJVkdqHFcCZE92+IsSsLLc3hURLK7TFQv/bYe9PRr909eaJNIqEkL3oasjV5JMmUEK9W8kFtcYyG0QC8tv9r+xPLU+Z20q0k4zrXy0gO8ARxZXMOra/1zJrkQS8CYOgXwbZipFUTj0nGCU0XrQHEGr0mBxn7g4NZKTmfZizBxfUALBoAloDlaF2JxtK4VeWL8ZnUp+A42gB6FykRbmQD6GFS9SkovYMuebRm+ww8XKhoW4o4gfSi4CnZqD1lEr2bkUN6CcWiXkBN0dyVwiAljst9SwmP8u/qfXUmDN0QT89rHkwktwZA/8wD9p3QWkCNfIAgAkOxl/Ac8dI4RnqaUAiFlkIpNRBXokkO5fvLHqhChVujH7VTS1+ilyRPEDhS2fOv2Z8EcIe/f5wArqytYoiRnnQqfDYYxJaEzUb4UQNakoe7dn0RaGtec9pX2rkSmcfSMt776bXtF6D+qred7nwI1qQevX98ok3ypFNVLgOj52EtLSV9RJLFa/SvPbnGxxTZ2y26zyI6cSBueXwR1HOt/JYV76BjKLv290yZEsKoJYBamEHJel6YxwGII4NXZnsfBb7QtxStqOlTHiiXmEOLXo3OVWM4HIv0N9GU010ytEQNAMJYNoC+SCJUV94AejXJllWIJImL9qB5w/jvs7ZYtvfJN4cTJEWPDuMaD7bn7eOgIP+bvHgaUDPnGiVk53LVXvSW/j2QHmhzFwC9h/KoeYWiobjjeW2FcQvP90j1ClhjXobeIM5SxCWFmNOmBbyh4Y3vadzz+Z75viWAG9fQWF9eZtQJBy977/XlPEXrqRlpUL6TLORbO1oXeTnqaUWequWxgBgai2AuD/rgJeH0+iiZ37/6B1J6yTd6RU/n90fvT1c+9H3p4FN/LI5P0gMi6+sZB5HPuPzRZCrKjF0TVMspYY1jrT1uzp3A+yhwwHt9Uh70ssjOPWY4A0Uvuubdtby+HORbYfYWOJUAOJVHnYnmyR0a2twjTg/NGIFtoiGEaF4O34odI9FrsmmdUP9cn+7re90Oa37m71eN0Gt1++5QoIYdNmJ2oMBSgI6AFL3vEpDlVkzyoktTkTw5YzkmZEofbGNLh7KkyNUoexJQ0SINTsLrY3l7XA/4QNRcbpESyg+cyAECi74GQM8h7pJyyI0to04CodrIkwg+y/llSKye4EFS9Er/LAJl5jH3LNPed0YAC3hxRTmiiGtiSzMGoOFjXxPAEZ3yPCNeuIh4X+JNN+UrdB4xSNYALGreapfzFe61nntLorMWiRRZk2iZp0Pm96MP/N3xiTbr3NPWyzOQIw9EaIvn/9q8osoziJDBpzQ1IN4E0Fu9qwSKPMIS0FzzDvp4EA//0IAvH2vFGTabogbAI95lCbBH1oAMIXg9ENuT2s91DpjhRJu75qWeKTTshxo68rKegaNsYLaeuHZFsBvMp9F0GMPmQfc2bt/vG0DvS0+3NQ+gR5QuVPSkg3oE4nyz8jArywoJAqccdEaIlmgUUCiBh3eu6yWTw/ZbFICWOnwKEiC3FrtJ4dQyvkaSyOXBcRaLJwAAIABJREFUVGZ1XwOgU4i7FkrLPeqet8Uy8tTwnLspKwtoIdGzZoxD2ALg2l5D4xwp02jIiIB2aU/Nxv8FKd38Tfeng1feUUmhHRd/9P70uf/9rpSekPvVjC28NN5XJeML3ksv+k3DNaEIRVQ5DvkXJvvCMMxpBgHv/ChzFDSDpTI0QgNNzjbJU6XDvQfqT1xK6aHvTdceeXDMD4FytTa6KLI2WhlNFq/BL1ooO+5lL0mctL+LPGWRMxNjXAQMRolIewt1M/JME4jPf691B/3S41Mgx726GoiLgEpJr4zooAjeNWRCY/CAKtdX+d1zyRjA6c1zAdAYPOeHNecJYzoMksfGoxPUDTd88OjaC92x+W0APbrJ+5TrtYR9RnMDtOIBdIkEFmhHpV08FJnwmxxAg3Vx4gkkSxnzkqPiyBU4BGL0TfKW1yp+kocvEjEQ8d73ZjXMSEzecSk8k3vYTW87JozDQS95GiSltBZAr1EOaY2lNdM8My3eoaXrPSprw6E4zpElj1viXdX2Pf0uRY9YQFzafxHgXvrLwPxr70kHt92d0s3PWUq61epTArirn3hkzEIvzTFyP5WANynpOGgNwHOlvvdENcBOskYy2JCM9YyelpzW2u09v9yeZfhE2RmNTIqOswD1r3pbSrd+x35nfv/wg2XKLR71CK0k/UMC5dLZzOVXWP5EBuWUQSMaB+yrJomzxsXvmluAn7Ty/N+1AHpOEkf/k8CxFIYdWRdvXggqubGiFo1QXzUODCqLfRFI520W4T78P3JPXZs7py+1yWlPv2E5pLdkIJEMFZaxQ1pXz/CyAfQI569SpnZLrDKIG6nRP/7W6zd2lnhiPNA+oSm/d87+PfGyM04oBxg/JIQFKv2TtZmFKmvAwPKokiJmeen5EDzgXuTdcBCsoRRIT63x8WnPB0WBeZMi2hDuvhZAn50rjD/yehB4kHjC4mtNTmhAfg25MirB1p11A7STolgU6sY8AhpP9+D5Z3ztfiaA67nW5jWGnh0ZbUVlHH96La8/3lPnvMK9rJI8tQAeydQ15KkmOyXy4D31pffTqY99z/yePvKudPjhHyyZ31EersmyCNS9yKk1x0IylctYSc5K3vUl8jg0JwRNkw2oJDPLZXYN0Glckqe5AsiVZiTAatEB63jgXQKbHGATuLYWiAN29JhrnnOPDiGGMF5YajWOUL+cbhJNsX2cj0HXzYMeXdw+5TaA3oeO4VbIg97ybE/Eki0pYaaXXeKAYYNGx8gVAknxw9/CxDLeZ5b6ROVRUxZq+m8p20tpdPuWQLkXjsUaXROga1EM4xkSlDwSUOF04Uad3uBB9bwKyea0J30maygc7LUGCQ1EYYiryztQ4KYX7U8CuCsPvfO6ATE/AyeEZJe1OzxWgqywWL5uHs3wTmsuzyOSWpR8S6ZLa13D71HewvMB91fvfeXROX9HI+jSp9cifeYyew3U8wSEzO9rA3brLO5hNIyu3UTPUAyonlMkqvOExiR5N7Eij4Lj3lo6x3cN0HuBz8liCAYIDiYjgDQ6Ls+LLdE//ya9SY/Z9WsN6pJHPDLXcrA4ifok/UkzfkgefM9br4xhA+ihnd+tUFBN7tbfDd9Q9qBzz5n19u5SYomeRX4fp2iUQy/03jH/HuEOJkgsazrNxbqXhgqpNX/LKFBki+HVX0pXrT4qkeQJl5LBaSHwlvd88k26r04HTdFwYZQCcF8ToNMaFBZz+Ch6V1HzKkp84/W5lAcsYCeFV8685Y7CYXlQceyWAS5/s8KdMzC/6et+JJ15wW1LSbJe/ctPpsOH70tPfejedO2zU35qCeWP3GMtfNuo5I+yDt5b70kgC3QhTaJAfaJTD3t2TYC1JK/H2kbQkvn9tT+W0oXbey7b7toagPqZP7t+Fkbl7JJBakbypQbEJWOayUsW4UTfrCssTX1rQLG2sbWSxPEQd2lMOP6ILhiZGxotiqKgVLRCtb2+LPpzrzkHzEXoC8CYEiJbHn3tPNeMNJqXWwPT3ny1NST6NgLy2d75/i2Le8tStNbpte1a+7/h6i3xoFuKuRYebnlHSnuSoOAd8TvpTJBaAMLrUwLP0vj5YS+Fb46HKyRRmgwfxnzSDKd5gqLh77Pxoxc9FwjeTV8DoOcs7tq6SGCqsGBACmmexnL+dDTGiP1woEa85mQMxnXq6ZnRvOhEixBN9yQB3OFvPpCuvO/OdPSng6gi+g8EJu95BHzUAHNaP7y7WmgreFK8pFQtckczeJqg2Ymg0cC65a3XQFfLnHrVWRugjzIs31N/7btTevl1udZrDjtp5+JDKWd+P7r42KS7yH7hFTyDIfKqNbfavnvRSXOMeO33lN1iXxqYXDNJHAJ0DQy3hLp7BJ0pssqb6N59aYtuPGv7hJGF5+y05Lo8okGbkwTMUacehYnyJjwaCbC8px9ZxgjLIILtBqIUNg96LXMvK+8t/bLWt9ozCkgedK70tR4GEiiWFLlyOA6hOxOrNs8gWjT9ujcZLQA1KrsDkFp6QEvKgBT6yee/pidIYnPtriT3quN76dI3cwsRUMDDKBiKtSZA94w0OK+lPCHRKQL8a0SUFyqt3X0kWtTubQ80oVcqRMM9TACnrdG4vkOYe5GjcKJJNKldR5G3VkwOGOFJNF628LomszUDaoS2kbG3lpFkKsrMpvwdgQE9nTK/8+mGZEaEPsK1H9qPmve8V98zvAfG0wk+g30rXVHZWRI5DcjxAa/pQY/0L4HpUaGr0xEnTWmgstVrbumrWrJd8paThzy3gXpwHrR3bZCeY9PeFK+NppC83Z4+LtGNnFP8TFxocNkAekAYdiyyAfSOxIw0xbO4q096RBoSyljekdmhTIKIPJBS6Dvf4IG7M6V/I6zTOpCXHtY85FNS1IvNAd7dXtpndJm0pHFF9g/gmnuEFimZmvdcuGP1F7/3Q11Dm7O3Ez3oRHe+JtFwR2t9cL01cKbxQnTtasqJ9xsr8zlohjE0eGDEieVtJVrtUwK4pz7+yHHCs2EBVH0ueIJJoLw28kIKeW9N9BflKzTSUL3I71jW6hMB/0wvZwCM770Ww0Bk7lYiTpSVuT3vtYxIn5EyT5fM7/mJtrX+Z/HmTA8R+Kr3uPA6UsRAJ3rba4HWkomQXLvlxSnd9bElLc3rPvCilCQPOpWUQs5x7q1AWpqJFsUpAUxeP7oeEQ+zVMa67ukBZm3FLMME1mntYya8hx80HV4C7ZwX2Bm7AfS+W9FrLajeeM1s36MUoCzu0qERbUPd+8Nqat5iCfDMwBK1wbyyRQkLcIrk8ctjlQBZT7CseRolUFPr2V26JqQ8ciAe9fpoYe8ugA9mdF/Lgx5R9okv8n+1NfEMKGiQ8vjA6qt2nTVj2OxsZIYw2kPZiHX24HhfRL3qCMA5/ahPDSztWwI4T7eZrTsP+AFvAYXA166vOgbhDXTTKFlxDz3KU6KOa8jnCO9Y9LH2GZfvvWgcbccyfEbbWFJurxPK5bfUP/KulD7yg+nap4+p4Mlbj0c0mWSd/1Fj7ZJ1EveL4WUf5amw18XM5GMF4z61NgGeS0byaK/pQY8S1QPnfP6tbWo0RLmmgdZeYLYoCcNgyEAgZXqn8Ub71Who0S7aNrYhWbV5/5JHHftCI81QZwPoUQbvUy4Au/p0tLVyTAEO0PHeItIoqrxHaGt5PTAU3Mt02tKfFm5eE6breVRn83Dupq/l/cn0wXBMTjPPo77ofiUPe5dCuxh4XxOgo5GIr3M5A8FzopUfz0F4qo0rg1WRIwGJZwEl0/vCDFmT6BjDwMXBeuRaiTdXTse9SwD3GQAJylpx503hAxBI474elI6Ixywk04S8A6V/BsJ7ymw+Ji6/caySgUuUlUaopmTMxH3K//Zk5xKw562F9dSalnzTa3PJ970G6pefTOnfvzcdfuCulBPK9fqfxq+asWiNqAx8LrHwLySIQ0/5bG/BdTFPZxvrS2BbIi56orHMrgC6J1RpXFhOYxgCfFEv90TYKYYO6TyIgNiI15rC20lG5r/5bzS+oPPD3UcaYB4VHqGFgO6i9sv5Ef8tgXGFrhtAd1e2a4ElS951IDdKY/wd9FHmLbjPGPW6RBQ8UsBGGQH31ScylAkqDWzx9jSFrcbbrymmGu94IFA9WyAUfilvSiGZvE3tSaFcZhFYLw3oo18LoEvrlH+TDChR2iL/RPhe8qhH+0Nex/vlk70LYex4dSWs1A2NRuYm7a2Rvs9M6eZvuj8dvPKOlunurA4lgLv2KSHxmnd/TntGFk60Gc8Vwk2nWAMmWxNN8R6jID6/cX4U8IxrfK7NC88CqZzkNUfGiNAtUqaF4SSZydupzudhDOJMjnbJT/YJ/5t8+8uvS+du+769zvyePnTX6FFvWRdJdnlyeC0eiYwfjXfa312usrSA1bUA+qXHr1s2JTAmeXyJoBzQSd7YCOGXlpEMBZGQeJ6RXQrl5zoTN2gicDeM7urUrPW3DCTaXGvQW43BiK8z1DtzTySWdunibvVH/XIjxW4pwJPEaW/oRhU4HHlUsZfqld8GQSCGnWlWt+F362Dm/a0Fmi3PIinpHNRMFObOgLyGoxYDcK8zHkIHHvW176ATva3oCalMCxCw+lL5ffiwVEH0lLwyNiXzdxfFb5jHmQzMv/aedHDb3Snd/ByPM07s+9EnHk5P/eL3pKuPPzIdg6CIlJ8EBXKmP/Ls7kxxobVpXeOazO+aJ71VnkcWSPJ8Sx71aFujbsaUV8m7WROa3Ep7acz4NJsUjeReAYoQY0GZa1/8vHT+1T+0v5nfH3tvOvr1t88yv6OM9c516axvPf9blyO6f0eFWHCWcONsj+jC2VwsL/paAD3fQedyFcGeBl7R8xvxYNcuXtTjjaCTz6HWGCKV57pTnoMV6u7NsXU8qHePAlq4dlrbx8j0bPCON33zoHsL3fd7jQ2mb883aGsI0El5l7xsSxU7y7M97s2BA0YQxTK804E8uXelCQxjPSMenoh3NaroedECXAn1rPtrsGnN+7/NyY8QmOeJQLb3XQB0zmdSGDt+15S61nXo3R6OAxOH5e/4NBe9mjC52yZI3sl+l+6EGdL65te+JZ17w72nGpinJy6lK+95Uzr8xCNjNIWprDYueiETPMfG7f5ROeJ1z8NlV1HcvQEM31GGkdzG/dZqwJX2MO9DMxIEh79KMc3wuSZ4R0/73md+/8OPpvQbP5i0hHJRfup1/q/CKJWNzva5BIpagZI0ljUBeuXcZ/fv0bAQ1Q1r6MPPPM1zj/OoMRpYxgDeH8/ujleFvP5m1uTKt9+pfe2/2jpKxhSpLJYrSgwdLtMKG0Cv3TTLym8AfRn9qmvzEHfNe9brTqOluJnAlLKxE3cAl5Tx5d/gd8uLrRHKCn2XPDeifBGeeEGQbrUlhdnXeIiqmQAqaG+j52JWqGZI2cQ7U9T32ZR2FeKOgAHppUVfUDmJR2jNSqZvsPrSWpdzxvjGv/M6kfFF+ZDmTn21eMwtRfj8l78inf+md6X0JS9byobr1b/8ZLr6vnvSlV95p9jHZH3JYIjJ1eg+Oeg2Zd2GNS5F0JOOSp2nTI1Mx2LoK09JVOIjhtZImdoFQp4WZa1wLx35TTtHRp4O5vroZRjhdJA86kinkJysJW5F+RGoP//2lJ57S0XNU1I0J5R76HtVoE6jjMhxfhag8ZTPdg1eiVIT76637OdoX2I5Dph2CdARcJfFqgSTOKGovJ0dusqb4UXosMJ8zBGi1xgHqD0plw8/E9CIUHleuDzADR+0JpG5ikoKy6iKgH+yAYc/UMf//i3EvZX0LfV6sFJLvzdsHfKgS3darVDZHoq9pXiRsoWH7QjEAeiUA1QI2y19wHuQUQWPDu+ezCF5d/gcT0IpkN4/1+Yc9QQVJfQcvNnJPeaCR31NgG4pawia+bpzw4i2TrOzXDDQaAqeBsSXKoToSR+96DwZnpQVGJKMRXk/A/Obvu5Huj6TF+07XO7yk+nw4fvS5Q/em9Ln9Gz91N64BtappCWv0fIKIXiUwuUDGZ2jc26R09G2Nb63jK3I1y18LrVvRcNI+7l1jl49S5ZayeS8dpd81+6sF6D+wjeldPs/3mugfvj4g1UJ5Zac/y38Gl07CXiPZ44iE6SIqVF+ZaPiQSCTOwIua8BrA/To/XMpoqts9GHwWmg0lfGAuuTttQwGCMx5+4r31+WLaH+5HBk2ScfC5LxSZy3GgZEh3dHXF5Dmy/vjdCQD+QbQ6+m8oMYG0BcQr6WqliQO7znltpd6VTRAzhWo0s9wB1tS5qQDa6aEgvDVQLFnMadxRbzqHu0jxghpPGt5zq13fWkuUui7pmRqT7CpdEEr8Eoe9M88cKfotZY82RIYt5T7HnwhgRy+Bzy+sr5rRokRzDCAru33Mn+8B8n2V7lnvkcJ4I4+HXu+aba2WtjdmetOHVO+DYqhBCRRPnlr7t1jlTxuvE1MGih988ZQ+90C7dhWDQiqMQb02le1c5dAOybqtKKWavtrKb/Xmd+zR/2TDyUvoRyPWpPOds53XqRTC41r61gJ4qw9LOpqS8AYH/gaAP3dX5HSH/zu9TvoCG4tVICgTvo7QngLHEbrUznuCR7k/qwJDbTXGA54o/w+emEAdkc9/20k541Mb1IGeSkaNeDxIDeuaH3QQIbvW5K46tVbVGED6IvIV1/5T74tHYl3VNndVVLSsRz9rvVqhcLyOlY5SekVhYUiJCJjGMsIwB6VOjzENQ+oRBNNQSBlgfrif2M7qODXr3isBiqMkbfSq0M3wcq7pge9hUf5etWsc4zCx6U0/rbWOcLT1hhU77rypvZs/2dQ+qz9SgD31MePE8BZkRTHBSDkDhSCSRukJGSv+FBuBIxCM5PDTVJAahiHlfXW05PTLd16Gd05nTxwjkbIXD7LEtpznmGXgynNu77W/kXaLc3n0bIWS+qgd70A9Vu/c38zv3/0J1P64LePmd9rZaXkXUe5sYSXrAz8uI6eIW4UTcy7LuWhUPe/B5hmzJ1S+tIXp3TXx5aw3LzuAy9KiSeJI48wCUxrnIbhdEw6ZwH+KA20fvj5IFGlFYhLtM9tEfCmf2P/fK5L0FSU5vzMxLHwNizDQ21f/OzbPOh996LT2hKW2ulAny6dRUPcPa+MRQ/Lk4deY1S2crscrIgAmVveQEig198zBvD+xqYErvSAco0XCPuRaHBa+W1R2CaEuZ8EQCfli+iLXnT0biKYqDXYePzXwjctvCGBuhkQAsWP9tLNr3hdOvdf/8u9SACHwDzqrebrwBXy/Ptk74NhsPypKGXa2pf2a7xGXEERQl9nEQ+Vb6MvjZTi/OgZWKUoKTwTmvh7kNlrRSC1jCnX0QD86q9nwIA9oHjwwpekM195995mfr/2q+9I13757nT2qr1SlvFHOv/XPJujgHyyvxQZLc7a8lBGGXoNDzoBdD4GSYZqd5Qjxk7rfjPO3QPtlncXdVGkeZTOpkIt3Hvnei/RjoP5XsjKMmB7c0PjgRRpYF1NEOa4edA9ovf93ouN+o7qadxa9B10KVFc9D1lT+GzvFoWYFLBDOeiQQi0jEFbdskTHmURrEsAUZongsbJ+bWDp9isEPc8Fslj3uRFH+5N7TKLO1e+MJxRWkvPaxJR3DxwnvvVQqCj/GWe6yxUfaaTsNcSJIBH5b/gv7gnHbz+B3oMZ502hgRwn//gO0cPLBr4aM8RvfmexHUW1xXkS1lXKX8RvwpQOp0mkOP6Rk2qG02Rt3KGcGLvIsmU5omc8d1wJ59kjWZAqfGERvYqGl2sv2sZ1QLhWT7S/zD0vbaf2vIeKB/5kb2zvteZ33Po+7svVL+j7vGux1/V6xLMOcGv8kWfWvP0ntqxpjUAOoW4m4dX4C79RMixPxD0kSzW+tO83lxgS21OBDr0j8gGPcr0HfIlzYbInRqWoUAqJ4W5C0k5q3liJtThB04rNEZH1hyjF/i5unnQFy9XTQMbQK+hVoeyEkA394zisYkeBJJH0uxPSLg1kcPwXXxeCIUhJJSTFPgiwwPcWOPxtKz1ViRBZCw14/DYxksap7392+QFYgfJSQB0oq0VucHLeB5YzSMo8SwqgrVte+sofZeSCllXXDhfPvMbTjE4hwRwHm0k2nt11Gd9SOEDQB5xBow6nSJrrEgd9A5jlNPYdsX9w6gcd2nlFEBAzGVcVJZZMlPaS9F2l87Nq4/5P5rkpteJ8p2D9ChgL2uTE8q99t0p7Vvm9ycupavvuDDzpHsgHPelxju74qmIdx0BfHOCSMuDvAZAzx7033/8+j3p6LNhnidb0PsmV5jGRa4E/+LBCk+BSRZbBKeep17b45gAjkA9eqh54jg6X/g5Q/1b4ec1ciagL9c0Fym7edAjVOpX5gSWuN/g97GlCECXFD8re+jadFCVa8k6Fwxtmni2hzqaAoi/L5mvBtKwTQ+8LRlDrhu9Oxl5B53fV6e2Z+PjFt7h4xoAXUoSF6WV5LVbqvjXeAI5aImOOVJOnBcPlcz7CPbS+QvPS+e/+48ize+8zOFvPpCuvO/OdO1TdteWUq4Z4/AKQ1kT/gZt/sHxuEyiHIc/xnZzyDwlH2bfECCUbhZEzYhXGoS7q5yCPcG6ZJykOUlz1eRfLXNFjKy1bXrlLVnKv0mJ4aqTbXqD6fi9ZAR/zv5lfs/h7ukX7zYpoRmMtOibJXuRD4SMJBEAHlnKZr0MQ7O1znYB0Emm8jGRzI0QYUJgBzhbiKMGwKLuaZ0JFiBuBcs86W5ug/dP/64w1Lpk1owLmoccx9OK9CaHaUrbO+juSnUt0LpsXQdxIzWGAN06KLy7jUS3aOi7ROcogNEUvtKmFBJDv0OnpZ3BAmkB8nFukGHeuuMYtdJPzhPhDV/Lu7uWAoqKZB4jD8/U9kjkHWCx7kpZ3P/8/jubt7PnoUOeaO7IqagZZ3opiRP+U8Itn33vxXTmi07Xm8lHn3g4PfWL35PonrlGRs/QgiDc8q6PZY2wuzIOQSHxZFs5/PAEZAqb5U23wt65XJaSSFmetl2AdFy3cZ557nQtg4wTgWeEpLOhda+01quRBacpo7vlVS8APbP24fHzXQdftT9PtB2966+ko4uPzZbF2pOWMTZypamGB5aWlSIHrb1bvllPsGkAbC2AnpPEjYKKyU/ruTAPJFJ7Gnjm3/kCSCA5AtZ5P1L41EzQzQ3hYT7Q+sLzg5cjjzo6rYJOLPMNemngLWhOW1OFMJsHPcwxXQq2LGmXjm/URiwPumfVFcPJB0LWKHaaQmWtyQSYepu6ArCLcoa/Ha2E3EtAWVL8iw7OQDge9JoSzg0B1EZRlhZ41ZbyPCaIy+2hh73mTvoaHnQNoNcoZpoXxaJfj3UhnsL+explyBvM+XDUWwaw/oyveEU6/3c+vJRd+tV/4lK68p43ucBc28u0b/h3NMbg3prsS0ve8BMMQPrES8e85hNe0TwoNZ4VHmqveMn5M01FnjDvSo3srllUSe5JRjBeTtynzr1JycCiyeKJXn4CshTB+VIZWrMeXlkvBJ6+l8zvr3pbSl/yMq/JE/vOveieoSyid4jy8oS0Vyv3xMyp4ulKo/BXwr7XAug5xJ3Gxp8Ma6GpJoNpbjWytBwEg7D2aIf9YnnJu2yNJZf37qSLhxysnWTkiNw95+OXymvz4Tw0EbCC86x1TQZabx703YrUlu242xE+zXr7o7+RjloU/ub7TYx+0YMSgUrNAToqa4HwHs/jbXnYJUBmgTTtm+bt46CC00Pzrp4km3p3KiegnR0euwToS+iDNJeMLN6ewvWnvz3DwZJxt9TN+/yZf/2+dPZr3tpSvW+dIQHc5Q9ME8B5tC4AVDCsaYBx1BkgWmYC2kEZK+tHvCwoXZZzZdRnQOEpbZbBT8koyQ6uiHtExytL0t8jDbKnDWRnTwCPskyScxMdTwHR2r6RDC8SfWrlt0dj6zveQaeyi17EWDKghrrkTR/55DCHvr8knfnqH0jpJd/Y0OLKVS4/ma79wHObO0H+QpnTwyDbPDhmYGuKXvSAJx/YWgAdPegSEuBeac1TPApTIdM5l8v4b5KzteDdWzTDYDt70rMG/WhrhlcHsX9+PYtC4Y1zS50ejhXXpjXEX+tQme/mQfcYsO/3Ghbt2/MN2lrkDjonjXSXscg247kfS9mLkD0KWtCqXQ5R4igUvIawLnOBECXJK4PKpAa6pDlqB77Wb6ExhL+vrRRoimQei3aXksLgPZAu0WRfAPpkPwz8pSn4tG4RPsc1jnhptIiLcH9KSDvfz8+++0PpzAtuizbZv5yQAA7nnfcGfzvb2nMWWMd6EvjXollEWQNyRwPq48HHTkDejwRkR7la6fn1rir1BOCqvmVEJVlGxxbDJqeTxxco03szswfOc3+hHB6dBuZ5yWf7gWd41/5NCeVe3n69qNP0Js0c/vCZdObP+rRsGdKJhyKGw9bReFcRzcSfAWdFGZckrNYC6ORBp361RHF07QU9yxpglQDyjKmNZy4to4DWDqcd/dta6N5GAewLnrMdr19FxmaNm9Pco78E4DW0h/QwDEgbQG+VIG31NoDeRrfmWrUAXVW4BKG/VNGTQKwEWoqcAaAkKbf80Bk9XjwcVGjDUjC5MsfHwOugd7V5oQQvYNQ7tKTPlrpe8iOtzZMG6BFDEPIVB4oSWI4ACss7o3nnsd+oMmjNcaZvDCDqJAE6JoCzPJ1Ek8x/9G/LiGUZ3TTPrgfYR6Og4kUvMsPYVKX+UKA0AUCWqrYYZqRQ2LE98JTzZ5yKbGNP9Gnh8CTvz+TEd4GTXIpg0HhwIl9BedfOCc+rztdYkt9rG0A1NmgxbrbI6d510KteEsrlzO+nBKhf+SdfnM59+o/VaUs6hHX+W7rISfGOtFeX6mETGqwB0PMza5d+dy4YycGCnl4E7wjg0LDAnTSFQEoSNckrHAWRM8FlCHo0GvCtpv7DAAAgAElEQVTxSu1Ew9z5vCRPujaXSLh7RFhY9LM86hOFmTnVtHVl5TeAHlmYfmUCx3q/zraWUooAdC0DcFE22buuVuhkK60joIkrrajQzg5KhcNmymLQqil5tSVlzzvo8zhJMYsc/JKnvayHEJY7kX+V3jZe13vfV/Kq5/rR0M2dAvThUKoBrB4Pc/AWAestSpzL38YgI4BFMjicBEDHBHAav1uAjr5FvF3e/pTAnLbXJuvqKH2abqaCc5JLgnzi/TbxlpPVneR9r/vqSFNtvbx9VeoZSqYnoyW6RegXKePJDPpuJeVcktcj2r9VTnqaTfK8jxnJmWe9nIXZo/5Vb0vp1u9I6bknl2hSSxRnzt155tWSGz1o37MNzBnkAnfJc7kGQKdn1sbNMOxn/ndhJPZ7DVJAIYtgkf+tydcIwNS89WgQGBVWuL5kyPYJH1A5w7M8MULwDO9a3+YmGIwNQZ1YbKrG+BFl+jNbFvcoqXqVq9l2vfq8oduJAHRz74JSJwl9/pt7KFSshgs4uFefvFLwBnrpLnt8pN/ZWCxvjwaaWhU4qb1yPsHukLyrUrkKkjYVlQA4D9OMeoR2CtCDM40YiCxvdq2n0+NpGrbkyQ1OaVZsVNwUZXSnAH1IAHfl9x4xp+N5PyO0kPa0BcStNkVDIF6jGRcPokd5FM9QZvxJeNWhiKxBnhWRIHhkcDxoZC1tMK+5JpfRABuha00ZTdbxNia8PgBxMmhyI0mpIwB1a09RP2hs0fatZwCtmTuW5XI0KjOX9NejrgbeeduU9T3/dpKZ3xGgR2WtRCePb9Eo1IPWrW2E8wWhp1nqcE2AjsnhuOecBCJ/25uy0FtAleSjFGKN36R2OE0QnUQBMpP7s/ApCfFoQLgFINMY8e65ZLTA37gs1frWaCCcSYUMnhGico6bB71VKrTV2wB6G92aa9UC9OjdpyL7lLDImsHiIRr5e6IckCKLAgoV25pBDWW5Mt8TMOFQrDkv8ag2TNmsgqHt/Fm2yFNCqwH0ihCuHh71pbygGXYkT2JhY0FqthqHpAXeCUAfEsB9/oPvHIcgGaC0vRBViDUacjqiR5XTROpHpDVbE3SgTELcKeJFSWQn6pfOKWkljNMyPmP0E5ffNH8LxIdBACNmJBReWu/SBO5pfH7NEW4oN4vuCNFFGLVBPNJzb9XI4NMA2iVAPuIP9JzDs2x8ricB1Gs96N5ZYMmimnXtXVaKcLEcJ+6Ta3yAawD0HOL+B797vKc1vYyEpvXsGpcJXOhKoA+BJQenaFjVwGxk4by6k8NAyZkUBa04J/52fG4Dw97HjcvoTuH02rjz71rIfdRQgoYgywhSBLMe9r4B9AgT9iuzAfR+tAy1xLO4S4qHBsg1JdC65xgaUGUhyQvGlW2ueI3zY8KnHE7kparJZjl43DUQwach0pUltapVBJBESAMNIPZSLLVQdz4uLSzTenZtNYBeyVNecY3e6ElfQ6Hv4bmR+E31Jp1N6Vn/3YpJ4lgCuKPPepSffq/hc2+PRXtGgC56VCVEDh6FcTw5TA+vRA4KySimBIWmyZOrKHoSuPayQfNn2lrAuUdvNH6K83Xuoo/6p/M05swLLyTk1MbbKlM9GSoZOyUjp0fHpd+1JHL8TXTeB5aXsr3zUPizz39JOvPaH0vpwu1Lh+rWR4DeunYaX3lGwqX9eROMJPCt3qsIutYA6DnE/ZOPHwMxDMfW3u7OxIga3j3gOFOohh9QXlpA2fIkIwgvioFyR11DQDVj0eZTlOGBxhiRgPQk2tI4MQJBm4M3L+5BHzcSDJj6koA70GED6J5U6Pt9A+h96em2hh50yYvADx7Lgz45qI1MoS1h7hEFmyt10iEqKvQVHOeNQfPKTOgS6M/rR1pUqW938XdYIHIPfV8AukU2DcBRHUlJm4UjB+49hj25zhpHeG0tDzolgDv8E58RvXFqYN1v+biE5g3T9m7EMFf0IXh+bfK3MjjE46QLkX6F4x3nDoqN5S0vbQ0h7vgm+ig7IQLKygxdxjRcd6oFAapxSMj0Lq0TrpHk+ZZopoWxazyzNsCifhG8S39H+fqkys0SxrGB8JD38ecdJJSr8aBbRswov9L+V/fryouDTpTqO+jD+Cb62hoAPXvQL/7unBrkAeagchROANAJuEkA0fKO8/bUjS9ktEcPM9b1xkHCXCs3EWpOZlHeljcOBL3kEc/10DiSaSoZTSJ8i1ZnqiMBff4NDNn4xOhsevd4JSKD3cpEKRCAL9GmtnIRChBA76V8eAnlpERykXHONuYSEMPD3aVDSLOUSqFPjrelxtNlHfx42I8yjUL4gR6eNb+F5kWGn73+DFD+mz+rhs8DUXnqSypLbeR2VwfoUYs7ECeqkKEHPQIaW/ed5EnH/rS2JUOWxQ/dAXrwnvmoO7F72BKN+TyjwLmV/yd6U+1phcpHboz9xj3ms3kMYYWluNBOEU214xGI4GVoL3JIeBt9CT1zqHtWDi1gTfLPM4CN43D2ugb0JV5qoWvrvo7SUXopI1p31+W4t93zsK+Z+T0D9GuffGz24ksvekjyt2xXJY9Er35b22kC7GsBdMzizgEwyjWuhzWe6TMPtmQVHQ8g4xk2j/gIiLkHGUGsol+WLlq893RWoAefXxPgZbhTLXL/3Jv75LCE++cabb25Qr3Ng16zCMvLdlAxlg/iRmrB86BbtFABQPSdTaHx3sofdsEP0XH8mrXPmLwGkFCxpiYkbw3+FlHqpH65EoAKQY2BoDffo9ec2tfuUq4O0HtPUHgGSwqXldYnOhQLSGC7k/PQkaSeR5q31RugZ8/5536mzxvJmqernPPwooG0v7jyrAFEojNvk+/rqAJO3vOJ0wTD+bizBo1uM2F2/MPBl70inf9PvysdXj1e9INzR+Xf+b89/3fts0+mz//83ZMmm5T8ToOKGqT4+tEa4m+4tuff/O5Oo4w3c/jhH02Hn/jtWYV986BrYe0RSpB3/ejLX5fO3fH+SJVwGfKgR85Zr9GIh10yhLYYe7yxaN+laMfFeYF2BdD5fWkuMNGrzifvgdhRaA//0AymXjg5guzmBRKAt3AetDZf6mH0ADXG76cTHXgeD8kIgmPTjCOW4cGbjLWGQt0NoHsE7ft9A+h96em2xu+gu4WdAtodqCInWLZ3/ndtOGRkjPxgVBV4KewJw28sT/og/CKeTBxzFChEFAnNo7RLT2JkTcZzgXng8T76agC91cpO53ggWoPmJwFqyysXWeMa+taAlmi7JwHQNTryMeM+j8zHozca8Mo2F0Kt8Xf+90wJlwyAzHgw1jX0qZG/MBHumZRueuW3pHNvfk9k+svKPHEpXb73QlcPetRQJBlBZsbHa8fvry8FQTe98b509mveuoxWtbWfuJSuvuNCumbkYbCSxFm5PWqHUlPeuqOewfbIt0ICOTHUfahQ7qZ/x+/UDMUtix50rUKUJ60O15DD7gQrC0QSQ+YmdxriroV8a0CT/77wnJ+Rz+qTF7ZANW+jEFO4f671MznshLfbJbQk0a8cMKw+D2XnCd8wiqAGjVUC6+uCQWBaz0CSx0URZVuIe+WuX1a8hiWW9bTVLhTIAH1UEAWPE32byIoMsg7rFKHW+4k9lklTujHMiTxcUp81nn0PpE1kO8scHAXu0vg0oF7OhAVvn/egP7ahJTtaDaCvMYmhTUuZs/gAQbum0Fk8Ie1bmqoFaCLk4GM/DQB9In8cg0nUox1pUzL2oddd+5uvxUQhsUIZia9InxrKanpXLn7+VScD0KU76d4zm7W855UfaZ+fyhTAubQ2JBP5/qF/H/zn96SD1/+A123f7/nKx49fSOmJWLMnnc1dA+XW6HliuMgsdwHQUba2npOeMVGTR639mXQGRwjqbYX3We6JwvdW7ggUPGt50PkddO4ll0LPEWzmSdS84iCFnRdCCCCY/64ZD3BBNLCK9aW/qS08I2gckc0jlUE6YkZ3NBJI3/kY0BgSvXYgGaulOUs05f3TubgB9FaOaKq3AfQmsrVXsjzoEojQDhX63UsiZ91Rb5/FcU3P8i153GZzxPvpnjVPGLQ0DvTCLZ2rKIMD99DXUApq58LvT/J768/5vr7ZwnMo9Z/f3yeUeqLoVHrUi1LEojMkXrCuInh8TWPTyi31KK4B0D/7U3e6ScVq5j2e8cJTWdr8o+3X8rdqIACFrJQjvXDgj3FMw0mIByIG+eSx3bRDgP65/+HCSI41op+Q1hrAlvYU/dbK7wdf85Z07o3/rHa5F5e/8k++OKX/94/VdrSM7xJQPylPejl/2bNq2mS0Z9rwnvpaAP3o4mOToUlXz5YuqCWHT/LK2XhOsCuIElgfZamUa2JtgK6BWExglgcpPQnWw4suebQtYLmUYcaFgWRwXPhLXvqeofbUF/eo5/bxWTvMqk9jx6zvtTTRDDFFqA+NCehwC3GvJfSy8htAX0a/6tr5DroHHqRGI0DPe3LNe8qnejKBCqLyxgUytsGFQ8SqycpwgwCCKM1YUBQdtgs0OntgjCsekbUKkK5rEQmkr+JB/8kBoC/Ii9AycQtYcCDR4sXRAD7nsaVghc95DYDeegfdM37xceMa4N5asq4arVGWiutgeVIYMOdgHMfKRdauAbplhJXuuNZEH6GcjKyRCciVsHeUvwcveGk6+G8/Gumua5nD9789Hf7yvVVtcsDO83yclsRx3tNsNFkKgZcyvq8N0HdxJmrn/0zFOOEINylxr/qM4loAPSeJK8JyoI70ZrcE4nJx62zXPOuaF70cEkY4uXcN0gv1lvrVPOkIwK1Qek2CaHWkaACcO7XJnx+mMtw4UiW9hsKawcO6VroB9BZKd62zAfSu5PQbk0LcxwO048Gh3XeSQPqSN3Ytr5jnWVG96SSUODkrPes4LgThqPD7K3dcIuIFtDy20X7WKse9QKsB9JYDvGHCEiDka6Txn+ZVsZTIGgVTM/hE29gJQPcUG2M9EGxxkEz0b1hOs4q0p4p+yTzh0t/Hm/b6XcRRT+HKGO1rZ9B0WJ4kQI9ERLUAdGvqNYaXCI+f+cKUzn/3Eynd/JzebGK2d+1X35Gu/m/TpHs1A9in5HE8xJ0Dcwmk598OXribO+gR/qhZE36O1zg+1vDk14w7bFhbC6BLz6zhBPDutHWuW95lBKdUVgLmXF6Pixu8D24KMfYRLbE1IN7SST0G4PMl2qLXnv+ev1mh7V5/+F2jN9IcUSF3gm0h7rVUX1R+A+iLyFdfmTzoFoAkRTPi2R1lmJAUrrQzWDS98MgeSl3U2zYqfHQXK3NhDj/lIV7oPR84VRtn1FBQE/IWUSYQOPD2ufIgrWk998RqSCGakhdoFYDuhbj3CImLkeEYm0HCsYqqVbkEavaqN4adAHRvEIHvkseK09wz0NGeIKORtnfQACANTZKn4v41ondmsoUMpnDFYpd30HmIe6Eteyud/rYMrJZcjxgbTZ03EHk00xEzOP+uiyk995YAh3Us8ocfTVfuuzXcoBbmjg2c9P308YyBpHCFN9hvGNI+m8eKSeKWyuHwohkFUVZJsily3ncZixLyjsa30teaAF3ymmsTlLzOHD1457rkQZbQhxVByWW3Vs5bIG0cksE6YsSW6CKFYtFcCXRjPQmY57lI+QEk4C4eisod/7IhoYIV0l8O6uM6W4i7x2B9v28AvS893dbIg+4psj0PC3xrlyt67oCFArVAnOY6awoFLlr4WIWoASFy8M4894FdULseEnBHRUWlS3BRokokb24nHnQ6WOjQ9v4bnK+qOyh31CVPr8Yf0lpo4fAasInwXmSqawL06D7yaI1eVZx77X7B/rT949EvYhQoigZ434sRQJEDZSzZeDh836UHPWdxL/oRhY4aSaY0oB5d8zK/IUSd0zkC5D1DWKbvuWendO6tJwDOK5PCeTxmhbx7dWu+tySHk9rnIe1amPtaIe75HfSl51wNzaisFvVx0p5zcX2Yc2XmWV8ToNNg0FM+EnEAZvyJMB4Sn//NveEWSEf5KgHlpoUWsrTXtBMZB50LlVGc6pNrmt47OKoKTfP/eai7p6NGDCTlIAHiSGNB+jHwvgH0GuZaXtZb9uU9bC1MKMA96GW/CGHteJ+ZDrjWw8W680SDQyUuqtRZijzNzzqgxzl5wqj2rswA2iKK45oKhNV/BMREyozn7PCkGq6JBuRXTRLH76LVZHwNyAsvWkIKdTxpD0oIOA5z3ylAj3gJ8EwPJO2zIgoigC/ABuJzbFwxH2WblMgOk1MaSYW5/M3t7/KZNcuD7uUckWhYI9ctQ5QXiZS/Z7lT9uKgPD7jzv81pZd8Y2Rpu5a58o/OhDO2ax1HjKGnxZuOc8BwdynD+5oAXTLmefyj6UZRxkB5P6MJReR1vFYojU3LHyF6y1kD4z7dBUBXlTjlmTLv2bCyeMz7y9u3PNjRchwwF+E8VLTC7GcMICRDw/ra37wtJdIzxKdEC+0Nek4rLIM04HTw1pO+c/QnzRXL5b3yds2MHZrxVqiSAhtAryTY0uLcgy4dGujdJeXQOrCimdyl8MjSrpQ91Pi9hQYuQOGWPBLwg9BpHZ/lhYt6/CIAGUEBGlI0T2wLHVvrSPcnVwtxZ94+M6EMm4wK2jzLsEIQaU0QNE70ASEUPrL2olLGpKqmiFptrwnQabx8T0VAmwfWUE7xv5FGHl1bAHxoPwvKoToW8rJzHh10upMKcUfvGq5hoTl7wkm9DjQ8kdYqSzSeR17ntD33uhN4Ti2ldPUX/k669n++s+dUi+FBy95+Elndo552zPrO/17zDjrKAm//a4vl1UO5IRnHtbPZazvKQBYgJ12L71NqVwXsawD0B16U0u8/PsnNYSaLy4P0wuG5wVPLPD7oczMvrvX7SCDnSTZqAxcq4iH3FlcyCFQ6jNQuMGpUCo/HzO6kH3MvuzcHjY7UlgfWh3FuAD1K6D7lNoDeh47hVjDEveyPYVNK3h/rsIoefN6hwQ8OOjzoN+/u+kwegufaAsmjzNDA0SD0RZBjhaNKQo5la0cjiGs8ECIdeBvSHLkFP9J+mIE6FCQFcxUPes7iLiWX6exF13hH2kvoUae6NV4cWuOoIqcBxkj9NQB6fmaN/692X2v7XPodf7MiGlrY2YugiK5vaYcUFK7A8EExDxuJlV0C9BzizsPbST5jbhHpb+m95SXGGGutrb10UuC8JWN7Cz9SndPuQZ+t3/BMW/59LQ96fmZN2v8TWVSphXr7n/cn9WM5QZasf7SulcB3ZmD7shendNfHok3Hyr37K1KiJHESgJXe5CYwSOc4rVnN2jVEa40Twn6WeK6LEBXCvfnv+B2BNJ0b6L2PrcD1UhJAz7/l/3NHB42N+pP0qRZnRsSAwZxnW4h77QIvK1+zvZb1tNUuFOBZ3MseV8Bk2Y8M7FLZGhAfvXteE94eUfCspZas2uPcWAIkEeAGhLQV2qZ5ukfdfGhfA3StLKytWQQgtvbJlcbs1cH/ZWVyFQ86PbNWtD4hCykNpOUwCRLD8vbyJjj9ab8Fu5gV07zz0tp7IH0NgJ6fWYtGovByEW+25blCQmn7PyozpHIRI6C5vuQdIEOhdioOSuEuATqGuJt0UrIsW0nkiuxVIqhGuTh43M8wz7u05vw8o/1w8IpvSefe/J7WbdVe77H3pisP/NX2+ll8KVeGJFnKPef0b/zvosE0VI7cPac76Wt70LV9y/UabYoRGcTPcAugS980PauB5G4VCZyLtKFImLUBujtiBcxyEInPghVhOzScz/lsCOIh1LxPCSAi6JXqSl5tby4eGNVAuYWSWo0OOH6RCeAuOubymSgzeg6VubLiGCfGzTT8Y7uD7nHWat83gL4aaeWG8R30iawCQD7Zf8pd9VbvrBRShYmI1iKNBKLdQ1KzVBoC0gJqHjj2QBRXLCIKxGn0sq/mQbcYh1vnrWdbOjKfBiAlI5DEF1pYZK1CKRqdhEZWAeg/fefUkyXQ3gNqRe8yImRwKmi0aJVVHitYdLX2cfl2ljlTJK/M8BsXP7sE6J/9BxcKzS1vuORhR5pJaxtZbw/4SIYp4pGzf+l56fzf/r2dP6eWOieF8/gPv/O30vO30+BZxzB4zPC+lgedksRpsgFlay2tuUzy6qLsorpevR7fvWuI4z7DhHFrhLj//+y9D+y3WVUn9rzzDsOArmW0akLTlLGI3QQDpGzd7Qa026Zs2zQB0q1V1NkxsSWr4y5gULsLIrMbiwniCtu4RWGWQkxrK5hos7BZhaUhMWod1kmKC+tM2i7bteoQZXhnhvdPc+/7nOc9z+f7OX/uff58fzPzkJD5vd/n/j333nPO55xzz9UedG9yGrDqLOPaqWQlkNMGeEtHU55ZCuCZd7kuWuL++BqLxtrwDApRn1kDgRY2Oos7y/SuaSi0icbBaMiSx1UlF54pPZ5Zy1B3tTIHQF+NlLmGWJI4VIIY4GOKse7RUkStUFbtVTkRnjsAJ+pVHrMlT4ITGbhmQE5CEGYA0MK4KrRF6U0+wZUB69HqW4psVG/L77sC9DWA+Uped7burVETnlGm5/zqdd4EoP+P8xB3FjVTz8hKZ98yimhe17O3s8awqlsopQONA+aZZlE68E76ngA940HPJAH1aN0C1HU7Fp8tZW77mjM9p/b4F4Yn33nX4qRwPXtT6lwkgK696DN94dr8Gba9PeiePrOWvEVvuceTtjIeRvsIHSX6qko9lxfBgz4xbfC8MvCo76IzYK5luAdYLfDu6YQyTuw38nJboFuDVoaUlGd5ArKzQ0a82hpkCwBG+np0QUMJu58ebbqW70Dv4w56C/GWlz0A+nIaNrXAksR5ik7kdVsqzLykQlt5XRjBqLcNGNVkbWcgImLCqtMsTSPrfpb2FqhgRopsm02bjhTeJcS9aupj5yyru/5e/rYAuAfMx28ejRGsIUi0vOZ4Lj0lLgsco8iNMrYtAHrPHfQscLMMEkL3rCEsQ0O9dvp8en+H6wjPrk1nUJ5XA35zboCORhQr4R/eS1/KMzL1C60vneut85IU7oFXDdcf+lgd6l68tLKxcY/osHb9e4Z25ygjnvS9ATrO1eKta62hBc5Zv8hL9gLvzMt+YQC6FZKNYNICkBFwpUqh8yzYyQYiDbQC9ZYDyMLhrfqRbpoJdy9ta7Qmf2ciFVrnVZnnWAmiFY476C3EXF72AOjLadjUghfiXs8gPGGEym2rVyibIA7vq2czvmeU+GgOFAiPjGEmoJGR6d0bMcFglRhYblnYrEfVMg6cQynYzYOuAQ4D25jwZGFCuQjoecoanq8WBZGBb+88o6FA/r0FQC930KmVP9jkmfNtNYFeMs3fPA9a9txlDF/RlQWP99RxEI/6HX9hp3vVjz4yiAc9GyJ7orfqvB7J6Ai5az67c96Q+f3OH/qdYXj+S7PLuFo5nRRuyTleMiD2WobV3h4Z360M73g/fUuAbhnwIsNoxQkbP4OWMRRsPQYKzC/SHfTMgcBw+EydSQAad6K9NrLed2nDibhMDdVDShrMCri1dNMozB0T9OnBseR9WkbpBH49yC4yFBTj6xHintouaxXqWca1+n5GtoMedObdYd4gUW410VrBOiO49XQP3kdfoqgzIYjhZ16Zk/vyKvRopmBHTHQMa/cEf1YYY7lMPYwSYGu6p1KyG0DHxUVBEwGHTsAeAfVJP4CrDnotM+vaysg8I035tgVAFw/6BIzVc1x1z4007glxz9I5Q+9WWmbKZz34tC0d4jcWOLcHXY/TSgS6Vz4RpNkdr/mp4bZXvCGzLOuW+e33D0/+wvd2t7n2Oc8A9T0AeoYgBazveQc94hfosV5zbSzeO+E4wyCw5hg8PUzz4qofnDvEHTyoJ55V5kGvkzCSlulEZ6VuhEAy/Xv9RY4b73sEpieBRjzOGux6c2ROJ9FvLbDOgLTOBVC+L/Gss+iAcUxHiHuGo65XJjoe6/V0tFQpoAF6K9Nf6uWtDB+TkKh1sZ7zaQmptBR8z4rOgCr1KEvIqTB2ZbmsBoRxN9c5YtILNU/P81Z5/Sik2X/1WFvXDwGKFV63V0jdrgAdQXjmPnmmTIKveEawGdgBbqjXf411Z23gPt0KoF/5wL2TMuSB8fSLDpHiA+viKca958ha+uh8yxmX9Zj6txQyiOY5hwc9sc1PijC+LTKgpT3tSffqPetV53nrvCSFu/quu4frX2qZ1bzs0j0YZXz33k7vH3V7TUwOJy1sDdAj+a9lY/us5jWiaDZ9/hn/Z7rDGrqXya+UToZlzg7QM4uhjZiod0XG98qQOjzoJjFPE5tlppAqw0C3dU8dveqsg0YZOtFJGzaie/KpiQWF1LwPgL4GQfNtHAA9T6tVSjIPOnrsTpg08fBp5VL+FsHDAJ6VjMSbVPaZtixhWMgrq4serxMvuZVxEhqzlAJdLIpC0LTFsWJ4bFbJw3Ft6TGw1qYojF/5Q58YLr/oldnlC8td+40Hhi/qZ9bCGmMBTCCHwHwloC7DQcCOZwnX3APq3v6I9rbuV++BLT3otU/xngv3R8OE4U1H8G6dU4vOGEGCoD17fqR9Vp6tLY4Hz/8Jv2ReG0Wji+BBd8NiDSNsFAUVPcem6Ygg5vZX/sBw+6vfnT3x65UbM7bf+ONbBtqtI2BaB8+86ef0nrOw9y1D3D2+6+0pi7f2RK8xHsCMo1ndoHUP9JSv+tdWWdwf+cyte8atg9PyWnilThg3EVt5yIvOZiVVI1FK4ZCwjga71t8nClzCg0+FuGNQyI5L0wjH602e0b6UR/rrZH2TwBzn22IQAW/9AdDDnblqgQOgr0rOuDH9Drrl5Y1CwFCotVp3GVj3FD5R6st/IyUvpsBpCRw/AiLpf/KSq+RN2nNOw6VG5mcZB3q8qwjMmcKfWUMGWJixBoFQD41ZnS086H/y3ntPnxUSoYJ30UWwLJlQA3hndEQDDQN9rcBRFCJX7mUAACAASURBVEvvfNezRKI8tvKg6yRxMzqQUPdUxEyr9X9cYwuU99C4ZdswI5isk6zFrIxStJDHXASAHs2dGVc1H590tgVXG6SNZ73oJcPl1z8YDWmT79d+9qXD1c9+2szdwozVWwzECmkvQFz+d1G86Hr+FyFJXEr+G9FNrWtpGce1TN8qcq51rPW8njvEPTNoFoqNRndsx5PbQSTTzJNsRUqiV39rpGMZGSw56YHkLIBmc2Re/irgOowROI7jDnrmNKxaZuttu+pgnw6NsSzu0byYpwoV3aiN6Hv2qZ6eu6oeWEXgnPYuWyC9SjWYbcCcmIEjY11vNYzMFCOSDHBSmp3EOGsCma968zYe9CbvkCfcreRyhnDPGEWExpZxxDsnzJhDwV102OA7noE/86aPD5de+K2NrdjFS2RDAeiWd7n+nvBi9BrnGP+qx9SRPp4RjM3UWntL+cc26LliV2ouDcOeAF3eQW/dDOwqUw/vjvqtz6m96dH93zofhqEkhbv6sfunITKZeNG86Rqsl7+beGW0GAu+b+lB75H/Fm/oNaBaPAhlsvBz4U8WH0IQv4D0s6on53YrD/rDn7nVLwK9tSYjuljRv1jeGZHjTD9rMLzfYgDjXzohnNYHe0CqqxCAJ53JUD2WXrRlRRhKVIJuV4NqoTubA9LCM4rUQ3GzkcODvubhiNvq3TJxy0cJSgHrmTUWRmt54KRhBjLoWQwyoaL3PJMxGJPLrbXcnpJ1IhSNcCIaqqkYUsYoYHmy9TyXKAuoCFjtood3LTqXdrbwoKdD3LVX3criLpONssAvIErLXmBnVLrOhl1aIFkrhFsB9IlvKK/5BLrH84Fnh4G6VqCeAc+ZqJSeZWZ9W4Y1F8wpBeYsd9BXUC49nm091ebR/GxvnRdg+8l3DVd/+Y0nb90zw6rFp+XM9eyrnjqeB/2cQH3vJHFIO2aUjwzkPfTXehOLnMLvaztBMmM+0cUusgcdn1TT+pggiyLbxQDsJXu1AHmvp5l4f2de5MwdcbZgWe92ZS7GM3HWRtDlM/0IXUt7KlJnetoWrxVotOfJE6fvA6BnTvF6ZQ6Avh4tUy31eNB1w8wjpBUNFqp1IhBJUhLL4+J51rN3FqWcNXacH4JVDV48z2dVQDXQ0AyMrU4xXEhCOfW3pTB43rjIoh5Z8HFeeyiPW3nQhdT6TWB5J5geEgHgUbZ2nQE2k3xGdeYBtdTBVR7fzBlbEumwOUDH6A3yFJcH2PRVkyztPKUczwaef8/T3tu/VsZZf955PgtAHwfpGU+RV8/4KjHKRB51F7Q/exjufPPDw3DXC5YuQXv9zz84PPHOl5n1zgGs2idxs4YG7ecE6Vt60G9cGwb9rJuW5xZfwDXc0oBXxmCFtbOxevyqdx+Yz+HtCdAzoDA7QW2Ax0RmAg6ZYf7yCgnjGNC1Qr9lPgjYMwZRjDxg/zb0zjB7vUVnbRQp/eHTahqoVwYThLeLTiVtBYjwAOjZA7BOuQOgr0PHdCstAD3ytolgQWXTAwfWt8hrzrzsE28rGdQVYGrxsDFhZ3lB9Dyph1s/NVEl603mVMvK+CAhx+RVkhCe8UREoW1aqOPf1mbQY2ZePBYx0RLql96EY8G1PehPfuoDw5UH7skNA0F5JJDYPXZVxwujzAwo48VBZQ3PJ65VBNIto81WAN0649qzqmnlGe10ucx5zxq9es4SW19vP3hnLwPuzgnQ6x4sYPta7k5hxJd7POdlDHd+7y8Nw4tfkzla65aBpHBWpFOGf687MLs1L0kcgvJzgfQtAbpH54zhlPFJz1jeuq6e8fwchvMZD94SoEce21bAbnmt0dNeJsgM7GiAj7zq1vgRjFsh77hRWkB5yyZbgrKsNbD0JymP+pI2ijBdODmfA6AnCbVSsSVbZ6UhPLOayQD0jHIpVMsolCd8qCHkXXtlqvKsLHQeaF+yqh7wwTBjAU21P2TYdcAGUHcGaAnlKHySATKtSHhhdTOhnMjar8Fir4dxbQ86AvQmZVMLnKx3PJPtPbjL5imIuHYM2Mm6RWDcWl+2DbcC6NaWPwHPo6FrZtgaKzMwngHoml9lwlets6SjMmZnfwnDGetaSj+CwGf/+68bbv+OD67QY9DEo48MV3787qmQG4Lv8TM4T5bnPHpiT55bO9tzasMwPPl3Lg0lY3tmL1uGmF5+udaCa8COf+s+mvjnwsGdC6C3DNvjxy38N+qTOUYinSxqs/f7hU8SZ4FyPWHtxZWway3vo0jHbuJB5nitD3ptZuZkMiD1wYociOYj/TODARubnpf0iREMGukxnYj1JXfY1TwOgB4t3rrfD4C+Lj3D1jIAPVI+IouvFw6GbUee86oEG5merRB3S2GPrOUWmPXoId8YmDi5cwS7PfKaMqBe6aHaQdBdeWVgAPHKsDFJeek70364EYdhWBug62fWmHJZf7sd7kuhIMcQrfIdrcE9CWTGdWNRCpquGbp5BqTZfjS4q7V/pO6eAN3ynstYMKP79PulYbheQlcJ+NO/RWcaDYzMAKfXpMcgGdXX/NI6W9PvOyeJ0wC9h3dr/s3qV94CEVDTHiYZ3s8Jzq9+5L7h2iffM03DAk2edxXXdy1eyviG9Ta6vu6DBif3KlCGOTWWOXcW90gniHQhLY8za5nRnbAMyl89JmZ0X9MAtDlAb/WSmwuSDE1HD6+0p726dVFHPcED79bYPc86AlGIqOwOPWd00Z58mVPj+ZwVZ/P11s8Kb4/0JyeB3AHQlyxge90DoLfTbFGNJQA92/EaAiID3LXyx8JhtaJnKfpa4bfAky4jwpIq9vC+8wTaJcydMXt992hkTJG13FLyloRVRooK8x5k94NVbkuAvnRsNOurNLrgLnrLuBi4ZAAxAngZUKDXf0uAPs1J3zsfIzYmQ9x4Tthdc+19nRnoOr0gFoBHkNWybrpsBOKoXkWkol7DPUPcdRb3aQygQHnAxLvWYK2l8PXKa0fwXv77rG/ZKXKALApmbG/dDwyYMTkZGmhaOzbKWwnj9vSa66Ft6UFnd9DZbxFp0TBa9+l4VjPgPGofdRFLJlvttDhG0mPZMsQ9O4ioXAbkawCuPcsYLYcedta3DlnvQTAyXla3NczdmzsC9LphO588i9ZAf8ernjOBaDSU1KkOgN6yEMvL9mzv5b0+g1uwALoIGBQKWvBkQZwnuCIw4S2NlzBujSWNPIuWMj3NSSW/o3fOdQM6QZzyrnoeP0sZQMGsvYCWscQDDjLMNZUORrstAHp5B738b5XkR+I5rw2OFnXr7ppMMBsev8aGNfZNabp37cq++Mo3bvPMWuuU0eimM75Pxq/WRhPlLQ8W4w8tCnrULjOkaKVd6u8J0D0PeoKUZpFMUtCZzvdvfN1wx/f/3lmeUxse/vXhiff8pdSZyoAqvc7W30to21uXedZ722qttyVAbx2LZyDX55Hx2CzfRbDPDODoMMjK/9b5ujrXjgC95apSOEctu6tCqrziWBmNu5L5Xcv0Apwtz6/OFG95z2UMVTgH1yHDyTkFGCiXvj1vvXxDwK/rZAwhmmYsYZxOKich7JFHXU33AOhLNkd73QOgt9NsUY3/93XDjaWW+0iAZb0F2Ym0eNN1my2h7tZYrLloEKyFtvx9Iqhxp2PWzoAYlkcvYzX3AHv5VhQzK3qAKRIzGkNyu+yalnJrJ4nTIe4t46BlUcBrgB5ZexsEju47OleoHFa5K95n579sfl5fW3jQr3zg3pM9hmOYedBHpUJ7UOtPyvN+omcljSMn/SovGK6HeZ6NDZZR0D3as3OOvGbXO+hvu3kHveppgWffO3PeNSVcV73G5e9zPqc2qKRw0/zU+a8h2tojp5VJeK3gZL9Cro/FPKuhATRgYlX2fcvw93MDdM9gzZwKlvxHWZvhBx5/tgz2kVxu2Apu0c1D3NcaKGuHyXAEqfqes4S1l7bQOG+NM/JgG7yhNtfizbY861GYvebZls7p6aKZe+iZNbTC3TN1JwF0vIOeJdda5Q6AvhYlk+1YHnRk+MnmZsXQwmt5dk1ed9t4r7RhV1hZgtl7ylGYu6tgGko8U7oqP4F74NO/jbn1KAiVx5MQO4vuDJhEyiVTyvX8ehWQ0sbaHvSSJO6x993M4i7K5KKQTeZBF+Hdc0CCOpk9IGvO1s3zymSGK/1vAdC/9A9uRjaYZ1+HtZNnGOu8CThHMGe173lnMoYRxtv02bDOQXQ+xEAmZwrXl52/c3rQo/mk9hlEGnnPZZ4VnD/+heHJd941JYXLGEPZ/DNyUa+7xXPX4rtsjJb3vPBP4aeLeGmwMbYC6Nc++1B9Yq0npD2zl631XnJOmFPA5ZujviFlcP8sGssOHnTXc65BrAd2exYLvd0TAQ1vufaUt/RnzQG93UtD381NAl77Bv26ZZqzKAVNW61HocGgMb/P4UFvWpHFhbfaKosH9nRtoAB0ZuUVBUErAVkaZLx4S4QEjqPFox69tZudoy7XAqROlKqkJZH1YSl6GeWO0d9aN08ZiCIHWvbPVgCdJUfq8v5YAL1qrCOVGr3lLcpXRinzPCkaxHtKP/ZzDoDuncOZV1kMUpJATAH7eg7YNROjcc9gZRks1zKCeEaBqO9dATp40DUfoTzFMK5k+SwaUe/8od8Zhue/NFt91XJXH3jVcPWffqy2iec22xGrhx7ZJbI3O45MOfYcm9TbEpyXPrYE6JW+CqSvBdZbeAGelcgoGH0/0YlUBFVmrbNltvSgrxrSnp7QWFCHVwuYxGzv8jt62bN91Y0XZHJH73XmDnpL/1IWgTEzGmiDQRaZMQ++ZZBg9/2FRsk5HQA9SaiVimW3wUrdHc2UEHetEEznl4Tj9YBqS+lFcNmzEuxZNevZJVHWe/rx6iCo1WU9sDSVQyspCS/KCmfLq+cpgK30yPRR2uzZK2sDdMziLnNl4FwrnKHyaYW7lw68u+kBsS0gll0jay+ysxYCK6Xg7XUHPbvP5SzPnlgEj7ummb6rviQrLjOmaENHRFMZk3c2PEOcnCvh19LOOQA6C8es3v8CfIqxZFQs3bkS8O4ZVO54zU8Nt73iDdnjsGq5khTuyx+9v7bJZBrrzDK+ZWSilsO47tgX8vcW45tuC6OMdEZ39hTbKlFJxiptCdALOF/6v8ig5u37VtmY5YtMflgGod49shVAv/HPPzOLiOqKbrTCu+nhBKCsvfEaoMsdaZHro5yp988nhcLYTQjG0eNvAWAcS2UAYx8MIa0B4jPIa61+9FwiY4fukzg/DoC+lJO11c9sk7YWj9IuBSTEvVVotJS3lFhRPHqFhTcx5lWPmH7WgmsJTA2QtFKlx0kVcJ3lUjHtOgcvjGtMLOf11bL9ZU0tBTLTFtKgZY23AOiSJG6SpeXahArTxDlN4JzdOWNPrpUGrPvo+C1DwM4yniLGzmomPFfa3MuDbgGaiCQmqEXvevJOOtXnwCNlgaIMSG/hnTgWNMKUf+8J0EsWd+RndH3KSxWQE0HKWVcTtMFl1sdtw3DO59SGhz48PPH+1854McqsaU1HJbL+W5RPQiAPvEtxa5/oqKUtZGeGV4ZGzOjQBt+3AujXf/8hs+esJz0LmNk5yfCHVtJFBp8WGRz1vRVAHx7+zE3Dnrq6FI1l8XcE4sy7jYgkAqkCIqNyFnhHz3YlCMyUAXiLGGi00EYB3baMl3nwrTFk0Zo1p/K7ThIn/xYjyMQICQ3Kt/Kix9uWmNwX76BnXAPZJX/GEWarCUuSuB6lsVVQecBWhEjlBYnwLO+5nulcG+/p9tDSAgEugDbeuj5RqtCLrhkTY44wgYynJrKkt6w/GlxkOKyPaSqJt9jXBuj6DromGXrQmafIenYo3DteMhkv62sSPLaeOb02euxayfeSApY6ewF0RtvonCOoo0Y4eCEhWsOIxtb+17xL/qZzCpKFYTvs33pd9wboVUgTnrU2+JC1f9a3/cBw+6vfHS3bNt8ffWR4/CfvHoYn5s1njLSWwTPil0hHlIkZ41oLMawEcGLIlLaslzC2AOt7AvQsMG+hKZbN6DRL2tf8xtJJmHGvtc+tAHrxoNc5aDnY4hFvnojxTroVjq3bZ150QS5YX8oyR0vWg67BMzMitM79ZHN2PrXWuj5eef2N3UPXoF153Q8P+tLFb6t/APQ2ei0uzbK4t4C1MoBseeZ1QEU221bPxDFzcE8bTLlCBRoFISpYmmaTsiVvprN7OXAqPGNBxjNjzbvULcoW88p4oCXzLePpWRuglxD34kFnYBuVSkvJbFI+mWApxO68n96zPz3w6O1d1pes6zkB+kwvUmfE8raenMXMHfRRAcoAc/ScR/xrTTCFSr7wyr0BOuqqkw9DeY0YyJzC32GzWXy5rPHlf/vlwx33/WbPUVheR2VsR9DDZJmsz8zg1ZiTAs9ohm8unyhvgeXukJKrPFvpDHwrgC5J4rai2exsEEOcrCczZrXoPsirmM5xgsMSjo+ILlsB9OJBZ//LRjXO6rYARwSGhYchmJYIR/27pad1nveTuTOgH3nlsZFsectD76Ex3Xa2nyosnWflqmI86ktolDDmdgD06MSu+/0A6OvSM2xNh7ijsimVUXCwELsMSLMGw6zLURhfUequX7sFJj1Pm2byXobgkFhjgUiR94T0DEDr0PYTrZePplVgMYWg8sHRo82UgvJb5FW1FEkEMEzBtBSRtQE686BnFEsvBD7cI9H99LCB9gJ6jdnew++tSv+FAej6GSq4v+zlo2DnP6KyZegSHul5qeR86bKWBy3DS6wy8vuez6yVEPfJgy4KFfHqIH/WPCeivXy//LXDcMebHj3PW+fDMFz72ZcOX/5nn67DyayTJT9rA6C4R4ZUiz9HfLv1bGfXgpVDw2eTMTPo+NI3vGS4/PoHlwzvpO6N937zoLO41/XquI8e7QX23dNxVp0k0VHW7HtLgJ7l0606UBN9rQzjXvi18MHyXy8SDvkk3sWuGxJGi+DXCm/Peqd1H55XX4bB7r5H4BkJjjoRfke6CK3x3j/WO0Lcm7b2GoUPgL4GFRvawCRxGStuC4CzhmIprBEwbw2jZN6ZzJNrS4RAJKC1cp9RqOqckyHQTJlEZVCvCVvvSAGJFFZm3a8yLAhz3wqgM1DOlMmUgmkJG/a7F+5OhI0r3COFlryhbIFIaco6g9jVRQDo2ZcaprmN52V2rxGUnfKteHWroa/hfEXsFY1ilhEMy1leMbZeus09PehX1B10uWM+0QPunQufmHQ9df4jPl/B+V97eBjuekFE7k2+66RwuoPIEH2iexrXGTyjC/LKKAojouWaBGKgXNrvehnDGNxWHvRyB11C2vG/M7lYeELHc2yWsRTPcCsP9uR6JK8t+R/JY7Y0FwGgr7mfT9qKvO/aqYJAlaEXq70MoNYh8NOGgXB0BqCzBMIxZL32GY95VMYKadd5fiSsXdrSCfvGSIfjDnp2sdcpdwD0deiYbgXfQUcPqFaysmF+UefMq5sF3lmhgtmA2V1VrbwvAeTefC3vJSpdEwgfmZHr6V/ClOGtdFSiZ0pK4t54z1qzOmX+/9oPf2K4/KJXRk2mv+M76OxOpW6sKZM7jsKzEnuZ3dcKiRvHwzxzzAgUnSPdzjkB+mREaHyua0YHBdY1EG89/y2KMII6BF2ZTRz1J23s7UGfzY1EhFqGhowxsvKj5wzDnW8+Hzi//sl3DU9++I11mhb/lvXUQMv6LbPW2Jc2nkVnNdv+VuW28KRvBdCLB73SegTf+u8eb3qL7EeeEBle1liviIdkjbTTPt/oHXS5g17XA677zXSzYvDqMahmAHHpXF9Hq4MZZ46h1+VnlhBOQuS1wTerr1mh5jiOFpQUAWVpWxsb9G/4NzJ//e9MXzgX3T5eJWBGcw3Sy/K89UgStwafyLbRsvWybR7lHAqIB10rCKJoZBWqDIE9j4FlFIg8T6zfjKcNvWXZ0KrMPOmYwLsZhoGX8pLgjt31wdCo8dT00ljW3jKSWApiBgxq784k5Im3t3zbwoN+5YF7pqzt3vplQt+lPvW0o7ccgbf8uxOQR4pWy97U5zoTzXFOgK73Js6R0WRmmBMLfAGRkIG/0mA8NxnjXOQ5ZcbLpcAq61HfE6Bf+fG7pyfUyn3BE1akvDDW2ff2alm/O7/3l4bhxa9p2dLrlS1J4e6fZ6rPNI5AJ1p7xjsZf9S/abnMomM8Y0JmDr1ltOdcG0GXeNT3AOgy3wL4Kp/p8JineJLSaqN90bsGnufe2mute7bSaEOA7ullmi4Tv4683S3EZG2hR/lksZV1kuWfsaKy0DOemQeGgVdmoAakkVNkEPC8+tOhgHD73jvn0RpoGus5ye9IQ7wqdAD0iMKrfj8A+qrkjBvTAF2UYayVUeJnDDTheWVhV57wah3DpNg4njdmqa00WCncFb0gTAEzvZs6lIpZVuG3SJnHtV0aFmnNje045g1i3oMtAPpj77vHPQRMuVyiWNLOMkniOoG77k8raRGgrLJQ5SHQexPnsBVA30pZRZrgPL3zrcF6xijinTumAFs8NubU8xK63z0BujyzNtOrjGRYzBAZrfkd/8lbhsuvensrOdYpPyaFu/5HdnOREbTVIxnxS0+uZnh4JFPXMsJjQrnuVzDGCW8N0Gc8YryHroF674bq5RnSX2ZNvT3jjRsNsz17dQ+AziKb8Am2NXIJzWjlAXRd0LrKVsoUGa6BZQSUrcXyDAMIxBHg9m7cSQEgGd2ZIQDvr+OYEzrrNFQ0PpR/6+iEqqzAxEYD++FBX7rgbfUPgN5Gr8WlS4g7s8ZrhR2FfKRkRULC6o+B9swE2XhYiDt7f7cqzJlMz5mBJMp4Svuk0AqgYwlCtHddGJe2yDonyFMua1MjE2SAGqcWKSKWMlDpDQq9lN0DoDNFsspW9TZ65AWib6VHa78TSDdlPuwLa61lfXQ7Fxmgm3sazrQVJZONnvE8VBmFOQOEKB9L5BY4B0C/+cj5zZmf8O0Ob0vhwWd963wYhiff+fXD9X/xB9FJvqVXGpFAJ9EUEh4LeThkvTN8me0//I0Z6HpAWJoAUFDzVjFy4hOW2ba3AuhyB93kkx1J47JzsmQorltve1G9zD6j51k1vBVAl3fQtY7G/sY5Yvj7CZCLiJL57nmcBTiykHZp29LJhE9i+5HnXo8Zwa0RXXmTURtAF8Eva58ZBjK0y4a94/hQp0Vaiew5POiZVVitzAHQVyNlriEE6JEi2qtoltFkFBKmpFoGghZDgeUtr3zBAOiZ0FcUaDmqz0shIGaC/OTdYX1nKAHKUYlmHmzdb0TbCKBHdGDGmLUBujyzxsbClEldzsvkvuiueukkA9YjAq703TKW6PO6B0CP9ps3XQxrZwbAGVBR5yUL0NmZRCPHpI+p54zCsTSuI1uvPZPEoQfdm7PWsTSfZKDxWd/yuuH27/hgIzXWK371I/cNV//Je7obZOsS8Virs6itEwNAUmtacsYyhMFopCV30/cE6HgfXea61fvokSxuWScmh5lsneYEUVOWPmeNYSuAXu6gR04VK/Ipq6dl9rBZxgLpUsG6P+0BZpMBJMLXJ8abmFVSV6wtRfNknnI0yEo7OLQIrOu2hafpq2moNx1Z3BOLv26RpKhZt9Nncms6i7sW/Mi4PZAsyhejYwTKIyUlMgis6t1XVtClT7NFglMrtgKGKB1bQoUyG3nMCK/p1qpItigQWjFHZR7nuzZAZ8+sZUjUch89014tQ4RLT9Z2zzDSajTxvGt6jbcA6I89cO9NfWDc3y17sGWeGDUz81ZBMqL0WiYKWudfV8UzaPE6y4giNNvVg/5j4/1sxZdmgAAjJJXSNeMbSlm7/G9+3XDH9//e+Z5T++hbhy9/9P7Eqt4s4nkicR+bvDK40sJAHNsfTP4hX23l12lCGAWRf1b213htbCuALkni2NB1kjgNzr1s71laeY6PGU/aQQO2AHxmn2wJ0Ou+VTyZhbG7YDwCl9nFispZ/bBXWyxQGl1p8zzjVWEcB6lBLfu9EnUs6wFky7uObQptMKmc7mcm5NQ4I7rq75qWeCbKv0f6HSHuLURdXnYH9rR8kE+nFhCgZwCAB5o9Jh+1PZ19FXITAfTMWqQET6MCkenXKhPRYWYoEYFVToYV9uNYSBGEodcvqwgumS9VhuCkl3FtmcU9Gv/SkMyo/em7TiYTCel0ozcLRsCVKYmecijnZiuAvsbZFhJN+zyR7Z29mZ4hdURf3UbTGVcedzaOiH/tCtDLM2sjv0GdztJbT/RDdfbP/Zza8PCvD4+/+y9llj9VhvFTvUdTjUAhi0fLvoj2R/S9Z0ylDl4XwnaYRz3b194A3cvgvrYnvZU3ZGnmlfMMBC37c2uAbupMRD9b/R76RAgAwAIIq5AF7zZ6zkVPYxneo4X0GCi7z571jPfehc+MF8u0GgGQ5oy+pYyeg8rkfgD0aJHW/X4A9HXpGbaGSeJOFF5nRTzvdYtHDMGF5X1aomiw7O7eHSfLg17HurHnTS/abM56LVjSDFWx0lAYWcaCqgBeBJx6oyJwM+p+9gDoTKHEUHfvKbbobvrJYcMnW3QB/JZ4UiQ8zJ2APzLSbAHQv/QP7p2uvLD9njnrEWA+Oacl6zicm5aEkJlQynBMKmIgOmeRwn0WD7q8g67fNCcD1Y6dqrMxI8Rdw/CcHzzfc2pDIilceOaMAri2mf2MQAn3qsc/qw5Lwpdnxt4dtStt8Cxja/WgX/qGlwyXX/9gL/lpvRvv/eZhqQe9yv8Vsr1HaynfW/aNbjPiQ4xAzJiP+/gcAD1zL12/0tHC09MbjFkjNXDEhgS4R7qXBZ6zYN0KL896uCMCeE6hehhUyNSSPq2IgYkpjv0AXQ+AHi3gut93FCHrDvyp2loE0LPzWhI2ZQkry0OQDiPMDh7KbQnArSF5nu7CBCs40KdD/U2BA1gyTYGtyiFgjgAEUx6yCoWeda1INwAAIABJREFUr6znOT3ookRGb6V3bqnTaht60jNjjLxyWuHfAqBjiLvuLzP+Ncowr3smMdGSvtm+r3oOiSiJzp+MY3cPuiZAdK+QEKtO9dIwPOfNvzMMz3/pEnL21338C8OT77xruPb/rfNqh3eeZH2XGK11GxafZtFR/QRapyZGJpVW6TOV0N3eHnTdPQPglhe99feIqujpzvKATLtorDkxVkLuDNb3OQD6iX5IHCS9uUQiutXvFljWlfHVHcnoXgXbeMUN3vAO+7ZClNBRo0G0Hq+HpqI5Rd/DwQN4z5SfHUKgmwbm6l76pbcd76C3knZJ+QOgL6FeR90C0LPWVuYF0YAsA86sMkzBQcVGpucJrUgJsjzp+E5y7Xv0am4WSqXWSwtmNj9KN+UlN63GCQXaUgqYAJ/xUJKNPfL66DVEhfLcAJ0dHy+Mk3mFMspn7af3SkWnl9xjDZZxreoWN4bhq37o48OlF35rB3fhVUryvgLQke+0GogyAzrpI5ndXbddzv9txWumve+NYYMWj2U8lc2r9K33mx7LngD9ytvuvkmHS6d66+RMgezmyLvKv+/8L35quO0Vb8gs4SZlrv7Cdw1Xf/NDm7SNjaJRpgd0sf3DjD0Zw9sak44ij6QP9KTj79ZYtvKgsyzuOkncydopb3km1D1ThslQjwcLH96CP1pjkT5R5zoHQGcOk0w0U6ZMeBYyQNUqo0FlQg9zxyJ9RO1YnmgLWYnxACMy2WC8ti15iOONxl8Vb5JtfrZRx3+UiKEDoIdbeM0CB0Bfk5qJttg76JFlFZl6JEAyoJwJinpWtadYhfAhqJSy6HVnyqFu03p6rbZnJI1LkDUs4hlFLEMI0mN2J10Ym+55DOmdgXeHQTIv3kmfxsw84wxTJNkeOmeSOOuJoDJOKxvxomzu+J6q9qiXTjcA4uGmNM7bVh50D7RmxrpGmZMkcr2GEzIYPMceb7KihaI5lj72zOJeAXpl+ConxvjvqkiPipoXsfjs//SMb50Pw3BNJYVb4nm7NCq3llGSyShZzyzYYuDeiiDzjNOR4TraZz3frbfRpS00cGp+uhVAxxB3uXsub6DP5JIDzluBeAv9IkdIS1stZTPyf2uA7uljs7UBPr0KGLeI5QFGTAzHso4XPqGBsP5bh4iz/jMh5Dq0HBmvtKkBtAWaW8C6NVaRDVoftXTObBi/tKXfmR9/u/Rjhwe95YwvLXsA9KUUbKxvhbh7zbSCS2wr42ln3jXLW98KyjPjYU9+TMpVoMT3CAtLmdO/T4IbE8cx5htYND36Yihc45YyizPvjlZYzwnQcdDefXXvPmXqnjrL6F4GgCA9InwjiLfWXK8BRjWUb1t50KuMJVEYk06h7zmrvyOy9H73nvmpeke5ZrKCYrjGnDUv3NOD/qWSxV2HVI5/o+DWDhkNOJ71bT8w3P7qd/cu0fJ6D314uPJzrz0xvta9uKJxBgfKPKR6DT2Zmp00ypBzAD2Wwd3jrRYvPWeIe90LIzhntLcSymWyvbeuM5X/hpac0asYr9d8ODKangugW4k90cCWPseRlzZ76E4OupFhvfQnAJPwz97u3Hoe+M94sq3GPdqxPj2DQBbxSbs6KV+J4joA+iZbx1v6XTt8pneWBeiWUsm8B+gdEAHAFG9zI0CYZFWQldaXUUas/pggawmjsrwuLcC8RVBbwLbSAJj9bAwLmDBTKHGtvMiIAlTRIh+t9UULcWdhnJYCGiZB8jzmGmgz0C2/eYC8EazrtUAvHSpxWwB0SRLHxqH7l3Of3UtZfj61J/kdgnuN2XZxPsi3kLaM9q1z3ROg6xD3OhcW7g58R+Z4+wtfPtxx32/2kHKdOo8+Mjz+k3cPwxPLmiue8xuOYolrGoEsy/Ds8UtvX+GZseQm22ceyGsBgGUM2etBYtTUPHQvD/p0HiHxm3jUtYe95e9oh3ny39O1cC9F/XjfI4M52zfnBOiTPjd6qZtf48h4bLME9doSMC4yX/Q0Lce17qb7ZDob/oYA3wpP1+VmgokkdpuIC5FR0wEhYecRUBf5oNtQMuMkCouNsfzG+hmB+gHQsxt2nXJZe8o6vR2tDBmA3grOM+GaEUC1lJpIScj03bLsa3jMWvqb8ajxNOg5VX4lp2RkXPW7eH8krH0UAB5gZ8IePahrAIho/jKOi+ZBL+NG5RHvmMu/WTlRUmX+4f10K5P7ip697LnTAGALgG4liZtkOez9aA+t9Z2+m66kkmeEY7T1PFKRcXPSmUj0gG53T4BePeiiNGllK1C8Ln31MDznhx8921vnmLFdco5s4TWPwFd2r7buHX12EPTP5IbK+J4dy9rl8NoQtn9uD/pESwLcvSfZ1qSTJZ/177iurf17xn8WmXjbC/+dYfje/7O1G7/8+/7sMDz8mVuvzjS2jpFPE98cI55aHCdNXWtvsQbJ2hiP4DIjy612p01p3NHGegjQe9EVzsEC/iIXMOS+iaiqsEUHNZ7jDnovcfvq9W6hvt6OWiZAZ0LAEvoMNLM7bxG4ZgppBChEQFljsLxRWJ5ZY3VyuNqP8rKtFe6qx6+FLY7PDDvXIB2Au/auaxDfIrA8JSHy/GTWTs//InnQrRB32aMRcNesxQXm1lNsGAZfGow87Y38LAsktrqDrofLDHKTPtIhFVgySIs8J8YtSA5Z6oVnpjFaxVOMa38N4f1nAegI8ohXp86x8M0Czs/5nNowDFcfeNVw9Z9+jIIAL3N/uO6NZ47teb3P0WjTsg+8drRswf21YAqzqtEzlqWwFZWEYziXB32iIdw/r/Qjd9L1XfSWjO6e8UWvzxIj3glN4TpRZt1Rf9rag+6NyeLpqJeJrpbi26ZQcBKVWZ5jjJKz2sYn2LxJrynztRzNJG/zPOTTQSH5SCrhxwIM3EeyUn8PxnAA9MwpXq9Mhyq2XufPxJaKB52GfDvMnHlVI9q1hmZ5HnRRNtCzrH9HhSQan8mnDVC+lQcmA2qZ0QG96LPUGcSiOTPAEIaJAIIpDZbxQ2iJymVRzlDh0P1cBIDuhbV7e2hRRndPkGcF9Fgus39cJQie2illt/SgMyVS/8YMVdG+6z3rk85hZHpf0yg39UWu8uD8kd/h/M4F0Ke9ppUo7fUogOy5w3Dnm8/41jkkhZvRluQUmHiX823p/mJ7Hg3arTIZ9xMa2D15uPcZi4yfZawXxYM+0dUIga90vdy/I5BfR/w78qr3j+RWTWvvlH2ylQf9xj//jDn0lpd36noA/+6mSeTJxoZ1SLsAVOtqm66rjfFj5CMN/84C5qqsGaHhDGFlwDojYmY80wEa/9B9RUDdAvd1kW/O8QDo3bu7q+IB0LvI1l8pE+KuW2/x/KCiuaZiHYV5Zb31yNA9SrJwd11/zXDJKIKh8mC4e1TrgIJcy4my2cCImZD2lLz+HXir5kUA6C3zYNndS/0usK5D36w75wvumbfMC9d+T4CO49TGwJY5UH2CGB0jhdg7324GcLmbTZ4ck3NkgbJWcHYugD7jNXjvfORPz/2vf2kYXvyapUvXXf/6J981PPG/vtGsz3KPdHfmVJR765H8FL6+pqzU+63VUL4FLYRH6oSa0o/wzr096Jl5IhDX99SZ9zzjXbf6bZH/UjbDyzLzRP6k/70XQM9GQLHoF+Y8SUXCtABOTchsPSvkHFFPj5xfOob0xjC84xhBpdtjSYzlewTSvXEdSeKyq7ZauQOgr0bKXEOtAD3Tqud99QQSC+ea8UHl3cN2MASc/btF6bFC3mfjydwnyhAsKMOUOhe4qFNUBZMA94axeMKe0ZFdaWjorha9aADde3pNz00DclQ6m8C6zuJ+AUC6rOkeAN3iGQxctO6rbPno5YaUkud01qtA41lHAH8WgD7ymKoXjgqYRPGIrnju59TKvfOSFO7GlVuLEmXqz+yVpftA+tDrqqPBZuvdoaxr/qz5Mvtbzldm3luVQf5Z/n3RADrL6r7Ec97yTFsk/z1nRIujgulauOaX7n7xcOn7fnfdrfC+Pzt4HvS6R5VXvLVz7wrLrK0syGUDiOqy7/hqS+Gj5f9MD5gtTvKd8FIHPekYFeAhrl7wjBFVMo66kCRBnczZSnY3MczT+Rwe9NbTsKz8AdCX0a+59r/8zuFGFrhGoM26L+WBtxYBwhSaevbHgx0psh5xvHG0gHV9b73Vo27R14oWQKVOmB8aJ9CrPgPtigl7/eu+ekFTtNYXDaBHh8kC8KJw6gRyJ0C95b6avK1qPcOWyfIeTYZ8l/2wB0CPhmcZhbK8K2rf+o7GLS8vBdXbGu594vljRjh2hvYE6I+99e4pSeVsLKCUXQRwfuVn7h6GR09XheUSwXVFUNDKy0+ADXlO0ALMCJrrPrg2Ku7OOY32OAN62FfURsTDo/pRZnfhmRcJoCM498C699Ra5FFvkf8Zg3jrWqF+xdZyLw+6t488sL5VnqBoX4ffMfxd7qELaC3/FTnOsrY7559mOQ8HpApkUZdnhLC+WWDd87jrsWN9MDgcAL1loZeXzW6V5T0dLVQKWHfQ1yQPWvR7lOqMcYAJGEvp1YpJRpBZVlgdTuUpea3Z4CNvGzVWjMzsZD7GqZr14dxDbzWMyN6xQnXFy4z74CICdHYnXeaXVTZdoJ45aCz8PVMPvW8N3ji9N84B0Nm51fuqFVhkyHUCqnSyOOP6iNduZKzL8DSZp2WELN/PBdD13MV7Xn6748+/brj9Oz7YQ/LV6jz5zq8frv3ffxC2t1eIezgQ9TqH8E22PzKySu8ZNO7KOBhPz7admYtXRhswSznGYy+/8CXD5dc/uLSrWf0b7/3m4dpnH0q3mQHmEz1JUrm6DnB3Pdt5i/y32ozWM+oD90qdzwYe9LIuwyP5dYloiC9xTPMwIh7Xioih42LAVXuRSyV9X738W+Q0q5uV4eipPhFu6oeMpzxTxlqYFq99tLjw/QDojQRbWPwA6AsJ2FqdhbhbwAo9s0xpjELqLG8wG7elXHhlK79ToTKWMYDNMRJoul8v63vrGlTB1+hpkz48xX1mWQVmLwp1JJzQ6yL0zRhZmNed0UbKXUSArsfrAXIph2XC99Gzm0V73K2rFVnhne1zLLcFQP/i+++99VygMZ4MgM3sQ+/cUl4CWdwRaC9JEOl5yTTfmpRKkkRO86ny951/cSdA/Ogjw/TMGlP4bgzD7f/W1w13fP/vne85tZKx/SP3DV/++Hu4vkzWtvJfZ82ntVjxSlPGW1rK1HKj96xFPkVHXAN05OnZfrLlvLFYCeMukged8ogReE97oxOIZ9fp5LiNmrLlSUce0conLR1riyzuGYDeEuKunSHMgVL3+9ZPsE0bQ4VllzUrMlqMvRgZV+pEr7dEGyb7nRkJPK82GguikP6Z0A2yumfHTModAH0B8TqqHgC9g2hLqghA7xG2lsdaBD4TKr2Cg/WVnbflLaiKmbPjkCbobcEkUVrRk7GxRFIRKLbmZdFbA+E6H8U86TfWAUlqJfeXmDcTwfckjyALOKMvjkna3wqg9+xtJJEFvPEd9Cpjb7v1fjr+O3r/d9YvAgIR6FqQ6woLPOYzeQpruAVAl3fQWb+4l+ScrrGOEc/Ihk9G7bDzn62D4An5qTZclr/39KCbAL2wna85/3Nq1z761uGJ/+1+ytctzxrj20vWL7vO1t5n6y97IAO0PMM2M7i2tN0zt2wdzTe38KBf+9mXDjd+/9PZ4Zjl5O45hqzXfQQZ3VkZXS4Ke48Gy3SbqI73nRmO9G8XIcSdjb/lGmJInxbwGTYWFMD75iLbWULfunESHWqgjcWZN1vf/WbtW97zTFj7jMnBk2wtXnkjIuAA6In9sGKRzPZbsbujKQlxr2ffScKWoRQKfwTj0gYqGS2g3QLq3u+TsqXeFs7MJ1sGLbYekM+2SYUQAb/odTtR4Lywd51dEzvErMwkG7WlLFpW/WjuWwH0qN8tv3sedfd9dDYotK7ru+ci2KXeSmC9NLcXQM+sg2cUzNRvVk6VZ9Wqy85/61gsxbi0g4YJ/PeeAF3uoJ8YLy8AOB8+/+DwpXe8LIzMiNZRvG5VJhrPbE4yxXiOTbK21zZuDMMNpdmwtRb5q9f7xLiKA1fnv7SfAe+6CQTyrfVb93hL+YsM0HEeGpRLZve6niNYb0kIl6WRZzTPttFTbosQ9yGRJK5nrLO9Dnw8utrS60RJjVPun2NSNJTvooNFkXHaE88G4Hm/9Tf0qqcmExRixgLWZz0wxpvqlSmqyAMdIfu2lMlijZkcbSTtQwehVqRASRJ3InACM4mlYLB2vLBNrRBs5R2zlJBQ+SGZQ7N3m9znlxSRWoUAE8qTomgkypu6Q0aJa0zAeu1PQrLUuNGQY4WyW2tq/b4FQP/iz9/TrLj2Hi8rBJ7duWzuI5PhXTdqvZ8eCXuyzlsAdB3iHnltLFoxQNHCR2YGxUSWYHb+t1b0mNFT6CHzPwdAxzV57o/8zjA8/6XN23q1Co8+MkRJ4U7kk4pQQV7cypt759EqS3tBtNePJ1d659VSj/HNpxJAr9hCec4jr/haT7KhblPHkXRxZfgk5ctPgTvo1jm3wt0r/mOGtj086S3JYlsO1QkRgszvujzTDdcE7wjQNQDHv4M5Hx70JZuivW6SvbQ3fNTgFPCyuHtMPBL49ZyNHmvm5WUA2evP+hZ5zrU3l7WR8d6zsFfvSaYqKJXnRQSA/O7tRU8h94AKozUF0qKUtoRQlXUs8zGewdCKAvbZcu62AOiPve+eliGsVpZleC+N62fYmu6noyDX1vbSMLsfmwTjEUjYAqCzEPcW4lvGvYzi2dKPPrOo4Ek7VsRMD8izzj+eMeGv5b973kEvHnQEAnf+lZ8abnvFG1rJul75x78wXHnHXTcztreETaoRsBBZ+dy6jtOb5+A5z0yYrbOul93fdR+Nd9dRRi71vmbHkJmvVeYiAXTtCWfjtbK64zvp9dwYQH7iJYlcNN76aRmdAesR78dxbeFBz9xBb91LLCmv5teik0URMq39NpVnnmR2Bz1qNOJ5vWHtdcManeuxs/6NkPRZa8wAYvVnzPEA6NHmWPf7AdDXpWfYmvagM3CVFcatjB4HZgE7D1Rn+xSFEo0CGS96SEAoYCl6SxJLWWOwFC9LmZ/KjyFWdf7oRSonMBlBwcAEG9Ok6MIVAzSOPO9HPjFcftErW0luln/yUx8YCkDP7uHVOlYNRUnjUmHumCAOn1VDb3npf8WEVlsB9Mjo5q0H9e6M+7ZlvSMeEiUnYgre7Kwr49YJ0AsUK0sR1/ys/L03QNdn/Nn/2VuGy696+xZHJ91mSQr35K+/hz//ZrSS3SMthlYG5DG8PT2psSADWdHYy/fCd5hBNTKsY9tbyMgMDbYA6K1Z3DPjPNFjSPK4UkaD9Wy7EW+Sdjw9AA33GdDu8t0NPOh7hLhPtFKRUgjicd6thrnsutJyGCEn4LXH8F70gWIIYg4VLyqAecktGRUZBVqJYXno9bNqOgp0/PsA6K2EXlb+AOjL6NdcW99BR8Uvsua3dKbbOhFqiVWPlJJoLBaYrMITPP0eyNT9tHrWreyi0dhREFvlI8u6Fs4TPRXtWwRSpDxgX7K3ZOxsPZ9OHnS2RpkEcSeAnSWRKY1HANzynie96poXbAXQcV9HETQSccBAhN5frV6kzPmr+1mufIwVrPPPFL1pfAlelznf+nztGeJeksQJfZ/9H/7AcPur350h32ZlJCncjL8o5dECnB7vZtcWtjCwMqLM7q4be6VFFjK5N5NhyqiFPNpbtLWBn/QlPHILgL5WkjiPLtqbzp5pm+RfiW4gSeXctkkemOhgWTqcdS4i3rOFB30vgO5FPerrSzPgjlcDI4Kv+V2ff/13RoazMpbHGpPE4XVHBsZbAbpHx4xMPDzoa+6s7rYyS9Xd+FHxlAI6xB0t7kutrVQBgURnGghQANmwaJZXzVLY5fc15smYP2P6LSBYph4pWVa58rsVNTB9w5D3EpYJnvWTJVDMUhszpE1rTXU7jPZbAPQ976Dr+bG3fXVI+ypvo2NW9yjLe8NZ0nvqz7zp48OlF35rR21e5dpvPDCUEHe9B1pBh7XXWtpZY0J4xk+e72lQZKxzjgZDPO97etAFoD/rRS8f7rjvN9cgYX8bD314uPJzr514HILuJXvBiozAPAQWmI9yE+hJZyMlrDqT/DIU94gOnge2f3GW1dwCoO/hQa+yT3nR8R30LRLGWXqW/B6tf8tKXWSAznixNTcLrLec2xa6uWURvLInVUW2o2edXVVEFBXJIAs8b4HGWOi7NhwQL7lHu8ODvtouTDW0xZZIdfxMLaSfWYsYvWb4AsJMBuhkHGcKJ7P0eqF6GXDtKT6o7LB59Ag2FuLuJY3rAexCe/RiRAqcOR9kmh2nMDIiWBEMekxbAPRz3UH3+Enm7nkq9L10YiWZWfGt9K086JnwWeQLaEREsMoiddYwwEWKXlUOtSKkvbgqAdHS867nK3/v7UGvz6n98KNnfet8ePSR4fGfvHu4/qXZq5K3XiKpTNK/k874oWVoXZJErnfNrb1dfmfyb5oPAepexJNnGLL2fY9sbNGxtgDoe3jQcY4RWBdA30IbLf89nc3SkTJ81+R3T8EQdzS2VfpBjqBW+k/lvZDxqNGorsh2BOWVAYyNt3rWTzbo+IORX4jyUNZ3NNfoeytIl6TIPx5dyIw6Pr63UKADGrQ0f5RFCiBA98DzEupZCkLGe2CFaWXHg0p75JHK9hfdT9Xjs+6mZ+fQWw6VL6bcnQhsZsUkVlgLPLE+9fi1crcHQGcKyRYKppXFHdeOedLZ+oYgPcoA25Nwhgxka4COXbasjef9a2nHVEidpE1evgkEer3nV+p5PGtPgF4ypT/nBx8ehrtesHRK/fUlKdwfx/kyvE7QGz7R2snoj/dW8Um2yl+Np9eyE7ZkYsbgPO2Twq/laSnyvKg2WmGEGRp+sWxk8Frj3D0VADpLDmfyEbibXsrhm+nZ/dFSLtpL0VpiXxfZg95Cl0p/8oQmu4ao+UJrH2Z5BKQaIGu5Pl6tGqJXWfT3jFddIy0W4t4KmGcKXgNfRiOFRRfD2Hp40FfbkamGDoCeItN6hSRJHAPQTIhrRTEahWe113UZIF4i5DP9WiDSAo/hXJPPNOFdxpOQ2Kij4Lu1jifWdGCM03fLsqySdVTwARbXSBFAoFEF5HjaheZbeNB1iPuSPbVwWdzqGY/61EAWlEsFFvaKSeac0ZU12iPEPaJv5kzjHrP4V9SXqWSr/XrCv+TbCM5Cj+t4npae/zLHPQF6He/XnBGcD8Nw9YFXDV9+8GO3kj+SO+etZ50ZVFjkE1tXreyXv5cC9Gh/tgJm4bVW9Em03+ucxGMF96CjsWa/o3FzC4C+ZYh7BqyjN73S9dqtkPg1ALsn/5kxU9Yne162AOhbZHHP7js8uy31di8r6CiIDJqNS3ij5a33vPgMxDPgbjKQ5NNu2iE0E6wxhQ+AHtNozRIHQF+Tmom2MIu7COPIC4pNZxg8tomWeqZIeEIlMb2pCBoWvL6ZEYLNLzPnCTQ0eGWieWVAuKWMMU/cpPAhQ7ZOo8pM7Rl2olA6NIZskcW9APRpDdS1i4jGW3y3nl4rfYXecjYgK4FcKes9yxYlmIO+tvKg9/IaXE9TP3DWu+XsZvfCCc8E0F7nawD42ocRIm8ZReWM73YHPUuIDcthUrgTw+PYd13fKlBu/jCtd3Qf0xl75vpS7dJ5X72XNJbslN/Zfva+sXEwb2r2nPQati16bAHQtw5x90B69E3okLmjHsn/iB/q77jm0TpuAdD3ShJH9zxkdWdPaZ41HJ7J+Kz8LryvGONVNI3LfzByMhvKni0323hJ8D4Je35d6QDovRKlr94B0Pvo1l1LA3St+E4CQ3lKtcezKiILV4uBRdaupYR5k27xuGE7LfPyMoPO+FEjQGdemIxnxqKpXlsqhLVVVjNcJ1wqorH3Hb+Vf2/lQWf7uvvArFxRZ3ZfBNLLuFhyGRyvJJvJCvlhGLYE6Di8CBBoHsT2kAvYOviVtYfrOIjX3DrzvaGTmTO2mwd95b3f2tz1T75rePwX3zjRnbEsBj68PeV9s+6ulj48T/oaGd8zvNOSU9EZytKdGce14deTk5FxNhrDUxGgu/oICXGf7VX1PnrdX6NnXZfpBe9sXBYwj/bOFgD93B70ST/I3kv3vM7Rxs5+9/QxDdpZewuMkLMb3SpqsnbDwtGj+Xhj8Ri45b2H/g6AHi3Aut87VKh1B/BMa40BdIuhR8x7LdqhEl4FFrlHh/1lLcueYSDTj/SbKcvuqTMPSwZ8uwqAc1e28lbvLq0OW9QWZfFARmBuZMLTuhUQmDzJeq238KBn3kHPrONaexsBeWkXn1+zgHoI4Nl76bWD0ZLO/k5MbAuA/sX333sroRfszbInyv/LfOXvKCIE9zgD71k+kiCJWeSkX6X0TcBNnasl5176ekZ40CEp3PTkXdkr4lwZ/zjRK4EXZUC5y2uJsZVld1+yj3RdNIx7gCvygE51M081qY60zMzOawlf3QKgbxnibtGEec51Zve1Q9zNcRjRRMhXI+fEVgD9xsMP1aFH/Wf3XlTOyh9k5ZgIvehZ0J4tV4kB3m/RqywHCupc7F56BrxjGLtmqEyvy7SZKSOLhp78Krh50s8DoEc7fd3vSbV+3U6fya1Fd9BR4COtNEPNCmStxLK/8Tfp07LKZ/vNrLOnDLUKD+aBicYQCgIA21ngba0bo139TYPyxNNrFWgUZZncT3eVXaU4bOlBZ0aZ1vWM1s76nk0ep+s33UuXil5Gd+8uejCxLQF6L00znmUG6tdYc2oIBNCGWd2ju+aR11XqI38q/37ae9AffWQoyelulKRwzv9QFmkdN1r31oSfbBhsjb3fqt6ZTCjnGZ+ZDEa+HsnITPuekazOhRjRo36t5dwCoG8d4n4iY0eveeZTBC0AAAAgAElEQVR+OqurfytAvu5n8LRH52HtNdsCoO8Z4u4Bc48Hz86pAbKzZzkt8xAoS8i6MDb5t9bVrPwyEUBmc9Ie7nrA1citb2sgOMtTT0D6AdDTu2mVgmss7yoDeaY0YoW4W6FsS0LXIqW68p3A04vr0qIAeEqI7lsrwUyxK33eVoSvfnc68PJb9xdrv9nQKmNTWjTL0lualTVHcC6W3BNr+ygYGPjFtbQA8tTnhiHukUFI5h8p8WvyBAHgxUtc/scAeegxzwyo1XtOgPxWAJ0Nf401sIx+M4U3EZHjKr/GlRXtSZ1df8EoAZVBGL02mWXVe/bpDtCffOfXD1f/rz+YvCiot4ruqHmM5mnIz1tkxkRnEgmB34SXz/aZl3OgZaETZT0jpJbbwputJlFuRPx9jTOLY9kCoK/pQe8B3XqO0fNrFhDHMHc02M36CKLqNA/RcrieJ+CP0x7Y4Jk1CXFv2aOJ47CoCDpX2L+XdQCAV57phOS7Ux/M+I6/MY+7gHcBt+KF95AWA8hepncMR98SxUHbB0BftAubK2+5tM2DeSZUiELcPWDlCWamBEWAsVURWNNij8pda+gXBRsNSjy7y766UFCDZIJ9RgOiBYuXnIavEwuttZ6WYrCVB90C6JGies7zrwG8l1wuHCO7l64NS+w+G4D0LQE6A1XhnIwCGf4yA08LQXoW4Ggg54G3Fg+MnuvTOcS9JoX71ftvGW4dDeFEr1Q/VPa0QLuw+HMFM+o8MUOsLsOMMWHGf+DbzEiuARZ+pwaJZIi7x8MzBgHrjERGkosO0Ht5VJU5oxdch7cz8M5C4Rf1SzLwW44Yk7ftBNCXnNUeGrErKlmPesa73jOmkzvfpRFMGqeBPT6r6j29lh2Q9pSz0Hp2T70yPLjmGP27HgwjcRx662XsRX4f76BnV3KVcgtE6Cr9P+Ma8QB6xvNoMVLLArsmgfdk4thXSySBpYz0Jo4ShS/reWPAxfKSTKC1CHPt/dF32CyGaSiSdbwjc/e8m1sB9AkgEY+CZZjZc295d9BTXvTo6TXr0DFhT8puBdCtveB5cyLFvrQpNEOPDO6DFuOAB/698Gj3m0i78azVswdRKRl++XQF6CUp3BP/yxtvPemotINp7QKdbuJnI/8RoD7bYwnlsazL9ZK4y9BQWF4RBt5bebe3/lmD9myuSmnPGLQyfHvSl0eDF55R78xa37YA6HuHuEdnV3vJJYR94lEkaVzdywTcR2Hv0TrLGUG+y8a/RYi7ThKXGUNE1zW/e570Nfs5acsCqwJkFUg9SeyGRvfC38r/o1xCOAh00jDvPvJD9LRvSqQDoG9MXrot9+7zGd1fJsSdKbYIutYiIirt0o/2+K4FnjyAwJT3CBxENEArrS7veV7QexP1QwXryEj1HFiUAANHE3Cw7qJrBVcljMP2T/g/WPS3BuhaEdliP7WsC95LR5AubWmALn+nQLs1GOvZFudt9L0Bes+ZdwE0AVWtnqPZWYV9G+1z2Xc66/vJWTBC3qO766WdpyVA//yDw5f+u5fNALEXZSl666wMUx5HpXOpR32SiSwJIDzdhGvdEilhHWPPwMrkdRhtlgDuexoztwDoa4a4t/D6aT2cTO4YMs9C4Oseb7iD7vEsrb9N/GmsgDqC1re2AOjlDvr1z32m9n5uuazPdaXRGB3DriFmeHPPPpnqRCBdmJ32nAsj1P9lg9De8BNhlPRkszaWJpSzjALsXlPZL2/LpiNetBJH5ZEChwd9560QhbgL00SFllk6Pc9XNK2Mgm312eIJO+FFCWV7SfumggWKHVpqUVBE9Fv6Hb0xk1BWnnQMW/JC3jNKKK75Flnc9TvobO3lt4tmuS/j6koUpyeJnnX278TG2Qqga97SanQzo1LIeWaeRqs/1m7GA3Wyt5zrLXJuZn0xI0IygdjTDqBjUriEYdBz9liG2MTWnxVhhlIrPB3DY9m/sxFQ0Tg94IyRXj2GKWYMqOAFrogw42/L2dPz3Aqgf/n3bmYLX8xbo0UJvnuZ3LU3vReQe3oO0+kmfYOEweu2tgDoxXDCsrh7hoKF5HerW86SuueBJ2f0HDN0OzMJHa1Y/oa8Rzc3M0ngJgY3BMzJqy1zxmckiKsbSZVEwI59e4nqPGOE9ENC7A+AntlE65U5APp6tEy1lAHoyNAt632L0psaHBSK2l/q4WZjsoArKj4985mEovKeVVoHHhhL+LYCCat8qNBCiDtakmt9eGpNW8YtWp0DoDPDE1rx11zraJ+03D23EsylPexe9lclyLcE6DPlLwDXEe3w/LM9ZxqiosbJ95bzVseiQtn1OcdvrcDtaQXQH//CcOUddw03/mgk+KgRVJYDCh/V6STMWq0XvZEDiiX1qCuFUnhyJGM83q2Veevvjm2YqsJAfItRzJL5ohukBtFQaAuAftFC3Cf5r8LWKz3B054F6XqN2Jvp3hp6S6P3zhYAHT3oF8lYnnGcpEB6w95PFc0AWgH0GsBbCMsDzwiQ8d+Gd3uaR+RVT02YP917APQs8dYpdwD0deiYbgUBega0TYJFhU2LoPYAT3pQopsZSU0sq7ylPEVKlTUuRgtUanrbxj6ZIIgSCq0tGNz5iid9BBp1/CS0Xc8rGh+u414AHQ0QdSobJQxr3fOsvPV2erpt7456lOX9+jB81Zs/Plx64bemu4sKXvuNB4byDrrmI2vyjah//R2BC/sWtecBdQbMrXlXHuoZ5wwl6ukE0K9+5L7hiX/8Hjuhm7x7LldpjGjM2TqqMlVkLdQyWF6BKDnctOat90DJ5rtUIgoScyh7D/cmXsdAeVb+XQx8+vdMtEok/1u9oVsB9Guf+/TZveceP8HQ9iqbSu4DuHuOv0c8yu1T5ZcJ98dGSeKKBz3ko0smuULdVsPpIs95z3i1JVJkBbvmI/fRmTwp5cuTfvDM7omXXvgou3c0MTvyfrkXWu9u0vEjGmmPEPeendJdJyF2uts+KhIKZDzozKOqlUz5uyd8rndRLC/vGkCLGQDYOJkS09u/Fz4ZAV2LhlkPXyQYpzmNAgD/vVThlfFvCdBbaYFrKwpo735tradDMK2752lPOescE8k4oW/n9KCj4u8B6gyNZV2jcNxMWz1laDZwMXoZAJydf72fny4AXTK2e7xW64OULlqPE34ld1sLsIWnPDVgZ7y7h5/rXCOWwWUPD7plcKURQc75xzPjyXnt/czSjpXbCqDf+P1P9xzbzet4d84tgI6DwnK33X4rOWsGoOsyqAPJHtjCgy4h7ns5XrKLyYxu+GLDpPvu+JwiHT/zqCNgr8J0rK296+UnL/Rd6mhwPAGATJZOktVdTyLy3jsLdmRxz+7mdcodAH0dOqZbyQB0VJItBUoL/un8rrCiTClHoc7+rUFVS9hUBOaYwoKeiPQCJApa4L3ObwWPjF4rtKCzb9NcUSgogcDup1e6Qui7XqM9ksQhuSNDT1bJTCxjdxH0oLN/u423ZHnH/bSDB93jL1udK72uS0F/tLBWJvd6dsf71Sf7Uq1DZKB7WgD0hz48PPb3X+smiarrpPTL8mdZx7qWAR+0IkJP1t5QFq01tNaeGWKQX1vK/kx3TeYhsGQy+50CdBVFNJN/o+KekYnYboZ3WnJ5S4BuXQ2KzvEW3zPvqVte9bqfGpPGsdD3SP5rHrwlQGeyWX7L7KW114clhqPnSSWSw+8R7+4as8hzBsB1gxLaDtd5pozuCMoZ75Mylq43bR7wluvfK6M2Ipcy4FzPU9qqm/9IEte1fxZUWgHOLej9GVj18//VTZ0nUnCQiWuQ2sLgl5AYwZQoaJaFfy3lHpUTz6NQaal2saUMZehghVKupcBFY2AWbZmf6UXPMFzVsablFh70x953z61nmoIJo7KOnqJzKAksu7unYLKs72XaKW87exN9GIY9POgZAECVo42uJnigPRrrxA+NRHFMERWQOUsglzS+PeUB+pgU7vof8izOhd417Fro4dxFN22G5IlFLbciXpj5ngHxWaU/0x8rU8LfSziqZWjVdSJ5StvXz22S5zNRL0BZKTLb0ifk960AuoS4r/IiRu8iRXJovIPOwDt7mo2Fv68xNMbnbvuGFw+Xvu9312h+akMnicvuubV0u56JsDPcnDzOshieCIfkHZ56sMbKnkFee8Pxepu04aEwCyxXxRDuEulwJ/mux8n6yeqPY93jDnrPDu6vcwD0ftp11dQe9DWsfUwgdw2MVPK8nfX8g/KQ7TcDvBjoFmUjIyxaPPhUSBFlvVkoRIqBo8QifWc000x/ZMTZvaTXdAuA7mVx95QBmW92D61RDp9eK23q3yywbmUkRlDugnTnTfQ9ALqmX3SOlxi9TvQfAjiYAS5zxuueSYJyfZ6ivUONp8pz/JQH6J9/cHjsp182DFduUiKkNUPhGeXSkCn1Z6UYeryaha9biaRme9rJ6l+7X+Apj/YP49143rQsY/KQedUt/oltSTlLhrJ2tgTo0p/1tGWGnnuXie6mV5qru+o944sMj+X7Hh50dAxk/t0z36gOnmvNhzExLruy0nymvTD1eogdsK6/IUAv31hIu0Zb+rsGyVlDwnTIxz8wHJ6FyS9Be+O4jhD3aBev+33Jkq07kmdIa60AnXkZLau5CGqtIGgFLFQEYA2wHy34Mbw+qwxEQsnqg7WfAfrRtvISEDEBEbWHtMfy2fkzJav+xpLH1YUnIU1jKGpVgOF7GccWIe5/+nP3uAo/A2N6j8q8oysVmXVYWsbL8J7ykE+aqXquxQLm6l30LZPEZfcfA23svGXOIDP0sXMh/CsEjI0Liwrn7GxhOKKOxmEg7sYw3P4t3z3c+T0faBzFxSpeEgc+8aGbiQNnBhjtNR/5TeEdM1kAieNuNqIUWvG2EP22fjKMNHUc0ichlxXGblHWyzNSh9zzhFPHMnqGbmZg966D6G+Z8xiF18t0tgToaNBs4p0d9F5aJQPOJznVCNIt/mv9vpUHfXjkoVnUBzPSZnj7Ulq31I+useDTii1tm2VbAfMkXBRPFDBevukweB3yrvUzBtgt7zfyS30n6eR+ktIRM55zdASV6j++VgakVVbnad/IAdB3XuLsHfRoWAhYtdKpPRJreb8sJRf7tYB6RpkwFS3H6xbRiX2PBI/locFQK8+qmxkXE8r4GwUrIDSogq2VZjWY2v54L30PDzoqm3VYGIo1ji8LCjO0bS0Tec5Le9FdSuZBrzI5GTpdx3zb9iHumX1X5f4oHZCHWOcnOlfe+ZZ9wRTF1rVcWt4659LuU96DPk6kJIl7/Ffup5FQptxIagzTOo59TfpgIuoq4yH31jgTVeF56xbvH3VusC3T+NT4XnJkPNf9Zs7UlgAdadDED5cuRkd9fDN90nFUKHzlVyM4x/+6e5M8bSm8lsnFrQC6vIOO+0TLZ0tOdJC0qQo7/71h7pslh/SAu8h7fENdPOuMGo3nn76HXjcSCXuX3/R/60I3vLBxeNCb9vBahZPidq3ujnYsgN4anhMp2agIaOafEdiRMq2/9yrmTDBF85qEJYSHW2BCK/7mnBLh7FbdLay2oTGEJSOZLcj4j+B0bwXQW/eDpbRu5UVnoe3W+mJZ7VUvdRDYSzup8PYTzfWmp31LD3qGAzMjUeS5szxALf2hpzFzdl1lOAh/n/FBOCseP77933vqe9CFblcfeNXw5P/xsfpPc42Z0qeVwaQWMaP3mOFdZAAqi5SHtCiUwgLJHsCwedxDrbI4s8d1GeTvPfKYAXR2fqRfz8hWvt3+jS8ZLr/+wdapuOXLO+jsDrrmmxiltOoAGhpjWd31XfO6T0mCuALOrW/YPa6PZajW9fYE6NZ4rf2pHUENpF5c1ALwumF2hqffLHDd6y23ZsTaE5CO3vMxl0WaOMS7fQLOZwRR/1gA1A8PenqFVimYFK2r9HU0MgxDSRLXGzotBMwowxr0IDhfYyFCEEl2VqTkewLNm7vplXAmmvGyVME7gnftLZ/G0uIZTRDdAkY499l8gdnOBFOQyXMLgB6FuGsyoJKJe7ZnXRNk7irCnmHLNhSGdMIdtr0AusdHWtYmq6jh+S801cCB7Y0MT8iuQz3P4sEdgVs930Zmd33+pY9yvp7zitcNt3/HB1u6vbhlH//CcOUddw0lYZzQp/zXNLJZimEwQ6qr6rZ21EQsb5y13tmErh4JGKBmMk2Szum92nMGrP7QkC1tb+VBL8+sSeQRzgPvpId88kynyPOoZ4bUe1e9rNWed9DZPrPm12qEz9BJzp9+bYHV0zqZd2Y3NbRpmY08EQ2adZDjTPBVHQHm6orb7E30yozHutoDj3fOTxZP/aAjFiM+GxhBD4Ce3cnrlIuWa51ejlYmCmiAvoSBRAJflCwU9ExA9zJb5rXWSp5MWivhopSzb6yuVmJkTgzIoTW6yytBnlqKPORL1rBFCWPgfXas9N10EQgBs90CoLMs7hEQ9KI7evdmL8uxEsdJexjmHoW9p8YBhp69k8RFY2Trh8aT8u+a+TspUSIjo7Xf19oPdE7GU2to9Ho63EGfrfmjjwyP/cTdNWlcE99ka62USf3ZuNVyK1JThb73Rs6g4j7JDmWMYU+tLeXh2fNj7fnsmZn6Keds9OYyuadlqx6bZQDd2oOux4BPVpZvFyV5HPOYRx5yC3xnQbnl6JC12hqge4YcNJ5axp1o/2/xPZNQLuzX8nBbzAob9DzumLFdA3DtRdegOxywKsAMpRPDG/9g82BGUSvBHBnPAdBbFml52aQ6tbyjo4WbFCgh7i0ZKCPlARUq5i23flvCcDPgPONZY4p4JvTLA6yW0rJUufeSDkXrtHT/6/myNZ9+0+HvCNDh31sAdMzi3rIHMkCw0HHpOrauBXrPpf7q4ZmjUN/Lg27RITrbmUiYzLqX/r01z/STWcvZuQ1eTmDtocf16RTiPoG5z31i+NLf/bYZQGfnjIJMDJnMLMpYBsHptG/q5rhZ6GQvKT7mRUJZCUBrm2OCOItve4bZJbw+MlZO6zEm5ot4Xaa9jPzfMsRdbwfrSlAps5UHPfP2ecOWnYqiZ917Iz0L2HEc5wxxn/AeuTffZMjrIa5RB8+0l69iaaTqrYUe/4qAO3rOWXn0vGtwrA318nt0N13zXuyPWUgRoGMiuWCtDoC+4mZONHUA9ASR1izS+g56a9+RlT4S+F5/Hpj2lPoWRdsbX9S/10+rV8bL7l51Rx0i27pITnlrjmhpR8v3iRcGmHOdP3hqtwDoJcS90qeE5wVvIVuGGGY4ygK+FZeiNoV3zqX9KNGRpWyGSugOSeKQRsz4I2uovSgne4yBp2ABWviPtQ/YONZa9+lcg2dDA7qnVYi7IlxJGvfEr97PDWCoCI4ROwK46pqA8leraDCtFf1J+58D8Lo/6uZTSrEC6kvWnnndWDjtGiHt2f1o8fEWman7ysh/Odu63lYh7uUOuvU/lt8j5I9Zwi4sZ72Jrj3qvaC7ZWh7AXSmX6BhB2VBCy9vmXO2LALwiaVAxMzi8+x5yrODFZ6GgFiHvq9xZdIaK3rcmVE1yvFRdLq3HVncW5Z8adkDoC+lYGP9nhB3S4H2us4o3aV+lskyr62l6Hvj7VWwWJvWmJhXprffylcBjKN3Rf97iXcls5WQDlMdUWJ1mDELZ1KdbAHQmQe9h/aWwhCtbXY/e7T2ksixEE3WVvRWuqeI7uFB94wnosBbCpqer0Vv9rtVNhqLBhTMG5g5N1YZy7vOomWkjd2yuD/+hWG483lLptdc9+ovfNfwxKc+lAt1B4/RiW6owTk8uWY5m+r5HpXYWt3QULI5RJB/Ry9vbM2/mcyMzlM9HyUZ2W220dMDWJbs1PJ/T4DuedHLmPSd9cgQ2rzBOypoT3mlmUoMJ3/XfQZZ3jNdRbxvL4AuY8V9xH5v0RszNGBlosiYOgbMkq4aanKgIOPKAPJMmbopnLfU5bvmceIx12C5fB/Pv9meBbhPGA48iSljSC7U4UFPEmqlYgdAX4mQ2WbEg+4pjMh8mAUQGbv1bwSxEXONBAZlpuDhYF63JcApa6DQyhzzmFvCJrt2J7xuDYtnZ+dU6XIyFs+6GZn/HgC98v+OsGI9XmaUsDy7rZESEfnZ82tSx3onvXxfEv6+B0A3+Y86y9baMZ7itWdFSni0Z4pi1tDTst9O+CY7Q9rze9sw7Bbi/ugjw9VPvHO4/dXvjrbpet8f/8Lw5N/7puHLj/xBbdOkubyFXgXK2D1TEuF5dPMuOnrXIazWk1stYL3OKeCTmbwj0s56hL/VEpPlJ7JnpI+cLczt4rXBvPPnAug4LzSALuGjW6zNTC6prO7Mm76Gh31vgJ6hWaRnZfl0pq9MGSvsfdL3INGvbtO74rLY854Z/MnBHhmmNj4wPVN4rTBUudo4TRqAuEZ6Gvyj11wbFIhH/QDoPYvaX+cA6P2066qJd9Cr4jHeh5O/Rfh7oFsUFmsQyESZgJffGHhu6TujEDMLfw8Bs+PaWkhY4ZLoeYvuOooS3AJiIhpMdGVhTYroWwP0HqOMB8x0mPu5Qt4thbL8nk12pL3nzJN+ToAu+xH5CztPLORx0g8WhCVb/GTtM82850zZm/jkyKf3BOhffMvdw3O//aeG217xhh522VdnTBp36XFe3Qy/1gA9CpeE73VtIfwTz7gVYqvHk7mj6kVH9BGsvRbb42iIlH/L/NAwdiIz1H1VqywzrpV29rqD7lFqyUsZ7SuwrAaGwLNM79ZvLT2fG6AzeczG78mHlvma+qzxZKbFr1lU467RMV6oub53rsthYrkqjIn3HPU6uiDqRy9ZXBX0+ffQD4C+xm7Ot3EA9DytVimpPehioWMgrpeZWIJfK9yWBbT33huCTFQ0PMIt6VO3iwICwdyayj0LefcSkrSsZcbYgSBK5qYV2KmMozRvBdBb1rR1vrKP9ZwteqxyYJONsERyDLCboe1KOG8B0B974N4p2VY0pZY1sSIWMkY/S9FjxirGU5aEzGPfkyIKmdzZGHe7g/7oI0MB6GVsX/GjvzMMz39ptHSrfb8BSePwjElH9RyOPGZaD6VVFN43eXfV79N6jsnQ9M3G2s7UAZ9SKXNbCSl2wlxP1lgp+ZHXvSlEdgWq4/7GvR2eyRGcI19k64byv5TZA6B7V4eEhCz8PTJorkD+pia8kPcqn67N30xv8aTjOl8UgO4RCPUPXbbHSG/1lfGUR8B80sWi0HPNf6LkcPWQjRUyZZG3lToi/8UTLr817UxjHHps+LcV/YRGhHEcB0BvXZBl5Q+Avox+zbUxxN0Lo8kAOybYs4NiQD3LUFGQeJZW/BYBePSUMGW6CkKHGXpzy84xoiMaWOqYRoXRAuzRmnqKGFOsmGHiBLyy7KDDMGwF0IVuen1aDCQWDTyQttaaRmuO33uTyJV2LLC+BUD/4vvvbZ3aFN5sRS5QgxD00rIuFi9j/EPOf3ZfhQAnQR1p41l//ruHO7/nA4kaC4sogH7bvz4Mz/nBh4fhrhcsbDRf/fon3zU8/otvPM2inmkCFeBR00BHudYDLZ14sjHqqAxRipWCaYHuKCqiNkXyjFj8PQp9LW+Z3wDNKrP/IpDOyK7PhiUTPX4qbe4Z4q7n4QHyloRxLWUz2zdTRj/LxjzqkxxUgF2D9Qxw3wOge7qc3lMIxJl8b+H3GRpbZbxrKpbDa+Iv57iaqL3j9CCPP2pgHmVwJzxwikLSfXje/GmTkrtIBB0eAH3Jrm2vewD0dpotqqGTxE1nA7wAa3ljcaAWUGZgNpoks9RXfkHes8VQxWne4j2BzrJMPqP06DHJ37q7bF/oscEQ9xk/BE8No2UE1HHcs/aN+5lY5qRf8HQ970c/MVx+0SujpU5/f/JTHxh0kjiPtkwZzaxF1riTHnRjQSvzcGnGA+uoQJ47SVx22h5o1ud4Un6C8589s1SH0Z5Zg3dk57Wk3J4A/bG33j0l8nzWC75uuONN/2rJ0JvrXv3IfcOTv/aeWs80yIwZ3WfGEnK9Rgfz1PYsh4/wqXG0td0Ceh35YhlqZMxR0in0vFX+C4q8x7PZNwbUp3NCQDyeIcbPqxwq8gWM0xneqdvXZ7fQ7lwAPdqQUUK5qP5W31n4+kTfMVlc3UPGPfUMOK8y5RtePFz6vt9ddRo33vvNw42HH0q36el6uI9a9mF6ACsU1MY2OdsZHax2vZW3XdrGKCDtRZ82lbqbXvYUOqcEzHtjZdGUcK1oYsoY9j7++wDoK2zGhiYOgN5ArDWKsizuVlIaxkDSTMUZLLOY6uKRBxubRlBuKRaVH5GEYZFyhe1FIbCsfIvhYMk6e8aVJe0ympffmHdz4unW6R4Z9VYAfallPfKgW/st601dcx2wLSvUvaXPi+JB98bMDCUZj3oLHTL9n2PN9wToJcRd/+/O/+gH9k0aNwzDk+/8+po0jvFQukZGSOWJsWesrMPZp/B2wxiTkU2R8bTyTfUO+glvTT7TtEQWR3LQij5aAwAx+X9ugM5ex2AJOrN5PtbiMz3toGe9pw2pcxEAutYnGI9HfQw97Uvm31LXygs00wchYVwmR1DLGKayEVAu3wuo1uW0QVBAe/mu9TipswS5segmDGVCa6rw6h8/nlnr2g+dlZYsc2eXz+xq+A66vkNnhdlFT8NkKaoVLF3HE/oZhcBS3CzwyMaR6Sc7zxOFCzzOrK9s/1Fo1STMNgqjygCjMoaMEeau/3YbD/oWAJ0J/eya9e6b3npW5ndLucQ7ls/7kY8Pl174rb3dn9S79hsPDD0h7pkB4LroNWGRM1uumcXfrHn0ePPL+d/tmbUxxF0ryOXv5/yX+yeNu/Izdw/X//BWVne2tuZ+EQ97eSZMX03SmeBBD6VXIFV0RgXZKooiulPOxpapw8Lcpa2tDOiafzM+3nuGPDm9xx10vQaZ++ilvBUCL23t/Qyb9T563Y9jKHvmDvpTyYM+A7jqmonmS2GsBccAACAASURBVIzvox6ypTGV6c5aF0MnWPrsZr3nGWE5I+T4DyuBmwB4CY2Xcei76tk+Lc85GlJZsjhM5nkA9CzVVyl3APRVyJhvRAN0BOe6lYxXvUfBjJhmr/CnChABxlgOw6csJu7N1VJiULGdFKuRKbYo9BYwxyRFVuK/Jd4WFJBWBIEoraz8RFcRsNeHYUuA7gE3VK7ZnvQiA6Q8ttMEGvJH1ixpKZnMGyTKptetAPWnggcdlTNcQ71GOOeedTrxvo7gbC2v/QkP0ddUxItRwpJvDMNeSeJu/NEjw2M/djNJHM7zK/7Gukac8Dh8/sHhsZ9+2TBcmRv/UjzU86iPHWs9GJ03Woc96c/IQJyVYxj6Wvet8rJN+xySB0b30EN6QoHKL6/bd9eZnHTlP7m/yvaRtHtuD7pFr4xRs5XWPeU1MGcgfdonEN5ugfaZrgdJ5SY95dowXP7G84e4e/TC84jG+ew57FkTfTaZo0vOMtPRUB870c+2AuYyaLyTjsnhxIPOksdVZaIh9H4iVOINdCO0fWriAOhLtmpz3QOgN5NsWYXWd9A9C352JJ7lnH3zPF9MKcgYChhgQ6W+18LqKe8aSEyCTwH0LA2tctHdxlJPM/+MJbd1TBb9rbWtdL60TZK4P/25e+rwPWVwyfxwj1jhdZXuZ7qn7AF0lpEY76NfZIDunf/om7fu2bWy+pgpvArR9fCUyBh4+7fskyROALqem4zt8teeJ2nclf/5jSdvo6eUcqZpBM/71LUb755XnqIVTUWUyOCTSR6ny+Df1r7FMPm1QDuTZ8JTtQxje5udo4z839uD7vECLwJJ6p0jKRwbcwtYrzLp2s1WWBg886pfxBB31Kms888i6Vplf095lhTSc3jV9YAkkbN+GViPQthZ9svMZMQYjAC91NVvnVtZ3lliOeZBr5vRSAzHMrsfd9Azq7d6mQOgr05Sv0G5g+4lpWGCf4kHthVUo4LQSyIE5QKakMGjcn3iJQFlrEfpZkqu10/LnCOQbmUVtYSCpaBZY8qAFqG9nvMWd9ALQPfGkwVinhKAdNh6v7TshSpH4XpDUSbld1EsvaeDNgfomeywrZNW5XE9vDVnhpxM18zgx/qtyteKUq6c2b3eQS8A/Utvu5kkju35mjTu+39vGO58XoZkq5SRpHGeYWziNaL0MvobazLznisleNIZMUGmA/IpWDXeUz6hL8nqPvEk8LCvYUTX+xSjJVB2MV7eIhukL72G5wLoLArJS8Qp89w7tN07PBmQHr2TbrV/EQA6ynPPgKn3llVuTX7cwtRY0sc6XiPnRNXbWEK2TKdZD7wuJ3qDyGcLpFcGAHeCrP5afz9hhOqH4vB4+3EHPbP8a5VZUXVZa0hP73YiD7owjHoGVXbHluRjEQPNCvO9GKnuJwpZLd9ZFluttLjC1Njx6IVxQUVSyUPmr9c066XpPQ0RSCrz2yPEnY1f09b6G+tlgD3uo0mhviBcDsM1mReo/Lb7HfROwM4Meewc4TpEHs9oz0cebl1/aV967NLWXkniMMSd0eUsSePe/eeGq5/9rWiZ5t/1fXPjrmM946KkisdGwvvnemL9Vz3WLHweomd6gXoP8A5DZ9uoZpb2vOdyPjxvOjZ8LoDeQ46LmCjOAulWaDz+btFhS4AeydSsHol7MfKc98j/nn3i6oEkRxA6zer5zwLt1QcImdrRC85yHAlflbIMxFcl1BgszpXoTUcW97UX2m/vgqiu+076nL39y++8eTwY+GZedQF5MuYlnnQ9b+2Bwt8tj43L8Izs7FpBtpT3JYYAZt2t9FV3VCsNIcGQlJFvE30hLDoSYjPawfNqePdJynrhVK3rGwlR5qGU37YC6Jr+SGe9Lt66R/PSa+rt6yV7q5VPeImPGDiX9vXzbOXvXT3oDeA8AsZ41r3IBkbbzJpPZ4jcy46MUq3rycZTfrsIIe6ab+2eNO7xLwxX3nFXTRqn18OkrwbR8PJEraOUTxaNSfMoKc2F8ZSIb2fD3kVWW+HrXnSUV7eFz5fn2kp4qwd8soZOPD/y74sA0K3QdravLpIHfSZ/1B106zxobzqWwTvrWwJ0jx9a5yfi0ahXeuAdda9W/pwpz/JJ1H5JhEx0xjP9uTywN+y9NKq96xIGb3UWXB2aeG5lUNCI53EvdDvuoC/aBq2VD4DeSrGF5dkzayjIrfsyUm4Ssh2Zwi3AVts2QinlWwvYYYyatY8KQ+SVixSvaHksL6sIC6v9TL9eIrmMx7xFaWPztISn5W3ZAqDLHXSmCCLtW/ZTtE+Y8cfzMkX7ZI3vXhI5r/3NADoD4w0APUMTDySj0UyvKfKYVsChzy+2q9vOnGM9zxMD4I4h7gNkcWdzlN+e+9fPkzTu0uM3qcUiFWbAWd+fBMBeGxh/mz6JB31cDH0tUtanFlFtzf4dbNZoH1jec082Z85HaxkGzi3eygxk2J8l/y96kjiZx7nfRfc85fUcjHfMpzUaAXvGY36OO+jhOSCOl9Y9LDyqp95edZqjZZZ41jHqZ5YFk4Bm4Z2lnn4zXYC6yPDSjnU3fdqQQaI4Btjrxr7Jow+AvteOvNnPAdD3pfeQCXGvC0PCqC0LH/Mie2DYmrIG1Qwoa0XXI1vp2wpDZ/Us4MaEhydQ5BujB1MiMwpNyxjwGoKeK0tcUsek3uNdkmQIDSIWnfW+2AKgf/Hn77kVvTC+2cnWF/dnBNbL9xL+Xf7r7c0ZzYG7RcrI2qwgul/J7lqWMewK0FeeNAKANQxu0kZ2/SIvTs+UJ4/LmT3oJu9+7jB8xY8+PAx3vaBnel11yvN9T3zo3hNwHq4TuMlr+cDYPB1lebKt/BfD3CFySoP3yQDgRDl5uUQm/RbG6b3E0kXUZCW9xzUfmfFHML55XtGLCtAtcnjPr53Lu87umU/7BjzrmCTOyva+lQf9+u8/tGpujmjbMt1yDT6dPbNWzicrAkbr4G4CuWjivd8jAwDeV58pPiOgRuO75VnX/LgqpTBoZVA47qD3LmhfvQOg99Gtu1YGoLOkFZmnImRQvZ5Yy7o+84SQUPEWYnjgOQJyCOJQ4fAUQ8+IgV6/iY6NWcAzYZPC+JFmLUAd5zIpAU7YJ65hqbNVkjicmwXSmLe10sfgSp6Cid5Z7NPz8LXs32zZKNGRpWDuEuLOJmF40tcy/uk9ytYqS9eecpHx52S/Bjkm9rqDzjzocj6YAfaOu/dPGnfto28dnvjV+2cgHaMfZroj86SLUgjnnl2JpOHu0+YarzZVInGvvrV/rFBYa29gee/fkfHBHBO5xuGV7ZVbpd5FCHGPznZk8Cz1zwXO65YzwtvxdwHnddvD2+noRd8KoN94+KGzvHLiAfVo/Xu/M+eIl9WdAXJLp+7VtVNz0U+sac+5rszeRfcyuWc61owXjKkHQM8QcL0yB0Bfj5aplhhAj4CdFR4dMY2IeVhAb6ZQNbxlniEAU5Y9bz8D7aiIhB4bGFgWGGbb7Vm/aG0ytMyUYR7NqhhslCRu9syaRAcorZpZzVGhRy+5N0+2hz0vLu5toYVlpMnQeGkZvJ++mQddBrpyWHtm/h5IZsajTJtYBvdWVZpXlnDlrO+Zxb28g97yvzv/4uuG27/jgy1VFpe9+sCrhid++2NTOykDm/KE14qoCGpwWg/pGDmDvBxzKY3t0HB35UGqUV4FUFmKL0SxsRBYNKqi0r80HJ4ZzK09z/gYM0pahsunAkDXc7fA+uLN3NGAl8W9bm3yNrp0oz3pUnY2z2/Y5h304kHX/JHtlQwpPGcB0+sYj8ZxrM2zrXlk7qe3Jn3s0ussbzkD6Hg9iEUe6SzwEgav+esY2Yg8l9IJwPoR4p45FeuVWVl9WW9gT9eWWjzoJ8KYvNXIGEIXk3AIzjygungEZBkg9oCVMGzXE5PcuZ4RwhoDm9vSKAImDKJ7Ty3r6M0FQ/mFvnt50CdlxFmzlmgIvT88PsGMAXvzFe3R0U+slXHo5HD635sBdA1GmOWdEWdFMG95T6y11wpej9K21frv5UGPsrhbYOu53/5Tw22veMN+W31MGnfjj252iesm/6bXnvA+Zm1gHLrDL5iTR0+4rj0A8pThgFAN+XSUzLWFb7csUiTLNO2tsyZlkBZPNYDO+Kem5Tk96WxNEYhXGVae8FJedKxXvOmXv3EbgI4e9EiHa9mnVtmMkXaNfnrb8M6516Z73hFQ9w6ubvjxDjoYM2uTOuS9bq7x//p+uh6LjmSKxqSY7eFBj4i17vckzFm302dyaxmAThm88fbq1rS0lFxPee5h9pa3QDP1bLueIoP0QqFhgVlT6BjhsJFXvfJQ463d3pBIum+cJC9b3kGXsbD9Y9G414qfOQOWkSm7p7LlMmOJymz6zJoG3PqdVRzUCsAczyGecQQReghL6J0x/kVr4H3fC6BbIe6eAixn6Cv+xs5J4x59ZHjsJ+4erKRxzNh6orBboZVqwkzfnWF8pbx6Rj/0oHt3WT1eXoaG99Bb7qX3gnnLOBMasoxz/VQC6DriqBg95X/4+x4gPRvWTmWz4VnXIfBbhrjXvTsaw5gehI6VXp7p7VXsfwnfbx0fRqZ659b8VvSrck2hI2Fz63gngC6AHD3hOkGcdd/ckuvIe3XbdaPcHO0B0JtXbVGFA6AvIl97ZcniHoXWoeCfAI8CdWjJRyYRedctIBsBXAvstFNjnvALQZ0WIFTAJXdv5HmwPD4ooJjwQM96JmmJnotes6UhkZWBGoCcGUC2AOiYxT27J0LFkjQU7VPcT5ZRiSkJQsvs+DPlLMWyyttRwG/2DvrP36s02dESLxZ5EfiZSSTLWEqZXhM8O1bTnuEmAuPWmejZbzK+cwF0xs8tA9ilMySNu/G5TwxXfubbTA/6bE9Asjb3uR/whtc1HRcDXy46oYcqvIZRmSn1Xvi7yPEoWip5rNxijMd7Mkyvxx4AfQvwxZ5mO+c76VG4Oy4g3kev23X0rFe2vHGI+0wXSepTLXs1C86zsqClb9SzPJ2b6peRU6wXnFsh7ZNwVMztZMOQLOxSRhsJtPFdg3UN0K1xOOM7AHrvDuyrt8GR7BvIM6WW9qCzu+URE7Huo6Mi4NGTMc0lIJb1tVQYMyOAVrBE8e7dN+i98zznDCAs9fZaSt3Eo0m24IyVNgtaSz+7AnR5pkNxHE9h7l3XE3nWkCxq6Z6NxsxC2sUDtAtA14C8an8A1L3MsM7kPKNQ5UuQ2StTHgG01OldI+wTz3+0dvr7XgBdQtyjsVlK8LmSxj3+K/fXIes1tNbt5HdLI9FInIXFE+Mk4/EnhhnwNEWedC1nvVD3Xs94y1pPsmKkh2do1HRm+2UPgB7NzftuPVlp1WFXi5b07+pTzh3zTD0v/H0vgI7nopfPsvkyXQ7lglVmqzXTepYXAXOij0Xg2l1wkiF96mD8g2XB1G1i/xLKXsqwiLgTC6bK91GZtAP4ydgOgL71jpy3fwD0femdfmYNhxV5ZnW4tFYOtlAUIhCY9U55hgL0hGhlBBV+rQy2AGerfxEezDu1ZLtEyp9OOoQCJAPOXdlAPOubAPT33lOHUQW8EfaFnp7IGOOBKU+RiEBYtFfWVFIy+0aUys3uoGshXv6OAHlnmHvEH/As6/3A6NS7DhYox/OdWRtd5iIAdEZjxjPPkjTuF75reOJTH6Jktc7k7CyOSuO07lpLYUB97KkWQ4PcjfEqugKx3n7rkbO9kU+YZK51H7LyODfK464Pw43xuUppY2+A3numW2ikjZ4Y7i75QFraW1rW865b37a6gy5J4vScmN62xTq1yP+sLtmyNr1XVjIRqrNxLAHzJwDAAfcj35tybgiPLP1jqLq0mwl1J0Q9AHrLTlte9gDoy2nY1EJ0Bx2ZB95T1p1ZIez1vDp3YrIKNFOkRbmtfZBnYDyvCSuPAgI92RkQvZYQsYAiUypZSFZ2HExAYKi7FykhNGs1vuC6bwLQf+6eWXIm63B4AGO2xyEDvEXjaE97YG2ip3Efr+mALyxcFMmv/KFPDJdf9MqFLd2qXt6r/qIOcS+frCRxKLgdkB7R/ETHcPIhaH7i8ZbsGcP2GJ9himKG6HsC9C++5e7m+424Ls/5z98yXH7V2zNTW6fM418Ynvx73zR8+ZE/mLzoVhSSaUQrAFJFX0wGP3VGtbPJcgTV9keQruWZTiDXOukMiNc8WuSxx69beTk7WyibsYycHSaHtwTokSG0lf6Z8uhBlzp73EuPxsfAuPX02t4AnUVheDpdNNfW7wjIt4qy8+6fe2Ne6igJ6RGFnWMyuImpqaRwIt+xs06Du/ayH1ncwxVctcAB0FclZ9yYAPRI0YyUABH6VSjDUzEZcGeNdInSzQCup0gg44+UDlG6RRFpsa5687LAm+WpZ+A8XvnTEhZQxwgIvdY9/bA6Zc5bZHH/4s/fcxLSrPuvtB6tuszbYyrsTkIbaV8roLpPFPJM6HvnMTqr2TXJhmluliSOPSmF99C9xHHZiapyej3Z+dVnadI1lOHP6pKtiXXGcQwWn8HfrXXfE6BHz6xl+HUp89y/ft6kcZpnI189OfPmBfPTDO9Mn9WedATuJxGiDXvNMp5P+xYShlrKfC8Yv1QMDUpj8/Z7SGNIFnn7N71kuPz6BztOuF3l2s++dLj2uU+v2qbXmMVf0ZN+Du85lcHGu+mVT4730LcKcS9Z3K0zGelxnjyM+JFlmI8MA7ttIqejjLMszOgehbBPzCTwmNdNMhbGNplMF2Av3nVMFivfLYZ6JIk7yxY8APrOZI886DMwY2QIF8CGzMD6d69CIAp1C1Bd4ln2liISGqzuGsDKA++RgSDTP95Ft+5DeUmGetd3Mw86WQwB5tM8iKDyLPUWICvKVrQOnlLAjERRe2uzDFQsNwHolgddJmMlmNGT7bXAG4AdPXkMzGfOUM96RAY7r829ALqZxd3I0GsZPOvvzxmGr/jRh4fhrhf0kKurTkka96W/+221LjPGYaP0/GuFcfy7tgVXKWdyE99GR1wfaD2ZPed54BiQr2Co8Consi36PunuCNTh30xuR4bPZ71oO4CeoSfuhZY6GcMnJpMr/V0EoB69kb4VQGch7nhO13JEeHrk7NxChNXectjVPwPjW5SQefJCs056QuExn4y2RAp4x2dVnetB5tzBwnmEuHeJwu5KB0DvJl1fxRaAfqLABE96sTBpaaP3npzHQCeFQe2iJUydgXBmHGAKX1WAVg5RZp43FBpakbCUCtfiDJlCZ/Qm35aGWGkabwLQyx104Cq4rp7XFPcU0k57ycvfEf319wwo8/ZQi9LYwx3E07NLiDsOEAF65p30hYDdAuh6aNH6WmUZ37IMNa28Yy+ALkniZsqfAueRt0r4pMzv8tcOw3N++NFhuPN5Pduzq871T75rePwX3zirizKC/lvxPuF5OuRdQHrmzXTRVysdJHkdvLVexnDb5WG4Xp5MQg/+OPrs+bcAOsriidfBc5uthO7ha0jzLUPcp3nDdaXWeXrlsyBdt3ERAHrdm+BJ1//eO8Sd8cIMD87wIk+XzDpCLH1gjb3kGda8s8pyPqGjJZWMrXcSVvLXwseEl7VExjED8NjOEeLeu0h99Q6A3ke37loeQM+EtWc7zoRPV2Z8/aZiYgFhrz/mFbEYrRbSWcsoA3bI5LFdBH84RhFA5fcWocLmpWmWnRPSU4dNWVcVLO+55XHRY/W8MucA6JaQtowhWaU4s08nIUvuQrP+q/K0I4c8K0Avk90gaVz2jFlgnRlM2J7IlIuUQOSB1trvDdA1sLMMdHr/erzqLEnjPnLf8OSvvWcypum1ioyqFTgXACuySoD7SBQrZH12dnWiuBEkanwuoD0aCyrpGVnMIqS8aCjW5hrGdU9uFvpefuF2HnQN+jQPztBvrTIX4e45m4uAcete+t4edDk3lj6YMaqe6DjB06/6rKJOlTEOrLVH6PoQQ6HozXXcyrBt6lonTMoIX+/xpLdMXnvDNXAv1ykkmVzQ3uFBbyH48rI7qp/LB/t0aOFffPtNm38FiE4IuzVXrw67IxOFwffQNFK6UVns6YMxbQ/EacHCQDmOgSn5TPgwpd3yAFHlqmQzT9xzFGbvhbhjlvdWRQ/HtwVA/5P/4Z5boFaMIML8g9DcaX6KZnof6PG3APfIkIRArKXt3r1d6llen91D3KP30DFUbsmkoW7GMNPqNYnWD8+5DMk6p9jeXgC9hLj/6d+8uw4vEzkT8WWZ5+5J44ZhePKdX0+TxuH5LnOQayszumMIZ9WSlYdIJkd+w6onRYgWNPXN2gsi2Rgv19uerWU2vD179PBcMZmsDRJbeNCvPvCq4fpDHzsZsmVg28sYes530r31Y570cwB0d4yQGHiNNdN8y+Jha/STPTvu/AGQI29mxrS1z3Y4D+Fn5b8iuzEqCK8OzRiUff/9AOgh9VctcAD0VckZN7YkxD1qXQM2zTj2SjpmebG0AhzNYcl3yzBgWWEzIF0UyIxFecnYPaUODS8Rw4++yzi3AOh/KlncLYavOE4VxsRya3kDtZCOQBiuRaQEZEB6a5/Z/XC2O+gyQB3+JmHrC8PXs3PXvIFFv1QcpjN3j8ab1valvPTheYIiT/reAB0B3SzqyTB6RUr2OZLGXfmZu4frf3hrZMzTPxu3UiKnsweKpv7nVHekyczgojK54+8SBkrlQYcRfcb6nLurWpm3eHaWl2fOA/JAfSa2uINe2//t9w9P/sPvHW788b7RSBE9LiJIZ170PUPcM7qO8OMtATOTxSgnZKzROi/9nnWIaedJxphq8blF46XMULWIhnh8BqMuLryNDgM6APqiFWqufAD0ZpItq1A86JagjFpmQA3rYPKaeubG5DRrCPuslybrNW4BPZG3zWqrtQ8LjGfBRHbu0XpP/SklD40wVVBB4qHsOm8C0OUOOtzxzM5VKwlsvfUasDY9o0vLGKyyWyom0udXvXmbZ9amO5fWUy1lAF6Y+w6gnRln8DwxQyBT4KL1ZrzMM9TI3toLoMsddM3Dozllv1967v5J44bPPzg89tMvG4Yrp9eLLJ4pv2PU0uxOp560RN+o3yYPunKlhzy+MqKbjdS+1b+zNDZ5CAHt7B4rq4+Z3L2xRN7IrT3o09gefWS4+ol3Dtc++Z5drwxF64QgfYs76d7b59H4yveLBNC1bJa/M3NoLRMZ03XfLbpd6zjo+TPO7iR/nHwSYSK5VQaovN9Flte7QcAMdXi7vqee6P8A6AkirVjkAOgrEjPTlAD0TFks490rr0wrwTyqwjF6zFhIfM+4ojqeZ3sNRu9ZXPXYrHFYZSamS7KLosLIvH/o+cvM1bqmoNfXM8JEa6G/bwLQiwe9brJblthKG2VEmAQwWmtZOGkypO5EgXcIkVVc2Xq19NOyFrrsVgA9PR4E6dqrLo042agz/bQa+nAt1lTMPM+i9KvX/Y6/8N3Dnd/zgcw0F5WZALokQ3TuO4ry59EVDV7nTBrHoiIsnjoj4giyp3nq99IVAJ+c74rHVL45gm1973wmPxQPWrrHML+IFdouvF3mmTWwLtpcKrN+aWczD7oeZAHqv/zfTGHvnqFt6dxa6uMzbKzuFuCd9aPvpJfvFy3EPaPDRLTP8H5tsEvxhajThd8zOZ2sZHHUox7dN2ffW+uwu++im9XNpULgk3L9AOgLN1Jj9QOgNxJsaXEd4q6t+Gt45lhCGi38rWQzvUlokNF6ls9M1ECrQsSYeOU/5A5zKZt5kosKTQOgo/KOfes1bZ2bjMNbU4yMaFXstgDo9Q46vrmpiFrHOFpt6/pBiLu1pzzjSqToRbRn64Rt6jZ6DC8tfGNtgP7kpz4wXHlgNJx4A9GZ27P3zpVXPaN46e7x/GrlL/JwsrPHpobrluWzzKN7Tg+6nhvmqcjsLWtt7nz5fzzc/lc/mmlitTJXP3Lf8MQ/vulN9Qyb5hrD/cmJ72kDn852D8+sTZ/I5XRtM2RgxOI1kXFc83PMJaJldJUhwXNsPQvBZLPmqbsAdBn4GPY+PDqfScSne+Y94Y7bbsp//B97fm1JP2vXvege9B7+ys69RTfkw2yPbLlvsuvJrpdG53imv5VEbdrTne14JlDHf2A74iXHq2zs96DfA6D3LEx/nQOg99OuqyZ60PdiLta9mGxoXWayEePNgPRMP6i4oZI3KUPBu5oWs69ZgwmzZONHIwsTWEypY31HERJIGytJXCQYpJ3NADpyFVSEZQD6rqhcw9B0Dzzqmh4RjVvAo6UUMDCR3a8t5dYG6Nd+44Hhi/gOemZA1vMtpW6U8T3TvirD1sdaM89Yg93iOcvsA8vQKP3uHeKeAXT4Eoc3T/x2lqRx7/5zw5f/2W/V5coYasSoN3tWDa7RnPA9AtJ1uDvl3ZPwyG/gDDjHqCcv3DXLv/Mj5DTW9XcF6GPH1z761uHaP7p/9lRmy5x6yrLEnBf1jfQyv70B+omOoa55yFkt/83qrRl+a+lrbCxoHF/DCdKzjyotSMI4+V0bUfG3EiVxEnauedlSoM4mJLJc62K6z/K7OEu0/gZRjgdA790tffUOgN5Ht+5aOou7MDrN+HobtpJZsDvLE0M07sv03FlHpZkpPx6Dtxh+BIoz9EIFkHnHdDuR8PGAgwZxWW+d9G3SAJ76wIgH9u9MopKtAPpsPxMvldztnOgIni8JRdXKu14fzxvkKQ8tygL2rfe39S2zFzNl1gbo2oMuXiTz2SHmRcffFoa3W2vpKWp4liIPe8bzYu0vtka6vb0BOo4nHUrZkEDuK1//S8Pw4tdktuc6ZR7/wnDlHXdNSeM8Pn/CR63QzYmRjn8o7aZWUQkGJ92UXKGp5ermuNnOCV82PPURYSyQbsnbNY3n0Z6+9PyvG+5407+KprD+9xL2/g//1nDttz50lvvpmg9KGLv2tJ/7ebZzA3RvwSM53LtZsvqVlhct+lvvuLL1Fl0dFZ7VYBCeFQAAIABJREFUCtK98Hfrm5brldGNPA9f3dF89O3Ty+pZchzlFlDgAOgLiNdTVULcrVC5njZdJgoJxjzrvPWt1aLPPCK9zDQDqixBgWC5JTwq6pcplN46RKB/ok9DHgEW/p4B5tLXFgC9ZnGXME3hLlroEI6TUUQtr2bVozu5GK4xgnBrPS3wl13j6IyvDdCLB/1P3ntvfdaN/g+zu2Imd7yDviJA1+sXRa1oHuJFTLSsQykrETORMVD2x54A/YtvufnM2kQnAY0Lw6BP9v6Zk8bpfYnGXvnmysyAx0ztG6HvMz6i300fK2Lfdd9cHq/oFEAvf0eHW+WKQUWeXVmq4yKG9N5radYZuvTVw3DH32xFBYnJZos89OHhyV9+7YBh79nqS8ohX9zrvjkbMyaVOydAj4Ayyt4tdVpP/rNx9OoELfvIun7IzmyoW3sAe8YcG0PhtWyXPnT0m4S5lz6sJLDye+Fz9x8AvWWPLC3bqdou7faZW59lcV/idUVKZsOkIyCHDKUVpAvTjJRu5t3O7o5IgFgALNv+knJsbGsJDU+xmxSwRGb3TQB6yeIuXidRLEUIYFK4gMAnhh7wCDJDEIJnqws5c9Y6zbxto97K2sZya6zxLu+gW4Sx3kRnwlvfaZP2Vsj0jgDNi8bRvFODD/k7y1stBZDxkHMA9IxXJsujLb55jqRxxXj0+Afvne1GdoaosVXlupjOoaXoSjK5sSehlet4UtpRi9GnRW5kEsm1tJctq2ksc3v233l0GO58XraJTcpd/+S7hqv/5I0UqG+1BjiRi3Qv/RwA3XNOMJm7FUC2+kI+j/Jhk425oFF2P103V3nRGnfQrTEyJqeBOYsIQjk+/vsIcV+wETqqHgC9g2hLqugQdwSvrcp9BMat7zh+L6R9qaVeM1PmhUDmfjI28u4xU6Yt76fljdEKfDSG7HpbwCICHFH71h1Hb30z67YZQB+Tv1XBJBmo0ZvOJo0huXDHFPcSAubIgr80ggKV2mjf9CqUW3jQu+6gn2iu4w9aeFt/Q11P6Yv2P373jDAWIJe9wfJLMGONp4juDdDZ+Z/4l3qR40TpAyNdZNAs9c+RNK7cRX7iV2/eRfbWWp/v1Fm/7WaU+tTuyIMyzipTxqyU5T26khatZebMTHu48OBA0ytln/2d7xuGf3duLMn0s3qZMez9+m9/KH3XOTsGdgdd6p4LmHtPsZ0DoEe0ZEbLPUFypn+Uvb2yOKJF5ntL/olMe1MZC3i33GfXXnXL4F4VnZv/PwB60wotLnwA9MUkbGtAZ3GflCwCQsu3DFOJQDobHWMYE/hJhK96nhoLKDPFi40tM2c6J7gvGHnuK89h4dawFhkPqeV9kz4iL1405ygJkafAe7tzC4Bes7ir5HymgUQLF/lbA/vgWOHaeTSOlPlp7wd7iCkG2XPawiW28KC7Ie4tg9NlrefYettL1GPA2TrH+vxlz2JiCMOez6yVEHeLX0+0gBwVmTnoPY/A91xJ465+9rcmMM14SMtZq/U1Icj76Ppz3UO6AvCCWnYE55pfW0A7WoPIq1a7k8SZiesM2egJb1znSBTn0unRR4Yn//u7zxr2fo5wdw3Yzw3QmVEvw4MjnSY6H9H3SOfC+luNB3mznFuqowY5n6I50+8ZayNWZGHvrEzhd+X/Ss5f+ttHiHvXOnVWOgB6J+F6q4kHHZXHE2WhowOWEM5U7hSzyCoCGSXAAmfWdJgXlCncETk8jxcDaBFoixh65BW3+kQvbMZIUPcK3E3Xv1kh7ygs8FrDFgD9T997z+zppJP9oMC4VnoZYIjWPKrjeVq9tsvaWZn82bllaxrtL6//LT3oLElcmDiOCe/yG7ubzqzwWJ+EwVve3dY9YHlXLINOpn00Ou4N0GdnXUvsDaX3c777/cPlb/mrGfKsU2ZMGnfjj242pw1uTDbi+TL5NYS208Hq1yQkQZx+mg3Burqj7sqJIEmf50Vn99GRf2fkcevi3Hnfrw3D3f9Ba7Vty6tn2SK5vMZAxJOu/yvt7g3Y9wLoN66NYdYGAVuM00vWqEcOeEYEkddr7IueNqwza+XdWXym8eUVDeAzwFyHvk+b/tab6QdA79kF/XU2FPH9g3o61ywedPTKWgpID1D1aBd527176dk76ajMyngixTkDaK22ot+RJjjGHuVd1tCalwgG9ORnrM8y3qkPMKbM9gskAazKLXhcrHD3LQC69qBPhgOLy1hgPXFXHenI/q0VfetcWMqE1z62ix7IjBHGO6d7APTSv5XBuClzsXVnXU+w41565CFh50rWhfEDy3DYw2P3BugzA5xcGQFvzHSnGqJXhE6R4ney38+RNO7RR4bHfuLuYbhy61kwzUfRKIp8cjrLmt8oek1ZivHOZe1kfiJn/4RvnvEtAid455zxAS2HPUW+DptEvGUN7iijCn1rsri/9vAw3PWCi6WGlbD3T7xzuP6/v2f1cXlh79KZB9pXH5BqcC+AvmQOnj6F5yE6H9lxWEbxrMMj28+SclZou5cUN+LTdTw9XnOrHksQW5WDcebiRR9/O0Lcl+yI9roHQG+n2aIamTvoS7xvlsAXkCZCHUFbi1DPECCyamolWre39tx12wwci5KSmVOmjGVpLnUzc0PjTVWaiPfcGwsqgZYVd2uAfkJbCWEXroPcR0JIr48ZkrVwcDhVBnytqRggOMQ9ptda0yA7hi0AeglxrzI2cYWF7i32Jrq3CTETfObwGGU87417DoIrLJFxxmr7XAB9ts8cnpA6/+gpId7ecySNGx768PDY33/t7JoMygr0rp8o5ZrPyB7QRr96KGF1xYuuftZPsdVcGuob05EtI2FGJotcrrxD5RXwlHlv76cUfWhAxn/b11xQkF7G++gjw7X/6dXDtc99OnUFcAHbmaoyT3r5uIc3/SIBdMu77TllkP5ZGdi7bmwsPUbY3v6tetY1RNTLaX12HXDJAK32tMNEQtt1RFxx/Bwh7kso31z3AOjNJFtWQYe4Y0uRN1aXX4PRMUt9ViHIJCEzmZXy8lTFRL1FuwZD9xgyU+4sWuLvMk7dhtVXZKBY6mWNdqEnEOTbV/+tTwyXX/TKqKn09/LetoS4y7pWhVNlQS+Kcd1jGqR7oaAswyjsmboXFSdjgD2aRPY8WUYe3b63n6NxlO9r30GXd9A3ed8XAT8IdH1/bfo7QwQDPHj0ZwApc7Zb135vgM7IdXK+tecc7qQzsKZ/sxTv0u8d3/Ty4Y77frNjxfqrlKRxj//K/TO5EEVYIU8+KU8R9ekYI+fUtMd0CLxcTwfP/YwnkSioE/lCnkStfFSdsQi8twJz5JUypupJ/8sXJGkc20oq7L1/p9k10WNeSp7jObatAPq1zz50M3P4iv+zPOl4FrP81htapF+hPF5xmrWppU4TytPLU43lqkGvEb11kmKk1XfNWdJX9f3woLcSeVn5A6Avo19z7QLQLSHqeYq2sAIyEJcNZW9VBCpTg7t8mnEzz7EQd2uGngF0TEFsFRKh5yeZGNASEK331LcA6CXEHYWjt7Y3pd38GE0AnnAnz4qPnm1rfaJ91bPf8Hxae7v0HbW/tge9APTH3ndrXZgXPe0NYonhhKCel70jzL1VQaNKT1LCWcY4bLOs895Z3E/GAM+LyXedg2RNJe8cSeOu/sJ3DU986kMnS2qBADxX03riNRrdojL+TcCcPOUobU90Jkkw2d6LzjlbV+1Rm/FRZXTR690jhzNKi9D58stfN9z+l//2xQt5HydRjDnX/tH9mSk1lcGw9wxgb+ogWXhLgF5FrwHSW++kW9OJ9NYWeZ4k2VTM4xUZOdzSH8v/FNXHEPgZa2pIEBn1Y35Ha6T+9/gCz5QkTiKM3n4kieumd0fFpPrS0fJRhVLg//krww05zMhAKsM07ruxbxkSZyx9mTJMmaBKiQ5PTgzQA7kI6BPNzYwAmfIWza2+W5WumZJlRA7gGHr7iO43otK+ZYi7CEBr387mmFGiwZNe56piTplxC+nI/t16rjzQH3n5skrBlgCd3Tsv4xKA3u1l///Ze/fg366qTnDf+7v35iYB24BiF/4xpEWssXGEgh4kDklaWgi0DA9b7QYkhJ4pHRt1DFZZzhgIhG7HKYFWEbUtCQFDlzISaGx5KA0BDcMIJcyk7G7EJvZM0yXIJAOG3Pzua2rve9a563zOeu19zvk+4FBF5f6+Zz/X3nut9Vlr7bU1cE4e9dwJlZnJQ2B5zHFvePtR4hXSWud2L7nqB9PJF705yl6ay53/wj2pZHFnhk2tsVKGvYIgXmHCsPbgyHLbJ1+4+aRxh7/8Len0PZ/rR6l5e6v4pRTyHtSCCo0h1H3AP4Qs7+U784xbXnMsq0VBacvWGtWmgSTez/Gn35QOrrlx6++ki3Nnz7Lx71X7AhqW7qVLIL2wtZn4mTS3pQD6uf9wd/D0XywW2Sf8PEg8OCoDo4NDGUD1rN/nHoM3VunKUTRPkNg2hqJbA/BCgsqCwQsWRntriLu32vN+D4qmeTv9am7NCnHnzIWYCNLKs0iikNeE/iDxUNeJdR+m5o66pEhJa67NxQ1XnLCBPK93LWPXlIBaYYZTkrzOUYVD8qRJ67cUQNf2MV/vgYerbHbBsywBdyUcXlo3zzqvGWHy7xmo8jYtA0AEDGrKiqQsLAXQSZHUvOVN2dylu+ZSmHsku/uEcx3hnaRM0zxbDIC5jV0IcTd1MgGIjzytTobxkaK7Q0njcK3pb5QbnEaD8yeEmxeeyZ7Y7NvqGhmwIsFgwnnF1G1seeO0xFOFjwSeY6sZG/LUcjf9qzzsnegXjjiqIbhQdkmAzr3k2r+nDF+TyXguIzqtpj9i1Bwv1yr/J83ZeG0n2u4s0U8a6La85gPiAXDv7qSvIe7RVZyn3ArQ56FjuBXK4o4VNAAglQt3JhS0vOURYGcpAVEFwQPJI+UQ7qjPBYotYKUpgbW01wC/N8dIPxIdJOVOW/NNhLijwERlenQnHYVE93d0b2kCGtdBUgrQKGI9tVajMNQqIHMD9LMffVPiSeLQS47KpgXUQ4qp5FGaEOJewy/4/sr/1ryuNUoi9r9NgO5FO2lh7q3eVU6nbSSNO//pO9OXf+FalR1a/NU8d1bUDummhhFjpOeiV0vRrGj9PGOr5nUrezrwckd/DljCuYhM6enZKeQSADr6jY9IJ17y0Z0Oez//R7ekc1+OzNgvo2V515LH+S3GSxz5W9+eDn74E/EKgZLnf/3b0tx30CMOCTTQE38ODLmpiMb7vbPX1Fmwksa/I172YBd2MctbToZdNLAz3nbkljXEfZZ1CDayAvQgoeYq5nnQuVeHK5iobLQyGS1sTko+o/0WvevoMW3J6yB5z1s9XTVrpo2lRoh4ayIZYXL7Xig2Bx21YE9i/NTekh503McIlnBtBmtM9594IS4kulBeLRPzoBoz7kjr460Zb8srO5cXbW6Azu+ga88FceDNw91D4Zs8dB2TzGQCSonktLDQCUBeOu8WD9LOkuWJzX1sE6BL50bzIiGfVpPFCQnmqB9Uco8/ZvNJ4859+HXpgd++sZ+6Z7BBeVHWk3gKAnOM3NGAtRAFaoJ0R/ioRmbwwHmKu2e49BIEenxZm0am8U7fT4ewd4931+gKVJYD9xCfbOhkKQ86AXTynOf/lr3A7qR799Ct6Wh8VzKoaXzY0x8lOa/xR002E++s1asallKsYulnc/UxaEcC6Hg9rWwEKQtmSitAX2RV1EZXgL5ZeqcIQLfCdkig5v/OIXR4OA2GQUcTxk0hISqA1JYWElwzZ8mC6gkV/I5e1RZGHgGrHljwaOx51kaC62hKSwJ0VPBRQJogCISDmVTRyOAu0awFRE+N2OC0iOyvJQD6A2+6voTt5/95nh/TSy4Jc21z4p1zC3wvAMw5L/GMgZyvemdt0wC99myXuQhh3NLvkXBKVJRP/r2XpmPP+SWPTLN+P/OOH00Pvv/iG9gST6U1VHmLpJzmZyw5+GYvTvTPrFGWdpatvfQBoL0oU+yeev93haz2Ity4jO75CmTt7/c9hLx7YD6yYLgXdj7s/bOfSIe3Pj6leyOzk8tY76QvDdKXAuj5DjoCcALpZRtTRvFApnfPCMpBMOq2LfoU6hZ81SQDAMrfGh2yfdfINT1e7hnk5h7PwMnBn1Yj5kYyvPt7vYM++wqYDa4AfbP0NgE6Wv7z0CSwroFaVEgjU4sqBCNgwZM/wVMwZdyN9+E8RRoZeg2AjlhkJVAvCRFJCYy0j0pky5pF1nUgtBRlfdMh7jhuTtfey0V7h8KtMMxUCjsVnmJDQa2tIQpvvh60Vha9rbOoGZl4e5IFf26ATiHuqEyi15zGpXnZQ/tOShZnvYkuAfOZwToqdBKfleamnedNA/TRuWERJpwPSYpo2cPs/A/23gQAd+kPbj9pXORcWgY5fvZKuY73lKstrHFSkvhvPa0LgWVjeQgI8EzyQqZ2c47BUPdWWazuJ0h2msvt9NvpeYALP8tWaCBEBYWuBBmLvBRAzx70fn07MF62suJBl8D81GfaIjI6qlNJuoXEG1EWaPI/JOsqC0XAeW5yE46xqqGzV0NWD3oV5SYXXgH6ZBLWNeB50LXWJGYWBacREB6dheZxJ0VQYjC87RaG681dG7ulIElAvMwBEgBpnl+PXi3zpP6tcbd+G6xBx3A34UG39jN9Q2NHP0clzGrQJim4AnAva9B52BGUWcCm7GEhYVTNPot4BrS1nBug4zNrfB7e80H8vrqmhObfe0UUw92pM3yezTtAge/SGavx5vAuas7VtgD6gGcJyYjwjHtPdnFebUapCMj0SE4a9z/+SUqPfFxgpWYqcu896YFfvDKd+6sL7eFaS3/jWb5QUYlXL4Xh2cdAMj2uRJXi7IcQSO/IQ2Uj8jqi7M+Rd8Di38hD87z3Kex9yq7UsrxPaVOquxRApyzu6DXvZXJlyLumT9XIf9QHovyZykX4gaRrEC+Ze+0i7UnnWAt7H/Bo6y45dlxT1hn06kGPrOp8ZVaAPh8tQy1pAF3yxGkgQgM0kjKgKQj8fmJo4F0hKUFNz1hZQpoagOop1aKSZdzd9vpu/R71vEk0r52jBhA9hQ/XhzN1VNi34UFHA4gkXEsZ5rZCwN57voznbdCoM5JZYIjh3yPgWlMKEDho40DDD+9/boDOk8TlfvCpNeqbZ3nHcjU8oi/LQTlvQLuz3tTJhUqSIU1rTqI9nivrnG0SoN//8ivFKCp1buBVlc4/8v78d6bJubPdXe3gOmwjaVz67CfS/T/7+H6EGl/FM8y95WVtIQqh7CHMfcFd54G76Zoxt99LklteoLWUO6DnN84d9QEfU0Lfg8sbLoY8PXvTj1392nT0KT8RbmOjBe+9Jx2+8Ukp/eeLT/hF+4+8j068s/nJSjaYpQA6etCLjpXPf+dB14B7lE6SvMUzyGUolvf0nNZx8D5pPPhbjfyfOg481zVXTif1bYUFGQ2vAH0S1asrrwC9mmTTKiBAbwk/s7yBczMXTVmQGElh8o2h7UVBMkDTQPEQQgo586e26Kksa8UsWmKfmhCZW5hIxppCW+bV1eaEZTRPS/59CQ/6l379+n6cKACtNRwYnTpFeTAXTVl2PF7S+kpCWgN4klGmxhDmzZnveyo7N0BHD7qmZOKe0hIfuWGbPMxdA+nU2cxvo3sKGH1HfpH/JrpwHiqt9SYBen4HXfvfyGMkPfFDvNIAdlMk2olv2U7SuFNvu3FkuJDAuiYPe5DOr9SUw8ioYUXn0PWzrrzqlBfCwb39hUo7ro9kYIk8keqt85GcMA80QssAovF3mt+Rh6V04tlvT+mxz/W63s73mcPeJb6aJ+byS2P2SwN0DZB7CeK876M9K5wDSeeLno2aDWMZybleVWOkrem/tayXQM6MkPHu5Uj3daSBQjsrQG9dzbZ6K0Bvo1tzLSvE3fKyimeHAVoEtxKwaB40VJQSC6F31ko+FAXx0pwkxdoySkRArQSIRx4XRdGKtI+gAfvz5uR502vGwJdymx50EoySkOa/9UmXMBOztpkDIam4HjgGzUBiCXPrbNWezU0D9Dx2fCMdn1rTnl6Tsr+rtJCAu1Q4eAe9ll9q47LWW6qzKwA9ws/RQFf2Ynf1g/4daYeXQbpvO2kcKvUeOBiBAHbHstQl+uTIAoqG5xnjlCj5no9koNsNou/Ly53hLIIVClv6hTwj+Pdg/YzIo+q9IIB6zl/zv3c67P3Ufensna9NZ3//ltqpu+XnyOy+JEDH++ZlHxlJ4bSkclQnyo9HhkX+ioSSz8EltnDlJcLvB7oGc4K06lSRcarjChhR0RAX1aUHfU4IeV8B+pQVrq+7AvR6mk2qkQF67d0wzTPAvY4oFCcNkpQLJVzSstbP0a/UBoIczlgH3tfG+3+cfh5gzmWxDP1mGQsitPE8FtwazNuTxmP1t5QH/Yv/4nq1W82STWsphZxRY6M1Zkr04N4oKNK8bc1o5dGuVlhTeevcSvuX9tDf+Kk708Fjro5sl1AZ7Q66lAwOn1ib4v3pByd5ya3EcZFZBUG8trcs5c07y/sE0EVeCqHPRcljwB3rWMZWou/JF244aVxK6fCX/k46/amPubtF45kD3oLh7b1AMJrvIprQGaV50/n9dJWn5DZz0i6WhDVyT7WsgwC8NQW+SbF3KX2xAMrBPN/jT78pHTz9VRWtbLAoPMtW07N2H53z0txeC2Bf6h10yuLeb3OWKG50/md+es0C8paMbtWtJL1DM5qjvlGzD1rKame7H0cXkYpXlTye3DKWUR1uUO+Y2grQZ6FsuJEVoIdJNU/B/+f70nk8XPi8WdQSKSpfSvi3xdy8hDMk/NGwoD35ogF4zzAheZYl75am3GieZotOI2EUCMVChu8JDj4ub201UDfP7hu2sg0POin0+b9aSNkAjAvh7n09DHsHL5VmqUeF3do3aARD71vJ+BwNF+vILymvfExLe9BxL+Gd9Nqng0LPsnnPs83o1euVTsEzI32jPRnhK7nsvgJ0iW+VOUP2cO36kka7Qr9tJI07dV964Oeu6JPGebxcO/c9DYRzPPoGIe2aM2oktzreJO2xkYGwIgqoRi5oegdvY27gPuKXD0/pxHVvTOkJN9QMfXNlZwp7tyKSaoyeSwF0fgdd1I+Eu+jlnAeeXfMWC0G4diY8vSrSD5fNUcMAlwdcX/H6q/0e0bt5m56hjsrOfYYHY3j14BJQ7ZTX8pUUWAF6JcGmFuch7hrgbe3Dswq2tDsKkQRFWgPpyCw409AYpWTplJilBJq4kqMBP2xLFEzggUel1PPGNNFYMQrwvvO/NbAYMUxIIZBL3EG3POgevXGOIwGtAXL1/aNxjxEDSb93jTv/GpiTQIC07yzD0yYAOiqQeYyY1CgSvo7Kpvj3sdx44GQsANKxV8kIyNcHAYWkJG4DoGuGu2rjkBAKba3MSNkzwGNJGvdjn0npikcFFnumIjlp3D9/fEoPxNqTjGPIZ+UHzqVHzy/2SUB98F/+hBp7Q53zF9p7Lu9j07PyipR2hCdQ0QkQo1ZbKUkPQSP10cc+LR179q9tdq9UTOfse1+ezv/RLenclysqsaI8Ool+1q4JWT0sFeIuedDL3umyt5d9CW+hS0nkpgJ2yykTAei10W0t8r+2D1HPMSIUIjuM629YfklAPpKfK0CPLNdsZVaAPhspYw2RB73lUGmCj/dsgdzYCOOl0NPSKzqBULuW+UdHVgOiPcXXorkkQAbeXxbNUMPkPcEU8fRF+tuWB52UUgQXkodvsOb0bBp/yijIwXAdrb2EFn5eluhKY8X19tq15kx15wbomMVdG6MVqpnr1HrWVVpIWdwJVCwM0qU9NvJgGtEdeU7bAOhR3sfPluWhKbybAcgoP/bKbSNpXN7fD95+w+DakWSwlc4e0RUjCZA+RKt+/kYCuV4OQgTHxYvpesJPiW/zddT+7e0PHiWxkfBYxi9QxvIzePCUl6Zj17xsN4H6hLB3zi8jxlBt/ZYC6JYHHRPHaW+jE6CPgnTNOMrPy+A8CrI9otd4ZwHPp2RU13TIOfs3dQXpGhLKxs4aKEWsenw6SiMst4a4t1KurV5QvW1rfK01pkAG6EWJqlREWw6cBTQ8RiitnZR4BgW/FxXghblH9oxmdcW6lsfZC03WLK3oYeN9WsC6hrF7RoOBEq6cYK+/bdxBj6ytRs/BfCSgTqCKnyuuRBeixUcgnR2Lpp5lXjxPLMkjX9Ml76BLIJyPLfq+rxWmKX7bQIh7zRpYZ0wy5nCFbdcBOiq8kpd9BJogzL1vQ5NThid9G0njssfz1O+OE315eyJsDO14TpEb/MB0dMBQ94GMYrynNxzAb56s9vi5Jq/z7y0y19I3LNnI95oFyDjdS7b3XQ57/+wn0uGtj0/p3rj88EpGjZ2bCnEnb7m4j5SwdvKo12Z012ShZFTT6NhyHrx+Jd1jrn68/RDVtwk7SDkqRCPchIRwozEdSenILTVaVMus1zqDfbiSY7MUwBB3D6hnQaa9T2tZ+bjCr4GemplbYXUYUqcpdy2KgjbGiJLgKV8ew9a8bZrigf2hZy7C7CPAgcbN28N/H4VEQ9Jct+FBR5rSPh3ovBCyPloH8P5xz1RphyeK40DCudtZs67S3pBozNclqrDO7UHXksRZ519SIHmIphWu6d6xlDzoeTAze9E9I5vmUUVFkehERr19AOit9xsnhVKy83XZD2z+HexI0jiUmVYEjMivITllac84SFw/LvY4NMqx37CZ0r8QGs/lqyZ7uSKPa4rg2wp/b3EMROSqJMMKUP+RDV+RqFGCJtxPb32CbRse9LJ3WHg7B+L93oPw99HeZW+qo/6pGQyL6BYOk2e8qllCT7+y+q/pZ66yVsSMxatH64HPH9cC9zVJ3FxLWtVOhU+pqt21sEIBAuhzglWLAWogfu4Fit6Lqw218zyjCEJTAAAgAElEQVQgvcBgio/nAfMUCI02FsAqQg3GoAFy3k4uQ4q/pDzydlGAWWsr9Y2/bQOg1+w7bvDoxw5PRIkJCSuSLOH+EvvsBo3KPNIzYoDx9l7ufxsAnYdh8jFipvf8Ler9Edda8qTjW+na39RgIIN7lG9w/qEBczTGXHLVD6aTL3pzzVZuKnv+C/ck6x30lkZ7pc7Je1H4DvOeq0BNScy4i0njUFbQ3xZI72ksXDLPNBl41MGbLhkjiZ8PjLcGv2rlKf1c4ekm/N1zEAx0C+NJtehe1AASybb8faefZZsQ9i7xUuKnqs7xt749HfzwJ6LkDZU7/+vflrwkcYN1Z/envXD2gW6jgPTQIFkhSc/RzkXteZEM7Ro/qG27dp6R8loUa4shraXOGuIeWaX5yqwAfT5ahlqiZ9Y0qzYdmgGjQ+uX0pOmEKASykGIJ8hJUZOSweEwJIVOCnlH5a9XlJR5SsBYY6yjMSnAXaIB0slqS1qCKYKEK2ye548rM/RvUvz4uDyBsgmA3iQEADxoFvQyPyHLOwZh8TPF6TVQQuD1A25J9yz4uF41wF1a6yVD3DUmpYW+tzwNFEkul6yQd+lZthB3jReqPWO85W160L0zLfEsySuk8X00tKJCSDw+00+L7KK2t5I07t570v0/e6WaNE6SG9Kukc5/KScA9fITPu8oJIiTqhPfHoECnh9ASlYpPMcmyiR4KrXwP/Z0E98HWL+Fd5f5CEDeMoQSDSgqJ5fN3vRjV28+CiPMQe69Jx2+4crqsHfNuKlFHW0qxD0yb343HRPIDfQOBsxrwt8tgxbqPKO9ys6IxSM9wy2X9ZqOV6NjRejqndsRT4dEn8jL0eg2yRkIIUBriHvrirbVWwF6G92aa0kh7qIXEHqIHjJJENaAjeaJKRWlEJ0aq701Ho/Z9oxLeHpujnlGAHmtQj1ixoKnS+rXmw9XACn8fRMA3RsX/y4ZYqQ17I0ZAM4JsBfFMnO2KHcjz5dyJxzH6CkL3pwR8COA2iWAjnNBwM4zv+eyJqD37qGXBgzqBTznHu3z9xpDpgRut+VBl3hJlAcO9jApeMQXBYUPja2FbpC4qJwDx3h84spHpBMv+8vIssxX5u470v2/9rzSnkcf5Dk0CDNahr8mUTphCffY2+gE3EsfXcO8aKGfMGvNeIzrL0WteVfRaiPYvPWtWTQNpA+iCaDBEvb+/H+T0pV/t6arzZX9+K3p7B+8JJ39vN5l1PgpgfRNAnTpHrp2N91KJIeUQJCuyXnrrPIzoe0Xax9FN4Slg3BdhLc3VceLjg3Leecfde/BmINOv1Gfaxb31uVqqhdVYZsaXyuNKYDvoHPg3SIMPQVkoJjBas/JWLwQ9whzaJl/RAnjjFULX5LopHmeJKWOCwdLuauluQQmokqld/62CdAtDybSXbJqD5RYHvZOCvNgwzGwHsi+THuqKNBMg/aANQpwvtb535iYUKPBNgC6tFfQ24NgnNfBEHnpmaFBHxyse950XnEmkG6dDdxvuO6b9qDPoXh68x0YvVhh0TBMb3p3OQM8g+suJY3j8kLzliEY6P8eZYITEDYH7yBvB/fJGR/CXJaWzI4o6dpaS9ERhceBsh51BnjyBWmNvBT3NZebnAfnf+982Pudr0nn/vD1I5JoYe25oMZfuZFz03fQOSC3/l32zUwh7LjfJb1L07k0Y1Zkb4Z5ohBdJ/Vbq9tNHWM5I3CFRYp4ks5zs669AvQ5li3cxgrQw6SapyCFuNPh0gSkFi7uKUMjAS6AcgQS88xs6GHB+WnMhPquYRgRS6sErAqtO8CFSncNDTzAqAF0ZOA1DL3GEMMVI1R0iAa5vW0CdFWJVMLb+bglRU4FMagwa64sNiBLGbAAOx8jn1/tOm/jDnpk/1uAnSuVVe+pe3fSW8PdJwJ5DbxlOm3Sg/6ln7myz22h7a/I2kXKaPcbRzKqIscD9buNpHFn/uUL0+FHbhcTT3EZKPGO0ZnF0PbCWC9SVWQz5E03wt1zG4O+cng4f0ZSePJPW0uJz0hX6fq5Q7QKl8E18piPZ8A780S683te0DRVQ0jXoGRMP/a0m9LB018V2c6bL5Pvp7/zh9K5u9+n9h19JaNfow3eQY960BG4L0loa49oOt7c40EwvrTB1Bq/xKOxvOU5H/FyjAYyO1+zuM+9t7z2VoDuUWjm7xJA54dG86i3CkxVeLKVrwEQXLjz0HyNTJGwyDnmpvYvAD4PKFthThGgrFl10aPqWX+lviKW5KgAWQKg/3+/en31E4JF11XWyVpXCi0dedx5lncEEwq4KP3T3UzFiKN59sv55co4KNg0B++cEQ12xYNusT4JrKO3qOr+OmZ2z51r76VXPlEZZeGoDOK+pO+b9KAjQI/OpaacljgOwR3KKev7SBFMKT3kf/qTlB75uJqhTSt76r50+Mvfkk7f87kBf5F4jXSGaf1xEINzTNdi2L3ukRGdA3QlOZ+kJ5ffhBwqrUTRoty4TJfW2NTZncRxmrzUolS8uWXaH334jj/LVpntHY2b/O8lQtzP/urj0vn/8EmP1H0m935/QGZ3/nsv485e+Jd1R73sMcH7TnvF03s4X25xtHgOHsmDLxGrdQ+7hK8oIBngrOtJZtMYISQUXpPEVSzODEVXgD4DEWua4AC9MBrDiq0JyxpAK4FNDxj2zFZKTlMxWen+Oc3ZCqOrmZ82HA1ke1Z7b3oeQJeUfBIoWtsecPPGxL/XCKylAbq3jpZA7oU/8zBZhoeR0pwVR9q/LAS+/IbPtDl3aSWa1ljvi1KZQ9GUJ2Syx5nvm10F6Jb3h+5Pav+V9vDozqUW6t7qRa85OMGyeZ02CdAxi7vkVQwOfVRswCOFUEmpXTQg9+eU3U/vn3jstAvqZxeTxiHvRPp6RlXOY7i8Lu2y2PVCA/5b1zG/p95704vAGD4X2fM+49k1bx9o+WDQcy7pJV7bqhwOAngN7Fj7fafD3lNKZ9/78nT2928ZkabmZYxNh7j355m9fZ7BdNkTkM2dfqdvZXsHE8TlckePja+QRcEx1w/o357jJbqHPQOBZuAr85+oM9PZizi/OO/1+HJPI3adpZz7vM7WO5FAtBWgR3fRPOVWgD4PHcOtSHfQJZCOQpIOYFF+Kg6UN7AoWPfasb5r92KiCWs8UBwdW4SxagxWA/zYN5bjTFsSIGWdG7wkHNxiH9QmB7TSvJYA6F/8F9dHlyNczqK9BvKldehDUp0QXc2II3nJLYEsKff0m7QXab12FaDzBbOeWpv0Rrq2K/jTa9o76lR3Yng7nkkc0qZD3Hn/eO7Dh2hiwXImeNQV3T+H33vek78L2sU2ksad//Sd6cu/cG1PAUueoDzUzvfA0FcmPQTUpTOJz3DQ3hntBuHxYJAcyYbK6wXRkFjcHp5xdeJ2EquLPNtJ9JfX4fjTb0oH19yY0smvXWJY09oMPsuGOTuIhx48evvPrJm6nfME2xz31CO6l8QXNYO+p0+iscjSpyyjwBxgfaRfQkLPSF6JPjLQivIJ7vIVoAcJNVOxFaDPRMhoMxmge4euMISKME48gNGxoCK6TbA+UEIr5q7NVWPqU+aInlAEh5ryjN7WCOP2lEjLSBMF7w+/6c508Jira7aLWfbwrjcnDHGfsjdH50R5Ck0ycKBnq+jLWnZ3I3Gctg7RtW8h7j4AdG9eVpI4C8D37aI3HZPKeQOg7w5Y99aXmuHrvUkPuhbiPpe3KMQ/4akuCbxJ51yj7TaSxp378OvSA79942C6ER7rypEOmPfl+N8MpFvRo+r1duliu6GxReRKv5/hjXtJ51gCpPfnyPCsawCpkFPxUJZs79e9MaUn3BDlDJstd/cd6fCdz+ufZYtEI5U12eAddJUXMBDe75/Ow8696PitrNeMieQ8Y7xm4Jmy0J582JbBlJ/jGm/76Jx3zCfqTV8B+pTdVF93Bej1NJtUA99B1wRm1LssDUZiKhJo48rnpElB5UgmSS2zJDKQJZSE0ofgtY4qOBZ9OSkkgYFgncpL3lZSSHh4tCektDWV2l/Kg45rOxWkc6MKGiYkBRrXp9Tnd8y1J0bAO9XvEfAGauPRjD/c806KmVY2r9++AXTr7jmGvNP+1N79FfkQN9h53nHveyWjk/bSNgA630MIYKy9VDndvrh2PYn4MyqFEs+3+t5K0rh3/Gh68P3jTNuaDOW8OSQrGY8RvefCM+oajSyw4UXt9FcMhMa5XiHpHkXmCFndaxwGkT1Hb6VL8kzk312jnow+8shHpBMv+WhKVzwqMoyNl8mGojMfunHwfroG1jOP3HUPer+HjPvpBNKngHULKJOexPU6aWG9vYN1JEMR6o6SvrcEP/Y2qpQYjvNoKV+I16bIF9cs7i1ka66zAvRm0rVVRA+6JviWAqaRUS/FYLQkNVZSiznpgKDcYthSWYt2WtuoWGPYlSc0NMEkCQYSHrwP3j//nttdCqD3im3jW5uSoPToOBLSkltqQDQISe3uphehxu/OCuBciojA9YgqDdJcdzWLu7T/tTd+qSx/fs0Ki4/wpVHSuFxJC3cXgLp1ljTQK0WqbDLEPd9Bl84z7a+5eLUEisqZw7vpzNhV+InwNnpoLbecNE5UPjGjOrz6YRlRR+vAn340tCx0kpdx8XEwo+FAVtBTd4JH2ZMp2vpI4fBRYD6nnKbxIXhHGlvz3On76U7YOzd47oIH3TvPPCFc9A6616am30g6Tq9vQHLXmj4sfhAdi1RuLv48dS79mXL4tXeOVw/6XCsRa2cF6DE6zVZKAuiYpKXWG1GUtSAY0jyOmsLXKuwHzAqUPPxG4+cK3xSCR0AtKgHE+Dmzn4u5RrwEXPCghxb/1hKOWTTjY6BySwN0aV9a4bGR8VvCUvs2omfkCoWQebkHcR1o19bV2kNqiCbL7ry0B32OM53niOBce/MXQXquW+VBJ4JK68aBuOY9N7zqNbyChrFJgP7F//niM2uWZ3EuvuUaMSjyqLuDzhW/qAyiOttKGvfAL16Zzv1VTMKg4VWTk6P8FvwiG2pZHW/Rrq2jbOr5l3D/fHSWtVcq4O4qzt7L2E+yWYp8i1FSLiV5KaOGdG2v9nx518Pe770nHb7hyoE3vWd1Ha/bB4A+kLss9F3K5N7qRa/l05oO1SL7JJ1Z09c4LVr6mnKWTP3Ju9Ji3MHp+fqR9Zm1pdZHa3cF6BumOCWJs+6NRLzqtcoQghdUNNA7gAzIYzZSsgotDLJGOZhjeSRLPM4HvaJIL8y0PZqD8HyOp+xqNNeUbU9ISd81pT73vcQddEwSZ+3T2j2sefmktaD9PVjHLns7eQb7bBCcCxrPsmn0lfqSzg9XvK19vTRAn+NMYRsWWJf6awLovCErURwBcgKRlVngETTgum8SoOc76HzfSNEbEoica43pxYPei49nSDIOc6+vYTjO5/+Sb3pEOvFP/v1mE3x99hPp/p99fDWJJDnCeTWu0+C1CJ7nojAHvfsBcKc7ol3xstbsrXSMyMJWJbmNYe4IzjkI93i09z1CZMnQyfkn/TvSllSm3E+/YcNP/NUMVniWjfjptkPc8W106a30sj4s6zufuuVRrwXrnvznoNw6B54uW7N0koHJ4tc1bbeUlaJUI4nkBmtGCUAFg/jqQW9ZlfY6K0Bvp11TTe5B1zKsSvfE+kMf8f4FRzaXR8YaLx+Kdq/RUhByfU0JiCgHHqjlzHTApFjoYC1D15g2V0Qkxa7FM45L7RkFCj27uW3Kg14E+IRQ2Jo5omI3Wl+0FPN7ozyRXGnoYs+aJ01UCB2uivsJ12wJgP7Xv3H94Cm3IIsIFeMecquC9na6Wkd6dk37LTdSGdYempxQaBcAugRqWoB6lD/SGR7cawSjJDcsl3bPXXxxxAqV3pWkcQNZpWRT53x7ZMghL3X2NBFt8r9ZqHyf7Z1dwXE96ZggXjEoRuSUJYNRSZfKWndZI/LYO3PoreTyCmnvzRfPw9EnvCAdu+7Vu3k/PYe93/madO4PhzkSlgDo0XfQR3IXksVJYB2BOn+irazlDEnjangW6QPevvO+R/qU9DuJX3h9zfHdu05afVY7JrUC9DlWJ97GCtDjtJqlJAF0y6o1UBScd9LnGJQEKC1vQUufmjFiJAQgY7DUVzVzcQaszb9lnlIdySMnzouFRXJrsHb30QPjWlTAkgA9Z3HnyrzkrSmCOnglo2YNJHogHWlsxQvF30QvH/zeIoKalALu3fI8XbzOvgF0pJrkTccyIQ96FKDnxtFLzr3n/rKKJbS13hZAp0GiIqjxh8ZpV1WTrmNFkkLi+d+1pHGSAYSfUcm4LZ1xzmP6f1OyOPSqCzxISqUxAgL4CoXxFJsHanv+2PFo/re1Mebi5wjQabxWtJlURhvr+RMpHb/2pnTw9FdV7fONFc5A/Z0/lM7d/b5yhWiJEPdWgC7qNkKG97JnWNK4Iu/ZW+r0N4F5/FZLa0nGc17J24vs/9r+vfKS0cmrU/Pd0609rFHjPFkBes3KTC8bUEmnd7K2cJEC0jNrPTMx3jhEazbSFAUkMYWI4ERLsxXuPcdaauHwGqOIzKFlXJoRQmLiXAlAT3cUtElCg7dLCiCVqxEmNWOgskuEuNMza1xJJyVP+q123TQQLu1ZNxyYG78UpTaPuWRFJuMJKMMa3bnS4M0R13kJgH7/G8fv09fsL28ONd+nJosr4P5Y12PkDro0uAnZ3ncFoGv8BPmItjYtPMNaZ+4lrz3reSyX/fgH05FHX1OzlSaXPfylv5NOf+pjo3YkoCh1Jp1z02AiaVx4Xx3uqPNEcmVt+4W/8A88xwff9MR08JhnpINvfHw6f/JhpcyRU/9vOvPpf5NOf/L15c4zr4NydxAlAZFPniz2vvdD7+Z8nkcbMAJrBhDLSylF0Kh7f9fvp3/81nT2D16S0t/Y7XfQTX6gPM9mAfK5POx0LpBHtsi8Gj5p9bdJQ6rmQee6WD9WrgcZd9FL3TWL+2SZU9PACtBrqDVDWQuga4eHCz1+P0wbjnfvdwA4oBHPC4l9NjE8JWmcFipvhUe2LonlASnr0HAyWhg5MnRJ4WqdI9ZDQ8ySIe6SklfmxjznUWUuMn/J48XnO1hTJoS4V+uCtsveQiqVoHfKbA3RDpKHh9e0FH7ca0sA9BziLu21CG3nKENh8NQWvYWe/5a+4W/uGEjJ4MnL8DqQBMorE8jltdr0M2va3CO8usa7KPVT9mYXru6uAfFNlkhO5N2UgRyiaLaSNO7UfemBn7sinf8CM8I5E7XA44B/a8qukfNidANHyCw/eMKN8auDRz8xHX/Gz7tGjvOfvjOduv1aMTmZdodVIgny70jkRGgPCW+ka15IUf9QzvTAKNHRdaezvWdi3X1HSo99boRs4TLnf/3b0tk/uztcvqYgesWLCGX30/mTa/itph9Jt5EM8iT3NT7Yor9a4/QMe1zWz913lH6eg4y3M3L8rQA9SuZZyjXAkFn6/aptREsSJ4UCSwKwMJyKsPcoCNLAjMXYiPnNsZiWYhAxSkTHEPHAUltLM9Oogu3R2QN/JLgQxC7pQUcmz/etBNKjyl3L+mGUwmh9HatxJPSdKwLWevG10PbsEgBd8qBHz0xLOe/5NWqTZ36v6icKyHOjElCXfhcGIO23bXvQpb0mnfEqerLC4hnDq0fkAaWnjdj9a+m8RA1zJ67cUtK4f/74lB64QATN0CrJSFSyR0o3XDAvdOiMHhxoS17yHnt3OUPIJtjLpa5A9phHgDnuh7PvfXk6fPctF+aMz+kFjehLGM+tfSt50CWgQ+WQ32ry4+C7dzjsvfUgK/XmAuj8Djr+eyD/nfB27Zk2HL51Ljk45/Id+SLKZmvvTCG7tE9zexH5P6Vfra6WT6KMCZwmxA/4NyqzetCXWB29zRWgb5beyfOgj5hSZYgZ1Y8Cc2n6licYvX1zkM9iHth+VNGrGZcEcLkytjRQV5nqxNOJQgKF2BIAPWdx5wYV9KSjsSUKzC0aaZZzFNSjvStd8CzSqasJYe9R44DmYeNzsM7REgCdPOia4lBzXlrKSmHt5EWXnmEz+5DupmMF60k2LSwePG8aH7z8O56WDp71ay1kqKtz71+kL73mWreOds6X4NWDPSw83RVJQibJJv7bye98QTr2j37TnfecBc5+9E3p1G/eYDaJBs7CKliiPFNO8HfRib1QIlKDz2MCucKSqPwVKZ18wcRrAd1TX2c/f3HqkfBYvM7Alfo514XTWKI/fc//9TyS2ve+3V0Pe5+JsHMBdG84VgZ47mmXnmPz2kbZXlM+slek9qLyH+uiYQ/3dHTsmypnOQBXgL6pVbjQz0QIsNnBfiX09p9+IJ3noKVnNILFWgv51pQkpE8U/IzCWIQnw7ggHPVDXpQZdpMWSUAKwBTDg7V/PK8JMfUahcBi8ponYArz9hQUnOO2ALqWOK7mfFtGJElAShZ2TZD2nLF3WWEaZWekLAxeUtq9dZoboJ//wj3pSz9/ZTrzuY7pQ9isNh5vnDXrRWVrnmNTE8l5yeP4d+5p56B9wh30Af81eKUUubE0aEb+gcarljUbKGxdckWtHSlXihYBZfHyHO6+6f/h2+g1PKaX44YMzGtR8pdQYe86jeLNP3pZSiee+dp09Ck/MRuJyJtu6RxSQsAiF4MJP+cyrksGKc2gHiUQX+tj3/zt6eAH3rGb2d6jEzLKLQnQNa964UtG4jjr7rn0zdLXtIg5SXdbQsZJPDhiGF9qLCM9B6KhtPMr/b4C9BkOYEUTM0Cqit7WomEPumXFLgyAKZtRIN7rBYpA9Tx/aMGeKhQjSl6v+Cz4vJwE1DiztBinZ5XnipumsHthWP26saffimIEf9cqlEsAdJ4kThMMXNEjBU9aZ8/TVjtfbS0G+5j2GfeeI1AHrjkYB6unnSfP6zY3QKd5H9715nTqXdcXoL4JoBhl9/hMW3PYO+9QA+bRQU0sZ/FSCWBIymNkCJ5Xl+/5SHtzlJGAnHZfWerPU75VuUF335nBGENKOc+MeMQ87xfn6d6aj3g2PcFWPrBXJSANRplvBveXdxnIr7lxmXfjszf9jU9KZ//vC5Y8XEdxrVgUhfQ9Ct69fSetA52ZucOGaR0PnvLSdOyal33FAfU5s7iLeyKQ2Z0SxY10BOG+Oi9Tm0QODeScz0o6lLcPa76jnEcnAcrgJQG6xpP5fKTrKusd9JoVn7/sCtDnp6nZYm2Ie69gOR52zbpdmFCXOMm6LzaVmcwhJLV76FKYNII8olOLQuApYX3bdBdQeQ6NK8MRj+1IODEF0/IS1Ci11mZcCqCP5qW8TqDtx5Y19I6xpeBJgroIS1A+a0CGNh4JnKNgXgqg05gIqPOwVo9+c3+3nmLD0Pfct/ksG39iTQpfn+HJtdb5R4yeuP8kECkpbxbPlvrlfAwV1eb5sStYGv/reZnAB6L9ekYtnJvHW6P9RsqFeAu/o0/G1Uw7zOBeNgND6EdSyh7z8jTYUsAcJnnuw69Lh793Yzrf3ckve0VwCPBq3EnAy1s8cw4+HwU5Fvgx5f9XYNj7nABdSgo3OnvMc86TxOGb6WXrw331yPmLlNHOKK+rGa3nAM6WMRB1vch85i4jRT71PJU59FYP+tyUt9tbAfpm6d170D0Pea/sCOEoKDClg+SFk2leClLc0KuLnpqIYKxhbFFwjssVMT7ULLHGSEmJlhRb9KLU9CeV9TxImiDR+tXmtEQWd3oHXdq/6vgqAby1dz3am14uVJjLYnchnJTYiSvQrLOIgQvDjTGigtZ1aYBOwz581yvTqbtu3gmPupRUjmdyD72bThPT7qhj6DsH7o3PtXlntWY/Wka5KC+V9iHnF9F2vHFHeY2UfKwcIZZt3zIut/JHLVpJG7dHF0vB5jJBOtPY9qgvKUll99uJJ78gHbvu1Zv34mZv+m9+Xzr75xeeoIt44JC2lkNgyv4iWWztdSsCTvpGv2ny4UgG6j/ymc2vQyuhjHpzAnRveHgPXTzPFQAe9VOv/9GerLy+Wdt+tLzF66NtTCmn4Q/LEJd59tF/tl6LnkL32rorQK+l2MTyLR507V6Y9zspQrUKkKcUcWvknIzGA+lWWL9nkCDGfu7sOAs+Z/qa58lTvKwIAsm4EfGwS14jT5H01o6+57aXAuie8Unat0soc3yu3vpd0EIveq96w48EzMHD1XvBlDd9+Tgk5RK/bwqgl7F84Z704L9+efrynW+5QIIFJQImiuNPreW+pe+TEshpd9FLZx3VG4G5JgainhLJWIP7YKKo6atrQKaGl0SMYlZItBbxNGWOFq/m7XoeKo0OntdV4uERIN+3O3pT7SL/ORZ8Mm0K/SJ1c/K8s39wQzqXn6GDq3FoZKH2UBb3+3rGa2qanCP+ymU6/TuvTeY5Eo9DGa3x7KNP2JLBJLJYwTJL3kEvtFZC3HuadmHsPMwdk8aVdcy6Ggt5D05vVExbW75H5pJ7Hp+0DPlzjaGVTvycahExqwd9KnXr6i+ojtUN5KultAfQLXAjeSM0oYmAxwon85gGKiIecGzxKEfAeTQkLlrO23MaXaT5k2JQ463ymDkJEFQ6sK8aRZsrHksB9DJu45kejHqYOwrCW1dOAzSsqN4tnvG9LEDXSpCDSkqCJpA3CdB7pboD6g986AJQX+J/FkDHe+dVHnMabDS7O38rPdetSR43Q3I5z2Dn8VeJ10TXC/kT5zHRNrxypQ+6rgOe8n6/GU/7DM5nrm/lfKBj6CTrwzFLfBp5gcWfPZlp0QiNM33ZIyntCjAfjP/ee9KZ9/xMOv3R28vPmjdd0jn6tXRC5L09xb9750MylvPfovJSW//sTT929bxJ+mrmP7Xs0h50DaBjOLz2t3l2GGifCuA1w2UtfaN6nBTVY/Hf6D6tHS8/w9q/NWfY6kFvoXZ7naB62d7BWnNIgQzQz+WELwLlPXBeFDNULtn9MA+lMS4AACAASURBVClZHP5Wm1BOWj9SblqEXst+sMC7F5Jj3a0ZKIL8LiAofZJSi4zVDWN0Jq4qA6B4ctrXWFyl9pe4g86fWfPWWvOkRwwskTJe/7SGIkjvwt1HxiYGPDgQGfUFT7Rp50hS1rcB0Gl82aN+9l0/lL70h++b5c3WyHvoUlI47l3noe6RNVXL1ABxrZEGgG6d7cLTldwWmqET2/P+xqlwA8EkegqVPUNrz3MNwGad7ci5jxpWowqwp4BLxjdOGhNQdldojn7dDE+mzb2Y0B73ppMugjw8Io+XGKa0pwfnJ/NjxYOP+oykF0hlStj7s9+e0mOfu8SUFmtzSQ+65z0fnAvD0y69jc4BuXeXPUo86WxG604tJ+lyLc6tqePgPJk7S/Df+WyvHvS5qB1rZwXoMTrNVsrzoEc70oCnB8CjCg4pjppypwGO6Pi9ctL8pipuXp+13y2lINJWDShXvS6B91+1sSwB0PEOOu0jNCZEokH4uCP7NkJzSfnKv3lK/cgYEuCcngDmY6F/53V++I07oPTdfUf64u3PS9tKJKe9m14F1nnyuExgAtfa3XNahAYQru096YxHALIEHqOAMnoOllZOxbkDSJKUQGv8GthtOdfYjxtN01WoAezI//galv4uTenSZ+2RN1bxpqOSz4G7JssL360Me48YQwZyg7100np+PAPYwRP3K+wdPehN0UpRJqOU87zsgzU0Esd5ZzHKly353zpVTf5LOjWX/1wfGekdrYMx6llYgp/R9Q76AsR3mgyomZsf1Fdyj//xH6Tzkve8Zc6Wd7gV0EQYniaw5mQmHkCPRBIU5Sj4RqtHf0kx4POVrgF4bUa/L0XvTQF0b56a143WD4VEq1LHBR/+m4+xX1e4IzowkijPC5W1IgAY4K4oxHMfV9ywOwp79prd/44bFgfq2vvoeV28ZHGughkNffc26gLfRc8cvOZQzoHzcoQ3NORfU42LXn+WYszn059l9r568dQoIetevxI9qQ5+k87enDJM4in9Ol6a0smnbi4zu0e36u8fvzUdvuclPV+QDK5SmzXXmY6cTylHG3J+n387b/BVTU6jZ7IWrEvnB+d38N03pYOnv6qalJuusHSI+xzzsbLDT7mX7vEV7/zX7huPFhoPwqgqCex7bbd8t6J4iyxek8S1kLW5TkCFbG57rShQoAWgW/d5qQsErPyeWFGIlKfWOIDVrIhcwfHu0Whh73Mxtsg1gMjGmwO4R4Q2jkWigyU0ouAcvT8RGmwaoHvhr1Z4ZGQ+Uhnc0wh28t9R+qNBZgByJnBS7P/Sxz45XXbjXa1TXqQePs02x3n2QDmGubtAnM+8JpN7pRevdDPRy64pglMjZTwFVOLlvQxh3sYlNpFliFukP3gXHc+6ZKSwxiGBv5Zxn/yePQbmfMKdN/3MH98+0C+0vDhIq1pDq0drXE8tIkLTUbT2tXUX5f8VKZ247o0pPeEGb7hb+77LAF1KFjcnoSL8UQLDc8g7b38Rf+I6iiUnPGNCLd28qJcyvlevWdxr6Tql/AS1ckq3X711CaDTPXT8by1lpHu85SDB82zl0HfeZMuKXWPhHgnczuuBjKMFPNbSgZefW/BL88TfrDm2MHfNExBh3tLYJGa+BEC/71euH2TJxblrtECDEt+vU/ZCrcIt0akfMyS+KmW5l13gpjWGIL7m27yHrtEs308/fddt6f533jx5SSxw7jVeFeaOjSFw1zK9Y3i8N6iJ3yVDEjUZPUMaP5aGJhn+WqcQUXpHY4MkktL5bxlPBESbZ7ylU6cO9be1J9MWmNOgScGbjvpGVCbX8EttWhagJvkpgfko4NH2T9G7Ohlw9LFPS8ee/Ws7+SwbAXQyeFYZPhfaS/zOec/3uoRwkWRwkTKWvtrKY6eQw3MMaPx/Sp/RupojbPWgRyk4T7kVoM9Dx3ArdAddShSnJY+jxi1PupTcoQiMYPZUzepthRuiUql5f5YA6FqEAM7ZWxgtgiCq1ErWeCnKICr8+7VmIZ4eI8cxkKLgCZ0lAHq+gx4xSPD10xKT9AJqpmsK3l7g3/l6lfnQOYLkb/3+kZLCsd9q1jCP49hjrk5f81N31gx5Y2XpabYlM77TZPCZNfKqS4nlqgjAn1nDii0e9arO/cKj/ceMn1q4bi1Q5p4iDi44iPFHOiwRGQN6avKLCFx2cB6uGSp5eTqDUt84R0lJx/kSfSNz8eiT2zj2zU9Mx5/x8+nIo6/xiu/vd7ibztcQ8+LwaL85DDOasUmL9uN7nZchnqLJ6pp+qI0S9v5fv2SngPoueNC9ZHI8jL0FfLccJDTaTOGDEf0R9Q1NX/P0uJa5anWkqypcP1s96HNS229rBeg+jWYtkT3oucF8Dz0Dcvp3aycS0NGE44AhCEoogvQaBcUC69RvLUgdKVOK16VvH+4Fa9b4KVZ6SUhrCjONKwJYa9ZfUxSsNqQxLAHQ0YPuzcsKe8fokKW87FGPSz8X5jWXhGevAOLTbP2GGL65TuURpDz0uTenE896hUfCrX3fFFD3POYjDxB6xYWXL0pGZ+v3HQDpuC8krx8HG5GNoPF0jX9P5dnemEaRXoKha3R9iz3jxmULnh+rbw7c55ijRNfjj/kqAOZIZOZNR+cA10u8fdHyXTPQSPtCOkuRPWHJf1Xe71jYu+ZB34YnXQLq6E2n99Kt31v2S6TO0qC9hn9JY4nMobWMpJutHvRWarbVWwF6G92aa/Es7nMAdG0gGnDn5SUvdDQUTQMVklLJ+6wBq9Z9cxL2Wth+JJy/ZhE9Y0VUeZ4STSApEJJxwFsDmvcuAHRTiYboj16Ydb9LhpYpxhf1LAnRDOWcEJiwnlTrvmmKHfaJQOkhz9ltkJ7Hn4H6A7c9Pz34px+pOVJuWe3ddA+w54bDyqYV4k4jxPvmFffPa/hGBGAimGzxrlggvaznDHfRPd4tySE836i8znW2PSNFBKhZmzc/mXbiulvTwZNe7O7xr8gC2Zt+52vS6Q++fnDVTuPf3rW6OdZdMkCp6wznO5+HzHPofFrng7dJcrhf4wzUf+QzW/emZ4B+9tOfLMOK8NJt7VF8aq3fPwcX/oWe9bk87bhX5uKJA54XTIKJzoM5jImezoUGUV5+BeibPQ0rQN8svRO9g47dtmZ2t0JSogdxjjAzZD7I1CyhVqsQ1ip/ZSwNYdKecs0VSGm+XEBrofAjIV6xHyVB4gkTTuulADrSpWJKfVEtt0Khl5JBHdc5uuaa54Voqa3jiNZdBnctHL6GDlwwn7jqxeny57wiHXn4o2qa2HhZTCQ3dQDSG+qY0Z36kJ5l4/1XAXaqWAHEp87VA818r7WA8pbxWaCmpT1THoHCOgqDBx4ePdtan5oHtVYWDdqnzOx7kMl77vUT2/vMB9LhW79r8AJEjQOgdow5w3s5J4pWKxlJrXNVI//R8G79ffQJ232WTQtx37U76WVtuifW+F6Q7qvTd+mtdG8fRSIvTMOL10HFdwTkqHssDdCloXJ9ewXoFYs5Q9EVoM9AxJomCKBTiLv039yedx890qd2Txu965LQ9BQgS9gNmKlwdxLHPkkpYo1hSJ2n5BUBEATuUWFNw9GssPx7ZA299iTBgV51roTwPpcA6No76FzQ0HiOHqR0LieC0RQq5ikv9Ss959raTllLaR79+FkSOQQAhe6B54Gofe5NzW0de0RKD3nm7jy/Zu3dqUBdA+ZaVvcw+PYOnHQvfUuh7prnpJVXavX42eN8A/e5R7qW7/0cWTSKFPkk5UeZAvQi57/KOLHvT6a1LF60zqn70pn33FS86b0sE66i8W/RpiPlNMBj7fX+rEww0En8f8DTH7a9bO+aB302PhpZmGAZHgJvZXiXvOeahz1y/rkc1nRdTa8KTm1QzBuTtp/mBuye82sF6C2r215nBejttGuqSXfQqTK/i84b5B71CFiX7usWBiLcs7TKTlF8PIJIoNWrI32XDAxaojEMn6sJfc9lM4jE0FPPOMFBs6Zo07xaFG5NeURQ5wmQTQJ0EbDC4mrCIWJown0SNbyI+0sJP8N15XVHVxf4/XMtBL5LPtevGySVk/ZIBuonn3VbOnHVi1qOzkbrHL7rlenUXTfP/oa69C46Tx43yySlbO+zNOw3Ip1vXitylvxe5BKWMtraZvSMRc//4NxlA6twJz06Vg3ASbxTMnxe8tSXpmPX3ZLSya+NdvnVWe7ee9LhG64cvZuuGdVJd7H0kcE56d5H94AOEt8yxGBoO9XV9BjJa+7J/5TD3m/4k5Qe+biN7YuzP3dE5MnbDnfXEsdpd8/79RBC3mvD3bV9w2V+7m+T/JHLf773NrZRhI5WgL5Z6q8AfbP0TlKSuDwE7kmvHZIVDiwqR5BsrT/8RuhwdEyegNQYnmQJjIJXSbHjv0kh0XN7ZaKCPzonSRnQ1kBTAqS+uJL5dS+/Mx085uro0rrlsueUPOi879o5437kf7uDCBSw9qglkDVlfjA/BszLHlPAg3dOSBngQpqfkX0B6vl++tkPvyZ96XcvetACS2QW4RncMSxT8wKFvUNagjnLk17paYusvXb+cX/iPrEIZymhaIT09l9kDd1z1l0J4W0h387fvDvKkbEM+jDuf2pyCOmRE8CdeOHbtn6fuHbu2y5/9r0vT6ffe0sZhpTdvdZBEImSkkAVetD5+iIwt+QXGss4SNcM+5KBbWNh76fuS4c/c0Whv8VHt7VP0GPOQ9x5ZvclxifJd+TD1l4qe1rI39Gs/ygvd0hjQj2htU+PritA9yg07/cVoM9LT7c1/g46Fa69f+6FoXiDkMBrEVAMoGdGVMKPIVEX9yhjGU8h0yzMGmOrmQcqeZpiJyl72m+1yoI7XgqB7u7KudZ1r0Hhu+QRQOWDlNAlPOg5izsXIDjEWsEheVi0qAjel6bU13rWJYWd9iunq7lUxGWtZHJdA9KekDx39NvJv/3kdOn1b935++lLZHyXPD4ciIdBOV88KWlc/k6RSDwMfqbw9xrALu0zPPPWXowYzjQl1DrXDazqIp9QDMYkk0pB7XnDKR0H+CcW2ZvM7BRa/snX717COvCmS7J76rJqchDb1c6OJ6e879o5Jdkhje/g8pSOfOdN6WDJHAZ335EO3/Q8kbzb9qBra46h7Tyre6Fn9176QP53d9cl73sE6Fs8EHUC3Ava3vAMpJLxFXku6gIt+1ClM+PDWjTDCtCncqa6+itAr6PX5NJakriBjshWRQpvrwHokbJSyLsFZDxGQ8CFW5A589FAz2TisgYwDL5ndKBU1wI2aW7ab5IyQAIaGa83d4nmlmJugTrqawmAju+g11iUI8JGMy6VNRAiQFrWl68n7lvc06M9Lj3B5j235iy+5qWhceb/7ksiubmBesQLVJX8yHp+jdaJg/UJGd41JV7zZktnmiv8+G+Pp0S+t/LtqUYHzq+1rMLSVafInCJl8MztEzA/e+dr0+kP3pLO3d+F5Gb+8B3bTUwm0Zy86TXXziJr58ljCXxhu9yZ4BmsvP5Q1kt60eDsLvks29u/Px3e9TaRjJyXRum8zXIIIqXkcbWh7nytMMrC855Lewj5SCu9uM4s6SCb0Knz2FeA3rqCbfVWgN5Gt+ZaFkDHhHHlQMAKRe6j4+AQpEc86M0TNCpqglFTPCNjsO4tFqHH7uB7d5mLoIWIAfSie4DP8mBrDF9jrp6Sq4F2SVGXlIIlATpXWlqVfK6k87XkBiUpysFbo9H5CD55YtXr15CF7Q72W8VTbBFjjKbk7QtQP/upD6X7b72m+X46AvPCK49eeF6N/h3hH7Km2v1K4BsBeekg2Hpl+DueG4w6orPNFUn6t2Xg0trJe83zFkl1JR4TpEi4WDlTcGWE8+jac45eeE5DPkd+tg6+fn+eTMuA99T7b0lHTkFCSorYevgOzqXzpp/7wjwh7+HNxQp6eglvUzsL1l6y5J92ZvPvB0+c2aiSaf1PrxyRyAPmTZFILQth1Ikmiyt8qfOo43/5t9rhcaCNeyCiv0r1tTFE9T5scwmQjvr1CtBrd8608itAn0a/6tqYJI4aICBOb6Pj71pHmoe9MKNOsZTuqFueyF7YGFmzqycOAhEVPC6oPCEY6VvzoEt1Jc9rpA9eJsJU+Zxb5hhVpIsSy+4vaXNZGqDTOKj/JRR9b+3wnqOkSHlrHfGg4F7A/Z2BxgBQdEqzldld3KuCMQEVwIOHpnTpU29Ox6+6fudD389+9E3p/nfcoAJ17S30TBsp23vPNzuwLiWU89bb/B4F5pM6kStrPAYVM0vpx7Ie35J4nMRbItEvc5LENKQyY1g1iO8GeeSylE4+9aZ0cM2NO58ALp+hw/fckM5/4cLgOT/I/KXYOFhCyl31ph+++xY1CqrMa+GzJwEczRBau5ctw73WFp2pg++eYR/mu+evuSKle4e9aTzUA+2181+qPL6VjuHrEkivHYvHdyORTSN9oHYQxJcC8r+x6VC1FaCHyDRboRWgz0bKWEPSHXStpvYEW6ynYSnLi04la73FNePQQM5AmWDKRU3bWDZifJDm3KzMGck8PAV4Tqun1ZdkwV0iSRy/gz5aF8VoUKPcS9cxivCDSAlp//D19dbF2n+aNX1ggGCh7gPhDOHumgGBFO1eQYSM7xGvz74kkstznfo0G1+vlruUopdIyuTOPeJSqHvUY66Uq9mXGjCPeHSi/NXy/LTyrsi1K77/tYgZfp5rE8lJdC7z2aMn085/+s50+t0/mc782cfKctKcCIyXH8lY0f2XaHbkYSld8l079mwj86YTT8e1l2R0y3U8bf+jsXPAu7HSuQtvrlMdTy54fZpnckrYewbnv/wtKf3nz6ldaE9bRvnEpsrx++hlz7MM7r1OB79Jz7PV8FlLj2lxtERpZcl4qQ00Aok6kJDELjqeXG4F6DXUml52BejTaVjVAvegSyHtA0VzwfB2L8y9Z3bsXm8rgNWYCf+dW6pJ2UDhWAPkShswdt6fZLDQlIKqBWaFI4CZ5qqFTVlCXaKZZc3ldM3/XsKDjgBdVYRbiSrUW9qzEhWGnPaDvSZw2d6jVflMVIv3cm+AelYkf/8Xmp5mQwUTQboEwEOhmwTSMTlcFIjPuM9xT1nePYlXevyTf9fOrcRfMPqpFbiL5yySQG4mGp/8e/vxZBoC815Wc+8aT0xZGP+FUr3dsAPsxx69e9noc6h+9qajvObyuRao124Ric96bWhOCE9+aOdaNMA98hHpxEs+Gn894LOfSGff8vjqq0RSbg8+zhDv9Ag203fp7nnZK0LyuKldokMJ9Tc8i1N4odUXGoOm9FNDkxWg11BretkVoE+nYVUL1jvo/E10fAedOmm9k6550DFUEIViFJR7VuzCMCms16DYnIAu4qmZaqH3Fl8T2mjtRGV7imVWs6Sicr0kQLesuQgULDDhGVm40oZrMWcmd2nvcqEogRQVEEnh7owTq2ep86LjWfI8qUSXDNQvv2Hep/W8/d/yvSWRHAFyuoOe+42AdBqfe3dde36tdNQyy1gdy4NtKfYS/2gB7aSAevw7oiDWAJi+3+CzhRI1I7Irl7nkv3xiOv78t+38dZB07z3pzHt+Jh1+5Pb+OafRmvIIHX6NBjzp5Fkv1/wvS+nEM3fTm3728xdWdo5cI96JO2K8pR7Z3177tKc1wzqeNcmbT+ew3E+/5if199M/84F05n//jXTu47dHhmWWaYlImtxp1wCGsBcaHQzBtwbEtSfaeNg7tSeN1+O90p7QdBvPOBqll6Q3WvKf76loH1a5FaDPQcV4GytAj9NqlpLaHXStcXwfvSVJnMh8+JMKgXfRUdnRlJ9o6JAkfCyPUA3xJWCugXUJoGsKQc0YImUjIH2qYqBZYfP4lgToNP+IQPFoFTW0YDZgWkcp/D26nyWliYMfS9nqacDPGk98VRofJ0cy6dEp2hLYoXqeMnDZNT+YLvn7r9p5QKIBdQTjkvecA27P2+N9L3SVnlfzMrhHvOyRMsqGsIx/3pmKfNeMpVqUTm7T23sSX/DG0hvp4P5l4W3CE4aadxX5+olveWI6/oyfT0cefY03hO1+P3VfypnZT/3uLX04NR8QRj7k/VzkGjeI40sSPGkl8ZSHpXTpj30m7p3dAFXOffh16fD3bkzpweU6I2DOe4h4KKN7XRv5LPL/ipSOfuPTUrrk6y908+Dn05G/fF+1x1waoxaVFOKXMy6X9uTXYL0YaEdgLgH1yFNt1n4gvcCT/1P1N4+M0j61+LPXnvd9Begeheb9vgL0eenptkYAXbpfzhPEWd50/o13SN71CKCRBird9cN7fl5SLpcATgHOcKJttc53wIDBYFGUTVJ0ogNpKGcxcASCUlnP0CEJGfptk3fQ0VCgzbtG6ZHuo0fuojcsk1vFUugG3ky4m943rD3F5vZ8sYCnDHDBnWtd8p0vTpc/5xV7AdQfuO356cE//YhIDe3+pAbSJymY0jNsknd9Qa86Kofa3mtR1LTzJxn6ouOo2MJi0X5+YEgmgC4Z28rYlDXYO2BOmdk76kR4pBu9w4wbA9ZzJKUTz1j4Le7aDXHvPensbz0nHf67T/bX1nB955bVFvCh4UfWITJVzRNLdVt0oki/kTKYLM6NNIo0OmMZzO6uec37NVsg7J3zwYhhZ8bpj5qy9EHpW+1YVoBeS7Fp5VeAPo1+1bVr7qDzxtGTTt8I1GPoe/XAWAXL2xwRhH0iGubxiHrWUemjv/N/ZxOIxr3GXiguoGBbHikujKfMtYbOmwLo6Cng85NARAuwIIWNA3T8DfMu1J4RFL5YX1PqLGWynBWePM/hyNr6akpeRLnbl6fZMJGclcU909y6l14F0rn3XNo0eE+dl4l4yCNlgpuV7wMpzL1XVFmyoJbzhvsKjT+esSg4nQseY/Z0oVSv9xY70Sj79GRa9hw/8K4bU3pgOGOkq7XGY+19TD3JXlhY0I5608986MaUn2Tj/6uJhur1iS7Bm7UPI7wzuo8lvcbTdbjuM0UnqBkjla31nlfx08oBRTzokSalp9oi9aJlJJ7I13gunqiNR+P9c+nNRab+s9p3Z6LUW8uJsm0ly2YpEAlx9zzkmxjxXKHfElin8deCDRRYnA5RL7oG0qT7yrWZgaeuC9JDUsb4b1J5DLka0AgMJpsIcZfWGgVJrSKkJThE+qMHjYfAtySWixg/uJXaE6RFcFIoqgbMK55jQ0OIZvzg54jKlERyV92cTjzrFVO38eL1pafZtDfQo170KgVTAuwcpM8BuANZ3iPnX9sTnsKvGRNpcbXQTstQFN0YeIasSJn+HOf7w/TeN0sOWvb6Hj2Zlu6+Iz3wO89L5/5KppZmJFSVf2a0yCymD3/vFxLeTO9+J3Z04pm7503P9/BPf/T2PkIi4jSweLElM0cyZaJLy9N5osYyC3TNCcgKKBOerMy/V/HM6OEPlLO85gN9p8vm3m91eB890JVZxOKREf4YiZCsGaOmL/L9wMfVYjBYAXrNikwvO5HdTB/AV1sLEYDOaYLJ4ub0lBflJehN9u7xTs2qaimbqJTUAjpVOAth7UVxhSe7pgI7AkSSl0lSDiSQN2XOUt3c79IedE2ARbw+npJh7VtMLIeJEKWrHK18yFO4NEBDv/drw+6MqsCd3xslRVq6l9t9k2iIe5CUL9pze5PxPaVkvaEuAXZSKBG0cyWU/m3uBw2ME6jmz6+1bqxAPe98Ed8pPK3yeR2tvAUQpyp/3pQjffOzvk/AnDKzn/7UhSfTRvzBOOe0vny9R7TkrnJ2b7/Q1CF8fpJt1+6mp4/fmg7f8xLRm056TXQ/9bTuCJGfTsP/cX4i6SNcxuPaSd+03/jvlnHNm9tS3zG7O+eX2wLsOFf0uPO30XlCuTmyvLfI/xZgLK2n17cl/1tkQlnr1YO+1NES210B+kbJnVItQC+Hgq2SliRO+j0CvmumP/f9c0kAoeCaAkytuWkRAr1wVZ5os8Kkpfv6VfQV3lOXGClaRGsYPqf50gAdFRVcb6RNFEREPOi4V9HIMofRRVLERsoCvP0urd3AYOFkeLeUP74PJAu+tpfozPHv+wLUcyK503fdlu5/58096RGc471JrkiiUtmsZGrPsdUwgIllNeAwNw/RhmkBiujZjrbdz0kxMB//jh9MJ7//F1M6+bUTqbpsdQ2Y817xXEt/a/Qd/M61PSnDuzPVS3bUm37mj28f5YuxvOpSUrierxqZ3DXdhP/Ojes1chnXW/OuonF76rnCJbfyeVh8tZlvTjxeWvi7lumdZ3DXnmerHZLlXOLyWuLDkb6k9qkt3HtogMf+W3UuqrcC9MiKzVdmBejz0TLUUhSga2+kbzKreyS00AI6XuiZZgGUmA79FiIyKxQBc6VtTEDUhbF6c6gdD2eYVhgUeqOkvy3FLTKupQC6pDRI3i9t/Fif/kbP+ECpUZL89fQGg4vUViTsXTMqaQqW9Dsqbr3ShXkPnPB2z6NYY9zKZUv465GLd+Lz2B/yrY9IJ/7Re/XnfCIbbQNlpIzvWrb3SFI5GnJI8ZQ86iwKZ5ABPjccyQg/kWY1+7QVSFhDjHoZo9Pkoex4J53LqX17Mu3UH93eZ2bXDBxSZAJXxN1z7j291kW5U/i7mPCdNMUr9sebTnvLk+EWYNf2ZwiId/fcB+fLuP4SAXqoG/VzFHJKRM9WazntGcsQz2zoVHpyrdCjC2WXMrP38r/L8o5/195Lt3RWS7eTdNoWvlvDI3KfyCf4b7gEEWPPCtAbNu6EKitAn0C8lqpRgG61TR51zPreMp5oHckbr93xLUxAyIDO76MTo6hR8jgDnDLuwiwZAO/bFUC5lhW8NjENH28tk0cFzGOkmqBH5r6JO+iRuaJg0wSXN+/InrCiQDxFzlLWLIMK1pMAev8bedD5E1LaiwKB++kRIxjuTUmI7+PTbBygWwnj8nxnUyoxozsRl4e/c0PMcEWojQAAIABJREFUDOHweK6lfSp55DRDWOQccYXTO79eqGW0P6tcAeb79GTa+28ZJYCL0AGNmrQOeGZxvQeyU4rSKQ2xEcC76WWP5b3aldknb3qErriHpToclGv7X+KdEv9H47xXRjN41cxtalkrz8c230qvmZcFyOcKf7eMoy2gXNuL2h7yjLOSYT86rhWg1+y26WVXgD6dhlUt1AB0LVkcdWh52fmgpr6droULaxO3kqt5IEgSRFpI9xyAjc9B8qLjXOYMjdbop9GAK2O8boQOElBbyoMeORCewoGhfNgmetUjfRb6gWFG8pp7e9RTplB5ixhYRqGoTEEu3zCZXPdbvx/ZRVKpv4GCDhPAsDj0DvG9sy9APX32E+nwXz493f9vPzfaGtbTQdIzQiZ4x2fXNPDNPWeVSeRqjFzSOkthj5E9KYGQqLI4RQkc8OROQ9GU0WPfkNLJF3xwf94yrwDm3rpbstLjnwVos5wW5U/B4Nf/zsr3SmO+m/7f/8luRdd0d9PPfl5/Zi8qK3AfSkYP5JWqTtR5uKVzIckT+k3jzfi9ZU5Yx4ss0vpAQ6hUbjYDKDRem+Edve2Fx7E31PPftXfTtXMq/S4B4Yj+FuW7mu4Rkf+RPbQC9AiV5iuzAvT5aBlq6T8+r8vJssAzXtyzriWTi95Lj5SzPOi9ADHeEicGFgFEyOyQ0Wkg3lqU6By1pHGqMJ7x/XRt3q4C5uzG3O4mPOiaksMFBirfaAHGqUgCLZI0ru8TsjwXoczWLLIfQ4c9C39I7qTV6/ez9O5RkbpDhXrQTqdoW8qidz5qlYSHPOfmdPyq63f+DXVMJKfdo+T0nOQNkgC75SW3wHolkDd5XUV+CzybmnclsrfREBA9N165ow9J6eT33poOnvRir+jWv+OTaXgWSameOtDo+e95yYA5A38RElLi+Ki/49e+NB277pbdue9/7z0pZ3rPd9M38T+ke0tkineWJJlo8exafl5LJwmU8yScnIcuBc4H2xdC2K1v0t1z9J6XMwlZ4GtpZOk+UcNOTZ/aPpR0RcngqfH5gWxck8TVLMnksitAn0zCugYKQLfAuaCUoScdgbgU6j6H15yAS2FWyh1tnH0E3GhlPDCKiiMqNpZQioBxbSU1zzommqvbCWPwpgFTzkw5E50qhLfpQae1kzwE3ry879Y64p5u2b+Soqp5+CLW9R7EkOGAP4c3syGPC3Fcg0IbdpfRUxr3JZFcnpeW8d3yptec56KEHsux8t0dcw9458a1cPiajivKah4dfgYjShrfNxIPls4H31ut57eQLAPzp96UDq65cXcAobIGOQHcqduvLU+mTZlzVC568pEPk8aT26bcE3S3n6J1Sr9dJbQbkme97Jf8/yt2MJJByfRecWRKUY8PljKZUJl/d/zTXO+ONwxo3/UzkkeQYj8i/6fsNexf8qqXc9jJJS3J5iZAefU6KnfVB+eie4qtpu3I/rB0Bm7EnGPtrPFIvMSKDBnthxWg12yNyWVXgD6ZhHUNjELcmSLnhbTznjBZXP7GQTn9eypQ74V+8Dm2ooh13kgr1L2OahdLI8DgCmKL5doah5RgrgaUR4wVETpIllFr3tE2l/ag1wgbzwtR9lXwqSjpSgbuY0wSF4kGoTa8da0V2JKALnP13kgXFtraK2jokehpnSFN+dwnoH74rlemU3fdnHIILCmaFNZuKaezeNW999OVg1u7n/q9zg09LFTcOmsWwMC9YRmf+HnVjHCch3k8a9+A+el3/2Q6/Pf6k2nefC2FnuiGa+XxR/SkieUVjZCHuiP/64N7jqR0/EkvSMeue3VKVzyqdorLlJ/gTffOnQSWOU0H9LWuuDiRMlH5763/3AT2wPvc/UXbs95Jx0Rz2p10K8zdC4H39o12tqPGUY8OliEWZQMvGzH+rCHuHvXn/b4C9Hnp6bZWAHo0dDHgTR8plcKK1oL0aLhw7f1dYgYawPGAj6TQodLhLkBFASvTtxUSrSWQi8xPGx6COInR8rqZLlmA5v9qgnsTHnRNWJACz9eUA0g+l7kEV+lLeT6PvlG/c6yVt9X4mg7o0QHzHqT3g+r+YSRzshR7j47SWfKUPv59X4C6lPE9001KJGc9yeat7+C7FvouZXSvanhYGBUu7UxF+MyEYfRVEVz0WzlobMvl85Npl/z9V+38dQr+ZJrkleI8u4UOyBNxbfF8S4YRc007pF32kFJwdAOHGxIpSv5hKZ24bseuH3zmA+nwrd81eje98F3lSlor0OK8RJLb2pmw1saT/5o+sKR+JI0X30mP3E+fg8/UtuE9z1b0gcYQd8twiUZyiw94stfj4ZIuQHqG5BTg37S2V4Beu9OmlV8B+jT6VdduvYMuedcxmzveO7eAOX2rCf1GjzIXbrWge4p33QMa1YsSqGCBda/6lIzvNUIbAZ83rk0AdD4GSeCgMOPKS0TpaBViI+EFGfynAPSo4JQAev8bhLtLSeIGWZe7Ti1FDoVzUUIUzyr/Js3HUl5P/u0np0uvf+vuA6ov3JMe/NcvTw986C0jcE5zljznTeGbXvK4CR42a7/Rmnu8QPKkzKXce4BEO8N7k5m989LmJ9Oia1ErwzywKHm/rGiI0TgZ8u4Ng3APnYNzUhw5kC+/sVwZO+dNP3VfOvOem9KZD73eOw5j8kAOB+KPllFZo7/kWW+RYxLIammnmhhCBc+4mas08c05BhdoQ/K6c4Duec0DXahXJSz+WLOe2A4aAySjoWf4QT61AvTISs9XZgXo89Ey1JJ7Bz3UysVCFnAvTDF7UmGVvfD3CGjX7qSjZ7kIsgngx1NMPCBRSU5dwYLEYlbiuLkyvUvgFZmsxJSjyt+SAL1GsFhrZHngqB7O18vGz41DeB0Dx8KjRFpAe0QAoiI3AEbS5c+CutizSMq/S9903URzibE7lpaBB9fTM7bkti69ek88nwDUUZnU7lmO9i16yamAdNc8GkVFbdSWFw6VtBfRIKYZzGbjo0LSRNx3B49+crr0v/3ZvcrMfv7LQwpp4MmSVx7P9L7zEVjKOoLL3vjc6Qn9HjASU47YUvcD3lk/soPe9BLp8FvXlmsuUhSgt9e1d9PRyBXhmVpfeC5xzVD21ewNb35TvktJOLXn2ab0Y+oMwYRx2rvqg3MUuLfu6S8YyYLnVDLkzGEcjejOfF9Z8r8XZesd9KW2rdjuCtA3Su6UVIDOkwvlMSnJoaSEcZgkDkE5B+Sl6YmrLt3N7gUGG7fnJfcAjwVQuYCSLIUSsJsqxLihoTA2IRt4zXay5i8xV03BblUElgDo977h+t4ry2nRSnsUGp6wQ/p7/WqREUtldcd9KyliKDRNzq0A7zIvA5RL48BzlMtw+nm01M7kvjzNlhX3L/3GBcWd/8+7f+56hqzM7pzXU7Z3g//X8JepiiPV1zyB+N0bm6Yw0hnYxyfTCJhb/BrpohlQI0p5RCZy/uHxmzIWAtcQri5F6JS2O/vg6N/kZe467cH6Lt5Nz4kj3/vydPq9t3jb1v3OE8QR7aVKyEuxLP9unRXJE8rbivLpaDmXAEoByave2tbUel5Iu+VBn8N7LvEAaT/w8xrhr1EQrtGP8yLUrSQ+tXrQp+7EuvoToVpdZ2vpDqCjAhbJ/KsxwZyFNaCIc2BfA9ARlPYMRMjqrnkmJSDrgXdULLy9E7H+WW1o84zWsTytniFCY95S3xGQTmU8AbwEQL/vV64PJ3Pz5i1593KdiCLr7Re+j0ubkNiwKDzOc2y8ntdfjSBFwTgCzngHvZ+MMwr2HJsE3lFYtyh92p49+PqUTl51czrx3T++89m3KeP7+S9cmI30Nrq33u53Au0z30F3+4Ws1C2eXtoXngHI2/P0/eChKV36rNemo0/5icjwt1om741Tv3ND4h7zGnDO5RrxMmkN5p6kZOjkffRnH2LX+7mBN50njRPPfPdjYTkE3HfQm57uvScdvuFK8W56yxpE9jy1O5BjLELGasMyWEtyQwJgfN/VzDHyRCW2t2nvubgXHY96oUeXvT3/tz+j8D46lpOea6uhp1XWW8sp/XiGUtofkvxfAfoUytfXXQF6Pc0m1ejvoI84GXuiJ3+z3s4VRuDdUddAeW0COZOpQAIu6c56OfxBMOQRWlMuOQPSvBUD5SSQob5n2qyslwncG78oTCDzsgakLK+WZqlHxrwUQG+Z92A92L3onu4Gp2oF7NJVjqlREVPnjvX7Pc4jagJvFJNw1aJLNG85CmX+NwnuFuWB5rEvieTyXCWgjs+yVa+3Bsxb30qvGIBkxNRANjeORYyfnjFQ2tc5M/vxp+yH0YaeTOPRFWhA9BRu9HxqwF47Z9H2kWdK/UptSWvY/yZ52RlPLrTICUmVZ8k4rU58x45leq/wpkeMMbgv8CxF19ECUl5UC/XRKhsr2IpZFJPEha8LzTWAyna0LO9LgnEuqy2eMEX+on6FfF/SmSUdYQXolRtqYvEVoE8kYG31/pk1LSmQlSxI6Aw94/jUGlbBN9Rrx6+V98Bqzb3sWo+zByqmzNHK+i21qxklpozBY66S8ssFtKZgLwHQW0PcPc8DVzo1pQMVzCho0HIuWHu6ZY96ihkKYHGeZLygzMNBsC7RT/tNMnxN2b+4tvnv4lF/1m3pxFUvmtL04nVzxvfTd92WHnj/zencX1/ojiud/O/mwXDQjtFUUXkwwx11zke9uUTPltRO9pjvEzDPT6Y9+G8/NrivzM9/lHehnJKAW5SH5XK0DyPAn591viYa0Butr5QhbtDQhdh3kXcw4N7nzrhiBzO9M2/6Evxd5OcToiclvQfPcA2QjzgzPL4gfddC3d2rQS2dNdTxwt/7s1N5H10KjfeMLqJOyRIUNkxvUAWBuBUFhXpjLnvws9rFl6kjW+uLa7+SZbMU6O+go0I14f4hfxMd76PT7DxPufS9NlmcluW9CA0hUZz0O43XE5CepXHOVbWSjtEcNAOENI+WuZHg1TyiPd3Y80WeEr00QEdPPlcAaP00RTPPB5ULrb0aL0FkT/O905JEKLr3UJmVlGhUvvsy+EZ6BVCXALPmZbPWkPZkVrRym1q7tMaSMpA96pffcGc6eMzVUbJtpRx/ms27kx4eoBTejrlIcmPodc+/aYA8CNSjoFLzBkrnMzLvE0/ej8SBJfT5N7/v4lvmmNEckt1FPKv8fEu8TTr/nM4DvmQk2/P6UdeUe8mF89yr5nRVpuuonOtcnt9NV5LG4R7ZVW/64btvqU4gFz1T2jrTWtPzqN550sAWGn4subkUKJfGPtuLGB5hZvyOT60teR/dk/+RaXk6n9VGxGC4etAjqzBfmdWDPh8tQy2NQtzx+R1JGQu1bBeSQuCL7tfdYZf+q7WIYN4KC7bupVP7HmBtmb7mNY625YU/Yxb3IlyZkQUNEjjXqU+vaV7OGrC6BEDPd9BRqYwIDU+5sUAlKq7Uv6UIRfdB34aQxX8O8I7KMo5ZUq7635hGPPiNT07L9l5BAMmSbp0vGktkTWmt9iaRXJfx/cE/fEuhoOUFUr9p2d4LQ2YLw8Peo550Vt2jf2QLTOWj1Mexb96fzOynfvvH0pn/4y0XQra7/C4o4+aSWRwgRfhkpAznIZqHDMEd55n9mNi9836+PE17qdT11gF03FMI3gf7ieo+LKVLvmvHchBMvJtuGWw8YN3TMGBsk85nzR6J8IDaMugxL2yN8TXii4vk9qgdrFFeSxxH99SlcHir+xqPutTOXLw4SiJJx1wBepR685RbAfo8dAy3MsjiLt07bHgPVwPfNCh8L70wTGHlW7K9W0AWiSKFDFvJ4mqUIFR0ct+aErIUo5M87eGN0VBQU8DRKq4J7CUAeg5xJ9rTlGoUBhQKXNkUlT/SD5076jWeAuuaAjfClHlCZEh0GWvAk6TQlX47AMEV6nJmKCSOednLb5m3KHTS6I7KfgSYk7JfQ3PaM/v0NNsDtz0/PfinHykkCnnV8bk16eWOme+iWzxCjc4QvLPSmeY8VlvrfQLmZ+98bTr1/ltKAjhNLtXKJA8gS7w6Qtcon8Hz6/FTSWZeYOjy04743BovOpL/6FXn+VZSSgePfmI68cK3pXTFo2qnt1j5KZneNfBsrW9UVtK+iewvKwoq2t+cBA7xyjk7rGxLCnknTzpPIlfWkYW9o7fd6rZW/nOZOvea8b3kyYs1xL1yM00svgL0iQSsra4miStaXm1rcnkE5ByMUwi8FhZfhjHzrpjzLi8xEFKUoowOBVoteIiujHRnHTPEa57XGuVPG4+l8GGdJQA6ZXFHhZ4LGPx3lLZSuSnGFutKhkrfDSYJtObr0benMfEU8qRLofBG+K51vqJnSGoDlQLcEw/9npemg6e8LB15+O4o69J6YCI5XqbpjqV0Hz16QAIeN68pba1qlMJS9oqUvuYFb0/psc/1utzu91P3JQTmyK/LWVOe1Mw8+2jO9hx4ScU7z/xM19Ab25XAG66rd669/sv3oL4igniWCJQnjj96WUonnrn/3nSP3hp4r5FnFl+lPVETUWcB+TkPqZY4rolfThiY5CH3mrOeY+tp3mWE99qK8ANehstb73x6+88aGxrpOG9bAXrLqrbXmRmKtQ/kq6WmGOIuhTJ6IY0TlTEE7Ryw16yFd6c3Alg9BSiqCKigCjKj18xvwCCD2d4tgwT2PQco95gt/84F9lIAHcHWaM4UNhrgPpKg4cqH6vFRiKIJNm2falc0qPlWD7q3ZpLCLwpoDEPFvY6eL6Vjz3LOwUPL+ZHWic9RUgpKxvf8NNuzXtHS5UbrEFDPWb5nyfSujb6R73uGTG/9tfUbGQQvSemh37tjAEuhZV6zw/fcMHr3fuA951EqDr/yaKgp5MQve54CSaGQZ3nKeWTjawq8ZDjjl8v7eh1fGbTDs7qz6PfCO/DtdDQKdoX6uV2R0qU/9pmd8qaf+/Dr0uHv3ZjSgxEKDxPmaTKR5lsDpL3eLZmIUTNRI6vXZ/S79ezaNjO8a15zLZy9P6uOB33KnXUPZM+5dtwwhLoHH8cK0KM7fZ5yARV5no7WVi5QwPWgW1l8A0TUsrqj55yasrzlWmI5L+FckbUKmI16J/AptghI97wCkiLESTpF8cHxRZ+S4wBd+zcuu6dsS4qepAAsAdClLO6tdLUsuRJNNCUocGz6IpErGwjKo+sWHYenPFM7A7pyN5SkETud19C6ND9jZlm+X/GM5r/36Wm2rMT/9e/dmOgN9Tz+kGcIPefSegU9lt4+i/IPqR1c9x5gXJLSpU/dnyfTTr/z+9ODf/65UWJDkl1lH3aGc87bpbOunf9WOouGOG9Rhe+S0u3xFo1X979L99KlsRlJK9GjLvES6u/EM25KB09/VcPsF6py7z3p7G89J53+1CerO/D0kwHtz6V0vkvUh3Ituq+09ceBcyPBnKAvSiD0qEfrbaocgnfLiy4B8lqQjuumGVy8dYvsE0/uYxsrQN/UrrvQzwrQN0tvGaB7ilej18SaGnrMJQDf6lXn/Ubu80rey15p92ijTJJ7ArCIZWEWldKg5zxS16NHxBBhKc493VgIIf+NM/Wvf8W82bMP73pzojvoGs25AsDXIQricV0lhcJqq/Wbt6enREJIQtIS0oVxC162wdoLnF0ao6awW3ssQnOis6QkRBSHAb27ue4LUKen2e5/582xu+l8sha/017+aOSRyBdaRGFey5PP3B9g/sC/+ul09tMX8gZY/xucry5/gxbmrrUT3efaGZHarQlD1vrnPDSq/It8c4S0xyOWwDgllhvkmxPkFfG5tEfe9CM54oJHEjjZ/iU+T1SMykQuD2rkvwfGa/rXzgCPJuJJ4ZqSa3qHdkPfEaDnbmtBuCTfIjLXi4CYumYez1oB+oY2WdfNCtA3S+80eAed+pa8J9bbuBVjlhLISffP8X107bk2kYkIADbiiRwwKZZsqwgc5c5fhLFZVkEJ2HiCqoLcfVEJaHOvunWnsTVsWgKvUngkCfQlPOg8izsqCy2KhyW0tG9FYHbPzXkCLbK21l11a50jbXv7OQKgUeEemF0x67IyKE8wcyUwAtBzGXp+LUoH79xSO5d865PTZf/wDSk98nHRprdSjp5mo4zv6iCsrO65kpRcjsuODc0OwcQlV+3Xk2n5LfOa//U8OmtJoCmFDHKCFxl5tHb+kdacl3pKuHeOkCfys23x1ME3MlrQc2yF6V6MZR+Mv2f8RpLKMogu8SU3QPYTT2kXveln3vMz6cwf3x7eVh4gH61zpmnWhbI86/7ddwYGO86XpTBlHKRm7JGi7aQJevvQI4oV7u7V3eR3y4Netm0X5t5vc7iDPsWr7sn/JXRXjba5rzWL+yZ33upB3yy1c4j7P0jnyxu2pHjl/0ph7Xxk6CGpeAPXAt44eeuptZqwdgSfeI+3MDUl2VaR8zkTtQDYrcXidSTlRvutZ6oM0CGIr9kkEriW7jGPhCWbs9afpxR6zLzQnSmaSwB0nsVdAseSUK/1CpU9AgCc00xTVCxg6SkbaHBqjXTAcaIiVbXX4L65ZJQYXf7kHXDwPgFM4L7i66PuZZaHQDIOSHt5MPTzKe3r02wDmnTgu/coWUni2DOOfULRGaOrIvwjj/34Y/bnybQz77kpPfC+15vHysqj0suCSnlUc46prAfeUVZpf0u8UOPFEj+iOdN73G7UEU9ESeCa8LbyzGPB4pC4cmBY6AbWsyiSWzvoTU8fvzUdvucl6dwX4qtuySiN3uLv7PzXGFklnk18m3/z5GJ8xvGSk3N4xLsKl9RAek3m9khnkTW0+MWcgF3iR6sHPbKK85VZPejz0TLUUn8H3fKa85bwXfSgQmZlaZcGannVc3kO0CNgXerD86pHvZHExDzAimPQgABXdDTBFVpcKIR3F0fjEaIEaufkjQu9Kbz8EgAdPeiSN2eKEIkIMMkYYykk2ngkI1JpR3kTXVo7jJqw9qQ1Nw08oTFJjBggz1SXebl2j1nnJupt8fZpDV1wPHsD1D99Z/rSb1w7uJ/ez5t5yd07615Ie1BGRNaEn419ejLt8Pd/IZ3+8M3p3F9HZnmxzOA80dOEcOa186P9nts8l71qwrp5/Ax5kwaYepnYGS7rZj28MiMZP8M8W8qF0Q0GPxFPtniIaLw9nzO9797d9Fpvuge0pLnXAmYOsiRZgYYClJ3hda/dcEJ57/30GbqoakJKHMcbwCfWLE+5FgLvnX++R7gxX1u3OfVXiVgrQK/aQpMLrwB9MgnrGhh40KWqGO7IhbrkQQl0r72THv1dyvge6NYtooUOL+GdlICqFgZWKwS9ic7lfY0yc674WMBuCYDOk8R5oZTW2DzAlr+jYofrJoJVYbEi6x0poyWT8vZH63fLEKGOl4WmDvoNZKgmmktGF1QMqrxApMDDfc3cBnnxtPPLaXD5s29Ox6+6fq+fZgvvBQ+kBxvS9tBAEb0ipcufc2s6eNKLg61uqdip+5IFzE0DmBDRJSnH5YyzyBPtvfRWCkg8kbdl8bQIjxqsq/HevQiMWeSSxgtK+5iynTpFjzknJQ9vZ4McedD5BPbYmy4BZ03m0Z4gXli7hgjsavaJJFOXAu08WRyf4669m64Bd/pduqMu8YMp99alPSDJSIsP1eqTua01xL2Vs7fVWwF6G92aa7lZ3HPLHIhTT+hJbx7BhXfOyQvOk8NRk3j/XLqPPqcXfcBsnLvn6KXgHkrrPdooQI8KLyssUppP0VtAqSblrlcEFc9sr98EwuC9bcEV8iUBuqZIzuEVkBRnS7np6VfxvBuuyah9UOg9us/1XfKClL3FksaNPFJMYS70V8AdVxpH42WhqqWvzKM66YHKZq4rnaMaZU8z3vC54j7IdQ6+PqWTz7otnbjqRXORfLF28Gm26o7QeDsTaO/HcbLLzL4nz9zlJ9PO/GU1FcUKPEqG82n8fXCWjMzlpRPvOxuJpjzjGZ0CljRjgGT45GdNJhi7msbfhIcscaVPbMC4XoN0k7zt+3I33eSvQJOIQbIGYEkyU+Pb0lpH9aLW04fe810B5Z4XvcgjuINejjq7hz4XELd0nKhstdYxsj9XD3rrDm+rtwL0Nro11zIBem6VlCx8B51/471X3Efn1bzn2KSyU7K6a+HthZmBQcK7f94aomt6UFgWWQQ7LUqQBuAlkI4h00QT6Xf+zduEGsOl35cA6DnEXVPwJLpKQN4SIvQNFRirT06nFs/uSDAq91E1b1rNfo0oXZKSTvMa/Be8fQPNWMvAjMoyhcWPtOqLVKmx3CP9c10vmZy01t6Z3CegfviuV6ZTd92czt8LxlnpGpR06LnM0OSExyz4dwLm3/3jKZ382pqaGy97/tN3pmhm9rkGF46Isp4ac7zX0ljROFdkAYS0R4GUxj9r+i3ghGmQfd/IW3ijOakczydHuUS6MlrVvp+cJZ1sg1x73WNvOpFHk4+47oM1Nq6zePJfk724rjS+6N6acs6kMPfC0o5ekBP0v20CeB7aXmjF3kKnv5cE6NKZk+S/to5T1mcF6FOoV193Bej1NJtUwwXovHUpvN0Kga8cGYa4a6A9Nxu5g05lJAVGShTXCybmOUaQI93h9e71Ihmi3gguKEn5wd8qSTwojgnkPA96GQN4zb2/rfGhUrY0QLfWwVQ6gkRGhQYVHWk9JSV3igKiJQWUrm8EpzUq5hmWtHDUviGmEQ/OTpederCnOu239Nl5ySU6W94XDUhoCoOm+OG8NaAuGWdofBmof80L3p7SY5/bSv6N1BMzvnsAfcaoKprk5de9NB277pa9AOan3/2TiWdmXxJA9IbVzlDV7zlmrJvjahbfbKiI0/mRvMi4SVuBO/JQPOde3/m7FIo9MKwWwcYicIYJ4Edsqx9TIcAwQSjyphN/d8f27733pCl30yXgRWBVk2URoyffSxbgW5r5aYA894sg3M3NsfRghfa1J9cG51jwsLcOtUYmisYApwbTAAAgAElEQVSzho55nytAbyDghCorQJ9AvJaqVQAdO5Ce25k7rFGYFAJ3KsLD5Pk99Vq6aMB1TpBTMyYLxNW0M2DShhGi6CudddjyplM5SxGUGHipx8K76d9Lv4MuAcsI2LMAl9SmpJhr3gNJAZ6szMIzg9a+1cJla/eVB9oH7fF75+zfZd7kZeeesGwUor8VCUEAvsyVefE0WmplSKHne9Sjhaek4H7Pf+en2S69/q07fz89/DSbJBt6xswisTxidt9LZvY9oE+695705Vufn8782cW3zCUQyZXTIAlCxXr+Zd1ZN0A7nv9Qp1BIm5sHniN9WTyb6kfo3bcDCSqlMH+ePE71oOfOCZx3/1bnc0VKJ1/wwXTk0ddEpryZMh+/NZ36316S0oOx7qI8jj+9JhlHNPCNclAyBOA+W9IARuOxAHsug/fUt+lJ78/DwYWQdu1/0t30soVZvdZs8JKeg+cztuNipVaAHqPTXKVWgD4XJYPtjAA6esStdjSALoU54dNtwfFpieN6Bgr316cAc2lIUni75lWn+lIIMRdwFpgpjBJOASk69K1W8dHuKaLHvLRfkRHcmq9IS+EZLl5uaYDOFTpOU1QO+nlVZiCOKJPaGDzlw/VKG+cpkiyuJuzdoqO0zzXlThTckgTovFvRMWrGEG19gqyoFNPOrqWYSPuJ1vPSq/fj7e4M1M++64fS/Xe9TyeXdAe9MoP7vj+Zhry6Zm95ZdVrSkJ4uhRJM2pfuWut8UaLp3NDZy6HAMubm/ZdMqB64xDbkpA28hqJHuBNl/LNlWoM1Q/+7gaT1+PY1S9Nx655WUpXPKqVHPPW++wn0qlfevwApFsyDNdC4uvWAD29B+WKZPjZBCiX5sCfWiPP+aY96JH75+LZ6IA3B+a9TOrups99L93SA+YE7CtAn5cleK2tAN2j0Mzfmz3oGpDX7qzP4FnXksnxpHGZPFNBuuY17gVI8M306FLNIbi8vjTlroAO8LiqypKwhpGswQistPnODdAzqLj/Ha9M93/gTaMpSYofgixJQeBgSwqd9BRNT7mMKLaihx7uofN1RQ/6XNER3p7D7yiYe4950ehJk+3+m+928gRy0YRWmDwOIjU8QwgfcxQcFFqznBHYRpme4dXP3/cFqKe770hfvP155Wm2gYKqXXWie5rIOwC47xMwz5nZH3j/zeno4cVIINoDkueP74/aMxMtj4bkwR50kn2Wss750oxsHj/DvZ/b8XI8ROfs8dr+rA8umQ9r9V7enrFf5ENcGcU8cwOWJd17JzaGRt4rUjpx3Q69QHD3HenUG583leQD/ufx2Ki+o/HRpc6T5y1HIvHy2/ac473zQiPBk45ecvK04xNtZX9PBO+aASei40Q35ArQo5Sap9wK0OehY7iVKoBugXLNQ84VtEpvSp5E7dNrmM29Nbt7hICWZzLi7bMEFXokev3BABwt1mUtwZCWKK8wbiF7e2S+ljKXv80N0Km/s5/6ULr/jpvSA//XhyLLOshAHqpAOl3gmSD0TqGlmRRaTQmJrrEU1s7ve5f2GWhqXT9UorjwtdZbNX7w+NIySGiF30lnWrMFILSzxM+UZDzA8fMxS+GbVN7qz/KwlkRyV92cTuxJlvL733HD+A11K0+JYOA7si9PpqWUcvK8/Jb52S/JkRSSZyh6XjU+I3o0uYGYwqwrrrVoPLyG11nnHs+Jxssi/WlGMsmYGjKOYPx6IQZ7ik3TQBXv+iDMnZpi99K1OR5/0gvSsetevRPe9LO/+rh0+lOfdJfD8oqqa+zofJoOhOsuyUmJf7uTWKjAtgG6NS0JvJf1YnfRox50qZwFxC2+xr/V8knqcwXoC21opdkVoG+W3ikE0DH5D4LuPGZMIDSDx7w024Wwa2RBr3o0s3vEa1wDXqVkaQiCUDGiOhGgzgUggiDL01uznaykcVKo/9yK3lIAnWhgAXVLUaihoaU0RJUOz8LsCbMCHrP1XMgjwPepFP3gXd+I0kICqdLVjN5LTh5zBjgGXr2oB70boAhshKsjHniPzNcysuC5pb+tayr7lPGdnmbLHvXBix+ccJIs2KPM7DTHdF9kN+hl5uLT1ENtVBTxcNqvtUY5j39JALl1zpZMxDPEKa6N0RwHRb+Q4TkC2IVl7vvoMrvzsy/KhZzp/XvemNITbpi2sSbWzi8PPPiGaye1gkaZlnXXeLYUfSTJQE8uTpqgUFm6f47h75sOg+95g3EP3cv6XvYtywTfch9dM6xJZ4KTtnYNV4A+966221sB+mbpHQPoqGyht1x7J53XsyypAc+6BdSj2d4l0lqhgVg+CuqxnncnvRfegXfFNUtyLWPjSl7+t3QffaD4VBhcPMVPU76WBug0n8O73pzu/53/IR3+5ZcHd4oRrCGIskCVpDRKHgcsJ1mfNS90jdKjGZf4XitjEbzo3vpFWVTU6MFBetmLGNpeBgph8AEluvRvnCnrzLSep/5cQci7tHbYB/69L0A9XyU5fddt6YF33TzeGmjc3SNgTk+mUQI4a0/Q+loREh7/iJ6raDnpqhYZvcJnXDGMabyS738+X8/oGJ2TV46vg8svuyfWiOeUthUPex8x0w1ATR4X1GA5f94Fb/rha74hnftPn/PIO4guw70uyS3JAOoZX0hG9rJKeFJTM4q6a+7OUC6Ad9B5Ke49p6fXJI/6JsE6hrcjyMbQ9nIGnJB27j23APhIb4bIQkkval23FaA3bujGakH21tj6Wm1EgSoPukY/fPeWykn30XkbE4H5gEl2O2fOEHcPkGPytV45McBsWDFy9qoHJlu3uhYaLbWn3W0uArYC0NNcNgXQaS4aUOdzlQB0hLaSMh9RTDQFlyuRktJDNJeysmtrV9pkXnbp78hctTIIWlAIW16Q/hvzbnHajELfhUGgEoHKu+SZoWamAHSpXwmgREFLBuoP/cc7lgVaoLea8b3jBfv0ZFp+y5xnZqfzZymSnrFNUmq1s1x77qK8pfBlyPeQeUCJuMme34CRuPAaSPjJ+dPgnNZOpKE8X5OIEWRw7vDVCG74KxPVB9RfbUcAwq/0w0V2KYFc6WHLd9PPvONH05kPvX4w2eieEuWLRbfA3rG2gXXOIue0YYuFquzSnXSTfvBOetnm4HGv9Zpre8UC456M9b7nca8APbQ1Zyu0AvTZSBlrSATorZncqUstJJ4PyQPvxvC9sPd+GAJoX+JOupX5vDA/AKtTBB8ni9ROqyWyV6qE59cGfULCoSIQZ7qTvmmATvPiQF1TNiRvOqc1rYUnVBC04nrS3x6g69fLSFCEc7GSH0qGGawfVd4jnAfBMq8z8rwJey7Sh0Rb9PJoCkQEPHse1RoPordv8lz2JZHcAKgfTWlfnkyjcR9+5C2DZyAlpZ+vl2SI4t5F6axKbWp72pIXZph75g0Qvl3OMPtdOuME1r3EcUW2GXk3aI5YbqqMss6+xFcsQ9woMmfAiIbJHTWwznPQlTnDAPv5Uv4MIynryZduxxB37sOvS4d33Bhmq54cQ34m8jfDQYOGK+Sl/ExFeGekTHjyUNB6as3yqLf211pPAuHcky551QfHofOwt/Yfkccar9T6XAH6HKsRb2MF6HFazVJysgddyt4rJYzjYfAV3tUoGM/EsLK8T83sLhFbCiNGD2YR2AzAav9uUc5I8alR9mo2TesdR60PDeCRMN4WQKfxeh51CczVKgoopDTFwxJm1nprayb9bpXFfRvdN1HjU0TB4/u7n3Pn8UIAxI1g3jpZ9NM8cBEFz5u7Ni4PsGDf+wTU071/sVvvP0sb+dR9KWdmP/V7Qoi+svFxTby1p70cMfx4Z83jyxjGzpNDRgxx2H9kbpIskowUeKZVWVH5xKVEX/5btN+S9E2KIsBXJgoTGXrY8RZOmZuQ92Iw1q7MwTc9MZ144du2lzQuv4t++0vMrZffOD8f8IxzcG0aR7reUBZIvFbymuNgIzw6UsY7f9J36Rk2Xm7Op9ms59a0b15G94G+Idw/95LI0fcWXjFFh1oBestuba+zAvR22jXVDAH02pYxYRzW157cCYS8j5piXnL+jQD53B5zDZRLSdQksF7kOoQV15DXY4ARQeb1p4XuF12CPeeF5WrC2qUx/M2ffntKj32uN7zFv6NHHRUOLlDo35IiYgHFgUCE+8oDBQ4yAnue/ChxtKsM1u/RtlHgttQrdTqNVwQ1eFcUFGjpnHi/4XpZ4/YUPcuzyIGLBM69tmlcD/2el6aDp7wsHXn4jryrXLvQ2y7fAfP8ZNqRBy8+mebtg+j61J5/iZe0kMgzHHM+ztufM0KG8zCNH0je7tr5Rjz4/IxJfFpdT3SNE0sy3kvHuRY2xbRaWhvqMwPz48/4+a0bsc6+9+Xp9HtvqSX/qLzk+cbfop3guqHcrVpL1mn0/EbGiU+zSWHum7x7Hhlz2ZIspF3L8s7LSW+oe31Zuqr3zWubvq8APUqpecqtAH0eOoZbmQ2ga550GokX0s7Aueg1D4D3qLc9muk9TESnoARcI8pQpAx2rQlIa4jeXfvauny+1hyQST/ih1+bjj7lJ+Yi++R2pNB3T2mQOo0qBFrbmrLrTdAyJmmRHqUv/ozTjE+xRQALelPozuzAMCG5qiqyvEc8PBjZMAVI45z4ukngocbLmu+nP+SZu3VuvH25C99zSO+XfufGlE7Jb9hLRrlWoIHrHdlbrTTSDGz8XPf30KWEaBzIcE8ynq/AeZMMHVqEylS+yc+M1JbEe+i3DKo0b38fAj9BMyWQXsbYDe7g0bsBzIlWZ9709HTm/3xf67Yb1LPODskySabVdo76Q4Sv1/YxV3ntGbYlwbsW0q7dN6cQ9wG/Mp5i87zqGt/ja68ZzZHumg61AvS5dmisnQlsMNbBWmpIgSaA7r2HTl1IT68FgHbLGmmZ3LMHPf8vGuIe9bhrXuYIGI8A70gZTRGh31u9rRKwy21ipneJBuhh5/U8D/tl/9XV6Wt+6s6W5V+0jhT6joAtEsoXVRypnOeF9Tx9tUTR1qf2WobWrwd6VGBKYackHTBsVLlX63nXpHFqikDN+lpKR+RMSiDGA+37kvG9dk/OXv7uO9IXb39eyk+maaDMUxqlPUJtSWDPM7zxOUYArOV9spRizlcKX+avJVQQurZ/6dyTkl5zBqND1PhMtP5gfeEOf98G3SeHO+dlrTudgxLC9cA8f8tPq33vbkSKcXoc/tMj6Vx+KrH7X6v+YdHYkpl9PUE/9IA430sen6zh49H9wstJHnVsZ0lQ3jLmni8YyeOkZ9dqALqnE+D30F5Zk8RNWe6muitAbyJbe6UmgB7pTkoUh7/xdiTgzt9bF/rUPOYIxi2Q7gHyVu+yFP6tJVMrAoZ5KqMKUITpSZ4/qZ4V1j5inpC0i4fs433HyFbhZb7hFz+zsyG7BNRPf+7LZcioqFvCP+pF57SIAlqLxrlf/ib6oP1gQsBegCue9egaa4pW374Szk8KWE9D7kHvKmtgo/SZ+QgPM2X9aIA5ApSi89bWlPYQnz8v27JnVqAurwo9mXb6Ux/pC0QiGyTPrMdTJf6traXWVsvaS2ebZEvPo3kGbSX54hLgDM8wAikPWNWcNc43+RlDQwmWwz4G/EYbgPYMHQD3o5eldGJXI10C988j9Jc82JaMlGTolH5ojyFfxd+98xsZg1aGJ4zTwPqmE8d599KtO+3aPGuzvEvtaOcRy1rrtXrQp+zW+rorQK+n2aQaiwF0aVRamLvmVffC3gMzj3rOA025Ray7f9Id9YEyHnzexhqEpnBMVfbciRsFouHu1MSuetFpfPTm8/0f/F/LO+pc+PdlugRHc4E89JRLnr85lQ4rgsKLgojsTyqD85Lop3kftTD80gYmbzLu8WtrxH/Xzk/NubK8QFxRtQwGNWt8ybc+OV16/Vt31tg1hafU1NWAOZ4hzctrKfdz7AtNGa3ZW6oSLWRYH5w5xUCnyaoeuAfC2y2FHA2ZyEOluUeM1lYZCQxY+2g0BuNaTX9VXXjv+cilKR2/9qZ0cM2NKZ382pqtu7Gy3Hu+SeOMNsGavS8ZBVCODPSshuSDUxdCAu34djpPMje1v7nrT32CjY9HO6OanPd0hRWgz73adnsrQN8svdOiAF0Lcac5Ssni8jcJyCsgHr3oHJCTd5x70PG30t2RlGpC4T2vugZwpKWdQyBqAI57iGqUe1XhM56H6RlpRYZ+rZ+H/ZPb0omrXrThk1DXHQJ1yxOGCigHZJKCbgFwy0tvtRtZUx5FUdpiLy8gII4kOowo1UQbac7StxGdeSInKXmT8gyUqDQIwB5p6tHf2kXosZUMFJ5Rx/uO/e9Lxve60+eX7p96u+stZuEIqKsBDP7IhiUkww3tOYlveOcl0r91llEeYXRUP6YGTc2bay9DIMKlRXZpBhdpvQftIz/pB3XRJd630ZUtf3fl6Fv2mO86MM9Dbk0O52V05/vUAtGcv9I5y+Wzl5nWRTNuavJBi86InI2pZdBrbrWn3UufOoaa+lp297IuZy+2hEnl8BuVr/WsR3QEa/+sAL1mtaeXbWD70zv9am5hEYA+JzCnxZGebmMLt2SCuBpAjt4HvrckAIS/FUYXzPLuWSM9MLGE4undX496YPcBpJe1+sI96fRdt6X7fvvmQci75gmdymskS7NlHNC+aUq6tF+LIgTetug6aoBCUqA9BZ7X4YpdH77OHyBW7o5GAdmADoJU8oByy9lCAN+DoambZo/eUJ88VZaZPSeAi/wPzxQaTiQ+iiBgsB+NTr3917JvInPEMtL5H50/uNJSe33JmyuNCecs0SD6m0YLDyRiPd4f7o/B2YdM7/nP49/xgnTsuldv78m04IbQwPkcTgMagsbTvbX3+Ks3Rc5LUW54dZf8rgH4TYP1SFi79TRbLRAf8R8nukfbP1yfyOu6AvQld+u47RWgb5be6S+ek87XKNuzDY8nmuMe89zBDF5YGic+t8bvnKPXHL9Fw+O1+9sS+O4FE3gna+hqAXPuiURw5gH2yBik8EeuuPWMFbJ/F8aq3HnU+n3YP7w5nXjWKyLD2nqZDNTvf8cr0/0feFNv+deUEEmZp7XingNJqFFdLqhQmCHQ6706+WkVtu9UZRae0it9sisYuN4e//AUPmk/SwoWCmcVzHAp0nnFW8ag0ofAf2cQ0IwgUn0NhHPAR/Os2T/RA3D5s29Ox6+6/isv9L0BmEtnyFtz7bvFd/F8RvYF7v/o+lrlPONxdgOXfSic/zn6t+bN+RrufzwHUSOGxgd5+55MFNcV+EvhXymlYzuWmV1ds1P3pTN3vDSd+ePbSxGPN7asvWSA1dY/05iAqwamLWOPJietsyoZ5Sx+W0MDC4TT/fPcHoa+1/TRUjYCysvZUJ5gi3jRW8Zl8VzvfK4AfU6K+22tAN2n0awlFvGg8xFqQBzD2BE4SCDd8aLXEEYKhc/1vaRxngIkhQRSncgddWyfhGdUQEkAQFN4auhVUxYVvIgCoGUKv+RvXpYu/95f2fmQ9164d0D9yx980wXlxwBxUSVGU0AkLx4vKymyEc95dI/jvvaAOu1DFLpmf06Iuub1G4xFeCKKf+drFAFaHo09haOnG0/Ypfybl7XoFAUtuY2vtERy/Mm0Gj4lrQPnlbgXvPNG591S/vEMYJvWOtassboHhUSPUpLPMpcuzHhAh8rEcpIHNXL+LeNyyxpLPDSynoN6mJyy+/vYN+/Wk2kqfU7dl87e+dp0+oO3pPSgXCoiq+eify8zQUZG9znfW94+k87mHPNoaYPfN990RncLZLfMpfCzDtBP9arX9E/8YQXoNVSbXnYF6NNpWNXC4gAdR2MBdrxnjoB8hifatDvqGmCvIqZS2ExoJViwNQ/lXMKzxuPnzd8L/++VYCNEOhLSv+9A3aMjV1Za1scK45scLigkk/L2dHS+LeXQsNHTC8JNS9sEzp3EVgPDFj2hFADQLWvF5yzNhQOi/vxAorsWumGdfQfqOQHcl37j2nQ+Pw+lRF1FDZsSPbXIDgQQUUBRlNlATgTcH3OstbTnBr9x4J7PEZ4l4fxE+HZ07BL/qgbQTmeWQVQ7x5IxoRj3zqd07L94RDr+7N9ORx59TXSaWyt39qNvSmf/4IZ09vPj60plXwrnZy59Q9r3WiSRRqDac8P55qaJbt1D59+kxHAcsG8avHt00sA9AnPp+bXok2xW1AvtoyLWO6POsf+Fv8/izWD9PpUCK0CfSsHK+hsB6Fr2dhqrBMzzN3xvXXqmLQDa6X46/29unieM08LZ5/CoS/d3Na+FtXyWwLQEmKR81CiVlVtKLT7wWlZmrae5fyUB9VoFlAsvyUvnran3nRQ1LQxeCn2V9uQUxT2qiEkek37jYcblPoPTeGuWdrpn2DSPjEVraw0tQOApotgnKpxTjS68/wzUH/qPP7gXQKMoZ5++Mz3wr346lSfTAvy/lX95HjpqN3KuWsfAwQ3y8SX6tQyuBEy5SlwL4iQeZhk8aiNaJDp7hhYE4aoBsAMGR78upRPX3ZoOnvTiKcu6mbqf+UA6fOt3lTfOtWtKVuRT7fpakzJ5NqvY87bMt+m6BWVfx6d3K99NryX6EmcMx7BLGd2tMHh8C50SxfHf+dwiHnXksRx8R2Tk6kGv3dHTyq8AfRr9qmtvBKBbo5JC3SVgXj2zYQULnI8YZmVWd1MoVSbamUMgaiBHAhpTyGrdacR2vXuNmIDIo0MG6l/zQ+9OB4+5esoUNlaX7qhT6Huk4yhYHdFayYIsKaLRvSsqvkZOAW/9BoJceJ5I8iJjnf5v4V30wXgrALun4EfOFrWh0VsD7pKygm0hMJ9TgXzof/O0dPCsX9vZ++k9MP93H5mcp8QzaIqeU4iosM7OHOuieZM0b2+Ep4h8ubt7Ln3jYe5SDpHBFazO0FUzDs2TqgHzqYYpqb88Xg0oDMpfmtLJp+72k2k9v/j0nen0u38ynfvMx8Sks1YekRreXbvW3KAp0R0NnuI5dYxykoElIvvmOLM19MhlEZzjb/nvbXnSvTvrVmh71GPuyVuNnrTGqwe9dsdNK78C9Gn0q669sSRxCLoLJ8rcxxiy5DEvHAueYuNNKKGO2nNsmodcepqNuvG86l7Yt3YPGC3ZKChbPOia1doTRt736o0GFSL3lSN95HfTL3/uLXsP1CP0tjx6RKtaI0ykX1GIzpDIMWqA0JRqTbjn37kiX+YYGK/n8dboz+vxMVm01b5p3j6cE/2t9R05O1qZXXuabfBkmpaHZEFPOtIJaY5gMnKmNK+xZziYsq4tdVVZRWHwwUa9eUkGuci5itAagSDnlRJgpO/9t5P7B8zP/vnH1JXRIvosA8yAr1VGv1lbhPN2ySCFdWv4Jq67ZdiS2o3ureAR6IvhHXT6wJPGFfU4ILNq+56rfCSsXeurBbxr/GMF6HOtaKydFaDH6DRbqa160CMAfbaZXmxIe5INQ+ELk5y4IzWwLiWMGwkjQRDOYd3WQHsNqaV5Scqc5GWP3HernWcG6g/9727bWe/faG1ZMrmlFAFURElhqVnnETgRIkJKu+z3vl9QMGrXVBr/aDzsfKKSXxQy+i4kihO/dWBeagu9O3ksI0MAjEdTCi3DGZ+jZBSQlNopa6rV3TpQ55nZv8wMuprhNk9kg0CdnydNwa89cxEjEV+vyR5l4dziee6BGztPLeHStXsUjY1Ib/53Lmu9gEFlEZB7POaSp/7/7L1v7G7XVSZ27Gtf/7kJExoBnX6iEs0MAzOqqlERrnA8MIySMqEJ0VA1NHGiYYSQIhD5EHUkTBw80lTMQIQUKUIahJ0MjMTITTIurQuidWzqNFIq8YEZINCO+4W2UBNPwvW9vva1q71/Z5+7zvM+698++/3d+9onH+L7e8/+u/bea61nrbXX/vB0xzsemaa735Id/vmW/+pz0ytP/vT08pfOMrNb//OuKvXyaa9fj6/hWjDemQHoWJ8ZgXBfIE/PzClS1gPnlYW9eiOrffn7mEDd85IfyFvI8C7D3OXb6JWuFyIU6Suze9D76La11kY4tLX7N179AtAxvHilAAy0li7tYqI4zYt+5KfYvLvplVmWJ0AG7UorJByt2ouwSmbNtRQOy0J9DJAYAfHsxGXvMEsQ86bv/eB06d0fOxmgPv3J705f+8xPTld/72mV+UTXRlNomhJyTO4WMbpk+2cg1lKymnKFIGdFlzncffGqC+COwFfrS9ITvac4R+97hiYWPSzvUKYPLFsTyd13zs8dIjCXg7Kiqqo22z9bz8ur7a+2HxhYjgAKy2Cqeectw5BFAWuOB8q497KA82wmA3raHmbj0ryrDHjJ+gXQNPpYvFPjE6XOnW/7m9PF//pf3vJvmU8iM/trV+y9bzkFWLSebE27osYMNbeVKxMBnckzRqnnCoxwmT0l27T0IXnW+zlKX81jAvK+EcVqbfGqsx4ivGr3oMfWZlSpwLEe1dXeTqHATfGgW+HuUgFj3hDLQ6J8szzm2i6wQt+3AHYE6V6ClipQOpROzwruCSfKMBVvS89JknNi9+GyIB3HcGpA/fpXnp4uf/YhE6i3OTalUxNgbG2jIN9bdwyDlAnlrNDJnj2CChoDEPI3Fq56MG9Fwhwoi07W99avrNeUujbuyJxb/TLOpphFPD00WmD26OOYGI0iY5Nlzivje8k2/Rf/4kPTVDzm+D+LD2ovgKgM/gzMR5TAKK0kcIyA9Z4zKcdrrXNG4WVAadWP8y46A2kezVA+WQBdnit57qJzzLRdgPmd7/ynt37CRALM5X7q2lvkCT6kcebanbcHUE4hT2VrrUaMGHqhx6MZ3SL0i5TxaNC+Y3b38nt7Mx0B+3nfSWfZ25nnXd5Jl9505kmPhrl7e2QH6NEdNqbcDtDH0DHcigXQPZAX7oQpWtJrbmVrZ++jW8pYIsTRCmkf6Tn36MQs2xKgauuA4Mjqhyl2EfVZXqUAACAASURBVCDRI4S0+TBQ3sac3Wul/O0l3GrO7qqBmlME6l/7pXdOL/8pQyh5QJFV4r29it+taw1sbbPrHN3TstwyZwno5kzui+dcVpiTZFmGMMvbo4GmnrPTziR6SNlZZd7VyJnOrrEsfyygvnoyTZMXaLyV5byXQjonbQH4iCFMBRTKeCyj28hojNV5aZ7w5BNwB3u1w5As24h4VBG0ZelL+cRt03Qyb5kX4PbMJ6Zr/8NHpldfnG/wSK15Niwi70E+XegQMaxkdIyeI6bpJbhOy9+zftcMmgfyP5DVHfdQpYXQI3BMK1EB5XrmrNWRd9BPxYuugfcVza7fCHePAPOo0bSU27O4j9yBfls7QPdpNLRESxKnecKQkQ/pXAPkrXErszvzsAdBOcvkXrqUHnbmHY88xxalSxSM47UD6xoC9u0pOp4XZovS49GBeVlXzPwYVyqmaTo1oH7t2U9Plx//8QrUNaCHgoz93WjLvMveWrHvWk6FqmhDhIUWFpnpNzJHC7gse7nwDfkmeh1wZiSHZSVAk97Tba3yfiwwjmD+mGNpo7v07WPegF5lZo8QjgFxNPa2drSEckY/UeXQGupW+lvnXZ7n9m/WX69xyJ1Xe5ZQZD7Xomqs828ZIrQ5MmMsyjqP9vJ7BXmn9GTa7312uvL4D03TV+2DErlKt+wdcU2BRbJFZHOv0TUSCq/KNOtp3gAfYSAczwwz+h/b4G0N/VYA7dpb6FWcivvp7e/y3wgoDyxZLYL7YfegRyk3ptxGlWnMIN5Ircgs7hGL6lFp4yWNk50za70B1LUw91WT4nk1/L38LYF6+buB+ay3nYW5Y0i3J/S2WLY9JWb0GlsedW/PeXSIjFUy9VMG6itlqb0LGyCAtd4svE82qQFyTQm07jkGhpouohmjUBFfKVbt2bUZbCzfGk+JhLeTZHKa8sbAUinbklp5oDD63VMeR4E2GY7Zm0iuZGa/8tj7ppfLk2k9/7MSxfW0l6ijgUIt6mEU3VFBZfvC2wNMydV+q79rSeRmTW1lOJqNYFqUylaDGC6Rxte087YCXPdM0z3v+oXp9u/5qcTK35yixYhVnky7/sdzZnblGU13dApf0/KHtPVn7WYcBu64SAE0fqKHu1Zx7qK3Zj1jkGf4scbfe7YlD2Xty2Rydapz4rhW9rzC3LUkctbb51Z4ewPrI0B7Wdfdg95zuvrr7AC9n3ZdNVuSOCmMtfvBPXehzUExT3mpYN1Rlw1qYY2Bu+sWYJfAe9XdDOCll10+x9a1AEw4iTt/8jPzSGQALCpvWljXqk+hDLTfe4SSB/RK29LoYCkHFp09pbWN/dLfOq1kctKj7u0z9A5YHmZsi3kR5L6xPOhsr1rKnTcPtg+9ta/7aA5nr3vIe7s6IXGiQLn1i2ORv3vzYN6baJ3zNsCVcYWB+tUXpqu//hPTS7/zGXU6Uvl0FVEpA5rsyGyswWU1HmvxTjxz3j6T+5oZojJTivTV2qt9NaNWZ/JSHFu0f69ceM+f4Fvmr/zxl1cPTqh8rfG9mad5V81YlJ6lb2jX7iLX8aK8S+P5EUMs0sXaa65cIAPu0XsyZ7GVRfDO/u5p9zzrWBnce8C5dv53D/p5rurmoMPzHezroTcMcR8RltpNFw2YlwZluGJTxIKh7bV48447dSKe9oWRCuV+qxe9ChfjyZvyfWviNE+Ate9s/XqFUwTQMW8shk127ymlYmP4rxePukYfBtbRO1H3VsIjbypb5Bk25CkjvC+ewi73+gGIkeHu82RWhi7Ngy5/h+zvGv2o58fZk0yxbGuEZ5R5bbW5jzhDzLNT+evtZ16eAtRv/7a/PV381r8xTf/et9YuX7v8wvTqHz81vfb7/2L6+u/85lIW71yqYDxisMWIqoCRNkoPywO31Wvee+6sc93mpbUtz3+YBsHnFSnfbveiy/Wl5PvpuJeR3swg0ua0+nZCwHz66nPTtX/+96YCzJf5l/18m3LnvN3eSRgbVXkhzpEW3ZZxCkT2Vwl1L04ZzSipedNNueXoeXimNZlo6UTW3HrPdYRekt/eCmHv3pilt10Lg/faYDKx0HgH6FnKbSs/gMVsG8AbrbZMEqcBQCtJWbdXHUMUtafW2oJYCYIqx5pBvCwfWEzNG94847Vp8JwzMJ4B6NF7vNFwYe3umAViUEljSluPlTlAclokcje/CssNiYik4oqC9xv/y4enO+978GSeZ4t41DXFxlIeMoqFCgA616gqXEfKQSCV9gMA00Le66aI7WANIGnRChJYaPswQnvW76LEzx409DYhiInNcHspCcBla5ZSmfKeI6/vuHO+dZaRfcDWJ9qvBSSwXdmm51GOGLiiY2TKc/Qc9fYhzzMCO+R7d933I9OFv/OPbn3efvWF6ZUnH5pe/l8+eZYuA5L2HbAmcc2AyurIVZ2ZkJgbpslajGo7WGuIpDg2/7b2uMU/0UiL8r/KnqCROhORltnfWtj7qXnQtzy3lvWu7wA9s8O2lw2qR9s72ls4o4B2B/2WpA9LEDd4oCy83XumLQPOteGigJSAlSXhYdcQsG3vfjcbiwXcRwB2zeiAYXKLArYB7GW3xl3//r3TpQc+etJA3fP2oeIeVUoitGR7Vq6jlYgy0n60DDNMHCh24h76QfK4qr2JpHIHB6tptYch9BF6sjIIqqMKI/MgMlAXGVeUvlvKSQ98171KLU+Jlnh0wF31DJj1aI+GmtHrcszzvZxleW3E8KyzfRKNAtPoyACaRsNTezLt6m8/Mt3+0mEuy9WcIddl1PgW3Wcs2qmyQ8WzvoUX1HaDLweweR5EJ7169v66Z5yKjJnpOlaUVJsL3fNB4O+NK2rY9NoZ+d26o4530dnfVih8G6cF2neAPnI1/bZ2gO7TaGiJAtAbA2YKtAaUooK2e7CZhHGyk05AZ4Fwec8cM7qPzPC+EsTkjh9LDDfCYm15gSxvXFTo4x6wIgMsowID8VHFwQOuUll4PQD1A5pDUicLSEjFhykeheavlqdTEtz62FcWLD6jek+k57x5UBT+kTlnHkiTY5VnKArc2Vw1oF7K9p7Tbt7tVJSKpnvHPDuIAYA806UFMCJnTFufA/AhBmXx60Veb8wdYs4reBWr6RUZeuL4rb2utXvxr5zeW+blybSV/J+BeDMeAqs6KLu6pI58efakW1foMApP6n2o67GIPevaUoZ3Sjkc2TcL3ytPZRJwzvSXduawL8ZDZRmLx0bGOqrMzQ5r10C5KYPnDO8RQM7a0UD6DtBH7apYOwmVL9bgXsqmAHrQNcbMwKFsOcuE6ag0L4g1hSggT9xX17rD59gwq3upxzK7Sw+7/DcLK8O+MaSbhZxZHnZtXaSX8aBPklgLlfwtSr8X4l8F6HzlwQppZ3MbsQ+bIK5A/b2fmi7e94GTYSPXnvj4dPmpn0u9o64BbQYeLS9CacfLOWBFhmwlsueNkXte/TfeT8cw0UDYKBsH88hsna91blGxbGW3nNtR42Ve9JQ33ctVUhnxqNEetuPtM1mD8VnLO2cZabwZWUZIr66pXCuAXJVVBSzJRI2Ksdkz2kXp3Ghcnky7+0eemm77trdvme651L3+pUena09+aHrtz+dgHbie0gA3w9qLjib+cWBUnb8teeNaQwKsSzmLeh+L6MPyvdfNMgTWAHYdCyQDbb9lDMfaWDT50PhqZg5by1qh79j2cINnYvBaZvcVPxRPseGTbXX9xJvpka53gB6h0rgyO0AfR8tQS82D7glo/D4CCIUGKAthxt7yzfK0W4pcuvMbFRhQr0MhWd57u4l4mTWwnu0ThWC0PlqUo/VWDJvcYatCUHlTe9Q+9ASwDEW9+C2nBdTLE1YvP/vYAtQzntkokIwAPW8NI0aYnj1l8jImYYLh7EsofNUk5l4Ub5VU5FCR1LzmGP5cu1HCIz0wJtuKrNVoOnvtWaHuXl31u5Wn5IiAnY3HAhZyXXsMnxrAb+NgvK2bpk7F2pd4G73x7qVawKCVGRvb9xe+aZouvuNXpgvf9cFMUzelbH0y7fM/PL3yf/3pjf5JDgzLY15prIW6t4+J2UUcBVImRw3sGC6fGFI49F3yWdq+EvaOZyTKo9vZZfx9hGEgQiMJ2MOJNiMNDyrjPc3Wumkh771e9dLODtAHLVqwmR2gBwk1qhgLcY+EQo3qP9WOdc9QNtQSzm0Md/SeYsPQ9zKEKEjXhKIUanJKbE3YfbHRVu2oByi1jkphDFdvxZg1/xgGIlR8EeScmkcdgToqt2y+UskYCezYfkdv+iK450RxPWtsed08BeoAODdvOlN6k551RvtlvsQTFD1PES+j5bGN9nOscsPuVVpJRy1wLmXFxklqhk7PkKmFs1vnL3M2tTOdaQNJoxqIiGEVzzE91x1A/rZ7p+nu73touvD2j0zT3W/ZuHrHrd7eMn/lj768QtcLEG/zl550Z0jgFF8Sy0lD4pY1lvKX8ebKFo1XO7DOKAqzc6bx9sj8WxlP/i/0MFBKpL9RdDil5HENtKPXnIH0zFvpO0AftZti7ewAPUanYaXkO+gaIGSesJDQHTXKSOg78554SeUU5QzD1FlGdwbG8U10DcBvIYsG4Jkwlf0wb6UV/i4tytZ4PdCj1dUMDr134dhVAMtY4XkgETzJeZ6iR/3y5z4+vfjUo8tyMKWdhQxKOmTAu+Y9j3rNe8B5BESwdV8UvhbNIbyCyx5SnljrOUMa7b2zFFH+NKPLMcNBPX7GQjSZF6i0Y4W6d4Vvep7zAVefvPmv5Cq5PhStH1l/BiIy9aJj8crVczOHuqPhdasR+VSBOV0HI3rngLe0aBrM7k7yDeD6sOicjGy2ypZvmB9Gu75g8fWIsTGqi/TseeTLFiBHo9qxI5a0MHekx82+n77QTISys9/w6bWD/RoMdd8BuseJx37fAfpYerqtsRB3ZK5eci7WyQgF2x18KyBD3z2g7jQqPeASmHtjwXpRT/rCvMASLYXeSsEj2VQxPwATlq29iHKkedyOofxZntWoYaiMi4XTZfagpxyw76foUS9A/coXHl1Cp63QPrnvehQeT6lDxc47Y2p7JBOwBcTrfvFC3cGjhc9GRfcW68cKa47SOVpOnllUIhsdLMNMZk2iSqRsExPGlW9HSSLHjLX4LNsgsO4Z/zSPeaOLBqa0feP1N+ocr7ylAhRmjLl1Dhsygt/9tz883fGOR255j3l5y/yVJ396uvbFX/WP0Py++cH5VLThut7tTfm5dXnXHNej8aDV/klELLBIJ6ZzaEbyXmdOHfccor7SgQKZ35kOY50DT/77i3hWwjOyRtvJlLNC3jPteGV7ksOxNmVI+9Yw9x2ge6s29vsO0MfS021NAnQvDHXFJAmgdDs77wLS8+55Ulp4+nU7wZAF4K0kcvK99SgZWPjYonCDkiN/lwIxCiRQAJa/pSLJlHkpkJjSybzk0blTxi7uq0tPOwuBp/UDgj07zzLvUwbqcp3x342GHrDLKiWRKwu9Sp22v6SSailSy1zb+dIU2eTv0bDMjKer5yxZimsE9EfKtHFF3/Vl5TVPUCiZHLvahNeeSqcBmRChsaXc4ze5D9p50/ZjhtaRcTIen60XPV8oj1B3WHjLfJ1l+a6cq5qZ/X3/8iTeMr/+hV+YypNp05Ubz4hZ0UeL0QLmjlfTxU2Y5Y62tr+kHMM95625dtVMk8l1H4trSXLtvb4y+olliIoYvQpPqfy1wxCH8gPpq8lO+fvI8xwxht4q3nTcAxjuLv9e+AJ40DUgvwN074SN/b4D9LH0dFuzksRpAAu9lQiWVOHrjsYo4IW5RzL7DlTKtJEiSN8y5QPGlsimmwE4ESGpeSQtweR90+ZnGSaY4sfC/qNeGk/oWwopAtdTBeoy9H2lSEPoJIJHTeHwDDNWhI5U9pD2kX0aPW+uUQFDT0VSOG0c3vhY+Pmyn0HyabSNKHkeCLQ8+FH6bS3n3Z8sQLyy6/Kk36sbvOpMbgQGr4LuDuU+oswzr2f0vHnTYeBw6x4wjRJETmkhz0xXkOfo1J5Mk8Bcrgs9tyQTnHq+m5ddNLoC8PMfFeM3vl033lkFi2+EeIqyppJfo2Ogdk+M6gdyf34izdvHme9oENWMFL3yH+Uk0jhC08x8rLKMR7byXdeCNg4s6mnHrO/ZsPcC2u/8JxjbtnHwe3WTAjtAP+cNksniLsOaVgxK8aZ7CuvQqWqh7bITDGmMfnMGGkkmZ4W8t6fXPGDTBJ5Uatg6sJA0awqR8C6m9Gct85H1ZjSwPK7RO82Rvr0yzFuxrIXItl3uqH/jh/75NH3ne7wmb4nvJZlcC31vikbda4G7jXL+rQ6jicYv8He2t9n1hSjhNEVNzg/bYl5m6eWi3horHFW6vkRn0ivD/m3N0QJYzBCQbT9K3xHlUMFsSqUF0s1+o+HspZFBXvQ2Hs0Ig/tQlsfzEgFTrb0oEECDlOdxPDgTQeOwVm/VP2R9R7lW/j4ZYF4css98YrryxEeqx5zxkuj61jWtDFgyCWhRyBmFrSwZ3itdl/87a6euO/y2vLVurDGLrlz2sHE9T3PmSD7vXbuL6CeNn0dpPYJvMcPXiHZHtXGre9APzsqFG780j3ld1/l3+QRb+/fuQR+1W2Lt7AA9RqdhpSIAnXUWsYwOG6RsyHpWzSpnhbsnvSIeIC/D0BLGtSH2hLwfMDSwTldmRkLftwCczBpmAF2mXW3e8vfoHNFoxEC3582Syu2ipBDOdc9fv3+69J5Hpgtvu3/LdM+tbgPqGY96Zs2tvSknOTr6wyIgA+Ol/ALIW/gm80QZT6wtSq+od7CPlQgF3FNyPyLQ6tkc2pplQVtP39mw94VfCr4mAfyihHoRVqUh61WPpAzIzN3y0q32/Qy+0HOe6YvxI9w/W73nVB9Qrg8tesKceNE65+XbKT2ZNv3eZ6crj//Q9Or/t6aIZqRh55+u7ewNX9rRtGJyHaDyB4Hc5WuQzbuOfUaNPNl9qAFvLeKyte85dm6bPe7tv1XvIYnzGh9v3xe+Lug5Wv6POLsanSNh7ZXNQdQR8sub4VWva0AAOD6x5gFzpM0O0LOnclv5HaBvo1+6dgSgM/CDd47Q8+lZRdMDVbnWfKfIalC7k8i8JxsUNfSSN894GVr7t/xNG3LWWl0FDzxNZYWbVWZJ3h/3QK7lmZPCkCmJI9abhb57+84V9sEEY0wJkPPUBHP5/d6/cZpAXSaTiyh1WxQ9FvWBiYhG7CHWhvQu45qqnucmqRLPrVlAzQPHEdq2MhGP063qZWdJ49qahDxCUQPu0qiQH4O96Sp/d7Jwy7Vm+yIb+u4ZCCJ7a8vZWxmERIIzaTi4/U3TdM+7fmG6/Xt+aktX51K3PZn28le+TPuzolXc6Ijbb7zCJp9LW/498xvJfhaehW+jV6E137sGEItGOrbncHKFR79a7gaXcHvQH1AHkXWZLsjksierV21qBiGBIOQ5ofMrOlPJNg6hCB6fxnG0v499jno3t3wrvbQR4qO9nQXrYRi89vzasrcFuJdd7AA9SPBBxXaAPoiQ0WYiAD3aVpUHs5KTYbaZ9oeVlcqYFfqe6FBLICefbasMEnZ5BLQzYckyqbY1wNBvz2rtTVML0WT1Rnj5vPFo85SKQqSNaBnP0h7xJF/6Wx+cLr37Y7d+oqOZKMWjfuWx902Xf/eLqhLjeWPZvmU0Z0mGFuF8DsCJzkOE4tY9Le+lS9dU3XTwXUySGQDq/m3e9cJ/itIbfIJrhCIoz+gxvT7R85Utt1nJTCYQpePbYMyV7bF1z0ZNWEYZ9g35+bF5tnYH/RSfTJPAPGoMqyxCAEGkt3qmWZROA9vKoVntp8poeMLX7JmLlreupEXa6NUdNT4reW37d1sLSffIWi4ySTGyYV8jeHWEZlaZWwmgo8e8jVu+fU51yh2gb90GQ+rvAH0IGeONbAHozAtbGRSxrsZH1FkSFS6pPLF/K2+gy96tUHYcpZbBHcsxr3rnjN1qmseZVcwAeAZWZZvS6yMF1ghhpe25RXAq9+FG7MmIoisFONK5zf/UgPr1rzw9Xf7sQ9PV33v6BqgUdyHZ2rubUylgXZ05lteFKgTgiVkB9LnCAmyZASHzjJGTyEk7T9r+8mjveYgQvB8bvJXxohJ5wF8TRhozhLO1w7K614GInjUAbgHz+ZtF49IDeu0Yn9S8mhGDSgRsnAdI18ZRPOZ3f99D04W3f+Q0nkz7/I9NL/3vv6keLTSyoPe2rS+uqVz3pXF4dm2p06IPgmcBgbp8iq31NUomr2SAyMyvRfJ5PGrUd01XOThbhTgOXTNGMMYzR9A6ShfJT9kzbNF2zrscy/C+7FXyNvruQT/fFdoB+vnSe/IAOoYQy+Gx8OKbzZCX8WlZ3aW3HBWyVjmggEWWKfo2esSDbq1DFfJw99wynrCxZ63WnpKvgR5PSHnzjNAd6RGt08pFlFtskylolgJc6PCm7z0tj7oE6lLhlHRbKWoExGvry/bvIphB4ZPrm7mvztaXKXAUALUsyXJOGGcqpVcCoPeeFWtfR5VJ6XVCYC7X+DxAemXH8/1JnJu8V4nJ41q98l/5TaWPB8LReBsw5vauhXaO0CjTsxayjbZ+1n7XznGWf5q0uH2a7vhP3z/d9QM/e+tHEl19YXrlyYeml377kyESeDJRkwcamF86lffKlbwXy88ig/vCggKROWyveOuoJQ326pXvGX2D3jlPZH7P8q6t8l/On3n15T4IbawNhbzXMmTT53E3XcvwjvfTtb/xjvoO0Ddsjo6qO0DvINqWKgjQM4B8xYggA6h1x3nLeEN1I/cQ8V665nEPdcgLMQ/8MZ9h04bK7vdumJZZ9RhKPosEqAoreMvROBTJg5BRFHDiGiivCojiYWbEOzWP+rVnPz1dfvzHp1f+7MXVdLpCOIEgeEWGhb6PiIZAJYp5NLUyB+dJJmWa/7143LXT0u6SBr3n3nnF/RbZf9pZxb4ibXnj2/Idw9kjz66llM3sU2ydgD2q+I/iK1GaW0aaLLhpfTI94q5v/5vTne/8p9Nt3/b26NBuTrmrL0zyLfPRg8D1TbUvr9kEK67wvahfz/WyYEZjCWMjGlpRTre/g0PfXMzbvxHDRE90xNaBj+a5EaCe4plbJ2jUt+6n1/1T8gbM3vQdoB9xIUjTO0A/X3q7HvTMcEYrzpm+02VlqKPnUUk3vq5gAXW8n95qXihMqCmC7KAoT6JErh1oCf4igNYjheVFkHVHCyCpCGCYtOx3xBw9Gqz6Y6HS0ECj2esFqKfoozzRWNrA/a/xF80wYxlf2D61FGf0cjUAXvuQ99PrRpw9RPPa13FrbyKRDMSLzgzgHZVJ9PT3ninLo9PbZmYPWGWZYrn5GbbSIYazRu6TR8oEJo5etSzPHLXudauSPabxr8DUaJE3OjCPrK/GX1ZPri2M4SznxepsQtLK+id6zmcetEqfAfV61zhSD2Uv5smJtFGnlfCeY5seYG9ngkWwTMnzH+lLm/NWvutlfLfeTo+uw4hymBxupSNeX/cggXn7sgP0EasQb2MH6HFaDSnphbhnOmGe2l4mnOmXlvVC3K0OWBh8kjm35tnddNk1e24tEvJ+IHicd2oty7YHWhvQsTxAGuBp46Rhw5sX+awBz5O+6DXGHbMeT3rU03Vw341wOdnWKQP1KHjQoiKsLaHt4d5tJIFpFEAfgHjpnlo2Gh+Rd0ZKLS8KoSmQrIco7ZnS6vW7RdmMrI+nUK54pnhG6CheHyufSRlIpyzQ6ICAva2xtiYIHhjgj9Bc66cnGoPtqQvfPE13/8hTt77HfJqm6196dLr25Ifqk2kRr6p2/vCcsLVd2ASRAxSYYYg7e16tva6GySvFQA9u5JBnHuk5NxJgStlqGVSZHujJ3GheHEsvYfsS+awso0WTsPUeKf+j53VEOcvoOaL9bBta2PvB2pFn2u78JzeCQLL97uXzFNgBep5mm2ocA6Dfcp50L+Rdhrt7Gd2TiYO0RHMsk3tZyBHvo1fFS0mWthJG5N66tZl6QsiZMnJMsN7m3vqVioGlEHjKQuSQaaFwUhHOAJ1TB+rRuWoGFk3hk2s8Yt2YEseMKivA1BJhzt7zlTLZpBiTZiK0nXlperyr1nlqfUSUWLleDKSgl6/t68jZGFXG86h74fB1HNqzm+3blsEmwDuL2EBQzgBbj3fNM65qoCV6hiXJ7viWabr4jl+ZLnzXB7dQ8lzq1ifTPv/D07V/+6fLKwpWRMmoQSFdXeOaDE1vUTv1AM4jAtC+YHrxLBsG8dQxzN81o0zPXmM0YsZVlNV1D85Rg57TwFoHzRAa4ZOZ9UUD72j5nxkLltVC2luOjsrq4L30Lf2NqmuBdeZt3z3ooygfa2cH6DE6DSslAfr116bpQmAFoneCkeFuAXjdE9a8IRg+3vEmegXfJQyH1EVgriWMq4wyQPPI/Nm9P/xti7cZBV9E6W/jZpZpJjAjCoEVwm4KblinqIW+7eOs0qDNOWKll7Q9ZaAe2beaQofrw8B4j0LngRUEpyHvssiwvIS9L5sfZujc6WQAAT38TMHfAizY2W6jts5k5Lxm9wAmhIt4fDA5nPSsp7zs0cirQM6SHv5Yec2cv8KK6qjgRoSn4989wFryas1L3/phYzulzOzyLfOIwThSRu5zbe3xjGrnR/OkH1ypgQieWq/JuSifmQcuHeVyPy37QryDnj3Tt1R0JblWxMC2nGMPn9si/7P03Voes75vbW9r/UgyudLHDtC3UjpXfxBUyXX6Ri490oOu0ZEBqizYSa2R5TH3vOmloxFv5MKArSfbNIDeE+ruAVTplTzWGqAnDhU/+XdqXaGwZnzA/YbW+/a3Be40z2wE3LE59SoArd7Fb7l3uvTAR6c773vw1s9+PBPASiZnAQjLqGTxmApuRMb3LXsL96jmUV8p3MIjVes379Q8ptXYhPJseWKaT8sMIAAAIABJREFUooz9MwW619uqAb1GA9Y3638EvSOh7hqAZ7+Hx4RRVE0OlP9axtyExzwylsxesEC05hHFMeDay++WoUie3wLM7/yeh6eL3/+Tt/6TaX/yu9O1x//BdO0Pv3ywHEh7bY/3gDVNBrLzrZ27Fc9UrtZk+F9tT6By+QzbwRwR7CcSx/Xw7B5njmcUYXtbrjHj8Usd5/lEuY69a30snqrR3/Kgp4yaEcaWKOMliZNN7SHuCcIOKLoD9AFEzDRRADrznPd40w+EP7kXbYHCHm9YZq4HZVkm96aYRTL1blDOJCgvQLz9TyaNk173TfOEkPcqCOCteo32nhcoAljRkrxFwcnSwQLrkba8+UfbKOVGzPuUgfrLf/ri4vVbKUsKn8A9qXnUI5522V8rz7xZBzwMJJL0pFlhoe2MrUB6SyanbZrZ+1X7EP9m3m308uP+Yt9XNIcEUpaHPus9jJyJSJkMWK9smzzRJkPeZXI5DIVfjYe9lc4G7F2HMibJ+EqW1zDDSsojG1kE4W1kHsF7/s6Hpzve8citD8y/+tz0ypM/PV39X3+VzlrSHv+94h2J1zmC5F0VQ8MlnmPNs740gnfQSYj7Kip+BukH4LwysDWAr30AP2RRe20sVqQbk8ue/tcD2pexCH5XpyHu32uGrvJ74RNeJIu3zuzceHVu1vdNRs6Bg8Zwdvm8muxmB+gDiR5oagfoASKNLHIeHvSmrEpFmv2G4D1jDXZpEnlKx3sjnb2PqyUeA/DuedAbSEfgrnnXLcHo0kIUyADYHq+yHAt61q2/2Ryyc9aUgOw+i+5DpuRZnuIyR02h9pT1AtT/0rv/0XT79/xUZrlvalnmUVfnH0h6qEWD4HpF108qbu3fbY1wH0ulTQP6dZ/Ji59NGdbCUMXvCIo1kKx5fSLGIFnG8pZqZ1j+Hukvs/k0sI0gm2V0z/SzlEVQrjXC8pWQst759caoGWWwHgOTkb1C+atjtJHn447/6Lunex78tVs/mkc8mfaaeBUyavSyeHRm/2cM2ZLnhMFdUnOurAiieBqvWuWEw6ggttcLry5X/QJj0KLZWrNbQLh3ptp3zTiG9S0ez+SBKgeMd+hH880IDTJ5PG6WJ52FuDPQvgP0yIqPKxM44uM621uahj6zdqA8GO9Ur4Tb4LDUzeuqPbsW8ZhHyigDxCfXMh70CHiVod3ev6uSkFiXTFn0/DTFL6oMWesbCY/2ojiOGfrPgJcH4i1lvXrU3/up6eJ9H9i87c+jgdeef256+dnHpstP/dzyjrqnpOD9RVTiFsULQP2odWSeykWhJPeFl/WUYaiYzKk9k2S8LCAVStmfBEqaoqidJfQcWUor+6Z5GuWYvP18zH1m3aVMKZvaM5zW4JH3M1ngyAfLs655/Ri9vTPF9o02NTmmCsx/8B/f+pnZFWB+oKOAZ1XKopWOQjznhS5oIBq59xng0347WDsCrFk+uQrGhRed8Yf2HQG4GRJunBNmIK90V3LELLwP9JHIc2sRw0hb87ae2h7o4VuMX8o9kjmnPf1H6kjAjv+W9VP8M9JxsAwD5u23HaAHiTio2A7QBxEy2sx5edAbA5ZhTOdxH/qADlpYeytoJZULek+itC/lWEj7MpSO0xAJOVMVsWRW94iyw8qU3zBUuJVjnrxWPqP8WOF1S1/zfDGygykLkTXVwIulVI0S0K8HoI48wtqnzNOCoe6aYod7TfajKVSRMMcDxQvBt7y3yZ5KUsIw5XiXOQnPPPaL5SN7LBrJwYwVkfYj5ydaBkE4gqTKV4H2TLmsv91B7pgzWSAHx2RIwNCS4ZcWsIjwVCxjrZG2f2QbJwPMy3I+84npyhMfmYrHHA3HmoFKOzMY/mzRPiOfrDOKstE0wJC76Mtao/4QvDeOgFzSwJpjxElg8XjmNJD09kLgo/xjoX2hxxzCjucN56lFpWiyg/0ueSf7d4+ek5mzdmVIuwbE+Gimv56ykSfX5Hvoe5K4Hir31+mAJP2d7TXPPOjR++a99ELGa3lbs/dJe8ek1tNAeORO+obBeM+xjU4YtwgpA5QfI9xMUzwZiK3CvIMjRBQFDLVrisOGJQxX9ZSBcENzQdneKQL168/8/PTV/+6T5rQjayqVP/S6o6LnedcjAMlSuKpSK59ia9cZ5rB3U4muE7lx/zPiBWJemd5Q53bu0ChhGS96zml2n0fLHyUjsXVFasNd9Oic5JrgOqBi7wE8BOsMvC99vGWaLr37NJ5Mm37vs9OVx39oeuX/neVGj+yAu8mLnIQ3wzPrJst68o+1awL0xivqJmgC4ey/VX57eS/wpTbhZm/edW0/LfsGgL9pDFKuLmlRUlYeEimzMxF8ck3b2cE1wt9H8zeNl+L6a7QcbRTVEsbdLK959HztHvQopcaU62CpYzp+o7ZyXh50pmBbvx01DDmSyb1sCPSKJN9Ar3vKCGlkIewSiCMox3vqUdAS2dsM0PQIvUhfKCDb3xErdab9ldAVSfG0EOllXE6oXROuEfowQVwVC8HptFDBLUL4FIH65c99fLryhUfDSxzNMRBuEApGPIvY9mq94YrPmdas3NWUCeKcJEZMwWRjRQOC50VlUQLaPu2l6eh6EozLtjP3LMNj0qKrsAGZ9b3Dsx4eDykoDZ29Ich1m941TW9+7y+cRI6L9mQay8y+hZbynKFsYkYOydcjvDtiaNF4UPl9kUMk/L4ZCA94jsF/Wgj7QSj8OWjllv4RkbPZdZa80eThJC9DSxyXXWNL77GMvdm5jSrPPOuj2h7Vzg7QR1Ey1s45sILYQN4opf7P/2J6Dd8+P7ZHvQqyc1ZczPVkCYIYiNfupnduFitxXGmy9310Cewzd7LZ9QMvqQtOPSpMmcecKSydpKXVZCRHdA9qFnxtXBFvJyp+I0EQ9v96BOpRw5R3p5Ep4N5+87zIEuSa68rCT+um9EZw9h3PT6sVMXJZIavlm5W5GBVb9CxF+o/NcEwpM1t7pgvmQUfPeY8B1xiDxUtktcie1PYLnoELbz6dJ9MkMJfX5ZY5BXUMpLMG3nr4dC+Ii8gI86xJlM32GGZjl0AUkrfXoi2CYG5rubsObUfm22Svdk1JymYrii+qa0RktXWGJL9t/161KfhADb+WiUFFQe88H1v/sdgdZm/Hsuz7MN6a4cNQdgfoG4jXUTWonnS0vFehFNjiQY8Aec9zrgFI7z7SUZdTU8ZkpxqoL2WYByXgSW/N47302uTM9HtBO5XRxMPHrhgwgTqS/gysSwVlVF/M41ra9gwTWv+9CgIT1JoHNKrweDQ6VaD+4lOPpq45aAal0VdnLA+MXAvmGal7rnm9FImnKXMRRXLVPuR7kN8YMPGUSwTkba4W6Pf2ZuZ75Om10h561oeEvTMPeu0sM4N42cgeqLyZJDprv7f1luXYGhaP+T3fdyJvmZcn0z7/Y9PVL/9mJSbLZePxZuu7B6SQtsz40Rua3AxkbN1kv2wXrXgKA4kA2uu4xW0aLbpn5VEHfjVCPlnh7RlHjrfm8ZO3PlNbjKFU75ppKHlm9rwem+9q3vMS8t7467HD3yP30XeAntnV28vuAH07DVMtSIDeAHcEeGc6sRJ2WXeBj3EH+mDcmtLVFC98ek02kPSoR59aY7RldUeC9SogSBi4tgZMGLLfIsqOpWSiUjJCIZD01QxBkTwJmTMQEdSm0hXszFPqTxWoW6HvGY/66ERD1t61PHOL0jffSfc855ZRBxU9D4w15R+BmlREWZu4BbF8+47tjj6zwaOwvIvuvY8eba8CcZmLJGmI1XiA9IRqBhJrjMwIxLyrWnTHxe9+/3TXD/zsSTyZ9sqTD01Xf+uTBwau5VzPd657jK6WwcrzquMaaoas6BlaySgB6Njv7bfVOZPJ41j69qUSXkK/kf5CAvY6HwH65f10zQgpdYrwGYOCDKDj2kq9JdsPjh3PCBoe2VmNrjXKCtxTaHzV+HR2jr3l2TWh1taxwXl0zDtAj1JqTLkdoI+hY7iVEuJeCmOYO2tgBHDXlOlIKLUGmkZaTk3CeRneZWXnOR0rKVzzlrfmIm+jsyRymcRyKOSyxpEe4BMBHRkhFQVqqDh4URyLLkOenYvsvYxy1+bb+rSUn/AhFwUbze/56/dPl97zyHThbff3NHPudcrzbHhHPbNubc1HD1wDqU0Zk+tJFTmRDK6ODRI9oVJnjZ8pm6j0bQ1Bj/SRObMj14M9F8TuqLPQTKlwusqnFWGFGd4TE9T4RLQJz2AiAVz5951vO70n0179izNqHJx9AczVqy3BLOYavdlZkmca6asBN8tgZclE5CWh/hCoS8860baRHclklbW/RTAd5tOo3v8S4l10n5nW5lxJwjh2F13KX+TjGBkVPSsmHy1PYIo7/siDNcMrtmnxXs0QYMl/KVNkX73GIRyv9TqGx1tvVrj7DtBH7Ph4GztAj9NqSMlIiDsD5scA61lLaAQcuUSyEsZZz+mgJ0ULc7SyvwdBvOd5L3PMgPEDQRIMdcc73FJRstYO10lTQtB7xDx67nqKAtHrFVYUR6a/TNkIcBrhedSUiUbr1wNQZ3TX1t5aoyg/YftXKnEW0KJ7v3nRayPzCCFpHB33XAaVukWHTkrTtt/Ynol6duWZXRRrksQqc1Z6y2qecxmmiW0v4ByNsZXJKiNhL39E5UPv5KCe5X1DPnIyT6ZdfWG69lu/OL38zMNTA+b0rGtvmTfP87wWmXDpAxkJWdw1UBQBzVv4ekgmSpS9imFfvw5R5wgGQQxnb6AcM7q7PKaAXCVXhqVHWLyc6RhRR0LkSkPEAKPNe1nTWaerf8/PuHl7lp3dxtOZkQe9+oNYyEEzt+Kb6DjIHaAfa/V5u0mV4nwH93rsjSWJa/OMgvBoOcvDqd1DqoyKeC6PuhbW/fKmqMkymey+t58lf0MvOc6H3UOvXcPdMi/MnWWCZ3Wi3kiP7lvXKiIkGQjwxnWgcAmDCt5hZEJ/i6XeAnRMEKMCx/4u9TQPjdafRqNS/u7vvH96848+duuHuc6TYB71ShNY1y1KuaRX1KikKfbY1qrcgduqTXL+ryMVI54aC8BZyqCmXLbfmSeI7c0toCR7tr3y2hvp8j117dkhr+2DMHhZYUASuezZbt1XXvGWaXrz339quu3b3u5O42YXuP6lR6drT35ouv5n6zvmy3zmcy55N57/ZQ4RY5eYsEdj9JprfGILf44aybQ+5JiWs8eidazw98Z+wADSksbhnfWIcSKzrzxArrW1VQdZ9tjsSdd4IDNaMgOKZ9BFfol0bN8lMGc8NkNbWVZLANcMma0slhuS16Nz0O1++g7QOwnYWW0H6J2E662WCXHv7SNST7sLbNUdxYiXPrzkcFr4ouUJl9+0f0cINGd1x2fYSlUE3L3edGbZZkpPNpzdWyfLgrxSMA06SaGmGRuooHWiB+T8oyDdU/Aiyz3CCBHpBwX9vQ98cLr07o+dDFCf/uR3p6995ienl/710+50sxE6VoOWAo1KGipY5e8DZUvkf1j1S8JyLWOBBdY9ApW6RSljSr+1pyPfIkDCG1/0u/XEWmsDw9i1sHY33H2l6cKzmhg95URMRefn7cv2ffHyfuPpvGXeMrO/9PtfPpimPL8IzGXh1RlgTx1iy/MZ8/h25GxljamZNUeZYBm9pIf/kJA3fjmIgGfXAERCy4Mot8rc5vZEXQYyl/B3GJDGlzOGc42Onu6B9aKGWORnkp+vXsHoPPPnKf812lkJOTWwntnPI8ruAH0EFeNt7AA9TqshJZsHvXjBy//YXXT0kGse8xFJ5hCoMzAYBUrdBPLC3kvDGO7YmeFXetPlu+iWh926k94Lzg8EFbkfVmXxkTIWt/41sF6+j7Age+DduwOnzT9rtPCUvWwYWwQkSRof6Kjz+W+Kx6kB9etfeXq6/NmHDoA6Kn8jeIenyGtgoZ4f+ZyRDG1fVdI5V4/CKc9Oa9naX+Wb9dQam1/bN1ror6xzM73pEcXSCoF3ZYp3P91tIF8Aab+0cPfpZGa3gDmVDSCfrAiwaBi0dm6j3ux2vtt5k+ddA1wRXhLxwGJfdBeVe9Utqh2AuMTYhV7L+Z8/HOScQ1COofK3T9Or19fGvp5zz66fLftBRFGcp15inVDVEAlAvVf+e3z7ZhhCb4Ynffeg5+XEiBo7QB9BxUQbmgc9Grae6Mot6t0bRRDUI3jdQbACFmDH8gzAdlpREbyXrhoAx/+2b+W/Eujj8KxrBkzwVcGveCEYWJAAqNVdQEHHVYWIN7JrTcm8ELyhBV/rJ3K/7WAdlKeRmKLlKTbed23czBiCbZ0iUP/aL71zeuXPXqzTtsIkLbCeBcKacr+cKXGHFcPCvf1b1yRhGLMAheb58cbfs3/l3Mu/e/epRx/vOwPlzDMe8pZrsoD9zu6xa4PtlBG4v+rfJwTMSwTMtcf/wcQ85qs9qRiMVd4GIfD1/AAorUD0wgwkE+fL22/SYKIBcxYO7hkCUBbKs4zAjQG5Vah7PZDzTEDrhoTta6OimPzBW+hw77zJskX+i1wUUQM0Rk1glB/yxayh3FvLLN+LlreMLsgrzWgIcFwcG6Dj1R8ZBn8zEsXtHvTsDt5Wfgfo2+iXri096MV7Lj3pWnK41knzto8E8wwMIhBvind6slsraHfTvad3Sr9WsjhlXN5ddfyOnvXSrHaX3VJstNAyK6xwURQVq7YGeCIehJWiBhyChRQyIZXJf1AFJCQWsowRW7eVVLKlcI4qMVv6Z4CtKVZSMTg1oH7t2U9Plx//8QrUNcOfXOMtgNyiP/MstzWWCuwCwlv249mYRcelKNbRfaCNCeuPANQIVrQxjuhLtq2FuWMZ+XcqkztOxIu6GnD/PLK+l97x4emOdzwyTXe/JVL85pX56nPT1Sd+Znr5f/uMOYYFlGYBOkaqkFw22fPvyaoM6IoQ3utPyo2oHDw4Z5BQbmUECL6Rjk+ua4aGEeCR5SpCfdBz3GQM6havZIbWrPGV6TaasSWyZ25GGQbazwus7wD9fFd8B+jnS++pedBLt9ZTayNBeGSK1r2kjDfJ7SvqHbc8JFZ4+0bPCAuBb3NiHvaVwjlLTi+RnEsjxRNZgYYAspbgi1q2mXCXgEaCxxECf1Fy4A14JvSRTkxZiO5NLcRNWwvN2y2VtMg6NvohTeXv7Ruj7ykDdbnWklaeQhela3Tt3DDwAi5atIn0+jkZmS2AgH3Kc8TOFPPwHex/CYIgy3UrK5VNuVc9r9BWmi88soTaatnXRSeR0PdWnHravUShTQ50ygMPrNUn0x78tVs/d0QwM7tc/8i+Rj6+8DPI5L7il+Kbx7ct+rNvmuc8s6+jHnXGu/FM0/PW+Eyhg5Kosvxc81LMhvcqEwQfkrbCxaMOT6xlQCvLM6AZ1y3v+bEMrh6PjxokLfmv7ScplyVNUQc4L94qeazkjez3zL7PlN0BeoZa28vuAH07DVMtSIBeKmp30LVv5ffoHfXIwPAOemVKioJl3Qf2BG5kLG4ZD7SXBjAxXPltYDjdwgznzPBWeLs7n0QBLXSYKkoAfrW18RQSqXTIoW5VhjBsjs1Bm5cchxUynSDtElKI89K8JCO9jwyUMwXr9QLUjxmds/JGCTcTM7as9lELadc85YHEcZaSh4pej6FLmxvb51jWm3/mrFhlrSRHTIncdPfcHMj8MZpMNEGAU3rLHJ9MG8m3NJKxfWrpBpIfeEYRJo8Y8LK8sImlXhW1ZCUDiStaixh26lEPDGqF55Vn7pghMrPmXuTTSgcw7qOPBOuesWirLiL3FPLlHvlv0TuzFt6WiCTm9Nro+b4D9B6q9dfZAXo/7bpqlnfQW1h7a8ALdY9606PlogO3ADlj1tF2Q+VYeLus6GWAL2VlGx0gXYar45i1BHMZ77kXBt76ZPfMLQ+551mX64rKjLU2GrAYKXiqwIT7jG1MWpRHaD+JQp7Q92iAFnM2f42unhLKFA7Z/usJqMu1zq5htDwzuqCiv5wHBOIQ/l77ZB52ZTDWPqtNiUSBGGaJTUb2zcIv5runzIvf5t767zEWRGlfWTB41GWCI+u77IO+le4NIsL7E971kwHmxUb9zCemK098ZLr+9RtJEkcAGTw3qANo0V1axIwX+izPiLfcDEB7dTS+zfi719Yio8iVMHnmlnZmxL2MATVxNBYKvnNgcEvwJE2WRq7TybqSHmgoHwnQV3sMIogkv1uVK/RoOgS5hx/hy0x+a4afmxUiz95Nx6cro/s2Wm4H6FFKjSm3A/QxdAy3ggBd3ivHRrQQ+CgQ98oh4EEmjd71aHh1mBiZglpIo/T2M9De+tjoTUFPOXvvvCqcA06UFcrN1kCum7VmEXJbnkDm2R0NzlGBYGOWBoZoKL8m6Gn7Yg0xtG0roNEUSRZCRxW7aZrueutZtug773vw1g+xnQms3VHHtYxE4nhg1dvnnje6rjGGoMpwd+OMUw+ioliulFyhSGp7Utsj3nzbPjrvUEw5LqZMyu+WN33TXfXKlOeeEoB84UMn9mTa1V99YHr5/1m/XiDXn3l7I/tnxT9lElMl+ebKICD5qQjfzgA55ilf1khJCMm+p+eKb5KTv0ubnhxcAXEE1FC/zhUGqiWSW9FlrrNge6BLRHYx4ziTt56cjvDx7FpYMvzAaJFonMlkzbipyWTWnbcnEkOkReW9cwbMQ0k4k4PYAXqSYBuLD4ATG0fwBquOWdzlU2mFFBFQHn2izQPoEdIzwNejVEf6WpXxsvS2wq2cBc6DnVtJ4qy76ctQRNh7+60A+QsX7GsDmmFEDhtBeOQeb0YBQmUGSXZM77l1541FD1SFSCT1qkKzI0JCE/hM2DNvZynXgEVE+fEUjNV6A2CTVvqmJNz5zfdOlx746EkD9TZntp8z+1czLGkGFhWsMk/WFik5h89LZS0LlLOKnqdwauww20+QrbrFMvfR3cakXCj/7r2L3jKzv+tj4S5vVsHyZNqVf/UPp1f+6IsLUIx4CRsf8cadMYghwFsZBMTVK6/P7HfLsLzwGOJNZf14RlSLtozfNDmxyAj5ZNoieMVIYJz1i+BBCMpXgT/CsLg6z6JQ9JyjXGbXIZssbjJ41LUzS1YyXcU1PDnGOWYAYjIdacd4eZS+2T2ulUf+WcodK2ncDtBHrVqsnS2qR6yHvdSKAuwOOoL0VqGFvltvpctweSvpXHQZrDvpUQbdmHW0T7OclhCuciHyPjprLAreEh4WDbCP8KDjFGSkQzQUzQsHj4IfS/FhoDGz5mxe2v7Toj20PemNw1I6NWu8F4bs9cmUjsg4LPBfxnTxW86A+sUTABONBs2jfv35s+fZjvm/CI0Xpa+BiOZFrxooeNQNb/rKc2iEsVceqSR6OwYtcA+xaJhj9GspleXbsUMyFxkhDbnWRE/oyTQJzJf9SxIJym+j1njZu4Fs7xrQ88aSMgwEntFEGh3D6MzOv3rOJVCXLnLFSHjgRRcvt61ky/zHgsmJln8MEGkZyXsi3bz9IXko/rv9HWnjQN9SknFG5f8xaFvG6OX4YB71nvlbdXaAPpqidns7QD9fetcs7uzOeRtG5ik1z0PufUeldMXklSzbUWB3zmRdd8dCGjF5nAbaFZCeeYKNPbWGIfE99NHuZst1LP+OrpFWLup9YQKyZ17evqv9kHvpveCcjTHiFdGUr0rzoHdGo08ErDHrvfQcVKD+3k9NF+/7wNZlOLf61574+HT5qZ9bnmeT+/c8rtQw4Hrg6aqDApKA5Kzr167boOKtUDOy5nJvZQCLtsfb7+fh+WEKJYa6Y8Z3VDLbeEMeIStvCX5D/n9KwPz556brT/zY9OKXflM9p8wLzIBDFHQgr6f7Cz3k5Z1uODeZSKeIHPPOhOtZDXK6SD9o9LIM2AdrAdnapce8DlHKFzLmg+rE+Lf0SZJeMhmM3WiRblI+Y51jeNQ93oby2FtiuUesspqswOi61oZlWPfGlP3Ocntk24iU3wF6hErjyuwAfRwtQy3hM2sSRGPyuNagBPTlN+kpj4Jwb3DozbSYcWPIo8OMvTGmv2tAvTSECprybno07B3Hpr2HXoB67T5w8tgaeOHgi3DYEE5oAffWPiofKJS2WJE9QwRTCHoSEXn7iQEobV7efLMKXnRslRZwZ/7UgPprzz83vfzsYxWon4dHvdFMDTuXzyEtG/vGitDzAUqvut6Q7AnPk7XuFsCK7hc5Ls1A4O1lr6/odw3AR+unyuFVKMH/77rv/dNdP/Czt34+h6svTK88+dD04v/0yWXq3loxoJ7ZcykaO4WZ132kkZV1L/e4FTXi0dFqW/tWfmeGW/Uclz3pJXxzwDUdS2V441bSiuhDAwzyyojRJTJSjY8xsBwFyhGjliYzevZPZJ7ZMhKos39n28PyO0DfSsFc/YHHNtfxG7U0hrgXOiAAb7RBTzvSTIbGjwhvt9ZEC5k+VujSQWgiG5yVOE4LjY+GOs4gunm+G7Buw/A86qUcA+GaJ90C414oeJW/ytNq6IVsZc21JsllDjwhM+fQPDCWtzeyz7QyFnjPeGdG8B+0vKPSoM7BCMeUdTwDgacU1DvqJ+RRb0D9ym8/PL38QjwSpGctPc8apa3wkqt7LaBAs33TlHlcf7Yf2m+e0UereyuBNlw7K4yTedHDiZBIxNTJZGaf3zIv5+K2l3p2+1md81j3gz5kQjkwGmtgrfx+e8nbIr3v2hOICjm0s5GJWpH7DeWfpKd3DlXgJ6/TePO47UbeyuX8NzyvhGS3cqonX+FV7EqClwum8i/IC4N6Sf/OzdVEo0wUoFu8Vltvy1DQ0682Uy/yqNVDTzr+nqPkYekdoG+lYK7+DtBz9NpcWnsHnXnP5R10TAynvYW+1aPuhTGxO9AaOJRMezPhVM4l7qEj+MYEQSzMvTeJ0DweDaizJ9qyb6ajd4Elk9OE4iKc58iAY3gqLMUkqggtygYqLqo6AAAgAElEQVRR5NiSy/1p3W2MJNGj7TvGCSb8R3g2mXLA6KsBS+apaW2eIlC//LmPT1efeXQY28juVemJWQaByZ3IXdG6DhIMGoAdFTjap0IByzijeQ2XsxaQ+p7xZ+vCaE8ElXZl0qPy95AMxcJge+df/e7pnh/8x9Nt3/b2rdM4bn0A5rgmHjDEwVmg9bgTudE6GlhHGlVR5qDxOOrNtmihge0IrT2ZyM5crVMVKfCCi+ST5TNeYT+4kRN4SeJYe0Cuca9crnOcn09jxpL6XTgN2HosOpHxYoYm37F9zxif4eWj6K69jd7aRwNn2LgpBrgD9FGrFWsnIKpjDe2lYhRgHnSsyULaWSh85L461ot62r1Qai0kXvO0yzmOCnOiFEfPeSuEz7FhZQxxN4A7gnLPm45gPRPergFSpLNmOEG6V0EjAERUyWOWYkspGWE9tkLp5Dy0u8rWPovO2zvVmgXdq5f5ngWX2HZT/F6vQL2Hn2jKHBpAGuCufbTEcdKbJxPGNU15dejOtGfVi6Y825TZH1pZ68wysGCFAI8Yj9WGdV/dun8u77Cr5WZ+d9s3TtOb//5Ttz4wn6bp+pcenS5/7kPT9MIh1bYYT9g+ZMBlSx/RvcJkmwbmljGKZ9rC/RhnzDJsro5xANRZ57B8s0AbflutE8lpwfLItf5XZxuA/Wpdy5zwhZmgV53N1YsClGuIekh0LaPlGICWcx8h/1GGaDx1hC6kzZtlcMey3hOXUZqWcjtAz1Bre9kdoG+nYaoFC6Bj1nb0quOb6VZovBzUVq+6ZKYsZBqZ7bHuHbmE9pIEMZBuJY8LZnVnABxD4zWQ3ps8zvMkb03OwgSYJ9SOKYgsg9FKkepQ4Nx9pRRg1napiEmFKduHpkhroZZSya7nEe6ly79PGaj3emC8vSvXRwO2C0Cvi3wGvFe8LhDebinxntdFA01lXAWoRs8fU16z+/MY5VkYp6aAuknjpKH23ml603/1K9OF7/rgMYY9tE32ZFrjKexMR4F0hJ+jcWrkxJaxizMzWk/QjG6NHzKPOvLKzJwtPmGFxMs+tTOPsmW5Qz7zmFVGdyX/xdIGPkQR0PotsL3INZJIWH7L0NIqWzznrxljtuSwB5oj58fbV3g+maFT68fqPzI2Sbfo9aBm1HR5KFmUHaCP2tWxdgJHNdbQXipGgcgddPSMs7fSZcg73kUfAchXCqtyj0wLua4CSHhpezxcIWpGn1krjVllWcI4SDDneclxvMzLrs2pF6SHaDQXQkCPdUeukQYUsgIHx6h51NncenIjaCCOgWUvfHKU4seUudXZJCH5bF+wuZ0yUM/s/WhZBCgHyvOsFTevem13zlTdwLsF2BkAkn2MBhDavC2F09q3W8+vtQ5aFmIMw5Th7pWtz3yaKp33TtM93/fwdPH7f3Ka7n5LdBvclHINmL/8lS+uQnU1Qxtbi8j6YHttsscE5xZBD0LeW5TKXCkbBRXl4ThvOUZGR61dy2iGID0lF9mbajO/QbB+EP4OIe/1TIuHKOo4LM96o70RNRA5JKgDol4YaSNSxjK+Ro2Wje95hhVLtiJf1c5uZE6jy+C1od72d4DeS7m+ejtA76Nbdy3Ng47e8dYBC2P3wtY9gO7V9ybHwqute+hVrpyjZ3MZP7uTXrU6uLfuTZh9J951K/Qds7rLbO4jADoThigQtVDw7PQj3hgUeMySHe3Xu26xKFvkKbasUtDjobUAfHiOcH8O6cWAHCqVjebt94jCXsoWoP4NP/Y/Thfedn90uDe1XEkmV+6oX/nCo+v73sFRoeer8idQRpkXpDYvQXqTnqjwNtAu9mP0rq0G4tl+QOXTUlQladh+xb3EgFxG2Q0uxQ1WfftZFID8H3tyLZSZ+JSA+fPPTVcee9/0yh99cZk6GmrY/szSF8trxijkIdF+NB7N6i9nwTgnrr6QjFbBM4/GN3n+o3yT0RT5BgN8obOI+S6QR2HY+8y/rNcgl5s55Ak2dv6jcrfJWMths5qzwRfddY9uSFIuwi979oFlFMrK4sz0vGcsS1taVBLrJ3InfQfomRXaXnYH6NtpmGqhAPQsE2LJ4kqnGBJffmPJ47SyqYHPhbOCWDLtqJLaMy5ah3nNPXAu76IHQ9wj443cQ/eAuhXWfqAsELCaoX8PUG1jYAAoo2RG9xjzqGNdzZhUx+MYjSKARwPSlqKb8dC0dqTSHtlvWY9YKX/Xd9w/XXrPIycH1Lckk4uuMdIcveirZ4zkvfRZwq68KwRcWEaDA0++sgFQuSzKGfPiacYHNAKxvbfF0MaGbYW1W/tcy+j+5r/74emOdzxy63vMn39ueuk3fma69sXPLMYhy+PKzv+ItUDQwgxVxzTMILg7tqFfk00SSOG+j/BbqwyjsZSVsm/L67qMnWWEA02e4PuzyAzBe1Tvv4iYtOZl1Wf1LHnryeKtayDrRwy0cg94a4t8l62tbOO8z9jI5yx3gD5yJ/pt7QDdp9HQEpEkcbJD7V66lSDOy/iuTcjzvGM9BoYWYUPAz3ky4ToO76k1OSHtzXQZ/g6J5KJh795b6khXBOoRwCpDBfHfLG9A5ApCZL0s67GmVG49UBgWydpDY8QxlINecJeZf8bzYykBmT7v/s77p294/y9O03/wH2eq3bSyzaO+FaiXCViRChRAsXDRxvtI5mXtPeIVgBeUPCY48hTV81YkvQ3EsrtXNn/7NNXM7A/+2km8ZX7tt35xKk+mTVfPZqytvQQJGYOb5R32aDwC9EuA4hmINN7N+LVpNG53s8mTY5KOSG9tvlHe7nnIsW+kDTPwqmsteQ3eO2+8qyWkLLoKgnaSLG/ZK3Wg69WghuTgayvaPkODubcfe7+3e+ue/Gw8fzSftda1d05b6mn30zFKybuXvgP0LauQr7sD9DzNNtXIAvTWmZYQrnxn39DrHs3e7k0uAo5kGxmvrde3+j1zF102IkPgMYt7KTfAg45Pq+F76lXBFKcw40Xvphe8m76lHa/uaMG3KDiOlZ/t02MpB9oczwvgeECLKsGBt9jvfeCD06V3f+zWBz3zBAtQ//o/e3C69vtPe9vS/M6UOhO4yIR8Mtt7YhQWIGD7K+pVTwxBvfucaWNLWevptRXbFkbTU3wyrQHzlZx0ziPuD22PRgGHxjNK/ZEg3doPVkTYCF4dAdkWb9SAciYEXgOIuPbtb7XtFokjjIgtigevq0fO4MEa4zvzLQmmcQ89Qge2xlmdMOIoyM5ZOg9WtOjQ+SR/tqKQFt3lJqOuLCiXtN0BemSnjStzk7fKuImcSktRgG4Bcpwrgm+Z/Z2FwW+hlefN9TyXW7OLu2PPgHUE6Nad9dJxB/O2xsueW/MAujv/uYAWKoj3xKpChknyop0IZU6rYimSUWUyMZw6l2Pvsajip5WLGi080Ma8N0zxlvSLKFVSkSjlTw2oX//K09Plzz7kAnVvfTRP5EJDcR99pXxhKCk+0SbC3q019M6Ody4yay2BGfu319d5fJcA/q6/diJvmRex8cwnpq8//pHFYx7llY0/MjAn9w3yE7nuUV6FY9KMQlHe1bsfavto8FKS1LI+MvPVjB4IuI41Z2YIUYEju4OOoFoQBJ3tEVot8zTaPdgnRib3hScSmSxlNJbbqpMg/7J424pvN92pGMuuzxGYhHDRPaYZZzL7KcvDcbheZneZdDOS32MH6L2cra/eDtD76NZdq+cOuuwsAtwj3vNsOPtKSQjeUWqMloVYj2DC6UWIZHIffAddhrezUHf2Hb3ucp4MwFtGE+1OtlybLKjdYtHOCCdNGbDWndHCuofu7aHoXKWyRUOhRUdbha435hEKJlNCThmoe+voKV24vguQkFncF22Pr9CqD+MeOu3LCb8vPdKQ1PkJtqakRhT1g3MHLwUwpdbbk9Hv7E56q1u+3fbWabr07tN5Mu3rv/zA9NpX/dmz/af9JtcarxH18lcGVtuojxGtQfehTB7WgHoiGZxnmI0aPHsNY9r5Y15V6xxq51/Wad7zeq5bhnbGU0T29pUON1es7bSr6cEXQfzdrJcYERmxpf8VDWb009aN7Y+orEZjC9MBLOPLqDmxdthLF/LVi0hyuNbuDtCPuVKHbe8A/XzpPTUPeiYJF3v/vA1b85bjM2ytPAt17wXrGjBkXvQqD8BT6ynNR10aLYFc6ZS9l94Gk/Sie6B8UT43nEQrVNCioeY599bF+17XGjLFMkVSCr+oIPT2hLXHcNyReXj9Rb8zb4lUgFGx1rw7SFsvpK61G1Gysaw2t1MD6tee/fR0+fEfn64//+IyJQ+QM0Wu/Ib0Xq0bS940N9QUam/PIThofUaAVxSsWQppmzcz8lhe2+g5yJRbgfU3zU+mvetjmSZuSln5ZFrvAKL7AJV+jadE+GsEwEb24ersBIz5LGcKGo2Z/hChrTanyO+SH7J/R/rXynj9u3QWvKa2VRnFLHfx38ogqsoh9Q4Z1o7fRBuRvbTwEcjYLp01dZhzvg7No76FxsjDtWglyWMrLWfveWae3jg1faiHv3t9Wd8jCeMswL4D9C3Uz9fdAAvyne01JgrQI3SRnnPPi6550BkQ7wXnkTFLJo2MmdX3lNdMn6myGNpeKjcgzgC59Q06jnrQ2V11FgKfmpe4a84UHGYkyhiOvLF4gM9VQrwOOr6PUvwiwr/SXPFK9Ah/bKu134Q8ksNSCjzSsb6wzusBqFt00Oh9AIqEsky/UWZ3phyvFHWS6IrtIbb3IgYgD5h7oAH71WjXs7exrSUhXAPmJ/aWuXe+rDVkdZFXMoObZvCMrisaBUaso0eHSPRX5gpWjw7Bzg4zRmnGkAgP0Xi1xdM92i3ro2nxDbCLe+SLk73JJXgfPWrkk2PT9omVr6jXOeDRJPo9stej+9/Sc5ihrcnrm6H/SPogWN9D3KO75/zK7QD9/Ghde2Ie9BFDyNxDxyzvPf1HBGsVSoE7wT1CtWfMSx0v1N3ykrNkcpsGc5Ykjr2LLn/b2AWtjp6L0X14HpnW37E9c5qisGX+1p61FOImnJvCFlUCNKVd8+haNM1ELmhAXf5+z9tPK5kc86hb9LWMFQdKlriXvvqG3nXsELMyk2zUmkIXiY6Inm1Pce1R4KN9r5THUwLm85NpLz37mRtTSEZaeTRiIEBT/pGvbgECWwBkZE7o1bRAXWtPgrte3YHxaEljSTPk0Vme7ZXXxqLxdi7MdWprSeTw99V+qgKKtFmu9MDLA737i621py9q692yttdhlzGKsUfkMe5zOifhmCntZ+eNZzhb3ztPW75rYfCY1X33oG+hcr7uDtDzNNtU4/941/QahiRvanCurHnVrfD4Ef1iGxHgnrGIH2OMtE0to3vCW54dK3sbPQvKM0nlWCj86LUoAvT2C4fvLzdAqtHIU2KytNXKW3fyZZ3RdLHG7wlqy9CxGrOSCVoqH1J59/rN0vz15lFHuqPS3vY03btNsmoJl8jvtT/jeSQEEAjMtTMUPVvaPlmAEdEWtoIXtsfuuf/9010/8LO3/usBV1+YXnnyoenyk59cJxCV4DwB1C0ggYaRA7kr7tOy9ZLr5AFClXcG1t/jc8ueTYa+L3MSBn/WVy9glzRDYGzt/yyPjNAnCuRWZ08B0xJkM6Au2dQq5D3xRGRUB7QMK1vXLboOWVnaKyOtfiy5Ep3HlnJemPse4r6FumPr7gB9LD3d1hpAdwtCAe+ZtVJc3kdv1aVn/WZkd2cJujQgdF5MeumfZS9HDzkqW6Uy1nOUMCvMXXuGDe+uR8Ldtbvo1u9lOudJ92N5ZCzDECp3FViBojeSBswaH4kSsICUJ/DrOoqQxtUZ6wizV8MWnYRhpd5bfvjh6c77Hrz1AdZMpOZRf/XPX1zumEcVaVzXg+iExiuYwls3IumprGPZnw3EQxEG1Lcqkhpok13L/cXAfFamYfmSmf2uv/vfThfedv/Wpo5b/+oLE75lXjsMgnEPJEQAtGd0ixplooRC4xTuwWg7kXLoWdWMqtrd9Ugfi0ww3k2XPLX9ux5ZcWaz0SuWEaaNifFxdr6XNZ6Rd217bkRNh8HeTxeJ5pZ+iAGR7qlEEj/U+9q1xyaPl/nP99Kj67i8eQ6e80h9bx9Hz1Gl/Xx3PSL/o+3iHozMaUsZL8x996BvoW6+7g7Q8zTbVKMA9EU4dDxv5QF1BOnoQW99j3oX3SOGJVwjoChSxhtD+Lv3RBu7qx5u3C6oAfLmIc94yi1BKPceoy3LhGuV2zL9Y4H1yJhYKJ221yJ70FO62Zg8JduaR7S/iFdO9sMUh/ZbtM/S3p3ffO906YGPniRQl8nkVmeJGDoOADlkBq7fC99o2d4Fz6/7qpR3pLB2TjzAbHm3o8AC9yj2iaCiR6E8aWB+hCtPkXMvgUUFOGTfyd+tdYmca8uAkwEbXl+eoVXj23Wu8zlrxq0Dvu2ASRyb/Jv9m4HmiOzxymjj0MDkwmPqIs+tkys1K3pIWjQeRYy8rZnVXDvC3KN7RHPosIg2JpcxvN2jNX43DSFKY2VuBdgyg6q13y35H6VXdn5e+SX3x+3T1DK9lzoNuO8A3aPg2O87QB9LT7e1Y91Bbx3ju+fWfXMrQdzW5HGaoEUB2wQrA4YuMUcXQIAu/9ZC4KNjmL0rDIhjWDuCcgTnI8E6W48VKFHeOUXvhUcGT1ChAnleAio7D2+e3ndPCewBOKxPVOBXaxrg+lvp3+Z5ykDd86hbirQKjqX3LeEpcoGN49Xbup5MkcXoAW/v4/cL3zRNlz70hVvfY16i07706HT5cx/Sn0zTvOdBr3qVg4o316Ir89bJ8mzdWx1rTzTQwfgRGne27gOVf7UrHw1zkrB4Dbg1enrGrwhtl7bmwppxa8QZY+sp+9MMgss84GpNA+/SGLjC7ixZXHt2rc0X9mbrawGzAuxrfI/pg8zY0tqOJBXO8hu6z4TXXTO4ZNbVO8OaYc2bizSM4n706lrfWaI4BOYy5H0H6Fuona8bUNXyje41dAo0gH7eNNKywEsP+wivusWID5Q88QTHCkB0RBZ00VPzmFuecnyCLaGAZcYoQ98tQJ55F93yTqDluipmCoCwhGfE26wpZJ5HkCmLGZouigV6MYXip4VXjryTroHnY3hkUOFrwt3yrkZpqnnVmMJ+xzfdO11676emi/d9INr8TS/nJZNDZUzuT+ZpPvB0zZry6nc2a6EAo9dFU96xGQ1UeETW5qgpiRFl9vaSAO6HHzuJvbB6Mo3x/kbAQTKLKfCWZ847g9Hzb+0DbUzMA+jtp63ftbD2Re4kQq41MMVoJvnmIkfgKVE5N3kOPOOaJg/b754hBeXGygDTDOxN01c0/sVTvkzuxpWp+pPwzLfxoD4ROfva+nsRbVLnQB0j69zxjOTWeVvxPUX38+igGWGOIf97zxsmhyvtFKB+189vMXn1juaNW28H6Oe89tKDXg87vBPZO5xo6Dt62DP9bfWqS4CkhVJLmmTGdtSy7M75YMVMJozDO+s4NwbKe73qsm3tOgKWqfJ6VlYZsM+shRRKnmDzvptKpmIMYvOPgvEeY4QGzqXSh/OIgKuo54V5v+SYtFC9zBhQgZXzqR71EwLqrz3/3PTys49Nl5/6ufqOuqZsW2D9YF9KbTgBKFZ71fG2MvCRBVQZYBFRLisw/76Hp4un9GTaH3xxvXyWUZcxoI0GXAtMsP3A+EArx4xGOGTJC6z11wxFKwCTEQTBsit5A2HaDTpIvtzDo9sctMgA9GKX8oxvRuUVykBNFmjjoaSbow9q28Bv6top9GZ31zG5nOaBX/VD2mf0kDqH51E/plzWzpI8O7i3l/mQMx45O7jPLB4a3UvBY6QWY3fQmwd9B+hbqZuvvwP0PM021WAAvVeIsIHgG+itjPY2evkuw+CP/QQbG7PGpEvZkbQJL1wD5FbYomzMKx/u+KyglyAuA8a9O30HCpriCRq1DhGPjxSKGQBvkZntsUURUjzolvEsSw8UvszzGQHB0a0UAZJMQUDlMwK8DvaQuA8r+5BjOnWgrq2DBtSlcncAlGRYKvv33JkGnlifcnzRNS3lmoImx2ieKwitZwDxpID5889NVx573/QyAvPKmOdEcBpBBssBKiuVlxoWXmbkSdCU/Izyb3n/Mu1Ezg+TTSyxmDT213M2IJoB54n0lWPDc4njjp4/j7czXry0baJoFrPOe1tFyIv305fSGxADRqcx+evpI9b6e/SL7rns2tc1KBaP5gQgdLOMMMhrszrPiHMXoV2RDXuIe4RS48psOG7jBvFGaqkAdLTwSka1UqzmEOPofRzLiy7bHR3Wnl0/jVF7wjULirLjCpXHe+mt0kZPSWsGn16reqHxTnoku7s3L8tAwvaj9Vt0jTRQEfHyePPxvntGi61RAV7/dZ8TRZsJcfRUWW1bVntPodwi5CP9aut9aqHvxaN+/Zmfn1743CcrScMGJ1CgF2OM9mxU8w4qGd2x34hSyYCEte6yfGZPy3rf8K4PT3e845FpuvstkSZuXpmrL0xXf/0nppd+R7xlXplvEJRbciDxVKe2rouOoLyigHsR184z4iDhI2eajan9NsLYqO2/+nszAgodSQJzLUFcNhzaoovGr71NbNGWzZmdbUsu0CgpNFpI/tJkEca5t1dBBJ+r4yN3zrPyA3WOQjMW+cDC2VFPjOoc3rpo37OAWZMLXv+W/G9tem1Ev7On1ry6O0D3KDT++w7Qx9PUbFG+g64lONlqAWZA3XsnvQy6hbBnQtkzZSOkZl7LrUI10u+qjGaBZxl7pfLVFDrsMKGg1SZmQK6Furekcq2bHpCueZRRyWnCMLsGW4Sm5ZHIKAIeEF8UTPCgZ+eKimp0v+E8M0pthA6olDOvqAf0pNIQnZdUULQ5YplTBOqXP/fx6eozj6ph7zjHg/WV0tcKdRcg3TLseMYtzZOXAWO419keK2Xu/o7vnu558Ndu/af25JNpLzo7nCUKXZgwAPkjeNM9gwkDbRSswfWI6Ln29okHGnt5iQWcVvMD0F7qmbxcCZHX5sH4s8ZTozSVPMKqoxnXqr4wZ9w+KIPa/RzXvqzj/J2FtTcQzsLZ25jleCsd6oezXxde03mFR+odKKdZnphWZoveIeejyc72O5O/1je2tuw8ROT6ir6S1plNFywrs7qXKrsHPUi4QcV2gD6IkNFmmgddMp1o3d5y7N65BcZHg+7MuLcaJzJ90bJeJvdSCb3lEZDeMTAv4ztmf69Dm4VwBrRbEQ1UsDjZdKMRH9g2A4uL4GXhdh001eZThR6JWOkF65mhMct5VVBIqHimXY2+Fp2b8Jf9R/r0lHerDTn/UwXqL/3Oo+YzO1R5Fl6sSh/0YNXFuKH0ejS2vntrHlnjRWYZYdYFmJ/cW+YeMJfEYS97lO8Zo26G2Imy2vpbwNgDBBEDG+MVXrvatMw5EK+5bId5ZRtfx3LZ/rW9L8F8A/CNHowGGl0i9NLOMNbVQqaXcqD1V7ajAWnJfwQ7YnfYmREB6WxG7JAXY7RrZpgDp9J8w9WGCO/UzlFk7SLHGPdShmd7xtlI/6zMDtB7KTem3g7Qx9Ax3Ip8B31h+uQObLjBAQXxrfQR2dx7huVFFIxKTNYztoM6vc+uJb3pVfcTHvXyt/YsG5tX5r66qrSQRIbHtFRLBUf7N1q4rbHLe2veHOX3SMidVn7rHrO8UVvbxvqad8ZS7HFdNAUWldWIElvqnCpQLx51jTaMRitQ0cKXPUVzVpqXdSs8JSjJvbW2PEN0/POYTwaYF/75zCemrz/+kWmagbl8RkieDe33pYwF1mW0Vcdb6Xj+mac2wgc0TyCew1KuzLf8NwJWLB7dvpX/jgIvKt8GYxEmGlvxH+06SYSQgWfwrDXbws/ZGiKN5d9tOivQVvYqoOr6XfIaAsZru/P/VTla9kcD6vM/DuyMwIsioNxaAhYJZ3nRg8upFpM80tp3uL/NvZ68AtmzX0adNRb+3n7bs7hv3V25+kGxnmt0L61ToAF05rVEgOp5IntAEoa6SzCOnvMtnvRMXS0UOWIR7aFBan/KUMVS0bqTqJWVQpAx6iDztkLfNc95D0DPhIYvyoB4kq13TZhi6IHE1Fo6hS0PjGXJj+xT7FqbK4Yhs3qogHk0sBQ8zdsilQ/NQ+P1G/luKUPl26kD9UYDy7vEFOWD34CY9YwVZbmADi0lM1mArOLX2mbnsPxW3jK/+12n82Ta13/5gen6nx0Shj0r5O5fK6P7Bj7v9WsBaFY3u+ZWGxZgYftwBP+mvBKiuCoPlnejlbvpUl6Vf2u8u8kw5E8a7XGeo8BSHaOS+E9+w3JMRhyMiUXseJtPfJdzXviEBO9GW1EdI7JGniGdffemGZHPW2RkpH2Nr7uyZCCqkx70PYu7t2vGfx+4lOMH93psUQL0TJhOD+iJJI3D99ELza1M7j331OU6atZQ9HLiXWhpGa+MUTzzJdvvoVNqnyEIb5XR64We8iAIX5oTieHwN++OemY+lqCk3gjwprMkLghmrTKrvUGejooqRJk5S6HPojIwrJ2dU0txSI8FvUCCK28JXYso8p63DOeSUTwtJYQplFrb5fe7v/P+6dJ7HpkuvO3+LHlvSvmSTK7dUcc9LpXng30k3FGooLVzhQp7a48ZYqLGGSynncu2bktm9nd97KbQN9Pp8pb5H3yxeonL/7R3fruAuhxMTwi8FzHhTNbikZ7xZjSA1owBGb7BpusZ8Q+uJxHPetMbegyq8ozVdsAohqAJ+TaLHGpnic43kESUndkVnZuHW14PE5fKKWCXg2mROutn0GuJ+om8A48G5l7jENM9ljUwIk7P40oa8ltrHSwDJ+PbKBfZvhlxZjP8U5bdPei9lOurtwP0Prp112Ih7itlyLiH091psiILcZcece3fyW5qcUvw9lg+e8ag1pFh7KUQhi0yj3lrzAtl7wTs3r10OZce73lbk6+7a9sAACAASURBVNaOFx6OXudeAwkqmRrYWMYllI6tyh8T/PgbMxBpXvUte5CBr4iSw2jgAXQP6EW8Qr20xzlpCi/S8q7vOE2gXu6oV8VWKPYrGmCmppYTofzOpDS5M6qtJ1ME0fuFa63tnQtvPr23zF/6N/CWOTmg+P6vBeTN881e+Whyo1REmdLkykaQLhV7a3wRXhLlXxH+Itvq5RXeeFQDBdCUGV6jYN2ba6O/lE/y3Hm/R+eYMaiGwaHovN1HX/oxEIJkWcv8Z/7WALw3L+27pVdInQT1x0joe9RhIM+UJq+Q56rnK6jvWTxc0w2aXLGA+6iztwP03h3dV28H6H10666FAJ0xosoYEvfSe0CRldVdesnLWJiXXRJgZGj8ItSEpxaJzbzrK0VAhFuHF8oKXcdGokpYU8hkfcmog0y7NkMyu7fftTkygJ4xiMh2tYgGXC9tLN51jYM1Js8JMdDOlCBvzb0oDgTj1t7KWOw9JU+bH7PQ4xxRAHt9eTRi38/Tcq8ZB9o873n7B6dL7/7YrZ8lfCYketQP1rTsdxmWK71TgVBUT4FEZbMpdXh+XhfA/Pnnppd+42emK0/Dk2nzZDHxkbxr7t47bzxdgu7oYcK8JR2gvJ0LK/xVem9XPNyJUJJts39rPKHRzOs3YxwwgShJUirlkGZUXnjKfNbqmZjXIMMvLTkkz5lGe3YWvS3kATdTHjTegto+etjb/fJmRBTll/4Pr7LXrlf2RemlJ3f35VWEWpkZG0tm+us3EqUe6Afi7KAjB3WSHv1Y2+tsj1u8VyYU9vaYJ/89mdjGbIHxrUB9B+jeSR37fQfoY+nptqYliVsOlwMuRzEbNlAt3P083k2PhDRFrd1sbsPoxoB8JmFc591EDaBXfRFOMXuGTYJ1y7OOFmhUfKJXDdyDoBTQFBFmqa6yHZ6O0UBk5M6bZrU/CJ9UlIOtcz5QQiCEMOIRyY6BgX8Wppht11JwUEHFcNCIotHKnBpQv/6Vp6fLn31ouvb7T6+ScSHwqufwtTnJFgI58jyUp/xJmrd/Szrjb3L97n37+6e7fuBnb31jyPxk2uXPP3yw/TDxEYL0VoGB9RBo1w6IJhu8CKsRBw7aYACgB5TjXmJ8C3/DyJHM9DxArPEa+Vb6wRjhqhbqXxl9gckszRixlQ5S5i2yuWW3x2fUxKSZXFz4fNMf4KUUGcUvbYQSv6/KIJqQ13XEqySZtWfrxuSx5QDIrKU2NuSvjN9qOgqVZ0IP1Hi3Cfy3EHFD3R2gbyBeR9UdoHcQbUsVfGZtYbKQYRTDeFifIxiPfILNSuzG7p5nEsFlaMbCllhY0xbAHhpPJiFcaVDzrHuekoQnXY67AXOW1Z2Vk7/1hr/jfq3KGon28Dzm3t49ACxCCZHKxkgwyfaTBc4lPb35hPbbXMhSBnDulf4Kbaw+TQ8VUfhQyei1xEeUbU25teZzqkD95T94ep3pWnjS0bNU95gS8h7Zf1GlsoGIO//KiVwnEG+Zv/oXmZO2Ljv0/jnKg/Z3//BSNaNKf7RR7bxroB89jZrhtOdqDhuzGxmG96WJ5hs5Q5Lfln9rkQytHM5vtJHV4qcMMFKDNkboBAyDeCMHgXrUcG7KKEWvsKL5tBD36NpGzoMFnNHY3GOQYfK/7TVL98E9N3qvlfZ3gB7ZIePK7AB9HC1DLUkPuiVU6oEEb3oPk4kkitMGrj23Fk0UtwXAM486/sb+Di1CtJCVpbe1od0vxFB2qaCxd9MVkI53ztnQZRl8ki2jzHhk0ULD215t9S2g28p4e9lTMHGsCFJ7AKTlZY/edfPm5dF4oSEJR8VvGaU32q8s57XfQ2NvHJoXQvOyY3unCNS/9kvvnK4/f/bmFzVOgAKN1ypqHXhqDQ1cGt3ZGt/xthMB5tM0XXvi49OV33546gXmmbvn2r30sIedvebhedITxlvLAEPlgBHyrp192Q67VtOABONVW/mFZVSk8kCEstez1Zwgs5HLMyJbZ0YL52dnGMFq5iyyeTHjB+uD8YCDdT24SH7WY7uLfuNNtXUY+zKu2euueduXchJpFAMA86jLZ97mtfL2jHUVFEPfJXg/tnOHgfjImWLyX+6p9m9Pjh7r+w7Qj0VZ3u4O0M+X3pN1B32lHJN7VozBjPAsW3fMEYxbGd63ktIDSFX4D3jOa+s4q6e8/Q8BevkdAXj5jXnXsQ3P0y7uotcm59PbvOEY2s7K9Mwd9512x28RLpDoMCMM0SPQ2kRPhVUuIwgj9ECLfRWSSogka88C7RlDBCpczNLuKTTWfBlNNY8ABZJz471j0ACGHHO07VMD6tee/fR0+fEfn1798/lxbnlvVISgLgnjyL1NzzhkGT8Kje/8lmm69KEvnESm/EKvq088SJ9Mi5xpqww+LVT5aIA3L216kVfWG+kbAXlk7qP5RqTPRTaQzN/4zWvPAuqVRwIwt9q3AB67G115v3H1iEV0WV7USARYREZ4a8r4OBq1Kd3lvXTxBropRzDr+0aUoTkGWJQp6iYZ3UOb023FoBCYQ6EnrgPTW2Q/pXwx8EmdJRKtIvchO1uRfeWdM/Z9B+g9VOuvE9h2/Y3vNQ8p4GVxZ8q/Fe7uKWVb10CGwJe2WEK48rv1nvrWMSwMCO7+st/Lb8wyvplOLMEPJgpCxayNl4H4NniprAlCaZ5zDGtvVfCOunYvHX9XhZKRiKftUc9YguuQjQjxPCYWSBy15zz6sDv5ptIXGBgCZU3B6wmfC3TP9bSN3jZToSMJAVl5psR4gP2kgTpJ4qSBhp51bfvsjm+Ypnt++HTeMr/yr/7hFMnMnqGJBODNI46e8bCnnHWM2dsTQFw25/FELFvlITwJtshNJUqH8Z9eoycDgSPCn6NrS/OKtGsixMjV9AcEdhZPZvRU5UbgOpLF09BIq/WNdGded48nV1qIQkyHWtkOG79q3nHhKV/WvCoPZ42yeXr8nMoFMJZ7+t9mXVAhnGZgptFfxvlnayfXWXbfc5Z6aNz63AF6lPOMKbcD9DF0DLeiJYljlj/mHV8OKvFSjmI8Milc6c97do1NHj3tW8LdK083Igpa/6PmH15Mq6CWTI7VscIcCSPHkPbSJLuHrpVjIN3L+G5FN2hCU4biyn0boa/nLcY2ehXI0FiUs8bOotVeZn96ijh6QzUBHpkfoyUK8cjf9Zwa99e1sUTmKhW6HgXjVIF6CX1f9jYLR51BRt1bcD+90hVC3+UavV6fTOvZ87IOetDZ32Yf2RdBZGNeyPvWyc31La/soC5Wzcgze2zDqnl1cL5ffcDzNiT+tICZ7CfksU4SX+O3CMjbudeAOuOpdV5tv8z/LeVqWSeiBFmVlE+rvhQjSa++UeepvIBkObra+DIyOqqDUIAuDBSr/TOf/4hMtKIitG0kAX1yq9XiO0DvoVp/nR2g99Ouq2bEg74wMxJGazEQ7dsWptPGwjK5j3wP3SImJv5QFf0NodXuYkaVrky50mlCIfO86rU5xVsS9Zy7dIAC7G62BOaZUPCskNQUo9JOD4hD4c6UOO8seSF2zLpv7n0lnFIqXFFFIb224GFDuma9MtH+cV0tj0Kjw7J32p1IyEjcvp88UCcJneg76QqxCy1PCpg//9x05bH3DfeYa3uRZXe33kTXnmgLedvRqx45IJ2ed8YjNM86nilZt5evelOzQLsHVqS+5F2/knxT3kmPgE5vDhZPZnW1OWs09uggjdRW1ETj43Kd0YBSw64bCBfZ2AuvMRPEtVfThOw4mnxyovykPPcMCpG1pWtYaFPGoehdsg5GYUT0FNwjmsccgbdcTzk265xFzvYO0Ht3Sl+9HaD30a27lgfQZcisJ2yOwXQQiEtPeDQ5XDdxghVp2BqAcym0g832F/NAOd4/Z2+ho+I1SBErk8K76m2i0uvek9W9x8rd+vbC45myw4AbCqxl3Y27jtZCs73FFEA8ez1hdR7Yj2zIY3hlkIYrpVYJdY+MdVl7BTyjMsPKR5QIpoDKtu/4pnunSw98dLrzvgdv/afD5oGv7qjLuNK6OIcJRbX1uOs/++D0ph/5xDTd/ZbMkp1/2asvTFd//SfUt8xHDAifXqu8sry/PF870sC6dh89FRLPrkxpkxooC1gXnkdb8wD2rAEDHMwAJ8FmlF974/EArqkzBD3H3hiQxzEvqOS/mfYY38b6llFb7UtJJNdz3WZZV+E5t7y6LP9NREc2oyhIAuYeOpv70ri2FdnvzKuund0m7zTDtvyujTkqV3eAPnqn2O3tAP186X2QJM7rHu+4yvIjFHytfyv7u3ff/JiJ5KQQ9UCRR9ujfdfC21n2djkI5T56ZJzenXOZSE4D7BFFiN25LvUiQrOVi8xHE0aepdoSUj39Zo0QuD8x+kMC+8j59RTaSlPBxZnBwgLxltIq61mKJRuDpmCHlWRQcHCOHqiIrPXrBqhXDezG3c5l7nMoatkT5cm0N//oY7e+QUJ5Mi2qQEbWPVrGyvAe8pC3jjQDrWaoLfVk/hItnDgI3NFz5/FQPM9tGmwNIusS6f88DI1UNkB2cRmNQvmzzDRueIm1PRYByBGaLnJGuVKUMVyvjATSa143whlvWckCSBxXxwJedlF1RYo6XBIVtvDzVpEQ0DKeU33BeaYtmxMnyjewHNv/nlxv9I6W086oZlzL7DE5nx2g9+6Cvno7QO+jW3etSBb3CNhBRb/ytUym2eQMIu+lR95Rb9323EnXPOdVPszgltEAvbXHptWKtCxxXFCxSi6RW5xlfT926DsLcfeAqabEsFCtpkxGvo1SAr0rFxYodxcpWICBcqSFFO69AlkqglLYa0oIA9L1fBKveXRMlpISJNeqGPbbgPrFd32sp7mbUkd61KmCXYk+TXf+1RN5Mu0mA3PPc17IaYW6t++YbK78ns4AjzuKAfkNuy7CXxsvkWfX86RHzzPjHayfDVPcVJUZobfoVgjQ5ODQWMIMm1GjZmTS1tqHjKBBxLAC3NJ+GIhsi+i/1lwjRnXsY8v6WvtZ+3Yw/qRO6BnPZfsjjNmtvR2gR07ZuDLB4zauwzd6S16I++pgBcK22X3fY9LYy+pu9X3MEPle8J6ilRfKLhvDEMaqqc13ztm/q4aneE4cBS3yVnrtsjzp8dqN/+LcvUzwKVqRwpb3fWvbWn3qNRGFs0qlJfzxW0bR84wWTNAz5U4LF2QGDM3LbSo/RGJkaciUh/ZbBjzgnEobDER442vK2YW33jtdeu+npov3feBY23F4u+Ud8MtP/dz06lfn59kqEU4ImJe3zJ/99HTl1x88eMsc181bxyhxWWi7VhfLSq965akQEt/aMT3smhzx7qRHlfhoOWXSjGdK2rN12AIi0ZBYhjXCmOoBtRVwAb6W5cdR+SP5HPIr/Nb+9vZ9xFjLeG7YO6tdOsd8GM4BXPU3Z3hf1hoigOiclYRyprwKPlcs2xi19t6e2GJAZwDdMwRp/Wk6Axv/DtCjUmZMuR2gj6FjuJUegL5irkriuMroBKDfynAwxJ393fpg99QZQUYklWNCVwNC0qvu3Xk+ClOOvIeLoYwDksZVxXEG47gO7HfPi85o3oC+pwS1fVmVERHlsIXePcpgDxhF2mkhdpkogRFhdZH5W0pbmFkZBZlSjUogVveU/AN6kxBSDcBn52Tt2+pRPyGg/trzz00vP/tYBerlf6cy9tf++AvT13/5gemVPz1bPS36Iru2xyjPnmGL9uOGw2vPc7YOrGc6o4Mg5Sw+ggDAWpuogo/nv9BUi8rR+HWE91kkWfiW1JWUzO5SdrU2ow6RCH+UdLOiE7J8s50lNOCy37V1Vo0CmP+iNupvQpbVfVnjDuDt96iXYHqyFoG5RU9h8tBbk/Lmerveou31yBlgAF7yWM/oo1FvB+hbdl6+buBo5Rvda+gUyAB0U9CQZ0GY8s+EDLbbw4TYU2ze3fORHnTvPpLlUUdhe+77NXInUQ4q4UHHp9UwEVxpVgPkVqK48u3ChRsgW6MZglV2vWAluAL7OLo+nkCzLMxeH1rYupbIUdt/nqHIG0f7rglgFMKolDHPVK+wxrYs732jfVPKlzMosq7LsSMd2LhLGUvBz85LhjmWdTpFoH7bW781uoVuWrnrX3l6eum//2+mq//6ixWUW9Ed2TXcOiktcVxrF8PcvbD30HjY1TTLC77RQx4akygUMYqVMjXzd1Cj9EAG2xfyvGfnwPjJQQSS8tTaSj9CT6/Mdj534ulTKIdYJBTyx575av1I44Fs1zIS0P7ZWot32fB6P2tjKRPIOeLRQLt6poXMM8O610fP94ixJtVu2XMXzmp4e0e2qxnZMjx2B+ipldpcOMhON/ezNzBTYCtAj4TRNmLjvRpPcLR6WoI4+Tv+u9SVAFwuOIbFn/dmQLB09P69UHiWwZcliGOZ3cvgN+QakPfQa1Pgafe86b20Q/CDe7Q3T4Cn6FGlYBDXY/sKowRK/971Cy3ypQpgogCi0EUPy0JbSCBUxyJ+00BvZI0j4DziWdMAmjcGTYG3lJaMIiL7PzWg7tHuZn2XwFzbw5bC2er0rmPvvNm98so7Zz7sesijHbMQdw2MHxGke2c74tGNnP3Gj7Q1j/QTIe2K//YkdoPIRI8nR8ZklekxJPfIQesMaiCe9pMMdcd+5d/Lvqmb4+zLwV6SifqMp9a0aEspV7W1jOY0yq61tU4MQHu8LtIeGkAbTXvk/w7Qsyu+rfwgVXXbIN5ItTMAXbMImszdeQt8i3DJeM21cHb8vcxFZoXfuhe8kOvzspqu7ptbk9KSyFUNsJ8a1r107a559Kk1r5xlsUbBx/5Gw9KimDtg1aOWpnR49bTvHvBu9Rg9tDn2jmXpS1FAe4QxjsUC05ZSn1G0LYXE69/qB9t1FR+i+O1AvW93lhD8l37jZ6YXv/CZpYGoYin3VdXZz1ljwTvnbQJe4jcNtLtgHqOrSodHBOONphIE4b8tvhkF4gsPDzyxKHnZFjDRs1sXXl32mXwdY5Y9W/Qnj0fjWmzZ7975wsgj9PIenDMJwmeAXGjRIk5qeRn+TjK9rwwPCzHWALyOq058LgDPsW05/yiHNV3xWLKZ7UeNv2VkpmxXW/etfLSNZwfoPVylv845i7v+gb5eav7xfz691sJTonPywmWte1EspHZrmK12P13L9G6Ftvdkc6eMzrCkVn5P7u5H6R8u53nOF+1OSRYnO2KKWvseUNiYJ7yFu2vz2eo9t4wjlrd5JWAGhbyjF8IDZEgTr7xnCFr0D3jqpefssbl4e1Krg8q2N09UKlHQM+XAGm+vgqWtJ4sewD6ic9RoihEOp5hMztsvR/k+Z2b/i889nG6eAQa2jlnDS2QgVhI5+TZ6C29nbXpvpbtAXZMV5fcA//fmaQG4Ki+dqwetfe1sRdYKeYs1ZsZ3enkJypvFSCzm7EXdseuEt5crYC3E25iMx5sb/ct/M8YSlX8pa4nlmZHVpDEkjzu4Zy493XMm92XNxd+rZsQftbqCUKLyt9KSOK00nXmEAcY7eygz5d/s3NT9cv3MYWMBcGl08fYYrnXba5YxrpTZAXpmdbeX3QH6dhqmWsh40DVBIpnOwvAAoGJI8TGtgtKz7oF0OacMOM+UZSHD8q6wFVK8YpYbPbbmxohm8tXeyvUy/orOrcRwxwbtTECyfa0B+Mi+9ZRNTRFBJdOzWmeUghRTEIVZ1AyjgaZAo9LLBG7GSx2Zh6bYefSMtN2UVebhs9aVATdGm+gYWLndo65QTzyZdv3rulIZpT0qm5YyORqws+fX2ri1d9LL903h717SuNKBTCZaO4xS0y7HPG0IOj0lfsXfO0LK5Zlna+/NNCMPDvgoy/qdAO7e2Nh3i5ez9VjpKIHnKzP08GTl8r15yOthnH9VQt3R+e7RoHnQMTpDk1tZuWyFvtfpGE/2Rr737AHrzDAjRVvTRiPM7cL2VOsjKpcZvXeAvnV1c/V3gJ6j1+bSBaAXa1jEi47KOgJLlqBKA594NzYL4K375y05HBLnZt89PxA2wotelYBBSo26KdhTa1hYZnFfNL/5H/Jeuuc1Ed+9Z9ekpzyTRM7a/FkhydaGWa81j7MmRDUF01LyNx9qaADPVvusRXFo9+89L5blrZFCnZXD76gEZPqOKIBSqd/i0Y6OS/O8jFpryWcv/uVpuvShL0wX3nb/qOZPtp3y7NuV3354KsC8Z51xn1Q+Te6iovJ+swgWeT8dxya9564nnckQlFuJlz8idEJ6yzWQ9TWPHa5Z9ixq/CTbjjfXlVG4JSnb4OhA+RXhi2yMjP5baerRwhoHflMBHgmDV/uFZHt1zhLok7vnbL+hsQj1EPSeN73PA+E99MrUYXsDdRQJwsu/ca4Hcl3ogFpZ/L2MWdJVO+ttbjtAz6zy9rI7QN9Ow1QLozzoWqcM1LeyGgCSTKsXtHoJ5LTxZjzjHqE9ZozzPO9wJnov3bqDrk14kGGBZXxnSeTKMLx759baaBZrK8ystWftxyJsXi3GLiX7Lo7JEk7e3vK+a55vFrmBc2N06N2bmuBvghgFsKZsZcEVKhdRABW15rv0B0nGQkO9NqLfmaG0/Hbx2++fLr3nkTckUC9vmV994sH6ZFpmTaMgRjMoRb1s0bXtLccSyclw+NauCshZRJUmG7Ss76UTRTZE6dz4g2X8W/iXyLy96BjiVQbP6MdobYHz6Fpn5nowF5AldIxAYxbuHol6YvKp8WnGT/E3WRbp37uPI8YwuTdq+RlcL+ce7u4v3l3x+zKXFgEg67R76HUz8pmUvuqVAvkEoTNpjNKz6kajLHvprOkm8vzJ8+Pu6RmcW8Y1JpNZdAzuQTmOHaCPWvFYOztAj9FpWKmeO+iakNAUe1kevXbe3ZteYMDGiB50fC+91cEkcSOeY0Owzv4etqhbG8JwdeY59zzoiwYIShrUwwRxVaebM7n3PL+Ge82K6qjCB+5ky/pWvgRrX0rgbQkcVMY0Ybh1OXGe7O9lLIaxJXIWNWAcmQMDPVFgjgqDtwaatw2VeEs5kOvXymnztOYWnaNHQxYRUdbsru+4f3rzjz42ncKTZ94cve8lM/vlzz40vfKVpw+KHijyXmPz9x6QNmpNg0NcivUmkSsNmN5zzEHCXvmojdj8PjufFT93IhcinrfMulhGPuQfkk9E5ugCnEAjyOPq+Z/fULccI17THg9nhmWvTYsvMhlpGT+ixtZVn3ghfd5L6ChvjnR5dZ9VlffR616oQnXtddei+JhXvY1Viyy1Ivc8J1Z5y/w1QFaR/acZZay1xr3BDGsWP13oAIY17dzuAL335PXV2wF6H926a/V60FeCM/m0xKLYwnMhVcgl7llrT6vJsbE76Ox9dMtz7r2n3k18EtaODLryfQKaMnRKj8+6j45KmPYm+uAwRyvJnPZNA/iagMQws2OGnVkCknkm0msIxgdTqBIPDJ5vqUBEIwS8MR8omIYHLNJWU5JRqY+CcU0JiCr1EaWnnmd5h5R42pmRAOePHhsWrYN89p63f3C69O6PvS6BOgJztmbWOjJlNLLu3lmNtOHtbes7JpDDEPfKrsGrl/Kkm51DclEpG6IG3OTkLdAslftl75P3rCXAi55ZNkxmdEtOZ1hx1BG2REF5AEruac0oMnrfs3OmGmTKmhc9UvLW9m94F11GtuO/5R6qho/5h9ru/HdEhslFbmPWwHvT9yJ6oKUDsm8MqC9zJCAezxDK1SZv8b55+z0ix5o8lGeX0ZTJv1JuB+jDWEiooR2gh8g0rtAIgG6NxlIcpQJZD7WSDGMLGGUZ3nG82hNs2rxGhsFLGmQAYZomXkZ373665lVvE9A8rwpQ9+6dL82Kd9HZG+lbQt2lMGThZlpYWZr2xgFpQox5ZJqgQyGmCavIOWRlWFRLo81KuSDGsxG0QIUQBbtGG22+KOA1xaLRVYtyiNDZUmYt74Gm2HlrneX8zJhy9/e8foB6eTLt6//swenlPzzzmDPvHvOcZwCEt8bafosqqNk1zZTXQt0zbdCy1lUoSxaUxgZdicJzrXlduzyuSQKxfZdsYlPxutdmYMp499I4uWuNQDczEO289dCDnTPrtwiQO2MK84wAgR8Ye+ZiCwhpxh3Zhrgj3eSzN1fPeFrbEc/mIf2j0ZZbZLFG5zYWxkPl/DN75mB+JKu/LGPx6h2gb6F8vu4O0PM021SDAfSWNC6aPM4aQPa+76bJiDfMZVh6aZPdSdcyvG8dQ099zQLe09bwOpm7h6VzLcxxg1cFveEymVybrwfWo3tRhsUjwEHlRxOKPZ4Z9MjUvohXObu+lrW+tYUhkW2ekTD/XsVAm5slkCPASlPcpKKOCge2G+knuw4LrcGDnvX2yn61Pd2UPlxfWfekgfrVF6ZXnnxo+toTn6xTstbzGAAdDWujlNXePWXV0zK/M096Zd/ze9Krf1tRVZjBvVREg+4xJkbatAyeDKifxzmPGmq6ZAYJa6+uXuFFrnM8klGkLcEWHobL2AMWU0aYRpvyTJjkHTITPFw3l6HvBwBeXL1oax2RuQfzdp7mlboHk7nR33qOomWE7D1DETmNY8W+doDes5r9dXaA3k+7rprlDno9+CXBRTCbu9ZRhilFvXbZSWnJ4Uo7+Pxaa1tmfcf759n+WXkWUm3djY6Eq40Y16oNTwGThbX7iK2MltW3c9Ca53zpDrzsnd2sqqFH/UBQCG9yFqBaiphUMGWfDBBsnSeLGmhtsj0oFYRFMRN06FEwa5sDQr4jtDjwmJA3gpH+mnLtrSEDjAttBySQs4xNq30zn0UMeZV79qSAungy7ZWvHa665dErpa1IFbnW2l7R1l0D7G1/R/bn1jLae+naW+na2+htHPROeiYSS05og3E2QxfrjGtnOQXu5sGwfhiIiYJznCPusxWvxkRomOldZICve154Z1Hvcvslz9JpYA3lFZ61bCSUNTbvfJp0tzzqbX2N3Sho1AAAIABJREFU19pW99PRgA4RCoucJM/PsX2tGcrbOjL5nNU/Iuep0u9V/e46k5Om/CfnP3JePPC/A/TIao4rswP0cbQMtSQB+sJMNgJ1jfGwEG7L6ncMxsPurbPx9oSx99TRwPst51H3kgRh0iB571HL8hu06mN295XeV7KnAtfwPOnawfDuhcl61nUE76qG5iHQQJ1laUZFhAm0yDUTiyZSOfAUvAjT8ebDFDsEOq1MhJaUH4HXg3nXRyjXmjIr2+4BCFv2MEZFVNrePk23NFAHYI4KYtsf8gxZgAH3U2TfLsqxY1DCfrNKemYskbIWQGfecveptdapdi2K/R7k9ZH5sHX11hrXzjvbHjBge0H+tpIVAtF5/Wq8KrqvV9eyFLCYpbFVHoGy3OsaPVTepbxRnwXjXnRU7Z8hDYdede3kXfRlgusZefxc0zM0g7nnLFhoDmHyo6ImLPp7vI3qIyQvRGknatCRbe4AfeRp9tvaAbpPo6ElWBb3rZ70yv+UcJ1IyHCrvxJyieRxSKBo9vZSj5U9hld9pVCIZHlaePXQRc801hQrzOSObchy0fDGTq+KlRSuhb6X4WlJ4jLTXyk8omIkiUukHwngmpCSio0l7D1FgO0xb98xZQDvx2k0icy3nm3DK8Pa0JTAaH+SnlIRYPTGNj2vT1SRt8aqGSyy81vmGUjaiWso1/hWSyZXnky78usPTsVjXsZZnzMiWX5X9JrDemW51d4nYakRejPDANbDM72SY0FPWmQs0TLoKW9J4xC4ywzwnned9h3l+1i5Uw5E5894rAaUI95hjUdJ3sL4RoZfh+emvEKy0iPE/XQEbW2+UWeI5iXVeLrksWiUZGsQ4afsfKEBgxqum57FUIaCPFpidszSLhPGrdbVAPmW8dxbb8avJb+vdIYcTtE11fqWvM5ad7bvrTaZsQnbt/aTbHsH6N7OGft9B+hj6em2Ju+gR4B5pMyBwuKAdQZKWViWOxkogAniWH3tbnopi8njym/aE2zZsWnM1aLdKItoeKyWJwTvHSJAL50EMrlj+HobG/udPckmy4fn1VEQvdCeoSnbhSYAD/aD4JDHUPio8inCpHHfNsXA2pvRubG5ojckS9ee8kyR1GhdfmdZbKXSYo1BAwrYn6W4WpEfGj/BUEpmmLnZHvWSmf1rv/TO6dWvvngjhXKZUFBLQAVTWwdJW+3fWDcKJFq9m7GPvb2Pd9CZ5zzlTW8dYvRUQA6sxtoJ2Jkhj52jhYcJI03dVsF95fEp+Z0BxS19ybHTPUXuni9ATd5ND0Q0ZMA4m/OWPd9jxPX2++q7vG/OQDU8V9fu9S/GAdGYSAzPE9IpieVWNNt4/1zlbeDY2gratX4sY8tiBCLGSUs3wPPMeO4O0FO7fnPhTha5ud83bAMNoBfgvTD/C2f/6gHjvYS0AA9LVOX1EwHnrQ3tbjrroyeM3Rsr+66FEt+SHnYrnF17L1cqcwFlQdIIQ94xpL03xN1aJ+/OL+7frJc5opBonjkUXCHwAE8cakayqkziHUexXqMEvgRTqOxpFndzvRwvfUSZ7zq3SkZa9ORaXiDL0xRZ24WPg3eN5b2Q68uMLKXOX/p7D0933vfguT3P1p5Me/kPnl6Bcdxrize98BjQHKgHjQAyL0JioaUSfuvtVdzXvSCwZy9qd9JLWwyctz48T7oL2tl1KBaJxWRAApz3KPep8xNYc9wfFqjI9E11gmzkESSQYx7Wdv7p/gqEyFt8FM+GtYc12njGXclHwwYBeQddJIlbzqZwm0sPOnsjXa5/+7cWPWGd/WjYe9XLjWhSL9+AVjcjx8tzbSUJpEXvqKHT469sfSUdd4DeIxn66+wAvZ92XTWP/cyaN6gIkIneXWd9aUDdAvAI2PEd9PME6d59Zo9he/Tf/J1leC+N4vvoVSvc1lsLWZcZ3L1/126TXEUL85ZgxlRsEtOUgpEpd6gAMEUmCjK0YTFjkHZPGdvYajCyBLAFzLPKLgNKrH1P4a7nbXaZaAaTxPKvvHY4Hqv9yPwto1LkXqPcAxfeeu906YGPHhWoL8D8D5++8Y4xnt0kaMC1YICirWkPeNb2bzQCIrKOmf1klbWSyEX70MC5Cdox9N3yqCcAemTMeIYYcGDnDvdEFnBU+WA8H9XLsw/a1KITRVg7yqoMGPNobBmWrfl77aqyKmB4RR7d2lrRfDZe1G8A2OVvy6eZ72BRyZ5qEVFg9bczYY8PeA6b84quZOAcZSbufUuOeQBcMwI0eu0Avfck9dVLqtJ9ney1blCgJYmrh0pkct/iPWceN817w9ZCYzYaWI2sJz6pVupIIN7+RvCN4Fz2ZX2LjClSBmnBhGtPhEGk7+4yEojj3XV2T9Hwslth7Wx83v30LFjP7s+IoNS8Akyh0UAqAgA2Tk/oZ9ZXA3uUPkQxtcCwpYw1ZWsLsCp9a2Ho2vhRqZPjkHUsGrdvmqLKQJxUbhhgtAw0OBcWlbQoU0pUhHe1qAH1i9//k9N091syW0gtW94yv/y5j09Xn3l0HWbc3FcHExM/rOJLz36XxpiVAjh72iVdpdIuu/HAevleQGn5r7U3rTZHns/IQjCArj3BVtpjd9fNu+lehvfaqBjpYDBu8aKIITBqcGvlouvHjIOR9bLKLI4NI7GajCrpiZ7ZMkbtDDK+as4zEcUgeSfjA2o/4Cav6+o4ExagIq8UNKwP19AO9pUwMqKhFA3ent7M9EPJ47esYaauXG/JU1b8Ec67dn48o+cyv9umaQfomVXaXnYH6NtpmGqheNC1d89b2HsB7gtjFRneR4L4ylAhWdroe75RwrD30SUYl2+sHyOBHKMDMmp2h1TOb6SV3KQbhi62wt5TawHlTLufXvU88bSaNT4J8Eu5LeHvUcOTJdy3rguCgQhQj+57rVx0P44In5NjsAQ1fvMAlTo3JyQdFUrNol/KocJhKfCWMUYDClFAIBU0puBZVxaW+ZKnmSQNK1B/76emi/d9oH97yczs/25uBkD5MmfxdrHaIYJ1xdvOADXzaHpnq1fB3GJs6iU2gnPrbxbi3jzk8r+VD1tARkswGomkUuRD1IgZpZPnwYu2kymX5VVa+HOUX2M5T3fIzKXqbZaRYG5M441pngYZwNlYmYxEI4nkkWcPDSsPn4sO0F7o2g/bWOe2PX6ykn0k7wudq3JVTVvjLfoHOyuWXEXZmd1Xyxopr2YUet79C9GMJL297/VW+3Inx/lSQHrQKx9x7p9vAeXIgKS3pvatZDNn3zDkZ2uobelDC21v4z4GGI+stjZXNGBYf0f6GVJG86L0ZPg1QHw0uZz0mG8F54vAgTfQ2b5eKQDOvbFSdrlPS97mjighKAyzio81BzkXdmYZXWR7nleWCWJL8EtFR4swiO5lzUvdo3gwkBcZBwJyTZGLrqmm0DP+qoVORsZdeWYPUCfAXALxlpBpUSbl5U/pnZo92EVFa2VXYEF6qkQZZmTBPYUeQA2EIJ1YOWZMsvZt7z6KrplXDu+ny/LsWbZVeyx6Cjv0jLfeAAd8t0DyKPozUJgF595UtcimJdoQwU3Lw3BOycNWcgXeDI/yM48GrA/8jbWx6l94wmtZ8KqvznAV2LNhAho+APHzDzTcXfCnMpb6OoXM54Ntk4z9LHpSk9FbIlArSYLGEU0XYXJNczhE5f/uQc+cju1ldw/6dhqmWmDvoGsNaJ52Vr7X6msN3gs7Sk1cPKlWFc3bbmRt1+6ct99lP/gsG45h6311Bs4tj6YG0rdYTsN0tcLXSyMRz0m4s8OCVvI4eVd9Qxe0KrNWewajLetx3l70COBbhDJJYLNlrpS3GO9QV93JecqKAWILWKFy0vqIKIE4fgvoaWOQbSB46AUTuGfrHIXXhvFaax0XoP6f/KAe+i6A+csvHIaGHyhwxGVVxzDfr7X2XOSMR0AaKpsRxdEqI/fOaLAWmbP0eGvecPkMm2wTveiR/mgZFnUVNeAGIq+i40IjjHaW5O+t7Z61Q8De00Z4buRuej3TmJ2cNLg65yQKxfKYa8ZT5LnReYw8b5KPV3UEEp3VvuQlc+vCOQxMsirmWa9rDYBcW39XfgGflsCb6R2j5a88A8zQ2OjMeJ0WqRQ5C0xu7x70rScpV38H6Dl6bS6NHvR6uOa76MtBFCHumzsMNiBBgQSkUimrY92QUTqSKK71x0LcI1PJhsNHDRsaTUYbMSJzdJUwzOq70voIcN+ghGFIe+mKvY2OyeV676b3AB25h+V6Ra3JHshrgjEi9HrXd3SYZHQcmpLLvKILnTventa8BZKmniIVUWRw3rhmTOG11tUzphz0RzK9b1nbO98yTbf95funu//a907TW//Ds+6e/7fT1X/zP0+v/d9PT6/8u3X2X23d1TmCZ6vWB+VXKsJ4Vtj+0WicCUmN7l+2J3r2VHTvZcfFyne9iY4NaXfPo8lEN8gE7RziGUfALqewhd4R49/WdVrmIs8zGDKX/UzCojW9oRnEKl8JRndZ9PbmOfrMWfLCNZgw1A0Ixcgvd8aGBG/CPST/Rg+6pQdaPL7KfuGFx7KeftgL5jXdxdVBAuca2276TfnvDtC9EzX2+w7Qx9LTba0AdATkVechoe7sKbZ6WMS9dLdDo0BEuURAXscKAmfLGBhoRy+59KR7HvQ2lq2edDbPaHhTL9Nd0TGSAKhU0O4d9ihswYW0QDmGwqOXvXTRQt8zIfBWaGF0P2qh35lQNMsLVPdMgKN6RiFmhFiUMHItRZs/24fyt4hnhm0JJsCDW+egmKZMt4KWkhqhdVsTy/OAxgYEkBEg0ZQ/b22RABp/HUlPSQPL2IT7F0NS6d1ROdBAxndtXtG1lPW9uSxnpoUZC8CDIF3OfTRoaeOQoezNay6/Vd746o175pEylJ6e7JDec+9Zzs6NqAEIuSbRaBRrPTwwrp3/nv0WIUX0/HsGfzYvxs8zBjDJUxlPk+fdOlvM0OJ58nEd0CG08JZlg8we8Fpx7Q1vP5X/4lNsB/QQhUcYlS1HFtMP6xjhip4H2iP7zJLL7Oyx9e6R/ztA712dvnoBdbKv4b0Wp0BLElf5hvCcI0CXIHwUIF94n2LRte67NkZTx70xdDryZrosw7K/I3W3APKoUEX6yb+Put9R4WJ/V+1uBuzsv4smOP+DZXuXk0jcR8fM71pm99I8fsuA9Lb3WIiZ5YW0DCZSSJVy9V6a4blABaApHj3rf6CkgDWeCmFyL25RvIz3WmVbmgDvBbFsnFs8YI2mqJjj+LYo2czQ4vVrgbrs+sv9akWFbFnb7JgWfsbu0crETvO/6xpHZUF7NgkyLss+e8dr1csYk7buWW/8Mhlc5YW3nwHy9u/KwmeALn9330GvDcz8X/J57UUPLIPh7gEvm8ZP8PfyNzu3jNdYhrC2jr1rhGDE6stbR/zOQNtqX8/3rZfflCjEjKHY4+d4rjQjZM/5Y7SUxhbWprZuB79riITlxQCDoLfGdAzYhvKMXpUNiVD3IU4ashEtg7YmL/9/9t4t2ZYcVxLL+/ho3da8ZKbJqdXS5KSpyCpLFsxAHIQvdzxIrp1ZVSyzsjx7BZ8gCMIBEPQGFXbGsbVT/HUAelc6rJU/AH2Nfu3aLMR9bBrhQVcZ3dsdFytkYBUVMvRKdgQTu4fuh8lA+vXdg/HOM21FEjzFWLiSCmeKvLgdmpTHyLwk7K5hpLCZYlfu9I+C1YRxvtmVkHZPc6/kIFBXIL1Df6V82MF2/VcpI9/yvJlywOiA9EA+7My9ygaZ57IKnCNDATOEoHKBSoStjV+raE5VT8OudY1kq183JmPKQFhMOPKWeJ626h/eJhZbOgh91wBXVgTeMw+cX0e27/wUI8CWgbBsXWfBYHUfYTn1zFrrLjpeb0IPuU+K5c8LZmhpAvVHFhWf6mJ8wGg3uw4KsDF+n10zrBd6nsU9daVDVQ3Lnu64d9i8mNEKaTxD8+xciPbyay9aoje7KuVRikhg+YgiNC5eOQCCpyA/1i8A6P4cZvK6K6NVRN8KLyIYpzLu999++/v9XGWHf6+yB6CvrE6/7gHofZot1VAA/RGygVd9qWNXORIuSjnMwnd2AAEE5P4++TV8Fd6+4j1XNI2s4tE6RJ7cXesn24lCGzNlzBplCh1R3liCuKsJFuJ+/e7vpVu5jB4VQGOH5lBMSEZWDCG2v5UykfGx8qAzD0UVqHo6KKMQO/xVCLunSaagZWtgSpVX2Pyhj8YK9DL7v1Ehj5QDVpYpH/hbZT5yz5NkeDhvBH3qeyYjkFcZn2YetYxXu8pXapzCp9dQWQ6U58pY2H6p7qsMHERgzcaWAfYV3qrWZRndSx70qANlzGUAHH8LQHpG88qav2QfucMdGdEymkZGKS+3dsqQdEzEe477eDUkOps30nycnRN5Q6yd0CgB10vU+cA86QOnY7TO/ffo002Epcqws2sk6vNlSch8tm7RGf3B57DGdh5H8rory9nesnV85g2FjMbR2RrpC1e9k8W9wynrZQ9AX6dhq4UsSRx6zMdmaySNWw2HZ6BI/fYoNuQZrIo1sRLqfvXBgLv93iL+hsI7LKcbhsGbUACdeVUqgB2Us+h+uQ2I3Tm/vmGSuOu3Wa96dFhGQHZW8bF6EYBRB5ta60whyiJZ7NAfhzIYJljofJXnVpRu5pmJFAlU1jKlwyseGf1YWx7svXgoeJtdtbNDqY9k7bcNfWqtmMEBvVsvZTIJM6X0u/j19uBkBhBfPwPQXgFl9Yx/PqIDEoDS5TW11/At9KjckJluX1efYpP7vHM2DOFclRhxOTRoKgNX1RBjvbE1iYDpkJPi6pIypO5ad3o2AH1nAVpFXrMyuA4RXe3bTF8MkOM6fIxFROU8d9HHRv5jVDSD+/1hrB/cU8fyFTn+yBXwrlciLNnaT6/1ZWhwiG3JEIPJIm9+zNb4eND3yMVqKwegVym1qZwC6OMAccnf8Im1VeCdDT8C4T4UZ8g+chenAsizMUTfVbg71sHs79f3n3hPHWky1vNWsBRtZgV1SEfM3mvKFnvvE0H6ZEhjZV0xsRw+w9a9i258GIW/ozEFw78r41ZlUPH05ZTy0+2vEkGgIgSM/1bnnCkBqOCgZ8oUY6UEV2lSAf/Y1g4FmxllqnOq9M9k6aMQJ+/wWrlZOYI0ZeNlYNa03lH+kiGF5HCjL2/IJWBJedcUva/yF4jNeEsBFJxvZgCo8mq3nALu7M46a3vKw67ymFwdqMRxG86HCKAzMF/ZQ116j7MjCMPP+In1lwEbf14xA2prD4v9hvvnkSPEi60McTNz9/0wQ4und+XcfO13ktl90FqA89GXyy+Hfw9SJKinwnNRhCUD7v48Vvxa5YF/Q6AOfzP+jnSSaL7I1wegz0ib+ToHoM/TbqqmTxKHDVTuoT9K2d9+1e542KcGDaDcDpuK0GH9VQQRJoZj7fgyKqncbnAeKdTPQbXJOj7ai8LWrcMsQRAqXeweYpUxiJJmnnAWxu6BdwWER2UQbDJwTpWnSW8QKhPIt0rZqFjlq+T25RRgZyCchU36fTvVv1BqlZekq+wxEJ55vZlS2u1X0YKtL7atPMC+zVABcsbOj/OAfFs1hCqwiuM1JQ/H9GGAwfuho+K7ljIEKGXe981A9NWetZnR33+vgLIIpFcU95l99Yjxe70xk3v0lvo4Iibl22usaNi1MyVqexGwezmpaJutb2WfYT8vmRqEYM+u5ZARkBjO6wZDNvtwftjnz3jBETLacOC8ZBQQ4Fzt7+6cM9oqox9b+5dsIXP3Ie8G0tOXJe4JvZzyCPrv6IorQezvl5MMPfh3G9X9rwC60VZFvM3K9hm5xgzpz/jIdQejyQlx7+6QtfIHoK/Rr11bPbM2BCa8h46/MQDfHoAJLPIeb6ct5jF+HZbFjNJWp5owLkocd7VVyfjemacqq8KbMDR1rOEOBQoHojwgPoP7o/nd/1DfWLjTgvKFgD27r66yvtvvyuNgtPUHnoruiO75dfm2ohiZAlQ91NlcVvi0Ej499L1C5nq5B24lE63z1OvaVHI8/fDfNp7IMOCBVgbyKnTGNWd/V9rBMhjl4b8zg1QUMeHpYvOvGEM/xuTWVSpyTIn1md5do2q/ZAaZXYaubO2Mv8Z+AM/+LmNPhTfQY37VwUzv7Bk2X28JrGfXnibOhBlZiaDcr4+tETOUZeXUnvU8/tp/gXYcRjc1kuQZkK/s62gvZzKYyUOcN9tvkcGKyRsmq9XY2P7HfXL1f/H0tS3HWWXA/S6oQtZfvOATxdmddqhfGcsz3ySRHMpwO2czea5kRBaJWZEtiq+NvpVIpKuN40HvUnut/AHoa/Rr186SxA3BAonivvnkGptAFL4zxkfA/WooLRuHAtvsXXSsn3nOZxPLKYWagUglmNtMs1oh88Iz74nvc0Ixs+rq3noGyitTjkAoOyTttxnQggcc8/7hIc+8P17hiZQ8Nf9QMYTnEz3/7Zq7KT4IZJgC0DFOUDkkvFvK81rxyD10EF4CBKQMsLEyCshFngqcszL6eZm7HB4rGEuBZQmSiRdqJGPydDVP933nXIXCPwr8bdRlwAGH3eEtnEPWfqftipxSZbI76ezddJXpXfUhw99ZXpKrEWZMXom4SgjkwZsVVesV7V3fTbZ+KCdUv9X+pKwmuS1CuWny2wxkwZOaSl5G7UfjHGeFS8Bmf0cGqgqdfbt2dqjf7LuBRZQlH/KDhfqT3zAn3EcRgoKevll7AqBnevPDZ2SPreokH2dJcHbinkPZz/QYe8L3APQVid+vewB6n2ZLNbIkcS9Fl3jUhxBzSeMu8I6/LQ1QVM7ARATQZ4VPlkTOg/Do6TU/pWq51zokb2NmSbpm5x+uo/d2VBYcFbKrjveoK8Ws4P1Xz67ZsCrPss0mjGMRC/4gxMRwY68U5lQh6VA0kkiRXZ7WyniQFizKZbc1/qE1yYAeKWKV+XTLoKfG6jNDiY0NFVCmvEdewF1eXuPLLKdChecynmR0ZaAoUvpe8l5kWn7qMzBv94ANvLvOIo8bW9MKn1Clk/QZtZ8Bkso4WJnoDjo+sYaJ42b7fAFxf+c8OxOmO4wrqn3nZciOvWZrGBnzmFFOjT6SDd06HwY6B9R9W6+op0L+h2gfe/mN5dAQqvbGDA2GvBPJOZncePYeRO74P596N01e/OIyuePvdiWH7e9M7822AzO6PnR0OYqUzJ6R5RW+8+eeciQw48wB6NmK7/1+APpeeqatVTzocoORbO4sedw3E8pFXp5H2LO7Uyll/igQgXJ2Lx1D45nnfNZbLtdBvGc6lAnzAhWEb5Eke4oxL7rynC8qaT4hnL+XzjK8Y7I4m6zdRa94jD8UEJFtdcXjPhSKBWCvAELkoVDzqhgl/Hg9T67MgSlVmTKQza8DejJvm2qr20fmhcrAxA4g4emqvOYob73iV1lnplgr7+LTF3kK67U3MHvThIbRMRYg/1EluxhyXBG0GT9X2pgtg5ncVbi78po/v0fG3SjMfSGSqjpnZpxR/MDWogMWFf/7sSrjHpsPbU95WwlPjj1rUShw1uwEan4vPzLDRb5EcnSEm4sEj1W5yc4RJTPt949IJHSLPxO5gb9boKeoq5OOdQzyj0ZG3+7vKi/LszHQT0Z/gdEfE8RFY1F7Ac/Rznl1APrq6vfqTxyfvQ5O6TcFDKCz++YvpSzwnqPX3P+9w6M+azWMrIU7+IDdU1eh7PiG+tU/JpXbMaZKGyr8vVK3XSYLZ8cGM+B+ld+smLE76Qq8e8+6CiGLgLcCKhXQmilFEcDxSkjkremsb2ZgyIxnzMOezbEzPqmQeEXHnTgYUjnbFyrqSvlC5Z/1FxkBrDxbTxY27edXnSuLRPJRD8wAmCl1s3TFeiVFDu+mE8Dx7Bv1jrrruLp3PhT4YNJVxdX2sG+q088uul/tYKI4a5vdUfflpzO8e7kf5TWZnGQVSKNh07rrGN2yIUZ9KDmetRnJwggcGkgf9d1eGvN1oF3lVInoymRbJAO7c8S+o32GsjGSqa9x3CD7afu6RmPh+Q6AP0E7TsYM2eqfXoMcKqMfF5GwymNelkce8rHUwdp216FaPjVQEb3vAPQqdfeUOwB9Dx3LrSgPegbYrQPM2L4DkJcHDwUrgJwpl7P9YT0P2P03Fcbun2Cz8uy3zvgyD++jUDST5o2zYqJOeewqyZwpZtd/0dOS3VV3nTMvOj61Nrq6ksDcUsj+Xcn2ns1TgflnHwlvuAJAvj+2LsoqjeP0YFKFEGZzU98xpB3D2VV4+2zYe6SQZd/YHLoKkQJvDCxfZauJcNia4VoxBXPs2dsThXPpzg35NIrMqRibqjyVASe2rqPtWyN+AQkSfjvGepXF++n3ABXfRMaVzPiR0R73JANs6EkdUxbXOqq0nimnksBNAXEcgJ0J0dmAdZwSn/GO2leK3hl9Kgajjgfc98fazvgoG6+U29GTb+K+cnaOZTIM5/o635yHHOnQpQGuLcrHyLDp95jfo/ge+nMee3njs927Z9dejndyOf0jAAgQkpI1mXHcrxfK8jHPLwN0tQ52ZhmtMx4+AD2j0N7vB6DvpWfaWhbiHgH1yjNss+Hts17zl6B3Sap2KI3ZHXTrOwp99+PLEseliwcFMnAegb3t4JspVdnb59d8lMd9IZzbkykC6laOvZHOPOrd9Yl480OBIQnWqv1VPAc/4QmKxptFEoyDetEghIA5UhJfCleV0K6c8rig4hkZQZiyef1WCeNEgwxTJpnyaeNjfWcREoxn2bqtriPSMBrzU9YDdNQqgnBUD9TNw/W0yRI0Ma8XSXA16OLCdjvgUYGSaD0nWHiqyuqb6a1OozMlCoVvdfJHYeXNY97myFiDXeM+q/ABAzM2RuQrNdWuPqWuLaEX1vpDQHc9EaaMiJEcRrmVGbtC+cXC9uFFCLbW7NxA+WpGvdezavBqxIfcIyDdh7szej2iq4Ehm9AJAAAgAElEQVSMKuCcOQzwTN6hM0t+JOvAzko8l3H/HIA+IdwWqjTYcKGXU/WhQAWgj0MA3jn3fw8hd99HVx706G76LIhnCqIKtTKv3Bjr5qyVFeCO3nX0lO++l27zxHljBAE7YJ9DzwGknUq23H6ZAoYhTj6ZkDXKfoMOo0zu/g463kff4Ul/HUIidwDjYc+3s2sRAXeqgCzISaUQKsXP8+sORQGV5sjjzJRc5ZmZ9a4p5UN5uH35zEuklHxmNOgsqaQB5PTIIiNm+bUzVlS0JT8TL5WF7j50BM+XB+oZcOt4OivgjPGNzdX4Vs29Sz9VPsvuftXDJ9mq2d0tyZx8jo150fG3TcZbpONzNgqgh3s0onfV81vliWp7MzyQyW5s0+/vENRNJpBDQ1S2J2bmzPYQGgekseCJX797RhRDnnu0MPhHTllV9aTkGOAfhT7ksvDUZ3RQIF2tIVvnrI/O94ohEgH7AegdCq+XPQB9nYatFnaEuDPwbp53/9/WwBYKKwtixWqYdVsF41c7/t65Cn/35fDf2Vg63xnoGTK/qNz8iJIdec9ZorjsLnr23REQPeuV59h2APYo9D0KM2OgyHstroPs97/l67sbmGc82dmDiue6vMg8Il75RkUblQClEKq5Mo8XA8vKY876zxR3ZjiI1iID/Q99RAIh/30ojcSY112nlHcKQOljLb0xwbQLvJcOHVcUUeXVHDJ1UothBjRTyCPaZIptRteV7wje2VNsV/tVwD7G4s8BBsbxDnrxDKvOE2Vitv/V3qsY33BMPmImMwYqI2RXflUi7xjtRj8GGjdFO2E/OJcoAilb36rMU2PA+qF3P5ExTx8i9P0lR/y76XdFZjwY5/+1N65IHft3RhT3TLGPjvAynUVeZk6EQrevIorXGS/7ffW//B9PZoRul6f8BAUmj7aJnk6VQYHMg67I1Al9Nw/5rKe8G55lY45CfVAYsXl2FcwMvFcyvP8kW2Y06M5/euwYnuiBNUsIZB2hYraY7f1p9gK39130CISjt73yNFsEyMeh3PCqV40rSrnyhzz+m3kCZ9a3GiadzUVFxnTGpEBuBqirfWTtKwBWbX+lHBvbLJD8UGDhOgYqdMbXvl5FtkSGlYwWFLS6d52fe6Mq3J108DEe8Aiy8Vb3kSmdap08OGB71YaL5XatMZJDAfOrHMvu/sjWLphGsG4NMeOriqjq9gmTVUB48DV5RSDa51XQrgxAPy1DDIT7SDx/TkVyu7LHkYae9Nn+x+9snTz/K/lckSVYBtdx/G18ZokozYBBssyPqzTuLrrRCp3xSA+2z7Pxd77jFYbsXO60HZX161QxXFuZ40HftQK1dg5Ar9FpW6lZgM4GoLzlOxLHdUF6Vt6H2n5DCLF76BfN8Pcs9H1loSvhxEzZfg6BRav49NiVJ31of3cWd/t3pLCRAWRvpLMxszoKjGdedTwAvbITHmACBHVpnIFIpRBU+snAuPr+ofy4pwFXIz/UuJXF3hRGVY8pD0pJv9rwHh/ftvLmhF6ZyiK4MgpYZIAj66YSoWRtoAzaKWuVAv8Bii8QZbLMK89jQYLZYkguCVW1NWXAK1vLiiL60DGJHsj6Ml78FmAf4vjf/0h8+JVM7lQw3z8yg+71KYigmgVrbBiREUYBclsvll+CGWsiXvdrW/USR/OP9AZ2XmGkl5XxtGJgvXMWqX2QgXJcr+q6Z2OLDCiMRwzAW2j7KHPLngiUs3m/+G1TlnelLzN5XTW8KNpXnmaLzmd/jh6Anp3We78fgL6XnmlrOwH62DjkOTbM9D4OlCv8lryjng74LpABcKYgovdyjMO9D04F6yRI9d505VmveNT9XfXVDO+KttEBu8NzWV3TUY6B8y4oV96VgidFgfEZb7nnQfRAMEUHedb+ZiFmmfJTpTlT2CPwmCn4GUhn44qiCiqALlIYvAIX0UTNq6rwMmVkyBeXRT1TFitrUfGQKuXRFJvMi5fNWQF0xe+VNWSKKOWVKMM0yWKO9EeF/unDa8nOq15VRnHtIhpXwLRXQhUPIYiQc6sKgw3lmGf9atbfNU/vnc+OI4rEmm0zqceAs9rHfv9V92Jl2MpAkO1j33YG2P35peT1Mw7IUVGZA9v/EW3ZntjB/xHwZvu2SuPR7uvQ/nwfHdfjVYHdP7/BuR9DVS/+OIvcmplugmXC/AJQuCo3q7zBAPtlgPtv/+OEuFdpuKPcAeg7qNhoYzdAfwkZAOBRorjGkF9FM4HkPZZWkYVrXd+YUNktaJjHvArUZ7O+Zwo1VYS//MxGe70ZSPdZ4SPwfXl1/uOPsPXu/yLA7r3oynPOfu/wLN6HtcMTDUuoQHXnicrjh7Iw0SDzxEjlbuLFhcrezCzxH4oKZOWuKmBRO96LThUNkfX7pc+5DOB0v4ICV+3Tg4mOYSYyxKDMZTyslEAvo7vAfshw8qwc/vZStIOkcdGeiLZDxfvW2U7XeFUmfzZGtqZVo0BnXFnZyr1zBtbbAJ4B82twyrCLAycG3aqnVdGAgUu/Vsqgk9HU2jBet/IMnFaMeXL8ANg+5Ju/LvIMojL6uTKZHM8Mx1mv0Z5FucLORtxf8tyA0HY6rht4Pzx0F3oCeBCsuzvq4XmVJOmLvOgIzn9CV67I2HMHPePsvd8PQN9Lz7S1HQDde83Rg47J4l7CDbzt3qO+6mEfBxmAtsgKzAhVAQApgV0B5VX3Ye8VEB550iPwV/3mgRV613eGPJVol4W7X42ou+dBiKN/67wyDnxmLQtlr7SZHYivvZIYTGZ4VSl1SgFZVYKUkofzzKJahsIEkS1q/n6OOC8GYrF8BcBmgCzjhahPrxxG7bCw2CEDyR1ZRgdlOPBlnz7AmJKtH1srJp8zOlW/43p4z94Yi9IyFFj3jxGLugjI2N+VtVQKdtQ+tuvBArY3a3CKaF/J8o71Mev79d0Deh8qLzO8s0FVQHkjeah1Ee0jtv+Z3FFtMDlc5XUcn+cT+zaz5pGB4mWAsysj4gqWmnN2XikDh58vzg/5npVl64myk9GLzUOt24eR0MsMR6/hIWcyZwjHNwe8/oRvkfEtW3u/lizKD+U0GlvRCB/ph9maR+eV2mMnxL0rKdbKH4C+Rr927VWAHiWLGxtOPL+Gmd/bA08qMMHhFX9mEfym0ni1zTzl/nm1b4WwI6kqYcjqOkDHqzW1phEgH1ocuYMeZfXNlLHkO3s33eblQT7+G59oU7RgXmbjw4xHI6t2BmAViPHjzIDj1PqSRHgRr1UO9co41AHvQbopCL69b3oelRK60xDC1tkrtmzOOH9URLMIECVvWDTTVXZ2jTPjA1PGX7S1u+mmdaD2YSGkdwTO4AVxDx33TeZRyxTnCk+jQsvqKKA46J5EZVTHoMox4J49x1buE8+J7PrSpgSijOaMxtFaZPvrY/8E1zqQx5VhqEzXQsGK/vDaDyQ66kUDM5oBkM2ClxXdd8pPJkP8b34fybPCyxnM7q7kiXnRHaFeHvTba/6MxYmmiCfU8qo1Nfk8+H4hD86MjA+NRPeeOB70wobdWOQA9I3ErDTlAXqGZSrt0YNJeMpXs7t3xhNZCpXHuNN+VLYawn61UX2ObdfYHmHeDGmfEbjlMWcg3Tfkwxvtd6vvlbZJ5laecx8uz8B5JaN7hR7Im+x6hgfq7CCle7Kh9DElBZWgHco+i9ZQFnucU8XrLpUToAXzQlndmXlGCqP3toy1gxB7P2bs28p+eGzIRDMDhR/jzBwzXkYFkPH1LuMf0pCBZaP1BQJeXvUsq7t4c/gFjC5Z4zQZNCRktBpKcRE8Z57GjKcqY/lGGXVXfbkv9rLH1SieCZPnAcrCiP4MLKt19b93197T7JsAPQRM+Byjj9yBO+lZeHTUD87V75VO5EhE42oUyyND7kGxNWTyfRRnmeEI+skSyD3rDbbDIaYCgwfThz/OF7emzIg+aO9yOLGzuqsnMqMrGmI8jx8P+rLEbDVwAHqLXOuFVz3onRHsDmHv9E1BCjk4huxcsBRWxoQh7d6LbvXZb9c3TBpXCYmvjMnP2/5tAphdFdilTKdjq4L1zLOeeVjugSAgv372T64NXe+WUuwpNgx9nw2FZwcoAthHWSzO7Tos/VvpVj8KD/ceZvSkpmvXLMBAXBYJkM0hGgLORyl4qLhUFeisb+a9lwodNMa8NRkI900wYMEMCdW5Vr1qyNeVEEklh9h8MpZj4P1j3hhCyjx8d0cKTFTXomIYqa4B0sP/3QEvGQ1Xv1fAuYW4p32p++dDULtoK/vbGlwE6DiuLqjM5qWMcVG/CtxEa5+No/L9OZfu8G08l7ogrdJnlQ5XuchAytoZ8gaSe0b73MpjX9ToEhkA2Zvo5ClH35/1Kb33boJdORJFSrHIPxUhNbOe0bp4Oh+AvoO69TYOQK/TakvJ//d//+3vRf1e9hfdM//YaC7kPcruvuMOuj8o0Mv4Ma7CvcouKEXPue8T76Nf3zpA3dpSQH4HcyirqbWtDt6tBzID6N4bEoW3MyJsVswwBB4959VQ9+56MbBePSC9suHXCi3VTLlhgL0z9kp4dKUM279sHMooocYcAasZAwWjaUYvVCgj71pX6fJ941xRwX/2edGb25Gpg7cmD54qGHrkv0uqxHj6+u1Fx4oSDZ70wbMuCaWibQTIK0o2U1yZocfmhPP9hrGpcwc9AucelONzbdc8pu+ij8o35TCx6MbzAI1ezAjm16O73ozvrzZYAkEmq7r9vWSFd2bAfmLybPTvnjfECKcnamVC41d0VucVM8R2QTvuMeuLGT9aMpmFvBdpMuYAoe4vGpAs7yZ3bT0irzmWVVFQ6jybjWrryPcT4p5pE3u/F1lzb6f/yq39hAc9uoeu3k4fCsbf/liZlefYMiHDDiHkh62AM2A29hybyvr+LZ5l3vJH0SWZXZWSvZ1mCMpN6WIA3SthWM4m01TMMJs7SzK3O5Ec8zZiSJnx99gv8H54tAad9YlAZkXRUZ5xvzeZccGH86sojso8mGdJKpXkg/emKBA7ux8zT2tFya94YatKj1pPZiSoKqIYzs54dZZ+nXrIx5RuTmH+mB8D7iIzMls3tQa+7KANGESu7xdg9eUiAwAzoiE4iwxt1XWt0p7dO2dgHNubyubO7prbeaDOkOpEJspFsnMcTffb8UMWOuBbkavPueyuxTAg6duemMJyFQPrvqEPuZ1kGGdztb3y0uHI1a0OLauTVXL7NUfyooR9f+0/4hwaMtPJgecMuht4iSJiMEGZUp0XPReJ3vesBwmDZ/J+pX/F59ccjwd9B2XrbRyAXqfVlpI/BdD9ffOXQCXvpj8bMvG2zxCgE4o5DoDknXQro4CqD2ePxovgHEPXo5D36N469ln1TkZ0+ioor4a0+4kxj/r1nQF1IAh7Rq3DV/jUmtXddQfdH4SeH6N1VUYWtm4ZaMDD8aPfRYldDaPDQx+NEWzNKuD9qpeB5EhBGGsiPMxdUBwBKz+GDn+y9fIGh+x7R7lldIhCIRkPr8ztda4UcyxYnWfseCf91eivP6q8pcaEAJ7RGY0i0VNrjG7R3u7QeTdgf4luB1Cv3w2wYkZ3+4bjLoXCs0iNpoE2460MsKGn1csdXPuM3plcYYaoFe95xCuZPqHAWkWv6vAok4/Mux21mdG9Mh5lULX1lm0kuS/G58CIgXfVBw9UXp+4AXY291lnAc63u+4PPa+5QJTS1fbxoFe4cl+ZRXVv30D+VVr6CYAeCvgboKMn3XvPV8PdUbgMYQlJTfxvGD7MhNNVfkZJi2jBwt6v8gbOO/fPK6HvkWfT6OHnGd0H3k0LSacsvN17S65G8G9rmCloxYzuOLbqW+kfyuUVnigkXgZcvXcZ1+pRViCXwoxMU8peV6lUfauwOYwU8OVm92NFsUVFhXnPZz1dHfozD0hXyU6VLpIcb+x3MDiodrL22XzV2llZvIqkjIFeIVdeQ98/82RG/PBa49ub9ZqPU4BHO5AYbpQlCnUGzDs0zcru9KJ1eLdT1gNy5VVvP7mWGWxZIjl13WIByFP+DwxHyhiGMqhDXyybGYJY+cr+quxHZWT1fVro+yPrYF38nvVzwTHi3lZlOwbIqjF7nMfwvKWXq2M9TaYgMLdn2EwvUPoBy9oOv71AesI00siMyf9IRn6v+2V6IPuOv2XntJ/KAegr0qBf9wD0Ps2WavxZAB3fTo8msQrQo7ZR8R+ClHjNu5a/bFHUk2tYb2cSuGxMH4czMWKMw2fy7mi3/+nyfnx453C60T/AtM/ejk2pMHgrV00Yl0V5KGs242XrOzKuhPuj4YnMAEOF9FXjmO3T3bxYUQBR2asqedh2pvhmyvQsvStgNQML2VpmnjUla1j0h/LCZWNg3xVADkGQd0+5e7UUzAQZ3LPxVOcjlenCXvV9fIu/KvPwod3Ma+7bCL3knYgrD9yvDiLw/QVg/shiEfrseXCcs4vaMPK69b9quOnubdMZ0PjGfq/I8wqAi+bO+HPVCMlkqq2hlC3o9h4VIMH7nddizOce+Idz3K44IEC/27N76oOdmtcoKo6CyMjOznOlk1TkBpY5AH2GavN1FkXSfMf/qjURoG8+lx6y4nvp6m/M9D5kyh3q/pNrlHl6rrF0LIds7OzOuS/Hwt7VW+ney/4tUB+BJ3ro3Xeif3LdPjL3Xp2zbL6TjO6Twg0d7/aCI3DHO+pYL6MJ8xg/ClbBcFKxVKdjIIc5A5UK1KJCmvXnFTZW1u9J/K4iClaVAabMRmDOK3oZgO4omqjsfcyfKP2V9lW72dgra6nKsIgmz9smW40fKn1lnptKGx+GF0yMVb2DTp5iU4YBPy6/txCcVaMnor0Yte/3qvFEhWYrZSKQbvfPh/i+w+AzIE/HEsn+ahTV5FmR0QZlS7bnqvv52UsFb33WZzaHZ4/e6BGNDJ6XvFe8cj7t2NNevuFcPKhm+40ZSBTwz+jU2f9XWQPkFw3G1RbXgc8r9zGnMWF+7aq01j6TfHD3PDqfvdyurHNGu2jdDkDvUm+t/AHoa/Rr197lQUfAHQ0Ek8b5spgRPkoi154sqZBZgyNvZmQdrIwtyuTOgPhPgHA1bgRHO+8Ap7TySpbymERhjeg5wQ4LChhLCofNRBnd2ZNsdpAhuAz3TgDOfyLyA5W/zCOZHeQfh6+YX8SX9k2FR0eKXlfp9QpfReny444UJARWCMj83x0jAK5XutegQOZti+ZUUgghIkdFKinernjcKnP+AOeQeGt8B086C2GP7n0OWt4edgQHEbC5xt9Zc0Z3BjaQLtX1qtAzKhNlfUcwfrXD7qNb+yqz++N1Z4nhRqN3CwXZX50vkyWRfMmMKWrNovVFA2oEKKugVMpeeOs8OscyTyyT4WxvK3ri735/vfRLcq1H0ZMZo8OzWbTtZTDu5fFNeNLHN7wmU0im50EUvofe2eNWNls7FhkRneu7ZPbVxwHoVem0p9wB6HvoWG7lAugbz6hyvy+hCR5yzN5ufw9Z5u6sdzrLgPhrPN5zQu7gDLlZ8A5XylxtRZ509c17ybP75vg9Ky8PZEEXJnBXows6a/tRNgp7jMC6uq/uOkAQjn2r7O5Yrhru/hzuJFsqo1EUItyhKVMeFYhAj3LVw6z2XGucQBdf14O6DhDPlGqqZAV3t7O+Z79HHqAXHUgSu+4cFUDMFD4WCeJD1iMeRhni90KHR6KyFUX+Aee3wvzM+VasvWdQys4k07YaxzjzGlpRBhIVYMsMMbvozdpRAJxlf18ahwflviFl3F3oDOkZgT1Ge9xX2T579obwmiu+8LKs0kcmq5Bklf2P8uD6++rn97995zrditycoTPbwx8GV5fn4iVPlOu8cDed8eDrN9Y24Xm8YuQNMSy8XQH2nVeVbJgHoC8IqYmqjaNoovVT5YMC+A76t8B6xWv+CD8H2CtPrVXuqCtBkh0o9h09xujRqYLxjAWjp9asrsrw7oH3Tm979Y4Rm9suulC6Ve4fqqRy6JXHDhobIcrkHoW+Z2HvHaPSUAIEWO3w6sx6ocITAfSM/7PvSllQ0Swz8/FKmCmw0biUgu0Vs6Fw3k9lZW0xpZl5xrCdb9FdefoqCj2WUTzNInSedVhIdhh5ED39QmX2Vp5fc/Fxph8uK9cyeLzYXmFKvwJ4DFywdaisTdaHp88qb1W85tafKpt6y9XGYrIeX/h4Ok/upmcCSnyPALKXMX59jQ7eQFNZVzXEDFyrfV6dMrZPow/NUBUkH6v21ylXkdGM36t9ZIYxPFOo7MYrNeMAIbKEJZ+ELO/SKZ88QxfxVyS7Bw+73E0I4l+0LTi3xtSvhHmACJHOB6BXOXRPuQPQ99Cx3IoPcW9gknL7lYLsPnpWrwLcszbY9yycRwmindZB9eQagu4OIJ/1miONopD/IVRBmV4BSK++K2BcKVnqHdxqsrvmxkDAzu6jz/Am0jeyZD8KgZtjdy0yhe6DN4I761WvxQxdVASHbysKq6vSxc9hrEWQqVfNo6Jgq3Z9n5FC6BX6iJ4MvFbmlHnTK3NUstd+V6HukaKH61jhXwQ/RuMh552H6SnnvOaDp7KQ0+y7m1BEe+9xe9EgeGtZrT3jY5tvlXdm9qmqwwC5957jXfWrHfVGeuV99WccmZHWChblf4XfKnRbBcqVPl6yUcjtb/DCh7H/vjoy9q5dI2lOQNH9w2Dg5omy1O/31bOKyRSkN5UtFoVlZ7bLCmey7QHePmOciJJ/ZNkFdO8BPGNjcqkjq4JXkJie4vVCvAqxEvJ+AHpzsywWPwB9kYDd6gbQ1RlUPJu63Y7ylURx2HDFWz41GKiEAoX9PYR6YA2sKv7ReKN76lhvNpR9BrwzgauEMIL2HeuTtsHCGSNAbozOwHza2a8CPpO7en5tKJjBE2uN7l5FVeiwWiurXAFDkYKByo5SPmbnZfUwQoCF0q0c9p3xIch5lCEX6j4bpqpoHSmODMDNAuVsrdl6ozKvAKWicSdaREVLYNsZYGIGiofXip4mH+7+yHtMEjcI9mt06M1jfOL56eMMJFcWIt619jMvH+OvHTxU3VcsGRw+sVZ69zzrkF1z8vK/arj1/TQUpYwvcf8NPaOw5qH3M+Dn7l7NyNv9zqKiDKwjmBv7Ilkftr+YfPbjZEbHb9EFx0f3twt5fx/yAXXNWAdFlDfd30+XvHO1eV0rdREnkZNGRfF5XUMZ1LN1ZTM/AL2729bKH4C+Rr92bQxxbzewWCFKLsfeRo/uoO8G7xkgmBEoRq4oQ/tVRj3DprzrlWWYAeKqXZy7unPOjBRdQJjOLUsEdDWA98vZffOiksUyueMYo7fRrax6Az2dLynAIhdMmekakfA6R0ehxKExZSRTNitgjSkCCrCrcLuMD9GT5cN8M4UPlep0zo27o6zvTgiyH0u2tgrUzfDobB0E5NbOivz1Y1GGD6Tp+JuEu3uQPto1gE7C29F4xdZNRSh4nlIGmZHx2d8tLRCdGVcyEFFodroI3klnHvSo8dKzbFlE1gxIT2bM5MnDy8XkZShXqkTO9rkfR7XN1XJoIHv+dqHedoZZX+wsyzzo0dzR2417gc1RGfYyGuN3Zajzcgb7//h2Iyb/wATb/sh7JqPYufQhWxqe9Q5PRDpktN6+jwPQOxRfL3sA+joNWy1giPtVGROcFnFLq18q+CAB3EwY+wxIjzyPXlD4wwLv21QBa5dICNStPgPw9m0nEFfjjbyy7C7SLmU6pV+meGEDmSIGnpVKNvdojKvPr2XzR3DbAe6du+rZOMZeISGFlXpRGTY/Xz7zqqPxwcbJQE1FEWNlFLB/ZInzhlWUOl/P/s2U21XaYtty70NILCp0EcB8+nBXYaprdtWNDIFePs/SogVW8R66B+Y4AJXUKXm7vAoglAEo8iYyYwHu2wpgmaW1r4ch7dc39dSafWN30hGc07//0xlsQ2G9Y2ZxGwq0zxg2mXxhvWeAFmUi4wFluGsbh4gciCj2AdAXwWMGmj+28b1fM4NrlXOYvPFyePwbXeBe7jyF3z0iYB9/+yfUzI7o5JKS49lclUG9GtG3ohsegF7ltD3lDkDfQ8dyK39miDs9PG6QPuSS+7cqO5S2K9tn4a30imcuIlxUHwErhm2VF8QVxEzt1yf7De+f+2++Lxb2rspW5o5CV4U0RWBvR+h/mZ4MsHtQrkLaA6vUyzvesF5h+PtQNCHUfTb0vcLbmde5e1AyAI4KWgRyy2tYLNjxtCIPfpMnmbKtppQpvhHNmSJNvcDindxoTKHSLMJvK0Ddt5sZl9gYdq1bRHe5fvZsms+0XtRgcB1D2UvuCFt5o7GNsRNJkc25uO2+VkzdTff3z9Vd9NagVCLRq5HMgNvq6LMwM7Sp6IjIWJOBqM4wO/Kq0u7TXvCEpkWm2FWQ6r7OykXGiKE7OtmVnV0dY1XF8ML6e+1rnzQO813cYPvjWk1gsMAx/bqYrq9QML5ikaVDX288kbpDP776PAC9sgP3lSkeb/s6/Fdv6QpxNxqg5zyiTQOXbCWxAuIVkN4RIBWwakJpCHrIYNkFOxmRsufW7N10a8d72LO2/fdZ73vVeIFjyQ7YztjLZWczu5c7+CyonmdbDXOPQE313pjn4+oUZ9bNgxKl7HQUzSyKIzJIPIqQ27fVuWM5poxlYHnQ3AGvLDQ5UzRN2fRjixTKFp3F/VUVrs3omPWn+Pg1nySb+wxPdtZcAiQG1DHh01gg8pZ6cQBs70Q0VfwSnmtBEi3sK1vP4rTGG+feU471ogRyvmwU1k6/ZZFWG4B5Zw0qxpLqftu1Nsx4UF1XVi4ySuH8K1GNrz4annRlFPkAsCuTFXUznsiMAM/a3jJnnBu+r5sOH053n9B0HD5/VHqMQfBbdlbP8Bhz7lRJrGT7AehVCu4pdwD6HjqWW/EedKu04Wwq928FVcK4l4IWhMB7gG7/xv+2B9WowMDCkHnBO81Z895briibsnkAACAASURBVMoyj/pVVgFtlvldta3aYGCchVJX575dsWZ3NNQkMWHQRstTJRwe76ozwD7rVadKUvJueGZYug5u9T6t8rx4j1DkNcj2w0sWCGt9Zih66TIbwPkjvwp3yDPlSym1SL/M68Y8cC9lLPDI4hgqwMHqKI/59fu/Q6Kh7lrjujFA32kT1y1SzlPPGvNuOYXXe6peWd8TUBF54V70gEzukfLsv6n2x9CJJtbxzs+sRVQny+QeedLTxHLMYHsNhuUpWZhYZmRTslHJT2/U221AYbJ8BpQ9+6zhXfV6E+oVTA7IJSmAdnVmYZtKpkbskIFx22dMbjJaU/rfQN0iEEafwaA8cB9bPADqjAZP6DyRD5kDDHVk5UVn19CeMwaSMh+AviCQJqoegD5BtJUqliSuehZtxC/hsH0yOA+0H4F/h7R37qlXvOwZLSsAILoniWG4GSDKxnN9Z6Hw+HulHVWm4t3yh6r9+/ov8+LuCm8qzQk9JRl49+Xx36UOe4XYW+gGyGeAeWY8wfu+K1btykw/PCPN8OpKH6yM2qdqvlUjUUXpMsVr8L8IocwUw0o/EcBiY1AKtm9ngOk70RiOkSmpK169rsKvFLxZHunW86AVPVnjm/OkexmYPsXmBsL2y6OcwlUCBMy7QFrmSZwBK11a+zvpvi5mer++dZPIvcYSXYGqJBa9GisoRZX97MeVGU+UsaS7p0xOVPdxdx2z8s+eTnIxvPZT9HpOMTEjztt7jHHMmWF1dT9g+yVDGLlkfp1hL486eNPRsGvz/NjvgWFjhr9efJ0Y1jv68PVO+n/7H6+X4jN2O98XKXAA+iIBu9UvD7p7QWFUVwblqO3CGdUd2iiv3khnYLsK1itAHb2/CDSH8n1b89R/rQweLlOEcJUwfB3D262oB+72G76lzsZi7bH6rHxGK2UR/ZF7wFGGd8X4NsnMuy6YfoDuv+X3F72HnQH1WT5R0RzPgQxedLY++NsLxAVPCzIlM/IcSdCY3FdkicU+FCsXCjRjmFCgnSnPkVcbaTLkAgD3SAnset5Q8aLAEojFwN2QW//2fu+dzYXNx+r68plyl31X61s1rniZ3dlbCjRTQEyyvKMKaePNQEFk3EGas31nv3WAe5XXFKjo0DUqq0LfWWK4rM/S2+hRyDueA1mHE98zukfr7deZ7Ts2nIqxzssRNaX2ns2SIoLcV84B9Kxf9FORXVRnqRgEAI1kc7XvHWMMOzfUetH1IED9SQg3mOGuRRLE2eePmzfOiP7M2dWndCDPsVG6kwg+dpYzoM7k/PGgTwibhSoHoC8Qb6aqAfTsfJppe3cd5lXHPlio+45xRB45vH8+BB9kJ7XfVsYS3UNXwDt6G52FsM/eQffzwwiCl/IowGFEl44CPkXf6E6HB+EbrFDR2+jX2C+vuf1v5X56FBo4lD0S3l09KFX9iiJUBTtT61ioxIxJHat91EVVMUPPdGHYpSKs3Q44q3TC5jgzH+8lsvD3SqROJTLiG+vJ+NbP4ZF/f/9lfBnf7Ry4PewVGpvHHQG8ov3Yj4V3slXfvp9ofcccg3vq0Ti648vupj8yEmQ33mcPAX12D/3qpHo2lBaWF1KeTStd+W5lv7XfmQGRrWlVBjKd4Jlnojvh2aUiFqtLEs3Ne8f9fHGeVf7O6OO/M8Mq9a5jVncA7aNNS38Bb6X7omP/EqIx+rC9HkXvYbOon1R1PCx3AHqVy/eUOwB9Dx3LrbB30NGx6Bv7M+6nPwcV3EEfQuLyVN7/89726L10JE7Fo14mKMlmmYGlMY+iV9LGwbzoGOruAT371pnTQ2Pi2czC/qNIg6H0EU/nzNiW6rBQeHhibaV9zOCOQFz9jSB9JuxdjZvxJRqbumAnU0BeilnTQ9GhfwbkfFtq73X35LNHCt6ZwffMUxEoSD4MFemIYZZMsWTKXVWxxLmhIon9ewWu28drbsSgZzJjZwRO5MFEuiNItbX8dRDd8tz4G7UaH0Iq3kxHNoj6RENBVNe3g4kJIxr49ezsw51lMZQ9Sy539Y0Z3yVgV1ebcAKoAG0w2mY0YkaR2fXoyGc2LgUgszl0vr/6AHozw/LzpvdCTpFInlFQ7BOsNXJ6RDRlexxly0uWfmSCIwibeNAfWe6fWnNyKHwtMkFokS74IZdItMTga9CF6ZrfjR2A3tlZ62UPQF+nYasFDHFn0Vw/cAb90m3I3XIPwh/hEpRDcJ4B8Ow7Faoko7DypFv9WYXf6ncyuWOCORUWj2HsKx70iPHQc+nLrtKlxfCqsL+b7st0PCjJRplJGncNZcWT7qeC96/H4R+EnCm+VVcWKuuA1ngPfpSlvtKu2qN24Ntc8W/bs/47UxJC3g4AeQbmGLDu0qHSBzMGrHjbuop+pNjLcFvhSWNyFtdvlmc+lEhY28yrNcbhMyajRoMKs7ms0JXlBsLaY6Dc8wH797OfG972rO8ur+5alyEXXQZ49Lh7IN56Tz27kz4b7r6oRCnwZvw2ZNbNS0zG+v2PfODXODKmRW3sXFdrK4pCfOkMhWRwq+OL+LwjRzO5qWTHx7pgaPtghF+zpGLGJZO0sh7jjzqYI+aKCIKkkVWDK42wAL1Znb94Bisd8QD0Vc7u1T8AvUev5dLsDvo4/O6WvTfdY5XF86Y07uwddN+I8pgr8D0Dyj+Ut0JmUpaUKgOk0fcszJ0RtnqX3Op+C6SzgxfHu9ubWWI0VgiTyV1lcDNEmRULYN285iqTu/KWf8OLPs7m5M72aijhx/4RQKaqALz2f2Ev+jlGc8n25zRPAXgz5TpT8JR3x9ePxqSUS99vheZMuYwAnAcCNtYl2on7qSw0/um7GZn0yCgCzFUEwzO3W9v98Ljf99KHUoxgQoCLQVfLcQLAS3nMlfFA0T5bcwUmEKgpD+PKWnfrMrCOCeVa99dZ7hKWnOeLihCuJ+73DIgrwN6lLe6Jbxtl/LWQlwFXOEUQyKuIPCbXIx6/5p3J5mqZ7OxjhurICOfb+/Cqk/xIr/79fXT1+shdwYe8G4Bnc57hqczb7nVnFYV6APoM5efrHIA+T7upmv4d9KuBLC+WdcLya00NYLKSAu/2TnoVgFfLhQpw4cmnyIM8SYJSNeYhvypWQftusM4MFkPgQ8I9/1tpoqxQJ0EcMj/ePbf2kxBHdse8Ov7orfQMlGffPxQE4p0cCiAJKVTAHQ/QyjwZ2KwqfBmgyPrHPZhFvFh7OwC7AtkMVGXz8N8rHplnHk7b6niEOuP54LPJ8M9rrUbSp7u+umqRedM7RiUPPBUYZ2UYLVko6vObgW/zVnkAb4pxYFjw3lTmWc320zUODG+3dbvqXh5n3wbrY8iKKFLAMcLqvlX8F72Rbonh1H9Zmx/Psak76rNe9JWNJOpGxhJbI191Zi0qsmKmXSYrHqOCCH/GOpX9/zzxaLKk8CSmpx0Dz9WlVHunUh9ljVprur4md70ccbHro62hZH163l9y6vK6D2K48Hl4Ux097JW5ma7BrtShzGZ6ifVxAHqV2nvKHYC+h47lVjxAV+CcXcX9ouG4PPaXonrfTx+b+Q5/fwmuS9lzvyMwz4C6Uu7ZYCMgYOVXwoSxTx++7jO6q3vn2RvplUzv0SJlltHXut2A0NODCeQlemXJgKLv7G5iNRFDcZNgNvdr/itPrXU3UJYDgN0Bs9+G8hM9vNocTAYums3R4szjMgPkVseC4Fp5QBlNFOAPlV4Ay8w7hIppdT0qQMF79JRCv6ro/4QhNKK9AvkUzAb3Q18y0mlFLOqhQtehi5OXA+w3xosfkQAE2FT5Y3WvZPWjp9aW3khXHWOEVZSvpHgOhGeq27tqjyMYZPIko2MkP6iu80PPZrJx+ZDu54y66AQoYvD2tQaL6IIB5kefc+HjmcEOZRzuPbX3cQ+/9Ns7IeWT5e0jdp1E74wGf4HvITsNkLv76SxC5plD83oBu7bwsbZEvzoh7t2d+53yi1voO4P6Z24VPejZeeS/bzh3QtJ2Q9yHvHFJ46xxTB5n5bredjXYP9Mzh4ng2JNryot+zafqSf+pPcA8ZTs8mOn4VUjjVdGHskdh7WknvIDynF+l2f1z7y33YfKvg10k16oMMbr7V6m/Ykxh3sFKn7NlFFhHWs62/8gg8DbuCD9FT2jmcfHKJI4rA1qZEhkZaargPRvDM+bgJQh/p9GXf+ZOInVm15bN62qL8bD3Sr3GQgCFV5op2CAGsera75hrqLA7Q8CqsWV2rKyeD3fH7xGAf8qqJKJDSDdGmihNap8pA0rFq8pG110bamByDTNjX3U/V6j36r/wEgw7gyIZhvtWycdMbnfp+jpnklwmft/ZeD/GcwPzZ67+76sSvI3OaC+vt7OL7QFi69ACnQRjfkk031XmeNAru2dfmQPQ99Gy1FLlmTU7gxQ2ic6cb4P4aJLZs2zmNc+85yVC3oU6nnYTQjsAKHrRs7vqPokc/nt3WDsqypgYBOe/gx6dNaNlVdI4VMgQvHeUtcIgMfv7VaUbzh7ukUKoe8e7TA984XlDj55XigqkKReJQLi6cjF0meApunLnxYIhqEvaYIpn9ht627yCOuYu3mnPjAJ+DaPQUNV+hVyVCJ3IyLRiQGJ08mNm3nUGrkYypsxYgOGnLmz1lRAKPOzZPvKKvgHXDpjqgjVc047iXuEHLBPdPceQd6v7Ed4eddxJxrNZAaK8dI8VDScM0OHenqGv8iRn4HWmL687ROHsaJiL7qWrcbC9q84z+z2LXtnF635/RnL1NV4nYz5yX9wFGRjPznCUFdEcx3lxRdmJp6Hw/B3ytXjN7ip7APrKrurXPQC9T7OlGsyDXs2FUj17quWWJmICx4W6j83usr1HIe47+u62UUmCUW0zelLN2kDQzup8C5yb4MVQdnlYkoRlVVoslWPh7pUNMcnk0Z11Bc6v+Xmv+/W38qR3aRHd9VXfun10y3fAQ6dtBfQia/5O4xGC8kjRYWWjuaq2mRI/9mbxrnjmhbK2UHH1vysQe5XpKLTR+rF12rV2ylvt6WhzeX7LNGEMSXVvqD8Zl0morvKset5AY0xnPzEwjgCBGdpYH5217exjXzZ7P90SxXmgPuTpjGG1mkhuCOhPT3u0l9SaedrjGjOAzNYqMspka7Rr72brq/ga9/ygk+0LB+5m93plTdjYFe07ew3b9XLGvimDQGrwdHkvolB/euvGX2NwRsMXr9y/M/7JeCrSAbOrjwegZztp7/cD0PfSM21NhbhnOCVt+AcKYAg8+3soSvBWuv+N3VefHTpTGJmFcChtQUbSMb7J7MOVsStvOwPw2B4C+FVAn9Es8nBW5louk91TH1ocUbTYMwcs2zsogJ1kcpkX/Vsedc+HqbcPCF3l367CN3vYv5TZIOP7N/itAmptfMo7uWPe2EfmMVIKInpzVMKxaO+xtrF8FfiF/TS8MY8SXJC9bE0z5V4q8RVwSDIvPyDuvl+LhoNxzoj7617hZyCiOhfrA+eGhqCov128zZ5aQyA+xPhNb+81b3nQbTJs3TC5aFYGmLcjK5DvKzyJa90BVFddn0CQgehoD5fPYlcw40MDm5EHfaZfVicCzK/zpWDsnF1nb7hh/37GwcLRnwMAD+s/jBzq2jo7N8Zv5P75Bz+pVypE5N7TV5Kxf8idfz8e9F28XW3nAPQqpTaVq95B92eSwiSYT4sNcdLRKGfL7qnPeM13hrlnS5OB8yH7Ckpi1g9+Z2HvWWi8SjTX7RsFb6U+ejJ/3IOrwtyZ52RofnpWH4CcKHIKtLPf8U316K30DMBnIcMVr/oKv2ZKB/MaZEr9h6eFgPKOB3ZlfkqRRkCFYMorRqgAYqZt1QfWyzxwfi2GEhQAvEzJ7ACG1AN0T6Syrqa8sd0YrWN3jRlAYfRFmnpZeCm5Y+6X7PBvoluh4Fk2Rd9xfhTuqSv+qshmViYyumT7dbZPVS8C61Qv+X3Si46KkTLionLUUITYnsT1VWCZGYU8f1QMZYrGiv9D4Li40LZPnnnd++bZQ0x38l7fQK/C/a/ksd83LEKBzT+TlTNk6ZwfLxkjL5nzUbyA+/3HI6rc336OaAh6xJm7OvWSg3ClDK/VmUzHNToe9BnOma9zAPo87aZqRiHuePbIw9B9aJw7U+OtVGIAHZPH+TJj89+h8VWPegZqqAJzA7gozPtbIJRleo8SxHnP+KqXvLJmXljj3V92F7jT5vayKmGQB/TKWnVvkI4H/Ro/JpKLAPlVPgPlij8Zb6ooEDs0d9F3l0cmGq8fq9/D7N/Km66AXAXgVRW1yNPVBTsSIJIMzF7hnPGMIy+kHrBmWLtaP6/AYRn/N5MtqzI3W9MISL/cVmMSb+Ps4CnTipx2pIxadF8nWhXyUzYftd8RMDwynXgUuzzckTHeQx7VU2+nyzpRWKGvhOeA+zZL2+r8kS+Y4atC+6tMtv8RkPmoicHKBU9yR158lMWn2CDXid/XY6y//zJcre75l4xxchRpq2jS5YMIjF9jodFG5oW+vONGG/OUe2Ogy+Re8qSjLdHLFxUCLxg4OoNRbrOy//V/rubmr+6sU+4+ng4hfpICXQ86GxszGv/kHB5FAO6fD4aCJ9e8p1z9+6fHzjzqTDjtGJfyolvblgWeedavMv77jvHMtrHzgC2PIfKCRBkUrw4qYaxkIFEWd/YUG95FV0A980RGVzO+xZvPPnaKnf9Nhc2W188rykmI3dMvZAxmfVWAeWeMDFArj0SnXUXfyNuBda6/lbc7A+PobbK2mRIbrXUEMKpREd8A6rgWITB3Xm7vFZSedLHQVUWfgalxPgbgfbbtCk9WQGKlnUoZ5k3HeqUQ9ypAN3mPUVIL54CtlYqAiejAPJvKs07l2+31VPzgwWMkHyprtVrG61J4LWtn9Axbj8hohjTqzjMyfqH8xLH5Pe496T7qYDjCPVB/BP97pNT5joZeAPwqQR3yiqJJdO3seNC7nLRW/njQ1+jXrt0B6AyfsDMHveiVa1ntgU9UUM+2Vb3m1S4r3vUMlGd9RYdN9C46PsOmvOg/CcQZLaIkT9370Bkt5XcVyo4KGGYoVR4UdjckGFwn5N2ayTzrHVooZWcoAAlwZeGClwJQAbPMC/ToC184IZSxwisG3iBUmUOHzn5uDJgyMOPLoaerCqwYTZXHp6pM4VwqdGDKazTnSpu+DPKx59+Mj7O+FAhnxgj87cPQ4Y144u7mxXsjK7J5wND7JZ5q6hh4FHhWIN8AgacVA4DKQGP1fhK0+7FGb6hn6399H+D+P++Ss8rOQugh8iDztqJc6QD0jAasf7+mjD9Ymx25VSnLZHY1Gi86gypjj4ye17fr/9k1pZcME8904lhYv8qgOuqy89Rfj3GI3IPzcR7cnT9NiIiJq3/L5K72uP8dz12fXwC/HYCe7c6937+gfu0d4D9bax2Afs296i2fPad207cKyvEO+g7vegWoPwotATwrQNQ/ncZoGnnSVSK4Sqh7pQybs1ea8d++/G7++GhPJYtDsO6VaXxqzTZKMthumLtqrnMfvUu/Cni19VJtZ56LF+CARjIvJPY5o+RHXtehiIAB5hvRG0rJfnh/4mSsKLFqzT68LhP9Z7ymPE6oZGZrGslZFgmijC07DS/M4+XnO/aMD12/tV3v1Rr0Q68WroNle3dKNfNo4lp0wHa2jjYXBAK+XjSmjvGgMpZKGczabm+hD9EN0U4l7zp2yvKXYBQVA+UBUK/IQgTezOOOfIgyJttvkczA/tReXunDZ23P1nr0b8BR3T+3DOTw3csDZvSwvj3NZwxTbA4d2R0ZaIYIsXvf/jL5a3O6P/BpRwfE2T5/ySiUV8UrDpn8js7fA9CzHbD3+xfUgL0D/GdrrQrQGT6JonpVRK+q8226Zhnfn0MKQuJ3jSsLvXzJS5LBctc4uu0wD3sVhFfLMdqgZ0sZK3Yq1SFtIoB+VUTGNkUryqho9ZLwd7x/PpTIW1JimDt7bi0zFCn6j/P2Hr+KchiHNow/A+QVgKvADPMwmxJiCkSXx6mCJJLKIU1W+1JKd6RYv5Su1QG4+jMAIFMuI8MDA7GPHA68Maj0V+SHH2cU3t4Ji/UK60t+J15sjFLAOX/cS0ciF7UkBOFsrWY8qRHAQ7CiDAE/Dcqz59eMNv4N9dbWqgLyIbyh5YZSlMmLiqGP8R8ay7oAOlrnblsf7E7200fkizNw2Zn05G8g+8WfUR0dQu0pZhiJQH3nzFJgnZ2RSOsP2nuQjk+v+Zci7kWgV9VvwP9KFDcmdOfQIIngbE3HeMYCxbtLOQaw1rmD3pJSy4WLR89yP6eBmwJVgB4RbNEw/KesRSXT+09mdn8peJBMbjeBomzurC/vjWf/7o4vA4yPwiqew2IADw/ZzqGbjl951U3ZUs+qLYQt4pjYU2tWRt07Z/fPZ5LHRbxZpXO1HFuLyJvwDUVfGYcowHFel5U5vmhMwhlRgX4pPD90aq7SOvKiqnU3RbYCNn0bppiytWTyhYVVVgxJOO4MIA3dlCTnG+2wC55emUXvFgMuhd8qhhglEzOwFQFIBuwlLVKhvFaAhbWbF509wxb2Fp0PVpEZYb0Rl12LgvOj41VlfMn20rMXgkRnXUqrfb4qP7JxRFdZxjYS17Ki63Rpn5iYTvyt5HfWfvSdGTgjA8KL/h6c3528PO2iY8D3f2ByO3/MSGK/JQnjMlnC5DQO6wD0FQ7q1/0hVaM/sH/WGl2Anp1F+F153idzZtFl8N5xFdKu1g/rjkPsfjc9SjD3bX7Aw6YCSqMxMVBu5RXoNg/4zH30qvecjRm9tewOEqu3CyCV1hY9JhUPytXwAmiPQuK9lx3HH4HybmTH2B945951yDzt9rl6ZUPdX1dKJ/4+4xWU8sEZy5iS9y2ey7wmYx1uhWhF+Yu8PMwbWtobqPApZS/wNDPlrarQ+e4qAB3D4HcA84pindESFerXpU/2JJtq0IXB+zZVNEo2rh3fmcc14+OZ9c/G2nmOTYa6Z8njMHkPOwcWzoUXvxf2lI/O+TZoHjITwL+Nd7bv1/68nymM5DeLmDFZ7ut1ZTnjYVyLV/vw9GF3/jMGmqiPiw9G/pLngHZGwkGgT6pmY/gwUJpjvWgAYp5zpXNcZU+Ieybh9n4/AH0vPdPW/p//7be/qyRpHQ8yXsmt3lVPB7ipQHQXXT3B9hKuf/vMCN8ZWveezXOINb3p6pBBgJ7dQb/692WiJ9k6dNhVlhkwqglgdo3hSchwNagAukogRwZRuZPO7pt7D3ol5H1m/lnUg1eaqkD80QvE3cDMG6nA5W5FProCMENLrFNVejIAMxQZEV6oaBnRWHljnnWDvrDvbF5VOrAxduieGaGqBsHM09ad7yPjhfI66GlyxXvPWdypI8hrHD5sNfDuqbuzVRDB9iIDgp5H/kwDQcQ/+EzbdNi774R5yDtMvFi2ss+9fBn4rHiH2A+NgXG2L6p8tTjtUV3pCuzMYv2pfZ3td0bPyKiq6KT2USQ/1DWG0KhrT7CNg+Q+S26+/bi+Tu6qWwSQedVXz2EV5u5/Px70HTuk3sYB6HVabSnZ9aBbp+gZV78zoJ5Fdm2ZWKGRyPP+Le85C7NSSTDQc7zjbm+BLE8R9KxHb6NHHvOZN9WVcH4pA0Em8a41vEOXUTbymrDNwbwo1inbEO0B/arAgD7eWV9o/qX04HqMs/0G3FHeAFOc1DhmvBNe6dvhRVfAXO3LDMBVaY6KnSnL6n5h5hHLFMloDcZ62p1DB8gz5Wu2T1Q6be5+HPhvxYNyXvDEXhT14fm5un6VcmyN1Vyf+UJukh3XepgRhvGZHxvOj/FCBthfa/YX0Pqip9gw9P0ae5g4TuUrwbwkO8MIK0znvNlsn1X2mq1rtOZeXmX9GG9H/FWc2nMu2Z6N+jbjV9eYHMknJpe8bGY8n8nRztz92Dxd2e+PzPNGmIsfMYP7aAiu3/ioCH8+4O/iOs8zZ2doxDPGxicNzvfeOR70GQ6Zr/MXENXzg/9HrHkB9I6n3M9RYZRxgEEulChh6abormXyd8Lds84yj2NW/xGqRJms1v1GuQ5o39k/hp36gxVp5f/eOYZXWyzxQtQZ87Bf5ZUylwxcgXDmTbemMNTd/13lVxUynF3ByJLyRICOgXUGADzJ2MHeUYaq4ByXaXcUR+R9UkaI3Z7JzIPU9YZFniLlgVPbAeeazb3C5xWPGyrbShHP5E/o2USF+WoMEzt5Bdp1VjFwoWEHvW7RukrFmXjpDSxk627D7+zTjL6z31lSOZ/dvZXZXd0LRKMtvgYy4XXP9mpGDyVr/Rriv6M2o/Y67WTjVt8/9hfktcHrLWOLNXWujOZMpo1+ArST7YHM2+4NgO01YNne799GWzexVbEhoyAZnJ/PC6CTsriW0Vl8POizO2Ou3gHoc3SbrjUD0DGc3TrHc0j9PYlJpucohff1nux935yVibzo0bNs1YEqsIOHxDjIXDZtqayqZ0SqAwrK+RD3yv1yVqZSjwln/5sCespj/hVPenSnUL11XrFYLaxT5c30XW+kM6XGeNbzqk0nCn+fXZ/I80eVgQnaZiC9Oi81x2sOv19XZ4gnLVPqGJjCeSslsOPd9GSreFsrZM6Uy4dvFrUBVLTlOeCuETGercypU0YZIT6Ucpc07pH/128+KRMmloMsTpnha+xXFyGB643zioCDBwUVemRgUPFvpe1KGUwU559au+qz70sJ5NS5MTq7R7z5fdrMKMLWnhmNKvSsllHrnoFSJYuifc0M+XZWzZ49sr/AOMXGrgC6okO295iRMJO1XhZ9vB7hZYubgBfLH0+muwzvCOCfvvBe+liQKvf8Uc5k+wHoPbqtlm4u02p3p74Pce960iMAflFWXb9VHvOf9qRnIe5demTcVPHeeAURQ2mHMvWFrNHWZ5RIjpWx8v6/V7lquPvr0BLPWmH4f3QY2zc8lDPvbrZuz/fMAuUbWwYLSQAAIABJREFUyqxTVrboJcnuno/9dp+WCNZXgHnEs9EdMb8WdqB68kTKUeT9qygcY5+QcOyWApjwYxYWXZ1rmfcgPFXRyCt9ON9s/hGYe+SSC4kc60ruqWb9sDlX19WvLXqAH54j9/AVH0dXjpjc6KxXt2zJAMIA+SDK3VtRg1JGgu6Yq2vp+UdFfuzou9NGBNDx3nnLY+5le5BQcxSLwhCHUCfPsvlJZt8LBMkMdhW+nNnzXn7YvsbfCsNPiwwZZXLKrQczsI5xCGfIoMP1DfZYJrv8AJWMZXIb90lmbPPllWxkxJJllaxxouYF0NEbft1jdx3iWaHOpyxKz+uEB6Cn7L+1QPF42drnv3RjBtB3glGGTeys8WdS9wpW47nQZ027Wd3HAXG/hc5o0qXTDCjPPJSeYSuedWTwLhD39RUoX91EFe+6AoSP8pfc0VwdY7l+BchjyLsPKyl39EfBivfcmmRgXWV5z8C5V2ZeSojzSCKQVffTV7wZ6Ll7eQWatKwUjzzrSukzWjFAiH1GShxTah7+d6dnF5x3x4B9dhX0ijFAjQmV2SGzhebQlb/I01VDzAr/vvYOPLE3xmPJ4ixxk3+mzQEPD0Q++BiSOjE+jzyn3fWN9hEzDvg1VBEwO4B95T10lhTOe9d9qHtFXsgyGIrYVYiuhicAegYSI686k62MbxD0Me+ulyE7+QvPIjTyK/lt9Tq5HSr7PjKmIqhWckzJiGgfZ+cI3XN2hcau1/honVHh7jEwCH7ww11vrLH/dwPtjTWzaFdX7wD0JQnUrtxYsnbbpwKhgM/i3gWfiqDZlasd59LOxYxAvH1j99N3jkG1xcI0K0r+ytgQhGNbLCO8L5OB7ez7c3CLd9BD5a8Qrlo5VEv0YyDblCZrgAFvddcQFa4g3BHfRffZ23Hs0RNspXkWCimezJLwVNYCAXhVWakoO4WpjSLK06q8rJV5VfuulmPKc0fxrSh0ptRFHppOn+FeBu98ZHRQhgvGA2x8lWgQP9bd6xuBHKbgf8yroDmhB+uajwJjNlcFIDIDUIUHIuBS5fmfKqfeTW+BdTwLWNK4KFnPhslG3t5IXrL1rKxxZ8jID526lbJ07mAU8Q6Pyh5nY46MEx2eR4OUondm7MRzITKAlc9Mdc3G8skRg2DlfGJjUw6ra80PQK9w/r4yhWNmX2enpd9+uwD6ULpur/FzME88K1bxnCPNZ7zi31g37zU3erD30HcZMVbngMBdhXEbuFjtz9dXT7ape+pVQF4dYxSaxujSsYhXx1Aup0IYkfEZGJ/wjuC4Kt71lRB4319kOKooO4ymmfKhAON25ZG8GIDXTXD8XrFg/y7zECnIvJBeuUKPVVnxKgxKgcmdfUTDwHmqfmd5IPKwYcTSDF9XPGqvfWVaEVzqfAEBiB6y+qMvkzUF7QpBfObhU8BtvK8Md9vZuvkyCjw+Ool4QrDAsu0i6n30q6EsWVwaDq88GH6UM9709iw/K/j19zx0/RvBE37vdI/yqwLeOu1Xy+J8H93Cva9+/VY5h9T5ZbT7OB+S60Kz8qsy9495g2wYfXsvOsnkPvpxnnQvnlDUPHidAHt7lu0Zt38a8t/vPC1Cdh2AXlntfWUKR8i+zk5Lv/02myQuuloVYRKWJ+Vah7/ACyQf7KBC3Q2k70gUR4U6yTSK99FZ8pMovHYHr7MM7le7+Ea6AXL1vNouwM7CT7P755lHd5pOs2HtHeYHwO4943b/3MbPPOwv/e+WtCq8PaKDChtG/vNtsFD36zsaljzgUUDGK4bMAzjaJcqP8hxMrzl41j8UsIaSPQP0mMKHgCebG/UmQ7Kj1zoGb2n7cuj9ycaBa8r+jgBetX3Gk+q3b8jTzONmvIsGljY9FjSpbxpgWNvX3CKDUgWoVMpkPJKBcgxzT4H4S+CSpDzXd1SIZo2ys/XuMUZGLs97uMczo1wV2P4ZAD0Ldc/4pftdGT8yI5jqhxlpu2Nisv21FmAUvGLUx0/gIR/n1y1zRn0YyNOmx/TkStbYx0MIfkat4VWFq9gB6Csr3q+7cKz0Ozs1/vCg+zBuo8mKpzhzGuK5ZH2yfFmL5055iat31bEcRh4MZWMi+qA80OIzIJHCvwMM2HhVuDsD6VanA9CjO6TosWXerSHrHVD6EW86U7oU09vvRhxvqWoAvNHMlRUcT8YCYyHQXwmJV+FoUYh4lEch+pZNjSl9Y3/eNMqUy6z96ncVBl+tn5Vj84jmOANmmDKYeWHUuLP+/XfmafPtRkYXRgPsW40lMv5l6zH7PaIxnbO7fz7k3PV35MaCJKPZOKP9E+0dBsoUUFMGi8hIkPFPNi/2PQLnWXutMHdsLDLsokL0U8oQSUip9pzJ04osjcC6MtxktGffq0YBX7d7xaU6rgqIVvK7QtPqOF5zLRivH3mCHaAHHETOhcwpQMc8lsQIzO6nZ3v9APQZDpivcwD6PO2makZJ4maBZnQHnQ2y8rLID55NY4gKsEeAfJZeauEicDrGKN70tPYUEF8B6CrBHLu37suil32KWROPJT2sRejnbP9PvWqYonrK4GoIw0as8SYwz+ai7qv7esyTnnnXI0863uWzvqpeSWZIMZ6vKvuvEGCw1ksFJCOm+K4iBGzM1WZVBEFFEUWwE4UPd5U/1nY2JjWeRz5ByHKmWHuDQEXZx/LRGuDVGJSvVb6trnO3nF+vJ/z0aoR5sjDB00PwX0meKvTDPRJFZzCjSsYf1j4zsqBxRRmcMgW+S+esPD6zZl51llgua+v1HfOZ+I+bz4PWuO7CH/znEhUyOXOVz/YzjiMy+M2uc2UMH9ePXHg7nlvKiObPGpPhylA1tq0wpDOZZXOvzCVbWz9+X5btbUpz4lHHs9pjeC+fniMYQP6rH5HM8qEB6LwHoGcrvvf7Aeh76Zm25kPcd2Qt93lQVBh8x8P+k2cTA+XsKTYG0l/C7gse9ChEWIW/P3rZl95HV8nkdoHxlHmhACrZzGvbbXO6fAXAoxK2MSED86ZHYe/4bXbeDOgY2BmKyc2LGK7GvMwfB38Qes2UPQwdVArh6ly9EhftxW8YzCqexqrXeJoO4v3fqL1M4Y4MAgqo7/BEqbBXlm/gW1525XWTBgenNLO1HvvPe9fVBVF/97NwzSEy8igwEa17ZnhT4GKWb2frZR7zj9B3FVGl5D/7/ScVoYAwkdFNGVEiOmdrbrw70/bM+n7oDAQwfpxdtrdch10w3TEmVuZV7R9lDe7pUE5jtE7wBrof89MnhLs/azwW/Z3zQM35APQKN+wrcwD6PlqWWvpGFveo4wi34Bn0017z8CBxT689Cvl/fIaz7/aiqzFVvevfDq9l99Ijb/pPgHcMs/6wkAdvnZY2zU8XYsrZ4uZQz61dU9uVNO51KLtIBnaXbJzJi8/kVZU9P64MKLI5ZHtyNpy/w1aZAoZgJvJAPgCuM4DkDXTvkdmpZGfz9nPZrdSjF/05B+79yQwwK9FKks/gKbbHo64SOb0Y/r7fKXIJYJ8IyJos8ip+jdOSx4VnrQvBjfrv7N2VcVtd9W56Btiv+uX76ixJD8r67O9gstn+UcahiBcjeVpZo0huX21X2sjWN9OXIjmPOpSNd9fezs6t3eDdy2MPyEt0JqAc34UP97YD5Y/8tEAgaHuMx38jDR+AnnH+3u8HoO+lZ9qaZXH/OJghq3va0F2g6zh8Dj+RKG7hSm51yOVynafWvgHUo0OGeXPKE9tUcCaknd1Hj+6vV4aahV5/22jxSvxTGbAvM5mIIfOYP/vsvqceJZi7ys6CdHWXLyMDgtpdyo8pI6joRcpISVFxE+oqf2MsE1EtmXL9KDwAcGzuSAtU1FYBrQJTO2nt5xiFZbIQ0sjjW+FPW7ePszK4RoOe94rsYevslXS1jsjjwwvl+azwFrqiQ8XT5seV0bPyPfLWVurvLsPeUMeM7o+cvbJP3xFRDMC3ALs1umiU7dAjA82e174doYN7HuVWZ17Vsjh/ZeRnv1f78OWYQfUnIkY66/yMN8hz8YqAD95K/5Ch3mN+XTFwd9uRDv68PQB9htvm6xyAPk+7qZoMoOOTY4+AnATtOLDojnp0ZXdqgl+qhO+jd8D7jiFFocQ+jLiiEM6MJwPjCnhffXkP+0zfH8I9uIvPQqkxDHkoGy70+ls0e8adgXB8J/2qqBIGLSptUYI4fwc9u49eWcfsmkZkZMoA7YdCBYlwUMmLlJ8uQFdzR49rpuR5PszoWQXrSrk1Bdt/z/pkCuX1G/Pw4PUCpYBmfVYUyKwN/M4MEcO7+x/xkz6VyBzrq+NNX1lLT39b08cQ4ZLIUX4PtC0Gjmd55aGJyzlQ3WNqHCvGli6/KGCusrqXwXc2EHYv/U8KdVcGmuo6sj3I1pB5dFcNhxmZP84Gl8MBr2R941pLZf9/y1gVyVeU4V7WfNR7XN1AbW8UvP89ivrrNM5LjobVSyZfa6D47AD0KnfvKXcA+h46lltRHvSXMvaFN9JxgFFkVyWJXHnCXyio7qR/24uOIB2BZXbnNQM9VVJlgLuTtb3a53OoAjhn9VGxHgcNhFx/HZTbwLIQE5bEoamURUnhsizv0bvpNoUKWI/ADK5RB/h0+SMqrzy+3T4YL7Ekeauh71ebQ2GBBEOZcQIBNPM8MxBVpYNSHv04GYifaf9DmSbh3qZIKqUumv/r3BOypWJo+gAkExETONePfUMiJfw6eoX6V6zoZ2K5p9377eNn3eBOeoVHPM0rwCObo/8u51ZlpC+VY++iR97zqWGwbO9TDfUrRcaabK/1e3vXULJttV22lz7kanH/+7aGTkXupFfHi4YQv4dVpMKskYSNqWIQfclPM2aMgb7j10dbdyeQF+71DBt+s5D5KELKxn4AepWz9pQ7AH0PHcutWJK4l2Jy360ee054zbvgs1seJ8CcjuVJfqGgSh73Z72N/igyzXu83/Ac+3vmWbi6+r4T1LNoAwaWvsAmvEkE4SqzogLmmdc8+05GhcD8G0+tKfp+80pCBhI8cMyUzaoixOaThfCjsWyX8eyRC+zecjERz+tsKCTq63jbymAZxqq8O8xzf43fr111HT+U+OTVjFn5EfGo4k/kVTVvD8wj8JDtEw8UkJ6z8+62o/hK9T+7zt35+Azu5j3H/2KbZS+7SjAXGW2b8r+y9kyOeJ5gxriMjhXvLcoe+3tmbdN9dl8JefXp9rwyJGfzzL6n44IGdkcUoIz5kHvknJD0F3fUo/ONVWFjGL/dRkPr/wD0jLv2fj8AfS8909a6AH0VaLMBeXxyfe/mQGmeRylNXgLaGSvU7+wdedbJN2jXmcyf4alkSeE8+MZ/X/P5ViK5Soixp+dukNRZq6csbo6pRngldQ+9e/+8cwebjYSB16H8OWPTpUT8fr2O4BRT9ChjmUzxQUVnFcRFhoahW9xXF3AONtdH+RTldkd5RMaJGQWYrm3g4R40gafWdvWrxoK/d/tj1xZwXVV4O66z8URnXW3N2DxG+xUN6sNlpYUKA8UVz9asmFLeWj8O4xs/36qhZ3ZclXrZXfMyKPedsdBCU5Ku/37Bc9EB7JU9H9GuInOZF33GIFBZQ3/uqLNq/K6eN6x2UiyH+6FSzWiaGUC8rEB6luTijazHuWuRA4OA9yhFzgtwtD/P8fnzaPz7dr9f/7FQdz//a4z//X92UtRVqHfKRBSoHC+HghspgCHus0+I7Qaf6lxiZ1NEjp3gHZ9hU2+lDxlFMrzbOFdphUAg89hZv6zeMyYCCq5v6t1zqxe9i36V6XjCO2WrW4CFozKPuh3MrwNgISy1Or6PciwEPsrijlkUHcOrcHXfZ7WM1WHh7R2AXinLDEmRsSRTRMbaiqfASorI9GL+qvhNnmPzryjZzHNSAniEnkhjbKcK6ph3CNdot+FF8UCFN5RxyeTJrsgIBlBLwMUrumYMqdwXDXhegWXjAawagWdF486exvFs2K7TTUTe9EeGXldV7iRyaQb4KGHP0+D9D2bMXVSAsnVgtK+A7lkCf4C4YkMVeVhpKjq/2FWnSpuVMtH+t2/RCwlqTSp0YUY6tcef3z1IH4LhD8A92nopWQ7Qu99Dw4SLmz8e9Ar37CtzAPo+WpZairK4eyB5/XvsMwCeVmYFdKoorqu/LzoQS/TpFmLAfIU23f6xfBTK/U0PceVeuo3VP9V2/bbDg54ZLaqH6TdpJNc22hC2Ka7/QnKGkeQK7ierPrIs7qMbyPhuv/k2K/fRI54cMgXCCPH+dsfD2NkvGWivALRsbvYdjQ5+3sogYWWsjU7isaffwh1tGR4Nk8uUOWUouJphnnI/Risz5iy0gM56oFJp7e4AD91IpK4MyeiseJwqtS5s92WsjDK6WzInF9rqPWyelvhvXL8d9EY+efaDiL7Y2WdVniAwH7IyyeRebZsmCLVzwCcUrTQ4AdjVXvLrwNYo2q+RIS4yPEXArSMfKqT6kO12t9zCrMGp0d3n6IXPZLYfT2SUqkQlsTWN2ldnxPW78fkjX5j89r85gP2B49GQLp5gs7EegD7DyfN1DkCfp91UTZXF3QD5a9M6cI7gPfIYs/wm3vGHA1dOxL/Ck2uR15wtgI9I+EmgnoXb4lhZ+G3GUB3vOgPsKtT96vcb3vShPN7eaMzk7g9X9e+MHu3vGRBnG6PSCVHCKp5y37SFuSPgz8LflYf9apuFAj9KiQDpL/nj1m4naGdeGVTyB+8snE7Kg05lRvBsV2X5bawIqlABG2tiXo1baerMsapI+/F02s/m6ttCBZIpu7iGDCR4mmT9z6ydyvnRAeUR3emYWDI59gTbIFBv1h2jjNHWvMaeP/1+i2gReXR7I58rrd5Cv1pj2d6tF+Yxnwp5nz0T5qYb1qquRSdCZWYfMLD6bbCOhGFXX54yzhjWBvGuo0h27p6vPxNRlqKRJIqQ8TJ37Pd/u53pkJCycg+dnSMHoH9hYwdNNo+Hnx3cP2NvHqBn4JOFeK/SpAJaK9esgkjf1SGW6zP6+Sfr2PWByvzLA7gLMu8wA50RSO322SmPT7T5RHFXO8qDvhu0KzqNg6CZOb0z/4+yyODsmTWmmG163qAK3tmTbLPzrl7T8O2vKDcfChUJed8Nyh/FpmB88GXt37PzZSGJCsAyusyuaUZj/115cFYAPCqVmbKvvFAdZTfyprM1VfycjTVakyha4FGQ4eLnM0cId4+Shr7GiAr25BWSyNtt3rlnP4Ax6ZmbI05n7XbxedZOGsZOGqDgPfJ0XG3gudEJPxSe9Q5f4t5F4LZjbSLP76zsqFy7Ml4bcxCGYtSxOnqEMnR5IxYakndEijAg/sgtcUb679e/1branDzN3g+c/3reFu+lD9r5q/4ioekB6Jn02fv9APS99ExbqzyzNjaL8J6nHWwuwBJg+y4mIri2jhDpZLRTnbBIhNUBRfddPSh/KcwERKiDqDo+7zW/wPX1Pwxn979hu7sBeTbuHwXl0WCie4cYeoKGBLYBiqEnWdg7es93hrdnYe6PUvCl5/GYcvnaH8QL2VU4Iy86M1gM5cflQZgF7ErhwvkxEI9KoWLbSMFUHq4hG8mJn3lkcAxXG5akiHl31Dw9XTLZ0Pn+Z8gRnPfgHQJoQ5rb3rJQ3sKkZ7yXuG86URwVwKjKzAK4Ahk+iqA3HUE6A+Alj7rKqPsnKz5IcwXWPaEy+ZlFVTBDpOd7/PfMOn7ImuBZ12/t+4rBle3/7nyzvaUMBBlAH+Ngd9L9y2zRlRs3EaTFSRLXXeW18gegr9GvXbsD0K1xdu98lydYYZOrb5Y4rog92nSZrcDu6D+KoHiyDuk62zerl3kqGWhgB00XHDAv+TU+Btr97/bvnTQY50PDAKGybX/rAC7PlYFxvzE2eP3ZG+qjCyeZfdj7LGhXfImhgp42rzu0CdGypHKmvGW0V8Azq1fZi6rMGNsNzGfunUdjY4o0A0joufHgvTt3pTwyIF7tx4PyyngiBVYBRt+ulcmMLH7tcFzqGlFXtlYAKPOuSUDEwt3dfpfj895El/tCgbMMkFXW8TlLwWBWWcNO+6tlDZDbe+hDhoJ8jgB5+o56lrhndQKiPgIk1Y0ylHneYPxQ4ZHI64v8MSMLozlVny1kbVT2eVaGzZ0ZyTrLHwFzbBuNuAq0P/17N7h/FN0AOfwX81f6lDpMhh8Pemel18segL5Ow1YLHYDu76VH2d53gXWcCHrPx6EXzPYnjcoYyq5o5ZPttRZqU2EGgBTwiUBCZzhRwjh2D/2bnnMWzqbupUfKdmf+y2VZaOPVaMbg3fcKCwPF99FnvOisG+VB92XZlQT7rhSbzCugFP6x9gHoKJDql45CvC4qrBKjVmZyQ3TG9qKvSCh3lVlVAhmdFe1X6V5ROFfmVAmJrUYxVcJlcT2ZUuzno9b0obc3VvrEV6OR2Dj0wVuQUA7X1PbRivcaQRtT1JWxZ6Xf6j5CMM685x5wZ57y7PsYF7v3l8n77LyonCkBUSLjX5WWUTllLI0ibiqAX+0dNZZnb7NrHd5TbEYk8hrMqlxX0QM76JzJj0x2YuTDiG66+PWFtuGpOu9BJ970QUqStPJ40HeveNzeAeg/S+/fqgB97A/3Jnj2HNuOafgzyLfnQXk3ialvp3JezcwD6aSy4c+0XakTKf/s3vlLIG/wwmLyuOgpNgt9v8aQvZlemftKmYpXd6X9pboRSPcKW8Lg6r45u1+OnnL7G73pUZtDbgRhgaFCRu76qVwK34pumAGms/PFfciS6n1rntZ3BGiU9wQVuutv9OCydWYKPauLgLSyjzLDDHqi1LyrCr7x+Ri/y+6M8rYy9h1lIgX+FaXALn/eyrDKMl0dXwaOs9D2bA1xHMo7W43KqM4rK8eSxbHkch7Yz9xTH+OIMur67xvO9VBWE+Me87525WkUPm2yAuUPk1OdfZyt7zMHONcG/2E0CkmOmrVf+a6MdGPrBtEl17fXm+XQWce4aVUrtE2jd9y1Gnb3/LXGTj7913kHvcIu28ocgL6NlLWGOgB97AvxzFqtt32lEKRXEsnN9p4lz7N2GTB/CRZn4GC0nB1fpZ7yEqMyqTw6lT5YGQbOFYBXZa3db3rWs/l1wquztsrfWRjjFxk9u4Pux42edPvGQHx5vqJgZnDKQKuBevS8eU9tNMYKkFyZYwXQZ3Oc6T/ySD0yjWUAb3TWBVm+3yxsuaIYsqFWPLCtEPEG36pIkZn1RRCOw2Ag/QEv7gD9MHr5hEyJRqbWl4HzyNPpx47loj4QjI1zFRJKRXwyy0NsyaMs7lf56F56yWtunSrPhf+uvA8Vr0SlTFEGoNHE1gerr+63yBig+ixO4VXMg3BV//EWF6JRsqtYeEbNGCuvcXaiDDoyG/d5yxhGZEuWLM5HyV/zOgB9hovn6xyAPk+7qZpVgN4FqVUPezUcvupNrxiKN54/ZZr7EPhHCXV30qt0qHZYUfrHwQVPOuGBkd2JisYz8wybtbcjk/ssoI9CqaP5rtBqtBslYKAaocvca/WtHAstmXzqIPOQV3lypdyu0G8G1p/9CCGL/nemUEaKX3f/2V60flQeBCy3QtOsrjJMPGOEd6hZ+cgIEhlMIu9rZmipKJgMpGeKbKSQK6+5r4MgfPUKUXWeNi85fm+EsVBUpYmhhhwwEVsnBqT8PprxmPp183MNDRRifgwoZvuEimbxBroKdUeAvgzYs2y63UkVsrxX9r/iCVxDHJ4yJnpZ9NprIut31g8jiwfFXv6yPf/s8b//uiL1YdyHEO7oTOosE44zOp92GaaUkVDKb2e0uLbgE/7+LCR/6hFzzFnxE+Le4ZD1sgegr9Ow1UIVoGeNqjvYVaBu7XcwikpoerWVXcfK5rP7u/Kuq6RySDcE8BUAgF5z5r2JPDq7khp5Wvos7lFIO4LrCtiulPk4+MUTWEqZ3s0X0+1FGRN9owSoV59Vo4onJIvL3kXvzq/K1yx0mIW/+/47BpRI2VSKfwQqK3TAvfjoLLaGYFDrzEcpvBnY9UqeB9sItCrzszKsLnpelPc8AnBR6KbNg3mkKl6fTKGN+DYy+GU826GrmiNT1JXh5Fkbd2d0zJ0Bd3ZXVDy3do2B0dB79q4y5mVGz2t1b0VALlvDLq075THEfegov7+96uqN9TT8XYHx7MWPzgQKZRXtUW4oXoi6iPY98hDbB1X+KUzzKRKBUxap0ml7lIWnDKP67Ex6zg/3msOHsaGJuKqAPJWp3lXu0PdoPyOUe0/9eNAzYu393mSXvZ3/K7a2A6B7MIkZ3hFY7vQUq2u5fh3/DG/5hzJM7u6zTPhDJv/tj2sE7H87aFdRJK1vpVhWveyYsT27m46Z369xzIDuHftYgSXf9mqil6VxqvB3fBt9aL3Q0+KmYHfQcS4seVwFfHdosvvagQKrkdenM95QwYL79t4AMRROeF4O96iVQf7EyIPOeJXSp8DzkF/gVc/6i7zA3wJbTMlkCnx1LsrI6eeuIpXQi75idHl4QkSCDB4Jwr8R6AyaJBneWZ+RAcaXZ/ySGWoyflLjsb6MBtV2dpTLgLf3li950v1gI+/FjkkV2qiARmtmV+TCa8+Je/Ezcgqni2fC06bItzIblcfIrEA22zu43wrLlhaJjGdRKP0H3T3aYxnek5Fc4zhZ3NPl2lrgAPSt5Mwb2wXQM2Cej0SXiK7iXrWYoTh6DnplLKt1VQI5lvX9JzO+I3hSir1XKB/hX7lX0CAcA/JRdQbiWXZ4etiBB30cIi7Jk/3tPeqR12uHgl0mlaL7IgBn/av76T+Z1T2LCPFrxdYhW5sKWGSKWXm9xHN/GV9e31eAdmV8kfcLv6m/Z72e1fFZuchAwNpiQDsD6RFgsG/KaGLrxeSIl5kKnHcMf8qo5Omg+JoBaVOiPc89bSXh7ZlHUfVH+b/xtv0YKymPRpdd4L/Cr1SG3vKahbn759iuuszjPnSd2+sejoF51F1IzTj8AAAgAElEQVQUzisD/Ojsbg2NuxvP9Q6fMmPZLM2f/QYZwK2PSOZHffpQdjNi+b3N9AbULV7nUfEdcBxTdB5V5aRvw9dha8Zkv8mMyCDzGrfPAieAuQ9/fyWNs+TvN1I8AH11Z/TqH4Deo9dy6VWAzu6mY7j72MB/+2OoGNJtE+h6h1XyUk+Q7Lz5Ao6R68G84gqUKxotLzY0ECmYY62IVw9Dv7MxVZLEVdq4yvy0N515fJklPAJ+GSjM5v7xHZUvU7BQAVMKWSXspDko86hH76M3m0yLq7XxFbPwYX/3z5SMUCkjz7yMfdI4tVQUARof2P7zCp7/br8rI1JGzIqSqpQ1o1tEgwjQe9Ck/v2cEcmd92yetlYqvBvrZ4Cy6mEPeQpygCj+rczNymQGFTbPV7+ezuZBd1mWGb+N+oX76RUjmB+L8VUUHo/zZnWQt7K17dC7Whazts++kV7tb5RjV6Gu3zEfiTW68izO3UYEGv1e9vuRrUd3f1UMh0pedfuqrAFzerCrWWlbDrwrw6KSacpIxfZYOg5SwLcfGcCYbLf1p1E646PrEN9Lv+XSf/+/XqVmpnDqNCjQUHUarZ6ikgI7APoQendo9p/x/jdLIOeNv9GZ8y2QrpLqZQaNIZdcpvyq4aJaDhmh4gWaVfx9X1l4O2NQFiL/ra0cAafKobodiKNy1Zl4JUHQBONnd9cjL7sf/urb6SpcWJEo8khm68a8Asq7ulvJixS8HcazKkspGjwKFjRUoUPVKMAUahVGuRImm3l/sjuV6FUv09YZQQc9idcy49EPmU5C3LsGltcagsdrfMM76XZf9n7z2AMGBF/4Dcfv19fz2EPjZH7WnvL2+f6ikNwKH6t1zjK6+3pWNnpP3d9DD73okQHWK0KZ9yJg4MreZTxpv+H62hpX9m+lb1ZGAdvqPvU8ZTKJ1a1cRbJ9/uzrO6Ec7v3KXOkYXNJH3AsdY3JFrvgy0VmZyc8Bs70h4r4uNdp3qHAUc2D9APQuB6+VPwB9jX7t2qsA/WMTN+5btwebVKhctZ3AJbuHKdvLMr1/KDLBffXqoLMDBcHQOJxMCbv/W+2LlfMg/Ppu76JHGeCxzkr/M3XRYOEPXPs3a7eraIdjU1Yp7znHBlQo41VuYzijdes96yqZnDKMfMiVwlvqqOB0w9xNwaisU6b8V5TN2TmiwSgbb/a9swfUvFMFLOnEez3HHmqAsM74fdlOH9H8GJCL+FoZXqrXaGbnq+jK2nsUefbu0WjorVC/2rAkTj47PGh22f5YAcdqXcfZVciRUCmzsga+rrqfjmWm+2OAfdZjsVF5UgYxpH1k6PmQn0HuBSv7rciJzFvu+/eAU+lSmcxGeYlyzfM682ybLMA9sSrHo3H4b9QA+KoM8kVcAThZ3Kclw1TFA9CnyDZfaTdAp4c9Ae3VEXvPMAtrx3YQg1TPlGq56rizchEYx7vns97xbAwfBxyAIBXOrjyS2aFSGY+6f169U17po1OGeWvH4eYA7Y55P2OqMHk2AQberzoYVoKJhFi7ZGOgJx2BOAt13+E1H8qEyw+wK7JBrV8GRlHp80oPKj7ZXsuW9KW7kH2ahfNX2lchomxefu72728AG6+Isn9X5lUtE4WPRp6n2XnjtYYd3nNbKw9sXrwTPCXolXPzkg++8sm2NhvylGGGrfWsR9HTBCMJbJ96Hs+MB1V+isqht9zKRt70Tr/Dy/6fQSi7bww963hWdDpulK14uqseX7aufm1xD3j5PLt/s6lalAkzMgx+K0TPZH2w77h3GOhemXP1XMzORz92Hx3zvMbhE1RaJvq7ktkHD0Cf4ZD5Ogegz9NuquY3ATp7Qqz77JqaVIRjEHegU5E5EqeIN1kpCn8fB8d9X/8RcBDyPoS7yPQ+OaSnWuWObOaprAJWzNpu3nOcA8vufpXJksOt0uKhP3mKzdNJGTJ29V9qB+8asjuGKsQRlbV7g2Qh7b4aJou7vnlQbv9eBepsTRR9WBi4V4xKdE0KMU+GApIrSpGNGw0UOMdouNV9mdElUwBn5lkBX6isd/vplGdznO1fGfn8mmIkUyZjX8ptEslUoa1vj3k3DbD7MNSMT8b8wIuORoBnP4t3q5lHtbI22C7Ob5yz4vkpBgo7vFOhiyoThcarxHHt/iIFqWC07fITW4vI8MYMJIz++Jsal+IXxotVg0CF5s8+sjwT7lUEfw6ZEcw8693IL9tnaJRjBke1zyvzYXXZ/mX7irXPPPsf9BeI0ELdT4h7d+XWyh+Avka/du1vA/SXIkGAZ2XAFTDu22Hlo/D3P8N7jiCc0QEzvg+lYjKsPQslzr57ZRIVSxv7ztB3a5OFwEe/XfVYCHyUYI7NPaMHC2nDNdwFiCp75JUM6KrAkgNFiYEqnrGCNx3HykLbuyC9Gi7c9UCaAqPWqbJ+DLSZwlRat0Yhdh2FAXQct/q7Mj81PKX8+d9fsv/vf2SmvpSyDtjB9la9QcprN2TrneSMGV1QOW0sW1iUremj9G6K0qkCKknr+775A9IfgX//I0jmhJNXns6KAm9rFIEoxVvYL4JAtmcZr+1a90o7CNaZdz19I111pELfN3svGN0rc3/2gDDcdNpgezcy/My2/eIhSK6IkSh+fgjMWYQik9WZQcLvF2UYQ77vyGakKzMQ4BnQ2f92jWbUEYtyPOgr3NqvewB6n2ZLNb4J0F8b2Hl8Z0FmNFF1Jfeqw55hw7YykJ59n12ECIRXn1n7Bj3VfDC0G5XJFaW/SsPs3vr1/Sf+x0LUosN1O22i+4UVAjAQX6l34f/rWSM4NTGbO4LzCJjbt8ww8pIp4ok89Fi+lAThbVTXNirk2Ol1qfQ3lCryLno1kiMD8NUxYDnpeV3cj5kiWvLEkEkxZRT7YmA9MhrMKrgftHThrxE/z66VKeZeqWbzYl5A6k0Xd0QjQ841Bu9tszH53+3f/hubc9UIweb9kimEV78J1KM30vHptWucDJCXnl5DouF1p9G4CIlH5WdSGcoMX7gOymC2Km/9OFhb1T2c8VznLFP7f2V/R3VxLbo0Tefu9hF61Ev0dbkvqLy502D81/88Wdy/xSNUzv5kZ6ev3377KYA+Dka4i44Z3xUgnbmWi4BdORQ9DxSiu1oso0LZkRbs79dh9YMh7uygwPutVuZbimOVyBEQ/4kn2areL5vPCgiUNMk2R3TvfMOTOh96XwDcr7IMpGfh7xVFR0U0MN5loe9VcJspJhmQqPJ2Vq4aNj0Azqakjgy8omcGld+SMgaTnaExC6tEL2lXCVVAcNAUko0h0H3Jb5EzYPBKcn0mUtxnDH4RYFaK9AsoYdI4U8Q9QBf/Hn2TLO8fcxRvVvtyFQ+o8t4qoBh592b4ONvDle/4NNuQofAWugTo6myIoqsqgxqDWE8syniRAcdob1WHq8oxWYOGquU+RG4fljeEyeqO/I6MmWx/R+dVxvPZ95cMFFddHl0S8lw8Yf8+YShJTHk86Kvc2au/aGvvdXZK//kA3d+lRk9w1TPMrt9ea4sGYVtvFsX1BazSZi/1BJunA6NJlU6dATHAYwDzEaoiLPobHjoPxv1ddfYU20+BcwM/8vAHL+fXDBrqTgdLvsCyvLN1rISdEE86SyCHoNwD8rFPF6U+AzmMRzMDSQZ4IoDKFA1TfhRQ7Cg4jMdUBEfV2IBtRvPPFFkF1MceKWTOrsimzJudgfQI4FX6j9YTwzuV4pvRQkVGMGW+OuZKORUVgHwtjRweqJMOx7xUnKorX/W4d/gq411ry8/1Y29s4uHKWvgy7E56FtaeetSzyKsoHLE7gWJ5te5sTdg+n9nbEZjt8Fdxiq9iyuiMEYrsChP2F/G3L5vNl/G8kmPZeZeNUcmbIV9uIP7ynI+BfFL6APQZ7puvs6iqzXf8r1rzpz3oQ/C5N9Mxm3mW/KxiFGZriaAcATn7e/N1rI9hZcnijFYvIeuiEIbMWsiQn/F81UOcAZusn853lTAuamMnYEcwONbIZRa3v2dBUocWrbLKk26NRJ72RkfVxHK+XAegIyh9FIWClxL5mV3XyNat4t01pSYDYxFZ1TyrdZSiN8Of0ZyVF8zP3cpU6JHRl3lFETRWvKsVlmYGmUE/cVd9i4eehLYjj+9Y24zOrzOHPJH2jMkUavvBg/BMm3PPsWUGDkbzWXozT3nUfoVvK/wUlWH3za/yFuaO76Bf3zKg3hoThg9u8JBX+1d72gNxk6mqzQo/Z2WU55zJMjaO1zyCZ0Gf/Xvzv7+fzgC5NM4l10pwD0cGMm/8RJk+u8/CswpyC+DYnj7B8PfQ+AbxJ0lcdZftKZeJ9D29nFYeCvwUQGcZ3Z9D/gsZyZVXHfHIn/TCyEP/yGs+DiVyLcAbNZCuu1k78k6O8YH39afBOpuvf0sdv+8E60xx9lEGX/OYVxZZhY8Mze5uIHsz3StpzRCT7I66AuXdBHKhEiAiGJBvfQghW9MKuU2BLIUJJw1WQvpxnDanTjhkZV5MecZ6mUKHEQRGKwaAK17WZ+4+LBLuPFoflTlmZbzy6vtW9RDsZe2ztVzhw2p/M+WetfZyXwAFxSe4fiuGEAaeK4B6BqxV2u3SVHnIPTDHu+gY9p56zKNBKWA++1Z6gwAMEKv9rwBktAc7wFLxQ6eNbOoffO7OJ3sd4dGfLJmmL5OdGy6MvDMWlN++LtI9a5fJZpSZUbSVbz/c2wegV5dia7kD0LeSM2/spwD6x2Ht7lW/NuWd6R096bNh3NW8J9cYmhgkJ+5ECfY++iPgbkOGv6uvwt+zsPiJodEqLMzWCn4brKs309XcvgnOrz7V3ebdoEmuXQTKVSV13yP7XbSHnnF8ag2r4RvqO/kyontnTWb4GEHdLkUvimphtGMRH7toPHhevKvNlLzrtyw8dWZsyvPl+8N2M7BVmRfOH9d41pMfhb8qvp3h0YjWTDGnhgcDBZZ8sQjWvdLOvGf+t8wA1OWZyCDA9m3GK93+o/LqfXSr4zO5o3ededunxsaUJvVsp7jmtuOOuu2vyhx2rdEKr1VkRlSGRXi99ruLVomuEVbG4fcfykk0qHq5puh8/W68ywB4Znh5dEby9CGV4wegV7bF9jIHoG8nadzgnwXQh/ANvMN+1B1wHt1Hv9pkHvMP0PADYD1KmJexgPead2iTtau+ZwrjI+wTa+8uJVIBcwPg/r/X2LKs7ivAXYWkDf6GcNUPkLApeddoNwsZwTJ+MOhF8RvF6jWYx7+J7jO9e6955iln3yueZRXxoQxJ6D1Xa5bxLlOKdoFyJD3SQf3NIjjYPGbmZsqzAlKocFElq8hToVILCcW84tkJW7Y+lKLpx8+MDCpKIJtihad9G9kVjKy/6LvypKGCTtf+kiEqUVwyKAaYlZctAg82rguoXm2qdm2NI9CgeCfrf4b+0dvnrD0E6dtC3SOjrI+2UudFlMukyQNSFwEvMQOPHbCOxr2orvqWeaBfvOSeXxvt4dUsYvCkRlYwhEV7iMnEl0whSRlRrvvyjA7q/MsMbaHc9HfRyX6+7qSfO+gzEme+zgHo87SbqvmTAD3Laj6UIPfOd/TMWAWYYiQvwzCds8ZwizIaTy1AoRKGtCOdoiYqdCoMIS3yU+HcLClcOrhCgRWQHiq9DqQ/B6VjoAwcFYZeL+I3gKq16S56Nih1Vx3Bvf9btYlgPuJFny/gp7yRHtDMgnYG5JQ3HY0Ro39hLNpFA+V5ol7XjDmC70wZjjzo1lQXWGVeqIpCbOs+5LW7mz3LAy+lGoyhu+QIepC9cm/zQO/6Q1t8Ggnvp48GXLKnprfdj4WtZ+TdY4Ad2UzO60uRH51toDzn5YzuJPv70390LuB5cFWavK+e7akKPSp7vdsOM9RE/XQMAJWx+PPhkdUsxP3+zcp8I3FkxVvu59ShRcXQymTmMyaXxd3mfgB6lcP2lDsAfQ8dy638JEBXg2IA9CUERNg7a4+dNer8iQC8nUPXf38wX0p53R5lxYW9f/s++tMnSYDiPTt4D7s9qYUK7I105kH3gHwVnCtAVPXOLky3V1UxPPvdWsZ76AzAwyiyRHH4XvrYa0Tyz2R7j4Dsh0JevKNu9TogKPM6RmCgt6i6NPOs72qbtaMUMASkHaUOlVffr++PAearLDMQdPpX3jEGsqsgvNO/V8bt36+zEfJIZFE78gwuXFV45D/c/TdP4AW+X3Mj3kID6IOu19iFxhd5JT1PVIFUl+bId8hr39xHs23jm+ppO5HHwhSgzXfRIxmBUROM33D/P7LZJW6cWWvV16wxbSYy5qU33cYtpUPMnklZ1AiT1bjfUr4qFFDy+iXbXLi7jeH5fkLcC1TeX+QA9P00DVv8KwD0RzhChvKxKYsJ5DqeYgXir/4iPBIR8s8A8Rjq3qHXN9gsuo8+c6BcdTCcPfrt+oZh7v63b8w5azPzcmb1v/K94kk3BW3DABCQY6j76Op+Pz1KLrdhKKMJdtdvlj9N0TBFquolQk/lrCKY0YTxX2WfXu12DBJqHJHCl409ahMVzcgIoLz4Xa96ZbwrHj4WyuqVdtY/u9KxM5op4+cIuCJQeoD8YK5fzyl9gPQgfDfzwnXWyJdFg9kYYuOtezrXL2qzUVi8CnmfSibH7qNXiIzKVLUOlGPr3d1jK4B9nBcurL7bd8avL6OeGYzFXXN0fKjrSv9+6dGFJw2pPAFDHdsX3aXEs85oysLfozGxM/Jkce+uxlr5L4q0tYH9s9b+KwH014EJwJw9zbZrTSqAneVI2dF/lBQuah/fjx9C7we86coyrICoAaJdCr/RhD23Vr17jh7zVQ+6BBLgoX3xd3I/fQdvve6lVxus3ANh1qhFCxW7n57dU88AS/Q9A0MK5OwCrTtCv6temsgggTTaMb9Qboknu7oGClSUmffNtxkp6Z21iDw/1kenPTUuZVhRVzSM5rMe9GzNVBiw1XvmgWGomGnffZ/ts0NfKZvJCwAKMFTWvCped5ZjT7N5EI6Z4Kfvqkd3+iblfsfw8zo3Sc6JVRBZAfBdYM5AaMjvLioR80z4Pf+KUknQUiVaAccUgWlF5wr9Mr5ne0waUN1VmgPQM8ru/X4A+l56pq391QA6e9e76h2vlsuIUrmX/i3Ano3NgDjez8/m/s2s7tWwYgQ9CgzMgAQE7P6ptQ4g/wZY3+nRqvCHLFP1nFsDzHvSVMhUVndLHoce8+hNdAXYK0A+MiyZ8ciDHJUl96UsJYuReU9Gv8Hd5BXFhyl5LOQ9ygZcveOYKdsPXQPl2pNyZt5MsfT9rraPCnc251XQgLz4AimYWAqMfdV1q8qSTHn+AOmDWPevxt9OqVZh7QyIVYHODIDK5l/hqZ/2nOOYo6zuan4lTzrKftbYpmQ82V6K1okZ6nx7zPDXkS/YFhoCO4bF7DxAA5+XAf6MwuuEaJRT+3+WzlVDZ2U/MSMmM4xl8tPaOQA9o/re7weg76Vn2tpfDaCPA1k8wZZOZqIAXr+9mmB5UazpTWfSxEh/VYmS7Rn9hkB3CffY30uDSCpHh8gY45cIGd1BN9B+9Y/loukw0O5/U8DH5qlAnbqrrxJ3La9XFaBna9ME6ZVxYzI4BuArCeOyvpjn3Opk3skVvs2U/Y5XsOo5Z7TIeNXXmTGUPUplECqJZXaCq6oSyvr0datKPK5rFxBknv0KAFDRILMyloESTy8GJBhQ8uvMQDnjL2UMoLzsDD74XQFnxh9VnlG8PeTCD2qu2VNr+FQbvpueycjX9473fNM7td318OOtyBIZtdKQWS/eJtchWjQuFH7Ny3I7NN5INx6thL6rPcKGKb3cpLBaVwTj7Cz0MsfT4gD0AvNsLPKDYm7jqP+Bm/qrAHQGOhUQze6ldxLFRUvnwTu2mWGYn2KJ7B565ln/5jgVSK/0uQIOfPuYIE55yDMQbm3OeNgrEQbV6IIK7VpllIXKh4hcDW7wpo9m7rvmfozs/jm+j66ea6OKu0hiiPd5I6DrvRJDuSkoQ5ECgp4XBlKv36rAsLXGwiCGhiB1p3E2bJqBVwacvPLIPCezNEHPDyrV9vds+7iGlBfJ/VU23856RtczGCiflaUVMBsp86+w94fY9z8mw3M9nSIwhmt6lbXn16q0ZoYKxUPVNneXm/Ggp2PIDLnsGpQ1+oOKERqNlExN50vkbmYk+EmDzDMvckf92Vb3k63hXMmrCSij2f5CeRV5vJUMzM4/3wf+G9v0tD8AvcLd+8ocgL6PlqWW/hEAOnrUu6AzO28Uof4i51BpHV+CFe6itxvYUEGFXXVChPHwYQnj/FDZE2w+1P0qmwHsmSRz7L7oaz3EXfRImZ5VqtOlY5Ym9Hzg/Q3IFP0KMbk6VB518nsEvHHs7Mk1K9MJa2fGj6EEwL0/5kG/ymHIoNWNaO3rMEVS/fbwvMtgW/EKqbEwcK3m6duo8F9WpuINzRTdKnhmiqYCWEh7HEPXKzR4BDIOo6Lr19X+zeaOnqJoXVUETioDRIEMlGTtMnrjb8OT7sPeX0x3/yHuqVfBxNifJNdBxGseQFQNE6+hQxZxHEOVjzMad7+3vef3+fCEwUdJ4vBt9Ogs6A78XkMGBrGpbB/5tcjWIfvu9y4rW60fkSM0HFvUiLvWUjmPJsj/So4X0VxFq7A+I6MtevdRTl+8fJXx/R2APrOy83UOQJ+n3VTNvwpAH0LGZXHH5GnoTc+86BViRM7Dq35mDEb88YXI33Aa0X396A35R1mEEPgKzbplWEitaiO6D4t1EKxnf1/1zZse3U/vzq9TvuJJzw7bDBR1xvMqy+4cRqEoGF6SdBxlaWdVI6/60AP//utptgpYp8pC4mmveiNNkeiuTeR9vMbLQv2m1xe86BhNYHzX2YMzY/kAbK4RpegxpTcD/2jUYB6cFcOHDbsCaiNPH9IwUvC7BqUoIkLxqjJqMAVdedLQwDF4y4ej3wB8lCtEpmR9W/vf2DNsnSu8l+2NHUCOys1//yNSwP6nALpPIEfH6mR/eme9qyhlxAm+ezBe4b+sq+46MPmFsmWHXEG+G/O2pwmTl0isbrTHf790P7JumTyrGr6eMxFeQsjWg82bGT9tHAegVym6p9wB6HvoWG7lrwTQqRJNvMHqbnXXsx4RKQpvv+plZ1J5Ab5UkL0tvztRXBVwDgUKFLEumEEyZd50X14B86sMywa/uiQsesC3qWjRuXu+Sr9fGtztAVeTju52MA9KgXjqnfTq7yzje6HbtMjuu7yvNSf3GxGAMw/C1UZXicwm2jGaRW1lyhybvwI3kXcznQ97lzvI0q1AaGdsmaLO1o0p8mxulfWulFm5YpTRnJ7VJAngkP3BXXEDHR/rXwiB9zRWBhgbp6JXaBCBPXuVNS+eWv+d4GxmDVidthd9puNNCpEyZuGQ2B6uyBAEe5U6rG+1b43fKySM5Kcyxvn9NP590d1FpMxEKHZkPAPoao9XZFR0Rto3Zmw9AL3CYfvLHIC+n6Zhi39lgM686ONQ/tuvKa0mlKuGv6vzZ1NelOVVV3f4VcM7jRmPIG14JDsHCYLRDji3san31D19svD35UVyXkwVnhoB722g3CaSMT8LMcG6GxSzirf86RbusGPIfHeNonBCU4A6a+KNLNF7tBHAU4pJqEiRvcfKMyOElVN39NUd9B38yAAN86R3FF+mUCtwjN7eFYAVKtwEpM5ESCh+jda1uyc65ZnyjAr7xzxdmLt50Smvuvv7H9/dfdoxhusgvsub8s7W1rejIjbUWJjH1s+V7dsuSOnQ3pdl76J3gTnzvLfG48+CL4YTZoZBZmjDeXhjyyP/Em+vB6eVvbtz7dU1Ovz95RUnd85fdMi+u8KK5n6vrchotY+u3yND9v/6f1fehGhx8SkcUOAA9B9mj78yQP9QtFwI/HMYOg/72OTu/fRvgFDr94fOIskNWSZ3owXzmlfC33ezIfPmIEhnoH0GBKhw98pTbJjp3dOhmkiuS7vIcxuFqXb7mSrPQtkjq1TjPvpLwXTAOwuHj+6mV+eooj+GQgB37j1AHfsKjBJdHq14iRBkeM/PlNdHAHg1FxXqvsKPqMx5QIOK2IqnK/KQR/0or1ykaNu3Tp+eR2c8ux/noriPqoygHX7NwJBXypkR5MW34O17PH+jEecJtL/HYrkn2+6/x951zxN+0INETyi5gPS/5pslk5v13lbWvSq/GCCP6rI309O+VL6SrmF3gxE3HasrkBloMqNcZ0+q/d8Z72rZckRUAMgjAK72WtW4WjmvlPxktPH9nhD3Ve7p1T8AvUev5dL/SAD9UejIXfXwcCJRvAZco7Mmyqd19cfC4KOcKsuL1WiAhbi/FAR3/3zVkBEmNQHl8VlD9zu7C2XlOmHfV53oLjoLZ1f30TtvpzeWZRRFwOfrMzD47XvB5fGjVco2wWSoO/bL3kTH59aYxzx7H50pMB68RJ5jZkTKrihk9Kx6I569QjyJFaUnHQfswcyDfrWX8eIs+MsMErMGiopXe+xJ8HDPeL+U4UV59LI5TY2ByFUvQ738yfhDfa/QlIGkpz2XBO4l39092+dMuEGF95IzOitQxtZ28LFL6obzVHRn66iMEtav9YX7dWZtO+vlATn+G9vxd8zD++ao3HwI8CBhaGfwxbKMD7M1ypq2+mx9MhlV5aNsDJXvr/3h+bmoV1X6wDKeh5HvPb+ztjvRKqy+ks8HoM+s5HydA9DnaTdV8x8RoA9hACC9CzKz8tlZdI3Bl5ki/pcqZcn2vtQtbTYKwfLKvAJC0VgjMOCfV0MQ7tvEzO/Xt8jTfn3/M0LhGR07YOgra+4tWD+4GTyQZ/fRZ5PGGY0wpJuB+ciotJvWzFOx2gcLmcQolyFnSRIv3LcRLSJwakodemgqnpnK/CNl/Vlrcm+aKeJeAfXKJgMJmXKvxq5AbRfMZQYp3783yrC1rtBZraOn8asde8fZA3KfnRo8fYPfTDMUGqIBePOuZ5KwrxMAAA3ASURBVLRkXtRrjNfvFhoeeen9fCqgMDIIVGmsyrGn1nxZBdCrwDxNEscG9ieGGGbGS9y/FjHBeCIyRlX3cXf/dvjhkZXiRRKT4YO3yVNsuP87fcv9fX/YwfOZEeaEuM+s2HydA9DnaTdV858BoA8h5ELbpwhRrISY5Kr2Z2dzx6Hvvo9+KT2//3/rNMZQ7kg5/Bb4VPfXPVD39PwJMP5S9iAUGcGiHbT+4C2ybq1YFr740vxcaEoWOoJPt9VGQ99Nfw3hDo33Ye/FpkvFVERDpPgw3vWKRqb0MW+bV4a6io8ykqHH3ObEAHi0H6t7tUoD9JBmCndpIV2hiP7oJer0nSmTr31Okgb675HHqavws+tFSLPqGkZzGPyTJOzzZSiIZhrgDdirY/TtVsbb4R/FO6xPto+V4aAzhm5ZMzh067XLM1DevYveLQ+DVLKD7RlvgKnuc2aMwX3rZXWbhkEFFalI5U7Fky7eRa8apnAvMwNHV1bh9HE98fsB6Ds5LG/rAPScRltL/LMA9EcoNt8AjzzpLKLX+mFA/fr2VwLr6v14m7PKhn/NA++pZxEHH4I1ufOqwDn73YDDGBexAmcbIgLlV91OOHsG2LPvbKzKO27zzsKKs/l/5bsC8urO+oZ7iCqZnIXBP3tz8RRRXuNHxhBvBTOkVOmeAXav8M0qPNk1FAbW2Z7G3zDyhc0Z+bc6X98WAiClUFfbZopftY8hh1xG78o6Z0YBDHeP1pl66MlVIhUlgREhCsDPyNqIFghOxzxMLuDb6Pbesf9e2deYPA7eJ49AcxccRPzp96zxy0+Dc+9ZH7rJ739EB6hn2K4yCOYj7/nrG7sPaArRaBioO5mrJNtraCDy5auGzaqMZWCd7eNxjld4N5tc8D27NpdGPSUJ49RcqT4TXBe62slyPHTIcAB6h1rrZb/MxusD/Gdr4R8ZoNtaIOD0fw/h+CXvOruDbmfRoiH4K2ymAHu3sy5Yp0Lchc5GYH1nKHGWJM7G2fGmzwDyl2JHPOYK9FTAUHctW+UjUK485D6h3MSm6D69huHtq+HuIeBwSueMEaUK2pSSuXqvb8jGIGID+fSRtyJUcmavRh5JVHZbvOoKV0G7VfHgvdNndS4vuibPwWH/ZfAARqSrHeNRJkd2gPHM22VAJZyDaYAI2B/m+yNpXAYYEKhVDR6e55D2HmRFBpqIf2a8th0e7JZFEG/1q+HvH/1FeUo2GGmz+eEasb2mDCVVAO/5GNsf+8xlg6/uVzUv5R1/9rC7GpI5N17nyISjIxsj4/sOTameGDzdeJU/d9CzHbH3+wHoe+mZtvaPCtClsLjvpkfPr+0AmKx/BtirhuN0oSYLYLi7osvuN9Kz4SpgYIrkoyxvfj/9ahffRbffPNhWyePUvDpAnXm2cL7+b+wzA+o7lO1Xn3i/HEH3VTgLcc8YQnxXAN2Ks4zuFVAeeZSztUBvc+RxR9DKPBkVoG5KoVcAV5UfJLm6ez/6Bg/tSsRApuhlrKK8USvKcASus/Gw79TLDcqm8vZlholsngM8XufgvU+zKw7oQcf1XjG8MMCEv432zWOu7qI3noSyvYKhusp7ntEzW3+2jgyI+/26e+9mY/RPrg1xfe9n71VXv5XvoHsFyA+oCMy7hrRszv571+i2yhNsbLu96N2oKNvHRouunoAGOGUEy+RXZd0yXrDvx4Neoea+Mgeg76PlaelQ4FDgUOBQ4FDgUOBQ4FDgUOBQ4FDgUOBQYJoCB6BPk+5UPBQ4FDgUOBQ4FDgUOBQ4FDgUOBQ4FDgUOBTYR4ED0PfR8rR0KHAocChwKHAocChwKHAocChwKHAocChwKDBNgQPQp0l3Kh4KHAocChwKHAocChwKHAocChwKHAocChwK7KPAAej7aHlaOhQ4FDgUOBQ4FDgUOBQ4FDgUOBQ4FDgUOBSYpsAB6NOkOxUPBQ4FDgUOBQ4FDgUOBQ4FDgUOBQ4FDgUOBfZR4AD0fbQ8LR0KHAocChwKHAocChwKHAocChwKHAocChwKTFPgAPRp0p2KhwKHAocChwKHAocChwKHAocChwKHAocChwL7KHAA+j5anpYOBQ4FDgUOBQ4FDgUOBQ4FDgUOBQ4FDgUOBaYpcAD6NOlOxUOBQ4FDgUOBQ4FDgUOBQ4FDgUOBQ4FDgUOBfRQ4AH0fLU9LhwKHAocChwKHAocChwKHAocChwKHAocChwLTFDgAfZp0p+KhwKHAocChwKHAocChwKHAocChwKHAocChwD4KHIC+j5anpUOBQ4FDgUOBQ4FDgUOBQ4FDgUOBQ4FDgUOBaQocgD5NulPxUOBQ4FDgUOBQ4FDgUOBQ4FDgUOBQ4FDgUGAfBQ5A30fL09KhwKHAocChwKHAocChwKHAocChwKHAocChwDQFDkCfJt2peChwKHAocChwKHAocChwKHAocChwKHAocCiwjwIHoO+j5WnpUOBQ4FDgUOBQ4FDgUOBQ4FDgUOBQ4FDgUGCaAgegT5PuVDwUOBQ4FDgUOBQ4FDgUOBQ4FDgUOBQ4FDgU2EeBA9D30fK0dChwKHAocChwKHAocChwKHAocChwKHAocCgwTYED0KdJdyoeChwKHAocChwKHAocChwKHAocChwKHAocCuyjwAHo+2h5WjoUOBQ4FDgUOBQ4FDgUOBQ4FDgUOBQ4FDgUmKbAAejTpDsVDwUOBQ4FDgUOBQ4FDgUOBQ4FDgUOBf7/9uuYBgAAAGGYf9d4IDsrAI5+I0CgExDonaUnAgQIECBAgAABAgQIECBwCwj0m86QAAECBAgQIECAAAECBAh0AgK9s/REgAABAgQIECBAgAABAgRuAYF+0xkSIECAAAECBAgQIECAAIFOQKB3lp4IECBAgAABAgQIECBAgMAtINBvOkMCBAgQIECAAAECBAgQINAJCPTO0hMBAgQIECBAgAABAgQIELgFBPpNZ0iAAAECBAgQIECAAAECBDoBgd5ZeiJAgAABAgQIECBAgAABAreAQL/pDAkQIECAAAECBAgQIECAQCcg0DtLTwQIECBAgAABAgQIECBA4BYQ6DedIQECBAgQIECAAAECBAgQ6AQEemfpiQABAgQIECBAgAABAgQI3AIC/aYzJECAAAECBAgQIECAAAECnYBA7yw9ESBAgAABAgQIECBAgACBW0Cg33SGBAgQIECAAAECBAgQIECgExDonaUnAgQIECBAgAABAgQIECBwCwj0m86QAAECBAgQIECAAAECBAh0AgK9s/REgAABAgQIECBAgAABAgRuAYF+0xkSIECAAAECBAgQIECAAIFOQKB3lp4IECBAgAABAgQIECBAgMAtINBvOkMCBAgQIECAAAECBAgQINAJCPTO0hMBAgQIECBAgAABAgQIELgFBPpNZ0iAAAECBAgQIECAAAECBDoBgd5ZeiJAgAABAgQIECBAgAABAreAQL/pDAkQIECAAAECBAgQIECAQCcg0DtLTwQIECBAgAABAgQIECBA4BYQ6DedIQECBAgQIECAAAECBAgQ6AQEemfpiQABAgQIECBAgAABAgQI3AIC/aYzJECAAAECBAgQIECAAAECnYBA7yw9ESBAgAABAgQIECBAgACBW0Cg33SGBAgQIECAAAECBAgQIECgExDonaUnAgQIECBAgAABAgQIECBwCwj0m86QAAECBAgQIECAAAECBAh0AgK9s/REgAABAgQIECBAgAABAgRuAYF+0xkSIECAAAECBAgQIECAAIFOQKB3lp4IECBAgAABAgQIECBAgMAtINBvOkMCBAgQIECAAAECBAgQINAJCPTO0hMBAgQIECBAgAABAgQIELgFBPpNZ0iAAAECBAgQIECAAAECBDoBgd5ZeiJAgAABAgQIECBAgAABAreAQL/pDAkQIECAAAECBAgQIECAQCcg0DtLTwQIECBAgAABAgQIECBA4BYQ6DedIQECBAgQIECAAAECBAgQ6AQEemfpiQABAgQIECBAgAABAgQI3AIC/aYzJECAAAECBAgQIECAAAECnYBA7yw9ESBAgAABAgQIECBAgACBW0Cg33SGBAgQIECAAAECBAgQIECgExDonaUnAgQIECBAgAABAgQIECBwCwj0m86QAAECBAgQIECAAAECBAh0AgK9s/REgAABAgQIECBAgAABAgRuAYF+0xkSIECAAAECBAgQIECAAIFOQKB3lp4IECBAgAABAgQIECBAgMAtINBvOkMCBAgQIECAAAECBAgQINAJCPTO0hMBAgQIECBAgAABAgQIELgFBPpNZ0iAAAECBAgQIECAAAECBDoBgd5ZeiJAgAABAgQIECBAgAABAreAQL/pDAkQIECAAAECBAgQIECAQCcg0DtLTwQIECBAgAABAgQIECBA4BYQ6DedIQECBAgQIECAAAECBAgQ6AQEemfpiQABAgQIECBAgAABAgQI3AIC/aYzJECAAAECBAgQIECAAAECnYBA7yw9ESBAgAABAgQIECBAgACBW0Cg33SGBAgQIECAAAECBAgQIECgExDonaUnAgQIECBAgAABAgQIECBwCwj0m86QAAECBAgQIECAAAECBAh0AgK9s/REgAABAgQIECBAgAABAgRuAYF+0xkSIECAAAECBAgQIECAAIFOQKB3lp4IECBAgAABAgQIECBAgMAtINBvOkMCBAgQIECAAAECBAgQINAJDNXi2U7sD/raAAAAAElFTkSuQmCC\",\n      \"created\": 1689370549025,\n      \"lastRetrieved\": 1689638386800\n    },\n    \"04355948b0b713cca14d736c37b9bdc03c6e40f7\": {\n      \"mimeType\": \"image/png\",\n      \"id\": \"04355948b0b713cca14d736c37b9bdc03c6e40f7\",\n      \"dataURL\": \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAYAAAD0eNT6AAAAAXNSR0IArs4c6QAAIABJREFUeF7tvQm4tmPZ9/17jW/5KjTIhlLIEJUUrykkEpmKJImeRAnlUSEylKRBoiLRE48kqSgRShTqQZLMoRQ+NKD61Gv+tn+OxbqXtdZ1nud1DsfwP7bt2tbiPoZ9/+3Hus79PIZ9/1+4mIAJpEBgPmAhYOEpP/X/Jj4LAKo33Wd+YN7wb5N/l+4PAg8BD0zzu/5t6ud+4N4pn3vCf0/8VBsXEzCBiAn8r4hls2gmUAKBuYBFgBcALwSWCL/r/01+4D89MRj/nOIQ3A38EbgN+EP4Xf/v0cT0srgmkA0BOwDZmNKKRExAD3I94PXRA14P+on/Xjy8mUcsfmeiadXh9uAMyDmQYyAHQb/ro1UGFxMwgY4I2AHoCKy7LZKAltaXBZYPnxWA5YDnFEljfKX/AtwAXAdcHz43hq2K8Xt3DyZQOAE7AIVPAKvfiID+bvTmrgf9xENeP18EzN2oRzeqSuAR4PfBKZjsHGgl4bGqnbieCZgA2AHwLDCB0QQWBF4NrAq8Kjz0nzG6mWv0SOAfwSn4JXAZcDlwX4/jeygTSI6AHYDkTGaBeyCgPXo97PXRg38Z7Cz3gL3VIbQacFNwBOQQ6KMzBi4mYAKBgB0AT4XSCcwDvHTSw14P/eeVDiVT/f80aXVADsG1wMOZ6mq1TGAkATsAIxG5QoYEdBJ/fWA9YE0gtSt2GZpkEJV0VfES4ALg/HADYRBBPKgJDEHADsAQ1D1m3wQUGOf/AK8Nn6X7FsDjJUHgZuAn4fM/IQBSEoJbSBNoQsAOQBNqbpMCAb3lTzzw/ZafgsXiknFidWDCIVB8AhcTyIqAHYCszFm0MprLOrD3hvDg18E9FxNoi4AOFMoZ+GE4WOgrh22RdT+DEbADMBh6D9wSgVcCmwGbAou21Ke7MYHZCNwJnAl8H/iVUZlAqgTsAKRqubLlXgnYPDz0tdTvYgJDEdDWgJyB7wFXDyWExzWBJgTsADSh5jZDEFDUPT309ba/5BACeEwTGEHg1rAqIGdAoYtdTCBqAnYAojZP8cIpYc7W4cHvk/vFT4ekAOhGgRyB00Jio6SEt7BlELADUIadU9JSOetfD7wdWNsR+FIynWWdhoAOC14EfB04F1AGRBcTiIKAHYAozGAhgBcDbwPe4ux5ng+ZElB2w28B3wB+l6mOVishAnYAEjJWhqIqfe4mwHbA6hnqZ5VMYCYCvwBOBs5yemNPkqEI2AEYinzZ4y4bHvpbAcq052ICpRJQxsJvB2fgxlIhWO9hCNgBGIZ7iaPOBWwIvCck3imRgXU2gdkIKEHRl4HzgEeNygS6JmAHoGvC7l/L/NrX3yXs85uICZjA7AR0PuDYcF7gAcMyga4I2AHoiqz7XQjYEXinD/V5MphAIwI6NPg14ATg3kY9uJEJzELADoCnR9sEXgjsDLwVeFrbnbs/EyiQwL+AbwJfAf5QoP5WuSMCdgA6AltgtyuH/f2NgbkL1N8qm0DXBB4Bzg7nBK7sejD3nz8BOwD527hrDZVq9z99ja9rzO7fBOYgoGuEnwMuMRcTaErADkBTcm63KvAhQA6AiwmYwDAE5AB8OqQoHkYCj5osATsAyZpuMMG11P9hYJ3BJPDAJmACUwlcAHwG+LXRmEBVAnYAqpJyvRXDG/8GRmECJhAtAcUQ0IrAddFKaMGiIWAHIBpTRCvIcsAHgTc4MU+0NrJgJjCZgBIQ/QD4LHCT0ZjATATsAHhuzERgqfDg38wPfk8SE0iSgKIJnhEcgVuT1MBCd0rADkCneJPsXAF8dLhve1/nS9J+FtoEphJ4GDgxOAJ/Mx4TmCBgB8BzYYLAPMAO4a3/WcZiAiaQHQFFE9RBwZMAxRRwKZyAHYDCJ0BQXyf6DwZeYhwmYALZE7gBOBC4KHtNreCsBOwAlD1BXgQcBPhkf9nzwNqXSeDc4Pj7fECZ9scOQJmGfwbwAWAnYN4yEVhrEzAB4CHgOOBI4B8mUhYBOwBl2XsuYBtgX2foK8vw1tYERhD4M3AYcCqg2wMuBRCwA1CAkYOKKwCHAy8vR2VragImUJPAVcBeDiRUk1qi1e0AJGq4GmLPD+wJ7AropL+LCZiACcxGQNcGjwaOAB4wqnwJ2AHI17bSbLVw91dBfVxMwARMoA6BW8K14EvrNHLddAjYAUjHVnUk1SG/jwDvcBS/Othc1wRMYAoBhRX+b+BQHxLMb27YAcjPprrSp8M8i+anmjUyARMYiMCdwD7AjwYa38N2QMAOQAdQB+ryOcDHgc0HGt/DmoAJ5E/ge8BHgb/kr2r+GtoByMPGW4WAHorj72ICJmACXRJQSGFFEvx2l4O47+4J2AHonnGXIywYDvlt3OUg7tsETMAEpiFwdjgkeJ/ppEnADkCadpPUawFHAc9PVwVLbgImkDiBu4A9gIsT16NI8e0ApGd2he7dG3ivT/inZzxLbAIZEtBNgWOAT4XQwhmqmKdKdgDSsqvu8ytAx0ppiW1pTcAECiBwdQg4pvgBLgkQsAOQgJGCiG8PB/2elo7IltQETKAwAv8KBwS/XpjeSaprByB+s+lkv2L4bxS/qJbQBEzABP5N4JyQU0A3BlwiJWAHIFLDBLF00O8LwCJxi2npTMAETOApBO4GdvcBwXhnhh2AOG0ju/xn+NhGcdpoaKmUslXXr/SGpc89k37q/yuJy4OTfk78rvzvk/+/9JgPUNIoHTCd+F0/J/+uf9e104UBrUpN/NTv+v9KNe1iAlMJ6IDg58JHv7tERMAPl4iMEUR5JvBF4HXxiWaJeiKgh/ftwB/D57bwU+FYJx70fwNi+ULV98izJjkGCkP9AmCJ8FO/Lx6cjJ4QepjICPwY2A34e2RyFS2OHYC4zL888FVgybjEsjQdENCb+M3AtcDvpjzs/xTRw70t1fVd87wpTsGLgZcCS4fVh7bGcj9xErgVeBdwfZzilSeVHYB4bL5liOrnU/7x2KQtSbQXqi+968JHv+vhLyfA5fGtBzkBcoBXCB/97rMv+c0O3RL4IHB6fqqlp5EdgOFtNg9wALDT8KJYghYIaD/+l4ByqP8mPPC1bO9Sn4DOGcgheBmwGvCqsM1Qvye3iI3A8cDHgIdjE6wkeewADGttLYkeG77chpXEozcloGXNy4HLwkdv9rHszTfVKdZ2+r7SSsGq4fNqb5fFaqpKcslJ3gXQlpfLAATsAAwAPQypt5njvMw5nAEajqzl+0smPfD95dUQZEvN5ERPOARrhm2Elrp2Nz0Q0PbYu8OqWQ/DeYjJBOwADDMfdgjLX9r7dImbgE4tXwT8BLgAUPITl3gJKDnWesBrgbUB3apxiZuAzsJoG/TEuMXMTzo7AP3aVHellUdbHq9LnAS0fK+T+XrY66F/hfcp4zRUBal0vmaV4AzIKdCNA3/nVQA3UBWtiB4MKMaFSw8E/MfQA+QwhE73f8khffsDXmMkfeHoLf+M8OD3sn4NeAlV1XaBHIEtwuqAgxfFZzyFEH4foNsCLh0TsAPQMeDQ/XOBE4CV+xnOo1QkcCNwGvAdQHuRLuUQ0BXDNwNbA8uWo3YSml4J7Aj8OQlpExbSDkD3xlsGUGYsRUVzGZ7AX8Obvh78uqbnYgK6ZihHQCsDzzaOKAgo+qUyoN4UhTSZCmEHoFvD6lSyIvv5IFK3nEf1rkNG54W3fe3tOwDPKGJl/rsO5WqLQM7Aho5OOPgk0AFcRQ7UrRuXDgjYAegAauhSXyKf9ZdId4Ar9Pyr8ND/XkicU6GJq5jAvwkowdHmwRl4pZkMRkDOuiIHasXOpWUCdgBaBhq62yvkwu6md/c6G4E7wp6+vjBuMSoTaIHAUsER0JmBxVroz13UJ3A4oI9LiwTsALQIE9C1I01Svf279EfgfuCs8Jbwc0fi6w98YSPp+3KN8Pe9CbBAYfoPra6cer1cOXxwS5awA9ASyJA7XfdYN2ivS/c0gsBvgWOAM4F/mpYJ9Ejg6cCmwHuBl/Q4bulD/SjEUXmwdBBt6G8HoA2KoC8DXfNbq53u3MsIAtcARwJn+23fc2VgAvoO3Rh4P7DiwLKUMvzF4Zqgnf4xLW4HYEyA4YS/rvkptr9LtwSUZU8P/vO7Hca9m0AjAusHR8DfBY3w1Wqk7wJdE9RNAZeGBOwANAQXmild6SnASuN149YjCMjj14Pf14E8VVIgoOu/WhHwimC31roa2BZwuu2GnO0ANAQXsvid6v2/5gArtNR+31EhHn+F6q5iAlERUB6CPXwuqFOb6BzQNo7k2YyxHYBm3BYHvuVc5M3gjWiluPw60a8Hv5LyuJhA6gSUhEiOgG4OOP9A+9a8FXgLcHv7Xefdox2A+vZ9cbhutmj9pm4xCwFd7Tkd+AJws0mZQIYElgZ2B7YMV4YzVHEwle4M1zN/N5gECQ5sB6Ce0ZYHvgkouY9LOwQU6UtbKV8E/thOl+7FBKIm8AJgt7B0rfDDLu0QUPKgtwLXt9Nd/r3YAahuYz38lTVOIUJdxiegdJ8nA0cDd43fnXswgeQIPB/YFdgOULpwl/EJ3BeyPNoJqMDSDkAFSICW/bU87Tf/arxG1VLgngP94B+Fyf9eCAE5AgeHwEKFqNypmloJ0DaLtwNGYLYDMHoe6sCfksl4z380q1E1dFjnI8CFoyr6302gQALrAof6cHErlteZACVz8sHAWXDaAZh9ri0S3vyXbGVKltvJA2GPXwf8HMKz3HlgzUcTmC8cFNQZgflHV3eNWQjohUMrAXeb0vQE7ADMPDMU5Oe7vuc/9p/OBcB+gP4YXUzABKoR0EvHJ4D1qlV3rRkIKE7AmxwsyA5Anb+QZ4arfo7wV4fanHW1BHdAuNPfvBe3NIGyCSh2wMe8BTnWJFDEQGVoddjgKRi9AvDUeaXEPrrq53jezf7mdJ//+JAWWWl6XUzABMYjoLTDSoO7k+MHNAap3AG6IugEQpMQ2gGYcz5p/02JfRzDu9nf2WXAPsANzZq7lQmYwCwElgMOA1Y1pUYElFNECYR8DingswPw5DyaB/iq43Y3+sP6K3BICI/8WKMe3MgETKAKAX1nK+zt/sCzqzRwnTkIKL/IuwCtVBZf7AA8OQWUbU77RC7VCShuv4L56OrS36o3c00TMIExCTwrXKlVECHnF6gH87SQrbFeqwxr2wF43KjaX9PHpTqBa4C9gSurN3FNEzCBlgmsDHwKWLHlfnPv7vBwTil3PWfVzw7A42/9evt3qUZAsfv1hXMs8Ei1Jq5lAibQIYG5gV2CQ+7cAtVBvz/c9qreIrOapTsAawLfAPxHU21i3wG8B7iiWnXXMgET6JHAKsCXgcV6HDPlofQy8zbgkpSVGEf2kh2AZQDFpNedf5fRBHR4Rh6zkm24mIAJxElAycq0orlBnOJFJ5ViA2wK3BSdZD0IVKoDoKQ+PwCW6IFx6kPIS/5kWPL3Cf/UrWn5SyCg73VtCezr1c1K5r4NeCOgJEJFlRIdAKXd/DagwzMusxPwkr9niAmkS8BbAtVtp8PMWwFKU15MKc0B0HUZRanbqBgLN1fUS/7N2bmlCcRCwFsC1S1xToi2qOvNRZTSHADl3H53EZZtrqSX/Juzc0sTiJGAtwSqW+U44MDq1dOuWZIDsEPYy07bYt1K7yX/bvm6dxMYkoC3BKrR19mJE6tVTbtWKQ6AEvt8xwdiZp2sXvJP+2/Z0ptAFQLeEhhNSaugbwaUQCjrUoID8DzgXGCRrC3ZXDkv+Tdn55YmkCIBbwmMttrdwOuBP42umm6N3B0AJfhR3OfV0jVRp5J7yb9TvO7cBKIm4C2B2c1zacgPk23ioNwdgI+FU51R/xUOJJyX/AcC72FNICIC3hKY3Ri6NXZARPZqVZScHYAtgS+1Siufzo4K8fwd2Ccfm1oTE2hKQM8BJfbao2kHmbd7H3B6jjrm6gAsHyL9KeiPy5ME9MCXN/tVQzEBEzCBKQTeBWjVNNfnQlODKziQIgVe37SDWNvlaGjF9ldAhyVjhT6QXDrsp1j+Zww0voc1AROIn8AWIZeAE6TNaatbQwA55Q7IpuTmAEgf3d98XTYWakeR+8NZiJ+20517MQETyJjAOiFi6gIZ69hEtR8DiieTzdZpbg7AXoA+Lk8SuAd4O/BrQzEBEzCBigReAXwdWLhi/VKqHQ7ok0XJyQFYCzjV+1dzzMvbgW2BW7KYrVbCBEygTwJLAacAi/c5aORj6e1/G+DiyOWsJF4uDsBCwE8c7GcOm98QHv4KaOFiAiZgAk0IKICanIDlmjTOtI2+U18L3Ju6frk4AP/lDH9zTMXLge2BrA6spP7HZvlNIFECOlh9EvDqROXvQmwdNP+PLjrus88cHADtb3+6T2iRj6UAP7sA/zdyOS2eCZhAOgT+N3AssEE6Incu6YfDOYnOB+pqgNQdAO1RnQf4vv/jM0RnID4IPNLVhHG/JmACxRKYG/hs2AMvFsIkxRUfYMOUz1il7ADonuoPgJU8E/9NQFEPP2EWJmACJtAxgf0ARcdzgatDkCDFWUmupOwA7A/smhzx9gXWqdSDga+037V7NAETMIFpCewMHOhbV/9mczRwSIrzJFUHwFf+Hp9t8jr3BL6b4uSzzCZgAkkTeBNwBFB61MBkrwam6AAoe5Wu/D0/6T+d8YXXw1+xuxWdysUETMAEhiCgqKvKLVK6E3BXuBp43xBGaDpmig6A0jNu3FThTNrJ49zdb/6ZWNNqmEDaBLQS8AVvB3B2aunnU3MAtgKUyrb0cpD3/EufAtbfBKIioDMB+l4qvSil8rdTgZCSA/AcQMlsFPWv5OLT/iVb37qbQLwEfDvg8eiASqb0l3jN9KRkKTkAxwCbpwC1Qxl1z1+H/lxMwARMIEYCOhSoWPkll+8B700BQCoOgKJPKc1vyUUR/hR60kF+Sp4F1t0E4iagYEEKzV56xEClDdZ3dtQlBQfgGcCFwKJRk+xWOMX2l1ft8L7dcnbvJmAC4xNQ2GCtVpacO+BOYF3gH+Pj7K6HFByATwLypkotyuq3hRP7lGp+620CSRJQAqEzCs8iqFXrfWO2XuwOwGrhqlvscnZl49uBTQGn9O2KsPs1ARPoioBSCZ8JLN7VAJH3q+vauiJ5aaxyxvxgnT8EuVHCnxLLPeHQ4y0lKm+dTcAEsiCg728dils4C23qK6HvbwVLeqB+0+5bxOwA7APoTmWJ5X5ga+DXJSpvnU3ABLIi8ArgNGCBrLSqroxi1xxWvXp/NWN1AFYAzgHm6Q9FNCMpxO87QsyDaISyICZgAiYwBgHdjf/vQkMGPwxsBFw3Br9OmsboAMwFnAW8vBON4+5Ue0ZKs6nDMy4mYAImkBMBHWZWILMYnztdc74K2AR4tOuB6vQfoyG2BQ6vo0RGdT8aEmtkpJJVMQETMIEnCCiB2ccL5bEXcEpMusfmAOjO/yWAwv6WVqLdJyrNENbXBEygUwKlnu9SeOA1Y4oNEJsDoDfgJEIotvznoYhROwLaAnAxARMwgZwJ6LlzQqHRAhXSPpoVkJgcgBeFiH+l5ZW+I/whJJVHOudvJ+tmAibQOYEFQ6jcxTofKa4BdMhbEQJ/H4NYMTkAippUWvxoTQYFirgihslgGaIi8Clg+6gkelwYnWTWvWYXExiXwCoh0FtpL31a8Y0ium0sDoCuiER1OGLcmV2xvZaCtCTkYgJTCdgB8JwogYC2fLX1W1rRYXeltx+0xOAA6K7/j4GXDEqi/8G9798/85RGtAOQkrUsa1MCpZ4H+G1YSVOMgMFKDA5AiddCvO8/2JRPZmA7AMmYyoKOSaDU8wCDX/se2gFYCPg58KwxJ1BKzb3vn5K1hpPVDsBw7D1y/wRKPA/wN2AN4N7+cT8+4tAOwKHh+ttQ+g8xrvf9h6Ce3ph2ANKzmSUej0CJ5wF0HfIj42Fr3npIB0BZoi4E5m4ufnItve+fnMkGE9gOwGDoPfBABEo8D/BIuBY4SNbXIR0AnX7ffKCJNsSw3vcfgnq6Y9oBSNd2lrw5gRLPAyhd8iAB8IZyAJYDzo9gC6L5NK3X0vv+9Xi5NtgB8CwolUBp5wEUAXZ94Ia+DT6UA3A8sHHfyg44nvf9B4Sf6NB2ABI1nMVuhUBp5wHOBnZqhVyNToZwAFYEzi3o7d/7/jUmpKs+QcAOgCdDyQRKOw+gVYDXA9f0afQhHICSQv5637/P2ZzXWHYA8rKntalPoLTzAL2HCO7bAVgZOKv+PEiyhff9kzRbNELbAYjGFBZkQAKlnQfYBLiyL959OwCK96+4/yWUQ4CjS1DUOnZCwA5AJ1jdaYIEdgX2T1DuJiIrP4DyBPRS+nQAVgXO6EWr4QfRPs4bAN3xdDGBJgTsADSh5jY5ElCsmB8COj9WQtkCuKwPRft0AE4D1uxDqYHHeBTYtM9lnIH19fDdELAD0A1X95omAW0fnwnMlab4taS+BNi6VouGlftyAPTglwNQQjkJ2LsERa1jpwTsAHSK150nSCDWv4kuUMoBkCPQaenLAfgOsHqnmsTR+V+BtQAleXAxgXEIxPpld11IYzqObm5rAk0IKGncxcCzmzROrM0vgDd3LXMfDkBJJ//3BE7t2mjuvwgCdgCKMLOVrElgG+CImm1Srd75jYA+HIBjw554qkaoKrcObWwJKKCDiwmMS8AOwLgE3T5HAnpmnQ7oUHnuRWcedulSya4dgBeGJZvcM/49DGw4RCznLieH+x6UgB2AQfF78IgJKJfMecA8EcvYhmi6RaYt5T+00dl0fXTtAHwCeGdXwkfU75eBj0Ukj0VJn4AdgPRtaA26I3AA8J7uuo+m568B+3UlTZcOwELAL4GndSV8JP3eCbwGuD8SeSxGHgTsAORhR2vRDYEFgJ8Bi3bTfTS9/gt4FXBvFxJ16QDoQNyHuhA6sj7fXVB448jQZy2OHYCszWvlWiCgQ3LHtdBP7F18pquDj105APMDlwPPiZ3smPJdAGw3Zh9ubgLTEbAD4HlhAqMJnAysN7pa0jX+ArwaeKBtLbpyALYH9AWWc5ExNPFuzVlJ6zYYATsAg6H3wAkRWBLQi5heOnMuCi6nIHOtli4cAIVq1N7Mi1uVNL7ODgf0cTGBLgjYAeiCqvvMkcBegD45l9+Fs2YKNd9a6cIB2Aj4r9YkjLMjvfWvCzwYp3iWKgMCdgAyMKJV6IXAfMCFgFYDci7/AZzTpoJdOADK+Jd7kIa3hQnXpi3clwlMJmAHwPPBBKoT0AvZN6pXT7Kmgs0pU2BrpW0HYNmwH9OagBF21Hl0pgh1tkj9E7AD0D9zj5g2gRKizurc2Y1tmaltB0DBcHZqS7gI+9GdTGU2vCtC2SxSXgTsAORlT2vTPYHnhwx6OceeOR5QEKRWSpsOgE5hXgks2IpkcXbSKvw4VbRUkRCwAxCJISxGUgRyfwm9D1CCvVauBLbpALwJ+GJSU6WesA8Bq/ntvx40125MwA5AY3RuWDABrQJcCsybMYPdgO+2oV+bDsB3gNXbECrSPr4OfDhS2SxWfgTsAORnU2vUD4FPA2/vZ6hBRvkF8OY2Rm7LAdCd/4vbECjSPpTtT1mZ/hipfBYrPwJ2APKzqTXqh8ALwvMo52yBeh4pNsBYpS0HYH9g17EkibvxacD74xbR0mVGwA5AZga1Or0SOBLYutcR+x3saOCQcYdswwHQXssVGcf9V+Ql3TG9eVzYbm8CNQjYAagBy1VNYAqBpUOsFkWmzbEoP8AqgM6mNS5tOABvBL7SWIL4G/ref/w2ylFCOwA5WtU69Ukg97gAOwM/GAdoGw7AN0OM4nHkiLntBsC1MQto2bIkYAcgS7NaqR4JvBT4UY/j9T2Ucu68dZxBx3UAdNhCJxLH7WccHbpsq8mzQ5cDuG8TmIGAHQBPDRMYn8CJgF7iciyPhZt3jQ+nj/vgzj0L06bhfEOOk8c6xU3ADkDc9rF0aRDQPrm2cXMtY2WlHdcB0BKEDlvkWHSt8S05KmadkiBgByAJM1nIBAh8K1zjTkDU2iLqcPprarcKDcZxAJYHzm86cALtdIXkkgTktIh5ErADkKddrVX/BJS/RVe5cy3rA9c3UW4cB2AfYI8mgybQ5pfAZgnIaRHzJWAHIF/bWrP+CXwfeFX/w/Yy4lHAYU1GGscB+DmwZJNBE2izfearGwmYoHgR7QAUPwUMoEUCeks+qcX+YurqVmCNJgI1dQBWAs5tMmACba4BNkxATouYNwE7AHnb19r1T+A8YMX+h+1lxNcDV9cdqakDkHPo33cDZ9UF6fom0DIBOwAtA3V3xRPYBDguUwqNQgM3dQCUbnGJDEH+FlgP0P1KFxMYkoAdgCHpe+wcCeh5dwHwkgyVuy2kq6+lWhMH4JXjhh+sJWG/lfcETu13SI9mAtMSsAPgiWEC7RPYBjii/W6j6FFh+X9VR5ImDsBBgGIQ51buB14O/DM3xaxPkgTsACRpNgsdOYGnA1cBC0QuZxPxlJNHz+fKpa4DoPq6Irdo5RHSqahgER9IR1xLmjkBOwCZG9jqDUbg85kGebszXHWsvIVd1wFYFThjMLN1O7AD/3TL173XI2AHoB4v1zaBqgRyDgy0BXBZVRB1HYADgV2qdp5QvTsAOTeVPaeEdLOoaRKwA5Cm3Sx1/AT03NNDcrH4Ra0toVIgH1y1VV0H4KfAMlU7T6he40hKCeloUdMiYAcgLXtZ2rQI5BrJ9iZgnaqmqOMA6Nqfrv/lWNYGbslRMeuULAE7AMmazoInQGAp4KIE5Gwi4mqArgWOLHUcgB2AT47sMb0Kujah6xMuJhATATsAMVnDsuRI4AeArrXnVvYFTqyiVB0HQB1uUKXTxOpUhpWYXhY3bQJ2ANK2n6WPn0CuL7U/AqTbyFLVAZgPuA7QHcqcykPh7v99OSllXbIgYAcgCzNaiYgJLBhiAswbsYxNRFMsmxWAB0c1ruoAvAb45qjOEvx3xfxX7H8zaBMLAAAgAElEQVQXE4iNgB2A2CxieXIkcDywcYaKvRX42Si9qjoAuUb/2xFQhigXE4iNgB2A2CxieXIkoMyvJ2SoWKWogFUdAHkSS2cG6a/hAIi2AVxMIDYCdgBis4jlyZGAlv91EPzZmSl3M6CV+1lLFQcg1+t/XwU+OgqQ/90EBiJgB2Ag8B62OAIfB96VodYjrwNWcQC0TH5ohnA2An6ToV5WKQ8CdgDysKO1iJ/Ay4Bz4heztoQfGbW9UcUByPH6343AerVxuoEJ9EfADkB/rD2SCVwALJsZhpHXAUc5APMAN2R4/e8Q4OjMjG118iJgByAve1qbuAnsCuwft4i1pdN1wOWAh2dqOcoBeDnww9rDxt3gUWAV4O64xbR0hROwA1D4BLD6vRJYBLgCmKvXUbsf7A0h1sG0I41yAHRHvnJmoe51aWUEJTTatpWe3IkJdEfADkB3bN2zCUxH4JQ6iXQSQagMvsc1XQHQXcLc4uTvCZyaiPEsZrkE7ACUa3trPgyBbYAjhhm6s1GV72Dnpg7Ar4HndSZa/x0/BqwM/Kn/oT2iCdQiYAegFi5XNoGxCehZdyUwamV87IF67EDPulc0cQBeCPyiR0H7GOoaQJGfXEwgdgJ2AGK3kOXLkYAiw66YmWKrA3+YTqfZPJ2tgSMzA/GFTFMaZ2YmqwPYAfA0MIH+CSg77O79D9vpiO8HTqvrAHwG2K5TsfrvfEvg0v6H9YgmUJuAHYDayNzABMYmoOh5p4/dS1wdnAx8qK4DcCHwkrj0GEuav4elnRnvRI7VuxubQLsE7AC0y9O9mUAVAop9o63iZ1apnEid3wLr1nEAlCf52swOQzj1byKz1WL+m4AdAE8EExiGgK7NbTLM0J2MqsPvLwXum9r7TGcANgAUAjinshege54uJpACATsAKVjJMuZIQHFiDs9MsR0AhQaeo8zkAOwHvC8zAK8E7spMJ6uTLwE7APna1prFTeD5IUVw3FLWk+5LwCeqOgA6BKHDELmU64H1c1HGehRBwA5AEWa2kpESOB9YPlLZmoilw+86BD9yBUCrAkoA9Iwmo0Ta5njggEhls1gmMB0BOwCeFyYwHIGPATsNN3zrI/8jJAbSeYAnynRbAEtkeFVOoRAVEtHFBFIhYAcgFUtZzhwJKAS+QuHnVLSqf9soB0CR8k7ISesQCtHhfzMzaubq2AHI3MBWL2oCCgusUPg5lR0BRTqcdQXgA8CHM9L6VmCNjPSxKmUQsANQhp2tZbwEfg4sGa94tSX7NPD5UQ7Al4HNancdbwOFQFQoRBcTSImAHYCUrGVZcySgUPgKiZ9L+T7wnlEOwM+ApXPROIRAVChEFxNIiYAdgJSsZVlzJKBQ+AqJn0u5GXjNbA7A/IAqzZ2LxsA6wE0Z6WNVyiBgB6AMO1vLeAksA/w0XvFqS/ZIeLl/YKLl1FsALwPOqd1tvA3uDfH/57j6EK+4lswEniBgB8CTwQSGJaDno/ICLDSsGK2OvhHwm5kcgG2AI1odbtjOFPpQIRBdTCA1AnYAUrOY5c2RgELiKzR+LmVP4NSZHICDAN2Zz6UcAhydizLWoygCdgCKMreVjZTArsD+kcrWRCzFNtBz/t9l6hbAt4C1mvQaaZu3ABdHKpvFMoHZCNgB8PwwgeEJ6Hmo52IuRc9DPRendQC0N/CcXDQN+//3ZKSPVSmHgB2AcmxtTeMlsHA4BxCvhPUk+wugs35PcQB00OHaen1FXftuYOWoJbRwJjAzATsAnh0mEAeBK4FF4hClFSleCuiA/BxbAC8HfthK93F0ciHwtjhEsRQmUJuAHYDayNzABDoh8A1g3U56HqbTNwBXTXUANgWOHUaeTkbV4T8dAnQxgRQJ2AFI0WqWOUcCOgSow4C5lF2AM6c6ALmddtwN+G4uFrMexRGwA1Ccya1wpATeBHwxUtmaiPXE7bjJtwBi/cJpoqDarA9c37Sx25nAwARi/Xu8DnjdwGw8vAn0SWB54Pw+B+x4rJOAvaeuAJwSwuZ2PHYv3T8UQh7qp4sJpEjADkCKVrPMORKYN4TI188cisIbbzvVAbgEeFEO2oU3f60AuJhAqgTsAKRqOcudIwGtAGglIIfye2DNyQ7AXID+Zy4ezreBPXKwlHUoloAdgGJNb8UjJHAUsFWEcjURSSvjetl/dOIMwKLAFU16irTNp4HPRyqbxTKBKgTsAFSh5Dom0A+BDwAf7meoXkZZBbhzwgFYDTi9l2H7GcQ3APrh7FG6I2AHoDu27tkE6hLI7SbAlsClEw6AYgPn9Ma8GfDLuhZ2fROIiIAdgIiMYVGKJ/Aq4PsZUdCKxrcmHIC9AH1yKQoBrFDALiaQKgE7AKlaznLnSEChgBUSOJdyOHD4hANwJLB1Jpo9ALwYeCwTfaxGmQTsAJRpd2sdJwE9K38HzB+neLWlOg14/4QD8E3gNbW7iLPBLcDacYpmqUygMgE7AJVRuaIJ9ELgImCpXkbqfpCfAW+dcADOBVbqfsxeRrgA2K6XkTyICXRHwA5Ad2zdswk0IXAysF6ThhG2uRp4/YQDcDmwWIRCNhHpRGDfJg3dxgQiImAHICJjWBQTAD4J7JAJiTuAV084ADcDT89EsScSHWSij9Uok4AdgDLtbq3jJZBTwrx/Kly+HID5gFvjZV5bsp2BH9Ru5QYmEBcBOwBx2cPSmMAbga9khGFJOQC5XW/YNLOohhnNN6tSg4AdgBqwXNUEeiCg6Hln9jBOX0OsLAcgt1SHSnKgvAYuJpAyATsAKVvPsudIQPHzlTQvl7K+HIA1ACXPyaWsANyXizLWo1gCdgCKNb0Vj5TAgsB1kcrWRKyt5ADktK/xKLCEgwA1mQtuExkBOwCRGcTiFE9Az8vbAGXPzaHsLIW2B/Rlk0O5B1gxB0WsQ/EE7AAUPwUMIEIC1wALRyhXE5H2lgOwB7BPk9YRtnEUwAiNYpEaEbAD0AibG5lApwRyigZ4mByAA4FdOkXWX+fKAKhMgC4mkDoBOwCpW9Dy50hAGQGVGTCHcqwcAKUBVjrgHMp5wI45KGIdiidgB6D4KWAAERI4AdgwQrmaiPTvdMDHAZs0aR1hm1OBPSOUyyKZQF0CdgDqEnN9E+iewBHANt0P08sIZ8kBUOz8DXoZrvtBjgE+3v0wHsEEOidgB6BzxB7ABGoT+Cjw3tqt4mzwIzkApwDrxClfbamUrOELtVu5gQnER8AOQHw2sUQmsHtGyeZ+KgfgO8Dqmdj1oMxiNWdiFqvRgIAdgAbQ3MQEOiagXDN6zuRQfiEHQLGNFeM4h/IRQIc0XEwgdQJ2AFK3oOXPkYAOmR+aiWJXyAE4F1gpE4X2ClsamahjNQomYAegYONb9WgJbAscHq109QS7Wg7ABcCy9dpFW1v7M9rScDGB1AnYAUjdgpY/RwJvzuic2Y1yAH4OLJmJpRTQKKd0jZmYxWo0IGAHoAE0NzGBjgko3fyxHY/RV/e3ygG4HFisrxE7Hkf7MwoG5GICqROwA5C6BS1/jgQUBCiXc2Z3yAG4CnhuJpZ6G3BhJrpYjbIJ2AEo2/7WPk4C6wEnxylaban+LAfgBuCZtZvG2WBr4JI4RbNUJlCLgB2AWrhc2QR6IbAmcFovI3U/yN/lACiD3tO6H6uXEZQISAmBXEwgdQJ2AFK3oOXPkYASASkhUA7lX3IAbgPmzkEbYCPgN5noYjXKJmAHoGz7W/s4CbwMOCdO0WpL9YgdgNrM3MAEeiFgB6AXzB7EBGoRyM4B8BZALfu7sgn0QsAOQC+YPYgJ1CKQ3RaADwHWsr8rm0AvBOwA9ILZg5hALQLZHQL0NcBa9ndlE+iFgB2AXjB7EBOoRSC7a4AOBFTL/q5sAr0QsAPQC2YPYgK1CGQXCMihgGvZ35VNoBcCsToADwCfAY4DHuqFhAcxgXgIZBcK2MmA4plclsQEJgjE6gBMyHczoPTbF9tkJlAQgeySATkdcEGz16omQyB2B2ACpIKiHATclQxZC2oCzQlklw5Y2fNWac4jqpZ6I8klUUNUYC1M7wRScQAE5n7gCG8L9D5HPGD/BJRw7tD+h+1kxCsUCOg7wOqddN9/p3oT+Ur/w3pEE2idQEoOgLcFWje/O4yUwM5hxStS8WqJ9Qs5AKcA69RqFm/lTwJfiFc8S2YClQmk6ABMKOdtgcpmdsXECOwO7JuYzDOJ+1M5ACcCG2Si0DHAxzPRxWqUTSBlB0CW87ZA2fM3V+0/Crw3E+V+JAdA13k2yUShU4E9M9HFapRNIHUHYMJ6NwH7+bZA2ZM5I+111mWbTPQ5Sw7A54G3ZKLQeYAOabiYQOoEcnEAvC2Q+ky0/JMJ6JC5ggHlUL4lB+BAYJcctAF+CWyWiS5Wo2wCuTkA3hYoez7nor3OtyghUA7lWDkAewD75KANoMyGa2eii9Uom0CODsCERb0tUPbcTln7i4ClUlZgkuyHyQHYHtCXTQ7lHmDFHBSxDsUTyNkBmDCubwsUP82TA3ANsHByUk8v8N5yAN6Y0d35R4ElgMcyMZDVKJdACQ6AtwXKnd8paq7n5W3AXCkKP43MO0uhNYBvZ6KQ1FgBuC8jfaxKmQRKcQC8LVDm/E5R6wWB61IUfAaZt5IDsDxwfkZKrQn8PiN9rEqZBEpzALwtUOY8T0nrFwGXpCTwCFnXlwOwCHBlRkopXeMVGeljVcokUKoD4G2BMud7ClorZ45y5+RSVpYDMB9way4aAYrV/IOM9LEqZRIo2QHwtkCZcz52rXM6LyfWS8oBUFFu76fHTr+ifIcAR1es62omECsBOwBPWsa3BWKdpWXJtSuwfyYq/xNYesIBuBxYLBPFlNsgl2QNmZjEajQgYAdgTmjOLdBgErlJqwSUbG6HVnscrrM7gFdPOADnAisNJ0urI18AbNdqj+7MBPonYAdgeuYOItT/XPSIjxM4GVgvExhXA6+fcAC+CbwmE8UcDTATQxauRk7LjV2Y0tsCXVB1n7MRyCkK4M+At044AEcCW2di+weAFzsYUCbWLFsNhbU+DND1I5enEvC2gGdFXwT0rPwdMH9fA3Y8zmnA+yccgL0AfXIpKwN356KM9SiagG7p7B4++t3lqQS8LeBZ0TWB3K7LHw4cPuEAKB2w0gLnUpQRUJkBXUwgFwJLhtWAXLbqurCLtwW6oOo+RUAZADW/cikfAP6dDlhlNeD0XDQDdgO+m5E+VsUEJghsDhwUAniZylMJeFvAs6ILAm8CvthFxwP1uSVw6YQDsGhm0fM+ndmKxkBzxMNGSuAZIYW3riTlkpikbdTeFmibaNn96Y35wxkhUFTDOyccAH2JKH7+vJkoqORGe2Sii9UwgZkIvCyk8n65Ec1IwNsCnhxtEDgK2KqNjiLo46FwsPjRCQdAMinJQS6nja8H1o8AtEUwga4JyHnXSsDewDO7HizR/r0tkKjhIhJbCfOUOC+Hopd9Jc1jsgNwCrBODtoB8nCWDj8zUclqmMCsBJ4HHAzojIDL9AS8LeCZ0YSAVsYVLj+XFfKfAttOdQByizymFQCtBLiYQEkEdEtAIUtzWc3rwnbeFuiCar596s1fKwC5lJPCiuEcKwC5RR7zTYBcpqv1qEvAsQNGE9O2wOeA471SOBpW4TVyuwHwRMK8yVsAmwLHZmRoZQSUoi4mUCoBrQJoNcCxA2aeAd4WKPWvo7reygCoF+Rcyi7AmVJmsgOgk8Q/zEVD4ELgbRnpY1VMoCkBnQvQ+QCdE3CZnoC3BTwzZiLwDWDdjPC8AbhqqgOwEHBtRkoqFLBCAruYgAk8fkNANwUcO2Dm2eBtAf+lTEfgyswCb70UuHeqA6D//g3wnIzmwIrAPRnpY1VMYFwCih2gQFn66TI9AW8LeGZMEFgYuCYjHH+Z/Lc/eQtAOn4LWCsjZZXj4OKM9LEqJtAGAccOqEbxe2Hr5K5q1V0rQwJ6Huq5mEvR81DPxX+XqQ6AYozvnIum4RCgDgO6mIAJPJWAYweMnhXeFhjNKOcaud2O+0rIJTKtA7ANcERG1vxR2PPMSCWrYgKtE3DsgNFIfwvsFyKmjq7tGrkQOBHYIBdlgD2BU2daAdC+4DkZKauDDjoH8FhGOlkVE+iCgGMHVKOqbQGtlOqQsUveBLRCrv1/HZDPpWwUzvpNuwIwfwh5OHcu2obwxjrU42ICJjCagGIHHAasPbpqsTW8LVCG6ZcBFDY3l/JICJH/wEwrAPr/PwuVclH6Q8DJuShjPUygJwKOHTAatLcFRjNKucZ2wGdSVmCK7MpnMEdQsKmHAFX/y8BmGSl9GvD+jPSxKibQFwHHDqhG2tsC1TilVutIYOvUhJ5FXgW7es/kf5/OAfgA8OGMlL4VWCMjfayKCfRNQFFClSzMsQNmJu9tgb5nZffj/RxYsvthehtB8T8+P8oB2BA4oTeR+hnoFcCf+hnKo5hAlgQmYgfsAzwjSw3bUcrbAu1wHLoXXZH99dBCtDz+jsB5oxyAJYBLWx546O4U2+AHQwvh8U0gAwKLhFPwOiPgMjMBbwukPTveCOjOfE5lNeC2UQ6AtgVuyMzLV8rPA3KypHUxgYEJ6DCRbgvktETaNlJvC7RNtL/+Pgbs1N9wnY/0D2C5qVfipzsDIElOB+Qt5FKuB9bPRRnrYQKREHDsgGqG8LZANU4x1TofWD4mgcaURav6W07tYyYHQBGv3jfmgLE1fyXgmN6xWcXy5EDAsQOqWdHbAtU4DV3r+cCvhhai5fG/BHyiqgOg0IcKgZhT2Qs4JSeFrIsJREZgi3A+QAeoXKYn4G2B+GfGtsDh8YtZS0KlAVdo/DnKTCsACwLXTpMsqNaIkVU+C3h3ZDJZHBPIjYBjB1SzqLcFqnEaotZxwCZDDNzRmAqF/1LgvqoOgOpdCLykI4GG6PbvIS/Aw0MM7jFNoDACjh1QzeDeFqjGqa9a84T4/3JkcylyNtedTpmZVgBUVyEQFQoxp6JDELldcczJPtYlLwKKHaC7x3tndquobSt5W6Btos370+F3HYLPqSgUvkLiP6XM5gAoBKJCIeZUvgB8MieFrIsJJEBAsQMOzizEeBfYvS3QBdV6fe4L7F6vSfS1FQpfIfFrOQAvBH4RvWr1BFRqR0U6dDEBE+ifwDrBAXfsgNnZe1ug/7k5MaIi5SmFfE5ldeAPdR0A1VcoxJxO9OowxMoOC5zT3LYuiRFw7IBqBvv/gM8BCmLmc0vVmI1bS8+6KzM7/K4Q+AqFP22ZbQtADRQKUSERcyp7AqfmpJB1MYEECTh2QDWjeVugGqc2am0DHNFGRxH1oRD4CoXfyAHQtTnt3eVUfgronqeLCZjA8AQcO6CaDc4I38V3V6vuWg0IKE6MtqlyKgcCutbYyAHQVZ4f5kQDeBRYBfAfUmaGtTrJEnDsgGqm87ZANU5Naumg6hWAbq7kVN4AXNXUAdCdSCUGenpORIBDgKMz08nqmEDqBBw7oJoFtS3wEUD56l3aIbArsH87XUXTyz9DAqAZz5CMOgMgTRQSWKGBcyo3AuvlpJB1MYFMCDh2QHVDelugOqtRNS8Alh1VKbF/V+hfhQCesVRxABTI49DEFK8i7kbAb6pUdB0TMIHeCTh2QDXk3haoxmm2Wi8Dzhm/m+h60CrRCeM6AEtkGj3vq8BHozOZBTIBE5hMwLEDqs0HbwtU4zRdrY8D72rePNqWimp427gOgNr/DFg6WjWbCfZXQCmCH2rW3K1MwAR6IjB/iM62G6A4Ai4zE/C2QL3ZMW9I/fvses2ir30z8JpRUlbZAlAfB812l3DUIBH/u7Y3FPnJxQRMIH4CLwYOA9aKX9RBJfS2QHX8igw76zJ59a6iqqkYPnpuz1qqOgDyJL45qrME/90pghM0mkUunoBjB1SbAjrsvJ9vC8wKS5EWN66GM6labw0r9604AFp2uy7D64Ba/tfVo6fkSU7K1BbWBMojoNgB+wDvyPDudtvW9LbA9EQXDHfktQ2QU9H1vxWAB0cpVXUFQP3keB1Qein7k3RzMQETSI+A4px/ClgpPdF7ldjbAk/FrStyOWaHHXn9bwJFHQcgV1i/yjDfQa/fLB7MBAYmMHe477w38IyBZYl9eG8LPGkhxcnXQfDcSuWX2joOQK7XAWX8tYFbcpsF1scECiPg2AHVDV76tsBSwEXVcSVVc+T1vyYrAGqjRDrLJIWimrBHhdPF1Wq7lgmYQMwEHDugmnUU+37TalWzq6XzI3tkpxXcVCehUZ0VALFSZqFdMoR2B7Aq8FiGulklEyiRgGMHzG51fddtCVxW4OTQc096L5ah7sfWyeBb1wHQQ1JLRzmWrYFLclTMOplAwQQcO2B64+ta938WOi/WBE7LVHddka3s1NV1AFT/l8CiGcL7FvCBDPWySiZgAo+/7SowynMNg3tDMCX9LLF8HnhLhorfCbyqzkp2XQdAzHKNCnh/iAmgO5QuJmAC+RFw7IDHbao3/xwDu1WZsUptfxWwQJXKidWpFP1vsk5NHABdm9D1iRzLnsCpOSpmnUzABJ4gUHLsgMsBLROXet5pG+CITP8W3hjyGlRWr4kDoM4vBXQtMLeijFrrFfzHkZs9rY8JzERAsQOUC+TDBcUOeBhQ7PsbCp0Wet5dALwkQ/2V9U/X/2qVpg7A/sCutUZKp/K7AeUIcDEBE8ifQEmxA44GDsnfpDNquAlwXKb6N7JtUwdAYTfPzRTkNcFLzlQ9q2UCJjANgXWBQ4ElM6Wjq86Kj1DyGSdlfl0xU/u+Hri6rm5NHQCN8/OM/1i2B86vC9P1TcAEkiaQc+yAd2b80lZl0q0PnFSlYoJ1bgXWaCL3OA5ArpGUxFFXHTdrAtRtTMAEkieQW+yAyslhkrfczAp8P1yRy1HFxpFsx3EAls/8LdmBgXL8U7FOJlCdQA6xA/4Vlv5vr652djVzDvwjY2l14/omVhvHAdB4PwOWbjJwAm0uzjRYRALoLaIJREMg9dgBnwC+FA3NYQRRkLe1hhm681FvBl7TdJRxHYC9AH1yLUqUoYQZLiZgAmUTSDF2gFL/6trfQwWbbhXgzIz1PxzQp1EZ1wF4AfALYNx+GgnfQyPvnfUA2UOYQCIEUoodoEA/bwoxWxLB24mYJwIbdNLz8J3KxqsDf2wqShsPboWUbLwE0VTwHttp8lzb43geygRMIG4CKcQOUERTRTYtubwU0EtcrkVb8G8dR7k2HACFH1QM4lyLlo9yTIGcq72slwn0RSDW2AH3hT3ve/oCEek4So2rbdxcy87jhuVvwwGYN+yTPydTyo8C+kPXYQsXEzABE5hMQLED9gB2A/RdGEP5IPCNGAQZUAYdTr8QmGtAGboc+i+AzjeMdb6jDQdASuYcGlj6KXf0+7u0pvs2ARNImkAssQMUw2Rz5zPhSEBXuXMtjUL/ToXRlgOgya9rc7kWJdHQNZLGhy1yBWO9TMAE5iCgg3cHAs8dgIu+pxQSttGd8AHk7WpIHU7X82iergaIoF89j343rhxtOQCS4zvhROK4MsXa/ushc1is8lkuEzCBOAgodsC+gEKK97kEfQzw8TgQDCrFp4G3DypBt4Pr5t2b2xiiTQdAnu8X2xAq0j6016J0i3dFKp/FMgETiIvAysCnekpA8/+G21glJ/uR9Z8frj7Gch6jixmp8ybfbaPjNh0AHYa5EliwDcEi7eN44IBIZbNYJmAC8RGYiB2wN/D/dCjefwDndNh/Kl1/DNgpFWEbyKkbHnIsH2jQ9ilN2nQA1Hnu8BVXW3GlvQrQxuxzHyZQDgHFDtD3YxfX0hyw7PF5pLf/S4CnZTytWn0JbdsBWBa4IGP4Us1xATI3sNUzgQ4JtB07QC8l6vO2DmVOpevc7/3LDusBCvHcSmnbAZBQZwCrtiJdvJ28LdwxjVdCS2YCJhArgTZjBxya+dmrqjaUE5R77IPLgC2qAqlSrwsHYCPgv6oMnnCdW4PX/WDCOlh0EzCBYQksBXxyjEx1vw1x7scKBjMsglZGny+8kC3ZSm/xdtL6OY8uHABde1GMYsUGyLmMlYUpZzDWzQRMoBaBprED1O5/ao2UZ+Xcs9LKarrzr5w7ikzbWunCAZBwuv+q6y85F53C1H6MVgNcTMAETGAcAnVjByjH/QfGGTCTtnrr17kzbavkXHSL5KS2FezKAZAxLgdyzQ8wYQdNvO3aNor7MwETKJZAldgBugq2NvDXYik9qfjJ4UUsZxSK+//qtq7+TQbVlQOgMZSK8kM5WyXo9m7grAL0tIomYAL9EFDsgHeGyKPTxQ7Q96oefKWXTYDjCoDwGeCILvTs0gFYCFBiipzvZMomd4a9mfu7MJD7NAETKJbAdLEDrgA2c7IfFghnzRbNfHbomuergHu70LNLB0DyfiJ4sl3IHlOfXw5BPmKSybKYgAnkQUBnjfRduriT/TxhUEVkfU8e5p1Vi68B+3WlZ9cOwAtDViYtaeVclIVrQ+CGnJW0biZgAoMR0LmqNQoItFYF8HLAeZln+xOHR8IV0T9UgdKkTtcOgGQqITqT9FSQhi29NNdkGrqNCZiACVQioGfW6QUEmxOMzqPO9uEA6FRrKYfkdPDx1ErT2JVMwARMwATqEtimqwNxdQXpob4OOSrBXmelDwdAwn8HWL0zLeLpWNdy1gL+Fo9IlsQETMAEsiDwrLCl/OwstJldiV8Ab+5az74cAGXQO61rZSLpX8EaFLTBxQRMwARMoD0CCi6nIHMllK1DZsNOde3LAZAScgDkCOReFKpRKT87XbrJHaL1MwETMIFJBLSVrD1xhZrPvSilsRyAzkufDoAiGX2vc43iGOAa4A3hFGccElkKEzABE0iTgG6R/RBYMU3xa0u9eYikW7th3QZ9OgCSrYSwjRM2OAQ4uq5BXN8ETMAETGAOArsC+xfCpNfw8n07AK8Azi7EkErRqWxditzlYgImYAImUJ/AKsB3gfPMSowAABgqSURBVHnrN02yxcbAr/uSvG8HQHqdEILm9KXjkOPcEfJ1K3mHiwmYgAmYQHUCCwI/Ahar3iTpmgputGOfGgzhAKwQjDrE2H2ynRhLE1hGfWyIwT2mCZiACSRIQM8HvSxukKDsTUTW80G6XtekcdM2Qz2ES4kOOGGXjwPHNDWS25mACZhAYQTeC3y0IJ07j/o3HcuhHIBlQkzrEq50iLvPAxT0l2xVTcAExiJQ2r6/ro4r4dNNY1Fr0HgoB0CifjEckmsgdpJNfB4gSbNZaBMwgR4JlLbvL7Q65Lhbj4yfGGpIB2DJkM95niEUH2hMnwcYCLyHNQETiJ5Aafv+Mogyyb4GuHUI6wzpAEhf7Y2/awjFBxzT5wEGhO+hTcAEoiVQ2r6/DPHVIc86DO0AKLnDz4GFop2S7Qvm8wDtM3WPJmACaRMobd9f1roXWGPI5HFDOwCCoCtyh6Y9d2tL7/MAtZG5gQmYQKYEStz3lyk/Eq46DmbWGBwAxXnW3vhyg1EYZmCfBxiGu0c1AROIh0CJ+/6if0O49//IkKaIwQGQ/msDpw4JYqCxfR5gIPAe1gRMIAoCJe77C/w2wEVDWyAWB0Acvga8fmggPY/v8wA9A/dwJmAC0RAocd9f8M8F3hmDFWJyAHQt8KcFJX2YsL/PA8Twl2AZTMAE+iRQ6r6/XvrWGera31QDx+QASDalfFTqx9KKzwOUZnHrawLlEih1318WV4p4pYqPosTmADwDuBh4bhR0+hXiKOCwfof0aCZgAibQO4F9gD16H3X4Af8MrAX8Y3hRHpcgNgdAMm0LHB4LoJ7lUPILBYZwMQETMIEcCSjwmw4/l1j2Ak6JSfEYHQAlCDoLeHlMoHqSRSkh3wec0dN4HsYETMAE+iKwBfClSF88u2ZwFbAJoMQ/0ZQYHQDBWQE4BygpT8DEpNAhkXeEA5HRTBQLYgImYAJjENDBt/8u8JC3kCne/0bAdWPw66RprA6AlC11n0i63w9sDfy6E6u7UxMwARPoj8ArgNOABfobMqqRoj3fFbMDMD/wY2CpqEzZnzD3AJsDt/Q3pEcyARMwgVYJ6Pv7e8DCrfaaTmf6/n4d8ECMIsfsAIjXaiFXcuxydmXb24FNgbu7GsD9moAJmEBHBBYBzgQW76j/2LvVma43AZfGKmgKD9ZPAjvECrAHuRQzWodn/t7DWB7CBEzABNog8MxwmLm0HC+T2Z0I7NsGzK76SMEBUGyAC4FFu4KQQL+Xh9jR/zcBWS2iCZhA2QT+d8jt8uqCMdwJrBvTnf/pbJGCAyC5NwDkTZVcFC3wP4BBs0eVbADrbgImMJKAsrv+V/jOHlk54wpatdZ3dtQlFQdAEI8Jh+KiBtqxcMqYuGfHY7h7EzABE2hK4IiwWtm0fQ7tdOhRWQ6jLyk5AM8Jd+MXip5qtwIqkMYnuh3CvZuACZhAbQL7hUBmtRtm1ODekOznLynolJIDIJ5bAbpTWXo5CPhK6RCsvwmYQDQEdgb0vVR6UY6Db6cCITUHQFyPBzZOBXBHcup6ye7himRHQ7hbEzABE6hEQFfdvlBoiN/JgM4GdqpELJJKKToAyiP9E+D5kTAcSgyFDFZiDQVLcjEBEzCBIQgoyI0SmM07xOARjXkX8FrgvohkGilKig6AlFJKRR2IS1X+kYapWEFOgA4FfrdifVczARMwgbYI6M1fh/5Kf/hrRXabkMq+Lba99JPyA3R/YNdeKMU9iCbfwT4TELeRLJ0JZEZAe/4H+iXs31Y9GjgkRfum7ADI6/wBsFKK4DuQ2bcDOoDqLk3ABJ5CwKf9n0RyNfBGQKuxyZWUHQDBVqKJ84CnJUe+G4G1LfJBBwvqBq57NYHCCSjIz2d9z/+JWfAvYMOUE7al7gDIEm8HPl34H+Zk9RV9ahfAYYM9KUzABNoioPC+xzrC3xw4Pwx8vS3AQ/STgwMgbgo9udEQACMdU7kDtncCoUitY7FMIC0CSuxzElBybP+pFjsnhGZPy5JTpM3FAVB0QF0NVPpJl8cJKIvgtk4l7OlgAiYwBgF9p54ClJzVbyo+pWfXlT9F/Uu65OIAyAi+GvjUqXh7cAJuSXqWWngTMIEhCOiMlR7+iw8xeKRjJnvlbzqeOTkA0m+v8Il07gwi1j3hnMSvBxndg5qACaRI4BVhf3vhFIXvUObDAX2yKLk5ANJHaYMVncrlSQL3hxCVPzUUEzABExhBYJ0Qcn0Bk5qDgKKuKs2vVgGyKLk5ADKKDqzogMaSWVioPSV0T/X9wBntdemeTMAEMiOwBXCko/s9xaq3hoPmf8/J3jk6ALLP8iFIkOMDzDlb5bkeEGJ35zSPrYsJmMD4BJRb5GOO7vcUkLrvr2A/14+POK4ecnUARHlLQNHxXJ5KQCmVP5XTUpaNbAIm0JiAngN7A0pl6/JUAu8DTs8RTM4OgOwlbzap9Iw9TjIFDNKWQFLZq3rk46FMoAQCyq6qJf8NSlC2gY5KP69V0yxL7g7APMBpwGpZWm98pe4A3gNcMX5X7sEETCAxAqsAXwYWS0zuvsS9FNgaeLivAfseJ3cHQDyfB5zrIEEzTi0dDvxkCPOZzenWvv+QPJ4JJERA3/sKF76vD/vNaDUF+3k98KeE7Fpb1BIcAEF5FfAdT/ZZ54e3BGr/+biBCSRHwEv+o02ml6I3A78cXTXtGqU4ALKS7m/qTddlZgLeEvDsMIF8CXjJv5pttTKieDLZl5IcABnzYODd2Vt1PAW9JTAeP7c2gdgIeMm/ukWOAw6sXj3tmqU5AHOFCFfOHDh63npLYDQj1zCB2Al4yb+6hRRATrfGHq3eJO2apTkAspaCA30bWDlt0/UivbcEesHsQUygEwJe8q+O9UpgK0BBf4opJToAMu5zQ6TAJYqxdHNFvSXQnJ1bmsAQBLzkX4/6bSHS35/rNUu/dqkOgCy3DHBmyB2QviW718BbAt0z9ggmMC4BL/nXI6jY/psCN9Vrlkftkh0AWXBN4Bu+Hlh5MntLoDIqVzSB3gl4yb8ecq1uvg24pF6zfGqX7gDIkor0pFCYLtUI6I9GeQSOBR6p1sS1TMAEOiQwdwjso3j+83Y4Tm5dKxS6IsUWW+wAPG76vcKn2InQQPFrQgIRHZ5xMQETGIaADjPLIV9xmOGTHfVwQJ+iix2AJ82vVQCtBrhUJ6DrMicDhwJ/q97MNU3ABMYk8CzgI8B2gK43u1QnoLd+vf0XX+wAPDkFlDjoq86K1ehv4q/AIcC3nGK4ET83MoGqBPSd/RZgf+DZVRu53hMEdJj5XTkn+KljazsAc9KaD/g6sFYdiK77BIHLgH2AG8zEBEygdQLLAYcBq7becxkdXgy8HXiwDHVHa2kH4KmMng58MyQQGk3QNaYSUOpM5dDW/tr9xmMCJjA2gQXCGSVFqdNKpUt9Akrs81bgn/Wb5tvCDsD0tn1mOB26Ur6m71yzO4EDgLM6H8kDmEC+BDYBPgYsmq+KnWt2dTjfpTv/LpMI2AGYeTosDHwXeIlnzFgELgD2A24dqxc3NoGyCCwJfAJYryy1W9f2t8CbgHta7zmDDu0AzG7ERYDTAf0xujQn8ADwReAL3n9rDtEtiyCgc0i7A7sB8xehcXdK6qVjS+Du7oZIu2c7AKPttzjwPS/BjQZVoYb+IHV16cIKdV3FBEojsG64UusXjvEtry3IzYHbx+8q3x7sAFSz7YvDSoCSCLmMT0A5GJRz+67xu3IPJpA8gecDB4eY9MkrE4ECSuqjN//fRSBL1CLYAahunuWB7wBKtuEyPgGl3VQQoaPtCIwP0z0kSUAP/l1DMB+lKXcZn8B9wJuB68fvKv8e7ADUs7GcAF0R9EpAPW6z1VZugVPDGYE/ttetezKBaAm8IOzxb+PY/a3aSG/+uurnh39FrHYAKoKaVE3bAQol6Ws59dnN1kLxA3TgUgcFb263a/dmAlEQWDoc8NPytO/zt2sS7fkrlLuX/WtwtQNQA9akqjoYqLC3PqzTjN9srZRfQLEDjgKubb9792gCvRN4KbAHoDv9jtvfPn4dLlZ4ZB/4q8nWDkBNYJOq64qglq4dJ6A5w1EtFbdbjsAVoyr6300gQgKrhAf/BhHKlotIuuevrRRf9WtgUTsADaBNaqJgQacAjhg4HsdRrRXDW9kaLxlV0f9uAhEQWDNkm3NOkW6NoQh/2zrIT3PIdgCas5toqbDBSiD0qvG7cg8jCCietxyB803KBCIksH548Pu7oHvj6LtAiX0c3ncM1nYAxoA3qakSCJ3gLILtwKzQyzXBETjb6Ycr0HKVLgnoO3Tj8OBfscuB3PcTBLQiuKMT+4w/I+wAjM9wogeF8DwO8H5fe0xH9aT9v2MABRZylq9RtPzvbRKQ078p8F6fA2oT68i+dC7o3Q4pPpJTpQp2ACphqlxJV3uUBlfXUVz6I6C0w7o5oOuZP/eqQH/gCxtJ35drhL9vnehXml6X/gjo73svQFeGXVogYAegBYjTdKFJqo9L/wTuCBEb9WVxS//De8QMCSwVHvqKMLdYhvqloJJerPRxaZGAHYAWYU7pSqsAn3Wkr+4AV+j5V2FVQMmcFCLUxQSqElDIbyWT0d/xK6s2cr3WCShS6AfD33HrnZfeoR2AbmeArgN9FdBNAZfhCOhL5LzwJXIBoP92MYGpBOYF1gsP/Q3tvA8+QXTC/12+/tudHewAdMd2oudlwjXBJbofyiNUIPBX4IzgDPymQn1XyZ/Ay8JDfwvg2fmrm4SGt4VrfjclIW2iQtoB6MdwSh6ka4Ir9zOcR6lI4MbgCCjLoyOJVYSWSTVF8tSevpb4l81Ep1zUuDJc81NyH5cOCdgB6BDulK6V7vNLwEb9DemRKhJQ/oGLwsqAtgj+VLGdq6VF4HlhiV9v+ms7Ln+UxjsHeB+gdOEuHROwA9Ax4CndKxHIgeEea78je7SqBB4LSYjkCPwk5CHwtaOq9OKqp2u5isf/2vDgV1Ief+fFZaPJ0iiOysGAHHKXHgj4j6EHyNMMsQPwMR8yGgZ+zVF1EEmrA3IG5BTcVbO9q/dL4PnhYa+Hvt7yfQC3X/5NRtOh3AOAE5s0dpvmBOwANGc3bkvFC5fHq71Il3QIXB9OJV8G6OPtgmFtp2X9VcNHt26WH1Ycj16TgM7eKLKfYvu79EzADkDPwKcMpy+vY4HVhhXDo49BQLnILw/OgByCmx2JcAyaszfV99XSkx74rwaW7Gw0d9w1gUuBXexEd4155v7tAAzHfmJk7VNq+Wun4UWxBC0QuDe8zejLTdcMr3O60sZUlW57BUDX9OQka9Vsoca9uWFMBI4P26A+XzOgVewADAh/ytBbhsiBui3gkhcBLXNq60DOgD76XSsFDkj0uJ0VgEdv9lq+1wNfH/3u7bG8/g6kjU73K7Lf6fmplp5GdgDispm+9BQ50MuacdmlC2n08JcTcC3wO+CP4aMAKDpXoNsIORV912jLSwGxXhA+LwZ0Ml8PfzkBLnkT0HaZIvvJAXaJgIAdgAiMMEUEnVr+IvC6+ESzRD0ReAC4fYpTIAfhzrCdoG2Gv0XkJOh75FlheV7L9ouGB/zkh/3iwPw98fMw8RH4MbAboFs1LpEQsAMQiSGmiCG7/Gf42EZx2mhoqXRXWgmO5Azoc8+kn/r/ciIenPRz4netPEz+/9JjvvBw1lv4xO/6Ofl3PbyVIEcPeO3DT/zU7/r/inHhYgJTCWgl63Phk9uqVvLW9sMlbhOuBXzBe6FxG8nSmYAJTEtAZ192By42nzgJ2AGI0y6TpdIblvJgO4Rw/LayhCZgAo8TUEjfvcKqlJlESsAOQKSGmUast4cwmb4lkI7NLKkJlEZAp/wV7vzrpSmeor52ANKy2lLA0cBKaYltaU3ABAogcDWwK3BLAbpmoaIdgPTMqINaewPvdWKT9IxniU0gQwI63HcM8CnHtkjLunYA0rLXZGl1QPAoQMlPXEzABExgCAJKjrWHD/oNgX78Me0AjM9wyB50/eqzwMZDCuGxTcAEiiRwdojqp2unLgkSsAOQoNGmEXmrcEDQcdLzsKe1MIGYCSjuhA76fTtmIS3baAJ2AEYzSqXGc4CPA5unIrDlNAETSI7A94CPAn9JTnIL/BQCdgDymxQbAIeFcKz5aWeNTMAEhiCgMNT7AD8aYnCP2Q0BOwDdcB2612cAHwHe4ZsCQ5vC45tA0gR0wv+/gUOBfyStiYX3CkBhc0A51HVIUPEDXEzABEygDgHd51fq3kvrNHLddAh4BSAdWzWVVElc9gwBOuZp2onbmYAJFEPg4RBw7IiQTKoYxUtT1A5AORZfIeQUeHk5KltTEzCBmgSuCjH8r6vZztUTJGAHIEGjjSGyUrZuA+wL6NaAiwmYgAmIwJ/D4eFTAaWadimAgB2AAow8jYo6JPgBYCdAoYVdTMAEyiTwEHAccKQP+ZU3AewAlGfzyRq/CDgI0NVBFxMwgbIInBsCiN1altrWdoKAHQDPBRFYJ3wRvMQ4TMAEsidwQ4jkd1H2mlrBWQnYAfAEmSCgGwI7hGs/zzIWEzCB7AgohO9ngJOAR7LTzgrVJmAHoDay7Bson8CHgO2BubPX1gqaQP4EdK3vxBAT5G/5q2sNqxKwA1CVVHn1FDxIQUA2czTB8oxvjbMgoNP8Z4QHv/f5szBpu0rYAWiXZ469LRccgTfYEcjRvNYpQwIK3/uD8OC/KUP9rFJLBOwAtASygG5WDFsDvjFQgLGtYrIEzgM+DTiQT7Im7E9wOwD9sc5lpJWBD4ebA7noZD1MIHUCF4QDfr9OXRHL3x8BOwD9sc5tpFXDisCauSlmfUwgIQKXhDf+yxOS2aJGQsAOQCSGSFgMOQD/CayesA4W3QRSI/AL4HOAHAAXE2hEwA5AI2xuNA0BbQ28B9jY1wc9P0ygEwK6u3828GXgyk5GcKdFEbADUJS5e1H2hcDOwFuBp/UyogcxgbwJ/Av4JvAV4A95q2rt+iRgB6BP2mWNpYBCOwLvdObBsgxvbVsj8Bfga8AJgKL4uZhAqwTsALSK051NQ2B+4C3ALsCLTcgETGAkgd8BxwLfAh4YWdsVTKAhATsADcG5WW0CcwEbhnMCukHgYgImMCeBy8L+vu7yK4qfiwl0SsAOQKd43fkMBJYFtgO2AhY0JRMomMB9wLeBk4EbC+Zg1QcgYAdgAOge8gkC2h7YJDgDvkboiVESAV3j00P/LC/zl2T2uHS1AxCXPUqWRucD3hbOCzynZBDWPVsCOtSnff1vANrndzGBQQnYARgUvwefhsC8wOuBtwNrOwGR50jiBJSY5yLg68C5wEOJ62PxMyJgByAjY2aoyguArYHNgaUz1M8q5UvgZuB7wGnAH/NV05qlTMAOQMrWK0v25YMjsBmwZFmqW9tECNwKfD88+K9PRGaLWTABOwAFGz9h1VcKzsCmwBIJ62HR0ydwG3BmeOhfnb461qAkAnYASrJ2nrq+EtCqgJyBRfNU0VpFRuDO8NDX2/6vIpPN4phAZQJ2ACqjcsXICWguvxp4A/BaYJnI5bV4aRG4CfgJ8ENAqXd1uM/FBJImYAcgafNZ+FkIaGtAjoA+Sln8dNMygRoE/hlS7eqhr4+W+l1MICsCdgCyMqeVmYHAfMD/meQQ+EaBp8p0BHRyf+KB/z/Ag8ZkAjkTsAOQs3Wt20wEtDqwPrCeVweKniQTb/kXAOf7Lb/ouVCk8nYAijS7lZ5EYB7gpYASFOkMgX4+z4SyJPAnQAl3tIevn9cCD2epqZUygQoE7ABUgOQqxRF4YXAEJpwCHSj030pa00CH9HRwb+Jhrwf+H9JSwdKaQLcE/KXWLV/3ngcBZSycWB14FbAC8Iw8VMtGi38A1wG/nPSWr0x7LiZgAjMQsAPgqWEC9Qno72ZxQNEJ5QwsF36+CJi7fnduUYPAI8Dvw8P+hvBTUfdu99W8GhRd1QS8rOk5YAKtElB642WDYzDZOXB2w2aYlT1v8kNeD/obnT63GUy3MoGpBLwC4DlhAt0TWAhQYiN9dANBZwwm/lsrCcqAWGJRZjy9uStZjj7ao9d9+4n/vrdEKNbZBPoiYAegL9IexwSmJzAXsEhwCOQYyEGQc6D/J8dh4fAztUBGumKnB/g94efd4cGuB7we9HrI6/896olhAiYwDAE7AMNw96gmUJeAghlNdggmHAP9v4nPAoDqTffR9oRWGvRvk3+XHAp4o7fxB6b5Xf829XN/eKjrAT/xmXjQT/x0EJ26FnZ9E+iZwP8PVFpoa+U+RgYAAAAASUVORK5CYII=\",\n      \"created\": 1689370629868,\n      \"lastRetrieved\": 1689638386800\n    },\n    \"06e43fd4c9e10ae4c800aac63ffacde8fb0877b3\": {\n      \"mimeType\": \"image/png\",\n      \"id\": \"06e43fd4c9e10ae4c800aac63ffacde8fb0877b3\",\n      \"dataURL\": \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAYAAAD0eNT6AAAAAXNSR0IArs4c6QAAIABJREFUeF7tnQe0LUtVdqdkJUjOIDlKVuQHQXJGQIkqKKgoCAICIiCgBMlIzlFEQILkKDkICBIkS845Shb8x+frpy/ce0+dvbu7qnbNNcYZOHzVVavm6rv76+qqtX4GTQISkIAEJCCB4Qj8zHAzdsISkIAEJCABCaAA8CaQgAQkIAEJDEhAATBg0J2yBCQgAQlIQAHgPSABCUhAAhIYkIACYMCgO2UJSEACEpCAAsB7QAISkIAEJDAgAQXAgEF3yhKQgAQkIAEFgPeABCQgAQlIYEACCoABg+6UJSABCUhAAgoA7wEJSEACEpDAgAQUAAMG3SlLQAISkIAEFADeAxKQgAQkIIEBCSgABgy6U5aABCQgAQkoALwHJCABCUhAAgMSUAAMGHSnLAEJSEACElAAeA9IQAISkIAEBiSgABgw6E5ZAhKQgAQkoADwHpCABCQgAQkMSEABMGDQnbIEJCABCUhAAeA9IAEJSEACEhiQgAJgwKA7ZQlIQAISkIACwHtAAhKQgAQkMCABBcCAQXfKEpCABCQgAQWA94AEJCABCUhgQAIKgAGD7pQlIAEJSEACCgDvAQlIQAISkMCABBQAAwbdKUtAAhKQgAQUAN4DEpCABCQggQEJKAAGDLpTloAEJCABCSgAvAckIAEJSEACAxJQAAwYdKcsAQlIQAISUABsdw+cGjg3cKbp78zAyYGTAacATjx1fwLg2NP//U3gv4HvAV+b/r4MfBb4JPAJ4D+AjwE/2c49r5ZAVQLHAH4VuCLwy8BpgVMCJwG+BHwe+DTwJuCF071f1WEHl8BIBBQA5dHOw/7i098FgfNPD/nyHvbX8vvA+4H3Am8F3gx8cBIP++vJ1hJYl0AE7x8DtwLOWDh0RPEbgAcALym8xmYSkMAWBBQAB4d3fOBywJWBKwBn24LzXJd+HXgd8PLp7zNzdWw/EpiJwHWAhwCn26K/VwM3n1bCtujGSyUggUMRUAAcmc7PA9cErgdcHjhu47fPu4FnA8+aPhk07q7u7TCB4wCPBP5gpjl+Z+rrH2fqz24kIIGjEFAAQL5T5g3/D4Grd/DQP9hN/K/AE4FnAN/2TpfAigSyWva86Vv/nMPms8BtgIfN2al9SUAChxEYWQCcFPgj4GbTBr5duSe+CzxzWoZ9365Mynk0SyAP/xcDl17Iw4iArCo8aaH+7VYCwxIYUQCcBbgtcBMgP167avnhfCXwQOCfd3WSzqsqgZ8DXgRcdmEvfgxcatoMu/BQdi+BcQiMJADOANx+eutv/dv+3HdgThH8zfRjPXff9jcmgaXf/I9K9SPA+YAfjYnbWUtgfgIjCICcyb/79ODPRqWR7bXA7YB3jQzBuW9NYO2H/+EO32Fa0dp6AnYgAQns9h6AYwE3Be618Hn93u6jnwJPB/4c+GJvzutvdQJrLfsfaKJJmJWkW8mRoUlAAlsS2NUVgCTqyY74C2/JZ5cv/9a0MvJwIKJAk8BeBGo+/A/37QbTsde9fPW/S0ACexDYNQGQH6h7ArcGjmn0iwi8fjoCmfTDmgQORqDWsv9R/XkukGRDmgQksCWBXRIAvwj8w7RRaEssw12eJdU7Teetc3pAk8ARCbTy8I9PqZ+ROhvep96jEtiSwC4IgMwhm4Py5j/6Jr8tbweeP525zo+sJoEQaGHZ/6iROI37V7w5JbA9gd4FwImAJwO/sT0Ke5gIpL5AlljfLpHhCbT48E9QLgQkDbYmAQlsQaBnAZAl/6QfPfsW8/fSAxP4AXCLSVzJaEwCrT78E42rAi8bMyzOWgLzEehVAKRQz3OAFO/RliOQHOzJmugpgeUYt9hzyw//8EqFzle0CE6fJNATgR4FQM72PwY4dk+gO/Y1u65v5NnrjiO4P9dbf/hnNjnm+579TcvWEpDAUQn0JgDuCNzXMK5O4A3ANawyuDr3tQfs4eEfJqcCkhRIk4AEtiDQkwD4qylxzRbT9dItCLxjWnr1hMAWEBu+tKWjfofC9FXglB4DbPhO0rVuCPQiAB4wFfLpBuyOOpoaApcDvrGj8xt1Wr08/BOf7P257qiBct4SmJNADwLgHsBd55y0fW1F4G3AFYDvbNWLF7dCoJdl/8N5XQ94divw9EMCPRNoXQCkYM39ega8o76/DrgKkOOCWr8Eenv4f2kqBuR91+89p+cNEWhZAFwfeAa7XbGwoVth367kLSyFWTwiuG90TVzQ07L/4cBSyvrBTdDTCQnsAIFWBcAlgVcBx90Bxrs8hZzISA0BrS8CPT78PwycH/hRX6j1VgLtEmhRAJwZyI7zk7aLTc+OQOAmwFMk0g2B3pb9A/bHwKWAt3ZDWUcl0AGB1gTA8YA3ARfpgJ0uHkYg32OzYhPRprVNoMc3/1T9S/IvRWbb95bedUigNQHwVODGHXIc3eVPTqLt66ODaHj+PT78gzOVPh/YMFddk0C3BFoSAL+ryu/2PorjKSV87a5nsLvO97jsn2jcBfib3Q2LM5NAXQKtCIB89095z5T31fol8IfAE/p1fyc99+G/k2F1UhLYnkALAuCYQHLNX3z76dhDZQLfnWq1/0dlPxz+MAI+/L0TJCCBgxJoQQDcBvhbY7QzBF4PXMZc7dXj6cO/egh0QAJtE6gtAM4E/DtwgrYxFXmX6mRvBz4E5MzyR4BkLstbcf6SPz8bsfKX+Z4cyKePcwLnAi4AnKdopPYb3Qx4fPtu7qyHPvx3NrROTALzEagtAF4CXHW+6azaU84mv3L6ew3w/hneek89vT1fFrjWJBJWndRMg31zEjaWbJ0J6D668eG/D1g2lcDIBGoKgDz4IwB6s5x3/7spTXFKky5lx57y7edY5NU7zIqYFYCsBGjrEfDhvx5rR5JA9wRqCYBjTbv+z9sRwTcDdwPytr+2pf75LYDbdnRSIjUCLgq8c21Yg47nw3/QwDttCWxKoJYA+BPgEZs6vfJ1LwfuDLxr5XEPNFz2DSQxSjZOHqcBf/Zy4dXA5fdq5H/fmoAP/60R2oEExiNQQwAk3e9HgdM1jvvzU6GbLPe3ZmcHHg5cqTXHDuBPTgSkfLC2DAEf/stwtVcJ7DyBGgLgz4AHNU72UcAdgf9s3M8bTSspLSdQeuNUyKVxlF2658O/y7DptATaILC2AMjbf/LGn6qN6R/Ni28BfwA8p1H/DuRWVgOeNSXgadXtnGp4bavOdeqXD/9OA6fbEmiFwNoCIKliH9fK5I/iR/IR5Ojdxxv171BuRVhlT8XvN+r7yzo+7tkiUh/+LUZFnyTQGYE1BUDGyln5czfI6G3A1YCvNejbflzKZ4v77ueCldqmpOuFgPesNN4uD+PDf5ej69wksCKBNQXAlYG8CbZmLwKuD3y/Ncc29CcnLB4GHGPD65e6LEWCsgKkbU7Ah//m7LxSAhI4CoE1BcDzGiwXm2NqefP/4Y7dGX8MPLqxOWVD5WmB7zTmVy/u+PDvJVL6KYFOCKwlAJLi9tNAstu1Yv8KZHNa6zv9N+V1D+Cum1680HWWC94MrA//zbh5lQQkcAgCawmA1r5Np1xtyg8vmcq39o2X2D4RuEltR44w/luB/9eQPz244sO/hyjpowQ6JLCWAHj3VO2uBURZ7s/D/99acGZhH3I64C2NHRE8G/Cxhee9K9378N+VSDoPCTRIYA0BkHK3KZHbit0ceEwrzqzgRx64ycffSrKgvwDut8K8ex/Ch3/vEdR/CTROYA0B8JfAPRvh8PwGNyKugSYVBZ+6xkAFY2Tl5SIF7UZu4sN/5Og7dwmsRGANAZAz9qkKV9u+B5wH+FRtRyqNnxMP2fRY25IT4AzA52o70uj4PvwbDYxuSWDXCCwtAFK97kuNnElPFb0H7loA9zGfcwDvBY67j2uWapqMhU9aqvOO+/Xh33HwdF0CvRFYWgD8FvD0BqBkD8L5gR834EtNFx4A3L6mA9PYzwau14AfLbngw7+laOiLBAYgsLQASPa3FvLTp2re3w8Qz72mmBWZTwAn2Kvhwv89xy9PCeRzgAY+/L0LJCCB1QksLQA+CJxr9VkdecAU98lJhP+q7Ecrwz8EuHUDzqQmREunQ2ohOT7wYuDStRzYcNyvA9lXoi1DIL9Xh2fNTJry1CnJX8RzPqt+ZvobfVVzGfqD9LqkADjpdLMuOUZJmEY79rcXk9NNFQ+Ps1fDhf97yi4nUdHI1uvDf+SYtTT3nwCfnf49vw9IRdPs88n//d2WHNWXNgks+XC+CvDSytPOP4KkId7VdL+b4m2hLsPoxYF8+G9693rdXgQiDFJ5881TIrA3AJ/f6yL/+3gElhQASfhyn8pInwbkDLx2ZALXBiICatrbgV+p6UDFsX34V4Q/6NBZGXj59PcmN0QPehccZdpLCoDs/s8pgJp2ReBVNR1odOws/+ccfjYF1rLkZTgh8NNaDlQat9cNf5VwOewCBL4x7TvJaZyIAvcRLAC5hy6XFABRnOerCCEbZk4FZDlMOzqBfH+/aWUwyU2QwkyjWITXi4AIU00CLRD4ynRC6vFANm1rAxFYSgCk33x3z9tOLXsucJ1ag3cw7m83cDQy+0TyBjKK5Uc2mx81CbRIIJ8GHgv8I/CjFh3Up3kJLCUAsvHuC/O6uu/ebgk8ct9XjXPBaRrYGHQL4NGDII8YzZKrJoHWCeTz4MMnMfDN1p3Vv80JLCUALgb8y+ZuzXLleYEPzNLT7nZSO09DMhP++e7i/d+ZJfFSch7kCKYmgV4IJA/Bo4D8O80nVW3HCCwlAGq/7fxgynbn9/9D37DPAG5Q8Z5+JnDDiuOvNXTqUNx/rcEcRwIzE8jn3Kympox3NhBqO0JgKQGQpd2ay+9JhFFzA2Ivt8dfA3er6Ow/A1eoOP4aQx9jSr98xjUGcwwJLEggqwD5vXicmVUXpLxi10sJgLsC91hxHkcd6jnAdSuO38vQtYs1vRu4UC+wNvTzUsDrN7zWyyTQIoG8YN0WiIDXOiawlAD4W+A2FblkqSqJiLRDE/hlIAl5alnyme/6m/G9gTvXAuy4EliQQDa1ZrP1lxccw64XJLCUAMhRkpst6PdeXd8JuO9ejfzvnB34SEUOWVKsmYxojannmOOV1hjIMSRQgUCKE/0ZkKyrWmcElhIATwZ+ryILjwCWwa99XDObi5INcJctBVp+cZcn6NwkMOXzuAnwRWn0Q2ApAVA7DXDEx1P7CUM1T5OTvmahpCQbOW612a8zcN6QTrbOUI4igaoE8ikg2UVfUtULBy8msJQAyPGu6xd7MX/DHC2LD9qhCRyrch7wHNOMD7tsOZK66yJnl+Pn3PZH4L+nI693MQ37/sDVaL2UAHgSkOWgWmat+TLyPw/UzPSVRCMnKnO121bZ6Hj6br3XcQlsRiAliK8HfGmzy71qDQJLCYCkkcx3+FqWIyoPqTV4R+PmwZQHVC3L98KkJN5lyymLnLbQJDAagU8DKT3+b6NNvJf5LiUAcgyvZorX5CG4Vy9BqOjneYD3Vxz/o/A/JxF22VJYxZwUuxxh53YoAt+dsn2mCqbWGIGlBEDtRECPAG7VGOsW3bk08NqKjqVk9AUqjr/G0Ld2NWoNzI7RMIHs9UlemPwuaw0RWEoA3A54YMV5vtKz10X0/wh4TFHLZRq9BbjEMl030+uZgY8BS/1ba2aiOiKBPQjcx6RYbd0jS/0oZRNeap/Xsk8BZ6o1eEfjPnhK6VnL5ZcBV601+Irjvg74tRXHcygJtEog+8OyKpbTAlplAksJgMsDr6o4t59OCWa+V9GHHobOed2aD+CsPty8B1Bb+hjGno3eEqKX7wyBJ06ZYvM7rVUksJQAOCuQDV417TJA3ry0AxNI7JO4o2Yq3mwUTa3xEcyUwCNE2TmWEki22N93JaAU1zLtlhIAxwa+DxxzGbeLek01wrsXtRyz0QWBd1WeenbHp3LjCJbTDu8cIPXxCLF0jvMQSNG41BHQKhFYSgBkOp8EfqHSvDLsm4BLVhy/9aHzD+9BlZ28yGBnhJMd8xluCKx81zl8SwT+GvirlhwayZclBcBrgCzD17LkmT9V5Ux3teZeMm4LS9InBb5R4uwOtclxqLz5aBKQwGEEUj8gnwS0lQksKQAeDfzxyvM56nApSVzzNELl6R90+Aijz1bOw/8V4JStAlrYrxZWXxaeot1LoJjAj4GrVd44XuzsLjVcUgCkFkBqAtS0NwKXqulAo2MnVXKOANa0ZAb79ZoOVB47GyCTMVOTgATgW8D/Az4ojPUILCkAzg18YL2pHHCknDU9G/Dxyn60Nnxyc1+oslN/Cdy7sg+1h3cloHYEHL8lAh8BLsphYkBbgcCSAiB9fw04yQrzONQQD5sST1R2o5nhk5CmheORlwOyT2R0UwSMfgc4/yMSeMFUQMhEQSvcF0sKgLjfwkaz1GM/C/CFFXj2METSJF+hsqNJABJh+O3KfrQyfI+fA7J5M+IlxV60+QmcGDg+cILpL/tlzgGcs3LujvlnevQeb9/ACaU15ll9jKUFQI53tHAW/77AnarTru9AltfeVt8NRigCtF/MPYqA10+btxQB+432du1zeiZCIGWmc9Iqq3q1V1q3m9GRr84JruwHsIzwnFQP0NfSAqCV5eb/BLInITvfR7ZXA5dtAICfZQ4cBEVAAzdnhy4k4VoSeyUF+w13pMLmh4DkCTGd+4I35NICIDfmFxtZskpd9iRiGdV+C3h6I5OPCKlZhrgRDAd0QxHQcnT68O38wI2B/Js/TR8uH9DLHCW/Rcf+N+/60gIgAJ4C/G4jJFKUJRXoRrMTAlHUp21g4l+fEjT9VwO+tOqCIqDVyPTlV17AfnMqwXuBvlz/H2+zETCfOPKpSVuAwBoC4NrA8xbwfZMucxzwwgMeM3nCVHhjE2ZzX/P3wI3m7nQH++vxdEDSb0dkf2cH49H7lPJ5IPVR8m29J/uP6ZNGastoMxNYQwD8HJCsb/nfFizFZ1KEZhTLZ49nNjTZ6wDPbcifll1xJaDl6PTpW5JvPQQ4c0fu/w1wl4787cbVNQRAYDwfuGZDVG4JPLIhf5ZyJTuF3zEdI1pqjP30GxWf40zZlKmVEXAloIyTrcoJ/CxwR+AvgOOWX1atZU4FnA9IoiBtRgJrCYCoziR4aMV+OB1fyq74XbWTA0mFfK6GJvh3De0HaQjLnq64ErAnIhtsQCB5BZ4I/OoG1659yeipwxfhvZYAyGaUj1UuD3xUgPlOmQ0mqdG+a5bPLa8CLt7YxPL98a2N+dSLO64E9BKpvvw8FpC03HcFjtG461cGXtG4j125t5YACJS7Aan93JJ9aSoWtEtLS8cB/mnajNUS6/dMZ5Vb8qk3X1wJ6C1i/fibh2tW6E7RsMtJIJYaJskkqs1AYE0BkPOonwKOPYPfc3YREZBSlLuwEpC0odnkeKU5Ac3U182Bx8zU18jdKAJGjv6ycz8d8JLGEwllU3NyumgzEFhTAMTdvJleawa/5+4im9KyO73n5aVTAS+djjnOzWfb/sI3Py7m/t+W5GHX+zlgHo72cnQCeYnIse3a9UIOFpus1p4XMI/IDHfv2gIgm02yMa1Fy07TFKF4eIvO7eFTcvw/CzhTo74/aGLbqHtduuVKQJdh68Lp401ZQ3+jUW9/p6Gspo0iKnNrbQEQr/KWfcUy96q0ymmFmwCpdtaD3WwSLfn236KlUEyqMX65Rec690kR0HkAG3Y/G7ef3GjSruwFSO0DSwZveQPVEAAXA/5lS7+XvvwTUw7qlDNu1fK2n1wGybzWst1/OnPcso89+9br54CrmA+i+dsuIuDZQLK5tmbZ55TS5toWBGoIgLibb9X5AWjdXgwkaVA2L7Zi2USZAhn3aijBz8HY5Nv/WX37X/zWUQQsjnjYAZI0KA/a1nIFxKcWNzt3daPUEgCpY5269LXG30+Q8hB7FPBgICcGalke/MmhfyfgbLWc2Oe495kKkezzMptvQMDPARtA85IiAicFUuchJdVbsSz/ZzPgB1txqEc/aj6Ak5++p/K8SWObojoPnZIarRXvE00P/js0lkhpr/nnm3+yEPayl2Kv+fTw310J6CFKffp49umodCqLtmJ5KbtdK8706EdNAXDqSb2duENwyRnwtGkn6lcX8D8ZuS471fTO97cczenNUo88jLR1CSgC1uU90mg3AJ7R0IS/Nh0vTmp3bQMCNQVA3L0V8LAN/G7lkpxFfTvwGuC102eN7HrfryUdZ96W89DP368BPQqjw+cdFpdzl+5+b4PZ2vf4OeB1wNWBTf79zAbOjvYkkNoBN92z1XoNIkpyBFrbgEBtAZBdptkLcJENfG/xknyX+sxUterD056B/KBlH0GWwo8/vc3njT7FenI8LhX78k2/1WN8++UcNZ4jOh/a74W2n5WAImBWnHY2EUidkayAtlJkzCJBW9yatQVAXM/DPyIgYkDrn8A9p7oP/c+k/xn4OaD/GLY4g6xQZpWvhedHErglzfzXWwTVuk8tBDCM/mba3d46L/07NIF3A6n49wNBNUNAEdBMKHbKkewFyPJ7C5bEbU9pwZHefGhFAOQbeL4BXqI3gPr7vwTyqeOXXPpv8o7wc0CTYenaqdNOm7hzSqm2pYBR9o9o+yTQigCI22cA3gWcbJ9zsHkbBFThbcThYF4oAtqOT4/epXbKAxpwPEe089zI/2r7INCSAIjbUXEvbOTb0j4wDt805Tl7yukwasB6FAH51pysoR71au+uzabmpE0/RQOu5R5pOXV7A4iO7kJrAiAe5lhgjgdqfRDIaYdkdvxOH+4O72WPIiACM9+bLf7S3u17Z+DeDbiV58atG/CjKxdaFAA5DZB61L/eFckxnU0SpOzbSI1urR8CPYqAP+20VHc/d8Vmnv488MkG8pYkJfB5NpvCuFe1KAASjaSbfD1woXFD0/zM873t8sBbmvdUBw9EoDcRkE2myUWfPBtaWwSyApCVgJqW1aFTAktkZq05r0XHblUAZNI52/lW4IyLErDzTQj8FLjutFKzyfVe0waB3kRAjnpls6nWFoEkNPtoA3u3rjntIWuLTsPetCwAgu18wBuBLDNp7RC4LfCQdtzRky0I9CQCfgycGfjcFvP10mUI5He6dsng+wN3XGZ6u9lr6wIg1HO2/BVASlJq9Qn8FfDX9d3QgxkJ9CQC4msLR89mxL8TXd0MeGzlmeSz8aUr+9DV8D0IgAC9MPBKcwRUv7f+spEdv9VB7KADvYiA1KW/5A7y731KJwE+Dxyv4kRSb8UXxX0EoBcBkCmlwExEQAtnTveBeCeaZoNNUsq67L8T4TzoJHoQAcn9nuxz5gVo7158GXDlym4lodxnK/vQzfA9CYBA/UXgn4FTdUO4f0fz8P8T4NH9T8UZFBDooXZA9gHk6JnWFoEWBOTVgJe2haVdb3oTACF5euAF02eBdsnuhmc5enVjd/vvRjD3MYsWfsgP5W4KTuWEkNYWgVR2fUdll24HPLiyD90M36MACNwTAE8DrtUN6f4czTJa+Kb2tzYegZZFgMe92rwfk8TtK0D2A9SyR5hJthx9rwIgM4zvd59qz/c8j/JordcyyX1+A/jSekM6UoMEWhUBl5mqhzaIbHiXng9EoNWyFwPXqDV4b+PuwoPzt6fv08keqG1PIEd5klPbTVbbs9yFHlrcE3AuIDUotPYI3Au4S0W33j/tFavoQj9D74IACO0zAU8FLtUP+uY8zdJdzvJGwWsSOCKBllYCsin1xMC3DVGTBG4E/F1Fz77VQF2CitPf39C7IgAy62NM336SDeo4+8MwfOskWrrpdI53eBgCOCCBVlYCPjTVBDBMbRK4KPC2yq4dF8hxUW0PArskAA6fapIGZYOglaH2vv3/E7g98DhLre4Nyxa0sBJg2de2b8Skbf9mZRdTR+aLlX3oYvhdFAABf2zgFkDS1ma5UDsygSyjPmd6+H9aOBLYB4HaIuBiDbxh7gPXkE3zOfHkFWeeGjLvqzh+N0PvqgA4PABJC5mTAklkkyMq2mHH+rLJ783CkMCGBGqJgH8BLr6hz162HoFUBjzresMdbaQUJfL3rSAAuy4ADkeQzwIPBHJ8aFRLHfW7Tht0sgKgSWAbAjVEwOWBV2/jtNeuQuBdU+r2VQY7wCCXA15Ta/Cexh1FABxRCPwFcJ0GalevdZ98HMh30xzv+8FagzrOEATWFAHPBG44BNX+J/mGygWbrgqkLoG2B4HRBMDhOPKN6A7TD8qxdvQueS/wIODpwE92dI5Oqz6BNURARGzSzNbeXFafdh8evATIQ7iWJYNp0sVrCoBDEjgLcBPgd4FUkerdvjfl7X8y8Fp39vcezm78X1IEfBXIN10T/3RzO/DsaZW1lsfXnTY51xq/m3FHXQE4aoCSQyCbi5LE4remWgPdBHHK15+jj/n7ek+O6+vOEEgeiXxmmnNF7QvAVYD37AylMSbyj0AewrXsevA/IkRzBWDf90BqjaekZOpaX6nR0sP5lp/vbC8HXgh8bN+z9AIJzE8g/16SBe6UM3T9OiBpvj8/Q192sS4BBcC6vDcezRWAQ6MLn5wgiBjIxsELbkx6+wuzFJqNUNnckh/HLPdrEmiNwCmAe0+f1jZZDfjydFrlCcBPW5uc/hQRUAAUYarfSAFQHoMsaeXGrmVZ0srSliaBHghkf80tgesDpy1w+O3T6kH2ryhuC4A13EQB0HBwjuiaAqA8UAqAcla2lMDhBLK/JqdufnkSAqeasnPmTT/L+58C3gjke7+2GwQUAJ3EUQFQHigFQDkrW0pAAuMSUAB0EnsFQHmgFADlrGwpAQmMS0AB0EnsFQDlgVIAlLOypQQkMC4BBUAnsVcAlAdKAVDOypYSkMC4BBQAncReAVAeKAVAOStbSkAC4xJQAHQSewVAeaAUAOWsbCkBCYxLQAHQSewVAOWBUgCUs7KlBCQwLgEFQCexVwCUB0oBUM7uoW8uAAAgAElEQVTKlhKQwLgEFACdxF4BUB4oBUA5K1tKQALjElAAdBJ7BUB5oBQA5axsKQEJjEtAAdBJ7BUA5YFSAJSzsqUEJDAuAQVAJ7FXAJQHSgFQzsqWEpDAuAQUAJ3EXgFQHigFQDkrW0pAAuMSUAB0EnsFQHmgFADlrGwpAQmMS0AB0EnsFQDlgVIAlLOypQQkMC4BBUAnsVcAlAdKAVDOypYSkMC4BBQAncReAVAeKAVAOStbSkAC4xJQAHQSewVAeaAUAOWsbCkBCYxLQAHQSewVAOWBUgCUs7KlBCQwLgEFQCexVwCUB0oBUM7KlhKQwLgEFACdxF4BUB4oBUA5K1tKQALjElAAdBJ7BUB5oBQA5axsKQEJjEtAAdBJ7BUA5YFSAJSzsqUEJDAuAQVAJ7FXAJQHSgFQzsqWEpDAuAQUAJ3EXgFQHigFQDkrW0pAAuMSUAB0EnsFQHmgFADlrGwpAQmMS0AB0EnsFQDlgVIAlLOypQQkMC4BBUAnsVcAlAdKAVDOypYSkMC4BBQAncReAVAeKAVAOStbSkAC4xJQAHQSewVAeaAUAOWsbCkBCYxLQAHQSewVAOWBUgCUs7KlBCQwLgEFQCexVwCUB0oBUM7KlhKQwLgEFACdxF4BUB4oBUA5K1tKQALjElAAdBJ7BUB5oBQA5axsKQEJjEtAAdBJ7BUA5YFSAJSzsqUEJDAuAQVAJ7FXAJQHSgFQzsqWEpDAuAQUAJ3EXgFQHigFQDkrW0pAAuMSUAB0EnsFQHmgFADlrGwpAQmMS0AB0EnsFQDlgVIAlLOypQQkMC4BBUAnsVcAlAdKAVDOypYSkMC4BBQAncReAVAeKAVAOStbSkAC4xJQAHQSewVAeaAUAOWsbCkBCYxLQAHQSewVAOWBUgCUs7KlBCQwLgEFQCexVwCUB0oBUM7KlhKQwLgEFACdxF4BUB4oBUA5K1tKQALjElAAdBJ7BUB5oBQA5axsKQEJjEtAAdBJ7BUA5YFSAJSzsqUEJDAuAQVAJ7FXAJQHSgFQzsqWEpDAuAQUAJ3EXgFQHigFQDkrW0pAAuMSUAB0EnsFQHmgFADlrGwpAQmMS0AB0EnsFQDlgVIAlLOypQQkMC4BBUAnsVcAlAdKAVDOypYSkMC4BBQAncReAVAeKAVAOStbSkAC4xJQAHQSewVAeaAUAOWsbCkBCYxLQAHQSewVAOWBUgCUs7KlBCQwLgEFQCexVwCUB0oBUM7KlhKQwLgEFACdxF4BUB4oBUA5K1tKQALjElAAdBJ7BUB5oBQA5axsKQEJjEtAAdBJ7BUA5YFSAJSzsqUEJDAuAQVAJ7FXAJQHSgFQzsqWEpDAuAQUAJ3EXgFQHigFQDkrW0pAAuMSUAB0EnsFQHmgFADlrGwpAQmMS0AB0EnsFQDlgVIAlLOypQQkMC4BBUAnsVcAlAdKAVDOypYSkMC4BBQAncReAVAeKAVAOStbSkAC4xJQAHQSewVAeaAUAOWsbCkBCYxLQAHQSewVAOWBUgCUs7KlBCQwLgEFQCexVwCUB0oBUM7KlhKQwLgEFACdxF4BUB4oBUA5K1tKQALjElAAdBJ7BUB5oBQA5axsKQEJjEtAAdBJ7BUA5YFSAJSzsqUEJDAuAQVAJ7FXAJQHSgFQzsqWEpDAuAQUAJ3EXgFQHigFQDkrW0pAAuMSUAB0EnsFQHmgFADlrGwpAQmMS0AB0EnsFQDlgVIAlLOypQQkMC4BBUAnsVcAlAdKAVDOypYSkMC4BBQAncReAVAeKAVAOStbSkAC4xJQAHQSewVAeaAUAOWsbCkBCYxLQAHQSewVAOWBUgCUs7KlBCQwLgEFQCexVwCUB0oBUM7KlhKQwLgEFACdxF4BUB4oBUA5K1tKQALjElAAdBJ7BUB5oBQA5axsKQEJjEtAAdBJ7BUA5YFSAJSzsqUEJDAuAQVAJ7FXAJQHSgFQzsqWEpDAuAQUAJ3EXgFQHigFQDkrW0pAAuMSUAB0EnsFQHmgFADlrGwpAQmMS0AB0EnsFQDlgVIAlLOypQQkMC4BBUAnsVcAlAdKAVDOypYSkMC4BBQAncReAVAeKAVAOStbSkAC4xJQAHQSewVAeaAUAOWsbCkBCYxLQAHQSewVAOWBUgCUs7KlBCQwLgEFQCexVwCUB0oBUM7KlhKQwLgEFACdxF4BUB4oBUA5K1tKQALjElAAdBJ7BUB5oBQA5axsKQEJjEtAAdBJ7BUA5YFSAJSzsqUEJDAuAQVAJ7FXAJQHSgFQzsqWEpDAuAQUAJ3EXgFQHigFQDkrW0pAAuMSUAB0EnsFQHmgFADlrGwpAQmMS0AB0EnsFQDlgVIAlLOypQQkMC4BBUAnsVcAlAdKAVDOypYSkMC4BBQAncReAVAeKAVAOStbSkAC4xJQAHQSewVAeaAUAOWsbCkBCYxLQAHQSewVAOWBUgCUs7KlBCQwLgEFQCexVwCUB0oBUM7KlhKQwLgEFACdxF4BUB4oBUA5K1tKQALjElAAdBJ7BUB5oBQA5axsKQEJjEtAAdBJ7BUA5YFSAJSzsqUEJDAuAQVAJ7FXAJQHSgFQzsqWEpDAuAQUAJ3EXgFQHigFQDkrW0pAAuMSUAB0EnsFQHmgFADlrGwpAQmMS0AB0EnsFQDlgVIAlLOypQQkMC4BBUAnsVcAlAdKAVDOypYSkMC4BBQAncReAVAeKAVAOStbSkAC4xJQAHQSewVAeaAUAOWsbCkBCYxLQAHQSewVAOWBUgCUs7KlBCQwLgEFQCexVwCUB0oBUM7KlhKQwLgEFACdxF4BUB4oBUA5K1tKQALjElAAdBJ7BUB5oBQA5axsKQEJjEtAAdBJ7BUA5YFSAJSzsqUEJDAuAQVAJ7FXAJQHSgFQzsqWEpDAuAQUAJ3EXgFQHigFQDkrW0pAAuMSUAB0EnsFQHmgFADlrGwpAQmMS0AB0EnsFQDlgVIAlLOypQQkMC4BBUAnsVcAlAdKAVDOypYSkMC4BBQAncReAVAeKAVAOStbSkAC4xJQAHQSewVAeaAUAOWsbCkBCYxLQAHQSewVAOWBUgCUs7KlBCQwLgEFQCexVwCUB0oBUM7KlhKQwLgEFACdxF4BUB4oBUA5K1tKQALjElAAdBJ7BUB5oBQA5axsKQEJjEtAAdBJ7BUA5YFSAJSzsqUEJDAuAQVAJ7FXAJQHSgFQzsqWEpDAuAQUAJ3EXgFQHigFQDkrW0pAAuMSUAB0EnsFQHmgFADlrGwpAQmMS0AB0EnsFQDlgVIAlLOypQQkMC4BBUAnsVcAlAdKAVDOypYSkMC4BBQAncReAVAeKAVAOStbSkAC4xJQAHQSewVAeaAUAOWsbCkBCYxLQAHQSewVAOWBUgCUs7KlBCQwLgEFQCexVwCUB0oBUM7KlhKQwLgEFACdxF4BUB4oBUA5K1tKQALjElAAdBJ7BUB5oBQA5axsKQEJjEtAAdBJ7BUA5YFSAJSzsqUEJDAuAQVAJ7FXAJQHSgFQzsqWEpDAuAQUAJ3EXgFQHigFQDkrW0pAAuMSUAB0EnsFQHmgFADlrGwpAQmMS0AB0EnsFQDlgVIAlLOypQQkMC4BBUAnsVcAlAdKAVDOypYSkMC4BBQAncReAVAeKAVAOStbSkAC4xJQAHQSewVAeaAUAOWsbCkBCYxLQAHQSewVAOWBUgCUs7KlBCQwLgEFQCexVwCUB0oBUM7KlhKQwLgEFACdxF4BUB4oBUA5K1tKQALjElAAdBJ7BUB5oBQA5axsKQEJjEtAAdBJ7BUA5YFSAJSzsqUEJDAuAQVAJ7FXAJQHSgFQzsqWEpDAuAQUAJ3EXgFQHigFQDkrW0pAAuMSUAB0EnsFQHmgFADlrGwpAQmMS0AB0EnsFQDlgVIAlLOypQQkMC4BBUAnsVcAlAdKAVDOypYSkMC4BBQAncReAVAeKAVAOStbSkAC4xJQAHQSewVAeaAUAOWsbCkBCYxLQAHQSewVAOWBUgCUs7KlBCQwLgEFQCexVwCUB0oBUM7KlhKQwLgEFACdxF4BUB4oBUA5K1tKQALjElAAdBJ7BUB5oBQA5axsKQEJjEtAAdBJ7BUA5YFSAJSzsqUEJDAuAQVAJ7FXAJQHSgFQzsqWEpDAuAQUAJ3EXgFQHigFQDkrW0pAAuMSUAB0EnsFQHmgFADlrGwpAQmMS0AB0EnsFQDlgVIAlLOy5d4ETgf8KnBG4LTAKYFvAl8CPg/8K/DvwE/37soWEmiKgAKgqXAc3BkFQHmgFADlrGx5YALHB24C/C7wSwWQvgA8E3g48ImC9jaRQAsEFAAtRKHABwVAAaSpiQKgnJUtj0zgmMDNgHsAJ98Azn8BTwLuAnx1g+u9RAJLE4i4vQxwZeD6G97nc/n4buA5wCuAf3MVzRWAOW4sBcAcFMfr4/TA04FLzTD1LwM3nn7YZujOLiSwFYFzAteYHvr5nHXcrXpb5uL8m3kl8HLgxcC3lhmmz15dASiPmwKgnJUtDyNw3umHJyJgLvsJ8KfAo+bq0H4ksA8CPw9cE7gRcDmgp2fID4EXAk8DXgZkZW1o6yl4tQN1HeDZFZ3IklZEiNYHgXMBb1xwKfSOwP37QKGXnRPIc+IK0/6VawHH63w+cf+zkxDIp7WP7sB8NpqCAqAcW278fypvPnvLlwJXm71XO1yCwEmmb49nWqLzI/SpCFgY8ODdH2P6zbk7cJEdZZFTNvltvSfw9h2d40GnpQAoj/hVgZeUN5+95RuAX5u9VztcgkB27mcj1BqmCFiD8lhjHAe4wbTp9BwDTf3NwP2AF40yZwVAeaQvD7yqvPnsLd8FXHj2Xu1wbgJXrLBJTxEwdxTH7C9v/H8A/BVwmjER/M+s87J1O+Adu85AAVAe4UtON0b5FfO2zHeqs8/bpb0tQOCtwK8s0O9eXSoC9iLkfz8UgYsCD6t077YYmf8G/h74c+CLLTo4h08KgHKK5wfeU9589pZfmbLFzd6xHc5G4GLAv8zW2/47UgTsn9noVyQj5X2A3+lsR/9acfsu8MCJUU4R7JQpAMrDmXStnytvvkjLHMH59iI92+kcBJKx75ZzdLRFH4qALeANdGl++28xffNOEh/t0AQ+OOXg2KnPAgqA8ts+G2NqK8Ckj31nucu2XJnARxr5TPOXwL1XnrvD9UPgVMATgKv343ITniZvwIOAuwI/bsKjLZ1QAOwPYN6+T7i/S2ZtnWW6ZJXT2iNwosayjLkS0N490oJHyWfyGOBkLTjTqQ9vmxIh/Uen/v+v2wqA/UXwA8C593fJrK2TSz5ncrX2COS+yP3RkrkS0FI06vrys8Cjp0JUdT3ZjdH/E7j5tFGw2xkpAPYXuuQBSD6AWvZ84Nq1BnfcQxK4NPDaBhllF/MDGvRLl9YjkP1LSWKWnf7avARycuK2vRYcUgDs72Z45LRxZn9Xzdf668Aper3Z5sPQZE+/DrygSc8OO8qkCGg0OAu7dcHpvjzjwuOM3H3qCtywsU+ARfFQABRh+t9Gt2/ghzTJgJIUSGuLQO0jgHvRUATsRWj3/ntqhzwF+Lndm1pzM8oG4LwEfLg5zw7hkAJgf9HKrtnaaSKToerB+3Pb1isQ+AXgkyuMs80Q7gnYhl5f195m+p3wN369uKX0cIomvXe9IbcbyZtjf/yyjPap/V0ye+vsQ/D4zuxYt+4wx0S/A+R/WzZXAlqOzjy+3cFKkfOA3KCXbwBX7qWwkAJgfxEOr3yHP/H+Lpu19fenPN3fmrVXO5uDwJuAS8zR0cJ9KAIWBlyx+xz/vG/F8R0avglcBUha8KZNAbD/8KRQROoC1LQU7HhiTQcc+4AEenrzUgTs3k2cIj4eE24jrjkmeA3gdW24c2AvFAD7j052U2czYE2zNHBN+gcfO3nVPwEcu033juaVIqCTQBW4eSfgbwra2WQ9AvkkmJfFmjVkDjlbBcD+b4acw3/e/i+b9YpUqjrr9LCZtWM725rAk4Hf27qX9TpQBKzHeqmRstv/mUDK+WptEfg8kBNCn2nLrcO8UQDsPyqnnMpD1mZ3rykn9f5n4BVLEjgDkMIhPRVYUQQseUcs2/evAq8CjrfsMPa+BYH3AYlTc/u2aj/EtmBa9dKc9TxHVQ8gu03PZHXAylE48PCpCJjKgD2ZIqCnaB3ma1YBU346ycG0tgm8Yjq9lYJCzZgCYLNQPAL4k80unfWqfPdzx++sSGfpLP+usiR7vVl6W68TRcB6rLcdKaXBU5r2bNt25PWrEchz41arjVYwkAKgANIBmrSQEChuJfHEmYHvbTYNr1qQwHGBlwKXXXCMJbpWBCxBdf4+UxX0t+bv1h4XJpCUwXk5aMIUAJuFId93v9rIdzczA24WwzWuSgrWJG5KoaCeTBHQdrRuBjy2bRf17iAEkiPgQq1kDVUAbH6fvhy40uaXz3ZlNpaca9qYOFundjQbgYjFFysCZuM5ekfnnbLMmd+/3zvh7dOmwB/XnoICYPMI/D7whM0vn/XKLAf+zqw92tmcBPJjnRoSvX0OsHbAnHfB9n3lPvpX4Dzbd2UPlQncB7hzZR88BrhFAE4yvXW3kvv9csBrtpiPly5LoFcRcBcTzCx7Y+yj9/sDyTap9U/gp8DFgbfVnIorANvRz/fdq27XxWxX5+z5RYDUCtDaJODngDbj0oNX5wPe2VGWyb2Y/hBICd38fRz4GpD0ud+d/lJvJf9e8ndq4JzT0esUZNuV51bi+SvAT/aCtdR/3xWQS/HZq9/sws3yeyuWTxJ/2Ioz+nFAAooAb4z9Esjv9Bs7KTR1sLnlAf/6aZXytUByqWzy4MtK2kWnz2mXmR6gvaTePhCbP62ZM0QBsN9/ikdun6NenwVOvl03s159Y+Bps/ZoZ3MT8HPA3ER3u78U/3p8h1P8wbT3Jb9HLwOWSIKTfAjXBG4E5DNob8+0b097Oj5XI769warBaK8xHwLceq9GK/73LKNFIeeTgNYuAUVAu7FpybOTTW/L+d9eLEv6KZr299Oy/lp+n2X6LY5g6umUxLOAG6wF6YjjKAC2p55jOcn13JJ9YKpC9fWWnNKXoxHwc4A3xV4EWqg+upePh//3D00bRp+x0Nt+qR+p13JbICm5T1B6UcV2Ke6Wl7ZkdlzVFADz4E4xjsvP09VsvWR3aZbEsqlGa5eAKwHtxqa2Z9n89rEO3maTiTRCJeWIf1Qb2hHGPw1wv+nzQENuHdCV5Aq5xtpOKgDmIX7l6RvXPL3N10tOKVyrshqfbza725MiYHdju83MHjy9yW7Tx9LXPn/Kb5+9UK3aFYFHA/lE0LKlbPCqxwIVAPPcDuH4XuAX5+lu1l7+DrjphjtuZ3XEzg5JwM8B3iBHJJC31482/PafY3x3BB7aSdhONKVPrvKtvZBRsstepbDtLM0UALNg/J9Osgs1D9sW7XnAbwPZlau1S0AR0G5s1vbsYa1VjjsCgP+YKl2+e20oM4yXKq4PAnKCq0W7BPCWtRxTAMxH+pjAvwPnnq/LWXvKGdwcl0ntAK1dAn4OaDc2a3mWo205FhZB2JolFfHVgK+05tg+/En+gHy6yKpAa/Zc4DprOaUAmJd0lpeyA7ZVi2JPKeMqZ05bhdKgX64ENBiUFV1KcpgWl9ZfDVwb+M6KLJYaKpkVs+R+2qUG2LDf5Eo401q/0QqADaN0kMuOAbwLOP+83c7aW5R7kgXl5tfaJaAIaDc2S3uWY8U5XtySpZjVbwLVK9jNCOUcU4bFHBtsye4G3HMNhxQA81PO0bt/nr/bWXvMudOHA7ffsX/Qs0JqoDM/BzQQhJVduNSUMnflYQ853FunY867eKQ4L2v5PJraA63YZ4Azr7FxWwGwTMijlrPU3rq9CUhZ4xTk0NokkJWAHOf8tTbdO6hXfz6dDe/M7eruJnteNuy2YtnXlHvvG604tIAfeWl7KdBKZddM8denNMoLTPf/ulQALIP3rMD7G95pesRZZ0kvZ2RT9jVphLX2CLgS0F5MlvAom9K+BBxvic436DMbhi88Vevb4PKuLrkVkJMXrVg2KWa/xaKmAFgOb7Ji3Wm57mfv+ZNTHu0Xzt6zHc5BwJWAOSi23Udrm4hT7bTlTc1zR/M50z6HufvdpL+UdT/F0plcFQCbhKbsmpwzzYbAVo8FHmwWOSkQ8ZJ/DNkroLVDwJWAdmKxhCf/ANxwiY436PNRQM7Mj2TZB/Bv0/f3FuadLK4vWNIRBcCSdA/7dpba1z1yfs8kBHIudZO63cuSHbd3VwJ2M/apaf/lRjajZRPaeQb9JJi0wa9o5BZ7CnCTJX3p8cG0JI8l+o6SvvkSHa/U5xemZcBkOYwo0OoTUATUj8HcHlypoaO5Oe6X7KGjWiufAr4GpCBUcgMsYgqARbAeqdMs274TONfyQy0+QuodPHM65pilMlcGFkd+0AEUAfXYLzHyI4FbLNHxPvtcPR/9Pv1bo/npgQ82Uko4q8hvWGrSCoClyB653+yk/ZfGjplsO/NvTjfma6Y61h8Gvrptp16/LwKKgH3harpxHjgtvCT80vTC0jSsFZxLGeEcZa1tfwX89VJOKACWInv0fpN0JzWzd9myZJWcAvnLcaYcK8xfEojs8jnimjGNCEjZ2JPUdGKDsc0T8H/Qsvks/3aSSbSm5Sx88vxrcCrgE8DPVobxMuCqS/mgAFiK7NH7DetnAdddb0hHkkDTBJJ7IidORrcrA/mhr22XBJIcTDuMQAsVGbPSetKlTmQpANa91U8AvG3aYbvuyI4mgTYJKAIgud8XW+YtDPs7gF8ubDtKsyR0S+nj2s/JfBrKJ9bZrfbEZp9QBx0mmMmtnZKfmgQkcNi31l3/PHaoOOftP6sANS0VCFMfRDsygayIXKIylBwFzJHA2U0BMDvSog4vPZ01bSn3dJHjNpLAQgRGXgnI5tmTLcS1pNukAz8dkEqh2pEJ/BHwmMpQkqp9kRMiCoB6kY2qe1K94R1ZAs0RuC3wkOa8Wtahkzfw4E2xqR6Kly0biQP3ns212dCcRE217NVTNcbZx1cAzI50Xx3miMfd93WFjSWwuwSSejqpcLNZdhTLd/e3V57srRsrhFMZx9GGfzNw8YpOfRzIfoTZTQEwO9J9d5gjXHnz0SQgAfgOcJFp89UIPK4/JdeqOdfzAe+r6UDjY98T+MuKPiYTYI4jzp4RUAFQMarT0IlB0gX/cX1X9EACTRBIcqnUaB/B/gK4T8WJpv5A0s1a+OvgQbgskGX4mnZmIBVbZzUFwKw4N+4sCUAeB/z+xj14oQR2i0AS0iQxza7bY4GbVZzki4Bfrzh+D0Mn2VZWpmo+LyOII4xntZoTmnUiO9BZYvFQ4FY7MBenIIFtCbweyGmZXbdUnksFulr2QOAOtQbvaNxPA2eo6G9eDmffNK4AqBjRgwydzGh3as8tPZLAqgSyJJ2NT0nHusuWnCC/UnGCfwg8oeL4vQz9z5U/Sy1yQkYB0Obtd8vpONQx23RPrySwCoHbTKtiqwxWaZBU2MwmvFp2KeCNtQbvaNxHAH9S0d+7Aveae3wFwNxE5+vvGsAzgHx/0iQwIoHUZd/12hk54pUNXrVssTSztSa00Li10zXfd4mVYQXAQnfLTN3mONTzgDPO1J/dSKAnAv8KXLQnhzfw9YscVnmuliUD4OdrDd7RuFmCz5HtWpY0zUnXPKspAGbFuUhnSRGalYArLNK7nUqgXQKfrbzxag0y2V2eImG1LDVJvl1r8I7G/QPg8RX9zQbA2U+JKQAqRnQfQ2cvwL05rGiKMdsHOJt2TeCHwPG6nsHezie5S829PscCfrK3m8O3uMH0IlYLxDOnLJmzju/DZFaci3eWs6BPnQp3LD6YA0igMoEUpzllZR+WHv5HlfPMZ4/R95ae5A70/3vAkyvO4+nA78w9vgJgbqLL95fiITm2c83lh3IECVQlkB3yF6jqwfKD/2fljb7Zf5BsgNqhCSQ/y8MqQor4uOnc4ysA5ia6Xn83mjalRBBoEthFAkmSc+VdnNgR5vR1IBXnatnZgI/VGryjce88fYat5XJKEt987sEVAHMTXbe//HDkeEjNVKLrztjRRiKQIiw5frXL9hng9BUnmGqE76g4fi9D379yxsScQLjd3LAUAHMTrdNf9gakjvov1hneUSWwCIFLAm9apOd2On135c8c2dw2UvnlTSP/T8C1Nr14huuyAjF70SgFwAyRaaSL7OZNWs97AH4WaCQourExgU8BZwF+unEPfVyYKnOpNlfL7j79ZtQav5dxPwCcu6KzWeWd/RiiAqBiRBcaOmeKk7IyZUZPvNAYdiuBpQn8GfC3Sw/SQP95+75eRT/+AfjtiuP3MHRerr4LHKeis785JYWb1QUFwKw4m+rspMDtgdQVOGFTnumMBA5NIN/F87aVH91dt1Tjm/3b7j6g5c32vPtoP2LT1GrIiZSaloyYyYw5qykAZsXZZGfJ9PVHU5nhmpuNmoSjU00SWORtp8mZHibQk+a1lqXq4mmBpCTWDkzg1tMeq5p8TgF8dW4HFABzE223v2NPS40RA9lcpUmgRQKPBf64RccW8unqwIsW6ru02xsCyTSnHZjA8yvnXUm66BMtERwFwBJU2+8zFcCS2zqZpWoWImmflB6uSSDn/lMF88drDlp5rHMCH6rsQxKLZQOxdnQC+f6fjJQ191O9C7jwEsFRACxBtZ8+jwFcfCq5en3FQD+B20FPc9zvKkAy441kqQOQYjw/V3HSX5s+AyQtsXZkArknX1oZStK/JxXx7KYAmB1ptx1G6UYMJPNa/i5o4aFuY9mb468DshQ+wqa/A8Umm7t+qXLQklr8hZV9aHH4nJLIJ5Kals3cD1rCAQXAElR3o89TT3sFLgHkL4IgIkGTwJwERn/4h+UTl8jzvs8gPRe4zj6v2fXm+e7+hcqrM2F8JeCVS8BWACxBdTf7zBJljgudH8Ode/wAAAxCSURBVMixmGQdTKKWnCzIBkNNAvsl4MP/MGL5/v64/cKbuX1KL58V+NzM/fbcXfKpPKLyBJII62TAN5fwQwGwBNWx+syqQETAGYEcVclfMhGmTkGSEsXyv4qE5e6LpIJO3oeezIf//0XrPMD7GwheEi8lAZN22O/VR4AzVYaxaEVMBUDl6Dq8BLYkkCQySSbTk4264e9gMcrvcM541xZx35seeNn1Prql9G4+zdS2R02ZXRfxQwGwCFY7lcAqBHz4r4J5lUHyDf43Vhnp0IOk6t0dG/CjpgvHBd4HpFRybbsu8JylnFAALEXWfiWwLAEf/svyXbv3FvYBZM45CpgNvx9cG0BD490FuFcD/vzX9El1ke//mZ8CoIEo64IE9knAh/8+gXXQPPtoUgOhBXs9cBkgaYJHs+xlSn2E4zcw8TcCl1rSDwXAknTtWwLzE/DhPz/TVnpMxre8fbdgNwae1oIjK/qQ5+GLgauuOOahhkpF1/st6YsCYEm69i2BeQn48J+XZ2u93Rm4dyNOJSNjkhN9uBF/1nDjtsCD1xiocIzsQfhYYduNmikANsLmRRJYnYAP/9WRrz5g8mp8tKFPszmCdjHg+6uTWH/AXwZyOuU46w99wBHfNrFf1B0FwKJ47VwCsxDw4T8Lxi46eTuQh1ErlqNwKRy2y5aCaG9t4Mz/ERknH0PyMixqCoBF8dq5BLYm4MN/a4RddZBSyI9uzON7AndrzKe53DkhkKRUi1Tb29DJnMTIptDF8zEoADaMkJdJYAUCPvxXgNzYEMma+XkgD6aW7DbAQ1tyaAZfstz/IuCKM/Q1Zxf/CKQ66+KmAFgcsQNIYCMCPvw3wrYTFz0B+P3GZpKc9H8KPLIxvzZ1J8f88qBtZcf/EecRQfKqTSe2n+sUAPuhZVsJrEPAh/86nFsdJYW2sgGvxd/nHEu7U+c5ApJyOaWPU+W0NUsGwhRcWyUHQ4s3WGsB0R8JrEkgm38Wqf294CTM7T8/3JcBV56/21l6fDJwC+AHs/S2bifnBJ4PnGvdYYtH+z3gqcWtt2yoANgSoJdLYEYCPvxnhNl5V5dfaxl4Q07vnr5Tp2JeL/bbwGOOUKW0Nb9TijlHQbMJcBVTAKyC2UEksCcBH/57IhquQVZWWlymPjwQ3wFuCfxd45E50ZTgp7V9FUfFFpar7rFQADR+5+reEAR8+A8R5n1P8rLAq/d91foXvGH6JPD+9Yfec8RrTA/VM+zZsm6DTwPnAH64phsKgDVpO5YEjk7Ah793xaEIvGYqzNM6pSxbPwx4APDlBpy9KHAfICKqB7sZ8Pi1HVUArE3c8STwfwR8+Hs37EUgxYHeARxzr4aN/Pe8wWYTW5IHfbaCT78K3BG4eoWxNx0yKyeJc8r/rmoKgFVxO5gE/peAD39vhlICLeYF2Mv3rAi8ZNof8NKFN7Ylle8NgVQwvNBejjX43y8HZKVndVMArI7cASWAD39vgv0QyAMuVfl+fj8XNdT2a8ALpodcHnRf2NK3Y0xn5S8DXAnIA/RYW/ZZ6/LnAb9Za3AFQC3yjjsqAR/+o0Z+u3nnG/Fjt+uimas/CLxnEjURNh8HvgqkBPF3p/89yXRcL6mRI4Byfj+b5HJ+P9/3T97MbDZ35NvAeYAc/6tiCoAq2B10UAI+/AcN/AzTzm910sPmbVfbDQJJplS18JMCYDduJGfRPgEf/u3HqHUP8wb8b0Dy2Gt9E3j9dEIhNRaqmQKgGnoHHoiAD/+Bgr3wVP9oyma38DB2vyCBb067/j+14BhFXSsAijDZSAIbE/DhvzE6LzwIgVSxu650uiXwW8AzWvBeAdBCFPRhVwncfkqM0tP8Xjedoc5mLK1NAicD3gn8Qpvu6dUhCDwOyCpOE6YAaCIMOrGDBJJ3PJm9evo35sO/nxvxAsBbgJ/rx+XhPX07cKm10/0einpPP07D3z0C6IbALwFvBo7TjcdgSd+OgjW5ehPgSf25PaTHSY+c34XPtDR7BUBL0dCXXSBwXOC905nlXubjm38vkTq6n/cD/rxf94fw/AfT8c2s2DRlCoCmwqEzO0DgDsD9O5qHD/+OgnUAV/Mb/jQgte619gj8N/A7wD+051pf3ydb5KdPEjgigbz9fxI4dSdYXPbvJFB7uHk84GXApXdjOjs1i9sAD211Rq4AtBoZ/eqRQAqSNKn0DwDTh3+Pd9jBfc5mwFcAqYantUHgrsC92nDlwF4oAFqOjr71RiCFPa7dgdMu+3cQpA1cTP78V3daEW+D6TZ9SfZm/EXTHnZ2RKl1lvo3NoFUKMtO35zRbtl8+Lccne19O/FUhvfi23dlDxsS6OLhn7m5ArBhhL1MAkchcBrg841Tcdm/8QDN5F5qBTwfuPxM/dlNGYFs+MuJjAeWNa/fSgFQPwZ6sBsELjQVaml1Nj78W43MMn5lQ2pyBCTtrLY8gR8BfzCdyFh+tJlGUADMBNJuhidw1WnptUUQPvxbjMryPuX3/e7T3/KjjTvCN4DfBF7bGwIFQG8R099WCVx5OorVmn8+/FuLyPr+/N5Udz7HBbV5CXwA+A3gw/N2u05vCoB1ODvK7hO4IPCuxqbpw7+xgFR0J/fnc4GzVPRh14Z+AfC7wLd6nZgCoNfI6XdrBE4FfLEhp3z4NxSMRlw5KfCETo6qNoLsgG4kte8dgYcD2fjXrSkAug2djjdGIP+WvtLIMUCP+jV2czTmzo2BRwInaMyvHtzJkn/SLr+7B2f38lEBsBch/7sEygk8Z9oMVH7F/C19+M/PdBd7PDuQ2vSmDy6L7n9Nx/v+GsgKwE6YAmAnwugkGiFwfeCZFX1x2b8i/A6Hzu9/jq6leFUSCGkHJvCOidN7dg2QAmDXIup8ahLI2etPAEkKtLb58F+b+O6Ml+yVdwP+BDjm7kxr65l8Dbgn8AjgJ1v31mAHCoAGg6JLXRO4XYVMYC77d33LNON8Tgoki93lmvGojiNZ4s9DP4V8ut3hX4JOAVBCyTYSKCdwHOC9wDnLL9mqpQ//rfB58QEIXAK4B3DZwegkm99Tprl/boS5KwBGiLJzXJvARYC3ABEDS5rL/kvSte/LAHcAkuRql58V3wEeDzwE+MxIYd/loI4UR+faHoGbAE9c8IfTN//2Yr6rHp0XuA1wgx07OvjR6SRETkPs9FL/wW5MBcCu/pN1Xi0QuDXwtwuIgFdMxw2/28Ik9WEYAiecRMBNgV9Z4L5eA+T3pkqJSYgUEd11Ip9tgSkAtiXo9RI4NIEcDczyYn4857DHAH8K/HiOzuxDAhsSODNwvekvlTBbfpZ8H4hofhbwIkDhPAW95aBteF96mQSaI5CkK3lwb7OpKt8mswz7vOZmp0OjEzjttE/gKlNioZNXBpK3+g8Br5oKdL0eiAjQjkJAAeAtIYH1CFxt2lR1qX28MX0KeOj0rdI3l/Vi5UibEcgz5VzAxYGLARcAzgMcf7Puiq5KDY5/n4pxvXnagPvVoisHb6QAGPwGcPpVCGT59BrAJYEzAnmDSjGh1BX/MpAjSG8HXjn9mP20ipcOKoF5CBxjqkKYlbDc+2cCTg+cAshqQf4OFwjJSJjn0g+BfK+P5WGepDz5y/+dZFuH/31w+v/N4+lgvSgABgu405WABCQgAQmEgALA+0ACEpCABCQwIAEFwIBBd8oSkIAEJCABBYD3gAQkIAEJSGBAAgqAAYPulCUgAQlIQAIKAO8BCUhAAhKQwIAEFAADBt0pS0ACEpCABBQA3gMSkIAEJCCBAQkoAAYMulOWgAQkIAEJKAC8ByQgAQlIQAIDElAADBh0pywBCUhAAhJQAHgPSEACEpCABAYkoAAYMOhOWQISkIAEJKAA8B6QgAQkIAEJDEhAATBg0J2yBCQgAQlIQAHgPSABCUhAAhIYkIACYMCgO2UJSEACEpCAAsB7QAISkIAEJDAgAQXAgEF3yhKQgAQkIAEFgPeABCQgAQlIYEACCoABg+6UJSABCUhAAgoA7wEJSEACEpDAgAQUAAMG3SlLQAISkIAEFADeAxKQgAQkIIEBCSgABgy6U5aABCQgAQkoALwHJCABCUhAAgMSUAAMGHSnLAEJSEACElAAeA9IQAISkIAEBiSgABgw6E5ZAhKQgAQkoADwHpCABCQgAQkMSEABMGDQnbIEJCABCUhAAeA9IAEJSEACEhiQwP8Hx2JMpkJJK5AAAAAASUVORK5CYII=\",\n      \"created\": 1689638440722,\n      \"lastRetrieved\": 1689638440722\n    }\n  }\n}"
  },
  {
    "path": "test/cloudformation/README.md",
    "content": "## Deploying the Github Actions CloudFormation Stack\n\n### Deploying ManagedPrometheus and its Policy\n```console\naws cloudformation deploy \\\n    --stack-name GithubActionsManagedPrometheus \\\n    --template-file prometheus_cloudformation.yaml \\\n    --capabilities CAPABILITY_NAMED_IAM\n```\n\n### Deploy Timestream\n```console\naws cloudformation deploy \\\n   --stack-name GithubActionsTimestream \\\n   --template-file timestream_cloudformation.yaml \\\n   --parameter-overrides \"DatabaseName=karpenterTesting\" \"TableName=scaleTestDurations\" \"SweeperTableName=sweeperCleanedResources\" \"ResourceCountTableName=resourceCount\"\n```\n\n### [Optional] Deploying ManagedGrafana and its Policy\n```console\naws cloudformation deploy \\\n    --stack-name GithubActionsManagedGrafana \\\n    --template-file grafana_cloudformation.yaml \\\n    --parameter-overrides \"PrometheusWorkspaceID=<workspace-id>\" \\\n    --capabilities CAPABILITY_NAMED_IAM\n```\n\n### Deploying IAM Policies and OIDC Provider\n\n```console\naws cloudformation deploy --stack-name GithubActionsIAM \\\n    --template-file iam_cloudformation.yaml \\\n    --parameter-overrides \"DatabaseName=karpenterTesting\" \"TableName=scaleTestDurations\" \"SweeperTableName=sweeperCleanedResources\" \"ResourceCountTableName=resourceCount\" \"Repository=aws/karpenter-provider-aws\" Branches=\"*\" \"PrometheusWorkspaceID=<workspace-id>\" Regions=\"us-east-2,us-west-2,...\" \\\n    --capabilities CAPABILITY_NAMED_IAM\n```\n\n_Note: If deploying this cloudformation stack to reference back to your own repository, ensure you replace the `Repository` parameter override with your fully-qualified repository name in the format `<organization>/<repo-name>`. This parameter (along with the `Branches` parameter) tells the OIDC provider that is deployed for the action to reach out to, which branches and repos it should allow tokens to come from._"
  },
  {
    "path": "test/cloudformation/grafana_cloudformation.yaml",
    "content": "AWSTemplateFormatVersion: \"2010-09-09\"\nDescription: Resources used for monitoring the GHA test runs using Grafana\nParameters:\n  PrometheusWorkspaceID:\n    Type: String\n    Description: \"Prometheus workspace to give access to Grafana to query metrics from\"\nResources:\n  GrafanaWorkspace:\n    Type: AWS::Grafana::Workspace\n    Properties:\n      Name: KarpenterTestMonitoring\n      Description: Amazon Grafana Workspace for Karpenter Test Monitoring\n      AccountAccessType: CURRENT_ACCOUNT\n      PermissionType: CUSTOMER_MANAGED\n      RoleArn: !Ref GrafanaWorkspaceRole\n      AuthenticationProviders:\n        - SAML\n      SamlConfiguration:\n        IdpMetadata:\n          Xml: >-\n            <?xml version=\"1.0\" encoding=\"UTF-8\"?>\n            <md:EntityDescriptor xmlns:md=\"urn:oasis:names:tc:SAML:2.0:metadata\" entityID=\"https://idp-integ.federate.amazon.com\">\n                <md:IDPSSODescriptor WantAuthnRequestsSigned=\"false\" protocolSupportEnumeration=\"urn:oasis:names:tc:SAML:2.0:protocol\">\n                    <md:KeyDescriptor use=\"signing\">\n                        <ds:KeyInfo xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\">\n                            <ds:X509Data>\n                                <ds:X509Certificate>MIIF7zCCBNegAwIBAgIQArB9/E3FC/Q11QHMC3RpxTANBgkqhkiG9w0BAQsFADA8MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRwwGgYDVQQDExNBbWF6b24gUlNBIDIwNDggTTAxMB4XDTI0MDIwMTAwMDAwMFoXDTI1MDExMTIzNTk1OVowLTErMCkGA1UEAxMic2FtbC5pZHAtaW50ZWcuZmVkZXJhdGUuYW1hem9uLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALT2EKHnas0RGAZVYt99Bx+vixgPRdo2ObxzWZBl1pR4AwHwirvi0CKbLDk8Kb+WrMfbdLw1eSve7DgEutbjfqByaGJdWwvIVysdKqGABeDTuZMiImxzusJYP/id2/CChLDpGZb8h4rlYg/NFu7uIIOmdb33OtJEkPtv3j79VNXi0CStng7OU0VJU/pQQZOM52DV1Ru1QmZ7ySyUZxYfXI6vZK8dOgOB88XTCtDCJRPVB17FnjNVxnPrad34cozVwIgYRVYYjp19OuGi62XK8qAtH1zWrsoFqUC5B40TUgIBpSvrzNDoSFJxIGVS+VYtI0hqrA5ZtEBwupVX/8qdhnkCAwEAAaOCAvowggL2MB8GA1UdIwQYMBaAFIG4DmOKiRIY5fo7O1CVn+blkBOFMB0GA1UdDgQWBBR9mYxuFkmM61T2uARRR3W9O1dQVTAtBgNVHREEJjAkgiJzYW1sLmlkcC1pbnRlZy5mZWRlcmF0ZS5hbWF6b24uY29tMBMGA1UdIAQMMAowCAYGZ4EMAQIBMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwOwYDVR0fBDQwMjAwoC6gLIYqaHR0cDovL2NybC5yMm0wMS5hbWF6b250cnVzdC5jb20vcjJtMDEuY3JsMHUGCCsGAQUFBwEBBGkwZzAtBggrBgEFBQcwAYYhaHR0cDovL29jc3AucjJtMDEuYW1hem9udHJ1c3QuY29tMDYGCCsGAQUFBzAChipodHRwOi8vY3J0LnIybTAxLmFtYXpvbnRydXN0LmNvbS9yMm0wMS5jZXIwDAYDVR0TAQH/BAIwADCCAX0GCisGAQQB1nkCBAIEggFtBIIBaQFnAHYATnWjJ1yaEMM4W2zU3z9S6x3w4I4bjWnAsfpksWKaOd8AAAGNZFWvUQAABAMARzBFAiEA4TjLW3+0X54p91BrxQTEJHObRliJkn84aFy9at8j3ioCIATXmS+7Q8dPlYBTCJYn8yax2wGBwloaQ1K//OVjKPRDAHYAPxdLT9ciR1iUHWUchL4NEu2QN38fhWrrwb8ohez4ZG4AAAGNZFWvkgAABAMARzBFAiBWUA0dEBEPn726fJz03HVHQ2vTzSUdscLs5hjBnDvVvgIhAN/vHS+4oqR5zOQId3lLKf4WOykV8lr4nYDhstgU9Gr4AHUAfVkeEuF4KnscYWd8Xv340IdcFKBOlZ65Ay/ZDowuebgAAAGNZFWvhAAABAMARjBEAiAwGll9pIluhmNvE7XWVll04ELP+psr79pdj2R45FSBhgIgYpoh0B+GTJfdGakPU39bl2Yk73pyN0vn43weN0JuTtIwDQYJKoZIhvcNAQELBQADggEBAC1gAmyJ57M/8FYYU49OCQv9Lv9GqLN0i2KuSlWSCZ7wqplm0wsvyRs+6hKJB9qM3D2QWShdmq+cignDVDndqhr30VhhYqQLxXJS1FfluhB92SuqPUJm72LY7pgd36ZvaGcMbWyKFHp0PxiiKPQeqZJzfTIQiZBbv5Usa/0zRguLn8LymlUE5VeBW3K1fihYUC5Z0x3Dv0+ZQouQfnkTcnetJisD3zPQvuJ8h62R0kLoz2GrxzW88NmchngRfh2aAUKQHYHKWJQmD83GTh7r9lFeeWYrGj3gDZ2YBMmrRhF4cj+HcskLqRDUvHR+uBj35b0IqAMKVDrJyKFh47+WkQ8=</ds:X509Certificate>\n                            </ds:X509Data>\n                        </ds:KeyInfo>\n                    </md:KeyDescriptor>\n                    <md:SingleLogoutService Binding=\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST\" Location=\"https://idp-integ.federate.amazon.com/api/saml2/v1/logout\"/>\n                    <md:SingleLogoutService Binding=\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect\" Location=\"https://idp-integ.federate.amazon.com/api/saml2/v1/logout\"/>\n                    <md:NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:unspecified</md:NameIDFormat>\n                    <md:SingleSignOnService Binding=\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect\" Location=\"https://idp-integ.federate.amazon.com/api/saml2/v1/sso\"/>\n                    <md:SingleSignOnService Binding=\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST\" Location=\"https://idp-integ.federate.amazon.com/api/saml2/v1/sso\"/>\n                </md:IDPSSODescriptor>\n            </md:EntityDescriptor>\n        AssertionAttributes:\n          Name: displayName\n          Login: mail\n          Email: mail\n          Role: role\n        RoleValues:\n          Admin:\n            - admin\n        LoginValidityDuration: 120\n  GrafanaWorkspaceRole:\n    Type: 'AWS::IAM::Role'\n    Properties:\n      ManagedPolicyArns:\n        - !Ref GrafanaToPrometheusDataSourcePolicy\n        - arn:aws:iam::aws:policy/service-role/AmazonGrafanaCloudWatchAccess\n        - arn:aws:iam::aws:policy/service-role/AmazonTimestreamReadOnlyAccess\n      AssumeRolePolicyDocument:\n        Version: 2012-10-17\n        Statement:\n          - Effect: Allow\n            Principal:\n              Service:\n                - grafana.amazonaws.com\n            Action:\n              - 'sts:AssumeRole'\n  GrafanaToPrometheusDataSourcePolicy:\n    Type: AWS::IAM::ManagedPolicy\n    Properties:\n      ManagedPolicyName: GrafanaToPrometheusDataSourcePolicy\n      PolicyDocument:\n        Version: \"2012-10-17\"\n        Statement:\n          - Effect: Allow\n            Action: aps:ListWorkspaces\n            Resource: \"*\"\n          - Effect: Allow\n            Action:\n              - aps:DescribeWorkspace\n              - aps:QueryMetrics\n              - aps:GetLabels\n              - aps:GetSeries\n              - aps:GetMetricMetadata\n            Resource: !Sub \"arn:${AWS::Partition}:aps:${AWS::Region}:${AWS::AccountId}:workspace/${PrometheusWorkspaceID}\"\nOutputs:\n  WorkspaceEndpoint:\n    Value: !GetAtt GrafanaWorkspace.Endpoint\n  WorkspaceStatus:\n    Value: !GetAtt GrafanaWorkspace.Status\n  WorkspaceID:\n    Value: !Ref GrafanaWorkspace\n  GrafanaVersion:\n    Value: !GetAtt GrafanaWorkspace.GrafanaVersion\n"
  },
  {
    "path": "test/cloudformation/iam_cloudformation.yaml",
    "content": "AWSTemplateFormatVersion: \"2010-09-09\"\nDescription: IAM roles needed to orchestrate the tests in the Github Actions\nParameters:\n  Repository:\n    Type: String\n    Description: \"Fully qualified repository name, formatted as <organization>/<repository-name>\"\n  Branches:\n    Type: String\n    Description: \"The restrictions on which branches have permission to reach out to the OIDC provider. This is useful for security hardening of your github actions as described in https://docs.github.com/en/actions/security-guides/security-hardening-for-github-actions\"\n  Regions:\n    Type: CommaDelimitedList\n    Default: \"us-east-1,us-east-2,us-west-2,eu-west-1\"\n  PrometheusWorkspaceID:\n    Type: String\n    Description: \"Prometheus workspace to forward cluster prometheus metrics to\"\n  DatabaseName:\n    Type: String\n    Description: \"Timestream database to forward test metrics to\"\n  TableName:\n    Type: String\n    Description: \"Timestream table to forward test metrics to\"\n  SweeperTableName:\n    Type: String\n    Description: \"Timestream table to forward leaked resources to\"\n  ResourceCountTableName:\n    Type: String\n    Description: \"Timestream table to count number of resources to\"\nResources:\n  GithubActionsPolicy:\n    Type: AWS::IAM::ManagedPolicy\n    Properties:\n      ManagedPolicyName: GithubActionsPolicy\n      PolicyDocument:\n        Version: '2012-10-17'\n        Statement:\n          - Effect: Allow\n            Action:\n              - cloudformation:CreateChangeSet\n              - cloudformation:CreateStack\n              - cloudformation:DeleteStack\n              - cloudformation:DescribeChangeSet\n              - cloudformation:DescribeStackEvents\n              - cloudformation:DescribeStackResources\n              - cloudformation:ExecuteChangeSet\n              - cloudformation:GetTemplate\n              - cloudformation:GetTemplateSummary\n            Resource:\n              - !Sub \"arn:${AWS::Partition}:cloudformation:*:${AWS::AccountId}:stack/iam-*\"\n              - !Sub \"arn:${AWS::Partition}:cloudformation:*:${AWS::AccountId}:stack/eksctl-*\"\n            Condition:\n              StringEquals:\n                aws:RequestedRegion:\n                  Ref: Regions\n          - Effect: Allow\n            Action:\n             - cloudformation:ListStacks\n             - cloudformation:DescribeStacks\n            Resource: \"*\"\n          - Effect: Allow\n            Action: logs:PutRetentionPolicy\n            Resource: !Sub \"arn:aws:logs:*:${AWS::AccountId}:log-group:/aws/eks/*\"\n          - Effect: Allow\n            Action: fis:CreateExperimentTemplate\n            Resource: !Sub \"arn:${AWS::Partition}:fis:*:${AWS::AccountId}:action/*\"\n            Condition:\n              StringEquals:\n                aws:RequestedRegion:\n                  Ref: Regions\n          - Effect: Allow\n            Action:\n              - fis:CreateExperimentTemplate\n              - fis:DeleteExperimentTemplate\n              - fis:StartExperiment\n            Resource:\n              - !Sub \"arn:${AWS::Partition}:fis:*:${AWS::AccountId}:experiment-template/*\"\n            Condition:\n              StringEquals:\n                aws:RequestedRegion:\n                  Ref: Regions\n          - Effect: Allow\n            Action:\n              - fis:GetExperiment\n              - fis:StartExperiment\n            Resource:\n              - !Sub \"arn:${AWS::Partition}:fis:*:${AWS::AccountId}:experiment/*\"\n            Condition:\n              StringEquals:\n                aws:RequestedRegion:\n                  Ref: Regions\n          - Effect: Allow\n            Action:\n              - iam:CreateServiceLinkedRole\n            Resource:\n              - !Sub \"arn:${AWS::Partition}:iam::${AWS::AccountId}:role/aws-service-role/eks-nodegroup.amazonaws.com/AWSServiceRoleForAmazonEKSNodegroup\"\n              - !Sub \"arn:${AWS::Partition}:iam::${AWS::AccountId}:role/aws-service-role/spot.amazonaws.com/AWSServiceRoleForEC2Spot\"\n              - !Sub \"arn:${AWS::Partition}:iam::${AWS::AccountId}:role/aws-service-role/elasticloadbalancing.amazonaws.com/AWSServiceRoleForElasticLoadBalancing\"\n          - Effect: Allow\n            Action:\n              - sqs:CreateQueue\n              - sqs:AddPermission\n              - sqs:TagQueue\n              - sqs:SetQueueAttributes\n              - sqs:GetQueueAttributes\n              - sqs:GetQueueUrl\n              - sqs:RemovePermission\n              - sqs:DeleteQueue\n              - sqs:UntagQueue\n            Resource:\n            - !Sub \"arn:${AWS::Partition}:sqs:*:${AWS::AccountId}:*\"\n            Condition:\n              StringEquals:\n                aws:RequestedRegion:\n                  Ref: Regions\n          - Effect: Allow\n            Action:\n              - events:PutRule\n              - events:DeleteRule\n              - events:DescribeRule\n              - events:PutTargets\n              - events:RemoveTargets\n              - events:EnableRule\n            Resource: !Sub \"arn:${AWS::Partition}:events:*:${AWS::AccountId}:rule/*\"\n            Condition:\n              StringEquals:\n                aws:RequestedRegion:\n                  Ref: Regions\n          - Effect: Allow\n            Action: timestream:WriteRecords\n            Resource:\n              - !Sub \"arn:${AWS::Partition}:timestream:${AWS::Region}:${AWS::AccountId}:database/${DatabaseName}/table/${TableName}\"\n              - !Sub \"arn:${AWS::Partition}:timestream:${AWS::Region}:${AWS::AccountId}:database/${DatabaseName}/table/${SweeperTableName}\"\n              - !Sub \"arn:${AWS::Partition}:timestream:${AWS::Region}:${AWS::AccountId}:database/${DatabaseName}/table/${ResourceCountTableName}\"\n          - Effect: Allow\n            Action: timestream:DescribeEndpoints\n            Resource: \"*\"\n  GithubActionsIAMPolicy:\n    Type: AWS::IAM::ManagedPolicy\n    Properties:\n      ManagedPolicyName: GithubActionsIAMPolicy\n      PolicyDocument:\n        Version: '2012-10-17'\n        Statement:\n          - Effect: Allow\n            Action:\n              - iam:AttachRolePolicy\n              - iam:CreateRole\n              - iam:TagRole\n              - iam:DeleteRolePolicy\n              - iam:DetachRolePolicy\n              - iam:PutRolePolicy\n            Resource:\n              - !Sub \"arn:${AWS::Partition}:iam::${AWS::AccountId}:role/KarpenterNodeRole-*\"\n              - !Sub \"arn:${AWS::Partition}:iam::${AWS::AccountId}:role/eksctl-*\"\n              - !Sub \"arn:${AWS::Partition}:iam::${AWS::AccountId}:role/karpenter-irsa-*\"\n              - !Sub \"arn:${AWS::Partition}:iam::${AWS::AccountId}:role/prometheus-irsa-*\"\n            Condition:\n              ArnEquals:\n                \"iam:PermissionsBoundary\": !Ref GithubActionsPermissionsBoundary\n          - Effect: Allow\n            Action: iam:DeleteRole\n            Resource:\n              - !Sub \"arn:${AWS::Partition}:iam::${AWS::AccountId}:role/KarpenterNodeRole-*\"\n              - !Sub \"arn:${AWS::Partition}:iam::${AWS::AccountId}:role/eksctl-*\"\n              - !Sub \"arn:${AWS::Partition}:iam::${AWS::AccountId}:role/karpenter-irsa-*\"\n              - !Sub \"arn:${AWS::Partition}:iam::${AWS::AccountId}:role/prometheus-irsa-*\"\n          - Effect: Allow\n            Action:\n              - iam:GetRole\n              - iam:GetRolePolicy\n              - iam:ListAttachedRolePolicies\n            Resource:\n              - !Sub \"arn:${AWS::Partition}:iam::${AWS::AccountId}:role/aws-service-role/eks-nodegroup.amazonaws.com/AWSServiceRoleForAmazonEKSNodegroup\"\n              - !Sub \"arn:${AWS::Partition}:iam::${AWS::AccountId}:role/KarpenterNodeRole-*\"\n              - !Sub \"arn:${AWS::Partition}:iam::${AWS::AccountId}:role/eksctl-*\"\n              - !Sub \"arn:${AWS::Partition}:iam::${AWS::AccountId}:role/karpenter-irsa-*\"\n              - !Sub \"arn:${AWS::Partition}:iam::${AWS::AccountId}:role/prometheus-irsa-*\"\n              - !GetAtt FISInterruptionRole.Arn\n          - Effect: Allow\n            Action: iam:PassRole\n            Resource: !Sub \"arn:${AWS::Partition}:iam::${AWS::AccountId}:role/eksctl-*\"\n          - Effect: Allow\n            Action:\n              - iam:ListInstanceProfiles\n              - iam:ListInstanceProfileTags\n            Resource:\n              - !Sub \"arn:${AWS::Partition}:iam::${AWS::AccountId}:instance-profile/*\"\n          - Effect: Allow\n            Action:\n              - iam:AddRoleToInstanceProfile\n              - iam:CreateInstanceProfile\n              - iam:TagInstanceProfile\n              - iam:RemoveRoleFromInstanceProfile\n              - iam:DeleteInstanceProfile\n              - iam:GetInstanceProfile\n            Resource:\n              - !Sub \"arn:${AWS::Partition}:iam::${AWS::AccountId}:instance-profile/KarpenterNodeInstanceProfile-*\"\n              - !Sub \"arn:${AWS::Partition}:iam::${AWS::AccountId}:role/KarpenterNodeRole-*\"\n              - !Sub \"arn:${AWS::Partition}:iam::${AWS::AccountId}:instance-profile/KarpenterNodeInstanceProfile-Drift-*\"\n          - Effect: Allow\n            Action:\n              - iam:CreateOpenIDConnectProvider\n              - iam:DeleteOpenIDConnectProvider\n              - iam:ListOpenIDConnectProviders\n              - iam:ListOpenIDConnectProviderTags\n              - iam:TagOpenIDConnectProvider\n              - iam:GetOpenIDConnectProvider\n              - iam:TagOpenIDConnectProvider\n            Resource: !Sub \"arn:${AWS::Partition}:iam::${AWS::AccountId}:oidc-provider/*\"\n          - Effect: Allow\n            Action:\n              - iam:CreatePolicy\n              - iam:DeletePolicy\n              - iam:GetPolicy\n              - iam:CreatePolicyVersion\n              - iam:DeletePolicyVersion\n              - iam:ListPolicyVersions\n            Resource: !Sub \"arn:${AWS::Partition}:iam::${AWS::AccountId}:policy/KarpenterController*\"\n  GithubActionsEKSPolicy:\n    Type: AWS::IAM::ManagedPolicy\n    Properties:\n      ManagedPolicyName: GithubActionsEKSPolicy\n      PolicyDocument:\n        Version: '2012-10-17'\n        Statement:\n          - Effect: Allow\n            Action:\n              - eks:CreateCluster\n              - eks:CreateAddon\n              - eks:CreateNodegroup\n              - eks:CreatePodIdentityAssociation\n              - eks:DeleteCluster\n              - eks:ListFargateProfiles\n              - eks:TagResource\n              - eks:DescribeCluster\n              - eks:ListClusters\n              - eks:CreateAccessEntry\n            Resource: !Sub \"arn:${AWS::Partition}:eks:*:${AWS::AccountId}:cluster/*\"\n            Condition:\n              StringEquals:\n                aws:RequestedRegion:\n                  Ref: Regions\n          - Effect: Allow\n            Action:\n              - eks:DeleteAccessEntry\n            Resource:\n              - !Sub \"arn:${AWS::Partition}:eks:*:${AWS::AccountId}:access-entry/*/role/${AWS::AccountId}/KarpenterNodeRole-*\"\n            Condition:\n              StringEquals:\n                aws:RequestedRegion:\n                  Ref: Regions\n          - Effect: Allow\n            Action:\n              - eks:DeleteAddon\n              - eks:DescribeAddon\n            Resource:\n              - !Sub \"arn:${AWS::Partition}:eks:*:${AWS::AccountId}:addon/*\"\n            Condition:\n              StringEquals:\n                aws:RequestedRegion:\n                  Ref: Regions\n          - Effect: Allow\n            Action:\n              - eks:DeleteNodegroup\n              - eks:DescribeNodegroup\n              - eks:TagResource\n            Resource: !Sub \"arn:${AWS::Partition}:eks:*:${AWS::AccountId}:nodegroup/*\"\n            Condition:\n              StringEquals:\n                aws:RequestedRegion:\n                  Ref: Regions\n          - Effect: Allow\n            Action:\n              - eks:TagResource\n            Resource: !Sub \"arn:${AWS::Partition}:eks:*:${AWS::AccountId}:podidentityassociation/*\"\n            Condition:\n              StringEquals:\n                aws:RequestedRegion:\n                  Ref: Regions\n  # GithubActionsPermissionsBoundary includes all permissions needed for all designated roles provisioned by the GithubActions\n  # CI task. This includes the cluster ServiceRoles that are generated by EKSCTL and all roles generated with IRSA to interface from the\n  # cluster into AWS services through IAM.\n  # The policies that are captured inside the GithubActionsPermissionsBoundary include:\n  # - AmazonEC2ContainerRegistryPullOnly\n  # - AmazonEKSWorkerNodePolicy\n  # - AmazonSSMManagedInstanceCore\n  # - AmazonEBSCSIDriverPolicy\n  # - EBS CSI Driver Controller Policy (used by IRSA)\n  # - Prometheus Controller Policy (used by IRSA)\n  # - Karpenter Controller Policy (used by IRSA)\n  # - VPC CNI Daemonset Policy (used by IRSA)\n  GithubActionsPermissionsBoundary:\n    Type: AWS::IAM::ManagedPolicy\n    Properties:\n      ManagedPolicyName: GithubActionsPermissionsBoundary\n      PolicyDocument:\n        Version: '2012-10-17'\n        Statement:\n          - Effect: Allow\n            Action:\n              - ec2:*\n              # Permissions to pull ECR images needed by the NodeInstanceRole\n              - ecr:GetAuthorizationToken\n              - ecr:BatchGetImage\n              - ecr:GetDownloadUrlForLayer\n              - ecr:BatchImportUpstreamImage\n              # EKS ServiceRole permissions needed for AutoScalingGroups\n              - autoscaling:DescribeAutoScalingGroups\n              - autoscaling:UpdateAutoScalingGroup\n              # EKS ServiceRole permissions needed to handle LoadBalancer\n              - elasticloadbalancing:*\n              - kms:CreateGrant\n              - kms:GenerateDataKeyWithoutPlaintext\n              - kms:DescribeKey\n              # SSM Permissions for AmazonSSMManagedInstanceCore policy applied to the NodeInstanceRole\n              - ssm:*\n              # SSM Permissions for AmazonSSMManagedInstanceCore policy applied to the NodeInstanceRole\n              - ssmmessages:*\n              # SSM Permissions for AmazonSSMManagedInstanceCore policy applied to the NodeInstanceRole\n              - ec2messages:*\n              - sqs:DeleteMessage\n              - sqs:GetQueueAttributes\n              - sqs:GetQueueUrl\n              - sqs:SendMessage\n              - sqs:ReceiveMessage\n              - pricing:GetProducts\n              - eks:DescribeCluster\n              - eks-auth:AssumeRoleForPodIdentity\n            Resource: \"*\"\n          - Effect: Allow\n            Action: iam:PassRole\n            Resource:\n              - !Sub \"arn:${AWS::Partition}:iam::${AWS::AccountId}:role/karpenter-irsa-*\"\n              - !Sub \"arn:${AWS::Partition}:iam::${AWS::AccountId}:role/prometheus-irsa-*\"\n              - !Sub \"arn:${AWS::Partition}:iam::${AWS::AccountId}:role/KarpenterNodeRole-*\"\n              - !GetAtt FISInterruptionRole.Arn\n          - Effect: Allow\n            Action: iam:CreateInstanceProfile\n            Resource: \"*\"\n            Condition:\n              StringLike:\n                aws:RequestTag/karpenter.k8s.aws/ec2nodeclass: \"*\"\n          - Effect: Allow\n            Action: iam:TagInstanceProfile\n            Resource: \"*\"\n            Condition:\n              StringLike:\n                aws:RequestTag/karpenter.k8s.aws/ec2nodeclass: \"*\"\n                aws:ResourceTag/karpenter.k8s.aws/ec2nodeclass: \"*\"\n          - Effect: Allow\n            Action:\n              - iam:AddRoleToInstanceProfile\n              - iam:RemoveRoleFromInstanceProfile\n              - iam:DeleteInstanceProfile\n            Resource: \"*\"\n            Condition:\n              StringLike:\n                aws:ResourceTag/karpenter.k8s.aws/ec2nodeclass: \"*\"\n          - Effect: Allow\n            Action:\n              - iam:GetInstanceProfile\n              - iam:ListInstanceProfiles\n            Resource: \"*\"\n          - Effect: Allow\n            Action:\n              - aps:RemoteWrite\n              - aps:GetSeries\n              - aps:GetLabels\n              - aps:GetMetricMetadata\n            Resource: !Sub \"arn:${AWS::Partition}:aps:${AWS::Region}:${AWS::AccountId}:workspace/${PrometheusWorkspaceID}\"\n          # Deny ALL IMDSv1 instance launch\n          - Effect: Deny\n            Action:\n              - ec2:RunInstances\n            Resource: !Sub \"arn:${AWS::Partition}:ec2:*:${AWS::AccountId}:instance/*\"\n            Condition:\n              StringNotEquals:\n                ec2:MetadataHttpTokens: required\n          - Effect: Deny\n            Action:\n              - ec2:ModifyInstanceMetadataOptions\n            Resource: !Sub \"arn:${AWS::Partition}:ec2:*:${AWS::AccountId}:instance/*\"\n            Condition:\n              StringEquals:\n                ec2:Attribute: HttpTokens\n              StringNotEquals:\n                ec2:Attribute/HttpTokens: required\n          - Effect: Allow\n            Action:\n              - iam:CreateRole\n              - iam:DeleteRole\n            Resource:\n              - !Sub \"arn:${AWS::Partition}:iam::${AWS::AccountId}:role/KarpenterNodeRole-*\"\n          - Effect: Allow\n            Action:\n              - iam:AttachRolePolicy\n              - iam:DetachRolePolicy\n            Resource:\n              - !Sub \"arn:${AWS::Partition}:iam::${AWS::AccountId}:role/KarpenterNodeRole-*\"\n            Condition:\n              ArnEquals:\n                \"iam:PolicyARN\":\n                  - \"arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy\"\n                  - \"arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicy\"\n                  - \"arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryPullOnly\"\n                  - \"arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore\"\n          - Effect: Allow\n            Action:\n              - iam:GetRole\n            Resource:\n              - !Sub \"arn:${AWS::Partition}:iam::${AWS::AccountId}:role/*\"\n  GithubActionsRole:\n    Type: AWS::IAM::Role\n    Properties:\n      RoleName: GithubActionsRole\n      ManagedPolicyArns:\n        - !Ref GithubActionsPolicy\n        - !Ref GithubActionsEKSPolicy\n        - !Ref GithubActionsIAMPolicy\n        - !Ref GithubActionsPermissionsBoundary\n      MaxSessionDuration: 21600 # 6 hours is the max session for GHA\n      AssumeRolePolicyDocument:\n        Version: \"2012-10-17\"\n        Statement:\n          - Effect: Allow\n            Principal:\n              Federated: !Sub \"arn:aws:iam::${AWS::AccountId}:oidc-provider/token.actions.githubusercontent.com\"\n            Action: \"sts:AssumeRoleWithWebIdentity\"\n            Condition:\n              StringEquals:\n                token.actions.githubusercontent.com:aud: sts.amazonaws.com\n              StringLike:\n                token.actions.githubusercontent.com:sub: !Sub \"repo:${Repository}:ref:${Branches}\"\n          - Effect: Allow\n            Principal:\n              AWS: !Sub \"arn:aws:iam::${AWS::AccountId}:root\"\n            Action: \"sts:AssumeRole\"\n  FISInterruptionRole:\n    Type: AWS::IAM::Role\n    Properties:\n      RoleName: FISInterruptionRole\n      ManagedPolicyArns:\n        - !Ref FISInterruptionPolicy\n      MaxSessionDuration: 3600\n      AssumeRolePolicyDocument:\n        Version: \"2012-10-17\"\n        Statement:\n          - Effect: Allow\n            Principal:\n              Service: \"fis.amazonaws.com\"\n            Action: \"sts:AssumeRole\"\n  FISInterruptionPolicy:\n    Type: AWS::IAM::ManagedPolicy\n    Properties:\n      ManagedPolicyName: FISInterruptionPolicy\n      PolicyDocument:\n        Version: '2012-10-17'\n        Statement:\n          - Effect: Allow\n            Action: ec2:SendSpotInstanceInterruptions\n            Resource:\n              - !Sub \"arn:${AWS::Partition}:ec2:*:${AWS::AccountId}:instance/*\"\n            Condition:\n              StringEquals:\n                aws:RequestedRegion:\n                  Ref: Regions\n"
  },
  {
    "path": "test/cloudformation/prometheus_cloudformation.yaml",
    "content": "AWSTemplateFormatVersion: \"2010-09-09\"\nDescription: Resources used for monitoring the GHA test runs using Prometheus\nResources:\n  PrometheusWorkspace:\n    Type: AWS::APS::Workspace\n  PrometheusWorkspaceIngestionPolicy:\n    Type: AWS::IAM::ManagedPolicy\n    Properties:\n      ManagedPolicyName: PrometheusWorkspaceIngestionPolicy\n      PolicyDocument:\n        Version: \"2012-10-17\"\n        Statement:\n          - Effect: Allow\n            Resource: !Ref PrometheusWorkspace\n            Action:\n              - aps:RemoteWrite\n              - aps:GetSeries\n              - aps:GetLabels\n              - aps:GetMetricMetadata\nOutputs:\n  WorkspaceID:\n    Description: \"Prometheus Workspace ID\"\n    Value: !Ref PrometheusWorkspace\n"
  },
  {
    "path": "test/cloudformation/timestream_cloudformation.yaml",
    "content": "AWSTemplateFormatVersion: \"2010-09-09\"\nDescription: Resources used for monitoring the scale testing runs using Timestream\nParameters:\n  DatabaseName:\n    Type: String\n    Description: \"Timestream database to forward test metrics to\"\n  TableName:\n    Type: String\n    Description: \"Timestream table to forward scale test metrics to \"\n  SweeperTableName:\n    Type: String\n    Description: \"Timestream table to forward leaked resources to\"\n  ResourceCountTableName:\n    Type: String\n    Description: \"Timestream table to count number of resources to\"\n  BackupDisasterRecoveryRegion:\n    Type: String\n    Default: \"us-east-1\"\n    Description: \"Disaster recovery region for the timestream backup\"\nResources:\n  TimestreamDatabase:\n    Type: AWS::Timestream::Database\n    Properties:\n      DatabaseName: !Sub \"${DatabaseName}\"\n  TimestreamTable:\n    Type: \"AWS::Timestream::Table\"\n    Properties:\n      DatabaseName: !Ref \"TimestreamDatabase\"\n      TableName: !Sub \"${TableName}\"\n      MagneticStoreWriteProperties:\n        EnableMagneticStoreWrites: true\n      RetentionProperties:\n        MemoryStoreRetentionPeriodInHours: \"2160\" # Three months of memory store retention\n        MagneticStoreRetentionPeriodInDays: \"1825\" # 5 years of magnetic store retention\n  SweeperTimestreamTable:\n    Type: \"AWS::Timestream::Table\"\n    Properties:\n      DatabaseName: !Ref \"TimestreamDatabase\"\n      TableName: !Sub \"${SweeperTableName}\"\n      MagneticStoreWriteProperties:\n        EnableMagneticStoreWrites: true\n      RetentionProperties:\n        MemoryStoreRetentionPeriodInHours: \"2160\" # Three months of memory store retention\n        MagneticStoreRetentionPeriodInDays: \"1825\" # 5 years of magnetic store retention\n  ResourceCountTimestreamTable:\n    Type: \"AWS::Timestream::Table\"\n    Properties:\n      DatabaseName: !Ref \"TimestreamDatabase\"\n      TableName: !Sub \"${ResourceCountTableName}\"\n      MagneticStoreWriteProperties:\n        EnableMagneticStoreWrites: true\n      RetentionProperties:\n        MemoryStoreRetentionPeriodInHours: \"2160\" # Three months of memory store retention\n        MagneticStoreRetentionPeriodInDays: \"1825\" # 5 years of magnetic store retention\n  TimestreamBackupPlan:\n    Type: \"AWS::Backup::BackupPlan\"\n    Properties:\n      BackupPlan:\n        BackupPlanName: !Sub \"timestream-${DatabaseName}-backup\"\n        BackupPlanRule:\n          - RuleName: \"DailyBackups\"\n            TargetBackupVault: \"Default\"\n            ScheduleExpression: \"cron(0 0 ? * * *)\"\n            StartWindowMinutes: \"480\"\n            CompletionWindowMinutes: \"10080\"\n            Lifecycle:\n              DeleteAfterDays: \"35\"\n            CopyActions:\n              - DestinationBackupVaultArn: !Sub \"arn:${AWS::Partition}:backup:${BackupDisasterRecoveryRegion}:${AWS::AccountId}:backup-vault:Default\"\n                Lifecycle:\n                  DeleteAfterDays: \"70\"\n  TimestreamBackupPlanSelection:\n    Type: \"AWS::Backup::BackupSelection\"\n    Properties:\n      BackupSelection:\n        SelectionName: !Sub \"timestream_${DatabaseName}_selection\"\n        IamRoleArn: !Sub \"arn:${AWS::Partition}:iam::${AWS::AccountId}:role/service-role/AWSBackupDefaultServiceRole\"\n        Resources:\n          - !GetAtt \"TimestreamTable.Arn\"\n          - !GetAtt \"SweeperTimestreamTable.Arn\"\n          - !GetAtt \"ResourceCountTimestreamTable.Arn\"\n      BackupPlanId: !Ref \"TimestreamBackupPlan\"\nOutputs:\n  ScaleTimestreamTable:\n    Description: \"Scale Test Timestream Table ARN\"\n    Value: !GetAtt TimestreamTable.Arn\n  SweeperTimestreamTable:\n    Description: \"Account Resource Timestream Table ARN\"\n    Value: !GetAtt SweeperTimestreamTable.Arn"
  },
  {
    "path": "test/hack/e2e_scripts/clean_private_cluster.sh",
    "content": "#!/usr/bin/env bash\n\n# Delete instance profile\naws iam remove-role-from-instance-profile --instance-profile-name \"KarpenterNodeInstanceProfile-${CLUSTER_NAME}\" --role-name \"KarpenterNodeRole-${CLUSTER_NAME}\"\naws iam delete-instance-profile --instance-profile-name \"KarpenterNodeInstanceProfile-${CLUSTER_NAME}\"\n\n# Delete private registry policy for pull through cache\naws iam delete-role-policy --role-name \"${NODE_ROLE}\" --policy-name \"PullThroughCachePolicy\"\n\n# Delete cluster\neksctl delete cluster --name \"${CLUSTER_NAME}\" --force\n\n#Delete manually created VPC endpoints\nendpoints=$(aws ec2 describe-vpc-endpoints --filters Name=vpc-id,Values=\"${CLUSTER_VPC_ID}\" Name=tag:testing/cluster,Values=\"${CLUSTER_NAME}\" --query \"VpcEndpoints\")\necho \"$endpoints\" | jq '.[].VpcEndpointId' -r |\nwhile read -r endpointID;\ndo\n  aws ec2 delete-vpc-endpoints --vpc-endpoint-ids \"$endpointID\"\n  sleep 1\ndone\n\n#Remove codebuild security group ingress from cluster security group\naws ec2 revoke-security-group-ingress --group-id \"${EKS_CLUSTER_SG}\" --protocol  all --source-group \"${SG_CB}\"\n\n# Delete route table entry for cluster\nsubnet_config=$(aws ec2 describe-subnets --filters Name=vpc-id,Values=\"${VPC_CB}\" Name=tag:aws-cdk:subnet-type,Values=Private --query \"Subnets\")\necho \"$subnet_config\" | jq '.[].SubnetId' -r |\nwhile read -r subnet;\ndo\n  ROUTE_TABLE_ID=$((aws ec2 describe-route-tables --filters Name=vpc-id,Values=\"${VPC_CB}\" Name=association.subnet-id,Values=\"$subnet\" --query \"RouteTables[0].RouteTableId\") | jq -r)\n  aws ec2 delete-route --route-table-id \"$ROUTE_TABLE_ID\" --destination-cidr-block 192.168.0.0/16\ndone\n\n# Delete VPC peering connection\naws ec2 delete-vpc-peering-connection --vpc-peering-connection-id \"${VPC_PEERING_CONNECTION_ID}\""
  },
  {
    "path": "test/hack/e2e_scripts/configure_private_cluster.sh",
    "content": "# Add the SQS and SSM VPC endpoints if we are creating a private cluster\n# We need to grab all of the VPC details for the cluster in order to add the endpoint\n# Add inbound rules for codeBuild security group, create temporary access entry\nVPC_CONFIG=$(aws eks describe-cluster --name \"$CLUSTER_NAME\" --query \"cluster.resourcesVpcConfig\")\nVPC_ID=$(echo \"$VPC_CONFIG\" | jq .vpcId -r)\necho CLUSTER_VPC_ID=\"$VPC_ID\" >> \"$GITHUB_ENV\"\nSUBNET_IDS=($(echo \"$VPC_CONFIG\" | jq '.subnetIds | join(\" \")' -r))\nSHARED_NODE_SG=$((aws ec2 describe-security-groups --filters Name=tag:aws:cloudformation:stack-name,Values=eksctl-\"$CLUSTER_NAME\"-cluster Name=tag:aws:cloudformation:logical-id,Values=ClusterSharedNodeSecurityGroup --query \"SecurityGroups[0]\") | jq .GroupId -r)\neks_cluster_sg=$((aws ec2 describe-security-groups --filters Name=tag:aws:eks:cluster-name,Values=\"$CLUSTER_NAME\"  --query \"SecurityGroups[0]\") | jq .GroupId -r)\necho EKS_CLUSTER_SG=\"$eks_cluster_sg\" >> \"$GITHUB_ENV\"\n\nfor SERVICE in \"com.amazonaws.$REGION.ssm\" \"com.amazonaws.$REGION.eks\" \"com.amazonaws.$REGION.sqs\"; do\n  aws ec2 create-vpc-endpoint \\\n    --vpc-id \"${VPC_ID}\" \\\n    --vpc-endpoint-type Interface \\\n    --service-name \"${SERVICE}\" \\\n    --subnet-ids \"${SUBNET_IDS[@]}\" \\\n    --security-group-ids \"${eks_cluster_sg}\" \\\n    --tag-specifications \"ResourceType=vpc-endpoint,Tags=[{Key=testing/type,Value=e2e},{Key=testing/cluster,Value=$CLUSTER_NAME},{Key=github.com/run-url,Value=https://github.com/$REPOSITORY/actions/runs/$RUN_ID},{Key=karpenter.sh/discovery,Value=$CLUSTER_NAME}]\"\ndone\n\n# VPC peering request from codebuild\naws ec2 create-vpc-peering-connection --vpc-id \"${CODEBUILD_VPC}\" --peer-vpc-id \"${VPC_ID}\" --tag-specifications \"ResourceType=vpc-peering-connection,Tags=[{Key=testing/type,Value=e2e},{Key=testing/cluster,Value=$CLUSTER_NAME},{Key=github.com/run-url,Value=https://github.com/$REPOSITORY/actions/runs/$RUN_ID},{Key=karpenter.sh/discovery,Value=$CLUSTER_NAME}]\"\nvpc_peering_connection_id=$((aws ec2 describe-vpc-peering-connections --filters Name=accepter-vpc-info.vpc-id,Values=\"${VPC_ID}\" --query \"VpcPeeringConnections[0]\") | jq .VpcPeeringConnectionId -r)\naws ec2 accept-vpc-peering-connection --vpc-peering-connection-id \"${vpc_peering_connection_id}\"\necho VPC_PEERING_CONNECTION_ID=\"$vpc_peering_connection_id\" >> \"$GITHUB_ENV\"\n\n# Modify route table for codebuild vpc\nsubnet_config=$(aws ec2 describe-subnets --filters Name=vpc-id,Values=\"${CODEBUILD_VPC}\" Name=tag:aws-cdk:subnet-type,Values=Private --query \"Subnets\")\necho \"$subnet_config\" | jq '.[].SubnetId' -r |\nwhile read -r subnet;\ndo\n  ROUTE_TABLE_ID=$((aws ec2 describe-route-tables --filters Name=vpc-id,Values=\"${CODEBUILD_VPC}\" Name=association.subnet-id,Values=\"$subnet\" --query \"RouteTables[0].RouteTableId\") | jq -r)\n  aws ec2 create-route --route-table-id \"$ROUTE_TABLE_ID\" --destination-cidr-block 192.168.0.0/16 --vpc-peering-connection-id \"$vpc_peering_connection_id\"\ndone\n\n\n# Modify route table for cluster vpc\nCLUSTER_ROUTE_TABLE=$(aws ec2 describe-route-tables --filters Name=vpc-id,Values=\"${VPC_ID}\" Name=association.main,Values=false --query \"RouteTables\")\necho \"$CLUSTER_ROUTE_TABLE\" | jq '.[].RouteTableId' -r |\nwhile read -r routeTableId;\ndo\n  aws ec2 create-route --route-table-id $routeTableId --destination-cidr-block 10.0.0.0/16 --vpc-peering-connection-id \"$vpc_peering_connection_id\"\ndone\n\naws ec2 authorize-security-group-ingress --group-id \"${SHARED_NODE_SG}\" --protocol  all --source-group \"${CODEBUILD_SG}\"\naws ec2 authorize-security-group-ingress --group-id \"${eks_cluster_sg}\" --protocol  all --source-group \"${CODEBUILD_SG}\"\n\n# There is currently no VPC private endpoint for the IAM API. Therefore, we need to\n# provision and manage an instance profile manually.\naws iam create-instance-profile --instance-profile-name \"KarpenterNodeInstanceProfile-${CLUSTER_NAME}\" --tags Key=testing/cluster,Value=\"$CLUSTER_NAME\"\naws iam add-role-to-instance-profile --instance-profile-name \"KarpenterNodeInstanceProfile-${CLUSTER_NAME}\" --role-name \"KarpenterNodeRole-${CLUSTER_NAME}\"\n\n#Create private registry policy for pull through cache\nMANAGED_NG=$(aws eks list-nodegroups --cluster-name \"${CLUSTER_NAME}\" --query nodegroups --output text)\nnode_role=$(aws eks describe-nodegroup --cluster-name \"${CLUSTER_NAME}\" --nodegroup-name \"${MANAGED_NG}\" --query nodegroup.nodeRole --output text | cut -d '/' -f 2)\necho NODE_ROLE=\"$node_role\" >> \"$GITHUB_ENV\"\ncat <<EOF >> policy.json\n{\n    \"Version\": \"2012-10-17\",\n    \"Statement\": [\n        {\n            \"Sid\": \"PullThroughCache\",\n            \"Effect\": \"Allow\",\n            \"Action\": [\n               \"ecr:BatchImportUpstreamImage\",\n               \"ecr:CreateRepository\"\n            ],\n            \"Resource\": [\n                \"arn:aws:ecr:$REGION:$ACCOUNT_ID:repository/ecr-public/*\",\n                \"arn:aws:ecr:$REGION:$ACCOUNT_ID:repository/k8s/*\",\n                \"arn:aws:ecr:$REGION:$ACCOUNT_ID:repository/quay/*\"\n            ]\n        }\n    ]\n}\nEOF\naws iam put-role-policy --role-name \"${node_role}\" --policy-name \"PullThroughCachePolicy\" --policy-document file://policy.json\n\n# Use pull through cache to pull images that are needed for the tests to run as it requires a route to the internet for the first time\ndocker pull \"$ACCOUNT_ID.dkr.ecr.$REGION.amazonaws.com/k8s/pause:3.6\"\ndocker pull \"$ACCOUNT_ID.dkr.ecr.$REGION.amazonaws.com/ecr-public/eks-distro/kubernetes/pause:3.2\"\ndocker pull \"$ACCOUNT_ID.dkr.ecr.$REGION.amazonaws.com/ecr-public/docker/library/alpine:latest\""
  },
  {
    "path": "test/hack/e2e_scripts/diff_karpenter.sh",
    "content": "CHART=\"oci://$ECR_ACCOUNT_ID.dkr.ecr.$ECR_REGION.amazonaws.com/karpenter/snapshot/karpenter\"\nif [[ \"$PRIVATE_CLUSTER\" == \"true\" ]]; then\n  CHART=\"oci://$ACCOUNT_ID.dkr.ecr.$REGION.amazonaws.com/karpenter/snapshot/karpenter\"\nfi\n\nhelm diff upgrade --namespace kube-system \\\nkarpenter \"${CHART}\" \\\n--version 0-$(git rev-parse HEAD) \\\n--reuse-values --three-way-merge --detailed-exitcode --no-hooks\n"
  },
  {
    "path": "test/hack/e2e_scripts/install_helm.sh",
    "content": "TEMPDIR=$(mktemp -d)\ncurl -fsSL -o \"${TEMPDIR}/get_helm.sh\" https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3\nchmod 700 \"${TEMPDIR}/get_helm.sh\"\n\"${TEMPDIR}/get_helm.sh\" --version \"$HELM_VERSION\"\n"
  },
  {
    "path": "test/hack/e2e_scripts/install_karpenter.sh",
    "content": "aws eks update-kubeconfig --name \"$CLUSTER_NAME\"\n\nCHART=\"oci://$ECR_ACCOUNT_ID.dkr.ecr.$ECR_REGION.amazonaws.com/karpenter/snapshot/karpenter\"\nADDITIONAL_FLAGS=\"\"\nif [[ \"$PRIVATE_CLUSTER\" == \"true\" ]]; then\n  CHART=\"oci://$ACCOUNT_ID.dkr.ecr.$REGION.amazonaws.com/karpenter/snapshot/karpenter\"\n  ADDITIONAL_FLAGS=\"--set .Values.controller.image.repository=$ACCOUNT_ID.dkr.ecr.$REGION.amazonaws.com/karpenter/snapshot/controller --set .Values.controller.image.digest=\\\"\\\" --set .Values.postInstallHook.image.repository=$ACCOUNT_ID.dkr.ecr.$REGION.amazonaws.com/ecr-public/bitnami/kubectl --set .Values.postInstallHook.image.digest=\\\"\\\"\"\nfi\n\nhelm upgrade --install karpenter \"${CHART}\" \\\n  -n kube-system \\\n  --version \"0-$(git rev-parse HEAD)\" \\\n  --set logLevel=debug \\\n  --set settings.isolatedVPC=${PRIVATE_CLUSTER} \\\n  --set serviceAccount.annotations.\"eks\\.amazonaws\\.com/role-arn\"=\"arn:aws:iam::$ACCOUNT_ID:role/karpenter-irsa-$CLUSTER_NAME\" \\\n  $ADDITIONAL_FLAGS \\\n  --set settings.clusterName=\"$CLUSTER_NAME\" \\\n  --set settings.interruptionQueue=\"$CLUSTER_NAME\" \\\n  --set settings.featureGates.spotToSpotConsolidation=true \\\n  --set settings.featureGates.nodeRepair=true \\\n  --set settings.featureGates.reservedCapacity=true \\\n  --set settings.featureGates.nodeOverlay=true \\\n  --set settings.featureGates.staticCapacity=true \\\n  --set controller.resources.requests.cpu=5 \\\n  --set controller.resources.requests.memory=3Gi \\\n  --set controller.resources.limits.cpu=5 \\\n  --set controller.resources.limits.memory=3Gi \\\n  --set serviceMonitor.enabled=true \\\n  --set serviceMonitor.additionalLabels.scrape=enabled \\\n  --set \"serviceMonitor.endpointConfig.relabelings[0].targetLabel=clusterName\" \\\n  --set \"serviceMonitor.endpointConfig.relabelings[0].replacement=$CLUSTER_NAME\" \\\n  --set \"serviceMonitor.endpointConfig.relabelings[1].targetLabel=gitRef\" \\\n  --set \"serviceMonitor.endpointConfig.relabelings[1].replacement=$(git rev-parse HEAD)\" \\\n  --set \"serviceMonitor.endpointConfig.relabelings[2].targetLabel=mostRecentTag\" \\\n  --set \"serviceMonitor.endpointConfig.relabelings[2].replacement=$(git describe --abbrev=0 --tags)\" \\\n  --set \"serviceMonitor.endpointConfig.relabelings[3].targetLabel=commitsAfterTag\" \\\n  --set \"serviceMonitor.endpointConfig.relabelings[3].replacement=\\\"$(git describe --tags | cut -d '-' -f 2)\\\"\" \\\n  --wait\n"
  },
  {
    "path": "test/hack/e2e_scripts/install_prometheus.sh",
    "content": "CHART=prometheus-community/kube-prometheus-stack\nVALUES=./.github/actions/e2e/install-prometheus/values.yaml\nENABLED=true\nADDITIONAL_FLAGS=\"\"\nif (( \"$PRIVATE_CLUSTER\" == 'true' )); then\n  CHART=$(find . -name kube-prometheus-stack*)\n  ENABLED=false\n  ADDITIONAL_FLAGS=\"--set prometheusOperator.admissionWebhooks.patch.image.registry=$ACCOUNT_ID.dkr.ecr.$REGION.amazonaws.com/k8s --set prometheusOperator.prometheusConfigReloader.image.registry=$ACCOUNT_ID.dkr.ecr.$REGION.amazonaws.com/quay --set prometheusOperator.image.registry=$ACCOUNT_ID.dkr.ecr.$REGION.amazonaws.com/quay --set kube-state-metrics.image.registry=$ACCOUNT_ID.dkr.ecr.$REGION.amazonaws.com/k8s --set alertmanager.alertmanagerSpec.image.registry=$ACCOUNT_ID.dkr.ecr.$REGION.amazonaws.com/quay --set prometheus.prometheusSpec.image.registry=$ACCOUNT_ID.dkr.ecr.$REGION.amazonaws.com/quay --set grafana.enabled=$ENABLED\"\nfi\n\nhelm upgrade --install prometheus \"${CHART}\" \\\n-n prometheus \\\n-f ${VALUES} \\\n--set prometheus.prometheusSpec.remoteWrite[0].url=https://aps-workspaces.$PROMETHEUS_REGION.amazonaws.com/workspaces/$WORKSPACE_ID/api/v1/remote_write \\\n--set prometheus.prometheusSpec.remoteWrite[0].sigv4.region=$PROMETHEUS_REGION \\\n--set prometheus.serviceAccount.annotations.\"eks\\.amazonaws\\.com/role-arn\"=\"arn:aws:iam::$ACCOUNT_ID:role/prometheus-irsa-$CLUSTER_NAME\" \\\n$ADDITIONAL_FLAGS \\\n--set \"kubelet.serviceMonitor.cAdvisorRelabelings[0].targetLabel=metrics_path\" \\\n--set \"kubelet.serviceMonitor.cAdvisorRelabelings[0].action=replace\" \\\n--set \"kubelet.serviceMonitor.cAdvisorRelabelings[0].sourceLabels[0]=__metrics_path__\" \\\n--set \"kubelet.serviceMonitor.cAdvisorRelabelings[1].targetLabel=clusterName\" \\\n--set \"kubelet.serviceMonitor.cAdvisorRelabelings[1].replacement=$CLUSTER_NAME\" \\\n--set \"kubelet.serviceMonitor.cAdvisorRelabelings[2].targetLabel=gitRef\" \\\n--set \"kubelet.serviceMonitor.cAdvisorRelabelings[2].replacement=$(git rev-parse HEAD)\" \\\n--set \"kubelet.serviceMonitor.cAdvisorRelabelings[3].targetLabel=mostRecentTag\" \\\n--set \"kubelet.serviceMonitor.cAdvisorRelabelings[3].replacement=$(git describe --abbrev=0 --tags)\" \\\n--set \"kubelet.serviceMonitor.cAdvisorRelabelings[4].targetLabel=commitsAfterTag\" \\\n--set \"kubelet.serviceMonitor.cAdvisorRelabelings[4].replacement=\\\"$(git describe --tags | cut -d '-' -f 2)\\\"\" \\\n--wait\n"
  },
  {
    "path": "test/hack/e2e_scripts/noderole_bootstrap_permission.sh",
    "content": "eksctl create iamidentitymapping \\\n--username system:node:{{EC2PrivateDNSName}} \\\n--cluster \"$CLUSTER_NAME\" \\\n--arn \"arn:aws:iam::$ACCOUNT_ID:role/KarpenterNodeRole-$CLUSTER_NAME\" \\\n--group system:bootstrappers \\\n--group system:nodes \\\n--group eks:kube-proxy-windows\n"
  },
  {
    "path": "test/hack/resource/clean/main.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage main\n\nimport (\n\t\"context\"\n\t\"flag\"\n\t\"fmt\"\n\t\"slices\"\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go-v2/config\"\n\t\"github.com/aws/aws-sdk-go-v2/service/cloudformation\"\n\t\"github.com/aws/aws-sdk-go-v2/service/ec2\"\n\t\"github.com/aws/aws-sdk-go-v2/service/iam\"\n\t\"github.com/samber/lo\"\n\t\"go.uber.org/zap\"\n\n\t\"github.com/aws/karpenter-provider-aws/test/hack/resource/pkg/metrics\"\n\t\"github.com/aws/karpenter-provider-aws/test/hack/resource/pkg/resourcetypes\"\n)\n\nconst sweeperCleanedResourcesTableName = \"sweeperCleanedResources\"\n\nvar excludedClusters = []string{}\n\nfunc main() {\n\texpiration := flag.String(\"expiration\", \"12h\", \"define the expirationTTL of the resources\")\n\tclusterName := flag.String(\"cluster-name\", \"\", \"define cluster name to cleanup\")\n\tflag.Parse()\n\n\tctx := context.Background()\n\tcfg := lo.Must(config.LoadDefaultConfig(ctx))\n\tcfg.RetryMaxAttempts = 10\n\n\tlogger := lo.Must(zap.NewProduction()).Sugar()\n\n\texpirationTTL, err := time.ParseDuration(lo.FromPtr(expiration))\n\tif err != nil {\n\t\tlogger.Fatalln(\"need a valid expiration duration\", err)\n\t}\n\texpirationTime := time.Now().Add(-expirationTTL)\n\n\tlogger.With(\"expiration-time\", expirationTime.String()).Infof(\"resolved expiration time for all resourceTypes\")\n\n\tec2Client := ec2.NewFromConfig(cfg)\n\tcloudFormationClient := cloudformation.NewFromConfig(cfg)\n\tiamClient := iam.NewFromConfig(cfg)\n\n\tmetricsClient := metrics.Client(metrics.NewTimeStream(cfg))\n\n\t// These resources are intentionally ordered so that instances that are using ENIs\n\t// will be cleaned before ENIs are attempted to be cleaned up. Likewise, instances and ENIs\n\t// are cleaned up before security groups are cleaned up to ensure that everything is detached and doesn't\n\t// prevent deletion\n\tresourceTypes := []resourcetypes.Type{\n\t\tresourcetypes.NewInstance(ec2Client),\n\t\tresourcetypes.NewVPCEndpoint(ec2Client),\n\t\tresourcetypes.NewENI(ec2Client),\n\t\tresourcetypes.NewSecurityGroup(ec2Client),\n\t\tresourcetypes.NewLaunchTemplate(ec2Client),\n\t\tresourcetypes.NewOIDC(iamClient),\n\t\tresourcetypes.NewInstanceProfile(iamClient),\n\t\tresourcetypes.NewStack(cloudFormationClient),\n\t\tresourcetypes.NewVPCPeeringConnection(ec2Client),\n\t}\n\n\tfor i := range resourceTypes {\n\t\tresourceLogger := logger.With(\"type\", resourceTypes[i].String())\n\t\tvar ids []string\n\t\tvar err error\n\t\t// If there's no cluster defined, clean up all expired resources. otherwise, only cleanup the resources associated with the cluster\n\t\tif lo.FromPtr(clusterName) == \"\" {\n\t\t\tids, err = resourceTypes[i].GetExpired(ctx, expirationTime, excludedClusters)\n\t\t} else if !slices.Contains(excludedClusters, lo.FromPtr(clusterName)) {\n\t\t\tids, err = resourceTypes[i].Get(ctx, lo.FromPtr(clusterName))\n\t\t}\n\t\tif err != nil {\n\t\t\tresourceLogger.Errorf(\"%v\", err)\n\t\t}\n\t\tcleaned := []string{}\n\t\tresourceLogger.With(\"ids\", ids, \"count\", len(ids)).Infof(\"discovered resourceTypes\")\n\t\tif len(ids) > 0 {\n\t\t\tcleaned, err = resourceTypes[i].Cleanup(ctx, ids)\n\t\t\tif err != nil {\n\t\t\t\tresourceLogger.Errorf(\"%v\", err)\n\t\t\t}\n\t\t\tresourceLogger.With(\"ids\", cleaned, \"count\", len(cleaned)).Infof(\"deleted resourceTypes\")\n\t\t}\n\t\t// Should only fire metrics if the resource have expired\n\t\tif lo.FromPtr(clusterName) == \"\" {\n\t\t\tif err = metricsClient.FireMetric(ctx, sweeperCleanedResourcesTableName, fmt.Sprintf(\"%sDeleted\", resourceTypes[i].String()), float64(len(cleaned)), lo.Ternary(resourceTypes[i].Global(), \"global\", cfg.Region)); err != nil {\n\t\t\t\tresourceLogger.Errorf(\"%v\", err)\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "test/hack/resource/count/main.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage main\n\nimport (\n\t\"context\"\n\n\t\"github.com/aws/aws-sdk-go-v2/config\"\n\t\"github.com/aws/aws-sdk-go-v2/service/cloudformation\"\n\t\"github.com/aws/aws-sdk-go-v2/service/ec2\"\n\t\"github.com/aws/aws-sdk-go-v2/service/iam\"\n\t\"github.com/samber/lo\"\n\t\"go.uber.org/zap\"\n\n\t\"github.com/aws/karpenter-provider-aws/test/hack/resource/pkg/metrics\"\n\t\"github.com/aws/karpenter-provider-aws/test/hack/resource/pkg/resourcetypes\"\n)\n\nconst resourceCountTableName = \"resourceCount\"\n\nfunc main() {\n\tctx := context.Background()\n\tcfg := lo.Must(config.LoadDefaultConfig(ctx))\n\n\tlogger := lo.Must(zap.NewProduction()).Sugar()\n\n\tec2Client := ec2.NewFromConfig(cfg)\n\tcloudFormationClient := cloudformation.NewFromConfig(cfg)\n\tiamClient := iam.NewFromConfig(cfg)\n\tmetricsClient := metrics.Client(metrics.NewTimeStream(cfg))\n\n\tresourceTypes := []resourcetypes.Type{\n\t\tresourcetypes.NewInstance(ec2Client),\n\t\tresourcetypes.NewVPCEndpoint(ec2Client),\n\t\tresourcetypes.NewENI(ec2Client),\n\t\tresourcetypes.NewSecurityGroup(ec2Client),\n\t\tresourcetypes.NewLaunchTemplate(ec2Client),\n\t\tresourcetypes.NewOIDC(iamClient),\n\t\tresourcetypes.NewInstanceProfile(iamClient),\n\t\tresourcetypes.NewStack(cloudFormationClient),\n\t\tresourcetypes.NewVPCPeeringConnection(ec2Client),\n\t}\n\n\tfor i := range resourceTypes {\n\t\tresourceLogger := logger.With(\"type\", resourceTypes[i].String())\n\t\tresourceCount, err := resourceTypes[i].CountAll(ctx)\n\t\tif err != nil {\n\t\t\tresourceLogger.Errorf(\"%v\", err)\n\t\t}\n\n\t\tif err = metricsClient.FireMetric(ctx, resourceCountTableName, resourceTypes[i].String(), float64(resourceCount), lo.Ternary(resourceTypes[i].Global(), \"global\", cfg.Region)); err != nil {\n\t\t\tresourceLogger.Errorf(\"%v\", err)\n\t\t}\n\t\tresourceLogger.With(\"count\", resourceCount).Infof(\"counted resourceTypes\")\n\t}\n}\n"
  },
  {
    "path": "test/hack/resource/go.mod",
    "content": "module github.com/aws/karpenter-provider-aws/test/hack/resource\n\ngo 1.23.0\n\ntoolchain go1.24.0\n\nrequire (\n\tgithub.com/aws/aws-sdk-go-v2 v1.26.1\n\tgithub.com/aws/aws-sdk-go-v2/config v1.27.11\n\tgithub.com/aws/aws-sdk-go-v2/service/cloudformation v1.50.0\n\tgithub.com/aws/aws-sdk-go-v2/service/ec2 v1.160.0\n\tgithub.com/aws/aws-sdk-go-v2/service/iam v1.32.0\n\tgithub.com/aws/aws-sdk-go-v2/service/timestreamwrite v1.25.5\n\tgithub.com/samber/lo v1.47.0\n\tgo.uber.org/multierr v1.11.0\n\tgo.uber.org/zap v1.27.0\n\tk8s.io/api v0.30.0\n)\n\nrequire (\n\tgithub.com/aws/aws-sdk-go-v2/credentials v1.17.11 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.1 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/internal/configsources v1.3.5 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.5 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.2 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.9.6 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.7 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/service/sso v1.20.5 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/service/ssooidc v1.23.4 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/service/sts v1.28.6 // indirect\n\tgithub.com/aws/smithy-go v1.20.2 // indirect\n\tgithub.com/go-logr/logr v1.4.1 // indirect\n\tgithub.com/gogo/protobuf v1.3.2 // indirect\n\tgithub.com/google/gofuzz v1.2.0 // indirect\n\tgithub.com/jmespath/go-jmespath v0.4.0 // indirect\n\tgithub.com/json-iterator/go v1.1.12 // indirect\n\tgithub.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect\n\tgithub.com/modern-go/reflect2 v1.0.2 // indirect\n\tgolang.org/x/net v0.38.0 // indirect\n\tgolang.org/x/text v0.23.0 // indirect\n\tgopkg.in/inf.v0 v0.9.1 // indirect\n\tgopkg.in/yaml.v2 v2.4.0 // indirect\n\tk8s.io/apimachinery v0.30.0 // indirect\n\tk8s.io/klog/v2 v2.120.1 // indirect\n\tk8s.io/utils v0.0.0-20240502163921-fe8a2dddb1d0 // indirect\n\tsigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect\n\tsigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect\n)\n"
  },
  {
    "path": "test/hack/resource/go.sum",
    "content": "github.com/aws/aws-sdk-go-v2 v1.26.1 h1:5554eUqIYVWpU0YmeeYZ0wU64H2VLBs8TlhRB2L+EkA=\ngithub.com/aws/aws-sdk-go-v2 v1.26.1/go.mod h1:ffIFB97e2yNsv4aTSGkqtHnppsIJzw7G7BReUZ3jCXM=\ngithub.com/aws/aws-sdk-go-v2/config v1.27.11 h1:f47rANd2LQEYHda2ddSCKYId18/8BhSRM4BULGmfgNA=\ngithub.com/aws/aws-sdk-go-v2/config v1.27.11/go.mod h1:SMsV78RIOYdve1vf36z8LmnszlRWkwMQtomCAI0/mIE=\ngithub.com/aws/aws-sdk-go-v2/credentials v1.17.11 h1:YuIB1dJNf1Re822rriUOTxopaHHvIq0l/pX3fwO+Tzs=\ngithub.com/aws/aws-sdk-go-v2/credentials v1.17.11/go.mod h1:AQtFPsDH9bI2O+71anW6EKL+NcD7LG3dpKGMV4SShgo=\ngithub.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.1 h1:FVJ0r5XTHSmIHJV6KuDmdYhEpvlHpiSd38RQWhut5J4=\ngithub.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.1/go.mod h1:zusuAeqezXzAB24LGuzuekqMAEgWkVYukBec3kr3jUg=\ngithub.com/aws/aws-sdk-go-v2/internal/configsources v1.3.5 h1:aw39xVGeRWlWx9EzGVnhOR4yOjQDHPQ6o6NmBlscyQg=\ngithub.com/aws/aws-sdk-go-v2/internal/configsources v1.3.5/go.mod h1:FSaRudD0dXiMPK2UjknVwwTYyZMRsHv3TtkabsZih5I=\ngithub.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.5 h1:PG1F3OD1szkuQPzDw3CIQsRIrtTlUC3lP84taWzHlq0=\ngithub.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.5/go.mod h1:jU1li6RFryMz+so64PpKtudI+QzbKoIEivqdf6LNpOc=\ngithub.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 h1:hT8rVHwugYE2lEfdFE0QWVo81lF7jMrYJVDWI+f+VxU=\ngithub.com/aws/aws-sdk-go-v2/internal/ini v1.8.0/go.mod h1:8tu/lYfQfFe6IGnaOdrpVgEL2IrrDOf6/m9RQum4NkY=\ngithub.com/aws/aws-sdk-go-v2/service/cloudformation v1.50.0 h1:Ap5tOJfeAH1hO2UQc3X3uMlwP7uryFeZXMvZCXIlLSE=\ngithub.com/aws/aws-sdk-go-v2/service/cloudformation v1.50.0/go.mod h1:/v2KYdCW4BaHKayenaWEXOOdxItIwEA3oU0XzuQY3F0=\ngithub.com/aws/aws-sdk-go-v2/service/ec2 v1.160.0 h1:ooy0OFbrdSwgk32OFGPnvBwry5ySYCKkgTEbQ2hejs8=\ngithub.com/aws/aws-sdk-go-v2/service/ec2 v1.160.0/go.mod h1:xejKuuRDjz6z5OqyeLsz01MlOqqW7CqpAB4PabNvpu8=\ngithub.com/aws/aws-sdk-go-v2/service/iam v1.32.0 h1:ZNlfPdw849gBo/lvLFbEEvpTJMij0LXqiNWZ+lIamlU=\ngithub.com/aws/aws-sdk-go-v2/service/iam v1.32.0/go.mod h1:aXWImQV0uTW35LM0A/T4wEg6R1/ReXUu4SM6/lUHYK0=\ngithub.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.2 h1:Ji0DY1xUsUr3I8cHps0G+XM3WWU16lP6yG8qu1GAZAs=\ngithub.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.2/go.mod h1:5CsjAbs3NlGQyZNFACh+zztPDI7fU6eW9QsxjfnuBKg=\ngithub.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.9.6 h1:6tayEze2Y+hiL3kdnEUxSPsP+pJsUfwLSFspFl1ru9Q=\ngithub.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.9.6/go.mod h1:qVNb/9IOVsLCZh0x2lnagrBwQ9fxajUpXS7OZfIsKn0=\ngithub.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.7 h1:ogRAwT1/gxJBcSWDMZlgyFUM962F51A5CRhDLbxLdmo=\ngithub.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.7/go.mod h1:YCsIZhXfRPLFFCl5xxY+1T9RKzOKjCut+28JSX2DnAk=\ngithub.com/aws/aws-sdk-go-v2/service/sso v1.20.5 h1:vN8hEbpRnL7+Hopy9dzmRle1xmDc7o8tmY0klsr175w=\ngithub.com/aws/aws-sdk-go-v2/service/sso v1.20.5/go.mod h1:qGzynb/msuZIE8I75DVRCUXw3o3ZyBmUvMwQ2t/BrGM=\ngithub.com/aws/aws-sdk-go-v2/service/ssooidc v1.23.4 h1:Jux+gDDyi1Lruk+KHF91tK2KCuY61kzoCpvtvJJBtOE=\ngithub.com/aws/aws-sdk-go-v2/service/ssooidc v1.23.4/go.mod h1:mUYPBhaF2lGiukDEjJX2BLRRKTmoUSitGDUgM4tRxak=\ngithub.com/aws/aws-sdk-go-v2/service/sts v1.28.6 h1:cwIxeBttqPN3qkaAjcEcsh8NYr8n2HZPkcKgPAi1phU=\ngithub.com/aws/aws-sdk-go-v2/service/sts v1.28.6/go.mod h1:FZf1/nKNEkHdGGJP/cI2MoIMquumuRK6ol3QQJNDxmw=\ngithub.com/aws/aws-sdk-go-v2/service/timestreamwrite v1.25.5 h1:0Ty3j3QkLoqkZ+VagFisIsKYxGAzjv9hIQb84nlt/Jc=\ngithub.com/aws/aws-sdk-go-v2/service/timestreamwrite v1.25.5/go.mod h1:9R1IlrgiivwTCZdbKgMPkseFS+moUM+DLh0TEjO6pvE=\ngithub.com/aws/smithy-go v1.20.2 h1:tbp628ireGtzcHDDmLT/6ADHidqnwgF57XOXZe6tp4Q=\ngithub.com/aws/smithy-go v1.20.2/go.mod h1:krry+ya/rV9RDcV/Q16kpu6ypI4K2czasz0NC3qS14E=\ngithub.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=\ngithub.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=\ngithub.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=\ngithub.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=\ngithub.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=\ngithub.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=\ngithub.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=\ngithub.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=\ngithub.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=\ngithub.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=\ngithub.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=\ngithub.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0=\ngithub.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=\ngithub.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg=\ngithub.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=\ngithub.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8=\ngithub.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U=\ngithub.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=\ngithub.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=\ngithub.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=\ngithub.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=\ngithub.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=\ngithub.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=\ngithub.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=\ngithub.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=\ngithub.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=\ngithub.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=\ngithub.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=\ngithub.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=\ngithub.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=\ngithub.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=\ngithub.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=\ngithub.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ=\ngithub.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog=\ngithub.com/samber/lo v1.47.0 h1:z7RynLwP5nbyRscyvcD043DWYoOcYRv3mV8lBeqOCLc=\ngithub.com/samber/lo v1.47.0/go.mod h1:RmDH9Ct32Qy3gduHQuKJ3gW1fMHAnE/fAzQuf6He5cU=\ngithub.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=\ngithub.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=\ngithub.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=\ngithub.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=\ngithub.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=\ngithub.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=\ngithub.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=\ngithub.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=\ngo.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=\ngo.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=\ngo.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=\ngo.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=\ngo.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=\ngo.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=\ngolang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=\ngolang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=\ngolang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=\ngolang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=\ngolang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=\ngolang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=\ngolang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=\ngolang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=\ngolang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=\ngolang.org/x/net v0.38.0 h1:vRMAPTMaeGqVhG5QyLJHqNDwecKTomGeqbnfZyKlBI8=\ngolang.org/x/net v0.38.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8=\ngolang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\ngolang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\ngolang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\ngolang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=\ngolang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=\ngolang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=\ngolang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY=\ngolang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4=\ngolang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=\ngolang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=\ngolang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=\ngolang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=\ngolang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=\ngolang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=\ngolang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=\ngolang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=\ngopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=\ngopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=\ngopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=\ngopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=\ngopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=\ngopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=\ngopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=\ngopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=\ngopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=\ngopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=\nk8s.io/api v0.30.0 h1:siWhRq7cNjy2iHssOB9SCGNCl2spiF1dO3dABqZ8niA=\nk8s.io/api v0.30.0/go.mod h1:OPlaYhoHs8EQ1ql0R/TsUgaRPhpKNxIMrKQfWUp8QSE=\nk8s.io/apimachinery v0.30.0 h1:qxVPsyDM5XS96NIh9Oj6LavoVFYff/Pon9cZeDIkHHA=\nk8s.io/apimachinery v0.30.0/go.mod h1:iexa2somDaxdnj7bha06bhb43Zpa6eWH8N8dbqVjTUc=\nk8s.io/klog/v2 v2.120.1 h1:QXU6cPEOIslTGvZaXvFWiP9VKyeet3sawzTOvdXb4Vw=\nk8s.io/klog/v2 v2.120.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE=\nk8s.io/utils v0.0.0-20240502163921-fe8a2dddb1d0 h1:jgGTlFYnhF1PM1Ax/lAlxUPE+KfCIXHaathvJg1C3ak=\nk8s.io/utils v0.0.0-20240502163921-fe8a2dddb1d0/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=\nsigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=\nsigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=\nsigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4=\nsigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=\nsigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=\nsigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=\n"
  },
  {
    "path": "test/hack/resource/pkg/metrics/metrics.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage metrics\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go-v2/aws\"\n\t\"github.com/aws/aws-sdk-go-v2/service/timestreamwrite\"\n\ttimestreamtypes \"github.com/aws/aws-sdk-go-v2/service/timestreamwrite/types\"\n)\n\nconst (\n\tkarpenterMetricRegion   = \"us-east-2\"\n\tkarpenterMetricDatabase = \"karpenterTesting\"\n)\n\ntype Client interface {\n\tFireMetric(ctx context.Context, tableName string, metricName string, metricValue float64, region string) error\n}\n\ntype TimeStream struct {\n\ttimestreamClient *timestreamwrite.Client\n}\n\nfunc NewTimeStream(cfg aws.Config) *TimeStream {\n\treturn &TimeStream{timestreamClient: timestreamwrite.NewFromConfig(cfg, WithRegion(karpenterMetricRegion))}\n}\n\nfunc (t *TimeStream) FireMetric(ctx context.Context, tableName string, name string, value float64, region string) error {\n\t_, err := t.timestreamClient.WriteRecords(ctx, &timestreamwrite.WriteRecordsInput{\n\t\tDatabaseName: aws.String(karpenterMetricDatabase),\n\t\tTableName:    aws.String(tableName),\n\t\tRecords: []timestreamtypes.Record{\n\t\t\t{\n\t\t\t\tMeasureName:  aws.String(name),\n\t\t\t\tMeasureValue: aws.String(fmt.Sprintf(\"%f\", value)),\n\t\t\t\tTime:         aws.String(fmt.Sprintf(\"%d\", time.Now().UnixMilli())),\n\t\t\t\tDimensions: []timestreamtypes.Dimension{\n\t\t\t\t\t{\n\t\t\t\t\t\tName:  aws.String(\"region\"),\n\t\t\t\t\t\tValue: aws.String(region),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t})\n\treturn err\n}\n\nfunc WithRegion(region string) func(*timestreamwrite.Options) {\n\treturn func(o *timestreamwrite.Options) {\n\t\to.Region = region\n\t}\n}\n"
  },
  {
    "path": "test/hack/resource/pkg/resourcetypes/eni.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage resourcetypes\n\nimport (\n\t\"context\"\n\t\"slices\"\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go-v2/aws\"\n\t\"github.com/aws/aws-sdk-go-v2/service/ec2\"\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\t\"github.com/samber/lo\"\n\t\"go.uber.org/multierr\"\n)\n\ntype ENI struct {\n\tec2Client *ec2.Client\n}\n\nfunc NewENI(ec2Client *ec2.Client) *ENI {\n\treturn &ENI{ec2Client: ec2Client}\n}\n\nfunc (e *ENI) String() string {\n\treturn \"ElasticNetworkInterface\"\n}\n\nfunc (e *ENI) Global() bool {\n\treturn false\n}\n\nfunc (e *ENI) GetExpired(ctx context.Context, expirationTime time.Time, excludedClusters []string) (ids []string, err error) {\n\tenis, err := e.getAllENIs(ctx, &ec2.DescribeNetworkInterfacesInput{\n\t\tFilters: []ec2types.Filter{\n\t\t\t{\n\t\t\t\tName:   lo.ToPtr(\"tag-key\"),\n\t\t\t\tValues: []string{k8sClusterTag},\n\t\t\t},\n\t\t},\n\t})\n\tif err != nil {\n\t\treturn ids, err\n\t}\n\n\tfor _, ni := range enis {\n\t\tclusterName, found := lo.Find(ni.TagSet, func(tag ec2types.Tag) bool {\n\t\t\treturn *tag.Key == k8sClusterTag\n\t\t})\n\t\tif found && slices.Contains(excludedClusters, lo.FromPtr(clusterName.Value)) {\n\t\t\tcontinue\n\t\t}\n\t\tcreationDate, found := lo.Find(ni.TagSet, func(tag ec2types.Tag) bool {\n\t\t\treturn *tag.Key == \"node.k8s.amazonaws.com/createdAt\"\n\t\t})\n\t\tif !found {\n\t\t\tcontinue\n\t\t}\n\t\tcreationTime, err := time.Parse(time.RFC3339, *creationDate.Value)\n\t\tif err != nil {\n\t\t\tcontinue\n\t\t}\n\t\tif ni.Status == ec2types.NetworkInterfaceStatusAvailable && creationTime.Before(expirationTime) {\n\t\t\tids = append(ids, lo.FromPtr(ni.NetworkInterfaceId))\n\t\t}\n\t}\n\n\treturn ids, err\n}\n\nfunc (e *ENI) CountAll(ctx context.Context) (count int, err error) {\n\tenis, err := e.getAllENIs(ctx, &ec2.DescribeNetworkInterfacesInput{})\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\treturn len(enis), err\n}\n\nfunc (e *ENI) Get(ctx context.Context, clusterName string) (ids []string, err error) {\n\tenis, err := e.getAllENIs(ctx, &ec2.DescribeNetworkInterfacesInput{\n\t\tFilters: []ec2types.Filter{\n\t\t\t{\n\t\t\t\tName:   lo.ToPtr(\"tag:\" + k8sClusterTag),\n\t\t\t\tValues: []string{clusterName},\n\t\t\t},\n\t\t},\n\t})\n\tif err != nil {\n\t\treturn ids, err\n\t}\n\n\tfor _, ni := range enis {\n\t\tids = append(ids, lo.FromPtr(ni.NetworkInterfaceId))\n\t}\n\treturn ids, err\n}\n\n// Cleanup any old ENIs that were managed by Karpenter or were provisioned as part of testing\n// We execute these in serial since we will most likely get rate limited if we try to delete these too aggressively\nfunc (e *ENI) Cleanup(ctx context.Context, ids []string) ([]string, error) {\n\tvar deleted []string\n\tvar errs error\n\tfor i := range ids {\n\t\t_, err := e.ec2Client.DeleteNetworkInterface(ctx, &ec2.DeleteNetworkInterfaceInput{\n\t\t\tNetworkInterfaceId: aws.String(ids[i]),\n\t\t})\n\t\tif err != nil {\n\t\t\terrs = multierr.Append(errs, err)\n\t\t\tcontinue\n\t\t}\n\t\tdeleted = append(deleted, ids[i])\n\t}\n\n\treturn deleted, errs\n}\n\nfunc (e *ENI) getAllENIs(ctx context.Context, params *ec2.DescribeNetworkInterfacesInput) (enis []ec2types.NetworkInterface, err error) {\n\tpaginator := ec2.NewDescribeNetworkInterfacesPaginator(e.ec2Client, params)\n\n\tfor paginator.HasMorePages() {\n\t\tpage, err := paginator.NextPage(ctx)\n\t\tif err != nil {\n\t\t\treturn enis, err\n\t\t}\n\t\tenis = append(enis, page.NetworkInterfaces...)\n\t}\n\n\treturn enis, nil\n}\n"
  },
  {
    "path": "test/hack/resource/pkg/resourcetypes/instance.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage resourcetypes\n\nimport (\n\t\"context\"\n\t\"slices\"\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go-v2/service/ec2\"\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\t\"github.com/samber/lo\"\n\t\"go.uber.org/multierr\"\n)\n\ntype Instance struct {\n\tec2Client *ec2.Client\n}\n\nfunc NewInstance(ec2Client *ec2.Client) *Instance {\n\treturn &Instance{ec2Client: ec2Client}\n}\n\nfunc (i *Instance) String() string {\n\treturn \"Instances\"\n}\n\nfunc (i *Instance) Global() bool {\n\treturn false\n}\n\nfunc (i *Instance) GetExpired(ctx context.Context, expirationTime time.Time, excludedClusters []string) (ids []string, err error) {\n\tinstances, err := i.getAllInstances(ctx, &ec2.DescribeInstancesInput{\n\t\tFilters: []ec2types.Filter{\n\t\t\t{\n\t\t\t\tName:   lo.ToPtr(\"instance-state-name\"),\n\t\t\t\tValues: []string{string(ec2types.InstanceStateNameRunning)},\n\t\t\t},\n\t\t\t{\n\t\t\t\tName:   lo.ToPtr(\"tag-key\"),\n\t\t\t\tValues: []string{karpenterNodePoolTag},\n\t\t\t},\n\t\t},\n\t})\n\tif err != nil {\n\t\treturn ids, err\n\t}\n\n\tfor _, instance := range instances {\n\t\tclusterName, found := lo.Find(instance.Tags, func(tag ec2types.Tag) bool {\n\t\t\treturn *tag.Key == karpenterTestingTag\n\t\t})\n\t\tif found && slices.Contains(excludedClusters, lo.FromPtr(clusterName.Value)) {\n\t\t\tcontinue\n\t\t}\n\t\tif lo.FromPtr(instance.LaunchTime).Before(expirationTime) {\n\t\t\tids = append(ids, lo.FromPtr(instance.InstanceId))\n\t\t}\n\t}\n\n\treturn ids, err\n}\n\nfunc (i *Instance) CountAll(ctx context.Context) (count int, err error) {\n\tinstances, err := i.getAllInstances(ctx, &ec2.DescribeInstancesInput{\n\t\tFilters: []ec2types.Filter{\n\t\t\t{\n\t\t\t\tName: lo.ToPtr(\"instance-state-name\"),\n\t\t\t\tValues: []string{\n\t\t\t\t\tstring(ec2types.InstanceStateNameRunning),\n\t\t\t\t\tstring(ec2types.InstanceStateNamePending),\n\t\t\t\t\tstring(ec2types.InstanceStateNameShuttingDown),\n\t\t\t\t\tstring(ec2types.InstanceStateNameStopped),\n\t\t\t\t\tstring(ec2types.InstanceStateNameStopping),\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t})\n\tif err != nil {\n\t\treturn count, err\n\t}\n\n\treturn len(instances), err\n}\n\nfunc (i *Instance) Get(ctx context.Context, clusterName string) (ids []string, err error) {\n\tinstances, err := i.getAllInstances(ctx, &ec2.DescribeInstancesInput{\n\t\tFilters: []ec2types.Filter{\n\t\t\t{\n\t\t\t\tName:   lo.ToPtr(\"instance-state-name\"),\n\t\t\t\tValues: []string{string(ec2types.InstanceStateNameRunning)},\n\t\t\t},\n\t\t\t{\n\t\t\t\tName:   lo.ToPtr(\"tag:\" + karpenterClusterNameTag),\n\t\t\t\tValues: []string{clusterName},\n\t\t\t},\n\t\t},\n\t})\n\tif err != nil {\n\t\treturn ids, err\n\t}\n\n\tfor _, instance := range instances {\n\t\tids = append(ids, lo.FromPtr(instance.InstanceId))\n\t}\n\n\treturn ids, err\n}\n\n// Cleanup any old instances that were managed by Karpenter or were provisioned as part of testing\nfunc (i *Instance) Cleanup(ctx context.Context, ids []string) ([]string, error) {\n\t// The maximum number of EC2 instances which can be specified in a single API call\n\tconst maxIDCount = 1000\n\tchunkedIDs := lo.Chunk(ids, maxIDCount)\n\tcleaned := make([]string, 0, len(ids))\n\terrs := make([]error, 0, len(chunkedIDs))\n\tfor _, ids := range chunkedIDs {\n\t\tif _, err := i.ec2Client.TerminateInstances(ctx, &ec2.TerminateInstancesInput{\n\t\t\tInstanceIds: ids,\n\t\t}); err != nil {\n\t\t\terrs = append(errs, err)\n\t\t\tcontinue\n\t\t}\n\t\tcleaned = append(cleaned, ids...)\n\t}\n\treturn cleaned, multierr.Combine(errs...)\n}\n\nfunc (i *Instance) getAllInstances(ctx context.Context, params *ec2.DescribeInstancesInput) (instances []ec2types.Instance, err error) {\n\tpaginator := ec2.NewDescribeInstancesPaginator(i.ec2Client, params)\n\n\tfor paginator.HasMorePages() {\n\t\tpage, err := paginator.NextPage(ctx)\n\t\tif err != nil {\n\t\t\treturn instances, err\n\t\t}\n\n\t\tfor _, res := range page.Reservations {\n\t\t\tinstances = append(instances, res.Instances...)\n\t\t}\n\t}\n\n\treturn instances, nil\n}\n"
  },
  {
    "path": "test/hack/resource/pkg/resourcetypes/instanceprofile.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage resourcetypes\n\nimport (\n\t\"context\"\n\t\"slices\"\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go-v2/config\"\n\t\"github.com/aws/aws-sdk-go-v2/service/iam\"\n\tiamtypes \"github.com/aws/aws-sdk-go-v2/service/iam/types\"\n\t\"github.com/samber/lo\"\n\t\"go.uber.org/multierr\"\n\tv1 \"k8s.io/api/core/v1\"\n)\n\ntype InstanceProfile struct {\n\tiamClient *iam.Client\n}\n\nfunc NewInstanceProfile(iamClient *iam.Client) *InstanceProfile {\n\treturn &InstanceProfile{iamClient: iamClient}\n}\n\nfunc (ip *InstanceProfile) String() string {\n\treturn \"InstanceProfile\"\n}\n\nfunc (ip *InstanceProfile) Global() bool {\n\treturn true\n}\n\nfunc (ip *InstanceProfile) GetExpired(ctx context.Context, expirationTime time.Time, excludedClusters []string) (names []string, err error) {\n\tinstanceProfiles, err := ip.getAllInstanceProfiles(ctx)\n\tif err != nil {\n\t\treturn names, err\n\t}\n\n\terrs := make([]error, len(instanceProfiles))\n\tfor i := range instanceProfiles {\n\t\tprofiles, err := ip.iamClient.ListInstanceProfileTags(ctx, &iam.ListInstanceProfileTagsInput{\n\t\t\tInstanceProfileName: instanceProfiles[i].InstanceProfileName,\n\t\t})\n\t\tif err != nil {\n\t\t\terrs[i] = err\n\t\t\tcontinue\n\t\t}\n\n\t\tclusterName, _ := lo.Find(profiles.Tags, func(tag iamtypes.Tag) bool {\n\t\t\treturn lo.FromPtr(tag.Key) == karpenterTestingTag\n\t\t})\n\t\t// Checking to make sure we are only list resources in the given region\n\t\tregion, _ := lo.Find(profiles.Tags, func(tag iamtypes.Tag) bool {\n\t\t\treturn lo.FromPtr(tag.Key) == v1.LabelTopologyRegion\n\t\t})\n\t\tif slices.Contains(excludedClusters, lo.FromPtr(clusterName.Value)) || lo.FromPtr(region.Value) != lo.Must(config.LoadDefaultConfig(ctx)).Region {\n\t\t\tcontinue\n\t\t}\n\t\t// Since we can only get the date of the instance profile (not the exact time the instance profile was created)\n\t\t// we add a day to the time that it was created to account for the worst-case of the instance profile being created\n\t\t// at 23:59:59 and being marked with a time of 00:00:00 due to only capturing the date and not the time\n\t\tif lo.FromPtr(clusterName.Value) != \"\" && instanceProfiles[i].CreateDate.Add(time.Hour*24).Before(expirationTime) {\n\t\t\tnames = append(names, lo.FromPtr(instanceProfiles[i].InstanceProfileName))\n\t\t}\n\t}\n\n\treturn names, multierr.Combine(errs...)\n}\n\nfunc (ip *InstanceProfile) CountAll(ctx context.Context) (count int, err error) {\n\tinstanceProfiles, err := ip.getAllInstanceProfiles(ctx)\n\tif err != nil {\n\t\treturn count, err\n\t}\n\treturn len(instanceProfiles), err\n}\n\nfunc (ip *InstanceProfile) Get(ctx context.Context, clusterName string) (names []string, err error) {\n\tinstanceProfiles, err := ip.getAllInstanceProfiles(ctx)\n\tif err != nil {\n\t\treturn names, err\n\t}\n\n\terrs := make([]error, len(instanceProfiles))\n\tfor i := range instanceProfiles {\n\t\tprofiles, err := ip.iamClient.ListInstanceProfileTags(ctx, &iam.ListInstanceProfileTagsInput{\n\t\t\tInstanceProfileName: instanceProfiles[i].InstanceProfileName,\n\t\t})\n\t\tif err != nil {\n\t\t\terrs[i] = err\n\t\t\tcontinue\n\t\t}\n\n\t\tfor _, t := range profiles.Tags {\n\t\t\tif lo.FromPtr(t.Key) == karpenterTestingTag && lo.FromPtr(t.Value) == clusterName {\n\t\t\t\tnames = append(names, lo.FromPtr(instanceProfiles[i].InstanceProfileName))\n\t\t\t}\n\t\t}\n\t}\n\n\treturn names, multierr.Combine(errs...)\n}\n\n// Cleanup any old instance profiles that were managed by Karpenter or were provisioned as part of testing\n// We execute these in serial since we will most likely get rate limited if we try to delete these too aggressively\nfunc (ip *InstanceProfile) Cleanup(ctx context.Context, names []string) ([]string, error) {\n\tvar deleted []string\n\tvar errs error\n\tfor i := range names {\n\t\tout, _ := ip.iamClient.GetInstanceProfile(ctx, &iam.GetInstanceProfileInput{InstanceProfileName: lo.ToPtr(names[i])})\n\t\tif len(out.InstanceProfile.Roles) != 0 {\n\t\t\t_, _ = ip.iamClient.RemoveRoleFromInstanceProfile(ctx, &iam.RemoveRoleFromInstanceProfileInput{\n\t\t\t\tInstanceProfileName: lo.ToPtr(names[i]),\n\t\t\t\tRoleName:            out.InstanceProfile.Roles[0].RoleName,\n\t\t\t})\n\t\t}\n\t\t_, err := ip.iamClient.DeleteInstanceProfile(ctx, &iam.DeleteInstanceProfileInput{\n\t\t\tInstanceProfileName: lo.ToPtr(names[i]),\n\t\t})\n\t\tif err != nil {\n\t\t\terrs = multierr.Append(errs, err)\n\t\t}\n\t\tdeleted = append(deleted, names[i])\n\t}\n\treturn deleted, errs\n}\n\nfunc (ip *InstanceProfile) getAllInstanceProfiles(ctx context.Context) (instanceprofiles []iamtypes.InstanceProfile, err error) {\n\tpaginator := iam.NewListInstanceProfilesPaginator(ip.iamClient, &iam.ListInstanceProfilesInput{})\n\n\tfor paginator.HasMorePages() {\n\t\tout, err := paginator.NextPage(ctx)\n\t\tif err != nil {\n\t\t\treturn instanceprofiles, err\n\t\t}\n\t\tinstanceprofiles = append(instanceprofiles, out.InstanceProfiles...)\n\t}\n\n\treturn instanceprofiles, nil\n}\n"
  },
  {
    "path": "test/hack/resource/pkg/resourcetypes/launchtemplate.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage resourcetypes\n\nimport (\n\t\"context\"\n\t\"slices\"\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go-v2/service/ec2\"\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\t\"github.com/samber/lo\"\n\t\"go.uber.org/multierr\"\n)\n\ntype LaunchTemplate struct {\n\tec2Client *ec2.Client\n}\n\nfunc NewLaunchTemplate(ec2Client *ec2.Client) *LaunchTemplate {\n\treturn &LaunchTemplate{ec2Client: ec2Client}\n}\n\nfunc (lt *LaunchTemplate) String() string {\n\treturn \"LaunchTemplates\"\n}\n\nfunc (lt *LaunchTemplate) Global() bool {\n\treturn false\n}\n\nfunc (lt *LaunchTemplate) GetExpired(ctx context.Context, expirationTime time.Time, excludedClusters []string) (names []string, err error) {\n\tlts, err := lt.getAllLaunchTemplates(ctx, &ec2.DescribeLaunchTemplatesInput{\n\t\tFilters: []ec2types.Filter{\n\t\t\t{\n\t\t\t\tName:   lo.ToPtr(\"tag-key\"),\n\t\t\t\tValues: []string{karpenterLaunchTemplateTag},\n\t\t\t},\n\t\t},\n\t})\n\tif err != nil {\n\t\treturn names, err\n\t}\n\n\tfor _, launchtemplate := range lts {\n\t\tclusterName, found := lo.Find(launchtemplate.Tags, func(tag ec2types.Tag) bool {\n\t\t\treturn *tag.Key == k8sClusterTag\n\t\t})\n\t\tif found && slices.Contains(excludedClusters, lo.FromPtr(clusterName.Value)) {\n\t\t\tcontinue\n\t\t}\n\t\tif lo.FromPtr(launchtemplate.CreateTime).Before(expirationTime) {\n\t\t\tnames = append(names, lo.FromPtr(launchtemplate.LaunchTemplateName))\n\t\t}\n\t}\n\n\treturn names, err\n}\n\nfunc (lt *LaunchTemplate) CountAll(ctx context.Context) (count int, err error) {\n\tlts, err := lt.getAllLaunchTemplates(ctx, &ec2.DescribeLaunchTemplatesInput{})\n\tif err != nil {\n\t\treturn count, err\n\t}\n\n\treturn len(lts), err\n}\n\nfunc (lt *LaunchTemplate) Get(ctx context.Context, clusterName string) (names []string, err error) {\n\tlts, err := lt.getAllLaunchTemplates(ctx, &ec2.DescribeLaunchTemplatesInput{\n\t\tFilters: []ec2types.Filter{\n\t\t\t{\n\t\t\t\tName:   lo.ToPtr(\"tag:\" + karpenterLaunchTemplateTag),\n\t\t\t\tValues: []string{clusterName},\n\t\t\t},\n\t\t},\n\t})\n\tif err != nil {\n\t\treturn names, err\n\t}\n\n\tfor _, launchtemplate := range lts {\n\t\tnames = append(names, lo.FromPtr(launchtemplate.LaunchTemplateName))\n\t}\n\n\treturn names, err\n}\n\n// Cleanup any old launch templates that were managed by Karpenter or were provisioned as part of testing\n// We execute these in serial since we will most likely get rate limited if we try to delete these too aggressively\nfunc (lt *LaunchTemplate) Cleanup(ctx context.Context, names []string) ([]string, error) {\n\tvar deleted []string\n\tvar errs error\n\tfor i := range names {\n\t\t_, err := lt.ec2Client.DeleteLaunchTemplate(ctx, &ec2.DeleteLaunchTemplateInput{\n\t\t\tLaunchTemplateName: lo.ToPtr(names[i]),\n\t\t})\n\t\tif err != nil {\n\t\t\terrs = multierr.Append(errs, err)\n\t\t\tcontinue\n\t\t}\n\t\tdeleted = append(deleted, names[i])\n\t}\n\treturn deleted, errs\n}\n\nfunc (lt *LaunchTemplate) getAllLaunchTemplates(ctx context.Context, params *ec2.DescribeLaunchTemplatesInput) (lts []ec2types.LaunchTemplate, err error) {\n\tpaginator := ec2.NewDescribeLaunchTemplatesPaginator(lt.ec2Client, params)\n\n\tfor paginator.HasMorePages() {\n\t\tpage, err := paginator.NextPage(ctx)\n\t\tif err != nil {\n\t\t\treturn lts, err\n\t\t}\n\t\tlts = append(lts, page.LaunchTemplates...)\n\t}\n\n\treturn lts, nil\n}\n"
  },
  {
    "path": "test/hack/resource/pkg/resourcetypes/oidc.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage resourcetypes\n\nimport (\n\t\"context\"\n\t\"slices\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go-v2/config\"\n\t\"github.com/aws/aws-sdk-go-v2/service/iam\"\n\tiamtypes \"github.com/aws/aws-sdk-go-v2/service/iam/types\"\n\t\"github.com/samber/lo\"\n\t\"go.uber.org/multierr\"\n)\n\ntype OIDC struct {\n\tiamClient *iam.Client\n}\n\nfunc NewOIDC(iamClient *iam.Client) *OIDC {\n\treturn &OIDC{iamClient: iamClient}\n}\n\nfunc (o *OIDC) String() string {\n\treturn \"OpenIDConnectProvider\"\n}\n\nfunc (o *OIDC) Global() bool {\n\treturn true\n}\n\nfunc (o *OIDC) GetExpired(ctx context.Context, expirationTime time.Time, excludedClusters []string) (names []string, err error) {\n\tout, err := o.iamClient.ListOpenIDConnectProviders(ctx, &iam.ListOpenIDConnectProvidersInput{})\n\tif err != nil {\n\t\treturn names, err\n\t}\n\n\terrs := make([]error, len(out.OpenIDConnectProviderList))\n\tfor i := range out.OpenIDConnectProviderList {\n\t\t// Checking to make sure we are only list resources in the given region\n\t\tif !strings.Contains(lo.FromPtr(out.OpenIDConnectProviderList[i].Arn), lo.Must(config.LoadDefaultConfig(ctx)).Region) {\n\t\t\tcontinue\n\t\t}\n\t\toicd, err := o.iamClient.GetOpenIDConnectProvider(ctx, &iam.GetOpenIDConnectProviderInput{\n\t\t\tOpenIDConnectProviderArn: out.OpenIDConnectProviderList[i].Arn,\n\t\t})\n\t\tif err != nil {\n\t\t\terrs[i] = err\n\t\t\tcontinue\n\t\t}\n\n\t\tclusterName, found := lo.Find(oicd.Tags, func(tag iamtypes.Tag) bool {\n\t\t\treturn *tag.Key == k8sClusterTag\n\t\t})\n\t\tif found && slices.Contains(excludedClusters, lo.FromPtr(clusterName.Value)) {\n\t\t\tcontinue\n\t\t}\n\n\t\tfor _, t := range oicd.Tags {\n\t\t\tif lo.FromPtr(t.Key) == githubRunURLTag && oicd.CreateDate.Before(expirationTime) {\n\t\t\t\tnames = append(names, lo.FromPtr(out.OpenIDConnectProviderList[i].Arn))\n\t\t\t}\n\t\t}\n\t}\n\n\treturn names, multierr.Combine(errs...)\n}\n\nfunc (o *OIDC) CountAll(ctx context.Context) (count int, err error) {\n\tout, err := o.iamClient.ListOpenIDConnectProviders(ctx, &iam.ListOpenIDConnectProvidersInput{})\n\tif err != nil {\n\t\treturn count, err\n\t}\n\n\treturn len(out.OpenIDConnectProviderList), nil\n}\n\nfunc (o *OIDC) Get(ctx context.Context, clusterName string) (names []string, err error) {\n\treturn names, err\n}\n\n// Cleanup any old OIDC providers that were are remaining as part of testing\n// We execute these in serial since we will most likely get rate limited if we try to delete these too aggressively\nfunc (o *OIDC) Cleanup(ctx context.Context, arns []string) ([]string, error) {\n\tvar deleted []string\n\tvar errs error\n\tfor i := range arns {\n\t\t_, err := o.iamClient.DeleteOpenIDConnectProvider(ctx, &iam.DeleteOpenIDConnectProviderInput{\n\t\t\tOpenIDConnectProviderArn: lo.ToPtr(arns[i]),\n\t\t})\n\t\tif err != nil {\n\t\t\terrs = multierr.Append(errs, err)\n\t\t\tcontinue\n\t\t}\n\t\tdeleted = append(deleted, arns[i])\n\t}\n\treturn deleted, errs\n}\n"
  },
  {
    "path": "test/hack/resource/pkg/resourcetypes/resourcetypes.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage resourcetypes\n\nimport (\n\t\"context\"\n\t\"time\"\n)\n\nconst (\n\tkarpenterClusterNameTag    = \"eks:eks-cluster-name\"\n\tkarpenterNodePoolTag       = \"karpenter.sh/nodepool\"\n\tkarpenterLaunchTemplateTag = \"karpenter.k8s.aws/cluster\"\n\tkarpenterSecurityGroupTag  = \"karpenter.sh/discovery\"\n\tkarpenterTestingTag        = \"testing/cluster\"\n\tk8sClusterTag              = \"cluster.k8s.amazonaws.com/name\"\n\tgithubRunURLTag            = \"github.com/run-url\"\n)\n\n// Type is a resource type that can be cleaned through a cluster clean-up operation\n// and through an expiration-based cleanup operation\ntype Type interface {\n\t// String is the string representation of the type\n\tString() string\n\t// Global determines if a resource is globally located in an account\n\tGlobal() bool\n\t// Get returns all resources of the type associated with the clusterName\n\tGet(ctx context.Context, clusterName string) (ids []string, err error)\n\t// GetExpired returns all resources of the type that were provisioned before the expirationTime\n\tGetExpired(ctx context.Context, expirationTime time.Time, excludedClusters []string) (ids []string, err error)\n\t// Cleanup deletes all resources of the type by id and returns the resource ids it succeeded to delete\n\t// In general, if all resources can't be deleted by id with a single API call (like with DeleteInstances)\n\t// you should call the requests synchronously to avoid rate limiting against the number of requests made\n\tCleanup(ctx context.Context, ids []string) (cleaned []string, err error)\n\t// CountAll returns the number of all resource of the type in the account\n\tCountAll(ctx context.Context) (count int, err error)\n}\n"
  },
  {
    "path": "test/hack/resource/pkg/resourcetypes/securitygroup.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage resourcetypes\n\nimport (\n\t\"context\"\n\t\"slices\"\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go-v2/aws\"\n\t\"github.com/aws/aws-sdk-go-v2/service/ec2\"\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\t\"github.com/samber/lo\"\n\t\"go.uber.org/multierr\"\n)\n\ntype SecurityGroup struct {\n\tec2Client *ec2.Client\n}\n\nfunc NewSecurityGroup(ec2Client *ec2.Client) *SecurityGroup {\n\treturn &SecurityGroup{ec2Client: ec2Client}\n}\n\nfunc (sg *SecurityGroup) String() string {\n\treturn \"SecurityGroup\"\n}\n\nfunc (sg *SecurityGroup) Global() bool {\n\treturn false\n}\n\nfunc (sg *SecurityGroup) GetExpired(ctx context.Context, expirationTime time.Time, excludedClusters []string) (ids []string, err error) {\n\tsgs, err := sg.getAllSecurityGroups(ctx, &ec2.DescribeSecurityGroupsInput{\n\t\tFilters: []ec2types.Filter{\n\t\t\t{\n\t\t\t\tName:   lo.ToPtr(\"group-name\"),\n\t\t\t\tValues: []string{\"security-group-drift\"},\n\t\t\t},\n\t\t},\n\t})\n\tif err != nil {\n\t\treturn ids, err\n\t}\n\n\tfor _, sgroup := range sgs {\n\t\tclusterName, found := lo.Find(sgroup.Tags, func(tag ec2types.Tag) bool {\n\t\t\treturn *tag.Key == karpenterTestingTag\n\t\t})\n\t\tif found && slices.Contains(excludedClusters, lo.FromPtr(clusterName.Value)) {\n\t\t\tcontinue\n\t\t}\n\t\tcreationDate, found := lo.Find(sgroup.Tags, func(tag ec2types.Tag) bool {\n\t\t\treturn *tag.Key == \"creation-date\"\n\t\t})\n\t\tif !found {\n\t\t\tcontinue\n\t\t}\n\t\ttime, err := time.Parse(time.RFC3339, *creationDate.Value)\n\t\tif err != nil {\n\t\t\tcontinue\n\t\t}\n\t\tif time.Before(expirationTime) {\n\t\t\tids = append(ids, lo.FromPtr(sgroup.GroupId))\n\t\t}\n\t}\n\n\treturn ids, err\n}\n\nfunc (sg *SecurityGroup) CountAll(ctx context.Context) (count int, err error) {\n\tsgs, err := sg.getAllSecurityGroups(ctx, &ec2.DescribeSecurityGroupsInput{})\n\tif err != nil {\n\t\treturn count, err\n\t}\n\n\treturn len(sgs), err\n}\n\nfunc (sg *SecurityGroup) Get(ctx context.Context, clusterName string) (ids []string, err error) {\n\tsgs, err := sg.getAllSecurityGroups(ctx, &ec2.DescribeSecurityGroupsInput{\n\t\tFilters: []ec2types.Filter{\n\t\t\t{\n\t\t\t\tName:   lo.ToPtr(\"tag:\" + karpenterSecurityGroupTag),\n\t\t\t\tValues: []string{clusterName},\n\t\t\t},\n\t\t},\n\t})\n\tif err != nil {\n\t\treturn ids, err\n\t}\n\n\tfor _, sgroup := range sgs {\n\t\tids = append(ids, lo.FromPtr(sgroup.GroupId))\n\t}\n\n\treturn ids, err\n}\n\n// Cleanup any old security groups that were provisioned as part of testing\n// We execute these in serial since we will most likely get rate limited if we try to delete these too aggressively\nfunc (sg *SecurityGroup) Cleanup(ctx context.Context, ids []string) ([]string, error) {\n\tvar deleted []string\n\tvar errs error\n\tfor i := range ids {\n\t\t_, err := sg.ec2Client.DeleteSecurityGroup(ctx, &ec2.DeleteSecurityGroupInput{\n\t\t\tGroupId: aws.String(ids[i]),\n\t\t})\n\t\tif err != nil {\n\t\t\terrs = multierr.Append(errs, err)\n\t\t\tcontinue\n\t\t}\n\t\tdeleted = append(deleted, ids[i])\n\t}\n\n\treturn deleted, errs\n}\n\nfunc (sg *SecurityGroup) getAllSecurityGroups(ctx context.Context, params *ec2.DescribeSecurityGroupsInput) (sgs []ec2types.SecurityGroup, err error) {\n\tpaginator := ec2.NewDescribeSecurityGroupsPaginator(sg.ec2Client, params)\n\n\tfor paginator.HasMorePages() {\n\t\tout, err := paginator.NextPage(ctx)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tsgs = append(sgs, out.SecurityGroups...)\n\t}\n\n\treturn sgs, nil\n}\n"
  },
  {
    "path": "test/hack/resource/pkg/resourcetypes/stack.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage resourcetypes\n\nimport (\n\t\"context\"\n\t\"slices\"\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go-v2/service/cloudformation\"\n\tcloudformationtypes \"github.com/aws/aws-sdk-go-v2/service/cloudformation/types\"\n\t\"github.com/samber/lo\"\n\t\"go.uber.org/multierr\"\n)\n\ntype Stack struct {\n\tcloudFormationClient *cloudformation.Client\n}\n\nfunc NewStack(cloudFormationClient *cloudformation.Client) *Stack {\n\treturn &Stack{cloudFormationClient: cloudFormationClient}\n}\n\nfunc (s *Stack) String() string {\n\treturn \"CloudformationStacks\"\n}\n\nfunc (s *Stack) Global() bool {\n\treturn false\n}\n\nfunc (s *Stack) GetExpired(ctx context.Context, expirationTime time.Time, excludedClusters []string) (names []string, err error) {\n\tstacks, err := s.getAllStacks(ctx)\n\tif err != nil {\n\t\treturn names, err\n\t}\n\n\tactiveStacks := lo.Reject(stacks, func(s cloudformationtypes.Stack, _ int) bool {\n\t\treturn s.StackStatus == cloudformationtypes.StackStatusDeleteComplete ||\n\t\t\ts.StackStatus == cloudformationtypes.StackStatusDeleteInProgress\n\t})\n\tfor _, stack := range activeStacks {\n\t\tclusterName, found := lo.Find(stack.Tags, func(tag cloudformationtypes.Tag) bool {\n\t\t\treturn *tag.Key == karpenterTestingTag\n\t\t})\n\t\tif found && slices.Contains(excludedClusters, lo.FromPtr(clusterName.Value)) {\n\t\t\tcontinue\n\t\t}\n\t\tif _, found := lo.Find(stack.Tags, func(t cloudformationtypes.Tag) bool {\n\t\t\treturn lo.FromPtr(t.Key) == karpenterTestingTag || lo.FromPtr(t.Key) == githubRunURLTag\n\t\t}); found && lo.FromPtr(stack.CreationTime).Before(expirationTime) {\n\t\t\tnames = append(names, lo.FromPtr(stack.StackName))\n\t\t}\n\t}\n\treturn names, err\n}\n\nfunc (s *Stack) CountAll(ctx context.Context) (count int, err error) {\n\tstacks, err := s.getAllStacks(ctx)\n\tif err != nil {\n\t\treturn count, err\n\t}\n\n\treturn len(stacks), nil\n}\n\nfunc (s *Stack) Get(ctx context.Context, clusterName string) (names []string, err error) {\n\tstacks, err := s.getAllStacks(ctx)\n\tif err != nil {\n\t\treturn names, err\n\t}\n\n\tfor _, stack := range stacks {\n\t\tif _, found := lo.Find(stack.Tags, func(t cloudformationtypes.Tag) bool {\n\t\t\treturn lo.FromPtr(t.Key) == karpenterTestingTag && lo.FromPtr(t.Value) == clusterName\n\t\t}); found {\n\t\t\tnames = append(names, lo.FromPtr(stack.StackName))\n\t\t}\n\t}\n\treturn names, nil\n}\n\n// Cleanup any old stacks that were provisioned as part of testing\n// We execute these in serial since we will most likely get rate limited if we try to delete these too aggressively\nfunc (s *Stack) Cleanup(ctx context.Context, names []string) ([]string, error) {\n\tvar deleted []string\n\tvar errs error\n\tfor i := range names {\n\t\t_, err := s.cloudFormationClient.DeleteStack(ctx, &cloudformation.DeleteStackInput{\n\t\t\tStackName: lo.ToPtr(names[i]),\n\t\t})\n\t\tif err != nil {\n\t\t\terrs = multierr.Append(errs, err)\n\t\t\tcontinue\n\t\t}\n\t\tdeleted = append(deleted, names[i])\n\t}\n\treturn deleted, errs\n}\n\nfunc (s *Stack) getAllStacks(ctx context.Context) (stacks []cloudformationtypes.Stack, err error) {\n\tpaginator := cloudformation.NewDescribeStacksPaginator(s.cloudFormationClient, &cloudformation.DescribeStacksInput{})\n\n\tfor paginator.HasMorePages() {\n\t\tout, err := paginator.NextPage(ctx)\n\t\tif err != nil {\n\t\t\treturn stacks, err\n\t\t}\n\t\tstacks = append(stacks, out.Stacks...)\n\t}\n\n\treturn stacks, nil\n}\n"
  },
  {
    "path": "test/hack/resource/pkg/resourcetypes/vpc_endpoint.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage resourcetypes\n\nimport (\n\t\"context\"\n\t\"slices\"\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go-v2/service/ec2\"\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\t\"github.com/samber/lo\"\n)\n\ntype VPCEndpoint struct {\n\tec2Client *ec2.Client\n}\n\nfunc NewVPCEndpoint(ec2Client *ec2.Client) *VPCEndpoint {\n\treturn &VPCEndpoint{ec2Client: ec2Client}\n}\n\nfunc (v *VPCEndpoint) String() string {\n\treturn \"VPCEndpoints\"\n}\n\nfunc (v *VPCEndpoint) Global() bool {\n\treturn false\n}\n\nfunc (v *VPCEndpoint) GetExpired(ctx context.Context, expirationTime time.Time, excludedClusters []string) (ids []string, err error) {\n\tendpoints, err := v.getAllVpcEndpoints(ctx, &ec2.DescribeVpcEndpointsInput{\n\t\tFilters: []ec2types.Filter{\n\t\t\t{\n\t\t\t\tName:   lo.ToPtr(\"tag-key\"),\n\t\t\t\tValues: []string{karpenterTestingTag},\n\t\t\t},\n\t\t},\n\t})\n\tif err != nil {\n\t\treturn ids, err\n\t}\n\n\tfor _, endpoint := range endpoints {\n\t\tclusterName, found := lo.Find(endpoint.Tags, func(tag ec2types.Tag) bool {\n\t\t\treturn *tag.Key == k8sClusterTag\n\t\t})\n\t\tif found && slices.Contains(excludedClusters, lo.FromPtr(clusterName.Value)) {\n\t\t\tcontinue\n\t\t}\n\t\tif endpoint.CreationTimestamp.Before(expirationTime) {\n\t\t\tids = append(ids, lo.FromPtr(endpoint.VpcEndpointId))\n\t\t}\n\t}\n\n\treturn ids, err\n}\n\nfunc (v *VPCEndpoint) CountAll(ctx context.Context) (count int, err error) {\n\tendpoints, err := v.getAllVpcEndpoints(ctx, &ec2.DescribeVpcEndpointsInput{})\n\tif err != nil {\n\t\treturn count, err\n\t}\n\n\treturn len(endpoints), err\n}\n\nfunc (v *VPCEndpoint) Get(ctx context.Context, clusterName string) (ids []string, err error) {\n\tendpoints, err := v.getAllVpcEndpoints(ctx, &ec2.DescribeVpcEndpointsInput{\n\t\tFilters: []ec2types.Filter{\n\t\t\t{\n\t\t\t\tName:   lo.ToPtr(\"tag:\" + karpenterTestingTag),\n\t\t\t\tValues: []string{clusterName},\n\t\t\t},\n\t\t},\n\t})\n\tif err != nil {\n\t\treturn ids, err\n\t}\n\n\tfor _, endpoint := range endpoints {\n\t\tids = append(ids, lo.FromPtr(endpoint.VpcEndpointId))\n\t}\n\n\treturn ids, err\n}\n\n// Cleanup any old VPC endpoints that were provisioned as part of testing\nfunc (v *VPCEndpoint) Cleanup(ctx context.Context, ids []string) ([]string, error) {\n\tif _, err := v.ec2Client.DeleteVpcEndpoints(ctx, &ec2.DeleteVpcEndpointsInput{\n\t\tVpcEndpointIds: ids,\n\t}); err != nil {\n\t\treturn nil, err\n\t}\n\treturn ids, nil\n}\n\nfunc (v *VPCEndpoint) getAllVpcEndpoints(ctx context.Context, params *ec2.DescribeVpcEndpointsInput) (endpoints []ec2types.VpcEndpoint, err error) {\n\tpaginator := ec2.NewDescribeVpcEndpointsPaginator(v.ec2Client, params)\n\n\tfor paginator.HasMorePages() {\n\t\tout, err := paginator.NextPage(ctx)\n\t\tif err != nil {\n\t\t\treturn endpoints, err\n\t\t}\n\t\tendpoints = append(endpoints, out.VpcEndpoints...)\n\t}\n\n\treturn endpoints, nil\n}\n"
  },
  {
    "path": "test/hack/resource/pkg/resourcetypes/vpc_peering_connection.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage resourcetypes\n\nimport (\n\t\"context\"\n\t\"slices\"\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go-v2/service/ec2\"\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\t\"github.com/samber/lo\"\n)\n\ntype VPCPeeringConnection struct {\n\tec2Client *ec2.Client\n}\n\nfunc NewVPCPeeringConnection(ec2Client *ec2.Client) *VPCPeeringConnection {\n\treturn &VPCPeeringConnection{ec2Client: ec2Client}\n}\n\nfunc (v *VPCPeeringConnection) String() string {\n\treturn \"VPCPeeringConnection\"\n}\n\nfunc (v *VPCPeeringConnection) Global() bool {\n\treturn false\n}\n\nfunc (v *VPCPeeringConnection) GetExpired(ctx context.Context, expirationTime time.Time, excludedClusters []string) (ids []string, err error) {\n\tconnections, err := v.getAllVpcPeeringConnections(ctx, &ec2.DescribeVpcPeeringConnectionsInput{\n\t\tFilters: []ec2types.Filter{\n\t\t\t{\n\t\t\t\tName:   lo.ToPtr(\"tag-key\"),\n\t\t\t\tValues: []string{karpenterTestingTag},\n\t\t\t},\n\t\t},\n\t})\n\tif err != nil {\n\t\treturn ids, err\n\t}\n\n\tfor _, connection := range connections {\n\t\tclusterName, found := lo.Find(connection.Tags, func(tag ec2types.Tag) bool {\n\t\t\treturn *tag.Key == k8sClusterTag\n\t\t})\n\t\tif found && slices.Contains(excludedClusters, lo.FromPtr(clusterName.Value)) {\n\t\t\tcontinue\n\t\t}\n\t\tif connection.ExpirationTime == nil { // Connection is non-pending\n\t\t\tcontinue\n\t\t}\n\t\tif connection.ExpirationTime.Before(expirationTime) {\n\t\t\tids = append(ids, lo.FromPtr(connection.VpcPeeringConnectionId))\n\t\t}\n\t}\n\n\treturn ids, err\n}\n\nfunc (v *VPCPeeringConnection) CountAll(ctx context.Context) (count int, err error) {\n\tconnections, err := v.getAllVpcPeeringConnections(ctx, &ec2.DescribeVpcPeeringConnectionsInput{})\n\tif err != nil {\n\t\treturn count, err\n\t}\n\n\treturn len(connections), err\n}\n\nfunc (v *VPCPeeringConnection) Get(ctx context.Context, clusterName string) (ids []string, err error) {\n\tconnections, err := v.getAllVpcPeeringConnections(ctx, &ec2.DescribeVpcPeeringConnectionsInput{\n\t\tFilters: []ec2types.Filter{\n\t\t\t{\n\t\t\t\tName:   lo.ToPtr(\"tag:\" + karpenterTestingTag),\n\t\t\t\tValues: []string{clusterName},\n\t\t\t},\n\t\t},\n\t})\n\tif err != nil {\n\t\treturn ids, err\n\t}\n\n\tfor _, connection := range connections {\n\t\tids = append(ids, lo.FromPtr(connection.VpcPeeringConnectionId))\n\t}\n\n\treturn ids, err\n}\n\n// Cleanup any old VPC peering connections that were provisioned as part of testing\nfunc (v *VPCPeeringConnection) Cleanup(ctx context.Context, ids []string) ([]string, error) {\n\tfor _, id := range ids {\n\t\tif _, err := v.ec2Client.DeleteVpcPeeringConnection(ctx, &ec2.DeleteVpcPeeringConnectionInput{\n\t\t\tVpcPeeringConnectionId: lo.ToPtr(id),\n\t\t}); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\treturn ids, nil\n}\n\nfunc (v *VPCPeeringConnection) getAllVpcPeeringConnections(ctx context.Context, params *ec2.DescribeVpcPeeringConnectionsInput) (connections []ec2types.VpcPeeringConnection, err error) {\n\tpaginator := ec2.NewDescribeVpcPeeringConnectionsPaginator(v.ec2Client, params)\n\n\tfor paginator.HasMorePages() {\n\t\tout, err := paginator.NextPage(ctx)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tconnections = append(connections, out.VpcPeeringConnections...)\n\t}\n\n\treturn connections, nil\n}\n"
  },
  {
    "path": "test/hack/soak/get_clusters.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage main\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"slices\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go-v2/aws\"\n\t\"github.com/aws/aws-sdk-go-v2/config\"\n\t\"github.com/aws/aws-sdk-go-v2/service/eks\"\n\n\t\"github.com/samber/lo\"\n)\n\ntype cluster struct {\n\tName    string `json:\"cluster_name\"`\n\tGitRef  string `json:\"git_ref\"`\n\tCleanup bool   `json:\"cluster_cleanup\"`\n}\n\nconst expirationTTL = time.Hour * 168 // 7 days\n\nvar excludedClustersCleanup = []string{}\n\nfunc main() {\n\tctx := context.Background()\n\tcfg := lo.Must(config.LoadDefaultConfig(ctx))\n\teksClient := eks.NewFromConfig(cfg)\n\n\tvar outputList []*cluster\n\tcreateNewCluster := true\n\texpirationTime := time.Now().Add(-expirationTTL)\n\n\tclusters := lo.Must(eksClient.ListClusters(ctx, &eks.ListClustersInput{}))\n\n\tfor _, c := range clusters.Clusters {\n\t\tclusterDetails := lo.Must(eksClient.DescribeCluster(ctx, &eks.DescribeClusterInput{Name: aws.String(c)}))\n\t\tif clusterDetails.Cluster.CreatedAt.YearDay() == time.Unix(time.Now().Unix(), 0).YearDay() {\n\t\t\tcreateNewCluster = false\n\t\t}\n\n\t\tif strings.HasPrefix(c, \"soak-periodic-\") && !slices.Contains(excludedClustersCleanup, c) {\n\t\t\toutputList = append(outputList, &cluster{\n\t\t\t\tName:    c,\n\t\t\t\tGitRef:  clusterDetails.Cluster.Tags[\"test/git_ref\"],\n\t\t\t\tCleanup: clusterDetails.Cluster.CreatedAt.Before(expirationTime),\n\t\t\t})\n\t\t}\n\t}\n\n\tif createNewCluster {\n\t\toutputList = append(outputList, &cluster{Name: \"\", Cleanup: false})\n\t}\n\n\tfmt.Println(string(lo.Must(json.Marshal(map[string][]*cluster{\"include\": outputList}))))\n}\n"
  },
  {
    "path": "test/hack/soak/go.mod",
    "content": "module github.com/aws/karpenter/test/hack/soak\n\ngo 1.22\n\nrequire (\n\tgithub.com/aws/aws-sdk-go-v2 v1.22.2\n\tgithub.com/aws/aws-sdk-go-v2/config v1.23.0\n\tgithub.com/aws/aws-sdk-go-v2/service/eks v1.32.0\n\tgithub.com/samber/lo v1.38.1\n)\n\nrequire (\n\tgithub.com/aws/aws-sdk-go-v2/credentials v1.15.2 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.14.3 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/internal/configsources v1.2.2 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.2 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/internal/ini v1.6.0 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.10.2 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/service/sso v1.17.1 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/service/ssooidc v1.19.1 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/service/sts v1.25.1 // indirect\n\tgithub.com/aws/smithy-go v1.16.0 // indirect\n\tgithub.com/davecgh/go-spew v1.1.1 // indirect\n\tgithub.com/jmespath/go-jmespath v0.4.0 // indirect\n\tgolang.org/x/exp v0.0.0-20220303212507-bbda1eaf7a17 // indirect\n)\n"
  },
  {
    "path": "test/hack/soak/go.sum",
    "content": "github.com/aws/aws-sdk-go-v2 v1.22.2 h1:lV0U8fnhAnPz8YcdmZVV60+tr6CakHzqA6P8T46ExJI=\ngithub.com/aws/aws-sdk-go-v2 v1.22.2/go.mod h1:Kd0OJtkW3Q0M0lUWGszapWjEvrXDzRW+D21JNsroB+c=\ngithub.com/aws/aws-sdk-go-v2/config v1.23.0 h1:kqzEfGGDIrRJpfJckgwuZfFTbU9NB1jZnRcaO9MpOqE=\ngithub.com/aws/aws-sdk-go-v2/config v1.23.0/go.mod h1:p7wbxKXXjS1GGQOss7VXOazVMFF9bjUGq85/4wR/fSw=\ngithub.com/aws/aws-sdk-go-v2/credentials v1.15.2 h1:rKH7khRMxPdD0u3dHecd0Q7NOVw3EUe7AqdkUOkiOGI=\ngithub.com/aws/aws-sdk-go-v2/credentials v1.15.2/go.mod h1:tXM8wmaeAhfC7nZoCxb0FzM/aRaB1m1WQ7x0qlBLq80=\ngithub.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.14.3 h1:G5KawTAkyHH6WyKQCdHiW4h3PmAXNJpOgwKg3H7sDRE=\ngithub.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.14.3/go.mod h1:hugKmSFnZB+HgNI1sYGT14BUPZkO6alC/e0AWu+0IAQ=\ngithub.com/aws/aws-sdk-go-v2/internal/configsources v1.2.2 h1:AaQsr5vvGR7rmeSWBtTCcw16tT9r51mWijuCQhzLnq8=\ngithub.com/aws/aws-sdk-go-v2/internal/configsources v1.2.2/go.mod h1:o1IiRn7CWocIFTXJjGKJDOwxv1ibL53NpcvcqGWyRBA=\ngithub.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.2 h1:UZx8SXZ0YtzRiALzYAWcjb9Y9hZUR7MBKaBQ5ouOjPs=\ngithub.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.2/go.mod h1:ipuRpcSaklmxR6C39G187TpBAO132gUfleTGccUPs8c=\ngithub.com/aws/aws-sdk-go-v2/internal/ini v1.6.0 h1:hwZB07/beLiCopuRKF0t+dEHmP39iN4YtDh3X5d3hrg=\ngithub.com/aws/aws-sdk-go-v2/internal/ini v1.6.0/go.mod h1:rdAuXeHWhI/zkpYcO5n8WCpaIgY9MUxFyBsuqq3kjyA=\ngithub.com/aws/aws-sdk-go-v2/service/eks v1.32.0 h1:w8O52S+rH0026BqntZs55OWbV8Huq8VhXL9bSixCRYc=\ngithub.com/aws/aws-sdk-go-v2/service/eks v1.32.0/go.mod h1:l13fsSUzq27egNlyKBw4l0+mOSwa5Kt6r3JmJblYt14=\ngithub.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.10.2 h1:h7j73yuAVVjic8pqswh+L/7r2IHP43QwRyOu6zcCDDE=\ngithub.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.10.2/go.mod h1:H07AHdK5LSy8F7EJUQhoxyiCNkePoHj2D8P2yGTWafo=\ngithub.com/aws/aws-sdk-go-v2/service/sso v1.17.1 h1:km+ZNjtLtpXYf42RdaDZnNHm9s7SYAuDGTafy6nd89A=\ngithub.com/aws/aws-sdk-go-v2/service/sso v1.17.1/go.mod h1:aHBr3pvBSD5MbzOvQtYutyPLLRPbl/y9x86XyJJnUXQ=\ngithub.com/aws/aws-sdk-go-v2/service/ssooidc v1.19.1 h1:iRFNqZH4a67IqPvK8xxtyQYnyrlsvwmpHOe9r55ggBA=\ngithub.com/aws/aws-sdk-go-v2/service/ssooidc v1.19.1/go.mod h1:pTy5WM+6sNv2tB24JNKFtn6EvciQ5k40ZJ0pq/Iaxj0=\ngithub.com/aws/aws-sdk-go-v2/service/sts v1.25.1 h1:txgVXIXWPXyqdiVn92BV6a/rgtpX31HYdsOYj0sVQQQ=\ngithub.com/aws/aws-sdk-go-v2/service/sts v1.25.1/go.mod h1:VAiJiNaoP1L89STFlEMgmHX1bKixY+FaP+TpRFrmyZ4=\ngithub.com/aws/smithy-go v1.16.0 h1:gJZEH/Fqh+RsvlJ1Zt4tVAtV6bKkp3cC+R6FCZMNzik=\ngithub.com/aws/smithy-go v1.16.0/go.mod h1:NukqUGpCZIILqqiV0NIjeFh24kd/FAa4beRb6nbIUPE=\ngithub.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=\ngithub.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=\ngithub.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=\ngithub.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg=\ngithub.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=\ngithub.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg=\ngithub.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=\ngithub.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8=\ngithub.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U=\ngithub.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=\ngithub.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=\ngithub.com/samber/lo v1.38.1 h1:j2XEAqXKb09Am4ebOg31SpvzUTTs6EN3VfgeLUhPdXM=\ngithub.com/samber/lo v1.38.1/go.mod h1:+m/ZKRl6ClXCE2Lgf3MsQlWfh4bn1bz6CXEOxnEXnEA=\ngithub.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=\ngolang.org/x/exp v0.0.0-20220303212507-bbda1eaf7a17 h1:3MTrJm4PyNL9NBqvYDSj3DHl46qQakyfqfWo4jgfaEM=\ngolang.org/x/exp v0.0.0-20220303212507-bbda1eaf7a17/go.mod h1:lgLbSvA5ygNOMpwM/9anMpWVlVJ7Z+cHWq/eFuinpGE=\ngopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=\ngopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=\ngopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=\n"
  },
  {
    "path": "test/pkg/debug/events.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage debug\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/samber/lo\"\n\t\"go.uber.org/multierr\"\n\tcorev1 \"k8s.io/api/core/v1\"\n\tmetav1 \"k8s.io/apimachinery/pkg/apis/meta/v1\"\n\t\"k8s.io/apimachinery/pkg/fields\"\n\t\"sigs.k8s.io/controller-runtime/pkg/client\"\n)\n\ntype EventClient struct {\n\tstart      time.Time\n\tkubeClient client.Client\n}\n\nfunc NewEventClient(kubeClient client.Client) *EventClient {\n\treturn &EventClient{\n\t\tstart:      time.Now(),\n\t\tkubeClient: kubeClient,\n\t}\n}\n\nfunc (c *EventClient) DumpEvents(ctx context.Context) error {\n\treturn multierr.Combine(\n\t\tc.dumpPodEvents(ctx),\n\t\tc.dumpNodeEvents(ctx),\n\t)\n}\n\nfunc (c *EventClient) dumpPodEvents(ctx context.Context) error {\n\tevents, err := c.GetEvents(ctx, \"Pod\", \"kube-system\")\n\tif err != nil {\n\t\treturn err\n\t}\n\tfor k, v := range events {\n\t\tfmt.Print(getEventInformation(k, v))\n\t}\n\treturn nil\n}\n\nfunc (c *EventClient) dumpNodeEvents(ctx context.Context) error {\n\tevents, err := c.GetEvents(ctx, \"Node\")\n\tif err != nil {\n\t\treturn err\n\t}\n\tfor k, v := range events {\n\t\tfmt.Print(getEventInformation(k, v))\n\t}\n\treturn nil\n}\n\nfunc (c *EventClient) GetEvents(ctx context.Context, kind string, excludedNamespaces ...string) (map[corev1.ObjectReference]*corev1.EventList, error) {\n\tel := &corev1.EventList{}\n\tif err := c.kubeClient.List(ctx, el, &client.ListOptions{\n\t\tFieldSelector: fields.SelectorFromSet(map[string]string{\"involvedObject.kind\": kind}),\n\t}); err != nil {\n\t\treturn nil, err\n\t}\n\tevents := lo.Filter(filterTestEvents(el.Items, c.start), func(e corev1.Event, _ int) bool {\n\t\treturn !lo.Contains(excludedNamespaces, e.InvolvedObject.Namespace)\n\t})\n\treturn coallateEvents(events), nil\n}\n\nfunc filterTestEvents(events []corev1.Event, startTime time.Time) []corev1.Event {\n\treturn lo.Filter(events, func(e corev1.Event, _ int) bool {\n\t\tif !e.EventTime.IsZero() {\n\t\t\tif e.EventTime.BeforeTime(&metav1.Time{Time: startTime}) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t} else if e.FirstTimestamp.Before(&metav1.Time{Time: startTime}) {\n\t\t\treturn false\n\t\t}\n\t\treturn true\n\t})\n}\n\nfunc coallateEvents(events []corev1.Event) map[corev1.ObjectReference]*corev1.EventList {\n\teventMap := map[corev1.ObjectReference]*corev1.EventList{}\n\tfor i := range events {\n\t\telem := events[i]\n\t\tobjectKey := corev1.ObjectReference{Kind: elem.InvolvedObject.Kind, Namespace: elem.InvolvedObject.Namespace, Name: elem.InvolvedObject.Name}\n\t\tif _, ok := eventMap[objectKey]; !ok {\n\t\t\teventMap[objectKey] = &corev1.EventList{}\n\t\t}\n\t\teventMap[objectKey].Items = append(eventMap[objectKey].Items, elem)\n\t}\n\treturn eventMap\n}\n\n// Partially copied from\n// https://github.com/kubernetes/kubernetes/blob/04ee339c7a4d36b4037ce3635993e2a9e395ebf3/staging/src/k8s.io/kubectl/pkg/describe/describe.go#L4232\nfunc getEventInformation(o corev1.ObjectReference, el *corev1.EventList) string {\n\tsb := strings.Builder{}\n\tfmt.Fprintf(&sb, \"------- %s/%s%s EVENTS -------\\n\",\n\t\tstrings.ToLower(o.Kind), lo.Ternary(o.Namespace != \"\", o.Namespace+\"/\", \"\"), o.Name)\n\tif len(el.Items) == 0 {\n\t\treturn sb.String()\n\t}\n\tfor _, e := range el.Items {\n\t\tsource := e.Source.Component\n\t\tif source == \"\" {\n\t\t\tsource = e.ReportingController\n\t\t}\n\t\teventTime := e.EventTime\n\t\tif eventTime.IsZero() {\n\t\t\teventTime = metav1.NewMicroTime(e.FirstTimestamp.Time)\n\t\t}\n\t\tfmt.Fprintf(&sb, \"time=%s type=%s reason=%s from=%s message=%s\\n\",\n\t\t\teventTime.Format(time.RFC3339),\n\t\t\te.Type,\n\t\t\te.Reason,\n\t\t\tsource,\n\t\t\tstrings.TrimSpace(e.Message))\n\t}\n\treturn sb.String()\n}\n"
  },
  {
    "path": "test/pkg/debug/monitor.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage debug\n\nimport (\n\t\"context\"\n\t\"sync\"\n\n\t\"github.com/awslabs/operatorpkg/controller\"\n\t\"github.com/samber/lo\"\n\t\"k8s.io/client-go/rest\"\n\tcontrollerruntime \"sigs.k8s.io/controller-runtime\"\n\t\"sigs.k8s.io/controller-runtime/pkg/client\"\n\t\"sigs.k8s.io/controller-runtime/pkg/log\"\n\t\"sigs.k8s.io/controller-runtime/pkg/manager\"\n\t\"sigs.k8s.io/controller-runtime/pkg/metrics/server\"\n)\n\ntype Monitor struct {\n\tctx    context.Context\n\tcancel context.CancelFunc\n\twg     sync.WaitGroup\n\tmgr    manager.Manager\n}\n\nfunc New(ctx context.Context, config *rest.Config, kubeClient client.Client) *Monitor {\n\tlog.SetLogger(log.FromContext(ctx))\n\tmgr := lo.Must(controllerruntime.NewManager(config, controllerruntime.Options{\n\t\tMetrics: server.Options{\n\t\t\tBindAddress: \"0\",\n\t\t},\n\t}))\n\tfor _, c := range newControllers(kubeClient) {\n\t\tlo.Must0(c.Register(ctx, mgr), \"failed to register controller\")\n\t}\n\tctx, cancel := context.WithCancel(ctx) // this context is only meant for monitor start/stop\n\treturn &Monitor{\n\t\tctx:    ctx,\n\t\tcancel: cancel,\n\t\tmgr:    mgr,\n\t}\n}\n\n// MustStart starts the debug monitor\nfunc (m *Monitor) MustStart() {\n\tm.wg.Go(func() {\n\t\tlo.Must0(m.mgr.Start(m.ctx))\n\t})\n}\n\n// Stop stops the monitor\nfunc (m *Monitor) Stop() {\n\tm.cancel()\n\tm.wg.Wait()\n}\n\nfunc newControllers(kubeClient client.Client) []controller.Controller {\n\treturn []controller.Controller{\n\t\tNewNodeClaimController(kubeClient),\n\t\tNewNodeController(kubeClient),\n\t\tNewPodController(kubeClient),\n\t}\n}\n"
  },
  {
    "path": "test/pkg/debug/node.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage debug\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"time\"\n\n\t\"github.com/samber/lo\"\n\tcorev1 \"k8s.io/api/core/v1\"\n\t\"k8s.io/apimachinery/pkg/api/errors\"\n\tcontrollerruntime \"sigs.k8s.io/controller-runtime\"\n\t\"sigs.k8s.io/controller-runtime/pkg/client\"\n\t\"sigs.k8s.io/controller-runtime/pkg/controller\"\n\t\"sigs.k8s.io/controller-runtime/pkg/event\"\n\t\"sigs.k8s.io/controller-runtime/pkg/manager\"\n\t\"sigs.k8s.io/controller-runtime/pkg/predicate\"\n\t\"sigs.k8s.io/controller-runtime/pkg/reconcile\"\n\n\tkarpv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n\n\tnodeutils \"sigs.k8s.io/karpenter/pkg/utils/node\"\n)\n\ntype NodeController struct {\n\tkubeClient client.Client\n}\n\nfunc NewNodeController(kubeClient client.Client) *NodeController {\n\treturn &NodeController{\n\t\tkubeClient: kubeClient,\n\t}\n}\n\nfunc (c *NodeController) Reconcile(ctx context.Context, req reconcile.Request) (reconcile.Result, error) {\n\tn := &corev1.Node{}\n\tif err := c.kubeClient.Get(ctx, req.NamespacedName, n); err != nil {\n\t\tif errors.IsNotFound(err) {\n\t\t\tfmt.Printf(\"[DELETED %s] NODE %s\\n\", time.Now().Format(time.RFC3339), req.String())\n\t\t}\n\t\treturn reconcile.Result{}, client.IgnoreNotFound(err)\n\t}\n\tfmt.Printf(\"[CREATED/UPDATED %s] NODE %s %s\\n\", time.Now().Format(time.RFC3339), req.Name, c.GetInfo(ctx, n))\n\treturn reconcile.Result{}, nil\n}\n\nfunc (c *NodeController) GetInfo(ctx context.Context, n *corev1.Node) string {\n\tpods, _ := nodeutils.GetPods(ctx, c.kubeClient, n)\n\treturn fmt.Sprintf(\"ready=%s schedulable=%t initialized=%s pods=%d taints=%v\", nodeutils.GetCondition(n, corev1.NodeReady).Status, !n.Spec.Unschedulable, n.Labels[karpv1.NodeInitializedLabelKey], len(pods), n.Spec.Taints)\n}\n\nfunc (c *NodeController) Register(ctx context.Context, m manager.Manager) error {\n\treturn controllerruntime.NewControllerManagedBy(m).\n\t\tNamed(\"node\").\n\t\tFor(&corev1.Node{}).\n\t\tWithEventFilter(predicate.And(\n\t\t\tpredicate.Funcs{\n\t\t\t\tUpdateFunc: func(e event.UpdateEvent) bool {\n\t\t\t\t\toldNode := e.ObjectOld.(*corev1.Node)\n\t\t\t\t\tnewNode := e.ObjectNew.(*corev1.Node)\n\t\t\t\t\treturn c.GetInfo(ctx, oldNode) != c.GetInfo(ctx, newNode)\n\t\t\t\t},\n\t\t\t},\n\t\t\tpredicate.NewPredicateFuncs(func(o client.Object) bool {\n\t\t\t\treturn o.GetLabels()[karpv1.NodePoolLabelKey] != \"\"\n\t\t\t}),\n\t\t)).\n\t\tWithOptions(controller.Options{MaxConcurrentReconciles: 10, SkipNameValidation: lo.ToPtr(true)}).\n\t\tComplete(c)\n}\n"
  },
  {
    "path": "test/pkg/debug/nodeclaim.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage debug\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"time\"\n\n\t\"github.com/samber/lo\"\n\t\"k8s.io/apimachinery/pkg/api/errors\"\n\tcontrollerruntime \"sigs.k8s.io/controller-runtime\"\n\t\"sigs.k8s.io/controller-runtime/pkg/client\"\n\t\"sigs.k8s.io/controller-runtime/pkg/controller\"\n\t\"sigs.k8s.io/controller-runtime/pkg/event\"\n\t\"sigs.k8s.io/controller-runtime/pkg/manager\"\n\t\"sigs.k8s.io/controller-runtime/pkg/predicate\"\n\t\"sigs.k8s.io/controller-runtime/pkg/reconcile\"\n\n\tkarpv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n)\n\ntype NodeClaimController struct {\n\tkubeClient client.Client\n}\n\nfunc NewNodeClaimController(kubeClient client.Client) *NodeClaimController {\n\treturn &NodeClaimController{\n\t\tkubeClient: kubeClient,\n\t}\n}\n\nfunc (c *NodeClaimController) Reconcile(ctx context.Context, req reconcile.Request) (reconcile.Result, error) {\n\tnc := &karpv1.NodeClaim{}\n\tif err := c.kubeClient.Get(ctx, req.NamespacedName, nc); err != nil {\n\t\tif errors.IsNotFound(err) {\n\t\t\tfmt.Printf(\"[DELETED %s] NODECLAIM %s\\n\", time.Now().Format(time.RFC3339), req.String())\n\t\t}\n\t\treturn reconcile.Result{}, client.IgnoreNotFound(err)\n\t}\n\tfmt.Printf(\"[CREATED/UPDATED %s] NODECLAIM %s %s\\n\", time.Now().Format(time.RFC3339), req.Name, c.GetInfo(nc))\n\treturn reconcile.Result{}, nil\n}\n\nfunc (c *NodeClaimController) GetInfo(nc *karpv1.NodeClaim) string {\n\treturn fmt.Sprintf(\"ready=%t launched=%t registered=%t initialized=%t\",\n\t\tnc.StatusConditions().Root().IsTrue(),\n\t\tnc.StatusConditions().Get(karpv1.ConditionTypeLaunched).IsTrue(),\n\t\tnc.StatusConditions().Get(karpv1.ConditionTypeRegistered).IsTrue(),\n\t\tnc.StatusConditions().Get(karpv1.ConditionTypeInitialized).IsTrue(),\n\t)\n}\n\nfunc (c *NodeClaimController) Register(_ context.Context, m manager.Manager) error {\n\treturn controllerruntime.NewControllerManagedBy(m).\n\t\tNamed(\"nodeclaim\").\n\t\tFor(&karpv1.NodeClaim{}).\n\t\tWithEventFilter(predicate.Funcs{\n\t\t\tUpdateFunc: func(e event.UpdateEvent) bool {\n\t\t\t\toldNodeClaim := e.ObjectOld.(*karpv1.NodeClaim)\n\t\t\t\tnewNodeClaim := e.ObjectNew.(*karpv1.NodeClaim)\n\t\t\t\treturn c.GetInfo(oldNodeClaim) != c.GetInfo(newNodeClaim)\n\t\t\t},\n\t\t}).\n\t\tWithOptions(controller.Options{MaxConcurrentReconciles: 10, SkipNameValidation: lo.ToPtr(true)}).\n\t\tComplete(c)\n}\n"
  },
  {
    "path": "test/pkg/debug/pod.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage debug\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/samber/lo\"\n\tcorev1 \"k8s.io/api/core/v1\"\n\t\"k8s.io/apimachinery/pkg/api/errors\"\n\tcontrollerruntime \"sigs.k8s.io/controller-runtime\"\n\t\"sigs.k8s.io/controller-runtime/pkg/client\"\n\t\"sigs.k8s.io/controller-runtime/pkg/controller\"\n\t\"sigs.k8s.io/controller-runtime/pkg/event\"\n\t\"sigs.k8s.io/controller-runtime/pkg/manager\"\n\t\"sigs.k8s.io/controller-runtime/pkg/predicate\"\n\t\"sigs.k8s.io/controller-runtime/pkg/reconcile\"\n\n\t\"sigs.k8s.io/karpenter/pkg/utils/pod\"\n)\n\ntype PodController struct {\n\tkubeClient client.Client\n}\n\nfunc NewPodController(kubeClient client.Client) *PodController {\n\treturn &PodController{\n\t\tkubeClient: kubeClient,\n\t}\n}\n\nfunc (c *PodController) Reconcile(ctx context.Context, req reconcile.Request) (reconcile.Result, error) {\n\tp := &corev1.Pod{}\n\tif err := c.kubeClient.Get(ctx, req.NamespacedName, p); err != nil {\n\t\tif errors.IsNotFound(err) {\n\t\t\tfmt.Printf(\"[DELETED %s] POD %s\\n\", time.Now().Format(time.RFC3339), req.String())\n\t\t}\n\t\treturn reconcile.Result{}, client.IgnoreNotFound(err)\n\t}\n\tfmt.Printf(\"[CREATED/UPDATED %s] POD %s %s\\n\", time.Now().Format(time.RFC3339), req.String(), c.GetInfo(p))\n\treturn reconcile.Result{}, nil\n}\n\nfunc (c *PodController) GetInfo(p *corev1.Pod) string {\n\tvar containerInfo strings.Builder\n\tfor _, c := range p.Status.ContainerStatuses {\n\t\tif containerInfo.Len() > 0 {\n\t\t\t_ = lo.Must(fmt.Fprintf(&containerInfo, \", \"))\n\t\t}\n\t\t_ = lo.Must(fmt.Fprintf(&containerInfo, \"%s restarts=%d\", c.Name, c.RestartCount))\n\t}\n\treturn fmt.Sprintf(\"provisionable=%v phase=%s nodename=%s owner=%#v [%s]\",\n\t\tpod.IsProvisionable(p), p.Status.Phase, p.Spec.NodeName, p.OwnerReferences, containerInfo.String())\n}\n\nfunc (c *PodController) Register(_ context.Context, m manager.Manager) error {\n\treturn controllerruntime.NewControllerManagedBy(m).\n\t\tNamed(\"pod\").\n\t\tFor(&corev1.Pod{}).\n\t\tWithEventFilter(predicate.And(\n\t\t\tpredicate.Funcs{\n\t\t\t\tUpdateFunc: func(e event.UpdateEvent) bool {\n\t\t\t\t\toldPod := e.ObjectOld.(*corev1.Pod)\n\t\t\t\t\tnewPod := e.ObjectNew.(*corev1.Pod)\n\t\t\t\t\treturn c.GetInfo(oldPod) != c.GetInfo(newPod)\n\t\t\t\t},\n\t\t\t},\n\t\t\tpredicate.NewPredicateFuncs(func(o client.Object) bool {\n\t\t\t\treturn o.GetNamespace() != \"kube-system\" && o.GetNamespace() != \"prometheus\"\n\t\t\t}),\n\t\t)).\n\t\tWithOptions(controller.Options{MaxConcurrentReconciles: 10, SkipNameValidation: lo.ToPtr(true)}).\n\t\tComplete(c)\n}\n"
  },
  {
    "path": "test/pkg/debug/setup.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage debug\n\nimport (\n\t\"context\"\n\n\t\"github.com/onsi/ginkgo/v2\"\n\t\"github.com/samber/lo\"\n\t\"k8s.io/client-go/rest\"\n\t\"sigs.k8s.io/controller-runtime/pkg/client\"\n\n\t. \"github.com/onsi/gomega\"\n)\n\nconst (\n\tNoWatch  = \"NoWatch\"\n\tNoEvents = \"NoEvents\"\n)\n\nvar m *Monitor\nvar e *EventClient\n\nfunc BeforeEach(ctx context.Context, config *rest.Config, kubeClient client.Client) {\n\t// If the test is labeled as NoWatch, then the node/pod monitor will just list at the beginning\n\t// of the test rather than perform a watch during it\n\tif !lo.Contains(ginkgo.CurrentSpecReport().Labels(), NoWatch) {\n\t\tm = New(ctx, config, kubeClient)\n\t\tm.MustStart()\n\t}\n\tif !lo.Contains(ginkgo.CurrentSpecReport().Labels(), NoEvents) {\n\t\te = NewEventClient(kubeClient)\n\t}\n}\n\nfunc AfterEach(ctx context.Context) {\n\tif !lo.Contains(ginkgo.CurrentSpecReport().Labels(), NoWatch) {\n\t\tm.Stop()\n\t}\n\tif !lo.Contains(ginkgo.CurrentSpecReport().Labels(), NoEvents) {\n\t\tExpect(e.DumpEvents(ctx)).To(Succeed())\n\t}\n}\n"
  },
  {
    "path": "test/pkg/environment/aws/default_ec2nodeclass.yaml",
    "content": "apiVersion: karpenter.k8s.aws/v1\nkind: EC2NodeClass\nmetadata:\n  name: default\nspec:\n  amiFamily: AL2023\n  subnetSelectorTerms:\n    - tags: \n        karpenter.sh/discovery: $CLUSTER_NAME\n  securityGroupSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: $CLUSTER_NAME\n  role: KarpenterNodeRole-$CLUSTER_NAME\n  amiSelectorTerms:\n    - alias: al2023@latest"
  },
  {
    "path": "test/pkg/environment/aws/default_nodepool.yaml",
    "content": "apiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n name: default\nspec:\n disruption:\n   consolidationPolicy: WhenEmptyOrUnderutilized\n   consolidateAfter: Never\n   budgets:\n     - nodes: 100%\n limits:\n   cpu: 1000\n   memory: 1000Gi\n template:\n   spec:\n     expireAfter: Never\n     requirements:\n       - key: kubernetes.io/os\n         operator: In\n         values: [\"linux\"]\n       - key: karpenter.sh/capacity-type\n         operator: In\n         values: [\"on-demand\"]\n       - key: karpenter.k8s.aws/instance-category\n         operator: In\n         values: [\"c\", \"m\", \"r\"]\n       - key: karpenter.k8s.aws/instance-generation\n         operator: Gt\n         values: [\"4\"]\n       - key: karpenter.k8s.aws/instance-family\n         operator: NotIn\n         values: [\"a1\"]\n     nodeClassRef:\n      group: karpenter.k8s.aws\n      kind: EC2NodeClass\n      name: default"
  },
  {
    "path": "test/pkg/environment/aws/environment.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage aws\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"os\"\n\t\"testing\"\n\n\tcoretest \"sigs.k8s.io/karpenter/pkg/test\"\n\n\t\"github.com/aws/amazon-vpc-resource-controller-k8s/apis/vpcresources/v1beta1\"\n\t\"github.com/aws/aws-sdk-go-v2/aws\"\n\tconfig \"github.com/aws/aws-sdk-go-v2/config\"\n\t\"github.com/aws/aws-sdk-go-v2/service/ec2\"\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\t\"github.com/aws/aws-sdk-go-v2/service/eks\"\n\t\"github.com/aws/aws-sdk-go-v2/service/fis\"\n\t\"github.com/aws/aws-sdk-go-v2/service/iam\"\n\tservicesqs \"github.com/aws/aws-sdk-go-v2/service/sqs\"\n\t\"github.com/aws/aws-sdk-go-v2/service/ssm\"\n\t\"github.com/aws/aws-sdk-go-v2/service/sts\"\n\t\"github.com/aws/aws-sdk-go-v2/service/timestreamwrite\"\n\n\t. \"github.com/onsi/ginkgo/v2\"\n\t\"github.com/samber/lo\"\n\tcorev1 \"k8s.io/api/core/v1\"\n\t\"k8s.io/client-go/kubernetes/scheme\"\n\t\"k8s.io/utils/env\"\n\n\tkarpv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\tsdk \"github.com/aws/karpenter-provider-aws/pkg/aws\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/sqs\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/test\"\n\t\"github.com/aws/karpenter-provider-aws/test/pkg/environment/common\"\n)\n\nfunc init() {\n\tlo.Must0(v1beta1.AddToScheme(scheme.Scheme)) // add scheme for the security group policy CRD\n\tkarpv1.NormalizedLabels = lo.Assign(karpv1.NormalizedLabels, map[string]string{\"topology.ebs.csi.aws.com/zone\": corev1.LabelTopologyZone})\n}\n\nvar WindowsDefaultImage = \"mcr.microsoft.com/oss/kubernetes/pause:3.9\"\n\nvar EphemeralInitContainerImage = \"alpine\"\n\ntype Environment struct {\n\t*common.Environment\n\tRegion string\n\n\tSTSAPI        *sts.Client\n\tEC2API        *ec2.Client\n\tSSMAPI        *ssm.Client\n\tIAMAPI        *iam.Client\n\tFISAPI        *fis.Client\n\tEKSAPI        *eks.Client\n\tTimeStreamAPI sdk.TimestreamWriteAPI\n\n\tSQSProvider sqs.Provider\n\n\tClusterName       string\n\tClusterEndpoint   string\n\tInterruptionQueue string\n\tPrivateCluster    bool\n\tZoneInfo          []ZoneInfo\n}\n\ntype ZoneInfo struct {\n\tZone     string\n\tZoneID   string\n\tZoneType string\n}\n\nfunc NewEnvironment(t *testing.T) *Environment {\n\tenv := common.NewEnvironment(t)\n\tcfg := lo.Must(config.LoadDefaultConfig(env.Context))\n\n\tawsEnv := &Environment{\n\t\tRegion:      cfg.Region,\n\t\tEnvironment: env,\n\n\t\tSTSAPI:        sts.NewFromConfig(cfg),\n\t\tEC2API:        ec2.NewFromConfig(cfg),\n\t\tSSMAPI:        ssm.NewFromConfig(cfg),\n\t\tIAMAPI:        iam.NewFromConfig(cfg),\n\t\tFISAPI:        fis.NewFromConfig(cfg),\n\t\tEKSAPI:        eks.NewFromConfig(cfg),\n\t\tTimeStreamAPI: GetTimeStreamAPI(env.Context, cfg),\n\n\t\tClusterName:     lo.Must(os.LookupEnv(\"CLUSTER_NAME\")),\n\t\tClusterEndpoint: lo.Must(os.LookupEnv(\"CLUSTER_ENDPOINT\")),\n\t}\n\n\tif _, awsEnv.PrivateCluster = os.LookupEnv(\"PRIVATE_CLUSTER\"); awsEnv.PrivateCluster {\n\t\tWindowsDefaultImage = fmt.Sprintf(\"857221689048.dkr.ecr.%s.amazonaws.com/k8s/pause:3.6\", awsEnv.Region)\n\t\tEphemeralInitContainerImage = fmt.Sprintf(\"857221689048.dkr.ecr.%s.amazonaws.com/ecr-public/docker/library/alpine:latest\", awsEnv.Region)\n\t\tcoretest.DefaultImage = fmt.Sprintf(\"857221689048.dkr.ecr.%s.amazonaws.com/ecr-public/eks-distro/kubernetes/pause:3.2\", awsEnv.Region)\n\t}\n\t// Initialize the provider only if the INTERRUPTION_QUEUE environment variable is defined\n\tif v, ok := os.LookupEnv(\"INTERRUPTION_QUEUE\"); ok {\n\t\tsqsapi := servicesqs.NewFromConfig(cfg)\n\t\tout := lo.Must(sqsapi.GetQueueUrl(env.Context, &servicesqs.GetQueueUrlInput{QueueName: aws.String(v)}))\n\t\tawsEnv.SQSProvider = lo.Must(sqs.NewDefaultProvider(sqsapi, lo.FromPtr(out.QueueUrl)))\n\t}\n\t// Populate ZoneInfo for all AZs in the region\n\tawsEnv.ZoneInfo = lo.Map(lo.Must(awsEnv.EC2API.DescribeAvailabilityZones(env.Context, &ec2.DescribeAvailabilityZonesInput{})).AvailabilityZones, func(zone ec2types.AvailabilityZone, _ int) ZoneInfo {\n\t\treturn ZoneInfo{\n\t\t\tZone:     lo.FromPtr(zone.ZoneName),\n\t\t\tZoneID:   lo.FromPtr(zone.ZoneId),\n\t\t\tZoneType: lo.FromPtr(zone.ZoneType),\n\t\t}\n\t})\n\treturn awsEnv\n}\n\nfunc GetTimeStreamAPI(ctx context.Context, cfg aws.Config) sdk.TimestreamWriteAPI {\n\tif lo.Must(env.GetBool(\"ENABLE_METRICS\", false)) {\n\t\tBy(\"enabling metrics firing for this suite\")\n\t\ttimeCfg := cfg.Copy()\n\t\ttimeCfg.Region = env.GetString(\"METRICS_REGION\", metricsDefaultRegion)\n\t\treturn timestreamwrite.NewFromConfig(timeCfg)\n\t}\n\treturn &NoOpTimeStreamAPI{}\n}\n\nfunc (env *Environment) DefaultEC2NodeClass() *v1.EC2NodeClass {\n\tnodeClass := test.EC2NodeClass()\n\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{Alias: \"al2023@latest\"}}\n\tnodeClass.Spec.Tags = map[string]string{\n\t\t\"testing/cluster\": env.ClusterName,\n\t}\n\tnodeClass.Spec.SecurityGroupSelectorTerms = []v1.SecurityGroupSelectorTerm{\n\t\t{\n\t\t\tTags: map[string]string{\"karpenter.sh/discovery\": env.ClusterName},\n\t\t},\n\t}\n\tnodeClass.Spec.SubnetSelectorTerms = []v1.SubnetSelectorTerm{\n\t\t{\n\t\t\tTags: map[string]string{\"karpenter.sh/discovery\": env.ClusterName},\n\t\t},\n\t}\n\tif env.PrivateCluster {\n\t\tnodeClass.Spec.Role = \"\"\n\t\tnodeClass.Spec.InstanceProfile = lo.ToPtr(fmt.Sprintf(\"KarpenterNodeInstanceProfile-%s\", env.ClusterName))\n\t\treturn nodeClass\n\t}\n\tnodeClass.Spec.Role = fmt.Sprintf(\"KarpenterNodeRole-%s\", env.ClusterName)\n\treturn nodeClass\n}\n"
  },
  {
    "path": "test/pkg/environment/aws/expectations.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage aws\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"net\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go-v2/aws\"\n\t\"github.com/aws/aws-sdk-go-v2/service/ec2\"\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\t\"github.com/aws/aws-sdk-go-v2/service/eks\"\n\n\t\"github.com/aws/aws-sdk-go-v2/service/fis\"\n\tfistypes \"github.com/aws/aws-sdk-go-v2/service/fis/types\"\n\t\"github.com/aws/aws-sdk-go-v2/service/iam\"\n\tiamtypes \"github.com/aws/aws-sdk-go-v2/service/iam/types\"\n\t\"github.com/aws/aws-sdk-go-v2/service/ssm\"\n\t\"github.com/aws/aws-sdk-go-v2/service/sts\"\n\n\t\"github.com/samber/lo\"\n\t\"go.uber.org/multierr\"\n\tmetav1 \"k8s.io/apimachinery/pkg/apis/meta/v1\"\n\t\"k8s.io/apimachinery/pkg/types\"\n\n\tcoretest \"sigs.k8s.io/karpenter/pkg/test\"\n\n\tawserrors \"github.com/aws/karpenter-provider-aws/pkg/errors\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/utils\"\n\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n)\n\n// Spot Interruption experiment details partially copied from\n// https://github.com/aws/amazon-ec2-spot-interrupter/blob/main/pkg/itn/itn.go\nconst (\n\tfisRoleName    = \"FISInterruptionRole\"\n\tfisTargetLimit = 5\n\tspotITNAction  = \"aws:ec2:send-spot-instance-interruptions\"\n)\n\nfunc (env *Environment) ExpectWindowsIPAMEnabled() {\n\tGinkgoHelper()\n\tenv.ExpectConfigMapDataOverridden(types.NamespacedName{Namespace: \"kube-system\", Name: \"amazon-vpc-cni\"}, map[string]string{\n\t\t\"enable-windows-ipam\": \"true\",\n\t})\n}\n\nfunc (env *Environment) ExpectWindowsIPAMDisabled() {\n\tGinkgoHelper()\n\tenv.ExpectConfigMapDataOverridden(types.NamespacedName{Namespace: \"kube-system\", Name: \"amazon-vpc-cni\"}, map[string]string{\n\t\t\"enable-windows-ipam\": \"false\",\n\t})\n}\n\nfunc (env *Environment) ExpectInstance(nodeName string) Assertion {\n\treturn Expect(env.GetInstance(nodeName))\n}\n\nfunc (env *Environment) ExpectIPv6ClusterDNS() string {\n\tdnsService, err := env.Environment.KubeClient.CoreV1().Services(\"kube-system\").Get(env.Context, \"kube-dns\", metav1.GetOptions{})\n\tExpect(err).ToNot(HaveOccurred())\n\tkubeDNSIP := net.ParseIP(dnsService.Spec.ClusterIP)\n\tExpect(kubeDNSIP.To4()).To(BeNil())\n\treturn kubeDNSIP.String()\n}\n\nfunc (env *Environment) ExpectSpotInterruptionExperiment(instanceIDs ...string) *fistypes.Experiment {\n\tGinkgoHelper()\n\ttemplate := &fis.CreateExperimentTemplateInput{\n\t\tActions:        map[string]fistypes.CreateExperimentTemplateActionInput{},\n\t\tTargets:        map[string]fistypes.CreateExperimentTemplateTargetInput{},\n\t\tStopConditions: []fistypes.CreateExperimentTemplateStopConditionInput{{Source: aws.String(\"none\")}},\n\t\tRoleArn:        env.ExpectSpotInterruptionRole().Arn,\n\t\tDescription:    aws.String(fmt.Sprintf(\"trigger spot ITN for instances %v\", instanceIDs)),\n\t}\n\tfor j, ids := range lo.Chunk(instanceIDs, fisTargetLimit) {\n\t\tkey := fmt.Sprintf(\"itn%d\", j)\n\t\ttemplate.Actions[key] = fistypes.CreateExperimentTemplateActionInput{\n\t\t\tActionId: aws.String(spotITNAction),\n\t\t\tParameters: map[string]string{\n\t\t\t\t// durationBeforeInterruption is the time before the instance is terminated, so we add 2 minutes\n\t\t\t\t\"durationBeforeInterruption\": \"PT120S\",\n\t\t\t},\n\t\t\tTargets: map[string]string{\"SpotInstances\": key},\n\t\t}\n\t\ttemplate.Targets[key] = fistypes.CreateExperimentTemplateTargetInput{\n\t\t\tResourceType:  aws.String(\"aws:ec2:spot-instance\"),\n\t\t\tSelectionMode: aws.String(\"ALL\"),\n\t\t\tResourceArns: lo.Map(ids, func(id string, _ int) string {\n\t\t\t\treturn fmt.Sprintf(\"arn:aws:ec2:%s:%s:instance/%s\", env.Region, env.ExpectAccountID(), id)\n\t\t\t}),\n\t\t}\n\t}\n\texperimentTemplate, err := env.FISAPI.CreateExperimentTemplate(env.Context, template)\n\tExpect(err).ToNot(HaveOccurred())\n\texperiment, err := env.FISAPI.StartExperiment(env.Context, &fis.StartExperimentInput{ExperimentTemplateId: experimentTemplate.ExperimentTemplate.Id})\n\tExpect(err).ToNot(HaveOccurred())\n\treturn experiment.Experiment\n}\n\nfunc (env *Environment) ExpectExperimentTemplateDeleted(id string) {\n\tGinkgoHelper()\n\t_, err := env.FISAPI.DeleteExperimentTemplate(env.Context, &fis.DeleteExperimentTemplateInput{\n\t\tId: aws.String(id),\n\t})\n\tExpect(err).ToNot(HaveOccurred())\n}\n\nfunc (env *Environment) EventuallyExpectInstanceProfileExists(profileName string) iamtypes.InstanceProfile {\n\tGinkgoHelper()\n\tBy(fmt.Sprintf(\"eventually expecting instance profile %s to exist\", profileName))\n\tvar instanceProfile iamtypes.InstanceProfile\n\tEventually(func(g Gomega) {\n\t\tout, err := env.IAMAPI.GetInstanceProfile(env.Context, &iam.GetInstanceProfileInput{\n\t\t\tInstanceProfileName: aws.String(profileName),\n\t\t})\n\t\tg.Expect(err).ToNot(HaveOccurred())\n\t\tg.Expect(out.InstanceProfile).ToNot(BeNil())\n\t\tg.Expect(out.InstanceProfile.InstanceProfileName).ToNot(BeNil())\n\t\tinstanceProfile = lo.FromPtr(out.InstanceProfile)\n\t}).WithTimeout(20 * time.Second).Should(Succeed())\n\treturn instanceProfile\n}\n\nfunc (env *Environment) EventuallyExpectInstanceProfilesNotFound(profileNames ...string) {\n\tGinkgoHelper()\n\tBy(fmt.Sprintf(\"expecting instance profiles %v to not exist\", profileNames))\n\tEventually(func(g Gomega) {\n\t\tfor _, profileName := range profileNames {\n\t\t\t_, err := env.IAMAPI.GetInstanceProfile(env.Context, &iam.GetInstanceProfileInput{\n\t\t\t\tInstanceProfileName: aws.String(profileName),\n\t\t\t})\n\t\t\tg.Expect(awserrors.IsNotFound(err)).To(BeTrue())\n\t\t}\n\t}).WithTimeout(30 * time.Second).Should(Succeed())\n}\n\nfunc (env *Environment) GetInstance(nodeName string) ec2types.Instance {\n\tnode := env.GetNode(nodeName)\n\treturn env.GetInstanceByID(env.ExpectParsedProviderID(node.Spec.ProviderID))\n}\n\nfunc (env *Environment) ExpectInstanceStopped(nodeName string) {\n\tGinkgoHelper()\n\tnode := env.GetNode(nodeName)\n\t_, err := env.EC2API.StopInstances(env.Context, &ec2.StopInstancesInput{\n\t\tForce:       aws.Bool(true),\n\t\tInstanceIds: []string{env.ExpectParsedProviderID(node.Spec.ProviderID)},\n\t})\n\tExpect(err).To(Succeed())\n}\n\nfunc (env *Environment) ExpectInstanceTerminated(nodeName string) {\n\tGinkgoHelper()\n\tnode := env.GetNode(nodeName)\n\t_, err := env.EC2API.TerminateInstances(env.Context, &ec2.TerminateInstancesInput{\n\t\tInstanceIds: []string{env.ExpectParsedProviderID(node.Spec.ProviderID)},\n\t})\n\tExpect(err).To(Succeed())\n}\n\nfunc (env *Environment) GetInstanceByID(instanceID string) ec2types.Instance {\n\tGinkgoHelper()\n\tinstance, err := env.EC2API.DescribeInstances(env.Context, &ec2.DescribeInstancesInput{\n\t\tInstanceIds: []string{instanceID},\n\t})\n\tExpect(err).ToNot(HaveOccurred())\n\tExpect(instance.Reservations).To(HaveLen(1))\n\tExpect(instance.Reservations[0].Instances).To(HaveLen(1))\n\treturn instance.Reservations[0].Instances[0]\n}\n\nfunc (env *Environment) GetVolume(id string) ec2types.Volume {\n\tvolumes := env.GetVolumes(id)\n\tExpect(volumes).To(HaveLen(1))\n\treturn volumes[0]\n}\n\nfunc (env *Environment) GetVolumes(ids ...string) []ec2types.Volume {\n\tGinkgoHelper()\n\tdvo, err := env.EC2API.DescribeVolumes(env.Context, &ec2.DescribeVolumesInput{VolumeIds: ids})\n\tExpect(err).ToNot(HaveOccurred())\n\n\treturn dvo.Volumes\n}\n\nfunc (env *Environment) GetNetworkInterface(id string) ec2types.NetworkInterface {\n\tnetworkInterfaces := env.GetNetworkInterfaces(id)\n\tExpect(networkInterfaces).To(HaveLen(1))\n\treturn networkInterfaces[0]\n}\n\nfunc (env *Environment) GetNetworkInterfaces(ids ...string) []ec2types.NetworkInterface {\n\tGinkgoHelper()\n\tdnio, err := env.EC2API.DescribeNetworkInterfaces(env.Context, &ec2.DescribeNetworkInterfacesInput{NetworkInterfaceIds: ids})\n\tExpect(err).ToNot(HaveOccurred())\n\treturn dnio.NetworkInterfaces\n}\n\nfunc (env *Environment) GetSpotInstance(id string) ec2types.SpotInstanceRequest {\n\tGinkgoHelper()\n\tsiro, err := env.EC2API.DescribeSpotInstanceRequests(env.Context, &ec2.DescribeSpotInstanceRequestsInput{\n\t\tSpotInstanceRequestIds: []string{id},\n\t})\n\tExpect(err).ToNot(HaveOccurred())\n\tExpect(siro.SpotInstanceRequests).To(HaveLen(1))\n\treturn siro.SpotInstanceRequests[0]\n}\n\n// GetSubnets returns all subnets matching the label selector\n// mapped from AZ -> {subnet-ids...}\nfunc (env *Environment) GetSubnets(tags map[string]string) map[string][]string {\n\tvar filters []ec2types.Filter\n\tfor key, val := range tags {\n\t\tfilters = append(filters, ec2types.Filter{\n\t\t\tName:   aws.String(fmt.Sprintf(\"tag:%s\", key)),\n\t\t\tValues: []string{val},\n\t\t})\n\t}\n\tsubnets := map[string][]string{}\n\tinput := &ec2.DescribeSubnetsInput{\n\t\tFilters: filters,\n\t}\n\n\tpaginator := ec2.NewDescribeSubnetsPaginator(env.EC2API, input)\n\tfor paginator.HasMorePages() {\n\t\toutput, err := paginator.NextPage(env.Context)\n\t\tif err != nil {\n\t\t\tExpect(err).To(BeNil())\n\t\t}\n\n\t\tfor _, subnet := range output.Subnets {\n\t\t\tsubnets[*subnet.AvailabilityZone] = append(subnets[*subnet.AvailabilityZone], *subnet.SubnetId)\n\t\t}\n\t}\n\n\treturn subnets\n}\n\n// SubnetInfo is a simple struct for testing\ntype SubnetInfo struct {\n\tName string\n\tID   string\n\tZoneInfo\n}\n\n// GetSubnetInfo returns all subnets matching the label selector\nfunc (env *Environment) GetSubnetInfo(tags map[string]string) []SubnetInfo {\n\tvar filters []ec2types.Filter\n\tfor key, val := range tags {\n\t\tfilters = append(filters, ec2types.Filter{\n\t\t\tName:   aws.String(fmt.Sprintf(\"tag:%s\", key)),\n\t\t\tValues: []string{val},\n\t\t})\n\t}\n\tvar subnetInfo []SubnetInfo\n\tinput := &ec2.DescribeSubnetsInput{\n\t\tFilters: filters,\n\t}\n\n\tpaginator := ec2.NewDescribeSubnetsPaginator(env.EC2API, input)\n\tfor paginator.HasMorePages() {\n\t\toutput, err := paginator.NextPage(env.Context)\n\t\tif err != nil {\n\t\t\tExpect(err).To(BeNil())\n\t\t}\n\n\t\tsubnetInfo = append(subnetInfo, lo.Map(output.Subnets, func(s ec2types.Subnet, _ int) SubnetInfo {\n\t\t\telem := SubnetInfo{ID: aws.ToString(s.SubnetId)}\n\t\t\tif tag, ok := lo.Find(s.Tags, func(t ec2types.Tag) bool { return aws.ToString(t.Key) == \"Name\" }); ok {\n\t\t\t\telem.Name = aws.ToString(tag.Value)\n\t\t\t}\n\t\t\tif info, ok := lo.Find(env.ZoneInfo, func(info ZoneInfo) bool {\n\t\t\t\treturn aws.ToString(s.AvailabilityZone) == info.Zone\n\t\t\t}); ok {\n\t\t\t\telem.ZoneInfo = info\n\t\t\t}\n\t\t\treturn elem\n\t\t})...)\n\t}\n\n\treturn subnetInfo\n}\n\ntype SecurityGroup struct {\n\tec2types.GroupIdentifier\n\tTags []ec2types.Tag\n}\n\n// GetSecurityGroups returns all getSecurityGroups matching the label selector\nfunc (env *Environment) GetSecurityGroups(tags map[string]string) []SecurityGroup {\n\tvar filters []ec2types.Filter\n\tfor key, val := range tags {\n\t\tfilters = append(filters, ec2types.Filter{\n\t\t\tName:   aws.String(fmt.Sprintf(\"tag:%s\", key)),\n\t\t\tValues: []string{val},\n\t\t})\n\t}\n\tvar securityGroups []SecurityGroup\n\tinput := &ec2.DescribeSecurityGroupsInput{\n\t\tFilters: filters,\n\t}\n\n\tpaginator := ec2.NewDescribeSecurityGroupsPaginator(env.EC2API, input)\n\tfor paginator.HasMorePages() {\n\t\toutput, err := paginator.NextPage(env.Context)\n\t\tif err != nil {\n\t\t\tExpect(err).To(BeNil())\n\t\t}\n\n\t\tfor _, sg := range output.SecurityGroups {\n\t\t\tsecurityGroups = append(securityGroups, SecurityGroup{\n\t\t\t\tTags:            sg.Tags,\n\t\t\t\tGroupIdentifier: ec2types.GroupIdentifier{GroupId: sg.GroupId, GroupName: sg.GroupName},\n\t\t\t})\n\t\t}\n\t}\n\n\treturn securityGroups\n}\n\nfunc (env *Environment) ExpectMessagesCreated(msgs ...any) {\n\tGinkgoHelper()\n\twg := &sync.WaitGroup{}\n\tmu := &sync.Mutex{}\n\n\tvar err error\n\tfor _, msg := range msgs {\n\t\twg.Go(func() {\n\t\t\tdefer GinkgoRecover()\n\t\t\t_, e := env.SQSProvider.SendMessage(env.Context, msg)\n\t\t\tif e != nil {\n\t\t\t\tmu.Lock()\n\t\t\t\terr = multierr.Append(err, e)\n\t\t\t\tmu.Unlock()\n\t\t\t}\n\t\t})\n\t}\n\twg.Wait()\n\tExpect(err).To(Succeed())\n}\n\nfunc (env *Environment) ExpectParsedProviderID(providerID string) string {\n\tGinkgoHelper()\n\tproviderIDSplit := strings.Split(providerID, \"/\")\n\tExpect(len(providerIDSplit)).ToNot(Equal(0))\n\treturn providerIDSplit[len(providerIDSplit)-1]\n}\n\nfunc (env *Environment) K8sVersion() string {\n\tGinkgoHelper()\n\n\treturn env.K8sVersionWithOffset(0)\n}\n\nfunc (env *Environment) K8sVersionWithOffset(offset int) string {\n\tGinkgoHelper()\n\n\tserverVersion, err := env.KubeClient.Discovery().ServerVersion()\n\tExpect(err).To(BeNil())\n\tminorVersion, err := strconv.Atoi(strings.TrimSuffix(serverVersion.Minor, \"+\"))\n\tExpect(err).To(BeNil())\n\t// Choose a minor version one lesser than the server's minor version. This ensures that we choose an AMI for\n\t// this test that wouldn't be selected as Karpenter's SSM default (therefore avoiding false positives), and also\n\t// ensures that we aren't violating version skew.\n\treturn fmt.Sprintf(\"%s.%d\", serverVersion.Major, minorVersion-offset)\n}\n\nfunc (env *Environment) K8sMinorVersion() int {\n\tGinkgoHelper()\n\n\tversion, err := strconv.Atoi(strings.Split(env.K8sVersion(), \".\")[1])\n\tExpect(err).ToNot(HaveOccurred())\n\treturn version\n}\n\nfunc (env *Environment) GetAMIBySSMPath(ssmPath string) string {\n\tGinkgoHelper()\n\n\tparameter, err := env.SSMAPI.GetParameter(env.Context, &ssm.GetParameterInput{\n\t\tName: aws.String(ssmPath),\n\t})\n\tExpect(err).To(BeNil())\n\treturn *parameter.Parameter.Value\n}\n\nfunc (env *Environment) GetDeprecatedAMI(amiID string, amifamily string) string {\n\tout, err := env.EC2API.DescribeImages(env.Context, &ec2.DescribeImagesInput{\n\t\tFilters: []ec2types.Filter{\n\t\t\t{\n\t\t\t\tName:   lo.ToPtr(fmt.Sprintf(\"tag:%s\", coretest.DiscoveryLabel)),\n\t\t\t\tValues: []string{env.K8sVersion()},\n\t\t\t},\n\t\t\t{\n\t\t\t\tName:   lo.ToPtr(\"tag:amiFamily\"),\n\t\t\t\tValues: []string{amifamily},\n\t\t\t},\n\t\t},\n\t\tIncludeDeprecated: lo.ToPtr(true),\n\t})\n\tExpect(err).To(BeNil())\n\tif len(out.Images) == 1 {\n\t\treturn lo.FromPtr(out.Images[0].ImageId)\n\t}\n\n\tinput := &ec2.CopyImageInput{\n\t\tSourceImageId: lo.ToPtr(amiID),\n\t\tName:          lo.ToPtr(fmt.Sprintf(\"deprecated-%s-%s-%s\", amiID, amifamily, env.K8sVersion())),\n\t\tSourceRegion:  lo.ToPtr(env.Region),\n\t\tTagSpecifications: []ec2types.TagSpecification{\n\t\t\t{ResourceType: ec2types.ResourceTypeImage, Tags: []ec2types.Tag{\n\t\t\t\t{\n\t\t\t\t\tKey:   lo.ToPtr(coretest.DiscoveryLabel),\n\t\t\t\t\tValue: lo.ToPtr(env.K8sVersion()),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tKey:   lo.ToPtr(\"amiFamily\"),\n\t\t\t\t\tValue: lo.ToPtr(amifamily),\n\t\t\t\t},\n\t\t\t}},\n\t\t},\n\t}\n\toutput, err := env.EC2API.CopyImage(env.Context, input)\n\tExpect(err).To(BeNil())\n\n\tdeprecated, err := env.EC2API.EnableImageDeprecation(env.Context, &ec2.EnableImageDeprecationInput{\n\t\tImageId:     output.ImageId,\n\t\tDeprecateAt: lo.ToPtr(time.Now()),\n\t})\n\tExpect(err).To(BeNil())\n\tExpect(lo.FromPtr(deprecated.Return)).To(BeTrue())\n\n\treturn lo.FromPtr(output.ImageId)\n}\n\nfunc (env *Environment) EventuallyExpectRunInstances(instanceInput *ec2.RunInstancesInput) ec2types.Reservation {\n\tGinkgoHelper()\n\t// implement IMDSv2\n\tinstanceInput.MetadataOptions = &ec2types.InstanceMetadataOptionsRequest{\n\t\tHttpEndpoint: \"enabled\",\n\t\tHttpTokens:   \"required\",\n\t}\n\tvar reservation ec2types.Reservation\n\tEventually(func(g Gomega) {\n\t\tout, err := env.EC2API.RunInstances(env.Context, instanceInput)\n\t\tg.Expect(err).ToNot(HaveOccurred())\n\t\tg.Expect(out.Instances).ToNot(BeEmpty())\n\t\treservation = ec2types.Reservation{\n\t\t\tInstances: out.Instances,\n\t\t}\n\t}).WithTimeout(30 * time.Second).WithPolling(5 * time.Second).Should(Succeed())\n\treturn reservation\n}\n\nfunc (env *Environment) ExpectSpotInterruptionRole() *iamtypes.Role {\n\tGinkgoHelper()\n\tout, err := env.IAMAPI.GetRole(env.Context, &iam.GetRoleInput{\n\t\tRoleName: aws.String(fisRoleName),\n\t})\n\tExpect(err).ToNot(HaveOccurred())\n\treturn out.Role\n}\n\nfunc (env *Environment) ExpectAccountID() string {\n\tGinkgoHelper()\n\tidentity, err := env.STSAPI.GetCallerIdentity(env.Context, &sts.GetCallerIdentityInput{})\n\tExpect(err).ToNot(HaveOccurred())\n\treturn aws.ToString(identity.Account)\n}\n\nfunc (env *Environment) ExpectInstanceProfileCreated(instanceProfileName, roleName string) {\n\tBy(\"creating an instance profile\")\n\tcreateInstanceProfile := &iam.CreateInstanceProfileInput{\n\t\tInstanceProfileName: aws.String(instanceProfileName),\n\t\tTags: []iamtypes.Tag{\n\t\t\t{\n\t\t\t\tKey:   aws.String(coretest.DiscoveryLabel),\n\t\t\t\tValue: aws.String(env.ClusterName),\n\t\t\t},\n\t\t},\n\t}\n\tBy(\"adding the karpenter role to new instance profile\")\n\t_, err := env.IAMAPI.CreateInstanceProfile(env.Context, createInstanceProfile)\n\tExpect(awserrors.IgnoreAlreadyExists(err)).ToNot(HaveOccurred())\n\taddInstanceProfile := &iam.AddRoleToInstanceProfileInput{\n\t\tInstanceProfileName: aws.String(instanceProfileName),\n\t\tRoleName:            aws.String(roleName),\n\t}\n\t_, err = env.IAMAPI.AddRoleToInstanceProfile(env.Context, addInstanceProfile)\n\tExpect(ignoreAlreadyContainsRole(err)).ToNot(HaveOccurred())\n}\n\nfunc (env *Environment) ExpectInstanceProfileDeleted(instanceProfileName, roleName string) {\n\tBy(\"deleting an instance profile\")\n\tremoveRoleFromInstanceProfile := &iam.RemoveRoleFromInstanceProfileInput{\n\t\tInstanceProfileName: aws.String(instanceProfileName),\n\t\tRoleName:            aws.String(roleName),\n\t}\n\t_, err := env.IAMAPI.RemoveRoleFromInstanceProfile(env.Context, removeRoleFromInstanceProfile)\n\tExpect(awserrors.IgnoreNotFound(err)).To(BeNil())\n\n\tdeleteInstanceProfile := &iam.DeleteInstanceProfileInput{\n\t\tInstanceProfileName: aws.String(instanceProfileName),\n\t}\n\t_, err = env.IAMAPI.DeleteInstanceProfile(env.Context, deleteInstanceProfile)\n\tExpect(awserrors.IgnoreNotFound(err)).ToNot(HaveOccurred())\n}\n\nfunc ignoreAlreadyContainsRole(err error) error {\n\tif err != nil {\n\t\tif strings.Contains(err.Error(), \"Cannot exceed quota for InstanceSessionsPerInstanceProfile\") {\n\t\t\treturn nil\n\t\t}\n\t}\n\treturn err\n}\n\nfunc ExpectInterruptibleCapacityReservationCreated(\n\tctx context.Context,\n\tec2api *ec2.Client,\n\tinstanceType ec2types.InstanceType,\n\tzone string,\n\ttotalCapacity int32,\n\tinterruptibleCapacity int32,\n\ttags map[string]string,\n) (string, string) {\n\tGinkgoHelper()\n\todcrID := ExpectCapacityReservationCreated(ctx, ec2api, instanceType, zone, totalCapacity, nil, tags)\n\n\t_, err := ec2api.CreateInterruptibleCapacityReservationAllocation(ctx, &ec2.CreateInterruptibleCapacityReservationAllocationInput{\n\t\tCapacityReservationId: &odcrID,\n\t\tInstanceCount:         lo.ToPtr(interruptibleCapacity),\n\t\tTagSpecifications: lo.Ternary(len(tags) != 0, []ec2types.TagSpecification{{\n\t\t\tResourceType: ec2types.ResourceTypeCapacityReservation,\n\t\t\tTags:         utils.EC2MergeTags(tags),\n\t\t}}, nil),\n\t})\n\tExpect(err).ToNot(HaveOccurred())\n\n\t// the create IODCR API doesn't return the IODCR ID, so we have to describe the source reservation\n\tvar out *ec2.DescribeCapacityReservationsOutput\n\tEventually(func(g Gomega) {\n\t\tout, err = ec2api.DescribeCapacityReservations(ctx, &ec2.DescribeCapacityReservationsInput{\n\t\t\tCapacityReservationIds: []string{odcrID},\n\t\t})\n\t\tExpect(err).ToNot(HaveOccurred())\n\t\tExpect(out).To(Not(BeNil()))\n\t\tExpect(len(out.CapacityReservations)).To(Equal(1))\n\t\tExpect(out.CapacityReservations[0].InterruptibleCapacityAllocation).To(Not(BeNil()))\n\t}).WithTimeout(15 * time.Second).WithPolling(2 * time.Second).Should(Succeed())\n\n\treturn odcrID, *out.CapacityReservations[0].InterruptibleCapacityAllocation.InterruptibleCapacityReservationId\n}\n\nfunc ExpectModifyInterruptibleCapacity(\n\tctx context.Context,\n\tec2api *ec2.Client,\n\tsourceReservationId string,\n\ttargetInterruptibleCapacity int32,\n) {\n\tGinkgoHelper()\n\t_, err := ec2api.UpdateInterruptibleCapacityReservationAllocation(ctx, &ec2.UpdateInterruptibleCapacityReservationAllocationInput{\n\t\tCapacityReservationId: lo.ToPtr(sourceReservationId),\n\t\tTargetInstanceCount:   lo.ToPtr(targetInterruptibleCapacity),\n\t})\n\tExpect(err).ToNot(HaveOccurred())\n}\n\nfunc ExpectInterruptibleAndSourceCapacityCanceled(\n\tctx context.Context,\n\tec2api *ec2.Client,\n\tsourceReservationId string,\n\tinterrutibleReservationID string,\n) {\n\tGinkgoHelper()\n\t_, err := ec2api.UpdateInterruptibleCapacityReservationAllocation(ctx, &ec2.UpdateInterruptibleCapacityReservationAllocationInput{\n\t\tCapacityReservationId: lo.ToPtr(sourceReservationId),\n\t\tTargetInstanceCount:   aws.Int32(0),\n\t})\n\tExpect(err).To(Or(\n\t\tBeNil(),\n\t\tMatchError(ContainSubstring(\"doesn't have an active interruptible capacity allocation\")),\n\t))\n\n\t// instances in IODCRs take 2 minutes to terminate and reclaim\n\tEventually(func(g Gomega) {\n\t\tout, err := ec2api.DescribeCapacityReservations(ctx, &ec2.DescribeCapacityReservationsInput{\n\t\t\tCapacityReservationIds: []string{interrutibleReservationID},\n\t\t})\n\t\tg.Expect(err).ToNot(HaveOccurred())\n\t\tg.Expect(out).To(Not(BeNil()))\n\t\tg.Expect(len(out.CapacityReservations)).To(Equal(1))\n\t\tg.Expect(out.CapacityReservations[0].State).To(Equal(ec2types.CapacityReservationStateCancelled))\n\t}).WithTimeout(4 * time.Minute).WithPolling(5 * time.Second).Should(Succeed())\n\n\t// there can be transient delays in when IODCR capacity is fully reclaimed and when the source ODCR can be canceled\n\t// if we directly try to cancel the source reservation we'll see error \"has an active interruptible capacity allocation\"\n\tEventually(func(g Gomega) {\n\t\t_, err := ec2api.CancelCapacityReservation(ctx, &ec2.CancelCapacityReservationInput{\n\t\t\tCapacityReservationId: &sourceReservationId,\n\t\t})\n\t\tExpect(err).ToNot(HaveOccurred())\n\t}).WithTimeout(4 * time.Minute).WithPolling(5 * time.Second).Should(Succeed())\n}\n\nfunc ExpectCapacityReservationCreated(\n\tctx context.Context,\n\tec2api *ec2.Client,\n\tinstanceType ec2types.InstanceType,\n\tzone string,\n\tcapacity int32,\n\tendDate *time.Time,\n\ttags map[string]string,\n) string {\n\tGinkgoHelper()\n\tout, err := ec2api.CreateCapacityReservation(ctx, &ec2.CreateCapacityReservationInput{\n\t\tInstanceCount:         lo.ToPtr(capacity),\n\t\tInstanceType:          lo.ToPtr(string(instanceType)),\n\t\tInstancePlatform:      ec2types.CapacityReservationInstancePlatformLinuxUnix,\n\t\tAvailabilityZone:      lo.ToPtr(zone),\n\t\tEndDate:               endDate,\n\t\tInstanceMatchCriteria: ec2types.InstanceMatchCriteriaTargeted,\n\t\tTagSpecifications: lo.Ternary(len(tags) != 0, []ec2types.TagSpecification{{\n\t\t\tResourceType: ec2types.ResourceTypeCapacityReservation,\n\t\t\tTags:         utils.EC2MergeTags(tags),\n\t\t}}, nil),\n\t})\n\tExpect(err).ToNot(HaveOccurred())\n\treturn *out.CapacityReservation.CapacityReservationId\n}\n\nfunc ExpectCapacityReservationsCanceled(ctx context.Context, ec2api *ec2.Client, reservationIDs ...string) {\n\tGinkgoHelper()\n\tfor _, id := range reservationIDs {\n\t\t_, err := ec2api.CancelCapacityReservation(ctx, &ec2.CancelCapacityReservationInput{\n\t\t\tCapacityReservationId: &id,\n\t\t})\n\t\tExpect(err).ToNot(HaveOccurred())\n\t}\n}\n\n// Creates a role with the provided name. The appropriate policies and trust policy are configured to ensure nodes with\n// this role may join the cluster. Additionally, an AccessEntry is created for the role to ensure nodes are authorized\n// to join the cluster.\nfunc (env *Environment) EventuallyExpectNodeRoleCreated(roleName string) {\n\tGinkgoHelper()\n\tif _, err := env.IAMAPI.GetRole(env.Context, &iam.GetRoleInput{\n\t\tRoleName: aws.String(roleName),\n\t}); err == nil {\n\t\treturn\n\t}\n\n\t// Create new role with trust policy\n\ttrustPolicy := `{\n        \"Version\": \"2012-10-17\",\n        \"Statement\": [\n            {\n                \"Effect\": \"Allow\",\n                \"Principal\": {\n                    \"Service\": \"ec2.amazonaws.com\"\n                },\n                \"Action\": \"sts:AssumeRole\"\n            }\n        ]\n    }`\n\n\t// Create new role with same trust policy\n\t_, err := env.IAMAPI.CreateRole(env.Context, &iam.CreateRoleInput{\n\t\tRoleName:                 aws.String(roleName),\n\t\tAssumeRolePolicyDocument: aws.String(trustPolicy),\n\t\tTags: []iamtypes.Tag{\n\t\t\t{\n\t\t\t\tKey:   aws.String(coretest.DiscoveryLabel),\n\t\t\t\tValue: aws.String(env.ClusterName),\n\t\t\t},\n\t\t},\n\t})\n\tExpect(awserrors.IgnoreAlreadyExists(err)).ToNot(HaveOccurred())\n\n\trequiredPolicies := []string{\n\t\t\"arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryPullOnly\",\n\t\t\"arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy\",\n\t\t\"arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicy\",\n\t\t\"arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore\",\n\t}\n\n\t// Attach all required policies\n\tfor _, policyArn := range requiredPolicies {\n\t\t_, err = env.IAMAPI.AttachRolePolicy(env.Context, &iam.AttachRolePolicyInput{\n\t\t\tRoleName:  aws.String(roleName),\n\t\t\tPolicyArn: aws.String(policyArn),\n\t\t})\n\t\tExpect(err).ToNot(HaveOccurred())\n\t}\n\n\t// Verify role exists and has access entry\n\tEventually(func(g Gomega) {\n\t\t// Verify role exists\n\t\tverifyRole, err := env.IAMAPI.GetRole(env.Context, &iam.GetRoleInput{\n\t\t\tRoleName: aws.String(roleName),\n\t\t})\n\t\tg.Expect(err).ToNot(HaveOccurred())\n\t\tg.Expect(verifyRole.Role).ToNot(BeNil())\n\t}).Should(Succeed())\n\n\tEventually(func(g Gomega) {\n\t\t_, err = env.EKSAPI.CreateAccessEntry(env.Context, &eks.CreateAccessEntryInput{\n\t\t\tClusterName:  aws.String(env.ClusterName),\n\t\t\tPrincipalArn: aws.String(fmt.Sprintf(\"arn:aws:iam::%s:role/%s\", env.ExpectAccountID(), roleName)),\n\t\t\tType:         aws.String(\"EC2_LINUX\"),\n\t\t})\n\t\tg.Expect(err).ToNot(HaveOccurred())\n\t}).WithTimeout(30 * time.Second).WithPolling(5 * time.Second).Should(Succeed())\n}\n\n// Deletes a role and cleans up associated resources. This includes removing the EKS access entry that authorizes nodes\n// to join the cluster, detaching standard node policies (container registry, CNI, worker node, and SSM policies), and\n// finally deleting the IAM role itself.\nfunc (env *Environment) ExpectNodeRoleDeleted(roleName string) {\n\tGinkgoHelper()\n\n\t_, err := env.EKSAPI.DeleteAccessEntry(env.Context, &eks.DeleteAccessEntryInput{\n\t\tClusterName:  aws.String(env.ClusterName),\n\t\tPrincipalArn: aws.String(fmt.Sprintf(\"arn:aws:iam::%s:role/%s\", env.ExpectAccountID(), roleName)),\n\t})\n\tExpect(awserrors.IgnoreNotFound(err)).ToNot(HaveOccurred())\n\n\trequiredPolicies := []string{\n\t\t\"arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryPullOnly\",\n\t\t\"arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy\",\n\t\t\"arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicy\",\n\t\t\"arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore\",\n\t}\n\t// Detach all policies\n\tfor _, policyArn := range requiredPolicies {\n\t\t_, err = env.IAMAPI.DetachRolePolicy(env.Context, &iam.DetachRolePolicyInput{\n\t\t\tRoleName:  aws.String(roleName),\n\t\t\tPolicyArn: &policyArn,\n\t\t})\n\t\tExpect(awserrors.IgnoreNotFound(err)).ToNot(HaveOccurred())\n\t}\n\n\t// Delete role\n\t_, err = env.IAMAPI.DeleteRole(env.Context, &iam.DeleteRoleInput{\n\t\tRoleName: aws.String(roleName),\n\t})\n\tExpect(awserrors.IgnoreNotFound(err)).ToNot(HaveOccurred())\n}\n"
  },
  {
    "path": "test/pkg/environment/aws/metrics.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage aws\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go-v2/aws\"\n\t\"github.com/aws/aws-sdk-go-v2/service/timestreamwrite\"\n\ttimestreamwritetypes \"github.com/aws/aws-sdk-go-v2/service/timestreamwrite/types\"\n\t\"github.com/samber/lo\"\n\n\tsdk \"github.com/aws/karpenter-provider-aws/pkg/aws\"\n\n\t\"github.com/aws/karpenter-provider-aws/test/pkg/environment/common\"\n\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n)\n\nconst (\n\tmetricsDefaultRegion = \"us-east-2\"\n\tdatabaseName         = \"karpenterTesting\"\n\ttableName            = \"scaleTestDurations\"\n)\n\ntype NoOpTimeStreamAPI struct {\n\tsdk.TimestreamWriteAPI\n}\n\nfunc (o NoOpTimeStreamAPI) WriteRecords(_ context.Context, _ *timestreamwrite.WriteRecordsInput, _ ...func(*timestreamwrite.Options)) (*timestreamwrite.WriteRecordsOutput, error) {\n\treturn nil, nil\n}\n\ntype EventType string\n\nconst (\n\tProvisioningEventType   EventType = \"provisioning\"\n\tDeprovisioningEventType EventType = \"deprovisioning\"\n)\n\nconst (\n\tTestCategoryDimension           = \"category\"\n\tTestNameDimension               = \"name\"\n\tGitRefDimension                 = \"gitRef\"\n\tProvisionedNodeCountDimension   = \"provisionedNodeCount\"\n\tDeprovisionedNodeCountDimension = \"deprovisionedNodeCount\"\n\tPodDensityDimension             = \"podDensity\"\n)\n\nfunc (env *Environment) MeasureProvisioningDurationFor(f func(), dimensions map[string]string) {\n\tGinkgoHelper()\n\n\tenv.MeasureDurationFor(f, ProvisioningEventType, dimensions)\n}\n\nfunc (env *Environment) MeasureDeprovisioningDurationFor(f func(), dimensions map[string]string) {\n\tGinkgoHelper()\n\n\tenv.MeasureDurationFor(f, DeprovisioningEventType, dimensions)\n}\n\n// MeasureDurationFor observes the duration between the beginning of the function f() and the end of the function f()\nfunc (env *Environment) MeasureDurationFor(f func(), eventType EventType, dimensions map[string]string) {\n\tGinkgoHelper()\n\tstart := time.Now()\n\tf()\n\tgitRef := \"n/a\"\n\tif env.Value(common.GitRefContextKey) != nil {\n\t\tgitRef = env.Value(common.GitRefContextKey).(string)\n\t}\n\n\tdimensions = lo.Assign(dimensions, map[string]string{\n\t\tGitRefDimension: gitRef,\n\t})\n\tswitch eventType {\n\tcase ProvisioningEventType:\n\t\tenv.ExpectMetric(\"provisioningDuration\", time.Since(start).Seconds(), dimensions)\n\tcase DeprovisioningEventType:\n\t\tenv.ExpectMetric(\"deprovisioningDuration\", time.Since(start).Seconds(), dimensions)\n\t}\n}\n\nfunc (env *Environment) ExpectMetric(name string, value float64, labels map[string]string) {\n\tGinkgoHelper()\n\t_, err := env.TimeStreamAPI.WriteRecords(env.Context, &timestreamwrite.WriteRecordsInput{\n\t\tDatabaseName: aws.String(databaseName),\n\t\tTableName:    aws.String(tableName),\n\t\tRecords: []timestreamwritetypes.Record{\n\t\t\t{\n\t\t\t\tMeasureName:  aws.String(name),\n\t\t\t\tMeasureValue: aws.String(fmt.Sprintf(\"%f\", value)),\n\t\t\t\tDimensions: lo.MapToSlice(labels, func(k, v string) timestreamwritetypes.Dimension {\n\t\t\t\t\treturn timestreamwritetypes.Dimension{\n\t\t\t\t\t\tName:  aws.String(k),\n\t\t\t\t\t\tValue: aws.String(v),\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\tTime: aws.String(fmt.Sprintf(\"%d\", time.Now().UnixMilli())),\n\t\t\t},\n\t\t},\n\t})\n\tExpect(err).ToNot(HaveOccurred())\n}\n"
  },
  {
    "path": "test/pkg/environment/aws/setup.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage aws\n\nimport (\n\tcorev1 \"k8s.io/api/core/v1\"\n\t\"sigs.k8s.io/controller-runtime/pkg/client\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n)\n\nvar persistedSettings []corev1.EnvVar\n\nvar (\n\tCleanableObjects = []client.Object{\n\t\t&v1.EC2NodeClass{},\n\t}\n)\n\nfunc (env *Environment) BeforeEach() {\n\tpersistedSettings = env.ExpectSettings()\n\tenv.Environment.BeforeEach()\n}\n\nfunc (env *Environment) Cleanup() {\n\tenv.Environment.Cleanup()\n\tenv.CleanupObjects(CleanableObjects...)\n}\n\nfunc (env *Environment) AfterEach() {\n\tenv.Environment.AfterEach()\n\t// Ensure we reset settings after collecting the controller logs\n\tenv.ExpectSettingsReplaced(persistedSettings...)\n}\n"
  },
  {
    "path": "test/pkg/environment/common/environment.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage common\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"log\"\n\t\"os\"\n\t\"strconv\"\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/awslabs/operatorpkg/object\"\n\t\"github.com/onsi/gomega\"\n\t\"github.com/samber/lo\"\n\tcorev1 \"k8s.io/api/core/v1\"\n\t\"k8s.io/apimachinery/pkg/api/resource\"\n\t\"k8s.io/client-go/kubernetes\"\n\t\"k8s.io/client-go/kubernetes/scheme\"\n\t\"k8s.io/client-go/rest\"\n\n\t. \"sigs.k8s.io/karpenter/pkg/utils/testing\" //nolint:stylecheck,staticcheck\n\n\tcontrollerruntime \"sigs.k8s.io/controller-runtime\"\n\t\"sigs.k8s.io/controller-runtime/pkg/cache\"\n\t\"sigs.k8s.io/controller-runtime/pkg/client\"\n\n\tkarpv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n\t\"sigs.k8s.io/karpenter/pkg/operator\"\n\tcoretest \"sigs.k8s.io/karpenter/pkg/test\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n)\n\ntype ContextKey string\n\nconst (\n\tGitRefContextKey = ContextKey(\"gitRef\")\n)\n\ntype Environment struct {\n\tcontext.Context\n\tcancel context.CancelFunc\n\n\tClient     client.Client\n\tConfig     *rest.Config\n\tKubeClient kubernetes.Interface\n\tMonitor    *Monitor\n\n\tStartingNodeCount int\n}\n\nfunc NewEnvironment(t *testing.T) *Environment {\n\tctx := TestContextWithLogger(t)\n\tctx, cancel := context.WithCancel(ctx)\n\tconfig := NewConfig()\n\tclient := NewClient(ctx, config)\n\n\tif val, ok := os.LookupEnv(\"GIT_REF\"); ok {\n\t\tctx = context.WithValue(ctx, GitRefContextKey, val)\n\t}\n\n\tgomega.SetDefaultEventuallyTimeout(16 * time.Minute)\n\tgomega.SetDefaultEventuallyPollingInterval(1 * time.Second)\n\treturn &Environment{\n\t\tContext:    ctx,\n\t\tcancel:     cancel,\n\t\tConfig:     config,\n\t\tClient:     client,\n\t\tKubeClient: kubernetes.NewForConfigOrDie(config),\n\t\tMonitor:    NewMonitor(ctx, client),\n\t}\n}\n\nfunc (env *Environment) Stop() {\n\tenv.cancel()\n}\n\nfunc NewConfig() *rest.Config {\n\tconfig := controllerruntime.GetConfigOrDie()\n\tconfig.UserAgent = fmt.Sprintf(\"testing-%s\", operator.Version)\n\tconfig.QPS = 1e6\n\tconfig.Burst = 1e6\n\treturn config\n}\n\nfunc NewClient(ctx context.Context, config *rest.Config) client.Client {\n\tcache := lo.Must(cache.New(config, cache.Options{Scheme: scheme.Scheme}))\n\tlo.Must0(cache.IndexField(ctx, &corev1.Pod{}, \"spec.nodeName\", func(o client.Object) []string {\n\t\tpod := o.(*corev1.Pod)\n\t\treturn []string{pod.Spec.NodeName}\n\t}))\n\tlo.Must0(cache.IndexField(ctx, &corev1.Event{}, \"involvedObject.kind\", func(o client.Object) []string {\n\t\tevt := o.(*corev1.Event)\n\t\treturn []string{evt.InvolvedObject.Kind}\n\t}))\n\tlo.Must0(cache.IndexField(ctx, &corev1.Node{}, \"spec.unschedulable\", func(o client.Object) []string {\n\t\tnode := o.(*corev1.Node)\n\t\treturn []string{strconv.FormatBool(node.Spec.Unschedulable)}\n\t}))\n\tlo.Must0(cache.IndexField(ctx, &corev1.Node{}, \"spec.taints[*].karpenter.sh/disrupted\", func(o client.Object) []string {\n\t\tnode := o.(*corev1.Node)\n\t\t_, found := lo.Find(node.Spec.Taints, func(t corev1.Taint) bool {\n\t\t\treturn t.Key == karpv1.DisruptedTaintKey\n\t\t})\n\t\treturn []string{lo.Ternary(found, \"true\", \"false\")}\n\t}))\n\n\tc := lo.Must(client.New(config, client.Options{Scheme: scheme.Scheme, Cache: &client.CacheOptions{Reader: cache}}))\n\n\tgo func() {\n\t\tlo.Must0(cache.Start(ctx))\n\t}()\n\tif !cache.WaitForCacheSync(ctx) {\n\t\tlog.Fatalf(\"cache failed to sync\")\n\t}\n\treturn c\n}\n\nfunc (env *Environment) DefaultNodePool(nodeClass *v1.EC2NodeClass) *karpv1.NodePool {\n\tnodePool := coretest.NodePool()\n\tnodePool.Spec.Template.Spec.NodeClassRef = &karpv1.NodeClassReference{\n\t\tGroup: object.GVK(nodeClass).Group,\n\t\tKind:  object.GVK(nodeClass).Kind,\n\t\tName:  nodeClass.Name,\n\t}\n\tnodePool.Spec.Template.Spec.Requirements = []karpv1.NodeSelectorRequirementWithMinValues{\n\t\t{\n\t\t\tKey:      corev1.LabelOSStable,\n\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\tValues:   []string{string(corev1.Linux)},\n\t\t},\n\t\t{\n\t\t\tKey:      karpv1.CapacityTypeLabelKey,\n\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\tValues:   []string{karpv1.CapacityTypeOnDemand},\n\t\t},\n\t\t{\n\t\t\tKey:      v1.LabelInstanceCategory,\n\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\tValues:   []string{\"c\", \"m\", \"r\"},\n\t\t},\n\t\t{\n\t\t\tKey:      v1.LabelInstanceGeneration,\n\t\t\tOperator: corev1.NodeSelectorOpGt,\n\t\t\tValues:   []string{\"4\"},\n\t\t},\n\t\t// Filter out a1 instance types, which are incompatible with AL2023 AMIs\n\t\t{\n\t\t\tKey:      v1.LabelInstanceFamily,\n\t\t\tOperator: corev1.NodeSelectorOpNotIn,\n\t\t\tValues:   []string{\"a1\"},\n\t\t},\n\t}\n\tnodePool.Spec.Disruption.ConsolidationPolicy = karpv1.ConsolidationPolicyWhenEmptyOrUnderutilized\n\tnodePool.Spec.Disruption.ConsolidateAfter = karpv1.MustParseNillableDuration(\"Never\")\n\tnodePool.Spec.Template.Spec.ExpireAfter.Duration = nil\n\tnodePool.Spec.Limits = karpv1.Limits(corev1.ResourceList{\n\t\tcorev1.ResourceCPU:    resource.MustParse(\"1000\"),\n\t\tcorev1.ResourceMemory: resource.MustParse(\"1000Gi\"),\n\t})\n\treturn nodePool\n}\n"
  },
  {
    "path": "test/pkg/environment/common/expectations.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage common\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"context\"\n\t\"encoding/base64\"\n\t\"fmt\"\n\t\"io\"\n\t\"math\"\n\t\"net/http\"\n\t\"regexp\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n\t\"github.com/samber/lo\"\n\tappsv1 \"k8s.io/api/apps/v1\"\n\tcoordinationv1 \"k8s.io/api/coordination/v1\"\n\tcorev1 \"k8s.io/api/core/v1\"\n\t\"k8s.io/apimachinery/pkg/api/equality\"\n\t\"k8s.io/apimachinery/pkg/api/errors\"\n\tmetav1 \"k8s.io/apimachinery/pkg/apis/meta/v1\"\n\t\"k8s.io/apimachinery/pkg/labels\"\n\t\"k8s.io/apimachinery/pkg/types\"\n\t\"k8s.io/apimachinery/pkg/util/rand\"\n\t\"k8s.io/apimachinery/pkg/util/sets\"\n\t\"k8s.io/client-go/tools/portforward\"\n\t\"k8s.io/client-go/transport\"\n\t\"k8s.io/client-go/transport/spdy\"\n\t\"sigs.k8s.io/controller-runtime/pkg/client\"\n\t\"sigs.k8s.io/controller-runtime/pkg/client/apiutil\"\n\t\"sigs.k8s.io/controller-runtime/pkg/log\"\n\n\tkarpv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n\tpscheduling \"sigs.k8s.io/karpenter/pkg/controllers/provisioning/scheduling\"\n\t\"sigs.k8s.io/karpenter/pkg/scheduling\"\n\t\"sigs.k8s.io/karpenter/pkg/test\"\n\t\"sigs.k8s.io/karpenter/pkg/utils/daemonset\"\n\tcoreresources \"sigs.k8s.io/karpenter/pkg/utils/resources\"\n)\n\nvar (\n\tprometheusMetricRegex = regexp.MustCompile(`(?P<Name>.*){(?P<Labels>.*)} (?P<Value>\\d*(?:\\.\\d*)?)`)\n)\n\nfunc (env *Environment) ExpectCreated(objects ...client.Object) {\n\tGinkgoHelper()\n\tfor _, object := range objects {\n\t\tEventually(func(g Gomega) {\n\t\t\tobject.SetLabels(lo.Assign(object.GetLabels(), map[string]string{\n\t\t\t\ttest.DiscoveryLabel: \"unspecified\",\n\t\t\t}))\n\t\t\tg.Expect(env.Client.Create(env, object)).To(Succeed())\n\t\t}).WithTimeout(time.Second * 10).Should(Succeed())\n\t}\n}\n\nfunc (env *Environment) ExpectDeleted(objects ...client.Object) {\n\tGinkgoHelper()\n\tfor _, object := range objects {\n\t\tEventually(func(g Gomega) {\n\t\t\tg.Expect(client.IgnoreNotFound(env.Client.Delete(env, object, client.PropagationPolicy(metav1.DeletePropagationForeground), &client.DeleteOptions{GracePeriodSeconds: lo.ToPtr(int64(0))}))).To(Succeed())\n\t\t}).WithTimeout(time.Second * 10).Should(Succeed())\n\t}\n}\n\n// ExpectUpdated will update objects in the cluster to match the inputs.\n// WARNING: This ignores the resource version check, which can result in\n// overwriting changes made by other controllers in the cluster.\n// This is useful in ensuring that we can clean up resources by patching\n// out finalizers.\n// Grab the object before making the updates to reduce the chance of this race.\nfunc (env *Environment) ExpectUpdated(objects ...client.Object) {\n\tGinkgoHelper()\n\tfor _, o := range objects {\n\t\tEventually(func(g Gomega) {\n\t\t\tcurrent := o.DeepCopyObject().(client.Object)\n\t\t\tg.Expect(env.Client.Get(env.Context, client.ObjectKeyFromObject(current), current)).To(Succeed())\n\t\t\tif current.GetResourceVersion() != o.GetResourceVersion() {\n\t\t\t\tlog.FromContext(env).Info(fmt.Sprintf(\"detected an update to an object (%s) with an outdated resource version, did you get the latest version of the object before patching?\", lo.Must(apiutil.GVKForObject(o, env.Client.Scheme()))))\n\t\t\t}\n\t\t\to.SetResourceVersion(current.GetResourceVersion())\n\t\t\tg.Expect(env.Client.Update(env.Context, o)).To(Succeed())\n\t\t}).WithTimeout(time.Second * 10).Should(Succeed())\n\t}\n}\n\n// ExpectStatusUpdated will update objects in the cluster to match the inputs.\n// WARNING: This ignores the resource version check, which can result in\n// overwriting changes made by other controllers in the cluster.\n// This is useful in ensuring that we can clean up resources by patching\n// out finalizers.\n// Grab the object before making the updates to reduce the chance of this race.\nfunc (env *Environment) ExpectStatusUpdated(objects ...client.Object) {\n\tGinkgoHelper()\n\tfor _, o := range objects {\n\t\tEventually(func(g Gomega) {\n\t\t\tcurrent := o.DeepCopyObject().(client.Object)\n\t\t\tg.Expect(env.Client.Get(env.Context, client.ObjectKeyFromObject(current), current)).To(Succeed())\n\t\t\tif current.GetResourceVersion() != o.GetResourceVersion() {\n\t\t\t\tlog.FromContext(env).Info(fmt.Sprintf(\"detected an update to an object (%s) with an outdated resource version, did you get the latest version of the object before patching?\", lo.Must(apiutil.GVKForObject(o, env.Client.Scheme()))))\n\t\t\t}\n\t\t\to.SetResourceVersion(current.GetResourceVersion())\n\t\t\tg.Expect(env.Client.Status().Update(env.Context, o)).To(Succeed())\n\t\t}).WithTimeout(time.Second * 10).Should(Succeed())\n\t}\n}\n\nfunc ReplaceNodeConditions(node *corev1.Node, conds ...corev1.NodeCondition) *corev1.Node {\n\tkeys := sets.New(lo.Map(conds, func(c corev1.NodeCondition, _ int) string { return string(c.Type) })...)\n\tnode.Status.Conditions = lo.Reject(node.Status.Conditions, func(c corev1.NodeCondition, _ int) bool {\n\t\treturn keys.Has(string(c.Type))\n\t})\n\tnode.Status.Conditions = append(node.Status.Conditions, conds...)\n\treturn node\n}\n\n// ExpectCreatedOrUpdated can update objects in the cluster to match the inputs.\n// WARNING: ExpectUpdated ignores the resource version check, which can result in\n// overwriting changes made by other controllers in the cluster.\n// This is useful in ensuring that we can clean up resources by patching\n// out finalizers.\n// Grab the object before making the updates to reduce the chance of this race.\nfunc (env *Environment) ExpectCreatedOrUpdated(objects ...client.Object) {\n\tGinkgoHelper()\n\tfor _, o := range objects {\n\t\tcurrent := o.DeepCopyObject().(client.Object)\n\t\terr := env.Client.Get(env, client.ObjectKeyFromObject(current), current)\n\t\tif err != nil {\n\t\t\tif errors.IsNotFound(err) {\n\t\t\t\tenv.ExpectCreated(o)\n\t\t\t} else {\n\t\t\t\tFail(fmt.Sprintf(\"Getting object %s, %v\", client.ObjectKeyFromObject(o), err))\n\t\t\t}\n\t\t} else {\n\t\t\tenv.ExpectUpdated(o)\n\t\t}\n\t}\n}\n\nfunc (env *Environment) ExpectSettings() (res []corev1.EnvVar) {\n\tGinkgoHelper()\n\n\td := &appsv1.Deployment{}\n\tExpect(env.Client.Get(env.Context, types.NamespacedName{Namespace: \"kube-system\", Name: \"karpenter\"}, d)).To(Succeed())\n\tExpect(d.Spec.Template.Spec.Containers).To(HaveLen(1))\n\treturn lo.Map(d.Spec.Template.Spec.Containers[0].Env, func(v corev1.EnvVar, _ int) corev1.EnvVar {\n\t\treturn *v.DeepCopy()\n\t})\n}\n\nfunc (env *Environment) ExpectSettingsReplaced(vars ...corev1.EnvVar) {\n\tGinkgoHelper()\n\n\td := &appsv1.Deployment{}\n\tExpect(env.Client.Get(env.Context, types.NamespacedName{Namespace: \"kube-system\", Name: \"karpenter\"}, d)).To(Succeed())\n\tExpect(d.Spec.Template.Spec.Containers).To(HaveLen(1))\n\n\tstored := d.DeepCopy()\n\td.Spec.Template.Spec.Containers[0].Env = vars\n\n\tif !equality.Semantic.DeepEqual(d, stored) {\n\t\tBy(\"replacing environment variables for karpenter deployment\")\n\t\tExpect(env.Client.Patch(env.Context, d, client.StrategicMergeFrom(stored))).To(Succeed())\n\t\tenv.EventuallyExpectKarpenterRestarted()\n\t}\n}\n\nfunc (env *Environment) ExpectSettingsOverridden(vars ...corev1.EnvVar) {\n\tGinkgoHelper()\n\n\td := &appsv1.Deployment{}\n\tExpect(env.Client.Get(env.Context, types.NamespacedName{Namespace: \"kube-system\", Name: \"karpenter\"}, d)).To(Succeed())\n\tExpect(d.Spec.Template.Spec.Containers).To(HaveLen(1))\n\n\tstored := d.DeepCopy()\n\tfor _, v := range vars {\n\t\tif _, i, ok := lo.FindIndexOf(d.Spec.Template.Spec.Containers[0].Env, func(e corev1.EnvVar) bool {\n\t\t\treturn e.Name == v.Name\n\t\t}); ok {\n\t\t\td.Spec.Template.Spec.Containers[0].Env[i] = v\n\t\t} else {\n\t\t\td.Spec.Template.Spec.Containers[0].Env = append(d.Spec.Template.Spec.Containers[0].Env, v)\n\t\t}\n\t}\n\tif !equality.Semantic.DeepEqual(d, stored) {\n\t\tBy(\"overriding environment variables for karpenter deployment\")\n\t\tExpect(env.Client.Patch(env.Context, d, client.StrategicMergeFrom(stored))).To(Succeed())\n\t\tenv.EventuallyExpectKarpenterRestarted()\n\t}\n}\n\nfunc (env *Environment) ExpectSettingsRemoved(vars ...corev1.EnvVar) {\n\tGinkgoHelper()\n\n\tvarNames := sets.New(lo.Map(vars, func(v corev1.EnvVar, _ int) string { return v.Name })...)\n\n\td := &appsv1.Deployment{}\n\tExpect(env.Client.Get(env.Context, types.NamespacedName{Namespace: \"kube-system\", Name: \"karpenter\"}, d)).To(Succeed())\n\tExpect(d.Spec.Template.Spec.Containers).To(HaveLen(1))\n\n\tstored := d.DeepCopy()\n\td.Spec.Template.Spec.Containers[0].Env = lo.Reject(d.Spec.Template.Spec.Containers[0].Env, func(v corev1.EnvVar, _ int) bool {\n\t\treturn varNames.Has(v.Name)\n\t})\n\tif !equality.Semantic.DeepEqual(d, stored) {\n\t\tBy(\"removing environment variables for karpenter deployment\")\n\t\tExpect(env.Client.Patch(env.Context, d, client.StrategicMergeFrom(stored))).To(Succeed())\n\t\tenv.EventuallyExpectKarpenterRestarted()\n\t}\n}\n\nfunc (env *Environment) ExpectConfigMapExists(key types.NamespacedName) *corev1.ConfigMap {\n\tGinkgoHelper()\n\tcm := &corev1.ConfigMap{}\n\tExpect(env.Client.Get(env, key, cm)).To(Succeed())\n\treturn cm\n}\n\nfunc (env *Environment) ExpectConfigMapDataReplaced(key types.NamespacedName, data ...map[string]string) (changed bool) {\n\tGinkgoHelper()\n\tcm := &corev1.ConfigMap{\n\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\tName:      key.Name,\n\t\t\tNamespace: key.Namespace,\n\t\t},\n\t}\n\terr := env.Client.Get(env, key, cm)\n\tExpect(client.IgnoreNotFound(err)).ToNot(HaveOccurred())\n\n\tstored := cm.DeepCopy()\n\tcm.Data = lo.Assign(data...) // Completely replace the data\n\n\t// If the data hasn't changed, we can just return and not update anything\n\tif equality.Semantic.DeepEqual(stored, cm) {\n\t\treturn false\n\t}\n\t// Update the configMap to update the settings\n\tenv.ExpectCreatedOrUpdated(cm)\n\treturn true\n}\n\nfunc (env *Environment) ExpectConfigMapDataOverridden(key types.NamespacedName, data ...map[string]string) (changed bool) {\n\tGinkgoHelper()\n\tcm := &corev1.ConfigMap{\n\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\tName:      key.Name,\n\t\t\tNamespace: key.Namespace,\n\t\t},\n\t}\n\terr := env.Client.Get(env, key, cm)\n\tExpect(client.IgnoreNotFound(err)).ToNot(HaveOccurred())\n\n\tcm.Data = lo.Assign(append([]map[string]string{cm.Data}, data...)...)\n\n\t// Update the configMap to update the settings\n\tenv.ExpectCreatedOrUpdated(cm)\n\treturn true\n}\n\nfunc (env *Environment) ExpectPodENIEnabled() {\n\tGinkgoHelper()\n\tenv.ExpectDaemonSetEnvironmentVariableUpdated(types.NamespacedName{Namespace: \"kube-system\", Name: \"aws-node\"},\n\t\t\"ENABLE_POD_ENI\", \"true\", \"aws-node\")\n}\n\nfunc (env *Environment) ExpectPodENIDisabled() {\n\tGinkgoHelper()\n\tenv.ExpectDaemonSetEnvironmentVariableUpdated(types.NamespacedName{Namespace: \"kube-system\", Name: \"aws-node\"},\n\t\t\"ENABLE_POD_ENI\", \"false\", \"aws-node\")\n}\n\nfunc (env *Environment) ExpectPrefixDelegationEnabled() {\n\tGinkgoHelper()\n\tenv.ExpectDaemonSetEnvironmentVariableUpdated(types.NamespacedName{Namespace: \"kube-system\", Name: \"aws-node\"},\n\t\t\"ENABLE_PREFIX_DELEGATION\", \"true\", \"aws-node\")\n}\n\nfunc (env *Environment) ExpectPrefixDelegationDisabled() {\n\tGinkgoHelper()\n\tenv.ExpectDaemonSetEnvironmentVariableUpdated(types.NamespacedName{Namespace: \"kube-system\", Name: \"aws-node\"},\n\t\t\"ENABLE_PREFIX_DELEGATION\", \"false\", \"aws-node\")\n}\n\nfunc (env *Environment) ExpectExists(obj client.Object) client.Object {\n\tGinkgoHelper()\n\tEventually(func(g Gomega) {\n\t\tg.Expect(env.Client.Get(env, client.ObjectKeyFromObject(obj), obj)).To(Succeed())\n\t}).WithTimeout(time.Second * 5).Should(Succeed())\n\treturn obj\n}\n\nfunc (env *Environment) EventuallyExpectBound(pods ...*corev1.Pod) {\n\tGinkgoHelper()\n\tEventually(func(g Gomega) {\n\t\tfor _, pod := range pods {\n\t\t\tg.Expect(env.Client.Get(env, client.ObjectKeyFromObject(pod), pod)).To(Succeed())\n\t\t\tg.Expect(pod.Spec.NodeName).ToNot(BeEmpty())\n\t\t}\n\t}).Should(Succeed())\n}\n\nfunc (env *Environment) EventuallyExpectHealthy(pods ...*corev1.Pod) {\n\tGinkgoHelper()\n\tenv.EventuallyExpectHealthyWithTimeout(-1, pods...)\n}\n\nfunc (env *Environment) EventuallyExpectTerminating(pods ...*corev1.Pod) {\n\tGinkgoHelper()\n\tenv.EventuallyExpectTerminatingWithTimeout(-1, pods...)\n}\n\nfunc (env *Environment) EventuallyExpectTerminatingWithTimeout(timeout time.Duration, pods ...*corev1.Pod) {\n\tGinkgoHelper()\n\tEventually(func(g Gomega) {\n\t\tfor _, pod := range pods {\n\t\t\tg.Expect(env.Client.Get(env, client.ObjectKeyFromObject(pod), pod)).To(Succeed())\n\t\t\tg.Expect(pod.DeletionTimestamp.IsZero()).To(BeFalse())\n\t\t}\n\t}).WithTimeout(timeout).Should(Succeed())\n}\n\nfunc (env *Environment) EventuallyExpectNoLeakedKubeNodeLease() {\n\tGinkgoHelper()\n\t// expect no kube node lease to be leaked\n\tleases := &coordinationv1.LeaseList{}\n\tExpect(env.Client.List(env.Context, leases, client.InNamespace(\"kube-node-lease\"))).To(Succeed())\n\tleakedLeases := lo.Filter(leases.Items, func(l coordinationv1.Lease, _ int) bool {\n\t\treturn l.OwnerReferences == nil\n\t})\n\tExpect(leakedLeases).To(HaveLen(0))\n}\n\nfunc (env *Environment) EventuallyExpectHealthyWithTimeout(timeout time.Duration, pods ...*corev1.Pod) {\n\tGinkgoHelper()\n\tEventually(func(g Gomega) {\n\t\tfor _, pod := range pods {\n\t\t\tg.Expect(env.Client.Get(env, client.ObjectKeyFromObject(pod), pod)).To(Succeed())\n\t\t\tg.Expect(pod.Status.Conditions).To(ContainElement(And(\n\t\t\t\tHaveField(\"Type\", Equal(corev1.PodReady)),\n\t\t\t\tHaveField(\"Status\", Equal(corev1.ConditionTrue)),\n\t\t\t)))\n\t\t}\n\t}).WithTimeout(timeout).Should(Succeed())\n}\n\nfunc (env *Environment) ConsistentlyExpectTerminatingPods(duration time.Duration, pods ...*corev1.Pod) {\n\tGinkgoHelper()\n\tBy(fmt.Sprintf(\"expecting %d pods to be terminating for %s\", len(pods), duration))\n\tConsistently(func(g Gomega) {\n\t\tfor _, pod := range pods {\n\t\t\tg.Expect(env.Client.Get(env, client.ObjectKeyFromObject(pod), pod)).To(Succeed())\n\t\t\tg.Expect(pod.DeletionTimestamp.IsZero()).To(BeFalse())\n\t\t}\n\t}, duration.String()).Should(Succeed())\n}\n\nfunc (env *Environment) ConsistentlyExpectActivePods(duration time.Duration, pods ...*corev1.Pod) {\n\tGinkgoHelper()\n\tBy(fmt.Sprintf(\"expecting %d pods to be live for %s\", len(pods), duration))\n\tConsistently(func(g Gomega) {\n\t\tfor _, pod := range pods {\n\t\t\tg.Expect(env.Client.Get(env, client.ObjectKeyFromObject(pod), pod)).To(Succeed())\n\t\t\tg.Expect(pod.DeletionTimestamp.IsZero()).To(BeTrue())\n\t\t}\n\t}, duration.String()).Should(Succeed())\n}\n\nfunc (env *Environment) ConsistentlyExpectHealthyPods(duration time.Duration, pods ...*corev1.Pod) {\n\tGinkgoHelper()\n\tBy(fmt.Sprintf(\"expecting %d pods to be ready for %s\", len(pods), duration))\n\tConsistently(func(g Gomega) {\n\t\tfor _, pod := range pods {\n\t\t\tg.Expect(env.Client.Get(env, client.ObjectKeyFromObject(pod), pod)).To(Succeed())\n\t\t\tg.Expect(pod.Status.Conditions).To(ContainElement(And(\n\t\t\t\tHaveField(\"Type\", Equal(corev1.PodReady)),\n\t\t\t\tHaveField(\"Status\", Equal(corev1.ConditionTrue)),\n\t\t\t)))\n\t\t}\n\t}, duration.String()).Should(Succeed())\n}\n\nfunc (env *Environment) ConsistentlyExpectPendingPods(duration time.Duration, pods ...*corev1.Pod) {\n\tGinkgoHelper()\n\tBy(fmt.Sprintf(\"expecting %d pods to be pending for %s\", len(pods), duration))\n\tConsistently(func(g Gomega) {\n\t\tfor _, pod := range pods {\n\t\t\tg.Expect(env.Client.Get(env, client.ObjectKeyFromObject(pod), pod)).To(Succeed())\n\t\t\tg.Expect(pod.Status.Phase).To(Equal(corev1.PodPending))\n\t\t}\n\t}, duration.String()).Should(Succeed())\n}\n\nfunc (env *Environment) EventuallyExpectKarpenterRestarted() {\n\tGinkgoHelper()\n\tBy(\"rolling out the new karpenter deployment\")\n\tenv.EventuallyExpectRollout(\"karpenter\", \"kube-system\")\n\tenv.ExpectKarpenterLeaseOwnerChanged()\n}\n\nfunc (env *Environment) ExpectKarpenterLeaseOwnerChanged() {\n\tGinkgoHelper()\n\n\tBy(\"waiting for a new karpenter pod to hold the lease\")\n\tpods := env.ExpectKarpenterPods()\n\tEventually(func(g Gomega) {\n\t\tname := env.ExpectActiveKarpenterPodName()\n\t\tg.Expect(lo.ContainsBy(pods, func(p *corev1.Pod) bool {\n\t\t\treturn p.Name == name\n\t\t})).To(BeTrue())\n\t}).Should(Succeed())\n}\n\nfunc (env *Environment) ExpectPodPortForwarded(ctx context.Context, pod *corev1.Pod, podPort, localPort int) {\n\tGinkgoHelper()\n\n\troundTripper, upgrader, err := spdy.RoundTripperFor(env.Config)\n\tExpect(err).ToNot(HaveOccurred())\n\n\tserverURL := env.KubeClient.CoreV1().RESTClient().Post().\n\t\tResource(\"pods\").\n\t\tNamespace(pod.Namespace).\n\t\tName(pod.Name).\n\t\tSubResource(\"portforward\").URL()\n\n\tdialer := spdy.NewDialer(upgrader, &http.Client{Transport: roundTripper}, http.MethodPost, serverURL)\n\n\tready := make(chan struct{})\n\tstop := make(chan struct{})\n\tgo func() {\n\t\tGinkgoRecover()\n\t\t<-ctx.Done()\n\t\tclose(stop)\n\t}()\n\tgo func() {\n\t\tfw, err := portforward.New(dialer, []string{fmt.Sprintf(\"%d:%d\", localPort, podPort)}, stop, ready, io.Discard, io.Discard)\n\t\tExpect(err).ToNot(HaveOccurred())\n\t\tExpect(fw.ForwardPorts())\n\t}()\n\t<-ready\n}\n\ntype PrometheusMetric struct {\n\tName   string\n\tLabels map[string]string\n\tValue  float64\n}\n\nfunc (env *Environment) ExpectPodMetrics() (res []PrometheusMetric) {\n\tGinkgoHelper()\n\n\tctx, cancel := context.WithCancel(env.Context)\n\tdefer cancel()\n\n\tlocalPort := rand.IntnRange(1024, 49151)\n\tenv.ExpectPodPortForwarded(ctx, env.ExpectActiveKarpenterPod(), 8080, localPort)\n\n\tresp, err := http.Get(fmt.Sprintf(\"http://127.0.0.1:%d/metrics\", localPort))\n\tExpect(err).ToNot(HaveOccurred())\n\treader := bufio.NewReader(resp.Body)\n\tdefer resp.Body.Close()\n\tfor {\n\t\tline, err := reader.ReadBytes('\\n')\n\t\tif err != nil {\n\t\t\t//nolint:errorlint\n\t\t\tif err == io.EOF {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\t\tmetric, err := parseMetricsLine(string(line))\n\t\tif err != nil {\n\t\t\tcontinue\n\t\t}\n\t\tres = append(res, metric)\n\t}\n\treturn res\n}\n\nfunc parseMetricsLine(line string) (metric PrometheusMetric, err error) {\n\tgroups := prometheusMetricRegex.FindStringSubmatch(line)\n\tif len(groups) != 4 {\n\t\treturn PrometheusMetric{}, fmt.Errorf(\"metrics line doesn't match known prometheus syntax\")\n\t}\n\n\telems := strings.Split(groups[2], \",\")\n\tl := lo.SliceToMap(elems, func(elem string) (string, string) {\n\t\ttemp := strings.Split(elem, \"=\")\n\t\tk, v := temp[0], temp[1]\n\t\treturn k, strings.Trim(v, \"\\\"\")\n\t})\n\tv, err := strconv.ParseFloat(groups[3], 64)\n\tif err != nil {\n\t\treturn PrometheusMetric{}, fmt.Errorf(\"converting metrics value to an integer, %w\", err)\n\t}\n\treturn PrometheusMetric{Name: groups[1], Labels: l, Value: v}, nil\n}\n\nfunc (env *Environment) EventuallyExpectRollout(name, namespace string) {\n\tGinkgoHelper()\n\tBy(\"restarting the deployment\")\n\tdeploy := &appsv1.Deployment{}\n\tExpect(env.Client.Get(env.Context, types.NamespacedName{Name: name, Namespace: namespace}, deploy)).To(Succeed())\n\n\tstored := deploy.DeepCopy()\n\trestartedAtAnnotation := map[string]string{\n\t\t\"kubectl.kubernetes.io/restartedAt\": time.Now().Format(time.RFC3339),\n\t}\n\tdeploy.Spec.Template.Annotations = lo.Assign(deploy.Spec.Template.Annotations, restartedAtAnnotation)\n\tExpect(env.Client.Patch(env.Context, deploy, client.StrategicMergeFrom(stored))).To(Succeed())\n\n\tBy(\"waiting for the newly generated deployment to rollout\")\n\tEventually(func(g Gomega) {\n\t\tpodList := &corev1.PodList{}\n\t\tg.Expect(env.Client.List(env.Context, podList, client.InNamespace(namespace))).To(Succeed())\n\t\tpods := lo.Filter(podList.Items, func(p corev1.Pod, _ int) bool {\n\t\t\treturn p.Annotations[\"kubectl.kubernetes.io/restartedAt\"] == restartedAtAnnotation[\"kubectl.kubernetes.io/restartedAt\"]\n\t\t})\n\t\tg.Expect(len(pods)).To(BeNumerically(\"==\", lo.FromPtr(deploy.Spec.Replicas)))\n\t\tfor _, pod := range pods {\n\t\t\tg.Expect(pod.Status.Conditions).To(ContainElement(And(\n\t\t\t\tHaveField(\"Type\", Equal(corev1.PodReady)),\n\t\t\t\tHaveField(\"Status\", Equal(corev1.ConditionTrue)),\n\t\t\t)))\n\t\t\tg.Expect(pod.Status.Phase).To(Equal(corev1.PodRunning))\n\t\t}\n\t}).Should(Succeed())\n}\n\nfunc (env *Environment) ExpectKarpenterPods() []*corev1.Pod {\n\tGinkgoHelper()\n\tpodList := &corev1.PodList{}\n\tExpect(env.Client.List(env.Context, podList, client.MatchingLabels{\n\t\t\"app.kubernetes.io/instance\": \"karpenter\",\n\t})).To(Succeed())\n\treturn lo.Map(podList.Items, func(p corev1.Pod, _ int) *corev1.Pod { return &p })\n}\n\nfunc (env *Environment) ExpectActiveKarpenterPodName() string {\n\tGinkgoHelper()\n\tlease := &coordinationv1.Lease{}\n\tExpect(env.Client.Get(env.Context, types.NamespacedName{Name: \"karpenter-leader-election\", Namespace: \"kube-system\"}, lease)).To(Succeed())\n\n\t// Holder identity for lease is always in the format \"<pod-name>_<pseudo-random-value>\n\tholderArr := strings.Split(lo.FromPtr(lease.Spec.HolderIdentity), \"_\")\n\tExpect(len(holderArr)).To(BeNumerically(\">\", 0))\n\n\treturn holderArr[0]\n}\n\nfunc (env *Environment) ExpectActiveKarpenterPod() *corev1.Pod {\n\tGinkgoHelper()\n\tpodName := env.ExpectActiveKarpenterPodName()\n\n\tpod := &corev1.Pod{}\n\tExpect(env.Client.Get(env.Context, types.NamespacedName{Name: podName, Namespace: \"kube-system\"}, pod)).To(Succeed())\n\treturn pod\n}\n\nfunc (env *Environment) EventuallyExpectPendingPodCount(selector labels.Selector, numPods int) {\n\tGinkgoHelper()\n\tEventually(func(g Gomega) {\n\t\tg.Expect(env.Monitor.PendingPodsCount(selector)).To(Equal(numPods))\n\t}).Should(Succeed())\n}\n\nfunc (env *Environment) EventuallyExpectBoundPodCount(selector labels.Selector, numPods int) []*corev1.Pod {\n\tGinkgoHelper()\n\tvar res []*corev1.Pod\n\tEventually(func(g Gomega) {\n\t\tres = []*corev1.Pod{}\n\t\tpodList := &corev1.PodList{}\n\t\tg.Expect(env.Client.List(env.Context, podList, client.MatchingLabelsSelector{Selector: selector})).To(Succeed())\n\t\tfor i := range podList.Items {\n\t\t\tif podList.Items[i].Spec.NodeName != \"\" {\n\t\t\t\tres = append(res, &podList.Items[i])\n\t\t\t}\n\t\t}\n\t\tg.Expect(res).To(HaveLen(numPods))\n\t}).Should(Succeed())\n\treturn res\n}\n\nfunc (env *Environment) EventuallyExpectHealthyPodCount(selector labels.Selector, numPods int) []*corev1.Pod {\n\tBy(fmt.Sprintf(\"waiting for %d pods matching selector %s to be ready\", numPods, selector.String()))\n\tGinkgoHelper()\n\treturn env.EventuallyExpectHealthyPodCountWithTimeout(-1, selector, numPods)\n}\n\nfunc (env *Environment) EventuallyExpectHealthyPodCountWithTimeout(timeout time.Duration, selector labels.Selector, numPods int) []*corev1.Pod {\n\tGinkgoHelper()\n\tvar pods []*corev1.Pod\n\tEventually(func(g Gomega) {\n\t\tpods = env.Monitor.RunningPods(selector)\n\t\tg.Expect(pods).To(HaveLen(numPods))\n\t}).WithTimeout(timeout).Should(Succeed())\n\treturn pods\n}\n\nfunc (env *Environment) ExpectPodsMatchingSelector(selector labels.Selector) []*corev1.Pod {\n\tGinkgoHelper()\n\n\tpodList := &corev1.PodList{}\n\tExpect(env.Client.List(env.Context, podList, client.MatchingLabelsSelector{Selector: selector})).To(Succeed())\n\treturn lo.ToSlicePtr(podList.Items)\n}\n\nfunc (env *Environment) EventuallyExpectUniqueNodeNames(selector labels.Selector, uniqueNames int) {\n\tGinkgoHelper()\n\n\tEventually(func(g Gomega) {\n\t\tpods := env.Monitor.RunningPods(selector)\n\t\tnodeNames := sets.NewString()\n\t\tfor _, pod := range pods {\n\t\t\tnodeNames.Insert(pod.Spec.NodeName)\n\t\t}\n\t\tg.Expect(len(nodeNames)).To(BeNumerically(\"==\", uniqueNames))\n\t}).Should(Succeed())\n}\n\nfunc (env *Environment) eventuallyExpectScaleDown() {\n\tGinkgoHelper()\n\tBy(fmt.Sprintf(\"Expecting the cluster to scale down to %d nodes\", env.StartingNodeCount))\n\tEventually(func(g Gomega) {\n\t\t// expect the current node count to be what it was when the test started\n\t\tg.Expect(env.Monitor.NodeCount()).To(Equal(env.StartingNodeCount))\n\t}).Should(Succeed(), fmt.Sprintf(\"expected scale down to %d nodes, had %d\", env.StartingNodeCount, env.Monitor.NodeCount()))\n}\n\nfunc (env *Environment) EventuallyExpectNotFound(objects ...client.Object) {\n\tGinkgoHelper()\n\n\tEventually(func(g Gomega) {\n\t\tfor _, object := range objects {\n\t\t\terr := env.Client.Get(env, client.ObjectKeyFromObject(object), object)\n\t\t\tg.Expect(errors.IsNotFound(err)).To(BeTrue())\n\t\t}\n\t}).Should(Succeed())\n}\n\nfunc (env *Environment) ExpectCreatedNodeCount(comparator string, count int) []*corev1.Node {\n\tGinkgoHelper()\n\tcreatedNodes := env.Monitor.CreatedNodes()\n\tExpect(len(createdNodes)).To(BeNumerically(comparator, count),\n\t\tfmt.Sprintf(\"expected %d created nodes, had %d (%v)\", count, len(createdNodes), NodeNames(createdNodes)))\n\treturn createdNodes\n}\n\nfunc (env *Environment) ExpectNodeCount(comparator string, count int) []*corev1.Node {\n\tGinkgoHelper()\n\n\tnodeList := &corev1.NodeList{}\n\tExpect(env.Client.List(env, nodeList, client.HasLabels{test.DiscoveryLabel})).To(Succeed())\n\tExpect(len(nodeList.Items)).To(BeNumerically(comparator, count))\n\treturn lo.ToSlicePtr(nodeList.Items)\n}\n\nfunc (env *Environment) ExpectNodeClaimCount(comparator string, count int) []*karpv1.NodeClaim {\n\tGinkgoHelper()\n\n\tnodeClaimList := &karpv1.NodeClaimList{}\n\tExpect(env.Client.List(env, nodeClaimList, client.HasLabels{test.DiscoveryLabel})).To(Succeed())\n\tExpect(len(nodeClaimList.Items)).To(BeNumerically(comparator, count))\n\treturn lo.ToSlicePtr(nodeClaimList.Items)\n}\n\nfunc NodeClaimNames(nodeClaims []*karpv1.NodeClaim) []string {\n\treturn lo.Map(nodeClaims, func(n *karpv1.NodeClaim, index int) string {\n\t\treturn n.Name\n\t})\n}\n\nfunc NodeNames(nodes []*corev1.Node) []string {\n\treturn lo.Map(nodes, func(n *corev1.Node, index int) string {\n\t\treturn n.Name\n\t})\n}\n\nfunc (env *Environment) ConsistentlyExpectNodeCount(comparator string, count int, duration time.Duration) []*corev1.Node {\n\tGinkgoHelper()\n\tBy(fmt.Sprintf(\"expecting nodes to be %s to %d for %s\", comparator, count, duration))\n\tnodeList := &corev1.NodeList{}\n\tConsistently(func(g Gomega) {\n\t\tg.Expect(env.Client.List(env, nodeList, client.HasLabels{test.DiscoveryLabel})).To(Succeed())\n\t\tg.Expect(len(nodeList.Items)).To(BeNumerically(comparator, count),\n\t\t\tfmt.Sprintf(\"expected %d nodes, had %d (%v) for %s\", count, len(nodeList.Items), NodeNames(lo.ToSlicePtr(nodeList.Items)), duration))\n\t}, duration.String()).Should(Succeed())\n\treturn lo.ToSlicePtr(nodeList.Items)\n}\n\n// ConsistentlyExpectNoDisruptions asserts that the number of tainted nodes remains the same.\n// And that the number of nodeclaims remains the same.\nfunc (env *Environment) ConsistentlyExpectNoDisruptions(nodeCount int, duration time.Duration) {\n\tGinkgoHelper()\n\tConsistently(func(g Gomega) {\n\t\tnodeClaimList := &karpv1.NodeClaimList{}\n\t\tg.Expect(env.Client.List(env, nodeClaimList, client.HasLabels{test.DiscoveryLabel})).To(Succeed())\n\t\tg.Expect(nodeClaimList.Items).To(HaveLen(nodeCount))\n\t\tnodeList := &corev1.NodeList{}\n\t\tg.Expect(env.Client.List(env, nodeList, client.HasLabels{test.DiscoveryLabel})).To(Succeed())\n\t\tg.Expect(nodeList.Items).To(HaveLen(nodeCount))\n\t\tnodeList.Items = lo.Filter(nodeList.Items, func(n corev1.Node, _ int) bool {\n\t\t\t_, ok := lo.Find(n.Spec.Taints, func(t corev1.Taint) bool {\n\t\t\t\treturn t.MatchTaint(&karpv1.DisruptedNoScheduleTaint)\n\t\t\t})\n\t\t\treturn ok\n\t\t})\n\t\tg.Expect(nodeList.Items).To(HaveLen(0))\n\t}, duration).Should(Succeed())\n}\n\n// ConsistentlyExpectDisruptionsUntilNoneLeft consistently ensures a max on number of concurrently disrupting and non-terminating nodes.\n// This actually uses an Eventually() under the hood so that when we reach 0 tainted nodes we exit early.\n// We use the StopTrying() so that we can exit the Eventually() if we've breached an assertion on total concurrency of disruptions.\n// For example: if we have 5 nodes, with a budget of 2 nodes, we ensure that `disruptingNodes <= maxNodesDisrupting=2`\n// We use nodesAtStart+maxNodesDisrupting to assert that we're not creating too many instances in replacement.\nfunc (env *Environment) ConsistentlyExpectDisruptionsUntilNoneLeft(nodesAtStart, maxNodesDisrupting int, timeout time.Duration) {\n\tGinkgoHelper()\n\tnodes := []corev1.Node{}\n\t// We use an eventually to exit when we detect the number of tainted/disrupted nodes matches our target.\n\tEventually(func(g Gomega) {\n\t\t// Grab Nodes and NodeClaims\n\t\tnodeClaimList := &karpv1.NodeClaimList{}\n\t\tnodeList := &corev1.NodeList{}\n\t\tg.Expect(env.Client.List(env, nodeClaimList, client.HasLabels{test.DiscoveryLabel})).To(Succeed())\n\t\tg.Expect(env.Client.List(env, nodeList, client.HasLabels{test.DiscoveryLabel})).To(Succeed())\n\n\t\t// Don't include NodeClaims with the `Terminating` status condition, as they're not included in budgets\n\t\tremovedProviderIDs := sets.Set[string]{}\n\t\tnodeClaimList.Items = lo.Filter(nodeClaimList.Items, func(nc karpv1.NodeClaim, _ int) bool {\n\t\t\tif !nc.StatusConditions().IsTrue(karpv1.ConditionTypeInstanceTerminating) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\tremovedProviderIDs.Insert(nc.Status.ProviderID)\n\t\t\treturn false\n\t\t})\n\t\tif len(nodeClaimList.Items) > nodesAtStart+maxNodesDisrupting {\n\t\t\tStopTrying(fmt.Sprintf(\"Too many nodeclaims created. Expected no more than %d, got %d\", nodesAtStart+maxNodesDisrupting, len(nodeClaimList.Items))).Now()\n\t\t}\n\n\t\t// Don't include Nodes whose NodeClaims have been ignored\n\t\tnodeList.Items = lo.Filter(nodeList.Items, func(n corev1.Node, _ int) bool {\n\t\t\treturn !removedProviderIDs.Has(n.Spec.ProviderID)\n\t\t})\n\t\tif len(nodeList.Items) > nodesAtStart+maxNodesDisrupting {\n\t\t\tStopTrying(fmt.Sprintf(\"Too many nodes created. Expected no more than %d, got %d\", nodesAtStart+maxNodesDisrupting, len(nodeList.Items))).Now()\n\t\t}\n\n\t\t// Filter further by the number of tainted nodes to get the number of nodes that are disrupting\n\t\tnodes = lo.Filter(nodeList.Items, func(n corev1.Node, _ int) bool {\n\t\t\t_, ok := lo.Find(n.Spec.Taints, func(t corev1.Taint) bool {\n\t\t\t\treturn t.MatchTaint(&karpv1.DisruptedNoScheduleTaint)\n\t\t\t})\n\t\t\treturn ok\n\t\t})\n\t\tif len(nodes) > maxNodesDisrupting {\n\t\t\tStopTrying(fmt.Sprintf(\"Too many disruptions detected. Expected no more than %d, got %d\", maxNodesDisrupting, len(nodeList.Items))).Now()\n\t\t}\n\n\t\tg.Expect(nodes).To(HaveLen(0))\n\t}).WithTimeout(timeout).WithPolling(5 * time.Second).Should(Succeed())\n}\n\nfunc (env *Environment) EventuallyExpectTaintedNodeCount(comparator string, count int) []*corev1.Node {\n\tGinkgoHelper()\n\tBy(fmt.Sprintf(\"waiting for tainted nodes to be %s to %d\", comparator, count))\n\tnodeList := &corev1.NodeList{}\n\tEventually(func(g Gomega) {\n\t\tg.Expect(env.Client.List(env, nodeList, client.MatchingFields{\"spec.taints[*].karpenter.sh/disrupted\": \"true\"})).To(Succeed())\n\t\tg.Expect(len(nodeList.Items)).To(BeNumerically(comparator, count),\n\t\t\tfmt.Sprintf(\"expected %d tainted nodes, had %d (%v)\", count, len(nodeList.Items), NodeNames(lo.ToSlicePtr(nodeList.Items))))\n\t}).Should(Succeed())\n\treturn lo.ToSlicePtr(nodeList.Items)\n}\n\nfunc (env *Environment) EventuallyExpectNodesUntaintedWithTimeout(timeout time.Duration, nodes ...*corev1.Node) {\n\tGinkgoHelper()\n\tBy(fmt.Sprintf(\"waiting for %d nodes to be untainted\", len(nodes)))\n\tnodeList := &corev1.NodeList{}\n\tEventually(func(g Gomega) {\n\t\tg.Expect(env.Client.List(env, nodeList, client.MatchingFields{\"spec.taints[*].karpenter.sh/disrupted\": \"true\"})).To(Succeed())\n\t\ttaintedNodeNames := lo.Map(nodeList.Items, func(n corev1.Node, _ int) string { return n.Name })\n\t\tg.Expect(taintedNodeNames).ToNot(ContainElements(lo.Map(nodes, func(n *corev1.Node, _ int) any { return n.Name })...))\n\t}).WithTimeout(timeout).Should(Succeed())\n}\n\nfunc (env *Environment) EventuallyExpectLaunchedNodeClaimCount(comparator string, count int) []*karpv1.NodeClaim {\n\tGinkgoHelper()\n\tBy(fmt.Sprintf(\"waiting for nodes to be %s to %d\", comparator, count))\n\tnodeClaimList := &karpv1.NodeClaimList{}\n\tEventually(func(g Gomega) {\n\t\tg.Expect(env.Client.List(env, nodeClaimList, client.HasLabels{test.DiscoveryLabel})).To(Succeed())\n\t\tg.Expect(lo.CountBy(nodeClaimList.Items, func(nc karpv1.NodeClaim) bool { return nc.StatusConditions().IsTrue(karpv1.ConditionTypeLaunched) })).To(BeNumerically(comparator, count),\n\t\t\tfmt.Sprintf(\"expected %d nodeclaims, had %d (%v)\", count, len(nodeClaimList.Items), NodeClaimNames(lo.ToSlicePtr(nodeClaimList.Items))))\n\t}).Should(Succeed())\n\treturn lo.ToSlicePtr(nodeClaimList.Items)\n}\n\nfunc (env *Environment) EventuallyExpectNodeCount(comparator string, count int) []*corev1.Node {\n\tGinkgoHelper()\n\tBy(fmt.Sprintf(\"waiting for nodes to be %s to %d\", comparator, count))\n\tnodeList := &corev1.NodeList{}\n\tEventually(func(g Gomega) {\n\t\tg.Expect(env.Client.List(env, nodeList, client.HasLabels{test.DiscoveryLabel})).To(Succeed())\n\t\tg.Expect(len(nodeList.Items)).To(BeNumerically(comparator, count),\n\t\t\tfmt.Sprintf(\"expected %d nodes, had %d (%v)\", count, len(nodeList.Items), NodeNames(lo.ToSlicePtr(nodeList.Items))))\n\t}).Should(Succeed())\n\treturn lo.ToSlicePtr(nodeList.Items)\n}\n\nfunc (env *Environment) EventuallyExpectNodeCountWithSelector(comparator string, count int, selector labels.Selector) []*corev1.Node {\n\tGinkgoHelper()\n\tBy(fmt.Sprintf(\"waiting for nodes with selector %v to be %s to %d\", selector, comparator, count))\n\tnodeList := &corev1.NodeList{}\n\tEventually(func(g Gomega) {\n\t\tg.Expect(env.Client.List(env, nodeList, client.HasLabels{test.DiscoveryLabel}, client.MatchingLabelsSelector{Selector: selector})).To(Succeed())\n\t\tg.Expect(len(nodeList.Items)).To(BeNumerically(comparator, count),\n\t\t\tfmt.Sprintf(\"expected %d nodes, had %d (%v)\", count, len(nodeList.Items), NodeNames(lo.ToSlicePtr(nodeList.Items))))\n\t}).Should(Succeed())\n\treturn lo.ToSlicePtr(nodeList.Items)\n}\n\nfunc (env *Environment) EventuallyExpectCreatedNodeCount(comparator string, count int) []*corev1.Node {\n\tGinkgoHelper()\n\tBy(fmt.Sprintf(\"waiting for created nodes to be %s to %d\", comparator, count))\n\tvar createdNodes []*corev1.Node\n\tEventually(func(g Gomega) {\n\t\tcreatedNodes = env.Monitor.CreatedNodes()\n\t\tg.Expect(len(createdNodes)).To(BeNumerically(comparator, count),\n\t\t\tfmt.Sprintf(\"expected %d created nodes, had %d (%v)\", count, len(createdNodes), NodeNames(createdNodes)))\n\t}).Should(Succeed())\n\treturn createdNodes\n}\n\nfunc (env *Environment) EventuallyExpectDeletedNodeCount(comparator string, count int) []*corev1.Node {\n\tGinkgoHelper()\n\tBy(fmt.Sprintf(\"waiting for deleted nodes to be %s to %d\", comparator, count))\n\tvar deletedNodes []*corev1.Node\n\tEventually(func(g Gomega) {\n\t\tdeletedNodes = env.Monitor.DeletedNodes()\n\t\tg.Expect(len(deletedNodes)).To(BeNumerically(comparator, count),\n\t\t\tfmt.Sprintf(\"expected %d deleted nodes, had %d (%v)\", count, len(deletedNodes), NodeNames(deletedNodes)))\n\t}).Should(Succeed())\n\treturn deletedNodes\n}\n\nfunc (env *Environment) EventuallyExpectDeletedNodeCountWithSelector(comparator string, count int, selector labels.Selector) []*corev1.Node {\n\tGinkgoHelper()\n\tBy(fmt.Sprintf(\"waiting for deleted nodes with selector %v to be %s to %d\", selector, comparator, count))\n\tvar deletedNodes []*corev1.Node\n\tEventually(func(g Gomega) {\n\t\tdeletedNodes = env.Monitor.DeletedNodes()\n\t\tdeletedNodes = lo.Filter(deletedNodes, func(n *corev1.Node, _ int) bool {\n\t\t\treturn selector.Matches(labels.Set(n.Labels))\n\t\t})\n\t\tg.Expect(len(deletedNodes)).To(BeNumerically(comparator, count),\n\t\t\tfmt.Sprintf(\"expected %d deleted nodes, had %d (%v)\", count, len(deletedNodes), NodeNames(deletedNodes)))\n\t}).Should(Succeed())\n\treturn deletedNodes\n}\n\nfunc (env *Environment) EventuallyExpectInitializedNodeCount(comparator string, count int) []*corev1.Node {\n\tGinkgoHelper()\n\tBy(fmt.Sprintf(\"waiting for initialized nodes to be %s to %d\", comparator, count))\n\tvar nodes []*corev1.Node\n\tEventually(func(g Gomega) {\n\t\tnodes = env.Monitor.CreatedNodes()\n\t\tnodes = lo.Filter(nodes, func(n *corev1.Node, _ int) bool {\n\t\t\treturn n.Labels[karpv1.NodeInitializedLabelKey] == \"true\"\n\t\t})\n\t\tg.Expect(len(nodes)).To(BeNumerically(comparator, count))\n\t}).Should(Succeed())\n\treturn nodes\n}\n\nfunc (env *Environment) EventuallyExpectCreatedNodeClaimCount(comparator string, count int) []*karpv1.NodeClaim {\n\tGinkgoHelper()\n\tBy(fmt.Sprintf(\"waiting for created nodeclaims to be %s to %d\", comparator, count))\n\tnodeClaimList := &karpv1.NodeClaimList{}\n\tEventually(func(g Gomega) {\n\t\tg.Expect(env.Client.List(env.Context, nodeClaimList)).To(Succeed())\n\t\tg.Expect(len(nodeClaimList.Items)).To(BeNumerically(comparator, count))\n\t}).Should(Succeed())\n\treturn lo.Map(nodeClaimList.Items, func(nc karpv1.NodeClaim, _ int) *karpv1.NodeClaim {\n\t\treturn &nc\n\t})\n}\n\nfunc (env *Environment) EventuallyExpectNodeClaimsReady(nodeClaims ...*karpv1.NodeClaim) {\n\tGinkgoHelper()\n\tEventually(func(g Gomega) {\n\t\tfor _, nc := range nodeClaims {\n\t\t\ttemp := &karpv1.NodeClaim{}\n\t\t\tg.Expect(env.Client.Get(env.Context, client.ObjectKeyFromObject(nc), temp)).Should(Succeed())\n\t\t\tg.Expect(temp.StatusConditions().Root().IsTrue()).To(BeTrue())\n\t\t}\n\t}).Should(Succeed())\n}\n\nfunc (env *Environment) EventuallyExpectDrifted(nodeClaims ...*karpv1.NodeClaim) {\n\tGinkgoHelper()\n\tEventually(func(g Gomega) {\n\t\tfor _, nc := range nodeClaims {\n\t\t\tg.Expect(env.Client.Get(env, client.ObjectKeyFromObject(nc), nc)).To(Succeed())\n\t\t\tg.Expect(nc.StatusConditions().Get(karpv1.ConditionTypeDrifted).IsTrue()).To(BeTrue())\n\t\t}\n\t}).Should(Succeed())\n}\n\nfunc (env *Environment) ConsistentlyExpectNodeClaimsNotDrifted(duration time.Duration, nodeClaims ...*karpv1.NodeClaim) {\n\tGinkgoHelper()\n\tnodeClaimNames := lo.Map(nodeClaims, func(nc *karpv1.NodeClaim, _ int) string { return nc.Name })\n\tBy(fmt.Sprintf(\"consistently expect nodeclaims %s not to be drifted for %s\", nodeClaimNames, duration))\n\tConsistently(func(g Gomega) {\n\t\tfor _, nc := range nodeClaims {\n\t\t\tg.Expect(env.Client.Get(env, client.ObjectKeyFromObject(nc), nc)).To(Succeed())\n\t\t\tg.Expect(nc.StatusConditions().Get(karpv1.ConditionTypeDrifted)).To(BeNil())\n\t\t}\n\t}, duration).Should(Succeed())\n}\n\nfunc (env *Environment) EventuallyExpectConsolidatable(nodeClaims ...*karpv1.NodeClaim) {\n\tGinkgoHelper()\n\tEventually(func(g Gomega) {\n\t\tfor _, nc := range nodeClaims {\n\t\t\tg.Expect(env.Client.Get(env, client.ObjectKeyFromObject(nc), nc)).To(Succeed())\n\t\t\tg.Expect(nc.StatusConditions().Get(karpv1.ConditionTypeConsolidatable).IsTrue()).To(BeTrue())\n\t\t}\n\t}).Should(Succeed())\n}\n\nfunc (env *Environment) GetNode(nodeName string) corev1.Node {\n\tGinkgoHelper()\n\tvar node corev1.Node\n\tExpect(env.Client.Get(env.Context, types.NamespacedName{Name: nodeName}, &node)).To(Succeed())\n\treturn node\n}\n\nfunc (env *Environment) ExpectNoCrashes() {\n\tGinkgoHelper()\n\tfor k, v := range env.Monitor.RestartCount(\"kube-system\") {\n\t\tif strings.Contains(k, \"karpenter\") && v > 0 {\n\t\t\tFail(\"expected karpenter containers to not crash\")\n\t\t}\n\t}\n}\n\nvar (\n\tlastLogged = metav1.Now()\n)\n\nfunc (env *Environment) printControllerLogs(options *corev1.PodLogOptions) {\n\tfmt.Println(\"------- START CONTROLLER LOGS -------\")\n\tdefer fmt.Println(\"------- END CONTROLLER LOGS -------\")\n\n\tif options.SinceTime == nil {\n\t\toptions.SinceTime = lastLogged.DeepCopy()\n\t\tlastLogged = metav1.Now()\n\t}\n\tpods := env.ExpectKarpenterPods()\n\tfor _, pod := range pods {\n\t\ttemp := options.DeepCopy() // local version of the log options\n\n\t\tfmt.Printf(\"------- pod/%s -------\\n\", pod.Name)\n\t\tif len(pod.Status.ContainerStatuses) > 0 && pod.Status.ContainerStatuses[0].RestartCount > 0 {\n\t\t\tfmt.Printf(\"[PREVIOUS CONTAINER LOGS]\\n\")\n\t\t\ttemp.Previous = true\n\t\t}\n\t\tstream, err := env.KubeClient.CoreV1().Pods(\"kube-system\").GetLogs(pod.Name, temp).Stream(env.Context)\n\t\tif err != nil {\n\t\t\tlog.FromContext(env.Context).Error(err, \"failed fetching controller logs\")\n\t\t\treturn\n\t\t}\n\t\traw := &bytes.Buffer{}\n\t\t_, err = io.Copy(raw, stream)\n\t\tExpect(err).ToNot(HaveOccurred())\n\t\tlog.FromContext(env.Context).Info(raw.String())\n\t}\n}\n\nfunc (env *Environment) EventuallyExpectMinUtilization(resource corev1.ResourceName, comparator string, value float64) {\n\tGinkgoHelper()\n\tEventually(func(g Gomega) {\n\t\tg.Expect(env.Monitor.MinUtilization(resource)).To(BeNumerically(comparator, value))\n\t}).Should(Succeed())\n}\n\nfunc (env *Environment) EventuallyExpectAvgUtilization(resource corev1.ResourceName, comparator string, value float64) {\n\tGinkgoHelper()\n\tEventually(func(g Gomega) {\n\t\tg.Expect(env.Monitor.AvgUtilization(resource)).To(BeNumerically(comparator, value))\n\t}, 12*time.Minute).Should(Succeed())\n}\n\nfunc (env *Environment) ExpectDaemonSetEnvironmentVariableUpdated(obj client.ObjectKey, name, value string, containers ...string) {\n\tGinkgoHelper()\n\tds := &appsv1.DaemonSet{}\n\tExpect(env.Client.Get(env.Context, obj, ds)).To(Succeed())\n\tif len(containers) == 0 {\n\t\tExpect(len(ds.Spec.Template.Spec.Containers)).To(BeNumerically(\"==\", 1))\n\t\tcontainers = append(containers, ds.Spec.Template.Spec.Containers[0].Name)\n\t}\n\tpatch := client.StrategicMergeFrom(ds.DeepCopy())\n\tcontainerNames := sets.New(containers...)\n\tfor ci := range ds.Spec.Template.Spec.Containers {\n\t\tc := &ds.Spec.Template.Spec.Containers[ci]\n\t\tif !containerNames.Has(c.Name) {\n\t\t\tcontinue\n\t\t}\n\t\t// If the env var already exists, update its value. Otherwise, create a new var.\n\t\tif _, i, ok := lo.FindIndexOf(c.Env, func(e corev1.EnvVar) bool {\n\t\t\treturn e.Name == name\n\t\t}); ok {\n\t\t\tc.Env[i].Value = value\n\t\t} else {\n\t\t\tc.Env = append(c.Env, corev1.EnvVar{Name: name, Value: value})\n\t\t}\n\t}\n\tExpect(env.Client.Patch(env.Context, ds, patch)).To(Succeed())\n}\n\n// ForcePodsToSpread ensures that currently scheduled pods get spread evenly across all passed nodes by deleting pods off of existing\n// nodes and waiting them to reschedule. This is useful for scenarios where you want to force the nodes be underutilized\n// but you want to keep a consistent count of nodes rather than leaving around empty ones.\nfunc (env *Environment) ForcePodsToSpread(nodes ...*corev1.Node) {\n\tGinkgoHelper()\n\n\t// Get the total count of pods across\n\tpodCount := 0\n\tfor _, n := range nodes {\n\t\tpodCount += len(env.ExpectActivePodsForNode(n.Name))\n\t}\n\tmaxPodsPerNode := int(math.Ceil(float64(podCount) / float64(len(nodes))))\n\n\tBy(fmt.Sprintf(\"forcing %d pods to spread across %d nodes\", podCount, len(nodes)))\n\tstart := time.Now()\n\tfor {\n\t\tvar nodePods []*corev1.Pod\n\t\tnode, found := lo.Find(nodes, func(n *corev1.Node) bool {\n\t\t\tnodePods = env.ExpectActivePodsForNode(n.Name)\n\t\t\treturn len(nodePods) > maxPodsPerNode\n\t\t})\n\t\tif !found {\n\t\t\tbreak\n\t\t}\n\t\t// Set the nodes to unschedulable so that the pods won't reschedule.\n\t\tExpect(env.Client.Get(env.Context, client.ObjectKeyFromObject(node), node)).To(Succeed())\n\t\tstored := node.DeepCopy()\n\t\tnode.Spec.Unschedulable = true\n\t\tExpect(env.Client.Patch(env.Context, node, client.StrategicMergeFrom(stored))).To(Succeed())\n\t\tfor _, pod := range nodePods[maxPodsPerNode:] {\n\t\t\tenv.ExpectDeleted(pod)\n\t\t}\n\t\tEventually(func(g Gomega) {\n\t\t\tg.Expect(len(env.ExpectActivePodsForNode(node.Name))).To(Or(Equal(maxPodsPerNode), Equal(maxPodsPerNode-1)))\n\t\t}).WithTimeout(5 * time.Second).Should(Succeed())\n\n\t\t// TODO: Consider moving this time check to an Eventually poll. This gets a little tricker with helper functions\n\t\t// since you need to make sure that your Expectation helper functions are scoped to to your \"g Gomega\" scope\n\t\t// so that you don't fail the first time you get a failure on your expectation\n\t\tif time.Since(start) > time.Minute*15 {\n\t\t\tFail(\"forcing pods to spread failed due to a timeout\")\n\t\t}\n\t}\n\tfor _, n := range nodes {\n\t\tstored := n.DeepCopy()\n\t\tn.Spec.Unschedulable = false\n\t\tExpect(env.Client.Patch(env.Context, n, client.StrategicMergeFrom(stored))).To(Succeed())\n\t}\n}\n\nfunc (env *Environment) ExpectActivePodsForNode(nodeName string) []*corev1.Pod {\n\tGinkgoHelper()\n\tpodList := &corev1.PodList{}\n\tExpect(env.Client.List(env, podList, client.MatchingFields{\"spec.nodeName\": nodeName}, client.HasLabels{test.DiscoveryLabel})).To(Succeed())\n\n\treturn lo.Filter(lo.ToSlicePtr(podList.Items), func(p *corev1.Pod, _ int) bool {\n\t\treturn p.DeletionTimestamp.IsZero()\n\t})\n}\n\nfunc (env *Environment) ExpectCABundle() string {\n\t// Discover CA Bundle from the REST client. We could alternatively\n\t// have used the simpler client-go InClusterConfig() method.\n\t// However, that only works when Karpenter is running as a Pod\n\t// within the same cluster it's managing.\n\tGinkgoHelper()\n\ttransportConfig, err := env.Config.TransportConfig()\n\tExpect(err).ToNot(HaveOccurred())\n\t_, err = transport.TLSConfigFor(transportConfig) // fills in CAData!\n\tExpect(err).ToNot(HaveOccurred())\n\tlog.FromContext(env.Context).WithValues(\"length\", len(transportConfig.TLS.CAData)).V(1).Info(\"discovered caBundle\")\n\treturn base64.StdEncoding.EncodeToString(transportConfig.TLS.CAData)\n}\n\nfunc (env *Environment) GetDaemonSetCount(np *karpv1.NodePool) int {\n\tGinkgoHelper()\n\n\t// Performs the same logic as the scheduler to get the number of daemonset\n\t// pods that we estimate we will need to schedule as overhead to each node\n\tdaemonSetList := &appsv1.DaemonSetList{}\n\tExpect(env.Client.List(env.Context, daemonSetList)).To(Succeed())\n\n\treturn lo.CountBy(daemonSetList.Items, func(d appsv1.DaemonSet) bool {\n\t\tp := &corev1.Pod{Spec: d.Spec.Template.Spec}\n\t\tnodeClaimTemplate := pscheduling.NewNodeClaimTemplate(np)\n\t\tif err := scheduling.Taints(nodeClaimTemplate.Spec.Taints).ToleratesPod(p); err != nil {\n\t\t\treturn false\n\t\t}\n\t\tif err := nodeClaimTemplate.Requirements.Compatible(scheduling.NewPodRequirements(p), scheduling.AllowUndefinedWellKnownLabels); err != nil {\n\t\t\treturn false\n\t\t}\n\t\treturn true\n\t})\n}\n\nfunc (env *Environment) GetDaemonSetOverhead(np *karpv1.NodePool) corev1.ResourceList {\n\tGinkgoHelper()\n\n\t// Performs the same logic as the scheduler to get the number of daemonset\n\t// pods that we estimate we will need to schedule as overhead to each node\n\tdaemonSetList := &appsv1.DaemonSetList{}\n\tExpect(env.Client.List(env.Context, daemonSetList)).To(Succeed())\n\n\treturn coreresources.RequestsForPods(lo.FilterMap(daemonSetList.Items, func(ds appsv1.DaemonSet, _ int) (*corev1.Pod, bool) {\n\t\tp := daemonset.PodForDaemonSet(&ds)\n\t\tnodeClaimTemplate := pscheduling.NewNodeClaimTemplate(np)\n\t\tif err := scheduling.Taints(nodeClaimTemplate.Spec.Taints).ToleratesPod(p); err != nil {\n\t\t\treturn nil, false\n\t\t}\n\t\tif err := nodeClaimTemplate.Requirements.Compatible(scheduling.NewPodRequirements(p), scheduling.AllowUndefinedWellKnownLabels); err != nil {\n\t\t\treturn nil, false\n\t\t}\n\t\treturn p, true\n\t})...)\n}\n"
  },
  {
    "path": "test/pkg/environment/common/monitor.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage common\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"math\"\n\t\"sync\"\n\n\tcorev1 \"k8s.io/api/core/v1\"\n\t\"k8s.io/apimachinery/pkg/labels\"\n\t\"k8s.io/apimachinery/pkg/util/sets\"\n\t\"sigs.k8s.io/controller-runtime/pkg/client\"\n\t\"sigs.k8s.io/controller-runtime/pkg/log\"\n\n\t\"github.com/samber/lo\"\n\n\tkarpv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n\t\"sigs.k8s.io/karpenter/pkg/utils/resources\"\n)\n\n// Monitor is used to monitor the cluster state during a running test\ntype Monitor struct {\n\tctx        context.Context\n\tkubeClient client.Client\n\n\tmu sync.RWMutex\n\n\tnodesAtReset map[string]*corev1.Node\n}\n\ntype state struct {\n\tpods         corev1.PodList\n\tnodes        map[string]*corev1.Node        // node name -> node\n\tnodePods     map[string][]*corev1.Pod       // node name -> pods bound to the node\n\tnodeRequests map[string]corev1.ResourceList // node name -> sum of pod resource requests\n}\n\nfunc NewMonitor(ctx context.Context, kubeClient client.Client) *Monitor {\n\tm := &Monitor{\n\t\tctx:          ctx,\n\t\tkubeClient:   kubeClient,\n\t\tnodesAtReset: map[string]*corev1.Node{},\n\t}\n\tm.Reset()\n\treturn m\n}\n\n// Reset resets the cluster monitor prior to running a test.\nfunc (m *Monitor) Reset() {\n\tm.mu.Lock()\n\tdefer m.mu.Unlock()\n\n\tst := m.poll()\n\tm.nodesAtReset = deepCopyMap(st.nodes)\n}\n\n// RestartCount returns the containers and number of restarts for that container for all containers in the pods in the\n// given namespace\nfunc (m *Monitor) RestartCount(namespace string) map[string]int {\n\tst := m.poll()\n\n\tm.mu.RLock()\n\tdefer m.mu.RUnlock()\n\trestarts := map[string]int{}\n\tfor _, pod := range st.pods.Items {\n\t\tif pod.Namespace != namespace {\n\t\t\tcontinue\n\t\t}\n\t\tfor _, cs := range pod.Status.ContainerStatuses {\n\t\t\tname := fmt.Sprintf(\"%s/%s\", pod.Name, cs.Name)\n\t\t\trestarts[name] = int(cs.RestartCount)\n\t\t}\n\t}\n\treturn restarts\n}\n\n// NodeCount returns the current number of nodes\nfunc (m *Monitor) NodeCount() int {\n\treturn len(m.poll().nodes)\n}\n\n// NodeCountAtReset returns the number of nodes that were running when the monitor was last reset, typically at the\n// beginning of a test\nfunc (m *Monitor) NodeCountAtReset() int {\n\treturn len(m.NodesAtReset())\n}\n\n// CreatedNodeCount returns the number of nodes created since the last reset\nfunc (m *Monitor) CreatedNodeCount() int {\n\treturn m.NodeCount() - m.NodeCountAtReset()\n}\n\n// NodesAtReset returns a slice of nodes that the monitor saw at the last reset\nfunc (m *Monitor) NodesAtReset() []*corev1.Node {\n\tm.mu.RLock()\n\tdefer m.mu.RUnlock()\n\treturn deepCopySlice(lo.Values(m.nodesAtReset))\n}\n\n// Nodes returns all the nodes on the cluster\nfunc (m *Monitor) Nodes() []*corev1.Node {\n\tst := m.poll()\n\treturn lo.Values(st.nodes)\n}\n\n// CreatedNodes returns the nodes that have been created since the last reset (essentially Nodes - NodesAtReset)\nfunc (m *Monitor) CreatedNodes() []*corev1.Node {\n\tresetNodeNames := sets.NewString(lo.Map(m.NodesAtReset(), func(n *corev1.Node, _ int) string { return n.Name })...)\n\treturn lo.Filter(m.Nodes(), func(n *corev1.Node, _ int) bool { return !resetNodeNames.Has(n.Name) })\n}\n\n// DeletedNodes returns the nodes that have been deleted since the last reset (essentially NodesAtReset - Nodes)\nfunc (m *Monitor) DeletedNodes() []*corev1.Node {\n\tcurrentNodeNames := sets.NewString(lo.Map(m.Nodes(), func(n *corev1.Node, _ int) string { return n.Name })...)\n\treturn lo.Filter(m.NodesAtReset(), func(n *corev1.Node, _ int) bool { return !currentNodeNames.Has(n.Name) })\n}\n\n// PendingPods returns the number of pending pods matching the given selector\nfunc (m *Monitor) PendingPods(selector labels.Selector) []*corev1.Pod {\n\tvar pods []*corev1.Pod\n\tfor _, pod := range m.poll().pods.Items {\n\t\tif pod.Status.Phase != corev1.PodPending {\n\t\t\tcontinue\n\t\t}\n\t\tif selector.Matches(labels.Set(pod.Labels)) {\n\t\t\tpods = append(pods, &pod)\n\t\t}\n\t}\n\treturn pods\n}\n\nfunc (m *Monitor) PendingPodsCount(selector labels.Selector) int {\n\treturn len(m.PendingPods(selector))\n}\n\n// RunningPods returns the number of running pods matching the given selector\nfunc (m *Monitor) RunningPods(selector labels.Selector) []*corev1.Pod {\n\tvar pods []*corev1.Pod\n\tfor _, pod := range m.poll().pods.Items {\n\t\tif pod.Status.Phase != corev1.PodRunning {\n\t\t\tcontinue\n\t\t}\n\t\tif selector.Matches(labels.Set(pod.Labels)) {\n\t\t\tpods = append(pods, &pod)\n\t\t}\n\t}\n\treturn pods\n}\n\nfunc (m *Monitor) RunningPodsCount(selector labels.Selector) int {\n\treturn len(m.RunningPods(selector))\n}\n\nfunc (m *Monitor) poll() state {\n\tvar nodes corev1.NodeList\n\tif err := m.kubeClient.List(m.ctx, &nodes); err != nil {\n\t\tlog.FromContext(m.ctx).Error(err, \"failed listing nodes\")\n\t}\n\tvar pods corev1.PodList\n\tif err := m.kubeClient.List(m.ctx, &pods); err != nil {\n\t\tlog.FromContext(m.ctx).Error(err, \"failing listing pods\")\n\t}\n\tst := state{\n\t\tnodes:        map[string]*corev1.Node{},\n\t\tpods:         pods,\n\t\tnodePods:     map[string][]*corev1.Pod{},\n\t\tnodeRequests: map[string]corev1.ResourceList{},\n\t}\n\tfor i := range nodes.Items {\n\t\tst.nodes[nodes.Items[i].Name] = &nodes.Items[i]\n\t}\n\t// collect pods per node\n\tfor i := range pods.Items {\n\t\tpod := &pods.Items[i]\n\t\tif pod.Spec.NodeName == \"\" {\n\t\t\tcontinue\n\t\t}\n\t\tst.nodePods[pod.Spec.NodeName] = append(st.nodePods[pod.Spec.NodeName], pod)\n\t}\n\n\tfor _, n := range nodes.Items {\n\t\tst.nodeRequests[n.Name] = resources.RequestsForPods(st.nodePods[n.Name]...)\n\t}\n\treturn st\n}\n\nfunc (m *Monitor) AvgUtilization(resource corev1.ResourceName) float64 {\n\tutilization := m.nodeUtilization(resource)\n\tsum := 0.0\n\tfor _, v := range utilization {\n\t\tsum += v\n\t}\n\treturn sum / float64(len(utilization))\n}\n\nfunc (m *Monitor) MinUtilization(resource corev1.ResourceName) float64 {\n\tmin := math.MaxFloat64\n\tfor _, v := range m.nodeUtilization(resource) {\n\t\tmin = math.Min(v, min)\n\t}\n\treturn min\n}\n\nfunc (m *Monitor) nodeUtilization(resource corev1.ResourceName) []float64 {\n\tst := m.poll()\n\tvar utilization []float64\n\tfor nodeName, requests := range st.nodeRequests {\n\t\tallocatable := st.nodes[nodeName].Status.Allocatable[resource]\n\t\t// skip any nodes we didn't launch\n\t\tif st.nodes[nodeName].Labels[karpv1.NodePoolLabelKey] == \"\" {\n\t\t\tcontinue\n\t\t}\n\t\tif allocatable.IsZero() {\n\t\t\tcontinue\n\t\t}\n\t\trequested := requests[resource]\n\t\tutilization = append(utilization, requested.AsApproximateFloat64()/allocatable.AsApproximateFloat64())\n\t}\n\treturn utilization\n}\n\ntype copyable[T any] interface {\n\tDeepCopy() T\n}\n\nfunc deepCopyMap[K comparable, V copyable[V]](m map[K]V) map[K]V {\n\tret := map[K]V{}\n\tfor k, v := range m {\n\t\tret[k] = v.DeepCopy()\n\t}\n\treturn ret\n}\n\nfunc deepCopySlice[T copyable[T]](s []T) []T {\n\tvar ret []T\n\tfor _, elem := range s {\n\t\tret = append(ret, elem.DeepCopy())\n\t}\n\treturn ret\n}\n"
  },
  {
    "path": "test/pkg/environment/common/setup.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage common\n\nimport (\n\t\"fmt\"\n\t\"sync\"\n\t\"time\"\n\n\t\"github.com/samber/lo\"\n\tappsv1 \"k8s.io/api/apps/v1\"\n\tcorev1 \"k8s.io/api/core/v1\"\n\tpolicyv1 \"k8s.io/api/policy/v1\"\n\tschedulingv1 \"k8s.io/api/scheduling/v1\"\n\tstoragev1 \"k8s.io/api/storage/v1\"\n\t\"k8s.io/apimachinery/pkg/api/equality\"\n\tmetav1 \"k8s.io/apimachinery/pkg/apis/meta/v1\"\n\t\"k8s.io/client-go/util/workqueue\"\n\t\"sigs.k8s.io/controller-runtime/pkg/client\"\n\t\"sigs.k8s.io/controller-runtime/pkg/client/apiutil\"\n\n\tkarpv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n\t\"sigs.k8s.io/karpenter/pkg/apis/v1alpha1\"\n\t\"sigs.k8s.io/karpenter/pkg/test\"\n\t\"sigs.k8s.io/karpenter/pkg/utils/pod\"\n\n\t\"github.com/aws/amazon-vpc-resource-controller-k8s/apis/vpcresources/v1beta1\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\t\"github.com/aws/karpenter-provider-aws/test/pkg/debug\"\n\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n)\n\nconst TestingFinalizer = \"testing/finalizer\"\n\nvar (\n\tCleanableObjects = []client.Object{\n\t\t&corev1.Pod{},\n\t\t&appsv1.Deployment{},\n\t\t&appsv1.StatefulSet{},\n\t\t&appsv1.DaemonSet{},\n\t\t&policyv1.PodDisruptionBudget{},\n\t\t&corev1.PersistentVolumeClaim{},\n\t\t&corev1.PersistentVolume{},\n\t\t&storagev1.StorageClass{},\n\t\t&karpv1.NodePool{},\n\t\t&corev1.LimitRange{},\n\t\t&schedulingv1.PriorityClass{},\n\t\t&corev1.Node{},\n\t\t&karpv1.NodeClaim{},\n\t\t&v1.EC2NodeClass{},\n\t\t&v1beta1.SecurityGroupPolicy{},\n\t\t&v1alpha1.NodeOverlay{},\n\t}\n)\n\n// nolint:gocyclo\nfunc (env *Environment) BeforeEach() {\n\tdebug.BeforeEach(env.Context, env.Config, env.Client)\n\n\t// Expect this cluster to be clean for test runs to execute successfully\n\tenv.ExpectCleanCluster()\n\n\tenv.Monitor.Reset()\n\tenv.StartingNodeCount = env.Monitor.NodeCountAtReset()\n}\n\nfunc (env *Environment) ExpectCleanCluster() {\n\tvar nodes corev1.NodeList\n\tExpect(env.Client.List(env.Context, &nodes)).To(Succeed())\n\tfor _, node := range nodes.Items {\n\t\tif len(node.Spec.Taints) == 0 && !node.Spec.Unschedulable {\n\t\t\tFail(fmt.Sprintf(\"expected system pool node %s to be tainted\", node.Name))\n\t\t}\n\t}\n\tvar pods corev1.PodList\n\tExpect(env.Client.List(env.Context, &pods)).To(Succeed())\n\tfor i := range pods.Items {\n\t\tExpect(pod.IsProvisionable(&pods.Items[i])).To(BeFalse(),\n\t\t\tfmt.Sprintf(\"expected to have no provisionable pods, found %s/%s\", pods.Items[i].Namespace, pods.Items[i].Name))\n\t\tExpect(pods.Items[i].Namespace).ToNot(Equal(\"default\"),\n\t\t\tfmt.Sprintf(\"expected no pods in the `default` namespace, found %s/%s\", pods.Items[i].Namespace, pods.Items[i].Name))\n\t}\n\tfor _, obj := range []client.Object{&karpv1.NodePool{}, &v1.EC2NodeClass{}, &v1alpha1.NodeOverlay{}} {\n\t\tmetaList := &metav1.PartialObjectMetadataList{}\n\t\tgvk := lo.Must(apiutil.GVKForObject(obj, env.Client.Scheme()))\n\t\tmetaList.SetGroupVersionKind(gvk)\n\t\tExpect(env.Client.List(env.Context, metaList, client.Limit(1))).To(Succeed())\n\t\tExpect(metaList.Items).To(HaveLen(0), fmt.Sprintf(\"expected no %s to exist\", gvk.Kind))\n\t}\n}\n\nfunc (env *Environment) Cleanup() {\n\tenv.CleanupObjects(CleanableObjects...)\n\tenv.EventuallyExpectNoLeakedKubeNodeLease()\n\tenv.eventuallyExpectScaleDown()\n\tenv.ExpectNoCrashes()\n}\n\nfunc (env *Environment) AfterEach() {\n\tdebug.AfterEach(env.Context)\n\tenv.printControllerLogs(&corev1.PodLogOptions{Container: \"controller\"})\n}\n\nfunc (env *Environment) CleanupObjects(cleanableObjects ...client.Object) {\n\ttime.Sleep(time.Second) // wait one second to let the caches get up-to-date for deletion\n\twg := sync.WaitGroup{}\n\tfor _, obj := range cleanableObjects {\n\t\twg.Go(func() {\n\t\t\tdefer GinkgoRecover()\n\t\t\tEventually(func(g Gomega) {\n\t\t\t\t// This only gets the metadata for the objects since we don't need all the details of the objects\n\t\t\t\tmetaList := &metav1.PartialObjectMetadataList{}\n\t\t\t\tmetaList.SetGroupVersionKind(lo.Must(apiutil.GVKForObject(obj, env.Client.Scheme())))\n\t\t\t\tg.Expect(env.Client.List(env, metaList, client.HasLabels([]string{test.DiscoveryLabel}))).To(Succeed())\n\t\t\t\t// Limit the concurrency of these calls to 50 workers per object so that we try to limit how aggressively we\n\t\t\t\t// are deleting so that we avoid getting client-side throttled\n\t\t\t\tworkqueue.ParallelizeUntil(env, 50, len(metaList.Items), func(i int) {\n\t\t\t\t\tdefer GinkgoRecover()\n\t\t\t\t\tg.Expect(env.ExpectTestingFinalizerRemoved(&metaList.Items[i])).To(Succeed())\n\t\t\t\t\tg.Expect(client.IgnoreNotFound(env.Client.Delete(env, &metaList.Items[i],\n\t\t\t\t\t\tclient.PropagationPolicy(metav1.DeletePropagationForeground),\n\t\t\t\t\t\t&client.DeleteOptions{GracePeriodSeconds: lo.ToPtr(int64(0))}))).To(Succeed())\n\t\t\t\t})\n\t\t\t\t// If the deletes eventually succeed, we should have no elements here at the end of the test\n\t\t\t\tg.Expect(env.Client.List(env, metaList, client.HasLabels([]string{test.DiscoveryLabel}), client.Limit(1))).To(Succeed())\n\t\t\t\tg.Expect(metaList.Items).To(HaveLen(0))\n\t\t\t}).Should(Succeed())\n\t\t})\n\t}\n\twg.Wait()\n}\n\nfunc (env *Environment) ExpectTestingFinalizerRemoved(obj client.Object) error {\n\tmetaObj := &metav1.PartialObjectMetadata{}\n\tmetaObj.SetGroupVersionKind(lo.Must(apiutil.GVKForObject(obj, env.Client.Scheme())))\n\tif err := env.Client.Get(env, client.ObjectKeyFromObject(obj), metaObj); err != nil {\n\t\treturn client.IgnoreNotFound(err)\n\t}\n\tdeepCopy := metaObj.DeepCopy()\n\tmetaObj.Finalizers = lo.Reject(metaObj.Finalizers, func(finalizer string, _ int) bool {\n\t\treturn finalizer == TestingFinalizer\n\t})\n\n\tif !equality.Semantic.DeepEqual(metaObj, deepCopy) {\n\t\t// If the Group is the \"core\" APIs, then we can strategic merge patch\n\t\t// CRDs do not currently have support for strategic merge patching, so we can't blindly do it\n\t\t// https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/#advanced-features-and-flexibility:~:text=Yes-,strategic%2Dmerge%2Dpatch,-The%20new%20endpoints\n\t\tif metaObj.GroupVersionKind().Group == \"\" {\n\t\t\treturn client.IgnoreNotFound(env.Client.Patch(env, metaObj, client.StrategicMergeFrom(deepCopy)))\n\t\t}\n\t\treturn client.IgnoreNotFound(env.Client.Patch(env, metaObj, client.MergeFrom(deepCopy)))\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "test/suites/ami/suite_test.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage ami_test\n\nimport (\n\t\"encoding/base64\"\n\t\"fmt\"\n\t\"os\"\n\t\"strings\"\n\t\"testing\"\n\t\"time\"\n\n\tawssdk \"github.com/aws/aws-sdk-go-v2/aws\"\n\n\tkarpv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n\n\t\"github.com/aws/aws-sdk-go-v2/service/ec2\"\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\t\"github.com/awslabs/operatorpkg/status\"\n\t. \"github.com/awslabs/operatorpkg/test/expectations\"\n\t\"github.com/samber/lo\"\n\tcorev1 \"k8s.io/api/core/v1\"\n\tmetav1 \"k8s.io/apimachinery/pkg/apis/meta/v1\"\n\n\t\"k8s.io/apimachinery/pkg/types\"\n\t\"sigs.k8s.io/controller-runtime/pkg/client\"\n\n\tenvironmentaws \"github.com/aws/karpenter-provider-aws/test/pkg/environment/aws\"\n\n\tcoretest \"sigs.k8s.io/karpenter/pkg/test\"\n)\n\nvar env *environmentaws.Environment\nvar nodeClass *v1.EC2NodeClass\nvar nodePool *karpv1.NodePool\n\nfunc TestAMI(t *testing.T) {\n\tRegisterFailHandler(Fail)\n\tBeforeSuite(func() {\n\t\tenv = environmentaws.NewEnvironment(t)\n\t})\n\tAfterSuite(func() {\n\t\tenv.Stop()\n\t})\n\tRunSpecs(t, \"Ami\")\n}\n\nvar _ = BeforeEach(func() {\n\tenv.BeforeEach()\n\tnodeClass = env.DefaultEC2NodeClass()\n\tnodePool = env.DefaultNodePool(nodeClass)\n})\nvar _ = AfterEach(func() { env.Cleanup() })\nvar _ = AfterEach(func() { env.AfterEach() })\n\nvar _ = Describe(\"AMI\", func() {\n\tvar ssmPath string\n\tvar customAMI string\n\tvar deprecatedAMI string\n\n\tBeforeEach(func() {\n\t\tssmPath = fmt.Sprintf(\"/aws/service/eks/optimized-ami/%s/amazon-linux-2023/x86_64/standard/recommended/image_id\", env.K8sVersion())\n\t\tcustomAMI = env.GetAMIBySSMPath(ssmPath)\n\t\tdeprecatedAMI = env.GetDeprecatedAMI(customAMI, \"AL2023\")\n\t})\n\n\tIt(\"should use the AMI defined by the AMI Selector Terms\", func() {\n\t\tpod := coretest.Pod()\n\t\tnodeClass.Spec.AMIFamily = lo.ToPtr(v1.AMIFamilyAL2023)\n\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{ID: customAMI}}\n\t\tenv.ExpectCreated(pod, nodeClass, nodePool)\n\t\tenv.EventuallyExpectHealthy(pod)\n\t\tenv.ExpectCreatedNodeCount(\"==\", 1)\n\n\t\tenv.ExpectInstance(pod.Spec.NodeName).To(HaveField(\"ImageId\", HaveValue(Equal(customAMI))))\n\t})\n\tIt(\"should use the most recent AMI when discovering multiple\", func() {\n\t\t// choose an old static image that will definitely have an older creation date\n\t\toldCustomAMI := env.GetAMIBySSMPath(fmt.Sprintf(\"/aws/service/eks/optimized-ami/%[1]s/amazon-linux-2023/x86_64/standard/amazon-eks-node-al2023-x86_64-standard-%[1]s-v20260114/image_id\", env.K8sVersion()))\n\t\tnodeClass.Spec.AMIFamily = lo.ToPtr(v1.AMIFamilyAL2023)\n\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{\n\t\t\t{ID: customAMI},\n\t\t\t{ID: oldCustomAMI},\n\t\t}\n\t\tpod := coretest.Pod()\n\n\t\tenv.ExpectCreated(pod, nodeClass, nodePool)\n\t\tenv.EventuallyExpectHealthy(pod)\n\t\tenv.ExpectCreatedNodeCount(\"==\", 1)\n\n\t\tenv.ExpectInstance(pod.Spec.NodeName).To(HaveField(\"ImageId\", HaveValue(Equal(customAMI))))\n\t})\n\tIt(\"should support AMI Selector Terms for Name but fail with incorrect owners\", func() {\n\t\toutput, err := env.EC2API.DescribeImages(env.Context, &ec2.DescribeImagesInput{\n\t\t\tImageIds: []string{customAMI},\n\t\t})\n\t\tExpect(err).To(BeNil())\n\t\tExpect(output.Images).To(HaveLen(1))\n\t\tnodeClass.Spec.AMIFamily = lo.ToPtr(v1.AMIFamilyAL2023)\n\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{\n\t\t\t{\n\t\t\t\tName:  *output.Images[0].Name,\n\t\t\t\tOwner: \"fakeOwnerValue\",\n\t\t\t},\n\t\t}\n\t\tpod := coretest.Pod()\n\n\t\tenv.ExpectCreated(pod, nodeClass, nodePool)\n\t\tenv.ExpectCreatedNodeCount(\"==\", 0)\n\t\tExpect(pod.Spec.NodeName).To(Equal(\"\"))\n\t})\n\tIt(\"should support ami selector Name with default owners\", func() {\n\t\toutput, err := env.EC2API.DescribeImages(env.Context, &ec2.DescribeImagesInput{\n\t\t\tImageIds: []string{customAMI},\n\t\t})\n\t\tExpect(err).To(BeNil())\n\t\tExpect(output.Images).To(HaveLen(1))\n\n\t\tnodeClass.Spec.AMIFamily = lo.ToPtr(v1.AMIFamilyAL2023)\n\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{\n\t\t\t{\n\t\t\t\tName: *output.Images[0].Name,\n\t\t\t},\n\t\t}\n\t\tpod := coretest.Pod()\n\n\t\tenv.ExpectCreated(pod, nodeClass, nodePool)\n\t\tenv.EventuallyExpectHealthy(pod)\n\t\tenv.ExpectCreatedNodeCount(\"==\", 1)\n\n\t\tenv.ExpectInstance(pod.Spec.NodeName).To(HaveField(\"ImageId\", HaveValue(Equal(customAMI))))\n\t})\n\tIt(\"should support ami selector ids\", func() {\n\t\tnodeClass.Spec.AMIFamily = lo.ToPtr(v1.AMIFamilyAL2023)\n\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{\n\t\t\t{\n\t\t\t\tID: customAMI,\n\t\t\t},\n\t\t}\n\t\tpod := coretest.Pod()\n\n\t\tenv.ExpectCreated(pod, nodeClass, nodePool)\n\t\tenv.EventuallyExpectHealthy(pod)\n\t\tenv.ExpectCreatedNodeCount(\"==\", 1)\n\n\t\tenv.ExpectInstance(pod.Spec.NodeName).To(HaveField(\"ImageId\", HaveValue(Equal(customAMI))))\n\t})\n\tIt(\"should support ssm parameters by ARN\", func() {\n\t\tnodeClass.Spec.AMIFamily = lo.ToPtr(v1.AMIFamilyAL2023)\n\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{\n\t\t\t{\n\t\t\t\tSSMParameter: fmt.Sprintf(\"arn:aws:ssm:%s::parameter%s\", env.Region, ssmPath),\n\t\t\t},\n\t\t}\n\t\tpod := coretest.Pod()\n\n\t\tenv.ExpectCreated(pod, nodeClass, nodePool)\n\t\tenv.EventuallyExpectHealthy(pod)\n\t\tenv.ExpectCreatedNodeCount(\"==\", 1)\n\n\t\tenv.ExpectInstance(pod.Spec.NodeName).To(HaveField(\"ImageId\", HaveValue(Equal(customAMI))))\n\t})\n\tIt(\"should support launching nodes with a deprecated ami\", func() {\n\t\tnodeClass.Spec.AMIFamily = lo.ToPtr(v1.AMIFamilyAL2023)\n\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{\n\t\t\t{\n\t\t\t\tID: deprecatedAMI,\n\t\t\t},\n\t\t}\n\t\tpod := coretest.Pod()\n\n\t\tenv.ExpectCreated(pod, nodeClass, nodePool)\n\t\tenv.EventuallyExpectHealthy(pod)\n\t\tenv.ExpectCreatedNodeCount(\"==\", 1)\n\n\t\tenv.ExpectInstance(pod.Spec.NodeName).To(HaveField(\"ImageId\", HaveValue(Equal(deprecatedAMI))))\n\n\t\tnc := EventuallyExpectAMIsToExist(nodeClass)\n\t\tExpect(len(nc.Status.AMIs)).To(BeNumerically(\"==\", 1))\n\t\tExpect(nc.Status.AMIs[0].Deprecated).To(BeTrue())\n\t\tExpectStatusConditions(env, env.Client, 1*time.Minute, nodeClass, status.Condition{Type: v1.ConditionTypeAMIsReady, Status: metav1.ConditionTrue})\n\t})\n\tIt(\"should prioritize launch with non-deprecated AMIs\", func() {\n\t\tnodeClass.Spec.AMIFamily = lo.ToPtr(v1.AMIFamilyAL2023)\n\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{\n\t\t\t{\n\t\t\t\tID: deprecatedAMI,\n\t\t\t},\n\t\t\t{\n\t\t\t\tID: customAMI,\n\t\t\t},\n\t\t}\n\t\tpod := coretest.Pod()\n\n\t\tenv.ExpectCreated(pod, nodeClass, nodePool)\n\t\tenv.EventuallyExpectHealthy(pod)\n\t\tenv.ExpectCreatedNodeCount(\"==\", 1)\n\n\t\tenv.ExpectInstance(pod.Spec.NodeName).To(HaveField(\"ImageId\", HaveValue(Equal(customAMI))))\n\t})\n\n\tContext(\"AMIFamily\", func() {\n\t\tDescribeTable(\n\t\t\t\"should provision a node using an alias\",\n\t\t\tfunc(alias string) {\n\t\t\t\tif strings.Contains(alias, \"al2\") && env.K8sMinorVersion() > 32 {\n\t\t\t\t\tSkip(\"AL2 is not supported on versions > 1.32\")\n\t\t\t\t}\n\t\t\t\tpod := coretest.Pod()\n\t\t\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{Alias: alias}}\n\t\t\t\tenv.ExpectCreated(nodeClass, nodePool, pod)\n\t\t\t\tenv.EventuallyExpectHealthy(pod)\n\t\t\t\tenv.ExpectCreatedNodeCount(\"==\", 1)\n\t\t\t},\n\t\t\tEntry(\"AL2023 (latest)\", \"al2023@latest\"),\n\t\t\tEntry(\"AL2023 (pinned)\", \"al2023@v20250116\"),\n\t\t\tEntry(\"AL2 (latest)\", \"al2@latest\"),\n\t\t\tEntry(\"AL2 (pinned)\", \"al2@v20250116\"),\n\t\t\tEntry(\"Bottlerocket (latest)\", \"bottlerocket@latest\"),\n\t\t\tEntry(\"Bottlerocket (pinned with v prefix)\", \"bottlerocket@v1.53.0\"),\n\t\t\tEntry(\"Bottlerocket (pinned without v prefix)\", \"bottlerocket@1.53.0\"),\n\t\t)\n\t\tIt(\"should support Custom AMIFamily with AMI Selectors\", func() {\n\t\t\tal2023AMI := env.GetAMIBySSMPath(fmt.Sprintf(\"/aws/service/eks/optimized-ami/%s/amazon-linux-2023/x86_64/standard/recommended/image_id\", env.K8sVersion()))\n\t\t\tnodeClass.Spec.AMIFamily = lo.ToPtr(v1.AMIFamilyCustom)\n\t\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{ID: al2023AMI}}\n\t\t\trawContent, err := os.ReadFile(\"testdata/al2023_userdata_input.yaml\")\n\t\t\tExpect(err).ToNot(HaveOccurred())\n\t\t\tnodeClass.Spec.UserData = lo.ToPtr(fmt.Sprintf(string(rawContent), env.ClusterName,\n\t\t\t\tenv.ClusterEndpoint, env.ExpectCABundle()))\n\t\t\tpod := coretest.Pod()\n\n\t\t\tenv.ExpectCreated(pod, nodeClass, nodePool)\n\t\t\tenv.EventuallyExpectHealthy(pod)\n\t\t\tenv.ExpectCreatedNodeCount(\"==\", 1)\n\n\t\t\tenv.ExpectInstance(pod.Spec.NodeName).To(HaveField(\"ImageId\", HaveValue(Equal(al2023AMI))))\n\t\t})\n\t\tIt(\"should have the EC2NodeClass status for AMIs using wildcard\", func() {\n\t\t\tnodeClass.Spec.AMIFamily = lo.ToPtr(v1.AMIFamilyAL2023)\n\t\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{\n\t\t\t\t{\n\t\t\t\t\tName: \"*\",\n\t\t\t\t},\n\t\t\t}\n\t\t\tenv.ExpectCreated(nodeClass)\n\t\t\tnc := EventuallyExpectAMIsToExist(nodeClass)\n\t\t\tExpect(len(nc.Status.AMIs)).To(BeNumerically(\"<\", 10))\n\t\t})\n\t\tIt(\"should have the EC2NodeClass status for AMIs using tags\", func() {\n\t\t\tnodeClass.Spec.AMIFamily = lo.ToPtr(v1.AMIFamilyAL2023)\n\t\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{ID: customAMI}}\n\t\t\tenv.ExpectCreated(nodeClass)\n\t\t\tnc := EventuallyExpectAMIsToExist(nodeClass)\n\t\t\tExpect(len(nc.Status.AMIs)).To(BeNumerically(\"==\", 1))\n\t\t\tExpect(nc.Status.AMIs[0].ID).To(Equal(customAMI))\n\t\t\tExpectStatusConditions(env, env.Client, 1*time.Minute, nodeClass, status.Condition{Type: v1.ConditionTypeAMIsReady, Status: metav1.ConditionTrue})\n\t\t\tExpectStatusConditions(env, env.Client, 1*time.Minute, nodeClass, status.Condition{Type: status.ConditionReady, Status: metav1.ConditionTrue})\n\t\t})\n\t\tIt(\"should have the EC2NodeClass status for AMIs using public ssm parameter ARN\", func() {\n\t\t\tnodeClass.Spec.AMIFamily = lo.ToPtr(v1.AMIFamilyAL2023)\n\t\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{SSMParameter: fmt.Sprintf(\"arn:aws:ssm:%s::parameter%s\", env.Region, ssmPath)}}\n\t\t\tenv.ExpectCreated(nodeClass)\n\t\t\tnc := EventuallyExpectAMIsToExist(nodeClass)\n\t\t\tExpect(len(nc.Status.AMIs)).To(BeNumerically(\"==\", 1))\n\t\t\tExpect(nc.Status.AMIs[0].ID).To(Equal(customAMI))\n\t\t\tExpectStatusConditions(env, env.Client, 1*time.Minute, nodeClass, status.Condition{Type: v1.ConditionTypeAMIsReady, Status: metav1.ConditionTrue})\n\t\t\tExpectStatusConditions(env, env.Client, 1*time.Minute, nodeClass, status.Condition{Type: status.ConditionReady, Status: metav1.ConditionTrue})\n\t\t})\n\t\tIt(\"should have ec2nodeClass status as not ready since AMI was not resolved\", func() {\n\t\t\tnodeClass.Spec.AMIFamily = lo.ToPtr(v1.AMIFamilyAL2023)\n\t\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{ID: \"ami-123\"}}\n\t\t\tenv.ExpectCreated(nodeClass)\n\t\t\tExpectStatusConditions(env, env.Client, 1*time.Minute, nodeClass, status.Condition{Type: v1.ConditionTypeAMIsReady, Status: metav1.ConditionFalse, Message: \"AMISelector did not match any AMIs\"})\n\t\t\tExpectStatusConditions(env, env.Client, 1*time.Minute, nodeClass, status.Condition{Type: status.ConditionReady, Status: metav1.ConditionFalse, Message: \"ValidationSucceeded=False, AMIsReady=False\"})\n\n\t\t})\n\t})\n\n\tContext(\"UserData\", func() {\n\t\tIt(\"should merge UserData contents for AL2 AMIFamily\", func() {\n\t\t\tif env.K8sMinorVersion() > 32 {\n\t\t\t\tSkip(\"AL2 is not supported on versions > 1.32\")\n\t\t\t}\n\t\t\tcontent, err := os.ReadFile(\"testdata/al2_userdata_input.sh\")\n\t\t\tExpect(err).ToNot(HaveOccurred())\n\t\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{Alias: \"al2@latest\"}}\n\t\t\tnodeClass.Spec.UserData = awssdk.String(string(content))\n\t\t\tnodePool.Spec.Template.Spec.Taints = []corev1.Taint{{Key: \"example.com\", Value: \"value\", Effect: \"NoExecute\"}}\n\t\t\tnodePool.Spec.Template.Spec.StartupTaints = []corev1.Taint{{Key: \"example.com\", Value: \"value\", Effect: \"NoSchedule\"}}\n\t\t\tpod := coretest.Pod(coretest.PodOptions{Tolerations: []corev1.Toleration{{Key: \"example.com\", Operator: corev1.TolerationOpExists}}})\n\n\t\t\tenv.ExpectCreated(pod, nodeClass, nodePool)\n\t\t\tenv.EventuallyExpectHealthy(pod)\n\t\t\tExpect(env.GetNode(pod.Spec.NodeName).Spec.Taints).To(ContainElements(\n\t\t\t\tcorev1.Taint{Key: \"example.com\", Value: \"value\", Effect: \"NoExecute\"},\n\t\t\t\tcorev1.Taint{Key: \"example.com\", Value: \"value\", Effect: \"NoSchedule\"},\n\t\t\t))\n\t\t\tactualUserData, err := base64.StdEncoding.DecodeString(*getInstanceAttribute(pod.Spec.NodeName, \"userData\").UserData.Value)\n\t\t\tExpect(err).ToNot(HaveOccurred())\n\t\t\t// Since the node has joined the cluster, we know our bootstrapping was correct.\n\t\t\t// Just verify if the UserData contains our custom content too, rather than doing a byte-wise comparison.\n\t\t\tExpect(string(actualUserData)).To(ContainSubstring(\"Running custom user data script\"))\n\t\t\tExpect(string(actualUserData)).To(ContainSubstring(\"karpenter.sh/do-not-sync-taints=true\"))\n\t\t})\n\t\tIt(\"should merge non-MIME UserData contents for AL2 AMIFamily\", func() {\n\t\t\tif env.K8sMinorVersion() > 32 {\n\t\t\t\tSkip(\"AL2 is not supported on versions > 1.32\")\n\t\t\t}\n\t\t\tcontent, err := os.ReadFile(\"testdata/al2_no_mime_userdata_input.sh\")\n\t\t\tExpect(err).ToNot(HaveOccurred())\n\t\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{Alias: \"al2@latest\"}}\n\t\t\tnodeClass.Spec.UserData = awssdk.String(string(content))\n\t\t\tnodePool.Spec.Template.Spec.Taints = []corev1.Taint{{Key: \"example.com\", Value: \"value\", Effect: \"NoExecute\"}}\n\t\t\tnodePool.Spec.Template.Spec.StartupTaints = []corev1.Taint{{Key: \"example.com\", Value: \"value\", Effect: \"NoSchedule\"}}\n\t\t\tpod := coretest.Pod(coretest.PodOptions{Tolerations: []corev1.Toleration{{Key: \"example.com\", Operator: corev1.TolerationOpExists}}})\n\n\t\t\tenv.ExpectCreated(pod, nodeClass, nodePool)\n\t\t\tenv.EventuallyExpectHealthy(pod)\n\t\t\tExpect(env.GetNode(pod.Spec.NodeName).Spec.Taints).To(ContainElements(\n\t\t\t\tcorev1.Taint{Key: \"example.com\", Value: \"value\", Effect: \"NoExecute\"},\n\t\t\t\tcorev1.Taint{Key: \"example.com\", Value: \"value\", Effect: \"NoSchedule\"},\n\t\t\t))\n\t\t\tactualUserData, err := base64.StdEncoding.DecodeString(*getInstanceAttribute(pod.Spec.NodeName, \"userData\").UserData.Value)\n\t\t\tExpect(err).ToNot(HaveOccurred())\n\t\t\t// Since the node has joined the cluster, we know our bootstrapping was correct.\n\t\t\t// Just verify if the UserData contains our custom content too, rather than doing a byte-wise comparison.\n\t\t\tExpect(string(actualUserData)).To(ContainSubstring(\"Running custom user data script\"))\n\t\t\tExpect(string(actualUserData)).To(ContainSubstring(\"karpenter.sh/do-not-sync-taints=true\"))\n\t\t})\n\t\tIt(\"should merge UserData contents for Bottlerocket AMIFamily\", func() {\n\t\t\tcontent, err := os.ReadFile(\"testdata/br_userdata_input.sh\")\n\t\t\tExpect(err).ToNot(HaveOccurred())\n\t\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{Alias: \"bottlerocket@latest\"}}\n\t\t\tnodeClass.Spec.UserData = awssdk.String(string(content))\n\t\t\tnodePool.Spec.Template.Spec.Taints = []corev1.Taint{{Key: \"example.com\", Value: \"value\", Effect: \"NoExecute\"}}\n\t\t\tnodePool.Spec.Template.Spec.StartupTaints = []corev1.Taint{{Key: \"example.com\", Value: \"value\", Effect: \"NoSchedule\"}}\n\t\t\tpod := coretest.Pod(coretest.PodOptions{Tolerations: []corev1.Toleration{{Key: \"example.com\", Operator: corev1.TolerationOpExists}}})\n\n\t\t\tenv.ExpectCreated(pod, nodeClass, nodePool)\n\t\t\tenv.EventuallyExpectHealthy(pod)\n\t\t\tExpect(env.GetNode(pod.Spec.NodeName).Spec.Taints).To(ContainElements(\n\t\t\t\tcorev1.Taint{Key: \"example.com\", Value: \"value\", Effect: \"NoExecute\"},\n\t\t\t\tcorev1.Taint{Key: \"example.com\", Value: \"value\", Effect: \"NoSchedule\"},\n\t\t\t))\n\t\t\tactualUserData, err := base64.StdEncoding.DecodeString(*getInstanceAttribute(pod.Spec.NodeName, \"userData\").UserData.Value)\n\t\t\tExpect(err).ToNot(HaveOccurred())\n\t\t\tExpect(string(actualUserData)).To(ContainSubstring(\"kube-api-qps = 30\"))\n\t\t\tExpect(string(actualUserData)).To(ContainSubstring(\"'karpenter.sh/do-not-sync-taints' = 'true'\"))\n\t\t\tExpect(string(actualUserData)).To(ContainSubstring(\"eviction-max-pod-grace-period = 40\"))\n\t\t\tExpect(string(actualUserData)).To(ContainSubstring(\"[settings.kubernetes.eviction-soft]\\n'memory.available' = '100Mi'\"))\n\t\t\tExpect(string(actualUserData)).To(ContainSubstring(\"[settings.kubernetes.eviction-soft-grace-period]\\n'memory.available' = '30s'\"))\n\t\t})\n\t\t// Windows tests are can flake due to the instance types that are used in testing.\n\t\t// The VPC Resource controller will need to support the instance types that are used.\n\t\t// If the instance type is not supported by the controller resource `vpc.amazonaws.com/PrivateIPv4Address` will not register.\n\t\t// Issue: https://github.com/aws/karpenter-provider-aws/issues/4472\n\t\t// See: https://github.com/aws/amazon-vpc-resource-controller-k8s/blob/master/pkg/aws/vpc/limits.go\n\t\tIt(\"should merge UserData contents for Windows AMIFamily\", func() {\n\t\t\tenv.ExpectWindowsIPAMEnabled()\n\t\t\tDeferCleanup(func() {\n\t\t\t\tenv.ExpectWindowsIPAMDisabled()\n\t\t\t})\n\n\t\t\tcontent, err := os.ReadFile(\"testdata/windows_userdata_input.ps1\")\n\t\t\tExpect(err).ToNot(HaveOccurred())\n\t\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{Alias: \"windows2022@latest\"}}\n\t\t\tnodeClass.Spec.UserData = awssdk.String(string(content))\n\t\t\tnodePool.Spec.Template.Spec.Taints = []corev1.Taint{{Key: \"example.com\", Value: \"value\", Effect: \"NoExecute\"}}\n\t\t\tnodePool.Spec.Template.Spec.StartupTaints = []corev1.Taint{{Key: \"example.com\", Value: \"value\", Effect: \"NoSchedule\"}}\n\n\t\t\tnodePool = coretest.ReplaceRequirements(nodePool,\n\t\t\t\tkarpv1.NodeSelectorRequirementWithMinValues{\n\t\t\t\t\tKey:      corev1.LabelOSStable,\n\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\tValues:   []string{string(corev1.Windows)},\n\t\t\t\t},\n\t\t\t)\n\t\t\tpod := coretest.Pod(coretest.PodOptions{\n\t\t\t\tImage: environmentaws.WindowsDefaultImage,\n\t\t\t\tNodeSelector: map[string]string{\n\t\t\t\t\tcorev1.LabelOSStable:     string(corev1.Windows),\n\t\t\t\t\tcorev1.LabelWindowsBuild: \"10.0.20348\",\n\t\t\t\t},\n\t\t\t\tTolerations: []corev1.Toleration{{Key: \"example.com\", Operator: corev1.TolerationOpExists}},\n\t\t\t})\n\n\t\t\tenv.ExpectCreated(pod, nodeClass, nodePool)\n\t\t\tenv.EventuallyExpectHealthyWithTimeout(time.Minute*15, pod) // Wait 15 minutes because Windows nodes/containers take longer to spin up\n\t\t\tExpect(env.GetNode(pod.Spec.NodeName).Spec.Taints).To(ContainElements(\n\t\t\t\tcorev1.Taint{Key: \"example.com\", Value: \"value\", Effect: \"NoExecute\"},\n\t\t\t\tcorev1.Taint{Key: \"example.com\", Value: \"value\", Effect: \"NoSchedule\"},\n\t\t\t))\n\t\t\tactualUserData, err := base64.StdEncoding.DecodeString(*getInstanceAttribute(pod.Spec.NodeName, \"userData\").UserData.Value)\n\t\t\tExpect(err).ToNot(HaveOccurred())\n\t\t\tExpect(string(actualUserData)).To(ContainSubstring(\"Write-Host \\\"Running custom user data script\\\"\"))\n\t\t\tExpect(string(actualUserData)).To(ContainSubstring(\"[string]$EKSBootstrapScriptFile = \\\"$env:ProgramFiles\\\\Amazon\\\\EKS\\\\Start-EKSBootstrap.ps1\\\"\"))\n\t\t\tExpect(string(actualUserData)).To(ContainSubstring(\"karpenter.sh/do-not-sync-taints=true\"))\n\t\t})\n\t})\n})\n\n//nolint:unparam\nfunc getInstanceAttribute(nodeName string, attribute string) *ec2.DescribeInstanceAttributeOutput {\n\tvar node corev1.Node\n\tExpect(env.Client.Get(env.Context, types.NamespacedName{Name: nodeName}, &node)).To(Succeed())\n\tproviderIDSplit := strings.Split(node.Spec.ProviderID, \"/\")\n\tinstanceID := providerIDSplit[len(providerIDSplit)-1]\n\tinstanceAttribute, err := env.EC2API.DescribeInstanceAttribute(env.Context, &ec2.DescribeInstanceAttributeInput{\n\t\tInstanceId: awssdk.String(instanceID),\n\t\tAttribute:  ec2types.InstanceAttributeName(attribute),\n\t})\n\tExpect(err).ToNot(HaveOccurred())\n\treturn instanceAttribute\n}\n\nfunc EventuallyExpectAMIsToExist(nodeClass *v1.EC2NodeClass) *v1.EC2NodeClass {\n\tnc := &v1.EC2NodeClass{}\n\tEventually(func(g Gomega) {\n\t\tg.Expect(env.Client.Get(env, client.ObjectKeyFromObject(nodeClass), nc)).To(Succeed())\n\t\tg.Expect(nc.Status.AMIs).ToNot(BeNil())\n\t}).WithTimeout(30 * time.Second).Should(Succeed())\n\treturn nc\n}\n"
  },
  {
    "path": "test/suites/ami/testdata/al2023_userdata_input.yaml",
    "content": "apiVersion: node.eks.aws/v1alpha1\nkind: NodeConfig\nspec:\n  cluster:\n    name: %s\n    apiServerEndpoint: %s\n    certificateAuthority: %s\n    cidr: 10.100.0.0/16\n  kubelet:\n    config:\n      clusterDNS:\n      - 10.0.100.10\n    flags:\n    - --node-labels=\"testing/cluster=unspecified\"\n    - --register-with-taints=\"karpenter.sh/unregistered:NoExecute\""
  },
  {
    "path": "test/suites/ami/testdata/al2_no_mime_userdata_input.sh",
    "content": "#!/bin/bash\necho \"Running custom user data script\"\n"
  },
  {
    "path": "test/suites/ami/testdata/al2_userdata_input.sh",
    "content": "MIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"BOUNDARY\"\n\n--BOUNDARY\nContent-Type: text/x-shellscript; charset=\"us-ascii\"\n\n#!/bin/bash\necho \"Running custom user data script\"\n\n--BOUNDARY--\n"
  },
  {
    "path": "test/suites/ami/testdata/br_userdata_input.sh",
    "content": "[settings.kubernetes]\nkube-api-qps = 30\neviction-max-pod-grace-period = 40\n[settings.kubernetes.node-taints]\n\"node.cilium.io/agent-not-ready\" = [\"true:NoExecute\"]\n[settings.kubernetes.eviction-soft]\n\"memory.available\" = \"100Mi\"\n[settings.kubernetes.eviction-soft-grace-period]\n\"memory.available\" = \"30s\""
  },
  {
    "path": "test/suites/ami/testdata/windows_userdata_input.ps1",
    "content": "Write-Host \"Running custom user data script\""
  },
  {
    "path": "test/suites/consolidation/suite_test.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage consolidation_test\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"strings\"\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go-v2/aws\"\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\t\"github.com/awslabs/operatorpkg/object\"\n\t\"github.com/samber/lo\"\n\tappsv1 \"k8s.io/api/apps/v1\"\n\tbatchv1 \"k8s.io/api/batch/v1\"\n\tcorev1 \"k8s.io/api/core/v1\"\n\t\"k8s.io/apimachinery/pkg/api/resource\"\n\tmetav1 \"k8s.io/apimachinery/pkg/apis/meta/v1\"\n\t\"k8s.io/apimachinery/pkg/labels\"\n\t\"sigs.k8s.io/controller-runtime/pkg/client\"\n\n\tkarpv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n\t\"sigs.k8s.io/karpenter/pkg/apis/v1alpha1\"\n\t\"sigs.k8s.io/karpenter/pkg/operator/options\"\n\tcoretest \"sigs.k8s.io/karpenter/pkg/test\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\n\t\"github.com/aws/karpenter-provider-aws/test/pkg/debug\"\n\tenvironmentaws \"github.com/aws/karpenter-provider-aws/test/pkg/environment/aws\"\n\t\"github.com/aws/karpenter-provider-aws/test/pkg/environment/common\"\n\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n)\n\nvar env *environmentaws.Environment\n\nfunc TestConsolidation(t *testing.T) {\n\tRegisterFailHandler(Fail)\n\tBeforeSuite(func() {\n\t\tenv = environmentaws.NewEnvironment(t)\n\t})\n\tAfterSuite(func() {\n\t\tenv.Stop()\n\t})\n\tRunSpecs(t, \"Consolidation\")\n}\n\nvar nodeClass *v1.EC2NodeClass\n\nvar _ = BeforeEach(func() {\n\tnodeClass = env.DefaultEC2NodeClass()\n\tenv.BeforeEach()\n})\nvar _ = AfterEach(func() { env.Cleanup() })\nvar _ = AfterEach(func() { env.AfterEach() })\n\nvar _ = DescribeTableSubtree(\"Consolidation\", Ordered, func(minValuesPolicy options.MinValuesPolicy) {\n\tBeforeEach(func() {\n\t\tenv.ExpectSettingsOverridden(corev1.EnvVar{Name: \"MIN_VALUES_POLICY\", Value: string(minValuesPolicy)})\n\t})\n\tContext(\"LastPodEventTime\", func() {\n\t\tvar nodePool *karpv1.NodePool\n\t\tBeforeEach(func() {\n\t\t\tnodePool = env.DefaultNodePool(nodeClass)\n\t\t\tnodePool.Spec.Disruption.ConsolidateAfter = karpv1.MustParseNillableDuration(\"Never\")\n\n\t\t})\n\t\tIt(\"should update lastPodEventTime when pods are scheduled and removed\", func() {\n\t\t\tvar numPods int32 = 5\n\t\t\tdep := coretest.Deployment(coretest.DeploymentOptions{\n\t\t\t\tReplicas: numPods,\n\t\t\t\tPodOptions: coretest.PodOptions{\n\t\t\t\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\t\t\t\tLabels: map[string]string{\"app\": \"regular-app\"},\n\t\t\t\t\t},\n\t\t\t\t\tResourceRequirements: corev1.ResourceRequirements{\n\t\t\t\t\t\tRequests: corev1.ResourceList{corev1.ResourceCPU: resource.MustParse(\"1\")},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t})\n\t\t\tselector := labels.SelectorFromSet(dep.Spec.Selector.MatchLabels)\n\t\t\tnodePool.Spec.Disruption.Budgets = []karpv1.Budget{\n\t\t\t\t{\n\t\t\t\t\tNodes: \"0%\",\n\t\t\t\t},\n\t\t\t}\n\t\t\tenv.ExpectCreated(nodeClass, nodePool, dep)\n\n\t\t\tnodeClaims := env.EventuallyExpectCreatedNodeClaimCount(\"==\", 1)\n\t\t\tenv.EventuallyExpectCreatedNodeCount(\"==\", 1)\n\t\t\tenv.EventuallyExpectHealthyPodCount(selector, int(numPods))\n\n\t\t\tnodeClaim := env.ExpectExists(nodeClaims[0]).(*karpv1.NodeClaim)\n\t\t\tlastPodEventTime := nodeClaim.Status.LastPodEventTime\n\n\t\t\t// wait 10 seconds so that we don't run into the de-dupe timeout\n\t\t\ttime.Sleep(10 * time.Second)\n\n\t\t\tdep.Spec.Replicas = lo.ToPtr[int32](4)\n\t\t\tBy(\"removing one pod from the node\")\n\t\t\tenv.ExpectUpdated(dep)\n\n\t\t\tEventually(func(g Gomega) {\n\t\t\t\tnodeClaim = env.ExpectExists(nodeClaim).(*karpv1.NodeClaim)\n\t\t\t\tg.Expect(nodeClaim.Status.LastPodEventTime.Time).ToNot(BeEquivalentTo(lastPodEventTime.Time))\n\t\t\t}).WithTimeout(5 * time.Second).WithPolling(1 * time.Second).Should(Succeed())\n\t\t\tlastPodEventTime = nodeClaim.Status.LastPodEventTime\n\n\t\t\t// wait 10 seconds so that we don't run into the de-dupe timeout\n\t\t\ttime.Sleep(10 * time.Second)\n\n\t\t\tdep.Spec.Replicas = lo.ToPtr[int32](5)\n\t\t\tBy(\"adding one pod to the node\")\n\t\t\tenv.ExpectUpdated(dep)\n\n\t\t\tEventually(func(g Gomega) {\n\t\t\t\tnodeClaim = env.ExpectExists(nodeClaim).(*karpv1.NodeClaim)\n\t\t\t\tg.Expect(nodeClaim.Status.LastPodEventTime.Time).ToNot(BeEquivalentTo(lastPodEventTime.Time))\n\t\t\t}).WithTimeout(5 * time.Second).WithPolling(1 * time.Second).Should(Succeed())\n\t\t})\n\t\tIt(\"should update lastPodEventTime when pods go terminal\", func() {\n\t\t\tpodLabels := map[string]string{\"app\": \"regular-app\"}\n\t\t\tpod := coretest.Pod(coretest.PodOptions{\n\t\t\t\t// use a non-pause image so that we can have a sleep\n\t\t\t\tImage:   \"alpine:3.20.2\",\n\t\t\t\tCommand: []string{\"/bin/sh\", \"-c\", \"sleep 30\"},\n\t\t\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\t\t\tLabels: podLabels,\n\t\t\t\t},\n\t\t\t\tResourceRequirements: corev1.ResourceRequirements{\n\t\t\t\t\tRequests: corev1.ResourceList{corev1.ResourceCPU: resource.MustParse(\"1\")},\n\t\t\t\t},\n\t\t\t\tRestartPolicy: corev1.RestartPolicyNever,\n\t\t\t})\n\t\t\tjob := &batchv1.Job{\n\t\t\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\t\t\tName:      coretest.RandomName(),\n\t\t\t\t\tNamespace: \"default\",\n\t\t\t\t},\n\t\t\t\tSpec: batchv1.JobSpec{\n\t\t\t\t\tTemplate: corev1.PodTemplateSpec{\n\t\t\t\t\t\tObjectMeta: pod.ObjectMeta,\n\t\t\t\t\t\tSpec:       pod.Spec,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}\n\t\t\tselector := labels.SelectorFromSet(podLabels)\n\t\t\tnodePool.Spec.Disruption.Budgets = []karpv1.Budget{\n\t\t\t\t{\n\t\t\t\t\tNodes: \"0%\",\n\t\t\t\t},\n\t\t\t}\n\t\t\tenv.ExpectCreated(nodeClass, nodePool, job)\n\n\t\t\tnodeClaims := env.EventuallyExpectCreatedNodeClaimCount(\"==\", 1)\n\t\t\tenv.EventuallyExpectCreatedNodeCount(\"==\", 1)\n\t\t\tpods := env.EventuallyExpectHealthyPodCount(selector, int(1))\n\n\t\t\t// pods are healthy, which means the job has started its 30s sleep\n\t\t\tnodeClaim := env.ExpectExists(nodeClaims[0]).(*karpv1.NodeClaim)\n\t\t\tlastPodEventTime := nodeClaim.Status.LastPodEventTime\n\n\t\t\t// wait a minute for the pod's sleep to finish, and for the nodeclaim to update\n\t\t\tEventually(func(g Gomega) {\n\t\t\t\tpod := env.ExpectExists(pods[0]).(*corev1.Pod)\n\t\t\t\tg.Expect(pod.Status.Phase).To(Equal(corev1.PodSucceeded))\n\t\t\t}).WithTimeout(1 * time.Minute).WithPolling(10 * time.Second).Should(Succeed())\n\n\t\t\tnodeClaim = env.ExpectExists(nodeClaims[0]).(*karpv1.NodeClaim)\n\t\t\tExpect(nodeClaim.Status.LastPodEventTime).ToNot(BeEquivalentTo(lastPodEventTime.Time))\n\t\t})\n\n\t})\n\tContext(\"Budgets\", func() {\n\t\tvar nodePool *karpv1.NodePool\n\t\tvar dep *appsv1.Deployment\n\t\tvar selector labels.Selector\n\t\tvar numPods int32\n\t\tBeforeEach(func() {\n\t\t\tnodePool = env.DefaultNodePool(nodeClass)\n\t\t\tnodePool.Spec.Disruption.ConsolidateAfter = karpv1.MustParseNillableDuration(\"0s\")\n\n\t\t\tnumPods = 5\n\t\t\tdep = coretest.Deployment(coretest.DeploymentOptions{\n\t\t\t\tReplicas: numPods,\n\t\t\t\tPodOptions: coretest.PodOptions{\n\t\t\t\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\t\t\t\tLabels: map[string]string{\"app\": \"regular-app\"},\n\t\t\t\t\t},\n\t\t\t\t\tResourceRequirements: corev1.ResourceRequirements{\n\t\t\t\t\t\tRequests: corev1.ResourceList{corev1.ResourceCPU: resource.MustParse(\"1\")},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t})\n\t\t\tselector = labels.SelectorFromSet(dep.Spec.Selector.MatchLabels)\n\t\t})\n\t\tIt(\"should respect budgets for empty delete consolidation\", func() {\n\t\t\tnodePool.Spec.Disruption.Budgets = []karpv1.Budget{\n\t\t\t\t{\n\t\t\t\t\tNodes: \"40%\",\n\t\t\t\t},\n\t\t\t}\n\n\t\t\t// Hostname anti-affinity to require one pod on each node\n\t\t\tdep.Spec.Template.Spec.Affinity = &corev1.Affinity{\n\t\t\t\tPodAntiAffinity: &corev1.PodAntiAffinity{\n\t\t\t\t\tRequiredDuringSchedulingIgnoredDuringExecution: []corev1.PodAffinityTerm{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tLabelSelector: dep.Spec.Selector,\n\t\t\t\t\t\t\tTopologyKey:   corev1.LabelHostname,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}\n\t\t\tenv.ExpectCreated(nodeClass, nodePool, dep)\n\n\t\t\tenv.EventuallyExpectCreatedNodeClaimCount(\"==\", 5)\n\t\t\tnodes := env.EventuallyExpectCreatedNodeCount(\"==\", 5)\n\t\t\tenv.EventuallyExpectHealthyPodCount(selector, int(numPods))\n\n\t\t\tBy(\"adding finalizers to the nodes to prevent termination\")\n\t\t\tfor _, node := range nodes {\n\t\t\t\tExpect(env.Client.Get(env.Context, client.ObjectKeyFromObject(node), node)).To(Succeed())\n\t\t\t\tnode.Finalizers = append(node.Finalizers, common.TestingFinalizer)\n\t\t\t\tenv.ExpectUpdated(node)\n\t\t\t}\n\n\t\t\tdep.Spec.Replicas = lo.ToPtr[int32](1)\n\t\t\tBy(\"making the nodes empty\")\n\t\t\t// Update the deployment to only contain 1 replica.\n\t\t\tenv.ExpectUpdated(dep)\n\n\t\t\tenv.ConsistentlyExpectDisruptionsUntilNoneLeft(5, 2, 10*time.Minute)\n\t\t})\n\t\tIt(\"should respect budgets for non-empty delete consolidation\", func() {\n\t\t\t// This test will hold consolidation until we are ready to execute it\n\t\t\tnodePool.Spec.Disruption.ConsolidateAfter = karpv1.MustParseNillableDuration(\"Never\")\n\n\t\t\tnodePool = coretest.ReplaceRequirements(nodePool,\n\t\t\t\tkarpv1.NodeSelectorRequirementWithMinValues{\n\t\t\t\t\tKey:      v1.LabelInstanceSize,\n\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\tValues:   []string{\"2xlarge\"},\n\t\t\t\t},\n\t\t\t)\n\t\t\t// We're expecting to create 3 nodes, so we'll expect to see at most 2 nodes deleting at one time.\n\t\t\tnodePool.Spec.Disruption.Budgets = []karpv1.Budget{{\n\t\t\t\tNodes: \"50%\",\n\t\t\t}}\n\t\t\tnumPods = 9\n\t\t\tdep = coretest.Deployment(coretest.DeploymentOptions{\n\t\t\t\tReplicas: numPods,\n\t\t\t\tPodOptions: coretest.PodOptions{\n\t\t\t\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\t\t\t\tLabels: map[string]string{\"app\": \"large-app\"},\n\t\t\t\t\t},\n\t\t\t\t\t// Each 2xlarge has 8 cpu, so each node should fit no more than 3 pods.\n\t\t\t\t\tResourceRequirements: corev1.ResourceRequirements{\n\t\t\t\t\t\tRequests: corev1.ResourceList{\n\t\t\t\t\t\t\tcorev1.ResourceCPU: resource.MustParse(\"2100m\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t})\n\t\t\tselector = labels.SelectorFromSet(dep.Spec.Selector.MatchLabels)\n\t\t\tenv.ExpectCreated(nodeClass, nodePool, dep)\n\n\t\t\tenv.EventuallyExpectCreatedNodeClaimCount(\"==\", 3)\n\t\t\tnodes := env.EventuallyExpectCreatedNodeCount(\"==\", 3)\n\t\t\tenv.EventuallyExpectHealthyPodCount(selector, int(numPods))\n\n\t\t\tBy(\"scaling down the deployment\")\n\t\t\t// Update the deployment to a third of the replicas.\n\t\t\tdep.Spec.Replicas = lo.ToPtr[int32](3)\n\t\t\tenv.ExpectUpdated(dep)\n\n\t\t\tenv.ForcePodsToSpread(nodes...)\n\t\t\tenv.EventuallyExpectHealthyPodCount(selector, 3)\n\n\t\t\tBy(\"cordoning and adding finalizer to the nodes\")\n\t\t\t// Add a finalizer to each node so that we can stop termination disruptions\n\t\t\tfor _, node := range nodes {\n\t\t\t\tExpect(env.Client.Get(env.Context, client.ObjectKeyFromObject(node), node)).To(Succeed())\n\t\t\t\tnode.Finalizers = append(node.Finalizers, common.TestingFinalizer)\n\t\t\t\tenv.ExpectUpdated(node)\n\t\t\t}\n\n\t\t\tBy(\"enabling consolidation\")\n\t\t\tnodePool.Spec.Disruption.ConsolidateAfter = karpv1.MustParseNillableDuration(\"0s\")\n\t\t\tenv.ExpectUpdated(nodePool)\n\n\t\t\tenv.ConsistentlyExpectDisruptionsUntilNoneLeft(3, 2, 10*time.Minute)\n\t\t})\n\t\tIt(\"should respect budgets for non-empty replace consolidation\", func() {\n\t\t\tappLabels := map[string]string{\"app\": \"large-app\"}\n\t\t\t// This test will hold consolidation until we are ready to execute it\n\t\t\tnodePool.Spec.Disruption.ConsolidateAfter = karpv1.MustParseNillableDuration(\"Never\")\n\n\t\t\tnodePool = coretest.ReplaceRequirements(nodePool,\n\t\t\t\tkarpv1.NodeSelectorRequirementWithMinValues{\n\t\t\t\t\tKey:      v1.LabelInstanceSize,\n\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\tValues:   []string{\"xlarge\", \"2xlarge\"},\n\t\t\t\t},\n\t\t\t\t// Add an Exists operator so that we can select on a fake partition later\n\t\t\t\tkarpv1.NodeSelectorRequirementWithMinValues{\n\t\t\t\t\tKey:      \"test-partition\",\n\t\t\t\t\tOperator: corev1.NodeSelectorOpExists,\n\t\t\t\t},\n\t\t\t)\n\t\t\tnodePool.Labels = appLabels\n\t\t\t// We're expecting to create 5 nodes, so we'll expect to see at most 3 nodes deleting at one time.\n\t\t\tnodePool.Spec.Disruption.Budgets = []karpv1.Budget{{\n\t\t\t\tNodes: \"3\",\n\t\t\t}}\n\n\t\t\tds := coretest.DaemonSet(coretest.DaemonSetOptions{\n\t\t\t\tSelector: appLabels,\n\t\t\t\tPodOptions: coretest.PodOptions{\n\t\t\t\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\t\t\t\tLabels: appLabels,\n\t\t\t\t\t},\n\t\t\t\t\t// Each 2xlarge has 8 cpu, so each node should fit no more than 1 pod since each node will have.\n\t\t\t\t\t// an equivalently sized daemonset\n\t\t\t\t\tResourceRequirements: corev1.ResourceRequirements{\n\t\t\t\t\t\tRequests: corev1.ResourceList{\n\t\t\t\t\t\t\tcorev1.ResourceCPU: resource.MustParse(\"3\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t})\n\n\t\t\tenv.ExpectCreated(ds)\n\n\t\t\t// Make 5 pods all with different deployments and different test partitions, so that each pod can be put\n\t\t\t// on a separate node.\n\t\t\tselector = labels.SelectorFromSet(appLabels)\n\t\t\tnumPods = 5\n\t\t\tdeployments := make([]*appsv1.Deployment, numPods)\n\t\t\tfor i := range lo.Range(int(numPods)) {\n\t\t\t\tdeployments[i] = coretest.Deployment(coretest.DeploymentOptions{\n\t\t\t\t\tReplicas: 1,\n\t\t\t\t\tPodOptions: coretest.PodOptions{\n\t\t\t\t\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\t\t\t\t\tLabels: appLabels,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tNodeSelector: map[string]string{\"test-partition\": fmt.Sprintf(\"%d\", i)},\n\t\t\t\t\t\t// Each 2xlarge has 8 cpu, so each node should fit no more than 1 pod since each node will have.\n\t\t\t\t\t\t// an equivalently sized daemonset\n\t\t\t\t\t\tResourceRequirements: corev1.ResourceRequirements{\n\t\t\t\t\t\t\tRequests: corev1.ResourceList{\n\t\t\t\t\t\t\t\tcorev1.ResourceCPU: resource.MustParse(\"3\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tenv.ExpectCreated(nodeClass, nodePool, deployments[0], deployments[1], deployments[2], deployments[3], deployments[4])\n\n\t\t\toriginalNodeClaims := env.EventuallyExpectCreatedNodeClaimCount(\"==\", 5)\n\t\t\toriginalNodes := env.EventuallyExpectCreatedNodeCount(\"==\", 5)\n\n\t\t\t// Check that all daemonsets and deployment pods are online\n\t\t\tenv.EventuallyExpectHealthyPodCount(selector, int(numPods)*2)\n\n\t\t\tBy(\"cordoning and adding finalizer to the nodes\")\n\t\t\t// Add a finalizer to each node so that we can stop termination disruptions\n\t\t\tfor _, node := range originalNodes {\n\t\t\t\tExpect(env.Client.Get(env.Context, client.ObjectKeyFromObject(node), node)).To(Succeed())\n\t\t\t\tnode.Finalizers = append(node.Finalizers, common.TestingFinalizer)\n\t\t\t\tenv.ExpectUpdated(node)\n\t\t\t}\n\n\t\t\t// Delete the daemonset so that the nodes can be consolidated to smaller size\n\t\t\tenv.ExpectDeleted(ds)\n\t\t\t// Check that all daemonsets and deployment pods are online\n\t\t\tenv.EventuallyExpectHealthyPodCount(selector, int(numPods))\n\n\t\t\tBy(\"enabling consolidation\")\n\t\t\tnodePool.Spec.Disruption.ConsolidateAfter = karpv1.MustParseNillableDuration(\"0s\")\n\t\t\tenv.ExpectUpdated(nodePool)\n\n\t\t\t// Ensure that we get three nodes tainted, and they have overlap during the consolidation\n\t\t\tenv.EventuallyExpectTaintedNodeCount(\"==\", 3)\n\t\t\tenv.EventuallyExpectLaunchedNodeClaimCount(\"==\", 8)\n\t\t\tenv.EventuallyExpectNodeCount(\"==\", 8)\n\n\t\t\tenv.ConsistentlyExpectDisruptionsUntilNoneLeft(5, 3, 10*time.Minute)\n\n\t\t\tfor _, node := range originalNodes {\n\t\t\t\tExpect(env.ExpectTestingFinalizerRemoved(node)).To(Succeed())\n\t\t\t}\n\t\t\tfor _, nodeClaim := range originalNodeClaims {\n\t\t\t\tExpect(env.ExpectTestingFinalizerRemoved(nodeClaim)).To(Succeed())\n\t\t\t}\n\t\t\t// Eventually expect all the nodes to be rolled and completely removed\n\t\t\t// Since this completes the disruption operation, this also ensures that we aren't leaking nodes into subsequent\n\t\t\t// tests since nodeclaims that are actively replacing but haven't brought-up nodes yet can register nodes later\n\t\t\tenv.EventuallyExpectNotFound(lo.Map(originalNodes, func(n *corev1.Node, _ int) client.Object { return n })...)\n\t\t\tenv.EventuallyExpectNotFound(lo.Map(originalNodeClaims, func(n *karpv1.NodeClaim, _ int) client.Object { return n })...)\n\t\t\tenv.ExpectNodeClaimCount(\"==\", 5)\n\t\t\tenv.ExpectNodeCount(\"==\", 5)\n\t\t})\n\t\tIt(\"should not allow consolidation if the budget is fully blocking\", func() {\n\t\t\t// We're going to define a budget that doesn't allow any consolidation to happen\n\t\t\tnodePool.Spec.Disruption.Budgets = []karpv1.Budget{{\n\t\t\t\tNodes: \"0\",\n\t\t\t}}\n\n\t\t\t// Hostname anti-affinity to require one pod on each node\n\t\t\tdep.Spec.Template.Spec.Affinity = &corev1.Affinity{\n\t\t\t\tPodAntiAffinity: &corev1.PodAntiAffinity{\n\t\t\t\t\tRequiredDuringSchedulingIgnoredDuringExecution: []corev1.PodAffinityTerm{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tLabelSelector: dep.Spec.Selector,\n\t\t\t\t\t\t\tTopologyKey:   corev1.LabelHostname,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}\n\t\t\tenv.ExpectCreated(nodeClass, nodePool, dep)\n\n\t\t\tenv.EventuallyExpectCreatedNodeClaimCount(\"==\", 5)\n\t\t\tenv.EventuallyExpectCreatedNodeCount(\"==\", 5)\n\t\t\tenv.EventuallyExpectHealthyPodCount(selector, int(numPods))\n\n\t\t\tdep.Spec.Replicas = lo.ToPtr[int32](1)\n\t\t\tBy(\"making the nodes empty\")\n\t\t\t// Update the deployment to only contain 1 replica.\n\t\t\tenv.ExpectUpdated(dep)\n\n\t\t\tenv.ConsistentlyExpectNoDisruptions(5, time.Minute)\n\t\t})\n\t\tIt(\"should not allow consolidation if the budget is fully blocking during a scheduled time\", func() {\n\t\t\t// We're going to define a budget that doesn't allow any drift to happen\n\t\t\t// This is going to be on a schedule that only lasts 30 minutes, whose window starts 15 minutes before\n\t\t\t// the current time and extends 15 minutes past the current time\n\t\t\t// Times need to be in UTC since the karpenter containers were built in UTC time\n\t\t\twindowStart := time.Now().Add(-time.Minute * 15).UTC()\n\t\t\tnodePool.Spec.Disruption.Budgets = []karpv1.Budget{{\n\t\t\t\tNodes:    \"0\",\n\t\t\t\tSchedule: lo.ToPtr(fmt.Sprintf(\"%d %d * * *\", windowStart.Minute(), windowStart.Hour())),\n\t\t\t\tDuration: &metav1.Duration{Duration: time.Minute * 30},\n\t\t\t}}\n\n\t\t\t// Hostname anti-affinity to require one pod on each node\n\t\t\tdep.Spec.Template.Spec.Affinity = &corev1.Affinity{\n\t\t\t\tPodAntiAffinity: &corev1.PodAntiAffinity{\n\t\t\t\t\tRequiredDuringSchedulingIgnoredDuringExecution: []corev1.PodAffinityTerm{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tLabelSelector: dep.Spec.Selector,\n\t\t\t\t\t\t\tTopologyKey:   corev1.LabelHostname,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}\n\t\t\tenv.ExpectCreated(nodeClass, nodePool, dep)\n\n\t\t\tenv.EventuallyExpectCreatedNodeClaimCount(\"==\", 5)\n\t\t\tenv.EventuallyExpectCreatedNodeCount(\"==\", 5)\n\t\t\tenv.EventuallyExpectHealthyPodCount(selector, int(numPods))\n\n\t\t\tdep.Spec.Replicas = lo.ToPtr[int32](1)\n\t\t\tBy(\"making the nodes empty\")\n\t\t\t// Update the deployment to only contain 1 replica.\n\t\t\tenv.ExpectUpdated(dep)\n\n\t\t\tenv.ConsistentlyExpectNoDisruptions(5, time.Minute)\n\t\t})\n\t})\n\tDescribeTable(\"should consolidate nodes (delete)\", Label(debug.NoWatch), Label(debug.NoEvents),\n\t\tfunc(spotToSpot bool) {\n\t\t\tnodePool := coretest.NodePool(karpv1.NodePool{\n\t\t\t\tSpec: karpv1.NodePoolSpec{\n\t\t\t\t\tDisruption: karpv1.Disruption{\n\t\t\t\t\t\tConsolidationPolicy: karpv1.ConsolidationPolicyWhenEmptyOrUnderutilized,\n\t\t\t\t\t\t// Disable Consolidation until we're ready\n\t\t\t\t\t\tConsolidateAfter: karpv1.MustParseNillableDuration(\"Never\"),\n\t\t\t\t\t},\n\t\t\t\t\tTemplate: karpv1.NodeClaimTemplate{\n\t\t\t\t\t\tSpec: karpv1.NodeClaimTemplateSpec{\n\t\t\t\t\t\t\tRequirements: []karpv1.NodeSelectorRequirementWithMinValues{\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tKey:      karpv1.CapacityTypeLabelKey,\n\t\t\t\t\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\t\t\t\t\tValues:   lo.Ternary(spotToSpot, []string{karpv1.CapacityTypeSpot}, []string{karpv1.CapacityTypeOnDemand}),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tKey:      v1.LabelInstanceSize,\n\t\t\t\t\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\t\t\t\t\tValues:   []string{\"medium\", \"large\", \"xlarge\"},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tKey:      v1.LabelInstanceFamily,\n\t\t\t\t\t\t\t\t\tOperator: corev1.NodeSelectorOpNotIn,\n\t\t\t\t\t\t\t\t\t// remove some cheap burstable and the odd c1 instance types so we have\n\t\t\t\t\t\t\t\t\t// more control over what gets provisioned\n\t\t\t\t\t\t\t\t\t// TODO: jmdeal@ remove a1 from exclusion list once Karpenter implicitly filters a1 instances for AL2023 AMI family (incompatible)\n\t\t\t\t\t\t\t\t\tValues: []string{\"t2\", \"t3\", \"c1\", \"t3a\", \"t4g\", \"a1\"},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tNodeClassRef: &karpv1.NodeClassReference{\n\t\t\t\t\t\t\t\tGroup: object.GVK(nodeClass).Group,\n\t\t\t\t\t\t\t\tKind:  object.GVK(nodeClass).Kind,\n\t\t\t\t\t\t\t\tName:  nodeClass.Name,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t})\n\n\t\t\tvar numPods int32 = 100\n\t\t\tdep := coretest.Deployment(coretest.DeploymentOptions{\n\t\t\t\tReplicas: numPods,\n\t\t\t\tPodOptions: coretest.PodOptions{\n\t\t\t\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\t\t\t\tLabels: map[string]string{\"app\": \"large-app\"},\n\t\t\t\t\t},\n\t\t\t\t\tResourceRequirements: corev1.ResourceRequirements{\n\t\t\t\t\t\tRequests: corev1.ResourceList{corev1.ResourceCPU: resource.MustParse(\"1\")},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t})\n\n\t\t\tselector := labels.SelectorFromSet(dep.Spec.Selector.MatchLabels)\n\t\t\tenv.ExpectCreatedNodeCount(\"==\", 0)\n\t\t\tenv.ExpectCreated(nodePool, nodeClass, dep)\n\n\t\t\tenv.EventuallyExpectHealthyPodCount(selector, int(numPods))\n\n\t\t\t// reduce the number of pods by 60%\n\t\t\tdep.Spec.Replicas = aws.Int32(40)\n\t\t\tenv.ExpectUpdated(dep)\n\t\t\tenv.EventuallyExpectAvgUtilization(corev1.ResourceCPU, \"<\", 0.5)\n\n\t\t\t// Enable consolidation as WhenEmptyOrUnderutilized doesn't allow a consolidateAfter value\n\t\t\tnodePool.Spec.Disruption.ConsolidateAfter = karpv1.MustParseNillableDuration(\"0s\")\n\t\t\tenv.ExpectUpdated(nodePool)\n\n\t\t\t// With consolidation enabled, we now must delete nodes\n\t\t\tenv.EventuallyExpectAvgUtilization(corev1.ResourceCPU, \">\", 0.6)\n\n\t\t\tenv.ExpectDeleted(dep)\n\t\t},\n\t\tEntry(\"if the nodes are on-demand nodes\", false),\n\t\tEntry(\"if the nodes are spot nodes\", true),\n\t)\n\tDescribeTable(\"should consolidate nodes (replace)\",\n\t\tfunc(spotToSpot bool) {\n\t\t\tnodePool := coretest.NodePool(karpv1.NodePool{\n\t\t\t\tSpec: karpv1.NodePoolSpec{\n\t\t\t\t\tDisruption: karpv1.Disruption{\n\t\t\t\t\t\tConsolidationPolicy: karpv1.ConsolidationPolicyWhenEmptyOrUnderutilized,\n\t\t\t\t\t\t// Disable Consolidation until we're ready\n\t\t\t\t\t\tConsolidateAfter: karpv1.MustParseNillableDuration(\"Never\"),\n\t\t\t\t\t},\n\t\t\t\t\tTemplate: karpv1.NodeClaimTemplate{\n\t\t\t\t\t\tSpec: karpv1.NodeClaimTemplateSpec{\n\t\t\t\t\t\t\tRequirements: []karpv1.NodeSelectorRequirementWithMinValues{\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tKey:      karpv1.CapacityTypeLabelKey,\n\t\t\t\t\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\t\t\t\t\tValues:   lo.Ternary(spotToSpot, []string{karpv1.CapacityTypeSpot}, []string{karpv1.CapacityTypeOnDemand}),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tKey:      v1.LabelInstanceSize,\n\t\t\t\t\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\t\t\t\t\tValues:   []string{\"large\", \"2xlarge\"},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tKey:      v1.LabelInstanceFamily,\n\t\t\t\t\t\t\t\t\tOperator: corev1.NodeSelectorOpNotIn,\n\t\t\t\t\t\t\t\t\t// remove some cheap burstable and the odd c1 / a1 instance types so we have\n\t\t\t\t\t\t\t\t\t// more control over what gets provisioned\n\t\t\t\t\t\t\t\t\tValues: []string{\"t2\", \"t3\", \"c1\", \"t3a\", \"t4g\", \"a1\"},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t// Specify Linux in the NodePool to filter out Windows only DS when discovering DS overhead\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tKey:      corev1.LabelOSStable,\n\t\t\t\t\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\t\t\t\t\tValues:   []string{string(corev1.Linux)},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tNodeClassRef: &karpv1.NodeClassReference{\n\t\t\t\t\t\t\t\tGroup: object.GVK(nodeClass).Group,\n\t\t\t\t\t\t\t\tKind:  object.GVK(nodeClass).Kind,\n\t\t\t\t\t\t\t\tName:  nodeClass.Name,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t})\n\n\t\t\tvar numPods int32 = 3\n\t\t\tlargeDep := coretest.Deployment(coretest.DeploymentOptions{\n\t\t\t\tReplicas: numPods,\n\t\t\t\tPodOptions: coretest.PodOptions{\n\t\t\t\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\t\t\t\tLabels: map[string]string{\"app\": \"large-app\"},\n\t\t\t\t\t},\n\t\t\t\t\tTopologySpreadConstraints: []corev1.TopologySpreadConstraint{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tMaxSkew:           1,\n\t\t\t\t\t\t\tTopologyKey:       corev1.LabelHostname,\n\t\t\t\t\t\t\tWhenUnsatisfiable: corev1.DoNotSchedule,\n\t\t\t\t\t\t\tLabelSelector: &metav1.LabelSelector{\n\t\t\t\t\t\t\t\tMatchLabels: map[string]string{\n\t\t\t\t\t\t\t\t\t\"app\": \"large-app\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tResourceRequirements: corev1.ResourceRequirements{\n\t\t\t\t\t\tRequests: corev1.ResourceList{corev1.ResourceCPU: resource.MustParse(\"4\")},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t})\n\t\t\tsmallDep := coretest.Deployment(coretest.DeploymentOptions{\n\t\t\t\tReplicas: numPods,\n\t\t\t\tPodOptions: coretest.PodOptions{\n\t\t\t\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\t\t\t\tLabels: map[string]string{\"app\": \"small-app\"},\n\t\t\t\t\t},\n\t\t\t\t\tTopologySpreadConstraints: []corev1.TopologySpreadConstraint{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tMaxSkew:           1,\n\t\t\t\t\t\t\tTopologyKey:       corev1.LabelHostname,\n\t\t\t\t\t\t\tWhenUnsatisfiable: corev1.DoNotSchedule,\n\t\t\t\t\t\t\tLabelSelector: &metav1.LabelSelector{\n\t\t\t\t\t\t\t\tMatchLabels: map[string]string{\n\t\t\t\t\t\t\t\t\t\"app\": \"small-app\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tResourceRequirements: corev1.ResourceRequirements{\n\t\t\t\t\t\tRequests: corev1.ResourceList{\n\t\t\t\t\t\t\tcorev1.ResourceCPU: func() resource.Quantity {\n\t\t\t\t\t\t\t\tdsOverhead := env.GetDaemonSetOverhead(nodePool)\n\t\t\t\t\t\t\t\tbase := lo.ToPtr(resource.MustParse(\"1800m\"))\n\t\t\t\t\t\t\t\tbase.Sub(*dsOverhead.Cpu())\n\t\t\t\t\t\t\t\treturn *base\n\t\t\t\t\t\t\t}(),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t})\n\n\t\t\tselector := labels.SelectorFromSet(largeDep.Spec.Selector.MatchLabels)\n\t\t\tenv.ExpectCreatedNodeCount(\"==\", 0)\n\t\t\tenv.ExpectCreated(nodePool, nodeClass, largeDep, smallDep)\n\n\t\t\tenv.EventuallyExpectHealthyPodCount(selector, int(numPods))\n\n\t\t\t// 3 nodes due to the anti-affinity rules\n\t\t\tenv.ExpectCreatedNodeCount(\"==\", 3)\n\n\t\t\t// scaling down the large deployment leaves only small pods on each node\n\t\t\tlargeDep.Spec.Replicas = aws.Int32(0)\n\t\t\tenv.ExpectUpdated(largeDep)\n\t\t\tenv.EventuallyExpectAvgUtilization(corev1.ResourceCPU, \"<\", 0.5)\n\n\t\t\tnodePool.Spec.Disruption.ConsolidateAfter = karpv1.MustParseNillableDuration(\"0s\")\n\t\t\tenv.ExpectUpdated(nodePool)\n\n\t\t\t// With consolidation enabled, we now must replace each node in turn to consolidate due to the anti-affinity\n\t\t\t// rules on the smaller deployment.  The 2xl nodes should go to a large\n\t\t\tenv.EventuallyExpectAvgUtilization(corev1.ResourceCPU, \">\", 0.8)\n\n\t\t\tvar nodes corev1.NodeList\n\t\t\tExpect(env.Client.List(env.Context, &nodes)).To(Succeed())\n\t\t\tnumLargeNodes := 0\n\t\t\tnumOtherNodes := 0\n\t\t\tfor _, n := range nodes.Items {\n\t\t\t\t// only count the nodes created by the provisoiner\n\t\t\t\tif n.Labels[karpv1.NodePoolLabelKey] != nodePool.Name {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif strings.HasSuffix(n.Labels[corev1.LabelInstanceTypeStable], \".large\") {\n\t\t\t\t\tnumLargeNodes++\n\t\t\t\t} else {\n\t\t\t\t\tnumOtherNodes++\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// all of the 2xlarge nodes should have been replaced with large instance types\n\t\t\tExpect(numLargeNodes).To(Equal(3))\n\t\t\t// and we should have no other nodes\n\t\t\tExpect(numOtherNodes).To(Equal(0))\n\n\t\t\tenv.ExpectDeleted(largeDep, smallDep)\n\t\t},\n\t\tEntry(\"if the nodes are on-demand nodes\", false),\n\t\tEntry(\"if the nodes are spot nodes\", true),\n\t)\n\tIt(\"should consolidate on-demand nodes to spot (replace)\", func() {\n\t\tnodePool := coretest.NodePool(karpv1.NodePool{\n\t\t\tSpec: karpv1.NodePoolSpec{\n\t\t\t\tDisruption: karpv1.Disruption{\n\t\t\t\t\tConsolidationPolicy: karpv1.ConsolidationPolicyWhenEmptyOrUnderutilized,\n\t\t\t\t\t// Disable Consolidation until we're ready\n\t\t\t\t\tConsolidateAfter: karpv1.MustParseNillableDuration(\"Never\"),\n\t\t\t\t},\n\t\t\t\tTemplate: karpv1.NodeClaimTemplate{\n\t\t\t\t\tSpec: karpv1.NodeClaimTemplateSpec{\n\t\t\t\t\t\tRequirements: []karpv1.NodeSelectorRequirementWithMinValues{\n\t\t\t\t\t\t\t{\n\n\t\t\t\t\t\t\t\tKey:      karpv1.CapacityTypeLabelKey,\n\t\t\t\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\t\t\t\tValues:   []string{karpv1.CapacityTypeOnDemand},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tKey:      v1.LabelInstanceSize,\n\t\t\t\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\t\t\t\tValues:   []string{\"large\"},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tKey:      v1.LabelInstanceFamily,\n\t\t\t\t\t\t\t\tOperator: corev1.NodeSelectorOpNotIn,\n\t\t\t\t\t\t\t\t// remove some cheap burstable and the odd c1 / a1 instance types so we have\n\t\t\t\t\t\t\t\t// more control over what gets provisioned\n\t\t\t\t\t\t\t\tValues: []string{\"t2\", \"t3\", \"c1\", \"t3a\", \"t4g\", \"a1\"},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tNodeClassRef: &karpv1.NodeClassReference{\n\t\t\t\t\t\t\tGroup: object.GVK(nodeClass).Group,\n\t\t\t\t\t\t\tKind:  object.GVK(nodeClass).Kind,\n\t\t\t\t\t\t\tName:  nodeClass.Name,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\n\t\tvar numPods int32 = 2\n\t\tsmallDep := coretest.Deployment(coretest.DeploymentOptions{\n\t\t\tReplicas: numPods,\n\t\t\tPodOptions: coretest.PodOptions{\n\t\t\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\t\t\tLabels: map[string]string{\"app\": \"small-app\"},\n\t\t\t\t},\n\t\t\t\tTopologySpreadConstraints: []corev1.TopologySpreadConstraint{\n\t\t\t\t\t{\n\t\t\t\t\t\tMaxSkew:           1,\n\t\t\t\t\t\tTopologyKey:       corev1.LabelHostname,\n\t\t\t\t\t\tWhenUnsatisfiable: corev1.DoNotSchedule,\n\t\t\t\t\t\tLabelSelector: &metav1.LabelSelector{\n\t\t\t\t\t\t\tMatchLabels: map[string]string{\n\t\t\t\t\t\t\t\t\"app\": \"small-app\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tResourceRequirements: corev1.ResourceRequirements{\n\t\t\t\t\tRequests: corev1.ResourceList{corev1.ResourceCPU: func() resource.Quantity {\n\t\t\t\t\t\tdsOverhead := env.GetDaemonSetOverhead(nodePool)\n\t\t\t\t\t\tbase := lo.ToPtr(resource.MustParse(\"1800m\"))\n\t\t\t\t\t\tbase.Sub(*dsOverhead.Cpu())\n\t\t\t\t\t\treturn *base\n\t\t\t\t\t}(),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\n\t\tselector := labels.SelectorFromSet(smallDep.Spec.Selector.MatchLabels)\n\t\tenv.ExpectCreatedNodeCount(\"==\", 0)\n\t\tenv.ExpectCreated(nodePool, nodeClass, smallDep)\n\n\t\tenv.EventuallyExpectHealthyPodCount(selector, int(numPods))\n\t\tenv.ExpectCreatedNodeCount(\"==\", int(numPods))\n\n\t\t// Enable spot capacity type after the on-demand node is provisioned\n\t\t// Expect the node to consolidate to a spot instance as it will be a cheaper\n\t\t// instance than on-demand\n\t\tnodePool.Spec.Disruption.ConsolidateAfter = karpv1.MustParseNillableDuration(\"0s\")\n\t\tcoretest.ReplaceRequirements(nodePool,\n\t\t\tkarpv1.NodeSelectorRequirementWithMinValues{\n\t\t\t\tKey:      karpv1.CapacityTypeLabelKey,\n\t\t\t\tOperator: corev1.NodeSelectorOpExists,\n\t\t\t},\n\t\t\tkarpv1.NodeSelectorRequirementWithMinValues{\n\t\t\t\tKey:      v1.LabelInstanceSize,\n\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\tValues:   []string{\"large\"},\n\t\t\t},\n\t\t)\n\t\tenv.ExpectUpdated(nodePool)\n\n\t\t// Eventually expect the on-demand nodes to be consolidated into\n\t\t// spot nodes after some time\n\t\tEventually(func(g Gomega) {\n\t\t\tvar nodes corev1.NodeList\n\t\t\tExpect(env.Client.List(env.Context, &nodes)).To(Succeed())\n\t\t\tvar spotNodes []*corev1.Node\n\t\t\tvar otherNodes []*corev1.Node\n\t\t\tfor i, n := range nodes.Items {\n\t\t\t\t// only count the nodes created by the nodePool\n\t\t\t\tif n.Labels[karpv1.NodePoolLabelKey] != nodePool.Name {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif n.Labels[karpv1.CapacityTypeLabelKey] == karpv1.CapacityTypeSpot {\n\t\t\t\t\tspotNodes = append(spotNodes, &nodes.Items[i])\n\t\t\t\t} else {\n\t\t\t\t\totherNodes = append(otherNodes, &nodes.Items[i])\n\t\t\t\t}\n\t\t\t}\n\t\t\t// all the on-demand nodes should have been replaced with spot nodes\n\t\t\tmsg := fmt.Sprintf(\"node names, spot= %v, other = %v\", common.NodeNames(spotNodes), common.NodeNames(otherNodes))\n\t\t\tg.Expect(len(spotNodes)).To(BeNumerically(\"==\", numPods), msg)\n\t\t\t// and we should have no other nodes\n\t\t\tg.Expect(len(otherNodes)).To(BeNumerically(\"==\", 0), msg)\n\t\t}, time.Minute*10).Should(Succeed())\n\n\t\tenv.ExpectDeleted(smallDep)\n\t})\n\tContext(\"Capacity Reservations\", func() {\n\t\tvar largeCapacityReservationID, xlargeCapacityReservationID string\n\t\tvar nodePool *karpv1.NodePool\n\t\tBeforeAll(func() {\n\t\t\tlargeCapacityReservationID = environmentaws.ExpectCapacityReservationCreated(\n\t\t\t\tenv.Context,\n\t\t\t\tenv.EC2API,\n\t\t\t\tec2types.InstanceTypeM5Large,\n\t\t\t\tenv.ZoneInfo[0].Zone,\n\t\t\t\t1,\n\t\t\t\tnil,\n\t\t\t\tnil,\n\t\t\t)\n\t\t\txlargeCapacityReservationID = environmentaws.ExpectCapacityReservationCreated(\n\t\t\t\tenv.Context,\n\t\t\t\tenv.EC2API,\n\t\t\t\tec2types.InstanceTypeM5Xlarge,\n\t\t\t\tenv.ZoneInfo[0].Zone,\n\t\t\t\t1,\n\t\t\t\tnil,\n\t\t\t\tnil,\n\t\t\t)\n\t\t})\n\t\tAfterAll(func() {\n\t\t\tenvironmentaws.ExpectCapacityReservationsCanceled(env.Context, env.EC2API, largeCapacityReservationID, xlargeCapacityReservationID)\n\t\t})\n\t\tBeforeEach(func() {\n\t\t\tnodePool = coretest.NodePool(karpv1.NodePool{\n\t\t\t\tSpec: karpv1.NodePoolSpec{\n\t\t\t\t\tDisruption: karpv1.Disruption{\n\t\t\t\t\t\tConsolidationPolicy: karpv1.ConsolidationPolicyWhenEmptyOrUnderutilized,\n\t\t\t\t\t\tConsolidateAfter:    karpv1.MustParseNillableDuration(\"0s\"),\n\t\t\t\t\t},\n\t\t\t\t\tTemplate: karpv1.NodeClaimTemplate{\n\t\t\t\t\t\tSpec: karpv1.NodeClaimTemplateSpec{\n\t\t\t\t\t\t\tRequirements: []karpv1.NodeSelectorRequirementWithMinValues{\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tKey:      karpv1.CapacityTypeLabelKey,\n\t\t\t\t\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\t\t\t\t\tValues:   []string{karpv1.CapacityTypeOnDemand, karpv1.CapacityTypeReserved},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tNodeClassRef: &karpv1.NodeClassReference{\n\t\t\t\t\t\t\t\tGroup: object.GVK(nodeClass).Group,\n\t\t\t\t\t\t\t\tKind:  object.GVK(nodeClass).Kind,\n\t\t\t\t\t\t\t\tName:  nodeClass.Name,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t})\n\t\t})\n\t\tIt(\"should consolidate into a reserved offering\", func() {\n\t\t\tdep := coretest.Deployment(coretest.DeploymentOptions{\n\t\t\t\tPodOptions: coretest.PodOptions{\n\t\t\t\t\tNodeRequirements: []corev1.NodeSelectorRequirement{{\n\t\t\t\t\t\tKey:      corev1.LabelInstanceTypeStable,\n\t\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\t\tValues: []string{\n\t\t\t\t\t\t\t// Should result in an m5.large initially\n\t\t\t\t\t\t\tstring(ec2types.InstanceTypeM5Large),\n\t\t\t\t\t\t\t// Should consolidate to the m5.xlarge when we add the reservation to the nodeclass\n\t\t\t\t\t\t\tstring(ec2types.InstanceTypeM5Xlarge),\n\t\t\t\t\t\t},\n\t\t\t\t\t}},\n\t\t\t\t},\n\t\t\t\tReplicas: 1,\n\t\t\t})\n\t\t\tenv.ExpectCreated(nodePool, nodeClass, dep)\n\t\t\tenv.EventuallyExpectNodeClaimsReady(env.EventuallyExpectLaunchedNodeClaimCount(\"==\", 1)...)\n\t\t\tn := env.EventuallyExpectNodeCount(\"==\", int(1))[0]\n\t\t\tExpect(n.Labels).To(HaveKeyWithValue(corev1.LabelInstanceTypeStable, string(ec2types.InstanceTypeM5Large)))\n\t\t\tExpect(n.Labels).To(HaveKeyWithValue(karpv1.CapacityTypeLabelKey, karpv1.CapacityTypeOnDemand))\n\n\t\t\tnodeClass.Spec.CapacityReservationSelectorTerms = []v1.CapacityReservationSelectorTerm{{ID: xlargeCapacityReservationID}}\n\t\t\tenv.ExpectUpdated(nodeClass)\n\n\t\t\t// Eventually expect the m5.large on-demand node to be replaced with an m5.xlarge reserved node. We should prioritize\n\t\t\t// the reserved instance since it's already been paid for.\n\t\t\tEventually(func(g Gomega) {\n\t\t\t\tvar nodes corev1.NodeList\n\t\t\t\tg.Expect(env.Client.List(env.Context, &nodes)).To(Succeed())\n\t\t\t\tfiltered := lo.Filter(nodes.Items, func(n corev1.Node, _ int) bool {\n\t\t\t\t\tif val, ok := n.Labels[karpv1.NodePoolLabelKey]; !ok || val != nodePool.Name {\n\t\t\t\t\t\treturn false\n\t\t\t\t\t}\n\t\t\t\t\treturn true\n\t\t\t\t})\n\t\t\t\tg.Expect(filtered).To(HaveLen(1))\n\n\t\t\t\tg.Expect(filtered[0].Labels).To(HaveKeyWithValue(corev1.LabelInstanceTypeStable, string(ec2types.InstanceTypeM5Xlarge)))\n\t\t\t\tg.Expect(filtered[0].Labels).To(HaveKeyWithValue(karpv1.CapacityTypeLabelKey, karpv1.CapacityTypeReserved))\n\t\t\t\tg.Expect(filtered[0].Labels).To(HaveKeyWithValue(v1.LabelCapacityReservationID, xlargeCapacityReservationID))\n\t\t\t}, time.Minute*10).Should(Succeed())\n\t\t})\n\t\tIt(\"should consolidate between reserved offerings\", func() {\n\t\t\tdep := coretest.Deployment(coretest.DeploymentOptions{\n\t\t\t\tPodOptions: coretest.PodOptions{\n\t\t\t\t\tNodeRequirements: []corev1.NodeSelectorRequirement{{\n\t\t\t\t\t\tKey:      corev1.LabelInstanceTypeStable,\n\t\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\t\tValues: []string{\n\t\t\t\t\t\t\tstring(ec2types.InstanceTypeM5Large),\n\t\t\t\t\t\t\tstring(ec2types.InstanceTypeM5Xlarge),\n\t\t\t\t\t\t},\n\t\t\t\t\t}},\n\t\t\t\t},\n\t\t\t\tReplicas: 1,\n\t\t\t})\n\n\t\t\t// Start by only enabling the m5.xlarge capacity reservation, ensuring it's provisioned\n\t\t\tnodeClass.Spec.CapacityReservationSelectorTerms = []v1.CapacityReservationSelectorTerm{{ID: xlargeCapacityReservationID}}\n\t\t\tenv.ExpectCreated(nodePool, nodeClass, dep)\n\t\t\tenv.EventuallyExpectNodeClaimsReady(env.EventuallyExpectLaunchedNodeClaimCount(\"==\", 1)...)\n\t\t\tn := env.EventuallyExpectNodeCount(\"==\", int(1))[0]\n\t\t\tExpect(n.Labels).To(HaveKeyWithValue(corev1.LabelInstanceTypeStable, string(ec2types.InstanceTypeM5Xlarge)))\n\t\t\tExpect(n.Labels).To(HaveKeyWithValue(karpv1.CapacityTypeLabelKey, karpv1.CapacityTypeReserved))\n\t\t\tExpect(n.Labels).To(HaveKeyWithValue(v1.LabelCapacityReservationID, xlargeCapacityReservationID))\n\n\t\t\t// Add the m5.large capacity reservation to the nodeclass. We should consolidate from the xlarge instance to the large.\n\t\t\tnodeClass.Spec.CapacityReservationSelectorTerms = append(nodeClass.Spec.CapacityReservationSelectorTerms, v1.CapacityReservationSelectorTerm{\n\t\t\t\tID: largeCapacityReservationID,\n\t\t\t})\n\t\t\tenv.ExpectUpdated(nodeClass)\n\t\t\tEventually(func(g Gomega) {\n\t\t\t\tvar nodes corev1.NodeList\n\t\t\t\tg.Expect(env.Client.List(env.Context, &nodes)).To(Succeed())\n\t\t\t\tfiltered := lo.Filter(nodes.Items, func(n corev1.Node, _ int) bool {\n\t\t\t\t\tif val, ok := n.Labels[karpv1.NodePoolLabelKey]; !ok || val != nodePool.Name {\n\t\t\t\t\t\treturn false\n\t\t\t\t\t}\n\t\t\t\t\treturn true\n\t\t\t\t})\n\t\t\t\tg.Expect(filtered).To(HaveLen(1))\n\t\t\t\tg.Expect(filtered[0].Labels).To(HaveKeyWithValue(corev1.LabelInstanceTypeStable, string(ec2types.InstanceTypeM5Large)))\n\t\t\t\tg.Expect(filtered[0].Labels).To(HaveKeyWithValue(karpv1.CapacityTypeLabelKey, karpv1.CapacityTypeReserved))\n\t\t\t\tg.Expect(filtered[0].Labels).To(HaveKeyWithValue(v1.LabelCapacityReservationID, largeCapacityReservationID))\n\t\t\t}, time.Minute*10).Should(Succeed())\n\t\t})\n\t})\n},\n\tEntry(\"MinValuesPolicyBestEffort\", options.MinValuesPolicyBestEffort),\n\tEntry(\"MinValuesPolicyStrict\", options.MinValuesPolicyStrict),\n)\n\nvar _ = Describe(\"Node Overlay\", func() {\n\tvar nodePool *karpv1.NodePool\n\tBeforeEach(func() {\n\t\tnodePool = env.DefaultNodePool(nodeClass)\n\t\tnodePool.Spec.Disruption.ConsolidateAfter = karpv1.MustParseNillableDuration(\"0s\")\n\t})\n\tIt(\"should consolidate a instance that is the cheepest based on a price adjustment node overlay applied\", func() {\n\t\toverlaiedInstanceType := \"m7a.8xlarge\"\n\t\tpod := coretest.Pod(coretest.PodOptions{\n\t\t\tResourceRequirements: corev1.ResourceRequirements{\n\t\t\t\tRequests: corev1.ResourceList{\n\t\t\t\t\tcorev1.ResourceCPU:    resource.MustParse(\"1\"),\n\t\t\t\t\tcorev1.ResourceMemory: resource.MustParse(\"1Gi\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tnodeOverlay := coretest.NodeOverlay(v1alpha1.NodeOverlay{\n\t\t\tSpec: v1alpha1.NodeOverlaySpec{\n\t\t\t\tPriceAdjustment: lo.ToPtr(\"-99.99999999999%\"),\n\t\t\t\tRequirements: []v1alpha1.NodeSelectorRequirement{\n\t\t\t\t\t{\n\t\t\t\t\t\tKey:      corev1.LabelInstanceTypeStable,\n\t\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\t\tValues:   []string{overlaiedInstanceType},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\n\t\tenv.ExpectCreated(nodePool, nodeClass, nodeOverlay, pod)\n\t\tenv.EventuallyExpectHealthy(pod)\n\t\tnodes := env.EventuallyExpectInitializedNodeCount(\"==\", 1)\n\n\t\tinstanceType, foundInstanceType := nodes[0].Labels[corev1.LabelInstanceTypeStable]\n\t\tExpect(foundInstanceType).To(BeTrue())\n\t\tExpect(instanceType).To(Equal(overlaiedInstanceType))\n\n\t\toverlaiedInstanceType = \"c7a.8xlarge\"\n\t\tnodeOverlay = coretest.ReplaceOverlayRequirements(nodeOverlay, v1alpha1.NodeSelectorRequirement{\n\t\t\tKey:      corev1.LabelInstanceTypeStable,\n\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\tValues:   []string{overlaiedInstanceType},\n\t\t})\n\t\tenv.ExpectUpdated(nodeOverlay)\n\n\t\tnodes = env.EventuallyExpectInitializedNodeCount(\"==\", 2)\n\t\tnodes = lo.Filter(nodes, func(n *corev1.Node, _ int) bool {\n\t\t\t_, ok := lo.Find(n.Spec.Taints, func(t corev1.Taint) bool {\n\t\t\t\treturn t.MatchTaint(&karpv1.DisruptedNoScheduleTaint)\n\t\t\t})\n\t\t\treturn !ok\n\t\t})\n\t\tinstanceType, foundInstanceType = nodes[0].Labels[corev1.LabelInstanceTypeStable]\n\t\tExpect(foundInstanceType).To(BeTrue())\n\t\tExpect(instanceType).To(Equal(overlaiedInstanceType))\n\n\t})\n\tIt(\"should consolidate a instance that is the cheepest based on a price override node overlay applied\", func() {\n\t\toverlaiedInstanceType := \"m7a.8xlarge\"\n\t\tpod := coretest.Pod(coretest.PodOptions{\n\t\t\tResourceRequirements: corev1.ResourceRequirements{\n\t\t\t\tRequests: corev1.ResourceList{\n\t\t\t\t\tcorev1.ResourceCPU:    resource.MustParse(\"1\"),\n\t\t\t\t\tcorev1.ResourceMemory: resource.MustParse(\"1Gi\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tnodeOverlay := coretest.NodeOverlay(v1alpha1.NodeOverlay{\n\t\t\tSpec: v1alpha1.NodeOverlaySpec{\n\t\t\t\tPrice: lo.ToPtr(\"0.0000000232\"),\n\t\t\t\tRequirements: []v1alpha1.NodeSelectorRequirement{\n\t\t\t\t\t{\n\t\t\t\t\t\tKey:      corev1.LabelInstanceTypeStable,\n\t\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\t\tValues:   []string{overlaiedInstanceType},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\n\t\tenv.ExpectCreated(nodePool, nodeClass, nodeOverlay, pod)\n\t\tenv.EventuallyExpectHealthy(pod)\n\t\tnodes := env.EventuallyExpectInitializedNodeCount(\"==\", 1)\n\n\t\tinstanceType, foundInstanceType := nodes[0].Labels[corev1.LabelInstanceTypeStable]\n\t\tExpect(foundInstanceType).To(BeTrue())\n\t\tExpect(instanceType).To(Equal(overlaiedInstanceType))\n\n\t\toverlaiedInstanceType = \"c7a.8xlarge\"\n\t\tnodeOverlay = coretest.ReplaceOverlayRequirements(nodeOverlay, v1alpha1.NodeSelectorRequirement{\n\t\t\tKey:      corev1.LabelInstanceTypeStable,\n\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\tValues:   []string{overlaiedInstanceType},\n\t\t})\n\t\tenv.ExpectUpdated(nodeOverlay)\n\n\t\tnodes = env.EventuallyExpectInitializedNodeCount(\"==\", 2)\n\t\tnodes = lo.Filter(nodes, func(n *corev1.Node, _ int) bool {\n\t\t\t_, ok := lo.Find(n.Spec.Taints, func(t corev1.Taint) bool {\n\t\t\t\treturn t.MatchTaint(&karpv1.DisruptedNoScheduleTaint)\n\t\t\t})\n\t\t\treturn !ok\n\t\t})\n\t\tinstanceType, foundInstanceType = nodes[0].Labels[corev1.LabelInstanceTypeStable]\n\t\tExpect(foundInstanceType).To(BeTrue())\n\t\tExpect(instanceType).To(Equal(overlaiedInstanceType))\n\t})\n\tIt(\"should consolidate a node that matches hugepages resource requests\", func() {\n\t\toverlaiedInstanceType := \"c7a.8xlarge\"\n\t\tpod := coretest.Pod(coretest.PodOptions{\n\t\t\tResourceRequirements: corev1.ResourceRequirements{\n\t\t\t\tRequests: corev1.ResourceList{\n\t\t\t\t\tcorev1.ResourceCPU:                   coretest.RandomCPU(),\n\t\t\t\t\tcorev1.ResourceMemory:                coretest.RandomMemory(),\n\t\t\t\t\tcorev1.ResourceName(\"hugepages-2Mi\"): resource.MustParse(\"100Mi\"),\n\t\t\t\t},\n\t\t\t\tLimits: corev1.ResourceList{\n\t\t\t\t\tcorev1.ResourceName(\"hugepages-2Mi\"): resource.MustParse(\"100Mi\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tnodeOverlay := coretest.NodeOverlay(v1alpha1.NodeOverlay{\n\t\t\tSpec: v1alpha1.NodeOverlaySpec{\n\t\t\t\tRequirements: []v1alpha1.NodeSelectorRequirement{\n\t\t\t\t\t{\n\t\t\t\t\t\tKey:      corev1.LabelInstanceTypeStable,\n\t\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\t\tValues:   []string{overlaiedInstanceType},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tCapacity: corev1.ResourceList{\n\t\t\t\t\tcorev1.ResourceName(\"hugepages-2Mi\"): resource.MustParse(\"4Gi\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\n\t\tcontent, err := os.ReadFile(\"testdata/hugepage_userdata_input.sh\")\n\t\tExpect(err).To(BeNil())\n\t\tnodeClass.Spec.UserData = lo.ToPtr(string(content))\n\n\t\tenv.ExpectCreated(nodePool, nodeClass, nodeOverlay, pod)\n\t\tenv.EventuallyExpectHealthy(pod)\n\t\tnodes := env.EventuallyExpectInitializedNodeCount(\"==\", 1)\n\n\t\tinstanceType, foundInstanceType := nodes[0].Labels[corev1.LabelInstanceTypeStable]\n\t\tExpect(foundInstanceType).To(BeTrue())\n\t\tExpect(instanceType).To(Equal(overlaiedInstanceType))\n\n\t\toverlaiedInstanceType = \"c7a.2xlarge\"\n\t\tnodeOverlay = coretest.ReplaceOverlayRequirements(nodeOverlay, v1alpha1.NodeSelectorRequirement{\n\t\t\tKey:      corev1.LabelInstanceTypeStable,\n\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\tValues:   []string{overlaiedInstanceType},\n\t\t})\n\t\tenv.ExpectUpdated(nodeOverlay)\n\n\t\tnodes = env.EventuallyExpectInitializedNodeCount(\"==\", 2)\n\t\tnodes = lo.Filter(nodes, func(n *corev1.Node, _ int) bool {\n\t\t\t_, ok := lo.Find(n.Spec.Taints, func(t corev1.Taint) bool {\n\t\t\t\treturn t.MatchTaint(&karpv1.DisruptedNoScheduleTaint)\n\t\t\t})\n\t\t\treturn !ok\n\t\t})\n\t\tinstanceType, foundInstanceType = nodes[0].Labels[corev1.LabelInstanceTypeStable]\n\t\tExpect(foundInstanceType).To(BeTrue())\n\t\tExpect(instanceType).To(Equal(overlaiedInstanceType))\n\t})\n})\n"
  },
  {
    "path": "test/suites/consolidation/testdata/hugepage_userdata_input.sh",
    "content": "MIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"==MYBOUNDARY==\"\n\n--==MYBOUNDARY==\nContent-Type: text/x-shellscript; charset=\"us-ascii\"\n\n#!/bin/bash -e\n# Check if HugePages is activated\nsudo cat /proc/sys/vm/nr_hugepages\n\n# activate HugePages and set the kernel parameter value to 2048\nsudo sysctl -w vm.nr_hugepages=2048\n\n# Ensure HugePages is allocated after reboot\nsudo echo \"vm.nr_hugepages=2048\" >> /etc/sysctl.conf\nsudo grep Huge /proc/meminfo\necho \"hugepages user data script has finished successfully.\"\n--==MYBOUNDARY=="
  },
  {
    "path": "test/suites/drift/suite_test.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage drift_test\n\nimport (\n\t\"fmt\"\n\t\"testing\"\n\t\"time\"\n\n\tawssdk \"github.com/aws/aws-sdk-go-v2/aws\"\n\t\"github.com/aws/aws-sdk-go-v2/service/ec2\"\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\t\"github.com/aws/aws-sdk-go-v2/service/eks\"\n\t\"github.com/google/uuid\"\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n\t\"github.com/samber/lo\"\n\tappsv1 \"k8s.io/api/apps/v1\"\n\tcorev1 \"k8s.io/api/core/v1\"\n\tmetav1 \"k8s.io/apimachinery/pkg/apis/meta/v1\"\n\t\"k8s.io/apimachinery/pkg/labels\"\n\t\"sigs.k8s.io/controller-runtime/pkg/client\"\n\tkarpv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n\tcoretest \"sigs.k8s.io/karpenter/pkg/test\"\n\t\"sigs.k8s.io/karpenter/pkg/utils/resources\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/test\"\n\t\"github.com/aws/karpenter-provider-aws/test/pkg/environment/aws\"\n)\n\nvar env *aws.Environment\nvar amdAMI string\nvar deprecatedAMI string\nvar nodeClass *v1.EC2NodeClass\nvar nodePool *karpv1.NodePool\n\nfunc TestDrift(t *testing.T) {\n\tRegisterFailHandler(Fail)\n\tBeforeSuite(func() {\n\t\tenv = aws.NewEnvironment(t)\n\t})\n\tAfterSuite(func() {\n\t\tenv.Stop()\n\t})\n\tRunSpecs(t, \"Drift\")\n}\n\nvar _ = BeforeEach(func() {\n\tenv.BeforeEach()\n\tnodeClass = env.DefaultEC2NodeClass()\n\tnodePool = env.DefaultNodePool(nodeClass)\n})\nvar _ = AfterEach(func() { env.Cleanup() })\nvar _ = AfterEach(func() { env.AfterEach() })\n\nvar _ = Describe(\"Drift\", Ordered, func() {\n\tvar dep *appsv1.Deployment\n\tvar selector labels.Selector\n\tvar numPods int\n\tBeforeEach(func() {\n\t\tamdAMI = env.GetAMIBySSMPath(fmt.Sprintf(\"/aws/service/eks/optimized-ami/%s/amazon-linux-2023/x86_64/standard/recommended/image_id\", env.K8sVersion()))\n\t\tdeprecatedAMI = env.GetDeprecatedAMI(amdAMI, \"AL2023\")\n\t\tnumPods = 1\n\t\t// Add pods with a do-not-disrupt annotation so that we can check node metadata before we disrupt\n\t\tdep = coretest.Deployment(coretest.DeploymentOptions{\n\t\t\tReplicas: int32(numPods),\n\t\t\tPodOptions: coretest.PodOptions{\n\t\t\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\t\t\tLabels: map[string]string{\n\t\t\t\t\t\t\"app\": \"my-app\",\n\t\t\t\t\t},\n\t\t\t\t\tAnnotations: map[string]string{\n\t\t\t\t\t\tkarpv1.DoNotDisruptAnnotationKey: \"true\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tTerminationGracePeriodSeconds: lo.ToPtr[int64](0),\n\t\t\t},\n\t\t})\n\t\tselector = labels.SelectorFromSet(dep.Spec.Selector.MatchLabels)\n\t})\n\tIt(\"should disrupt nodes that have drifted due to AMIs\", func() {\n\t\toldCustomAMI := env.GetAMIBySSMPath(fmt.Sprintf(\"/aws/service/eks/optimized-ami/%s/amazon-linux-2023/x86_64/standard/recommended/image_id\", env.K8sVersionWithOffset(1)))\n\t\tnodeClass.Spec.AMIFamily = lo.ToPtr(v1.AMIFamilyAL2023)\n\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{ID: oldCustomAMI}}\n\n\t\tenv.ExpectCreated(dep, nodeClass, nodePool)\n\t\tpod := env.EventuallyExpectHealthyPodCount(selector, numPods)[0]\n\t\tenv.ExpectCreatedNodeCount(\"==\", 1)\n\n\t\tnodeClaim := env.EventuallyExpectCreatedNodeClaimCount(\"==\", 1)[0]\n\t\tnode := env.EventuallyExpectNodeCount(\"==\", 1)[0]\n\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{ID: amdAMI}}\n\t\tenv.ExpectCreatedOrUpdated(nodeClass)\n\n\t\tenv.EventuallyExpectDrifted(nodeClaim)\n\n\t\tdelete(pod.Annotations, karpv1.DoNotDisruptAnnotationKey)\n\t\tenv.ExpectUpdated(pod)\n\t\tenv.EventuallyExpectNotFound(pod, nodeClaim, node)\n\t\tenv.EventuallyExpectHealthyPodCount(selector, numPods)\n\t})\n\tIt(\"should disrupt nodes for deprecated AMIs to non-deprecated AMIs\", func() {\n\t\tnodeClass.Spec.AMIFamily = lo.ToPtr(v1.AMIFamilyAL2023)\n\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{ID: deprecatedAMI}}\n\n\t\tenv.ExpectCreated(dep, nodeClass, nodePool)\n\t\tpod := env.EventuallyExpectHealthyPodCount(selector, numPods)[0]\n\t\tenv.ExpectCreatedNodeCount(\"==\", 1)\n\t\tenv.ExpectUpdated(nodeClass)\n\n\t\tBy(\"validating the deprecated status condition has propagated\")\n\t\tEventually(func(g Gomega) {\n\t\t\tg.Expect(env.Client.Get(env.Context, client.ObjectKeyFromObject(nodeClass), nodeClass)).Should(Succeed())\n\t\t\tg.Expect(nodeClass.Status.AMIs[0].Deprecated).To(BeTrue())\n\t\t\tg.Expect(nodeClass.StatusConditions().Get(v1.ConditionTypeAMIsReady).IsTrue()).To(BeTrue())\n\t\t}).Should(Succeed())\n\n\t\tnodeClaim := env.EventuallyExpectCreatedNodeClaimCount(\"==\", 1)[0]\n\t\tnode := env.EventuallyExpectNodeCount(\"==\", 1)[0]\n\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{ID: amdAMI}, {ID: deprecatedAMI}}\n\t\tenv.ExpectCreatedOrUpdated(nodeClass)\n\n\t\tenv.EventuallyExpectDrifted(nodeClaim)\n\n\t\tdelete(pod.Annotations, karpv1.DoNotDisruptAnnotationKey)\n\t\tenv.ExpectUpdated(pod)\n\t\tenv.EventuallyExpectNotFound(pod, nodeClaim, node)\n\t\tenv.EventuallyExpectHealthyPodCount(selector, numPods)\n\n\t\t// validate the AMI id matches the non-deprecated AMI\n\t\tpod = env.EventuallyExpectHealthyPodCount(selector, numPods)[0]\n\t\tenv.ExpectInstance(pod.Spec.NodeName).To(HaveField(\"ImageId\", HaveValue(Equal(amdAMI))))\n\n\t\tEventually(func(g Gomega) {\n\t\t\tg.Expect(env.Client.Get(env.Context, client.ObjectKeyFromObject(nodeClass), nodeClass)).Should(Succeed())\n\t\t\tg.Expect(nodeClass.StatusConditions().Get(v1.ConditionTypeAMIsReady).IsTrue()).To(BeTrue())\n\t\t}).Should(Succeed())\n\t})\n\tIt(\"should return drifted if the AMI no longer matches the existing NodeClaims instance type\", func() {\n\t\tarmAMI := env.GetAMIBySSMPath(fmt.Sprintf(\"/aws/service/eks/optimized-ami/%s/amazon-linux-2023/arm64/standard/recommended/image_id\", env.K8sVersion()))\n\t\tnodeClass.Spec.AMIFamily = lo.ToPtr(v1.AMIFamilyAL2023)\n\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{ID: armAMI}}\n\n\t\tenv.ExpectCreated(dep, nodeClass, nodePool)\n\t\tpod := env.EventuallyExpectHealthyPodCount(selector, numPods)[0]\n\t\tenv.ExpectCreatedNodeCount(\"==\", 1)\n\n\t\tnodeClaim := env.EventuallyExpectCreatedNodeClaimCount(\"==\", 1)[0]\n\t\tnode := env.EventuallyExpectNodeCount(\"==\", 1)[0]\n\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{ID: amdAMI}}\n\t\tenv.ExpectCreatedOrUpdated(nodeClass)\n\n\t\tenv.EventuallyExpectDrifted(nodeClaim)\n\n\t\tdelete(pod.Annotations, karpv1.DoNotDisruptAnnotationKey)\n\t\tenv.ExpectUpdated(pod)\n\t\tenv.EventuallyExpectNotFound(pod, nodeClaim, node)\n\t\tenv.EventuallyExpectHealthyPodCount(selector, numPods)\n\t})\n\tIt(\"should disrupt nodes that have drifted due to securitygroup\", func() {\n\t\tBy(\"getting the cluster vpc id\")\n\t\toutput, err := env.EKSAPI.DescribeCluster(env.Context, &eks.DescribeClusterInput{Name: awssdk.String(env.ClusterName)})\n\t\tExpect(err).To(BeNil())\n\n\t\tBy(\"creating new security group\")\n\t\tcreateSecurityGroup := &ec2.CreateSecurityGroupInput{\n\t\t\tGroupName:   awssdk.String(\"security-group-drift\"),\n\t\t\tDescription: awssdk.String(\"End-to-end Drift Test, should delete after drift test is completed\"),\n\t\t\tVpcId:       output.Cluster.ResourcesVpcConfig.VpcId,\n\t\t\tTagSpecifications: []ec2types.TagSpecification{\n\t\t\t\t{\n\t\t\t\t\tResourceType: \"security-group\",\n\t\t\t\t\tTags: []ec2types.Tag{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey:   awssdk.String(\"karpenter.sh/discovery\"),\n\t\t\t\t\t\t\tValue: awssdk.String(env.ClusterName),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey:   awssdk.String(coretest.DiscoveryLabel),\n\t\t\t\t\t\t\tValue: awssdk.String(env.ClusterName),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey:   awssdk.String(\"creation-date\"),\n\t\t\t\t\t\t\tValue: awssdk.String(time.Now().Format(time.RFC3339)),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}\n\t\t_, _ = env.EC2API.CreateSecurityGroup(env.Context, createSecurityGroup)\n\n\t\tBy(\"looking for security groups\")\n\t\tvar securitygroups []aws.SecurityGroup\n\t\tvar testSecurityGroup aws.SecurityGroup\n\t\tEventually(func(g Gomega) {\n\t\t\tsecuritygroups = env.GetSecurityGroups(map[string]string{\"karpenter.sh/discovery\": env.ClusterName})\n\t\t\ttestSecurityGroup, _ = lo.Find(securitygroups, func(sg aws.SecurityGroup) bool {\n\t\t\t\treturn awssdk.ToString(sg.GroupName) == \"security-group-drift\"\n\t\t\t})\n\t\t\tg.Expect(testSecurityGroup).ToNot(BeNil())\n\t\t}).Should(Succeed())\n\n\t\tBy(\"creating a new provider with the new securitygroup\")\n\t\tawsIDs := lo.FilterMap(securitygroups, func(sg aws.SecurityGroup, _ int) (string, bool) {\n\t\t\tif awssdk.ToString(sg.GroupId) != awssdk.ToString(testSecurityGroup.GroupId) {\n\t\t\t\treturn awssdk.ToString(sg.GroupId), true\n\t\t\t}\n\t\t\treturn \"\", false\n\t\t})\n\t\tsgTerms := []v1.SecurityGroupSelectorTerm{{ID: awssdk.ToString(testSecurityGroup.GroupId)}}\n\t\tfor _, id := range awsIDs {\n\t\t\tsgTerms = append(sgTerms, v1.SecurityGroupSelectorTerm{ID: id})\n\t\t}\n\t\tnodeClass.Spec.SecurityGroupSelectorTerms = sgTerms\n\n\t\tenv.ExpectCreated(dep, nodeClass, nodePool)\n\t\tpod := env.EventuallyExpectHealthyPodCount(selector, numPods)[0]\n\t\tnodeClaim := env.EventuallyExpectCreatedNodeClaimCount(\"==\", 1)[0]\n\t\tnode := env.ExpectCreatedNodeCount(\"==\", 1)[0]\n\n\t\tsgTerms = lo.Reject(sgTerms, func(t v1.SecurityGroupSelectorTerm, _ int) bool {\n\t\t\treturn t.ID == awssdk.ToString(testSecurityGroup.GroupId)\n\t\t})\n\t\tnodeClass.Spec.SecurityGroupSelectorTerms = sgTerms\n\t\tenv.ExpectCreatedOrUpdated(nodeClass)\n\n\t\tenv.EventuallyExpectDrifted(nodeClaim)\n\n\t\tdelete(pod.Annotations, karpv1.DoNotDisruptAnnotationKey)\n\t\tenv.ExpectUpdated(pod)\n\t\tenv.EventuallyExpectNotFound(pod, nodeClaim, node)\n\t\tenv.EventuallyExpectHealthyPodCount(selector, numPods)\n\t})\n\tIt(\"should disrupt nodes that have drifted due to subnets\", func() {\n\t\tsubnets := env.GetSubnetInfo(map[string]string{\"karpenter.sh/discovery\": env.ClusterName})\n\t\tExpect(len(subnets)).To(BeNumerically(\">\", 1))\n\n\t\tnodeClass.Spec.SubnetSelectorTerms = []v1.SubnetSelectorTerm{{ID: subnets[0].ID}}\n\n\t\tenv.ExpectCreated(dep, nodeClass, nodePool)\n\t\tpod := env.EventuallyExpectHealthyPodCount(selector, numPods)[0]\n\t\tnodeClaim := env.EventuallyExpectCreatedNodeClaimCount(\"==\", 1)[0]\n\t\tnode := env.ExpectCreatedNodeCount(\"==\", 1)[0]\n\n\t\tnodeClass.Spec.SubnetSelectorTerms = []v1.SubnetSelectorTerm{{ID: subnets[1].ID}}\n\t\tenv.ExpectCreatedOrUpdated(nodeClass)\n\n\t\tenv.EventuallyExpectDrifted(nodeClaim)\n\n\t\tdelete(pod.Annotations, karpv1.DoNotDisruptAnnotationKey)\n\t\tenv.ExpectUpdated(pod)\n\t\tenv.EventuallyExpectNotFound(pod, node)\n\t\tenv.EventuallyExpectHealthyPodCount(selector, numPods)\n\t})\n\tDescribeTable(\"EC2NodeClass\", func(nodeClassSpec v1.EC2NodeClassSpec) {\n\t\tupdatedNodeClass := test.EC2NodeClass(v1.EC2NodeClass{Spec: *nodeClass.Spec.DeepCopy()}, v1.EC2NodeClass{Spec: nodeClassSpec})\n\t\tupdatedNodeClass.ObjectMeta = nodeClass.ObjectMeta\n\n\t\tenv.ExpectCreated(dep, nodeClass, nodePool)\n\t\tpod := env.EventuallyExpectHealthyPodCount(selector, numPods)[0]\n\t\tnodeClaim := env.EventuallyExpectCreatedNodeClaimCount(\"==\", 1)[0]\n\t\tnode := env.ExpectCreatedNodeCount(\"==\", 1)[0]\n\n\t\tenv.ExpectCreatedOrUpdated(updatedNodeClass)\n\n\t\tenv.EventuallyExpectDrifted(nodeClaim)\n\n\t\tdelete(pod.Annotations, karpv1.DoNotDisruptAnnotationKey)\n\t\tenv.ExpectUpdated(pod)\n\t\tenv.EventuallyExpectNotFound(pod, node)\n\t\tenv.EventuallyExpectHealthyPodCount(selector, numPods)\n\t},\n\t\tEntry(\"UserData\", v1.EC2NodeClassSpec{UserData: awssdk.String(\"#!/bin/bash\\necho \\\"Hello, AL2023\\\"\")}),\n\t\tEntry(\"Tags\", v1.EC2NodeClassSpec{Tags: map[string]string{\"keyTag-test-3\": \"valueTag-test-3\"}}),\n\t\tEntry(\"MetadataOptions\", v1.EC2NodeClassSpec{MetadataOptions: &v1.MetadataOptions{HTTPTokens: awssdk.String(\"required\"), HTTPPutResponseHopLimit: awssdk.Int64(10)}}),\n\t\tEntry(\"BlockDeviceMappings\", v1.EC2NodeClassSpec{BlockDeviceMappings: []*v1.BlockDeviceMapping{\n\t\t\t{\n\t\t\t\tDeviceName: awssdk.String(\"/dev/xvda\"),\n\t\t\t\tEBS: &v1.BlockDevice{\n\t\t\t\t\tVolumeSize: resources.Quantity(\"20Gi\"),\n\t\t\t\t\tVolumeType: awssdk.String(\"gp3\"),\n\t\t\t\t\tEncrypted:  awssdk.Bool(true),\n\t\t\t\t},\n\t\t\t}}}),\n\t\tEntry(\"DetailedMonitoring\", v1.EC2NodeClassSpec{DetailedMonitoring: awssdk.Bool(true)}),\n\t\tEntry(\"AMIFamily\", v1.EC2NodeClassSpec{\n\t\t\tAMISelectorTerms: []v1.AMISelectorTerm{{Alias: \"bottlerocket@latest\"}},\n\t\t}),\n\t\tEntry(\"KubeletConfiguration\", v1.EC2NodeClassSpec{\n\t\t\tKubelet: &v1.KubeletConfiguration{\n\t\t\t\tEvictionSoft:            map[string]string{\"memory.available\": \"5%\"},\n\t\t\t\tEvictionSoftGracePeriod: map[string]metav1.Duration{\"memory.available\": {Duration: time.Minute}},\n\t\t\t},\n\t\t}),\n\t)\n\tIt(\"should drift the EC2NodeClass on InstanceProfile\", func() {\n\t\t// Create a separate test case for this one since we can't use the default NodeClass that's created due to it having\n\t\t// a pre-populated role AND we also need to do the instance profile generation within the scope of this test\n\t\tinstanceProfileName := fmt.Sprintf(\"KarpenterNodeInstanceProfile-%s\", env.ClusterName)\n\t\tinstanceProfileDriftName := fmt.Sprintf(\"KarpenterNodeInstanceProfile-Drift-%s\", env.ClusterName)\n\t\troleName := fmt.Sprintf(\"KarpenterNodeRole-%s\", env.ClusterName)\n\n\t\tfor _, name := range []string{instanceProfileName, instanceProfileDriftName} {\n\t\t\tenv.ExpectInstanceProfileCreated(name, roleName)\n\t\t\tDeferCleanup(func() {\n\t\t\t\tenv.ExpectInstanceProfileDeleted(name, roleName)\n\t\t\t})\n\t\t}\n\t\tnodeClass.Spec.Role = \"\"\n\t\tnodeClass.Spec.InstanceProfile = lo.ToPtr(instanceProfileName)\n\n\t\tenv.ExpectCreated(dep, nodeClass, nodePool)\n\t\tpod := env.EventuallyExpectHealthyPodCount(selector, numPods)[0]\n\t\tnodeClaim := env.EventuallyExpectCreatedNodeClaimCount(\"==\", 1)[0]\n\t\tnode := env.ExpectCreatedNodeCount(\"==\", 1)[0]\n\n\t\tnodeClass.Spec.InstanceProfile = lo.ToPtr(instanceProfileDriftName)\n\t\tenv.ExpectCreatedOrUpdated(nodeClass)\n\n\t\tenv.EventuallyExpectDrifted(nodeClaim)\n\n\t\tdelete(pod.Annotations, karpv1.DoNotDisruptAnnotationKey)\n\t\tenv.ExpectUpdated(pod)\n\t\tenv.EventuallyExpectNotFound(pod, node)\n\t\tenv.EventuallyExpectHealthyPodCount(selector, numPods)\n\t})\n\tIt(\"should drift nodeclaims when spec.role changes\", func() {\n\t\t// Create initial role and instance profile\n\t\tinitialRoleName := nodeClass.Spec.Role\n\n\t\tenv.ExpectCreated(dep, nodeClass, nodePool)\n\t\tenv.EventuallyExpectHealthyPodCount(selector, numPods)\n\t\tfirstNodeClaim := env.EventuallyExpectCreatedNodeClaimCount(\"==\", 1)[0]\n\t\tfirstNode := env.ExpectCreatedNodeCount(\"==\", 1)[0]\n\n\t\tEventually(func(g Gomega) {\n\t\t\tg.Expect(env.Client.Get(env.Context, client.ObjectKeyFromObject(nodeClass), nodeClass)).To(Succeed())\n\t\t\tg.Expect(env.Client.Get(env.Context, client.ObjectKeyFromObject(firstNodeClaim), firstNodeClaim)).To(Succeed())\n\t\t\tg.Expect(nodeClass.Status.InstanceProfile).NotTo(BeEmpty())\n\t\t\tenv.EventuallyExpectInstanceProfileExists(nodeClass.Status.InstanceProfile)\n\t\t\tg.Expect(firstNodeClaim.Annotations[v1.AnnotationInstanceProfile]).To(Equal(nodeClass.Status.InstanceProfile))\n\t\t}).Should(Succeed())\n\n\t\tinitialInstanceProfile := nodeClass.Status.InstanceProfile\n\n\t\t// Change role\n\t\tsecondRoleName := fmt.Sprintf(\"KarpenterNodeRole-%s-%s\", env.ClusterName, uuid.New().String()[:8])\n\t\tenv.EventuallyExpectNodeRoleCreated(secondRoleName)\n\t\tDeferCleanup(func() {\n\t\t\tenv.ExpectNodeRoleDeleted(secondRoleName)\n\t\t})\n\n\t\tnodeClass.Spec.Role = secondRoleName\n\t\tenv.ExpectCreatedOrUpdated(nodeClass)\n\n\t\tEventually(func(g Gomega) {\n\t\t\tg.Expect(env.Client.Get(env.Context, client.ObjectKeyFromObject(nodeClass), nodeClass)).To(Succeed())\n\t\t\tg.Expect(nodeClass.Status.InstanceProfile).NotTo(BeEmpty())\n\t\t\tg.Expect(nodeClass.Status.InstanceProfile).NotTo(Equal(initialInstanceProfile))\n\t\t\tenv.EventuallyExpectInstanceProfileExists(nodeClass.Status.InstanceProfile)\n\t\t}).Should(Succeed())\n\n\t\tsecondInstanceProfile := nodeClass.Status.InstanceProfile\n\n\t\tenv.EventuallyExpectDrifted(firstNodeClaim)\n\t\tEventually(func(g Gomega) {\n\t\t\tg.Expect(env.Client.Get(env.Context, client.ObjectKeyFromObject(firstNodeClaim), firstNodeClaim)).To(Succeed())\n\t\t\tcondition := firstNodeClaim.StatusConditions().Get(karpv1.ConditionTypeDrifted)\n\t\t\tg.Expect(condition).ToNot(BeNil())\n\t\t\tg.Expect(condition.Reason).To(Equal(\"NodeClassDrift\"))\n\t\t}).Should(Succeed())\n\n\t\tdelete(dep.Spec.Template.Annotations, karpv1.DoNotDisruptAnnotationKey)\n\t\tenv.ExpectUpdated(dep)\n\n\t\tenv.EventuallyExpectNotFound(firstNodeClaim, firstNode)\n\n\t\t// Verify new nodeclaim uses new instance profile\n\t\tenv.EventuallyExpectHealthyPodCount(selector, numPods)\n\t\tsecondNodeClaim := env.EventuallyExpectCreatedNodeClaimCount(\"==\", 1)[0]\n\t\tsecondNode := env.ExpectCreatedNodeCount(\"==\", 1)[0]\n\t\tExpect(secondNodeClaim.Annotations[v1.AnnotationInstanceProfile]).To(Equal(secondInstanceProfile))\n\n\t\t// Change back to initial role\n\t\tnodeClass.Spec.Role = initialRoleName\n\t\tenv.ExpectCreatedOrUpdated(nodeClass)\n\n\t\tEventually(func(g Gomega) {\n\t\t\tg.Expect(env.Client.Get(env.Context, client.ObjectKeyFromObject(nodeClass), nodeClass)).To(Succeed())\n\t\t\tg.Expect(nodeClass.Status.InstanceProfile).NotTo(BeEmpty())\n\t\t\tg.Expect(nodeClass.Status.InstanceProfile).NotTo(Equal(secondInstanceProfile))\n\t\t\tenv.EventuallyExpectInstanceProfileExists(nodeClass.Status.InstanceProfile)\n\t\t}).Should(Succeed())\n\n\t\tfinalInstanceProfile := nodeClass.Status.InstanceProfile\n\n\t\tenv.EventuallyExpectDrifted(secondNodeClaim)\n\t\tEventually(func(g Gomega) {\n\t\t\tg.Expect(env.Client.Get(env.Context, client.ObjectKeyFromObject(secondNodeClaim), secondNodeClaim)).To(Succeed())\n\t\t\tcondition := secondNodeClaim.StatusConditions().Get(karpv1.ConditionTypeDrifted)\n\t\t\tg.Expect(condition).ToNot(BeNil())\n\t\t\tg.Expect(condition.Reason).To(Equal(\"NodeClassDrift\"))\n\t\t}).Should(Succeed())\n\n\t\tenv.EventuallyExpectNotFound(secondNodeClaim, secondNode)\n\t\tenv.EventuallyExpectHealthyPodCount(selector, numPods)\n\t\tfinalNodeClaim := env.EventuallyExpectCreatedNodeClaimCount(\"==\", 1)[0]\n\t\tfinalNode := env.ExpectCreatedNodeCount(\"==\", 1)[0]\n\n\t\t// Verify new nodeclaim uses new instance profile\n\t\tExpect(finalNodeClaim.Annotations[v1.AnnotationInstanceProfile]).To(Equal(finalInstanceProfile))\n\n\t\tExpect(env.ExpectTestingFinalizerRemoved(finalNode)).To(Succeed())\n\t\tExpect(env.ExpectTestingFinalizerRemoved(finalNodeClaim)).To(Succeed())\n\n\t\tenv.ExpectDeleted(nodePool)\n\t\tenv.EventuallyExpectNotFound(finalNodeClaim, finalNode)\n\t\tenv.ExpectDeleted(nodeClass)\n\t\tenv.EventuallyExpectInstanceProfilesNotFound(initialInstanceProfile, secondInstanceProfile, finalInstanceProfile)\n\t})\n\tIt(\"should drift the EC2NodeClass on BlockDeviceMappings volume size update\", func() {\n\t\tnodeClass.Spec.BlockDeviceMappings = []*v1.BlockDeviceMapping{\n\t\t\t{\n\t\t\t\tDeviceName: awssdk.String(\"/dev/xvda\"),\n\t\t\t\tEBS: &v1.BlockDevice{\n\t\t\t\t\tVolumeSize: resources.Quantity(\"20Gi\"),\n\t\t\t\t\tVolumeType: awssdk.String(\"gp3\"),\n\t\t\t\t\tEncrypted:  awssdk.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t}\n\t\tenv.ExpectCreated(dep, nodeClass, nodePool)\n\t\tpod := env.EventuallyExpectHealthyPodCount(selector, numPods)[0]\n\t\tnodeClaim := env.EventuallyExpectCreatedNodeClaimCount(\"==\", 1)[0]\n\t\tnode := env.ExpectCreatedNodeCount(\"==\", 1)[0]\n\n\t\tnodeClass.Spec.BlockDeviceMappings[0].EBS.VolumeSize = resources.Quantity(\"100Gi\")\n\t\tenv.ExpectCreatedOrUpdated(nodeClass)\n\n\t\tBy(\"validating the drifted status condition has propagated\")\n\t\tEventually(func(g Gomega) {\n\t\t\tg.Expect(env.Client.Get(env, client.ObjectKeyFromObject(nodeClaim), nodeClaim)).To(Succeed())\n\t\t\tg.Expect(nodeClaim.StatusConditions().Get(karpv1.ConditionTypeDrifted)).ToNot(BeNil())\n\t\t\tg.Expect(nodeClaim.StatusConditions().Get(karpv1.ConditionTypeDrifted).IsTrue()).To(BeTrue())\n\t\t}).Should(Succeed())\n\n\t\tdelete(pod.Annotations, karpv1.DoNotDisruptAnnotationKey)\n\t\tenv.ExpectUpdated(pod)\n\t\tenv.EventuallyExpectNotFound(pod, node)\n\t\tenv.EventuallyExpectHealthyPodCount(selector, numPods)\n\t})\n\tIt(\"should update the ec2nodeclass-hash annotation on the ec2nodeclass and nodeclaim when the ec2nodeclass's ec2nodeclass-hash-version annotation does not match the controller hash version\", func() {\n\t\tenv.ExpectCreated(dep, nodeClass, nodePool)\n\t\tenv.EventuallyExpectHealthyPodCount(selector, numPods)\n\t\tnodeClaim := env.EventuallyExpectCreatedNodeClaimCount(\"==\", 1)[0]\n\t\tnodeClass = env.ExpectExists(nodeClass).(*v1.EC2NodeClass)\n\t\texpectedHash := nodeClass.Hash()\n\n\t\tBy(fmt.Sprintf(\"expect nodeclass %s and nodeclaim %s to contain %s and %s annotations\", nodeClass.Name, nodeClaim.Name, v1.AnnotationEC2NodeClassHash, v1.AnnotationEC2NodeClassHashVersion))\n\t\tEventually(func(g Gomega) {\n\t\t\tg.Expect(env.Client.Get(env.Context, client.ObjectKeyFromObject(nodeClass), nodeClass)).To(Succeed())\n\t\t\tg.Expect(env.Client.Get(env.Context, client.ObjectKeyFromObject(nodeClaim), nodeClaim)).To(Succeed())\n\n\t\t\tg.Expect(nodeClass.Annotations).To(HaveKeyWithValue(v1.AnnotationEC2NodeClassHash, expectedHash))\n\t\t\tg.Expect(nodeClass.Annotations).To(HaveKeyWithValue(v1.AnnotationEC2NodeClassHashVersion, v1.EC2NodeClassHashVersion))\n\t\t\tg.Expect(nodeClaim.Annotations).To(HaveKeyWithValue(v1.AnnotationEC2NodeClassHash, expectedHash))\n\t\t\tg.Expect(nodeClaim.Annotations).To(HaveKeyWithValue(v1.AnnotationEC2NodeClassHashVersion, v1.EC2NodeClassHashVersion))\n\t\t}).WithTimeout(30 * time.Second).Should(Succeed())\n\n\t\tnodeClass.Annotations = lo.Assign(nodeClass.Annotations, map[string]string{\n\t\t\tv1.AnnotationEC2NodeClassHash:        \"test-hash-1\",\n\t\t\tv1.AnnotationEC2NodeClassHashVersion: \"test-hash-version-1\",\n\t\t})\n\t\t// Updating `nodeClass.Spec.Tags` would normally trigger drift on all nodeclaims using the\n\t\t// nodeclass. However, the ec2nodeclass-hash-version does not match the controller hash version, so we will see that\n\t\t// none of the nodeclaims will be drifted and all nodeclaims will have an updated `ec2nodeclass-hash` and `ec2nodeclass-hash-version` annotation\n\t\tnodeClass.Spec.Tags = lo.Assign(nodeClass.Spec.Tags, map[string]string{\n\t\t\t\"test-key\": \"test-value\",\n\t\t})\n\t\tnodeClaim.Annotations = lo.Assign(nodePool.Annotations, map[string]string{\n\t\t\tv1.AnnotationEC2NodeClassHash:        \"test-hash-2\",\n\t\t\tv1.AnnotationEC2NodeClassHashVersion: \"test-hash-version-2\",\n\t\t})\n\n\t\t// The nodeclaim will need to be updated first, as the hash controller will only be triggered on changes to the nodeclass\n\t\tenv.ExpectUpdated(nodeClaim, nodeClass)\n\t\texpectedHash = nodeClass.Hash()\n\n\t\t// Expect all nodeclaims not to be drifted and contain an updated `nodepool-hash` and `nodepool-hash-version` annotation\n\t\tEventually(func(g Gomega) {\n\t\t\tg.Expect(env.Client.Get(env.Context, client.ObjectKeyFromObject(nodeClass), nodeClass)).To(Succeed())\n\t\t\tg.Expect(env.Client.Get(env.Context, client.ObjectKeyFromObject(nodeClaim), nodeClaim)).To(Succeed())\n\n\t\t\tg.Expect(nodeClass.Annotations).To(HaveKeyWithValue(v1.AnnotationEC2NodeClassHash, expectedHash))\n\t\t\tg.Expect(nodeClass.Annotations).To(HaveKeyWithValue(v1.AnnotationEC2NodeClassHashVersion, v1.EC2NodeClassHashVersion))\n\t\t\tg.Expect(nodeClaim.Annotations).To(HaveKeyWithValue(v1.AnnotationEC2NodeClassHash, expectedHash))\n\t\t\tg.Expect(nodeClaim.Annotations).To(HaveKeyWithValue(v1.AnnotationEC2NodeClassHashVersion, v1.EC2NodeClassHashVersion))\n\t\t}).WithTimeout(30 * time.Second).Should(Succeed())\n\t\tenv.ConsistentlyExpectNodeClaimsNotDrifted(time.Minute, nodeClaim)\n\t})\n\tContext(\"Capacity Reservations\", func() {\n\t\tvar largeCapacityReservationID, xlargeCapacityReservationID string\n\t\tBeforeAll(func() {\n\t\t\tlargeCapacityReservationID = aws.ExpectCapacityReservationCreated(\n\t\t\t\tenv.Context,\n\t\t\t\tenv.EC2API,\n\t\t\t\tec2types.InstanceTypeM5Large,\n\t\t\t\tenv.ZoneInfo[0].Zone,\n\t\t\t\t1,\n\t\t\t\tnil,\n\t\t\t\tnil,\n\t\t\t)\n\t\t\txlargeCapacityReservationID = aws.ExpectCapacityReservationCreated(\n\t\t\t\tenv.Context,\n\t\t\t\tenv.EC2API,\n\t\t\t\tec2types.InstanceTypeM5Xlarge,\n\t\t\t\tenv.ZoneInfo[0].Zone,\n\t\t\t\t1,\n\t\t\t\tnil,\n\t\t\t\tnil,\n\t\t\t)\n\t\t})\n\t\tAfterAll(func() {\n\t\t\taws.ExpectCapacityReservationsCanceled(env.Context, env.EC2API, largeCapacityReservationID, xlargeCapacityReservationID)\n\t\t})\n\t\tBeforeEach(func() {\n\t\t\tnodePool.Spec.Template.Spec.Requirements = []karpv1.NodeSelectorRequirementWithMinValues{{\n\t\t\t\tKey:      karpv1.CapacityTypeLabelKey,\n\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\tValues:   []string{karpv1.CapacityTypeReserved},\n\t\t\t}}\n\t\t})\n\t\tIt(\"should drift nodeclaim when the reservation is no longer selected by the nodeclass\", func() {\n\t\t\tnodeClass.Spec.CapacityReservationSelectorTerms = []v1.CapacityReservationSelectorTerm{{ID: largeCapacityReservationID}}\n\t\t\t// Include the do-not-disrupt annotation to prevent replacement NodeClaims from leaking between tests\n\t\t\tpod := coretest.Pod(coretest.PodOptions{\n\t\t\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\t\t\tAnnotations: map[string]string{\n\t\t\t\t\t\tkarpv1.DoNotDisruptAnnotationKey: \"true\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t})\n\t\t\tenv.ExpectCreated(nodePool, nodeClass, pod)\n\t\t\tnc := env.EventuallyExpectLaunchedNodeClaimCount(\"==\", 1)[0]\n\t\t\tenv.EventuallyExpectNodeClaimsReady(nc)\n\t\t\tn := env.EventuallyExpectCreatedNodeCount(\"==\", 1)[0]\n\t\t\tExpect(n.Labels).To(HaveKeyWithValue(corev1.LabelInstanceTypeStable, string(ec2types.InstanceTypeM5Large)))\n\t\t\tExpect(n.Labels).To(HaveKeyWithValue(karpv1.CapacityTypeLabelKey, karpv1.CapacityTypeReserved))\n\t\t\tExpect(n.Labels).To(HaveKeyWithValue(v1.LabelCapacityReservationID, largeCapacityReservationID))\n\n\t\t\tnodeClass.Spec.CapacityReservationSelectorTerms = []v1.CapacityReservationSelectorTerm{{ID: xlargeCapacityReservationID}}\n\t\t\tenv.ExpectUpdated(nodeClass)\n\t\t\tenv.EventuallyExpectDrifted(nc)\n\t\t})\n\t\tIt(\"should drift nodeclaim when the nodeclaim is demoted to on-demand\", func() {\n\t\t\tcapacityReservationID := aws.ExpectCapacityReservationCreated(\n\t\t\t\tenv.Context,\n\t\t\t\tenv.EC2API,\n\t\t\t\tec2types.InstanceTypeM5Large,\n\t\t\t\tenv.ZoneInfo[0].Zone,\n\t\t\t\t1,\n\t\t\t\tnil,\n\t\t\t\tnil,\n\t\t\t)\n\t\t\tDeferCleanup(func() {\n\t\t\t\taws.ExpectCapacityReservationsCanceled(env.Context, env.EC2API, capacityReservationID)\n\t\t\t})\n\n\t\t\tnodeClass.Spec.CapacityReservationSelectorTerms = []v1.CapacityReservationSelectorTerm{{ID: capacityReservationID}}\n\t\t\t// Prevent drift from being executed by marking the pod as do-not-disrupt. Without this, the nodeclaim may be replaced\n\t\t\t// in-between polling intervals for the eventually block.\n\t\t\tpod := coretest.Pod(coretest.PodOptions{\n\t\t\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\t\t\tAnnotations: map[string]string{\n\t\t\t\t\t\tkarpv1.DoNotDisruptAnnotationKey: \"true\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t})\n\t\t\tenv.ExpectCreated(nodePool, nodeClass, pod)\n\n\t\t\tnc := env.EventuallyExpectLaunchedNodeClaimCount(\"==\", 1)[0]\n\t\t\treq, ok := lo.Find(nc.Spec.Requirements, func(req karpv1.NodeSelectorRequirementWithMinValues) bool {\n\t\t\t\treturn req.Key == v1.LabelCapacityReservationID\n\t\t\t})\n\t\t\tExpect(ok).To(BeTrue())\n\t\t\tExpect(req.Values).To(ConsistOf(capacityReservationID))\n\t\t\tn := env.EventuallyExpectNodeCount(\"==\", 1)[0]\n\n\t\t\taws.ExpectCapacityReservationsCanceled(env.Context, env.EC2API, capacityReservationID)\n\n\t\t\t// The NodeClaim capacity reservation controller runs once every minute, we'll give a little extra time to avoid\n\t\t\t// a failure from a small delay, but the capacity type label should be updated and the reservation-id label should\n\t\t\t// be removed within a minute of the reservation being canceled.\n\t\t\tEventually(func(g Gomega) {\n\t\t\t\tupdatedNodeClaim := &karpv1.NodeClaim{}\n\t\t\t\tg.Expect(env.Client.Get(env.Context, client.ObjectKeyFromObject(nc), updatedNodeClaim)).To(BeNil())\n\t\t\t\tg.Expect(updatedNodeClaim.Labels).To(HaveKeyWithValue(karpv1.CapacityTypeLabelKey, karpv1.CapacityTypeOnDemand))\n\t\t\t\tg.Expect(updatedNodeClaim.Labels).ToNot(HaveKey(v1.LabelCapacityReservationID))\n\n\t\t\t\tupdatedNode := &corev1.Node{}\n\t\t\t\tg.Expect(env.Client.Get(env.Context, client.ObjectKeyFromObject(n), updatedNode)).To(BeNil())\n\t\t\t\tg.Expect(updatedNodeClaim.Labels).To(HaveKeyWithValue(karpv1.CapacityTypeLabelKey, karpv1.CapacityTypeOnDemand))\n\t\t\t\tg.Expect(updatedNodeClaim.Labels).ToNot(HaveKey(v1.LabelCapacityReservationID))\n\t\t\t}).WithTimeout(75 * time.Second).Should(Succeed())\n\n\t\t\t// Since the nodeclaim is only compatible with reserved instances, we should drift the node when it's demoted to on-demand\n\t\t\tenv.EventuallyExpectDrifted(nc)\n\t\t})\n\t})\n})\n"
  },
  {
    "path": "test/suites/integration/aws_metadata_test.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage integration_test\n\nimport (\n\t\"github.com/aws/aws-sdk-go-v2/aws\"\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\tcoretest \"sigs.k8s.io/karpenter/pkg/test\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n)\n\nvar _ = Describe(\"MetadataOptions\", func() {\n\tIt(\"should use specified metadata options\", func() {\n\t\tnodeClass.Spec.MetadataOptions = &v1.MetadataOptions{\n\t\t\tHTTPEndpoint:            aws.String(\"enabled\"),\n\t\t\tHTTPProtocolIPv6:        aws.String(\"enabled\"),\n\t\t\tHTTPPutResponseHopLimit: aws.Int64(1),\n\t\t\tHTTPTokens:              aws.String(\"required\"),\n\t\t}\n\t\tpod := coretest.Pod()\n\n\t\tenv.ExpectCreated(pod, nodeClass, nodePool)\n\t\tenv.EventuallyExpectHealthy(pod)\n\t\tenv.ExpectCreatedNodeCount(\"==\", 1)\n\t\tenv.ExpectInstance(pod.Spec.NodeName).To(HaveField(\"MetadataOptions\", HaveValue(Equal(ec2types.InstanceMetadataOptionsResponse{\n\t\t\tState:                   ec2types.InstanceMetadataOptionsStateApplied,\n\t\t\tHttpEndpoint:            ec2types.InstanceMetadataEndpointStateEnabled,\n\t\t\tHttpProtocolIpv6:        ec2types.InstanceMetadataProtocolStateEnabled,\n\t\t\tHttpPutResponseHopLimit: aws.Int32(1),\n\t\t\tHttpTokens:              ec2types.HttpTokensStateRequired,\n\t\t\tInstanceMetadataTags:    ec2types.InstanceMetadataTagsStateDisabled,\n\t\t}))))\n\t})\n})\n"
  },
  {
    "path": "test/suites/integration/block_device_mappings_test.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage integration_test\n\nimport (\n\t\"github.com/aws/aws-sdk-go-v2/aws\"\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\t\"github.com/samber/lo\"\n\t\"sigs.k8s.io/karpenter/pkg/test\"\n\t\"sigs.k8s.io/karpenter/pkg/utils/resources\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n)\n\nvar _ = Describe(\"BlockDeviceMappings\", func() {\n\tIt(\"should use specified block device mappings\", func() {\n\t\tnodeClass.Spec.BlockDeviceMappings = []*v1.BlockDeviceMapping{\n\t\t\t{\n\t\t\t\tDeviceName: aws.String(\"/dev/xvda\"),\n\t\t\t\tEBS: &v1.BlockDevice{\n\t\t\t\t\tVolumeSize:          resources.Quantity(\"20Gi\"),\n\t\t\t\t\tVolumeType:          aws.String(\"io2\"),\n\t\t\t\t\tIOPS:                aws.Int64(1000),\n\t\t\t\t\tEncrypted:           aws.Bool(true),\n\t\t\t\t\tDeleteOnTermination: aws.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t}\n\t\tpod := test.Pod()\n\n\t\tenv.ExpectCreated(pod, nodeClass, nodePool)\n\t\tenv.EventuallyExpectHealthy(pod)\n\t\tenv.ExpectCreatedNodeCount(\"==\", 1)\n\t\tinstance := env.GetInstance(pod.Spec.NodeName)\n\t\tExpect(len(instance.BlockDeviceMappings)).To(Equal(1))\n\t\tExpect(instance.BlockDeviceMappings[0]).ToNot(BeNil())\n\t\tExpect(instance.BlockDeviceMappings[0]).To(HaveField(\"DeviceName\", HaveValue(Equal(\"/dev/xvda\"))))\n\t\tExpect(instance.BlockDeviceMappings[0].Ebs).To(HaveField(\"DeleteOnTermination\", HaveValue(BeTrue())))\n\t\tvolume := env.GetVolume(lo.FromPtr(instance.BlockDeviceMappings[0].Ebs.VolumeId))\n\t\tExpect(volume).To(HaveField(\"Encrypted\", HaveValue(BeTrue())))\n\t\tExpect(volume).To(HaveField(\"Size\", HaveValue(Equal(int32(20)))))\n\t\tExpect(volume).To(HaveField(\"Iops\", HaveValue(Equal(int32(1000)))))\n\t\tExpect(volume).To(HaveField(\"VolumeType\", HaveValue(Equal(ec2types.VolumeType(\"io2\")))))\n\t})\n})\n"
  },
  {
    "path": "test/suites/integration/cni_test.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage integration_test\n\nimport (\n\t\"strconv\"\n\n\t\"github.com/aws/aws-sdk-go-v2/service/ec2\"\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n\t\"github.com/samber/lo\"\n\tcorev1 \"k8s.io/api/core/v1\"\n\t\"k8s.io/apimachinery/pkg/types\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\n\t\"sigs.k8s.io/karpenter/pkg/test\"\n)\n\nvar _ = Describe(\"CNITests\", func() {\n\tIt(\"should set eni-limited maxPods\", func() {\n\t\tpod := test.Pod()\n\t\tenv.ExpectCreated(pod, nodeClass, nodePool)\n\t\tenv.EventuallyExpectHealthy(pod)\n\t\tenv.ExpectCreatedNodeCount(\"==\", 1)\n\t\tvar node corev1.Node\n\t\tExpect(env.Client.Get(env.Context, types.NamespacedName{Name: pod.Spec.NodeName}, &node)).To(Succeed())\n\t\tallocatablePods, _ := node.Status.Allocatable.Pods().AsInt64()\n\t\tExpect(allocatablePods).To(Equal(eniLimitedPodsFor(node.Labels[\"node.kubernetes.io/instance-type\"])))\n\t})\n\tIt(\"should set max pods to 110 if maxPods is set in kubelet\", func() {\n\t\tnodeClass.Spec.Kubelet = &v1.KubeletConfiguration{MaxPods: lo.ToPtr[int32](110)}\n\t\tpod := test.Pod()\n\t\tenv.ExpectCreated(pod, nodeClass, nodePool)\n\t\tenv.EventuallyExpectHealthy(pod)\n\t\tenv.ExpectCreatedNodeCount(\"==\", 1)\n\n\t\tvar node corev1.Node\n\t\tExpect(env.Client.Get(env.Context, types.NamespacedName{Name: pod.Spec.NodeName}, &node)).To(Succeed())\n\t\tallocatablePods, _ := node.Status.Allocatable.Pods().AsInt64()\n\t\tExpect(allocatablePods).To(Equal(int64(110)))\n\t})\n\tIt(\"should set maxPods when reservedENIs is set\", func() {\n\t\tenv.ExpectSettingsOverridden(corev1.EnvVar{Name: \"RESERVED_ENIS\", Value: \"1\"})\n\t\tpod := test.Pod()\n\t\tenv.ExpectCreated(pod, nodeClass, nodePool)\n\t\tenv.EventuallyExpectHealthy(pod)\n\t\tenv.ExpectCreatedNodeCount(\"==\", 1)\n\t\tvar node corev1.Node\n\t\tExpect(env.Client.Get(env.Context, types.NamespacedName{Name: pod.Spec.NodeName}, &node)).To(Succeed())\n\t\tallocatablePods, _ := node.Status.Allocatable.Pods().AsInt64()\n\t\tExpect(allocatablePods).To(Equal(reservedENIsFor(node.Labels[\"node.kubernetes.io/instance-type\"])))\n\t})\n})\n\nfunc eniLimitedPodsFor(instanceType string) int64 {\n\tinstance, err := env.EC2API.DescribeInstanceTypes(env.Context, &ec2.DescribeInstanceTypesInput{\n\t\tInstanceTypes: []ec2types.InstanceType{ec2types.InstanceType(instanceType)},\n\t})\n\tExpect(err).ToNot(HaveOccurred())\n\tnetworkInfo := *instance.InstanceTypes[0].NetworkInfo\n\treturn int64(*networkInfo.MaximumNetworkInterfaces*(*networkInfo.Ipv4AddressesPerInterface-1) + 2)\n}\n\nfunc reservedENIsFor(instanceType string) int64 {\n\tinstance, err := env.EC2API.DescribeInstanceTypes(env.Context, &ec2.DescribeInstanceTypesInput{\n\t\tInstanceTypes: []ec2types.InstanceType{ec2types.InstanceType(instanceType)},\n\t})\n\tExpect(err).ToNot(HaveOccurred())\n\tnetworkInfo := *instance.InstanceTypes[0].NetworkInfo\n\treservedENIs := 0\n\treservedENIsVar, ok := lo.Find(env.ExpectSettings(), func(v corev1.EnvVar) bool { return v.Name == \"RESERVED_ENIS\" })\n\tif ok {\n\t\treservedENIs, err = strconv.Atoi(reservedENIsVar.Value)\n\t\tExpect(err).ToNot(HaveOccurred())\n\t}\n\treturn int64((int(*networkInfo.MaximumNetworkInterfaces)-reservedENIs)*(int(*networkInfo.Ipv4AddressesPerInterface-1)) + 2)\n}\n"
  },
  {
    "path": "test/suites/integration/extended_resources_test.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage integration_test\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"time\"\n\n\t\"github.com/samber/lo\"\n\tappsv1 \"k8s.io/api/apps/v1\"\n\tcorev1 \"k8s.io/api/core/v1\"\n\trbacv1 \"k8s.io/api/rbac/v1\"\n\t\"k8s.io/apimachinery/pkg/api/resource\"\n\tmetav1 \"k8s.io/apimachinery/pkg/apis/meta/v1\"\n\t\"k8s.io/apimachinery/pkg/labels\"\n\t\"k8s.io/apimachinery/pkg/util/intstr\"\n\n\t\"sigs.k8s.io/karpenter/pkg/test\"\n\n\tkarpv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n\n\t\"github.com/aws/amazon-vpc-resource-controller-k8s/apis/vpcresources/v1beta1\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n)\n\nvar _ = Describe(\"Extended Resources\", func() {\n\tBeforeEach(func() {\n\t\tif env.PrivateCluster {\n\t\t\tSkip(\"skipping Extended Resources test for private cluster\")\n\t\t}\n\t})\n\tIt(\"should provision nodes for a deployment that requests nvidia.com/gpu\", func() {\n\t\tExpectNvidiaDevicePluginCreated()\n\t\tnumPods := 1\n\t\tdep := test.Deployment(test.DeploymentOptions{\n\t\t\tReplicas: int32(numPods),\n\t\t\tPodOptions: test.PodOptions{\n\t\t\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\t\t\tLabels: map[string]string{\"app\": \"large-app\"},\n\t\t\t\t},\n\t\t\t\tResourceRequirements: corev1.ResourceRequirements{\n\t\t\t\t\tRequests: corev1.ResourceList{\n\t\t\t\t\t\t\"nvidia.com/gpu\": resource.MustParse(\"1\"),\n\t\t\t\t\t},\n\t\t\t\t\tLimits: corev1.ResourceList{\n\t\t\t\t\t\t\"nvidia.com/gpu\": resource.MustParse(\"1\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tselector := labels.SelectorFromSet(dep.Spec.Selector.MatchLabels)\n\t\ttest.ReplaceRequirements(nodePool, karpv1.NodeSelectorRequirementWithMinValues{\n\t\t\tKey:      v1.LabelInstanceCategory,\n\t\t\tOperator: corev1.NodeSelectorOpExists,\n\t\t})\n\t\ttest.ReplaceRequirements(nodePool, karpv1.NodeSelectorRequirementWithMinValues{\n\t\t\tKey:      v1.LabelInstanceFamily,\n\t\t\tOperator: corev1.NodeSelectorOpNotIn,\n\t\t\tValues:   []string{\"g6f\"},\n\t\t})\n\t\tenv.ExpectCreated(nodeClass, nodePool, dep)\n\t\tenv.EventuallyExpectHealthyPodCount(selector, numPods)\n\t\tenv.ExpectCreatedNodeCount(\"==\", 1)\n\t\tenv.EventuallyExpectInitializedNodeCount(\"==\", 1)\n\t})\n\tIt(\"should provision nodes for a deployment that requests nvidia.com/gpu (Bottlerocket)\", func() {\n\t\t// For Bottlerocket, we are testing that resources are initialized without needing a device plugin\n\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{Alias: \"bottlerocket@latest\"}}\n\t\tnumPods := 1\n\t\tdep := test.Deployment(test.DeploymentOptions{\n\t\t\tReplicas: int32(numPods),\n\t\t\tPodOptions: test.PodOptions{\n\t\t\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\t\t\tLabels: map[string]string{\"app\": \"large-app\"},\n\t\t\t\t},\n\t\t\t\tResourceRequirements: corev1.ResourceRequirements{\n\t\t\t\t\tRequests: corev1.ResourceList{\n\t\t\t\t\t\t\"nvidia.com/gpu\": resource.MustParse(\"1\"),\n\t\t\t\t\t},\n\t\t\t\t\tLimits: corev1.ResourceList{\n\t\t\t\t\t\t\"nvidia.com/gpu\": resource.MustParse(\"1\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tselector := labels.SelectorFromSet(dep.Spec.Selector.MatchLabels)\n\t\ttest.ReplaceRequirements(nodePool, karpv1.NodeSelectorRequirementWithMinValues{\n\t\t\tKey:      v1.LabelInstanceCategory,\n\t\t\tOperator: corev1.NodeSelectorOpExists,\n\t\t})\n\t\ttest.ReplaceRequirements(nodePool, karpv1.NodeSelectorRequirementWithMinValues{\n\t\t\tKey:      v1.LabelInstanceFamily,\n\t\t\tOperator: corev1.NodeSelectorOpNotIn,\n\t\t\tValues:   []string{\"g6f\"},\n\t\t})\n\t\tenv.ExpectCreated(nodeClass, nodePool, dep)\n\t\tenv.EventuallyExpectHealthyPodCount(selector, numPods)\n\t\tenv.ExpectCreatedNodeCount(\"==\", 1)\n\t\tenv.EventuallyExpectInitializedNodeCount(\"==\", 1)\n\t})\n\tIt(\"should provision nodes for a deployment that requests aws.amazon.com/neuron\", func() {\n\t\tExpectNeuronDevicePluginCreated()\n\t\tnumPods := 1\n\t\tdep := test.Deployment(test.DeploymentOptions{\n\t\t\tReplicas: int32(numPods),\n\t\t\tPodOptions: test.PodOptions{\n\t\t\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\t\t\tLabels: map[string]string{\"app\": \"large-app\"},\n\t\t\t\t},\n\t\t\t\tResourceRequirements: corev1.ResourceRequirements{\n\t\t\t\t\tRequests: corev1.ResourceList{\n\t\t\t\t\t\t// Only 1 is requested to avoid the use of the Neuron scheduler\n\t\t\t\t\t\t// TODO: bryantbiggs@ add the ability to specify the scheduler name to test.PodOptions in order to use the Neuron scheduler\n\t\t\t\t\t\t\"aws.amazon.com/neuron\": resource.MustParse(\"1\"),\n\t\t\t\t\t},\n\t\t\t\t\tLimits: corev1.ResourceList{\n\t\t\t\t\t\t\"aws.amazon.com/neuron\": resource.MustParse(\"1\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tselector := labels.SelectorFromSet(dep.Spec.Selector.MatchLabels)\n\t\ttest.ReplaceRequirements(nodePool, karpv1.NodeSelectorRequirementWithMinValues{\n\t\t\tKey:      v1.LabelInstanceCategory,\n\t\t\tOperator: corev1.NodeSelectorOpExists,\n\t\t})\n\t\ttest.ReplaceRequirements(nodePool, karpv1.NodeSelectorRequirementWithMinValues{\n\t\t\tKey:      v1.LabelInstanceGeneration,\n\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\tValues:   []string{\"1\", \"2\"},\n\t\t})\n\t\tenv.ExpectCreated(nodeClass, nodePool, dep)\n\t\tenv.EventuallyExpectHealthyPodCount(selector, numPods)\n\t\tenv.ExpectCreatedNodeCount(\"==\", 1)\n\t\tenv.EventuallyExpectInitializedNodeCount(\"==\", 1)\n\t})\n\tIt(\"should provision nodes for a deployment that requests aws.amazon.com/neuroncore\", func() {\n\t\tExpectNeuronDevicePluginCreated()\n\t\tnumPods := 1\n\t\tdep := test.Deployment(test.DeploymentOptions{\n\t\t\tReplicas: int32(numPods),\n\t\t\tPodOptions: test.PodOptions{\n\t\t\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\t\t\tLabels: map[string]string{\"app\": \"large-app\"},\n\t\t\t\t},\n\t\t\t\tResourceRequirements: corev1.ResourceRequirements{\n\t\t\t\t\tRequests: corev1.ResourceList{\n\t\t\t\t\t\t// Only 1 is requested to avoid the use of the Neuron scheduler\n\t\t\t\t\t\t// TODO: bryantbiggs@ add the ability to specify the scheduler name to test.PodOptions in order to use the Neuron scheduler\n\t\t\t\t\t\t\"aws.amazon.com/neuroncore\": resource.MustParse(\"1\"),\n\t\t\t\t\t},\n\t\t\t\t\tLimits: corev1.ResourceList{\n\t\t\t\t\t\t\"aws.amazon.com/neuroncore\": resource.MustParse(\"1\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tselector := labels.SelectorFromSet(dep.Spec.Selector.MatchLabels)\n\t\ttest.ReplaceRequirements(nodePool, karpv1.NodeSelectorRequirementWithMinValues{\n\t\t\tKey:      v1.LabelInstanceCategory,\n\t\t\tOperator: corev1.NodeSelectorOpExists,\n\t\t})\n\t\ttest.ReplaceRequirements(nodePool, karpv1.NodeSelectorRequirementWithMinValues{\n\t\t\tKey:      v1.LabelInstanceGeneration,\n\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\tValues:   []string{\"1\", \"2\"},\n\t\t})\n\t\tenv.ExpectCreated(nodeClass, nodePool, dep)\n\t\tenv.EventuallyExpectHealthyPodCount(selector, numPods)\n\t\tenv.ExpectCreatedNodeCount(\"==\", 1)\n\t\tenv.EventuallyExpectInitializedNodeCount(\"==\", 1)\n\t})\n\tIt(\"should provision nodes for a deployment that requests vpc.amazonaws.com/pod-eni (security groups for pods)\", func() {\n\t\tenv.ExpectPodENIEnabled()\n\t\tDeferCleanup(func() {\n\t\t\tenv.ExpectPodENIDisabled()\n\t\t})\n\t\tenv.ExpectCreated(nodeClass) // Creating the nodeclass first to discover the security groups\n\n\t\t// evenutally expect the status on the nodeclass to be hydrated\n\t\tEventually(func(g Gomega) {\n\t\t\tnodeClass = env.ExpectExists(nodeClass).(*v1.EC2NodeClass)\n\t\t\tg.Expect(len(nodeClass.Status.SecurityGroups)).To(BeNumerically(\">\", 0))\n\t\t}).Should(Succeed())\n\t\tsecurityGroupIDs := lo.Map(nodeClass.Status.SecurityGroups, func(sg v1.SecurityGroup, _ int) string {\n\t\t\treturn sg.ID\n\t\t})\n\n\t\tnumPods := 1\n\t\tdep := test.Deployment(test.DeploymentOptions{\n\t\t\tReplicas: int32(numPods),\n\t\t\tPodOptions: test.PodOptions{\n\t\t\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\t\t\tLabels: map[string]string{\"app\": \"large-app\"},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tselector := labels.SelectorFromSet(dep.Spec.Selector.MatchLabels)\n\t\tsgp := &v1beta1.SecurityGroupPolicy{\n\t\t\tObjectMeta: test.NamespacedObjectMeta(),\n\t\t\tSpec: v1beta1.SecurityGroupPolicySpec{\n\t\t\t\tPodSelector: metav1.SetAsLabelSelector(dep.Spec.Selector.MatchLabels),\n\t\t\t\tSecurityGroups: v1beta1.GroupIds{\n\t\t\t\t\tGroups: securityGroupIDs,\n\t\t\t\t},\n\t\t\t},\n\t\t}\n\n\t\tenv.ExpectCreated(nodePool, dep, sgp)\n\t\tenv.EventuallyExpectHealthyPodCount(selector, numPods)\n\t\tenv.ExpectCreatedNodeCount(\"==\", 1)\n\t\tenv.EventuallyExpectInitializedNodeCount(\"==\", 1)\n\t})\n\tIt(\"should provision nodes for a deployment that requests amd.com/gpu\", func() {\n\t\tSkip(\"skipping test on AMD instance types\")\n\t\tExpectAMDDevicePluginCreated()\n\n\t\tcustomAMI := env.GetAMIBySSMPath(fmt.Sprintf(\"/aws/service/eks/optimized-ami/%s/amazon-linux-2023/x86_64/standard/recommended/image_id\", env.K8sVersion()))\n\n\t\t// We create custom userData that installs the AMD Radeon driver and then performs the EKS bootstrap script\n\t\t// We use a Custom AMI so that we can reboot after we start the kubelet service\n\t\trawContent, err := os.ReadFile(\"testdata/amd_driver_input.sh\")\n\t\tExpect(err).ToNot(HaveOccurred())\n\t\tnodeClass.Spec.AMIFamily = lo.ToPtr(v1.AMIFamilyCustom)\n\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{ID: customAMI}}\n\t\tnodeClass.Spec.UserData = lo.ToPtr(fmt.Sprintf(string(rawContent), env.ClusterName,\n\t\t\tenv.ClusterEndpoint, env.ExpectCABundle(), nodePool.Name))\n\n\t\tnumPods := 1\n\t\tdep := test.Deployment(test.DeploymentOptions{\n\t\t\tReplicas: int32(numPods),\n\t\t\tPodOptions: test.PodOptions{\n\t\t\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\t\t\tLabels: map[string]string{\"app\": \"large-app\"},\n\t\t\t\t},\n\t\t\t\tResourceRequirements: corev1.ResourceRequirements{\n\t\t\t\t\tRequests: corev1.ResourceList{\n\t\t\t\t\t\t\"amd.com/gpu\": resource.MustParse(\"1\"),\n\t\t\t\t\t},\n\t\t\t\t\tLimits: corev1.ResourceList{\n\t\t\t\t\t\t\"amd.com/gpu\": resource.MustParse(\"1\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tselector := labels.SelectorFromSet(dep.Spec.Selector.MatchLabels)\n\t\tenv.ExpectCreated(nodeClass, nodePool, dep)\n\t\tEventually(func(g Gomega) {\n\t\t\tg.Expect(env.Monitor.RunningPodsCount(selector)).To(Equal(numPods))\n\t\t}).WithTimeout(15 * time.Minute).Should(Succeed()) // The node needs additional time to install the AMD GPU driver\n\t\tenv.ExpectCreatedNodeCount(\"==\", 1)\n\t\tenv.EventuallyExpectInitializedNodeCount(\"==\", 1)\n\t})\n\t// Need to subscribe to the AMI to run the test successfully\n\t// https://aws.amazon.com/marketplace/pp/prodview-st5jc2rk3phr2?sr=0-2&ref_=beagle&applicationId=AWSMPContessa\n\tIt(\"should provision nodes for a deployment that requests habana.ai/gaudi\", func() {\n\t\tSkip(\"skipping test on an exotic instance type\")\n\t\tExpectHabanaDevicePluginCreated()\n\n\t\tnodeClass.Spec.AMIFamily = lo.ToPtr(v1.AMIFamilyAL2023)\n\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{\n\t\t\t{\n\t\t\t\tID: \"ami-0fae925f94979981f\",\n\t\t\t},\n\t\t}\n\t\tnumPods := 1\n\t\tdep := test.Deployment(test.DeploymentOptions{\n\t\t\tReplicas: int32(numPods),\n\t\t\tPodOptions: test.PodOptions{\n\t\t\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\t\t\tLabels: map[string]string{\"app\": \"large-app\"},\n\t\t\t\t},\n\t\t\t\tResourceRequirements: corev1.ResourceRequirements{\n\t\t\t\t\tRequests: corev1.ResourceList{\n\t\t\t\t\t\t\"habana.ai/gaudi\": resource.MustParse(\"1\"),\n\t\t\t\t\t},\n\t\t\t\t\tLimits: corev1.ResourceList{\n\t\t\t\t\t\t\"habana.ai/gaudi\": resource.MustParse(\"1\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tselector := labels.SelectorFromSet(dep.Spec.Selector.MatchLabels)\n\t\tenv.ExpectCreated(nodeClass, nodePool, dep)\n\t\tenv.EventuallyExpectHealthyPodCount(selector, numPods)\n\t\tenv.ExpectCreatedNodeCount(\"==\", 1)\n\t\tenv.EventuallyExpectInitializedNodeCount(\"==\", 1)\n\t})\n\n\tIt(\"should provision nodes for a deployment that requests vpc.amazonaws.com/efa\", func() {\n\t\tExpectEFADevicePluginCreated()\n\n\t\tnodePool.Spec.Template.Labels = map[string]string{\n\t\t\t\"aws.amazon.com/efa\": \"true\",\n\t\t}\n\t\tnodePool.Spec.Template.Spec.Taints = []corev1.Taint{\n\t\t\t{\n\t\t\t\tKey:    \"aws.amazon.com/efa\",\n\t\t\t\tEffect: corev1.TaintEffectNoSchedule,\n\t\t\t},\n\t\t}\n\t\t// Only select private subnets since instances with multiple network instances at launch won't get a public IP.\n\t\tnodeClass.Spec.SubnetSelectorTerms[0].Tags[\"Name\"] = \"*Private*\"\n\n\t\tnumPods := 1\n\t\tdep := test.Deployment(test.DeploymentOptions{\n\t\t\tReplicas: int32(numPods),\n\t\t\tPodOptions: test.PodOptions{\n\t\t\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\t\t\tLabels: map[string]string{\"app\": \"efa-app\"},\n\t\t\t\t},\n\t\t\t\tTolerations: []corev1.Toleration{\n\t\t\t\t\t{\n\t\t\t\t\t\tKey:      \"aws.amazon.com/efa\",\n\t\t\t\t\t\tOperator: corev1.TolerationOpExists,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tResourceRequirements: corev1.ResourceRequirements{\n\t\t\t\t\tRequests: corev1.ResourceList{\n\t\t\t\t\t\t\"vpc.amazonaws.com/efa\": resource.MustParse(\"1\"),\n\t\t\t\t\t},\n\t\t\t\t\tLimits: corev1.ResourceList{\n\t\t\t\t\t\t\"vpc.amazonaws.com/efa\": resource.MustParse(\"1\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tselector := labels.SelectorFromSet(dep.Spec.Selector.MatchLabels)\n\t\tenv.ExpectCreated(nodeClass, nodePool, dep)\n\t\tenv.EventuallyExpectHealthyPodCount(selector, numPods)\n\t\tenv.ExpectCreatedNodeCount(\"==\", 1)\n\t\tenv.EventuallyExpectInitializedNodeCount(\"==\", 1)\n\t})\n})\n\nfunc ExpectNvidiaDevicePluginCreated() {\n\tGinkgoHelper()\n\tenv.ExpectCreated(&appsv1.DaemonSet{\n\t\tObjectMeta: test.ObjectMeta(metav1.ObjectMeta{\n\t\t\tName:      \"nvidia-device-plugin-daemonset\",\n\t\t\tNamespace: \"kube-system\",\n\t\t}),\n\t\tSpec: appsv1.DaemonSetSpec{\n\t\t\tSelector: &metav1.LabelSelector{\n\t\t\t\tMatchLabels: map[string]string{\n\t\t\t\t\t\"name\": \"nvidia-device-plugin-ds\",\n\t\t\t\t},\n\t\t\t},\n\t\t\tUpdateStrategy: appsv1.DaemonSetUpdateStrategy{\n\t\t\t\tType: appsv1.RollingUpdateDaemonSetStrategyType,\n\t\t\t},\n\t\t\tTemplate: corev1.PodTemplateSpec{\n\t\t\t\tObjectMeta: test.ObjectMeta(metav1.ObjectMeta{\n\t\t\t\t\tLabels: map[string]string{\n\t\t\t\t\t\t\"name\": \"nvidia-device-plugin-ds\",\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t\tSpec: corev1.PodSpec{\n\t\t\t\t\tTolerations: []corev1.Toleration{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey:      \"nvidia.com/gpu\",\n\t\t\t\t\t\t\tOperator: corev1.TolerationOpExists,\n\t\t\t\t\t\t\tEffect:   corev1.TaintEffectNoSchedule,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tPriorityClassName: \"system-node-critical\",\n\t\t\t\t\tContainers: []corev1.Container{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:  \"nvidia-device-plugin-ctr\",\n\t\t\t\t\t\t\tImage: \"nvcr.io/nvidia/k8s-device-plugin:v0.12.3\",\n\t\t\t\t\t\t\tEnv: []corev1.EnvVar{\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tName:  \"FAIL_ON_INIT_ERROR\",\n\t\t\t\t\t\t\t\t\tValue: \"false\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tSecurityContext: &corev1.SecurityContext{\n\t\t\t\t\t\t\t\tAllowPrivilegeEscalation: lo.ToPtr(false),\n\t\t\t\t\t\t\t\tCapabilities: &corev1.Capabilities{\n\t\t\t\t\t\t\t\t\tDrop: []corev1.Capability{\"ALL\"},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tVolumeMounts: []corev1.VolumeMount{\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tName:      \"device-plugin\",\n\t\t\t\t\t\t\t\t\tMountPath: \"/var/lib/kubelet/device-plugins\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tVolumes: []corev1.Volume{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName: \"device-plugin\",\n\t\t\t\t\t\t\tVolumeSource: corev1.VolumeSource{\n\t\t\t\t\t\t\t\tHostPath: &corev1.HostPathVolumeSource{\n\t\t\t\t\t\t\t\t\tPath: \"/var/lib/kubelet/device-plugins\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t})\n}\n\n// https://github.com/aws-neuron/aws-neuron-sdk/blob/master/src/k8/k8s-neuron-device-plugin.yml\nfunc ExpectNeuronDevicePluginCreated() {\n\tGinkgoHelper()\n\n\t// When selecting more than 1 neuron/neuroncore but less than ALL of the neuron/neuroncores on the instance,\n\t// you must use the Neuron scheduler to schedule neuron/neuroncores in a contiguous manner.\n\t// https://awsdocs-neuron.readthedocs-hosted.com/en/latest/containers/kubernetes-getting-started.html#neuron-scheduler-extension\n\tExpectK8sNeuronSchedulerCreated()\n\tExpectNeuronSchedulerExtensionCreated()\n\n\tneuronDevicePlugin := \"neuron-device-plugin\"\n\n\tenv.ExpectCreatedOrUpdated(&rbacv1.ClusterRole{\n\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\tName: neuronDevicePlugin,\n\t\t},\n\t\tRules: []rbacv1.PolicyRule{\n\t\t\t// Device plugin\n\t\t\t{\n\t\t\t\tAPIGroups: []string{\"\"},\n\t\t\t\tResources: []string{\"nodes\"},\n\t\t\t\tVerbs:     []string{\"get\", \"list\", \"watch\"},\n\t\t\t},\n\t\t\t{\n\t\t\t\tAPIGroups: []string{\"\"},\n\t\t\t\tResources: []string{\"events\"},\n\t\t\t\tVerbs:     []string{\"create\", \"patch\"},\n\t\t\t},\n\t\t\t{\n\t\t\t\tAPIGroups: []string{\"\"},\n\t\t\t\tResources: []string{\"pods\"},\n\t\t\t\tVerbs:     []string{\"update\", \"patch\", \"get\", \"list\", \"watch\"},\n\t\t\t},\n\t\t\t{\n\t\t\t\tAPIGroups: []string{\"\"},\n\t\t\t\tResources: []string{\"nodes/status\"},\n\t\t\t\tVerbs:     []string{\"update\", \"patch\"},\n\t\t\t},\n\t\t\t// Scheduler\n\t\t\t{\n\t\t\t\tAPIGroups: []string{\"\"},\n\t\t\t\tResources: []string{\"configmaps\"},\n\t\t\t\tVerbs:     []string{\"get\", \"list\", \"watch\"},\n\t\t\t},\n\t\t\t{\n\t\t\t\tAPIGroups: []string{\"coordination.k8s.io\"},\n\t\t\t\tResources: []string{\"leases\"},\n\t\t\t\tVerbs:     []string{\"create\", \"get\", \"list\", \"update\"},\n\t\t\t},\n\t\t},\n\t})\n\n\tenv.ExpectCreatedOrUpdated(&rbacv1.ClusterRoleBinding{\n\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\tName: neuronDevicePlugin,\n\t\t},\n\t\tRoleRef: rbacv1.RoleRef{\n\t\t\tAPIGroup: rbacv1.GroupName,\n\t\t\tKind:     \"ClusterRole\",\n\t\t\tName:     neuronDevicePlugin,\n\t\t},\n\t\tSubjects: []rbacv1.Subject{\n\t\t\t{\n\t\t\t\tKind:      \"ServiceAccount\",\n\t\t\t\tName:      neuronDevicePlugin,\n\t\t\t\tNamespace: \"kube-system\",\n\t\t\t},\n\t\t},\n\t})\n\n\tenv.ExpectCreatedOrUpdated(&corev1.ServiceAccount{\n\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\tName:      neuronDevicePlugin,\n\t\t\tNamespace: \"kube-system\",\n\t\t},\n\t})\n\n\tenv.ExpectCreated(&appsv1.DaemonSet{\n\t\tObjectMeta: test.ObjectMeta(metav1.ObjectMeta{\n\t\t\tName:      neuronDevicePlugin,\n\t\t\tNamespace: \"kube-system\",\n\t\t}),\n\t\tSpec: appsv1.DaemonSetSpec{\n\t\t\tSelector: &metav1.LabelSelector{\n\t\t\t\tMatchLabels: map[string]string{\n\t\t\t\t\t\"name\": neuronDevicePlugin,\n\t\t\t\t},\n\t\t\t},\n\t\t\tUpdateStrategy: appsv1.DaemonSetUpdateStrategy{\n\t\t\t\tType: appsv1.RollingUpdateDaemonSetStrategyType,\n\t\t\t},\n\t\t\tTemplate: corev1.PodTemplateSpec{\n\t\t\t\tObjectMeta: test.ObjectMeta(metav1.ObjectMeta{\n\t\t\t\t\tLabels: map[string]string{\n\t\t\t\t\t\t\"name\": neuronDevicePlugin,\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t\tSpec: corev1.PodSpec{\n\t\t\t\t\tServiceAccountName: neuronDevicePlugin,\n\t\t\t\t\tTolerations: []corev1.Toleration{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey:      \"aws.amazon.com/neuron\",\n\t\t\t\t\t\t\tOperator: corev1.TolerationOpExists,\n\t\t\t\t\t\t\tEffect:   corev1.TaintEffectNoSchedule,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tPriorityClassName: \"system-node-critical\",\n\t\t\t\t\tContainers: []corev1.Container{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:  neuronDevicePlugin,\n\t\t\t\t\t\t\tImage: \"public.ecr.aws/neuron/neuron-device-plugin:2.22.4.0\",\n\t\t\t\t\t\t\tEnv: []corev1.EnvVar{\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tName:  \"KUBECONFIG\",\n\t\t\t\t\t\t\t\t\tValue: \"/etc/kubernetes/kubelet.conf\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tName: \"NODE_NAME\",\n\t\t\t\t\t\t\t\t\tValueFrom: &corev1.EnvVarSource{\n\t\t\t\t\t\t\t\t\t\tFieldRef: &corev1.ObjectFieldSelector{\n\t\t\t\t\t\t\t\t\t\t\tFieldPath: \"spec.nodeName\",\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tSecurityContext: &corev1.SecurityContext{\n\t\t\t\t\t\t\t\tAllowPrivilegeEscalation: lo.ToPtr(false),\n\t\t\t\t\t\t\t\tCapabilities: &corev1.Capabilities{\n\t\t\t\t\t\t\t\t\tDrop: []corev1.Capability{\"ALL\"},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tVolumeMounts: []corev1.VolumeMount{\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tName:      \"device-plugin\",\n\t\t\t\t\t\t\t\t\tMountPath: \"/var/lib/kubelet/device-plugins\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tName:      \"infa-map\",\n\t\t\t\t\t\t\t\t\tMountPath: \"/run\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tVolumes: []corev1.Volume{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName: \"device-plugin\",\n\t\t\t\t\t\t\tVolumeSource: corev1.VolumeSource{\n\t\t\t\t\t\t\t\tHostPath: &corev1.HostPathVolumeSource{\n\t\t\t\t\t\t\t\t\tPath: \"/var/lib/kubelet/device-plugins\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName: \"infa-map\",\n\t\t\t\t\t\t\tVolumeSource: corev1.VolumeSource{\n\t\t\t\t\t\t\t\tHostPath: &corev1.HostPathVolumeSource{\n\t\t\t\t\t\t\t\t\tPath: \"/run\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t})\n}\n\n// https://github.com/aws-neuron/aws-neuron-sdk/blob/master/src/k8/k8s-neuron-scheduler-eks.yml\nfunc ExpectK8sNeuronSchedulerCreated() {\n\tGinkgoHelper()\n\n\tk8sNeuronScheduler := \"k8s-neuron-scheduler\"\n\n\tenv.ExpectCreatedOrUpdated(&corev1.ServiceAccount{\n\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\tName:      k8sNeuronScheduler,\n\t\t\tNamespace: \"kube-system\",\n\t\t},\n\t})\n\n\tenv.ExpectCreatedOrUpdated(&rbacv1.ClusterRole{\n\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\tName: k8sNeuronScheduler,\n\t\t},\n\t\tRules: []rbacv1.PolicyRule{\n\t\t\t{\n\t\t\t\tAPIGroups: []string{\"\"},\n\t\t\t\tResources: []string{\"nodes\"},\n\t\t\t\tVerbs:     []string{\"get\", \"list\", \"watch\"},\n\t\t\t},\n\t\t\t{\n\t\t\t\tAPIGroups: []string{\"\"},\n\t\t\t\tResources: []string{\"node/status\"},\n\t\t\t\tVerbs:     []string{\"update\", \"patch\", \"get\", \"list\", \"watch\"},\n\t\t\t},\n\t\t\t{\n\t\t\t\tAPIGroups: []string{\"\"},\n\t\t\t\tResources: []string{\"events\"},\n\t\t\t\tVerbs:     []string{\"create\", \"patch\"},\n\t\t\t},\n\t\t\t{\n\t\t\t\tAPIGroups: []string{\"\"},\n\t\t\t\tResources: []string{\"pods\"},\n\t\t\t\tVerbs:     []string{\"update\", \"patch\", \"get\", \"list\", \"watch\"},\n\t\t\t},\n\t\t\t{\n\t\t\t\tAPIGroups: []string{\"\"},\n\t\t\t\tResources: []string{\"bindings\", \"pods/bindings\"},\n\t\t\t\tVerbs:     []string{\"create\"},\n\t\t\t},\n\t\t},\n\t})\n\n\tenv.ExpectCreatedOrUpdated(&rbacv1.ClusterRoleBinding{\n\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\tName: k8sNeuronScheduler,\n\t\t},\n\t\tRoleRef: rbacv1.RoleRef{\n\t\t\tAPIGroup: rbacv1.GroupName,\n\t\t\tKind:     \"ClusterRole\",\n\t\t\tName:     k8sNeuronScheduler,\n\t\t},\n\t\tSubjects: []rbacv1.Subject{\n\t\t\t{\n\t\t\t\tKind:      \"ServiceAccount\",\n\t\t\t\tName:      k8sNeuronScheduler,\n\t\t\t\tNamespace: \"kube-system\",\n\t\t\t},\n\t\t},\n\t})\n\n\tenv.ExpectCreatedOrUpdated(&corev1.Service{\n\t\tObjectMeta: test.ObjectMeta(metav1.ObjectMeta{\n\t\t\tName:      k8sNeuronScheduler,\n\t\t\tNamespace: \"kube-system\",\n\t\t}),\n\t\tSpec: corev1.ServiceSpec{\n\t\t\tSelector: map[string]string{\n\t\t\t\t\"app\": k8sNeuronScheduler,\n\t\t\t},\n\t\t\tPorts: []corev1.ServicePort{\n\t\t\t\t{\n\t\t\t\t\tName:       \"http\",\n\t\t\t\t\tPort:       12345,\n\t\t\t\t\tTargetPort: intstr.FromInt(12345),\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t})\n\n\treplicas := int32(1)\n\n\tenv.ExpectCreatedOrUpdated(&appsv1.Deployment{\n\t\tObjectMeta: test.ObjectMeta(metav1.ObjectMeta{\n\t\t\tName:      k8sNeuronScheduler,\n\t\t\tNamespace: \"kube-system\",\n\t\t}),\n\t\tSpec: appsv1.DeploymentSpec{\n\t\t\tReplicas: &replicas,\n\t\t\tStrategy: appsv1.DeploymentStrategy{\n\t\t\t\tType: appsv1.RecreateDeploymentStrategyType,\n\t\t\t},\n\t\t\tSelector: &metav1.LabelSelector{\n\t\t\t\tMatchLabels: map[string]string{\n\t\t\t\t\t\"app\": k8sNeuronScheduler,\n\t\t\t\t},\n\t\t\t},\n\t\t\tTemplate: corev1.PodTemplateSpec{\n\t\t\t\tObjectMeta: test.ObjectMeta(metav1.ObjectMeta{\n\t\t\t\t\tLabels: map[string]string{\n\t\t\t\t\t\t\"app\": k8sNeuronScheduler,\n\t\t\t\t\t},\n\t\t\t\t\tAnnotations: map[string]string{\n\t\t\t\t\t\t\"scheduler.alpha.kubernetes.io/critical-pod\": \"\",\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t\tSpec: corev1.PodSpec{\n\t\t\t\t\tServiceAccountName: k8sNeuronScheduler,\n\t\t\t\t\tPriorityClassName:  \"system-node-critical\",\n\t\t\t\t\tSchedulerName:      k8sNeuronScheduler,\n\t\t\t\t\tTolerations: []corev1.Toleration{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey:      \"CriticalAddonsOnly\",\n\t\t\t\t\t\t\tOperator: corev1.TolerationOpExists,\n\t\t\t\t\t\t\tEffect:   corev1.TaintEffectNoSchedule,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tContainers: []corev1.Container{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:  k8sNeuronScheduler,\n\t\t\t\t\t\t\tImage: \"public.ecr.aws/neuron/neuron-scheduler:2.22.4.0\",\n\t\t\t\t\t\t\tPorts: []corev1.ContainerPort{\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tName:          \"http\",\n\t\t\t\t\t\t\t\t\tContainerPort: 12345,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tEnv: []corev1.EnvVar{\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tName:  \"PORT\",\n\t\t\t\t\t\t\t\t\tValue: \"12345\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t})\n}\n\n// https://github.com/aws-neuron/aws-neuron-sdk/blob/master/src/k8/my-scheduler.yml\nfunc ExpectNeuronSchedulerExtensionCreated() {\n\tGinkgoHelper()\n\n\tneuronSchedulerExtension := \"neuron-scheduler-ext\"\n\n\tenv.ExpectCreatedOrUpdated(&corev1.ServiceAccount{\n\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\tName:      neuronSchedulerExtension,\n\t\t\tNamespace: \"kube-system\",\n\t\t},\n\t})\n\n\tenv.ExpectCreatedOrUpdated(&rbacv1.ClusterRole{\n\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\tName: neuronSchedulerExtension,\n\t\t},\n\t\tRules: []rbacv1.PolicyRule{\n\t\t\t{\n\t\t\t\tAPIGroups: []string{\"\"},\n\t\t\t\tResources: []string{\"configmaps\"},\n\t\t\t\tVerbs:     []string{\"get\", \"list\", \"watch\"},\n\t\t\t},\n\t\t\t{\n\t\t\t\tAPIGroups: []string{\"coordination.k8s.io\"},\n\t\t\t\tResources: []string{\"leases\"},\n\t\t\t\tVerbs:     []string{\"create\", \"get\", \"list\", \"update\"},\n\t\t\t},\n\t\t},\n\t})\n\n\tenv.ExpectCreatedOrUpdated(&rbacv1.ClusterRoleBinding{\n\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\tName: fmt.Sprintf(\"%s-kube-scheduler\", neuronSchedulerExtension),\n\t\t},\n\t\tSubjects: []rbacv1.Subject{\n\t\t\t{\n\t\t\t\tKind:      \"ServiceAccount\",\n\t\t\t\tName:      neuronSchedulerExtension,\n\t\t\t\tNamespace: \"kube-system\",\n\t\t\t},\n\t\t},\n\t\tRoleRef: rbacv1.RoleRef{\n\t\t\tAPIGroup: rbacv1.GroupName,\n\t\t\tKind:     \"ClusterRole\",\n\t\t\tName:     \"system:kube-scheduler\",\n\t\t},\n\t})\n\tenv.ExpectCreatedOrUpdated(&rbacv1.ClusterRoleBinding{\n\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\tName: fmt.Sprintf(\"%s-volume-scheduler\", neuronSchedulerExtension),\n\t\t},\n\t\tSubjects: []rbacv1.Subject{\n\t\t\t{\n\t\t\t\tKind:      \"ServiceAccount\",\n\t\t\t\tName:      neuronSchedulerExtension,\n\t\t\t\tNamespace: \"kube-system\",\n\t\t\t},\n\t\t},\n\t\tRoleRef: rbacv1.RoleRef{\n\t\t\tAPIGroup: rbacv1.GroupName,\n\t\t\tKind:     \"ClusterRole\",\n\t\t\tName:     \"system:volume-scheduler\",\n\t\t},\n\t})\n\tenv.ExpectCreatedOrUpdated(&rbacv1.ClusterRoleBinding{\n\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\tName: neuronSchedulerExtension,\n\t\t},\n\t\tSubjects: []rbacv1.Subject{\n\t\t\t{\n\t\t\t\tKind:      \"ServiceAccount\",\n\t\t\t\tName:      neuronSchedulerExtension,\n\t\t\t\tNamespace: \"kube-system\",\n\t\t\t},\n\t\t},\n\t\tRoleRef: rbacv1.RoleRef{\n\t\t\tAPIGroup: rbacv1.GroupName,\n\t\t\tKind:     \"ClusterRole\",\n\t\t\tName:     neuronSchedulerExtension,\n\t\t},\n\t})\n\n\tenv.ExpectCreatedOrUpdated(&corev1.ConfigMap{\n\t\tObjectMeta: test.ObjectMeta(metav1.ObjectMeta{\n\t\t\tName:      fmt.Sprintf(\"%s-config\", neuronSchedulerExtension),\n\t\t\tNamespace: \"kube-system\",\n\t\t}),\n\t\tData: map[string]string{\n\t\t\tfmt.Sprintf(\"%s-config.yaml\", neuronSchedulerExtension): fmt.Sprintf(`apiVersion: kubescheduler.config.k8s.io/v1\nkind: KubeSchedulerConfiguration\nprofiles:\n  - schedulerName: %[1]v\nextenders:\n  - urlPrefix: 'http://k8s-neuron-scheduler.kube-system.svc.cluster.local:12345'\n    filterVerb: filter\n    bindVerb: bind\n    enableHTTPS: false\n    nodeCacheCapable: true\n    managedResources:\n      - name: 'aws.amazon.com/neuron'\n        ignoredByScheduler: false\n      - name: 'aws.amazon.com/neuroncore'\n        ignoredByScheduler: false\n      - name: 'aws.amazon.com/neurondevice'\n        ignoredByScheduler: false\n    ignorable: false\nleaderElection:\n  leaderElect: true\n  resourceNamespace: kube-system\n  resourceName: %[1]v`, neuronSchedulerExtension),\n\t\t},\n\t})\n\n\treplicas := int32(1)\n\n\tenv.ExpectCreatedOrUpdated(&appsv1.Deployment{\n\t\tObjectMeta: test.ObjectMeta(metav1.ObjectMeta{\n\t\t\tName:      neuronSchedulerExtension,\n\t\t\tNamespace: \"kube-system\",\n\t\t\tLabels: map[string]string{\n\t\t\t\t\"tier\": \"control-plane\",\n\t\t\t},\n\t\t}),\n\t\tSpec: appsv1.DeploymentSpec{\n\t\t\tReplicas: &replicas,\n\t\t\tSelector: &metav1.LabelSelector{\n\t\t\t\tMatchLabels: map[string]string{\n\t\t\t\t\t\"tier\": \"control-plane\",\n\t\t\t\t},\n\t\t\t},\n\t\t\tTemplate: corev1.PodTemplateSpec{\n\t\t\t\tObjectMeta: test.ObjectMeta(metav1.ObjectMeta{\n\t\t\t\t\tLabels: map[string]string{\n\t\t\t\t\t\t\"tier\": \"control-plane\",\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t\tSpec: corev1.PodSpec{\n\t\t\t\t\tServiceAccountName: neuronSchedulerExtension,\n\t\t\t\t\tTolerations: []corev1.Toleration{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey:      \"CriticalAddonsOnly\",\n\t\t\t\t\t\t\tOperator: corev1.TolerationOpExists,\n\t\t\t\t\t\t\tEffect:   corev1.TaintEffectNoSchedule,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tContainers: []corev1.Container{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:    neuronSchedulerExtension,\n\t\t\t\t\t\t\tArgs:    []string{fmt.Sprintf(\"--config=/etc/kubernetes/%[1]v/%[1]v-config.yaml\", neuronSchedulerExtension), \"--leader-elect=true\", \"--v=2\"},\n\t\t\t\t\t\t\tCommand: []string{\"/usr/local/bin/kube-scheduler\"},\n\t\t\t\t\t\t\tImage:   fmt.Sprintf(\"public.ecr.aws/eks-distro/kubernetes/kube-scheduler:v1.%[1]v.0-eks-1-%[1]v-latest\", env.K8sMinorVersion()),\n\t\t\t\t\t\t\tLivenessProbe: &corev1.Probe{\n\t\t\t\t\t\t\t\tInitialDelaySeconds: 15,\n\t\t\t\t\t\t\t\tProbeHandler: corev1.ProbeHandler{\n\t\t\t\t\t\t\t\t\tHTTPGet: &corev1.HTTPGetAction{\n\t\t\t\t\t\t\t\t\t\tPath:   \"/healthz\",\n\t\t\t\t\t\t\t\t\t\tPort:   intstr.FromInt(10259),\n\t\t\t\t\t\t\t\t\t\tScheme: corev1.URISchemeHTTPS,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tReadinessProbe: &corev1.Probe{\n\t\t\t\t\t\t\t\tProbeHandler: corev1.ProbeHandler{\n\t\t\t\t\t\t\t\t\tHTTPGet: &corev1.HTTPGetAction{\n\t\t\t\t\t\t\t\t\t\tPath:   \"/healthz\",\n\t\t\t\t\t\t\t\t\t\tPort:   intstr.FromInt(10259),\n\t\t\t\t\t\t\t\t\t\tScheme: corev1.URISchemeHTTPS,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tSecurityContext: &corev1.SecurityContext{\n\t\t\t\t\t\t\t\tPrivileged: lo.ToPtr(false),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tVolumeMounts: []corev1.VolumeMount{\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tName:      \"config-volume\",\n\t\t\t\t\t\t\t\t\tMountPath: fmt.Sprintf(\"/etc/kubernetes/%s\", neuronSchedulerExtension),\n\t\t\t\t\t\t\t\t\tReadOnly:  true,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tHostNetwork: false,\n\t\t\t\t\tHostPID:     false,\n\t\t\t\t\tVolumes: []corev1.Volume{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName: \"config-volume\",\n\t\t\t\t\t\t\tVolumeSource: corev1.VolumeSource{\n\t\t\t\t\t\t\t\tConfigMap: &corev1.ConfigMapVolumeSource{\n\t\t\t\t\t\t\t\t\tLocalObjectReference: corev1.LocalObjectReference{\n\t\t\t\t\t\t\t\t\t\tName: fmt.Sprintf(\"%s-config\", neuronSchedulerExtension),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t})\n}\n\nfunc ExpectAMDDevicePluginCreated() {\n\tGinkgoHelper()\n\tenv.ExpectCreated(&appsv1.DaemonSet{\n\t\tObjectMeta: test.ObjectMeta(metav1.ObjectMeta{\n\t\t\tName:      \"amdgpu-device-plugin-daemonset\",\n\t\t\tNamespace: \"kube-system\",\n\t\t}),\n\t\tSpec: appsv1.DaemonSetSpec{\n\t\t\tSelector: &metav1.LabelSelector{\n\t\t\t\tMatchLabels: map[string]string{\n\t\t\t\t\t\"name\": \"amdgpu-dp-ds\",\n\t\t\t\t},\n\t\t\t},\n\t\t\tTemplate: corev1.PodTemplateSpec{\n\t\t\t\tObjectMeta: test.ObjectMeta(metav1.ObjectMeta{\n\t\t\t\t\tLabels: map[string]string{\n\t\t\t\t\t\t\"name\": \"amdgpu-dp-ds\",\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t\tSpec: corev1.PodSpec{\n\t\t\t\t\tPriorityClassName: \"system-node-critical\",\n\t\t\t\t\tTolerations: []corev1.Toleration{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey:      \"amd.com/gpu\",\n\t\t\t\t\t\t\tOperator: corev1.TolerationOpExists,\n\t\t\t\t\t\t\tEffect:   corev1.TaintEffectNoSchedule,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tContainers: []corev1.Container{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:  \"amdgpu-dp-cntr\",\n\t\t\t\t\t\t\tImage: \"rocm/k8s-device-plugin\",\n\t\t\t\t\t\t\tSecurityContext: &corev1.SecurityContext{\n\t\t\t\t\t\t\t\tAllowPrivilegeEscalation: lo.ToPtr(false),\n\t\t\t\t\t\t\t\tCapabilities: &corev1.Capabilities{\n\t\t\t\t\t\t\t\t\tDrop: []corev1.Capability{\"ALL\"},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tVolumeMounts: []corev1.VolumeMount{\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tName:      \"dp\",\n\t\t\t\t\t\t\t\t\tMountPath: \"/var/lib/kubelet/device-plugins\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tName:      \"sys\",\n\t\t\t\t\t\t\t\t\tMountPath: \"/sys\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tVolumes: []corev1.Volume{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName: \"dp\",\n\t\t\t\t\t\t\tVolumeSource: corev1.VolumeSource{\n\t\t\t\t\t\t\t\tHostPath: &corev1.HostPathVolumeSource{\n\t\t\t\t\t\t\t\t\tPath: \"/var/lib/kubelet/device-plugins\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName: \"sys\",\n\t\t\t\t\t\t\tVolumeSource: corev1.VolumeSource{\n\t\t\t\t\t\t\t\tHostPath: &corev1.HostPathVolumeSource{\n\t\t\t\t\t\t\t\t\tPath: \"/sys\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t})\n}\n\nfunc ExpectHabanaDevicePluginCreated() {\n\tGinkgoHelper()\n\tenv.ExpectCreated(&corev1.Namespace{\n\t\tObjectMeta: test.ObjectMeta(metav1.ObjectMeta{\n\t\t\tName: \"habana-system\",\n\t\t}),\n\t})\n\tenv.ExpectCreated(&appsv1.DaemonSet{\n\t\tObjectMeta: test.ObjectMeta(metav1.ObjectMeta{\n\t\t\tName:      \"habanalabs-device-plugin-daemonset\",\n\t\t\tNamespace: \"habana-system\",\n\t\t}),\n\t\tSpec: appsv1.DaemonSetSpec{\n\t\t\tSelector: &metav1.LabelSelector{\n\t\t\t\tMatchLabels: map[string]string{\n\t\t\t\t\t\"name\": \"habanalabs-device-plugin-ds\",\n\t\t\t\t},\n\t\t\t},\n\t\t\tUpdateStrategy: appsv1.DaemonSetUpdateStrategy{\n\t\t\t\tType: appsv1.RollingUpdateDaemonSetStrategyType,\n\t\t\t},\n\t\t\tTemplate: corev1.PodTemplateSpec{\n\t\t\t\tObjectMeta: test.ObjectMeta(metav1.ObjectMeta{\n\t\t\t\t\tAnnotations: map[string]string{\n\t\t\t\t\t\t\"scheduler.alpha.kubernetes.io/critical-pod\": \"\",\n\t\t\t\t\t},\n\t\t\t\t\tLabels: map[string]string{\n\t\t\t\t\t\t\"name\": \"habanalabs-device-plugin-ds\",\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t\tSpec: corev1.PodSpec{\n\t\t\t\t\tTolerations: []corev1.Toleration{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey:      \"habana.ai/gaudi\",\n\t\t\t\t\t\t\tOperator: corev1.TolerationOpExists,\n\t\t\t\t\t\t\tEffect:   corev1.TaintEffectNoSchedule,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tPriorityClassName: \"system-node-critical\",\n\t\t\t\t\tContainers: []corev1.Container{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:  \"habanalabs-device-plugin-ctr\",\n\t\t\t\t\t\t\tImage: \"vault.habana.ai/docker-k8s-device-plugin/docker-k8s-device-plugin:latest\",\n\t\t\t\t\t\t\tSecurityContext: &corev1.SecurityContext{\n\t\t\t\t\t\t\t\tPrivileged: lo.ToPtr(true),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tVolumeMounts: []corev1.VolumeMount{\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tName:      \"device-plugin\",\n\t\t\t\t\t\t\t\t\tMountPath: \"/var/lib/kubelet/device-plugins\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tVolumes: []corev1.Volume{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName: \"device-plugin\",\n\t\t\t\t\t\t\tVolumeSource: corev1.VolumeSource{\n\t\t\t\t\t\t\t\tHostPath: &corev1.HostPathVolumeSource{\n\t\t\t\t\t\t\t\t\tPath: \"/var/lib/kubelet/device-plugins\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t})\n}\n\nfunc ExpectEFADevicePluginCreated() {\n\tGinkgoHelper()\n\tenv.ExpectCreated(&appsv1.DaemonSet{\n\t\tObjectMeta: test.ObjectMeta(metav1.ObjectMeta{\n\t\t\tName:      \"aws-efa-k8s-device-plugin-daemonset\",\n\t\t\tNamespace: \"kube-system\",\n\t\t}),\n\t\tSpec: appsv1.DaemonSetSpec{\n\t\t\tSelector: &metav1.LabelSelector{\n\t\t\t\tMatchLabels: map[string]string{\n\t\t\t\t\t\"name\": \"aws-efa-k8s-device-plugin\",\n\t\t\t\t},\n\t\t\t},\n\t\t\tUpdateStrategy: appsv1.DaemonSetUpdateStrategy{\n\t\t\t\tType: appsv1.RollingUpdateDaemonSetStrategyType,\n\t\t\t},\n\t\t\tTemplate: corev1.PodTemplateSpec{\n\t\t\t\tObjectMeta: test.ObjectMeta(metav1.ObjectMeta{\n\t\t\t\t\tAnnotations: map[string]string{\n\t\t\t\t\t\t\"scheduler.alpha.kubernetes.io/critical-pod\": \"\",\n\t\t\t\t\t},\n\t\t\t\t\tLabels: map[string]string{\n\t\t\t\t\t\t\"name\": \"aws-efa-k8s-device-plugin\",\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t\tSpec: corev1.PodSpec{\n\t\t\t\t\tNodeSelector: map[string]string{\n\t\t\t\t\t\t\"aws.amazon.com/efa\": \"true\",\n\t\t\t\t\t},\n\t\t\t\t\tTolerations: []corev1.Toleration{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey:      \"CriticalAddonsOnly\",\n\t\t\t\t\t\t\tOperator: corev1.TolerationOpExists,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey:      \"aws.amazon.com/efa\",\n\t\t\t\t\t\t\tOperator: corev1.TolerationOpExists,\n\t\t\t\t\t\t\tEffect:   corev1.TaintEffectNoSchedule,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tPriorityClassName: \"system-node-critical\",\n\t\t\t\t\tHostNetwork:       true,\n\t\t\t\t\tContainers: []corev1.Container{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName:  \"aws-efea-k8s-device-plugin\",\n\t\t\t\t\t\t\tImage: \"602401143452.dkr.ecr.us-west-2.amazonaws.com/eks/aws-efa-k8s-device-plugin:v0.3.3\",\n\t\t\t\t\t\t\tSecurityContext: &corev1.SecurityContext{\n\t\t\t\t\t\t\t\tAllowPrivilegeEscalation: lo.ToPtr(false),\n\t\t\t\t\t\t\t\tCapabilities: &corev1.Capabilities{\n\t\t\t\t\t\t\t\t\tDrop: []corev1.Capability{\"ALL\"},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tRunAsNonRoot: lo.ToPtr(false),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tVolumeMounts: []corev1.VolumeMount{\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tName:      \"device-plugin\",\n\t\t\t\t\t\t\t\t\tMountPath: \"/var/lib/kubelet/device-plugins\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tVolumes: []corev1.Volume{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tName: \"device-plugin\",\n\t\t\t\t\t\t\tVolumeSource: corev1.VolumeSource{\n\t\t\t\t\t\t\t\tHostPath: &corev1.HostPathVolumeSource{\n\t\t\t\t\t\t\t\t\tPath: \"/var/lib/kubelet/device-plugins\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t})\n}\n"
  },
  {
    "path": "test/suites/integration/hash_test.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage integration_test\n\nimport (\n\t\"sigs.k8s.io/controller-runtime/pkg/client\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n)\n\nvar _ = Describe(\"CRD Hash\", func() {\n\tIt(\"should have EC2NodeClass hash\", func() {\n\t\tenv.ExpectCreated(nodeClass)\n\n\t\tEventually(func(g Gomega) {\n\t\t\tnc := &v1.EC2NodeClass{}\n\t\t\terr := env.Client.Get(env, client.ObjectKeyFromObject(nodeClass), nc)\n\t\t\tg.Expect(err).ToNot(HaveOccurred())\n\n\t\t\thash, found := nc.Annotations[v1.AnnotationEC2NodeClassHash]\n\t\t\tg.Expect(found).To(BeTrue())\n\t\t\tg.Expect(hash).To(Equal(nc.Hash()))\n\t\t})\n\t})\n})\n"
  },
  {
    "path": "test/suites/integration/instance_profile_test.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage integration_test\n\nimport (\n\t\"fmt\"\n\t\"time\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\n\t\"github.com/awslabs/operatorpkg/status\"\n\tmetav1 \"k8s.io/apimachinery/pkg/apis/meta/v1\"\n\n\t\"github.com/aws/aws-sdk-go-v2/service/iam\"\n\t\"github.com/samber/lo\"\n\n\t\"sigs.k8s.io/controller-runtime/pkg/client\"\n\tcoretest \"sigs.k8s.io/karpenter/pkg/test\"\n\n\tawserrors \"github.com/aws/karpenter-provider-aws/pkg/errors\"\n\n\t. \"github.com/awslabs/operatorpkg/test/expectations\"\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n)\n\nvar _ = Describe(\"InstanceProfile Generation\", func() {\n\tBeforeEach(func() {\n\t\tif env.PrivateCluster {\n\t\t\tSkip(\"skipping InstanceProfile Generation test for private cluster\")\n\t\t}\n\t})\n\tIt(\"should generate the InstanceProfile when setting the role\", func() {\n\t\tpod := coretest.Pod()\n\t\tenv.ExpectCreated(nodePool, nodeClass, pod)\n\t\tenv.EventuallyExpectHealthy(pod)\n\t\tnode := env.ExpectCreatedNodeCount(\"==\", 1)[0]\n\n\t\tEventually(func(g Gomega) {\n\t\t\terr := env.Client.Get(env.Context, client.ObjectKeyFromObject(nodeClass), nodeClass)\n\t\t\tg.Expect(err).ToNot(HaveOccurred())\n\t\t\tg.Expect(nodeClass.Status.InstanceProfile).ToNot(BeEmpty())\n\t\t}).Should(Succeed())\n\n\t\tinstance := env.GetInstance(node.Name)\n\t\tExpect(instance.IamInstanceProfile).ToNot(BeNil())\n\t\tExpect(lo.FromPtr(instance.IamInstanceProfile.Arn)).To(ContainSubstring(nodeClass.Status.InstanceProfile))\n\n\t\tinstanceProfile := env.EventuallyExpectInstanceProfileExists(nodeClass.Status.InstanceProfile)\n\t\tExpect(instanceProfile.Roles).To(HaveLen(1))\n\t\tExpect(lo.FromPtr(instanceProfile.Roles[0].RoleName)).To(Equal(nodeClass.Spec.Role))\n\t})\n\tIt(\"should remove the generated InstanceProfile when deleting the NodeClass\", func() {\n\t\tpod := coretest.Pod()\n\t\tenv.ExpectCreated(nodePool, nodeClass, pod)\n\t\tenv.EventuallyExpectHealthy(pod)\n\t\tenv.ExpectCreatedNodeCount(\"==\", 1)\n\n\t\tEventually(func(g Gomega) {\n\t\t\terr := env.Client.Get(env.Context, client.ObjectKeyFromObject(nodeClass), nodeClass)\n\t\t\tg.Expect(err).ToNot(HaveOccurred())\n\t\t\tg.Expect(nodeClass.Status.InstanceProfile).ToNot(BeEmpty())\n\t\t}).Should(Succeed())\n\n\t\tinstanceProfile := nodeClass.Status.InstanceProfile\n\n\t\tenv.ExpectDeleted(nodePool, nodeClass)\n\t\tEventually(func(g Gomega) {\n\t\t\t_, err := env.IAMAPI.GetInstanceProfile(env.Context, &iam.GetInstanceProfileInput{\n\t\t\t\tInstanceProfileName: lo.ToPtr(instanceProfile),\n\t\t\t})\n\t\t\tg.Expect(awserrors.IsNotFound(err)).To(BeTrue())\n\t\t}).Should(Succeed())\n\t})\n\tIt(\"should use the unmanaged instance profile\", func() {\n\t\tinstanceProfileName := fmt.Sprintf(\"KarpenterNodeInstanceProfile-%s\", env.ClusterName)\n\t\troleName := fmt.Sprintf(\"KarpenterNodeRole-%s\", env.ClusterName)\n\t\tenv.ExpectInstanceProfileCreated(instanceProfileName, roleName)\n\t\tDeferCleanup(func() {\n\t\t\tenv.ExpectInstanceProfileDeleted(instanceProfileName, roleName)\n\t\t})\n\n\t\tpod := coretest.Pod()\n\t\tnodeClass.Spec.Role = \"\"\n\t\tnodeClass.Spec.InstanceProfile = lo.ToPtr(fmt.Sprintf(\"KarpenterNodeInstanceProfile-%s\", env.ClusterName))\n\t\tenv.ExpectCreated(nodePool, nodeClass, pod)\n\t\tenv.EventuallyExpectHealthy(pod)\n\t\tnode := env.ExpectCreatedNodeCount(\"==\", 1)[0]\n\n\t\tinstance := env.GetInstance(node.Name)\n\t\tExpect(instance.IamInstanceProfile).ToNot(BeNil())\n\t\tExpect(lo.FromPtr(instance.IamInstanceProfile.Arn)).To(ContainSubstring(nodeClass.Status.InstanceProfile))\n\t\tExpectStatusConditions(env, env.Client, 1*time.Minute, nodeClass, status.Condition{Type: v1.ConditionTypeInstanceProfileReady, Status: metav1.ConditionTrue})\n\t\tExpectStatusConditions(env, env.Client, 1*time.Minute, nodeClass, status.Condition{Type: status.ConditionReady, Status: metav1.ConditionTrue})\n\t})\n\tIt(\"should have the EC2NodeClass status as not ready since Instance Profile was not resolved\", func() {\n\t\tnodeClass.Spec.Role = fmt.Sprintf(\"KarpenterNodeRole-%s\", \"invalidRole\")\n\t\tenv.ExpectCreated(nodeClass)\n\t\tExpectStatusConditions(env, env.Client, 1*time.Minute, nodeClass, status.Condition{Type: v1.ConditionTypeInstanceProfileReady, Status: metav1.ConditionUnknown})\n\t\tExpectStatusConditions(env, env.Client, 1*time.Minute, nodeClass, status.Condition{Type: v1.ConditionTypeValidationSucceeded, Status: metav1.ConditionUnknown})\n\t\tExpectStatusConditions(env, env.Client, 1*time.Minute, nodeClass, status.Condition{Type: status.ConditionReady, Status: metav1.ConditionUnknown})\n\t})\n})\n"
  },
  {
    "path": "test/suites/integration/kubelet_config_test.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage integration_test\n\nimport (\n\t\"math\"\n\t\"strings\"\n\t\"time\"\n\n\tcorev1 \"k8s.io/api/core/v1\"\n\t\"k8s.io/apimachinery/pkg/api/resource\"\n\tmetav1 \"k8s.io/apimachinery/pkg/apis/meta/v1\"\n\t\"k8s.io/apimachinery/pkg/labels\"\n\n\tkarpv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n\n\t\"github.com/samber/lo\"\n\n\t\"github.com/aws/karpenter-provider-aws/test/pkg/environment/aws\"\n\n\t\"sigs.k8s.io/karpenter/pkg/test\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\n\t. \"github.com/onsi/ginkgo/v2\"\n)\n\nvar _ = Describe(\"KubeletConfiguration Overrides\", func() {\n\tContext(\"All kubelet configuration set\", func() {\n\t\tBeforeEach(func() {\n\t\t\t// MaxPods needs to account for the daemonsets that will run on the nodes\n\t\t\tnodeClass.Spec.Kubelet = &v1.KubeletConfiguration{\n\t\t\t\tMaxPods:     lo.ToPtr(int32(110)),\n\t\t\t\tPodsPerCore: lo.ToPtr(int32(10)),\n\t\t\t\tSystemReserved: map[string]string{\n\t\t\t\t\tstring(corev1.ResourceCPU):              \"200m\",\n\t\t\t\t\tstring(corev1.ResourceMemory):           \"200Mi\",\n\t\t\t\t\tstring(corev1.ResourceEphemeralStorage): \"1Gi\",\n\t\t\t\t},\n\t\t\t\tKubeReserved: map[string]string{\n\t\t\t\t\tstring(corev1.ResourceCPU):              \"200m\",\n\t\t\t\t\tstring(corev1.ResourceMemory):           \"200Mi\",\n\t\t\t\t\tstring(corev1.ResourceEphemeralStorage): \"1Gi\",\n\t\t\t\t},\n\t\t\t\tEvictionHard: map[string]string{\n\t\t\t\t\t\"memory.available\":   \"5%\",\n\t\t\t\t\t\"nodefs.available\":   \"5%\",\n\t\t\t\t\t\"nodefs.inodesFree\":  \"5%\",\n\t\t\t\t\t\"imagefs.available\":  \"5%\",\n\t\t\t\t\t\"imagefs.inodesFree\": \"5%\",\n\t\t\t\t\t\"pid.available\":      \"3%\",\n\t\t\t\t},\n\t\t\t\tEvictionSoft: map[string]string{\n\t\t\t\t\t\"memory.available\":   \"10%\",\n\t\t\t\t\t\"nodefs.available\":   \"10%\",\n\t\t\t\t\t\"nodefs.inodesFree\":  \"10%\",\n\t\t\t\t\t\"imagefs.available\":  \"10%\",\n\t\t\t\t\t\"imagefs.inodesFree\": \"10%\",\n\t\t\t\t\t\"pid.available\":      \"6%\",\n\t\t\t\t},\n\t\t\t\tEvictionSoftGracePeriod: map[string]metav1.Duration{\n\t\t\t\t\t\"memory.available\":   {Duration: time.Minute * 2},\n\t\t\t\t\t\"nodefs.available\":   {Duration: time.Minute * 2},\n\t\t\t\t\t\"nodefs.inodesFree\":  {Duration: time.Minute * 2},\n\t\t\t\t\t\"imagefs.available\":  {Duration: time.Minute * 2},\n\t\t\t\t\t\"imagefs.inodesFree\": {Duration: time.Minute * 2},\n\t\t\t\t\t\"pid.available\":      {Duration: time.Minute * 2},\n\t\t\t\t},\n\t\t\t\tEvictionMaxPodGracePeriod:   lo.ToPtr(int32(120)),\n\t\t\t\tImageGCHighThresholdPercent: lo.ToPtr(int32(50)),\n\t\t\t\tImageGCLowThresholdPercent:  lo.ToPtr(int32(10)),\n\t\t\t\tCPUCFSQuota:                 lo.ToPtr(false),\n\t\t\t}\n\t\t})\n\t\tDescribeTable(\"Linux AMIFamilies\",\n\t\t\tfunc(alias string) {\n\t\t\t\tif strings.Contains(alias, \"al2\") && env.K8sMinorVersion() > 32 {\n\t\t\t\t\tSkip(\"AL2 is not supported on versions > 1.32\")\n\t\t\t\t}\n\t\t\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{Alias: alias}}\n\t\t\t\t// TODO (jmdeal@): remove once 22.04 AMIs are supported\n\t\t\t\tpod := test.Pod(test.PodOptions{\n\t\t\t\t\tNodeSelector: map[string]string{\n\t\t\t\t\t\tcorev1.LabelOSStable:   string(corev1.Linux),\n\t\t\t\t\t\tcorev1.LabelArchStable: \"amd64\",\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t\tenv.ExpectCreated(nodeClass, nodePool, pod)\n\t\t\t\tenv.EventuallyExpectHealthy(pod)\n\t\t\t\tenv.ExpectCreatedNodeCount(\"==\", 1)\n\t\t\t},\n\t\t\tEntry(\"when the AMIFamily is AL2\", \"al2@latest\"),\n\t\t\tEntry(\"when the AMIFamily is AL2023\", \"al2023@latest\"),\n\t\t\tEntry(\"when the AMIFamily is Bottlerocket\", \"bottlerocket@latest\"),\n\t\t)\n\t\tDescribeTable(\"Windows AMIFamilies\",\n\t\t\tfunc(term v1.AMISelectorTerm) {\n\t\t\t\tif term.Alias == \"windows2025@latest\" && env.K8sMinorVersion() < 35 {\n\t\t\t\t\tSkip(\"Windows 2025 requires EKS 1.35+\")\n\t\t\t\t}\n\n\t\t\t\tenv.ExpectWindowsIPAMEnabled()\n\t\t\t\tDeferCleanup(func() {\n\t\t\t\t\tenv.ExpectWindowsIPAMDisabled()\n\t\t\t\t})\n\n\t\t\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{term}\n\t\t\t\t// Need to enable nodepool-level OS-scoping for now since DS evaluation is done off of the nodepool\n\t\t\t\t// requirements, not off of the instance type options so scheduling can fail if nodepool aren't\n\t\t\t\t// properly scoped\n\t\t\t\ttest.ReplaceRequirements(nodePool,\n\t\t\t\t\tkarpv1.NodeSelectorRequirementWithMinValues{\n\t\t\t\t\t\tKey:      corev1.LabelOSStable,\n\t\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\t\tValues:   []string{string(corev1.Windows)},\n\t\t\t\t\t},\n\t\t\t\t)\n\t\t\t\tpod := test.Pod(test.PodOptions{\n\t\t\t\t\tImage: aws.WindowsDefaultImage,\n\t\t\t\t\tNodeSelector: map[string]string{\n\t\t\t\t\t\tcorev1.LabelOSStable:   string(corev1.Windows),\n\t\t\t\t\t\tcorev1.LabelArchStable: \"amd64\",\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t\tenv.ExpectCreated(nodeClass, nodePool, pod)\n\t\t\t\tenv.EventuallyExpectHealthyWithTimeout(time.Minute*15, pod)\n\t\t\t\tenv.ExpectCreatedNodeCount(\"==\", 1)\n\t\t\t},\n\t\t\t// Windows tests are can flake due to the instance types that are used in testing.\n\t\t\t// The VPC Resource controller will need to support the instance types that are used.\n\t\t\t// If the instance type is not supported by the controller resource `vpc.amazonaws.com/PrivateIPv4Address` will not register.\n\t\t\t// Issue: https://github.com/aws/karpenter-provider-aws/issues/4472\n\t\t\t// See: https://github.com/aws/amazon-vpc-resource-controller-k8s/blob/master/pkg/aws/vpc/limits.go\n\t\t\tEntry(\"when the AMIFamily is Windows2019\", v1.AMISelectorTerm{Alias: \"windows2019@latest\"}),\n\t\t\tEntry(\"when the AMIFamily is Windows2022\", v1.AMISelectorTerm{Alias: \"windows2022@latest\"}),\n\t\t\tEntry(\"when the AMIFamily is Windows2025\", v1.AMISelectorTerm{Alias: \"windows2025@latest\"}),\n\t\t)\n\t})\n\tIt(\"should schedule pods onto separate nodes when maxPods is set\", func() {\n\t\t// Get the DS pod count and use it to calculate the DS pod overhead\n\t\tdsCount := env.GetDaemonSetCount(nodePool)\n\t\tnodeClass.Spec.Kubelet = &v1.KubeletConfiguration{\n\t\t\tMaxPods: lo.ToPtr(1 + int32(dsCount)),\n\t\t}\n\n\t\tnumPods := 3\n\t\tdep := test.Deployment(test.DeploymentOptions{\n\t\t\tReplicas: int32(numPods),\n\t\t\tPodOptions: test.PodOptions{\n\t\t\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\t\t\tLabels: map[string]string{\"app\": \"large-app\"},\n\t\t\t\t},\n\t\t\t\tResourceRequirements: corev1.ResourceRequirements{\n\t\t\t\t\tRequests: corev1.ResourceList{corev1.ResourceCPU: resource.MustParse(\"100m\")},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tselector := labels.SelectorFromSet(dep.Spec.Selector.MatchLabels)\n\t\tenv.ExpectCreated(nodeClass, nodePool, dep)\n\n\t\tenv.EventuallyExpectHealthyPodCount(selector, numPods)\n\t\tenv.ExpectCreatedNodeCount(\"==\", 3)\n\t\tenv.EventuallyExpectUniqueNodeNames(selector, 3)\n\t})\n\tIt(\"should schedule pods onto separate nodes when podsPerCore is set\", func() {\n\t\t// PodsPerCore needs to account for the daemonsets that will run on the nodes\n\t\t// This will have 4 pods available on each node (2 taken by daemonset pods)\n\t\ttest.ReplaceRequirements(nodePool,\n\t\t\tkarpv1.NodeSelectorRequirementWithMinValues{\n\t\t\t\tKey:      v1.LabelInstanceCPU,\n\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\tValues:   []string{\"2\"},\n\t\t\t},\n\t\t)\n\t\tnumPods := 4\n\t\tdep := test.Deployment(test.DeploymentOptions{\n\t\t\tReplicas: int32(numPods),\n\t\t\tPodOptions: test.PodOptions{\n\t\t\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\t\t\tLabels: map[string]string{\"app\": \"large-app\"},\n\t\t\t\t},\n\t\t\t\tResourceRequirements: corev1.ResourceRequirements{\n\t\t\t\t\tRequests: corev1.ResourceList{corev1.ResourceCPU: resource.MustParse(\"100m\")},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tselector := labels.SelectorFromSet(dep.Spec.Selector.MatchLabels)\n\n\t\t// Get the DS pod count and use it to calculate the DS pod overhead\n\t\t// We calculate podsPerCore to split the test pods and the DS pods between two nodes:\n\t\t//   1. If # of DS pods is odd, we will have i.e. ceil((3+2)/2) = 3\n\t\t//      Since we restrict node to two cores, we will allow 6 pods. One node will have 3\n\t\t//      DS pods and 3 test pods. Other node will have 1 test pod and 3 DS pods\n\t\t//   2. If # of DS pods is even, we will have i.e. ceil((4+2)/2) = 3\n\t\t//      Since we restrict node to two cores, we will allow 6 pods. Both nodes will have\n\t\t//      4 DS pods and 2 test pods.\n\t\tdsCount := env.GetDaemonSetCount(nodePool)\n\t\tnodeClass.Spec.Kubelet = &v1.KubeletConfiguration{\n\t\t\tPodsPerCore: lo.ToPtr(int32(math.Ceil(float64(2+dsCount) / 2))),\n\t\t}\n\n\t\tenv.ExpectCreated(nodeClass, nodePool, dep)\n\t\tenv.EventuallyExpectHealthyPodCount(selector, numPods)\n\t\tenv.ExpectCreatedNodeCount(\"==\", 2)\n\t\tenv.EventuallyExpectUniqueNodeNames(selector, 2)\n\t})\n\tIt(\"should ignore podsPerCore value when Bottlerocket is used\", func() {\n\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{Alias: \"bottlerocket@latest\"}}\n\t\t// All pods should schedule to a single node since we are ignoring podsPerCore value\n\t\t// This would normally schedule to 3 nodes if not using Bottlerocket\n\t\ttest.ReplaceRequirements(nodePool,\n\t\t\tkarpv1.NodeSelectorRequirementWithMinValues{\n\t\t\t\tKey:      v1.LabelInstanceCPU,\n\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\tValues:   []string{\"2\"},\n\t\t\t},\n\t\t)\n\n\t\tnodeClass.Spec.Kubelet = &v1.KubeletConfiguration{PodsPerCore: lo.ToPtr(int32(1))}\n\t\tnumPods := 6\n\t\tdep := test.Deployment(test.DeploymentOptions{\n\t\t\tReplicas: int32(numPods),\n\t\t\tPodOptions: test.PodOptions{\n\t\t\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\t\t\tLabels: map[string]string{\"app\": \"large-app\"},\n\t\t\t\t},\n\t\t\t\tResourceRequirements: corev1.ResourceRequirements{\n\t\t\t\t\tRequests: corev1.ResourceList{corev1.ResourceCPU: resource.MustParse(\"100m\")},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tselector := labels.SelectorFromSet(dep.Spec.Selector.MatchLabels)\n\n\t\tenv.ExpectCreated(nodeClass, nodePool, dep)\n\t\tenv.EventuallyExpectHealthyPodCount(selector, numPods)\n\t\tenv.ExpectCreatedNodeCount(\"==\", 1)\n\t\tenv.EventuallyExpectUniqueNodeNames(selector, 1)\n\t})\n})\n"
  },
  {
    "path": "test/suites/integration/launch_template_test.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage integration_test\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/aws/aws-sdk-go-v2/aws\"\n\t\"github.com/aws/aws-sdk-go-v2/service/ec2\"\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\tcoretest \"sigs.k8s.io/karpenter/pkg/test\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n)\n\nvar _ = Describe(\"Launch Template Deletion\", func() {\n\tIt(\"should remove the generated Launch Templates when deleting the NodeClass\", func() {\n\t\tpod := coretest.Pod()\n\t\tenv.ExpectCreated(nodePool, nodeClass, pod)\n\t\tenv.EventuallyExpectHealthy(pod)\n\t\tenv.ExpectCreatedNodeCount(\"==\", 1)\n\n\t\tenv.ExpectDeleted(nodePool, nodeClass)\n\t\tEventually(func(g Gomega) {\n\t\t\toutput, _ := env.EC2API.DescribeLaunchTemplates(env.Context, &ec2.DescribeLaunchTemplatesInput{\n\t\t\t\tFilters: []ec2types.Filter{\n\t\t\t\t\t{Name: aws.String(fmt.Sprintf(\"tag:%s\", v1.LabelNodeClass)), Values: []string{nodeClass.Name}},\n\t\t\t\t},\n\t\t\t})\n\t\t\tg.Expect(output.LaunchTemplates).To(HaveLen(0))\n\t\t}).WithPolling(5.0).Should(Succeed())\n\t})\n})\n"
  },
  {
    "path": "test/suites/integration/metrics_test.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage integration_test\n\nimport (\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go-v2/service/ec2\"\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n\t\"github.com/samber/lo\"\n\n\t\"github.com/aws/karpenter-provider-aws/test/pkg/environment/common\"\n)\n\nvar _ = Describe(\"Metrics\", func() {\n\tvar instanceTypeCount int\n\tvar availabilityZoneCount int\n\tvar capacityTypeCount int\n\tBeforeEach(func() {\n\t\tazOut, err := env.EC2API.DescribeAvailabilityZones(env.Context, &ec2.DescribeAvailabilityZonesInput{})\n\t\tExpect(err).ToNot(HaveOccurred())\n\t\tavailabilityZoneCount = len(azOut.AvailabilityZones)\n\n\t\titOut, err := env.EC2API.DescribeInstanceTypes(env.Context, &ec2.DescribeInstanceTypesInput{})\n\t\tExpect(err).ToNot(HaveOccurred())\n\t\tinstanceTypeCount = len(itOut.InstanceTypes)\n\t\tcapacityTypeCount = 3 // on-demand, spot, and reserved\n\t})\n\tIt(\"should expose karpenter_cloudprovider_instance_type_offering_price_estimate metrics\", func() {\n\t\tenv.ExpectCreated(nodeClass, nodePool)\n\t\tEventually(func(g Gomega) {\n\t\t\tdefer GinkgoRecover()\n\t\t\tpodMetrics := env.ExpectPodMetrics()\n\t\t\tpriceMetricCount := lo.CountBy(podMetrics, func(p common.PrometheusMetric) bool {\n\t\t\t\treturn p.Name == \"karpenter_cloudprovider_instance_type_offering_price_estimate\"\n\t\t\t})\n\t\t\tnonZeroPriceMetricCount := lo.CountBy(podMetrics, func(p common.PrometheusMetric) bool {\n\t\t\t\treturn p.Name == \"karpenter_cloudprovider_instance_type_offering_price_estimate\" &&\n\t\t\t\t\tp.Value > 0\n\t\t\t})\n\t\t\t// We provide a 100 instance type buffer just in case instance types don't have offerings in every zone\n\t\t\t// We provide a 200 instance type buffer for spot since there should be even less availability\n\t\t\texpectedCount := (instanceTypeCount - 100) * availabilityZoneCount * capacityTypeCount\n\t\t\texpectedNonZeroCount := (instanceTypeCount-100)*availabilityZoneCount + (instanceTypeCount-200)*availabilityZoneCount\n\t\t\tg.Expect(priceMetricCount).To(BeNumerically(\">\", expectedCount))\n\t\t\tg.Expect(nonZeroPriceMetricCount).To(BeNumerically(\">\", expectedNonZeroCount))\n\t\t}, time.Minute, time.Second*5).Should(Succeed())\n\n\t})\n\tIt(\"should expose karpenter_cloudprovider_instance_type_offering_available metrics\", func() {\n\t\tenv.ExpectCreated(nodeClass, nodePool)\n\t\t// Availability only has non-zero values for the subnets that we support\n\t\tselectedAZCount := len(env.GetSubnets(map[string]string{\"karpenter.sh/discovery\": env.ClusterName}))\n\n\t\tEventually(func(g Gomega) {\n\t\t\tdefer GinkgoRecover()\n\n\t\t\tpodMetrics := env.ExpectPodMetrics()\n\t\t\tavailableMetricCount := lo.CountBy(podMetrics, func(p common.PrometheusMetric) bool {\n\t\t\t\treturn p.Name == \"karpenter_cloudprovider_instance_type_offering_available\"\n\t\t\t})\n\t\t\tnonZeroAvailableMetricCount := lo.CountBy(podMetrics, func(p common.PrometheusMetric) bool {\n\t\t\t\treturn p.Name == \"karpenter_cloudprovider_instance_type_offering_available\" &&\n\t\t\t\t\tp.Value > 0\n\t\t\t})\n\t\t\t// We provide a 100 instance type buffer just in case instance types don't have offerings in every zone\n\t\t\t// We provide a 200 instance type buffer for spot since there should be even less availability\n\t\t\texpectedCount := (instanceTypeCount - 100) * selectedAZCount * capacityTypeCount\n\t\t\texpectedNonZeroCount := (instanceTypeCount-100)*selectedAZCount + (instanceTypeCount-200)*selectedAZCount\n\t\t\tg.Expect(availableMetricCount).To(BeNumerically(\">\", expectedCount))\n\t\t\tg.Expect(nonZeroAvailableMetricCount).To(BeNumerically(\">\", expectedNonZeroCount))\n\t\t}, time.Minute, time.Second*5).Should(Succeed())\n\t})\n})\n"
  },
  {
    "path": "test/suites/integration/network_interface_test.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage integration_test\n\nimport (\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n\t\"github.com/samber/lo\"\n\t\"sigs.k8s.io/karpenter/pkg/test\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n)\n\nvar _ = Describe(\"NetworkInterfaces\", func() {\n\tDescribeTable(\n\t\t\"should correctly configure public IP assignment on instances\",\n\t\tfunc(associatePublicIPAddress *bool) {\n\t\t\tnodeClass.Spec.SubnetSelectorTerms = []v1.SubnetSelectorTerm{{\n\t\t\t\tTags: map[string]string{\n\t\t\t\t\t\"Name\":                   \"*Private*\",\n\t\t\t\t\t\"karpenter.sh/discovery\": env.ClusterName,\n\t\t\t\t},\n\t\t\t}}\n\t\t\tnodeClass.Spec.AssociatePublicIPAddress = associatePublicIPAddress\n\n\t\t\tpod := test.Pod()\n\t\t\tenv.ExpectCreated(pod, nodeClass, nodePool)\n\t\t\tenv.EventuallyExpectHealthy(pod)\n\t\t\tenv.ExpectCreatedNodeCount(\"==\", 1)\n\t\t\tinstance := env.GetInstance(pod.Spec.NodeName)\n\n\t\t\tif lo.FromPtr(associatePublicIPAddress) {\n\t\t\t\tExpect(instance.PublicIpAddress).ToNot(BeNil())\n\t\t\t} else {\n\t\t\t\tExpect(instance.PublicIpAddress).To(BeNil())\n\t\t\t}\n\t\t},\n\t\t// Only tests private subnets since nodes w/o a public IP address in a public subnet will be unable to join the cluster\n\t\tEntry(\"AssociatePublicIPAddress not specified by the user while using a private subnet\", nil),\n\t\tEntry(\"AssociatePublicIPAddress set true by user while using a private subnet\", lo.ToPtr(true)),\n\t)\n})\n"
  },
  {
    "path": "test/suites/integration/nodeclass_test.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage integration_test\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go-v2/aws\"\n\t\"github.com/aws/aws-sdk-go-v2/service/iam\"\n\t\"github.com/awslabs/operatorpkg/status\"\n\t\"github.com/google/uuid\"\n\t\"github.com/samber/lo\"\n\tcorev1 \"k8s.io/api/core/v1\"\n\tmetav1 \"k8s.io/apimachinery/pkg/apis/meta/v1\"\n\t\"k8s.io/apimachinery/pkg/types\"\n\t\"sigs.k8s.io/controller-runtime/pkg/client\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\tawserrors \"github.com/aws/karpenter-provider-aws/pkg/errors\"\n\n\t. \"github.com/awslabs/operatorpkg/test/expectations\"\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n)\n\nvar _ = Describe(\"NodeClass IAM Permissions\", func() {\n\tvar (\n\t\troleName   string\n\t\tpolicyName string\n\t)\n\tAfterEach(func(ctx context.Context) {\n\t\tBy(\"deleting the deny policy\")\n\t\t_, err := env.IAMAPI.DeleteRolePolicy(ctx, &iam.DeleteRolePolicyInput{\n\t\t\tRoleName:   aws.String(roleName),\n\t\t\tPolicyName: aws.String(policyName),\n\t\t})\n\t\tExpect(awserrors.IgnoreNotFound(err)).To(BeNil())\n\t\tenv.ExpectSettingsOverridden(corev1.EnvVar{Name: \"DISABLE_DRY_RUN\", Value: \"false\"}) // re-enable dry-run\n\n\t\tBy(\"waiting for NodeClass to report ValidationSucceeded=true\")\n\t\t// Ensure that we don't start the next test until the policy has been deleted and IAM returns that we have permissions back\n\t\tEventuallyExpectWithDryRunCacheInvalidation(func(g Gomega, currGeneration int64) {\n\t\t\tg.Expect(env.Client.Get(ctx, client.ObjectKeyFromObject(nodeClass), nodeClass)).To(Succeed())\n\t\t\tg.Expect(nodeClass.StatusConditions().IsTrue(v1.ConditionTypeValidationSucceeded) && nodeClass.StatusConditions().Get(v1.ConditionTypeValidationSucceeded).ObservedGeneration == currGeneration).To(BeTrue())\n\t\t})\n\t}, GracePeriod(time.Minute*15))\n\tDescribeTable(\"IAM Permission Failure Tests\",\n\t\tfunc(action string, expectedMessage string) {\n\t\t\tpolicyDoc := fmt.Sprintf(`{\n\t\t\t\t\t\"Version\": \"2012-10-17\",\n\t\t\t\t\t\"Statement\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"Effect\": \"Deny\",\n\t\t\t\t\t\t\t\"Action\": [\"%s\"],\n\t\t\t\t\t\t\t\"Resource\": \"*\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}`, action)\n\n\t\t\tpods := env.ExpectKarpenterPods()\n\t\t\tsa := &corev1.ServiceAccount{}\n\t\t\tExpect(env.Client.Get(env.Context, types.NamespacedName{\n\t\t\t\tNamespace: \"kube-system\",\n\t\t\t\tName:      pods[0].Spec.ServiceAccountName,\n\t\t\t}, sa)).To(Succeed())\n\n\t\t\troleName = strings.Split(sa.Annotations[\"eks.amazonaws.com/role-arn\"], \"/\")[1]\n\t\t\tpolicyName = fmt.Sprintf(\"TestPolicy-%s\", uuid.New().String())\n\n\t\t\tBy(fmt.Sprintf(\"adding the deny policy for %s\", action))\n\t\t\t_, err := env.IAMAPI.PutRolePolicy(env.Context, &iam.PutRolePolicyInput{\n\t\t\t\tRoleName:       aws.String(roleName),\n\t\t\t\tPolicyName:     aws.String(policyName),\n\t\t\t\tPolicyDocument: aws.String(policyDoc),\n\t\t\t})\n\t\t\tExpect(err).To(BeNil())\n\n\t\t\tenv.ExpectCreated(nodeClass)\n\n\t\t\tBy(\"waiting for NodeClass to report ValidationSucceeded=False\")\n\t\t\tEventuallyExpectWithDryRunCacheInvalidation(func(g Gomega, currGeneration int64) {\n\t\t\t\tg.Expect(env.Client.Get(env.Context, client.ObjectKeyFromObject(nodeClass), nodeClass)).To(Succeed())\n\t\t\t\tg.Expect(nodeClass.StatusConditions().Get(v1.ConditionTypeValidationSucceeded).IsFalse() && nodeClass.StatusConditions().Get(v1.ConditionTypeValidationSucceeded).ObservedGeneration == currGeneration).To(BeTrue())\n\t\t\t\tg.Expect(nodeClass.StatusConditions().Get(v1.ConditionTypeValidationSucceeded).Reason).To(Equal(expectedMessage))\n\t\t\t})\n\t\t\tExpectStatusConditions(env, env.Client, 1*time.Minute, nodeClass, status.Condition{Type: status.ConditionReady, Status: metav1.ConditionFalse, Message: \"ValidationSucceeded=False\"})\n\t\t},\n\t\tEntry(\"should fail when CreateFleet is denied\",\n\t\t\t\"ec2:CreateFleet\",\n\t\t\t\"CreateFleetAuthCheckFailed\"),\n\t\tEntry(\"should fail when CreateLaunchTemplate is denied\",\n\t\t\t\"ec2:CreateLaunchTemplate\",\n\t\t\t\"CreateLaunchTemplateAuthCheckFailed\"),\n\t\tEntry(\"should fail when RunInstances is denied\",\n\t\t\t\"ec2:RunInstances\",\n\t\t\t\"RunInstancesAuthCheckFailed\"),\n\t)\n\n\tIt(\"should succeed with all required permissions\", func() {\n\t\tenv.ExpectCreated(nodeClass)\n\t\tEventually(func(g Gomega) {\n\t\t\tg.Expect(env.Client.Get(env.Context, client.ObjectKeyFromObject(nodeClass), nodeClass)).To(Succeed())\n\t\t\tg.Expect(nodeClass.StatusConditions().Get(v1.ConditionTypeValidationSucceeded).IsTrue()).To(BeTrue())\n\t\t}).Should(Succeed())\n\t})\n\tIt(\"should succeed EC2NodeClass validation when dry run validation is disabled\", func() {\n\t\t// create a policy that blocks validation calls\n\t\tpolicyDoc := `{\n\t\t\t\"Version\": \"2012-10-17\",\n\t\t\t\"Statement\": [\n\t\t\t\t{\n\t\t\t\t\t\"Effect\": \"Deny\",\n\t\t\t\t\t\"Action\": [\"ec2:CreateFleet\", \"ec2:CreateLaunchTemplate\", \"ec2:RunInstances\"],\n\t\t\t\t\t\"Resource\": \"*\"\n\t\t\t\t}\n\t\t\t]\n\t\t}`\n\t\tpods := env.ExpectKarpenterPods()\n\t\tsa := &corev1.ServiceAccount{}\n\t\tExpect(env.Client.Get(env.Context, types.NamespacedName{\n\t\t\tNamespace: \"kube-system\",\n\t\t\tName:      pods[0].Spec.ServiceAccountName,\n\t\t}, sa)).To(Succeed())\n\n\t\troleName = strings.Split(sa.Annotations[\"eks.amazonaws.com/role-arn\"], \"/\")[1]\n\t\tpolicyName = fmt.Sprintf(\"TestPolicy-%s\", uuid.New().String())\n\n\t\tBy(\"adding the deny policy\")\n\t\t_, err := env.IAMAPI.PutRolePolicy(env.Context, &iam.PutRolePolicyInput{\n\t\t\tRoleName:       aws.String(roleName),\n\t\t\tPolicyName:     aws.String(policyName),\n\t\t\tPolicyDocument: aws.String(policyDoc),\n\t\t})\n\t\tExpect(err).To(BeNil())\n\n\t\t// Ensure that we properly validate that we see the new policy\n\t\tenv.ExpectCreated(nodeClass)\n\n\t\tBy(\"waiting for NodeClass to report ValidationSucceeded=False\")\n\t\tEventuallyExpectWithDryRunCacheInvalidation(func(g Gomega, currGeneration int64) {\n\t\t\tg.Expect(env.Client.Get(env.Context, client.ObjectKeyFromObject(nodeClass), nodeClass)).To(Succeed())\n\t\t\tg.Expect(nodeClass.StatusConditions().Get(v1.ConditionTypeValidationSucceeded).IsFalse() && nodeClass.StatusConditions().Get(v1.ConditionTypeValidationSucceeded).ObservedGeneration == currGeneration).To(BeTrue())\n\t\t})\n\n\t\t// Disable dry-run and now validation should succeed\n\t\tenv.ExpectSettingsOverridden(corev1.EnvVar{Name: \"DISABLE_DRY_RUN\", Value: \"true\"})\n\t\tEventually(func(g Gomega) {\n\t\t\tg.Expect(env.Client.Get(env.Context, client.ObjectKeyFromObject(nodeClass), nodeClass)).To(Succeed())\n\t\t\tg.Expect(nodeClass.StatusConditions().Get(v1.ConditionTypeValidationSucceeded).IsTrue()).To(BeTrue())\n\t\t}).Should(Succeed())\n\t})\n})\n\nfunc EventuallyExpectWithDryRunCacheInvalidation(f func(g Gomega, currentGeneration int64)) {\n\tlastUpdate := time.Time{}\n\tlastGeneration := int64(0)\n\n\tEventually(func(g Gomega) {\n\t\t// Force the cache to be reset by updating MetadataOptions\n\t\tif time.Since(lastUpdate) > time.Second*15 {\n\t\t\tstored := nodeClass.DeepCopy()\n\t\t\tnodeClass.Spec.MetadataOptions.HTTPPutResponseHopLimit = lo.ToPtr(lo.FromPtr(nodeClass.Spec.MetadataOptions.HTTPPutResponseHopLimit) + 1)\n\t\t\tg.Expect(env.Client.Patch(env.Context, nodeClass, client.MergeFrom(stored))).To(Succeed())\n\t\t\tlastUpdate = time.Now()\n\t\t\tlastGeneration = nodeClass.Generation\n\t\t}\n\t\tf(g, lastGeneration)\n\t}).Should(Succeed())\n}\n"
  },
  {
    "path": "test/suites/integration/repair_policy_test.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage integration_test\n\nimport (\n\t\"time\"\n\n\tappsv1 \"k8s.io/api/apps/v1\"\n\tcorev1 \"k8s.io/api/core/v1\"\n\tmetav1 \"k8s.io/apimachinery/pkg/apis/meta/v1\"\n\t\"k8s.io/apimachinery/pkg/labels\"\n\tkarpenterv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n\tcoretest \"sigs.k8s.io/karpenter/pkg/test\"\n\n\t\"github.com/aws/karpenter-provider-aws/test/pkg/environment/common\"\n\n\t. \"github.com/onsi/ginkgo/v2\"\n\t\"github.com/samber/lo\"\n)\n\nvar _ = Describe(\"Repair Policy\", func() {\n\tvar selector labels.Selector\n\tvar dep *appsv1.Deployment\n\tvar numPods int\n\tvar unhealthyCondition corev1.NodeCondition\n\n\tBeforeEach(func() {\n\t\tunhealthyCondition = corev1.NodeCondition{\n\t\t\tType:               corev1.NodeReady,\n\t\t\tStatus:             corev1.ConditionFalse,\n\t\t\tLastTransitionTime: metav1.Time{Time: time.Now().Add(-31 * time.Minute)},\n\t\t}\n\t\tnumPods = 1\n\t\t// Add pods with a do-not-disrupt annotation so that we can check node metadata before we disrupt\n\t\tdep = coretest.Deployment(coretest.DeploymentOptions{\n\t\t\tReplicas: int32(numPods),\n\t\t\tPodOptions: coretest.PodOptions{\n\t\t\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\t\t\tLabels: map[string]string{\n\t\t\t\t\t\t\"app\": \"my-app\",\n\t\t\t\t\t},\n\t\t\t\t\tAnnotations: map[string]string{\n\t\t\t\t\t\tkarpenterv1.DoNotDisruptAnnotationKey: \"true\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tTerminationGracePeriodSeconds: lo.ToPtr[int64](0),\n\t\t\t},\n\t\t})\n\t\tselector = labels.SelectorFromSet(dep.Spec.Selector.MatchLabels)\n\t})\n\n\tDescribeTable(\"Conditions\", func(unhealthyCondition corev1.NodeCondition) {\n\t\tenv.ExpectCreated(nodeClass, nodePool, dep)\n\t\tpod := env.EventuallyExpectHealthyPodCount(selector, numPods)[0]\n\t\tnode := env.ExpectCreatedNodeCount(\"==\", 1)[0]\n\t\tenv.EventuallyExpectInitializedNodeCount(\"==\", 1)\n\n\t\tnode = common.ReplaceNodeConditions(node, unhealthyCondition)\n\t\tenv.ExpectStatusUpdated(node)\n\n\t\tenv.EventuallyExpectNotFound(pod, node)\n\t\tenv.EventuallyExpectHealthyPodCount(selector, numPods)\n\t},\n\t\t// Kubelet Supported Conditions\n\t\tEntry(\"Node Ready False\", corev1.NodeCondition{\n\t\t\tType:               corev1.NodeReady,\n\t\t\tStatus:             corev1.ConditionFalse,\n\t\t\tLastTransitionTime: metav1.Time{Time: time.Now().Add(-31 * time.Minute)},\n\t\t}),\n\t\tEntry(\"Node Ready Unknown\", corev1.NodeCondition{\n\t\t\tType:               corev1.NodeReady,\n\t\t\tStatus:             corev1.ConditionUnknown,\n\t\t\tLastTransitionTime: metav1.Time{Time: time.Now().Add(-31 * time.Minute)},\n\t\t}),\n\t\t// Node Monitoring Agent Supported Conditions\n\t\tEntry(\"Node AcceleratedHardwareReady False\", corev1.NodeCondition{\n\t\t\tType:               \"AcceleratedHardwareReady\",\n\t\t\tStatus:             corev1.ConditionFalse,\n\t\t\tLastTransitionTime: metav1.Time{Time: time.Now().Add(-11 * time.Minute)},\n\t\t}),\n\t\tEntry(\"Node StorageReady False\", corev1.NodeCondition{\n\t\t\tType:               \"StorageReady\",\n\t\t\tStatus:             corev1.ConditionFalse,\n\t\t\tLastTransitionTime: metav1.Time{Time: time.Now().Add(-31 * time.Minute)},\n\t\t}),\n\t\tEntry(\"Node NetworkingReady False\", corev1.NodeCondition{\n\t\t\tType:               \"NetworkingReady\",\n\t\t\tStatus:             corev1.ConditionFalse,\n\t\t\tLastTransitionTime: metav1.Time{Time: time.Now().Add(-31 * time.Minute)},\n\t\t}),\n\t\tEntry(\"Node KernelReady False\", corev1.NodeCondition{\n\t\t\tType:               \"KernelReady\",\n\t\t\tStatus:             corev1.ConditionFalse,\n\t\t\tLastTransitionTime: metav1.Time{Time: time.Now().Add(-31 * time.Minute)},\n\t\t}),\n\t\tEntry(\"Node ContainerRuntimeReady False\", corev1.NodeCondition{\n\t\t\tType:               \"ContainerRuntimeReady\",\n\t\t\tStatus:             corev1.ConditionFalse,\n\t\t\tLastTransitionTime: metav1.Time{Time: time.Now().Add(-31 * time.Minute)},\n\t\t}),\n\t)\n\tIt(\"should ignore disruption budgets\", func() {\n\t\tnodePool.Spec.Disruption.Budgets = []karpenterv1.Budget{\n\t\t\t{\n\t\t\t\tNodes: \"0\",\n\t\t\t},\n\t\t}\n\t\tenv.ExpectCreated(nodeClass, nodePool, dep)\n\t\tpod := env.EventuallyExpectHealthyPodCount(selector, numPods)[0]\n\t\tnode := env.ExpectCreatedNodeCount(\"==\", 1)[0]\n\t\tenv.EventuallyExpectInitializedNodeCount(\"==\", 1)\n\n\t\tnode = common.ReplaceNodeConditions(node, unhealthyCondition)\n\t\tenv.ExpectStatusUpdated(node)\n\n\t\tenv.EventuallyExpectNotFound(pod, node)\n\t\tenv.EventuallyExpectHealthyPodCount(selector, numPods)\n\t})\n\tIt(\"should ignore do-not-disrupt annotation on node\", func() {\n\t\tenv.ExpectCreated(nodeClass, nodePool, dep)\n\t\tpod := env.EventuallyExpectHealthyPodCount(selector, numPods)[0]\n\t\tnode := env.ExpectCreatedNodeCount(\"==\", 1)[0]\n\t\tenv.EventuallyExpectInitializedNodeCount(\"==\", 1)\n\n\t\tnode.Annotations[karpenterv1.DoNotDisruptAnnotationKey] = \"true\"\n\t\tenv.ExpectUpdated(node)\n\n\t\tnode = common.ReplaceNodeConditions(node, unhealthyCondition)\n\t\tenv.ExpectStatusUpdated(node)\n\n\t\tenv.EventuallyExpectNotFound(pod, node)\n\t\tenv.EventuallyExpectHealthyPodCount(selector, numPods)\n\t})\n\tIt(\"should ignore terminationGracePeriod on the nodepool\", func() {\n\t\tnodePool.Spec.Template.Spec.TerminationGracePeriod = &metav1.Duration{Duration: time.Hour}\n\t\tenv.ExpectCreated(nodeClass, nodePool, dep)\n\t\tpod := env.EventuallyExpectHealthyPodCount(selector, numPods)[0]\n\t\tnode := env.ExpectCreatedNodeCount(\"==\", 1)[0]\n\t\tenv.EventuallyExpectInitializedNodeCount(\"==\", 1)\n\n\t\tnode = common.ReplaceNodeConditions(node, unhealthyCondition)\n\t\tenv.ExpectStatusUpdated(node)\n\n\t\tenv.EventuallyExpectNotFound(pod, node)\n\t\tenv.EventuallyExpectHealthyPodCount(selector, numPods)\n\t})\n})\n"
  },
  {
    "path": "test/suites/integration/security_group_test.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage integration_test\n\nimport (\n\t\"time\"\n\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\t\"github.com/awslabs/operatorpkg/status\"\n\t\"github.com/samber/lo\"\n\tmetav1 \"k8s.io/apimachinery/pkg/apis/meta/v1\"\n\t\"k8s.io/apimachinery/pkg/util/sets\"\n\t\"sigs.k8s.io/controller-runtime/pkg/client\"\n\n\t\"sigs.k8s.io/karpenter/pkg/test\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\t\"github.com/aws/karpenter-provider-aws/test/pkg/environment/aws\"\n\n\t. \"github.com/awslabs/operatorpkg/test/expectations\"\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n)\n\nvar _ = Describe(\"SecurityGroups\", func() {\n\tIt(\"should use the security-group-id selector\", func() {\n\t\tsecurityGroups := env.GetSecurityGroups(map[string]string{\"karpenter.sh/discovery\": env.ClusterName})\n\t\tExpect(len(securityGroups)).To(BeNumerically(\">\", 1))\n\t\tnodeClass.Spec.SecurityGroupSelectorTerms = lo.Map(securityGroups, func(sg aws.SecurityGroup, _ int) v1.SecurityGroupSelectorTerm {\n\t\t\treturn v1.SecurityGroupSelectorTerm{\n\t\t\t\tID: lo.FromPtr(sg.GroupId),\n\t\t\t}\n\t\t})\n\t\tpod := test.Pod()\n\n\t\tenv.ExpectCreated(pod, nodeClass, nodePool)\n\t\tenv.EventuallyExpectHealthy(pod)\n\t\tenv.ExpectCreatedNodeCount(\"==\", 1)\n\n\t\tenv.ExpectInstance(pod.Spec.NodeName).To(HaveField(\"SecurityGroups\", ConsistOf(securityGroups[0].GroupIdentifier, securityGroups[1].GroupIdentifier)))\n\t})\n\n\tIt(\"should use the security group selector with multiple tag values\", func() {\n\t\tsecurityGroups := env.GetSecurityGroups(map[string]string{\"karpenter.sh/discovery\": env.ClusterName})\n\t\tExpect(len(securityGroups)).To(BeNumerically(\">\", 1))\n\t\tfirst := securityGroups[0]\n\t\tlast := securityGroups[len(securityGroups)-1]\n\n\t\tnodeClass.Spec.SecurityGroupSelectorTerms = []v1.SecurityGroupSelectorTerm{\n\t\t\t{\n\t\t\t\tTags: map[string]string{\"Name\": lo.FromPtr(lo.FindOrElse(first.Tags, ec2types.Tag{}, func(tag ec2types.Tag) bool { return lo.FromPtr(tag.Key) == \"Name\" }).Value)},\n\t\t\t},\n\t\t\t{\n\t\t\t\tTags: map[string]string{\"Name\": lo.FromPtr(lo.FindOrElse(last.Tags, ec2types.Tag{}, func(tag ec2types.Tag) bool { return lo.FromPtr(tag.Key) == \"Name\" }).Value)},\n\t\t\t},\n\t\t}\n\t\tpod := test.Pod()\n\n\t\tenv.ExpectCreated(pod, nodeClass, nodePool)\n\t\tenv.EventuallyExpectHealthy(pod)\n\t\tenv.ExpectCreatedNodeCount(\"==\", 1)\n\n\t\tenv.ExpectInstance(pod.Spec.NodeName).To(HaveField(\"SecurityGroups\", ConsistOf(first.GroupIdentifier, last.GroupIdentifier)))\n\t})\n\n\tIt(\"should update the EC2NodeClass status security groups\", func() {\n\t\tenv.ExpectCreated(nodeClass)\n\t\tEventuallyExpectSecurityGroups(env, nodeClass)\n\t\tExpectStatusConditions(env, env.Client, 1*time.Minute, nodeClass, status.Condition{Type: v1.ConditionTypeSecurityGroupsReady, Status: metav1.ConditionTrue})\n\t\tExpectStatusConditions(env, env.Client, 1*time.Minute, nodeClass, status.Condition{Type: status.ConditionReady, Status: metav1.ConditionTrue})\n\t})\n\n\tIt(\"should have the NodeClass status as not ready since security groups were not resolved\", func() {\n\t\tnodeClass.Spec.SecurityGroupSelectorTerms = []v1.SecurityGroupSelectorTerm{\n\t\t\t{\n\t\t\t\tTags: map[string]string{\"karpenter.sh/discovery\": \"invalidName\"},\n\t\t\t},\n\t\t}\n\t\tenv.ExpectCreated(nodeClass)\n\t\tExpectStatusConditions(env, env.Client, 1*time.Minute, nodeClass, status.Condition{Type: v1.ConditionTypeSecurityGroupsReady, Status: metav1.ConditionFalse, Message: \"SecurityGroupSelector did not match any SecurityGroups\"})\n\t\tExpectStatusConditions(env, env.Client, 1*time.Minute, nodeClass, status.Condition{Type: status.ConditionReady, Status: metav1.ConditionFalse, Message: \"ValidationSucceeded=False, SecurityGroupsReady=False\"})\n\t})\n})\n\nfunc EventuallyExpectSecurityGroups(env *aws.Environment, nodeClass *v1.EC2NodeClass) {\n\tsecurityGroups := env.GetSecurityGroups(map[string]string{\"karpenter.sh/discovery\": env.ClusterName})\n\tExpect(securityGroups).ToNot(HaveLen(0))\n\n\tids := sets.New(lo.Map(securityGroups, func(s aws.SecurityGroup, _ int) string {\n\t\treturn lo.FromPtr(s.GroupId)\n\t})...)\n\tEventually(func(g Gomega) {\n\t\ttemp := &v1.EC2NodeClass{}\n\t\tg.Expect(env.Client.Get(env, client.ObjectKeyFromObject(nodeClass), temp)).To(Succeed())\n\t\tg.Expect(sets.New(lo.Map(temp.Status.SecurityGroups, func(s v1.SecurityGroup, _ int) string {\n\t\t\treturn s.ID\n\t\t})...).Equal(ids))\n\t}).WithTimeout(10 * time.Second).Should(Succeed())\n}\n"
  },
  {
    "path": "test/suites/integration/subnet_test.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage integration_test\n\nimport (\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go-v2/service/ec2\"\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\t\"github.com/awslabs/operatorpkg/status\"\n\t\"github.com/onsi/gomega/types\"\n\t\"github.com/samber/lo\"\n\t\"github.com/samber/lo/mutable\"\n\tcorev1 \"k8s.io/api/core/v1\"\n\tmetav1 \"k8s.io/apimachinery/pkg/apis/meta/v1\"\n\t\"k8s.io/apimachinery/pkg/util/sets\"\n\t\"sigs.k8s.io/controller-runtime/pkg/client\"\n\n\t\"sigs.k8s.io/karpenter/pkg/test\"\n\n\tkarpv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\t\"github.com/aws/karpenter-provider-aws/test/pkg/environment/aws\"\n\n\t. \"github.com/awslabs/operatorpkg/test/expectations\"\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n)\n\nvar _ = Describe(\"Subnets\", func() {\n\tIt(\"should use the subnet-id selector\", func() {\n\t\tsubnets := env.GetSubnets(map[string]string{\"karpenter.sh/discovery\": env.ClusterName})\n\t\tExpect(len(subnets)).ToNot(Equal(0))\n\t\tshuffledAZs := lo.Keys(subnets)\n\t\tmutable.Shuffle(shuffledAZs)\n\t\tfirstSubnet := subnets[shuffledAZs[0]][0]\n\n\t\tnodeClass.Spec.SubnetSelectorTerms = []v1.SubnetSelectorTerm{\n\t\t\t{\n\t\t\t\tID: firstSubnet,\n\t\t\t},\n\t\t}\n\t\tpod := test.Pod()\n\n\t\tenv.ExpectCreated(pod, nodeClass, nodePool)\n\t\tenv.EventuallyExpectHealthy(pod)\n\t\tenv.ExpectCreatedNodeCount(\"==\", 1)\n\n\t\tenv.ExpectInstance(pod.Spec.NodeName).To(HaveField(\"SubnetId\", HaveValue(Equal(firstSubnet))))\n\t})\n\tIt(\"should use resource based naming as node names\", func() {\n\t\tsubnets := env.GetSubnets(map[string]string{\"karpenter.sh/discovery\": env.ClusterName})\n\t\tExpect(len(subnets)).ToNot(Equal(0))\n\n\t\tallSubnets := lo.Flatten(lo.Values(subnets))\n\n\t\tExpectResourceBasedNamingEnabled(allSubnets...)\n\t\tDeferCleanup(func() {\n\t\t\tExpectResourceBasedNamingDisabled(allSubnets...)\n\t\t})\n\t\tpod := test.Pod()\n\n\t\tenv.ExpectCreated(pod, nodeClass, nodePool)\n\t\tenv.EventuallyExpectHealthy(pod)\n\t\tenv.ExpectCreatedNodeCount(\"==\", 1)\n\n\t\tExceptNodeNameToContainInstanceID(pod.Spec.NodeName)\n\t})\n\tIt(\"should use the subnet tag selector with multiple tag values\", func() {\n\t\t// Get all the subnets for the cluster\n\t\tsubnets := env.GetSubnetInfo(map[string]string{\"karpenter.sh/discovery\": env.ClusterName})\n\t\tExpect(len(subnets)).To(BeNumerically(\">\", 1))\n\t\tfirstSubnet := subnets[0]\n\t\tlastSubnet := subnets[len(subnets)-1]\n\n\t\tnodeClass.Spec.SubnetSelectorTerms = []v1.SubnetSelectorTerm{\n\t\t\t{\n\t\t\t\tTags: map[string]string{\"Name\": firstSubnet.Name},\n\t\t\t},\n\t\t\t{\n\t\t\t\tTags: map[string]string{\"Name\": lastSubnet.Name},\n\t\t\t},\n\t\t}\n\t\tpod := test.Pod()\n\n\t\tenv.ExpectCreated(pod, nodeClass, nodePool)\n\t\tenv.EventuallyExpectHealthy(pod)\n\t\tenv.ExpectCreatedNodeCount(\"==\", 1)\n\n\t\tenv.ExpectInstance(pod.Spec.NodeName).To(HaveField(\"SubnetId\", HaveValue(BeElementOf(firstSubnet.ID, lastSubnet.ID))))\n\t})\n\n\tIt(\"should use a subnet within the AZ requested\", func() {\n\t\tsubnets := env.GetSubnets(map[string]string{\"karpenter.sh/discovery\": env.ClusterName})\n\t\tExpect(len(subnets)).ToNot(Equal(0))\n\t\tshuffledAZs := lo.Keys(subnets)\n\t\tmutable.Shuffle(shuffledAZs)\n\n\t\ttest.ReplaceRequirements(nodePool, karpv1.NodeSelectorRequirementWithMinValues{\n\n\t\t\tKey:      corev1.LabelZoneFailureDomainStable,\n\t\t\tOperator: \"In\",\n\t\t\tValues:   []string{shuffledAZs[0]},\n\t\t})\n\t\tpod := test.Pod()\n\n\t\tenv.ExpectCreated(pod, nodeClass, nodePool)\n\t\tenv.EventuallyExpectHealthy(pod)\n\t\tenv.ExpectCreatedNodeCount(\"==\", 1)\n\n\t\tenv.ExpectInstance(pod.Spec.NodeName).To(HaveField(\"SubnetId\", Or(\n\t\t\tlo.Map(subnets[shuffledAZs[0]], func(subnetID string, _ int) types.GomegaMatcher { return HaveValue(Equal(subnetID)) })...,\n\t\t)))\n\t})\n\n\tIt(\"should have the NodeClass status for subnets\", func() {\n\t\tenv.ExpectCreated(nodeClass)\n\t\tEventuallyExpectSubnets(env, nodeClass)\n\t\tExpectStatusConditions(env, env.Client, 1*time.Minute, nodeClass, status.Condition{Type: v1.ConditionTypeSubnetsReady, Status: metav1.ConditionTrue})\n\t\tExpectStatusConditions(env, env.Client, 1*time.Minute, nodeClass, status.Condition{Type: status.ConditionReady, Status: metav1.ConditionTrue})\n\t})\n\tIt(\"should have the NodeClass status as not ready since subnets were not resolved\", func() {\n\t\tnodeClass.Spec.SubnetSelectorTerms = []v1.SubnetSelectorTerm{\n\t\t\t{\n\t\t\t\tTags: map[string]string{\"karpenter.sh/discovery\": \"invalidName\"},\n\t\t\t},\n\t\t}\n\t\tenv.ExpectCreated(nodeClass)\n\t\tExpectStatusConditions(env, env.Client, 1*time.Minute, nodeClass, status.Condition{Type: v1.ConditionTypeSubnetsReady, Status: metav1.ConditionFalse, Message: \"SubnetSelector did not match any Subnets\"})\n\t\tExpectStatusConditions(env, env.Client, 1*time.Minute, nodeClass, status.Condition{Type: status.ConditionReady, Status: metav1.ConditionFalse, Message: \"ValidationSucceeded=False, SubnetsReady=False\"})\n\t})\n})\n\nfunc ExpectResourceBasedNamingEnabled(subnetIDs ...string) {\n\tfor subnetID := range subnetIDs {\n\t\t_, err := env.EC2API.ModifySubnetAttribute(env.Context, &ec2.ModifySubnetAttributeInput{\n\t\t\tEnableResourceNameDnsARecordOnLaunch: &ec2types.AttributeBooleanValue{\n\t\t\t\tValue: lo.ToPtr(true),\n\t\t\t},\n\t\t\tSubnetId: lo.ToPtr(subnetIDs[subnetID]),\n\t\t})\n\t\tExpect(err).To(BeNil())\n\t\t_, err = env.EC2API.ModifySubnetAttribute(env.Context, &ec2.ModifySubnetAttributeInput{\n\t\t\tPrivateDnsHostnameTypeOnLaunch: \"resource-name\",\n\t\t\tSubnetId:                       lo.ToPtr(subnetIDs[subnetID]),\n\t\t})\n\t\tExpect(err).To(BeNil())\n\t}\n}\n\nfunc ExpectResourceBasedNamingDisabled(subnetIDs ...string) {\n\tfor subnetID := range subnetIDs {\n\t\t_, err := env.EC2API.ModifySubnetAttribute(env.Context, &ec2.ModifySubnetAttributeInput{\n\t\t\tEnableResourceNameDnsARecordOnLaunch: &ec2types.AttributeBooleanValue{\n\t\t\t\tValue: lo.ToPtr(false),\n\t\t\t},\n\t\t\tSubnetId: lo.ToPtr(subnetIDs[subnetID]),\n\t\t})\n\t\tExpect(err).To(BeNil())\n\t\t_, err = env.EC2API.ModifySubnetAttribute(env.Context, &ec2.ModifySubnetAttributeInput{\n\t\t\tPrivateDnsHostnameTypeOnLaunch: \"ip-name\",\n\t\t\tSubnetId:                       lo.ToPtr(subnetIDs[subnetID]),\n\t\t})\n\t\tExpect(err).To(BeNil())\n\t}\n}\n\nfunc ExceptNodeNameToContainInstanceID(nodeName string) {\n\tinstance := env.GetInstance(nodeName)\n\tExpect(nodeName).To(Not(Equal(lo.FromPtr(instance.InstanceId))))\n\tContainSubstring(nodeName, lo.FromPtr(instance.InstanceId))\n}\n\n// SubnetInfo is a simple struct for testing\ntype SubnetInfo struct {\n\tName string\n\tID   string\n}\n\nfunc EventuallyExpectSubnets(env *aws.Environment, nodeClass *v1.EC2NodeClass) {\n\tsubnets := env.GetSubnets(map[string]string{\"karpenter.sh/discovery\": env.ClusterName})\n\tExpect(subnets).ToNot(HaveLen(0))\n\tids := sets.New(lo.Flatten(lo.Values(subnets))...)\n\n\tEventually(func(g Gomega) {\n\t\ttemp := &v1.EC2NodeClass{}\n\t\tg.Expect(env.Client.Get(env, client.ObjectKeyFromObject(nodeClass), temp)).To(Succeed())\n\t\tg.Expect(sets.New(lo.Map(temp.Status.Subnets, func(s v1.Subnet, _ int) string {\n\t\t\treturn s.ID\n\t\t})...).Equal(ids))\n\t}).WithTimeout(10 * time.Second).Should(Succeed())\n}\n"
  },
  {
    "path": "test/suites/integration/suite_test.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage integration_test\n\nimport (\n\t\"testing\"\n\n\tkarpv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\t\"github.com/aws/karpenter-provider-aws/test/pkg/environment/aws\"\n\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n)\n\nvar env *aws.Environment\nvar nodeClass *v1.EC2NodeClass\nvar nodePool *karpv1.NodePool\n\nfunc TestIntegration(t *testing.T) {\n\tRegisterFailHandler(Fail)\n\tBeforeSuite(func() {\n\t\tenv = aws.NewEnvironment(t)\n\t})\n\tAfterSuite(func() {\n\t\tenv.Stop()\n\t})\n\tRunSpecs(t, \"Integration\")\n}\n\nvar _ = BeforeEach(func() {\n\tenv.BeforeEach()\n\tnodeClass = env.DefaultEC2NodeClass()\n\tnodePool = env.DefaultNodePool(nodeClass)\n})\nvar _ = AfterEach(func() { env.Cleanup() })\nvar _ = AfterEach(func() { env.AfterEach() })\n"
  },
  {
    "path": "test/suites/integration/tags_test.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage integration_test\n\nimport (\n\t\"fmt\"\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go-v2/service/ec2\"\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\tiamtypes \"github.com/aws/aws-sdk-go-v2/service/iam/types\"\n\t\"github.com/awslabs/operatorpkg/object\"\n\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n\t\"github.com/samber/lo\"\n\tcorev1 \"k8s.io/api/core/v1\"\n\t\"sigs.k8s.io/controller-runtime/pkg/client\"\n\tkarpv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n\t\"sigs.k8s.io/karpenter/pkg/operator/options\"\n\tcoretest \"sigs.k8s.io/karpenter/pkg/test\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/providers/instance\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/test\"\n)\n\nconst createdAtTag = \"node.k8s.amazonaws.com/createdAt\"\n\nvar _ = Describe(\"Tags\", func() {\n\tContext(\"Static Tags\", func() {\n\t\tIt(\"should tag all associated resources\", func() {\n\t\t\tnodeClass.Spec.Tags[\"TestTag\"] = \"TestVal\"\n\t\t\tpod := coretest.Pod()\n\t\t\tenv.ExpectCreated(pod, nodeClass, nodePool)\n\t\t\tenv.EventuallyExpectHealthy(pod)\n\t\t\tenv.ExpectCreatedNodeCount(\"==\", 1)\n\t\t\tinstance := env.GetInstance(pod.Spec.NodeName)\n\t\t\tvolumes := env.GetVolumes(lo.Map(instance.BlockDeviceMappings, func(bdm ec2types.InstanceBlockDeviceMapping, _ int) string {\n\t\t\t\treturn lo.FromPtr(bdm.Ebs.VolumeId)\n\t\t\t})...)\n\t\t\tnetworkInterfaces := env.GetNetworkInterfaces(lo.Map(instance.NetworkInterfaces, func(ni ec2types.InstanceNetworkInterface, _ int) string {\n\t\t\t\treturn lo.FromPtr(ni.NetworkInterfaceId)\n\t\t\t})...)\n\n\t\t\tExpect(instance.Tags).To(ContainElement(ec2types.Tag{Key: lo.ToPtr(\"TestTag\"), Value: lo.ToPtr(\"TestVal\")}))\n\t\t\tfor _, volume := range volumes {\n\t\t\t\tExpect(volume.Tags).To(ContainElement(ec2types.Tag{Key: lo.ToPtr(\"TestTag\"), Value: lo.ToPtr(\"TestVal\")}))\n\t\t\t}\n\t\t\tfor _, networkInterface := range networkInterfaces {\n\t\t\t\t// Any ENI that contains this createdAt tag was created by the VPC CNI DaemonSet\n\t\t\t\tif !lo.ContainsBy(networkInterface.TagSet, func(t ec2types.Tag) bool { return lo.FromPtr(t.Key) == createdAtTag }) {\n\t\t\t\t\tExpect(networkInterface.TagSet).To(ContainElement(ec2types.Tag{Key: lo.ToPtr(\"TestTag\"), Value: lo.ToPtr(\"TestVal\")}))\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t\tIt(\"should tag spot instance requests when creating resources\", func() {\n\t\t\tcoretest.ReplaceRequirements(nodePool, karpv1.NodeSelectorRequirementWithMinValues{\n\t\t\t\tKey:      karpv1.CapacityTypeLabelKey,\n\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\tValues:   []string{karpv1.CapacityTypeSpot},\n\t\t\t})\n\t\t\tnodeClass.Spec.Tags = map[string]string{\"TestTag\": \"TestVal\"}\n\t\t\tpod := coretest.Pod()\n\t\t\tenv.ExpectCreated(pod, nodeClass, nodePool)\n\t\t\tenv.EventuallyExpectHealthy(pod)\n\t\t\tenv.ExpectCreatedNodeCount(\"==\", 1)\n\t\t\tinstance := env.GetInstance(pod.Spec.NodeName)\n\t\t\tExpect(instance.SpotInstanceRequestId).ToNot(BeNil())\n\t\t\tspotInstanceRequest := env.GetSpotInstance(lo.FromPtr(instance.SpotInstanceRequestId))\n\t\t\tExpect(spotInstanceRequest.Tags).To(ContainElement(ec2types.Tag{Key: lo.ToPtr(\"TestTag\"), Value: lo.ToPtr(\"TestVal\")}))\n\t\t})\n\t\tIt(\"should tag managed instance profiles\", func() {\n\t\t\tif env.PrivateCluster {\n\t\t\t\tSkip(\"skipping managed instance profiles test for private cluster\")\n\t\t\t}\n\t\t\tnodeClass.Spec.Tags[\"TestTag\"] = \"TestVal\"\n\t\t\tenv.ExpectCreated(nodeClass)\n\n\t\t\tEventually(func(g Gomega) {\n\t\t\t\terr := env.Client.Get(env.Context, client.ObjectKeyFromObject(nodeClass), nodeClass)\n\t\t\t\tg.Expect(err).ToNot(HaveOccurred())\n\t\t\t\tg.Expect(nodeClass.Status.InstanceProfile).ToNot(BeEmpty())\n\t\t\t}).Should(Succeed())\n\n\t\t\tprofile := env.EventuallyExpectInstanceProfileExists(nodeClass.Status.InstanceProfile)\n\t\t\tExpect(profile.Tags).To(ContainElements(\n\t\t\t\tiamtypes.Tag{Key: lo.ToPtr(fmt.Sprintf(\"kubernetes.io/cluster/%s\", env.ClusterName)), Value: lo.ToPtr(\"owned\")},\n\t\t\t\tiamtypes.Tag{Key: lo.ToPtr(v1.LabelNodeClass), Value: lo.ToPtr(nodeClass.Name)},\n\t\t\t\tiamtypes.Tag{Key: lo.ToPtr(v1.EKSClusterNameTagKey), Value: lo.ToPtr(env.ClusterName)},\n\t\t\t))\n\t\t})\n\t})\n\tContext(\"Tagging Controller\", func() {\n\t\tIt(\"should tag with karpenter.sh/nodeclaim and Name tag\", func() {\n\t\t\tpod := coretest.Pod()\n\t\t\tenv.ExpectCreated(nodePool, nodeClass, pod)\n\t\t\tenv.EventuallyExpectCreatedNodeCount(\"==\", 1)\n\t\t\tnode := env.EventuallyExpectInitializedNodeCount(\"==\", 1)[0]\n\t\t\tnodeClaim := env.ExpectNodeClaimCount(\"==\", 1)[0]\n\t\t\tEventually(func(g Gomega) {\n\t\t\t\tg.Expect(env.Client.Get(env.Context, client.ObjectKeyFromObject(nodeClaim), nodeClaim)).To(Succeed())\n\t\t\t\tg.Expect(nodeClaim.Annotations).To(HaveKeyWithValue(v1.AnnotationInstanceTagged, \"true\"))\n\t\t\t\tg.Expect(nodeClaim.Annotations).To(HaveKeyWithValue(v1.AnnotationClusterNameTaggedCompatability, \"true\"))\n\t\t\t}, time.Minute).Should(Succeed())\n\n\t\t\tctx := options.ToContext(env.Context, &options.Options{})\n\t\t\tnodeInstance := instance.NewInstance(ctx, env.GetInstance(node.Name))\n\t\t\tExpect(nodeInstance.Tags).To(HaveKeyWithValue(\"Name\", node.Name))\n\t\t\tExpect(nodeInstance.Tags).To(HaveKeyWithValue(\"karpenter.sh/nodeclaim\", nodeClaim.Name))\n\t\t\tExpect(nodeInstance.Tags).To(HaveKeyWithValue(\"eks:eks-cluster-name\", env.ClusterName))\n\t\t})\n\t\tIt(\"shouldn't overwrite custom Name tags\", func() {\n\t\t\tnodeClass = test.EC2NodeClass(*nodeClass, v1.EC2NodeClass{Spec: v1.EC2NodeClassSpec{\n\t\t\t\tTags: map[string]string{\"Name\": \"custom-name\", \"testing/cluster\": env.ClusterName},\n\t\t\t}})\n\t\t\tif env.PrivateCluster {\n\t\t\t\tnodeClass.Spec.Role = \"\"\n\t\t\t\tnodeClass.Spec.InstanceProfile = lo.ToPtr(fmt.Sprintf(\"KarpenterNodeInstanceProfile-%s\", env.ClusterName))\n\t\t\t}\n\t\t\tnodePool = coretest.NodePool(*nodePool, karpv1.NodePool{\n\t\t\t\tSpec: karpv1.NodePoolSpec{\n\t\t\t\t\tTemplate: karpv1.NodeClaimTemplate{\n\t\t\t\t\t\tSpec: karpv1.NodeClaimTemplateSpec{\n\t\t\t\t\t\t\tNodeClassRef: &karpv1.NodeClassReference{\n\t\t\t\t\t\t\t\tGroup: object.GVK(nodeClass).Group,\n\t\t\t\t\t\t\t\tKind:  object.GVK(nodeClass).Kind,\n\t\t\t\t\t\t\t\tName:  nodeClass.Name,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t})\n\t\t\tpod := coretest.Pod()\n\t\t\tenv.ExpectCreated(nodePool, nodeClass, pod)\n\t\t\tenv.EventuallyExpectCreatedNodeCount(\"==\", 1)\n\t\t\tnode := env.EventuallyExpectInitializedNodeCount(\"==\", 1)[0]\n\t\t\tnodeClaim := env.ExpectNodeClaimCount(\"==\", 1)[0]\n\t\t\tEventually(func(g Gomega) {\n\t\t\t\tg.Expect(env.Client.Get(env.Context, client.ObjectKeyFromObject(nodeClaim), nodeClaim)).To(Succeed())\n\t\t\t\tg.Expect(nodeClaim.Annotations).To(HaveKeyWithValue(v1.AnnotationInstanceTagged, \"true\"))\n\t\t\t\tg.Expect(nodeClaim.Annotations).To(HaveKeyWithValue(v1.AnnotationClusterNameTaggedCompatability, \"true\"))\n\t\t\t}, time.Minute).Should(Succeed())\n\n\t\t\tctx := options.ToContext(env.Context, &options.Options{})\n\t\t\tnodeInstance := instance.NewInstance(ctx, env.GetInstance(node.Name))\n\t\t\tExpect(nodeInstance.Tags).To(HaveKeyWithValue(\"Name\", \"custom-name\"))\n\t\t\tExpect(nodeInstance.Tags).To(HaveKeyWithValue(\"karpenter.sh/nodeclaim\", nodeClaim.Name))\n\t\t\tExpect(nodeInstance.Tags).To(HaveKeyWithValue(\"eks:eks-cluster-name\", env.ClusterName))\n\t\t})\n\t\tIt(\"should tag instance with eks:eks-cluster-name tag when the tag doesn't exist\", func() {\n\t\t\tpod := coretest.Pod()\n\t\t\tenv.ExpectCreated(nodePool, nodeClass, pod)\n\t\t\tenv.EventuallyExpectCreatedNodeCount(\"==\", 1)\n\t\t\tnode := env.EventuallyExpectInitializedNodeCount(\"==\", 1)[0]\n\t\t\tnodeClaim := env.ExpectNodeClaimCount(\"==\", 1)[0]\n\t\t\tEventually(func(g Gomega) {\n\t\t\t\tg.Expect(env.Client.Get(env.Context, client.ObjectKeyFromObject(nodeClaim), nodeClaim)).To(Succeed())\n\t\t\t\tg.Expect(nodeClaim.Annotations).To(HaveKeyWithValue(v1.AnnotationInstanceTagged, \"true\"))\n\t\t\t\tg.Expect(nodeClaim.Annotations).To(HaveKeyWithValue(v1.AnnotationClusterNameTaggedCompatability, \"true\"))\n\t\t\t}, time.Minute).Should(Succeed())\n\n\t\t\t_, err := env.EC2API.DeleteTags(env.Context, &ec2.DeleteTagsInput{\n\t\t\t\tResources: []string{env.ExpectParsedProviderID(node.Spec.ProviderID)},\n\t\t\t\tTags:      []ec2types.Tag{{Key: lo.ToPtr(v1.EKSClusterNameTagKey)}},\n\t\t\t})\n\t\t\tExpect(err).ToNot(HaveOccurred())\n\n\t\t\tBy(fmt.Sprintf(\"Removing the %s annotation to re-trigger tagging\", v1.AnnotationClusterNameTaggedCompatability))\n\t\t\tExpect(env.Client.Get(env.Context, client.ObjectKeyFromObject(nodeClaim), nodeClaim)).To(Succeed())\n\t\t\tdelete(nodeClaim.Annotations, v1.AnnotationClusterNameTaggedCompatability)\n\t\t\tenv.ExpectUpdated(nodeClaim)\n\n\t\t\tBy(fmt.Sprintf(\"Polling for the %s tag update\", v1.EKSClusterNameTagKey))\n\t\t\tEventually(func(g Gomega) {\n\t\t\t\tout, err := env.EC2API.DescribeInstances(env.Context, &ec2.DescribeInstancesInput{\n\t\t\t\t\tInstanceIds: []string{env.ExpectParsedProviderID(node.Spec.ProviderID)},\n\t\t\t\t})\n\t\t\t\tg.Expect(err).ToNot(HaveOccurred())\n\t\t\t\tg.Expect(out.Reservations).To(HaveLen(1))\n\t\t\t\tg.Expect(out.Reservations[0].Instances).To(HaveLen(1))\n\t\t\t\tg.Expect(out.Reservations[0].Instances[0].Tags).To(ContainElement(ec2types.Tag{Key: lo.ToPtr(v1.EKSClusterNameTagKey), Value: lo.ToPtr(env.ClusterName)}))\n\t\t\t}).Should(Succeed())\n\t\t})\n\t})\n})\n"
  },
  {
    "path": "test/suites/integration/testdata/amd_driver_input.sh",
    "content": "MIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"BOUNDARY\"\n\n--BOUNDARY\nContent-Type: text/x-shellscript; charset=\"us-ascii\"\n\n#!/bin/bash\ncd\nsudo amazon-linux-extras install epel -y\nsudo yum update -y\n\n# Create a script to install the AMD Radeon GPU\ncat << EOF > /tmp/amd-install.sh\n#!/bin/bash\nexport echo PATH=/usr/local/bin:$PATH\naws s3 cp --recursive s3://ec2-amd-linux-drivers/latest/ . --no-sign-request\ntar -xf amdgpu-pro-*rhel*.tar.xz\ncd amdgpu-pro-20.20-1184451-rhel-7.8\n./amdgpu-pro-install -y --opencl=pal,legacy\nsystemctl disable amd-install.service\nreboot\nEOF\nsudo chmod +x /tmp/amd-install.sh\n\n# Create a service that will run on system reboot\ncat << EOF > /etc/systemd/system/amd-install.service\n[Unit]\nDescription=install amd drivers\n\n[Service]\nExecStart=/bin/bash /tmp/amd-install.sh\n\n[Install]\nWantedBy=multi-user.target\nEOF\nsudo systemctl enable amd-install.service\n\n# Run the EKS bootstrap script and then reboot\nexec > >(tee /var/log/user-data.log|logger -t user-data -s 2>/dev/console) 2>&1\n/etc/eks/bootstrap.sh '%s' --apiserver-endpoint '%s' --b64-cluster-ca '%s' \\\n--use-max-pods false \\\n--kubelet-extra-args '--node-labels=karpenter.sh/nodepool=%s,testing/cluster=unspecified'\n\nreboot\n--BOUNDARY--\n"
  },
  {
    "path": "test/suites/integration/validation_test.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage integration_test\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/samber/lo\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n)\n\nvar _ = Describe(\"Validation\", func() {\n\tContext(\"EC2NodeClass\", func() {\n\t\tIt(\"should error when amiSelectorTerms are not defined\", func() {\n\t\t\tnodeClass.Spec.AMIFamily = lo.ToPtr(v1.AMIFamilyAL2023)\n\t\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{}\n\t\t\tExpect(env.Client.Create(env.Context, nodeClass)).ToNot(Succeed())\n\t\t})\n\t\tIt(\"should fail for poorly formatted AMI ids\", func() {\n\t\t\tnodeClass.Spec.AMIFamily = lo.ToPtr(v1.AMIFamilyAL2023)\n\t\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{\n\t\t\t\t{\n\t\t\t\t\tID: \"must-start-with-ami\",\n\t\t\t\t},\n\t\t\t}\n\t\t\tExpect(env.Client.Create(env.Context, nodeClass)).ToNot(Succeed())\n\t\t})\n\t\tIt(\"should succeed when tags don't contain restricted keys\", func() {\n\t\t\tnodeClass.Spec.Tags = map[string]string{\"karpenter.sh/custom-key\": \"custom-value\", \"kubernetes.io/role/key\": \"custom-value\"}\n\t\t\tExpect(env.Client.Create(env.Context, nodeClass)).To(Succeed())\n\t\t})\n\t\tIt(\"should error when tags contains a restricted key\", func() {\n\t\t\tnodeClass.Spec.Tags = map[string]string{\"karpenter.sh/nodepool\": \"custom-value\"}\n\t\t\tExpect(env.Client.Create(env.Context, nodeClass)).ToNot(Succeed())\n\n\t\t\tnodeClass.Spec.Tags = map[string]string{v1.EKSClusterNameTagKey: env.ClusterName}\n\t\t\tExpect(env.Client.Create(env.Context, nodeClass)).ToNot(Succeed())\n\n\t\t\tnodeClass.Spec.Tags = map[string]string{fmt.Sprintf(\"kubernetes.io/cluster/%s\", env.ClusterName): \"owned\"}\n\t\t\tExpect(env.Client.Create(env.Context, nodeClass)).ToNot(Succeed())\n\n\t\t\tnodeClass.Spec.Tags = map[string]string{\"karpenter.sh/nodeclaim\": \"custom-value\"}\n\t\t\tExpect(env.Client.Create(env.Context, nodeClass)).ToNot(Succeed())\n\n\t\t\tnodeClass.Spec.Tags = map[string]string{\"karpenter.k8s.aws/ec2nodeclass\": \"custom-value\"}\n\t\t\tExpect(env.Client.Create(env.Context, nodeClass)).ToNot(Succeed())\n\t\t})\n\t\tIt(\"should fail when securityGroupSelectorTerms has id and other filters\", func() {\n\t\t\tnodeClass.Spec.SecurityGroupSelectorTerms = []v1.SecurityGroupSelectorTerm{\n\t\t\t\t{\n\t\t\t\t\tTags: map[string]string{\"karpenter.sh/discovery\": env.ClusterName},\n\t\t\t\t\tID:   \"sg-12345\",\n\t\t\t\t},\n\t\t\t}\n\t\t\tExpect(env.Client.Create(env.Context, nodeClass)).ToNot(Succeed())\n\t\t})\n\t\tIt(\"should fail when subnetSelectorTerms has id and other filters\", func() {\n\t\t\tnodeClass.Spec.SubnetSelectorTerms = []v1.SubnetSelectorTerm{\n\t\t\t\t{\n\t\t\t\t\tTags: map[string]string{\"karpenter.sh/discovery\": env.ClusterName},\n\t\t\t\t\tID:   \"subnet-12345\",\n\t\t\t\t},\n\t\t\t}\n\t\t\tExpect(env.Client.Create(env.Context, nodeClass)).ToNot(Succeed())\n\t\t})\n\t\tIt(\"should fail when amiSelectorTerms has id and other filters\", func() {\n\t\t\tnodeClass.Spec.AMIFamily = lo.ToPtr(v1.AMIFamilyAL2023)\n\t\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{\n\t\t\t\t{\n\t\t\t\t\tTags: map[string]string{\"karpenter.sh/discovery\": env.ClusterName},\n\t\t\t\t\tID:   \"ami-12345\",\n\t\t\t\t},\n\t\t\t}\n\t\t\tExpect(env.Client.Create(env.Context, nodeClass)).ToNot(Succeed())\n\t\t})\n\t\tIt(\"should fail when specifying role and instanceProfile at the same time\", func() {\n\t\t\tnodeClass.Spec.Role = \"test-role\"\n\t\t\tnodeClass.Spec.InstanceProfile = lo.ToPtr(\"test-instance-profile\")\n\t\t\tExpect(env.Client.Create(env.Context, nodeClass)).ToNot(Succeed())\n\t\t})\n\t\tIt(\"should fail when specifying none of role and instanceProfile\", func() {\n\t\t\tnodeClass.Spec.Role = \"\"\n\t\t\tnodeClass.Spec.InstanceProfile = nil\n\t\t\tExpect(env.Client.Create(env.Context, nodeClass)).ToNot(Succeed())\n\t\t})\n\t\tIt(\"should fail to switch between an unmanaged and managed instance profile\", func() {\n\t\t\tnodeClass.Spec.Role = \"\"\n\t\t\tnodeClass.Spec.InstanceProfile = lo.ToPtr(\"test-instance-profile\")\n\t\t\tExpect(env.Client.Create(env.Context, nodeClass)).To(Succeed())\n\n\t\t\tnodeClass.Spec.Role = \"test-role\"\n\t\t\tnodeClass.Spec.InstanceProfile = nil\n\t\t\tExpect(env.Client.Update(env.Context, nodeClass)).ToNot(Succeed())\n\t\t})\n\t\tIt(\"should fail to switch between a managed and unmanaged instance profile\", func() {\n\t\t\t// Skipping this test for private cluster because there is no VPC private endpoint for the IAM API. As a result,\n\t\t\t// you cannot use the default spec.role field in your EC2NodeClass. Instead, you need to provision and manage an\n\t\t\t// instance profile manually and then specify Karpenter to use this instance profile through the spec.instanceProfile field.\n\t\t\tif env.PrivateCluster {\n\t\t\t\tSkip(\"skipping Unmanaged instance profile test for private cluster\")\n\t\t\t}\n\t\t\tnodeClass.Spec.Role = \"test-role\"\n\t\t\tnodeClass.Spec.InstanceProfile = nil\n\t\t\tExpect(env.Client.Create(env.Context, nodeClass)).To(Succeed())\n\n\t\t\tnodeClass.Spec.Role = \"\"\n\t\t\tnodeClass.Spec.InstanceProfile = lo.ToPtr(\"test-instance-profile\")\n\t\t\tExpect(env.Client.Update(env.Context, nodeClass)).ToNot(Succeed())\n\t\t})\n\t\tIt(\"should error if imageGCHighThresholdPercent is less than imageGCLowThresholdPercent\", func() {\n\t\t\tnodeClass.Spec.Kubelet = &v1.KubeletConfiguration{\n\t\t\t\tImageGCHighThresholdPercent: lo.ToPtr(int32(10)),\n\t\t\t\tImageGCLowThresholdPercent:  lo.ToPtr(int32(60)),\n\t\t\t}\n\t\t\tExpect(env.Client.Create(env.Context, nodeClass)).ToNot(Succeed())\n\t\t})\n\t\tIt(\"should error if imageGCHighThresholdPercent or imageGCLowThresholdPercent is negative\", func() {\n\t\t\tnodeClass.Spec.Kubelet = &v1.KubeletConfiguration{\n\t\t\t\tImageGCHighThresholdPercent: lo.ToPtr(int32(-10)),\n\t\t\t}\n\t\t\tExpect(env.Client.Create(env.Context, nodeClass)).ToNot(Succeed())\n\t\t\tnodeClass.Spec.Kubelet = &v1.KubeletConfiguration{\n\t\t\t\tImageGCLowThresholdPercent: lo.ToPtr(int32(-10)),\n\t\t\t}\n\t\t\tExpect(env.Client.Create(env.Context, nodeClass)).ToNot(Succeed())\n\t\t})\n\t})\n})\n"
  },
  {
    "path": "test/suites/interruption/suite_test.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage interruption_test\n\nimport (\n\t\"fmt\"\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/samber/lo\"\n\tcorev1 \"k8s.io/api/core/v1\"\n\tmetav1 \"k8s.io/apimachinery/pkg/apis/meta/v1\"\n\t\"k8s.io/apimachinery/pkg/labels\"\n\t\"k8s.io/apimachinery/pkg/util/uuid\"\n\t\"sigs.k8s.io/controller-runtime/pkg/client\"\n\n\tkarpv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n\tcoretest \"sigs.k8s.io/karpenter/pkg/test\"\n\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/controllers/interruption/messages\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/controllers/interruption/messages/scheduledchange\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/operator/options\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/test\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/utils\"\n\t\"github.com/aws/karpenter-provider-aws/test/pkg/environment/aws\"\n\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n)\n\nvar env *aws.Environment\nvar nodeClass *v1.EC2NodeClass\nvar nodePool *karpv1.NodePool\n\nfunc TestInterruption(t *testing.T) {\n\tRegisterFailHandler(Fail)\n\tBeforeSuite(func() {\n\t\tenv = aws.NewEnvironment(t)\n\t})\n\tAfterSuite(func() {\n\t\tenv.Stop()\n\t})\n\tRunSpecs(t, \"Interruption\")\n}\n\nvar _ = BeforeEach(func() {\n\tenv.Context = options.ToContext(env.Context, test.Options(test.OptionsFields{\n\t\tInterruptionQueue: lo.ToPtr(env.InterruptionQueue),\n\t}))\n\tenv.BeforeEach()\n\tnodeClass = env.DefaultEC2NodeClass()\n\tnodePool = env.DefaultNodePool(nodeClass)\n})\nvar _ = AfterEach(func() { env.Cleanup() })\nvar _ = AfterEach(func() { env.AfterEach() })\n\nvar _ = Describe(\"Interruption\", func() {\n\tIt(\"should terminate the spot instance and spin-up a new node on spot interruption warning\", func() {\n\t\tBy(\"Creating a single healthy node with a healthy deployment\")\n\t\tnodePool = coretest.ReplaceRequirements(nodePool, karpv1.NodeSelectorRequirementWithMinValues{\n\t\t\tKey:      karpv1.CapacityTypeLabelKey,\n\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\tValues:   []string{karpv1.CapacityTypeSpot},\n\t\t})\n\t\tnumPods := 1\n\t\tdep := coretest.Deployment(coretest.DeploymentOptions{\n\t\t\tReplicas: int32(numPods),\n\t\t\tPodOptions: coretest.PodOptions{\n\t\t\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\t\t\tLabels: map[string]string{\"app\": \"my-app\"},\n\t\t\t\t},\n\t\t\t\tTerminationGracePeriodSeconds: lo.ToPtr(int64(0)),\n\t\t\t},\n\t\t})\n\t\tselector := labels.SelectorFromSet(dep.Spec.Selector.MatchLabels)\n\n\t\tenv.ExpectCreated(nodeClass, nodePool, dep)\n\n\t\tenv.EventuallyExpectHealthyPodCount(selector, numPods)\n\t\tenv.ExpectCreatedNodeCount(\"==\", 1)\n\n\t\tnode := env.Monitor.CreatedNodes()[0]\n\t\tinstanceID, err := utils.ParseInstanceID(node.Spec.ProviderID)\n\t\tExpect(err).ToNot(HaveOccurred())\n\n\t\tBy(\"interrupting the spot instance\")\n\t\texp := env.ExpectSpotInterruptionExperiment(instanceID)\n\t\tDeferCleanup(func() {\n\t\t\tenv.ExpectExperimentTemplateDeleted(*exp.ExperimentTemplateId)\n\t\t})\n\n\t\t// We are expecting the node to be terminated before the termination is complete\n\t\tBy(\"waiting to receive the interruption and terminate the node\")\n\t\tEventually(func(g Gomega) {\n\t\t\tg.Expect(env.Client.Get(env.Context, client.ObjectKeyFromObject(node), node)).To(Succeed())\n\t\t\tg.Expect(!node.DeletionTimestamp.IsZero()).To(BeTrue())\n\t\t}).WithTimeout(time.Minute).Should(Succeed())\n\t\tenv.EventuallyExpectNotFound(node)\n\t\tenv.EventuallyExpectHealthyPodCount(selector, 1)\n\t})\n\tIt(\"should terminate the interruptible reserved capacity instance and spin-up a new node on reserved capacity interruption warning\", func() {\n\t\tBy(\"Creating an IODCR and configuring the nodeclass to select on it\")\n\t\tsourceReservationID, interruptibleReservationID := aws.ExpectInterruptibleCapacityReservationCreated(\n\t\t\tenv.Context,\n\t\t\tenv.EC2API,\n\t\t\tec2types.InstanceTypeM5Large,\n\t\t\tenv.ZoneInfo[0].Zone,\n\t\t\t1,\n\t\t\t1,\n\t\t\tnil,\n\t\t)\n\t\tDeferCleanup(func() {\n\t\t\taws.ExpectInterruptibleAndSourceCapacityCanceled(env.Context, env.EC2API, sourceReservationID, interruptibleReservationID)\n\t\t})\n\t\tnodeClass.Spec.CapacityReservationSelectorTerms = []v1.CapacityReservationSelectorTerm{\n\t\t\t{ID: sourceReservationID}, {ID: interruptibleReservationID},\n\t\t}\n\t\tnodePool = coretest.ReplaceRequirements(nodePool,\n\t\t\tkarpv1.NodeSelectorRequirementWithMinValues{\n\t\t\t\tKey:      karpv1.CapacityTypeLabelKey,\n\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\tValues:   []string{karpv1.CapacityTypeOnDemand, karpv1.CapacityTypeReserved},\n\t\t\t},\n\t\t)\n\t\tenv.ExpectCreated(nodeClass, nodePool)\n\n\t\tBy(\"Creating a node from IODCR\")\n\t\tnumPods := 1\n\t\tdep := coretest.Deployment(coretest.DeploymentOptions{\n\t\t\tReplicas: int32(numPods),\n\t\t\tPodOptions: coretest.PodOptions{\n\t\t\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\t\t\tLabels: map[string]string{\"app\": \"my-app\"},\n\t\t\t\t},\n\t\t\t\tTerminationGracePeriodSeconds: lo.ToPtr(int64(0)),\n\t\t\t},\n\t\t})\n\t\tselector := labels.SelectorFromSet(dep.Spec.Selector.MatchLabels)\n\n\t\tenv.ExpectCreated(dep)\n\t\tenv.EventuallyExpectHealthyPodCount(selector, numPods)\n\t\tenv.ExpectCreatedNodeCount(\"==\", 1)\n\t\tnode := env.Monitor.CreatedNodes()[0]\n\n\t\tExpect(node.Labels).To(HaveKeyWithValue(v1.LabelCapacityReservationInterruptible, \"true\"))\n\t\tExpect(node.Labels).To(HaveKeyWithValue(v1.LabelCapacityReservationID, interruptibleReservationID))\n\n\t\tBy(\"Interrupting the reserved instance\")\n\t\taws.ExpectModifyInterruptibleCapacity(env.Context, env.EC2API, sourceReservationID, 0)\n\n\t\t// We are expecting the node to be terminated before the termination is complete\n\t\tBy(\"Waiting to receive the interruption and terminate the node\")\n\t\tEventually(func(g Gomega) {\n\t\t\tg.Expect(env.Client.Get(env.Context, client.ObjectKeyFromObject(node), node)).To(Succeed())\n\t\t\tg.Expect(!node.DeletionTimestamp.IsZero()).To(BeTrue())\n\t\t}).WithTimeout(time.Minute).Should(Succeed())\n\t\tenv.EventuallyExpectNotFound(node)\n\t\tenv.EventuallyExpectHealthyPodCount(selector, 1)\n\t})\n\tIt(\"should terminate the node at the API server when the EC2 instance is stopped\", func() {\n\t\tBy(\"Creating a single healthy node with a healthy deployment\")\n\t\tnumPods := 1\n\t\tdep := coretest.Deployment(coretest.DeploymentOptions{\n\t\t\tReplicas: int32(numPods),\n\t\t\tPodOptions: coretest.PodOptions{\n\t\t\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\t\t\tLabels: map[string]string{\"app\": \"my-app\"},\n\t\t\t\t},\n\t\t\t\tTerminationGracePeriodSeconds: lo.ToPtr(int64(0)),\n\t\t\t},\n\t\t})\n\t\tselector := labels.SelectorFromSet(dep.Spec.Selector.MatchLabels)\n\n\t\tenv.ExpectCreated(nodeClass, nodePool, dep)\n\n\t\tenv.EventuallyExpectHealthyPodCount(selector, numPods)\n\t\tenv.ExpectCreatedNodeCount(\"==\", 1)\n\n\t\tnode := env.Monitor.CreatedNodes()[0]\n\n\t\tBy(\"Stopping the EC2 instance without the EKS cluster's knowledge\")\n\t\tenv.ExpectInstanceStopped(node.Name) // Make a call to the EC2 api to stop the instance\n\n\t\tEventually(func(g Gomega) {\n\t\t\tg.Expect(env.Client.Get(env.Context, client.ObjectKeyFromObject(node), node)).To(Succeed())\n\t\t\tg.Expect(!node.DeletionTimestamp.IsZero()).To(BeTrue())\n\t\t}).WithTimeout(time.Minute).Should(Succeed())\n\t\tenv.EventuallyExpectNotFound(node)\n\t\tenv.EventuallyExpectHealthyPodCount(selector, 1)\n\t})\n\tIt(\"should terminate the node at the API server when the EC2 instance is terminated\", func() {\n\t\tBy(\"Creating a single healthy node with a healthy deployment\")\n\t\tnumPods := 1\n\t\tdep := coretest.Deployment(coretest.DeploymentOptions{\n\t\t\tReplicas: int32(numPods),\n\t\t\tPodOptions: coretest.PodOptions{\n\t\t\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\t\t\tLabels: map[string]string{\"app\": \"my-app\"},\n\t\t\t\t},\n\t\t\t\tTerminationGracePeriodSeconds: lo.ToPtr(int64(0)),\n\t\t\t},\n\t\t})\n\t\tselector := labels.SelectorFromSet(dep.Spec.Selector.MatchLabels)\n\n\t\tenv.ExpectCreated(nodeClass, nodePool, dep)\n\n\t\tenv.EventuallyExpectHealthyPodCount(selector, numPods)\n\t\tenv.ExpectCreatedNodeCount(\"==\", 1)\n\n\t\tnode := env.Monitor.CreatedNodes()[0]\n\n\t\tBy(\"Terminating the EC2 instance without the EKS cluster's knowledge\")\n\t\tenv.ExpectInstanceTerminated(node.Name) // Make a call to the EC2 api to stop the instance\n\n\t\tEventually(func(g Gomega) {\n\t\t\tg.Expect(env.Client.Get(env.Context, client.ObjectKeyFromObject(node), node)).To(Succeed())\n\t\t\tg.Expect(!node.DeletionTimestamp.IsZero()).To(BeTrue())\n\t\t}).WithTimeout(time.Minute).Should(Succeed())\n\t\tenv.EventuallyExpectNotFound(node)\n\t\tenv.EventuallyExpectHealthyPodCount(selector, 1)\n\t})\n\tIt(\"should terminate the node when receiving a scheduled change health event\", func() {\n\t\tBy(\"Creating a single healthy node with a healthy deployment\")\n\t\tnumPods := 1\n\t\tdep := coretest.Deployment(coretest.DeploymentOptions{\n\t\t\tReplicas: int32(numPods),\n\t\t\tPodOptions: coretest.PodOptions{\n\t\t\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\t\t\tLabels: map[string]string{\"app\": \"my-app\"},\n\t\t\t\t},\n\t\t\t\tTerminationGracePeriodSeconds: lo.ToPtr(int64(0)),\n\t\t\t},\n\t\t})\n\t\tselector := labels.SelectorFromSet(dep.Spec.Selector.MatchLabels)\n\n\t\tenv.ExpectCreated(nodeClass, nodePool, dep)\n\n\t\tenv.EventuallyExpectHealthyPodCount(selector, numPods)\n\t\tenv.ExpectCreatedNodeCount(\"==\", 1)\n\n\t\tnode := env.Monitor.CreatedNodes()[0]\n\t\tinstanceID, err := utils.ParseInstanceID(node.Spec.ProviderID)\n\t\tExpect(err).ToNot(HaveOccurred())\n\n\t\tBy(\"Creating a scheduled change health event in the SQS message queue\")\n\t\tenv.ExpectMessagesCreated(scheduledChangeMessage(env.Region, \"000000000000\", instanceID))\n\n\t\tEventually(func(g Gomega) {\n\t\t\tg.Expect(env.Client.Get(env.Context, client.ObjectKeyFromObject(node), node)).To(Succeed())\n\t\t\tg.Expect(!node.DeletionTimestamp.IsZero()).To(BeTrue())\n\t\t}).WithTimeout(time.Minute).Should(Succeed())\n\t\tenv.EventuallyExpectNotFound(node)\n\t\tenv.EventuallyExpectHealthyPodCount(selector, 1)\n\t})\n})\n\nfunc scheduledChangeMessage(region, accountID, involvedInstanceID string) scheduledchange.Message {\n\treturn scheduledchange.Message{\n\t\tMetadata: messages.Metadata{\n\t\t\tVersion:    \"0\",\n\t\t\tAccount:    accountID,\n\t\t\tDetailType: \"AWS Health Event\",\n\t\t\tID:         string(uuid.NewUUID()),\n\t\t\tRegion:     region,\n\t\t\tResources: []string{\n\t\t\t\tfmt.Sprintf(\"arn:aws:ec2:%s:instance/%s\", region, involvedInstanceID),\n\t\t\t},\n\t\t\tSource: \"aws.health\",\n\t\t\tTime:   time.Now(),\n\t\t},\n\t\tDetail: scheduledchange.Detail{\n\t\t\tService:           \"EC2\",\n\t\t\tEventTypeCategory: \"scheduledChange\",\n\t\t\tAffectedEntities: []scheduledchange.AffectedEntity{\n\t\t\t\t{\n\t\t\t\t\tEntityValue: involvedInstanceID,\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n}\n"
  },
  {
    "path": "test/suites/ipv6/suite_test.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage ipv6_test\n\nimport (\n\t\"net\"\n\t\"testing\"\n\n\t\"github.com/samber/lo\"\n\tcorev1 \"k8s.io/api/core/v1\"\n\n\tkarpv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n\tcoretest \"sigs.k8s.io/karpenter/pkg/test\"\n\n\t\"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\t\"github.com/aws/karpenter-provider-aws/test/pkg/environment/aws\"\n\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n)\n\nvar env *aws.Environment\nvar nodeClass *v1.EC2NodeClass\nvar nodePool *karpv1.NodePool\n\nfunc TestIPv6(t *testing.T) {\n\tRegisterFailHandler(Fail)\n\tBeforeSuite(func() {\n\t\tenv = aws.NewEnvironment(t)\n\t})\n\tAfterSuite(func() {\n\t\tenv.Stop()\n\t})\n\tRunSpecs(t, \"IPv6\")\n}\n\nvar _ = BeforeEach(func() {\n\tenv.BeforeEach()\n\tnodeClass = env.DefaultEC2NodeClass()\n\tnodePool = env.DefaultNodePool(nodeClass)\n\tnodePool = coretest.ReplaceRequirements(nodePool,\n\t\tkarpv1.NodeSelectorRequirementWithMinValues{\n\t\t\tKey:      v1.LabelInstanceCategory,\n\t\t\tOperator: corev1.NodeSelectorOpExists,\n\t\t},\n\t\tkarpv1.NodeSelectorRequirementWithMinValues{\n\t\t\tKey:      corev1.LabelInstanceTypeStable,\n\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\tValues:   []string{\"c5.large\"},\n\t\t},\n\t)\n})\nvar _ = AfterEach(func() { env.Cleanup() })\nvar _ = AfterEach(func() { env.AfterEach() })\n\nvar _ = Describe(\"IPv6\", func() {\n\tIt(\"should provision an IPv6 node by discovering kube-dns IPv6\", func() {\n\t\tpod := coretest.Pod()\n\t\tenv.ExpectCreated(pod, nodeClass, nodePool)\n\t\tenv.EventuallyExpectHealthy(pod)\n\t\tenv.ExpectCreatedNodeCount(\"==\", 1)\n\t\tnode := env.GetNode(pod.Spec.NodeName)\n\t\tinternalIPv6Addrs := lo.Filter(node.Status.Addresses, func(addr corev1.NodeAddress, _ int) bool {\n\t\t\treturn addr.Type == corev1.NodeInternalIP && net.ParseIP(addr.Address).To4() == nil\n\t\t})\n\t\tExpect(internalIPv6Addrs).To(HaveLen(1))\n\t})\n\tIt(\"should provision an IPv6 node by discovering kubeletConfig kube-dns IP\", func() {\n\t\tclusterDNSAddr := env.ExpectIPv6ClusterDNS()\n\t\tnodeClass.Spec.Kubelet = &v1.KubeletConfiguration{ClusterDNS: []string{clusterDNSAddr}}\n\t\tpod := coretest.Pod()\n\t\tenv.ExpectCreated(pod, nodeClass, nodePool)\n\t\tenv.EventuallyExpectHealthy(pod)\n\t\tenv.ExpectCreatedNodeCount(\"==\", 1)\n\t\tnode := env.GetNode(pod.Spec.NodeName)\n\t\tinternalIPv6Addrs := lo.Filter(node.Status.Addresses, func(addr corev1.NodeAddress, _ int) bool {\n\t\t\treturn addr.Type == corev1.NodeInternalIP && net.ParseIP(addr.Address).To4() == nil\n\t\t})\n\t\tExpect(internalIPv6Addrs).To(HaveLen(1))\n\t})\n\tIt(\"should provision a static IPv6 prefix with node launch and set IPv6 as primary in the primary network interface\", func() {\n\t\tclusterDNSAddr := env.ExpectIPv6ClusterDNS()\n\t\tnodeClass.Spec.Kubelet = &v1.KubeletConfiguration{ClusterDNS: []string{clusterDNSAddr}}\n\t\tpod := coretest.Pod()\n\t\tenv.ExpectCreated(pod, nodeClass, nodePool)\n\t\tenv.EventuallyExpectHealthy(pod)\n\t\tenv.ExpectCreatedNodeCount(\"==\", 1)\n\t\tnode := env.GetNode(pod.Spec.NodeName)\n\t\tinstance := env.GetInstanceByID(env.ExpectParsedProviderID(node.Spec.ProviderID))\n\t\tExpect(instance.NetworkInterfaces).To(HaveLen(1))\n\t\tExpect(instance.NetworkInterfaces[0].Ipv6Addresses).To(HaveLen(1))\n\t\t_, hasIPv6Primary := lo.Find(instance.NetworkInterfaces[0].Ipv6Addresses, func(ip types.InstanceIpv6Address) bool {\n\t\t\treturn lo.FromPtr(ip.IsPrimaryIpv6)\n\t\t})\n\t\tExpect(hasIPv6Primary).To(BeTrue())\n\t})\n})\n"
  },
  {
    "path": "test/suites/localzone/suite_test.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage localzone_test\n\nimport (\n\t\"testing\"\n\n\t\"github.com/samber/lo\"\n\tcorev1 \"k8s.io/api/core/v1\"\n\t\"k8s.io/apimachinery/pkg/api/resource\"\n\tmetav1 \"k8s.io/apimachinery/pkg/apis/meta/v1\"\n\t\"k8s.io/apimachinery/pkg/labels\"\n\n\tkarpv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n\t\"sigs.k8s.io/karpenter/pkg/test\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\t\"github.com/aws/karpenter-provider-aws/test/pkg/environment/aws\"\n\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n)\n\nvar env *aws.Environment\nvar nodeClass *v1.EC2NodeClass\nvar nodePool *karpv1.NodePool\n\nfunc TestLocalZone(t *testing.T) {\n\tRegisterFailHandler(Fail)\n\tBeforeSuite(func() {\n\t\tenv = aws.NewEnvironment(t)\n\t})\n\tAfterSuite(func() {\n\t\tenv.Stop()\n\t})\n\tRunSpecs(t, \"LocalZone\")\n}\n\nvar _ = BeforeEach(func() {\n\tenv.BeforeEach()\n\tnodeClass = env.DefaultEC2NodeClass()\n\t// The majority of local zones do not support GP3. Feature support in local zones can be tracked here:\n\t// https://aws.amazon.com/about-aws/global-infrastructure/localzones/features/\n\tnodeClass.Spec.BlockDeviceMappings = append(nodeClass.Spec.BlockDeviceMappings, &v1.BlockDeviceMapping{\n\t\tDeviceName: lo.ToPtr(\"/dev/xvda\"),\n\t\tEBS: &v1.BlockDevice{\n\t\t\tVolumeSize: func() *resource.Quantity {\n\t\t\t\tquantity, err := resource.ParseQuantity(\"80Gi\")\n\t\t\t\tExpect(err).To(BeNil())\n\t\t\t\treturn &quantity\n\t\t\t}(),\n\t\t\tVolumeType: lo.ToPtr(\"gp2\"),\n\t\t\tEncrypted:  lo.ToPtr(false),\n\t\t},\n\t})\n\tnodePool = env.DefaultNodePool(nodeClass)\n\tnodePool.Spec.Template.Spec.Requirements = append(nodePool.Spec.Template.Spec.Requirements, karpv1.NodeSelectorRequirementWithMinValues{\n\t\tKey:      corev1.LabelTopologyZone,\n\t\tOperator: corev1.NodeSelectorOpIn,\n\t\tValues: lo.FilterMap(env.GetSubnetInfo(map[string]string{\"karpenter.sh/discovery\": env.ClusterName}), func(info aws.SubnetInfo, _ int) (string, bool) {\n\t\t\treturn info.Zone, info.ZoneType == \"local-zone\"\n\t\t}),\n\t})\n})\nvar _ = AfterEach(func() { env.Cleanup() })\nvar _ = AfterEach(func() { env.AfterEach() })\n\nvar _ = Describe(\"LocalZone\", func() {\n\tIt(\"should successfully scale up nodes in a local zone\", func() {\n\t\tnodeCount := 3\n\t\tdepLabels := map[string]string{\n\t\t\t\"foo\": \"bar\",\n\t\t}\n\t\tdep := test.Deployment(test.DeploymentOptions{\n\t\t\tPodOptions: test.PodOptions{\n\t\t\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\t\t\tLabels: depLabels,\n\t\t\t\t},\n\t\t\t\tTopologySpreadConstraints: []corev1.TopologySpreadConstraint{{\n\t\t\t\t\tTopologyKey:       corev1.LabelHostname,\n\t\t\t\t\tMaxSkew:           1,\n\t\t\t\t\tWhenUnsatisfiable: corev1.DoNotSchedule,\n\t\t\t\t\tLabelSelector: &metav1.LabelSelector{\n\t\t\t\t\t\tMatchLabels: depLabels,\n\t\t\t\t\t},\n\t\t\t\t}},\n\t\t\t},\n\t\t\tReplicas: int32(nodeCount),\n\t\t})\n\t\tenv.ExpectCreated(nodeClass, nodePool, dep)\n\t\tenv.EventuallyExpectHealthyPodCount(labels.SelectorFromSet(depLabels), nodeCount)\n\t\tenv.EventuallyExpectNodeCount(\"==\", nodeCount)\n\t})\n})\n"
  },
  {
    "path": "test/suites/nodeclaim/suite_test.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage nodeclaim_test\n\nimport (\n\t\"testing\"\n\n\tcorev1 \"k8s.io/api/core/v1\"\n\tkarpv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n\tcoretest \"sigs.k8s.io/karpenter/pkg/test\"\n\n\t\"github.com/aws/aws-sdk-go-v2/service/ec2\"\n\t\"github.com/samber/lo\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/utils\"\n\tenvironmentaws \"github.com/aws/karpenter-provider-aws/test/pkg/environment/aws\"\n\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n)\n\nvar env *environmentaws.Environment\nvar nodeClass *v1.EC2NodeClass\nvar nodePool *karpv1.NodePool\n\nfunc TestNodeClaim(t *testing.T) {\n\tRegisterFailHandler(Fail)\n\tBeforeSuite(func() {\n\t\tenv = environmentaws.NewEnvironment(t)\n\t})\n\tAfterSuite(func() {\n\t\tenv.Stop()\n\t})\n\tRunSpecs(t, \"NodeClaim\")\n}\n\nvar _ = BeforeEach(func() {\n\tenv.BeforeEach()\n\tnodeClass = env.DefaultEC2NodeClass()\n\tnodePool = env.DefaultNodePool(nodeClass)\n})\nvar _ = AfterEach(func() { env.Cleanup() })\nvar _ = AfterEach(func() { env.AfterEach() })\n\nvar _ = Describe(\"GarbageCollection\", func() {\n\tIt(\"should succeed to garbage collect an Instance that was deleted without the cluster's knowledge\", func() {\n\t\t// Disable the interruption queue for the garbage collection coretest\n\t\tenv.ExpectSettingsOverridden(corev1.EnvVar{Name: \"INTERRUPTION_QUEUE\", Value: \"\"})\n\t\tpod := coretest.Pod()\n\t\tenv.ExpectCreated(nodeClass, nodePool, pod)\n\t\tenv.EventuallyExpectHealthy(pod)\n\t\tnode := env.ExpectCreatedNodeCount(\"==\", 1)[0]\n\n\t\t_, err := env.EC2API.TerminateInstances(env.Context, &ec2.TerminateInstancesInput{\n\t\t\tInstanceIds: []string{lo.Must(utils.ParseInstanceID(node.Spec.ProviderID))},\n\t\t})\n\t\tExpect(err).ToNot(HaveOccurred())\n\n\t\t// The garbage collection mechanism should eventually delete this NodeClaim and Node\n\t\tenv.EventuallyExpectNotFound(node)\n\t})\n})\n"
  },
  {
    "path": "test/suites/scale/deprovisioning_test.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage scale_test\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"strconv\"\n\t\"sync\"\n\t\"time\"\n\n\t\"github.com/awslabs/operatorpkg/object\"\n\t\"github.com/samber/lo\"\n\tappsv1 \"k8s.io/api/apps/v1\"\n\tcorev1 \"k8s.io/api/core/v1\"\n\t\"k8s.io/apimachinery/pkg/api/resource\"\n\tmetav1 \"k8s.io/apimachinery/pkg/apis/meta/v1\"\n\t\"k8s.io/apimachinery/pkg/labels\"\n\t\"k8s.io/apimachinery/pkg/util/uuid\"\n\n\tkarpv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n\t\"sigs.k8s.io/karpenter/pkg/test\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/controllers/interruption/messages\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/controllers/interruption/messages/scheduledchange\"\n\tawstest \"github.com/aws/karpenter-provider-aws/pkg/test\"\n\t\"github.com/aws/karpenter-provider-aws/pkg/utils\"\n\t\"github.com/aws/karpenter-provider-aws/test/pkg/debug\"\n\t\"github.com/aws/karpenter-provider-aws/test/pkg/environment/aws\"\n\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n)\n\nconst (\n\tdeprovisioningTypeKey = \"testing/deprovisioning-type\"\n\tconsolidationValue    = \"consolidation\"\n\temptinessValue        = \"emptiness\"\n\texpirationValue       = \"expiration\"\n\tnoExpirationValue     = \"noExpiration\"\n\tdriftValue            = \"drift\"\n)\n\nconst (\n\tmultipleDeprovisionersTestGroup = \"multipleDeprovisioners\"\n\tconsolidationTestGroup          = \"consolidation\"\n\temptinessTestGroup              = \"emptiness\"\n\texpirationTestGroup             = \"expiration\"\n\tdriftTestGroup                  = \"drift\"\n\tinterruptionTestGroup           = \"interruption\"\n\n\tdefaultTestName = \"default\"\n)\n\n// disableProvisioningLimits represents limits that can be applied to a nodePool if you want a nodePool\n// that can deprovision nodes but cannot provision nodes\nvar disableProvisioningLimits = karpv1.Limits{\n\tcorev1.ResourceCPU:    resource.MustParse(\"0\"),\n\tcorev1.ResourceMemory: resource.MustParse(\"0Gi\"),\n}\n\nvar _ = Describe(\"Deprovisioning\", Label(debug.NoWatch), Label(debug.NoEvents), func() {\n\tvar nodePool *karpv1.NodePool\n\tvar nodeClass *v1.EC2NodeClass\n\tvar deployment *appsv1.Deployment\n\tvar deploymentOptions test.DeploymentOptions\n\tvar selector labels.Selector\n\tvar dsCount int\n\n\tBeforeEach(func() {\n\t\tenv.ExpectSettingsOverridden(corev1.EnvVar{Name: \"FEATURE_GATES\", Value: \"Drift=True\"})\n\t\tnodeClass = env.DefaultEC2NodeClass()\n\t\tnodePool = env.DefaultNodePool(nodeClass)\n\t\tnodePool.Spec.Limits = nil\n\t\ttest.ReplaceRequirements(nodePool, []karpv1.NodeSelectorRequirementWithMinValues{\n\t\t\t{\n\t\t\t\tKey:      v1.LabelInstanceHypervisor,\n\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\tValues:   []string{\"nitro\"},\n\t\t\t},\n\t\t\t// Ensure that all pods can fit on to the provisioned nodes including all daemonsets\n\t\t\t{\n\t\t\t\tKey:      v1.LabelInstanceSize,\n\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\tValues:   []string{\"large\"},\n\t\t\t},\n\t\t}...)\n\t\tnodePool.Spec.Disruption.Budgets = []karpv1.Budget{{\n\t\t\tNodes: \"70%\",\n\t\t}}\n\t\tdeploymentOptions = test.DeploymentOptions{\n\t\t\tPodOptions: test.PodOptions{\n\t\t\t\tResourceRequirements: corev1.ResourceRequirements{\n\t\t\t\t\tRequests: corev1.ResourceList{\n\t\t\t\t\t\tcorev1.ResourceCPU:    resource.MustParse(\"10m\"),\n\t\t\t\t\t\tcorev1.ResourceMemory: resource.MustParse(\"50Mi\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tTerminationGracePeriodSeconds: lo.ToPtr[int64](0),\n\t\t\t},\n\t\t}\n\t\tdeployment = test.Deployment(deploymentOptions)\n\t\tselector = labels.SelectorFromSet(deployment.Spec.Selector.MatchLabels)\n\t\tdsCount = env.GetDaemonSetCount(nodePool)\n\t})\n\n\tAfterEach(func() {\n\t\tenv.Cleanup()\n\t})\n\n\tContext(\"Multiple Deprovisioners\", func() {\n\t\tIt(\"should run consolidation, emptiness, expiration, and drift simultaneously\", func(_ context.Context) {\n\t\t\treplicasPerNode := 20\n\t\t\tmaxPodDensity := replicasPerNode + dsCount\n\t\t\tnodeCountPerNodePool := 10\n\t\t\treplicas := replicasPerNode * nodeCountPerNodePool\n\n\t\t\tdisruptionMethods := []string{\n\t\t\t\tconsolidationValue,\n\t\t\t\temptinessValue,\n\t\t\t\texpirationValue,\n\t\t\t\tdriftValue,\n\t\t\t}\n\t\t\texpectedNodeCount := nodeCountPerNodePool * len(disruptionMethods)\n\n\t\t\tdeploymentMap := map[string]*appsv1.Deployment{}\n\t\t\t// Generate all the deployments for multi-deprovisioning\n\t\t\tfor _, v := range disruptionMethods {\n\t\t\t\tdeploymentOptions.PodOptions.NodeSelector = map[string]string{\n\t\t\t\t\tdeprovisioningTypeKey: v,\n\t\t\t\t}\n\t\t\t\tdeploymentOptions.PodOptions.Labels = map[string]string{\n\t\t\t\t\tdeprovisioningTypeKey: v,\n\t\t\t\t}\n\t\t\t\tdeploymentOptions.PodOptions.Tolerations = []corev1.Toleration{\n\t\t\t\t\t{\n\t\t\t\t\t\tKey:      deprovisioningTypeKey,\n\t\t\t\t\t\tOperator: corev1.TolerationOpEqual,\n\t\t\t\t\t\tValue:    v,\n\t\t\t\t\t\tEffect:   corev1.TaintEffectNoSchedule,\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t\tdeploymentOptions.Replicas = int32(replicas)\n\t\t\t\td := test.Deployment(deploymentOptions)\n\t\t\t\tdeploymentMap[v] = d\n\t\t\t}\n\n\t\t\tnodePoolMap := map[string]*karpv1.NodePool{}\n\t\t\t// Generate all the nodePools for multi-deprovisioning\n\t\t\tfor _, v := range disruptionMethods {\n\t\t\t\tnp := test.NodePool()\n\t\t\t\tnp.Spec = *nodePool.Spec.DeepCopy()\n\t\t\t\tnp.Spec.Template.Spec.Taints = []corev1.Taint{\n\t\t\t\t\t{\n\t\t\t\t\t\tKey:    deprovisioningTypeKey,\n\t\t\t\t\t\tValue:  v,\n\t\t\t\t\t\tEffect: corev1.TaintEffectNoSchedule,\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t\tnp.Spec.Template.Labels = map[string]string{\n\t\t\t\t\tdeprovisioningTypeKey: v,\n\t\t\t\t}\n\t\t\t\tnodePoolMap[v] = test.NodePool(*np)\n\t\t\t}\n\n\t\t\tBy(\"waiting for the deployment to deploy all of its pods\")\n\t\t\tvar wg sync.WaitGroup\n\t\t\tfor _, dep := range deploymentMap {\n\t\t\t\twg.Go(func() {\n\t\t\t\t\tdefer GinkgoRecover()\n\n\t\t\t\t\tenv.ExpectCreated(dep)\n\t\t\t\t\tenv.EventuallyExpectPendingPodCount(labels.SelectorFromSet(dep.Spec.Selector.MatchLabels), int(lo.FromPtr(dep.Spec.Replicas)))\n\t\t\t\t})\n\t\t\t}\n\t\t\twg.Wait()\n\n\t\t\tnodeClass.Spec.Kubelet = &v1.KubeletConfiguration{\n\t\t\t\tMaxPods: lo.ToPtr[int32](int32(maxPodDensity)),\n\t\t\t}\n\t\t\t// Create a separate nodeClass for drift so that we can change the nodeClass later without it affecting\n\t\t\t// the other nodePools\n\t\t\tdriftNodeClass := awstest.EC2NodeClass()\n\t\t\tdriftNodeClass.Spec = *nodeClass.Spec.DeepCopy()\n\t\t\tnodePoolMap[driftValue].Spec.Template.Spec.NodeClassRef = &karpv1.NodeClassReference{\n\t\t\t\tGroup: object.GVK(driftNodeClass).Group,\n\t\t\t\tKind:  object.GVK(driftNodeClass).Kind,\n\t\t\t\tName:  driftNodeClass.Name,\n\t\t\t}\n\t\t\tenv.MeasureProvisioningDurationFor(func() {\n\t\t\t\tBy(\"kicking off provisioning by applying the nodePool and nodeClass\")\n\t\t\t\tenv.ExpectCreated(driftNodeClass, nodeClass)\n\t\t\t\tfor _, p := range nodePoolMap {\n\t\t\t\t\tenv.ExpectCreated(p)\n\t\t\t\t}\n\n\t\t\t\tenv.EventuallyExpectCreatedNodeClaimCount(\"==\", expectedNodeCount)\n\t\t\t\tenv.EventuallyExpectCreatedNodeCount(\"==\", expectedNodeCount)\n\t\t\t\tenv.EventuallyExpectInitializedNodeCount(\"==\", expectedNodeCount)\n\n\t\t\t\t// Wait for all pods across all deployments we have created to be in a healthy state\n\t\t\t\twg = sync.WaitGroup{}\n\t\t\t\tfor _, dep := range deploymentMap {\n\t\t\t\t\twg.Go(func() {\n\t\t\t\t\t\tdefer GinkgoRecover()\n\n\t\t\t\t\t\tenv.EventuallyExpectHealthyPodCount(labels.SelectorFromSet(dep.Spec.Selector.MatchLabels), int(lo.FromPtr(dep.Spec.Replicas)))\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\twg.Wait()\n\t\t\t}, map[string]string{\n\t\t\t\taws.TestCategoryDimension:           multipleDeprovisionersTestGroup,\n\t\t\t\taws.TestNameDimension:               defaultTestName,\n\t\t\t\taws.ProvisionedNodeCountDimension:   strconv.Itoa(expectedNodeCount),\n\t\t\t\taws.DeprovisionedNodeCountDimension: strconv.Itoa(0),\n\t\t\t\taws.PodDensityDimension:             strconv.Itoa(replicasPerNode),\n\t\t\t})\n\n\t\t\tenv.Monitor.Reset() // Reset the monitor so that we now track the nodes starting at this point in time\n\n\t\t\tBy(\"scaling down replicas across deployments\")\n\t\t\tdeploymentMap[consolidationValue].Spec.Replicas = lo.ToPtr[int32](int32(int(float64(replicas) * 0.2)))\n\t\t\tdeploymentMap[emptinessValue].Spec.Replicas = lo.ToPtr[int32](0)\n\t\t\tfor _, d := range deploymentMap {\n\t\t\t\tenv.ExpectUpdated(d)\n\t\t\t}\n\n\t\t\t// Create a nodePool for expiration so that expiration can do replacement\n\t\t\tnodePoolMap[noExpirationValue] = test.NodePool()\n\t\t\tnodePoolMap[noExpirationValue].Spec = *nodePoolMap[expirationValue].Spec.DeepCopy()\n\n\t\t\t// Enable consolidation, emptiness, and expiration\n\t\t\tnodePoolMap[consolidationValue].Spec.Disruption.ConsolidateAfter = karpv1.MustParseNillableDuration(\"0s\")\n\t\t\tnodePoolMap[emptinessValue].Spec.Disruption.ConsolidationPolicy = karpv1.ConsolidationPolicyWhenEmpty\n\t\t\tnodePoolMap[emptinessValue].Spec.Disruption.ConsolidateAfter.Duration = lo.ToPtr(time.Duration(0))\n\t\t\tnodePoolMap[expirationValue].Spec.Template.Spec.ExpireAfter.Duration = lo.ToPtr(time.Duration(0))\n\t\t\tnodePoolMap[expirationValue].Spec.Limits = disableProvisioningLimits\n\t\t\t// Update the drift NodeClass to start drift on Nodes assigned to this NodeClass\n\t\t\tdriftNodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{Alias: \"bottlerocket@latest\"}}\n\n\t\t\t// Create test assertions to ensure during the multiple deprovisioner scale-downs\n\t\t\ttype testAssertions struct {\n\t\t\t\tdeletedCount             int\n\t\t\t\tdeletedNodeCountSelector labels.Selector\n\t\t\t\tnodeCount                int\n\t\t\t\tnodeCountSelector        labels.Selector\n\t\t\t\tcreatedCount             int\n\t\t\t}\n\t\t\tassertionMap := map[string]testAssertions{\n\t\t\t\tconsolidationValue: {\n\t\t\t\t\tdeletedCount: int(float64(nodeCountPerNodePool) * 0.8),\n\t\t\t\t\tnodeCount:    int(float64(nodeCountPerNodePool) * 0.2),\n\t\t\t\t\tcreatedCount: 0,\n\t\t\t\t},\n\t\t\t\temptinessValue: {\n\t\t\t\t\tdeletedCount: nodeCountPerNodePool,\n\t\t\t\t\tnodeCount:    0,\n\t\t\t\t\tcreatedCount: 0,\n\t\t\t\t},\n\t\t\t\texpirationValue: {\n\t\t\t\t\tdeletedCount: nodeCountPerNodePool,\n\t\t\t\t\tnodeCount:    nodeCountPerNodePool,\n\t\t\t\t\tnodeCountSelector: labels.SelectorFromSet(map[string]string{\n\t\t\t\t\t\tkarpv1.NodePoolLabelKey: nodePoolMap[noExpirationValue].Name,\n\t\t\t\t\t}),\n\t\t\t\t\tcreatedCount: nodeCountPerNodePool,\n\t\t\t\t},\n\t\t\t\tdriftValue: {\n\t\t\t\t\tdeletedCount: nodeCountPerNodePool,\n\t\t\t\t\tnodeCount:    nodeCountPerNodePool,\n\t\t\t\t\tcreatedCount: nodeCountPerNodePool,\n\t\t\t\t},\n\t\t\t}\n\t\t\ttotalDeletedCount := lo.Reduce(lo.Values(assertionMap), func(agg int, assertion testAssertions, _ int) int {\n\t\t\t\treturn agg + assertion.deletedCount\n\t\t\t}, 0)\n\t\t\ttotalCreatedCount := lo.Reduce(lo.Values(assertionMap), func(agg int, assertion testAssertions, _ int) int {\n\t\t\t\treturn agg + assertion.createdCount\n\t\t\t}, 0)\n\t\t\tenv.MeasureDeprovisioningDurationFor(func() {\n\t\t\t\tBy(\"enabling deprovisioning across nodePools\")\n\t\t\t\tfor _, p := range nodePoolMap {\n\t\t\t\t\tp.Spec.Disruption.Budgets = []karpv1.Budget{{\n\t\t\t\t\t\tNodes: \"70%\",\n\t\t\t\t\t}}\n\t\t\t\t\tenv.ExpectCreatedOrUpdated(p)\n\t\t\t\t}\n\t\t\t\tenv.ExpectUpdated(driftNodeClass)\n\n\t\t\t\tBy(\"waiting for the nodes across all deprovisioners to get deleted\")\n\t\t\t\twg = sync.WaitGroup{}\n\t\t\t\tfor d, assertions := range assertionMap {\n\t\t\t\t\twg.Go(func() {\n\t\t\t\t\t\tdefer GinkgoRecover()\n\n\t\t\t\t\t\t// Provide a default selector based on the original nodePool name if one isn't specified\n\t\t\t\t\t\tselector = assertions.deletedNodeCountSelector\n\t\t\t\t\t\tif selector == nil {\n\t\t\t\t\t\t\tselector = labels.SelectorFromSet(map[string]string{karpv1.NodePoolLabelKey: nodePoolMap[d].Name})\n\t\t\t\t\t\t}\n\t\t\t\t\t\tenv.EventuallyExpectDeletedNodeCountWithSelector(\"==\", assertions.deletedCount, selector)\n\n\t\t\t\t\t\t// Provide a default selector based on the original nodePool name if one isn't specified\n\t\t\t\t\t\tselector = assertions.nodeCountSelector\n\t\t\t\t\t\tif selector == nil {\n\t\t\t\t\t\t\tselector = labels.SelectorFromSet(map[string]string{karpv1.NodePoolLabelKey: nodePoolMap[d].Name})\n\t\t\t\t\t\t}\n\t\t\t\t\t\tenv.EventuallyExpectNodeCountWithSelector(\"==\", assertions.nodeCount, selector)\n\t\t\t\t\t\tenv.EventuallyExpectHealthyPodCount(labels.SelectorFromSet(deploymentMap[d].Spec.Selector.MatchLabels), int(lo.FromPtr(deploymentMap[d].Spec.Replicas)))\n\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\twg.Wait()\n\t\t\t}, map[string]string{\n\t\t\t\taws.TestCategoryDimension:           multipleDeprovisionersTestGroup,\n\t\t\t\taws.TestNameDimension:               defaultTestName,\n\t\t\t\taws.ProvisionedNodeCountDimension:   strconv.Itoa(totalCreatedCount),\n\t\t\t\taws.DeprovisionedNodeCountDimension: strconv.Itoa(totalDeletedCount),\n\t\t\t\taws.PodDensityDimension:             strconv.Itoa(replicasPerNode),\n\t\t\t})\n\t\t}, SpecTimeout(time.Hour))\n\t})\n\tContext(\"Consolidation\", func() {\n\t\tIt(\"should delete all empty nodes with consolidation\", func(_ context.Context) {\n\t\t\treplicasPerNode := 20\n\t\t\tmaxPodDensity := replicasPerNode + dsCount\n\t\t\texpectedNodeCount := 200\n\t\t\treplicas := replicasPerNode * expectedNodeCount\n\n\t\t\tdeployment.Spec.Replicas = lo.ToPtr[int32](int32(replicas))\n\t\t\tnodeClass.Spec.Kubelet = &v1.KubeletConfiguration{\n\t\t\t\tMaxPods: lo.ToPtr[int32](int32(maxPodDensity)),\n\t\t\t}\n\n\t\t\tBy(\"waiting for the deployment to deploy all of its pods\")\n\t\t\tenv.ExpectCreated(deployment)\n\t\t\tenv.EventuallyExpectPendingPodCount(selector, replicas)\n\n\t\t\tenv.MeasureProvisioningDurationFor(func() {\n\t\t\t\tBy(\"kicking off provisioning by applying the nodePool and nodeClass\")\n\t\t\t\tenv.ExpectCreated(nodePool, nodeClass)\n\n\t\t\t\tenv.EventuallyExpectCreatedNodeClaimCount(\"==\", expectedNodeCount)\n\t\t\t\tenv.EventuallyExpectCreatedNodeCount(\"==\", expectedNodeCount)\n\t\t\t\tenv.EventuallyExpectInitializedNodeCount(\"==\", expectedNodeCount)\n\t\t\t\tenv.EventuallyExpectHealthyPodCount(selector, replicas)\n\t\t\t}, map[string]string{\n\t\t\t\taws.TestCategoryDimension:           consolidationTestGroup,\n\t\t\t\taws.TestNameDimension:               \"empty/delete\",\n\t\t\t\taws.ProvisionedNodeCountDimension:   strconv.Itoa(expectedNodeCount),\n\t\t\t\taws.DeprovisionedNodeCountDimension: strconv.Itoa(0),\n\t\t\t\taws.PodDensityDimension:             strconv.Itoa(replicasPerNode),\n\t\t\t})\n\n\t\t\tenv.Monitor.Reset() // Reset the monitor so that we now track the nodes starting at this point in time\n\n\t\t\t// Delete deployment to make nodes empty\n\t\t\tenv.ExpectDeleted(deployment)\n\t\t\tenv.EventuallyExpectHealthyPodCount(selector, 0)\n\n\t\t\tenv.MeasureDeprovisioningDurationFor(func() {\n\t\t\t\tBy(\"kicking off deprovisioning by setting the consolidation enabled value on the nodePool\")\n\t\t\t\tnodePool.Spec.Disruption.ConsolidationPolicy = karpv1.ConsolidationPolicyWhenEmptyOrUnderutilized\n\t\t\t\tnodePool.Spec.Disruption.ConsolidateAfter = karpv1.MustParseNillableDuration(\"0s\")\n\t\t\t\tenv.ExpectUpdated(nodePool)\n\n\t\t\t\tenv.EventuallyExpectDeletedNodeCount(\"==\", expectedNodeCount)\n\t\t\t\tenv.EventuallyExpectNodeCount(\"==\", 0)\n\t\t\t}, map[string]string{\n\t\t\t\taws.TestCategoryDimension:           consolidationTestGroup,\n\t\t\t\taws.TestNameDimension:               \"empty/delete\",\n\t\t\t\taws.ProvisionedNodeCountDimension:   strconv.Itoa(0),\n\t\t\t\taws.DeprovisionedNodeCountDimension: strconv.Itoa(expectedNodeCount),\n\t\t\t\taws.PodDensityDimension:             strconv.Itoa(replicasPerNode),\n\t\t\t})\n\t\t}, SpecTimeout(time.Minute*30))\n\t\tIt(\"should consolidate nodes to get a higher utilization (multi-consolidation delete)\", func(_ context.Context) {\n\t\t\treplicasPerNode := 20\n\t\t\tmaxPodDensity := replicasPerNode + dsCount\n\t\t\texpectedNodeCount := 200\n\t\t\treplicas := replicasPerNode * expectedNodeCount\n\n\t\t\tdeployment.Spec.Replicas = lo.ToPtr[int32](int32(replicas))\n\t\t\tnodeClass.Spec.Kubelet = &v1.KubeletConfiguration{\n\t\t\t\tMaxPods: lo.ToPtr[int32](int32(maxPodDensity)),\n\t\t\t}\n\n\t\t\tBy(\"waiting for the deployment to deploy all of its pods\")\n\t\t\tenv.ExpectCreated(deployment)\n\t\t\tenv.EventuallyExpectPendingPodCount(selector, replicas)\n\n\t\t\tenv.MeasureProvisioningDurationFor(func() {\n\t\t\t\tBy(\"kicking off provisioning by applying the nodePool and nodeClass\")\n\t\t\t\tenv.ExpectCreated(nodePool, nodeClass)\n\n\t\t\t\tenv.EventuallyExpectCreatedNodeClaimCount(\"==\", expectedNodeCount)\n\t\t\t\tenv.EventuallyExpectCreatedNodeCount(\"==\", expectedNodeCount)\n\t\t\t\tenv.EventuallyExpectInitializedNodeCount(\"==\", expectedNodeCount)\n\t\t\t\tenv.EventuallyExpectHealthyPodCount(selector, replicas)\n\t\t\t}, map[string]string{\n\t\t\t\taws.TestCategoryDimension:           consolidationTestGroup,\n\t\t\t\taws.TestNameDimension:               \"delete\",\n\t\t\t\taws.ProvisionedNodeCountDimension:   strconv.Itoa(expectedNodeCount),\n\t\t\t\taws.DeprovisionedNodeCountDimension: strconv.Itoa(0),\n\t\t\t\taws.PodDensityDimension:             strconv.Itoa(replicasPerNode),\n\t\t\t})\n\n\t\t\tenv.Monitor.Reset() // Reset the monitor so that we now track the nodes starting at this point in time\n\n\t\t\treplicas = int(float64(replicas) * 0.2)\n\t\t\tdeployment.Spec.Replicas = lo.ToPtr[int32](int32(replicas))\n\t\t\tenv.ExpectUpdated(deployment)\n\t\t\tenv.EventuallyExpectHealthyPodCount(selector, replicas)\n\n\t\t\tenv.MeasureDeprovisioningDurationFor(func() {\n\t\t\t\tBy(\"kicking off deprovisioning by setting the consolidation enabled value on the nodePool\")\n\t\t\t\tnodePool.Spec.Disruption.ConsolidationPolicy = karpv1.ConsolidationPolicyWhenEmptyOrUnderutilized\n\t\t\t\tnodePool.Spec.Disruption.ConsolidateAfter = karpv1.MustParseNillableDuration(\"0s\")\n\t\t\t\tenv.ExpectUpdated(nodePool)\n\n\t\t\t\tenv.EventuallyExpectDeletedNodeCount(\"==\", int(float64(expectedNodeCount)*0.8))\n\t\t\t\tenv.EventuallyExpectNodeCount(\"==\", int(float64(expectedNodeCount)*0.2))\n\t\t\t\tenv.EventuallyExpectHealthyPodCount(selector, replicas)\n\t\t\t}, map[string]string{\n\t\t\t\taws.TestCategoryDimension:           consolidationTestGroup,\n\t\t\t\taws.TestNameDimension:               \"delete\",\n\t\t\t\taws.ProvisionedNodeCountDimension:   strconv.Itoa(0),\n\t\t\t\taws.DeprovisionedNodeCountDimension: strconv.Itoa(int(float64(expectedNodeCount) * 0.8)),\n\t\t\t\taws.PodDensityDimension:             strconv.Itoa(replicasPerNode),\n\t\t\t})\n\t\t}, SpecTimeout(time.Minute*30))\n\t\tIt(\"should consolidate nodes to get a higher utilization (single consolidation replace)\", func(_ context.Context) {\n\t\t\treplicasPerNode := 1\n\t\t\texpectedNodeCount := 20 // we're currently doing around 1 node/2 mins so this test should run deprovisioning in about 45m\n\t\t\treplicas := replicasPerNode * expectedNodeCount\n\n\t\t\t// Add in a instance type size requirement that's larger than the smallest that fits the pods.\n\t\t\ttest.ReplaceRequirements(nodePool, karpv1.NodeSelectorRequirementWithMinValues{\n\t\t\t\tKey:      v1.LabelInstanceSize,\n\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\tValues:   []string{\"2xlarge\"},\n\t\t\t})\n\n\t\t\tdeployment.Spec.Replicas = lo.ToPtr[int32](int32(replicas))\n\t\t\t// Hostname anti-affinity to require one pod on each node\n\t\t\tdeployment.Spec.Template.Spec.Affinity = &corev1.Affinity{\n\t\t\t\tPodAntiAffinity: &corev1.PodAntiAffinity{\n\t\t\t\t\tRequiredDuringSchedulingIgnoredDuringExecution: []corev1.PodAffinityTerm{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tLabelSelector: deployment.Spec.Selector,\n\t\t\t\t\t\t\tTopologyKey:   corev1.LabelHostname,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}\n\n\t\t\tBy(\"waiting for the deployment to deploy all of its pods\")\n\t\t\tenv.ExpectCreated(deployment)\n\t\t\tenv.EventuallyExpectPendingPodCount(selector, replicas)\n\n\t\t\tenv.MeasureProvisioningDurationFor(func() {\n\t\t\t\tBy(\"kicking off provisioning by applying the nodePool and nodeClass\")\n\t\t\t\tenv.ExpectCreated(nodePool, nodeClass)\n\n\t\t\t\tenv.EventuallyExpectCreatedNodeClaimCount(\"==\", expectedNodeCount)\n\t\t\t\tenv.EventuallyExpectCreatedNodeCount(\"==\", expectedNodeCount)\n\t\t\t\tenv.EventuallyExpectInitializedNodeCount(\"==\", expectedNodeCount)\n\t\t\t\tenv.EventuallyExpectHealthyPodCount(selector, replicas)\n\t\t\t}, map[string]string{\n\t\t\t\taws.TestCategoryDimension:           consolidationTestGroup,\n\t\t\t\taws.TestNameDimension:               \"replace\",\n\t\t\t\taws.ProvisionedNodeCountDimension:   strconv.Itoa(expectedNodeCount),\n\t\t\t\taws.DeprovisionedNodeCountDimension: strconv.Itoa(0),\n\t\t\t\taws.PodDensityDimension:             strconv.Itoa(replicasPerNode),\n\t\t\t})\n\n\t\t\tenv.Monitor.Reset() // Reset the monitor so that we now track the nodes starting at this point in time\n\n\t\t\tenv.MeasureDeprovisioningDurationFor(func() {\n\t\t\t\tBy(\"kicking off deprovisioning by setting the consolidation enabled value on the nodePool\")\n\t\t\t\t// The nodePool defaults to a larger instance type than we need so enabling consolidation and making\n\t\t\t\t// the requirements wide-open should cause deletes and increase our utilization on the cluster\n\t\t\t\tnodePool.Spec.Disruption.ConsolidationPolicy = karpv1.ConsolidationPolicyWhenEmptyOrUnderutilized\n\t\t\t\tnodePool.Spec.Disruption.ConsolidateAfter = karpv1.MustParseNillableDuration(\"0s\")\n\t\t\t\tnodePool.Spec.Template.Spec.Requirements = lo.Reject(nodePool.Spec.Template.Spec.Requirements, func(r karpv1.NodeSelectorRequirementWithMinValues, _ int) bool {\n\t\t\t\t\treturn r.Key == v1.LabelInstanceSize\n\t\t\t\t})\n\t\t\t\tenv.ExpectUpdated(nodePool)\n\n\t\t\t\tenv.EventuallyExpectDeletedNodeCount(\"==\", expectedNodeCount) // every node should delete due to replacement\n\t\t\t\tenv.EventuallyExpectNodeCount(\"==\", expectedNodeCount)\n\t\t\t\tenv.EventuallyExpectHealthyPodCount(selector, replicas)\n\t\t\t}, map[string]string{\n\t\t\t\taws.TestCategoryDimension:           consolidationTestGroup,\n\t\t\t\taws.TestNameDimension:               \"replace\",\n\t\t\t\taws.ProvisionedNodeCountDimension:   strconv.Itoa(expectedNodeCount),\n\t\t\t\taws.DeprovisionedNodeCountDimension: strconv.Itoa(expectedNodeCount),\n\t\t\t\taws.PodDensityDimension:             strconv.Itoa(replicasPerNode),\n\t\t\t})\n\t\t}, SpecTimeout(time.Hour))\n\t})\n\tContext(\"Emptiness\", func() {\n\t\tIt(\"should deprovision all nodes when empty\", func(_ context.Context) {\n\t\t\treplicasPerNode := 20\n\t\t\tmaxPodDensity := replicasPerNode + dsCount\n\t\t\texpectedNodeCount := 200\n\t\t\treplicas := replicasPerNode * expectedNodeCount\n\n\t\t\tdeployment.Spec.Replicas = lo.ToPtr[int32](int32(replicas))\n\t\t\tnodeClass.Spec.Kubelet = &v1.KubeletConfiguration{\n\t\t\t\tMaxPods: lo.ToPtr[int32](int32(maxPodDensity)),\n\t\t\t}\n\n\t\t\tBy(\"waiting for the deployment to deploy all of its pods\")\n\t\t\tenv.ExpectCreated(deployment)\n\t\t\tenv.EventuallyExpectPendingPodCount(selector, replicas)\n\n\t\t\tenv.MeasureProvisioningDurationFor(func() {\n\t\t\t\tBy(\"kicking off provisioning by applying the nodePool and nodeClass\")\n\t\t\t\tenv.ExpectCreated(nodePool, nodeClass)\n\n\t\t\t\tenv.EventuallyExpectCreatedNodeClaimCount(\"==\", expectedNodeCount)\n\t\t\t\tenv.EventuallyExpectCreatedNodeCount(\"==\", expectedNodeCount)\n\t\t\t\tenv.EventuallyExpectInitializedNodeCount(\"==\", expectedNodeCount)\n\t\t\t\tenv.EventuallyExpectHealthyPodCount(selector, replicas)\n\t\t\t}, map[string]string{\n\t\t\t\taws.TestCategoryDimension:           emptinessTestGroup,\n\t\t\t\taws.TestNameDimension:               defaultTestName,\n\t\t\t\taws.ProvisionedNodeCountDimension:   strconv.Itoa(expectedNodeCount),\n\t\t\t\taws.DeprovisionedNodeCountDimension: strconv.Itoa(0),\n\t\t\t\taws.PodDensityDimension:             strconv.Itoa(replicasPerNode),\n\t\t\t})\n\n\t\t\tenv.Monitor.Reset() // Reset the monitor so that we now track the nodes starting at this point in time\n\n\t\t\tBy(\"waiting for all deployment pods to be deleted\")\n\t\t\t// Delete deployment to make nodes empty\n\t\t\tenv.ExpectDeleted(deployment)\n\t\t\tenv.EventuallyExpectHealthyPodCount(selector, 0)\n\n\t\t\tenv.MeasureDeprovisioningDurationFor(func() {\n\t\t\t\tBy(\"kicking off deprovisioning emptiness by setting the ttlSecondsAfterEmpty value on the nodePool\")\n\t\t\t\tnodePool.Spec.Disruption.ConsolidationPolicy = karpv1.ConsolidationPolicyWhenEmpty\n\t\t\t\tnodePool.Spec.Disruption.ConsolidateAfter.Duration = lo.ToPtr(time.Duration(0))\n\t\t\t\tenv.ExpectCreatedOrUpdated(nodePool)\n\n\t\t\t\tenv.EventuallyExpectDeletedNodeCount(\"==\", expectedNodeCount)\n\t\t\t\tenv.EventuallyExpectNodeCount(\"==\", 0)\n\t\t\t}, map[string]string{\n\t\t\t\taws.TestCategoryDimension:           emptinessTestGroup,\n\t\t\t\taws.TestNameDimension:               defaultTestName,\n\t\t\t\taws.ProvisionedNodeCountDimension:   strconv.Itoa(0),\n\t\t\t\taws.DeprovisionedNodeCountDimension: strconv.Itoa(expectedNodeCount),\n\t\t\t\taws.PodDensityDimension:             strconv.Itoa(replicasPerNode),\n\t\t\t})\n\t\t}, SpecTimeout(time.Minute*30))\n\t})\n\tContext(\"Expiration\", func() {\n\t\tIt(\"should expire all nodes\", func(_ context.Context) {\n\t\t\treplicasPerNode := 20\n\t\t\tmaxPodDensity := replicasPerNode + dsCount\n\t\t\texpectedNodeCount := 20 // we're currently doing around 1 node/2 mins so this test should run deprovisioning in about 45m\n\t\t\treplicas := replicasPerNode * expectedNodeCount\n\n\t\t\tdeployment.Spec.Replicas = lo.ToPtr[int32](int32(replicas))\n\t\t\tnodeClass.Spec.Kubelet = &v1.KubeletConfiguration{\n\t\t\t\tMaxPods: lo.ToPtr[int32](int32(maxPodDensity)),\n\t\t\t}\n\t\t\t// Enable Expiration\n\t\t\tnodePool.Spec.Template.Spec.ExpireAfter = karpv1.MustParseNillableDuration(\"5m\")\n\n\t\t\tBy(\"waiting for the deployment to deploy all of its pods\")\n\t\t\tenv.ExpectCreated(deployment)\n\t\t\tenv.EventuallyExpectPendingPodCount(selector, replicas)\n\n\t\t\tenv.MeasureProvisioningDurationFor(func() {\n\t\t\t\tBy(\"kicking off provisioning by applying the nodePool and nodeClass\")\n\t\t\t\tenv.ExpectCreated(nodePool, nodeClass)\n\n\t\t\t\tenv.EventuallyExpectCreatedNodeClaimCount(\"==\", expectedNodeCount)\n\t\t\t\tenv.EventuallyExpectCreatedNodeCount(\"==\", expectedNodeCount)\n\t\t\t\tenv.EventuallyExpectInitializedNodeCount(\"==\", expectedNodeCount)\n\t\t\t\tenv.EventuallyExpectHealthyPodCount(selector, replicas)\n\t\t\t}, map[string]string{\n\t\t\t\taws.TestCategoryDimension:           expirationTestGroup,\n\t\t\t\taws.TestNameDimension:               defaultTestName,\n\t\t\t\taws.ProvisionedNodeCountDimension:   strconv.Itoa(expectedNodeCount),\n\t\t\t\taws.DeprovisionedNodeCountDimension: strconv.Itoa(0),\n\t\t\t\taws.PodDensityDimension:             strconv.Itoa(replicasPerNode),\n\t\t\t})\n\n\t\t\tenv.Monitor.Reset() // Reset the monitor so that we now track the nodes starting at this point in time\n\n\t\t\tenv.MeasureDeprovisioningDurationFor(func() {\n\t\t\t\tBy(\"kicking off deprovisioning expiration by setting the ttlSecondsUntilExpired value on the nodePool\")\n\t\t\t\t// Change limits so that replacement nodes will use another nodePool.\n\t\t\t\tnodePool.Spec.Limits = disableProvisioningLimits\n\n\t\t\t\tnoExpireNodePool := test.NodePool(*nodePool.DeepCopy())\n\n\t\t\t\t// Disable Expiration\n\t\t\t\tnoExpireNodePool.Spec.Disruption.ConsolidateAfter = karpv1.MustParseNillableDuration(\"Never\")\n\t\t\t\tnoExpireNodePool.Spec.Template.Spec.ExpireAfter.Duration = nil\n\n\t\t\t\tnoExpireNodePool.ObjectMeta = metav1.ObjectMeta{Name: test.RandomName()}\n\t\t\t\tnoExpireNodePool.Spec.Limits = nil\n\t\t\t\tenv.ExpectCreatedOrUpdated(nodePool, noExpireNodePool)\n\n\t\t\t\tenv.EventuallyExpectDeletedNodeCount(\"==\", expectedNodeCount)\n\t\t\t\tenv.EventuallyExpectNodeCount(\"==\", expectedNodeCount)\n\t\t\t\tenv.EventuallyExpectHealthyPodCount(selector, replicas)\n\t\t\t}, map[string]string{\n\t\t\t\taws.TestCategoryDimension:           expirationTestGroup,\n\t\t\t\taws.TestNameDimension:               defaultTestName,\n\t\t\t\taws.ProvisionedNodeCountDimension:   strconv.Itoa(expectedNodeCount),\n\t\t\t\taws.DeprovisionedNodeCountDimension: strconv.Itoa(expectedNodeCount),\n\t\t\t\taws.PodDensityDimension:             strconv.Itoa(replicasPerNode),\n\t\t\t})\n\t\t}, SpecTimeout(time.Hour))\n\t})\n\tContext(\"Drift\", func() {\n\t\tIt(\"should drift all nodes\", func(_ context.Context) {\n\t\t\t// Before Deprovisioning, we need to Provision the cluster to the state that we need.\n\t\t\treplicasPerNode := 20\n\t\t\tmaxPodDensity := replicasPerNode + dsCount\n\t\t\texpectedNodeCount := 20 // we're currently doing around 1 node/2 mins so this test should run deprovisioning in about 45m\n\t\t\treplicas := replicasPerNode * expectedNodeCount\n\n\t\t\tdeployment.Spec.Replicas = lo.ToPtr[int32](int32(replicas))\n\t\t\tnodeClass.Spec.Kubelet = &v1.KubeletConfiguration{\n\t\t\t\tMaxPods: lo.ToPtr[int32](int32(maxPodDensity)),\n\t\t\t}\n\n\t\t\tBy(\"waiting for the deployment to deploy all of its pods\")\n\t\t\tenv.ExpectCreated(deployment)\n\t\t\tenv.EventuallyExpectPendingPodCount(selector, replicas)\n\n\t\t\tenv.MeasureProvisioningDurationFor(func() {\n\t\t\t\tBy(\"kicking off provisioning by applying the nodePool and nodeClass\")\n\t\t\t\tenv.ExpectCreated(nodePool, nodeClass)\n\n\t\t\t\tenv.EventuallyExpectCreatedNodeClaimCount(\"==\", expectedNodeCount)\n\t\t\t\tenv.EventuallyExpectCreatedNodeCount(\"==\", expectedNodeCount)\n\t\t\t\tenv.EventuallyExpectInitializedNodeCount(\"==\", expectedNodeCount)\n\t\t\t\tenv.EventuallyExpectHealthyPodCount(selector, replicas)\n\t\t\t}, map[string]string{\n\t\t\t\taws.TestCategoryDimension:           driftTestGroup,\n\t\t\t\taws.TestNameDimension:               defaultTestName,\n\t\t\t\taws.ProvisionedNodeCountDimension:   strconv.Itoa(expectedNodeCount),\n\t\t\t\taws.DeprovisionedNodeCountDimension: strconv.Itoa(0),\n\t\t\t\taws.PodDensityDimension:             strconv.Itoa(replicasPerNode),\n\t\t\t})\n\n\t\t\tenv.Monitor.Reset() // Reset the monitor so that we now track the nodes starting at this point in time\n\n\t\t\tenv.MeasureDeprovisioningDurationFor(func() {\n\t\t\t\tBy(\"kicking off deprovisioning drift by changing the nodeClass AMIFamily\")\n\t\t\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{Alias: \"bottlerocket@latest\"}}\n\t\t\t\tenv.ExpectCreatedOrUpdated(nodeClass)\n\n\t\t\t\tenv.EventuallyExpectDeletedNodeCount(\"==\", expectedNodeCount)\n\t\t\t\tenv.EventuallyExpectNodeCount(\"==\", expectedNodeCount)\n\t\t\t\tenv.EventuallyExpectHealthyPodCount(selector, replicas)\n\t\t\t}, map[string]string{\n\t\t\t\taws.TestCategoryDimension:           driftTestGroup,\n\t\t\t\taws.TestNameDimension:               defaultTestName,\n\t\t\t\taws.ProvisionedNodeCountDimension:   strconv.Itoa(expectedNodeCount),\n\t\t\t\taws.DeprovisionedNodeCountDimension: strconv.Itoa(expectedNodeCount),\n\t\t\t\taws.PodDensityDimension:             strconv.Itoa(replicasPerNode),\n\t\t\t})\n\t\t}, SpecTimeout(time.Hour))\n\t})\n\tContext(\"Interruption\", func() {\n\t\tIt(\"should interrupt all nodes due to scheduledChange\", func(_ context.Context) {\n\t\t\treplicasPerNode := 20\n\t\t\tmaxPodDensity := replicasPerNode + dsCount\n\t\t\texpectedNodeCount := 200\n\t\t\treplicas := replicasPerNode * expectedNodeCount\n\n\t\t\tdeployment.Spec.Replicas = lo.ToPtr[int32](int32(replicas))\n\t\t\tnodeClass.Spec.Kubelet = &v1.KubeletConfiguration{\n\t\t\t\tMaxPods: lo.ToPtr[int32](int32(maxPodDensity)),\n\t\t\t}\n\n\t\t\tBy(\"waiting for the deployment to deploy all of its pods\")\n\t\t\tenv.ExpectCreated(deployment)\n\t\t\tenv.EventuallyExpectPendingPodCount(selector, replicas)\n\n\t\t\tvar nodes []*corev1.Node\n\t\t\tenv.MeasureProvisioningDurationFor(func() {\n\t\t\t\tBy(\"kicking off provisioning by applying the nodePool and nodeClass\")\n\t\t\t\tenv.ExpectCreated(nodePool, nodeClass)\n\t\t\t\tenv.EventuallyExpectCreatedNodeClaimCount(\"==\", expectedNodeCount)\n\t\t\t\tenv.EventuallyExpectCreatedNodeCount(\"==\", expectedNodeCount)\n\t\t\t\tnodes = env.EventuallyExpectInitializedNodeCount(\"==\", expectedNodeCount)\n\t\t\t\tenv.EventuallyExpectHealthyPodCount(selector, replicas)\n\t\t\t}, map[string]string{\n\t\t\t\taws.TestCategoryDimension:           interruptionTestGroup,\n\t\t\t\taws.TestNameDimension:               defaultTestName,\n\t\t\t\taws.ProvisionedNodeCountDimension:   strconv.Itoa(expectedNodeCount),\n\t\t\t\taws.DeprovisionedNodeCountDimension: strconv.Itoa(0),\n\t\t\t\taws.PodDensityDimension:             strconv.Itoa(replicasPerNode),\n\t\t\t})\n\n\t\t\tenv.Monitor.Reset() // Reset the monitor so that we now track the nodes starting at this point in time\n\n\t\t\tvar msgs []any\n\t\t\tfor _, node := range nodes {\n\t\t\t\tinstanceID, err := utils.ParseInstanceID(node.Spec.ProviderID)\n\t\t\t\tExpect(err).ToNot(HaveOccurred())\n\t\t\t\tmsgs = append(msgs, scheduledChangeMessage(env.Region, \"000000000000\", instanceID))\n\t\t\t}\n\n\t\t\tenv.MeasureDeprovisioningDurationFor(func() {\n\t\t\t\tBy(\"kicking off deprovisioning by adding scheduledChange messages to the queue\")\n\t\t\t\tenv.ExpectMessagesCreated(msgs...)\n\n\t\t\t\tenv.EventuallyExpectDeletedNodeCount(\"==\", expectedNodeCount)\n\t\t\t\tenv.EventuallyExpectNodeCount(\"==\", expectedNodeCount)\n\t\t\t\tenv.EventuallyExpectHealthyPodCount(selector, replicas)\n\t\t\t}, map[string]string{\n\t\t\t\taws.TestCategoryDimension:           interruptionTestGroup,\n\t\t\t\taws.TestNameDimension:               defaultTestName,\n\t\t\t\taws.ProvisionedNodeCountDimension:   strconv.Itoa(expectedNodeCount),\n\t\t\t\taws.DeprovisionedNodeCountDimension: strconv.Itoa(expectedNodeCount),\n\t\t\t\taws.PodDensityDimension:             strconv.Itoa(replicasPerNode),\n\t\t\t})\n\t\t}, SpecTimeout(time.Minute*30))\n\t})\n})\n\nfunc scheduledChangeMessage(region, accountID, involvedInstanceID string) scheduledchange.Message {\n\treturn scheduledchange.Message{\n\t\tMetadata: messages.Metadata{\n\t\t\tVersion:    \"0\",\n\t\t\tAccount:    accountID,\n\t\t\tDetailType: \"AWS Health Event\",\n\t\t\tID:         string(uuid.NewUUID()),\n\t\t\tRegion:     region,\n\t\t\tResources: []string{\n\t\t\t\tfmt.Sprintf(\"arn:aws:ec2:%s:instance/%s\", region, involvedInstanceID),\n\t\t\t},\n\t\t\tSource: \"aws.health\",\n\t\t\tTime:   time.Now(),\n\t\t},\n\t\tDetail: scheduledchange.Detail{\n\t\t\tService:           \"EC2\",\n\t\t\tEventTypeCategory: \"scheduledChange\",\n\t\t\tAffectedEntities: []scheduledchange.AffectedEntity{\n\t\t\t\t{\n\t\t\t\t\tEntityValue: involvedInstanceID,\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n}\n"
  },
  {
    "path": "test/suites/scale/provisioning_test.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage scale_test\n\nimport (\n\t\"context\"\n\t\"strconv\"\n\t\"time\"\n\n\t\"github.com/samber/lo\"\n\tappsv1 \"k8s.io/api/apps/v1\"\n\tcorev1 \"k8s.io/api/core/v1\"\n\t\"k8s.io/apimachinery/pkg/api/resource\"\n\t\"k8s.io/apimachinery/pkg/labels\"\n\n\tkarpv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n\t\"sigs.k8s.io/karpenter/pkg/test\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\t\"github.com/aws/karpenter-provider-aws/test/pkg/debug\"\n\t\"github.com/aws/karpenter-provider-aws/test/pkg/environment/aws\"\n\n\t. \"github.com/onsi/ginkgo/v2\"\n)\n\nconst testGroup = \"provisioning\"\n\nvar _ = Describe(\"Provisioning\", Label(debug.NoWatch), Label(debug.NoEvents), func() {\n\tvar nodePool *karpv1.NodePool\n\tvar nodeClass *v1.EC2NodeClass\n\tvar deployment *appsv1.Deployment\n\tvar selector labels.Selector\n\tvar dsCount int\n\n\tBeforeEach(func() {\n\t\tnodeClass = env.DefaultEC2NodeClass()\n\t\tnodePool = env.DefaultNodePool(nodeClass)\n\t\tnodePool.Spec.Limits = nil\n\t\tnodePool.Spec.Disruption.Budgets = []karpv1.Budget{{\n\t\t\tNodes: \"70%\",\n\t\t}}\n\t\ttest.ReplaceRequirements(nodePool, karpv1.NodeSelectorRequirementWithMinValues{\n\t\t\tKey:      v1.LabelInstanceHypervisor,\n\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\tValues:   []string{\"nitro\"},\n\t\t})\n\t\tdeployment = test.Deployment(test.DeploymentOptions{\n\t\t\tPodOptions: test.PodOptions{\n\t\t\t\tResourceRequirements: corev1.ResourceRequirements{\n\t\t\t\t\tRequests: corev1.ResourceList{\n\t\t\t\t\t\tcorev1.ResourceCPU:    resource.MustParse(\"10m\"),\n\t\t\t\t\t\tcorev1.ResourceMemory: resource.MustParse(\"50Mi\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tTerminationGracePeriodSeconds: lo.ToPtr[int64](0),\n\t\t\t},\n\t\t})\n\t\tselector = labels.SelectorFromSet(deployment.Spec.Selector.MatchLabels)\n\t\t// Get the DS pod count and use it to calculate the DS pod overhead\n\t\tdsCount = env.GetDaemonSetCount(nodePool)\n\t})\n\tIt(\"should scale successfully on a node-dense scale-up\", Label(debug.NoEvents), func(_ context.Context) {\n\t\t// Disable Prefix Delegation for the node-dense scale-up to not exhaust the IPs\n\t\t// This is required because of the number of Warm ENIs that will be created and the number of IPs\n\t\t// that will be allocated across this large number of nodes, despite the fact that the ENI CIDR space will\n\t\t// be extremely under-utilized\n\t\tenv.ExpectPrefixDelegationDisabled()\n\t\tDeferCleanup(func() {\n\t\t\tenv.ExpectPrefixDelegationEnabled()\n\t\t})\n\n\t\treplicasPerNode := 1\n\t\texpectedNodeCount := 500\n\t\treplicas := replicasPerNode * expectedNodeCount\n\n\t\tdeployment.Spec.Replicas = lo.ToPtr[int32](int32(replicas))\n\t\t// Hostname anti-affinity to require one pod on each node\n\t\tdeployment.Spec.Template.Spec.Affinity = &corev1.Affinity{\n\t\t\tPodAntiAffinity: &corev1.PodAntiAffinity{\n\t\t\t\tRequiredDuringSchedulingIgnoredDuringExecution: []corev1.PodAffinityTerm{\n\t\t\t\t\t{\n\t\t\t\t\t\tLabelSelector: deployment.Spec.Selector,\n\t\t\t\t\t\tTopologyKey:   corev1.LabelHostname,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}\n\n\t\tBy(\"waiting for the deployment to deploy all of its pods\")\n\t\tenv.ExpectCreated(deployment)\n\t\tenv.EventuallyExpectPendingPodCount(selector, replicas)\n\n\t\tenv.MeasureProvisioningDurationFor(func() {\n\t\t\tBy(\"kicking off provisioning by applying the nodePool and nodeClass\")\n\t\t\tenv.ExpectCreated(nodePool, nodeClass)\n\n\t\t\tenv.EventuallyExpectCreatedNodeClaimCount(\"==\", expectedNodeCount)\n\t\t\tenv.EventuallyExpectCreatedNodeCount(\"==\", expectedNodeCount)\n\t\t\tenv.EventuallyExpectInitializedNodeCount(\"==\", expectedNodeCount)\n\t\t\tenv.EventuallyExpectHealthyPodCount(selector, replicas)\n\t\t}, map[string]string{\n\t\t\taws.TestCategoryDimension:           testGroup,\n\t\t\taws.TestNameDimension:               \"node-dense\",\n\t\t\taws.ProvisionedNodeCountDimension:   strconv.Itoa(expectedNodeCount),\n\t\t\taws.DeprovisionedNodeCountDimension: strconv.Itoa(0),\n\t\t\taws.PodDensityDimension:             strconv.Itoa(replicasPerNode),\n\t\t})\n\t}, SpecTimeout(time.Minute*30))\n\tIt(\"should scale successfully on a node-dense scale-up with minValues in the NodePool requirement\", Label(debug.NoEvents), func(_ context.Context) {\n\t\t// Disable Prefix Delegation for the node-dense scale-up to not exhaust the IPs\n\t\t// This is required because of the number of Warm ENIs that will be created and the number of IPs\n\t\t// that will be allocated across this large number of nodes, despite the fact that the ENI CIDR space will\n\t\t// be extremely under-utilized\n\t\tenv.ExpectPrefixDelegationDisabled()\n\t\tDeferCleanup(func() {\n\t\t\tenv.ExpectPrefixDelegationEnabled()\n\t\t})\n\n\t\treplicasPerNode := 1\n\t\texpectedNodeCount := 500\n\t\treplicas := replicasPerNode * expectedNodeCount\n\n\t\tdeployment.Spec.Replicas = lo.ToPtr[int32](int32(replicas))\n\t\t// Hostname anti-affinity to require one pod on each node\n\t\tdeployment.Spec.Template.Spec.Affinity = &corev1.Affinity{\n\t\t\tPodAntiAffinity: &corev1.PodAntiAffinity{\n\t\t\t\tRequiredDuringSchedulingIgnoredDuringExecution: []corev1.PodAffinityTerm{\n\t\t\t\t\t{\n\t\t\t\t\t\tLabelSelector: deployment.Spec.Selector,\n\t\t\t\t\t\tTopologyKey:   corev1.LabelHostname,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}\n\n\t\ttest.ReplaceRequirements(nodePool, karpv1.NodeSelectorRequirementWithMinValues{\n\t\t\t// minValues is restricted to 30 to have enough instance types to be sent to launch API and not make this test flaky.\n\t\t\tKey:       corev1.LabelInstanceTypeStable,\n\t\t\tOperator:  corev1.NodeSelectorOpExists,\n\t\t\tMinValues: lo.ToPtr(30),\n\t\t})\n\n\t\tBy(\"waiting for the deployment to deploy all of its pods\")\n\t\tenv.ExpectCreated(deployment)\n\t\tenv.EventuallyExpectPendingPodCount(selector, replicas)\n\n\t\tenv.MeasureProvisioningDurationFor(func() {\n\t\t\tBy(\"kicking off provisioning by applying the nodePool and nodeClass\")\n\t\t\tenv.ExpectCreated(nodePool, nodeClass)\n\n\t\t\tenv.EventuallyExpectCreatedNodeClaimCount(\"==\", expectedNodeCount)\n\t\t\tenv.EventuallyExpectCreatedNodeCount(\"==\", expectedNodeCount)\n\t\t\tenv.EventuallyExpectInitializedNodeCount(\"==\", expectedNodeCount)\n\t\t\tenv.EventuallyExpectHealthyPodCount(selector, replicas)\n\t\t}, map[string]string{\n\t\t\taws.TestCategoryDimension:           testGroup,\n\t\t\taws.TestNameDimension:               \"node-dense-min-val\",\n\t\t\taws.ProvisionedNodeCountDimension:   strconv.Itoa(expectedNodeCount),\n\t\t\taws.DeprovisionedNodeCountDimension: strconv.Itoa(0),\n\t\t\taws.PodDensityDimension:             strconv.Itoa(replicasPerNode),\n\t\t})\n\t}, SpecTimeout(time.Minute*30))\n\tIt(\"should scale successfully on a pod-dense scale-up\", func(_ context.Context) {\n\t\treplicasPerNode := 110\n\t\tmaxPodDensity := replicasPerNode + dsCount\n\t\texpectedNodeCount := 60\n\t\treplicas := replicasPerNode * expectedNodeCount\n\t\tdeployment.Spec.Replicas = lo.ToPtr[int32](int32(replicas))\n\t\tnodeClass.Spec.Kubelet = &v1.KubeletConfiguration{\n\t\t\tMaxPods: lo.ToPtr[int32](int32(maxPodDensity)),\n\t\t}\n\t\ttest.ReplaceRequirements(nodePool, karpv1.NodeSelectorRequirementWithMinValues{\n\t\t\t// With Prefix Delegation enabled, .large instances can have 434 pods.\n\t\t\tKey:      v1.LabelInstanceSize,\n\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\tValues:   []string{\"large\"},\n\t\t},\n\t\t)\n\n\t\tenv.MeasureProvisioningDurationFor(func() {\n\t\t\tBy(\"waiting for the deployment to deploy all of its pods\")\n\t\t\tenv.ExpectCreated(deployment)\n\t\t\tenv.EventuallyExpectPendingPodCount(selector, replicas)\n\n\t\t\tBy(\"kicking off provisioning by applying the nodePool and nodeClass\")\n\t\t\tenv.ExpectCreated(nodePool, nodeClass)\n\n\t\t\tenv.EventuallyExpectHealthyPodCount(selector, replicas)\n\t\t}, map[string]string{\n\t\t\taws.TestCategoryDimension:           testGroup,\n\t\t\taws.TestNameDimension:               \"pod-dense\",\n\t\t\taws.ProvisionedNodeCountDimension:   strconv.Itoa(expectedNodeCount),\n\t\t\taws.DeprovisionedNodeCountDimension: strconv.Itoa(0),\n\t\t\taws.PodDensityDimension:             strconv.Itoa(replicasPerNode),\n\t\t})\n\t}, SpecTimeout(time.Minute*30))\n\tIt(\"should scale successfully on a pod-dense scale-up with minValues in the NodePool requirement\", func(_ context.Context) {\n\t\treplicasPerNode := 110\n\t\tmaxPodDensity := replicasPerNode + dsCount\n\t\texpectedNodeCount := 60\n\t\treplicas := replicasPerNode * expectedNodeCount\n\t\tdeployment.Spec.Replicas = lo.ToPtr[int32](int32(replicas))\n\t\tnodeClass.Spec.Kubelet = &v1.KubeletConfiguration{\n\t\t\tMaxPods: lo.ToPtr[int32](int32(maxPodDensity)),\n\t\t}\n\t\ttest.ReplaceRequirements(nodePool,\n\t\t\tkarpv1.NodeSelectorRequirementWithMinValues{\n\t\t\t\t// With Prefix Delegation enabled, .large instances can have 434 pods.\n\t\t\t\tKey:      v1.LabelInstanceSize,\n\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\tValues:   []string{\"large\"},\n\t\t\t},\n\t\t\tkarpv1.NodeSelectorRequirementWithMinValues{\n\t\t\t\t// minValues is restricted to 30 to have enough instance types to be sent to launch API and not make this test flaky.\n\t\t\t\tKey:       corev1.LabelInstanceTypeStable,\n\t\t\t\tOperator:  corev1.NodeSelectorOpExists,\n\t\t\t\tMinValues: lo.ToPtr(30),\n\t\t\t},\n\t\t)\n\n\t\tenv.MeasureProvisioningDurationFor(func() {\n\t\t\tBy(\"waiting for the deployment to deploy all of its pods\")\n\t\t\tenv.ExpectCreated(deployment)\n\t\t\tenv.EventuallyExpectPendingPodCount(selector, replicas)\n\n\t\t\tBy(\"kicking off provisioning by applying the nodePool and nodeClass\")\n\t\t\tenv.ExpectCreated(nodePool, nodeClass)\n\n\t\t\tenv.EventuallyExpectHealthyPodCount(selector, replicas)\n\t\t}, map[string]string{\n\t\t\taws.TestCategoryDimension:           testGroup,\n\t\t\taws.TestNameDimension:               \"pod-dense-min-val\",\n\t\t\taws.ProvisionedNodeCountDimension:   strconv.Itoa(expectedNodeCount),\n\t\t\taws.DeprovisionedNodeCountDimension: strconv.Itoa(0),\n\t\t\taws.PodDensityDimension:             strconv.Itoa(replicasPerNode),\n\t\t})\n\t}, SpecTimeout(time.Minute*30))\n})\n"
  },
  {
    "path": "test/suites/scale/suite_test.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage scale_test\n\nimport (\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/aws/karpenter-provider-aws/test/pkg/environment/aws\"\n\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n)\n\nvar env *aws.Environment\n\nfunc TestScale(t *testing.T) {\n\tRegisterFailHandler(Fail)\n\tBeforeSuite(func() {\n\t\tenv = aws.NewEnvironment(t)\n\t\tenv.ExpectPrefixDelegationEnabled()\n\t\tSetDefaultEventuallyTimeout(time.Hour)\n\t})\n\tAfterSuite(func() {\n\t\tenv.ExpectPrefixDelegationDisabled()\n\t\tenv.Stop()\n\t})\n\tRunSpecs(t, \"Scale\")\n}\n\nvar _ = BeforeEach(func() {\n\tenv.BeforeEach()\n})\nvar _ = AfterEach(func() { env.Cleanup() })\nvar _ = AfterEach(func() {\n\tenv.AfterEach()\n})\n"
  },
  {
    "path": "test/suites/scheduling/suite_test.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage scheduling_test\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"strconv\"\n\t\"testing\"\n\t\"time\"\n\n\tec2types \"github.com/aws/aws-sdk-go-v2/service/ec2/types\"\n\n\t\"github.com/awslabs/operatorpkg/object\"\n\t\"github.com/samber/lo\"\n\tcorev1 \"k8s.io/api/core/v1\"\n\t\"k8s.io/apimachinery/pkg/api/resource\"\n\tmetav1 \"k8s.io/apimachinery/pkg/apis/meta/v1\"\n\t\"k8s.io/apimachinery/pkg/labels\"\n\t\"k8s.io/apimachinery/pkg/util/sets\"\n\n\tkarpv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n\t\"sigs.k8s.io/karpenter/pkg/apis/v1alpha1\"\n\t\"sigs.k8s.io/karpenter/pkg/operator/options\"\n\t\"sigs.k8s.io/karpenter/pkg/test\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\t\"github.com/aws/karpenter-provider-aws/test/pkg/debug\"\n\tenvironmentaws \"github.com/aws/karpenter-provider-aws/test/pkg/environment/aws\"\n\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n)\n\nvar env *environmentaws.Environment\nvar nodeClass *v1.EC2NodeClass\nvar nodePool *karpv1.NodePool\n\nfunc TestScheduling(t *testing.T) {\n\tRegisterFailHandler(Fail)\n\tBeforeSuite(func() {\n\t\tenv = environmentaws.NewEnvironment(t)\n\t})\n\tAfterSuite(func() {\n\t\tenv.Stop()\n\t})\n\tRunSpecs(t, \"Scheduling\")\n}\n\nvar _ = BeforeEach(func() {\n\tenv.BeforeEach()\n\tnodeClass = env.DefaultEC2NodeClass()\n\tnodePool = env.DefaultNodePool(nodeClass)\n})\nvar _ = AfterEach(func() { env.Cleanup() })\nvar _ = AfterEach(func() { env.AfterEach() })\nvar _ = DescribeTableSubtree(\"Scheduling\", Ordered, ContinueOnFailure, func(minValuesPolicy options.MinValuesPolicy) {\n\tvar selectors sets.Set[string]\n\n\tBeforeEach(func() {\n\t\t// Make the NodePool requirements fully flexible, so we can match well-known label keys\n\t\tnodePool = test.ReplaceRequirements(nodePool,\n\t\t\tkarpv1.NodeSelectorRequirementWithMinValues{\n\t\t\t\tKey:      v1.LabelInstanceCategory,\n\t\t\t\tOperator: corev1.NodeSelectorOpExists,\n\t\t\t},\n\t\t\tkarpv1.NodeSelectorRequirementWithMinValues{\n\t\t\t\tKey:      v1.LabelInstanceGeneration,\n\t\t\t\tOperator: corev1.NodeSelectorOpExists,\n\t\t\t},\n\t\t)\n\t\tenv.ExpectSettingsOverridden(corev1.EnvVar{Name: \"MIN_VALUES_POLICY\", Value: string(minValuesPolicy)})\n\t})\n\tBeforeAll(func() {\n\t\tselectors = sets.New[string]()\n\t})\n\tAfterAll(func() {\n\t\t// Ensure that we're exercising all well known labels\n\t\tExpect(lo.Keys(selectors)).To(ContainElements(append(karpv1.WellKnownLabels.UnsortedList(), lo.Keys(karpv1.NormalizedLabels)...)))\n\t})\n\n\tIt(\"should apply annotations to the node\", func() {\n\t\tnodePool.Spec.Template.Annotations = map[string]string{\n\t\t\t\"foo\":                            \"bar\",\n\t\t\tkarpv1.DoNotDisruptAnnotationKey: \"true\",\n\t\t}\n\t\tpod := test.Pod()\n\t\tenv.ExpectCreated(nodeClass, nodePool, pod)\n\t\tenv.EventuallyExpectHealthy(pod)\n\t\tenv.ExpectCreatedNodeCount(\"==\", 1)\n\t\tExpect(env.GetNode(pod.Spec.NodeName).Annotations).To(And(HaveKeyWithValue(\"foo\", \"bar\"), HaveKeyWithValue(karpv1.DoNotDisruptAnnotationKey, \"true\")))\n\t})\n\n\tContext(\"Labels\", func() {\n\t\tIt(\"should support well-known labels for instance type selection\", func() {\n\t\t\tnodeSelector := map[string]string{\n\t\t\t\t// Well Known\n\t\t\t\tkarpv1.NodePoolLabelKey:        nodePool.Name,\n\t\t\t\tcorev1.LabelInstanceTypeStable: \"c5.large\",\n\t\t\t\t// Well Known to AWS\n\t\t\t\tv1.LabelInstanceHypervisor:                \"nitro\",\n\t\t\t\tv1.LabelInstanceCategory:                  \"c\",\n\t\t\t\tv1.LabelInstanceGeneration:                \"5\",\n\t\t\t\tv1.LabelInstanceFamily:                    \"c5\",\n\t\t\t\tv1.LabelInstanceSize:                      \"large\",\n\t\t\t\tv1.LabelInstanceCPU:                       \"2\",\n\t\t\t\tv1.LabelInstanceCPUManufacturer:           \"intel\",\n\t\t\t\tv1.LabelInstanceCPUSustainedClockSpeedMhz: \"3400\",\n\t\t\t\tv1.LabelInstanceMemory:                    \"4096\",\n\t\t\t\tv1.LabelInstanceEBSBandwidth:              \"4750\",\n\t\t\t\tv1.LabelInstanceNetworkBandwidth:          \"750\",\n\t\t\t}\n\t\t\tselectors.Insert(lo.Keys(nodeSelector)...) // Add node selector keys to selectors used in testing to ensure we test all labels\n\t\t\trequirements := lo.MapToSlice(nodeSelector, func(key string, value string) corev1.NodeSelectorRequirement {\n\t\t\t\treturn corev1.NodeSelectorRequirement{Key: key, Operator: corev1.NodeSelectorOpIn, Values: []string{value}}\n\t\t\t})\n\t\t\tdeployment := test.Deployment(test.DeploymentOptions{Replicas: 1, PodOptions: test.PodOptions{\n\t\t\t\tNodeSelector:     nodeSelector,\n\t\t\t\tNodePreferences:  requirements,\n\t\t\t\tNodeRequirements: requirements,\n\t\t\t}})\n\t\t\tenv.ExpectCreated(nodeClass, nodePool, deployment)\n\t\t\tenv.EventuallyExpectHealthyPodCount(labels.SelectorFromSet(deployment.Spec.Selector.MatchLabels), int(*deployment.Spec.Replicas))\n\t\t\tenv.ExpectCreatedNodeCount(\"==\", 1)\n\t\t})\n\t\tIt(\"should support well-known labels for zone id selection\", func() {\n\t\t\tselectors.Insert(v1.LabelTopologyZoneID) // Add node selector keys to selectors used in testing to ensure we test all labels\n\t\t\tdeployment := test.Deployment(test.DeploymentOptions{Replicas: 1, PodOptions: test.PodOptions{\n\t\t\t\tNodeRequirements: []corev1.NodeSelectorRequirement{\n\t\t\t\t\t{\n\t\t\t\t\t\tKey:      v1.LabelTopologyZoneID,\n\t\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\t\tValues:   []string{env.GetSubnetInfo(map[string]string{\"karpenter.sh/discovery\": env.ClusterName})[0].ZoneID},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}})\n\t\t\tenv.ExpectCreated(nodeClass, nodePool, deployment)\n\t\t\tenv.EventuallyExpectHealthyPodCount(labels.SelectorFromSet(deployment.Spec.Selector.MatchLabels), int(*deployment.Spec.Replicas))\n\t\t\tenv.ExpectCreatedNodeCount(\"==\", 1)\n\t\t})\n\t\tIt(\"should support well-known labels for local NVME storage\", func() {\n\t\t\tselectors.Insert(v1.LabelInstanceLocalNVME) // Add node selector keys to selectors used in testing to ensure we test all labels\n\t\t\tdeployment := test.Deployment(test.DeploymentOptions{Replicas: 1, PodOptions: test.PodOptions{\n\t\t\t\tNodePreferences: []corev1.NodeSelectorRequirement{\n\t\t\t\t\t{\n\t\t\t\t\t\tKey:      v1.LabelInstanceLocalNVME,\n\t\t\t\t\t\tOperator: corev1.NodeSelectorOpGt,\n\t\t\t\t\t\tValues:   []string{\"0\"},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tNodeRequirements: []corev1.NodeSelectorRequirement{\n\t\t\t\t\t{\n\t\t\t\t\t\tKey:      v1.LabelInstanceLocalNVME,\n\t\t\t\t\t\tOperator: corev1.NodeSelectorOpGt,\n\t\t\t\t\t\tValues:   []string{\"0\"},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}})\n\t\t\tenv.ExpectCreated(nodeClass, nodePool, deployment)\n\t\t\tenv.EventuallyExpectHealthyPodCount(labels.SelectorFromSet(deployment.Spec.Selector.MatchLabels), int(*deployment.Spec.Replicas))\n\t\t\tenv.ExpectCreatedNodeCount(\"==\", 1)\n\t\t})\n\t\tIt(\"should support well-known labels for encryption in transit\", func() {\n\t\t\tselectors.Insert(v1.LabelInstanceEncryptionInTransitSupported) // Add node selector keys to selectors used in testing to ensure we test all labels\n\t\t\tdeployment := test.Deployment(test.DeploymentOptions{Replicas: 1, PodOptions: test.PodOptions{\n\t\t\t\tNodePreferences: []corev1.NodeSelectorRequirement{\n\t\t\t\t\t{\n\t\t\t\t\t\tKey:      v1.LabelInstanceEncryptionInTransitSupported,\n\t\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\t\tValues:   []string{\"true\"},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tNodeRequirements: []corev1.NodeSelectorRequirement{\n\t\t\t\t\t{\n\t\t\t\t\t\tKey:      v1.LabelInstanceEncryptionInTransitSupported,\n\t\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\t\tValues:   []string{\"true\"},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}})\n\t\t\tenv.ExpectCreated(nodeClass, nodePool, deployment)\n\t\t\tenv.EventuallyExpectHealthyPodCount(labels.SelectorFromSet(deployment.Spec.Selector.MatchLabels), int(*deployment.Spec.Replicas))\n\t\t\tenv.ExpectCreatedNodeCount(\"==\", 1)\n\t\t})\n\t\tIt(\"should support well-known deprecated labels\", func() {\n\t\t\tnodeSelector := map[string]string{\n\t\t\t\t// Deprecated Labels\n\t\t\t\tcorev1.LabelFailureDomainBetaRegion: env.Region,\n\t\t\t\tcorev1.LabelFailureDomainBetaZone:   fmt.Sprintf(\"%sa\", env.Region),\n\t\t\t\t\"topology.ebs.csi.aws.com/zone\":     fmt.Sprintf(\"%sa\", env.Region),\n\n\t\t\t\t\"beta.kubernetes.io/arch\": \"amd64\",\n\t\t\t\t\"beta.kubernetes.io/os\":   \"linux\",\n\t\t\t\tcorev1.LabelInstanceType:  \"c5.large\",\n\t\t\t}\n\t\t\tselectors.Insert(lo.Keys(nodeSelector)...) // Add node selector keys to selectors used in testing to ensure we test all labels\n\t\t\trequirements := lo.MapToSlice(nodeSelector, func(key string, value string) corev1.NodeSelectorRequirement {\n\t\t\t\treturn corev1.NodeSelectorRequirement{Key: key, Operator: corev1.NodeSelectorOpIn, Values: []string{value}}\n\t\t\t})\n\t\t\tdeployment := test.Deployment(test.DeploymentOptions{Replicas: 1, PodOptions: test.PodOptions{\n\t\t\t\tNodeSelector:     nodeSelector,\n\t\t\t\tNodePreferences:  requirements,\n\t\t\t\tNodeRequirements: requirements,\n\t\t\t}})\n\t\t\tenv.ExpectCreated(nodeClass, nodePool, deployment)\n\t\t\tenv.EventuallyExpectHealthyPodCount(labels.SelectorFromSet(deployment.Spec.Selector.MatchLabels), int(*deployment.Spec.Replicas))\n\t\t\tenv.ExpectCreatedNodeCount(\"==\", 1)\n\t\t})\n\t\tIt(\"should support well-known labels for topology and architecture\", func() {\n\t\t\tnodeSelector := map[string]string{\n\t\t\t\t// Well Known\n\t\t\t\tkarpv1.NodePoolLabelKey:     nodePool.Name,\n\t\t\t\tcorev1.LabelTopologyRegion:  env.Region,\n\t\t\t\tcorev1.LabelTopologyZone:    fmt.Sprintf(\"%sa\", env.Region),\n\t\t\t\tcorev1.LabelOSStable:        \"linux\",\n\t\t\t\tcorev1.LabelArchStable:      \"amd64\",\n\t\t\t\tkarpv1.CapacityTypeLabelKey: karpv1.CapacityTypeOnDemand,\n\t\t\t}\n\t\t\tselectors.Insert(lo.Keys(nodeSelector)...) // Add node selector keys to selectors used in testing to ensure we test all labels\n\t\t\trequirements := lo.MapToSlice(nodeSelector, func(key string, value string) corev1.NodeSelectorRequirement {\n\t\t\t\treturn corev1.NodeSelectorRequirement{Key: key, Operator: corev1.NodeSelectorOpIn, Values: []string{value}}\n\t\t\t})\n\t\t\tdeployment := test.Deployment(test.DeploymentOptions{Replicas: 1, PodOptions: test.PodOptions{\n\t\t\t\tNodeSelector:     nodeSelector,\n\t\t\t\tNodePreferences:  requirements,\n\t\t\t\tNodeRequirements: requirements,\n\t\t\t}})\n\t\t\tenv.ExpectCreated(nodeClass, nodePool, deployment)\n\t\t\tenv.EventuallyExpectHealthyPodCount(labels.SelectorFromSet(deployment.Spec.Selector.MatchLabels), int(*deployment.Spec.Replicas))\n\t\t\tenv.ExpectCreatedNodeCount(\"==\", 1)\n\t\t})\n\t\tIt(\"should support well-known labels for a gpu (nvidia)\", func() {\n\t\t\tnodeSelector := map[string]string{\n\t\t\t\tv1.LabelInstanceGPUName:         \"t4\",\n\t\t\t\tv1.LabelInstanceGPUMemory:       \"16384\",\n\t\t\t\tv1.LabelInstanceGPUManufacturer: \"nvidia\",\n\t\t\t\tv1.LabelInstanceGPUCount:        \"1\",\n\t\t\t}\n\t\t\tselectors.Insert(lo.Keys(nodeSelector)...) // Add node selector keys to selectors used in testing to ensure we test all labels\n\t\t\trequirements := lo.MapToSlice(nodeSelector, func(key string, value string) corev1.NodeSelectorRequirement {\n\t\t\t\treturn corev1.NodeSelectorRequirement{Key: key, Operator: corev1.NodeSelectorOpIn, Values: []string{value}}\n\t\t\t})\n\t\t\tdeployment := test.Deployment(test.DeploymentOptions{Replicas: 1, PodOptions: test.PodOptions{\n\t\t\t\tNodeSelector:     nodeSelector,\n\t\t\t\tNodePreferences:  requirements,\n\t\t\t\tNodeRequirements: requirements,\n\t\t\t}})\n\t\t\tenv.ExpectCreated(nodeClass, nodePool, deployment)\n\t\t\tenv.EventuallyExpectHealthyPodCount(labels.SelectorFromSet(deployment.Spec.Selector.MatchLabels), int(*deployment.Spec.Replicas))\n\t\t\tenv.ExpectCreatedNodeCount(\"==\", 1)\n\t\t})\n\t\tIt(\"should support well-known labels for an accelerator (inferentia2)\", func() {\n\t\t\tnodeSelector := map[string]string{\n\t\t\t\tv1.LabelInstanceAcceleratorName:         \"inferentia\",\n\t\t\t\tv1.LabelInstanceAcceleratorManufacturer: \"aws\",\n\t\t\t\tv1.LabelInstanceAcceleratorCount:        \"1\",\n\t\t\t}\n\t\t\tselectors.Insert(lo.Keys(nodeSelector)...) // Add node selector keys to selectors used in testing to ensure we test all labels\n\t\t\trequirements := lo.MapToSlice(nodeSelector, func(key string, value string) corev1.NodeSelectorRequirement {\n\t\t\t\treturn corev1.NodeSelectorRequirement{Key: key, Operator: corev1.NodeSelectorOpIn, Values: []string{value}}\n\t\t\t})\n\t\t\tdeployment := test.Deployment(test.DeploymentOptions{Replicas: 1, PodOptions: test.PodOptions{\n\t\t\t\tNodeSelector:     nodeSelector,\n\t\t\t\tNodePreferences:  requirements,\n\t\t\t\tNodeRequirements: requirements,\n\t\t\t}})\n\t\t\tenv.ExpectCreated(nodeClass, nodePool, deployment)\n\t\t\tenv.EventuallyExpectHealthyPodCount(labels.SelectorFromSet(deployment.Spec.Selector.MatchLabels), int(*deployment.Spec.Replicas))\n\t\t\tenv.ExpectCreatedNodeCount(\"==\", 1)\n\t\t})\n\t\t// Windows tests are can flake due to the instance types that are used in testing.\n\t\t// The VPC Resource controller will need to support the instance types that are used.\n\t\t// If the instance type is not supported by the controller resource `vpc.amazonaws.com/PrivateIPv4Address` will not register.\n\t\t// Issue: https://github.com/aws/karpenter-provider-aws/issues/4472\n\t\t// See: https://github.com/aws/amazon-vpc-resource-controller-k8s/blob/master/pkg/aws/vpc/limits.go\n\t\tIt(\"should support well-known labels for windows-build version\", func() {\n\t\t\tenv.ExpectWindowsIPAMEnabled()\n\t\t\tDeferCleanup(func() {\n\t\t\t\tenv.ExpectWindowsIPAMDisabled()\n\t\t\t})\n\n\t\t\tnodeSelector := map[string]string{\n\t\t\t\t// Well Known\n\t\t\t\tcorev1.LabelWindowsBuild: v1.Windows2022Build,\n\t\t\t\tcorev1.LabelOSStable:     string(corev1.Windows), // Specify the OS to enable vpc-resource-controller to inject the PrivateIPv4Address resource\n\t\t\t}\n\t\t\tselectors.Insert(lo.Keys(nodeSelector)...) // Add node selector keys to selectors used in testing to ensure we test all labels\n\t\t\trequirements := lo.MapToSlice(nodeSelector, func(key string, value string) corev1.NodeSelectorRequirement {\n\t\t\t\treturn corev1.NodeSelectorRequirement{Key: key, Operator: corev1.NodeSelectorOpIn, Values: []string{value}}\n\t\t\t})\n\t\t\tdeployment := test.Deployment(test.DeploymentOptions{Replicas: 1, PodOptions: test.PodOptions{\n\t\t\t\tNodeSelector:     nodeSelector,\n\t\t\t\tNodePreferences:  requirements,\n\t\t\t\tNodeRequirements: requirements,\n\t\t\t\tImage:            environmentaws.WindowsDefaultImage,\n\t\t\t}})\n\t\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{{Alias: \"windows2022@latest\"}}\n\t\t\ttest.ReplaceRequirements(nodePool,\n\t\t\t\tkarpv1.NodeSelectorRequirementWithMinValues{\n\t\t\t\t\tKey:      corev1.LabelOSStable,\n\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\tValues:   []string{string(corev1.Windows)},\n\t\t\t\t},\n\t\t\t)\n\t\t\tenv.ExpectCreated(nodeClass, nodePool, deployment)\n\t\t\tenv.EventuallyExpectHealthyPodCountWithTimeout(time.Minute*15, labels.SelectorFromSet(deployment.Spec.Selector.MatchLabels), int(*deployment.Spec.Replicas))\n\t\t\tenv.ExpectCreatedNodeCount(\"==\", 1)\n\t\t})\n\t\tDescribeTable(\"should support restricted label domain exceptions\", func(domain string) {\n\t\t\t// Assign labels to the nodepool so that it has known values\n\t\t\ttest.ReplaceRequirements(nodePool,\n\t\t\t\tkarpv1.NodeSelectorRequirementWithMinValues{Key: domain + \"/team\", Operator: corev1.NodeSelectorOpExists},\n\t\t\t\tkarpv1.NodeSelectorRequirementWithMinValues{Key: domain + \"/custom-label\", Operator: corev1.NodeSelectorOpExists},\n\t\t\t\tkarpv1.NodeSelectorRequirementWithMinValues{Key: \"subdomain.\" + domain + \"/custom-label\", Operator: corev1.NodeSelectorOpExists},\n\t\t\t)\n\t\t\tnodeSelector := map[string]string{\n\t\t\t\tdomain + \"/team\":                        \"team-1\",\n\t\t\t\tdomain + \"/custom-label\":                \"custom-value\",\n\t\t\t\t\"subdomain.\" + domain + \"/custom-label\": \"custom-value\",\n\t\t\t}\n\t\t\tselectors.Insert(lo.Keys(nodeSelector)...) // Add node selector keys to selectors used in testing to ensure we test all labels\n\t\t\trequirements := lo.MapToSlice(nodeSelector, func(key string, value string) corev1.NodeSelectorRequirement {\n\t\t\t\treturn corev1.NodeSelectorRequirement{Key: key, Operator: corev1.NodeSelectorOpIn, Values: []string{value}}\n\t\t\t})\n\t\t\tdeployment := test.Deployment(test.DeploymentOptions{Replicas: 1, PodOptions: test.PodOptions{\n\t\t\t\tNodeSelector:     nodeSelector,\n\t\t\t\tNodePreferences:  requirements,\n\t\t\t\tNodeRequirements: requirements,\n\t\t\t}})\n\t\t\tenv.ExpectCreated(nodeClass, nodePool, deployment)\n\t\t\tenv.EventuallyExpectHealthyPodCount(labels.SelectorFromSet(deployment.Spec.Selector.MatchLabels), int(*deployment.Spec.Replicas))\n\t\t\tnode := env.ExpectCreatedNodeCount(\"==\", 1)[0]\n\t\t\t// Ensure that the requirements/labels specified above are propagated onto the node\n\t\t\tfor k, v := range nodeSelector {\n\t\t\t\tExpect(node.Labels).To(HaveKeyWithValue(k, v))\n\t\t\t}\n\t\t},\n\t\t\tEntry(\"node-restriction.kuberentes.io\", \"node-restriction.kuberentes.io\"),\n\t\t\tEntry(\"node.kubernetes.io\", \"node.kubernetes.io\"),\n\t\t\tEntry(\"kops.k8s.io\", \"kops.k8s.io\"),\n\t\t)\n\t\tIt(\"should support well-known labels for capacity tenancy\", func() {\n\t\t\tnodeSelector := map[string]string{\n\t\t\t\tv1.LabelInstanceTenancy: string(ec2types.CapacityReservationTenancyDedicated),\n\t\t\t}\n\t\t\tselectors.Insert(lo.Keys(nodeSelector)...) // Add node selector keys to selectors used in testing to ensure we test all labels\n\t\t\trequirements := lo.MapToSlice(nodeSelector, func(key string, value string) corev1.NodeSelectorRequirement {\n\t\t\t\treturn corev1.NodeSelectorRequirement{Key: key, Operator: corev1.NodeSelectorOpIn, Values: []string{value}}\n\t\t\t})\n\t\t\tdeployment := test.Deployment(test.DeploymentOptions{Replicas: 1, PodOptions: test.PodOptions{\n\t\t\t\tNodeSelector:     nodeSelector,\n\t\t\t\tNodePreferences:  requirements,\n\t\t\t\tNodeRequirements: requirements,\n\t\t\t}})\n\t\t\tenv.ExpectCreated(nodeClass, nodePool, deployment)\n\t\t\tenv.EventuallyExpectHealthyPodCount(labels.SelectorFromSet(deployment.Spec.Selector.MatchLabels), int(*deployment.Spec.Replicas))\n\t\t\tenv.ExpectCreatedNodeCount(\"==\", 1)\n\t\t})\n\t})\n\n\tContext(\"Provisioning\", func() {\n\t\tIt(\"should provision a node for naked pods\", func() {\n\t\t\tpod := test.Pod()\n\n\t\t\tenv.ExpectCreated(nodeClass, nodePool, pod)\n\t\t\tenv.EventuallyExpectHealthy(pod)\n\t\t\tenv.ExpectCreatedNodeCount(\"==\", 1)\n\t\t})\n\t\tIt(\"should honor minValuesPolicy when provisioning a node\", func() {\n\t\t\teventClient := debug.NewEventClient(env.Client)\n\t\t\tpod := test.Pod()\n\t\t\tnodePoolWithMinValues := test.ReplaceRequirements(nodePool, karpv1.NodeSelectorRequirementWithMinValues{\n\t\t\t\tKey:       corev1.LabelInstanceTypeStable,\n\t\t\t\tOperator:  corev1.NodeSelectorOpIn,\n\t\t\t\tValues:    []string{\"c5.large\", \"invalid-instance-type-1\", \"invalid-instance-type-2\"},\n\t\t\t\tMinValues: lo.ToPtr(3),\n\t\t\t})\n\t\t\tenv.ExpectCreated(nodeClass, nodePoolWithMinValues, pod)\n\n\t\t\t// minValues should only be relaxed when policy is set to BestEffort\n\t\t\tif minValuesPolicy == options.MinValuesPolicyBestEffort {\n\t\t\t\tenv.EventuallyExpectHealthy(pod)\n\t\t\t\tenv.ExpectCreatedNodeCount(\"==\", 1)\n\t\t\t\tnodeClaim := env.ExpectNodeClaimCount(\"==\", 1)\n\t\t\t\tExpect(nodeClaim[0].Annotations).To(HaveKeyWithValue(karpv1.NodeClaimMinValuesRelaxedAnnotationKey, \"true\"))\n\t\t\t\tExpect(nodeClaim[0].Spec.Requirements).To(ContainElement(karpv1.NodeSelectorRequirementWithMinValues{\n\t\t\t\t\tKey:       corev1.LabelInstanceTypeStable,\n\t\t\t\t\tOperator:  corev1.NodeSelectorOpIn,\n\t\t\t\t\tValues:    []string{\"c5.large\"},\n\t\t\t\t\tMinValues: lo.ToPtr(1),\n\t\t\t\t}))\n\t\t\t} else {\n\t\t\t\tenv.ExpectExists(pod)\n\t\t\t\t// Give a min for the scheduling decision to be done.\n\t\t\t\tenv.ConsistentlyExpectPendingPods(time.Minute, pod)\n\t\t\t\tenv.EventuallyExpectNodeCount(\"==\", 0)\n\t\t\t\tenv.ExpectNodeClaimCount(\"==\", 0)\n\t\t\t\tevents, err := eventClient.GetEvents(env.Context, \"NodePool\")\n\t\t\t\tExpect(err).ToNot(HaveOccurred())\n\t\t\t\tkey, found := lo.FindKeyBy(events, func(k corev1.ObjectReference, v *corev1.EventList) bool {\n\t\t\t\t\treturn k.Name == nodePoolWithMinValues.Name &&\n\t\t\t\t\t\tk.Namespace == nodePoolWithMinValues.Namespace\n\t\t\t\t})\n\t\t\t\tExpect(found).To(BeTrue())\n\t\t\t\t_, found = lo.Find(events[key].Items, func(e corev1.Event) bool {\n\t\t\t\t\treturn e.InvolvedObject.Name == nodePoolWithMinValues.Name &&\n\t\t\t\t\t\te.InvolvedObject.Namespace == nodePoolWithMinValues.Namespace &&\n\t\t\t\t\t\te.Message == \"NodePool requirements filtered out all compatible available instance types due to minValues incompatibility\"\n\t\t\t\t})\n\t\t\t\tExpect(found).To(BeTrue())\n\t\t\t}\n\t\t})\n\t\tIt(\"should provision a node for a deployment\", Label(debug.NoWatch), Label(debug.NoEvents), func() {\n\t\t\tdeployment := test.Deployment(test.DeploymentOptions{Replicas: 50})\n\t\t\tenv.ExpectCreated(nodeClass, nodePool, deployment)\n\t\t\tenv.EventuallyExpectHealthyPodCount(labels.SelectorFromSet(deployment.Spec.Selector.MatchLabels), int(*deployment.Spec.Replicas))\n\t\t\tenv.ExpectCreatedNodeCount(\"<=\", 2) // should probably all land on a single node, but at worst two depending on batching\n\t\t})\n\t\tIt(\"should provision a node for a self-affinity deployment\", func() {\n\t\t\t// just two pods as they all need to land on the same node\n\t\t\tpodLabels := map[string]string{\"test\": \"self-affinity\"}\n\t\t\tdeployment := test.Deployment(test.DeploymentOptions{\n\t\t\t\tReplicas: 2,\n\t\t\t\tPodOptions: test.PodOptions{\n\t\t\t\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\t\t\t\tLabels: podLabels,\n\t\t\t\t\t},\n\t\t\t\t\tPodRequirements: []corev1.PodAffinityTerm{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tLabelSelector: &metav1.LabelSelector{MatchLabels: podLabels},\n\t\t\t\t\t\t\tTopologyKey:   corev1.LabelHostname,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t})\n\n\t\t\tenv.ExpectCreated(nodeClass, nodePool, deployment)\n\t\t\tenv.EventuallyExpectHealthyPodCount(labels.SelectorFromSet(deployment.Spec.Selector.MatchLabels), 2)\n\t\t\tenv.ExpectCreatedNodeCount(\"==\", 1)\n\t\t})\n\t\tIt(\"should provision three nodes for a zonal topology spread\", func() {\n\t\t\t// one pod per zone\n\t\t\tpodLabels := map[string]string{\"test\": \"zonal-spread\"}\n\t\t\tdeployment := test.Deployment(test.DeploymentOptions{\n\t\t\t\tReplicas: 3,\n\t\t\t\tPodOptions: test.PodOptions{\n\t\t\t\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\t\t\t\tLabels: podLabels,\n\t\t\t\t\t},\n\t\t\t\t\tTopologySpreadConstraints: []corev1.TopologySpreadConstraint{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tMaxSkew:           1,\n\t\t\t\t\t\t\tTopologyKey:       corev1.LabelTopologyZone,\n\t\t\t\t\t\t\tWhenUnsatisfiable: corev1.DoNotSchedule,\n\t\t\t\t\t\t\tLabelSelector:     &metav1.LabelSelector{MatchLabels: podLabels},\n\t\t\t\t\t\t\tMinDomains:        lo.ToPtr(int32(3)),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t})\n\n\t\t\tenv.ExpectCreated(nodeClass, nodePool, deployment)\n\t\t\tenv.EventuallyExpectHealthyPodCount(labels.SelectorFromSet(podLabels), 3)\n\t\t\t// Karpenter will launch three nodes, however if all three nodes don't get register with the cluster at the same time, two pods will be placed on one node.\n\t\t\t// This can result in a case where all 3 pods are healthy, while there are only two created nodes.\n\t\t\t// In that case, we still expect to eventually have three nodes.\n\t\t\tenv.EventuallyExpectNodeCount(\"==\", 3)\n\t\t})\n\t\tIt(\"should provision a node using a NodePool with higher priority\", func() {\n\t\t\tnodePoolLowPri := test.NodePool(karpv1.NodePool{\n\t\t\t\tSpec: karpv1.NodePoolSpec{\n\t\t\t\t\tWeight: lo.ToPtr(int32(10)),\n\t\t\t\t\tTemplate: karpv1.NodeClaimTemplate{\n\t\t\t\t\t\tSpec: karpv1.NodeClaimTemplateSpec{\n\t\t\t\t\t\t\tNodeClassRef: &karpv1.NodeClassReference{\n\t\t\t\t\t\t\t\tGroup: object.GVK(nodeClass).Group,\n\t\t\t\t\t\t\t\tKind:  object.GVK(nodeClass).Kind,\n\t\t\t\t\t\t\t\tName:  nodeClass.Name,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tRequirements: []karpv1.NodeSelectorRequirementWithMinValues{\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tKey:      corev1.LabelOSStable,\n\t\t\t\t\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\t\t\t\t\tValues:   []string{string(corev1.Linux)},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tKey:      corev1.LabelInstanceTypeStable,\n\t\t\t\t\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\t\t\t\t\tValues:   []string{\"t3.nano\"},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t})\n\t\t\tnodePoolHighPri := test.NodePool(karpv1.NodePool{\n\t\t\t\tSpec: karpv1.NodePoolSpec{\n\t\t\t\t\tWeight: lo.ToPtr(int32(100)),\n\t\t\t\t\tTemplate: karpv1.NodeClaimTemplate{\n\t\t\t\t\t\tSpec: karpv1.NodeClaimTemplateSpec{\n\t\t\t\t\t\t\tNodeClassRef: &karpv1.NodeClassReference{\n\t\t\t\t\t\t\t\tGroup: object.GVK(nodeClass).Group,\n\t\t\t\t\t\t\t\tKind:  object.GVK(nodeClass).Kind,\n\t\t\t\t\t\t\t\tName:  nodeClass.Name,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tRequirements: []karpv1.NodeSelectorRequirementWithMinValues{\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tKey:      corev1.LabelOSStable,\n\t\t\t\t\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\t\t\t\t\tValues:   []string{string(corev1.Linux)},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tKey:      corev1.LabelInstanceTypeStable,\n\t\t\t\t\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\t\t\t\t\tValues:   []string{\"c5.large\"},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t})\n\t\t\tpod := test.Pod()\n\t\t\tenv.ExpectCreated(pod, nodeClass, nodePoolLowPri, nodePoolHighPri)\n\t\t\tenv.EventuallyExpectHealthy(pod)\n\t\t\tenv.ExpectCreatedNodeCount(\"==\", 1)\n\t\t\tExpect(env.GetInstance(pod.Spec.NodeName).InstanceType).To(Equal(ec2types.InstanceType(\"c5.large\")))\n\t\t\tExpect(env.GetNode(pod.Spec.NodeName).Labels[karpv1.NodePoolLabelKey]).To(Equal(nodePoolHighPri.Name))\n\t\t})\n\t\tIt(\"should provision a flex node for a pod\", func() {\n\t\t\tselectors.Insert(v1.LabelInstanceCapabilityFlex)\n\t\t\tpod := test.Pod()\n\t\t\tnodePoolWithMinValues := test.ReplaceRequirements(nodePool, karpv1.NodeSelectorRequirementWithMinValues{\n\t\t\t\tKey:      v1.LabelInstanceCapabilityFlex,\n\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\tValues:   []string{\"true\"},\n\t\t\t})\n\t\t\tenv.ExpectCreated(nodeClass, nodePoolWithMinValues, pod)\n\t\t\tenv.EventuallyExpectHealthy(pod)\n\t\t\tenv.ExpectCreatedNodeCount(\"==\", 1)\n\t\t\tExpect(env.GetNode(pod.Spec.NodeName).Labels).To(And(HaveKeyWithValue(corev1.LabelInstanceType, ContainSubstring(\"flex\"))))\n\t\t})\n\n\t\tDescribeTable(\n\t\t\t\"should provision a right-sized node when a pod has InitContainers (cpu)\",\n\t\t\tfunc(expectedNodeCPU string, containerRequirements corev1.ResourceRequirements, initContainers ...corev1.Container) {\n\t\t\t\tif env.K8sMinorVersion() < 29 {\n\t\t\t\t\tSkip(\"native sidecar containers are only enabled on EKS 1.29+\")\n\t\t\t\t}\n\n\t\t\t\tlabels := map[string]string{\"test\": test.RandomName()}\n\t\t\t\t// Create a buffer pod to even out the total resource requests regardless of the daemonsets on the cluster. Assumes\n\t\t\t\t// CPU is the resource in contention and that total daemonset CPU requests <= 3.\n\t\t\t\tdsBufferPod := test.Pod(test.PodOptions{\n\t\t\t\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\t\t\t\tLabels: labels,\n\t\t\t\t\t},\n\t\t\t\t\tPodRequirements: []corev1.PodAffinityTerm{{\n\t\t\t\t\t\tLabelSelector: &metav1.LabelSelector{\n\t\t\t\t\t\t\tMatchLabels: labels,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tTopologyKey: corev1.LabelHostname,\n\t\t\t\t\t}},\n\t\t\t\t\tResourceRequirements: corev1.ResourceRequirements{\n\t\t\t\t\t\tRequests: corev1.ResourceList{\n\t\t\t\t\t\t\tcorev1.ResourceCPU: func() resource.Quantity {\n\t\t\t\t\t\t\t\tdsOverhead := env.GetDaemonSetOverhead(nodePool)\n\t\t\t\t\t\t\t\tbase := lo.ToPtr(resource.MustParse(\"3\"))\n\t\t\t\t\t\t\t\tbase.Sub(*dsOverhead.Cpu())\n\t\t\t\t\t\t\t\treturn *base\n\t\t\t\t\t\t\t}(),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t})\n\n\t\t\t\ttest.ReplaceRequirements(nodePool, karpv1.NodeSelectorRequirementWithMinValues{\n\t\t\t\t\tKey:      v1.LabelInstanceCPU,\n\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\tValues:   []string{\"4\", \"8\"},\n\t\t\t\t}, karpv1.NodeSelectorRequirementWithMinValues{\n\t\t\t\t\tKey:      v1.LabelInstanceCategory,\n\t\t\t\t\tOperator: corev1.NodeSelectorOpNotIn,\n\t\t\t\t\tValues:   []string{\"t\"},\n\t\t\t\t})\n\t\t\t\tpod := test.Pod(test.PodOptions{\n\t\t\t\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\t\t\t\tLabels: labels,\n\t\t\t\t\t},\n\t\t\t\t\tPodRequirements: []corev1.PodAffinityTerm{{\n\t\t\t\t\t\tLabelSelector: &metav1.LabelSelector{\n\t\t\t\t\t\t\tMatchLabels: labels,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tTopologyKey: corev1.LabelHostname,\n\t\t\t\t\t}},\n\t\t\t\t\tInitContainers:       initContainers,\n\t\t\t\t\tResourceRequirements: containerRequirements,\n\t\t\t\t})\n\t\t\t\tenv.ExpectCreated(nodePool, nodeClass, dsBufferPod, pod)\n\t\t\t\tenv.EventuallyExpectHealthy(pod)\n\t\t\t\tnode := env.ExpectCreatedNodeCount(\"==\", 1)[0]\n\t\t\t\tExpect(node.ObjectMeta.GetLabels()[v1.LabelInstanceCPU]).To(Equal(expectedNodeCPU))\n\t\t\t},\n\t\t\tEntry(\"sidecar requirements + later init requirements do exceed container requirements\", \"8\", corev1.ResourceRequirements{\n\t\t\t\tRequests: corev1.ResourceList{corev1.ResourceCPU: resource.MustParse(\"400m\")},\n\t\t\t}, ephemeralInitContainer(corev1.ResourceRequirements{\n\t\t\t\tRequests: corev1.ResourceList{corev1.ResourceCPU: resource.MustParse(\"300m\")},\n\t\t\t}), corev1.Container{\n\t\t\t\tRestartPolicy: lo.ToPtr(corev1.ContainerRestartPolicyAlways),\n\t\t\t\tResources: corev1.ResourceRequirements{\n\t\t\t\t\tRequests: corev1.ResourceList{corev1.ResourceCPU: resource.MustParse(\"350m\")},\n\t\t\t\t},\n\t\t\t}, ephemeralInitContainer(corev1.ResourceRequirements{\n\t\t\t\tRequests: corev1.ResourceList{corev1.ResourceCPU: resource.MustParse(\"1\")},\n\t\t\t})),\n\t\t\tEntry(\"sidecar requirements + later init requirements do not exceed container requirements\", \"4\", corev1.ResourceRequirements{\n\t\t\t\tRequests: corev1.ResourceList{corev1.ResourceCPU: resource.MustParse(\"400m\")},\n\t\t\t}, ephemeralInitContainer(corev1.ResourceRequirements{\n\t\t\t\tRequests: corev1.ResourceList{corev1.ResourceCPU: resource.MustParse(\"300m\")},\n\t\t\t}), corev1.Container{\n\t\t\t\tRestartPolicy: lo.ToPtr(corev1.ContainerRestartPolicyAlways),\n\t\t\t\tResources: corev1.ResourceRequirements{\n\t\t\t\t\tRequests: corev1.ResourceList{corev1.ResourceCPU: resource.MustParse(\"350m\")},\n\t\t\t\t},\n\t\t\t}, ephemeralInitContainer(corev1.ResourceRequirements{\n\t\t\t\tRequests: corev1.ResourceList{corev1.ResourceCPU: resource.MustParse(\"300m\")},\n\t\t\t})),\n\t\t\tEntry(\"init container requirements exceed all later requests\", \"8\", corev1.ResourceRequirements{\n\t\t\t\tRequests: corev1.ResourceList{corev1.ResourceCPU: resource.MustParse(\"400m\")},\n\t\t\t}, corev1.Container{\n\t\t\t\tRestartPolicy: lo.ToPtr(corev1.ContainerRestartPolicyAlways),\n\t\t\t\tResources: corev1.ResourceRequirements{\n\t\t\t\t\tRequests: corev1.ResourceList{corev1.ResourceCPU: resource.MustParse(\"100m\")},\n\t\t\t\t},\n\t\t\t}, ephemeralInitContainer(corev1.ResourceRequirements{\n\t\t\t\tRequests: corev1.ResourceList{corev1.ResourceCPU: resource.MustParse(\"1500m\")},\n\t\t\t}), corev1.Container{\n\t\t\t\tRestartPolicy: lo.ToPtr(corev1.ContainerRestartPolicyAlways),\n\t\t\t\tResources: corev1.ResourceRequirements{\n\t\t\t\t\tRequests: corev1.ResourceList{corev1.ResourceCPU: resource.MustParse(\"100m\")},\n\t\t\t\t},\n\t\t\t}),\n\t\t)\n\t\tIt(\"should provision a right-sized node when a pod has InitContainers (mixed resources)\", func() {\n\t\t\tif env.K8sMinorVersion() < 29 {\n\t\t\t\tSkip(\"native sidecar containers are only enabled on EKS 1.29+\")\n\t\t\t}\n\t\t\ttest.ReplaceRequirements(nodePool, karpv1.NodeSelectorRequirementWithMinValues{\n\t\t\t\tKey:      v1.LabelInstanceCategory,\n\t\t\t\tOperator: corev1.NodeSelectorOpNotIn,\n\t\t\t\tValues:   []string{\"t\"},\n\t\t\t})\n\t\t\tpod := test.Pod(test.PodOptions{\n\t\t\t\tInitContainers: []corev1.Container{\n\t\t\t\t\t{\n\t\t\t\t\t\tRestartPolicy: lo.ToPtr(corev1.ContainerRestartPolicyAlways),\n\t\t\t\t\t\tResources: corev1.ResourceRequirements{Requests: corev1.ResourceList{\n\t\t\t\t\t\t\tcorev1.ResourceCPU:    resource.MustParse(\"100m\"),\n\t\t\t\t\t\t\tcorev1.ResourceMemory: resource.MustParse(\"128Mi\"),\n\t\t\t\t\t\t}},\n\t\t\t\t\t},\n\t\t\t\t\tephemeralInitContainer(corev1.ResourceRequirements{Requests: corev1.ResourceList{\n\t\t\t\t\t\tcorev1.ResourceCPU:    resource.MustParse(\"50m\"),\n\t\t\t\t\t\tcorev1.ResourceMemory: resource.MustParse(\"4Gi\"),\n\t\t\t\t\t}}),\n\t\t\t\t},\n\t\t\t\tResourceRequirements: corev1.ResourceRequirements{Requests: corev1.ResourceList{\n\t\t\t\t\tcorev1.ResourceCPU:    resource.MustParse(\"100m\"),\n\t\t\t\t\tcorev1.ResourceMemory: resource.MustParse(\"128Mi\"),\n\t\t\t\t}},\n\t\t\t})\n\t\t\tenv.ExpectCreated(nodePool, nodeClass, pod)\n\t\t\tenv.EventuallyExpectHealthy(pod)\n\t\t})\n\n\t\tIt(\"should provision a node for a pod with overlapping zone and zone-id requirements\", func() {\n\t\t\tsubnetInfo := lo.UniqBy(env.GetSubnetInfo(map[string]string{\"karpenter.sh/discovery\": env.ClusterName}), func(s environmentaws.SubnetInfo) string {\n\t\t\t\treturn s.Zone\n\t\t\t})\n\t\t\tExpect(len(subnetInfo)).To(BeNumerically(\">=\", 3))\n\n\t\t\t// Create a pod with 'overlapping' zone and zone-id requirements. With two options for each label, but only one pair of zone-zoneID that maps to the\n\t\t\t// same AZ, we will always expect the pod to be scheduled to that AZ. In this case, this is the mapping at zone[1].\n\t\t\tpod := test.Pod(test.PodOptions{\n\t\t\t\tNodeRequirements: []corev1.NodeSelectorRequirement{\n\t\t\t\t\t{\n\t\t\t\t\t\tKey:      corev1.LabelTopologyZone,\n\t\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\t\tValues:   lo.Map(subnetInfo[0:2], func(info environmentaws.SubnetInfo, _ int) string { return info.Zone }),\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tKey:      v1.LabelTopologyZoneID,\n\t\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\t\tValues:   lo.Map(subnetInfo[1:3], func(info environmentaws.SubnetInfo, _ int) string { return info.ZoneID }),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t})\n\t\t\tenv.ExpectCreated(nodePool, nodeClass, pod)\n\t\t\tnode := env.EventuallyExpectInitializedNodeCount(\"==\", 1)[0]\n\t\t\tExpect(node.Labels[corev1.LabelTopologyZone]).To(Equal(subnetInfo[1].Zone))\n\t\t\tExpect(node.Labels[v1.LabelTopologyZoneID]).To(Equal(subnetInfo[1].ZoneID))\n\t\t})\n\t\tIt(\"should provision nodes for pods with zone-id requirements in the correct zone\", func() {\n\t\t\t// Each pod specifies a requirement on this expected zone, where the value is the matching zone for the\n\t\t\t// required zone-id. This allows us to verify that Karpenter launched the node in the correct zone, even if\n\t\t\t// it doesn't add the zone-id label and the label is added by CCM. If we didn't take this approach, we would\n\t\t\t// succeed even if Karpenter doesn't add the label and /or incorrectly generated offerings on k8s 1.30 and\n\t\t\t// above. This is an unlikely scenario, and adding this check is a defense in depth measure.\n\t\t\tconst expectedZoneLabel = \"expected-zone-label\"\n\t\t\ttest.ReplaceRequirements(nodePool, karpv1.NodeSelectorRequirementWithMinValues{\n\t\t\t\tKey:      expectedZoneLabel,\n\t\t\t\tOperator: corev1.NodeSelectorOpExists,\n\t\t\t})\n\n\t\t\tsubnetInfo := lo.UniqBy(env.GetSubnetInfo(map[string]string{\"karpenter.sh/discovery\": env.ClusterName}), func(s environmentaws.SubnetInfo) string {\n\t\t\t\treturn s.Zone\n\t\t\t})\n\t\t\tpods := lo.Map(subnetInfo, func(info environmentaws.SubnetInfo, _ int) *corev1.Pod {\n\t\t\t\treturn test.Pod(test.PodOptions{\n\t\t\t\t\tNodeRequirements: []corev1.NodeSelectorRequirement{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey:      expectedZoneLabel,\n\t\t\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\t\t\tValues:   []string{info.Zone},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tKey:      v1.LabelTopologyZoneID,\n\t\t\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\t\t\tValues:   []string{info.ZoneID},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t})\n\n\t\t\tenv.ExpectCreated(nodePool, nodeClass)\n\t\t\tfor _, pod := range pods {\n\t\t\t\tenv.ExpectCreated(pod)\n\t\t\t}\n\t\t\tnodes := env.EventuallyExpectInitializedNodeCount(\"==\", len(subnetInfo))\n\t\t\tfor _, node := range nodes {\n\t\t\t\texpectedZone, ok := node.Labels[expectedZoneLabel]\n\t\t\t\tExpect(ok).To(BeTrue())\n\t\t\t\tExpect(node.Labels[corev1.LabelTopologyZone]).To(Equal(expectedZone))\n\t\t\t\tzoneInfo, ok := lo.Find(subnetInfo, func(info environmentaws.SubnetInfo) bool {\n\t\t\t\t\treturn info.Zone == expectedZone\n\t\t\t\t})\n\t\t\t\tExpect(ok).To(BeTrue())\n\t\t\t\tExpect(node.Labels[v1.LabelTopologyZoneID]).To(Equal(zoneInfo.ZoneID))\n\t\t\t}\n\t\t})\n\t})\n\n\tContext(\"Capacity Reservations\", func() {\n\t\tvar largeCapacityReservationID, xlargeCapacityReservationID string\n\t\tBeforeAll(func() {\n\t\t\tlargeCapacityReservationID = environmentaws.ExpectCapacityReservationCreated(\n\t\t\t\tenv.Context,\n\t\t\t\tenv.EC2API,\n\t\t\t\tec2types.InstanceTypeM5Large,\n\t\t\t\tenv.ZoneInfo[0].Zone,\n\t\t\t\t1,\n\t\t\t\tnil,\n\t\t\t\tnil,\n\t\t\t)\n\t\t\txlargeCapacityReservationID = environmentaws.ExpectCapacityReservationCreated(\n\t\t\t\tenv.Context,\n\t\t\t\tenv.EC2API,\n\t\t\t\tec2types.InstanceTypeM5Xlarge,\n\t\t\t\tenv.ZoneInfo[0].Zone,\n\t\t\t\t2,\n\t\t\t\tnil,\n\t\t\t\tnil,\n\t\t\t)\n\t\t})\n\t\tAfterAll(func() {\n\t\t\tenvironmentaws.ExpectCapacityReservationsCanceled(env.Context, env.EC2API, largeCapacityReservationID, xlargeCapacityReservationID)\n\t\t})\n\t\tBeforeEach(func() {\n\t\t\tnodeClass.Spec.CapacityReservationSelectorTerms = []v1.CapacityReservationSelectorTerm{\n\t\t\t\t{\n\t\t\t\t\tID: largeCapacityReservationID,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tID: xlargeCapacityReservationID,\n\t\t\t\t},\n\t\t\t}\n\t\t\tnodePool.Spec.Template.Spec.Requirements = []karpv1.NodeSelectorRequirementWithMinValues{\n\t\t\t\t{\n\t\t\t\t\tKey:      karpv1.CapacityTypeLabelKey,\n\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\tValues:   []string{karpv1.CapacityTypeOnDemand, karpv1.CapacityTypeReserved},\n\t\t\t\t},\n\t\t\t\t// We need to specify the OS label to prevent a daemonset with a Windows specific resource from scheduling against\n\t\t\t\t// the node. Omitting this requirement will result in scheduling failures.\n\t\t\t\t{\n\t\t\t\t\tKey:      corev1.LabelOSStable,\n\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\tValues:   []string{string(corev1.Linux)},\n\t\t\t\t},\n\t\t\t}\n\t\t})\n\t\tIt(\"should schedule against a specific reservation ID\", func() {\n\t\t\tselectors.Insert(v1.LabelCapacityReservationID)\n\t\t\tpod := test.Pod(test.PodOptions{\n\t\t\t\tNodeRequirements: []corev1.NodeSelectorRequirement{{\n\t\t\t\t\tKey:      v1.LabelCapacityReservationID,\n\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\tValues:   []string{xlargeCapacityReservationID},\n\t\t\t\t}},\n\t\t\t})\n\t\t\tenv.ExpectCreated(nodePool, nodeClass, pod)\n\n\t\t\tnc := env.EventuallyExpectLaunchedNodeClaimCount(\"==\", 1)[0]\n\t\t\treq, ok := lo.Find(nc.Spec.Requirements, func(req karpv1.NodeSelectorRequirementWithMinValues) bool {\n\t\t\t\treturn req.Key == v1.LabelCapacityReservationID\n\t\t\t})\n\t\t\tExpect(ok).To(BeTrue())\n\t\t\tExpect(req.Values).To(ConsistOf(xlargeCapacityReservationID))\n\n\t\t\tenv.EventuallyExpectNodeClaimsReady(nc)\n\t\t\tn := env.EventuallyExpectNodeCount(\"==\", 1)[0]\n\t\t\tExpect(n.Labels).To(HaveKeyWithValue(karpv1.CapacityTypeLabelKey, karpv1.CapacityTypeReserved))\n\t\t\tExpect(n.Labels).To(HaveKeyWithValue(v1.LabelCapacityReservationType, string(v1.CapacityReservationTypeDefault)))\n\t\t\tExpect(n.Labels).To(HaveKeyWithValue(v1.LabelCapacityReservationID, xlargeCapacityReservationID))\n\t\t})\n\t\t// NOTE: We're not exercising capacity blocks because it isn't possible to provision them ad-hoc for the use in an\n\t\t// integration test.\n\t\tIt(\"should schedule against a specific reservation type\", func() {\n\t\t\tselectors.Insert(v1.LabelCapacityReservationType)\n\t\t\tpod := test.Pod(test.PodOptions{\n\t\t\t\tNodeRequirements: []corev1.NodeSelectorRequirement{\n\t\t\t\t\t{\n\t\t\t\t\t\tKey:      v1.LabelCapacityReservationType,\n\t\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\t\tValues:   []string{string(v1.CapacityReservationTypeDefault)},\n\t\t\t\t\t},\n\t\t\t\t\t// NOTE: Continue to select the xlarge instance to ensure we can use the large instance for the fallback test. ODCR\n\t\t\t\t\t// capacity eventual consistency is inconsistent between different services (e.g. DescribeCapacityReservations and\n\t\t\t\t\t// RunInstances) so we've allocated enough to ensure that each test can make use of them without overlapping.\n\t\t\t\t\t{\n\t\t\t\t\t\tKey:      corev1.LabelInstanceTypeStable,\n\t\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\t\tValues:   []string{string(ec2types.InstanceTypeM5Xlarge)},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t})\n\t\t\tenv.ExpectCreated(nodePool, nodeClass, pod)\n\n\t\t\tnc := env.EventuallyExpectLaunchedNodeClaimCount(\"==\", 1)[0]\n\t\t\treq, ok := lo.Find(nc.Spec.Requirements, func(req karpv1.NodeSelectorRequirementWithMinValues) bool {\n\t\t\t\treturn req.Key == v1.LabelCapacityReservationType\n\t\t\t})\n\t\t\tExpect(ok).To(BeTrue())\n\t\t\tExpect(req.Values).To(ConsistOf(string(v1.CapacityReservationTypeDefault)))\n\n\t\t\tenv.EventuallyExpectNodeClaimsReady(nc)\n\t\t\tn := env.EventuallyExpectNodeCount(\"==\", 1)[0]\n\t\t\tExpect(n.Labels).To(HaveKeyWithValue(karpv1.CapacityTypeLabelKey, karpv1.CapacityTypeReserved))\n\t\t\tExpect(n.Labels).To(HaveKeyWithValue(v1.LabelCapacityReservationType, string(v1.CapacityReservationTypeDefault)))\n\t\t\tExpect(n.Labels).To(HaveKeyWithValue(v1.LabelCapacityReservationID, xlargeCapacityReservationID))\n\t\t})\n\t\tIt(\"should fall back when compatible capacity reservations are exhausted\", func() {\n\t\t\t// We create two pods with self anti-affinity and a node selector on a specific instance type. The anti-affinity term\n\t\t\t// ensures that we must provision 2 nodes, and the node selector selects upon an instance type with a single reserved\n\t\t\t// instance available. As such, we should create a reserved NodeClaim for one pod, and an on-demand NodeClaim for the\n\t\t\t// other.\n\t\t\tpodLabels := map[string]string{\"foo\": \"bar\"}\n\t\t\tpods := test.Pods(2, test.PodOptions{\n\t\t\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\t\t\tLabels: podLabels,\n\t\t\t\t},\n\t\t\t\tNodeRequirements: []corev1.NodeSelectorRequirement{{\n\t\t\t\t\tKey:      corev1.LabelInstanceTypeStable,\n\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\tValues:   []string{string(ec2types.InstanceTypeM5Large)},\n\t\t\t\t}},\n\t\t\t\tPodAntiRequirements: []corev1.PodAffinityTerm{{\n\t\t\t\t\tTopologyKey: corev1.LabelHostname,\n\t\t\t\t\tLabelSelector: &metav1.LabelSelector{\n\t\t\t\t\t\tMatchLabels: podLabels,\n\t\t\t\t\t},\n\t\t\t\t}},\n\t\t\t})\n\t\t\tenv.ExpectCreated(nodePool, nodeClass, pods[0], pods[1])\n\n\t\t\treservedCount := 0\n\t\t\tfor _, nc := range env.EventuallyExpectLaunchedNodeClaimCount(\"==\", 2) {\n\t\t\t\treq, ok := lo.Find(nc.Spec.Requirements, func(req karpv1.NodeSelectorRequirementWithMinValues) bool {\n\t\t\t\t\treturn req.Key == v1.LabelCapacityReservationID\n\t\t\t\t})\n\t\t\t\tif ok {\n\t\t\t\t\treservedCount += 1\n\t\t\t\t\tExpect(req.Values).To(ConsistOf(largeCapacityReservationID))\n\t\t\t\t}\n\t\t\t}\n\t\t\tExpect(reservedCount).To(Equal(1))\n\t\t\tenv.EventuallyExpectNodeCount(\"==\", 2)\n\t\t})\n\t})\n\n\tContext(\"Interruptible Capacity Resverations\", func() {\n\t\tvar sourceReservationID, interruptibleReservationID, xlargeReservationID string\n\t\tBeforeAll(func() {\n\t\t\tsourceReservationID, interruptibleReservationID = environmentaws.ExpectInterruptibleCapacityReservationCreated(\n\t\t\t\tenv.Context,\n\t\t\t\tenv.EC2API,\n\t\t\t\tec2types.InstanceTypeM5Large,\n\t\t\t\tenv.ZoneInfo[0].Zone,\n\t\t\t\t2,\n\t\t\t\t1,\n\t\t\t\tnil,\n\t\t\t)\n\t\t\txlargeReservationID = environmentaws.ExpectCapacityReservationCreated(\n\t\t\t\tenv.Context,\n\t\t\t\tenv.EC2API,\n\t\t\t\tec2types.InstanceTypeM5Xlarge,\n\t\t\t\tenv.ZoneInfo[0].Zone,\n\t\t\t\t1,\n\t\t\t\tnil,\n\t\t\t\tnil,\n\t\t\t)\n\t\t})\n\t\tAfterAll(func() {\n\t\t\tenvironmentaws.ExpectInterruptibleAndSourceCapacityCanceled(env.Context, env.EC2API, sourceReservationID, interruptibleReservationID)\n\t\t\tenvironmentaws.ExpectCapacityReservationsCanceled(env.Context, env.EC2API, xlargeReservationID)\n\t\t})\n\t\tBeforeEach(func() {\n\t\t\tnodeClass.Spec.CapacityReservationSelectorTerms = []v1.CapacityReservationSelectorTerm{\n\t\t\t\t{ID: sourceReservationID}, {ID: interruptibleReservationID},\n\t\t\t}\n\t\t\tnodePool.Spec.Template.Spec.Requirements = []karpv1.NodeSelectorRequirementWithMinValues{\n\t\t\t\t{\n\t\t\t\t\tKey:      karpv1.CapacityTypeLabelKey,\n\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\tValues:   []string{karpv1.CapacityTypeOnDemand, karpv1.CapacityTypeReserved},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tKey:      corev1.LabelOSStable,\n\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\tValues:   []string{string(corev1.Linux)},\n\t\t\t\t},\n\t\t\t}\n\t\t})\n\n\t\tDescribeTable(\"should schedule against a specific reservation interruptibiltiy\", func(interruptible bool) {\n\t\t\tselectors.Insert(v1.LabelCapacityReservationInterruptible)\n\t\t\tpod := test.Pod(test.PodOptions{\n\t\t\t\tNodeRequirements: []corev1.NodeSelectorRequirement{{\n\t\t\t\t\tKey:      v1.LabelCapacityReservationInterruptible,\n\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\tValues:   []string{strconv.FormatBool(interruptible)},\n\t\t\t\t}},\n\t\t\t})\n\t\t\tenv.ExpectCreated(nodePool, nodeClass, pod)\n\n\t\t\tnc := env.EventuallyExpectLaunchedNodeClaimCount(\"==\", 1)[0]\n\t\t\tresReq, ok := lo.Find(nc.Spec.Requirements, func(req karpv1.NodeSelectorRequirementWithMinValues) bool {\n\t\t\t\treturn req.Key == v1.LabelCapacityReservationID\n\t\t\t})\n\t\t\tExpect(ok).To(BeTrue())\n\t\t\tiReq, ok := lo.Find(nc.Spec.Requirements, func(req karpv1.NodeSelectorRequirementWithMinValues) bool {\n\t\t\t\treturn req.Key == v1.LabelCapacityReservationInterruptible\n\t\t\t})\n\t\t\tExpect(ok).To(BeTrue())\n\t\t\tExpect(resReq.Values).To(ConsistOf(lo.Ternary(interruptible, interruptibleReservationID, sourceReservationID)))\n\t\t\tExpect(iReq.Values).To(ConsistOf(strconv.FormatBool(interruptible)))\n\n\t\t\tenv.EventuallyExpectNodeClaimsReady(nc)\n\t\t\tn := env.EventuallyExpectNodeCount(\"==\", 1)[0]\n\t\t\tExpect(n.Labels).To(HaveKeyWithValue(v1.LabelCapacityReservationInterruptible, strconv.FormatBool(interruptible)))\n\t\t},\n\t\t\tEntry(\"interruptible\", true),\n\t\t\tEntry(\"non-interruptible\", false),\n\t\t)\n\t\tIt(\"should prioritize ODCR over IODCR if price is equal\", func() {\n\t\t\tpod := test.Pod(test.PodOptions{\n\t\t\t\tNodeRequirements: []corev1.NodeSelectorRequirement{{\n\t\t\t\t\tKey:      corev1.LabelInstanceTypeStable,\n\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\tValues:   []string{string(ec2types.InstanceTypeM5Large)},\n\t\t\t\t}},\n\t\t\t})\n\t\t\tenv.ExpectCreated(nodePool, nodeClass, pod)\n\n\t\t\tnc := env.EventuallyExpectLaunchedNodeClaimCount(\"==\", 1)[0]\n\t\t\treq, ok := lo.Find(nc.Spec.Requirements, func(req karpv1.NodeSelectorRequirementWithMinValues) bool {\n\t\t\t\treturn req.Key == v1.LabelCapacityReservationID\n\t\t\t})\n\t\t\tExpect(ok).To(BeTrue())\n\t\t\t// NodeClaim should have both reservations (but launch with ODCR)\n\t\t\tExpect(req.Values).To(ConsistOf(sourceReservationID, interruptibleReservationID))\n\n\t\t\tenv.EventuallyExpectNodeClaimsReady(nc)\n\t\t\tn := env.EventuallyExpectNodeCount(\"==\", 1)[0]\n\t\t\tExpect(n.Labels).To(HaveKeyWithValue(v1.LabelCapacityReservationInterruptible, \"false\"))\n\t\t\tExpect(n.Labels).To(HaveKeyWithValue(v1.LabelCapacityReservationID, sourceReservationID))\n\t\t})\n\t\tIt(\"should prioritize reservation with lower price\", func() {\n\t\t\tenv.ExpectCreated(nodeClass)\n\t\t\tnodeClass.Spec.CapacityReservationSelectorTerms = []v1.CapacityReservationSelectorTerm{\n\t\t\t\t{ID: xlargeReservationID}, {ID: interruptibleReservationID},\n\t\t\t}\n\t\t\tenv.ExpectUpdated(nodeClass)\n\n\t\t\tpod := test.Pod(test.PodOptions{\n\t\t\t\tNodeRequirements: []corev1.NodeSelectorRequirement{{\n\t\t\t\t\tKey:      corev1.LabelInstanceTypeStable,\n\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\tValues:   []string{string(ec2types.InstanceTypeM5Large), string(ec2types.InstanceTypeM5Xlarge)},\n\t\t\t\t}},\n\t\t\t})\n\t\t\tenv.ExpectCreated(nodePool, pod)\n\n\t\t\tnc := env.EventuallyExpectLaunchedNodeClaimCount(\"==\", 1)[0]\n\t\t\treq, ok := lo.Find(nc.Spec.Requirements, func(req karpv1.NodeSelectorRequirementWithMinValues) bool {\n\t\t\t\treturn req.Key == v1.LabelCapacityReservationID\n\t\t\t})\n\t\t\tExpect(ok).To(BeTrue())\n\t\t\t// NodeClaim should have both reservations (but launch in IODCR as its cheaper)\n\t\t\tExpect(req.Values).To(ConsistOf(xlargeReservationID, interruptibleReservationID))\n\n\t\t\tenv.EventuallyExpectNodeClaimsReady(nc)\n\t\t\tn := env.EventuallyExpectNodeCount(\"==\", 1)[0]\n\t\t\tExpect(n.Labels).To(HaveKeyWithValue(corev1.LabelInstanceTypeStable, string(ec2types.InstanceTypeM5Large)))\n\t\t\tExpect(n.Labels).To(HaveKeyWithValue(v1.LabelCapacityReservationInterruptible, \"true\"))\n\t\t})\n\t})\n},\n\tEntry(\"MinValuesPolicyBestEffort\", options.MinValuesPolicyBestEffort),\n\tEntry(\"MinValuesPolicyStrict\", options.MinValuesPolicyStrict),\n)\n\nvar _ = Describe(\"Node Overlay\", func() {\n\tIt(\"should provision the instance that is the cheepest based on a price adjustment node overlay applied\", func() {\n\t\toverlaiedInstanceType := \"m7a.8xlarge\"\n\t\tpod := test.Pod()\n\t\tnodeOverlay := test.NodeOverlay(v1alpha1.NodeOverlay{\n\t\t\tSpec: v1alpha1.NodeOverlaySpec{\n\t\t\t\tPriceAdjustment: lo.ToPtr(\"-99.99999999999%\"),\n\t\t\t\tRequirements: []v1alpha1.NodeSelectorRequirement{\n\t\t\t\t\t{\n\t\t\t\t\t\tKey:      corev1.LabelInstanceTypeStable,\n\t\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\t\tValues:   []string{overlaiedInstanceType},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tenv.ExpectCreated(nodePool, nodeClass, nodeOverlay, pod)\n\t\tenv.EventuallyExpectHealthy(pod)\n\t\tnode := env.EventuallyExpectInitializedNodeCount(\"==\", 1)\n\n\t\tinstanceType, foundInstanceType := node[0].Labels[corev1.LabelInstanceTypeStable]\n\t\tExpect(foundInstanceType).To(BeTrue())\n\t\tExpect(instanceType).To(Equal(overlaiedInstanceType))\n\t})\n\tIt(\"should provision the instance that is the cheepest based on a price override node overlay applied\", func() {\n\t\toverlaiedInstanceType := \"c7a.8xlarge\"\n\t\tpod := test.Pod()\n\t\tnodeOverlay := test.NodeOverlay(v1alpha1.NodeOverlay{\n\t\t\tSpec: v1alpha1.NodeOverlaySpec{\n\t\t\t\tPrice: lo.ToPtr(\"0.0000000232\"),\n\t\t\t\tRequirements: []v1alpha1.NodeSelectorRequirement{\n\t\t\t\t\t{\n\t\t\t\t\t\tKey:      corev1.LabelInstanceTypeStable,\n\t\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\t\tValues:   []string{overlaiedInstanceType},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tenv.ExpectCreated(nodePool, nodeClass, nodeOverlay, pod)\n\t\tenv.EventuallyExpectHealthy(pod)\n\t\tnode := env.EventuallyExpectInitializedNodeCount(\"==\", 1)\n\n\t\tinstanceType, foundInstanceType := node[0].Labels[corev1.LabelInstanceTypeStable]\n\t\tExpect(foundInstanceType).To(BeTrue())\n\t\tExpect(instanceType).To(Equal(overlaiedInstanceType))\n\t})\n\tIt(\"should provision a node that matches hugepages resource requests\", func() {\n\t\toverlaiedInstanceType := \"c7a.2xlarge\"\n\t\tpod := test.Pod(test.PodOptions{\n\t\t\tResourceRequirements: corev1.ResourceRequirements{\n\t\t\t\tRequests: corev1.ResourceList{\n\t\t\t\t\tcorev1.ResourceCPU:                   test.RandomCPU(),\n\t\t\t\t\tcorev1.ResourceMemory:                test.RandomMemory(),\n\t\t\t\t\tcorev1.ResourceName(\"hugepages-2Mi\"): resource.MustParse(\"100Mi\"),\n\t\t\t\t},\n\t\t\t\tLimits: corev1.ResourceList{\n\t\t\t\t\tcorev1.ResourceName(\"hugepages-2Mi\"): resource.MustParse(\"100Mi\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tnodeOverlay := test.NodeOverlay(v1alpha1.NodeOverlay{\n\t\t\tSpec: v1alpha1.NodeOverlaySpec{\n\t\t\t\tRequirements: []v1alpha1.NodeSelectorRequirement{\n\t\t\t\t\t{\n\t\t\t\t\t\tKey:      corev1.LabelInstanceTypeStable,\n\t\t\t\t\t\tOperator: corev1.NodeSelectorOpIn,\n\t\t\t\t\t\tValues:   []string{overlaiedInstanceType},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tCapacity: corev1.ResourceList{\n\t\t\t\t\tcorev1.ResourceName(\"hugepages-2Mi\"): resource.MustParse(\"4Gi\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\n\t\tcontent, err := os.ReadFile(\"testdata/hugepage_userdata_input.sh\")\n\t\tExpect(err).To(BeNil())\n\t\tnodeClass.Spec.UserData = lo.ToPtr(string(content))\n\n\t\tenv.ExpectCreated(nodePool, nodeClass, nodeOverlay, pod)\n\t\tenv.EventuallyExpectHealthy(pod)\n\t\tnode := env.EventuallyExpectInitializedNodeCount(\"==\", 1)\n\n\t\tinstanceType, foundInstanceType := node[0].Labels[corev1.LabelInstanceTypeStable]\n\t\tExpect(foundInstanceType).To(BeTrue())\n\t\tExpect(instanceType).To(Equal(overlaiedInstanceType))\n\t})\n})\n\nfunc ephemeralInitContainer(requirements corev1.ResourceRequirements) corev1.Container {\n\treturn corev1.Container{\n\t\tImage:     environmentaws.EphemeralInitContainerImage,\n\t\tCommand:   []string{\"/bin/sh\"},\n\t\tArgs:      []string{\"-c\", \"sleep 5\"},\n\t\tResources: requirements,\n\t}\n}\n"
  },
  {
    "path": "test/suites/scheduling/testdata/hugepage_userdata_input.sh",
    "content": "MIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"==MYBOUNDARY==\"\n\n--==MYBOUNDARY==\nContent-Type: text/x-shellscript; charset=\"us-ascii\"\n\n#!/bin/bash -e\n# Check if HugePages is activated\nsudo cat /proc/sys/vm/nr_hugepages\n\n# activate HugePages and set the kernel parameter value to 2048\nsudo sysctl -w vm.nr_hugepages=2048\n\n# Ensure HugePages is allocated after reboot\nsudo echo \"vm.nr_hugepages=2048\" >> /etc/sysctl.conf\nsudo grep Huge /proc/meminfo\necho \"hugepages user data script has finished successfully.\"\n--==MYBOUNDARY=="
  },
  {
    "path": "test/suites/storage/suite_test.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage storage_test\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n\t\"testing\"\n\t\"time\"\n\n\t\"k8s.io/apimachinery/pkg/labels\"\n\n\tawssdk \"github.com/aws/aws-sdk-go-v2/aws\"\n\tkarpv1 \"sigs.k8s.io/karpenter/pkg/apis/v1\"\n\n\tv1 \"github.com/aws/karpenter-provider-aws/pkg/apis/v1\"\n\tenvironmentaws \"github.com/aws/karpenter-provider-aws/test/pkg/environment/aws\"\n\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n\n\tappsv1 \"k8s.io/api/apps/v1\"\n\tcorev1 \"k8s.io/api/core/v1\"\n\tstoragev1 \"k8s.io/api/storage/v1\"\n\t\"k8s.io/apimachinery/pkg/api/resource\"\n\tmetav1 \"k8s.io/apimachinery/pkg/apis/meta/v1\"\n\n\t\"github.com/samber/lo\"\n\t\"github.com/samber/lo/mutable\"\n\n\t\"github.com/aws/karpenter-provider-aws/pkg/errors\"\n\n\t\"sigs.k8s.io/controller-runtime/pkg/client\"\n\t\"sigs.k8s.io/karpenter/pkg/test\"\n)\n\nvar env *environmentaws.Environment\nvar nodeClass *v1.EC2NodeClass\nvar nodePool *karpv1.NodePool\n\nfunc TestStorage(t *testing.T) {\n\tRegisterFailHandler(Fail)\n\tBeforeSuite(func() {\n\t\tenv = environmentaws.NewEnvironment(t)\n\t})\n\tAfterSuite(func() {\n\t\tenv.Stop()\n\t})\n\tRunSpecs(t, \"Storage\")\n}\n\nvar _ = BeforeEach(func() {\n\tenv.BeforeEach()\n\tnodeClass = env.DefaultEC2NodeClass()\n\tnodePool = env.DefaultNodePool(nodeClass)\n})\nvar _ = AfterEach(func() { env.Cleanup() })\nvar _ = AfterEach(func() { env.AfterEach() })\nvar _ = Describe(\"Persistent Volumes\", func() {\n\tContext(\"Static\", func() {\n\t\tIt(\"should run a pod with a pre-bound persistent volume (empty storage class)\", func() {\n\t\t\tpvc := test.PersistentVolumeClaim(test.PersistentVolumeClaimOptions{\n\t\t\t\tVolumeName:       \"test-volume\",\n\t\t\t\tStorageClassName: lo.ToPtr(\"\"),\n\t\t\t})\n\t\t\tpv := test.PersistentVolume(test.PersistentVolumeOptions{\n\t\t\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\t\t\tName: pvc.Spec.VolumeName,\n\t\t\t\t},\n\t\t\t})\n\t\t\tpod := test.Pod(test.PodOptions{\n\t\t\t\tPersistentVolumeClaims: []string{pvc.Name},\n\t\t\t})\n\n\t\t\tenv.ExpectCreated(nodeClass, nodePool, pv, pvc, pod)\n\t\t\tenv.EventuallyExpectHealthy(pod)\n\t\t\tenv.ExpectCreatedNodeCount(\"==\", 1)\n\t\t})\n\t\tIt(\"should run a pod with a pre-bound persistent volume (non-existent storage class)\", func() {\n\t\t\tpvc := test.PersistentVolumeClaim(test.PersistentVolumeClaimOptions{\n\t\t\t\tVolumeName:       \"test-volume\",\n\t\t\t\tStorageClassName: lo.ToPtr(\"non-existent-storage-class\"),\n\t\t\t})\n\t\t\tpv := test.PersistentVolume(test.PersistentVolumeOptions{\n\t\t\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\t\t\tName: pvc.Spec.VolumeName,\n\t\t\t\t},\n\t\t\t\tStorageClassName: \"non-existent-storage-class\",\n\t\t\t})\n\t\t\tpod := test.Pod(test.PodOptions{\n\t\t\t\tPersistentVolumeClaims: []string{pvc.Name},\n\t\t\t})\n\t\t\tenv.ExpectCreated(nodeClass, nodePool, pv, pvc, pod)\n\t\t\tenv.EventuallyExpectHealthy(pod)\n\t\t\tenv.ExpectCreatedNodeCount(\"==\", 1)\n\t\t})\n\t\tIt(\"should run a pod with a pre-bound persistent volume while respecting topology constraints\", func() {\n\t\t\tsubnets := env.GetSubnets(map[string]string{\"karpenter.sh/discovery\": env.ClusterName})\n\t\t\tshuffledAZs := lo.Keys(subnets)\n\t\t\tmutable.Shuffle(shuffledAZs)\n\n\t\t\tpvc := test.PersistentVolumeClaim(test.PersistentVolumeClaimOptions{\n\t\t\t\tStorageClassName: lo.ToPtr(\"non-existent-storage-class\"),\n\t\t\t})\n\t\t\tpv := test.PersistentVolume(test.PersistentVolumeOptions{\n\t\t\t\tStorageClassName: \"non-existent-storage-class\",\n\t\t\t\tZones:            []string{shuffledAZs[0]},\n\t\t\t})\n\t\t\tpod := test.Pod(test.PodOptions{\n\t\t\t\tPersistentVolumeClaims: []string{pvc.Name},\n\t\t\t})\n\t\t\tenv.ExpectCreated(nodeClass, nodePool, pv, pvc, pod)\n\t\t\tenv.EventuallyExpectHealthy(pod)\n\t\t\tenv.ExpectCreatedNodeCount(\"==\", 1)\n\t\t})\n\t\tIt(\"should run a pod with a generic ephemeral volume\", func() {\n\t\t\tpv := test.PersistentVolume(test.PersistentVolumeOptions{\n\t\t\t\tStorageClassName: \"non-existent-storage-class\",\n\t\t\t})\n\t\t\tpod := test.Pod(test.PodOptions{\n\t\t\t\tEphemeralVolumeTemplates: []test.EphemeralVolumeTemplateOptions{{\n\t\t\t\t\tStorageClassName: lo.ToPtr(\"non-existent-storage-class\"),\n\t\t\t\t}},\n\t\t\t})\n\n\t\t\tenv.ExpectCreated(nodeClass, nodePool, pv, pod)\n\t\t\tenv.EventuallyExpectHealthy(pod)\n\t\t\tenv.ExpectCreatedNodeCount(\"==\", 1)\n\t\t})\n\t})\n\n\tContext(\"Dynamic\", func() {\n\t\tvar storageClass *storagev1.StorageClass\n\t\tBeforeEach(func() {\n\t\t\t// Ensure that the EBS driver is installed, or we can't run the test.\n\t\t\tvar ds appsv1.DaemonSet\n\t\t\tif err := env.Client.Get(env.Context, client.ObjectKey{\n\t\t\t\tNamespace: \"kube-system\",\n\t\t\t\tName:      \"ebs-csi-node\",\n\t\t\t}, &ds); err != nil {\n\t\t\t\tif errors.IsNotFound(err) {\n\t\t\t\t\tSkip(fmt.Sprintf(\"skipping dynamic PVC test due to missing EBS driver %s\", err))\n\t\t\t\t} else {\n\t\t\t\t\tFail(fmt.Sprintf(\"determining EBS driver status, %s\", err))\n\t\t\t\t}\n\t\t\t}\n\t\t\tstorageClass = test.StorageClass(test.StorageClassOptions{\n\t\t\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\t\t\tName: \"test-storage-class\",\n\t\t\t\t},\n\t\t\t\tProvisioner:       awssdk.String(\"ebs.csi.aws.com\"),\n\t\t\t\tVolumeBindingMode: lo.ToPtr(storagev1.VolumeBindingWaitForFirstConsumer),\n\t\t\t})\n\t\t})\n\n\t\tIt(\"should run a pod with a dynamic persistent volume\", func() {\n\t\t\tpvc := test.PersistentVolumeClaim(test.PersistentVolumeClaimOptions{\n\t\t\t\tStorageClassName: &storageClass.Name,\n\t\t\t})\n\t\t\tpod := test.Pod(test.PodOptions{\n\t\t\t\tPersistentVolumeClaims: []string{pvc.Name},\n\t\t\t})\n\n\t\t\tenv.ExpectCreated(nodeClass, nodePool, storageClass, pvc, pod)\n\t\t\tenv.EventuallyExpectHealthy(pod)\n\t\t\tenv.ExpectCreatedNodeCount(\"==\", 1)\n\t\t})\n\t\tIt(\"should run a pod with a dynamic persistent volume while respecting allowed topologies\", func() {\n\t\t\tsubnets := env.GetSubnets(map[string]string{\"karpenter.sh/discovery\": env.ClusterName})\n\t\t\tshuffledAZs := lo.Keys(subnets)\n\t\t\tmutable.Shuffle(shuffledAZs)\n\n\t\t\tstorageClass.AllowedTopologies = []corev1.TopologySelectorTerm{{\n\t\t\t\tMatchLabelExpressions: []corev1.TopologySelectorLabelRequirement{{\n\t\t\t\t\tKey:    \"topology.ebs.csi.aws.com/zone\",\n\t\t\t\t\tValues: []string{shuffledAZs[0]},\n\t\t\t\t}},\n\t\t\t}}\n\n\t\t\tpvc := test.PersistentVolumeClaim(test.PersistentVolumeClaimOptions{\n\t\t\t\tStorageClassName: &storageClass.Name,\n\t\t\t})\n\t\t\tpod := test.Pod(test.PodOptions{\n\t\t\t\tPersistentVolumeClaims: []string{pvc.Name},\n\t\t\t})\n\n\t\t\tenv.ExpectCreated(nodeClass, nodePool, storageClass, pvc, pod)\n\t\t\tenv.EventuallyExpectHealthy(pod)\n\t\t\tenv.ExpectCreatedNodeCount(\"==\", 1)\n\t\t})\n\t\tIt(\"should run a pod with a dynamic persistent volume while respecting volume limits\", func() {\n\t\t\tExpectSetEBSDriverLimit(1)\n\t\t\tDeferCleanup(func() {\n\t\t\t\tExpectRemoveEBSDriverLimit()\n\t\t\t})\n\n\t\t\tcount := 2\n\t\t\tpvcs := lo.Times(count, func(_ int) *corev1.PersistentVolumeClaim {\n\t\t\t\treturn test.PersistentVolumeClaim(test.PersistentVolumeClaimOptions{\n\t\t\t\t\tStorageClassName: &storageClass.Name,\n\t\t\t\t})\n\t\t\t})\n\t\t\tpods := lo.Map(pvcs, func(pvc *corev1.PersistentVolumeClaim, _ int) *corev1.Pod {\n\t\t\t\treturn test.Pod(test.PodOptions{\n\t\t\t\t\tPersistentVolumeClaims: []string{pvc.Name},\n\t\t\t\t})\n\t\t\t})\n\n\t\t\t// Pod creation is spread out here to address an upstream issue where pods can schedule to the same node\n\t\t\t// and exceed its volume limits before the csi driver reports limits. This is not something Karpenter\n\t\t\t// currently compensates for.\n\t\t\tenv.ExpectCreated(nodeClass, nodePool, storageClass, pvcs[0], pods[0])\n\t\t\tenv.EventuallyExpectHealthy(pods[0])\n\t\t\tenv.ExpectCreatedNodeCount(\"==\", 1)\n\t\t\tenv.ExpectCreated(pvcs[1], pods[1])\n\t\t\tenv.EventuallyExpectHealthy(pods[1])\n\t\t\tenv.ExpectCreatedNodeCount(\"==\", 2)\n\t\t})\n\t\tIt(\"should run a pod with a generic ephemeral volume\", func() {\n\t\t\tpod := test.Pod(test.PodOptions{\n\t\t\t\tEphemeralVolumeTemplates: []test.EphemeralVolumeTemplateOptions{{\n\t\t\t\t\tStorageClassName: &storageClass.Name,\n\t\t\t\t}},\n\t\t\t})\n\n\t\t\tenv.ExpectCreated(nodeClass, nodePool, storageClass, pod)\n\t\t\tenv.EventuallyExpectHealthy(pod)\n\t\t\tenv.ExpectCreatedNodeCount(\"==\", 1)\n\t\t})\n\t})\n})\n\nvar _ = Describe(\"Stateful workloads\", func() {\n\tvar numPods int\n\tvar persistentVolumeClaim *corev1.PersistentVolumeClaim\n\tvar storageClass *storagev1.StorageClass\n\tvar statefulSet *appsv1.StatefulSet\n\tvar selector labels.Selector\n\tBeforeEach(func() {\n\t\t// Ensure that the EBS driver is installed, or we can't run the test.\n\t\tvar ds appsv1.DaemonSet\n\t\tif err := env.Client.Get(env.Context, client.ObjectKey{\n\t\t\tNamespace: \"kube-system\",\n\t\t\tName:      \"ebs-csi-node\",\n\t\t}, &ds); err != nil {\n\t\t\tif errors.IsNotFound(err) {\n\t\t\t\tSkip(fmt.Sprintf(\"skipping StatefulSet test due to missing EBS driver %s\", err))\n\t\t\t} else {\n\t\t\t\tFail(fmt.Sprintf(\"determining EBS driver status, %s\", err))\n\t\t\t}\n\t\t}\n\n\t\tnumPods = 1\n\t\tsubnets := env.GetSubnets(map[string]string{\"karpenter.sh/discovery\": env.ClusterName})\n\t\tshuffledAZs := lo.Keys(subnets)\n\t\tmutable.Shuffle(shuffledAZs)\n\n\t\tstorageClass = test.StorageClass(test.StorageClassOptions{\n\t\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\t\tName: \"test-storage-class\",\n\t\t\t},\n\t\t\tProvisioner:       awssdk.String(\"ebs.csi.aws.com\"),\n\t\t\tVolumeBindingMode: lo.ToPtr(storagev1.VolumeBindingWaitForFirstConsumer),\n\t\t})\n\n\t\tstorageClass.AllowedTopologies = []corev1.TopologySelectorTerm{{\n\t\t\tMatchLabelExpressions: []corev1.TopologySelectorLabelRequirement{{\n\t\t\t\tKey:    \"topology.ebs.csi.aws.com/zone\",\n\t\t\t\tValues: []string{shuffledAZs[0]},\n\t\t\t}},\n\t\t}}\n\n\t\tpersistentVolumeClaim = test.PersistentVolumeClaim(test.PersistentVolumeClaimOptions{\n\t\t\tStorageClassName: &storageClass.Name,\n\t\t})\n\t\tstatefulSet = test.StatefulSet(test.StatefulSetOptions{\n\t\t\tReplicas: int32(numPods),\n\t\t\tPodOptions: test.PodOptions{\n\t\t\t\tObjectMeta: metav1.ObjectMeta{\n\t\t\t\t\tLabels: map[string]string{\n\t\t\t\t\t\t\"app\": \"my-app\",\n\t\t\t\t\t}},\n\t\t\t},\n\t\t})\n\t\t// Ensure same volume is used across replica restarts.\n\t\tstatefulSet.Spec.VolumeClaimTemplates = []corev1.PersistentVolumeClaim{*persistentVolumeClaim}\n\t\t// Ensure volume mounts to pod, so that we test that we avoid the 6+ minute force detach delay.\n\t\tvm := corev1.VolumeMount{\n\t\t\tName:      persistentVolumeClaim.Name,\n\t\t\tMountPath: \"/usr/share\",\n\t\t}\n\t\tstatefulSet.Spec.Template.Spec.Containers[0].VolumeMounts = []corev1.VolumeMount{vm}\n\t\tselector = labels.SelectorFromSet(statefulSet.Spec.Selector.MatchLabels)\n\t})\n\n\tIt(\"should run on a new node without 6+ minute delays when disrupted\", func() {\n\t\t// EBS volume detach + attach should usually take ~20s. Extra time is to prevent flakes due to EC2 APIs.\n\t\tforceDetachTimeout := 2 * time.Minute\n\n\t\tenv.ExpectCreated(nodeClass, nodePool, storageClass, statefulSet)\n\t\tnodeClaim := env.EventuallyExpectCreatedNodeClaimCount(\"==\", 1)[0]\n\t\tnode := env.EventuallyExpectCreatedNodeCount(\"==\", 1)[0]\n\t\tenv.EventuallyExpectHealthyPodCount(selector, numPods)\n\n\t\tenv.Monitor.Reset() // Reset the monitor so that we can expect a single node to be spun up after expiration\n\n\t\t// Delete original nodeClaim to get the original node deleted\n\t\tenv.ExpectDeleted(nodeClaim)\n\n\t\t// Eventually the node will be tainted, which means its actively being disrupted\n\t\tEventually(func(g Gomega) {\n\t\t\tg.Expect(env.Client.Get(env.Context, client.ObjectKeyFromObject(node), node)).Should(Succeed())\n\t\t\t_, ok := lo.Find(node.Spec.Taints, func(t corev1.Taint) bool {\n\t\t\t\treturn t.MatchTaint(&karpv1.DisruptedNoScheduleTaint)\n\t\t\t})\n\t\t\tg.Expect(ok).To(BeTrue())\n\t\t}).Should(Succeed())\n\n\t\tenv.EventuallyExpectCreatedNodeCount(\">=\", 1)\n\n\t\t// After the deletion timestamp is set and all pods are drained the node should be gone.\n\t\tenv.EventuallyExpectNotFound(nodeClaim, node)\n\n\t\t// We expect the stateful workload to become healthy on new node before the 6-minute force detach timeout.\n\t\t// We start timer after pod binds to node because volume attachment happens during ContainerCreating\n\t\tenv.EventuallyExpectCreatedNodeClaimCount(\"==\", 1)\n\t\tenv.EventuallyExpectCreatedNodeCount(\">=\", 1)\n\t\tenv.EventuallyExpectBoundPodCount(selector, numPods)\n\t\tenv.EventuallyExpectHealthyPodCountWithTimeout(forceDetachTimeout, selector, numPods)\n\t})\n\tIt(\"should not block node deletion if stateful workload cannot be drained\", func() {\n\t\t// Make pod un-drain-able by tolerating disruption taint.\n\t\tstatefulSet.Spec.Template.Spec.Tolerations = []corev1.Toleration{{\n\t\t\tKey:      \"karpenter.sh/disruption\",\n\t\t\tOperator: corev1.TolerationOpEqual,\n\t\t\tValue:    \"disrupting\",\n\t\t\tEffect:   corev1.TaintEffectNoExecute,\n\t\t}}\n\n\t\tenv.ExpectCreated(nodeClass, nodePool, storageClass, statefulSet)\n\t\tnodeClaim := env.EventuallyExpectCreatedNodeClaimCount(\"==\", 1)[0]\n\t\tnode := env.EventuallyExpectCreatedNodeCount(\"==\", 1)[0]\n\t\tenv.EventuallyExpectHealthyPodCount(selector, numPods)\n\n\t\t// Delete original nodeClaim to get the original node deleted\n\t\tenv.ExpectDeleted(nodeClaim)\n\n\t\t// Eventually the node will be tainted, which means its actively being disrupted\n\t\tEventually(func(g Gomega) {\n\t\t\tg.Expect(env.Client.Get(env.Context, client.ObjectKeyFromObject(node), node)).Should(Succeed())\n\t\t\t_, ok := lo.Find(node.Spec.Taints, func(t corev1.Taint) bool {\n\t\t\t\treturn t.MatchTaint(&karpv1.DisruptedNoScheduleTaint)\n\t\t\t})\n\t\t\tg.Expect(ok).To(BeTrue())\n\t\t}).Should(Succeed())\n\n\t\t// After the deletion timestamp is set and all pods are drained\n\t\t// the node should be gone regardless of orphaned volume attachment objects.\n\t\tenv.EventuallyExpectNotFound(nodeClaim, node)\n\t})\n})\n\nvar _ = Describe(\"Ephemeral Storage\", func() {\n\tDescribeTable(\"should run a pod with instance-store ephemeral storage that exceeds EBS root block device mappings\", func(alias string) {\n\t\tif strings.Contains(alias, \"al2\") && env.K8sMinorVersion() > 32 {\n\t\t\tSkip(\"AL2 is not supported on versions > 1.32\")\n\t\t}\n\t\tnodeClass.Spec.InstanceStorePolicy = lo.ToPtr(v1.InstanceStorePolicyRAID0)\n\t\tnodeClass.Spec.AMISelectorTerms = []v1.AMISelectorTerm{\n\t\t\t{\n\t\t\t\tAlias: alias,\n\t\t\t},\n\t\t}\n\t\tpod := test.Pod(test.PodOptions{\n\t\t\tResourceRequirements: corev1.ResourceRequirements{\n\t\t\t\tRequests: corev1.ResourceList{\n\t\t\t\t\tcorev1.ResourceEphemeralStorage: resource.MustParse(\"100Gi\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tenv.ExpectCreated(nodeClass, nodePool, pod)\n\t\tenv.EventuallyExpectHealthy(pod)\n\t\tenv.ExpectCreatedNodeCount(\"==\", 1)\n\t},\n\t\tEntry(\"AL2\", \"al2@latest\"),\n\t\tEntry(\"AL2023\", \"al2023@latest\"),\n\t\tEntry(\"Bottlerocket\", \"bottlerocket@latest\"),\n\t)\n})\n\nfunc ExpectSetEBSDriverLimit(limit int) {\n\tGinkgoHelper()\n\tds := &appsv1.DaemonSet{}\n\tExpect(env.Client.Get(env.Context, client.ObjectKey{Namespace: \"kube-system\", Name: \"ebs-csi-node\"}, ds)).To(Succeed())\n\tstored := ds.DeepCopy()\n\n\tcontainers := ds.Spec.Template.Spec.Containers\n\tfor i := range containers {\n\t\tif containers[i].Name != \"ebs-plugin\" {\n\t\t\tcontinue\n\t\t}\n\t\tcontainers[i].Args = append(containers[i].Args, fmt.Sprintf(\"--volume-attach-limit=%d\", limit))\n\t\tbreak\n\t}\n\tExpect(env.Client.Patch(env.Context, ds, client.StrategicMergeFrom(stored))).To(Succeed())\n}\n\nfunc ExpectRemoveEBSDriverLimit() {\n\tGinkgoHelper()\n\tds := &appsv1.DaemonSet{}\n\tExpect(env.Client.Get(env.Context, client.ObjectKey{Namespace: \"kube-system\", Name: \"ebs-csi-node\"}, ds)).To(Succeed())\n\tstored := ds.DeepCopy()\n\n\tcontainers := ds.Spec.Template.Spec.Containers\n\tfor i := range containers {\n\t\tif containers[i].Name != \"ebs-plugin\" {\n\t\t\tcontinue\n\t\t}\n\t\tcontainers[i].Args = lo.Reject(containers[i].Args, func(arg string, _ int) bool {\n\t\t\treturn strings.Contains(arg, \"--volume-attach-limit\")\n\t\t})\n\t\tbreak\n\t}\n\tExpect(env.Client.Patch(env.Context, ds, client.StrategicMergeFrom(stored))).To(Succeed())\n}\n"
  },
  {
    "path": "tools/kompat/README.md",
    "content": "# kompat\n\nKompat is a simple CLI tool to interact with `compatibility.yaml` files which host your Kubernetes compatibility matrix.\n\n## Installation \n\n```console\ngo install github.com/aws/karpenter/tools/kompat/cmd/kompat@latest\n```\n\n## Usage:\n\n```console\nkompat hack/compatibility-karpenter.yaml -n 5\n```\n"
  },
  {
    "path": "tools/kompat/cmd/kompat/main.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage main\n\nimport (\n\t\"bytes\"\n\t_ \"embed\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"os\"\n\t\"reflect\"\n\t\"strings\"\n\n\t\"github.com/olekukonko/tablewriter\"\n\t\"github.com/samber/lo\"\n\t\"github.com/spf13/cobra\"\n\n\t\"github.com/aws/karpenter-provider-aws/tools/kompat/pkg/kompat\"\n)\n\nconst (\n\tOutputJSON     = \"json\"\n\tOutputYAML     = \"yaml\"\n\tOutputTable    = \"table\"\n\tOutputMarkdown = \"md\"\n)\n\nvar (\n\tversion = \"\"\n)\n\ntype GlobalOptions struct {\n\tVerbose bool\n\tVersion bool\n\tOutput  string\n}\n\ntype RootOptions struct {\n\tLastNVersions int\n\tK8sVersion    string\n\tBranch        string\n}\n\nvar (\n\tglobalOpts = GlobalOptions{}\n\trootOpts   = RootOptions{}\n\trootCmd    = &cobra.Command{\n\t\tUse:     \"kompat\",\n\t\tVersion: version,\n\t\tArgs:    cobra.ArbitraryArgs,\n\t\tRun: func(cmd *cobra.Command, args []string) {\n\t\t\tif rootOpts.Branch != \"\" {\n\t\t\t\tkompat.DefaultGithubBranch = rootOpts.Branch\n\t\t\t}\n\t\t\tkompatList, err := kompat.Parse(args...)\n\t\t\tif err != nil {\n\t\t\t\tfmt.Printf(\"Unable to parse kompat file: %v\\n\", err)\n\t\t\t\tos.Exit(1)\n\t\t\t}\n\t\t\topts := kompat.Options{\n\t\t\t\tLastN:   rootOpts.LastNVersions,\n\t\t\t\tVersion: rootOpts.K8sVersion,\n\t\t\t}\n\t\t\tswitch globalOpts.Output {\n\t\t\tcase OutputJSON:\n\t\t\t\tfmt.Println(kompatList.JSON())\n\t\t\t\tos.Exit(0)\n\t\t\tcase OutputYAML:\n\t\t\t\tfmt.Println(kompatList.YAML())\n\t\t\t\tos.Exit(0)\n\t\t\tcase OutputTable:\n\t\t\tcase OutputMarkdown:\n\t\t\t\tfmt.Println(kompatList.Markdown(opts))\n\t\t\t\tos.Exit(0)\n\t\t\t}\n\t\t},\n\t}\n)\n\nfunc main() {\n\trootCmd.PersistentFlags().BoolVar(&globalOpts.Verbose, \"verbose\", false, \"Verbose output\")\n\trootCmd.PersistentFlags().BoolVar(&globalOpts.Version, \"version\", false, \"version\")\n\trootCmd.PersistentFlags().StringVarP(&globalOpts.Output, \"output\", \"o\", OutputMarkdown,\n\t\tfmt.Sprintf(\"Output mode: %v\", []string{OutputTable, OutputJSON, OutputYAML, OutputMarkdown}))\n\n\trootCmd.AddCommand(&cobra.Command{Use: \"completion\", Hidden: true})\n\tcobra.EnableCommandSorting = false\n\n\trootCmd.PersistentFlags().IntVarP(&rootOpts.LastNVersions, \"last-n-versions\", \"n\", 4, \"Last n K8s versions\")\n\trootCmd.PersistentFlags().StringVar(&rootOpts.K8sVersion, \"k8s-version\", \"\", \"search for compatibility with a specific k8s version\")\n\trootCmd.PersistentFlags().StringVarP(&rootOpts.Branch, \"branch\", \"b\", \"main\", \"default github branch for remote lookups\")\n\n\tlo.Must0(rootCmd.Execute())\n}\n\nfunc PrettyEncode(data any) string {\n\tvar buffer bytes.Buffer\n\tenc := json.NewEncoder(&buffer)\n\tenc.SetIndent(\"\", \"    \")\n\tif err := enc.Encode(data); err != nil {\n\t\tpanic(err)\n\t}\n\treturn buffer.String()\n}\n\nfunc PrettyTable[T any](data []T, wide bool) string {\n\tvar headers []string\n\tvar rows [][]string\n\tfor _, dataRow := range data {\n\t\tvar row []string\n\t\t// clear headers each time so we only keep one set\n\t\theaders = []string{}\n\t\treflectStruct := reflect.Indirect(reflect.ValueOf(dataRow))\n\t\tfor i := 0; i < reflectStruct.NumField(); i++ {\n\t\t\ttypeField := reflectStruct.Type().Field(i)\n\t\t\ttag := typeField.Tag.Get(\"table\")\n\t\t\tif tag == \"\" {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tsubtags := strings.Split(tag, \",\")\n\t\t\tif len(subtags) > 1 && subtags[1] == \"wide\" && !wide {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\theaders = append(headers, subtags[0])\n\t\t\trow = append(row, reflect.ValueOf(dataRow).Field(i).String())\n\t\t}\n\t\trows = append(rows, row)\n\t}\n\tout := bytes.Buffer{}\n\ttable := tablewriter.NewWriter(&out)\n\ttable.SetHeader(headers)\n\ttable.SetAutoWrapText(false)\n\ttable.SetAutoFormatHeaders(true)\n\ttable.SetHeaderAlignment(tablewriter.ALIGN_LEFT)\n\ttable.SetAlignment(tablewriter.ALIGN_LEFT)\n\ttable.SetCenterSeparator(\"\")\n\ttable.SetColumnSeparator(\"\")\n\ttable.SetRowSeparator(\"\")\n\ttable.SetHeaderLine(false)\n\ttable.SetBorder(false)\n\ttable.SetTablePadding(\"\\t\") // pad with tabs\n\ttable.SetNoWhiteSpace(true)\n\ttable.AppendBulk(rows) // Add Bulk Data\n\ttable.Render()\n\treturn out.String()\n}\n"
  },
  {
    "path": "tools/kompat/go.mod",
    "content": "module github.com/aws/karpenter-provider-aws/tools/kompat\n\ngo 1.22\n\nrequire (\n\tgithub.com/Masterminds/semver/v3 v3.2.1\n\tgithub.com/mitchellh/go-homedir v1.1.0\n\tgithub.com/olekukonko/tablewriter v0.0.5\n\tgithub.com/samber/lo v1.38.1\n\tgithub.com/spf13/cobra v1.6.0\n\tgopkg.in/yaml.v3 v3.0.1\n)\n\nrequire (\n\tgithub.com/inconshreveable/mousetrap v1.0.1 // indirect\n\tgithub.com/mattn/go-runewidth v0.0.9 // indirect\n\tgithub.com/spf13/pflag v1.0.5 // indirect\n\tgolang.org/x/exp v0.0.0-20220303212507-bbda1eaf7a17 // indirect\n)\n"
  },
  {
    "path": "tools/kompat/go.sum",
    "content": "github.com/Masterminds/semver/v3 v3.2.1 h1:RN9w6+7QoMeJVGyfmbcgs28Br8cvmnucEXnY0rYXWg0=\ngithub.com/Masterminds/semver/v3 v3.2.1/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYrf8m9wsX0PNOMQ=\ngithub.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=\ngithub.com/inconshreveable/mousetrap v1.0.1 h1:U3uMjPSQEBMNp1lFxmllqCPM6P5u/Xq7Pgzkat/bFNc=\ngithub.com/inconshreveable/mousetrap v1.0.1/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=\ngithub.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0=\ngithub.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=\ngithub.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=\ngithub.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=\ngithub.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec=\ngithub.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY=\ngithub.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=\ngithub.com/samber/lo v1.38.1 h1:j2XEAqXKb09Am4ebOg31SpvzUTTs6EN3VfgeLUhPdXM=\ngithub.com/samber/lo v1.38.1/go.mod h1:+m/ZKRl6ClXCE2Lgf3MsQlWfh4bn1bz6CXEOxnEXnEA=\ngithub.com/spf13/cobra v1.6.0 h1:42a0n6jwCot1pUmomAp4T7DeMD+20LFv4Q54pxLf2LI=\ngithub.com/spf13/cobra v1.6.0/go.mod h1:IOw/AERYS7UzyrGinqmz6HLUo219MORXGxhbaJUqzrY=\ngithub.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=\ngithub.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=\ngolang.org/x/exp v0.0.0-20220303212507-bbda1eaf7a17 h1:3MTrJm4PyNL9NBqvYDSj3DHl46qQakyfqfWo4jgfaEM=\ngolang.org/x/exp v0.0.0-20220303212507-bbda1eaf7a17/go.mod h1:lgLbSvA5ygNOMpwM/9anMpWVlVJ7Z+cHWq/eFuinpGE=\ngopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=\ngopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=\ngopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=\ngopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=\n"
  },
  {
    "path": "tools/kompat/pkg/kompat/kompat.go",
    "content": "/*\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage kompat\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"os\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/Masterminds/semver/v3\"\n\t\"github.com/mitchellh/go-homedir\"\n\t\"github.com/olekukonko/tablewriter\"\n\t\"github.com/samber/lo\"\n\t\"gopkg.in/yaml.v3\"\n)\n\nvar (\n\tDefaultFileName     = \"k8s-compatibility.yaml\"\n\tDefaultGithubBranch = \"main\"\n)\n\ntype List []Kompat\n\ntype Kompat struct {\n\tName          string          `yaml:\"name\" json:\"name\"`\n\tCompatibility []Compatibility `yaml:\"compatibility\" json:\"compatibility\"`\n}\n\ntype Compatibility struct {\n\tAppVersion    string `yaml:\"appVersion\" json:\"appVersion\"`\n\tMinK8sVersion string `yaml:\"minK8sVersion\" json:\"minK8sVersion\"`\n\tMaxK8sVersion string `yaml:\"maxK8sVersion\" json:\"maxK8sVersion\"`\n}\n\ntype Options struct {\n\tLastN   int\n\tVersion string\n}\n\nfunc IsCompatible(filePath string, appVersion string, k8sVersion string) error {\n\tcontents, err := readFromFile(filePath)\n\tif err != nil {\n\t\treturn err\n\t}\n\tkompats, err := toKompats(contents)\n\tif err != nil {\n\t\treturn err\n\t}\n\tfor _, k := range kompats {\n\t\tk8sToAppVersions := k.expand()\n\t\tappVersions, ok := k8sToAppVersions[k8sVersion]\n\t\tif !ok {\n\t\t\treturn fmt.Errorf(\"%s version %s is not compatible with K8s version %s\", k.Name, appVersion, k8sVersion)\n\t\t}\n\t\t// check if there is any exact matches across any k8s version buckets since that signifies an override\n\t\tallAppVersions := lo.Uniq(lo.Flatten(lo.Values(k8sToAppVersions)))\n\t\tif exactMatch := lo.Contains(allAppVersions, appVersion); exactMatch {\n\t\t\tif ok := lo.Contains(appVersions, appVersion); !ok {\n\t\t\t\treturn fmt.Errorf(\"%s version %s is not compatible with K8s version %s\", k.Name, appVersion, k8sVersion)\n\t\t\t}\n\t\t} else {\n\t\t\tif ok := lo.ContainsBy(appVersions, func(version string) bool {\n\t\t\t\treturn strings.HasPrefix(appVersion, strings.ReplaceAll(version, \".x\", \"\"))\n\t\t\t}); !ok {\n\t\t\t\treturn fmt.Errorf(\"%s version %s is not compatible with K8s version %s\", k.Name, appVersion, k8sVersion)\n\t\t\t}\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc Parse(filePaths ...string) (List, error) {\n\tvar kompats []Kompat\n\tif len(filePaths) == 0 {\n\t\tfilePaths = append(filePaths, DefaultFileName)\n\t}\n\tfor _, f := range filePaths {\n\t\tvar contents []byte\n\t\tvar err error\n\t\turl, ok := toURL(f)\n\t\tif ok {\n\t\t\tcontents, err = readFromURL(url)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t} else {\n\t\t\tcontents, err = readFromFile(f)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t}\n\t\tlist, err := toKompats(contents)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tkompats = append(kompats, list...)\n\t}\n\treturn kompats, nil\n}\n\nfunc toKompats(contents []byte) (List, error) {\n\tvar kompats []Kompat\n\tdecoder := yaml.NewDecoder(bytes.NewBuffer(contents))\n\tfor {\n\t\tvar kompat Kompat\n\t\terr := decoder.Decode(&kompat)\n\t\tif errors.Is(err, io.EOF) {\n\t\t\tbreak\n\t\t}\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tif err := kompat.Validate(); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tkompats = append(kompats, kompat)\n\t}\n\treturn kompats, nil\n}\n\nfunc (k Kompat) Validate() error {\n\tfor _, c := range k.Compatibility {\n\t\tappVersion := strings.ReplaceAll(c.AppVersion, \".x\", \"\")\n\t\tminK8sVersion := strings.ReplaceAll(c.MinK8sVersion, \".x\", \"\")\n\t\tmaxK8sVersion := strings.ReplaceAll(c.MaxK8sVersion, \".x\", \"\")\n\t\tif _, err := semver.NewVersion(appVersion); err != nil {\n\t\t\treturn fmt.Errorf(\"unable to parse compatibility for \\\"%s\\\": appVersion \\\"%s\\\" is invalid: %w\", k.Name, c.AppVersion, err)\n\t\t}\n\t\tif _, err := semver.NewVersion(minK8sVersion); err != nil {\n\t\t\treturn fmt.Errorf(\"unable to parse compatibility for \\\"%s\\\": minK8sVersion \\\"%s\\\" is invalid: %w\", k.Name, c.MinK8sVersion, err)\n\t\t}\n\t\tif maxK8sVersion != \"\" {\n\t\t\tif _, err := semver.NewVersion(maxK8sVersion); err != nil {\n\t\t\t\treturn fmt.Errorf(\"unable to parse compatibility for \\\"%s\\\": maxK8sVersion \\\"%s\\\" is invalid: %w\", k.Name, c.MaxK8sVersion, err)\n\t\t\t}\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (k Kompat) JSON() string {\n\treturn List{k}.JSON()\n}\n\nfunc (k List) JSON() string {\n\tvar buffer bytes.Buffer\n\tenc := json.NewEncoder(&buffer)\n\tenc.SetIndent(\"\", \"    \")\n\tif err := enc.Encode(k); err != nil {\n\t\tpanic(err)\n\t}\n\treturn buffer.String()\n}\n\nfunc (k Kompat) YAML() string {\n\treturn List{k}.YAML()\n}\n\nfunc (k List) YAML() string {\n\tvar buffer bytes.Buffer\n\tenc := yaml.NewEncoder(&buffer)\n\tif err := enc.Encode(k); err != nil {\n\t\tpanic(err)\n\t}\n\treturn buffer.String()\n}\n\nfunc (k Kompat) Markdown(_ ...Options) string {\n\t// options := mergeOptions(opts...)\n\tout := bytes.Buffer{}\n\ttable := tablewriter.NewWriter(&out)\n\theaders := []string{\"Kubernetes\"}\n\tdata := []string{k.Name}\n\tfor _, c := range k.Compatibility {\n\t\tif c.MaxK8sVersion == \"\" || c.MinK8sVersion == c.MaxK8sVersion {\n\t\t\theaders = append(headers, fmt.Sprintf(\"\\\\>= `%s`\", c.MinK8sVersion))\n\t\t} else {\n\t\t\theaders = append(headers, fmt.Sprintf(\"\\\\>= `%s` \\\\<= `%s`\", c.MinK8sVersion, c.MaxK8sVersion))\n\t\t}\n\t\tdata = append(data, c.AppVersion)\n\t}\n\ttable.SetHeader(headers)\n\ttable.SetBorders(tablewriter.Border{Left: true, Top: false, Right: true, Bottom: false})\n\ttable.SetCenterSeparator(\"|\")\n\ttable.AppendBulk([][]string{data})\n\ttable.Render()\n\treturn out.String()\n}\n\nfunc (k List) Markdown(opts ...Options) string {\n\toptions := mergeOptions(opts...)\n\t// if len(k) == 1 {\n\t// \treturn k[0].Markdown()\n\t// }\n\tout := bytes.Buffer{}\n\ttable := tablewriter.NewWriter(&out)\n\theaders := []string{\"Kubernetes\"}\n\tvar data [][]string\n\t// Get all k8s versions for the first row\n\tk8sVersions := k.k8sVersions()\n\tif options.Version != \"\" {\n\t\tversion, ok := lo.Find(k8sVersions, func(version string) bool { return version == options.Version })\n\t\tif !ok {\n\t\t\treturn \"\"\n\t\t}\n\t\theaders = append(headers, version)\n\t} else if options.LastN != 0 {\n\t\tlastN := lo.Min([]int{options.LastN, len(k8sVersions)})\n\t\theaders = append(headers, k8sVersions[len(k8sVersions)-lastN:]...)\n\t} else {\n\t\theaders = append(headers, k8sVersions...)\n\t}\n\n\t// Fill in App version rows\n\tfor i, app := range k {\n\t\tdata = append(data, []string{})\n\t\tk8sVersionToAppVersions := app.expand()\n\t\tfor j, k8sVersion := range headers {\n\t\t\t// skip the first column since it's the text header\n\t\t\tif j == 0 {\n\t\t\t\tdata[i] = append(data[i], app.Name)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tallAppVersions := lo.Uniq(lo.Flatten(lo.Values(k8sVersionToAppVersions)))\n\t\t\tdata[i] = append(data[i], semverRange(k8sVersionToAppVersions[k8sVersion], allAppVersions...))\n\t\t}\n\t}\n\ttable.SetHeader(headers)\n\ttable.SetBorders(tablewriter.Border{Left: true, Top: false, Right: true, Bottom: false})\n\ttable.SetCenterSeparator(\"|\")\n\ttable.AppendBulk(data)\n\ttable.Render()\n\treturn out.String()\n}\n\nfunc mergeOptions(opts ...Options) Options {\n\tif len(opts) == 0 {\n\t\treturn Options{}\n\t}\n\treturn opts[0]\n}\n\nfunc (k List) k8sVersions() []string {\n\tvar k8sVersions []string\n\tfor _, app := range k {\n\t\tk8sVersions = append(k8sVersions, lo.Keys(app.expand())...)\n\t}\n\tk8sVersions = lo.Uniq(k8sVersions)\n\tsort.Slice(k8sVersions, func(i, j int) bool {\n\t\treturn lo.Must(strconv.Atoi(strings.ReplaceAll(k8sVersions[i], \".\", \"\"))) <\n\t\t\tlo.Must(strconv.Atoi(strings.ReplaceAll(k8sVersions[j], \".\", \"\")))\n\t})\n\treturn k8sVersions\n}\n\n// expand returns a map of K8s version to app version, expanding out ranges to single versions\nfunc (k Kompat) expand() map[string][]string {\n\tk8sToApp := map[string][]string{}\n\tfor _, e := range k.Compatibility {\n\t\tfor _, kv := range k8sVersions(e.MinK8sVersion, e.MaxK8sVersion) {\n\t\t\tk8sToApp[kv] = append(k8sToApp[kv], e.AppVersion)\n\t\t}\n\t}\n\treturn k8sToApp\n}\n\n// Helper functions\n\nfunc k8sVersions(min string, max string) []string {\n\tvar versions []string\n\tmajor := strings.Split(min, \".\")[0]\n\tminMinor := lo.Must(strconv.Atoi(strings.Split(min, \".\")[1]))\n\tmaxMinor := lo.Must(strconv.Atoi(strings.Split(max, \".\")[1]))\n\tfor i := minMinor; i <= maxMinor; i++ {\n\t\tversions = append(versions, fmt.Sprintf(\"%s.%d\", major, i))\n\t}\n\treturn versions\n}\n\nfunc toURL(str string) (string, bool) {\n\tisURL := false\n\tfor _, t := range []string{\".com\", \".net\", \"http\"} {\n\t\tif strings.Contains(str, t) {\n\t\t\tisURL = true\n\t\t\tbreak\n\t\t}\n\t}\n\tif !isURL {\n\t\treturn \"\", false\n\t}\n\tif !strings.HasPrefix(str, \"http\") {\n\t\tstr = fmt.Sprintf(\"%s%s\", \"https://\", str)\n\t}\n\turl, err := url.Parse(str)\n\tif err != nil {\n\t\treturn \"\", false\n\t}\n\treturn url.String(), true\n}\n\nfunc readFromURL(url string) ([]byte, error) {\n\tif !strings.HasSuffix(url, \".yaml\") {\n\t\tif strings.Contains(url, \"github.com\") {\n\t\t\turl = fmt.Sprintf(\"%s/%s/%s\", url, DefaultGithubBranch, DefaultFileName)\n\t\t\turl = strings.Replace(url, \"github.com\", \"raw.githubusercontent.com\", 1)\n\t\t}\n\t}\n\tresp, err := http.Get(url) //nolint:gosec\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer resp.Body.Close()\n\tcontents, err := io.ReadAll(resp.Body)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn contents, nil\n}\n\nfunc readFromFile(file string) ([]byte, error) {\n\tvar err error\n\tfile, err = homedir.Expand(file)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tcontents, err := os.ReadFile(file)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn contents, nil\n}\n\n// semverRange will sort the versions and output in a pretty range string in the format of \"1.21 - 1.27\"\n// if allSemvers is passed, then semverRange will check if the max version is equal to the max in allSemvers\n// if it is then you can get prettier strings like \"1.21+\"\nfunc semverRange(semvers []string, allSemvers ...string) string {\n\tif len(semvers) == 0 {\n\t\treturn \"\"\n\t}\n\tif len(semvers) == 1 {\n\t\treturn semvers[0]\n\t}\n\tsortSemvers(semvers)\n\tif len(allSemvers) != 0 {\n\t\tallSems := allSemvers\n\t\tsortSemvers(allSems)\n\t\tif allSems[len(allSems)-1] == semvers[len(semvers)-1] {\n\t\t\treturn fmt.Sprintf(\"\\\\>= %s\", strings.ReplaceAll(semvers[0], \".x\", \"\"))\n\t\t}\n\t}\n\treturn fmt.Sprintf(\"\\\\>= %s \\\\<= %s\", strings.ReplaceAll(semvers[0], \".x\", \"\"), strings.ReplaceAll(semvers[len(semvers)-1], \".x\", \"\"))\n}\n\nfunc sortSemvers(semvers []string) {\n\tsort.Slice(semvers, func(i, j int) bool {\n\t\treturn semver.MustParse(strings.ReplaceAll(semvers[i], \".x\", \"\")).LessThan(semver.MustParse(strings.ReplaceAll(semvers[j], \".x\", \"\")))\n\t})\n}\n"
  },
  {
    "path": "website/.gitignore",
    "content": ".hugo_build.lock\nnode_modules\nresources\npublic\n"
  },
  {
    "path": "website/.node-version",
    "content": "18\n"
  },
  {
    "path": "website/README.md",
    "content": "## Contributing\n\nPlease review website/content/en/docs/contributing/documentation-updates.md for details on how to make updates to the documentation."
  },
  {
    "path": "website/archetypes/default.md",
    "content": "---\ntitle: \"{{ replace .Name \"-\" \" \" | title }}\"\ndate: {{ .Date }}\ndraft: true\n---\n\n"
  },
  {
    "path": "website/assets/js/search.js",
    "content": "/*\nCopyright 2018 Google LLC\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n    https://www.apache.org/licenses/LICENSE-2.0\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n(function ($) {\n    \"use strict\";\n  \n    var Search = {\n      init: function () {\n        $(document).ready(function () {\n          // Fill the search input form with the current search keywords\n          const searchKeywords = new URLSearchParams(location.search).get('q');\n          if (searchKeywords !== null && searchKeywords !== '') {\n            const searchInput = document.querySelector('.td-search-input');\n            searchInput.focus();\n            searchInput.value = searchKeywords;\n          }\n  \n          // Set a keydown event\n          $(document).on(\"keypress\", \".td-search-input\", function (e) {\n            if (e.keyCode !== 13) {\n              return;\n            }\n\n            var query = $(this).val();\n            document.location = \"{{ 'Search/' | absURL }}?q=\" + query;\n\n            return false;\n          });\n        });\n      },\n    };\n  \n    Search.init();\n  })(jQuery);"
  },
  {
    "path": "website/assets/jsconfig.json",
    "content": "{\n \"compilerOptions\": {\n  \"baseUrl\": \".\",\n  \"paths\": {\n   \"*\": [\n    \"*\"\n   ]\n  }\n }\n}"
  },
  {
    "path": "website/assets/scss/_search.scss",
    "content": "// Search\n// This file is a copy of https://github.com/google/docsy/blob/v0.6.0/assets/scss/_search.scss\n// with an edit to the width of the \"td-search\" class to ensure that the search bar is rendered correctly\n\n.td-search {\n    background: transparent;\n    position: relative;\n    width: 100%; // This line was overriden from Docsy v0.6.0 to make sure text isn't truncated\n\n    // Search icon\n    &__icon {\n        // Vertically center the content.\n        display: flex;\n        align-items: center;\n        height: 100%;\n\n        // Position this on the left of the input.\n        position: absolute;\n        left: 0.75em;\n\n        // Click-through to the underlying input.\n        pointer-events: none;\n\n        &:before {\n            @extend .fa;\n            content: fa-content($fa-var-search);\n        }\n\n        // Styling adjustments for the navbar\n        @at-root {\n            .td-navbar & {\n                color: $navbar-dark-color;\n            }\n        }\n    }\n\n    // Search input element\n    &__input {\n        width: 100%;\n        text-indent: 1.25em;\n\n        @if $enable-rounded {\n            border-radius: 1rem;\n        }\n\n        &:not(:focus) {\n            background: transparent;\n        }\n\n        &.form-control:focus {\n            border-color: lighten($primary, 60%);\n            box-shadow: 0 0 0 2px lighten($primary, 30%);\n            color: inherit;\n        }\n\n        // Styling adjustments for the navbar\n        @at-root {\n            .td-navbar & {\n                border: none;\n                color: $navbar-dark-color;\n\n                @include placeholder {\n                    color: $navbar-dark-color;\n                }\n            }\n        }\n\n    }\n\n    // Hide icon on focus\n    &:focus-within {\n\n        .td-search__icon {\n            display: none;\n        }\n\n        .td-search-input {\n            text-indent: 0px;\n        }\n    }\n\n    &:not(:focus-within) {\n        color: $input-placeholder-color;\n    }\n}\n\n// Offline search\n\n.td-search--offline {\n\n    &:focus-within {\n        // Don't hide the search icon on focus: this gives better UX when user\n        // explores content of search-results popup and focus is lost.\n\n        .td-search__icon {\n            display: flex;\n            color: $input-placeholder-color;\n        }\n    }\n}\n\n.td-offline-search-results {\n    max-width: 90%;\n\n    .card {\n        margin-bottom: $spacer * .5;\n\n        .card-header {\n            font-weight: bold;\n        }\n    }\n\n    &__close-button {\n        // cursor: pointer;\n        float: right;\n\n        &:after {\n            @extend .fas;\n            content: fa-content($fa-var-times);\n        }\n    }\n}"
  },
  {
    "path": "website/assets/scss/_variables_project.scss",
    "content": "/*\n\nAdd styles or override variables from the theme here.\n\n*/\n\n// Color palette\n$primary: #5c64ab;\n\n$dark: #232F3E;\n$light: #f8f9fa;\n\n// Global styles\n$enable-gradients: false;\n$enable-rounded: false;\n$enable-shadows: false;\n$enable-responsive-font-sizes: true;\n\n// Typography\n// Primary font\n$google_font_name: \"Poppins\";\n$google_font_family: \"Poppins:300,300i,400,400i,600,600i\";\n$font-weight-body-text: 300 !default;\n\n// Landing page styles\n// Navigation\nnav.navbar-dark {\n  a.navbar-brand span {\n    text-transform: none !important;\n  }\n\n  .navbar-nav a.nav-link {\n    color: white;\n    text-shadow: none;\n\n    &:hover,\n    &:active {\n      color: rgba(255, 255, 255, 0.8)\n    }\n  }\n}\n\n// Hero\n.hero {\n  .display-1 {\n    font-weight: 700;\n    font-size: 3.5rem;\n    @media (min-width: 768px) {\n      font-size: 6rem;\n    }\n  }\n}\n\n// Features\n.feature {\n  .h1 {\n    font-size: 8rem;\n  }\n\n  .h3 {\n    font-weight: bold;\n  }\n\n  code.provisioner {\n    color: $light;\n  }\n}"
  },
  {
    "path": "website/content/en/_index.html",
    "content": "---\ntitle: \"Karpenter\"\nlinkTitle: \"Home\"\nexclude_search: true\n---\n\n{{< blocks/cover image_anchor=\"top\" height=\"max\" color=\"primary\" >}}\n<div class=\"mx-auto hero\">\n  <h1 class=\"display-1 mt-5\">Karpenter</h1>\n  <h3 class=\"display-4 font-weight-light mt-5\">Just-in-time Nodes for Any Kubernetes Cluster</h3>\n  <div class=\"mt-5\">\n    <a class=\"btn btn-lg btn-dark col-sm-3 mb-3 font-weight-bold get-started\" href=\"docs\">\n      Get Started\n    </a>\n  </div>\n</div>\n{{< /blocks/cover >}}\n\n{{< blocks/lead color=\"grey-100\" height=\"med\">}}\n\n  <h2 class=\"mx-auto mt-5 col-sm-9 font-weight-bolder\">\n    Karpenter simplifies Kubernetes infrastructure with the right nodes at the right time.\n  </h2>\n  <p class=\"mx-auto mt-5 col-sm-10 h4 font-weight-light\">\n    Karpenter automatically launches just the right compute resources to handle your cluster's applications. It is designed to let you take full advantage of the cloud with fast and simple compute provisioning for Kubernetes clusters.\n  </p>\n{{< /blocks/lead >}}\n\n{{< blocks/section color=\"primary\" >}}\n  {{< blocks/feature title=\"Improve application availability\" icon=\"fa-globe\" feature_class=\"feature\" >}}\n    <p class=\"mt-3 font-weight-light h5\">Karpenter responds quickly and automatically to changes in application load, scheduling, and resource requirements, placing new workloads onto a variety of available compute resource capacity.</p>\n  {{< /blocks/feature >}}\n\n  {{< blocks/feature title=\"Lower compute costs\" icon=\"fa-hand-holding-usd\" feature_class=\"feature\" >}}\n    <p class=\"mt-3 font-weight-light h5\">Karpenter lowers cluster compute costs by looking for opportunities to remove under-utilized nodes, replace expensive nodes with cheaper alternatives, and consolidate workloads onto more efficient compute resources.</p>\n  {{< /blocks/feature >}}\n\n  {{< blocks/feature title=\"Minimize operational overhead\" icon=\"fa-wrench\" feature_class=\"feature\" >}}\n    <p class=\"mt-3 font-weight-light h5\">Karpenter comes with a set of opinionated defaults in a single, declarative <code class=\"font-weight-bold provisioner\">NodePool</code> resource which can easily be customized.</p>\n    <p class=\"mt-3 font-weight-light h5\"><strong>No additional configuration required!</strong></p>\n  {{< /blocks/feature >}}\n{{< /blocks/section >}}\n\n{{< blocks/section color=\"dark\" type=\"section\" >}}\n  <h2 class=\"mx-auto display-2 font-weight-bolder\">How It Works</h2>\n  <img class=\"mx-auto col-sm-10 d-none d-md-block\" src=\"karpenter-overview.png\">\n  <div class=\"mx-auto col-sm-8 text-center\">\n    <p class=\"lead mt-5\">\n      Karpenter observes the aggregate resource requests of unscheduled pods and makes decisions to launch and terminate nodes to minimize scheduling latencies and infrastructure cost.\n    </p>\n  </div>\n{{< /blocks/section >}}\n\n{{< blocks/lead color=\"grey-100\" type=\"section\" >}}\n  <h2 class=\"mx-auto mt-2 col-sm-9 font-weight-bolder\">\n    Karpenter is Open Source Software\n  </h2>\n  <p class=\"mx-auto mt-5 col-sm-10 lead\">\n    Karpenter is licensed under the permissive <a href=\"https://github.com/aws/karpenter/blob/main/LICENSE\">Apache License 2.0</a>.\n    It is designed to work with any Kubernetes cluster running in any environment, including all major cloud providers and on-premises environments.\n  </p>\n  <p class=\"mx-auto mt-5 col-sm-10 lead\">\n    Have an idea for a feature or found something that could work better?\n    Create a <a href=\"https://github.com/aws/karpenter/issues/new/choose\">GitHub issue</a> and tell us about it.\n  </p>\n  <a class=\"btn btn-lg btn-dark col-sm-3 mt-3 mr-sm-3 font-weight-bold\" href=\"https://github.com/aws/karpenter\">\n    <i class=\"fab fa-github pr-3\"></i> Get involved\n  </a>\n{{< /blocks/lead >}}\n"
  },
  {
    "path": "website/content/en/docs/_index.md",
    "content": "---\ntitle: \"Documentation\"\nlinkTitle: \"Docs\"\nweight: 20\ncascade:\n  type: docs\n  tags:\n    - preview\n---\nKarpenter is an open-source node lifecycle management project built for Kubernetes.\nAdding Karpenter to a Kubernetes cluster can dramatically improve the efficiency and cost of running workloads on that cluster.\nKarpenter works by:\n\n* **Watching** for pods that the Kubernetes scheduler has marked as unschedulable\n* **Evaluating** scheduling constraints (resource requests, nodeselectors, affinities, tolerations, and topology spread constraints) requested by the pods\n* **Provisioning** nodes that meet the requirements of the pods\n* **Disrupting** the nodes when the nodes are no longer needed\n\nAs someone using Karpenter, once your Kubernetes cluster and the Karpenter controller are up and running (see [Getting Started]({{<ref \"./getting-started\" >}})), you can:\n\n* **Set up NodePools**: By applying a NodePool to Karpenter, you can configure constraints on node provisioning and set values for node expiry, node consolidation, or Kubelet configuration values.\n  NodePool-level constraints related to Kubernetes and your cloud provider (AWS, for example) include:\n\n  - 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.\n  - Labels (`labels`): Apply arbitrary key-value pairs to nodes that can be matched by pods.\n  - Requirements (`requirements`): Set acceptable (`In`) and unacceptable (`NotIn`) Kubernetes and Karpenter values for node provisioning based on [Well-Known Labels](https://kubernetes.io/docs/reference/labels-annotations-taints/) and [cloud-specific settings]({{<ref \"./concepts/nodeclasses\" >}}). 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]({{<ref \"./concepts/nodepools/#capacity-type\" >}}) (such as AWS spot or on-demand).\n  - 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.\n\n* **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:\n\n  - 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.\n  - 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.\n  - 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.\n  - 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.\n  - 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.\n  - 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.\n  - 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.\n\nLearn more about Karpenter and how to get started below.\n"
  },
  {
    "path": "website/content/en/docs/concepts/_index.md",
    "content": "---\ntitle: \"Concepts\"\nlinkTitle: \"Concepts\"\nweight: 20\ndescription: >\n  Understand key concepts of Karpenter\n---\n\nUsers fall under two basic roles: [Kubernetes cluster administrators]({{<ref \"#cluster-administrator\" >}}) and [application developers]({{<ref \"#application-developer\" >}}). This document describes Karpenter concepts through the lens of those two types of users.\n\n## Cluster Administrator\n\nAs a Kubernetes cluster administrator, you can engage with Karpenter to:\n\n* Install Karpenter\n* Configure NodePools to set constraints and other features for managing nodes\n* Disrupting nodes\n\nConcepts associated with this role are described below.\n\n\n### Installing Karpenter\n\nKarpenter 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.\n\n[Getting Started with Karpenter]({{<ref \"../getting-started/getting-started-with-karpenter\" >}}) describes the process of installing Karpenter. 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.\n\nOnce privileges are in place, Karpenter is deployed with a Helm chart.\n\n### Configuring NodePools\n\nKarpenter'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 [NodePools]({{<ref \"nodepools\" >}}) that define how Karpenter manages unschedulable pods and configures nodes. You will also define behaviors for your NodePools, capturing details like how Karpenter handles disruption of nodes and setting limits and weights for each NodePool.\n\nHere are some things to know about Karpenter's NodePools:\n\n* **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.\n\n* [**Defining Constraints**]({{<ref \"nodepools\" >}}): Karpenter defines a Custom Resource called a NodePool to specify configuration. Each NodePool manages a distinct set of nodes, but pods can be scheduled to any NodePool that supports its scheduling constraints. A NodePool defines constraints that determine which nodes can be provisioned and specifies the attributes these nodes will have. See the [NodePools Documentation]({{<ref \"nodepools\" >}}) docs for a description of configuration and NodePool examples.\n\n* [**Defining Disruption**]({{<ref \"disruption\" >}}): A NodePool can also include values to indicate when nodes should be disrupted. This includes configuration around concepts like [Consolidation]({{<ref \"disruption#consolidation\" >}}), [Drift]({{<ref \"disruption#drift\" >}}), and [Expiration]({{<ref \"disruption#automated-methods\" >}}).\n\n* **Well-known labels**: The NodePool 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.\n\n* **Multiple NodePools**: Multiple NodePools 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.\n\nAlthough most use cases are addressed with a single NodePool for multiple teams, multiple NodePools are useful to isolate nodes for billing, use different node constraints (such as no GPUs for a team), or use different disruption settings.\n\n### Disrupting nodes\n\nKarpenter deletes nodes when they are no longer needed.\n\n* [**Finalizer**]({{<ref \"disruption#manual-methods\" >}}): Karpenter places a finalizer bit on each node it creates.\nWhen 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.\nKarpenter handles all clean-up work needed to properly delete the node.\n* [**Expiration**]({{<ref \"disruption\" >}}): Karpenter will mark nodes as expired and disrupt them after they have lived a set number of seconds, based on the NodePool's `spec.template.spec.expireAfter` value. You can use node expiry to periodically recycle nodes due to security concerns.\n* [**Consolidation**]({{<ref \"disruption#consolidation\" >}}): Karpenter works to actively reduce cluster cost by identifying when:\n  * Nodes can be removed because the node is empty\n  * Nodes can be removed as their workloads will run on other nodes in the cluster.\n  * Nodes can be replaced with cheaper variants due to a change in the workloads.\n* [**Drift**]({{<ref \"disruption#drift\" >}}): Karpenter will mark nodes as drifted and disrupt nodes that have drifted from their desired specification. See [Drift]({{<ref \"#drift\" >}}) to see which fields are considered.\n* [**Interruption**]({{<ref \"disruption#interruption\" >}}): Karpenter will watch for upcoming 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.\n\nFor more details on how Karpenter deletes nodes, see the [Disruption Documentation]({{<ref \"disruption\" >}}).\n\n### Scheduling\n\nKarpenter 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.\n\nOnce Karpenter brings up a node, that node is available for the Kubernetes scheduler to schedule pods on it as well.\n\n#### Constraints\n\nThe concept of layered constraints is key to using Karpenter. With no constraints defined in NodePools 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.\n\nAn application developer can tighten the constraints defined in a NodePool 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.\n\n### Cloud Provider\n\nKarpenter 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.\n\nWhile using Kubernetes well-known labels, the NodePool can set some values that are specific to the cloud provider. 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`).\n\n### Kubernetes Cluster Autoscaler\n\nLike 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:\n\n* **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.\n\n* **Quick 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.\n\n## Application Developer\n\nAs 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).\n\nLayered *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).\nThe 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.\n\nThe 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.\n\nAs long as the requests are not outside the NodePool'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.\n\nSo, what constraints can you use as an application developer deploying pods that could be managed by Karpenter?\n\nKubernetes features that Karpenter supports for scheduling pods include nodeAffinity and [nodeSelector](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#nodeselector).\nIt 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).\n\nFrom 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:\n\n* **kubernetes.io/arch**: For example, kubernetes.io/arch=amd64\n* **node.kubernetes.io/instance-type**: For example, node.kubernetes.io/instance-type=m3.medium\n* **topology.kubernetes.io/zone**: For example, topology.kubernetes.io/zone=us-east-1c\n\nFor more on how, as a developer, you can add constraints to your pod deployment, see [Scheduling](./scheduling/) for details.\n"
  },
  {
    "path": "website/content/en/docs/concepts/disruption.md",
    "content": "---\ntitle: \"Disruption\"\nlinkTitle: \"Disruption\"\nweight: 50\ndescription: >\n  Understand different ways Karpenter disrupts nodes\n---\n\n## Control Flow\n\nKarpenter sets a Kubernetes [finalizer](https://kubernetes.io/docs/concepts/overview/working-with-objects/finalizers/) on each node and node claim it provisions.\nThe finalizer blocks deletion of the node object while the Termination Controller taints and drains the node, before removing the underlying NodeClaim. Disruption is triggered by the Disruption Controller, by the user through manual disruption, or through an external system that sends a delete request to the node object.\n\n### Disruption Controller\n\nKarpenter automatically discovers disruptable nodes and spins up replacements when needed. Karpenter disrupts nodes by executing one [automated method](#automated-graceful-methods) at a time, first doing Drift then Consolidation. Each method varies slightly, but they all follow the standard disruption process. Karpenter uses [disruption budgets]({{<ref \"#nodepool-disruption-budgets\" >}}) to control the speed at which these disruptions begin.\n1. Identify a list of prioritized candidates for the disruption method.\n   * If there are [pods that cannot be evicted](#pod-level-controls) on the node, Karpenter will ignore the node and try disrupting it later.\n   * If there are no disruptable nodes, continue to the next disruption method.\n2. For each disruptable node:\n   1. Check if disrupting it would violate its NodePool's disruption budget.\n   2. Execute a scheduling simulation with the pods on the node to find if any replacement nodes are needed.\n3. Add the `karpenter.sh/disrupted:NoSchedule` taint to the node(s) to prevent pods from scheduling to it.\n4. Pre-spin any replacement nodes needed as calculated in Step (2), and wait for them to become ready.\n   * If a replacement node fails to initialize, un-taint the node(s), and restart from Step (1), starting at the first disruption method again.\n5. Delete the node(s) and wait for the Termination Controller to gracefully shutdown the node(s).\n6. Once the Termination Controller terminates the node, go back to Step (1), starting at the first disruption method again.\n\n### Termination Controller\n\nWhen a Karpenter node is deleted, the Karpenter finalizer will block deletion and the APIServer will set the `DeletionTimestamp` on the node, allowing Karpenter to gracefully shutdown the node, modeled after [Kubernetes Graceful Node Shutdown](https://kubernetes.io/docs/concepts/cluster-administration/node-shutdown/#graceful-node-shutdown). Karpenter's graceful shutdown process will:\n1. Add the `karpenter.sh/disrupted:NoSchedule` taint to the node to prevent pods from scheduling to it.\n2. Begin evicting the pods on the node with the [Kubernetes Eviction API](https://kubernetes.io/docs/concepts/scheduling-eviction/api-eviction/) to respect PDBs, while ignoring all [static pods](https://kubernetes.io/docs/tasks/configure-pod-container/static-pod/), pods tolerating the `karpenter.sh/disrupted:NoSchedule` taint, and succeeded/failed pods. Wait for the node to be fully drained before proceeding to Step (3).\n   * While waiting, if the underlying NodeClaim for the node no longer exists, remove the finalizer to allow the APIServer to delete the node, completing termination.\n3. Verify that all [VolumeAttachment](https://kubernetes.io/docs/reference/kubernetes-api/config-and-storage-resources/volume-attachment-v1/) resources for drain-able pods are deleted.\n4. Terminate the NodeClaim in the Cloud Provider.\n5. Remove the finalizer from the node to allow the APIServer to delete the node, completing termination.\n\n## Manual Methods\n* **Node Deletion**: You can use `kubectl` to manually remove a single Karpenter node or nodeclaim. Since each Karpenter node is owned by a NodeClaim, deleting either the node or the nodeclaim will cause cascade deletion of the other:\n\n    ```bash\n    # Delete a specific nodeclaim\n    kubectl delete nodeclaim $NODECLAIM_NAME\n\n    # Delete a specific node\n    kubectl delete node $NODE_NAME\n\n    # Delete all nodeclaims\n    kubectl delete nodeclaims --all\n\n    # Delete all nodes owned by any nodepool\n    kubectl delete nodes -l karpenter.sh/nodepool\n\n    # Delete all nodeclaims owned by a specific nodepoolXS\n    kubectl delete nodeclaims -l karpenter.sh/nodepool=$NODEPOOL_NAME\n    ```\n* **NodePool Deletion**: NodeClaims are owned by the NodePool through an [owner reference](https://kubernetes.io/docs/concepts/overview/working-with-objects/owners-dependents/#owner-references-in-object-specifications) that launched them. Karpenter will gracefully terminate nodes through cascading deletion when the owning NodePool is deleted.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nBy adding the finalizer, Karpenter improves the default Kubernetes process of node deletion.\nWhen 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.\n{{% /alert %}}\n\n## Automated Graceful Methods\n\nAutomated graceful methods, can be rate limited through [NodePool Disruption Budgets]({{<ref \"#nodepool-disruption-budgets\" >}})\n\n* [**Consolidation**]({{<ref \"#consolidation\" >}}): Karpenter works to actively reduce cluster cost by identifying when:\n  * Nodes can be removed because the node is empty\n  * Nodes can be removed as their workloads will run on other nodes in the cluster.\n  * Nodes can be replaced with lower priced variants due to a change in the workloads.\n* [**Drift**]({{<ref \"#drift\" >}}): Karpenter will mark nodes as drifted and disrupt nodes that have drifted from their desired specification. See [Drift]({{<ref \"#drift\" >}}) to see which fields are considered.\n\n{{% alert title=\"Defaults\" color=\"secondary\" %}}\nDisruption is configured through the NodePool's disruption block by the `consolidationPolicy`, and `consolidateAfter` fields. Karpenter will configure these fields with the following values by default if they are not set:\n\n```yaml\nspec:\n  disruption:\n    consolidationPolicy: WhenEmptyOrUnderutilized\n    consolidateAfter: 0s\n```\n{{% /alert %}}\n\n### Consolidation\n\nConsolidation is configured by `consolidationPolicy` and `consolidateAfter`. `consolidationPolicy` determines the pre-conditions for nodes to be considered consolidatable, and are `WhenEmpty` or `WhenEmptyOrUnderutilized`. If a node has no running non-daemon pods, it is considered empty.  `consolidateAfter` can be set to indicate how long Karpenter should wait after a pod schedules or is removed from the node before considering the node consolidatable. With `WhenEmptyOrUnderutilized`, Karpenter will consider a node consolidatable when its `consolidateAfter` has been reached, empty or not.\n\nKarpenter has two mechanisms for cluster consolidation:\n1. **Deletion** - A node is eligible for deletion if all of its pods can run on free capacity of other nodes in the cluster.\n2. **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 lower price replacement node.\n\nConsolidation has three mechanisms that are performed in order to attempt to identify a consolidation action:\n1. **Empty Node Consolidation** - Delete any entirely empty nodes in parallel\n2. **Multi Node Consolidation** - Try to delete two or more nodes in parallel, possibly launching a single replacement whose price is lower than that of all nodes being removed\n3. **Single Node Consolidation** - Try to delete any single node, possibly launching a single replacement whose price is lower than that of the node being removed\n\nIt'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.\n\nWhen there are multiple nodes that could be potentially deleted or replaced, Karpenter chooses to consolidate the node that overall disrupts your workloads the least by preferring to terminate:\n\n* Nodes running fewer pods\n* Nodes that will expire soon\n* Nodes with lower priority pods\n\nIf 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.\n\n```bash\nEvents:\n  Type     Reason                   Age                From             Message\n  ----     ------                   ----               ----             -------\n  Normal   Unconsolidatable         66s                karpenter        pdb default/inflate-pdb prevents pod evictions\n  Normal   Unconsolidatable         33s (x3 over 30m)  karpenter        can't replace with a lower-priced node\n```\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nUsing 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 disrupt 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`).\n{{% /alert %}}\n\n#### Spot consolidation\nFor spot nodes, Karpenter has deletion consolidation enabled by default. If you would like to enable replacement with spot consolidation, you need to enable the feature through the [`SpotToSpotConsolidation` feature flag]({{<ref \"../reference/settings#features-gates\" >}}).\n\nLower priced spot instance types are selected with the [`price-capacity-optimized` strategy](https://aws.amazon.com/blogs/compute/introducing-price-capacity-optimized-allocation-strategy-for-ec2-spot-instances/). Sometimes, the lowest priced spot instance type is not launched due to the likelihood of interruption. As a result, Karpenter uses the number of available instance type options with a price lower than the currently launched spot instance as a heuristic for evaluating whether it should launch a replacement for the current spot node.\n\nWe refer to the number of instances that Karpenter has within its launch decision as a launch's \"instance type flexibility.\" When Karpenter is considering performing a spot-to-spot consolidation replacement, it will check whether replacing the instance type will lead to enough instance type flexibility in the subsequent launch request. As a result, we get the following properties when evaluating for consolidation:\n1) We shouldn't continually consolidate down to the lowest priced spot instance which might have very high rates of interruption.\n2) We launch with enough instance types that there’s high likelihood that our replacement instance has comparable availability to our current one.\n\nKarpenter requires a minimum instance type flexibility of 15 instance types when performing single node spot-to-spot consolidations (1 node to 1 node). It does not have the same instance type flexibility requirement for multi-node spot-to-spot consolidations (many nodes to 1 node) since doing so without requiring flexibility won't lead to \"race to the bottom\" scenarios.\n\n\n### Drift\nDrift handles changes to the NodePool/EC2NodeClass. For Drift, values in the NodePool/EC2NodeClass are reflected in the NodeClaimTemplateSpec/EC2NodeClassSpec in the same way that they’re set. A NodeClaim will be detected as drifted if the values in its owning NodePool/EC2NodeClass do not match the values in the NodeClaim. Similar to the upstream `deployment.spec.template` relationship to pods, Karpenter will annotate the owning NodePool and EC2NodeClass with a hash of the NodeClaimTemplateSpec to check for drift. Some special cases will be discovered either from Karpenter or through the CloudProvider interface, triggered by NodeClaim/Instance/NodePool/EC2NodeClass changes.\n\n#### Special Cases on Drift\nIn special cases, drift can correspond to multiple values and must be handled differently. Drift on resolved fields can create cases where drift occurs without changes to CRDs, or where CRD changes do not result in drift. For example, if a NodeClaim has `node.kubernetes.io/instance-type: m5.large`, and requirements change from `node.kubernetes.io/instance-type In [m5.large]` to `node.kubernetes.io/instance-type In [m5.large, m5.2xlarge]`, the NodeClaim will not be drifted because its value is still compatible with the new requirements. Conversely, if a NodeClaim is using a NodeClaim image `ami: ami-abc`, but a new image is published, Karpenter's `EC2NodeClass.spec.amiSelectorTerms` will discover that the new correct value is `ami: ami-xyz`, and detect the NodeClaim as drifted.\n\n##### NodePool\n| Fields         |\n|----------------|\n| spec.template.spec.requirements   |\n\n##### EC2NodeClass\n| Fields                        |\n|-------------------------------|\n| spec.subnetSelectorTerms      |\n| spec.securityGroupSelectorTerms  |\n| spec.amiSelectorTerms  |\n\n#### Behavioral Fields\nBehavioral Fields are treated as over-arching settings on the NodePool to dictate how Karpenter behaves. These fields don’t correspond to settings on the NodeClaim or instance. They’re set by the user to control Karpenter’s Provisioning and disruption logic. Since these don’t map to a desired state of NodeClaims, __behavioral fields are not considered for Drift__.\n\n##### NodePool\n| Fields              |\n|---------------------|\n| spec.weight         |\n| spec.limits         |\n| spec.disruption.*   |\n\nRead the [Drift Design](https://github.com/aws/karpenter-core/blob/main/designs/drift.md) for more.\n\n\nKarpenter will add the `Drifted` status condition on NodeClaims if the NodeClaim is drifted from its owning NodePool. Karpenter will also remove the `Drifted` status condition if either:\n1. The `Drift` feature gate is not enabled but the NodeClaim is drifted, Karpenter will remove the status condition.\n2. The NodeClaim isn't drifted, but has the status condition, Karpenter will remove it.\n\n## Automated Forceful Methods\n\nAutomated forceful methods will begin draining nodes as soon as the condition is met.\nUnlike the graceful methods mentioned above, these methods can not be rate-limited using [NodePool Disruption Budgets](#nodepool-disruption-budgets), and do not wait for a pre-spin replacement node to be healthy for the pods to reschedule.\nPod disruption budgets may be used to rate-limit application disruption.\n\n### Expiration\n\nExpiration is a forceful disruption method that begins draining a node immediately once its lifetime exceeds the duration set on the owning NodeClaim's `spec.expireAfter` field.\nChanges to `spec.template.spec.expireAfter` on the owning NodePool will not update the field for existing NodeClaims - it will induce NodeClaim drift and the replacements will have the updated value.\nExpiration can be used, in conjunction with [`terminationGracePeriod`](#terminationgraceperiod), to enforce a maximum Node lifetime.\nBy default, `expireAfter` is set to `720h` (30 days).\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nThe `expireAfter` field defines the **maximum** node lifetime (upper bound), not a guaranteed minimum.\nNodes can be disrupted earlier than the `expireAfter` duration by other disruption methods such as [Drift]({{<ref \"#drift\" >}}), [Consolidation]({{<ref \"#consolidation\" >}}), or [Emptiness]({{<ref \"#consolidation\" >}}) if their [disruption budgets]({{<ref \"#nodepool-disruption-budgets\" >}}) allow.\nFor example, a NodePool with `expireAfter: 720h` (30 days) can still have nodes terminated earlier if the node becomes drifted due to an AMI update and the disruption budget permits drift-based disruptions.\n\nTo enforce a true maximum node lifetime that cannot be shortened by other disruption methods, use `expireAfter` in combination with carefully configured disruption budgets that limit or prevent other disruption reasons.\n{{% /alert %}}\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nMisconfigured PDBs and pods with the `karpenter.sh/do-not-disrupt` annotation may block draining indefinitely.\nFor this reason, it is not recommended to set `expireAfter` without also setting `terminationGracePeriod` **if** your cluster has pods with the `karpenter.sh/do-not-disrupt` annotation.\nDoing so can result in partially drained nodes stuck in the cluster, driving up cluster cost and potentially requiring manual intervention to resolve.\n{{% /alert %}}\n\n### Interruption\n\nIf interruption-handling is enabled, Karpenter will watch for upcoming involuntary interruption events that would cause disruption to your workloads. These interruption events include:\n\n* Spot Interruption Warnings\n* Scheduled Change Health Events (Maintenance Events)\n* Instance Terminating Events\n* Instance Stopping Events\n\nWhen Karpenter detects one of these events will occur to your nodes, it automatically taints, 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.\n\nFor Spot interruptions, the NodePool will start a new node as soon as it sees the Spot interruption warning. Spot interruptions have a __2 minute notice__ before Amazon EC2 reclaims the instance. Once Karpenter has received this warning it will begin draining the node while in parallel provisioning a new node. Karpenter's average node startup time means that, generally, there is sufficient time for the new node to become ready before EC2 initiates termination for the spot instance.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nKarpenter publishes Kubernetes events to the node for all events listed above in addition to [__Spot Rebalance Recommendations__](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/rebalance-recommendations.html). Karpenter does not currently support taint, drain, and terminate logic for Spot Rebalance Recommendations.\n\nIf you require handling for Spot Rebalance Recommendations, you can use the [AWS Node Termination Handler (NTH)](https://github.com/aws/aws-node-termination-handler) alongside Karpenter; however, note that the AWS Node Termination Handler cordons and drains nodes on rebalance recommendations, potentially causing more node churn in the cluster than with interruptions alone. Further information can be found in the [Troubleshooting Guide]({{< ref \"../troubleshooting#aws-node-termination-handler-nth-interactions\" >}}).\n{{% /alert %}}\n\nKarpenter 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-karpenter/#create-the-karpenter-infrastructure-and-iam-roles).\n\nTo enable interruption handling, configure the `--interruption-queue` CLI argument with the name of the interruption queue provisioned to handle interruption events.\n\n### Node Auto Repair\n\n<i class=\"fa-solid fa-circle-info\"></i> <b>Feature State: </b> Karpenter v1.1.0 [alpha]({{<ref \"../reference/settings#feature-gates\" >}})\n\nNode Auto Repair is a feature that automatically identifies and replaces unhealthy nodes in your cluster, helping to maintain overall cluster health. Nodes can experience various types of failures affecting their hardware, file systems, or container environments. These failures may be surfaced through node conditions such as network unavailability, disk pressure, memory pressure, or other conditions reported by node diagnostic agents. When Karpenter detects these unhealthy conditions, it automatically replaces the affected nodes based on cloud provider-defined repair policies. Once a node has been in an unhealthy state beyond its configured toleration duration, Karpenter will forcefully terminate the node and its corresponding NodeClaim, bypassing the standard drain and grace period procedures to ensure swift replacement of problematic nodes. To prevent cascading failures, Karpenter includes safety mechanisms: it will not perform repairs if more than 20% of nodes in a NodePool are unhealthy, and for standalone NodeClaims, it evaluates this threshold against all nodes in the cluster. This ensures your cluster remains in a healthy state with minimal manual intervention, even in scenarios where normal node termination procedures might be impacted by the node's unhealthy state.\n\nTo enable Node Auto Repair:\n  1.  Ensure you have a [Node Monitoring Agent](https://docs.aws.amazon.com/en_us/eks/latest/userguide/node-health.html) deployed or any agent that will add status conditions to nodes that are supported (e.g., Node Problem Detector)\n  2.  Enable the feature flag: `NodeRepair=true`\n  3. Node AutoRepair will automatically terminate nodes when they have unhealthy status conditions based on your cloud provider's repair policies\n\n\nKarpenter monitors nodes for the following node status conditions when initiating repair actions:\n\n\n#### Kubelet Node Conditions\n\n|   Type  |    Status     | Toleration Duration |\n| ------  | ------------- | ------------------- |\n|  Ready  |     False     |     30 minutes      |\n|  Ready  |     Unknown   |     30 minutes      |\n\n#### Node Monitoring Agent Conditions\n\n|            Type            |    Status     | Toleration Duration |\n| ------------------------   | ------------| --------------------- |\n|  AcceleratedHardwareReady  |     False   |     10 minutes        |\n|  StorageReady              |     False   |     30 minutes        |\n|  NetworkingReady           |     False   |     30 minutes        |\n|  KernelReady               |     False   |     30 minutes        |\n|  ContainerRuntimeReady     |     False   |     30 minutes        |\n\nTo enable the NodeRepair feature flag, refer to the [Feature Gates]({{<ref \"../reference/settings#feature-gates\" >}}).\n\n## Controls\n\n### TerminationGracePeriod\n\nTo configure a maximum termination duration, `terminationGracePeriod` should be used.\nIt is configured through a NodePool's [`spec.template.spec.terminationGracePeriod`]({{<ref \"../concepts/nodepools/#spectemplatespecterminationgraceperiod\" >}}) field, and is persisted to created NodeClaims (`spec.terminationGracePeriod`).\nChanges to the [`spec.template.spec.terminationGracePeriod`]({{<ref \"../concepts/nodepools/#spectemplatespecterminationgraceperiod\" >}}) field on the NodePool will not result in a change for existing NodeClaims - it will induce NodeClaim drift and the replacements will have the updated `terminationGracePeriod`.\n\nOnce a node is disrupted, via either a [graceful](#automated-graceful-methods) or [forceful](#automated-forceful-methods) disruption method, Karpenter will begin draining the node.\nAt this point, the countdown for `terminationGracePeriod` begins.\nOnce the `terminationGracePeriod` elapses, remaining pods will be forcibly deleted and the underlying instance will be terminated.\nA node may be terminated before the `terminationGracePeriod` has elapsed if all disruptable pods have been drained.\n\nIn conjunction with `expireAfter`, `terminationGracePeriod` can be used to enforce an absolute maximum node lifetime.\nThe node will begin to drain once its `expireAfter` has elapsed, and it will be forcibly terminated once its `terminationGracePeriod` has elapsed, making the maximum node lifetime the sum of the two fields.\n\nAdditionally, configuring `terminationGracePeriod` changes the eligibility criteria for disruption via `Drift`.\nWhen configured, a node may be disrupted via drift even if there are pods with blocking PDBs or the `karpenter.sh/do-not-disrupt` annotation scheduled to it.\nThis enables cluster administrators to ensure crucial updates (e.g. AMI updates addressing CVEs) can't be blocked by misconfigured applications.\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nTo ensure that the `terminationGracePeriodSeconds` value for draining pods is respected, pods will be preemptively deleted before the Node's `terminationGracePeriod` has elapsed.\nThis includes pods with blocking [pod disruption budgets](https://kubernetes.io/docs/tasks/run-application/configure-pdb/) or the [`karpenter.sh/do-not-disrupt` annotation]({{<ref \"#pod-level-controls\" >}}).\n\nConsider the following example: a Node with a 1 hour `terminationGracePeriod` has been disrupted and begins to drain.\nA pod with the `karpenter.sh/do-not-disrupt` annotation and a 300 second (5 minute) `terminationGracePeriodsSeconds` is scheduled to it.\nIf the pod is still running 55 minutes after the Node begins to drain, the pod will be deleted to ensure its `terminationGracePeriodSeconds` value is respected.\n\nIf a pod's `terminationGracePeriodSeconds` value exceeds that of the Node it is scheduled to, Karpenter will prioritize the Node's `terminationGracePeriod`.\nThe pod will be deleted as soon as the Node begins to drain, and it will not receive it's full `terminationGracePeriodSeconds`.\n{{% /alert %}}\n\n### NodePool Disruption Budgets\n\nYou can rate limit Karpenter's disruption through the NodePool's `spec.disruption.budgets`. If undefined, Karpenter will default to one budget with `nodes: 10%`. Budgets will consider nodes that are actively being deleted for any reason, and will only block Karpenter from disrupting nodes voluntarily through drift, emptiness, and consolidation. Note that NodePool Disruption Budgets do not prevent Karpenter from terminating expired nodes.\n\n#### Reasons\nKarpenter allows specifying if a budget applies to any of `Drifted`, `Underutilized`, or `Empty`. When a budget has no reasons, it's assumed that it applies to all reasons. When calculating allowed disruptions for a given reason, Karpenter will take the minimum of the budgets that have listed the reason or have left reasons undefined.\n\n#### Nodes\nWhen calculating if a budget will block nodes from disruption, Karpenter lists the total number of nodes owned by a NodePool, subtracting out the nodes owned by that NodePool that are currently being deleted and nodes that are NotReady. If the number of nodes being deleted by Karpenter or any other processes is greater than the number of allowed disruptions, disruption for this node will not proceed.\n\nIf the budget is configured with a percentage value, such as `20%`, Karpenter will calculate the number of allowed disruptions as `allowed_disruptions = roundup(total * percentage) - total_deleting - total_notready`. If otherwise defined as a non-percentage value, Karpenter will simply use that number as a static ceiling `non_percentage_value - total_deleting - total_notready`. For multiple budgets in a NodePool, Karpenter will take the minimum value (most restrictive) of each of the budgets.\n\nFor example, the following NodePool with three budgets defines the following requirements:\n- The first budget will only allow 20% of nodes owned by that NodePool to be disrupted if it's empty or drifted. For instance, if there were 19 nodes owned by the NodePool, 4 empty or drifted nodes could be disrupted, rounding up from `19 * .2 = 3.8`.\n- The second budget acts as a ceiling to the previous budget, only allowing 5 disruptions when there are more than 25 nodes.\n- The last budget only blocks disruptions during the first 10 minutes of the day, where 0 disruptions are allowed, only applying to underutilized nodes.\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\nspec:\n  disruption:\n    consolidationPolicy: WhenEmptyOrUnderutilized\n    budgets:\n    - nodes: \"20%\"\n      reasons:\n      - \"Empty\"\n      - \"Drifted\"\n    - nodes: \"5\"\n    - nodes: \"0\"\n      schedule: \"@daily\"\n      duration: 10m\n      reasons:\n      - \"Underutilized\"\n```\n\n#### Schedule\nSchedule is a cronjob schedule. Generally, the cron syntax is five space-delimited values with options below, with additional special macros like `@yearly`, `@monthly`, `@weekly`, `@daily`, `@hourly`.\nFollow the [Kubernetes documentation](https://kubernetes.io/docs/concepts/workloads/controllers/cron-jobs/#writing-a-cronjob-spec) for more information on how to follow the cron syntax. Timezones are not currently supported. Schedules are always in UTC.\n\n```bash\n# ┌───────────── minute (0 - 59)\n# │ ┌───────────── hour (0 - 23)\n# │ │ ┌───────────── day of the month (1 - 31)\n# │ │ │ ┌───────────── month (1 - 12)\n# │ │ │ │ ┌───────────── day of the week (0 - 6) (Sunday to Saturday;\n# │ │ │ │ │                                   7 is also Sunday on some systems)\n# │ │ │ │ │                                   OR sun, mon, tue, wed, thu, fri, sat\n# │ │ │ │ │\n# * * * * *\n```\n\n#### Duration\nDuration allows compound durations with minutes and hours values such as `10h5m` or `30m` or `160h`. Since cron syntax does not accept denominations smaller than minutes, users can only define minutes or hours.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nDuration and Schedule must be defined together. When omitted, the budget is always active. When defined, the schedule determines a starting point where the budget will begin being enforced, and the duration determines how long from that starting point the budget will be enforced.\n{{% /alert %}}\n\n### Pod-Level Controls\n\nPods with blocking PDBs will not be evicted by the [Termination Controller]({{<ref \"#termination-controller\">}}) or be considered for voluntary disruption actions. When multiple pods on a node have different PDBs, none of the PDBs may be blocking for Karpenter to voluntary disrupt a node. This can create complex eviction scenarios:\n  - If a pod matches multiple PDBs (via label selectors), ALL of these PDBs must allow for disruption\n  - When different pods on the same node belong to different PDBs, ALL PDBs must simultaneously permit eviction\n  - A single blocking PDB can prevent the entire node from being voluntary disrupted\n\nFor example, consider a node with these pods and PDBs:\n- Pod A: Matches PDB-1 (maxUnavailable: 0) and PDB-2 (maxUnavailable: 1)\n- Pod B: Matches PDB-3 (minAvailable: 100%)\n- Pod C: No PDB\n\nIn this scenario, Karpenter cannot voluntary disrupt the node because:\n1. Pod A is blocked by PDB-1 even though PDB-2 would allow disruption\n2. Pod B is blocked by PDB-3's requirement for 100% availability\n\nAs seen in this example, the more PDBs there are affecting a Node, the more difficult it will be for Karpenter to find an opportunity to perform voluntary disruption actions.\n\nSecondly, you can block Karpenter from voluntarily disrupting and draining pods by adding the `karpenter.sh/do-not-disrupt: \"true\"` annotation to the pod.\nYou can treat this annotation as a single-pod, permanently blocking PDB.\nThis has the following consequences:\n- Nodes with `karpenter.sh/do-not-disrupt` pods will be excluded from [Consolidation]({{<ref \"#consolidation\" >}}), and conditionally excluded from [Drift]({{<ref \"#drift\" >}}).\n  - If the Node's owning NodeClaim has a [`terminationGracePeriod`]({{<ref \"#terminationgraceperiod\" >}}) configured, it will still be eligible for disruption via drift.\n- Like pods with a blocking PDB, pods with the `karpenter.sh/do-not-disrupt` annotation will **not** be gracefully evicted by the [Termination Controller]({{<ref \"#termination-controller\">}}).\n  Karpenter will not be able to complete termination of the node until one of the following conditions is met:\n  - All pods with the `karpenter.sh/do-not-disrupt` annotation are removed.\n  - All pods with the `karpenter.sh/do-not-disrupt` annotation have entered a [terminal phase](https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#pod-phase) (`Succeeded` or `Failed`).\n  - The owning NodeClaim's [`terminationGracePeriod`]({{<ref \"#terminationgraceperiod\" >}}) has elapsed.\n\nThis is useful for pods that you want to run from start to finish without disruption.\nExamples of pods that you might want to opt-out of disruption include an 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.\n\n```yaml\napiVersion: apps/v1\nkind: Deployment\nspec:\n  template:\n    metadata:\n      annotations:\n        karpenter.sh/do-not-disrupt: \"true\"\n```\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nThe `karpenter.sh/do-not-disrupt` annotation does **not** exclude nodes from the forceful disruption methods: [Expiration]({{<ref \"#expiration\" >}}), [Interruption]({{<ref \"#interruption\" >}}), [Node Repair](<ref \"#node-repair\" >), and manual deletion (e.g. `kubectl delete node ...`).\nWhile both interruption and node repair have implicit upper-bounds on termination time, expiration and manual termination do not.\nManual intervention may be required to unblock node termination, by removing pods with the `karpenter.sh/do-not-disrupt` annotation.\nFor this reason, it is not recommended to use the `karpenter.sh/do-not-disrupt` annotation with `expireAfter` **if** you have not also configured `terminationGracePeriod`.\n{{% /alert %}}\n\n### Node-Level Controls\n\nYou can block Karpenter from voluntarily choosing to disrupt certain nodes by setting the `karpenter.sh/do-not-disrupt: \"true\"` annotation on the node.\nThis will prevent voluntary disruption actions against the node.\n\n```yaml\napiVersion: v1\nkind: Node\nmetadata:\n  annotations:\n    karpenter.sh/do-not-disrupt: \"true\"\n```\n\n#### Example: Disable Disruption on a NodePool\n\nTo disable disruption for all nodes launched by a NodePool, you can configure its `.spec.disruption.budgets`. Setting a budget of zero nodes will prevent any of those nodes from being considered for voluntary disruption.\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\nspec:\n  disruption:\n    budgets:\n      - nodes: \"0\"\n```\n"
  },
  {
    "path": "website/content/en/docs/concepts/nodeclaims.md",
    "content": "---\ntitle: \"NodeClaims\"\nlinkTitle: \"NodeClaims\"\nweight: 30\ndescription: >\n  Understand NodeClaims\n---\n\nKarpenter uses NodeClaims to manage the lifecycle of Kubernetes Nodes with the underlying cloud provider.\nKarpenter will create and delete NodeClaims in response to the demands of Pods in the cluster.\nIt does this by evaluating the requirements of pending pods, finding a compatible [NodePool]({{< ref \"./nodepools\" >}}) and [NodeClass]({{< ref \"./nodeclasses\" >}}) pair, and creating a NodeClaim which meets both sets of requirements.\nAlthough NodeClaims are immutable resources managed by Karpenter, you can monitor NodeClaims to keep track of the status of your Nodes.\n\nIn addition to tracking the lifecycle of Nodes, NodeClaims serve as requests for capacity.\nKarpenter creates NodeClaims in response to provisioning and disruption needs (pre-spin). Whenever Karpenter\ncreates a NodeClaim, it asks the cloud provider to create the instance (launch), register and link the created node\nwith the NodeClaim (registration), and wait for the node and its resources to be ready (initialization).\n\nThis page describes how NodeClaims integrate throughout Karpenter and the cloud provider implementation.\n\nIf you want to learn more about the nodes being managed by Karpenter, you can either look directly at the NodeClaim or at the nodes they are associated with:\n\n* Checking NodeClaims:\nIf something goes wrong in the process of creating a node, you can look at the NodeClaim\nto see where the node creation process might have failed. `kubectl get nodeclaims` will show you the NodeClaims\nfor the cluster, and its linked node. Using `kubectl describe nodeclaim <nodeclaim>` will show the status of a particular NodeClaim.\nFor example, if the node is NotReady, you might see statuses indicating that the NodeClaim failed to launch, register, or initialize.\nThere will be logs emitted by the Karpenter controller to indicate this too.\n\n* Checking nodes:\nUse commands such as `kubectl get node` and  `kubectl describe node <nodename>` to see the actual resources,\nlabels, and other attributes associated with a particular node.\n\n## NodeClaim roles in node creation\n\nNodeClaims provide a critical role in the Karpenter workflow for provisioning capacity, and in node disruptions.\n\nThe following diagram illustrates how NodeClaims interact with other components during Karpenter-driven node creation.\n\n![nodeclaim-node-creation](/nodeclaims.png)\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nConfigure the `KARPENTER_NAMESPACE` environment variable to the namespace where you've installed Karpenter (`kube-system` is the default). Follow along with the Karpenter logs in your cluster and do the following:\n\n```bash\nexport KARPENTER_NAMESPACE=\"kube-system\"\nkubectl logs -f -n \"${KARPENTER_NAMESPACE}\" \\\n   -l app.kubernetes.io/name=karpenter\n```\nIn a separate terminal, start some pods that would require Karpenter to create nodes to handle those pods.\nFor example, start up some inflate pods as described in [Scale up deployment]({{< ref \"../getting-started/getting-started-with-karpenter/#6-scale-up-deployment\" >}}).\n{{% /alert %}}\n\nAs illustrated in the previous diagram, Karpenter interacts with NodeClaims and related components when creating a node:\n\n1. Watches for pods and monitors NodePools and NodeClasses:\n    * Checks the pod scheduling constraints and resource requests.\n    * Cross-references the requirements with the existing NodePools and NodeClasses, (e.g. zones, arch, os)\n\n   **Example log:**\n   ```json\n   {\n       \"level\": \"INFO\",\n       \"time\": \"2024-06-22T02:24:16.114Z\",\n       \"message\": \"found provisionable pod(s)\",\n       \"commit\": \"490ef94\",\n       \"Pods\": \"default/inflate-66fb68585c-xvs86, default/inflate-66fb68585c-hpcdz, default/inflate-66fb68585c-8xztf,01234567adb205c7e default/inflate-66fb68585c-t29d8, default/inflate-66fb68585c-nxflz\",\n       \"duration\": \"100.761702ms\"\n   }\n   ```\n\n2. Computes the shape and size of a NodeClaim (or NodeClaims) to create in the cluster to fit the set of pods from step 1.\n\n   **Example log:**\n   ```json\n   {\n       \"level\": \"INFO\",\n       \"time\": \"2024-06-22T02:24:16.114Z\",\n       \"message\": \"computed new nodeclaim(s) to fit pod(s)\",\n       \"controller\": \"provisioner\",\n       \"nodeclaims\": 1,\n       \"pods\": 5\n   }\n   ```\n\n3. Creates the NodeClaim object in the cluster.\n\n   **Example log:**\n   ```json\n   {\n       \"level\": \"INFO\",\n       \"time\": \"2024-06-22T02:24:16.128Z\",\n       \"message\": \"created nodeclaim\",\n       \"controller\": \"provisioner\",\n       \"NodePool\": {\n           \"name\":\"default\"\n       },\n       \"NodeClaim\": {\n           \"name\":\"default-sfpsl\"\n       },\n       \"requests\": {\n           \"cpu\":\"5150m\",\n           \"pods\":\"8\"\n       },\n       \"instance-types\": \"c3.2xlarge, c4.2xlarge, c4.4xlarge, c5.2xlarge, c5.4xlarge and 55 other(s)\"\n   }\n   ```\n\n4. Finds the new NodeClaim and translates it into an API call to create a cloud provider instance, logging\n   the response of the API call.\n\n   If the API response is an unrecoverable error, such as an Insufficient Capacity Error, Karpenter will delete the NodeClaim, mark that instance type as temporarily unavailable, and create another NodeClaim if necessary.\n\n   **Example log:**\n   ```json\n   {\n       \"level\": \"INFO\",\n       \"time\": \"2024-06-22T02:24:19.028Z\",\n       \"message\": \"launched nodeclaim\",\n       \"controller\": \"nodeclaim.lifecycle\",\n       \"NodeClaim\": {\n           \"name\": \"default-sfpsl\"\n       },\n       \"provider-id\": \"aws:///us-west-2b/i-01234567adb205c7e\",\n       \"instance-type\": \"c3.2xlarge\",\n       \"zone\": \"us-west-2b\",\n       \"capacity-type\": \"spot\",\n       \"allocatable\": {\n         \"cpu\": \"7910m\",\n         \"ephemeral-storage\": \"17Gi\",\n         \"memory\": \"13215Mi\",\n         \"pods\": \"58\"\n       }\n   }\n   ```\n\n5. Karpenter watches for the instance to register itself with the cluster as a node, and updates the node's\n   labels, annotations, taints, owner refs, and finalizer to match what was defined in the NodePool and NodeClaim. Once this step is\n   completed, Karpenter will remove the `karpenter.sh/unregistered` taint from the Node.\n\n   If this fails to succeed within 15 minutes, Karpenter will remove the NodeClaim from the cluster and delete\n   the underlying instance, creating another NodeClaim if necessary.\n\n   **Example log:**\n   ```json\n   {\n     \"level\": \"INFO\",\n     \"time\": \"2024-06-22T02:26:19.028Z\",\n     \"message\": \"registered nodeclaim\",\n     \"controller\": \"nodeclaim.lifecycle\",\n     \"NodeClaim\": {\n       \"name\": \"default-sfpsl\"\n     },\n     \"provider-id\": \"aws:///us-west-2b/i-01234567adb205c7e\",\n     \"Node\": {\n       \"name\": \"ip-xxx-xxx-xx-xxx.us-west-2.compute.internal\"\n     }\n   }\n   ```\n\n6. Karpenter continues to watch the node, waiting until the node becomes ready, has all its startup taints removed,\n   and has all requested resources registered on the node.\n\n   **Example log:**\n   ```json\n   {\n     \"level\": \"INFO\",\n     \"time\": \"2024-06-22T02:24:52.642Z\",\n     \"message\": \"initialized nodeclaim\",\n     \"controller\": \"nodeclaim.lifecycle\",\n     \"NodeClaim\": {\n       \"name\": \"default-sfpsl\"\n     },\n     \"provider-id\": \"aws:///us-west-2b/i-01234567adb205c7e\",\n     \"Node\": {\n       \"name\": \"ip-xxx-xxx-xx-xxx.us-west-2.compute.internal\"\n     },\n     \"allocatable\": {\n       \"cpu\": \"7910m\",\n       \"ephemeral-storage\": \"18242267924\",\n       \"hugepages-2Mi\": \"0\",\n       \"memory\": \"14320468Ki\",\n       \"pods\": \"58\"\n     }\n   }\n   ```\n\n## NodeClaim example\nThe following is an example of a NodeClaim. Keep in mind that you cannot modify a NodeClaim.\nTo see the contents of a NodeClaim, get the name of your NodeClaim, then run `kubectl describe` to see its contents:\n\n```\nkubectl get nodeclaim\nNAME            TYPE               ZONE         NODE                                           READY   AGE\ndefault-m6pzn   c7i-flex.2xlarge   us-west-1a   ip-xxx-xxx-xx-xxx.us-west-1.compute.internal   True    7m50s\n\nkubectl describe nodeclaim default-m6pzn\n```\nStarting at the bottom of this example, here are some highlights of what the NodeClaim contains:\n\n* The Node Name (ip-xxx-xxx-xx-xxx.us-west-1.compute.internal) and Provider ID (aws:///us-west-1a/i-xxxxxxxxxxxxxxxxx) identify the instance that is fulfilling this NodeClaim.\n* Image ID (ami-0ccbbed159cce4e37) represents the operating system image running on the node.\n* Status shows the resources that are available on the node (CPU, memory, and so on) as well as the conditions associated with the node. The conditions show the status of the node, including whether the node is launched, registered, and initialized. This is particularly useful if Pods are not deploying to the node and you want to determine the cause.\n* Spec contains the metadata required for Karpenter to launch and manage an instance. This includes any scheduling requirements, resource requirements, the NodeClass reference, taints, and immutable disruption fields (expireAfter and terminationGracePeriod).\n* Additional information includes annotations and labels which should be synced to the Node, creation metadata, the termination finalizer, and the owner reference.\n\n```\nName:         default-x9wxq\nNamespace:\nLabels:       karpenter.k8s.aws/instance-category=c\n              karpenter.k8s.aws/instance-cpu=8\n              karpenter.k8s.aws/instance-cpu-manufacturer=amd\n              karpenter.k8s.aws/instance-ebs-bandwidth=3170\n              karpenter.k8s.aws/instance-encryption-in-transit-supported=true\n              karpenter.k8s.aws/instance-family=c5a\n              karpenter.k8s.aws/instance-generation=5\n              karpenter.k8s.aws/instance-hypervisor=nitro\n              karpenter.k8s.aws/instance-memory=16384\n              karpenter.k8s.aws/instance-network-bandwidth=2500\n              karpenter.k8s.aws/instance-size=2xlarge\n              karpenter.sh/capacity-type=spot\n              karpenter.sh/nodepool=default\n              kubernetes.io/arch=amd64\n              kubernetes.io/os=linux\n              node.kubernetes.io/instance-type=c5a.2xlarge\n              topology.k8s.aws/zone-id=usw2-az3\n              topology.kubernetes.io/region=us-west-2\n              topology.kubernetes.io/zone=us-west-2c\nAnnotations:  compatibility.karpenter.k8s.aws/cluster-name-tagged: true\n              compatibility.karpenter.k8s.aws/kubelet-drift-hash: 15379597991425564585\n              karpenter.k8s.aws/ec2nodeclass-hash: 5763643673275251833\n              karpenter.k8s.aws/ec2nodeclass-hash-version: v3\n              karpenter.k8s.aws/tagged: true\n              karpenter.sh/nodepool-hash: 377058807571762610\n              karpenter.sh/nodepool-hash-version: v3\nAPI Version:  karpenter.sh/v1\nKind:         NodeClaim\nMetadata:\n  Creation Timestamp:  2024-08-07T05:37:30Z\n  Finalizers:\n    karpenter.sh/termination\n  Generate Name:  default-\n  Generation:     1\n  Owner References:\n    API Version:           karpenter.sh/v1\n    Block Owner Deletion:  true\n    Kind:                  NodePool\n    Name:                  default\n    UID:                   6b9c6781-ac05-4a4c-ad6a-7551a07b2ce7\n  Resource Version:        19600526\n  UID:                     98a2ba32-232d-45c4-b7c0-b183cfb13d93\nSpec:\n  Expire After:  720h0m0s\n  Node Class Ref:\n    Group:\n    Kind:   EC2NodeClass\n    Name:   default\n  Requirements:\n    Key:       kubernetes.io/arch\n    Operator:  In\n    Values:\n      amd64\n    Key:       kubernetes.io/os\n    Operator:  In\n    Values:\n      linux\n    Key:       karpenter.sh/capacity-type\n    Operator:  In\n    Values:\n      spot\n    Key:       karpenter.k8s.aws/instance-category\n    Operator:  In\n    Values:\n      c\n      m\n      r\n    Key:       karpenter.k8s.aws/instance-generation\n    Operator:  Gt\n    Values:\n      2\n    Key:       karpenter.sh/nodepool\n    Operator:  In\n    Values:\n      default\n    Key:       node.kubernetes.io/instance-type\n    Operator:  In\n    Values:\n      c3.xlarge\n      c4.xlarge\n      c5.2xlarge\n      c5.xlarge\n      c5a.xlarge\n      c5ad.2xlarge\n      c5ad.xlarge\n      c5d.2xlarge\n  Resources:\n    Requests:\n      Cpu:   3150m\n      Pods:  6\n  Startup Taints:\n    Effect:  NoSchedule\n    Key:     app.dev/example-startup\n  Taints:\n    Effect:                  NoSchedule\n    Key:                     app.dev/example\n  Termination Grace Period:  1h0m0s\nStatus:\n  Allocatable:\n    Cpu:                        7910m\n    Ephemeral - Storage:        17Gi\n    Memory:                     14162Mi\n    Pods:                       58\n    vpc.amazonaws.com/pod-eni:  38\n  Capacity:\n    Cpu:                        8\n    Ephemeral - Storage:        20Gi\n    Memory:                     15155Mi\n    Pods:                       58\n    vpc.amazonaws.com/pod-eni:  38\n  Conditions:\n    Last Transition Time:  2024-08-07T05:38:08Z\n    Message:\n    Reason:                Consolidatable\n    Status:                True\n    Type:                  Consolidatable\n    Last Transition Time:  2024-08-07T05:38:07Z\n    Message:\n    Reason:                Initialized\n    Status:                True\n    Type:                  Initialized\n    Last Transition Time:  2024-08-07T05:37:33Z\n    Message:\n    Reason:                Launched\n    Status:                True\n    Type:                  Launched\n    Last Transition Time:  2024-08-07T05:38:07Z\n    Message:\n    Reason:                Ready\n    Status:                True\n    Type:                  Ready\n    Last Transition Time:  2024-08-07T05:37:55Z\n    Message:\n    Reason:                Registered\n    Status:                True\n    Type:                  Registered\n  Image ID:                ami-08946d4d49fc3f27b\n  Node Name:               ip-xxx-xxx-xxx-xxx.us-west-2.compute.internal\n  Provider ID:             aws:///us-west-2c/i-01234567890123\nEvents:\n  Type    Reason             Age   From       Message\n  ----    ------             ----  ----       -------\n  Normal  Launched           70s   karpenter  Status condition transitioned, Type: Launched, Status: Unknown -> True, Reason: Launched\n  Normal  DisruptionBlocked  70s   karpenter  Cannot disrupt NodeClaim: state node doesn't contain both a node and a nodeclaim\n  Normal  Registered         48s   karpenter  Status condition transitioned, Type: Registered, Status: Unknown -> True, Reason: Registered\n  Normal  Initialized        36s   karpenter  Status condition transitioned, Type: Initialized, Status: Unknown -> True, Reason: Initialized\n  Normal  Ready              36s   karpenter  Status condition transitioned, Type: Ready, Status: Unknown -> True, Reason: Ready\n```\n"
  },
  {
    "path": "website/content/en/docs/concepts/nodeclasses.md",
    "content": "---\ntitle: \"NodeClasses\"\nlinkTitle: \"NodeClasses\"\nweight: 2\ndescription: >\n  Configure AWS-specific settings with EC2NodeClasses\n---\n\nNode Classes enable configuration of AWS specific settings.\nEach NodePool must reference an EC2NodeClass using `spec.template.spec.nodeClassRef`.\nMultiple NodePools may point to the same EC2NodeClass.\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\nspec:\n  template:\n    spec:\n      nodeClassRef:\n        group: karpenter.k8s.aws\n        kind: EC2NodeClass\n        name: default\n---\napiVersion: karpenter.k8s.aws/v1\nkind: EC2NodeClass\nmetadata:\n  name: default\nspec:\n  kubelet:\n    podsPerCore: 2\n    maxPods: 20\n    systemReserved:\n      cpu: 100m\n      memory: 100Mi\n      ephemeral-storage: 1Gi\n    kubeReserved:\n      cpu: 200m\n      memory: 100Mi\n      ephemeral-storage: 3Gi\n    evictionHard:\n      memory.available: 5%\n      nodefs.available: 10%\n      nodefs.inodesFree: 10%\n    evictionSoft:\n      memory.available: 500Mi\n      nodefs.available: 15%\n      nodefs.inodesFree: 15%\n    evictionSoftGracePeriod:\n      memory.available: 1m\n      nodefs.available: 1m30s\n      nodefs.inodesFree: 2m\n    evictionMaxPodGracePeriod: 60\n    imageGCHighThresholdPercent: 85\n    imageGCLowThresholdPercent: 80\n    cpuCFSQuota: true\n    clusterDNS: [\"10.0.1.100\"]\n  # Optional, dictates UserData generation and default block device mappings.\n  # May be ommited when using an `alias` amiSelectorTerm, otherwise required.\n  amiFamily: AL2\n\n  # Required, discovers subnets to attach to instances\n  # Each term in the array of subnetSelectorTerms is ORed together\n  # Within a single term, all conditions are ANDed\n  subnetSelectorTerms:\n    # Select on any subnet that has the \"karpenter.sh/discovery: ${CLUSTER_NAME}\"\n    # AND the \"environment: test\" tag OR any subnet with ID \"subnet-09fa4a0a8f233a921\"\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\"\n        environment: test\n    - id: subnet-09fa4a0a8f233a921\n\n  # Required, discovers security groups to attach to instances\n  # Each term in the array of securityGroupSelectorTerms is ORed together\n  # Within a single term, all conditions are ANDed\n  securityGroupSelectorTerms:\n    # Select on any security group that has both the \"karpenter.sh/discovery: ${CLUSTER_NAME}\" tag\n    # AND the \"environment: test\" tag OR any security group with the \"my-security-group\" name\n    # OR any security group with ID \"sg-063d7acfb4b06c82c\"\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\"\n        environment: test\n    - name: my-security-group\n    - id: sg-063d7acfb4b06c82c\n\n  # Optional, IAM role to use for the node identity.\n  # Must specify one of \"role\" or \"instanceProfile\" for Karpenter to launch nodes\n  role: \"KarpenterNodeRole-${CLUSTER_NAME}\"\n\n  # Optional, IAM instance profile to use for the node identity.\n  # Must specify one of \"role\" or \"instanceProfile\" for Karpenter to launch nodes\n  instanceProfile: \"KarpenterNodeInstanceProfile-${CLUSTER_NAME}\"\n\n  # Each term in the array of amiSelectorTerms is ORed together\n  # Within a single term, all conditions are ANDed\n  amiSelectorTerms:\n    # Select on any AMI that has both the `karpenter.sh/discovery: ${CLUSTER_NAME}`\n    # AND `environment: test` tags OR any AMI with the name `my-ami` OR an AMI with\n    # ID `ami-123` OR an AMI with ID matching the value of my-custom-parameter\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\"\n        environment: test\n    - name: my-ami\n    - id: ami-123\n    - ssmParameter: my-custom-parameter # ssm parameter name or ARN\n    # Select EKS optimized AL2023 AMIs with version `v20240703`. This term is mutually\n    # exclusive and can't be specified with other terms.\n    # - alias: al2023@v20240703\n\n  # Optional, each term in the array of capacityReservationSelectorTerms is ORed together.\n  capacityReservationSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: ${CLUSTER_NAME}\n    - id: cr-123\n    - instanceMatchCriteria: open\n\n  # Optional, propagates tags to underlying EC2 resources\n  tags:\n    team: team-a\n    app: team-a-app\n\n  # Optional, configures IMDS for the instance\n  metadataOptions:\n    httpEndpoint: enabled\n    httpProtocolIPv6: disabled\n    httpPutResponseHopLimit: 1 # This is changed to disable IMDS access from containers not on the host network\n    httpTokens: required\n\n  # Optional, configures storage devices for the instance\n  blockDeviceMappings:\n    - deviceName: /dev/xvda\n      ebs:\n        volumeSize: 100Gi\n        volumeType: gp3\n        iops: 10000\n        encrypted: true\n        kmsKeyID: \"1234abcd-12ab-34cd-56ef-1234567890ab\"\n        deleteOnTermination: true\n        throughput: 125\n        snapshotID: snap-0123456789\n        volumeInitializationRate: 100\n\n  # Optional, use instance-store volumes for node ephemeral-storage\n  instanceStorePolicy: RAID0\n\n  # Optional, overrides autogenerated userdata with a merge semantic\n  userData: |\n    echo \"Hello world\"\n\n  # Optional, configures detailed monitoring for the instance\n  detailedMonitoring: true\n\n  # Optional, configures if the instance should be launched with an associated public IP address.\n  # If not specified, the default value depends on the subnet's public IP auto-assign setting.\n  associatePublicIPAddress: true\nstatus:\n  # Resolved subnets\n  subnets:\n    - id: subnet-0a462d98193ff9fac\n      zone: us-east-2b\n    - id: subnet-0322dfafd76a609b6\n      zone: us-east-2c\n    - id: subnet-0727ef01daf4ac9fe\n      zone: us-east-2b\n    - id: subnet-00c99aeafe2a70304\n      zone: us-east-2a\n    - id: subnet-023b232fd5eb0028e\n      zone: us-east-2c\n    - id: subnet-03941e7ad6afeaa72\n      zone: us-east-2a\n\n  # Resolved security groups\n  securityGroups:\n    - id: sg-041513b454818610b\n      name: ClusterSharedNodeSecurityGroup\n    - id: sg-0286715698b894bca\n      name: ControlPlaneSecurityGroup-1AQ073TSAAPW\n\n  # Resolved AMIs\n  amis:\n    - id: ami-01234567890123456\n      name: custom-ami-amd64\n      requirements:\n        - key: kubernetes.io/arch\n          operator: In\n          values:\n            - amd64\n    - id: ami-01234567890123456\n      name: custom-ami-arm64\n      requirements:\n        - key: kubernetes.io/arch\n          operator: In\n          values:\n            - arm64\n\n  # Capacity Reservations\n  capacityReservations:\n    - availabilityZone: us-west-2a\n      id: cr-01234567890123456\n      instanceMatchCriteria: targeted\n      instanceType: g6.48xlarge\n      interruptible: false\n      ownerID: \"012345678901\"\n      reservationType: capacity-block\n      state: expiring\n    - availabilityZone: us-west-2c\n      id: cr-12345678901234567\n      instanceMatchCriteria: open\n      instanceType: g6.48xlarge\n      interruptible: true\n      ownerID: \"98765432109\"\n      reservationType: default\n      state: active\n\n  # Generated instance profile name from \"role\"\n  instanceProfile: \"${CLUSTER_NAME}-0123456778901234567789\"\n  conditions:\n    - lastTransitionTime: \"2024-02-02T19:54:34Z\"\n      status: \"True\"\n      type: InstanceProfileReady\n    - lastTransitionTime: \"2024-02-02T19:54:34Z\"\n      status: \"True\"\n      type: SubnetsReady\n    - lastTransitionTime: \"2024-02-02T19:54:34Z\"\n      status: \"True\"\n      type: SecurityGroupsReady\n    - lastTransitionTime: \"2024-02-02T19:54:34Z\"\n      status: \"True\"\n      type: AMIsReady\n    - lastTransitionTime: \"2024-02-02T19:54:34Z\"\n      status: \"True\"\n      type: Ready\n```\nRefer to the [NodePool docs]({{<ref \"./nodepools\" >}}) for settings applicable to all providers. To explore various `EC2NodeClass` configurations, refer to the examples provided [in the Karpenter Github repository](https://github.com/aws/karpenter/blob/main/examples/v1/).\n\n\n## spec.kubelet\n\nKarpenter provides the ability to specify a few additional Kubelet arguments.\nThese are all optional and provide support for additional customization and use cases.\nAdjust these only if you know you need to do so.\nFor more details on kubelet settings, see the [KubeletConfiguration reference](https://kubernetes.io/docs/reference/config-api/kubelet-config.v1/).\nThe implemented fields are a subset of the full list of upstream kubelet configuration arguments.\n\n```yaml\nkubelet:\n  podsPerCore: 2\n  maxPods: 20\n  systemReserved:\n    cpu: 100m\n    memory: 100Mi\n    ephemeral-storage: 1Gi\n  kubeReserved:\n    cpu: 200m\n    memory: 100Mi\n    ephemeral-storage: 3Gi\n  evictionHard:\n    memory.available: 5%\n    nodefs.available: 10%\n    nodefs.inodesFree: 10%\n  evictionSoft:\n    memory.available: 500Mi\n    nodefs.available: 15%\n    nodefs.inodesFree: 15%\n  evictionSoftGracePeriod:\n    memory.available: 1m\n    nodefs.available: 1m30s\n    nodefs.inodesFree: 2m\n  evictionMaxPodGracePeriod: 60\n  imageGCHighThresholdPercent: 85\n  imageGCLowThresholdPercent: 80\n  cpuCFSQuota: true\n  clusterDNS: [\"10.0.1.100\"]\n```\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nIf you need to specify a field that isn't present in `spec.kubelet`, you can set it via custom [UserData]({{< ref \"#specuserdata\" >}}).\nFor example, if you wanted to configure `maxPods` and `registryPullQPS` you would set the former through `spec.kubelet` and the latter through UserData.\nThe following example achieves this with AL2023:\n\n```yaml\napiVersion: karpenter.k8s.aws/v1\nkind: EC2NodeClass\nspec:\n  amiSelectorTerms:\n    - alias: al2023@v20240807\n  kubelet:\n    maxPods: 42\n  userData: |\n    apiVersion: node.eks.aws/v1alpha1\n    kind: NodeConfig\n    spec:\n      kubelet:\n        config:\n          # Configured through UserData since unavailable in `spec.kubelet`\n          registryPullQPS: 10\n```\n\nNote that when using the `Custom` AMIFamily you will need to specify fields **both** in `spec.kubelet` and `spec.userData`.\n{{% /alert %}}\n\n#### Pods Per Core\n\nAn alternative way to dynamically set the maximum density of pods on a node is to use the `.spec.kubelet.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.\n\nThe 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.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\n`maxPods` may not be set in the `kubelet` of an EC2NodeClass, 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 EC2NodeClass will not cause unexpected behavior by exceeding the `maxPods` value.\n{{% /alert %}}\n\n#### Max Pods\n\nFor 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.kubelet.maxPods`. This value will be used during Karpenter pod scheduling and passed through to `--max-pods` on kubelet startup.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nWhen 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.\n{{% /alert %}}\n\n{{% alert title=\"Windows Support Notice\" color=\"warning\" %}}\nPresently, Windows worker nodes do not support using more than one ENI.\nAs a consequence, the number of IP addresses, and subsequently, the number of pods that a Windows worker node can support is limited by the number of IPv4 addresses available on the primary ENI.\nCurrently, Karpenter will only consider individual secondary IP addresses when calculating the pod density limit.\n{{% /alert %}}\n\n### Reserved Resources\n\nKarpenter 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.kubelet.systemReserved` values and the `--kube-reserved` configuration defaults with the `.spec.kubelet.kubeReserved` values.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nKarpenter considers these reserved resources when computing the allocatable ephemeral storage on a given instance type.\nIf `kubeReserved` is not specified, Karpenter will compute the default reserved [CPU](https://github.com/awslabs/amazon-eks-ami/blob/db28da15d2b696bc08ac3aacc9675694f4a69933/files/bootstrap.sh#L251) and [memory](https://github.com/awslabs/amazon-eks-ami/blob/db28da15d2b696bc08ac3aacc9675694f4a69933/files/bootstrap.sh#L235) resources for the purpose of ephemeral storage computation.\nThese defaults are based on the defaults on Karpenter's supported AMI families, which are not the same as the kubelet defaults.\nYou should be aware of the CPU and memory default calculation when using Custom AMI Families. If they don't align, there may be a difference in Karpenter's computed allocatable ephemeral storage and the actually ephemeral storage available on the node.\n{{% /alert %}}\n\n### Eviction Thresholds\n\nThe 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.\n\nKubelet 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.\n\nKarpenter supports [hard evictions](https://kubernetes.io/docs/concepts/scheduling-eviction/node-pressure-eviction/#hard-eviction-thresholds) through the `.spec.kubelet.evictionHard` field and [soft evictions](https://kubernetes.io/docs/concepts/scheduling-eviction/node-pressure-eviction/#soft-eviction-thresholds) through the `.spec.kubelet.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.\n\n```yaml\nkubelet:\n  evictionHard:\n    memory.available: 500Mi\n    nodefs.available: 10%\n    nodefs.inodesFree: 10%\n    imagefs.available: 5%\n    imagefs.inodesFree: 5%\n    pid.available: 7%\n  evictionSoft:\n    memory.available: 1Gi\n    nodefs.available: 15%\n    nodefs.inodesFree: 15%\n    imagefs.available: 10%\n    imagefs.inodesFree: 10%\n    pid.available: 10%\n```\n\n#### Supported Eviction Signals\n\n| Eviction Signal    | Description                                                                     |\n|--------------------|---------------------------------------------------------------------------------|\n| memory.available   | memory.available := node.status.capacity[memory] - node.stats.memory.workingSet |\n| nodefs.available   | nodefs.available := node.stats.fs.available                                     |\n| nodefs.inodesFree  | nodefs.inodesFree := node.stats.fs.inodesFree                                   |\n| imagefs.available  | imagefs.available := node.stats.runtime.imagefs.available                       |\n| imagefs.inodesFree | imagefs.inodesFree := node.stats.runtime.imagefs.inodesFree                     |\n| pid.available      | pid.available := node.stats.rlimit.maxpid - node.stats.rlimit.curproc           |\n\nFor 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.\n\n#### Soft Eviction Grace Periods\n\nSoft 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.\n\nOptionally, 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.\n\n```yaml\nkubelet:\n  evictionSoftGracePeriod:\n    memory.available: 1m\n    nodefs.available: 1m30s\n    nodefs.inodesFree: 2m\n    imagefs.available: 1m30s\n    imagefs.inodesFree: 2m\n    pid.available: 2m\n  evictionMaxPodGracePeriod: 60\n```\n\n### Pod Density\n\nBy 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.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nBy default, the VPC CNI allocates IPs for a node and pods from the same subnet. With [VPC CNI Custom Networking](https://aws.github.io/aws-eks-best-practices/networking/custom-networking), the pods will receive IP addresses from another subnet dedicated to pod IPs. This approach makes it easier to manage IP addresses and allows for separate Network Access Control Lists (NACLs) applied to your pods. VPC CNI Custom Networking reduces the pod density of a node since one of the ENI attachments will be used for the node and cannot share the allocated IPs on the interface to pods. Karpenter supports VPC CNI Custom Networking and similar CNI setups where the primary node interface is separated from the pods interfaces through a global environment variable RESERVED_ENIS, see [Settings]({{<ref \"../reference/settings\" >}}). In the common case, RESERVED_ENIS should be set to \"1\" if using Custom Networking. {{% /alert %}}\n\n{{% alert title=\"Windows Support Notice\" color=\"warning\" %}}\nIt's currently not possible to specify custom networking with Windows nodes.\n{{% /alert %}}\n\n## spec.amiFamily\n\nAMIFamily dictates the default bootstrapping logic for nodes provisioned through this `EC2NodeClass`.\nAn `amiFamily` is only required if you don't specify a `spec.amiSelectorTerms.alias` object.\nFor example, if you specify `alias: al2023@v20240807`, the `amiFamily` is implicitly `AL2023`.\n\nAMIFamily does not impact which AMI is discovered, only the UserData generation and default BlockDeviceMappings. To automatically discover EKS optimized AMIs, use the new [`alias` field in amiSelectorTerms]({{< ref \"#specamiselectorterms\" >}}).\n\n{{% alert title=\"Ubuntu Support Dropped at v1\" color=\"warning\" %}}\n\nSupport for the Ubuntu AMIFamily has been dropped at Karpenter `v1.0.0`.\nThis means Karpenter no longer supports automatic AMI discovery and UserData generation for Ubuntu.\nTo continue using Ubuntu AMIs, you will need to select Ubuntu AMIs using `amiSelectorTerms`.\n\nAdditionally, you will need to either maintain UserData yourself using the `Custom` AMIFamily, or you can use the `AL2` AMIFamily and custom `blockDeviceMappings` (as shown below).\nThe `AL2` family has an identical UserData format, but this compatibility isn't guaranteed long term.\nChanges to AL2's or Ubuntu's UserData format could result in incompatibility, at which point the `Custom` AMIFamily must be used.\n\n**Ubuntu NodeClass Example:**\n```yaml\napiVersion: karpenter.k8s.aws/v1\nkind: EC2NodeClass\nspec:\n  amiFamily: AL2\n  amiSelectorTerms:\n    - id: ami-placeholder\n  blockDeviceMappings:\n  - deviceName: '/dev/sda1'\n    rootVolume: true\n    ebs:\n      encrypted: true\n      volumeType: gp3\n      volumeSize: 20Gi\n```\n\n{{% /alert %}}\n\n\n### AL2\n\n{{% alert title=\"AL2 support dropped at Kubernetes 1.33\" color=\"warning\" %}}\nKubernetes version 1.32 is the last version for which Amazon EKS will release Amazon Linux 2 (AL2) AMIs.\n{{% /alert %}}\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nNote that Karpenter will automatically generate a call to the `/etc/eks/bootstrap.sh` script as part of its generated UserData. When using `amiFamily: AL2` you should not call this script yourself in `.spec.userData`. If you need to, use the [Custom AMI family]({{< ref \"./nodeclasses/#custom\" >}}) instead.\n{{% /alert %}}\n\n```bash\nMIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"//\"\n\n--//\nContent-Type: text/x-shellscript; charset=\"us-ascii\"\n\n#!/bin/bash -xe\nexec > >(tee /var/log/user-data.log|logger -t user-data -s 2>/dev/console) 2>&1\n/etc/eks/bootstrap.sh 'test-cluster' --apiserver-endpoint 'https://test-cluster' --b64-cluster-ca 'ca-bundle' \\\n--dns-cluster-ip '10.100.0.10' \\\n--use-max-pods false \\\n--kubelet-extra-args '--node-labels=karpenter.sh/capacity-type=on-demand,karpenter.sh/nodepool=test  --max-pods=110'\n--//--\n```\n\n### AL2023\n\n```text\nMIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"//\"\n\n--//\nContent-Type: application/node.eks.aws\n\n# Karpenter Generated NodeConfig\napiVersion: node.eks.aws/v1alpha1\nkind: NodeConfig\nspec:\n  cluster:\n    name: test-cluster\n    apiServerEndpoint: https://example.com\n    certificateAuthority: ca-bundle\n    cidr: 10.100.0.0/16\n  kubelet:\n    config:\n      maxPods: 110\n    flags:\n      - --node-labels=karpenter.sh/capacity-type=on-demand,karpenter.sh/nodepool=test\n\n--//--\n\n```\n\n### Bottlerocket\n\n```toml\n[settings]\n[settings.kubernetes]\napi-server = 'https://test-cluster'\ncluster-certificate = 'ca-bundle'\ncluster-name = 'test-cluster'\ncluster-dns-ip = '10.100.0.10'\nmax-pods = 110\n\n[settings.kubernetes.node-labels]\n'karpenter.sh/capacity-type' = 'on-demand'\n'karpenter.sh/nodepool' = 'test'\n```\n\n### Windows2019\n\n```powershell\n<powershell>\n[string]$EKSBootstrapScriptFile = \"$env:ProgramFiles\\Amazon\\EKS\\Start-EKSBootstrap.ps1\"\n& $EKSBootstrapScriptFile -EKSClusterName 'test-cluster' -APIServerEndpoint 'https://test-cluster' -Base64ClusterCA 'ca-bundle' -KubeletExtraArgs '--node-labels=\"karpenter.sh/capacity-type=on-demand,karpenter.sh/nodepool=test\" --max-pods=110' -DNSClusterIP '10.100.0.10'\n</powershell>\n```\n\n### Windows2022\n\n```powershell\n<powershell>\n[string]$EKSBootstrapScriptFile = \"$env:ProgramFiles\\Amazon\\EKS\\Start-EKSBootstrap.ps1\"\n& $EKSBootstrapScriptFile -EKSClusterName 'test-cluster' -APIServerEndpoint 'https://test-cluster' -Base64ClusterCA 'ca-bundle' -KubeletExtraArgs '--node-labels=\"karpenter.sh/capacity-type=on-demand,karpenter.sh/nodepool=test\" --max-pods=110' -DNSClusterIP '10.100.0.10'\n</powershell>\n```\n\n### Windows2025\n\n```powershell\n<powershell>\n[string]$EKSBootstrapScriptFile = \"$env:ProgramFiles\\Amazon\\EKS\\Start-EKSBootstrap.ps1\"\n& $EKSBootstrapScriptFile -EKSClusterName 'test-cluster' -APIServerEndpoint 'https://test-cluster' -Base64ClusterCA 'ca-bundle' -KubeletExtraArgs '--node-labels=\"karpenter.sh/capacity-type=on-demand,karpenter.sh/nodepool=test\" --max-pods=110' -DNSClusterIP '10.100.0.10'\n</powershell>\n```\n\n### Custom\n\nThe `Custom` AMIFamily ships without any default userData to allow you to configure custom bootstrapping for control planes or images that don't support the default methods from the other families. For this AMIFamily, kubelet must add the taint `karpenter.sh/unregistered:NoExecute` via the `--register-with-taints` flag ([flags](https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet/#options)) or the KubeletConfiguration spec ([options](https://kubernetes.io/docs/reference/config-api/kubelet-config.v1/#kubelet-config-k8s-io-v1-CredentialProviderConfig) and [docs](https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/)). Karpenter will fail to register nodes that do not have this taint.\n\n## spec.subnetSelectorTerms\n\nSubnet Selector Terms allow you to specify selection logic for a set of subnet options that Karpenter can choose from when launching an instance from the `EC2NodeClass`. Karpenter discovers subnets through the `EC2NodeClass` using ids or [tags](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html). 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.\n\nThis selection logic is modeled as terms, where each term contains multiple conditions that must all be satisfied for the selector to match. Effectively, all requirements within a single term are ANDed together. It's possible that you may want to select on two different subnets that have unrelated requirements. In this case, you can specify multiple terms which will be ORed together to form your selection logic. The example below shows how this selection logic is fulfilled.\n\n```yaml\nsubnetSelectorTerms:\n  # Select on any subnet that has the \"karpenter.sh/discovery: ${CLUSTER_NAME}\"\n  # AND the \"environment: test\" tag OR any subnet with ID \"subnet-09fa4a0a8f233a921\"\n  - tags:\n      karpenter.sh/discovery: \"${CLUSTER_NAME}\"\n      environment: test\n  - id: subnet-09fa4a0a8f233a921\n```\n\n{{% alert title=\"Tip\" color=\"secondary\" %}}\nSubnets may be specified by any tag, including `Name`. Selecting tag values using wildcards (`*`) is supported.\n{{% /alert %}}\n\n#### Examples\n\nSelect all with a specified tag key:\n```yaml\nspec:\n  subnetSelectorTerms:\n    - tags:\n        karpenter.sh/discovery/MyClusterName: '*'\n```\n\nSelect by name and tag (all criteria must match):\n```yaml\nspec:\n  subnetSelectorTerms:\n    - tags:\n        Name: my-subnet\n        MyTag: '' # matches all resources with the tag\n```\n\nSelect using multiple tag terms:\n```yaml\nspec:\n  subnetSelectorTerms:\n    - tags:\n        Name: \"my-subnet-1\"\n    - tags:\n        Name: \"my-subnet-2\"\n```\n\nSelect using wildcards:\n```yaml\nspec:\n  subnetSelectorTerms:\n    - tags:\n        Name: \"*Public*\"\n\n```\n\nSelect using ids:\n```yaml\nspec:\n  subnetSelectorTerms:\n    - id: \"subnet-09fa4a0a8f233a921\"\n    - id: \"subnet-0471ca205b8a129ae\"\n```\n\n\n## spec.securityGroupSelectorTerms\n\nSecurity Group Selector Terms allow you to specify selection logic for all security groups that will be attached to an instance launched from the `EC2NodeClass`. The security group of an instance is comparable to a set of firewall rules.\n[EKS creates at least two security groups by default](https://docs.aws.amazon.com/eks/latest/userguide/sec-group-reqs.html).\n\nThis selection logic is modeled as terms, where each term contains multiple conditions that must all be satisfied for the selector to match. Effectively, all requirements within a single term are ANDed together. It's possible that you may want to select on two different security groups that have unrelated requirements. In this case, you can specify multiple terms which will be ORed together to form your selection logic. The example below shows how this selection logic is fulfilled.\n\n```yaml\nsecurityGroupSelectorTerms:\n  # Select on any security group that has both the \"karpenter.sh/discovery: ${CLUSTER_NAME}\" tag\n  # AND the \"environment: test\" tag OR any security group with the \"my-security-group\" name\n  # OR any security group with ID \"sg-063d7acfb4b06c82c\"\n  - tags:\n      karpenter.sh/discovery: \"${CLUSTER_NAME}\"\n      environment: test\n  - name: my-security-group\n  - id: sg-063d7acfb4b06c82c\n```\n\n{{% alert title=\"Tip\" color=\"secondary\" %}}\nSecurity groups may be specified by any tag, including \"Name\". Selecting tags using wildcards (`*`) is supported.\n{{% /alert %}}\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nWhen launching nodes, Karpenter uses all the security groups that match the selector. If you choose to use the `kubernetes.io/cluster/$CLUSTER_NAME` tag for discovery, note that 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.\n\nTo verify if this restriction affects you, run the following commands.\n```bash\nCLUSTER_VPC_ID=\"$(aws eks describe-cluster --name $CLUSTER_NAME --query cluster.resourcesVpcConfig.vpcId --output text)\"\n\naws ec2 describe-security-groups --filters Name=vpc-id,Values=$CLUSTER_VPC_ID Name=tag-key,Values=kubernetes.io/cluster/$CLUSTER_NAME --query 'SecurityGroups[].[GroupName]' --output text\n```\n\nIf multiple securityGroups are printed, you will need more specific securityGroupSelectorTerms. We generally recommend that you use the `karpenter.sh/discovery: $CLUSTER_NAME` tag selector instead.\n{{% /alert %}}\n\n#### Examples\n\nSelect all assigned to a cluster:\n```yaml\nspec:\n  securityGroupSelectorTerms:\n    - tags:\n        kubernetes.io/cluster/$CLUSTER_NAME: \"owned\"\n```\n\nSelect all with a specified tag key:\n```yaml\nspec:\n  securityGroupSelectorTerms:\n    - tags:\n        MyTag: '*'\n```\n\nSelect by name and tag (all criteria must match):\n```yaml\nspec:\n  securityGroupSelectorTerms:\n    - name: my-security-group\n      tags:\n        MyTag: '*' # matches all resources with the tag\n```\n\nSelect using multiple tag terms:\n```yaml\nspec:\n  securityGroupSelectorTerms:\n    - tags:\n        Name: \"my-security-group-1\"\n    - tags:\n        Name: \"my-security-group-2\"\n```\n\nSelect by name using a wildcard:\n```yaml\nspec:\n  securityGroupSelectorTerms:\n    - name: \"*Public*\"\n```\n\nSelect using ids:\n```yaml\nspec:\n securityGroupSelectorTerms:\n    - id: \"sg-063d7acfb4b06c82c\"\n    - id: \"sg-06e0cf9c198874591\"\n```\n\n## spec.role\n\n`Role` is an optional field and tells Karpenter which IAM identity nodes should assume. You must specify one of `role` or `instanceProfile` when creating a Karpenter `EC2NodeClass`. If using the [Karpenter Getting Started Guide]({{<ref \"../getting-started/getting-started-with-karpenter\" >}}) to deploy Karpenter, you can use the `KarpenterNodeRole-$CLUSTER_NAME` role provisioned by that process.\n\n```yaml\nspec:\n  role: \"KarpenterNodeRole-$CLUSTER_NAME\"\n```\n\n## spec.instanceProfile\n\n`InstanceProfile` is an optional field and tells Karpenter which IAM identity nodes should assume. You must specify one of `role` or `instanceProfile` when creating a Karpenter `EC2NodeClass`. If you use the `instanceProfile` field instead of `role`, Karpenter will not manage the InstanceProfile on your behalf; instead, it expects that you have pre-provisioned an IAM instance profile and assigned it a role.\n\nYou can provision and assign a role to an IAM instance profile using [CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-instanceprofile.html) or by using the [`aws iam create-instance-profile`](https://docs.aws.amazon.com/cli/latest/reference/iam/create-instance-profile.html) and [`aws iam add-role-to-instance-profile`](https://docs.aws.amazon.com/cli/latest/reference/iam/add-role-to-instance-profile.html) commands in the CLI.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\n\nFor [private clusters](https://docs.aws.amazon.com/eks/latest/userguide/private-clusters.html) that do not have access to the public internet, using `spec.instanceProfile` is required. `spec.role` cannot be used since Karpenter needs to access IAM endpoints to manage a generated instance profile. IAM [doesn't support private endpoints](https://docs.aws.amazon.com/vpc/latest/privatelink/aws-services-privatelink-support.html) to enable accessing the service without going to the public internet.\n\n{{% /alert %}}\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nWhen using `spec.instanceProfile`, ensure you are using pre-provisioned instance profiles that you manage yourself.\n{{% /alert %}}\n\n## spec.amiSelectorTerms\n\nAMI Selector Terms are __required__ and are used to configure AMIs for Karpenter to use. AMIs are discovered through alias, id, owner, name, and [tags](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html).\n\nThis selection logic is modeled as terms, where each term contains multiple conditions that must all be satisfied for the selector to match.\nEffectively, all requirements within a single term are ANDed together.\nIt's possible that you may want to select on two different AMIs that have unrelated requirements.\nIn this case, you can specify multiple terms which will be ORed together to form your selection logic.\nThe example below shows how this selection logic is fulfilled.\n\n```yaml\namiSelectorTerms:\n  # Select on any AMI that has both the `karpenter.sh/discovery: ${CLUSTER_NAME}`\n  # AND `environment: test` tags OR any AMI with the name `my-ami` OR an AMI with\n  # ID `ami-123` OR an AMI with ID matching the value of my-custom-parameter\n  - tags:\n      karpenter.sh/discovery: \"${CLUSTER_NAME}\"\n      environment: test\n  - name: my-ami\n  - id: ami-123\n  - ssmParameter: my-custom-parameter # ssm parameter name or ARN\n  # Select EKS optimized AL2023 AMIs with version `v20240807`. This term is mutually\n  # exclusive and can't be specified with other terms.\n  # - alias: al2023@v20240807\n```\n\nAn `alias` term can be used to select EKS-optimized AMIs. An `alias` is formatted as `family@version`. Family can be one of the following values:\n\n* `al2`\n* `al2023`\n* `bottlerocket`\n* `windows2019`\n* `windows2022`\n* `windows2025`\n\nThe version string can be set to `latest`, or pinned to a specific AMI using the format of that AMI's GitHub release tags.\nFor example, AL2 and AL2023 use dates for their release, so they can be pinned as follows:\n```yaml\nalias: al2023@v20240703\n```\nBottlerocket uses a semantic version for their releases. You can pin bottlerocket as follows:\n```yaml\nalias: bottlerocket@v1.20.4\n```\nThe Windows family does not support pinning, so only `latest` is supported.\n\nThe following commands can be used to determine the versions availble for an alias in your region:\n\n{{< tabpane text=true right=false >}}\n  {{% tab \"AL2023\" %}}\n  ```bash\n  export K8S_VERSION=\"1.34\"\n  aws ssm get-parameters-by-path --path \"/aws/service/eks/optimized-ami/$K8S_VERSION/amazon-linux-2023/\" --recursive | jq -cr '.Parameters[].Name' | grep -v \"recommended\" | awk -F '/' '{print $10}' | sed -r 's/.*(v[[:digit:]]+)$/\\1/' | sort | uniq\n  ```\n  {{% /tab %}}\n  {{% tab \"AL2\" %}}\n  ```bash\n  export K8S_VERSION=\"1.34\"\n  aws ssm get-parameters-by-path --path \"/aws/service/eks/optimized-ami/$K8S_VERSION/amazon-linux-2/\" --recursive | jq -cr '.Parameters[].Name' | grep -v \"recommended\" | awk -F '/' '{print $8}' | sed -r 's/.*(v[[:digit:]]+)$/\\1/' | sort | uniq\n  ```\n  {{% /tab %}}\n  {{% tab \"Bottlerocket\" %}}\n  ```bash\n  export K8S_VERSION=\"1.34\"\n  aws ssm get-parameters-by-path --path \"/aws/service/bottlerocket/aws-k8s-$K8S_VERSION\" --recursive | jq -cr '.Parameters[].Name' | grep -v \"latest\" | awk -F '/' '{print $7}' | sort | uniq\n  ```\n  {{% /tab %}}\n{{< /tabpane >}}\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter supports automatic AMI selection and upgrades using the `latest` version pin, but this is **not** recommended for production environments.\nWhen using `latest`, a new AMI release will cause Karpenter to drift all out-of-date nodes in the cluster, replacing them with nodes running the new AMI.\nWe strongly recommend evaluating new AMIs in a lower environment before rolling them out into a production environment.\nMore details on Karpenter's recommendations for managing AMIs can be found [here]({{< ref \"../tasks/managing-amis\" >}}).\n{{% /alert %}}\n\nTo select an AMI by name, use the `name` field in the selector term. To select an AMI by id, use the `id` field in the selector term. To select AMIs that are not owned by `amazon` or the account that Karpenter is running in, use the `owner` field - you can use a combination of account aliases (e.g. `self` `amazon`, `your-aws-account-name`) and account IDs.\n\nIf owner is not set for `name`, it defaults to `self,amazon`, preventing Karpenter from inadvertently selecting an AMI that is owned by a different account. Tags don't require an owner as tags can only be discovered by the user who created them.\n\n{{% alert title=\"Tip\" color=\"secondary\" %}}\nAMIs may be specified by any AWS tag, including `Name`. Selecting by tag or by name using wildcards (`*`) is supported.\n{{% /alert %}}\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nIf `amiSelectorTerms` match more than one AMI, Karpenter will automatically determine which AMI best fits the workloads on the launched worker node under the following constraints:\n\n* When launching nodes, Karpenter automatically determines which architecture a custom AMI is compatible with and will use images that match an instanceType's requirements.\n    * Unless using an alias, Karpenter **cannot** detect requirements other than architecture. If you need to specify different AMIs for different kind of nodes (e.g. accelerated GPU AMIs), you should use a separate `EC2NodeClass`.\n* If multiple AMIs are found that can be used, Karpenter will choose the latest one.\n* If no AMIs are found that can be used, then no nodes will be provisioned.\n{{% /alert %}}\n\n#### Examples\n\nSelect by AMI family and version:\n```yaml\n  amiSelectorTerms:\n    - alias: al2023@v20240807\n```\n\nSelect all with a specified tag:\n\n```yaml\n  amiSelectorTerms:\n    - tags:\n        karpenter.sh/discovery/MyClusterName: '*'\n```\n\nSelect by name:\n```yaml\n  amiSelectorTerms:\n    - name: my-ami\n```\n\nSelect by `Name` tag:\n```yaml\n  amiSelectorTerms:\n    - tags:\n        Name: my-ami\n```\n\nSelect by name and owner:\n```yaml\n  amiSelectorTerms:\n    - name: my-ami\n      owner: self\n    - name: my-ami\n      owner: \"0123456789\"\n```\n\nSelect by name using a wildcard:\n```yaml\nspec:\n  amiSelectorTerms:\n    - name: \"*EKS*\"\n```\n\nSelect by all under an owner:\n```yaml\nspec:\n  amiSelectorTerms:\n    - name: \"*\"\n      owner: self\n```\n\nSpecify using ids:\n```yaml\n  amiSelectorTerms:\n    - id: \"ami-123\"\n    - id: \"ami-456\"\n```\n\nSpecify using custom ssm parameter name or ARN:\n```yaml\n  amiSelectorTerms:\n    - ssmParameter: \"my-custom-parameter\"\n```\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nWhen using a custom SSM parameter, you'll need to expand the `ssm:GetParameter` permissions on the Karpenter IAM role to include your custom parameter, as the default policy only allows access to the AWS public parameters.\n{{% /alert %}}\n\n## spec.capacityReservationSelectorTerms\n\n<i class=\"fa-solid fa-circle-info\"></i> <b>Feature State: </b> [Beta]({{<ref \"../reference/settings#feature-gates\" >}})\n\nCapacity Reservation Selector Terms allow you to select [on-demand capacity reservations](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-capacity-reservations.html) (ODCRs), which will be made available to NodePools which select the given EC2NodeClass.\nKarpenter will prioritize utilizing the capacity in these reservations before falling back to on-demand and spot.\nCapacity reservations can be discovered using ids, tags, or instance match criteria.\n\nThis selection logic is modeled as terms.\nA term can specify an ID, a set of tags, or instance match criteria to select against.\nWhen specifying tags, it will select all capacity reservations accessible from the account with matching tags.\nWhen specifying instance match criteria, it selects reservations by their matching behavior: `open` (matches all compatible instances) or `targeted` (matches only explicitly targeted instances).\nThis can be further restricted by specifying an owner ID.\n\nFor more information on utilizing ODCRs with Karpenter, refer to the [Utilizing ODCRs Task]({{< relref \"../tasks/odcrs\" >}}).\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nNote that the IAM role Karpenter assumes should have a permissions policy associated with it that grants it permissions to use the [ec2:DescribeCapacityReservations](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonec2.html#amazonec2-DescribeCapacityReservations) action to discover capacity reservations and the [ec2:RunInstances](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonec2.html#amazonec2-RunInstances) action to run instances in those capacity reservations.\n{{% /alert %}}\n\n#### Examples\n\nSelect the reservations with the given IDs:\n\n```yaml\nspec:\n  capacityReservationSelectorTerms:\n  - id: cr-123\n  - id: cr-456\n```\n\nSelect the reservations by tags:\n\n```yaml\nspec:\n  capacityReservationSelectorTerms:\n  # Select all capacity reservations which have both matching tags\n  - tags:\n      key1: foo\n      key2: bar\n  # Additionally, select all capacity reservations with the following matching tag\n  - tags:\n      key3: foobar\n```\n\nSelect by tags and owner ID:\n\n```yaml\nspec:\n  # Select all capacity reservations with the matching tags which are also owned by\n  # the specified account.\n  capacityReservationSelectorTerms:\n  - tags:\n      key: foo\n    ownerID: 012345678901\n```\n\nSelect by instance match criteria:\n\n```yaml\nspec:\n  capacityReservationSelectorTerms:\n  # Select all open capacity reservations\n  - instanceMatchCriteria: open\n```\n\nSelect by instance match criteria and tags:\n\n```yaml\nspec:\n  capacityReservationSelectorTerms:\n  # Select targeted capacity reservations with matching tags\n  - instanceMatchCriteria: targeted\n    tags:\n      key: foo\n```\n\n## spec.tags\n\nKarpenter adds tags to all resources it creates, including EC2 Instances, EBS volumes, and Launch Templates. The default set of tags are listed below.\n\n```yaml\nName: <node-name>\nkarpenter.sh/nodeclaim: <nodeclaim-name>\nkarpenter.sh/nodepool: <nodepool-name>\nkarpenter.k8s.aws/ec2nodeclass: <ec2nodeclass-name>\nkubernetes.io/cluster/<cluster-name>: owned\neks:eks-cluster-name: <cluster-name>\n```\n\nAdditional tags can be added in the tags section, which will be merged with the default tags specified above.\n```yaml\nspec:\n  tags:\n    InternalAccountingTag: 1234\n    dev.corp.net/app: Calculator\n    dev.corp.net/team: MyTeam\n```\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nKarpenter allows overrides of the default \"Name\" tag but does not allow overrides to restricted domains (such as \"karpenter.sh\", \"karpenter.k8s.aws\", and \"kubernetes.io/cluster\"). This ensures that Karpenter is able to correctly auto-discover nodes that it owns.\n{{% /alert %}}\n\n## spec.metadataOptions\n\nControl the exposure of [Instance Metadata Service](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html) on EC2 Instances launched by this EC2NodeClass using a generated launch template.\n\nRefer 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.\n\nIf metadataOptions are omitted from this EC2NodeClass, the following default settings are applied:\n\n```yaml\nspec:\n  metadataOptions:\n    httpEndpoint: enabled\n    httpProtocolIPv6: disabled\n    httpPutResponseHopLimit: 1\n    httpTokens: required\n```\n\n## spec.blockDeviceMappings\n\nThe `blockDeviceMappings` field in an `EC2NodeClass` can be used to control the [Elastic Block Storage (EBS) volumes](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/block-device-mapping-concepts.html#instance-block-device-mapping) that Karpenter attaches to provisioned nodes. Karpenter uses default block device mappings for the AMIFamily 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.\n\n```yaml\nspec:\n  blockDeviceMappings:\n    - deviceName: /dev/xvda\n      ebs:\n        volumeSize: 100Gi\n        volumeType: gp3\n        iops: 10000\n        encrypted: true\n        kmsKeyID: \"1234abcd-12ab-34cd-56ef-1234567890ab\"\n        deleteOnTermination: true\n        throughput: 125\n        snapshotID: snap-0123456789\n        volumeInitializationRate: 100\n```\n\nThe following blockDeviceMapping defaults are used for each `AMIFamily` if no `blockDeviceMapping` overrides are specified in the `EC2NodeClass`\n\n### AL2\n```yaml\nspec:\n  blockDeviceMappings:\n    - deviceName: /dev/xvda\n      ebs:\n        volumeSize: 20Gi\n        volumeType: gp3\n        encrypted: true\n```\n\n### AL2023\n```yaml\nspec:\n  blockDeviceMappings:\n    - deviceName: /dev/xvda\n      ebs:\n        volumeSize: 20Gi\n        volumeType: gp3\n        encrypted: true\n```\n\n### Bottlerocket\n```yaml\nspec:\n  blockDeviceMappings:\n    # Root device\n    - deviceName: /dev/xvda\n      ebs:\n        volumeSize: 4Gi\n        volumeType: gp3\n        encrypted: true\n    # Data device: Container resources such as images and logs\n    - deviceName: /dev/xvdb\n      ebs:\n        volumeSize: 20Gi\n        volumeType: gp3\n        encrypted: true\n```\n\n### Windows2019/Windows2022/Windows2025\n```yaml\nspec:\n  blockDeviceMappings:\n    - deviceName: /dev/sda1\n      ebs:\n        volumeSize: 50Gi\n        volumeType: gp3\n        encrypted: true\n```\n\n### Custom\n\nThe `Custom` AMIFamily ships without any default `blockDeviceMappings`.\n\n## spec.instanceStorePolicy\n\nThe `instanceStorePolicy` field controls how [instance-store](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/InstanceStorage.html) volumes are handled. By default, Karpenter and Kubernetes will simply ignore them.\n\n### RAID0\n\nIf you intend to use these volumes for faster node ephemeral-storage, set `instanceStorePolicy` to `RAID0`:\n\n```yaml\nspec:\n  instanceStorePolicy: RAID0\n```\n\nThis will set the allocatable ephemeral-storage of each node to the total size of the instance-store volume(s). This configuration is likely to be useful for workloads that leverage dense storage instance types or require the low latency from instance-stores that are nvme ssd based.\n\nThe disks must be formatted & mounted in a RAID0 and be the underlying filesystem for the Kubelet & Containerd. Even if you already configure your volumes with RAID0, Karpenter won't recognize this by default unless you set the `instanceStorePolicy` to `RAID0`. Without this, scheduling workloads that depend on ephemeral-storage from the instance-stores may result in a deadlock due to insufficient storage.\n\nInstructions for each AMI family are listed below:\n\n#### AL2\n\nOn AL2, Karpenter automatically configures the disks through an additional boostrap argument (`--local-disks raid0`). The device name is `/dev/md/0` and its mount point is `/mnt/k8s-disks/0`. You should ensure any additional disk setup does not interfere with these.\n\n#### AL2023\n\nOn AL2023, Karpenter automatically configures the disks via the generated `NodeConfig` object. Like AL2, the device name is `/dev/md/0` and its mount point is `/mnt/k8s-disks/0`. You should ensure any additional disk setup does not interfere with these.\n\n#### Bottlerocket\n\nOn Bottlerocket, Karpenter automatically configures the disks by adding the required bootstrap commands to the settings. The ephemeral storage configuration is handled automatically, so you should not manually configure ephemeral storage settings in your userData.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nThis automatic disk configuration is only available on Bottlerocket v1.22.0 and later.\n{{% /alert %}}\n\n#### Others\n\nFor all other AMI families, you must configure the disks yourself. Check out the [`setup-local-disks`](https://github.com/awslabs/amazon-eks-ami/blob/main/templates/shared/runtime/bin/setup-local-disks) script in [amazon-eks-ami](https://github.com/awslabs/amazon-eks-ami) to see how this is done for AL2.\n\n{{% alert title=\"Tip\" color=\"secondary\" %}}\nSince the Kubelet & Containerd will be using the instance-store filesystem, you may consider using a more minimal root volume size.\n{{% /alert %}}\n\n## spec.userData\n\nYou can control the UserData that is applied to your worker nodes via this field. This allows you to run custom scripts or pass-through custom configuration to Karpenter instances on start-up.\n\n```yaml\napiVersion: karpenter.k8s.aws/v1\nkind: EC2NodeClass\nmetadata:\n  name: bottlerocket-example\nspec:\n  ...\n  amiFamily: Bottlerocket\n  userData:  |\n    [settings.kubernetes]\n    \"kube-api-qps\" = 30\n    \"shutdown-grace-period\" = \"30s\"\n    \"shutdown-grace-period-for-critical-pods\" = \"30s\"\n    [settings.kubernetes.eviction-hard]\n    \"memory.available\" = \"20%\"\n```\n\nThis example adds SSH keys to allow remote login to the node (replace *my-authorized_keys* with your public key file):\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nInstead 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.\nSee [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.\n\nAlso, **my-authorized_key** key is the public key. See [Retrieve the public key material](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/describe-keys.html#retrieving-the-public-key).\n{{% /alert %}}\n\n```yaml\napiVersion: karpenter.k8s.aws/v1\nkind: EC2NodeClass\nmetadata:\n  name: al2-example\nspec:\n  ...\n  amiFamily: AL2\n  userData: |\n    #!/bin/bash\n    mkdir -p ~ec2-user/.ssh/\n    touch ~ec2-user/.ssh/authorized_keys\n    cat >> ~ec2-user/.ssh/authorized_keys <<EOF\n    {{ insertFile \"../my-authorized_keys\" | indent 4  }}\n    EOF\n    chmod -R go-w ~ec2-user/.ssh/authorized_keys\n    chown -R ec2-user ~ec2-user/.ssh\n```\n\nAlternatively, you can save the [key in your SSM Parameter Store](https://docs.aws.amazon.com/systems-manager/latest/userguide/parameter-create-console.html) and use the get-parameter command mentioned below to retrieve the key for authorized_keys.\n\n```\naws ssm get-parameter --name \"<parameter-name>\" --region <region> --with-decryption --query \"Parameter.Value\" --output text > /home/ec2-user/.ssh/authorized_keys\n```\n\nFor more examples on configuring fields for different AMI families, see the [examples here](https://github.com/aws/karpenter/blob/main/examples/v1).\n\nKarpenter will merge the userData you specify with the default userData for that AMIFamily. See the [AMIFamily]({{< ref \"#specamifamily\" >}}) section for more details on these defaults. View the sections below to understand the different merge strategies for each AMIFamily.\n\n### AL2\n\n* Your UserData can be in the [MIME multi part archive](https://cloudinit.readthedocs.io/en/latest/topics/format.html#mime-multi-part-archive) format.\n* Karpenter will transform your custom user-data as a MIME part, if necessary, and then merge a final MIME part to the end of your UserData parts which will bootstrap the worker node. Karpenter will have full control over all the parameters being passed to the bootstrap script.\n  * Karpenter will continue to set MaxPods, ClusterDNS and all other parameters defined in `spec.kubeletConfiguration` as before.\n\nConsider the following example to understand how your custom UserData will be merged -\n\n#### Passed-in UserData (bash)\n\n```bash\n#!/bin/bash\necho \"Running custom user data script (bash)\"\n```\n\n#### Merged UserData (bash)\n\n```bash\nMIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"//\"\n\n--//\nContent-Type: text/x-shellscript; charset=\"us-ascii\"\n\n#!/bin/bash\necho \"Running custom user data script (bash)\"\n\n--//\nContent-Type: text/x-shellscript; charset=\"us-ascii\"\n\n#!/bin/bash -xe\nexec > >(tee /var/log/user-data.log|logger -t user-data -s 2>/dev/console) 2>&1\n/etc/eks/bootstrap.sh 'test-cluster' --apiserver-endpoint 'https://test-cluster' --b64-cluster-ca 'ca-bundle' \\\n--use-max-pods false \\\n--kubelet-extra-args '--node-labels=karpenter.sh/capacity-type=on-demand,karpenter.sh/nodepool=test  --max-pods=110'\n--//--\n```\n\n#### Passed-in UserData (MIME)\n\n```bash\nMIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"BOUNDARY\"\n\n--BOUNDARY\nContent-Type: text/x-shellscript; charset=\"us-ascii\"\n\n#!/bin/bash\necho \"Running custom user data script (mime)\"\n\n--BOUNDARY--\n```\n\n#### Merged UserData (MIME)\n\n```bash\nMIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"//\"\n\n--//\nContent-Type: text/x-shellscript; charset=\"us-ascii\"\n\n#!/bin/bash\necho \"Running custom user data script (mime)\"\n\n--//\nContent-Type: text/x-shellscript; charset=\"us-ascii\"\n\n#!/bin/bash -xe\nexec > >(tee /var/log/user-data.log|logger -t user-data -s 2>/dev/console) 2>&1\n/etc/eks/bootstrap.sh 'test-cluster' --apiserver-endpoint 'https://test-cluster' --b64-cluster-ca 'ca-bundle' \\\n--use-max-pods false \\\n--kubelet-extra-args '--node-labels=karpenter.sh/capacity-type=on-demand,karpenter.sh/nodepool=test  --max-pods=110'\n--//--\n```\n\n{{% alert title=\"Tip\" color=\"secondary\" %}}\nYou can set additional kubelet configuration properties, unavailable through `spec.kubelet`, by updating the `kubelet-config.json` file:\n\n```yaml\napiVersion: karpenter.k8s.aws/v1\nkind: EC2NodeClass\nmetadata:\n  name: kubelet-config-example\nspec:\n  amiFamily: AL2\n  userData: |\n    #!/bin/bash\n    echo \"$(jq '.kubeAPIQPS=50' /etc/kubernetes/kubelet/kubelet-config.json)\" > /etc/kubernetes/kubelet/kubelet-config.json\n```\n{{% /alert %}}\n\n### AL2023\n\n* Your UserData may be in one of three formats: a [MIME multi part archive](https://cloudinit.readthedocs.io/en/latest/topics/format.html#mime-multi-part-archive), a NodeConfig YAML / JSON string, or a shell script.\n* Karpenter will transform your custom UserData into a MIME part, if necessary, and then create a MIME multi-part archive. This archive will consist of a generated NodeConfig, containing Karpenter's default values, followed by the transformed custom UserData. For more information on the NodeConfig spec, refer to the [AL2023 EKS Optimized AMI docs](https://awslabs.github.io/amazon-eks-ami/nodeadm/doc/examples/).\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nAny values configured by the Karpenter generated NodeConfig object will take precedent over values specifed in `spec.userData`.\nThis includes cluster name, cluster CIDR, cluster endpoint, certificate authority, taints, labels, and any value in [spec.kubelet]({{< ref \"#speckubelet\" >}}).\nThese fields must be configured natively through Karpenter rather than through UserData.\n{{% /alert %}}\n\n#### Passed-in UserData (NodeConfig)\n\n```yaml\napiVersion: node.eks.aws/v1alpha1\nkind: NodeConfig\nspec:\n  kubelet:\n    config:\n      maxPods: 42\n```\n\n#### Merged UserData (NodeConfig)\n\n```text\nMIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"//\"\n\n--//\nContent-Type: application/node.eks.aws\n\napiVersion: node.eks.aws/v1alpha1\nkind: NodeConfig\nspec:\n  kubelet:\n    config:\n      maxPods: 42\n\n--//\nContent-Type: application/node.eks.aws\n\n# Karpenter Generated NodeConfig\napiVersion: node.eks.aws/v1alpha1\nkind: NodeConfig\nspec:\n  cluster:\n    apiServerEndpoint: https://test-cluster\n    certificateAuthority: cluster-ca\n    cidr: 10.100.0.0/16\n    name: test-cluster\n  kubelet:\n    config:\n      clusterDNS:\n      - 10.100.0.10\n      maxPods: 118\n    flags:\n    - --node-labels=\"karpenter.sh/capacity-type=on-demand,karpenter.sh/nodepool=default\"\n\n--//--\n```\n\n#### Passed-in UserData (bash)\n\n```shell\n#!/bin/bash\necho \"Hello, AL2023!\"\n```\n\n#### Merged UserData (bash)\n\n```text\nMIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"//\"\n\n--//\nContent-Type: text/x-shellscript; charset=\"us-ascii\"\n\n#!/bin/bash\necho \"Hello, AL2023!\"\n\n--//\nContent-Type: application/node.eks.aws\n\n# Karpenter Generated NodeConfig\napiVersion: node.eks.aws/v1alpha1\nkind: NodeConfig\nspec:\n  cluster:\n    apiServerEndpoint: https://test-cluster\n    certificateAuthority: cluster-ca\n    cidr: 10.100.0.0/16\n    name: test-cluster\n  kubelet:\n    config:\n      clusterDNS:\n      - 10.100.0.10\n      maxPods: 118\n    flags:\n    - --node-labels=\"karpenter.sh/capacity-type=on-demand,karpenter.sh/nodepool=default\"\n\n--//--\n```\n\n#### Passed-in UserData (MIME)\n\n```text\nMIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"//\"\n\n--//\nContent-Type: text/x-shellscript; charset=\"us-ascii\"\n\n#!/bin/bash\necho \"Hello, AL2023!\"\n\n--//\nContent-Type: application/node.eks.aws\n\napiVersion: node.eks.aws/v1alpha1\nkind: NodeConfig\nspec:\n  kubelet:\n    config:\n      maxPods: 42\n--//\n```\n\n#### Merged UserData (MIME)\n\n```text\nMIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"//\"\n\n--//\nContent-Type: application/node.eks.aws\n\napiVersion: node.eks.aws/v1alpha1\nkind: NodeConfig\nspec:\n  kubelet:\n    config:\n      maxPods: 42\n--//\nContent-Type: text/x-shellscript; charset=\"us-ascii\"\n\n#!/bin/bash\necho \"Hello, AL2023!\"\n\n--//\nContent-Type: application/node.eks.aws\n\n# Karpenter Generated NodeConfig\napiVersion: node.eks.aws/v1alpha1\nkind: NodeConfig\nspec:\n  cluster:\n    apiServerEndpoint: https://test-cluster\n    certificateAuthority: cluster-ca\n    cidr: 10.100.0.0/16\n    name: test-cluster\n  kubelet:\n    config:\n      clusterDNS:\n      - 10.100.0.10\n      maxPods: 118\n    flags:\n    - --node-labels=\"karpenter.sh/capacity-type=on-demand,karpenter.sh/nodepool=default\"\n\n--//--\n```\n\n### Bottlerocket\n\n* Your UserData must be valid TOML.\n* Unknown TOML fields will be ignored when the final merged UserData is generated by Karpenter.\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nAny values configured by Karpenter will take precedent over values specifed in `spec.userData`.\nThis includes cluster name, cluster endpoint, cluster certificate, taints, labels, and any value in [spec.kubelet]({{< ref \"#speckubelet\" >}}).\nThese fields must be configured natively through Karpenter rather than through UserData.\n{{% /alert %}}\n\nConsider the following example to understand how your custom UserData settings will be merged in.\n\n#### Passed-in UserData\n\n```toml\n[settings.kubernetes.eviction-hard]\n\"memory.available\" = \"12%\"\n[settings.kubernetes]\n\"unknown-setting\" = \"unknown\"\n[settings.kubernetes.node-labels]\n'field.controlled.by/karpenter' = 'will-be-overridden'\n```\n\n#### Merged UserData\n\n```toml\n[settings]\n[settings.kubernetes]\napi-server = 'https://cluster'\ncluster-certificate = 'ca-bundle'\ncluster-name = 'cluster'\n\n[settings.kubernetes.node-labels]\n'karpenter.sh/capacity-type' = 'on-demand'\n'karpenter.sh/nodepool' = 'default'\n\n[settings.kubernetes.node-taints]\n\n[settings.kubernetes.eviction-hard]\n'memory.available' = '12%%'\n```\n\n#### Device ownership in Bottlerocket\n\nBottlerocket `v1.30.0+` supports device ownership using the [security context](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/) provided in the Kubernetes specfile. To enable this, you will need the following user-data configurations:\n\n```toml\n[settings]\n[settings.kubernetes]\ndevice-ownership-from-security-context = true\n```\n\nThis allows the container to take ownership of devices allocated to the pod via device-plugins based on the `runAsUser` and `runAsGroup` values provided in the spec. For more details on this, see the [Kubernetes documentation](https://kubernetes.io/blog/2021/11/09/non-root-containers-and-devices/)\n\nThis setting helps you enable Neuron workloads on Bottlerocket instances. See [Accelerators/GPU Resources]({{< ref \"./scheduling#acceleratorsgpu-resources\" >}}) for more details.\n\n### Windows2019/Windows2022/Windows2025\n\n* Your UserData must be specified as PowerShell commands.\n* The UserData specified will be prepended to a Karpenter managed section that will bootstrap the kubelet.\n* Karpenter will continue to set ClusterDNS and all other parameters defined in spec.kubeletConfiguration as before.\n\nConsider the following example to understand how your custom UserData settings will be merged in.\n\n#### Passed-in UserData\n\n```powershell\nWrite-Host \"Running custom user data script\"\n```\n\n#### Merged UserData\n\n```powershell\n<powershell>\nWrite-Host \"Running custom user data script\"\n[string]$EKSBootstrapScriptFile = \"$env:ProgramFiles\\Amazon\\EKS\\Start-EKSBootstrap.ps1\"\n& $EKSBootstrapScriptFile -EKSClusterName 'test-cluster' -APIServerEndpoint 'https://test-cluster' -Base64ClusterCA 'ca-bundle' -KubeletExtraArgs '--node-labels=\"karpenter.sh/capacity-type=spot,karpenter.sh/nodepool=windows2022\" --max-pods=110' -DNSClusterIP '10.0.100.10'\n</powershell>\n```\n\n{{% alert title=\"Windows Support Notice\" color=\"warning\" %}}\nCurrently, Karpenter does not specify `-ServiceCIDR` to [EKS Windows AMI Bootstrap script](https://docs.aws.amazon.com/eks/latest/userguide/eks-optimized-windows-ami.html#bootstrap-script-configuration-parameters).\nWindows worker nodes will use `172.20.0.0/16` or `10.100.0.0/16` for Kubernetes service IP address ranges based on the IP address of the primary interface.\nThe effective ServiceCIDR can be verified at `$env:ProgramData\\Amazon\\EKS\\cni\\config\\vpc-bridge.conf` on the worker node.\n\nSupport for the Windows ServiceCIDR argument can be tracked in a [Karpenter Github Issue](https://github.com/aws/karpenter/issues/4088). Currently, if the effective ServiceCIDR is incorrect for your windows worker nodes, you can add the following userData as a workaround.\n\n```yaml\nspec:\n  userData: |\n    $global:EKSCluster = Get-EKSCluster -Name my-cluster\n```\n{{% /alert %}}\n\n### Custom\n\n* No merging is performed, your UserData must perform all setup required of the node to allow it to join the cluster.\n* Custom UserData must meet the following requirements to work correctly with Karpenter:\n  * It must ensure the node is registered with the `karpenter.sh/unregistered:NoExecute` taint (via kubelet configuration field `registerWithTaints`)\n  * It must set kubelet config options to match those configured in `spec.kubelet`\n\n## spec.detailedMonitoring\n\nEnabling detailed monitoring controls the [EC2 detailed monitoring](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-cloudwatch-new.html) feature. If you enable this option, the Amazon EC2 console displays monitoring graphs with a 1-minute period for the instances that Karpenter launches.\n\n```yaml\nspec:\n  detailedMonitoring: true\n```\n\n## spec.associatePublicIPAddress\n\nYou can explicitly set `AssociatePublicIPAddress: false` when you are only launching into private subnets.\nPreviously, Karpenter auto-set `associatePublicIPAddress` on the primary ENI to false if a user’s subnet options were all private subnets.\nThis value is a boolean field that controls whether instances created by Karpenter for this EC2NodeClass will have an associated public IP address. This overrides the `MapPublicIpOnLaunch` setting applied to the subnet the node is launched in. If this field is not set, the `MapPublicIpOnLaunch` field will be respected.\n\n\n{{% alert title=\"Note\" color=\"warning\" %}}\nIf a `NodeClaim` requests `vpc.amazonaws.com/efa` resources, `spec.associatePublicIPAddress` is respected. However, if this `NodeClaim` requests **multiple** EFA resources and the value for `spec.associatePublicIPAddress` is true, the instance will fail to launch. This is due to an EC2 restriction which\nrequires that the field is only set to true when configuring an instance with a single ENI at launch. When using this field, it is advised that users segregate their EFA workload to use a separate `NodePool` / `EC2NodeClass` pair.\n{{% /alert %}}\n\n## spec.ipPrefixCount\n\nThis value is a integer field that controls how many ip prefixes will be assigned to `NodeClaim`. See the [EC2 Launch Template Network Interface Spec](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-properties-ec2-launchtemplate-networkinterface.html) for more information. Sets ipv4PrefixCount if you are using an IPv4 Cluster, or ipv6PrefixCount if you are using IPv6.\n\n## status.subnets\n[`status.subnets`]({{< ref \"#statussubnets\" >}}) contains the resolved `id` and `zone` of the subnets that were selected by the [`spec.subnetSelectorTerms`]({{< ref \"#specsubnetselectorterms\" >}}) for the node class. The subnets will be sorted by the available IP address count in decreasing order.\n\n#### Examples\n\n```yaml\nspec:\n  subnetSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\"\nstatus:\n  subnets:\n  - id: subnet-0a462d98193ff9fac\n    zone: us-east-2b\n  - id: subnet-0322dfafd76a609b6\n    zone: us-east-2c\n  - id: subnet-0727ef01daf4ac9fe\n    zone: us-east-2b\n  - id: subnet-00c99aeafe2a70304\n    zone: us-east-2a\n  - id: subnet-023b232fd5eb0028e\n    zone: us-east-2c\n  - id: subnet-03941e7ad6afeaa72\n    zone: us-east-2a\n```\n\n## status.securityGroups\n\n[`status.securityGroups`]({{< ref \"#statussecuritygroups\" >}}) contains the resolved `id` and `name` of the security groups that were selected by the [`spec.securityGroupSelectorTerms`]({{< ref \"#specsecuritygroupselectorterms\" >}}) for the node class. The subnets will be sorted by the available IP address count in decreasing order.\n\n#### Examples\n\n```yaml\nspec:\n  securityGroupSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\"\nstatus:\n  securityGroups:\n  - id: sg-041513b454818610b\n    name: ClusterSharedNodeSecurityGroup\n  - id: sg-0286715698b894bca\n    name: ControlPlaneSecurityGroup-1AQ073TSAAPW\n```\n\n## status.amis\n\n[`status.amis`]({{< ref \"#statusamis\" >}}) contains the resolved `id`, `name`, `requirements`, and the `deprecated` status of either the default AMIs for the [`spec.amiFamily`]({{< ref \"#specamifamily\" >}}) or the AMIs selected by the [`spec.amiSelectorTerms`]({{< ref \"#specamiselectorterms\" >}}) if this field is specified. The `deprecated` status will be shown for resolved AMIs that are deprecated.\n\n#### Examples\n\nAMIs resolved with an AL2 alias:\n\n```yaml\nspec:\n  amiSelectorTerms:\n    - alias: al2@v20240807\nstatus:\n  amis:\n  - id: ami-03c3a3dcda64f5b75\n    name: amazon-linux-2-gpu\n    requirements:\n    - key: kubernetes.io/arch\n      operator: In\n      values:\n      - amd64\n    - key: karpenter.k8s.aws/instance-gpu-count\n      operator: Exists\n  - id: ami-03c3a3dcda64f5b75\n    name: amazon-linux-2-gpu\n    requirements:\n    - key: kubernetes.io/arch\n      operator: In\n      values:\n      - amd64\n    - key: karpenter.k8s.aws/instance-accelerator-count\n      operator: Exists\n  - id: ami-06afb2d101cc4b8bd\n    name: amazon-linux-2-arm64\n    requirements:\n    - key: kubernetes.io/arch\n      operator: In\n      values:\n      - arm64\n    - key: karpenter.k8s.aws/instance-gpu-count\n      operator: DoesNotExist\n    - key: karpenter.k8s.aws/instance-accelerator-count\n      operator: DoesNotExist\n  - id: ami-0e28b76d768af234e\n    name: amazon-linux-2\n    requirements:\n    - key: kubernetes.io/arch\n      operator: In\n      values:\n      - amd64\n    - key: karpenter.k8s.aws/instance-gpu-count\n      operator: DoesNotExist\n    - key: karpenter.k8s.aws/instance-accelerator-count\n      operator: DoesNotExist\n```\n\nAMIs resolved from tags:\n\n```yaml\nspec:\n  amiSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\"\nstatus:\n  amis:\n  - id: ami-01234567890123456\n    name: custom-ami-amd64\n    deprecated: true\n    requirements:\n    - key: kubernetes.io/arch\n      operator: In\n      values:\n      - amd64\n  - id: ami-01234567890123456\n    name: custom-ami-arm64\n    requirements:\n    - key: kubernetes.io/arch\n      operator: In\n      values:\n      - arm64\n```\n\n## status.capacityReservations\n\n[`status.capacityReservations`]({{< ref \"#statuscapacityreservations\" >}}) contains the following information for each resolved capacity reservation:\n\n| Field                   | Example                | Description                                                                          |\n| ----------------------- | ---------------------- | ------------------------------------------------------------------------------------ |\n| `availabilityZone`      | `us-east-1a`           | The availability zone the capacity reservation is available in                       |\n| `id`                    | `cr-56fac701cc1951b03` | The ID of the capacity reservation                                                   |\n| `instanceMatchCriteria` | `open`                 | The instanceMatchCriteria for the capacity reservation. Can be `open` or `targeted`. |\n| `instanceType`          | `m5.large`             | The EC2 instance type of the capacity reservation                                    |\n| `ownerID`               | `459763720645`         | The account ID that owns the capacity reservation                                    |\n| `reservationType`       | `default`              | The type of the capacity reservation. Can be `default` or `capacity-block`.          |\n| `state`                 | `active`               | The state of the capacity reservation. Can be `active` or `expiring`.                |\n| `interruptible`         | `true` or `false`      | Whether the capacity reservation is interruptible.                                   |\n\n#### Examples\n\n```yaml\nstatus:\n  capacityReservations:\n  - availabilityZone: us-west-2a\n    id: cr-01234567890123456\n    instanceMatchCriteria: targeted\n    instanceType: g6.48xlarge\n    interruptible: false\n    ownerID: \"012345678901\"\n    reservationType: capacity-block\n    state: expiring\n  - availabilityZone: us-west-2c\n    id: cr-12345678901234567\n    instanceMatchCriteria: open\n    instanceType: g6.48xlarge\n    interruptible: true\n    ownerID: \"98765432109\"\n    reservationType: default\n    state: active\n```\n\n## status.instanceProfile\n\n[`status.instanceProfile`]({{< ref \"#statusinstanceprofile\" >}}) contains the resolved instance profile generated by Karpenter from the [`spec.role`]({{< ref \"#specrole\" >}})\n\n```yaml\nspec:\n  role: \"KarpenterNodeRole-${CLUSTER_NAME}\"\nstatus:\n  instanceProfile: \"${CLUSTER_NAME}-0123456778901234567789\"\n```\n\n## status.conditions\n\n[`status.conditions`]({{< ref \"#statusconditions\" >}}) indicates EC2NodeClass readiness. This will be `Ready` when Karpenter successfully discovers AMIs, Instance Profile, Subnets, Cluster CIDR (AL2023 only) and SecurityGroups for the EC2NodeClass.\n\nNodeClasses have the following status conditions:\n\n| Condition Type       | Description                                                                                                                                                                                                                       |\n|----------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| SubnetsReady         | Subnets are discovered.                                                                                                                                                                                                           |\n| SecurityGroupsReady  | Security Groups are discovered.                                                                                                                                                                                                   |\n| InstanceProfileReady | Instance Profile is discovered.                                                                                                                                                                                                   |\n| AMIsReady            | AMIs are discovered.                                                |\n| Ready                | Top level condition that indicates if the nodeClass is ready. If any of the underlying conditions is `False` then this condition is set to `False` and `Message` on the condition indicates the dependency that was not resolved. |\n\nIf a NodeClass is not ready, NodePools that reference it through their `nodeClassRef` will not be considered for scheduling.\n"
  },
  {
    "path": "website/content/en/docs/concepts/nodeoverlays.md",
    "content": "---\ntitle: \"NodeOverlays\"\nlinkTitle: \"NodeOverlays\"\nweight: 40\ndescription: >\n  Understand NodeOverlays and how they enable fine-tuning of Karpenter's scheduling simulation for advanced use cases.\n---\n\n<i class=\"fa-solid fa-circle-info\"></i> <b>Feature State: </b> [Alpha]({{<ref \"../reference/settings#feature-gates\" >}})\n\n\nKarpenter uses NodeOverlays to inject alternative instance type information into the scheduling simulation for more accurate scheduling decisions.\nNodeOverlays enable users to fine-tune instance pricing and add extended resources to instance types that should be considered during Karpenter's decision-making process.\nThey provide a flexible way to account for real-world factors like savings plans, licensing costs, and custom hardware resources that aren't captured in the base instance data from cloud providers.\n\nNodeOverlays work by modifying the instance type information that Karpenter uses during its scheduling simulation.\nWhen Karpenter evaluates which instance types can satisfy pending pod requirements, it applies any matching NodeOverlays to adjust pricing information or add extended resources before making provisioning decisions.\n\n## NodeOverlay Configuration\n\n```yaml\napiVersion: karpenter.sh/v1alpha1\nkind: NodeOverlay\nmetadata:\n  name: example-overlay\nspec:\n  # Optional weight for conflict resolution (higher weight wins)\n  weight: 10\n  \n  # Requirements determine which instance types this overlay applies to\n  requirements:\n    - key: node.kubernetes.io/instance-type\n      operator: In\n      values: [\"m5.large\", \"m5.xlarge\"]\n    - key: karpenter.sh/capacity-type  \n      operator: In\n      values: [\"spot\"]\n    - key: karpenter.k8s.aws/instance-cpu \n      operator: Gte\n      values: [\"32\"]\n  \n  # Price and priceAdjustment are mutually exclusive\n  # Price override (sets absolute price)\n  price: \"5.00\"\n  \n  # Price adjustment (modifies existing price)\n  priceAdjustment: \"+10%\"  # or \"-0.50\" for absolute adjustment\n  \n  # Extended resources to add to matching instance types\n  capacity:\n    hugepages-2Mi: 100Mi\n    hugepages-1Gi: 2Gi\n    custom-device/gpu-slice: 4\n```\n\n## spec.weight\nOptional integer that determines precedence when multiple NodeOverlays match the same instance type. Higher weights take precedence over lower weights. When weights are equal, alphabetical ordering by name is used for conflict resolution. If not specified, the default weight is 0. If there is a conflict between NodeOverlays with the same weight, it will be indicated in the status and the NodeOverlay will not be applied.\n\n## spec.requirements\nArray of requirements that determine which instance types this overlay applies to. Uses the same format as NodePool requirements and supports all standard Kubernetes label selectors. An empty requirements array applies the overlay to all instance types. Kubernetes defines the following [Well-Known Labels](https://kubernetes.io/docs/reference/labels-annotations-taints/), and cloud providers (e.g., AWS) implement them.\n\nCurrently, requirements sets are defined based on the well-known labels that are discovered for instance types. 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).\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nThere is currently a limit of 100 on the total number of requirements on both the NodeOverlay.\n{{% /alert %}}\n\n## spec.price\nAbsolute price override as a string representing the price in your currency. This completely replaces the original instance price reported by the cloud provider. Karpenter is currency-agnostic, so this works with any currency unit.\n\n## spec.priceAdjustment\nPrice modification that can be specified as:\n- **Absolute adjustment**: `\"+5.00\"` (increase by 5.00) or `\"-2.50\"` (decrease by 2.50)\n- **Percentage adjustment**: `\"+15%\"` (increase by 15%) or `\"-10%\"` (decrease by 10%)\n\n## spec.capacity\nMap of extended resources to add to matching instance types. These resources are added to the existing standard capacity and do not replace or modify well-known resources. Only extended resources should be specified here.\n\n```yaml\napiVersion: karpenter.sh/v1alpha1\nkind: NodeOverlay\nmetadata:\n  name: custom-devices\nspec:\n  requirements:\n    - key: node.kubernetes.io/instance-type\n      operator: In\n      values: [\"m5.large\", \"m5.xlarge\", \"m5.2xlarge\"]\n  capacity:\n    smarter-devices/fuse: 1\n    custom-hardware/accelerator: 2\n```\n\n## Conflict Resolution\n\nWhen multiple NodeOverlays match the same instance type, conflicts are resolved using the following rules:\n\n1. **Weight-based precedence**: Higher weight values take precedence over lower weights\n2. **Alphabetical ordering**: When weights are equal, overlays are applied in alphabetical order by name\n3. **Field-level merging**: Higher-weight overlays override specific fields from lower-weight overlays, but capacity fields from different overlays are merged together\n\n### Example Conflict Resolution\n\n```yaml\napiVersion: karpenter.sh/v1alpha1\nkind: NodeOverlay\nmetadata:\n  name: overlay-a\nspec:\n  weight: 5\n  requirements:\n    - key: node.kubernetes.io/instance-type\n      operator: In\n      values: [\"m5.large\"]\n  priceAdjustment: \"-10%\"\n  capacity:\n    hugepages-2Mi: 50Mi\n---\napiVersion: karpenter.sh/v1alpha1\nkind: NodeOverlay\nmetadata:\n  name: overlay-b\nspec:\n  weight: 10  # Higher weight\n  requirements:\n    - key: node.kubernetes.io/instance-type\n      operator: In\n      values: [\"m5.large\"]\n  priceAdjustment: \"-20%\"  # This overrides overlay-a's adjustment\n  capacity:\n    custom-device/gpu: 1   # This is merged with hugepages-2Mi from overlay-a\n```\n\n**Result for m5.large instances:**\n- Price adjustment: `-20%` (from overlay-b, overrides overlay-a)\n- Capacity: `hugepages-2Mi: 50Mi` (from overlay-a) + `custom-device/gpu: 1` (from overlay-b)\n\n## Integration with Consolidation\n\nNodeOverlay modifications are automatically integrated into Karpenter's consolidation process:\n\n* **Price adjustments** affect consolidation decisions by changing the cost calculations used to determine optimal instance selections during replacement operations\n* **Capacity additions** are considered during consolidation when evaluating whether workloads can be moved between nodes\n* Changes take effect through normal consolidation cycles without requiring additional drift detection or forced node replacement\n\nWhen NodeOverlay configurations change, Karpenter incorporates these changes into its next consolidation evaluation, potentially triggering node replacements if the new configurations significantly change the optimal instance selection for existing workloads.\n\n## Status and Observability\n\nNodeOverlays include status conditions to help you understand their current state and troubleshoot configuration issues.\n\n### Common Status Conditions\n\n* **Ready=True**: The overlay is successfully applied to matching instance types\n* **Ready=False**: Configuration conflicts, requirement mismatches, or other errors prevent the overlay from being applied\n\n### Status Messages\n\nWhen `Ready=False`, the status message provides specific information about the issue:\n\n```yaml\nstatus:\n  conditions:\n  - type: ValidationSucceeded\n    status: \"False\"\n    lastTransitionTime: \"2024-07-24T18:30:00Z\"\n    reason: \"Conflict\"\n    message: \"conflict with another overlay\"\n```\n\n## Limitations and Considerations\n\n* **Resource Scope**: NodeOverlays can only add extended resources; they cannot modify or remove standard resources (CPU, memory, storage)\n* **Actual vs. Simulated**: Capacity modifications only affect Karpenter's scheduling simulation; actual node resources must be configured through other means\n* **Pricing vs. Billing**: Price adjustments influence Karpenter's scheduling decisions but don't affect actual cloud provider billing\n* **Alpha Status**: NodeOverlays are currently in alpha (v1alpha1) and the API may change in future versions"
  },
  {
    "path": "website/content/en/docs/concepts/nodepools.md",
    "content": "---\ntitle: \"NodePools\"\nlinkTitle: \"NodePools\"\nweight: 10\ndescription: >\n  Configure Karpenter with NodePools\n---\n\nWhen you first installed Karpenter, you set up a default NodePool. The NodePool sets constraints on the nodes that can be created by Karpenter and the pods that can run on those nodes. The NodePool can be set to do things like:\n\n* Define taints to limit the pods that can run on nodes Karpenter creates\n* Define any startup taints to inform Karpenter that it should taint the node initially, but that the taint is temporary.\n* Limit node creation to certain zones, instance types, and computer architectures\n* Set defaults for node expiration\n\nYou can change your NodePool or add other NodePools to Karpenter.\nHere are things you should know about NodePools:\n\n* Karpenter won't do anything if there is not at least one NodePool configured.\n* Each NodePool that is configured is looped through by Karpenter.\n* If Karpenter encounters a taint in the NodePool that is not tolerated by a Pod, Karpenter won't use that NodePool to provision the pod.\n* If Karpenter encounters a startup taint in the NodePool 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.\n* It is recommended to create NodePools that are mutually exclusive. So no Pod should match multiple NodePools. If multiple NodePools are matched, Karpenter will use the NodePool with the highest [weight](#specweight).\n\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nObjects for setting Kubelet features have been moved from the NodePool spec to the EC2NodeClasses spec, to not require other Karpenter providers to support those features.\n{{% /alert %}}\n\nFor some example `NodePool` configurations, see the [examples in the Karpenter GitHub repository](https://github.com/aws/karpenter/blob/main/examples/v1/).\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\nspec:\n  # Template section that describes how to template out NodeClaim resources that Karpenter will provision\n  # Karpenter will consider this template to be the minimum requirements needed to provision a Node using this NodePool\n  # It will overlay this NodePool with Pods that need to schedule to further constrain the NodeClaims\n  # Karpenter will provision to launch new Nodes for the cluster\n  template:\n    metadata:\n      # Labels are arbitrary key-values that are applied to all nodes\n      labels:\n        billing-team: my-team\n\n      # Annotations are arbitrary key-values that are applied to all nodes\n      annotations:\n        example.com/owner: \"my-team\"\n    spec:\n      # References the Cloud Provider's NodeClass resource, see your cloud provider specific documentation\n      nodeClassRef:\n        group: karpenter.k8s.aws  # Updated since only a single version will be served\n        kind: EC2NodeClass\n        name: default\n\n      # Provisioned nodes will have these taints\n      # Taints may prevent pods from scheduling if they are not tolerated by the pod.\n      taints:\n        - key: example.com/special-taint\n          effect: NoSchedule\n\n      # Provisioned nodes will have these taints, but pods do not need to tolerate these taints to be provisioned by this\n      # NodePool. These taints are expected to be temporary and some other entity (e.g. a DaemonSet) is responsible for\n      # removing the taint after it has finished initializing the node.\n      startupTaints:\n        - key: example.com/another-taint\n          effect: NoSchedule\n\n      # The amount of time a Node can live on the cluster before being removed\n      # Avoiding long-running Nodes helps to reduce security vulnerabilities as well as to reduce the chance of issues that can plague Nodes with long uptimes such as file fragmentation or memory leaks from system processes\n      # You can choose to disable expiration entirely by setting the string value 'Never' here\n\n      # Note: changing this value in the nodepool will drift the nodeclaims.\n      expireAfter: 720h | Never\n\n      # The amount of time that a node can be draining before it's forcibly deleted. A node begins draining when a delete call is made against it, starting\n      # its finalization flow. Pods with TerminationGracePeriodSeconds will be deleted preemptively before this terminationGracePeriod ends to give as much time to cleanup as possible.\n      # If your pod's terminationGracePeriodSeconds is larger than this terminationGracePeriod, Karpenter may forcibly delete the pod\n      # before it has its full terminationGracePeriod to cleanup.\n\n      # Note: changing this value in the nodepool will drift the nodeclaims.\n      terminationGracePeriod: 48h\n\n      # Requirements that constrain the parameters of provisioned nodes.\n      # These requirements are combined with pod.spec.topologySpreadConstraints, pod.spec.affinity.nodeAffinity, pod.spec.affinity.podAffinity, and pod.spec.nodeSelector rules.\n      # Operators { In, NotIn, Exists, DoesNotExist, Gt, Lt, Gte, and Lte } are supported.\n      # https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#operators\n      requirements:\n        - key: \"karpenter.k8s.aws/instance-category\"\n          operator: In\n          values: [\"c\", \"m\", \"r\"]\n          # minValues here enforces the scheduler to consider at least that number of unique instance-category to schedule the pods.\n          # This field is ALPHA and can be dropped or replaced at any time\n          minValues: 2\n        - key: \"karpenter.k8s.aws/instance-family\"\n          operator: In\n          values: [\"m5\",\"m5d\",\"c5\",\"c5d\",\"c4\",\"r4\"]\n          minValues: 5\n        - key: \"karpenter.k8s.aws/instance-cpu\"\n          operator: In\n          values: [\"4\", \"8\", \"16\", \"32\"]\n        - key: \"karpenter.k8s.aws/instance-hypervisor\"\n          operator: In\n          values: [\"nitro\"]\n        - key: \"karpenter.k8s.aws/instance-generation\"\n          operator: Gte\n          values: [\"3\"]\n        - key: \"topology.kubernetes.io/zone\"\n          operator: In\n          values: [\"us-west-2a\", \"us-west-2b\"]\n        - key: \"kubernetes.io/arch\"\n          operator: In\n          values: [\"arm64\", \"amd64\"]\n        - key: \"karpenter.sh/capacity-type\"\n          operator: In\n          values: [\"spot\", \"on-demand\", \"reserved\"]\n\n  # Disruption section which describes the ways in which Karpenter can disrupt and replace Nodes\n  # Configuration in this section constrains how aggressive Karpenter can be with performing operations\n  # like rolling Nodes due to them hitting their maximum lifetime (expiry) or scaling down nodes to reduce cluster cost\n  disruption:\n    # Describes which types of Nodes Karpenter should consider for consolidation\n    # If using 'WhenEmptyOrUnderutilized', Karpenter will consider all nodes for consolidation and attempt to remove or replace Nodes when it discovers that the Node is empty or underutilized and could be changed to reduce cost\n    # If using `WhenEmpty`, Karpenter will only consider nodes for consolidation that contain no workload pods\n    consolidationPolicy: WhenEmptyOrUnderutilized | WhenEmpty\n\n    # The amount of time Karpenter should wait to consolidate a node after a pod has been added or removed from the node.\n    # You can choose to disable consolidation entirely by setting the string value 'Never' here\n    consolidateAfter: 1m | Never # Added to allow additional control over consolidation aggressiveness\n\n    # Budgets control the speed Karpenter can scale down nodes.\n    # Karpenter will respect the minimum of the currently active budgets, and will round up\n    # when considering percentages. Duration and Schedule must be set together.\n    budgets:\n    - nodes: 10%\n    # On Weekdays during business hours, don't do any deprovisioning.\n    - schedule: \"0 9 * * mon-fri\"\n      duration: 8h\n      nodes: \"0\"\n\n  # Optional: Number of nodes to maintain for static capacity\n  # When set, NodePool operates in static mode maintaining fixed node count\n  replicas: 5\n\n  # Resource limits constrain the total size of the pool.\n  # Limits prevent Karpenter from creating new instances once the limit is exceeded.\n  limits:\n    cpu: \"1000\"\n    memory: 1000Gi\n    # For static NodePools, limits.nodes constrains maximum node count during scaling/drift\n    # Note : Supported only for static NodePools\n    nodes: 10\n\n  # Priority given to the NodePool when the scheduler considers which NodePool\n  # to select. Higher weights indicate higher priority when comparing NodePools.\n  # Specifying no weight is equivalent to specifying a weight of 0.\n  # Note: weight cannot be set when replicas is specified\n  weight: 10\nstatus:\n  conditions:\n    - type: Initialized\n      status: \"False\"\n      observedGeneration: 1\n      lastTransitionTime: \"2024-02-02T19:54:34Z\"\n      reason: NodeClaimNotLaunched\n      message: \"NodeClaim hasn't succeeded launch\"\n  # Current node count for the NodePool\n  nodes: 5\n  resources:\n    cpu: \"20\"\n    memory: \"8192Mi\"\n    ephemeral-storage: \"100Gi\"\n```\n\n## metadata.name\nThe name of the NodePool.\n\n## spec.template.metadata.labels\nArbitrary key/value pairs to apply to all nodes.\n\n## spec.template.metadata.annotations\nArbitrary key/value pairs to apply to all nodes.\n\n## spec.template.spec.nodeClassRef\n\nThis field points to the Cloud Provider NodeClass resource. See [EC2NodeClasses]({{<ref \"nodeclasses\" >}}) for details.\n\n## spec.template.spec.taints\n\nTaints to add to provisioned nodes. Pods that don't tolerate those taints could be prevented from scheduling.\nSee [Taints and Tolerations](https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/) for details.\n\n## spec.template.spec.startupTaints\n\nTaints that are added to nodes to indicate that a certain condition must be met, such as starting an agent or setting up networking, before the node is can be initialized.\nThese taints must be cleared before pods can be deployed to a node.\n\n## spec.template.spec.expireAfter\n\nThe amount of time a Node can live on the cluster before being deleted by Karpenter. Nodes will begin draining once it's expiration has been hit.\n\n## spec.template.spec.terminationGracePeriod\n\nThe amount of time a Node can be draining before Karpenter forcibly cleans up the node. Pods blocking eviction like PDBs and do-not-disrupt will be respected during draining until the `terminationGracePeriod` is reached, where those pods will be forcibly deleted.\n\n## spec.template.spec.requirements\n\nKubernetes 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 NodePool API.\n\nIn 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).\n\nThese well-known labels may be specified at the NodePool level, or in a workload definition (e.g., nodeSelector on a pod.spec). Nodes are chosen using both the NodePool'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 NodePool's requirements. If a requirement is not defined for a well known label, any value available to the cloud provider may be chosen.\n\nFor example, an instance type may be specified using a nodeSelector in a pod spec. If the instance type requested is not included in the NodePool list and the NodePool has instance type requirements, Karpenter will not create a node or schedule the pod.\n\n**Static NodePool**\n\nThe requirements for static NodePool behaves identically to dynamic pools — it defines the constraints for all NodeClaims launched under that NodePool.\n\nThe NodeClaim requirements are directly derived from the NodeClaimTemplate on the NodePool. These are evaluated once per NodeClaim at creation, meaning the selection is based solely on what the template allows.\nAs a result, NodeClaims created for the same static NodePool could result in different instance types being launched depending on instance availability so long as those instance types are compatible with the NodePool's requirements.\n\n### Well-Known Labels\n\n#### Instance Types\n\n- key: `node.kubernetes.io/instance-type`\n- key: `karpenter.k8s.aws/instance-family`\n- key: `karpenter.k8s.aws/instance-category`\n- key: `karpenter.k8s.aws/instance-generation`\n- key: `karpenter.k8s.aws/instance-capability-flex`\n\nGenerally, 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.\n\nReview [AWS instance types](../../reference/instance-types). Most instance types are supported with the exclusion of [non-HVM](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/virtualization_types.html).\n\n#### Availability Zones\n\n- key: `topology.kubernetes.io/zone`\n- value example: `us-east-1c`\n- value list: `aws ec2 describe-availability-zones --region <region-name>`\n\nKarpenter 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.\n\n[Learn more about Availability Zone\nIDs.](https://docs.aws.amazon.com/ram/latest/userguide/working-with-az-ids.html)\n\n#### Architecture\n\n- key: `kubernetes.io/arch`\n- values\n  - `amd64`\n  - `arm64`\n\nKarpenter supports `amd64` nodes, and `arm64` nodes.\n\n#### Operating System\n - key: `kubernetes.io/os`\n - values\n   - `linux`\n   - `windows`\n\nKarpenter supports `linux` and `windows` operating systems.\n\n#### Capacity Type\n\n- key: `karpenter.sh/capacity-type`\n- values\n  - `spot`\n  - `on-demand`\n  - `reserved`\n\nKarpenter supports specifying capacity type, which is analogous to [EC2 purchase options](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-purchasing-options.html). Note that the `reserved` capacity type refers to [capacity reservations](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/capacity-reservation-overview.html) (on-demand capacity reservations and capacity blocks) not [reserved instances](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-reserved-instances.html) (RIs).\n\nIf a NodePool is compatible with multiple capacity types, Karpenter will prioritize `reserved` capacity, followed by `spot`, then finally `on-demand`.\nIf the provider API (e.g. EC2 Fleet's API) indicates capacity is unavailable, Karpenter caches that result across all attempts to provision EC2 capacity for that instance type and zone for the next 3 minutes.\nIf there are no other possible offerings available for a higher priority capacity type, Karpenter will attempt to fallback to a lower priority capacity type, generally within milliseconds.\n\nKarpenter also allows `karpenter.sh/capacity-type` to be used as a topology key for enforcing topology-spread.\n\n#### Tenancy\n\n- key: `karpenter.k8s.aws/instance-tenancy`\n- values\n    - `default`\n    - `dedicated`\n\nKarpenter supports specifying tenancy type.\n\nIf a NodeClaim requires dedicated tenancy, then it will launch on a [Dedicated Instance](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/dedicated-instance.html).  If the NodeClaim does not specify the label, or if both types are allowed, then it will launch with default tenancy.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nThere is currently a limit of 100 on the total number of requirements on both the NodePool and the NodeClaim. It's important to note that `spec.template.metadata.labels` are also propagated as requirements on the NodeClaim when it's created, meaning that you can't have more than 100 requirements and labels combined set on your NodePool.\n{{% /alert %}}\n\n### Min Values\n\nAlong with the combination of [key,operator,values] in the requirements, Karpenter also supports `minValues` in the NodePool requirements block, allowing the scheduler to be aware of user-specified flexibility minimums while scheduling pods to a cluster. Depending on the policy configured via the flag `--min-values-policy` or environment variable `MIN_VALUES_POLICY`, if Karpenter cannot meet this minimum flexibility for each key when scheduling a pod, it will either fail the scheduling loop for that NodePool, either falling back to another NodePool which meets the pod requirements or failing scheduling the pod altogether (when policy is set to `Strict`) or relax `minValues` until they can be met (when policy is set to `BestEffort`).\n\nFor spot instances, you should specify `karpenter.sh/capacity-type: spot` in your requirements. For example, the below spec will use spot instance type for all provisioned instances and enforces `minValues` to various keys where it is defined\ni.e at least 2 unique instance families from [c,m,r], 5 unique instance families [eg: \"m5\",\"m5d\",\"r4\",\"c5\",\"c5d\",\"c4\" etc], 10 unique instance types [eg: \"c5.2xlarge\",\"c4.xlarge\" etc] is required for scheduling the pods.\n\n```yaml\nspec:\n  template:\n    spec:\n      requirements:\n        - key: kubernetes.io/arch\n          operator: In\n          values: [\"amd64\"]\n        - key: kubernetes.io/os\n          operator: In\n          values: [\"linux\"]\n        - key: karpenter.sh/capacity-type\n          operator: In\n          values: [\"spot\"]\n        - key: karpenter.k8s.aws/instance-category\n          operator: In\n          values: [\"c\", \"m\", \"r\"]\n          minValues: 2\n        - key: karpenter.k8s.aws/instance-family\n          operator: Exists\n          minValues: 5\n        - key: node.kubernetes.io/instance-type\n          operator: Exists\n          minValues: 10\n        - key: karpenter.k8s.aws/instance-generation\n          operator: Gte\n          values: [\"3\"]\n```\n\nNote that `minValues` can be used with multiple operators and multiple requirements. And if the `minValues` are defined with multiple operators for the same requirement key, scheduler considers the max of all the `minValues` for that requirement. For example, the below spec requires scheduler to consider at least 5 instance-family to schedule the pods.\n\n```yaml\nspec:\n  template:\n    spec:\n      requirements:\n        - key: kubernetes.io/arch\n          operator: In\n          values: [\"amd64\"]\n        - key: kubernetes.io/os\n          operator: In\n          values: [\"linux\"]\n        - key: karpenter.k8s.aws/instance-category\n          operator: In\n          values: [\"c\", \"m\", \"r\"]\n          minValues: 2\n        - key: karpenter.k8s.aws/instance-family\n          operator: Exists\n          minValues: 5\n        - key: karpenter.k8s.aws/instance-family\n          operator: In\n          values: [\"m5\",\"m5d\",\"c5\",\"c5d\",\"c4\",\"r4\"]\n          minValues: 3\n        - key: node.kubernetes.io/instance-type\n          operator: Exists\n          minValues: 10\n        - key: karpenter.k8s.aws/instance-generation\n          operator: Gte\n          values: [\"3\"]\n```\n\n{{% alert title=\"Recommended\" color=\"primary\" %}}\nKarpenter allows you to be extremely flexible with your NodePools by only constraining your instance types in ways that are absolutely necessary for your cluster. By default, Karpenter will enforce that you specify the `spec.template.spec.requirements` field, but will not enforce that you specify any requirements within the field. If you choose to specify `requirements: []`, this means that you will completely flexible to _all_ instance types that your cloud provider supports.\n\nThough Karpenter doesn't enforce these defaults, for most use-cases, we recommend that you specify _some_ requirements to avoid odd behavior or exotic instance types. Below, is a high-level recommendation for requirements that should fit the majority of use-cases for generic workloads\n\n```yaml\nspec:\n  template:\n    spec:\n      requirements:\n        - key: kubernetes.io/arch\n          operator: In\n          values: [\"amd64\"]\n        - key: kubernetes.io/os\n          operator: In\n          values: [\"linux\"]\n        - key: karpenter.sh/capacity-type\n          operator: In\n          values: [\"on-demand\"]\n        - key: karpenter.k8s.aws/instance-category\n          operator: In\n          values: [\"c\", \"m\", \"r\"]\n        - key: karpenter.k8s.aws/instance-generation\n          operator: Gte\n          values: [\"3\"]\n```\n\n{{% /alert %}}\n\n\n## spec.disruption\n\nYou can configure Karpenter to disrupt Nodes through your NodePool in multiple ways. You can use `spec.disruption.consolidationPolicy`, `spec.disruption.consolidateAfter`, or `spec.template.spec.expireAfter`.\nYou can also rate limit Karpenter's disruption through the NodePool's `spec.disruption.budgets`.\nRead [Disruption]({{<ref \"disruption\" >}}) for more.\n\n## spec.replicas\n\nOptional field that enables static capacity mode. When specified, the NodePool maintains a fixed number of nodes regardless of pod demand.\n\n**Static NodePool Constraints:**\n- Cannot be removed once set (NodePool cannot switch between static and dynamic modes)\n- Only `limits.nodes` is allowed in limits section\n- `weight` field cannot be set\n- Nodes are not considered for consolidation\n- Scale operations bypass node disruption budgets but respect PodDisruptionBudgets\n\n**Scaling:** Use `kubectl scale nodepool <name> --replicas=<count>` to change replica count.\n\n## spec.limits\n\nThe NodePool spec includes a limits section (`spec.limits`), which constrains the maximum amount of resources that the NodePool can consume.\n\nIf the `NodePool.spec.limits` section is unspecified, it means that there is no default limitation on resource allocation. In this case, the maximum resource consumption is governed by the quotas set by your cloud provider. If a limit has been exceeded, nodes provisioning is prevented until some nodes have been terminated.\n\n**For Static NodePools:** Only `limits.nodes` is supported. This field constrains the maximum number of nodes during scaling operations or drift replacement. Note that `limits.nodes` is support only on static NodePools.\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\nspec:\n  replicas: 10\n  template:\n    spec:\n      requirements:\n        - key: karpenter.sh/capacity-type\n          operator: In\n          values: [\"spot\"]\n  limits:\n    cpu: 1000\n    memory: 1000Gi\n    nvidia.com/gpu: 2\n    # For static NodePools, only nodes limit is allowed\n    nodes: 20\n```\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nKarpenter provisioning is highly parallel. Because of this, limit checking is eventually consistent, which can result in overrun during rapid scale outs.\n{{% /alert %}}\n\nCPU 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.\n\nMemory limits are described with a [`BinarySI` value, such as 1000Gi.](https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/#meaning-of-memory)\n\nYou can view the current consumption of cpu and memory on your cluster by running:\n```\nkubectl get nodepool -o=jsonpath='{.items[0].status}'\n```\n\nReview 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`.\n\n## spec.weight\n\nKarpenter allows you to describe NodePool 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).\n\nFor more information on weighting NodePools, see the [Weighted NodePools section]({{<ref \"scheduling#weighted-nodepools\" >}}) in the scheduling docs.\n\n## status.conditions\n[Conditions](https://github.com/kubernetes/apimachinery/blob/f14778da5523847e4c07346e3161a4b4f6c9186e/pkg/apis/meta/v1/types.go#L1523) objects add observability features to Karpenter.\n* The `status.conditions.type` object reflects node status, such as `Initialized` or `Available`.\n* The status of the condition, `status.conditions.status`, indicates if the condition is `True` or `False`.\n* The `status.conditions.observedGeneration` indicates  if the instance is out of date with the current state of `.metadata.generation`.\n* The `status.conditions.lastTransitionTime` object contains a programatic identifier that indicates the time of the condition's previous transition.\n* The `status.conditions.reason` object indicates the reason for the condition's previous transition.\n* The `status.conditions.message` object provides human-readable details about the condition's previous transition.\n\nNodePools have the following status conditions:\n\n| Condition Type      | Description                                                                                                                                       |\n|---------------------|---------------------------------------------------------------------------------------------------------------------------------------------------|\n| NodeClassReady      | Underlying nodeClass is ready                                                                                                                     |\n| ValidationSucceeded | NodePool CRD validation succeeded                                                                                                                 |\n| Ready               | Top level condition that indicates if the nodePool is ready. This condition will not be true until all the other conditions on nodePool are true. |\n\nIf a NodePool is not ready, it will not be considered for scheduling.\n\n## status.nodes\nThis field shows the current number of nodes managed by the NodePool.\n\n## status.resources\nObjects under `status.resources` provide information about the status of resources such as `cpu`, `memory`, and `ephemeral-storage`.\n\n## Examples\n\n### Isolating Expensive Hardware\n\nA NodePool can be set up to only provision nodes on particular processor types.\nThe following example sets a taint that only allows pods with tolerations for Nvidia GPUs to be scheduled:\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: gpu\nspec:\n  disruption:\n    consolidationPolicy: WhenEmptyOrUnderutilized\n  template:\n    spec:\n      requirements:\n      - key: node.kubernetes.io/instance-type\n        operator: In\n        values: [\"p3.8xlarge\", \"p3.16xlarge\"]\n      taints:\n      - key: nvidia.com/gpu\n        value: \"true\"\n        effect: NoSchedule\n```\nIn order for a pod to run on a node defined in this NodePool, it must tolerate `nvidia.com/gpu` in its pod spec.\n\n### Static NodePool\n\nA NodePool can be configured for static capacity by setting the `replicas` field. This maintains a fixed number of nodes regardless of pod demand.\nUsers who want to spread nodes across zones can do so explicitly by:\n- Creating multiple static NodePools, each pinned to a specific AZ.\n\nThe following example creates a static NodePool with 10 replicas:\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: static-capacity\nspec:\n  replicas: 10\n  template:\n    spec:\n      requirements:\n      - key: node.kubernetes.io/instance-type\n        operator: In\n        values: [\"m5.large\", \"m5.xlarge\"]\n      - key: topology.kubernetes.io/zone\n        operator: In\n        values: [\"us-west-2a\"]  # All replicas will come up in specified zone\n  limits:\n    nodes: 15  # Maximum nodes during scaling/drift\n  disruption:\n    budgets:\n    - nodes: 20%  # Disruption budget for drift replacement\n```\n\n### Cilium Startup Taint\n\nPer the Cilium [docs](https://docs.cilium.io/en/stable/installation/taints/#taint-effects), 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.\n\nFailure to provide accurate `startupTaints` can result in Karpenter continually provisioning new nodes. When the new node joins and the startup taint that Karpenter is unaware of is added, Karpenter now considers the pending pod to be unschedulable to this node. Karpenter will attempt to provision yet another new node to schedule the pending pod.\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: cilium-startup\nspec:\n  disruption:\n    consolidationPolicy: WhenEmptyOrUnderutilized\n  template:\n    spec:\n      startupTaints:\n      - key: node.cilium.io/agent-not-ready\n        value: \"true\"\n        effect: NoExecute\n```\n"
  },
  {
    "path": "website/content/en/docs/concepts/scheduling.md",
    "content": "---\ntitle: \"Scheduling\"\nlinkTitle: \"Scheduling\"\nweight: 40\ndescription: >\n  Learn about scheduling workloads with Karpenter\n---\n\nIf 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.\nHowever, 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.\nReasons for constraining where your pods run could include:\n\n* Needing to run in zones where dependent applications or storage are available\n* Requiring certain kinds of processors or other hardware\n* Wanting to use techniques like topology spread to help ensure high availability\n\nYour Cloud Provider defines the first layer of constraints, including all instance types, architectures, zones, and purchase types available to its cloud.\nThe cluster administrator adds the next layer of constraints by creating one or more NodePools.\nThe final layer comes from you adding specifications to your Kubernetes pod deployments.\nPod scheduling constraints must fall within a NodePool's constraints or the pods will not deploy.\nFor example, if the NodePool sets limits that allow only a particular zone to be used, and a pod asks for a different zone, it will not be scheduled.\n\nConstraints you can request include:\n\n* **Resource requests**: Request that certain amount of memory or CPU be available.\n* **Node selection**: Choose to run on a node that is has a particular label (`nodeSelector`).\n* **Node affinity**: Draws a pod to run on nodes with particular attributes (affinity).\n* **Topology spread**: Use topology spread to help ensure availability of the application.\n* **Pod affinity/anti-affinity**: Draws pods towards or away from topology domains based on the scheduling of other pods.\n\nKarpenter supports standard Kubernetes scheduling constraints.\nThis allows you to define a single set of rules that apply to both existing and provisioned capacity.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nKarpenter supports specific [Well-Known Labels, Annotations and Taints](https://kubernetes.io/docs/reference/labels-annotations-taints/) that are useful for scheduling.\n{{% /alert %}}\n\n## Resource requests\n\nWithin a Pod spec, you can both make requests and set limits on resources a pod needs, such as CPU and memory.\nFor example:\n\n```yaml\napiVersion: v1\nkind: Pod\nmetadata:\n  name: myapp\nspec:\n  containers:\n  - name: app\n    image: myimage\n    resources:\n      requests:\n        memory: \"128Mi\"\n        cpu: \"500m\"\n      limits:\n        memory: \"256Mi\"\n        cpu: \"1000m\"\n```\nIn this example, the container is requesting 128MiB of memory and .5 CPU.\nIts limits are set to 256MiB of memory and 1 CPU.\nInstance type selection math only uses `requests`, but `limits` may be configured to enable resource oversubscription.\n\n\nSee [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 [NodePools]({{<ref \"./nodepools\" >}}) for a list of supported resources.\n\n### Accelerators/GPU Resources\n\nAccelerator (e.g., GPU) values include\n- `nvidia.com/gpu`\n- `amd.com/gpu`\n- `aws.amazon.com/neuron`\n- `aws.amazon.com/neuroncore`\n- `habana.ai/gaudi`\n\nKarpenter supports accelerators, such as GPUs.\n\nAdditionally, include a resource requirement in the workload manifest. This will cause the GPU dependent pod to be scheduled onto the appropriate node.\n\nHere is an example of an accelerator resource in a workload manifest (e.g., pod):\n\n```yaml\nspec:\n  template:\n    spec:\n      containers:\n      - resources:\n          limits:\n            nvidia.com/gpu: \"1\"\n```\n{{% alert title=\"Note\" color=\"primary\" %}}\nIf you are provisioning nodes that will utilize accelerators/GPUs, you need to deploy the appropriate device plugin daemonset.\nWithout the respective device plugin daemonset, Karpenter will not see those nodes as initialized.\nRefer 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:\n* `nvidia.com/gpu`: [NVIDIA device plugin for Kubernetes](https://github.com/NVIDIA/k8s-device-plugin)\n* `amd.com/gpu`: [AMD GPU device plugin for Kubernetes](https://github.com/RadeonOpenCompute/k8s-device-plugin)\n* `aws.amazon.com/neuron`/`aws.amazon.com/neuroncore`: [AWS Neuron device plugin for Kubernetes](https://awsdocs-neuron.readthedocs-hosted.com/en/latest/containers/kubernetes-getting-started.html#neuron-device-plugin)\n* `habana.ai/gaudi`: [Habana device plugin for Kubernetes](https://github.com/HabanaAI/habanalabs-k8s-device-plugin)\n  {{% /alert %}}\n\n#### AWS Neuron Resources\n\nThe [Neuron scheduler extension](https://awsdocs-neuron.readthedocs-hosted.com/en/latest/containers/kubernetes-getting-started.html#neuron-scheduler-extension) is required for pods that require more than one Neuron core (`aws.amazon.com/neuroncore`) or device (`aws.amazon.com/neuron`) resource, but less than all available Neuron cores or devices on a node. From the AWS Neuron documentation:\n\n> The Neuron scheduler extension finds sets of directly connected devices with minimal communication latency when scheduling containers. On Inf1 and Inf2 instance types where Neuron devices are connected through a ring topology, the scheduler finds sets of contiguous devices. For example, for a container requesting 3 Neuron devices the scheduler might assign Neuron devices 0,1,2 to the container if they are available but never devices 0,2,4 because those devices are not directly connected. On Trn1.32xlarge and Trn1n.32xlarge instance types where devices are connected through a 2D torus topology, the Neuron scheduler enforces additional constraints that containers request 1, 4, 8, or all 16 devices. If your container requires a different number of devices, such as 2 or 5, we recommend that you use an Inf2 instance instead of Trn1 to benefit from more advanced topology.\n\nHowever, Karpenter is not aware of the decisions made by the Neuron scheduler extension which precludes it from making any optimizations to consolidate and bin pack pods requiring Neuron resources. To ensure Karpenter's bin-packing is consistent with the decisions made by the scheduler extension, containers must have like-sized, power of 2 requests (e.g. 1, 2, 4, etc). Failing to do so may result in permanently pending pods.\n\n### Pod ENI Resources (Security Groups for Pods)\n[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.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nYou 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.\n{{% /alert %}}\n{{% alert title=\"Note\" color=\"primary\" %}}\nIf you've enabled [Security Groups per Pod](https://aws.github.io/aws-eks-best-practices/networking/sgpp/), one of the instance's ENIs is reserved. To avoid discrepancies between the `maxPods` value and the node's supported pod density, you need to set [RESERVED_ENIS]({{<ref \"../reference/settings\" >}})=1.\n{{% /alert %}}\n\nHere is an example of a pod-eni resource defined in a deployment manifest:\n```\nspec:\n  template:\n    spec:\n      containers:\n      - resources:\n          limits:\n            vpc.amazonaws.com/pod-eni: \"1\"\n```\n\n{{% alert title=\"Windows Support Notice\" color=\"warning\" %}}\nSecurity groups for pods are [currently unsupported for Windows nodes](https://docs.aws.amazon.com/eks/latest/userguide/security-groups-for-pods.html)\n{{% /alert %}}\n\n## Selecting nodes\n\nWith `nodeSelector` you can ask for a node that matches selected key-value pairs.\nThis can include well-known labels or custom labels you create yourself.\n\nYou 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.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nKarpenter extends the upstream Kubernetes requirement operators with `Gte` (>=) and `Lte` (<=) for more intuitive numeric comparisons on labels like `karpenter.k8s.aws/instance-cpu` or `karpenter.k8s.aws/instance-memory`.\n{{% /alert %}}\n\n### Labels\nWell-known labels may be specified as NodePool requirements or pod scheduling constraints. You can also define your own custom labels by specifying `requirements` or `labels` on your NodePool and select them using `nodeAffinity` or `nodeSelectors` on your Pods.\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nTake 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.\n{{% /alert %}}\n\n#### Well-Known Labels\n\n| Label                                                          | Example              | Description                                                                                                                                                                                                                               |\n| -------------------------------------------------------------- |----------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| 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))                                                                                               |\n| node.kubernetes.io/instance-type                               | g4dn.8xlarge         | Instance types are defined by your cloud provider ([aws](https://aws.amazon.com/ec2/instance-types/))                                                                                                                                     |\n| node.kubernetes.io/windows-build                               | 10.0.17763           | Windows OS build in the format \"MajorVersion.MinorVersion.BuildNumber\". Can be `10.0.17763` for WS2019, `10.0.20348` for WS2022, or `10.0.26100` for WS2025. ([k8s](https://kubernetes.io/docs/reference/labels-annotations-taints/#nodekubernetesiowindows-build)) |\n| kubernetes.io/os                                               | linux                | Operating systems are defined by [GOOS values](https://github.com/golang/go/blob/master/src/internal/syslist/syslist.go) (`KnownOS`) on the instance                                                                                      |\n| kubernetes.io/arch                                             | amd64                | Architectures are defined by [GOARCH values](https://github.com/golang/go/blob/master/src/internal/syslist/syslist.go) (`KnownArch`) on the instance                                                                                      |\n| karpenter.sh/capacity-type                                     | spot                 | Capacity types include `reserved`, `spot`, and `on-demand`                                                                                                                                                                                |\n| karpenter.sh/nodepool                                          | default              | The name of the nodepool used to provision the node.                                                                                                                                                                                      |\n| karpenter.k8s.aws/capacity-reservation-id                      | cr-56fac701cc1951b03 | [AWS Specific] The capacity reservation ID. Only present on reserved nodes.                                                                                                                                                               |\n| karpenter.k8s.aws/capacity-reservation-type                    | default              | [AWS Specific] The capacity reservation type. Can be `default` or `capacity-block`. Only present on reserved nodes.                                                                                                                       |\n| karpenter.k8s.aws/capacity-reservation-interruptible           | true                 | [AWS Specific] Whether the capacity reservation is interruptible. Only present on reserved nodes.                                                                                                                                            |\n| karpenter.k8s.aws/ec2nodeclass                                 | default              | [AWS Specific] The name of the ec2 nodeclass used to provision the node                                                                                                                                                                   |\n| karpenter.k8s.aws/instance-hypervisor                          | nitro                | [AWS Specific] Instance types that use a specific hypervisor                                                                                                                                                                              |\n| karpenter.k8s.aws/instance-encryption-in-transit-supported     | true                 | [AWS Specific] Instance types that support (or not) in-transit encryption                                                                                                                                                                 |\n| karpenter.k8s.aws/instance-category                            | g                    | [AWS Specific] Instance types of the same category, usually the string before the generation number                                                                                                                                       |\n| karpenter.k8s.aws/instance-generation                          | 4                    | [AWS Specific] Instance type generation number within an instance category                                                                                                                                                                |\n| karpenter.k8s.aws/instance-family                              | g4dn                 | [AWS Specific] Instance types of similar properties but different resource quantities                                                                                                                                                     |\n| karpenter.k8s.aws/instance-size                                | 8xlarge              | [AWS Specific] Instance types of similar resource quantities but different properties                                                                                                                                                     |\n| karpenter.k8s.aws/instance-cpu                                 | 32                   | [AWS Specific] Number of CPUs on the instance                                                                                                                                                                                             |\n| karpenter.k8s.aws/instance-cpu-manufacturer                    | aws                  | [AWS Specific] Name of the CPU manufacturer                                                                                                                                                                                               |\n| karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz       | 3600                 | [AWS Specific] The CPU clock speed, in MHz                                                                                                                                                                                                |\n| karpenter.k8s.aws/instance-memory                              | 131072               | [AWS Specific] Number of mebibytes of memory on the instance                                                                                                                                                                              |\n| karpenter.k8s.aws/instance-ebs-bandwidth                       | 9500                 | [AWS Specific] Number of [maximum megabits](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-optimized.html#ebs-optimization-performance) of EBS available on the instance                                                         |\n| 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                                                                           |\n| karpenter.k8s.aws/instance-pods                                | 110                  | [AWS Specific] Number of pods the instance supports                                                                                                                                                                                       |\n| karpenter.k8s.aws/instance-gpu-name                            | t4                   | [AWS Specific] Name of the GPU on the instance, if available                                                                                                                                                                              |\n| karpenter.k8s.aws/instance-gpu-manufacturer                    | nvidia               | [AWS Specific] Name of the GPU manufacturer                                                                                                                                                                                               |\n| karpenter.k8s.aws/instance-gpu-count                           | 1                    | [AWS Specific] Number of GPUs on the instance                                                                                                                                                                                             |\n| karpenter.k8s.aws/instance-gpu-memory                          | 16384                | [AWS Specific] Number of mebibytes of memory on the GPU                                                                                                                                                                                   |\n| karpenter.k8s.aws/instance-local-nvme                          | 900                  | [AWS Specific] Number of gibibytes of local nvme storage on the instance                                                                                                                                                                  |\n| karpenter.k8s.aws/instance-capability-flex                     | true                 | [AWS Specific] Instance with capacity flex                                                                                                                                                                                                |\n| karpenter.k8s.aws/instance-tenancy                             | default              | [AWS Specific] Tenancy types include `default`, and `dedicated`                                                                                                                                                                           |\n| topology.k8s.aws/zone-id                                       | use1-az1             | [AWS Specific] Globally consistent [zone id](https://docs.aws.amazon.com/global-infrastructure/latest/regions/az-ids.html)                                                                                                                |\n\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nKarpenter translates the following deprecated labels to their stable equivalents: `failure-domain.beta.kubernetes.io/zone`, `failure-domain.beta.kubernetes.io/region`, `beta.kubernetes.io/arch`, `beta.kubernetes.io/os`, and `beta.kubernetes.io/instance-type`.\n{{% /alert %}}\n\n#### User-Defined Labels\n\nKarpenter 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 NodePool requirements with the `Exists` operator:\n\n```yaml\nrequirements:\n  - key: user.defined.label/type\n    operator: Exists\n```\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nThere is currently a limit of 100 on the total number of requirements on both the NodePool and the NodeClaim. It's important to note that `spec.template.metadata.labels` are also propagated as requirements on the NodeClaim when it's created, meaning that you can't have more than 100 requirements and labels combined set on your NodePool.\n{{% /alert %}}\n\n#### Node selectors\n\nHere is an example of a `nodeSelector` for selecting nodes:\n\n```yaml\nnodeSelector:\n  topology.kubernetes.io/zone: us-west-2a\n  karpenter.sh/capacity-type: spot\n```\nThis example features a well-known label (`topology.kubernetes.io/zone`) and a label that is well known to Karpenter (`karpenter.sh/capacity-type`).\n\nIf you want to create a custom label, you should do that at the NodePool level.\nThen the pod can declare that custom label.\n\n\nSee [nodeSelector](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#nodeselector) in the Kubernetes documentation for details.\n\n## Preferences\n\nKarpenter is aware of preferences (node affinity, pod affinity, pod anti-affinity, and pod topology) and treats them as requirements in most circumstances. Karpenter uses these preferences when determining if a pod can schedule on a node (absent topology requirements), or when determining if a pod can be shifted to a new node.\n\nKarpenter starts by treating preferred affinities as required affinities when constructing requirements for a pod. When these requirements cannot be met, the pod's preferences are relaxed one-at-a-time by ascending weight (lowest weight is relaxed first), and the remaining requirements are tried again.\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter does not interpret preferred affinities as required when constructing topology requirements for scheduling to a node. If these preferences are necessary, required affinities should be used [as documented in Node Affinity](#node-affinity).\n{{% /alert %}}\n\n### Node affinity\n\nExamples below illustrate how to use Node affinity to include (`In`) and exclude (`NotIn`) objects.\nSee [Node affinity](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#node-affinity) for details.\nWhen setting rules, the following Node affinity types define how hard or soft each rule is:\n\n* **requiredDuringSchedulingIgnoredDuringExecution**: This is a hard rule that must be met.\n* **preferredDuringSchedulingIgnoredDuringExecution**: This is a preference, but the pod can run on a node where it is not guaranteed.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nPreferred affinities on pods can result in more nodes being created than expected because Karpenter will prefer to create new nodes to satisfy preferences, [see the preferences documentation](#preferences) for details.\n{{% /alert %}}\n\nThe `IgnoredDuringExecution` part of each tells the pod to keep running, even if conditions change on the node so the rules no longer matched.\nYou can think of these concepts as `required` and `preferred`, since Kubernetes never implemented other variants of these rules.\n\nAll examples below assume that the NodePool 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.\n\n```yaml\n affinity:\n   nodeAffinity:\n     requiredDuringSchedulingIgnoredDuringExecution:\n       nodeSelectorTerms:\n         - matchExpressions:\n           - key: \"topology.kubernetes.io/zone\"\n             operator: \"In\"\n             values: [\"us-west-2a\", \"us-west-2b\"]\n           - key: \"topology.kubernetes.io/zone\"\n             operator: \"In\"\n             values: [\"us-west-2b\"]\n```\n\nChanging the second operator to `NotIn` would allow the pod to run in `us-west-2a` only:\n\n```yaml\n           - key: \"topology.kubernetes.io/zone\"\n             operator: \"In\"\n             values: [\"us-west-2a\", \"us-west-2b\"]\n           - key: \"topology.kubernetes.io/zone\"\n             operator: \"NotIn\"\n             values: [\"us-west-2b\"]\n```\n\nContinuing to add to the example, `nodeAffinity` lets you define terms so if one term doesn't work it goes to the next one.\nHere, if `us-west-2a` is not available, the second term will cause the pod to run on a spot instance in `us-west-2d`.\n\n\n```yaml\n affinity:\n   nodeAffinity:\n     requiredDuringSchedulingIgnoredDuringExecution:\n       nodeSelectorTerms:\n         - matchExpressions: # OR\n           - key: \"topology.kubernetes.io/zone\" # AND\n             operator: \"In\"\n             values: [\"us-west-2a\", \"us-west-2b\"]\n           - key: \"topology.kubernetes.io/zone\" # AND\n             operator: \"NotIn\"\n             values: [\"us-west-2b\"]\n         - matchExpressions: # OR\n           - key: \"karpenter.sh/capacity-type\" # AND\n             operator: \"In\"\n             values: [\"spot\"]\n           - key: \"topology.kubernetes.io/zone\" # AND\n             operator: \"In\"\n             values: [\"us-west-2d\"]\n```\nIn general, Karpenter will go through each of the `nodeSelectorTerms` in order and take the first one that works.\nHowever, if Karpenter fails to provision on the first `nodeSelectorTerms`, it will try again using the second one.\nIf they all fail, Karpenter will fail to provision the pod.\nKarpenter will backoff and retry over time.\nSo if capacity becomes available, it will schedule the pod without user intervention.\n\n### Taints and tolerations\n\nTaints are the opposite of affinity.\nSetting 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 NodePool that was set up with a taint for only running pods that require a GPU, such as the following:\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: gpu\nspec:\n  template:\n    spec:\n      requirements:\n      - key: karpenter.k8s.aws/instance-family\n        operator: In\n        values:\n          - p3\n      taints:\n      - key: nvidia.com/gpu\n        value: \"true\"\n        effect: \"NoSchedule\"\n```\n\nFor a pod to request to run on a node that has this NodePool, it could set a toleration as follows:\n\n```yaml\napiVersion: v1\nkind: Pod\nmetadata:\n  name: mygpupod\nspec:\n  containers:\n  - name: gpuapp\n    resources:\n      requests:\n        nvidia.com/gpu: 1\n      limits:\n        nvidia.com/gpu: 1\n    image: mygpucontainer\n  tolerations:\n  - key: \"nvidia.com/gpu\"\n    operator: \"Exists\"\n    effect: \"NoSchedule\"\n```\nSee [Taints and Tolerations](https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/) in the Kubernetes documentation for details.\n\n### Topology Spread\n\nBy using the Kubernetes `topologySpreadConstraints` you can ask the NodePool 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.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nPreferred topology spread (`ScheduleAnyway`) can result in more nodes being created than expected because Karpenter will prefer to create new nodes to satisfy spread constraints, [see the preferences documentation](#preferences) for details.\n{{% /alert %}}\n\nFor example:\n\n```yaml\nspec:\n  topologySpreadConstraints:\n    - maxSkew: 1\n      topologyKey: \"topology.kubernetes.io/zone\"\n      whenUnsatisfiable: ScheduleAnyway\n      labelSelector:\n        matchLabels:\n          dev: jjones\n    - maxSkew: 1\n      topologyKey: \"kubernetes.io/hostname\"\n      whenUnsatisfiable: ScheduleAnyway\n      labelSelector:\n        matchLabels:\n          dev: jjones\n    - maxSkew: 1\n      topologyKey: \"karpenter.sh/capacity-type\"\n      whenUnsatisfiable: ScheduleAnyway\n      labelSelector:\n        matchLabels:\n          dev: jjones\n\n```\nAdding this to your podspec would result in:\n\n* Pods being spread across zones, hosts, and capacity-type (`topologyKey`).\n* 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.\n* No more than one pod difference in the number of pods on each host (`maxSkew`).\nFor example, if there were three nodes and five pods the pods could be spread 1, 2, 2 or 2, 1, 2 and so on.\nIf instead the maxSkew were 5, pods could be spread 5, 0, 0 or 3, 2, 0, or 2, 1, 2 and so on.\n\nThe three supported `topologyKey` values that Karpenter supports are:\n- `topology.kubernetes.io/zone`\n- `kubernetes.io/hostname`\n- `karpenter.sh/capacity-type`\n\nSee [Pod Topology Spread Constraints](https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/) for details.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nNodePools do not attempt to balance or rebalance the availability zones for their nodes. Availability zone balancing may be achieved by defining zonal Topology Spread Constraints for Pods that require multi-zone durability, and NodePools will respect these constraints while optimizing for compute costs.\n{{% /alert %}}\n\n### Pod affinity/anti-affinity\n\nBy using the `podAffinity` and `podAntiAffinity` configuration on a pod spec, you can inform the Karpenter scheduler of your desire for pods to schedule together or apart with respect to different topology domains.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nPreferred affinities on pods can result in more nodes being created than expected because Karpenter will prefer to create new nodes to satisfy preferences, [see the preferences documentation](#preferences) for details.\n{{% /alert %}}\n\nFor example:\n\n```yaml\nspec:\n  affinity:\n    podAffinity:\n      requiredDuringSchedulingIgnoredDuringExecution:\n      - labelSelector:\n          matchExpressions:\n          - key: system\n            operator: In\n            values:\n            - backend\n        topologyKey: topology.kubernetes.io/zone\n    podAntiAffinity:\n      requiredDuringSchedulingIgnoredDuringExecution:\n      - labelSelector:\n          matchLabels:\n            app: inflate\n        topologyKey: kubernetes.io/hostname\n```\n\nThe above pod affinity rule would cause the pod to only schedule in zones where a pod with the label `system=backend` is already running.\n\nThe 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.\n\nSee [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.\n\n### Persistent Volume Topology\n\nKarpenter automatically detects storage scheduling requirements and includes them in node launch decisions.\n\nIn 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).\nWhen 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`.\nIt randomly selects `us-west-2a`, provisions a node in that zone, and waits for kube-scheduler to bind the pod to the node.\nThe CSI driver creates a `PersistentVolume` according to the `PersistentVolumeClaim` and gives it a node affinity rule for `us-west-2a`.\n\nLater 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.\n\n```yaml\napiVersion: v1\nkind: Pod\nmetadata:\n  name: app\nspec:\n  containers: ...\n  volumes:\n    - name: storage\n      persistentVolumeClaim:\n        claimName: ebs-claim\n---\nkind: StorageClass\napiVersion: storage.k8s.io/v1\nmetadata:\n  name: ebs\nprovisioner: ebs.csi.aws.com\nvolumeBindingMode: WaitForFirstConsumer\nallowedTopologies:\n- matchLabelExpressions:\n  - key: topology.ebs.csi.aws.com/zone\n    values: [\"us-west-2a\", \"us-west-2b\"]\n---\napiVersion: v1\nkind: PersistentVolumeClaim\nmetadata:\n  name: ebs-claim\nspec:\n  accessModes:\n    - ReadWriteOnce\n  storageClassName: ebs\n  resources:\n    requests:\n      storage: 4Gi\n```\n\n{{% alert title=\"Note\" color=\"primary\" %}}\n☁️ AWS Specific\n\nThe 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`.\n{{% /alert %}}\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nThe 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)\n{{% /alert %}}\n\n## Weighted NodePools\n\nKarpenter allows you to order your NodePools using the `.spec.weight` field so that the Karpenter scheduler will attempt to schedule one NodePool before another.\n\n### Savings Plans and Reserved Instances\n\nIf 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.\n\nTo 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` field on the NodePool to limit the capacity that can be launched by this NodePool. Combined with the `.spec.weight` value, we can tell Karpenter to pull from instance types in the reserved NodePool before defaulting to generic instance types.\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: reserved-instance\nspec:\n  weight: 50\n  limits:\n    cpu: 100\n  template:\n    spec:\n      requirements:\n      - key: \"node.kubernetes.io/instance-type\"\n        operator: In\n        values: [\"c4.large\"]\n---\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\nspec:\n  template:\n    spec:\n      requirements:\n      - key: karpenter.sh/capacity-type\n        operator: In\n        values: [\"spot\", \"on-demand\"]\n      - key: kubernetes.io/arch\n        operator: In\n        values: [\"amd64\"]\n```\n\n### Fallback\n\nPods 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.\n\nBy assigning a higher `.spec.weight` value and restricting a NodePool 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.\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\nspec:\n  weight: 50\n  template:\n    spec:\n      requirements:\n      - key: karpenter.sh/capacity-type\n        operator: In\n        values: [\"spot\", \"on-demand\"]\n      - key: kubernetes.io/arch\n        operator: In\n        values: [\"amd64\"]\n---\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: arm64-specific\nspec:\n  template:\n    spec:\n      requirements:\n      - key: karpenter.sh/capacity-type\n        operator: In\n        values: [\"spot\", \"on-demand\"]\n      - key: kubernetes.io/arch\n        operator: In\n        values: [\"arm64\"]\n      - key: node.kubernetes.io/instance-type\n        operator: In\n        values: [\"a1.large\", \"a1.xlarge\"]\n```\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nBased on the way that Karpenter performs pod batching and bin packing, it is not guaranteed that Karpenter will always choose the highest priority NodePool given specific requirements. For example, if a pod can't be scheduled with the highest priority NodePool, it will force creation of a node using a lower priority NodePool, allowing 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.\n{{% /alert %}}\n\n## Advanced Scheduling Techniques\n\n### Scheduling based on Node Resources\n\nYou may want pods to be able to request resources of nodes that Kubernetes natively does not provide as a schedulable resource or that are aspects of certain nodes like\nHigh Performance Networking or NVME Local Storage. You can use Karpenter's Well-Known Labels to accomplish this.\n\nThese can further be applied at the NodePool or Workload level using Requirements, NodeSelectors or Affinities\n\nPod example of requiring any NVME disk:\n```yaml\n...\n affinity:\n   nodeAffinity:\n     requiredDuringSchedulingIgnoredDuringExecution:\n       nodeSelectorTerms:\n         - matchExpressions:\n           - key: \"karpenter.k8s.aws/instance-local-nvme\"\n             operator: \"Exists\"\n...\n```\n\nNodePool Example:\n```yaml\n...\nrequirement:\n  - key: \"karpenter.k8s.aws/instance-local-nvme\"\n    operator: \"Exists\"\n...\n```\n\nPod example of requiring at least 100GB of NVME disk:\n```yaml\n...\n affinity:\n   nodeAffinity:\n     requiredDuringSchedulingIgnoredDuringExecution:\n       nodeSelectorTerms:\n         - matchExpressions:\n            - key: \"karpenter.k8s.aws/instance-local-nvme\"\n              operator: Gte\n              values: [\"100\"]\n...\n```\n\nNodePool Example:\n```yaml\n...\nrequirement:\n  - key: \"karpenter.k8s.aws/instance-local-nvme\"\n    operator: Gte\n    values: [\"100\"]\n...\n```\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nKarpenter cannot yet take into account ephemeral-storage requests while scheduling pods, we're purely requesting attributes of nodes and getting X amount of resources\nas a side effect. You may need to tweak schedulable resources like CPU or Memory to achieve desired fit, especially if Consolidation is enabled.\n\nYour NodeClass will also need to support automatically formatting and mounting NVME Instance Storage if available.\n{{% /alert %}}\n\nPod example of requiring at least 50 Gbps of network bandwidth:\n```yaml\n...\n affinity:\n   nodeAffinity:\n     requiredDuringSchedulingIgnoredDuringExecution:\n       nodeSelectorTerms:\n         - matchExpressions:\n            - key: \"karpenter.k8s.aws/instance-network-bandwidth\"\n              operator: Gte\n              values: [\"50000\"]\n...\n```\n\nNodePool Example:\n```yaml\n...\nrequirement:\n  - key: \"karpenter.k8s.aws/instance-network-bandwidth\"\n    operator: Gte\n    values: [\"50000\"]\n...\n```\n\n### `Exists` Operator\n\nThe `Exists` operator can be used on a NodePool to provide workload segregation across nodes.\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nspec:\n  template:\n    spec:\n      requirements:\n        - key: company.com/team\n          operator: Exists\n...\n```\n\nWith this requirement on the NodePool, workloads can specify the same key (e.g. `company.com/team`) with custom values (e.g. `team-a`, `team-b`, etc.) as a required `nodeAffinity` or `nodeSelector`. Karpenter will then apply the key/value pair to nodes it launches dynamically based on the pod's node requirements.\n\nIf each set of pods that can schedule with this NodePool specifies this key in its `nodeAffinity` or `nodeSelector`, you can isolate pods onto different nodes based on their values. This provides a way to more dynamically isolate workloads without requiring a unique NodePool for each workload subset.\n\nFor example, providing the following `nodeSelectors` would isolate the pods for each of these deployments on different nodes.\n\n#### Team A Deployment\n\n```yaml\napiVersion: v1\nkind: Deployment\nmetadata:\n  name: team-a-deployment\nspec:\n  replicas: 5\n  template:\n    spec:\n      nodeSelector:\n        company.com/team: team-a\n```\n\n#### Team A Node\n\n```yaml\napiVersion: v1\nkind: Node\nmetadata:\n  labels:\n    company.com/team: team-a\n```\n\n#### Team B Deployment\n\n```yaml\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: team-b-deployment\nspec:\n  replicas: 5\n  template:\n    spec:\n      nodeSelector:\n        company.com/team: team-b\n```\n\n#### Team B Node\n\n```yaml\napiVersion: v1\nkind: Node\nmetadata:\n  labels:\n    company.com/team: team-b\n```\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nIf a workload matches the NodePool but doesn't specify a label, Karpenter will generate a random label for the node.\n{{% /alert %}}\n\n### On-Demand/Spot Ratio Split\n\nTaking 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.\n\nTo do this, we create one NodePool 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 NodePool and one value for the on-demand NodePool.  When we spread across our new label evenly, we'll end up with a ratio of 4:1 spot to on-demand nodes.\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nThis 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.\n{{% /alert %}}\n\n#### NodePools\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: spot\nspec:\n  template:\n    spec:\n      requirements:\n      - key: \"karpenter.sh/capacity-type\"\n        operator: In\n        values: [\"spot\"]\n      - key: capacity-spread\n        operator: In\n        values:\n        - \"2\"\n        - \"3\"\n        - \"4\"\n        - \"5\"\n---\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: on-demand\nspec:\n  template:\n    spec:\n      requirements:\n      - key: \"karpenter.sh/capacity-type\"\n        operator: In\n        values: [\"on-demand\"]\n      - key: capacity-spread\n        operator: In\n        values:\n        - \"1\"\n```\n\n#### Workload Topology Spread Constraint\n\n```yaml\ntopologySpreadConstraints:\n- maxSkew: 1\n  topologyKey: capacity-spread\n  whenUnsatisfiable: DoNotSchedule\n  labelSelector:\n    ...\n```\n"
  },
  {
    "path": "website/content/en/docs/contributing/_index.md",
    "content": "---\ntitle: \"Contributing\"\nlinkTitle: \"Contributing\"\nweight: 40\ndescription: >\n  Learn about how to contribute to Karpenter\n---\n"
  },
  {
    "path": "website/content/en/docs/contributing/community-meetings.md",
    "content": "---\ntitle: \"Community Meetings\"\nlinkTitle: \"Community Meetings\"\nweight: 10\ndescription: >\n  Join the Karpenter Community Meetings\n---\n\nKarpenter hosts two types of regular community meetings to foster collaboration and maintain project health:\n\nThe **Working Group** meetings focus on project direction, technical discussions, and feature development. These bi-weekly sessions bring together contributors, users, and maintainers to review designs, plan releases, and address architectural decisions that shape Karpenter's future.\n\nThe **Issue Triage** meetings, held weekly, are dedicated to maintaining project health through focused issue management across our repositories. These sessions ensure proper prioritization, assignment coordination, and timely response to community contributions.\n\nMeeting times alternate to accommodate our global community. All interested participants are welcome to join, contribute, and learn more about Karpenter.\n\n### Working Group Meetings\n\nThe Karpenter Working Group meetings serve as a collaborative forum for project development, technical discussions, and community engagement. These sessions bring together contributors, users, and maintainers to shape the project's direction and ensure its continued success. Through these meetings, we align on architectural decisions, review critical features, and address community needs.\n\nKey focus areas include:\n- Review and discussion of design proposals and technical implementations\n- Planning of upcoming releases and feature roadmaps\n- Coordination between contributors and cross-team collaboration\n- Technical deep-dives on specific components and challenges\n- Discussion of user feedback and community requirements\n\nThe working group provides a platform for both synchronous decision-making and asynchronous follow-ups, ensuring the project maintains its technical excellence while growing its community impact.\n\nWorking group meetings will be held every other Thursday, alternating between a 3:00 PM PST (Americas-friendly) and 9:00 AM PST (Europe-friendly) start time.\nPlease refer to our [calendar](https://calendar.google.com/calendar/u/0?cid=N3FmZGVvZjVoZWJkZjZpMnJrMmplZzVqYmtAZ3JvdXAuY2FsZW5kYXIuZ29vZ2xlLmNvbQ) for an up-to-date schedule.\n\n### Issue Triage Meetings\n\nKarpenter is expanding our community meetings to include dedicated Issue Triage sessions alongside our regular Working Group meetings. This addition aims to improve issue management across both kubernetes-sigs/karpenter and karpenter-provider-aws repositories.\n\nThese weekly meetings rotate between repositories and time zones to accommodate our global community. These dedicated triage sessions focus on:\n- Issue prioritization\n- Assignment coordination\n- Discussion of complex issues\n- Maintaining repository health\n\nAn issue triage meeting for each repository will be held monthly, alternating between a 3:00 PM PST (Americas-friendly) and 9:00 AM PST (Europe-friendly) start time.\nPlease refer to our [calendar](https://calendar.google.com/calendar/u/0?cid=N3FmZGVvZjVoZWJkZjZpMnJrMmplZzVqYmtAZ3JvdXAuY2FsZW5kYXIuZ29vZ2xlLmNvbQ) for an up-to-date schedule.\n\n### Getting Involved\nAll community members are welcome to join these meetings. Meeting links and calendar invites are shared through our usual communication channels.\n\n- All invites are managed through our [Calendar](https://calendar.google.com/calendar/u/0?cid=N3FmZGVvZjVoZWJkZjZpMnJrMmplZzVqYmtAZ3JvdXAuY2FsZW5kYXIuZ29vZ2xlLmNvbQ).\n- 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.\n\n{{% alert title=\"Meeting Access\" %}}\nJoin our meetings using the following credentials:\n\n🔗 **Zoom**: [https://zoom.us/j/95618088729](https://zoom.us/j/95618088729)\n🆔 **Meeting ID**: 956 1808 8729\n🔑 **Passcode**: 77777\n\nNeed help? Contact the maintainers on Slack.\n{{% /alert %}}\n\nAdd future questions or read past discussions in our [Working Group Log](https://docs.google.com/document/d/18BT0AIMugpNpiSPJNlcAL2rv69yAE6Z06gUVj7v_clg).\n"
  },
  {
    "path": "website/content/en/docs/contributing/design-guide.md",
    "content": "---\ntitle: \"Design Guide\"\nlinkTitle: \"Design Guide\"\nweight: 20\ndescription: >\n  Read this before making large changes to Karpenter\n---\n\nTechnical 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.\n\nDesigns don’t have to be long or formal, and should match the scope of the problem they’re trying to solve.\n\n* Are there multiple potential solutions?\n* Will users need to be aware of the changes?\n* Would it be painful to discard a rejected implementation?\n* When in doubt, write a 1 pager.\n\n## Tell a Story\n\nA 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.\n\nYour story should include,\n\n* [Context] Include some technical background that helps readers think about your idea in context\n* [Problem] Clearly identify the problem to be solved and some guiding principles to help think about the solutions\n* [Solutions] Talk through different potential solutions and their tradeoffs. Include diagrams to clarify concepts\n* [Recommendation] Make a recommendation, but don’t be overly invested in it\n\nThe 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.\n\n## Gather Broad Feedback\n\nThe 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).\n\nThe 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.\n\nIt 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.\n\n## Simple Solutions to Complex Problems\n\nThe 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.\n\n## Common Gotchas\n\n### Does your change introduce new APIs?\n\nAPIs 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.\n\nThink 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.\n\nBuild minimal and maintainable APIs by:\n\n* Push back on requirements that introduces concepts for all users to solve problems for a few.\n* Identify an opinionated default that solves the majority of use cases.\n* Delay introducing a parameter into your API surface until users demand it; you can always add it later.\n* 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.\n* Take advantage of opportunities to refine APIs while the impact of backwards incompatibility is small\n\n### Does your change behave differently with different cloud providers?\n\nKubernetes 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.\n\nAchieving 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.\n\n### Does your change expose details users may rely on?\n\nKubernetes 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?\n\nBe 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.\n\n### Does your change have a risk of breaking an undocumented invariant?\n\nSystems 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.\n\n* Identify the fundamental reason the existing mechanism is insufficient and be able to explain it in plain terms.\n* Separate the new mechanism from the new feature that relies on it.\n* Clean up after yourself and avoid getting stuck halfway between old and new mechanisms.\n\n### Does your change impact performance?\n\nUsers 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.\n\n* Beware code that scales linearly with pods or nodes. Milliseconds in testing turn into seconds at scale.\n* Cloud provider read APIs can have surprisingly high latency and low limits, use caching to minimize calls.\n* Increases to memory and CPU usage increase capex cost for operators. Profile and optimize your implementations.\n"
  },
  {
    "path": "website/content/en/docs/contributing/development-guide.md",
    "content": "---\ntitle: \"Development Guide\"\nlinkTitle: \"Development Guide\"\nweight: 80\ndescription: >\n  Set up a Karpenter development environment\n---\n\n## Dependencies\n\nThe following tools are required for contributing to the Karpenter project.\n\n| Package                                                            | Version  | Install                                        |\n| ------------------------------------------------------------------ | -------- | ---------------------------------------------- |\n| [go](https://golang.org/dl/)                                       | v1.19+   | [Instructions](https://golang.org/doc/install) |\n| [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) |          | `brew install kubectl`                         |\n| [helm](https://helm.sh/docs/intro/install/)                        |          | `brew install helm`                            |\n| Other tools                                                        |          | `make toolchain`                               |\n\n## Developing\n\n### Setup / Teardown\n\nBased 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/).\n\n#### Locally\n\nOnce 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`\n\n```bash\nmake run\n```\n\n#### Inside a Kubernetes Cluster\n\nOnce you have your environment set up, to install Karpenter in the Kubernetes cluster specified in your `~/.kube/config`  run the following commands.\n\n```bash\nmake apply # Install Karpenter\nmake delete # Uninstall Karpenter\n```\n\n### Developer Loop\n\n* Make sure dependencies are installed\n    * Run `make codegen` to make sure yaml manifests are generated (requires a working set of AWS credentials, see [Specifying Credentials](https://docs.aws.amazon.com/sdk-for-go/v1/developer-guide/configuring-sdk.html#specifying-credentials))\n    * Run `make toolchain` to install cli tools for building and testing the project\n* You will need a personal development image repository (e.g. ECR)\n    * Make sure you have valid credentials to your development repository.\n    * `$KO_DOCKER_REPO` must point to your development repository\n    * Your cluster must have permissions to read from the repository\n\n### Build and Deploy\n\n*Note: these commands do not rely on each other and may be executed independently*\n\n```bash\nmake apply # quickly deploy changes to your cluster\nmake presubmit # run codegen, lint, and tests\n```\n\nIf you are only interested in building the Karpenter images and not deploying the updated release to your cluster immediately with Helm, you can run the following:\n\n```bash\nmake image # build and push the karpenter images\n```\n\n*Note: that this will produce a build with the version of https://github.com/kubernetes-sigs/karpenter in your local filesystem.\n\nYou can test out changes made in https://github.com/kubernetes-sigs/karpenter by replacing the dependency of https://github.com/aws/karpenter-provider-aws/.\nFor local changes, replace `$PATH_TO_KUBERNETES_SIGS_KARPENTER` with the relative or absolute path and run:\n\n```bash\ngo mod edit -replace sigs.k8s.io/karpenter=$PATH_TO_KUBERNETES_SIGS_KARPENTER\n```\n\nThen you can build your image using the previous steps.\n\n### Publishing Images Only\n\nIf you only need to build and publish an image to a container registry, run the following:\n\n```bash\nmake image # build and push the karpenter images\n```\nYou can test out changes made in https://github.com/kubernetes-sigs/karpenter by replacing the dependency of https://github.com/aws/karpenter-provider-aws/.\nFor local changes, replace `$PATH_TO_KUBERNETES_SIGS_KARPENTER` with the relative or absolute path and run:\n\n```bash\ngo mod edit -replace sigs.k8s.io/karpenter=$PATH_TO_KUBERNETES_SIGS_KARPENTER\n```\n\nThen you can build your image using the previous steps.\n\n*Note: you need to commit the go.mod changes before running `make image` for the changes to be picked up.\n\n### Testing\n\n```bash\nmake test       # E2E correctness tests\n```\n\n### Change Log Level\n\nBy default, `make apply` will set the log level to debug. You can change the log level by setting the log level in your Helm values.\n\n```bash\n--set logLevel=debug\n```\n\n### Debugging Metrics\n\nOSX:\n\n```bash\nopen http://localhost:8080/metrics && kubectl port-forward service/karpenter -n kube-system 8080\n```\n\nLinux:\n\n```bash\ngio open http://localhost:8080/metrics && kubectl port-forward service/karpenter -n karpenter 8080\n```\n\n### Tailing Logs\n\nWhile 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):\n\n```bash\nstern -n karpenter -l app.kubernetes.io/name=karpenter\n```\n\n## Environment specific setup\n\n### AWS\n\nFor local development on Karpenter you will need a Docker repo which can manage your images for Karpenter components.\nYou can use the following command to provision an ECR repository. We recommend using a single \"dev\" repository for \ndevelopment across multiple projects, and to use specific image hashes instead of image tags. \n\n```bash\naws ecr create-repository \\\n    --repository-name dev \\\n    --image-scanning-configuration scanOnPush=true \\\n    --region \"${AWS_DEFAULT_REGION}\"\n```\n\nOnce you have your ECR repository provisioned, configure your Docker daemon to authenticate with your newly created repository.\n\n```bash\nexport KO_DOCKER_REPO=\"${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_DEFAULT_REGION}.amazonaws.com/dev\"\naws ecr get-login-password --region \"${AWS_DEFAULT_REGION}\" | docker login --username AWS --password-stdin \"${KO_DOCKER_REPO}\"\n```\n\n## Profiling\nKarpenter exposes a pprof endpoint on its metrics port when [profiling]({{< relref \"../reference/settings\" >}}) is enabled.\n\nLearn about profiling with pprof: https://jvns.ca/blog/2017/09/24/profiling-go-with-pprof/\n\n### Prerequisites\n```\nbrew install graphviz\ngo install github.com/google/pprof@latest\n```\n\n### Get a profile\n```\n# Connect to the metrics endpoint\nkubectl port-forward service/karpenter -n karpenter 8080\nopen http://localhost:8080/debug/pprof/\n# Visualize the memory\ngo tool pprof -http 0.0.0.0:9000 localhost:8080/debug/pprof/heap\n# Visualize CPU\ngo tool pprof -http 0.0.0.0:9000 \"localhost:8080/debug/pprof/profile?seconds=60\"\n```\n"
  },
  {
    "path": "website/content/en/docs/contributing/documentation-updates.md",
    "content": "---\ntitle: \"Documentation Updates\"\nlinkTitle: \"Documentation Updates\"\nweight: 50\ndescription: >\n  Information helpful for contributing simple documentation updates.\n---\n\n- Documentation for https://karpenter.sh/docs/ is built under website/content/en/preview/.\n- Documentation updates should be made to the \"preview\" directory. Your changes will be promoted to website/content/en/docs/ by an automated process after the change has been merged.\n- Previews for your changes are built and available a few minutes after you push. Look for the \"Amplify Preview URL\" link in a comment in your PR.\n- If your update applies to more than just the current version of Karpenter, please backport your changes into all of the versions under website/content/en/ *besides* the /docs/ folder"
  },
  {
    "path": "website/content/en/docs/faq.md",
    "content": "---\ntitle: \"FAQs\"\nlinkTitle: \"FAQs\"\nweight: 60\ndescription: >\n  Review Karpenter Frequently Asked Questions\n---\n## General\n\n### Is Karpenter safe for production use?\nKarpenter v1 is the first stable Karpenter API. Any future incompatible API changes will require a v2 version.\n\n### How does a NodePool decide to manage a particular node?\nSee [Configuring NodePools]({{< ref \"./concepts/#configuring-nodepools\" >}}) for information on how Karpenter configures and manages nodes.\n\n### What cloud providers are supported?\nAWS is the first cloud provider supported by Karpenter, although it is designed to be used with other cloud providers as well.\n\n### Can I write my own cloud provider for Karpenter?\nYes, but there is no documentation yet for it. Start with Karpenter's GitHub [cloudprovider](https://github.com/aws/karpenter-provider-aws/tree/v1.10.0/pkg/cloudprovider) documentation to see how the AWS provider is built, but there are other sections of the code that will require changes too.\n\n### What operating system nodes does Karpenter deploy?\nKarpenter uses the OS defined by the [AMI Family in your EC2NodeClass]({{< ref \"./concepts/nodeclasses#specamifamily\" >}}).\n\n### Can I provide my own custom operating system images?\nKarpenter has multiple mechanisms for configuring the [operating system]({{< ref \"./concepts/nodeclasses/#specamiselectorterms\" >}}) for your nodes.\n\n### Can Karpenter deal with workloads for mixed architecture cluster (arm vs. amd)?\nKarpenter is flexible to multi-architecture configurations using [well known labels]({{< ref \"./concepts/scheduling/#supported-labels\">}}).\n\n### What RBAC access is required?\nAll the required RBAC rules can be found in the Helm chart template. See [clusterrole-core.yaml](https://github.com/aws/karpenter/blob/v1.10.0/charts/karpenter/templates/clusterrole-core.yaml), [clusterrole.yaml](https://github.com/aws/karpenter/blob/v1.10.0/charts/karpenter/templates/clusterrole.yaml), [rolebinding.yaml](https://github.com/aws/karpenter/blob/v1.10.0/charts/karpenter/templates/rolebinding.yaml), and [role.yaml](https://github.com/aws/karpenter/blob/v1.10.0/charts/karpenter/templates/role.yaml) files for details.\n\n### Can I run Karpenter outside of a Kubernetes cluster?\nYes, as long as the controller has network and IAM/RBAC access to the Kubernetes API and your provider API.\n\n### What do I do if I encounter a security issue with Karpenter?\nRefer to [Reporting Security Issues](https://github.com/aws/karpenter/security/policy) for information on how to report Karpenter security issues. Do not create a public GitHub issue.\n\n## Compatibility\n\n### Which versions of Kubernetes does Karpenter support?\nSee the [Compatibility Matrix in the Upgrade Section]({{< ref \"./upgrading/compatibility#compatibility-matrix\" >}}) to view the supported Kubernetes versions per Karpenter released version.\n\n### What Kubernetes distributions are supported?\nKarpenter documents integration with a fresh or existing installation of the latest AWS Elastic Kubernetes Service (EKS). Other Kubernetes distributions (KOPs, etc.) can be used, but setting up cloud provider permissions for those distributions has not been documented.\n\n### How does Karpenter interact with AWS node group features?\nNodePools 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 NodePools, 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 NodePool-managed in the long term.\n\n\n### How does Karpenter interact with Kubernetes features?\n* Kubernetes Cluster Autoscaler: Karpenter can work alongside Cluster Autoscaler. See [Kubernetes Cluster Autoscaler]({{< ref \"./concepts/#kubernetes-cluster-autoscaler\" >}}) for details.\n* 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.\n\n## Provisioning\n\n### What features does the Karpenter NodePool support?\nSee the [NodePool API docs]({{< ref \"./concepts/nodepools\" >}}) for NodePool examples and descriptions of features.\n\n### Can I create multiple (team-based) NodePools on a cluster?\nYes, NodePools can identify multiple teams based on labels. See the [NodePool API docs]({{< ref \"./concepts/nodepools\" >}}) for details.\n\n### If multiple NodePools are defined, which will my pod use?\n\nPending pods will be handled by any NodePools that matches the requirements of the pod. There is no ordering guarantee if multiple NodePools match pod requirements. We recommend that NodePools are set-up to be mutually exclusive. To select a specific NodePool, use the node selector `karpenter.sh/nodepool: my-nodepool`.\n\n### How can I configure Karpenter to only provision pods for a particular namespace?\n\nThere 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` using the same mechanisms 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.\n\nWe 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/).\n\n### Can I add SSH keys to a NodePool?\n\nKarpenter does not offer a way to add SSH keys via NodePools or secrets to the nodes it manages.\nHowever, 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.\n\nThough not recommended, if you need to access Karpenter-managed nodes without AWS credentials, you can add SSH keys using EC2NodeClass User Data. See the [User Data section in the EC2NodeClass documentation]({{< ref \"./concepts/nodeclasses/#specuserdata\" >}}) for details.\n\n### Can I set limits of CPU and memory for a NodePool?\nYes. View the [NodePool API docs]({{< ref \"./concepts/nodepools#speclimits\" >}}) for NodePool examples and descriptions of how to configure limits.\n\n### Can I mix spot and on-demand EC2 run types?\nYes, see the [NodePool API docs]({{< ref \"./concepts/nodepools#examples\" >}}) for an example.\n\n### Can I restrict EC2 instance types?\n\n* Attribute-based requests are currently not possible.\n* You can select instances with special hardware, such as gpu.\n\n### Can I use Bare Metal instance types?\n\nYes, Karpenter supports provisioning metal instance types when a NodePool'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.\n\n### How does Karpenter dynamically select instance types?\n\nKarpenter 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. Karpenter [recommends the use of C, M, and R >= Gen 3 instance types]({{< ref \"./concepts/nodepools#spectemplatespecrequirements\" >}}) for most generic workloads, but it can be constrained in the NodePool spec with the [instance-type](https://kubernetes.io/docs/reference/labels-annotations-taints/#nodekubernetesioinstance-type) well-known label in the requirements section.\n\nAfter 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.\n\n\nThe EC2 fleet API attempts to provision the instance type based on the [Price Capacity Optimized allocation strategy](https://aws.amazon.com/blogs/compute/introducing-price-capacity-optimized-allocation-strategy-for-ec2-spot-instances/). For the on-demand capacity type, this is effectively equivalent to the `lowest-price` allocation strategy. For the spot capacity type, Fleet will determine an instance type that has both the lowest price combined with the lowest chance of being interrupted. Note that this may not give you the instance type with the strictly lowest price for spot.\n\n### How does Karpenter calculate the resource usage of Daemonsets when simulating scheduling?\n\nKarpenter currently calculates the applicable daemonsets at the NodePool level with label selectors/taints, etc. It does not look to see if there are requirements on the daemonsets that would exclude it from running on particular instances that the NodePool could or couldn't launch.\nThe recommendation for now is to use multiple NodePools with taints/tolerations or label selectors to limit daemonsets to only nodes launched from specific NodePoools.\n\n### What if there is no Spot capacity?\n\nThe best defense against running out of Spot capacity is to allow Karpenter to provision as many distinct 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.\n\nAllowing 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 instance type diversity will also increase the chances that you’ll be able to continue to launch On-Demand capacity for your workloads.\n\nKarpenter has a concept of an “offering” for each instance type, which is a combination of zone and capacity type. Whenever the Fleet API returns an insufficient capacity error for Spot instances, those particular offerings are temporarily removed from consideration (across the entire NodePool) so that Karpenter can make forward progress with different options.\n\n### Does Karpenter support IPv6?\n\nYes! 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 NodePool to only allow Nitro instance types:\n\n```\napiVersion: karpenter.sh/v1\nkind: NodePool\n...\nspec:\n  template:\n    spec:\n      requirements:\n        - key: karpenter.k8s.aws/instance-hypervisor\n          operator: In\n          values:\n            - nitro\n```\n\nFor more documentation on enabling IPv6 with the Amazon VPC CNI, see the [docs](https://docs.aws.amazon.com/eks/latest/userguide/cni-ipv6.html).\n\n{{% alert title=\"Windows Support Notice\" color=\"warning\" %}}\nWindows nodes do not support IPv6.\n{{% /alert %}}\n\n### Why do I see extra nodes get launched to schedule pending pods that remain empty and are later removed?\n\nYou might have a daemonset, userData configuration, or some other workload that applies a taint after a node is provisioned. After the taint is applied, Karpenter will detect that the pod cannot be scheduled to this new node due to the added taint. As a result, Karpenter will provision yet another node. Typically, the original node has the taint removed and the pod schedules to it, leaving the extra new node unused and reaped by emptiness/consolidation. If the taint is not removed quickly enough, Karpenter may remove the original node before the pod can be scheduled via emptiness consolidation. This could result in an infinite loop of nodes being provisioned and consolidated without the pending pod ever scheduling.\n\nThe solution is to configure [startupTaints]({{<ref \"./concepts/nodepools/#cilium-startup-taint\" >}}) to make Karpenter aware of any temporary taints that are needed to ensure that pods do not schedule on nodes that are not yet ready to receive them.\n\nHere's an example for Cilium's startup taint.\n```\napiVersion: karpenter.sh/v1\nkind: NodePool\n...\nspec:\n  template:\n    spec:\n      startupTaints:\n        - key: node.cilium.io/agent-not-ready\n          effect: NoSchedule\n```\n\n## Scheduling\n\n### When using preferred scheduling constraints, Karpenter launches the correct number of nodes at first.  Why do they then sometimes get consolidated immediately?\n\n`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.\n\nAs 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 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.\n\n### When deploying an additional DaemonSet to my cluster, why does Karpenter not scale-up my nodes to support the extra DaemonSet?\n\nKarpenter will not scale-up more capacity for an additional DaemonSet on its own. This is due to the fact that the only pod that would schedule to that new node would be the DaemonSet pod, which is consuming additional capacity with no benefit. Therefore, Karpenter only considers DaemonSets when doing overhead calculations for scale-ups to workload pods.\n\nTo avoid new DaemonSets failing to schedule to existing Nodes, you should [set a high priority on your DaemonSet pods with a `preemptionPolicy: PreemptLowerPriority`](https://kubernetes.io/docs/concepts/scheduling-eviction/pod-priority-preemption/#example-priorityclass) so that DaemonSet pods will be guaranteed to schedule on all existing and new Nodes. For existing Nodes, this will cause some pods with lower priority to get [preempted](https://kubernetes.io/docs/concepts/scheduling-eviction/pod-priority-preemption/#preemption), replaced by the DaemonSet and re-scheduled onto new capacity that Karpenter will launch in response to the new pending pods.\n\nThe Karpenter maintainer team is also discussing a consolidation mechanism [in this Github issue](https://github.com/aws/karpenter/issues/3256) that would allow existing capacity to be rolled when a new DaemonSet is deployed without having to set [priority or preemption](https://kubernetes.io/docs/concepts/scheduling-eviction/pod-priority-preemption/) on the pods.\n\n\n### Why aren’t my Topology Spread Constraints spreading pods across zones?\n\nKarpenter will provision nodes according to `topologySpreadConstraints`. However, the Kubernetes scheduler may schedule pods to nodes that do not fulfill zonal spread constraints if the `minDomains` field is not set. If Karpenter launches nodes that can handle more than the required number of pods, and the newly launched nodes initialize at different times, then the Kubernetes scheduler may place more than the desired number of pods on the first node that is Ready.\n\nThe preferred solution is to use the [`minDomains` field in `topologySpreadConstraints`](https://kubernetes.io/docs/concepts/scheduling-eviction/topology-spread-constraints/#topologyspreadconstraints-field), which is enabled by default starting in Kubernetes 1.27.\n\nBefore `minDomains` was available, another workaround has been to launch a lower [Priority](https://kubernetes.io/docs/concepts/scheduling-eviction/pod-priority-preemption/) pause container to each zone before launching the pods that you want to spread across the zones. The lower Priority on these pause pods would mean that they would be preempted when your desired pods are scheduled.\n\n## Workloads\n\n### How can someone deploying pods take advantage of Karpenter?\n\nSee [Application developer]({{< ref \"./concepts/#application-developer\" >}}) for descriptions of how Karpenter matches nodes with pod requests.\n\n### Can I use Karpenter with EBS disks per availability zone?\nYes.  See [Persistent Volume Topology]({{< ref \"./concepts/scheduling#persistent-volume-topology\" >}}) for details.\n\n### Can I set `--max-pods` on my nodes?\nYes, see the [KubeletConfiguration Section in the NodePool docs]({{<ref \"./concepts/nodepools#spectemplatespeckubelet\" >}}) to learn more.\n\n### Why do the Windows2019, Windows2022 and Windows2025 AMI families only support Windows Server Core?\nThe difference between the Core and Full variants is that Core is a minimal OS with less components and no graphic user interface (GUI) or desktop experience.\n`Windows2019`, `Windows2022` and `Windows2025` AMI families use the Windows Server Core option for simplicity, but if required, you can specify a custom AMI to run Windows Server Full.\n\nYou can specify the [Amazon EKS optimized AMI](https://docs.aws.amazon.com/eks/latest/userguide/eks-optimized-windows-ami.html) with Windows Server 2022 Full for Kubernetes 1.34 by configuring an `amiSelector` that references the AMI name.\n```yaml\namiSelectorTerms:\n    - name: Windows_Server-2022-English-Full-EKS_Optimized-1.34*\n```\n\n### Can I use Karpenter to scale my workload's pods?\nKarpenter is a node autoscaler which will create new nodes in response to unschedulable pods. Scaling the pods themselves is outside of its scope.\nThis is the realm of pod autoscalers such as the [Vertical Pod Autoscaler](https://github.com/kubernetes/autoscaler/tree/master/vertical-pod-autoscaler) (for scaling an individual pod's resources) or the [Horizontal Pod Autoscaler](https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/) (for scaling replicas).\nWe also recommend taking a look at [Keda](https://keda.sh/) if you're looking for more advanced autoscaling capabilities for pods.\n\n## Deprovisioning\n### How does Karpenter deprovision nodes?\nSee [Deprovisioning nodes]({{< ref \"./concepts/disruption\" >}}) for information on how Karpenter deprovisions nodes.\n\n## Upgrading Karpenter\n\n### How do I upgrade Karpenter?\nKarpenter is a controller that runs in your cluster, but it is not tied to a specific Kubernetes version, as the Cluster Autoscaler is.\nUse your existing upgrade mechanisms to upgrade your core add-ons in Kubernetes and keep Karpenter up to date on bug fixes and new features.\n\nKarpenter requires proper permissions in the `KarpenterNode IAM Role` and the `KarpenterController IAM Role`.\nTo 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-karpenter/cloudformation.yaml`.\nNext, locate `KarpenterController IAM Role` ARN (i.e., ARN of the resource created in [Create the KarpenterController IAM Role](../getting-started/getting-started-with-karpenter/#create-the-karpentercontroller-iam-role)) and pass them to the Helm upgrade command.\n{{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step08-apply-helm-chart.sh\" language=\"bash\"%}}\n\nFor information on upgrading Karpenter, see the [Upgrade Guide]({{< ref \"./upgrading/upgrade-guide/\" >}}).\n\n## Upgrading Kubernetes Cluster\n\n### How do I upgrade an EKS Cluster with Karpenter?\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nKarpenter recommends that you always validate AMIs in your lower environments before using them in production environments. Read [Managing AMIs]({{<ref \"./tasks/managing-amis\" >}}) to understand best practices about upgrading your AMIs.\n\nIf using a custom AMI, you will need to trigger the rollout of new worker node images through the publication of a new AMI with tags matching the [`amiSelector`]({{<ref \"./concepts/nodeclasses#specamiselectorterms\" >}}), or a change to the [`amiSelector`]({{<ref \"./concepts/nodeclasses#specamiselectorterms\" >}}) field.\n{{% /alert %}}\n\nKarpenter's default behavior will upgrade your nodes when you've upgraded your Amazon EKS Cluster. Karpenter will [drift]({{<ref \"./concepts/disruption#drift\" >}}) nodes to stay in-sync with the EKS control plane version. Drift is enabled by default starting in `v0.33`. This means that as soon as your cluster is upgraded, Karpenter will auto-discover the new AMIs for that version.\n\nStart by [upgrading the EKS Cluster control plane](https://docs.aws.amazon.com/eks/latest/userguide/update-cluster.html). After the EKS Cluster upgrade completes, Karpenter will Drift and disrupt the Karpenter-provisioned nodes using EKS Optimized AMIs for the previous cluster version by first spinning up replacement nodes. Karpenter respects [Pod Disruption Budgets](https://kubernetes.io/docs/concepts/workloads/pods/disruptions/) (PDB), and automatically [replaces, cordons, and drains those nodes]({{<ref \"./concepts/disruption#control-flow\" >}}). To best support pods moving to new nodes, follow Kubernetes best practices by setting appropriate pod [Resource Quotas](https://kubernetes.io/docs/concepts/policy/resource-quotas/) and using PDBs.\n\n## Interruption Handling\n\n### Should I use Karpenter interruption handling alongside Node Termination Handler?\nNo. We recommend against using Node Termination Handler alongside Karpenter due to conflicts that could occur from the two components handling the same events.\n\n### Why should I migrate from Node Termination Handler?\nKarpenter's native interruption handling offers two main benefits over the standalone Node Termination Handler component:\n1. You don't have to manage and maintain a separate component to exclusively handle interruption events.\n2. Karpenter's native interruption handling coordinates with other deprovisioning so that consolidation, expiration, etc. can be aware of interruption events and vice-versa.\n\n### Why am I receiving QueueNotFound errors when I set `--interruption-queue`?\nKarpenter requires a queue to exist that receives event messages from EC2 and health services in order to handle interruption messages properly for nodes.\n\nDetails on the types of events that Karpenter handles can be found in the [Interruption Handling Docs]({{< ref \"./concepts/disruption/#interruption\" >}}).\n\nDetails on provisioning the SQS queue and EventBridge rules can be found in the [Getting Started Guide]({{< ref \"./getting-started/getting-started-with-karpenter/#create-the-karpenter-infrastructure-and-iam-roles\" >}}).\n\n## Consolidation\n\n### Why do I sometimes see an extra node get launched when updating a deployment that remains empty and is later removed?\n\nConsolidation 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.\n\n## Logging\n\n### How do I customize or configure the log output?\n\nKarpenter uses [uber-go/zap](https://github.com/uber-go/zap) for logging. You can customize or configure the log messages by editing the [configmap-logging.yaml](https://github.com/aws/karpenter/blob/main/charts/karpenter/templates/configmap-logging.yaml)\n`ConfigMap`'s [data.zap-logger-config](https://github.com/aws/karpenter/blob/main/charts/karpenter/templates/configmap-logging.yaml#L26) field.\nThe available configuration options are specified in the [zap.Config godocs](https://pkg.go.dev/go.uber.org/zap#Config).\n"
  },
  {
    "path": "website/content/en/docs/getting-started/_index.md",
    "content": "---\ntitle: \"Getting Started\"\nlinkTitle: \"Getting Started\"\nweight: 10\ndescription: >\n  Choose from different methods to get started with Karpenter\n---\n\n\nTo get started with Karpenter, the [Getting Started with Karpenter]({{< relref \"getting-started-with-karpenter\" >}}) guide provides an end-to-end procedure for creating a cluster (with `eksctl`) and adding Karpenter.\n\nSee the [AKS Node autoprovisioning article](https://learn.microsoft.com/azure/aks/node-autoprovision) on how to use Karpenter on Azure's AKS or go to the [Karpenter provider for Azure open source repository](https://github.com/Azure/karpenter-provider-azure) for self-hosting on Azure and additional information.\n\nSee the [Deploy Karpenter on Alibabacloud's ACK](https://docs.cloudpilot.ai/karpenter/alibabacloud/preview/getting-started/set-up-a-cluster-and-add-karpenter/) to know how to use Karpenter on Alibabacloud's ACK. Or you can go to the [Karpenter-provider-alibabacloud](https://github.com/cloudpilot-ai/karpenter-provider-alibabacloud) for more details.\n\nIf you prefer, the following instructions use Terraform to create a cluster and add Karpenter:\n\n* [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/getting-started/) guide and also add modules and add-ons. This includes a [Karpenter](https://aws-ia.github.io/terraform-aws-eks-blueprints/patterns/karpenter/) add-on that lets you bypass the instructions in this guide for setting up Karpenter.\n\nAlthough not supported, you could also try Karpenter on other Kubernetes distributions running on AWS. For example:\n\n* [kOps](https://kops.sigs.k8s.io/operations/karpenter/): These instructions describe how to create a kOps Kubernetes cluster in AWS that includes Karpenter.\n\nLearn more about Karpenter and how to get started below.\n\n* [Karpenter EKS Best Practices](https://aws.github.io/aws-eks-best-practices/karpenter/) guide\n* [EC2 Spot Workshop for Karpenter](https://ec2spotworkshops.com/karpenter.html)\n* [EKS Karpenter Workshop](https://www.eksworkshop.com/docs/autoscaling/compute/karpenter/)\n* [Advanced EKS Immersion Karpenter Workshop](https://catalog.us-east-1.prod.workshops.aws/workshops/76a5dd80-3249-4101-8726-9be3eeee09b2/en-US/autoscaling/karpenter)\n* [Karpenter Blueprints](https://github.com/aws-samples/karpenter-blueprints)\n* [Tutorial: Run Kubernetes Clusters for Less with Amazon EC2 Spot and Karpenter](https://community.aws/tutorials/run-kubernetes-clusters-for-less-with-amazon-ec2-spot-and-karpenter#step-6-optional-simulate-spot-interruption)\n"
  },
  {
    "path": "website/content/en/docs/getting-started/getting-started-with-karpenter/_index.md",
    "content": "\n---\ntitle: \"Getting Started with Karpenter\"\nlinkTitle: \"Getting Started with Karpenter\"\nweight: 10\ndescription: >\n  Set up a cluster and add Karpenter\n---\n\nKarpenter 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.\n\nThis guide shows how to get started with Karpenter by creating a Kubernetes cluster and installing Karpenter.\nTo use Karpenter, you must be running a supported Kubernetes cluster on a supported cloud provider.\n\nThe guide below explains how to utilize the [Karpenter provider for AWS](https://github.com/aws/karpenter-provider-aws) with EKS.\n\nSee the [AKS Node autoprovisioning article](https://learn.microsoft.com/azure/aks/node-autoprovision) on how to use Karpenter on Azure's AKS or go to the [Karpenter provider for Azure open source repository](https://github.com/Azure/karpenter-provider-azure) for self-hosting on Azure and additional information.\n\n## Create a cluster and add Karpenter\n\nThis guide uses `eksctl` to create the cluster.\nIt should take less than 1 hour to complete, and cost less than $0.25.\nFollow the clean-up instructions to reduce any charges.\n\n### 1. Install utilities\n\nKarpenter is installed in clusters with a Helm chart.\n\nKarpenter requires cloud provider permissions to provision nodes, for AWS IAM\nRoles for Service Accounts (IRSA) should be used. IRSA permits Karpenter\n(within the cluster) to make privileged requests to AWS (as the cloud provider)\nvia a ServiceAccount.\n\nInstall these tools before proceeding:\n\n1. [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2-linux.html)\n2. `kubectl` - [the Kubernetes CLI](https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/)\n3. `eksctl` (>= v0.202.0) - [the CLI for AWS EKS](https://eksctl.io/installation)\n4. `helm` - [the package manager for Kubernetes](https://helm.sh/docs/intro/install/)\n\n[Configure the AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html)\nwith a user that has sufficient privileges to create an EKS cluster. Verify that the CLI can\nauthenticate properly by running `aws sts get-caller-identity`.\n\n### 2. Set environment variables\n\nAfter setting up the tools, set the Karpenter and Kubernetes version:\n\n```bash\nexport KARPENTER_NAMESPACE=\"kube-system\"\nexport KARPENTER_VERSION=\"1.10.0\"\nexport K8S_VERSION=\"1.34\"\n```\n\nThen set the following environment variable:\n\n{{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step01-config.sh\" language=\"bash\"%}}\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nIf you open a new shell to run steps in this procedure, you need to set some or all of the environment variables again.\nTo remind yourself of these values, type:\n\n```bash\necho \"${KARPENTER_NAMESPACE}\" \"${KARPENTER_VERSION}\" \"${K8S_VERSION}\" \"${CLUSTER_NAME}\" \"${AWS_DEFAULT_REGION}\" \"${AWS_ACCOUNT_ID}\" \"${TEMPOUT}\" \"${ALIAS_VERSION}\"\n```\n\n{{% /alert %}}\n\n\n### 3. Create a Cluster\n\nCreate a basic cluster with `eksctl`.\nThe following cluster configuration will:\n\n* Use CloudFormation to set up the infrastructure needed by the EKS cluster. See [CloudFormation]({{< relref \"../../reference/cloudformation/\" >}}) for a complete description of what `cloudformation.yaml` does for Karpenter.\n* Create a Kubernetes service account and AWS IAM Role, and associate them using IRSA to let Karpenter launch instances.\n* Add the Karpenter node role to the aws-auth configmap to allow nodes to connect.\n* 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.\n* Set KARPENTER_IAM_ROLE_ARN variables.\n* Create a role to allow spot instances.\n* Run Helm to install Karpenter\n\n{{< tabpane text=true right=false >}}\n  {{% tab header=\"**Create cluster command**:\" disabled=true /%}}\n  {{% tab header=\"Managed NodeGroups\" %}}\n  {{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step02-create-cluster.sh\" language=\"bash\"%}}\n  {{% /tab %}}\n  {{% tab header=\"Fargate\" %}}\n  {{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step02-create-cluster-fargate.sh\" language=\"bash\"%}}\n  {{% /tab %}}\n{{< /tabpane >}}\n\nUnless your AWS account has already onboarded to EC2 Spot, you will need to create the service linked role to\navoid the [`ServiceLinkedRoleCreationNotPermitted` error]({{<ref \"../../troubleshooting/#missing-service-linked-role\" >}}).\n\n{{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step06-add-spot-role.sh\" language=\"bash\"%}}\n\n{{% alert title=\"Windows Support Notice\" color=\"warning\" %}}\nIn order to run Windows workloads, Windows support should be enabled in your EKS Cluster.\nSee [Enabling Windows support](https://docs.aws.amazon.com/eks/latest/userguide/windows-support.html#enable-windows-support) to learn more.\n{{% /alert %}}\n\n### 4. Install Karpenter\n\n{{< tabpane text=true right=false >}}\n  {{% tab header=\"**Karpenter installation command**:\" disabled=true /%}}\n  {{% tab header=\"Managed NodeGroups\" %}}\n  {{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step08-apply-helm-chart.sh\" language=\"bash\"%}}\n  {{% /tab %}}\n  {{% tab header=\"Fargate\" %}}\n  {{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step08-apply-helm-chart-fargate.sh\" language=\"bash\"%}}\n  {{% /tab %}}\n{{< /tabpane >}}\n\nAs the OCI Helm chart is signed by [Cosign](https://github.com/sigstore/cosign) as part of the release process you can verify the chart before installing it by running the following command.\n\n```bash\ncosign verify public.ecr.aws/karpenter/karpenter:1.10.0 \\\n  --certificate-oidc-issuer=https://token.actions.githubusercontent.com \\\n  --certificate-identity-regexp='https://github\\.com/aws/karpenter-provider-aws/\\.github/workflows/release\\.yaml@.+' \\\n  --certificate-github-workflow-repository=aws/karpenter-provider-aws \\\n  --certificate-github-workflow-name=Release \\\n  --certificate-github-workflow-ref=refs/tags/v1.10.0 \\\n  --annotations version=1.10.0\n```\n\n{{% alert title=\"DNS Policy Notice\" color=\"warning\" %}}\nKarpenter uses the `ClusterFirst` pod DNS policy by default. This is the Kubernetes cluster default and this ensures that Karpenter can reach-out to internal Kubernetes services during its lifetime. There may be cases where you do not have the DNS service that you are using on your cluster up-and-running before Karpenter starts up. The most common case of this is you want Karpenter to manage the node capacity where your DNS service pods are running.\n\nIf you need Karpenter to manage the DNS service pods' capacity, this means that DNS won't be running when Karpenter starts-up. In this case, you will need to set the pod DNS policy to `Default` with `--set dnsPolicy=Default`. This will tell Karpenter to use the host's DNS resolution instead of the internal DNS resolution, ensuring that you don't have a dependency on the DNS service pods to run. More details on this issue can be found in the following Github issues: [#2186](https://github.com/aws/karpenter-provider-aws/issues/2186) and [#4947](https://github.com/aws/karpenter-provider-aws/issues/4947).\n{{% /alert %}}\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter creates a mapping between CloudProvider machines and CustomResources in the cluster for capacity tracking. To ensure this mapping is consistent, Karpenter utilizes the following tag keys:\n\n* `karpenter.sh/managed-by`\n* `karpenter.sh/nodepool`\n* `kubernetes.io/cluster/${CLUSTER_NAME}`\n\nBecause Karpenter takes this dependency, any user that has the ability to Create/Delete these tags on CloudProvider machines will have the ability to orchestrate Karpenter to Create/Delete CloudProvider machines as a side effect. We recommend that you [enforce tag-based IAM policies](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html) on these tags against any EC2 instance resource (`i-*`) for any users that might have [CreateTags](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTags.html)/[DeleteTags](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DeleteTags.html) permissions but should not have [RunInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html)/[TerminateInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_TerminateInstances.html) permissions.\n{{% /alert %}}\n\n### 5. Create NodePool\n\nA single Karpenter NodePool 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.\n\nCreate a default NodePool using the command below. This NodePool uses `securityGroupSelectorTerms` and `subnetSelectorTerms` to discover resources used to launch nodes. We applied the tag `karpenter.sh/discovery` in the `eksctl` command above. Depending on how these resources are shared between clusters, you may need to use different tagging schemes.\n\nThe `consolidationPolicy` set to `WhenEmptyOrUnderutilized` in the `disruption` block configures Karpenter to reduce cluster cost by removing and replacing nodes. As a result, consolidation will terminate any empty nodes on the cluster. This behavior can be disabled by setting `consolidateAfter` to `Never`, telling Karpenter that it should never consolidate nodes. Review the [NodePool API docs]({{<ref \"../../concepts/nodepools\" >}}) for more information.\n\nNote: This NodePool will create capacity as long as the sum of all created capacity is less than the specified limit.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step12-add-nodepool.sh\" language=\"bash\"%}}\n\nKarpenter is now active and ready to begin provisioning nodes.\n\n### 6. Scale up deployment\n\nThis deployment uses the [pause image](https://www.ianlewis.org/en/almighty-pause-container) and starts with zero replicas.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step13-automatic-node-provisioning.sh\" language=\"bash\"%}}\n\n### 7. Scale down deployment\n\nNow, delete the deployment. After a short amount of time, Karpenter should terminate the empty nodes due to consolidation.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step14-deprovisioning.sh\" language=\"bash\"%}}\n\n### 8. Delete Karpenter nodes manually\n\nIf you delete a node with kubectl, Karpenter will gracefully cordon, drain,\nand shutdown the corresponding instance. Under the hood, Karpenter adds a\nfinalizer to the node object, which blocks deletion until all pods are\ndrained and the instance is terminated. Keep in mind, this only works for\nnodes provisioned by Karpenter.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step16-delete-node.sh\" language=\"bash\"%}}\n\n### 9. Delete the cluster\nTo avoid additional charges, remove the demo infrastructure from your AWS account.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step17-cleanup.sh\" language=\"bash\"%}}\n\n## Monitoring with Grafana (optional)\n\nThis section describes optional ways to configure Karpenter to enhance its capabilities.\nIn 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.\nThis deployment includes two Karpenter dashboards that are automatically onboarded to Grafana. They provide a variety of visualization examples on Karpenter metrics.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step09-add-prometheus-grafana.sh\" language=\"bash\"%}}\n\nThe Grafana instance may be accessed using port forwarding.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step10-add-grafana-port-forward.sh\" language=\"bash\"%}}\n\nThe new stack has only one user, `admin`, and the password is stored in a secret. The following command will retrieve the password.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step11-grafana-get-password.sh\" language=\"bash\"%}}\n\n## Advanced Installation\n\nThe section below covers advanced installation techniques for installing Karpenter. This includes things such as running Karpenter on a cluster without public internet access or ensuring that Karpenter avoids getting throttled by other components in your cluster.\n\n### Private Clusters\n\nYou can optionally install Karpenter on a [private cluster](https://docs.aws.amazon.com/eks/latest/userguide/private-clusters.html#private-cluster-requirements) using the `eksctl` installation by setting `privateCluster.enabled` to true in your [ClusterConfig](https://eksctl.io/usage/eks-private-cluster/#eks-fully-private-cluster) and by setting `--set settings.isolatedVPC=true` when installing the `karpenter` Helm chart.\n\n```bash\nprivateCluster:\n  enabled: true\n```\n\nPrivate clusters have no outbound access to the internet. This means that in order for Karpenter to reach out to the services that it needs to access, you need to enable specific VPC private endpoints. Below shows the endpoints that you need to enable to successfully run Karpenter in a private cluster:\n\n```text\ncom.amazonaws.<region>.ec2\ncom.amazonaws.<region>.ecr.api\ncom.amazonaws.<region>.ecr.dkr\ncom.amazonaws.<region>.s3 – For pulling container images\ncom.amazonaws.<region>.sts – For IAM roles for service accounts\ncom.amazonaws.<region>.ssm - For resolving default AMIs\ncom.amazonaws.<region>.sqs - For accessing SQS if using interruption handling\ncom.amazonaws.<region>.eks - For Karpenter to discover the cluster endpoint\n```\n\nIf you do not currently have these endpoints surfaced in your VPC, you can add the endpoints by running\n\n```bash\naws ec2 create-vpc-endpoint --vpc-id ${VPC_ID} --service-name ${SERVICE_NAME} --vpc-endpoint-type Interface --subnet-ids ${SUBNET_IDS} --security-group-ids ${SECURITY_GROUP_IDS}\n```\n\n{{% alert title=\"Note\" color=\"primary\" %}}\n\nKarpenter (controller and webhook deployment) container images must be in or copied to Amazon ECR private or to another private registry accessible from inside the VPC. If these are not available from within the VPC, or from networks peered with the VPC, you will get Image pull errors when Kubernetes tries to pull these images from ECR public.\n\n{{% /alert %}}\n\n{{% alert title=\"Note\" color=\"primary\" %}}\n\nThere is currently no VPC private endpoint for the [IAM API](https://docs.aws.amazon.com/IAM/latest/APIReference/welcome.html). As a result, you cannot use the default `spec.role` field in your `EC2NodeClass`. Instead, you need to provision and manage an instance profile manually and then specify Karpenter to use this instance profile through the `spec.instanceProfile` field.\n\nYou can provision an instance profile manually and assign a Node role to it by calling the following command\n\n```bash\naws iam create-instance-profile --instance-profile-name \"KarpenterNodeInstanceProfile-${CLUSTER_NAME}\"\naws iam add-role-to-instance-profile --instance-profile-name \"KarpenterNodeInstanceProfile-${CLUSTER_NAME}\" --role-name \"KarpenterNodeRole-${CLUSTER_NAME}\"\n```\n\n{{% /alert %}}\n\n{{% alert title=\"Note\" color=\"primary\" %}}\n\nThere is currently no VPC private endpoint for the [Price List Query API](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/using-price-list-query-api.html). As a result, pricing data can go stale over time. By default, Karpenter ships a static price list that is updated when each binary is released.\n\nFailed requests for pricing data will result in the following error messages\n\n```bash\nERROR   controller.aws.pricing  updating on-demand pricing, RequestError: send request failed\ncaused by: Post \"https://api.pricing.us-east-1.amazonaws.com/\": dial tcp 52.94.231.236:443: i/o timeout; RequestError: send request failed\ncaused 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\"}\n```\n\n{{% /alert %}}\n\n### Preventing APIServer Request Throttling\n\nKubernetes uses [FlowSchemas](https://kubernetes.io/docs/concepts/cluster-administration/flow-control/#flowschema) and [PriorityLevelConfigurations](https://kubernetes.io/docs/concepts/cluster-administration/flow-control/#prioritylevelconfiguration) to map calls to the API server into buckets which determine each user agent's throttling limits.\n\nBy default, Karpenter is installed into the `kube-system` namespace, which leverages the `system-leader-election` and `kube-system-service-accounts` [FlowSchemas](https://kubernetes.io/docs/concepts/cluster-administration/flow-control/#flowschema) to map calls from the `kube-system` namespace to the `leader-election` and `workload-high` PriorityLevelConfigurations respectively. By putting Karpenter in these PriorityLevelConfigurations, we ensure that Karpenter and other critical cluster components are able to run even if other components on the cluster are throttled in other PriorityLevelConfigurations.\n\nIf you install Karpenter in a different namespace than the default `kube-system` namespace, Karpenter will not be put into these higher-priority FlowSchemas by default. Instead, you will need to create custom FlowSchemas for the namespace and service account where Karpenter is installed to ensure that requests are put into this higher PriorityLevelConfiguration.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step15-apply-flowschemas.sh\" language=\"bash\"%}}\n"
  },
  {
    "path": "website/content/en/docs/getting-started/getting-started-with-karpenter/cloudformation.yaml",
    "content": "AWSTemplateFormatVersion: \"2010-09-09\"\nDescription: Resources used by https://github.com/aws/karpenter\nParameters:\n  ClusterName:\n    Type: String\n    Description: \"EKS cluster name\"\nResources:\n  KarpenterNodeRole:\n    Type: \"AWS::IAM::Role\"\n    Properties:\n      RoleName: !Sub \"KarpenterNodeRole-${ClusterName}\"\n      Path: /\n      AssumeRolePolicyDocument:\n        Version: \"2012-10-17\"\n        Statement:\n          - Effect: Allow\n            Principal:\n              Service:\n                !Sub \"ec2.${AWS::URLSuffix}\"\n            Action:\n              - \"sts:AssumeRole\"\n      ManagedPolicyArns:\n        - !Sub \"arn:${AWS::Partition}:iam::aws:policy/AmazonEKS_CNI_Policy\"\n        - !Sub \"arn:${AWS::Partition}:iam::aws:policy/AmazonEKSWorkerNodePolicy\"\n        - !Sub \"arn:${AWS::Partition}:iam::aws:policy/AmazonEC2ContainerRegistryPullOnly\"\n        - !Sub \"arn:${AWS::Partition}:iam::aws:policy/AmazonSSMManagedInstanceCore\"\n  NodeLifecyclePolicy:\n    Type: AWS::IAM::ManagedPolicy\n    Properties:\n      ManagedPolicyName: !Sub \"KarpenterControllerNodeLifecyclePolicy-${ClusterName}\"\n      Path: /\n      # The PolicyDocument must be in JSON string format because we use a StringEquals condition that uses an interpolated\n      # value in one of its key parameters which isn't natively supported by CloudFormation\n      PolicyDocument: !Sub |\n        {\n          \"Version\": \"2012-10-17\",\n          \"Statement\": [\n            {\n              \"Sid\": \"AllowScopedEC2InstanceAccessActions\",\n              \"Effect\": \"Allow\",\n              \"Resource\": [\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}::image/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}::snapshot/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:security-group/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:subnet/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:capacity-reservation/*\"\n              ],\n              \"Action\": [\n                \"ec2:RunInstances\",\n                \"ec2:CreateFleet\"\n              ]\n            },\n            {\n              \"Sid\": \"AllowScopedEC2LaunchTemplateAccessActions\",\n              \"Effect\": \"Allow\",\n              \"Resource\": \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:launch-template/*\",\n              \"Action\": [\n                \"ec2:RunInstances\",\n                \"ec2:CreateFleet\"\n              ],\n              \"Condition\": {\n                \"StringEquals\": {\n                  \"aws:ResourceTag/kubernetes.io/cluster/${ClusterName}\": \"owned\"\n                },\n                \"StringLike\": {\n                  \"aws:ResourceTag/karpenter.sh/nodepool\": \"*\"\n                }\n              }\n            },\n            {\n              \"Sid\": \"AllowScopedEC2InstanceActionsWithTags\",\n              \"Effect\": \"Allow\",\n              \"Resource\": [\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:fleet/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:instance/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:volume/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:network-interface/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:launch-template/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:spot-instances-request/*\"\n              ],\n              \"Action\": [\n                \"ec2:RunInstances\",\n                \"ec2:CreateFleet\",\n                \"ec2:CreateLaunchTemplate\"\n              ],\n              \"Condition\": {\n                \"StringEquals\": {\n                  \"aws:RequestTag/kubernetes.io/cluster/${ClusterName}\": \"owned\",\n                  \"aws:RequestTag/eks:eks-cluster-name\": \"${ClusterName}\"\n                },\n                \"StringLike\": {\n                  \"aws:RequestTag/karpenter.sh/nodepool\": \"*\"\n                }\n              }\n            },\n            {\n              \"Sid\": \"AllowScopedResourceCreationTagging\",\n              \"Effect\": \"Allow\",\n              \"Resource\": [\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:fleet/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:instance/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:volume/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:network-interface/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:launch-template/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:spot-instances-request/*\"\n              ],\n              \"Action\": \"ec2:CreateTags\",\n              \"Condition\": {\n                \"StringEquals\": {\n                  \"aws:RequestTag/kubernetes.io/cluster/${ClusterName}\": \"owned\",\n                  \"aws:RequestTag/eks:eks-cluster-name\": \"${ClusterName}\",\n                  \"ec2:CreateAction\": [\n                    \"RunInstances\",\n                    \"CreateFleet\",\n                    \"CreateLaunchTemplate\"\n                  ]\n                },\n                \"StringLike\": {\n                  \"aws:RequestTag/karpenter.sh/nodepool\": \"*\"\n                }\n              }\n            },\n            {\n              \"Sid\": \"AllowScopedResourceTagging\",\n              \"Effect\": \"Allow\",\n              \"Resource\": \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:instance/*\",\n              \"Action\": \"ec2:CreateTags\",\n              \"Condition\": {\n                \"StringEquals\": {\n                  \"aws:ResourceTag/kubernetes.io/cluster/${ClusterName}\": \"owned\"\n                },\n                \"StringLike\": {\n                  \"aws:ResourceTag/karpenter.sh/nodepool\": \"*\"\n                },\n                \"StringEqualsIfExists\": {\n                  \"aws:RequestTag/eks:eks-cluster-name\": \"${ClusterName}\"\n                },\n                \"ForAllValues:StringEquals\": {\n                  \"aws:TagKeys\": [\n                    \"eks:eks-cluster-name\",\n                    \"karpenter.sh/nodeclaim\",\n                    \"Name\"\n                  ]\n                }\n              }\n            },\n            {\n              \"Sid\": \"AllowScopedDeletion\",\n              \"Effect\": \"Allow\",\n              \"Resource\": [\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:instance/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:launch-template/*\"\n              ],\n              \"Action\": [\n                \"ec2:TerminateInstances\",\n                \"ec2:DeleteLaunchTemplate\"\n              ],\n              \"Condition\": {\n                \"StringEquals\": {\n                  \"aws:ResourceTag/kubernetes.io/cluster/${ClusterName}\": \"owned\"\n                },\n                \"StringLike\": {\n                  \"aws:ResourceTag/karpenter.sh/nodepool\": \"*\"\n                }\n              }\n            }\n          ]\n        }\n  IAMIntegrationPolicy:\n    Type: AWS::IAM::ManagedPolicy\n    Properties:\n      ManagedPolicyName: !Sub \"KarpenterControllerIAMIntegrationPolicy-${ClusterName}\"\n      Path: /\n      # The PolicyDocument must be in JSON string format because we use a StringEquals condition that uses an interpolated\n      # value in one of its key parameters which isn't natively supported by CloudFormation\n      PolicyDocument: !Sub |\n        {\n          \"Version\": \"2012-10-17\",\n          \"Statement\": [\n            {\n              \"Sid\": \"AllowPassingInstanceRole\",\n              \"Effect\": \"Allow\",\n              \"Resource\": \"${KarpenterNodeRole.Arn}\",\n              \"Action\": \"iam:PassRole\",\n              \"Condition\": {\n                \"StringEquals\": {\n                  \"iam:PassedToService\": [\n                    \"ec2.amazonaws.com\",\n                    \"ec2.amazonaws.com.cn\"\n                  ]\n                }\n              }\n            },\n            {\n              \"Sid\": \"AllowScopedInstanceProfileCreationActions\",\n              \"Effect\": \"Allow\",\n              \"Resource\": \"arn:${AWS::Partition}:iam::${AWS::AccountId}:instance-profile/*\",\n              \"Action\": [\n                \"iam:CreateInstanceProfile\"\n              ],\n              \"Condition\": {\n                \"StringEquals\": {\n                  \"aws:RequestTag/kubernetes.io/cluster/${ClusterName}\": \"owned\",\n                  \"aws:RequestTag/eks:eks-cluster-name\": \"${ClusterName}\",\n                  \"aws:RequestTag/topology.kubernetes.io/region\": \"${AWS::Region}\"\n                },\n                \"StringLike\": {\n                  \"aws:RequestTag/karpenter.k8s.aws/ec2nodeclass\": \"*\"\n                }\n              }\n            },\n            {\n              \"Sid\": \"AllowScopedInstanceProfileTagActions\",\n              \"Effect\": \"Allow\",\n              \"Resource\": \"arn:${AWS::Partition}:iam::${AWS::AccountId}:instance-profile/*\",\n              \"Action\": [\n                \"iam:TagInstanceProfile\"\n              ],\n              \"Condition\": {\n                \"StringEquals\": {\n                  \"aws:ResourceTag/kubernetes.io/cluster/${ClusterName}\": \"owned\",\n                  \"aws:ResourceTag/topology.kubernetes.io/region\": \"${AWS::Region}\",\n                  \"aws:RequestTag/kubernetes.io/cluster/${ClusterName}\": \"owned\",\n                  \"aws:RequestTag/eks:eks-cluster-name\": \"${ClusterName}\",\n                  \"aws:RequestTag/topology.kubernetes.io/region\": \"${AWS::Region}\"\n                },\n                \"StringLike\": {\n                  \"aws:ResourceTag/karpenter.k8s.aws/ec2nodeclass\": \"*\",\n                  \"aws:RequestTag/karpenter.k8s.aws/ec2nodeclass\": \"*\"\n                }\n              }\n            },\n            {\n              \"Sid\": \"AllowScopedInstanceProfileActions\",\n              \"Effect\": \"Allow\",\n              \"Resource\": \"arn:${AWS::Partition}:iam::${AWS::AccountId}:instance-profile/*\",\n              \"Action\": [\n                \"iam:AddRoleToInstanceProfile\",\n                \"iam:RemoveRoleFromInstanceProfile\",\n                \"iam:DeleteInstanceProfile\"\n              ],\n              \"Condition\": {\n                \"StringEquals\": {\n                  \"aws:ResourceTag/kubernetes.io/cluster/${ClusterName}\": \"owned\",\n                  \"aws:ResourceTag/topology.kubernetes.io/region\": \"${AWS::Region}\"\n                },\n                \"StringLike\": {\n                  \"aws:ResourceTag/karpenter.k8s.aws/ec2nodeclass\": \"*\"\n                }\n              }\n            }\n          ]\n        }\n  EKSIntegrationPolicy:\n    Type: AWS::IAM::ManagedPolicy\n    Properties:\n      ManagedPolicyName: !Sub \"KarpenterControllerEKSIntegrationPolicy-${ClusterName}\"\n      Path: /\n      # The PolicyDocument must be in JSON string format because we use a StringEquals condition that uses an interpolated\n      # value in one of its key parameters which isn't natively supported by CloudFormation\n      PolicyDocument: !Sub |\n        {\n          \"Version\": \"2012-10-17\",\n          \"Statement\": [\n            {\n              \"Sid\": \"AllowAPIServerEndpointDiscovery\",\n              \"Effect\": \"Allow\",\n              \"Resource\": \"arn:${AWS::Partition}:eks:${AWS::Region}:${AWS::AccountId}:cluster/${ClusterName}\",\n              \"Action\": \"eks:DescribeCluster\"\n            }\n          ]\n        }\n  InterruptionPolicy:\n    Type: AWS::IAM::ManagedPolicy\n    Properties:\n      ManagedPolicyName: !Sub \"KarpenterControllerInterruptionPolicy-${ClusterName}\"\n      Path: /\n      # The PolicyDocument must be in JSON string format because we use a StringEquals condition that uses an interpolated\n      # value in one of its key parameters which isn't natively supported by CloudFormation\n      PolicyDocument: !Sub |\n        {\n          \"Version\": \"2012-10-17\",\n          \"Statement\": [\n            {\n              \"Sid\": \"AllowInterruptionQueueActions\",\n              \"Effect\": \"Allow\",\n              \"Resource\": \"${KarpenterInterruptionQueue.Arn}\",\n              \"Action\": [\n                \"sqs:DeleteMessage\",\n                \"sqs:GetQueueUrl\",\n                \"sqs:ReceiveMessage\"\n              ]\n            }\n          ]\n        }\n  ResourceDiscoveryPolicy:\n    Type: AWS::IAM::ManagedPolicy\n    Properties:\n      ManagedPolicyName: !Sub \"KarpenterControllerResourceDiscoveryPolicy-${ClusterName}\"\n      Path: /\n      # The PolicyDocument must be in JSON string format because we use a StringEquals condition that uses an interpolated\n      # value in one of its key parameters which isn't natively supported by CloudFormation\n      PolicyDocument: !Sub |\n        {\n          \"Version\": \"2012-10-17\",\n          \"Statement\": [\n            {\n              \"Sid\": \"AllowRegionalReadActions\",\n              \"Effect\": \"Allow\",\n              \"Resource\": \"*\",\n              \"Action\": [\n                \"ec2:DescribeCapacityReservations\",\n                \"ec2:DescribeImages\",\n                \"ec2:DescribeInstances\",\n                \"ec2:DescribeInstanceTypeOfferings\",\n                \"ec2:DescribeInstanceTypes\",\n                \"ec2:DescribeLaunchTemplates\",\n                \"ec2:DescribeSecurityGroups\",\n                \"ec2:DescribeSpotPriceHistory\",\n                \"ec2:DescribeSubnets\"\n              ],\n              \"Condition\": {\n                \"StringEquals\": {\n                  \"aws:RequestedRegion\": \"${AWS::Region}\"\n                }\n              }\n            },\n            {\n              \"Sid\": \"AllowSSMReadActions\",\n              \"Effect\": \"Allow\",\n              \"Resource\": \"arn:${AWS::Partition}:ssm:${AWS::Region}::parameter/aws/service/*\",\n              \"Action\": \"ssm:GetParameter\"\n            },\n            {\n              \"Sid\": \"AllowPricingReadActions\",\n              \"Effect\": \"Allow\",\n              \"Resource\": \"*\",\n              \"Action\": \"pricing:GetProducts\"\n            },\n            {\n              \"Sid\": \"AllowUnscopedInstanceProfileListAction\",\n              \"Effect\": \"Allow\",\n              \"Resource\": \"*\",\n              \"Action\": \"iam:ListInstanceProfiles\"\n            },\n            {\n              \"Sid\": \"AllowInstanceProfileReadActions\",\n              \"Effect\": \"Allow\",\n              \"Resource\": \"arn:${AWS::Partition}:iam::${AWS::AccountId}:instance-profile/*\",\n              \"Action\": \"iam:GetInstanceProfile\"\n            }\n          ]\n        }\n  KarpenterInterruptionQueue:\n    Type: AWS::SQS::Queue\n    Properties:\n      QueueName: !Sub \"${ClusterName}\"\n      MessageRetentionPeriod: 300\n      SqsManagedSseEnabled: true\n  KarpenterInterruptionQueuePolicy:\n    Type: AWS::SQS::QueuePolicy\n    Properties:\n      Queues:\n        - !Ref KarpenterInterruptionQueue\n      PolicyDocument:\n        Id: EC2InterruptionPolicy\n        Statement:\n          - Effect: Allow\n            Principal:\n              Service:\n                - events.amazonaws.com\n                - sqs.amazonaws.com\n            Action: sqs:SendMessage\n            Resource: !GetAtt KarpenterInterruptionQueue.Arn\n          - Sid: DenyHTTP\n            Effect: Deny\n            Action: sqs:*\n            Resource: !GetAtt KarpenterInterruptionQueue.Arn\n            Condition:\n              Bool:\n                aws:SecureTransport: false\n            Principal: \"*\"\n  ScheduledChangeRule:\n    Type: 'AWS::Events::Rule'\n    Properties:\n      EventPattern:\n        source:\n          - aws.health\n        detail-type:\n          - AWS Health Event\n      Targets:\n        - Id: KarpenterInterruptionQueueTarget\n          Arn: !GetAtt KarpenterInterruptionQueue.Arn\n  SpotInterruptionRule:\n    Type: 'AWS::Events::Rule'\n    Properties:\n      EventPattern:\n        source:\n          - aws.ec2\n        detail-type:\n          - EC2 Spot Instance Interruption Warning\n      Targets:\n        - Id: KarpenterInterruptionQueueTarget\n          Arn: !GetAtt KarpenterInterruptionQueue.Arn\n  RebalanceRule:\n    Type: 'AWS::Events::Rule'\n    Properties:\n      EventPattern:\n        source:\n          - aws.ec2\n        detail-type:\n          - EC2 Instance Rebalance Recommendation\n      Targets:\n        - Id: KarpenterInterruptionQueueTarget\n          Arn: !GetAtt KarpenterInterruptionQueue.Arn\n  InstanceStateChangeRule:\n    Type: 'AWS::Events::Rule'\n    Properties:\n      EventPattern:\n        source:\n          - aws.ec2\n        detail-type:\n          - EC2 Instance State-change Notification\n      Targets:\n        - Id: KarpenterInterruptionQueueTarget\n          Arn: !GetAtt KarpenterInterruptionQueue.Arn\n  CapacityReservationInterruptionRule:\n    Type: 'AWS::Events::Rule'\n    Properties:\n      EventPattern:\n        source:\n          - aws.ec2\n        detail-type:\n          - EC2 Capacity Reservation Instance Interruption Warning\n      Targets:\n        - Id: KarpenterInterruptionQueueTarget\n          Arn: !GetAtt KarpenterInterruptionQueue.Arn"
  },
  {
    "path": "website/content/en/docs/getting-started/getting-started-with-karpenter/grafana-values.yaml",
    "content": "datasources:\n  datasources.yaml:\n    apiVersion: 1\n    datasources:\n    - name: Prometheus\n      type: prometheus\n      version: 1\n      url: http://prometheus-server:80\n      access: proxy\ndashboardProviders:\n  dashboardproviders.yaml:\n    apiVersion: 1\n    providers:\n    - name: 'default'\n      orgId: 1\n      folder: ''\n      type: file\n      disableDeletion: false\n      editable: true\n      options:\n        path: /var/lib/grafana/dashboards/default\ndashboards:\n  default:\n    capacity-dashboard:\n      url: https://karpenter.sh/v1.10/getting-started/getting-started-with-karpenter/karpenter-capacity-dashboard.json\n    performance-dashboard:\n      url: https://karpenter.sh/v1.10/getting-started/getting-started-with-karpenter/karpenter-performance-dashboard.json\n"
  },
  {
    "path": "website/content/en/docs/getting-started/getting-started-with-karpenter/karpenter-capacity-dashboard.json",
    "content": "{\n    \"annotations\": {\n      \"list\": [\n        {\n          \"builtIn\": 1,\n          \"datasource\": \"-- Grafana --\",\n          \"enable\": true,\n          \"hide\": true,\n          \"iconColor\": \"rgba(0, 211, 255, 1)\",\n          \"name\": \"Annotations & Alerts\",\n          \"target\": {\n            \"limit\": 100,\n            \"matchAny\": false,\n            \"tags\": [],\n            \"type\": \"dashboard\"\n          },\n          \"type\": \"dashboard\"\n        }\n      ]\n    },\n    \"editable\": true,\n    \"fiscalYearStartMonth\": 0,\n    \"graphTooltip\": 0,\n    \"id\": 32,\n    \"links\": [],\n    \"liveNow\": true,\n    \"panels\": [\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"description\": \"\",\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisBorderShow\": false,\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"Nodes rate\",\n              \"axisPlacement\": \"auto\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 10,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"insertNulls\": false,\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"auto\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"none\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"min\": 0,\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            },\n            \"unit\": \"none\"\n          },\n          \"overrides\": [\n            {\n              \"matcher\": {\n                \"id\": \"byFrameRefID\",\n                \"options\": \"B\"\n              },\n              \"properties\": [\n                {\n                  \"id\": \"custom.axisPlacement\",\n                  \"value\": \"right\"\n                },\n                {\n                  \"id\": \"custom.axisLabel\",\n                  \"value\": \"Nodes total\"\n                }\n              ]\n            }\n          ]\n        },\n        \"gridPos\": {\n          \"h\": 5,\n          \"w\": 24,\n          \"x\": 0,\n          \"y\": 0\n        },\n        \"id\": 14,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [\n              \"lastNotNull\"\n            ],\n            \"displayMode\": \"table\",\n            \"placement\": \"right\",\n            \"showLegend\": true\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"sum(rate(karpenter_nodes_created_total{nodepool=~\\\"$nodepool\\\"}[$__rate_interval])) by(cluster,nodepool)\",\n            \"format\": \"time_series\",\n            \"legendFormat\": \"{{cluster}}\",\n            \"range\": true,\n            \"refId\": \"A\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"sum by(cluster,nodepool) (karpenter_nodes_created_total{nodepool=~\\\"$nodepool\\\"})\",\n            \"hide\": false,\n            \"instant\": false,\n            \"legendFormat\": \"__auto\",\n            \"range\": true,\n            \"refId\": \"B\"\n          }\n        ],\n        \"title\": \"Nodes Created by nodepool\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"description\": \"\",\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisBorderShow\": false,\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"Nodes rate\",\n              \"axisPlacement\": \"auto\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 10,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"insertNulls\": false,\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"auto\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"none\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"min\": 0,\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            },\n            \"unit\": \"none\"\n          },\n          \"overrides\": [\n            {\n              \"matcher\": {\n                \"id\": \"byFrameRefID\",\n                \"options\": \"B\"\n              },\n              \"properties\": [\n                {\n                  \"id\": \"custom.axisPlacement\",\n                  \"value\": \"right\"\n                },\n                {\n                  \"id\": \"custom.axisLabel\",\n                  \"value\": \"Nodes total\"\n                }\n              ]\n            }\n          ]\n        },\n        \"gridPos\": {\n          \"h\": 5,\n          \"w\": 24,\n          \"x\": 0,\n          \"y\": 5\n        },\n        \"id\": 15,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [\n              \"lastNotNull\"\n            ],\n            \"displayMode\": \"table\",\n            \"placement\": \"right\",\n            \"showLegend\": true\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"sum(rate(karpenter_nodes_terminated_total{nodepool=~\\\"$nodepool\\\"}[$__rate_interval])) by(cluster,nodepool)\",\n            \"format\": \"time_series\",\n            \"legendFormat\": \"__auto\",\n            \"range\": true,\n            \"refId\": \"A\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"sum by(cluster,nodepool) (karpenter_nodes_terminated_total{nodepool=~\\\"$nodepool\\\"})\",\n            \"hide\": false,\n            \"instant\": false,\n            \"legendFormat\": \"__auto\",\n            \"range\": true,\n            \"refId\": \"B\"\n          }\n        ],\n        \"title\": \"Nodes Terminated by nodepool\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisBorderShow\": false,\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"\",\n              \"axisPlacement\": \"auto\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 10,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"insertNulls\": false,\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"auto\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"none\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            }\n          },\n          \"overrides\": []\n        },\n        \"gridPos\": {\n          \"h\": 6,\n          \"w\": 24,\n          \"x\": 0,\n          \"y\": 10\n        },\n        \"id\": 12,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [\n              \"last\"\n            ],\n            \"displayMode\": \"table\",\n            \"placement\": \"right\",\n            \"showLegend\": true\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"exemplar\": false,\n            \"expr\": \"sum by(reason)(karpenter_voluntary_disruption_eligible_nodes)\",\n            \"legendFormat\": \"reason={{reason}}\",\n            \"range\": true,\n            \"refId\": \"A\"\n          }\n        ],\n        \"title\": \"Nodes Eligible for Disruptions by \\\"reason\\\"\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"description\": \"\",\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisBorderShow\": false,\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"Disruptions rate\",\n              \"axisPlacement\": \"auto\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 10,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"insertNulls\": false,\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"auto\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"normal\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            }\n          },\n          \"overrides\": [\n            {\n              \"matcher\": {\n                \"id\": \"byFrameRefID\",\n                \"options\": \"B\"\n              },\n              \"properties\": [\n                {\n                  \"id\": \"custom.axisPlacement\",\n                  \"value\": \"right\"\n                },\n                {\n                  \"id\": \"custom.axisLabel\",\n                  \"value\": \"Disruptions total\"\n                }\n              ]\n            }\n          ]\n        },\n        \"gridPos\": {\n          \"h\": 6,\n          \"w\": 24,\n          \"x\": 0,\n          \"y\": 16\n        },\n        \"id\": 17,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [\n              \"last\"\n            ],\n            \"displayMode\": \"table\",\n            \"placement\": \"right\",\n            \"showLegend\": true\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"exemplar\": false,\n            \"expr\": \"sum(rate(karpenter_nodeclaims_disrupted_total{nodepool=~\\\"$nodepool\\\"}[$__rate_interval])) by(cluster,nodepool)\",\n            \"legendFormat\": \"{{label_name}}\",\n            \"range\": true,\n            \"refId\": \"A\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"sum by(cluster,nodepool)(karpenter_nodeclaims_disrupted_total{nodepool=~\\\"$nodepool\\\"})\",\n            \"hide\": false,\n            \"instant\": false,\n            \"legendFormat\": \"{{label_name}}\",\n            \"range\": true,\n            \"refId\": \"B\"\n          }\n        ],\n        \"title\": \"Node Disruptions by \\\"$distribution_filter\\\"\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisBorderShow\": false,\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"Disruptions rate\",\n              \"axisPlacement\": \"left\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 10,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"insertNulls\": false,\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"auto\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"normal\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            }\n          },\n          \"overrides\": [\n            {\n              \"matcher\": {\n                \"id\": \"byFrameRefID\",\n                \"options\": \"B\"\n              },\n              \"properties\": [\n                {\n                  \"id\": \"custom.axisPlacement\",\n                  \"value\": \"right\"\n                },\n                {\n                  \"id\": \"custom.axisLabel\",\n                  \"value\": \"Disruptions total\"\n                }\n              ]\n            }\n          ]\n        },\n        \"gridPos\": {\n          \"h\": 6,\n          \"w\": 24,\n          \"x\": 0,\n          \"y\": 22\n        },\n        \"id\": 19,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [\n              \"last\"\n            ],\n            \"displayMode\": \"table\",\n            \"placement\": \"right\",\n            \"showLegend\": true\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"exemplar\": true,\n            \"expr\": \"sum(rate(karpenter_voluntary_disruption_decisions_total[$__rate_interval])) by(cluster,nodepool,consolidation_type,decision)\",\n            \"hide\": false,\n            \"legendFormat\": \"type={{consolidation_type}}, decision={{decision}}\",\n            \"range\": true,\n            \"refId\": \"A\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"sum by(consolidation_type,decision)(karpenter_voluntary_disruption_decisions_total)\",\n            \"hide\": true,\n            \"instant\": false,\n            \"legendFormat\": \"{{label_name}}\",\n            \"range\": true,\n            \"refId\": \"B\"\n          }\n        ],\n        \"title\": \"Disruption Actions performed by \\\"type\\\" and \\\"decision\\\"\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisBorderShow\": false,\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"\",\n              \"axisPlacement\": \"auto\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 10,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"insertNulls\": false,\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"auto\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"normal\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            }\n          },\n          \"overrides\": []\n        },\n        \"gridPos\": {\n          \"h\": 8,\n          \"w\": 24,\n          \"x\": 0,\n          \"y\": 28\n        },\n        \"id\": 6,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [],\n            \"displayMode\": \"table\",\n            \"placement\": \"right\",\n            \"showLegend\": true\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"sum by ($distribution_filter)(\\n    karpenter_pods_state{arch=~\\\"$arch\\\", capacity_type=~\\\"$capacity_type\\\", instance_type=~\\\"$instance_type\\\", nodepool=~\\\"$nodepool\\\"}\\n)\",\n            \"legendFormat\": \"{{label_name}}\",\n            \"range\": true,\n            \"refId\": \"A\"\n          }\n        ],\n        \"title\": \"Pod Distribution by \\\"$distribution_filter\\\"\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisBorderShow\": false,\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"\",\n              \"axisPlacement\": \"auto\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 10,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"insertNulls\": false,\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"auto\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"normal\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            }\n          },\n          \"overrides\": []\n        },\n        \"gridPos\": {\n          \"h\": 6,\n          \"w\": 24,\n          \"x\": 0,\n          \"y\": 36\n        },\n        \"id\": 20,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [\n              \"last\"\n            ],\n            \"displayMode\": \"table\",\n            \"placement\": \"right\",\n            \"showLegend\": true\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"sum by(phase)(karpenter_pods_state)\",\n            \"legendFormat\": \"{{label_name}}\",\n            \"range\": true,\n            \"refId\": \"A\"\n          }\n        ],\n        \"title\": \"Pod Phase\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"continuous-RdYlGr\"\n            },\n            \"custom\": {\n              \"align\": \"left\",\n              \"cellOptions\": {\n                \"type\": \"auto\"\n              },\n              \"inspect\": false\n            },\n            \"mappings\": [],\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            }\n          },\n          \"overrides\": [\n            {\n              \"matcher\": {\n                \"id\": \"byRegexp\",\n                \"options\": \".*Utilization$\"\n              },\n              \"properties\": [\n                {\n                  \"id\": \"custom.cellOptions\",\n                  \"value\": {\n                    \"mode\": \"gradient\",\n                    \"type\": \"gauge\"\n                  }\n                },\n                {\n                  \"id\": \"min\",\n                  \"value\": 0\n                },\n                {\n                  \"id\": \"max\",\n                  \"value\": 1\n                },\n                {\n                  \"id\": \"unit\",\n                  \"value\": \"percentunit\"\n                }\n              ]\n            },\n            {\n              \"matcher\": {\n                \"id\": \"byName\",\n                \"options\": \"Memory Provisioned\"\n              },\n              \"properties\": [\n                {\n                  \"id\": \"unit\",\n                  \"value\": \"bytes\"\n                }\n              ]\n            }\n          ]\n        },\n        \"gridPos\": {\n          \"h\": 11,\n          \"w\": 18,\n          \"x\": 0,\n          \"y\": 42\n        },\n        \"id\": 10,\n        \"options\": {\n          \"cellHeight\": \"sm\",\n          \"footer\": {\n            \"countRows\": false,\n            \"fields\": \"\",\n            \"reducer\": [\n              \"sum\"\n            ],\n            \"show\": false\n          },\n          \"showHeader\": true\n        },\n        \"pluginVersion\": \"11.1.0\",\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"exemplar\": false,\n            \"expr\": \"karpenter_nodepools_usage{resource_type=\\\"cpu\\\"} / karpenter_nodepools_limit{resource_type=\\\"cpu\\\"}\",\n            \"format\": \"table\",\n            \"instant\": true,\n            \"legendFormat\": \"CPU Limit Utilization\",\n            \"range\": false,\n            \"refId\": \"CPU Limit Utilization\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"exemplar\": false,\n            \"expr\": \"count by (nodepool)(karpenter_nodes_allocatable{nodepool!=\\\"N/A\\\",resource_type=\\\"cpu\\\"}) # Selects a single resource type to get node count\",\n            \"format\": \"table\",\n            \"hide\": false,\n            \"instant\": true,\n            \"range\": false,\n            \"refId\": \"Node Count\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"exemplar\": false,\n            \"expr\": \"karpenter_nodepools_usage{resource_type=\\\"memory\\\"} / karpenter_nodepools_limit{resource_type=\\\"memory\\\"}\",\n            \"format\": \"table\",\n            \"hide\": false,\n            \"instant\": true,\n            \"legendFormat\": \"Memory Limit Utilization\",\n            \"range\": false,\n            \"refId\": \"Memory Limit Utilization\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"exemplar\": false,\n            \"expr\": \"sum by (nodepool)(karpenter_nodes_allocatable{nodepool!=\\\"N/A\\\",resource_type=\\\"cpu\\\"})\",\n            \"format\": \"table\",\n            \"hide\": false,\n            \"instant\": true,\n            \"range\": false,\n            \"refId\": \"CPU Capacity\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"exemplar\": false,\n            \"expr\": \"sum by (nodepool)(karpenter_nodes_allocatable{nodepool!=\\\"N/A\\\",resource_type=\\\"memory\\\"})\",\n            \"format\": \"table\",\n            \"hide\": false,\n            \"instant\": true,\n            \"range\": false,\n            \"refId\": \"Memory Capacity\"\n          }\n        ],\n        \"title\": \"Nodepool Summary\",\n        \"transformations\": [\n          {\n            \"id\": \"seriesToColumns\",\n            \"options\": {\n              \"byField\": \"nodepool\"\n            }\n          },\n          {\n            \"id\": \"organize\",\n            \"options\": {\n              \"excludeByName\": {\n                \"Time\": true,\n                \"Time 1\": true,\n                \"Time 2\": true,\n                \"Time 3\": true,\n                \"Time 4\": true,\n                \"Time 5\": true,\n                \"__name__\": true,\n                \"instance\": true,\n                \"instance 1\": true,\n                \"instance 2\": true,\n                \"job\": true,\n                \"job 1\": true,\n                \"job 2\": true,\n                \"resource_type\": true,\n                \"resource_type 1\": true,\n                \"resource_type 2\": true\n              },\n              \"indexByName\": {\n                \"Time 1\": 6,\n                \"Time 2\": 7,\n                \"Time 3\": 11,\n                \"Time 4\": 15,\n                \"Time 5\": 16,\n                \"Value #CPU Capacity\": 2,\n                \"Value #CPU Limit Utilization\": 3,\n                \"Value #Memory Capacity\": 4,\n                \"Value #Memory Limit Utilization\": 5,\n                \"Value #Node Count\": 1,\n                \"instance 1\": 8,\n                \"instance 2\": 12,\n                \"job 1\": 9,\n                \"job 2\": 13,\n                \"nodepool\": 0,\n                \"resource_type 1\": 10,\n                \"resource_type 2\": 14\n              },\n              \"renameByName\": {\n                \"Time 1\": \"\",\n                \"Value\": \"CPU Utilization\",\n                \"Value #CPU Capacity\": \"CPU Provisioned\",\n                \"Value #CPU Limit Utilization\": \"CPU Limit Utilization\",\n                \"Value #CPU Utilization\": \"CPU Limit Utilization\",\n                \"Value #Memory Capacity\": \"Memory Provisioned\",\n                \"Value #Memory Limit Utilization\": \"Memory Limit Utilization\",\n                \"Value #Memory Utilization\": \"Memory Utilization\",\n                \"Value #Node Count\": \"Node Count\",\n                \"instance\": \"\",\n                \"instance 1\": \"\",\n                \"job\": \"\",\n                \"nodepool\": \"Nodepool\"\n              }\n            }\n          }\n        ],\n        \"type\": \"table\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisBorderShow\": false,\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"\",\n              \"axisPlacement\": \"auto\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 0,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"insertNulls\": false,\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"auto\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"none\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"max\": 1,\n            \"min\": 0,\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            },\n            \"unit\": \"percentunit\"\n          },\n          \"overrides\": []\n        },\n        \"gridPos\": {\n          \"h\": 11,\n          \"w\": 6,\n          \"x\": 18,\n          \"y\": 42\n        },\n        \"id\": 8,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [],\n            \"displayMode\": \"list\",\n            \"placement\": \"bottom\",\n            \"showLegend\": false\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"(count(karpenter_nodes_allocatable{arch=~\\\"$arch\\\",capacity_type=\\\"spot\\\",instance_type=~\\\"$instance_type\\\",nodepool=~\\\"$nodepool\\\",zone=~\\\"$zone\\\"}) or vector(0)) / count(karpenter_nodes_allocatable{arch=~\\\"$arch\\\",instance_type=~\\\"$instance_type\\\",nodepool=~\\\"$nodepool\\\",zone=~\\\"$zone\\\"})\",\n            \"legendFormat\": \"Percentage\",\n            \"range\": true,\n            \"refId\": \"A\"\n          }\n        ],\n        \"title\": \"Spot Node Percentage\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"continuous-RdYlGr\"\n            },\n            \"custom\": {\n              \"align\": \"left\",\n              \"cellOptions\": {\n                \"type\": \"auto\"\n              },\n              \"inspect\": false\n            },\n            \"mappings\": [],\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            }\n          },\n          \"overrides\": [\n            {\n              \"matcher\": {\n                \"id\": \"byName\",\n                \"options\": \"node_name\"\n              },\n              \"properties\": [\n                {\n                  \"id\": \"custom.width\",\n                  \"value\": 333\n                }\n              ]\n            },\n            {\n              \"matcher\": {\n                \"id\": \"byRegexp\",\n                \"options\": \".*Utilization\"\n              },\n              \"properties\": [\n                {\n                  \"id\": \"custom.cellOptions\",\n                  \"value\": {\n                    \"mode\": \"gradient\",\n                    \"type\": \"gauge\"\n                  }\n                },\n                {\n                  \"id\": \"unit\",\n                  \"value\": \"percentunit\"\n                },\n                {\n                  \"id\": \"min\",\n                  \"value\": 0\n                },\n                {\n                  \"id\": \"thresholds\",\n                  \"value\": {\n                    \"mode\": \"percentage\",\n                    \"steps\": [\n                      {\n                        \"color\": \"green\",\n                        \"value\": null\n                      },\n                      {\n                        \"color\": \"red\",\n                        \"value\": 75\n                      }\n                    ]\n                  }\n                },\n                {\n                  \"id\": \"max\",\n                  \"value\": 1\n                }\n              ]\n            },\n            {\n              \"matcher\": {\n                \"id\": \"byName\",\n                \"options\": \"Uptime\"\n              },\n              \"properties\": [\n                {\n                  \"id\": \"unit\",\n                  \"value\": \"s\"\n                },\n                {\n                  \"id\": \"decimals\",\n                  \"value\": 0\n                }\n              ]\n            }\n          ]\n        },\n        \"gridPos\": {\n          \"h\": 9,\n          \"w\": 24,\n          \"x\": 0,\n          \"y\": 53\n        },\n        \"id\": 4,\n        \"options\": {\n          \"cellHeight\": \"sm\",\n          \"footer\": {\n            \"countRows\": false,\n            \"fields\": \"\",\n            \"reducer\": [\n              \"sum\"\n            ],\n            \"show\": false\n          },\n          \"showHeader\": true,\n          \"sortBy\": [\n            {\n              \"desc\": true,\n              \"displayName\": \"Uptime\"\n            }\n          ]\n        },\n        \"pluginVersion\": \"11.1.0\",\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"exemplar\": false,\n            \"expr\": \"((karpenter_nodes_total_daemon_requests{resource_type=\\\"cpu\\\",arch=~\\\"$arch\\\",capacity_type=~\\\"$capacity_type\\\",instance_type=~\\\"$instance_type\\\",nodepool=~\\\"$nodepool\\\",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\\\",nodepool=~\\\"$nodepool\\\",zone=~\\\"$zone\\\"} or karpenter_nodes_allocatable*0)) / \\nkarpenter_nodes_allocatable{resource_type=\\\"cpu\\\",arch=~\\\"$arch\\\",capacity_type=~\\\"$capacity_type\\\",instance_type=~\\\"$instance_type\\\",nodepool=~\\\"$nodepool\\\",zone=~\\\"$zone\\\"}\",\n            \"format\": \"table\",\n            \"hide\": false,\n            \"instant\": true,\n            \"legendFormat\": \"CPU Utilization\",\n            \"range\": false,\n            \"refId\": \"CPU Utilization\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"exemplar\": false,\n            \"expr\": \"((karpenter_nodes_total_daemon_requests{resource_type=\\\"memory\\\",arch=~\\\"$arch\\\",capacity_type=~\\\"$capacity_type\\\",instance_type=~\\\"$instance_type\\\",nodepool=~\\\"$nodepool\\\",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\\\",nodepool=~\\\"$nodepool\\\",zone=~\\\"$zone\\\"} or karpenter_nodes_allocatable*0)) / \\nkarpenter_nodes_allocatable{resource_type=\\\"memory\\\",arch=~\\\"$arch\\\",capacity_type=~\\\"$capacity_type\\\",instance_type=~\\\"$instance_type\\\",nodepool=~\\\"$nodepool\\\",zone=~\\\"$zone\\\"}\",\n            \"format\": \"table\",\n            \"hide\": false,\n            \"instant\": true,\n            \"legendFormat\": \"Memory Utilization\",\n            \"range\": false,\n            \"refId\": \"Memory Utilization\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"exemplar\": false,\n            \"expr\": \"karpenter_nodes_total_daemon_requests{resource_type=\\\"pods\\\",arch=~\\\"$arch\\\",capacity_type=~\\\"$capacity_type\\\",instance_type=~\\\"$instance_type\\\",nodepool=~\\\"$nodepool\\\",zone=~\\\"$zone\\\"} + \\nkarpenter_nodes_total_pod_requests{resource_type=\\\"pods\\\",arch=~\\\"$arch\\\",capacity_type=~\\\"$capacity_type\\\",instance_type=~\\\"$instance_type\\\",nodepool=~\\\"$nodepool\\\",zone=~\\\"$zone\\\"}\",\n            \"format\": \"table\",\n            \"hide\": false,\n            \"instant\": true,\n            \"legendFormat\": \"Memory Utilization\",\n            \"range\": false,\n            \"refId\": \"Pod Count\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"exemplar\": false,\n            \"expr\": \"label_replace(\\n    sum by (node)(node_time_seconds) - sum by (node)(node_boot_time_seconds),\\n    \\\"node_name\\\", \\\"$1\\\", \\\"node\\\", \\\"(.+)\\\"\\n)\",\n            \"format\": \"table\",\n            \"hide\": false,\n            \"instant\": true,\n            \"legendFormat\": \"Uptime\",\n            \"range\": false,\n            \"refId\": \"Uptime\"\n          }\n        ],\n        \"title\": \"Node Summary\",\n        \"transformations\": [\n          {\n            \"id\": \"seriesToColumns\",\n            \"options\": {\n              \"byField\": \"node_name\"\n            }\n          },\n          {\n            \"id\": \"organize\",\n            \"options\": {\n              \"excludeByName\": {\n                \"Time\": true,\n                \"Time 1\": true,\n                \"Time 2\": true,\n                \"Time 3\": true,\n                \"Time 4\": true,\n                \"Value\": false,\n                \"Value #Pod Count\": false,\n                \"__name__\": true,\n                \"arch\": true,\n                \"arch 1\": true,\n                \"arch 2\": true,\n                \"arch 3\": true,\n                \"capacity_type 2\": true,\n                \"capacity_type 3\": true,\n                \"instance\": true,\n                \"instance 1\": true,\n                \"instance 2\": true,\n                \"instance 3\": true,\n                \"instance_category 1\": true,\n                \"instance_category 2\": true,\n                \"instance_category 3\": true,\n                \"instance_cpu\": true,\n                \"instance_cpu 1\": true,\n                \"instance_cpu 2\": true,\n                \"instance_cpu 3\": true,\n                \"instance_family\": true,\n                \"instance_family 1\": true,\n                \"instance_family 2\": true,\n                \"instance_family 3\": true,\n                \"instance_generation 1\": true,\n                \"instance_generation 2\": true,\n                \"instance_generation 3\": true,\n                \"instance_gpu_count\": true,\n                \"instance_gpu_count 1\": true,\n                \"instance_gpu_count 2\": true,\n                \"instance_gpu_count 3\": true,\n                \"instance_gpu_manufacturer\": true,\n                \"instance_gpu_manufacturer 1\": true,\n                \"instance_gpu_manufacturer 2\": true,\n                \"instance_gpu_manufacturer 3\": true,\n                \"instance_gpu_memory\": true,\n                \"instance_gpu_memory 1\": true,\n                \"instance_gpu_memory 2\": true,\n                \"instance_gpu_memory 3\": true,\n                \"instance_gpu_name\": true,\n                \"instance_gpu_name 1\": true,\n                \"instance_gpu_name 2\": true,\n                \"instance_gpu_name 3\": true,\n                \"instance_hypervisor\": true,\n                \"instance_hypervisor 1\": true,\n                \"instance_hypervisor 2\": true,\n                \"instance_hypervisor 3\": true,\n                \"instance_local_nvme 1\": true,\n                \"instance_local_nvme 2\": true,\n                \"instance_local_nvme 3\": true,\n                \"instance_memory\": true,\n                \"instance_memory 1\": true,\n                \"instance_memory 2\": true,\n                \"instance_memory 3\": true,\n                \"instance_pods\": true,\n                \"instance_pods 1\": true,\n                \"instance_pods 2\": true,\n                \"instance_pods 3\": true,\n                \"instance_size\": true,\n                \"instance_size 1\": true,\n                \"instance_size 2\": true,\n                \"instance_size 3\": true,\n                \"instance_type 1\": false,\n                \"instance_type 2\": true,\n                \"instance_type 3\": true,\n                \"job\": true,\n                \"job 1\": true,\n                \"job 2\": true,\n                \"job 3\": true,\n                \"node\": true,\n                \"nodepool 1\": false,\n                \"nodepool 2\": true,\n                \"nodepool 3\": true,\n                \"os\": true,\n                \"os 1\": true,\n                \"os 2\": true,\n                \"os 3\": true,\n                \"resource_type\": true,\n                \"resource_type 1\": true,\n                \"resource_type 2\": true,\n                \"resource_type 3\": true,\n                \"zone 1\": false,\n                \"zone 2\": true,\n                \"zone 3\": true\n              },\n              \"indexByName\": {\n                \"Time 1\": 1,\n                \"Time 2\": 25,\n                \"Time 3\": 45,\n                \"Time 4\": 65,\n                \"Value #CPU Utilization\": 10,\n                \"Value #Memory Utilization\": 11,\n                \"Value #Pod Count\": 9,\n                \"Value #Uptime\": 8,\n                \"arch 1\": 5,\n                \"arch 2\": 26,\n                \"arch 3\": 46,\n                \"capacity_type 1\": 6,\n                \"capacity_type 2\": 27,\n                \"capacity_type 3\": 47,\n                \"instance 1\": 4,\n                \"instance 2\": 28,\n                \"instance 3\": 48,\n                \"instance_cpu 1\": 12,\n                \"instance_cpu 2\": 29,\n                \"instance_cpu 3\": 49,\n                \"instance_family 1\": 13,\n                \"instance_family 2\": 30,\n                \"instance_family 3\": 50,\n                \"instance_gpu_count 1\": 14,\n                \"instance_gpu_count 2\": 31,\n                \"instance_gpu_count 3\": 51,\n                \"instance_gpu_manufacturer 1\": 15,\n                \"instance_gpu_manufacturer 2\": 32,\n                \"instance_gpu_manufacturer 3\": 52,\n                \"instance_gpu_memory 1\": 16,\n                \"instance_gpu_memory 2\": 33,\n                \"instance_gpu_memory 3\": 53,\n                \"instance_gpu_name 1\": 17,\n                \"instance_gpu_name 2\": 34,\n                \"instance_gpu_name 3\": 54,\n                \"instance_hypervisor 1\": 18,\n                \"instance_hypervisor 2\": 35,\n                \"instance_hypervisor 3\": 55,\n                \"instance_memory 1\": 19,\n                \"instance_memory 2\": 36,\n                \"instance_memory 3\": 56,\n                \"instance_pods 1\": 20,\n                \"instance_pods 2\": 37,\n                \"instance_pods 3\": 57,\n                \"instance_size 1\": 21,\n                \"instance_size 2\": 38,\n                \"instance_size 3\": 58,\n                \"instance_type 1\": 3,\n                \"instance_type 2\": 39,\n                \"instance_type 3\": 59,\n                \"job 1\": 22,\n                \"job 2\": 40,\n                \"job 3\": 60,\n                \"node\": 66,\n                \"node_name\": 0,\n                \"nodepool 1\": 2,\n                \"nodepool 2\": 42,\n                \"nodepool 3\": 62,\n                \"os 1\": 23,\n                \"os 2\": 41,\n                \"os 3\": 61,\n                \"resource_type 1\": 24,\n                \"resource_type 2\": 43,\n                \"resource_type 3\": 63,\n                \"zone 1\": 7,\n                \"zone 2\": 44,\n                \"zone 3\": 64\n              },\n              \"renameByName\": {\n                \"Time\": \"\",\n                \"Time 1\": \"\",\n                \"Value\": \"CPU Utilization\",\n                \"Value #Allocatable\": \"\",\n                \"Value #CPU Utilization\": \"CPU Utilization\",\n                \"Value #Memory Utilization\": \"Memory Utilization\",\n                \"Value #Pod CPU\": \"\",\n                \"Value #Pod Count\": \"Pods\",\n                \"Value #Uptime\": \"Uptime\",\n                \"arch\": \"Architecture\",\n                \"arch 1\": \"Arch\",\n                \"capacity_type\": \"Capacity Type\",\n                \"capacity_type 1\": \"Capacity Type\",\n                \"instance 1\": \"Instance\",\n                \"instance_cpu 1\": \"vCPU\",\n                \"instance_type\": \"Instance Type\",\n                \"instance_type 1\": \"Instance Type\",\n                \"node_name\": \"Node Name\",\n                \"nodepool 1\": \"Nodepool\",\n                \"zone 1\": \"Zone\"\n              }\n            }\n          }\n        ],\n        \"type\": \"table\"\n      }\n    ],\n    \"refresh\": \"10s\",\n    \"schemaVersion\": 39,\n    \"tags\": [],\n    \"templating\": {\n      \"list\": [\n        {\n          \"current\": {\n            \"selected\": false,\n            \"text\": \"Prometheus\",\n            \"value\": \"prometheus\"\n          },\n          \"hide\": 0,\n          \"includeAll\": false,\n          \"label\": \"Data Source\",\n          \"multi\": false,\n          \"name\": \"datasource\",\n          \"options\": [],\n          \"query\": \"prometheus\",\n          \"refresh\": 1,\n          \"regex\": \"\",\n          \"skipUrlSync\": false,\n          \"type\": \"datasource\"\n        },\n        {\n          \"current\": {\n            \"selected\": true,\n            \"text\": [\n              \"All\"\n            ],\n            \"value\": [\n              \"$__all\"\n            ]\n          },\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"definition\": \"label_values(karpenter_nodes_allocatable, nodepool)\",\n          \"hide\": 0,\n          \"includeAll\": true,\n          \"multi\": true,\n          \"name\": \"nodepool\",\n          \"options\": [],\n          \"query\": {\n            \"query\": \"label_values(karpenter_nodes_allocatable, nodepool)\",\n            \"refId\": \"StandardVariableQuery\"\n          },\n          \"refresh\": 2,\n          \"regex\": \"\",\n          \"skipUrlSync\": false,\n          \"sort\": 1,\n          \"type\": \"query\"\n        },\n        {\n          \"current\": {\n            \"selected\": true,\n            \"text\": [\n              \"All\"\n            ],\n            \"value\": [\n              \"$__all\"\n            ]\n          },\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"definition\": \"label_values(karpenter_nodes_allocatable, zone)\",\n          \"hide\": 0,\n          \"includeAll\": true,\n          \"multi\": true,\n          \"name\": \"zone\",\n          \"options\": [],\n          \"query\": {\n            \"query\": \"label_values(karpenter_nodes_allocatable, zone)\",\n            \"refId\": \"StandardVariableQuery\"\n          },\n          \"refresh\": 2,\n          \"regex\": \"\",\n          \"skipUrlSync\": false,\n          \"sort\": 1,\n          \"type\": \"query\"\n        },\n        {\n          \"current\": {\n            \"selected\": true,\n            \"text\": [\n              \"All\"\n            ],\n            \"value\": [\n              \"$__all\"\n            ]\n          },\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"definition\": \"label_values(karpenter_nodes_allocatable, arch)\",\n          \"hide\": 0,\n          \"includeAll\": true,\n          \"multi\": true,\n          \"name\": \"arch\",\n          \"options\": [],\n          \"query\": {\n            \"query\": \"label_values(karpenter_nodes_allocatable, arch)\",\n            \"refId\": \"StandardVariableQuery\"\n          },\n          \"refresh\": 2,\n          \"regex\": \"\",\n          \"skipUrlSync\": false,\n          \"sort\": 1,\n          \"type\": \"query\"\n        },\n        {\n          \"current\": {\n            \"selected\": true,\n            \"text\": [\n              \"All\"\n            ],\n            \"value\": [\n              \"$__all\"\n            ]\n          },\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"definition\": \"label_values(karpenter_nodes_allocatable, capacity_type)\",\n          \"hide\": 0,\n          \"includeAll\": true,\n          \"multi\": true,\n          \"name\": \"capacity_type\",\n          \"options\": [],\n          \"query\": {\n            \"query\": \"label_values(karpenter_nodes_allocatable, capacity_type)\",\n            \"refId\": \"StandardVariableQuery\"\n          },\n          \"refresh\": 2,\n          \"regex\": \"\",\n          \"skipUrlSync\": false,\n          \"sort\": 1,\n          \"type\": \"query\"\n        },\n        {\n          \"current\": {\n            \"selected\": true,\n            \"text\": [\n              \"All\"\n            ],\n            \"value\": [\n              \"$__all\"\n            ]\n          },\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"definition\": \"label_values(karpenter_nodes_allocatable, instance_type)\",\n          \"hide\": 0,\n          \"includeAll\": true,\n          \"multi\": true,\n          \"name\": \"instance_type\",\n          \"options\": [],\n          \"query\": {\n            \"query\": \"label_values(karpenter_nodes_allocatable, instance_type)\",\n            \"refId\": \"StandardVariableQuery\"\n          },\n          \"refresh\": 2,\n          \"regex\": \"\",\n          \"skipUrlSync\": false,\n          \"sort\": 1,\n          \"type\": \"query\"\n        },\n        {\n          \"current\": {\n            \"selected\": true,\n            \"text\": \"nodepool\",\n            \"value\": \"nodepool\"\n          },\n          \"hide\": 0,\n          \"includeAll\": false,\n          \"multi\": false,\n          \"name\": \"distribution_filter\",\n          \"options\": [\n            {\n              \"selected\": false,\n              \"text\": \"arch\",\n              \"value\": \"arch\"\n            },\n            {\n              \"selected\": false,\n              \"text\": \"capacity_type\",\n              \"value\": \"capacity_type\"\n            },\n            {\n              \"selected\": false,\n              \"text\": \"instance_type\",\n              \"value\": \"instance_type\"\n            },\n            {\n              \"selected\": false,\n              \"text\": \"namespace\",\n              \"value\": \"namespace\"\n            },\n            {\n              \"selected\": false,\n              \"text\": \"node\",\n              \"value\": \"node\"\n            },\n            {\n              \"selected\": true,\n              \"text\": \"nodepool\",\n              \"value\": \"nodepool\"\n            },\n            {\n              \"selected\": false,\n              \"text\": \"zone\",\n              \"value\": \"zone\"\n            }\n          ],\n          \"query\": \"arch,capacity_type,instance_type,namespace,node,nodepool,zone\",\n          \"queryValue\": \"\",\n          \"skipUrlSync\": false,\n          \"type\": \"custom\"\n        }\n      ]\n    },\n    \"time\": {\n      \"from\": \"now-3h\",\n      \"to\": \"now\"\n    },\n    \"timepicker\": {},\n    \"timezone\": \"\",\n    \"title\": \"Karpenter Capacity v1\",\n    \"uid\": \"ta8I9Q67Z\",\n    \"version\": 7,\n    \"weekStart\": \"\"\n  }\n"
  },
  {
    "path": "website/content/en/docs/getting-started/getting-started-with-karpenter/karpenter-controllers-allocation.json",
    "content": "{\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": {\n          \"type\": \"datasource\",\n          \"uid\": \"grafana\"\n        },\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"target\": {\n          \"limit\": 100,\n          \"matchAny\": false,\n          \"tags\": [],\n          \"type\": \"dashboard\"\n        },\n        \"type\": \"dashboard\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"gnetId\": null,\n  \"graphTooltip\": 0,\n  \"id\": null,\n  \"iteration\": 1636732403925,\n  \"links\": [],\n  \"panels\": [\n    {\n      \"datasource\": null,\n      \"gridPos\": {\n        \"h\": 4,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"id\": 5,\n      \"options\": {\n        \"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).\",\n        \"mode\": \"markdown\"\n      },\n      \"pluginVersion\": \"8.1.6\",\n      \"targets\": [\n        {\n          \"datasource\": {},\n          \"queryType\": \"randomWalk\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"timeFrom\": null,\n      \"timeShift\": null,\n      \"title\": \"About this dashboard\",\n      \"type\": \"text\"\n    },\n    {\n      \"cards\": {\n        \"cardPadding\": null,\n        \"cardRound\": null\n      },\n      \"color\": {\n        \"cardColor\": \"#b4ff00\",\n        \"colorScale\": \"sqrt\",\n        \"colorScheme\": \"interpolateMagma\",\n        \"exponent\": 0.5,\n        \"min\": null,\n        \"mode\": \"spectrum\"\n      },\n      \"dataFormat\": \"tsbuckets\",\n      \"datasource\": {\n        \"uid\": \"${datasource}\"\n      },\n      \"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.\",\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 4\n      },\n      \"heatmap\": {},\n      \"hideZeroBuckets\": false,\n      \"highlightCards\": true,\n      \"id\": 2,\n      \"legend\": {\n        \"show\": true\n      },\n      \"maxDataPoints\": 25,\n      \"pluginVersion\": \"7.5.0\",\n      \"reverseYBuckets\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"uid\": \"${datasource}\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"sum(increase(karpenter_allocation_controller_bind_duration_seconds_bucket[$__interval])) by (le)\",\n          \"format\": \"heatmap\",\n          \"instant\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{le}}\",\n          \"queryType\": \"randomWalk\",\n          \"refId\": \"All Binds\"\n        }\n      ],\n      \"title\": \"Bind duration\",\n      \"tooltip\": {\n        \"show\": true,\n        \"showHistogram\": false\n      },\n      \"type\": \"heatmap\",\n      \"xAxis\": {\n        \"show\": true\n      },\n      \"xBucketNumber\": null,\n      \"xBucketSize\": null,\n      \"yAxis\": {\n        \"decimals\": 0,\n        \"format\": \"s\",\n        \"logBase\": 1,\n        \"max\": null,\n        \"min\": \"0\",\n        \"show\": true,\n        \"splitFactor\": null\n      },\n      \"yBucketBound\": \"auto\",\n      \"yBucketNumber\": null,\n      \"yBucketSize\": null\n    },\n    {\n      \"cards\": {\n        \"cardPadding\": null,\n        \"cardRound\": null\n      },\n      \"color\": {\n        \"cardColor\": \"#b4ff00\",\n        \"colorScale\": \"sqrt\",\n        \"colorScheme\": \"interpolateMagma\",\n        \"exponent\": 0.5,\n        \"mode\": \"spectrum\"\n      },\n      \"dataFormat\": \"tsbuckets\",\n      \"datasource\": {\n        \"uid\": \"${datasource}\"\n      },\n      \"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.\",\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 12\n      },\n      \"heatmap\": {},\n      \"hideZeroBuckets\": false,\n      \"highlightCards\": true,\n      \"id\": 7,\n      \"legend\": {\n        \"show\": true\n      },\n      \"maxDataPoints\": 25,\n      \"pluginVersion\": \"7.5.0\",\n      \"reverseYBuckets\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"uid\": \"${datasource}\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"sum(increase(karpenter_allocation_controller_binpacking_duration_seconds_bucket[$__interval])) by (le)\",\n          \"format\": \"heatmap\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{le}}\",\n          \"queryType\": \"randomWalk\",\n          \"refId\": \"Binpacking Duration\"\n        }\n      ],\n      \"title\": \"Binpack duration\",\n      \"tooltip\": {\n        \"show\": true,\n        \"showHistogram\": false\n      },\n      \"type\": \"heatmap\",\n      \"xAxis\": {\n        \"show\": true\n      },\n      \"xBucketNumber\": null,\n      \"xBucketSize\": null,\n      \"yAxis\": {\n        \"decimals\": 0,\n        \"format\": \"s\",\n        \"logBase\": 1,\n        \"max\": null,\n        \"min\": \"0\",\n        \"show\": true,\n        \"splitFactor\": null\n      },\n      \"yBucketBound\": \"auto\",\n      \"yBucketNumber\": null,\n      \"yBucketSize\": null\n    },\n    {\n      \"cards\": {\n        \"cardPadding\": null,\n        \"cardRound\": null\n      },\n      \"color\": {\n        \"cardColor\": \"#b4ff00\",\n        \"colorScale\": \"sqrt\",\n        \"colorScheme\": \"interpolateInferno\",\n        \"exponent\": 0.5,\n        \"mode\": \"spectrum\"\n      },\n      \"dataFormat\": \"tsbuckets\",\n      \"datasource\": {\n        \"uid\": \"${datasource}\"\n      },\n      \"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.\",\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 20\n      },\n      \"heatmap\": {},\n      \"hideZeroBuckets\": false,\n      \"highlightCards\": true,\n      \"id\": 9,\n      \"legend\": {\n        \"show\": true\n      },\n      \"maxDataPoints\": 25,\n      \"pluginVersion\": \"7.5.0\",\n      \"reverseYBuckets\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"uid\": \"${datasource}\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"sum(increase(karpenter_allocation_controller_scheduling_duration_seconds_bucket{provisioner=\\\"$provisioner\\\"}[$__interval])) by (le)\",\n          \"format\": \"heatmap\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{le}}\",\n          \"queryType\": \"randomWalk\",\n          \"refId\": \"Scheduling Duration\"\n        }\n      ],\n      \"title\": \"Scheduling duration\",\n      \"tooltip\": {\n        \"show\": true,\n        \"showHistogram\": false\n      },\n      \"type\": \"heatmap\",\n      \"xAxis\": {\n        \"show\": true\n      },\n      \"xBucketNumber\": null,\n      \"xBucketSize\": null,\n      \"yAxis\": {\n        \"decimals\": 0,\n        \"format\": \"s\",\n        \"logBase\": 1,\n        \"max\": null,\n        \"min\": null,\n        \"show\": true,\n        \"splitFactor\": null\n      },\n      \"yBucketBound\": \"auto\",\n      \"yBucketNumber\": null,\n      \"yBucketSize\": null\n    }\n  ],\n  \"refresh\": \"1m\",\n  \"schemaVersion\": 30,\n  \"style\": \"dark\",\n  \"tags\": [],\n  \"templating\": {\n    \"list\": [\n      {\n        \"current\": {\n          \"selected\": false,\n          \"text\": \"Prometheus\",\n          \"value\": \"Prometheus\"\n        },\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Data Source\",\n        \"multi\": false,\n        \"name\": \"datasource\",\n        \"options\": [],\n        \"query\": \"prometheus\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"type\": \"datasource\"\n      },\n      {\n        \"allValue\": null,\n        \"current\": {},\n        \"datasource\": {\n          \"uid\": \"${datasource}\"\n        },\n        \"definition\": \"label_values(karpenter_allocation_controller_scheduling_duration_seconds_bucket, provisioner)\",\n        \"description\": \"Karpenter provisioner\",\n        \"error\": null,\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Provisioner\",\n        \"multi\": false,\n        \"name\": \"provisioner\",\n        \"options\": [],\n        \"query\": {\n          \"query\": \"label_values(karpenter_allocation_controller_scheduling_duration_seconds_bucket, provisioner)\",\n          \"refId\": \"StandardVariableQuery\"\n        },\n        \"refresh\": 2,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"sort\": 1,\n        \"type\": \"query\"\n      }\n    ]\n  },\n  \"time\": {\n    \"from\": \"now-3h\",\n    \"to\": \"now\"\n  },\n  \"timepicker\": {},\n  \"timezone\": \"\",\n  \"title\": \"Controllers / Allocation\",\n  \"uid\": \"fs47R-Dnz\",\n  \"version\": 9\n}\n"
  },
  {
    "path": "website/content/en/docs/getting-started/getting-started-with-karpenter/karpenter-controllers.json",
    "content": "{\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": {\n          \"type\": \"datasource\",\n          \"uid\": \"grafana\"\n        },\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"target\": {\n          \"limit\": 100,\n          \"matchAny\": false,\n          \"tags\": [],\n          \"type\": \"dashboard\"\n        },\n        \"type\": \"dashboard\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"gnetId\": null,\n  \"graphTooltip\": 0,\n  \"id\": null,\n  \"iteration\": 1636733515850,\n  \"links\": [],\n  \"panels\": [\n    {\n      \"datasource\": null,\n      \"description\": \"\",\n      \"gridPos\": {\n        \"h\": 4,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"id\": 99,\n      \"options\": {\n        \"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).\",\n        \"mode\": \"markdown\"\n      },\n      \"pluginVersion\": \"8.1.6\",\n      \"title\": \"About this dashboard\",\n      \"type\": \"text\"\n    },\n    {\n      \"aliasColors\": {\n        \"items\": \"light-blue\"\n      },\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": {\n        \"uid\": \"${datasource}\"\n      },\n      \"description\": \"\",\n      \"fill\": 1,\n      \"fillGradient\": 2,\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 8,\n        \"x\": 0,\n        \"y\": 4\n      },\n      \"hiddenSeries\": false,\n      \"id\": 14,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": true,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"options\": {\n        \"alertThreshold\": true\n      },\n      \"percentage\": false,\n      \"pluginVersion\": \"8.1.6\",\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"uid\": \"${datasource}\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"workqueue_depth{name=\\\"$controller\\\"}\",\n          \"interval\": \"\",\n          \"legendFormat\": \"items\",\n          \"queryType\": \"randomWalk\",\n          \"refId\": \"Work Queue Depth\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeFrom\": null,\n      \"timeRegions\": [],\n      \"timeShift\": null,\n      \"title\": \"Items in Work Queue\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"graph\",\n      \"xaxis\": {\n        \"buckets\": null,\n        \"mode\": \"time\",\n        \"name\": null,\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"decimals\": 0,\n          \"format\": \"short\",\n          \"label\": \"\",\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"label\": null,\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": null,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false,\n        \"alignLevel\": null\n      }\n    },\n    {\n      \"aliasColors\": {\n        \"error\": \"red\",\n        \"requeue\": \"orange\",\n        \"requeue_after\": \"semi-dark-purple\",\n        \"success\": \"green\"\n      },\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": {\n        \"uid\": \"${datasource}\"\n      },\n      \"description\": \"The rate of completed reconciliations per minute broken out by result status.\",\n      \"fill\": 1,\n      \"fillGradient\": 1,\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 8,\n        \"x\": 8,\n        \"y\": 4\n      },\n      \"hiddenSeries\": false,\n      \"id\": 76,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": true,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"options\": {\n        \"alertThreshold\": true\n      },\n      \"percentage\": false,\n      \"pluginVersion\": \"8.1.6\",\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"uid\": \"${datasource}\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"rate(controller_runtime_reconcile_total{controller=\\\"$controller\\\"}[$trailing]) * 60\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{result}}\",\n          \"queryType\": \"randomWalk\",\n          \"refId\": \"Reconciliations per minute\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeFrom\": null,\n      \"timeRegions\": [],\n      \"timeShift\": null,\n      \"title\": \"Reconciliations per minute\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"graph\",\n      \"xaxis\": {\n        \"buckets\": null,\n        \"mode\": \"time\",\n        \"name\": null,\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"$$hashKey\": \"object:566\",\n          \"format\": \"short\",\n          \"label\": null,\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": true\n        },\n        {\n          \"$$hashKey\": \"object:567\",\n          \"format\": \"short\",\n          \"label\": null,\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": null,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false,\n        \"alignLevel\": null\n      }\n    },\n    {\n      \"cards\": {\n        \"cardPadding\": null,\n        \"cardRound\": null\n      },\n      \"color\": {\n        \"cardColor\": \"#b4ff00\",\n        \"colorScale\": \"sqrt\",\n        \"colorScheme\": \"interpolateMagma\",\n        \"exponent\": 0.5,\n        \"mode\": \"spectrum\"\n      },\n      \"dataFormat\": \"tsbuckets\",\n      \"datasource\": {\n        \"uid\": \"${datasource}\"\n      },\n      \"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.\",\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 8,\n        \"x\": 16,\n        \"y\": 4\n      },\n      \"heatmap\": {},\n      \"hideZeroBuckets\": false,\n      \"highlightCards\": true,\n      \"id\": 126,\n      \"legend\": {\n        \"show\": true\n      },\n      \"maxDataPoints\": 25,\n      \"pluginVersion\": \"8.1.6\",\n      \"reverseYBuckets\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"uid\": \"${datasource}\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"sum(increase(controller_runtime_reconcile_time_seconds_bucket{controller=\\\"$controller\\\"}[$__interval])) by (le)\",\n          \"format\": \"heatmap\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{le}}\",\n          \"queryType\": \"randomWalk\",\n          \"refId\": \"p100\"\n        }\n      ],\n      \"timeFrom\": null,\n      \"timeShift\": null,\n      \"title\": \"Reconciliation duration\",\n      \"tooltip\": {\n        \"show\": true,\n        \"showHistogram\": false\n      },\n      \"type\": \"heatmap\",\n      \"xAxis\": {\n        \"show\": true\n      },\n      \"xBucketNumber\": null,\n      \"xBucketSize\": null,\n      \"yAxis\": {\n        \"decimals\": 0,\n        \"format\": \"s\",\n        \"logBase\": 1,\n        \"max\": null,\n        \"min\": \"0\",\n        \"show\": true,\n        \"splitFactor\": null\n      },\n      \"yBucketBound\": \"auto\",\n      \"yBucketNumber\": null,\n      \"yBucketSize\": null\n    }\n  ],\n  \"refresh\": \"1m\",\n  \"schemaVersion\": 31,\n  \"style\": \"dark\",\n  \"tags\": [],\n  \"templating\": {\n    \"list\": [\n      {\n        \"current\": {},\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Data Source\",\n        \"multi\": false,\n        \"name\": \"datasource\",\n        \"options\": [],\n        \"query\": \"prometheus\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"type\": \"datasource\"\n      },\n      {\n        \"allValue\": \"\",\n        \"current\": {},\n        \"datasource\": {\n          \"uid\": \"${datasource}\"\n        },\n        \"definition\": \"label_values(controller_runtime_reconcile_errors_total, controller)\",\n        \"description\": \"Kubernetes controller\",\n        \"error\": null,\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Controller\",\n        \"multi\": false,\n        \"name\": \"controller\",\n        \"options\": [],\n        \"query\": {\n          \"query\": \"label_values(controller_runtime_reconcile_errors_total, controller)\",\n          \"refId\": \"StandardVariableQuery\"\n        },\n        \"refresh\": 2,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"selected\": true,\n          \"text\": \"10m\",\n          \"value\": \"10m\"\n        },\n        \"description\": \"Trailing aggregation window\",\n        \"error\": null,\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Trailing\",\n        \"multi\": false,\n        \"name\": \"trailing\",\n        \"options\": [\n          {\n            \"selected\": false,\n            \"text\": \"30s\",\n            \"value\": \"30s\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"1m\",\n            \"value\": \"1m\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"5m\",\n            \"value\": \"5m\"\n          },\n          {\n            \"selected\": true,\n            \"text\": \"10m\",\n            \"value\": \"10m\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"30m\",\n            \"value\": \"30m\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"1h\",\n            \"value\": \"1h\"\n          }\n        ],\n        \"query\": \"30s,1m,5m,10m,30m,1h\",\n        \"queryValue\": \"\",\n        \"skipUrlSync\": false,\n        \"type\": \"custom\"\n      }\n    ]\n  },\n  \"time\": {\n    \"from\": \"now-1h\",\n    \"to\": \"now\"\n  },\n  \"timepicker\": {},\n  \"timezone\": \"\",\n  \"title\": \"Controllers\",\n  \"uid\": \"-Yw9ShDnz\",\n  \"version\": 15\n}\n"
  },
  {
    "path": "website/content/en/docs/getting-started/getting-started-with-karpenter/karpenter-performance-dashboard.json",
    "content": "{\n    \"annotations\": {\n      \"list\": [\n        {\n          \"builtIn\": 1,\n          \"datasource\": \"-- Grafana --\",\n          \"enable\": true,\n          \"hide\": true,\n          \"iconColor\": \"rgba(0, 211, 255, 1)\",\n          \"name\": \"Annotations & Alerts\",\n          \"target\": {\n            \"limit\": 100,\n            \"matchAny\": false,\n            \"tags\": [],\n            \"type\": \"dashboard\"\n          },\n          \"type\": \"dashboard\"\n        }\n      ]\n    },\n    \"editable\": true,\n    \"fiscalYearStartMonth\": 0,\n    \"graphTooltip\": 0,\n    \"id\": 33,\n    \"links\": [],\n    \"liveNow\": true,\n    \"panels\": [\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisBorderShow\": false,\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"\",\n              \"axisPlacement\": \"auto\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 0,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"insertNulls\": false,\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"never\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"none\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            },\n            \"unit\": \"s\"\n          },\n          \"overrides\": []\n        },\n        \"gridPos\": {\n          \"h\": 9,\n          \"w\": 24,\n          \"x\": 0,\n          \"y\": 0\n        },\n        \"id\": 4,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [\n              \"max\"\n            ],\n            \"displayMode\": \"table\",\n            \"placement\": \"right\",\n            \"showLegend\": true\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"max(karpenter_nodes_termination_duration_seconds{quantile=\\\"0\\\"})\",\n            \"legendFormat\": \"Min\",\n            \"range\": true,\n            \"refId\": \"A\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"max(karpenter_nodes_termination_duration_seconds{quantile=\\\"0.5\\\"})\",\n            \"hide\": false,\n            \"legendFormat\": \"P50\",\n            \"range\": true,\n            \"refId\": \"B\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"max(karpenter_nodes_termination_duration_seconds{quantile=\\\"0.9\\\"})\",\n            \"hide\": false,\n            \"legendFormat\": \"P90\",\n            \"range\": true,\n            \"refId\": \"C\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"max(karpenter_nodes_termination_duration_seconds{quantile=\\\"0.99\\\"})\",\n            \"hide\": false,\n            \"legendFormat\": \"P99\",\n            \"range\": true,\n            \"refId\": \"D\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"max(karpenter_nodes_termination_duration_seconds{quantile=\\\"1\\\"})\",\n            \"hide\": false,\n            \"legendFormat\": \"Max\",\n            \"range\": true,\n            \"refId\": \"E\"\n          }\n        ],\n        \"title\": \"Node Termination Latency\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisBorderShow\": false,\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"\",\n              \"axisPlacement\": \"auto\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 10,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"insertNulls\": false,\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"never\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"none\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"min\": 0,\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            },\n            \"unit\": \"s\"\n          },\n          \"overrides\": []\n        },\n        \"gridPos\": {\n          \"h\": 8,\n          \"w\": 24,\n          \"x\": 0,\n          \"y\": 9\n        },\n        \"id\": 2,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [\n              \"max\"\n            ],\n            \"displayMode\": \"table\",\n            \"placement\": \"right\",\n            \"showLegend\": true\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"max(karpenter_pods_startup_duration_seconds{quantile=\\\"0\\\"})\",\n            \"format\": \"time_series\",\n            \"legendFormat\": \"Min\",\n            \"range\": true,\n            \"refId\": \"Minimum\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"max(karpenter_pods_startup_duration_seconds{quantile=\\\"0.5\\\"})\",\n            \"hide\": false,\n            \"legendFormat\": \"P50\",\n            \"range\": true,\n            \"refId\": \"Median\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"max(karpenter_pods_startup_duration_seconds{quantile=\\\"0.9\\\"})\",\n            \"hide\": false,\n            \"legendFormat\": \"P90\",\n            \"range\": true,\n            \"refId\": \"P90\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"max(karpenter_pods_startup_duration_seconds{quantile=\\\"0.99\\\"})\",\n            \"hide\": false,\n            \"legendFormat\": \"P99\",\n            \"range\": true,\n            \"refId\": \"P99\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"max(karpenter_pods_startup_duration_seconds{quantile=\\\"1\\\"})\",\n            \"hide\": false,\n            \"legendFormat\": \"Max\",\n            \"range\": true,\n            \"refId\": \"Maximum\"\n          }\n        ],\n        \"title\": \"Pod Startup Latency\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisBorderShow\": false,\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"\",\n              \"axisPlacement\": \"auto\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 10,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"insertNulls\": false,\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"never\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"none\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            },\n            \"unit\": \"s\"\n          },\n          \"overrides\": []\n        },\n        \"gridPos\": {\n          \"h\": 8,\n          \"w\": 13,\n          \"x\": 0,\n          \"y\": 17\n        },\n        \"id\": 6,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [],\n            \"displayMode\": \"list\",\n            \"placement\": \"bottom\",\n            \"showLegend\": true\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"histogram_quantile(0, rate(controller_runtime_reconcile_time_seconds_bucket{controller=\\\"$controller\\\"}[10m]))\",\n            \"hide\": false,\n            \"legendFormat\": \"Min\",\n            \"range\": true,\n            \"refId\": \"Minimum\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"histogram_quantile(0.5, rate(controller_runtime_reconcile_time_seconds_bucket{controller=\\\"$controller\\\"}[10m]))\",\n            \"legendFormat\": \"P50\",\n            \"range\": true,\n            \"refId\": \"Median\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"histogram_quantile(0.9, rate(controller_runtime_reconcile_time_seconds_bucket{controller=\\\"$controller\\\"}[10m]))\",\n            \"hide\": false,\n            \"legendFormat\": \"P90\",\n            \"range\": true,\n            \"refId\": \"P90\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"histogram_quantile(0.99, rate(controller_runtime_reconcile_time_seconds_bucket{controller=\\\"$controller\\\"}[10m]))\",\n            \"hide\": false,\n            \"legendFormat\": \"P99\",\n            \"range\": true,\n            \"refId\": \"P99\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"histogram_quantile(1, rate(controller_runtime_reconcile_time_seconds_bucket{controller=\\\"$controller\\\"}[10m]))\",\n            \"hide\": false,\n            \"legendFormat\": \"Max\",\n            \"range\": true,\n            \"refId\": \"Maximum\"\n          }\n        ],\n        \"title\": \"Controller Reconciliation Latency [$controller]\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"thresholds\"\n            },\n            \"mappings\": [],\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            },\n            \"unit\": \"reqps\"\n          },\n          \"overrides\": []\n        },\n        \"gridPos\": {\n          \"h\": 8,\n          \"w\": 11,\n          \"x\": 13,\n          \"y\": 17\n        },\n        \"id\": 8,\n        \"options\": {\n          \"displayMode\": \"gradient\",\n          \"maxVizHeight\": 300,\n          \"minVizHeight\": 10,\n          \"minVizWidth\": 0,\n          \"namePlacement\": \"auto\",\n          \"orientation\": \"horizontal\",\n          \"reduceOptions\": {\n            \"calcs\": [\n              \"lastNotNull\"\n            ],\n            \"fields\": \"\",\n            \"values\": false\n          },\n          \"showUnfilled\": true,\n          \"sizing\": \"auto\",\n          \"valueMode\": \"color\"\n        },\n        \"pluginVersion\": \"11.1.0\",\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"sum(rate(controller_runtime_reconcile_total{job=\\\"karpenter\\\"}[10m])) by (controller)\",\n            \"legendFormat\": \"{{controller}}\",\n            \"range\": true,\n            \"refId\": \"A\"\n          }\n        ],\n        \"title\": \"Controller Reconciliation Rate\",\n        \"type\": \"bargauge\"\n      }\n    ],\n    \"refresh\": \"5s\",\n    \"schemaVersion\": 39,\n    \"tags\": [],\n    \"templating\": {\n      \"list\": [\n        {\n          \"current\": {\n            \"selected\": false,\n            \"text\": \"Prometheus\",\n            \"value\": \"prometheus\"\n          },\n          \"hide\": 0,\n          \"includeAll\": false,\n          \"label\": \"Data Source\",\n          \"multi\": false,\n          \"name\": \"datasource\",\n          \"options\": [],\n          \"query\": \"prometheus\",\n          \"refresh\": 1,\n          \"regex\": \"\",\n          \"skipUrlSync\": false,\n          \"type\": \"datasource\"\n        },\n        {\n          \"current\": {\n            \"selected\": false,\n            \"text\": \"disruption\",\n            \"value\": \"disruption\"\n          },\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"definition\": \"label_values(controller_runtime_reconcile_time_seconds_count{job=\\\"karpenter\\\"}, controller)\",\n          \"hide\": 0,\n          \"includeAll\": false,\n          \"multi\": false,\n          \"name\": \"controller\",\n          \"options\": [],\n          \"query\": {\n            \"query\": \"label_values(controller_runtime_reconcile_time_seconds_count{job=\\\"karpenter\\\"}, controller)\",\n            \"refId\": \"StandardVariableQuery\"\n          },\n          \"refresh\": 2,\n          \"regex\": \"\",\n          \"skipUrlSync\": false,\n          \"sort\": 0,\n          \"type\": \"query\"\n        }\n      ]\n    },\n    \"time\": {\n      \"from\": \"now-3h\",\n      \"to\": \"now\"\n    },\n    \"timepicker\": {},\n    \"timezone\": \"\",\n    \"title\": \"Karpenter Performance v1\",\n    \"uid\": \"fdusq1f2alerke\",\n    \"version\": 3,\n    \"weekStart\": \"\"\n  }\n"
  },
  {
    "path": "website/content/en/docs/getting-started/getting-started-with-karpenter/prometheus-values.yaml",
    "content": "alertmanager:\n  persistentVolume:\n    enabled: false\n\nserver:\n  fullnameOverride: prometheus-server\n  persistentVolume:\n    enabled: false\n\nextraScrapeConfigs: |\n    - job_name: karpenter\n      kubernetes_sd_configs:\n      - role: endpoints\n        namespaces:\n          names:\n          - $KARPENTER_NAMESPACE\n      relabel_configs:\n      - source_labels:\n        - __meta_kubernetes_endpoints_name\n        - __meta_kubernetes_endpoint_port_name\n        action: keep\n        regex: karpenter;http-metrics\n"
  },
  {
    "path": "website/content/en/docs/getting-started/getting-started-with-karpenter/scripts/step01-config.sh",
    "content": "export AWS_PARTITION=\"aws\" # if you are not using standard partitions, you may need to configure to aws-cn / aws-us-gov\nexport CLUSTER_NAME=\"${USER}-karpenter-demo\"\nexport AWS_DEFAULT_REGION=\"us-west-2\"\nexport AWS_ACCOUNT_ID=\"$(aws sts get-caller-identity --query Account --output text)\"\nexport TEMPOUT=\"$(mktemp)\"\nexport ALIAS_VERSION=\"$(aws ssm get-parameter --name \"/aws/service/eks/optimized-ami/${K8S_VERSION}/amazon-linux-2023/x86_64/standard/recommended/image_id\" --query Parameter.Value | xargs aws ec2 describe-images --query 'Images[0].Name' --image-ids | sed -r 's/^.*(v[[:digit:]]+).*$/\\1/')\"\n"
  },
  {
    "path": "website/content/en/docs/getting-started/getting-started-with-karpenter/scripts/step02-create-cluster-fargate.sh",
    "content": "curl -fsSL https://raw.githubusercontent.com/aws/karpenter-provider-aws/v\"${KARPENTER_VERSION}\"/website/content/en/preview/getting-started/getting-started-with-karpenter/cloudformation.yaml  > $TEMPOUT \\\n&& aws cloudformation deploy \\\n  --stack-name \"Karpenter-${CLUSTER_NAME}\" \\\n  --template-file \"${TEMPOUT}\" \\\n  --capabilities CAPABILITY_NAMED_IAM \\\n  --parameter-overrides \"ClusterName=${CLUSTER_NAME}\"\n\neksctl create cluster -f - <<EOF\n---\napiVersion: eksctl.io/v1alpha5\nkind: ClusterConfig\nmetadata:\n  name: ${CLUSTER_NAME}\n  region: ${AWS_DEFAULT_REGION}\n  version: \"${K8S_VERSION}\"\n  tags:\n    karpenter.sh/discovery: ${CLUSTER_NAME}\n\niam:\n  withOIDC: true\n  serviceAccounts:\n  - metadata:\n      name: karpenter\n      namespace: \"${KARPENTER_NAMESPACE}\"\n    roleName: ${CLUSTER_NAME}-karpenter\n    attachPolicyARNs:\n    - arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:policy/KarpenterControllerNodeLifecyclePolicy-${CLUSTER_NAME}\n    - arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:policy/KarpenterControllerIAMIntegrationPolicy-${CLUSTER_NAME}\n    - arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:policy/KarpenterControllerEKSIntegrationPolicy-${CLUSTER_NAME}\n    - arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:policy/KarpenterControllerInterruptionPolicy-${CLUSTER_NAME}\n    - arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:policy/KarpenterControllerResourceDiscoveryPolicy-${CLUSTER_NAME}\n    roleOnly: true\n\niamIdentityMappings:\n- arn: \"arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/KarpenterNodeRole-${CLUSTER_NAME}\"\n  username: system:node:{{EC2PrivateDNSName}}\n  groups:\n  - system:bootstrappers\n  - system:nodes\n  ## If you intend to run Windows workloads, the kube-proxy group should be specified.\n  # For more information, see https://github.com/aws/karpenter/issues/5099.\n  # - eks:kube-proxy-windows\n\nfargateProfiles:\n- name: karpenter\n  selectors:\n  - namespace: \"${KARPENTER_NAMESPACE}\"\nEOF\n\nexport CLUSTER_ENDPOINT=\"$(aws eks describe-cluster --name ${CLUSTER_NAME} --query \"cluster.endpoint\" --output text)\"\nexport KARPENTER_IAM_ROLE_ARN=\"arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/${CLUSTER_NAME}-karpenter\"\n\necho $CLUSTER_ENDPOINT $KARPENTER_IAM_ROLE_ARN\n"
  },
  {
    "path": "website/content/en/docs/getting-started/getting-started-with-karpenter/scripts/step02-create-cluster.sh",
    "content": "curl -fsSL https://raw.githubusercontent.com/aws/karpenter-provider-aws/v\"${KARPENTER_VERSION}\"/website/content/en/preview/getting-started/getting-started-with-karpenter/cloudformation.yaml  > \"${TEMPOUT}\" \\\n&& aws cloudformation deploy \\\n  --stack-name \"Karpenter-${CLUSTER_NAME}\" \\\n  --template-file \"${TEMPOUT}\" \\\n  --capabilities CAPABILITY_NAMED_IAM \\\n  --parameter-overrides \"ClusterName=${CLUSTER_NAME}\"\n\neksctl create cluster -f - <<EOF\n---\napiVersion: eksctl.io/v1alpha5\nkind: ClusterConfig\nmetadata:\n  name: ${CLUSTER_NAME}\n  region: ${AWS_DEFAULT_REGION}\n  version: \"${K8S_VERSION}\"\n  tags:\n    karpenter.sh/discovery: ${CLUSTER_NAME}\n\niam:\n  withOIDC: true\n  podIdentityAssociations:\n  - namespace: \"${KARPENTER_NAMESPACE}\"\n    serviceAccountName: karpenter\n    roleName: ${CLUSTER_NAME}-karpenter\n    permissionPolicyARNs:\n    - arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:policy/KarpenterControllerNodeLifecyclePolicy-${CLUSTER_NAME}\n    - arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:policy/KarpenterControllerIAMIntegrationPolicy-${CLUSTER_NAME}\n    - arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:policy/KarpenterControllerEKSIntegrationPolicy-${CLUSTER_NAME}\n    - arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:policy/KarpenterControllerInterruptionPolicy-${CLUSTER_NAME}\n    - arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:policy/KarpenterControllerResourceDiscoveryPolicy-${CLUSTER_NAME}\n\niamIdentityMappings:\n- arn: \"arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/KarpenterNodeRole-${CLUSTER_NAME}\"\n  username: system:node:{{EC2PrivateDNSName}}\n  groups:\n  - system:bootstrappers\n  - system:nodes\n  ## If you intend to run Windows workloads, the kube-proxy group should be specified.\n  # For more information, see https://github.com/aws/karpenter/issues/5099.\n  # - eks:kube-proxy-windows\n\nmanagedNodeGroups:\n- instanceType: m5.large\n  amiFamily: AmazonLinux2023\n  name: ${CLUSTER_NAME}-ng\n  desiredCapacity: 2\n  minSize: 1\n  maxSize: 10\n\naddons:\n- name: eks-pod-identity-agent\nEOF\n\nexport CLUSTER_ENDPOINT=\"$(aws eks describe-cluster --name \"${CLUSTER_NAME}\" --query \"cluster.endpoint\" --output text)\"\nexport KARPENTER_IAM_ROLE_ARN=\"arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/${CLUSTER_NAME}-karpenter\"\n\necho \"${CLUSTER_ENDPOINT} ${KARPENTER_IAM_ROLE_ARN}\"\n"
  },
  {
    "path": "website/content/en/docs/getting-started/getting-started-with-karpenter/scripts/step03-iam-cloud-formation.sh",
    "content": "TEMPOUT=\"$(mktemp)\"\n\ncurl -fsSL https://raw.githubusercontent.com/aws/karpenter-provider-aws/v\"${KARPENTER_VERSION}\"/website/content/en/preview/getting-started/getting-started-with-karpenter/cloudformation.yaml  > \"${TEMPOUT}\" \\\n&& aws cloudformation deploy \\\n  --stack-name \"Karpenter-${CLUSTER_NAME}\" \\\n  --template-file \"${TEMPOUT}\" \\\n  --capabilities CAPABILITY_NAMED_IAM \\\n  --parameter-overrides \"ClusterName=${CLUSTER_NAME}\"\n"
  },
  {
    "path": "website/content/en/docs/getting-started/getting-started-with-karpenter/scripts/step04-grant-access.sh",
    "content": "eksctl create iamidentitymapping \\\n  --username system:node:{{EC2PrivateDNSName}} \\\n  --cluster \"${CLUSTER_NAME}\" \\\n  --arn \"arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/KarpenterNodeRole-${CLUSTER_NAME}\" \\\n  --group system:bootstrappers \\\n  --group system:nodes\n"
  },
  {
    "path": "website/content/en/docs/getting-started/getting-started-with-karpenter/scripts/step05-controller-iam.sh",
    "content": "eksctl create iamserviceaccount \\\n  --cluster \"${CLUSTER_NAME}\" --name karpenter --namespace \"${KARPENTER_NAMESPACE}\" \\\n  --role-name \"${CLUSTER_NAME}-karpenter\" \\\n  --attach-policy-arn \"arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:policy/KarpenterControllerPolicy-${CLUSTER_NAME}\" \\\n  --role-only \\\n  --approve\n\nexport KARPENTER_IAM_ROLE_ARN=\"arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/${CLUSTER_NAME}-karpenter\"\n"
  },
  {
    "path": "website/content/en/docs/getting-started/getting-started-with-karpenter/scripts/step06-add-spot-role.sh",
    "content": "aws iam create-service-linked-role --aws-service-name spot.amazonaws.com || true\n# If the role has already been successfully created, you will see:\n# An error occurred (InvalidInput) when calling the CreateServiceLinkedRole operation: Service role name AWSServiceRoleForEC2Spot has been taken in this account, please try a different suffix.\n"
  },
  {
    "path": "website/content/en/docs/getting-started/getting-started-with-karpenter/scripts/step08-apply-helm-chart-fargate.sh",
    "content": "# Logout of helm registry to perform an unauthenticated pull against the public ECR\nhelm registry logout public.ecr.aws\n\nhelm upgrade --install karpenter oci://public.ecr.aws/karpenter/karpenter --version \"${KARPENTER_VERSION}\" --namespace \"${KARPENTER_NAMESPACE}\" --create-namespace \\\n  --set \"settings.clusterName=${CLUSTER_NAME}\" \\\n  --set \"settings.interruptionQueue=${CLUSTER_NAME}\" \\\n  --set controller.resources.requests.cpu=1 \\\n  --set controller.resources.requests.memory=1Gi \\\n  --set controller.resources.limits.cpu=1 \\\n  --set controller.resources.limits.memory=1Gi \\\n  --set serviceAccount.annotations.\"eks\\.amazonaws\\.com/role-arn\"=\"arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/${CLUSTER_NAME}-karpenter\" \\\n  --wait\n"
  },
  {
    "path": "website/content/en/docs/getting-started/getting-started-with-karpenter/scripts/step08-apply-helm-chart.sh",
    "content": "# Logout of helm registry to perform an unauthenticated pull against the public ECR\nhelm registry logout public.ecr.aws\n\nhelm upgrade --install karpenter oci://public.ecr.aws/karpenter/karpenter --version \"${KARPENTER_VERSION}\" --namespace \"${KARPENTER_NAMESPACE}\" --create-namespace \\\n  --set \"settings.clusterName=${CLUSTER_NAME}\" \\\n  --set \"settings.interruptionQueue=${CLUSTER_NAME}\" \\\n  --set controller.resources.requests.cpu=1 \\\n  --set controller.resources.requests.memory=1Gi \\\n  --set controller.resources.limits.cpu=1 \\\n  --set controller.resources.limits.memory=1Gi \\\n  --wait\n"
  },
  {
    "path": "website/content/en/docs/getting-started/getting-started-with-karpenter/scripts/step09-add-prometheus-grafana.sh",
    "content": "helm repo add grafana-charts https://grafana.github.io/helm-charts\nhelm repo add prometheus-community https://prometheus-community.github.io/helm-charts\nhelm repo update\n\nkubectl create namespace monitoring\n\ncurl -fsSL https://raw.githubusercontent.com/aws/karpenter-provider-aws/v\"${KARPENTER_VERSION}\"/website/content/en/preview/getting-started/getting-started-with-karpenter/prometheus-values.yaml | envsubst | tee prometheus-values.yaml\nhelm install --namespace monitoring prometheus prometheus-community/prometheus --values prometheus-values.yaml\n\ncurl -fsSL https://raw.githubusercontent.com/aws/karpenter-provider-aws/v\"${KARPENTER_VERSION}\"/website/content/en/preview/getting-started/getting-started-with-karpenter/grafana-values.yaml | tee grafana-values.yaml\nhelm install --namespace monitoring grafana grafana-charts/grafana --values grafana-values.yaml\n"
  },
  {
    "path": "website/content/en/docs/getting-started/getting-started-with-karpenter/scripts/step10-add-grafana-port-forward.sh",
    "content": "kubectl port-forward --namespace monitoring svc/grafana 3000:80\n"
  },
  {
    "path": "website/content/en/docs/getting-started/getting-started-with-karpenter/scripts/step11-grafana-get-password.sh",
    "content": "kubectl get secret --namespace monitoring grafana -o jsonpath=\"{.data.admin-password}\" | base64 --decode\n"
  },
  {
    "path": "website/content/en/docs/getting-started/getting-started-with-karpenter/scripts/step12-add-nodepool.sh",
    "content": "cat <<EOF | envsubst | kubectl apply -f -\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\nspec:\n  template:\n    spec:\n      requirements:\n        - key: kubernetes.io/arch\n          operator: In\n          values: [\"amd64\"]\n        - key: kubernetes.io/os\n          operator: In\n          values: [\"linux\"]\n        - key: karpenter.sh/capacity-type\n          operator: In\n          values: [\"on-demand\"]\n        - key: karpenter.k8s.aws/instance-category\n          operator: In\n          values: [\"c\", \"m\", \"r\"]\n        - key: karpenter.k8s.aws/instance-generation\n          operator: Gt\n          values: [\"2\"]\n      nodeClassRef:\n        group: karpenter.k8s.aws\n        kind: EC2NodeClass\n        name: default\n      expireAfter: 720h # 30 * 24h = 720h\n  limits:\n    cpu: 1000\n  disruption:\n    consolidationPolicy: WhenEmptyOrUnderutilized\n    consolidateAfter: 1m\n---\napiVersion: karpenter.k8s.aws/v1\nkind: EC2NodeClass\nmetadata:\n  name: default\nspec:\n  role: \"KarpenterNodeRole-${CLUSTER_NAME}\" # replace with your cluster name\n  amiSelectorTerms:\n    - alias: \"al2023@${ALIAS_VERSION}\"\n  subnetSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\" # replace with your cluster name\n  securityGroupSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\" # replace with your cluster name\nEOF\n"
  },
  {
    "path": "website/content/en/docs/getting-started/getting-started-with-karpenter/scripts/step13-automatic-node-provisioning.sh",
    "content": "cat <<EOF | kubectl apply -f -\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: inflate\nspec:\n  replicas: 0\n  selector:\n    matchLabels:\n      app: inflate\n  template:\n    metadata:\n      labels:\n        app: inflate\n    spec:\n      terminationGracePeriodSeconds: 0\n      securityContext:\n        runAsUser: 1000\n        runAsGroup: 3000\n        fsGroup: 2000\n      containers:\n      - name: inflate\n        image: public.ecr.aws/eks-distro/kubernetes/pause:3.7\n        resources:\n          requests:\n            cpu: 1\n        securityContext:\n          allowPrivilegeEscalation: false\nEOF\n\nkubectl scale deployment inflate --replicas 5\nkubectl logs -f -n \"${KARPENTER_NAMESPACE}\" -l app.kubernetes.io/name=karpenter -c controller\n"
  },
  {
    "path": "website/content/en/docs/getting-started/getting-started-with-karpenter/scripts/step14-deprovisioning.sh",
    "content": "kubectl delete deployment inflate\nkubectl logs -f -n \"${KARPENTER_NAMESPACE}\" -l app.kubernetes.io/name=karpenter -c controller\n"
  },
  {
    "path": "website/content/en/docs/getting-started/getting-started-with-karpenter/scripts/step15-apply-flowschemas.sh",
    "content": "cat <<EOF | envsubst | kubectl apply -f -\n---\napiVersion: flowcontrol.apiserver.k8s.io/v1\nkind: FlowSchema\nmetadata:\n  name: karpenter-leader-election\nspec:\n  distinguisherMethod:\n    type: ByUser\n  matchingPrecedence: 200\n  priorityLevelConfiguration:\n    name: leader-election\n  rules:\n  - resourceRules:\n    - apiGroups:\n      - coordination.k8s.io\n      namespaces:\n      - '*'\n      resources:\n      - leases\n      verbs:\n      - get\n      - create\n      - update\n    subjects:\n    - kind: ServiceAccount\n      serviceAccount:\n        name: karpenter\n        namespace: \"${KARPENTER_NAMESPACE}\"\n\n---\napiVersion: flowcontrol.apiserver.k8s.io/v1\nkind: FlowSchema\nmetadata:\n  name: karpenter-workload\nspec:\n  distinguisherMethod:\n    type: ByUser\n  matchingPrecedence: 1000\n  priorityLevelConfiguration:\n    name: workload-high\n  rules:\n  - nonResourceRules:\n    - nonResourceURLs:\n      - '*'\n      verbs:\n      - '*'\n    resourceRules:\n    - apiGroups:\n      - '*'\n      clusterScope: true\n      namespaces:\n      - '*'\n      resources:\n      - '*'\n      verbs:\n      - '*'\n    subjects:\n    - kind: ServiceAccount\n      serviceAccount:\n        name: karpenter\n        namespace: \"${KARPENTER_NAMESPACE}\"\nEOF\n"
  },
  {
    "path": "website/content/en/docs/getting-started/getting-started-with-karpenter/scripts/step16-delete-node.sh",
    "content": "kubectl delete node \"${NODE_NAME}\"\n"
  },
  {
    "path": "website/content/en/docs/getting-started/getting-started-with-karpenter/scripts/step17-cleanup.sh",
    "content": "helm uninstall karpenter --namespace \"${KARPENTER_NAMESPACE}\"\naws cloudformation delete-stack --stack-name \"Karpenter-${CLUSTER_NAME}\"\naws ec2 describe-launch-templates --filters \"Name=tag:karpenter.k8s.aws/cluster,Values=${CLUSTER_NAME}\" |\n    jq -r \".LaunchTemplates[].LaunchTemplateName\" |\n    xargs -I{} aws ec2 delete-launch-template --launch-template-name {}\neksctl delete cluster --name \"${CLUSTER_NAME}\"\n"
  },
  {
    "path": "website/content/en/docs/getting-started/migrating-from-cas/_index.md",
    "content": "---\ntitle: \"Migrating from Cluster Autoscaler\"\nlinkTitle: \"Migrating from Cluster Autoscaler\"\nweight: 10\ndescription: >\n  Migrate to Karpenter from Cluster Autoscaler\n---\n\nThis guide will show you how to switch from the [Kubernetes Cluster Autoscaler](https://github.com/kubernetes/autoscaler) to Karpenter for automatic node provisioning.\nWe will make the following assumptions in this guide\n\n* You will use an existing EKS cluster\n* You will use existing VPC and subnets\n* You will use existing security groups\n* Your nodes are part of one or more node groups\n* Your workloads have pod disruption budgets that adhere to [EKS best practices](https://aws.github.io/aws-eks-best-practices/karpenter/)\n* Your cluster has an [OIDC provider](https://docs.aws.amazon.com/eks/latest/userguide/enable-iam-roles-for-service-accounts.html) for service accounts\n\nThis guide will also assume you have the `aws` CLI installed.\nYou can also perform many of these steps in the console, but we will use the command line for simplicity.\n\nSet a variable for your cluster name.\n\n```bash\nKARPENTER_NAMESPACE=kube-system\nCLUSTER_NAME=<your cluster name>\n```\n\nSet other variables from your cluster configuration.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step01-env.sh\" language=\"bash\" %}}\n\nUse that information to create our IAM roles, inline policy, and trust relationship.\n\n## Create IAM roles\n\nTo get started with our migration we first need to create two new IAM roles for nodes provisioned with Karpenter and the Karpenter controller.\n\nTo create the Karpenter node role we will use the following policy and commands.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step02-node-iam.sh\" language=\"bash\" %}}\n\nNow attach the required policies to the role\n\n{{% script file=\"./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step03-node-policies.sh\" language=\"bash\" %}}\n\nNow we need to create an IAM role that the Karpenter controller will use to provision new instances.\nThe 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.\n\nIf you have another option for using IAM credentials with workloads (e.g. [kube2iam](https://github.com/jtblin/kube2iam)) your steps will be different.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step04-controller-iam.sh\" language=\"bash\" %}}\n\n## Add tags to subnets and security groups\n\nWe need to add tags to our nodegroup subnets so Karpenter will know which subnets to use.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step05-tag-subnets.sh\" language=\"bash\" %}}\n\nAdd tags to our security groups.\nThis command only tags the security groups for the first nodegroup in the cluster.\nIf you have multiple nodegroups or multiple security groups you will need to decide which one Karpenter should use.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step06-tag-security-groups.sh\" language=\"bash\" %}}\n\n## Update aws-auth ConfigMap\n\nWe need to allow nodes that are using the node IAM role we just created to join the cluster.\nTo do that we have to modify the `aws-auth` ConfigMap in the cluster.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step07-edit-aws-auth.sh\" language=\"bash\" %}}\n\nYou will need to add a section to the mapRoles that looks something like this.\nReplace the `${AWS_PARTITION}` variable with the account partition, `${AWS_ACCOUNT_ID}` variable with your account ID, and `${CLUSTER_NAME}` variable with the cluster name, but do not replace the `{{EC2PrivateDNSName}}`.\n\n```yaml\n- groups:\n  - system:bootstrappers\n  - system:nodes\n  ## If you intend to run Windows workloads, the kube-proxy group should be specified.\n  # For more information, see https://github.com/aws/karpenter/issues/5099.\n  # - eks:kube-proxy-windows\n  rolearn: arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/KarpenterNodeRole-${CLUSTER_NAME}\n  username: system:node:{{EC2PrivateDNSName}}\n```\n\nThe full aws-auth configmap should have two groups.\nOne for your Karpenter node role and one for your existing node group.\n\n## Deploy Karpenter\n\nFirst set the Karpenter release you want to deploy.\n\n```bash\nexport KARPENTER_VERSION=\"1.10.0\"\n```\n\nWe can now generate a full Karpenter deployment yaml from the Helm chart.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step08-generate-chart.sh\" language=\"bash\" %}}\n\nModify the following lines in the karpenter.yaml file.\n\n### Set node affinity\n\nEdit the karpenter.yaml file and find the karpenter deployment affinity rules.\nModify the affinity so karpenter will run on one of the existing node group nodes.\n\nThe rules should look something like this.\nModify the value to match your `$NODEGROUP`, one node group per line.\n\n```yaml\naffinity:\n  nodeAffinity:\n    requiredDuringSchedulingIgnoredDuringExecution:\n      nodeSelectorTerms:\n      - matchExpressions:\n        - key: karpenter.sh/nodepool\n          operator: DoesNotExist\n        - key: eks.amazonaws.com/nodegroup\n          operator: In\n          values:\n          - ${NODEGROUP}\n  podAntiAffinity:\n    requiredDuringSchedulingIgnoredDuringExecution:\n      - topologyKey: \"kubernetes.io/hostname\"\n```\n\nNow that our deployment is ready we can create the karpenter namespace, create the NodePool CRD, and then deploy the rest of the karpenter resources.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step09-deploy.sh\" language=\"bash\" %}}\n\n## Create default NodePool\n\nWe need to create a default NodePool so Karpenter knows what types of nodes we want for unscheduled workloads. You can refer to some of the [example NodePool](https://github.com/aws/karpenter/tree/v1.10.0/examples/v1) for specific needs.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step10-create-nodepool.sh\" language=\"bash\" %}}\n\n## Set nodeAffinity for critical workloads (optional)\n\nYou may also want to set a nodeAffinity for other critical cluster workloads.\n\nSome examples are\n\n* coredns\n* metric-server\n\nYou can edit them with `kubectl edit deploy ...` and you should add node affinity for your static node group instances.\nModify the value to match your `$NODEGROUP`, one node group per line.\n\n```yaml\naffinity:\n  nodeAffinity:\n    requiredDuringSchedulingIgnoredDuringExecution:\n      nodeSelectorTerms:\n      - matchExpressions:\n        - key: eks.amazonaws.com/nodegroup\n          operator: In\n          values:\n          - ${NODEGROUP}\n```\n\n## Remove CAS\n\nNow that karpenter is running we can disable the cluster autoscaler.\nTo do that we will scale the number of replicas to zero.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step11-scale-cas.sh\" language=\"bash\" %}}\n\nTo 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.\n\n> 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.**\n\nIf you have a single multi-AZ node group, we suggest a minimum of 2 instances.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step12-scale-single-ng.sh\" language=\"bash\" %}}\n\nOr, if you have multiple single-AZ node groups, we suggest a minimum of 1 instance each.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step12-scale-multiple-ng.sh\" language=\"bash\" %}}\n\n{{% alert title=\"Note\" color=\"warning\" %}}\nIf 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.\n{{% /alert %}}\n\n## Verify Karpenter\n\nAs nodegroup nodes are drained you can verify that Karpenter is creating nodes for your workloads.\n\n```bash\nkubectl logs -f -n \"${KARPENTER_NAMESPACE}\" -l app.kubernetes.io/name=karpenter -c controller\n```\n\nYou should also see new nodes created in your cluster as the old nodes are removed\n\n```bash\nkubectl get nodes\n```\n"
  },
  {
    "path": "website/content/en/docs/getting-started/migrating-from-cas/scripts/step01-env.sh",
    "content": "AWS_PARTITION=\"aws\" # if you are not using standard partitions, you may need to configure to aws-cn / aws-us-gov\nAWS_REGION=\"$(aws configure list | grep region | tr -s \" \" | cut -d\" \" -f3)\"\nOIDC_ENDPOINT=\"$(aws eks describe-cluster --name \"${CLUSTER_NAME}\" \\\n    --query \"cluster.identity.oidc.issuer\" --output text)\"\nAWS_ACCOUNT_ID=$(aws sts get-caller-identity --query 'Account' \\\n    --output text)\nK8S_VERSION=$(aws eks describe-cluster --name \"${CLUSTER_NAME}\" --query \"cluster.version\" --output text)\nALIAS_VERSION=\"$(aws ssm get-parameter --name \"/aws/service/eks/optimized-ami/${K8S_VERSION}/amazon-linux-2023/x86_64/standard/recommended/image_id\" --query Parameter.Value | xargs aws ec2 describe-images --query 'Images[0].Name' --image-ids | sed -r 's/^.*(v[[:digit:]]+).*$/\\1/')\"\n"
  },
  {
    "path": "website/content/en/docs/getting-started/migrating-from-cas/scripts/step02-node-iam.sh",
    "content": "echo '{\n    \"Version\": \"2012-10-17\",\n    \"Statement\": [\n        {\n            \"Effect\": \"Allow\",\n            \"Principal\": {\n                \"Service\": \"ec2.amazonaws.com\"\n            },\n            \"Action\": \"sts:AssumeRole\"\n        }\n    ]\n}' > node-trust-policy.json\n\naws iam create-role --role-name \"KarpenterNodeRole-${CLUSTER_NAME}\" \\\n    --assume-role-policy-document file://node-trust-policy.json\n"
  },
  {
    "path": "website/content/en/docs/getting-started/migrating-from-cas/scripts/step03-node-policies.sh",
    "content": "aws iam attach-role-policy --role-name \"KarpenterNodeRole-${CLUSTER_NAME}\" \\\n    --policy-arn \"arn:${AWS_PARTITION}:iam::aws:policy/AmazonEKSWorkerNodePolicy\"\n\naws iam attach-role-policy --role-name \"KarpenterNodeRole-${CLUSTER_NAME}\" \\\n    --policy-arn \"arn:${AWS_PARTITION}:iam::aws:policy/AmazonEKS_CNI_Policy\"\n\naws iam attach-role-policy --role-name \"KarpenterNodeRole-${CLUSTER_NAME}\" \\\n    --policy-arn \"arn:${AWS_PARTITION}:iam::aws:policy/AmazonEC2ContainerRegistryPullOnly\"\n\naws iam attach-role-policy --role-name \"KarpenterNodeRole-${CLUSTER_NAME}\" \\\n    --policy-arn \"arn:${AWS_PARTITION}:iam::aws:policy/AmazonSSMManagedInstanceCore\"\n"
  },
  {
    "path": "website/content/en/docs/getting-started/migrating-from-cas/scripts/step04-controller-iam.sh",
    "content": "cat << EOF > controller-trust-policy.json\n{\n    \"Version\": \"2012-10-17\",\n    \"Statement\": [\n        {\n            \"Effect\": \"Allow\",\n            \"Principal\": {\n                \"Federated\": \"arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:oidc-provider/${OIDC_ENDPOINT#*//}\"\n            },\n            \"Action\": \"sts:AssumeRoleWithWebIdentity\",\n            \"Condition\": {\n                \"StringEquals\": {\n                    \"${OIDC_ENDPOINT#*//}:aud\": \"sts.amazonaws.com\",\n                    \"${OIDC_ENDPOINT#*//}:sub\": \"system:serviceaccount:${KARPENTER_NAMESPACE}:karpenter\"\n                }\n            }\n        }\n    ]\n}\nEOF\n\naws iam create-role --role-name \"KarpenterControllerRole-${CLUSTER_NAME}\" \\\n    --assume-role-policy-document file://controller-trust-policy.json\n\ncat << EOF > controller-policy.json\n{\n    \"Statement\": [\n        {\n            \"Action\": [\n                \"ssm:GetParameter\",\n                \"ec2:DescribeImages\",\n                \"ec2:RunInstances\",\n                \"ec2:DescribeSubnets\",\n                \"ec2:DescribeSecurityGroups\",\n                \"ec2:DescribeLaunchTemplates\",\n                \"ec2:DescribeInstances\",\n                \"ec2:DescribeInstanceTypes\",\n                \"ec2:DescribeInstanceTypeOfferings\",\n                \"ec2:DeleteLaunchTemplate\",\n                \"ec2:CreateTags\",\n                \"ec2:CreateLaunchTemplate\",\n                \"ec2:CreateFleet\",\n                \"ec2:DescribeSpotPriceHistory\",\n                \"pricing:GetProducts\"\n            ],\n            \"Effect\": \"Allow\",\n            \"Resource\": \"*\",\n            \"Sid\": \"Karpenter\"\n        },\n        {\n            \"Action\": \"ec2:TerminateInstances\",\n            \"Condition\": {\n                \"StringLike\": {\n                    \"ec2:ResourceTag/karpenter.sh/nodepool\": \"*\"\n                }\n            },\n            \"Effect\": \"Allow\",\n            \"Resource\": \"*\",\n            \"Sid\": \"ConditionalEC2Termination\"\n        },\n        {\n            \"Effect\": \"Allow\",\n            \"Action\": \"iam:PassRole\",\n            \"Resource\": \"arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/KarpenterNodeRole-${CLUSTER_NAME}\",\n            \"Sid\": \"PassNodeIAMRole\"\n        },\n        {\n            \"Effect\": \"Allow\",\n            \"Action\": \"eks:DescribeCluster\",\n            \"Resource\": \"arn:${AWS_PARTITION}:eks:${AWS_REGION}:${AWS_ACCOUNT_ID}:cluster/${CLUSTER_NAME}\",\n            \"Sid\": \"EKSClusterEndpointLookup\"\n        },\n        {\n            \"Sid\": \"AllowScopedInstanceProfileCreationActions\",\n            \"Effect\": \"Allow\",\n            \"Resource\": \"*\",\n            \"Action\": [\n                \"iam:CreateInstanceProfile\"\n            ],\n            \"Condition\": {\n                \"StringEquals\": {\n                    \"aws:RequestTag/kubernetes.io/cluster/${CLUSTER_NAME}\": \"owned\",\n                    \"aws:RequestTag/topology.kubernetes.io/region\": \"${AWS_REGION}\"\n                },\n                \"StringLike\": {\n                    \"aws:RequestTag/karpenter.k8s.aws/ec2nodeclass\": \"*\"\n                }\n            }\n        },\n        {\n            \"Sid\": \"AllowScopedInstanceProfileTagActions\",\n            \"Effect\": \"Allow\",\n            \"Resource\": \"*\",\n            \"Action\": [\n                \"iam:TagInstanceProfile\"\n            ],\n            \"Condition\": {\n                \"StringEquals\": {\n                    \"aws:ResourceTag/kubernetes.io/cluster/${CLUSTER_NAME}\": \"owned\",\n                    \"aws:ResourceTag/topology.kubernetes.io/region\": \"${AWS_REGION}\",\n                    \"aws:RequestTag/kubernetes.io/cluster/${CLUSTER_NAME}\": \"owned\",\n                    \"aws:RequestTag/topology.kubernetes.io/region\": \"${AWS_REGION}\"\n                },\n                \"StringLike\": {\n                    \"aws:ResourceTag/karpenter.k8s.aws/ec2nodeclass\": \"*\",\n                    \"aws:RequestTag/karpenter.k8s.aws/ec2nodeclass\": \"*\"\n                }\n            }\n        },\n        {\n            \"Sid\": \"AllowScopedInstanceProfileActions\",\n            \"Effect\": \"Allow\",\n            \"Resource\": \"*\",\n            \"Action\": [\n                \"iam:AddRoleToInstanceProfile\",\n                \"iam:RemoveRoleFromInstanceProfile\",\n                \"iam:DeleteInstanceProfile\"\n            ],\n            \"Condition\": {\n                \"StringEquals\": {\n                    \"aws:ResourceTag/kubernetes.io/cluster/${CLUSTER_NAME}\": \"owned\",\n                    \"aws:ResourceTag/topology.kubernetes.io/region\": \"${AWS_REGION}\"\n                },\n                \"StringLike\": {\n                    \"aws:ResourceTag/karpenter.k8s.aws/ec2nodeclass\": \"*\"\n                }\n            }\n        },\n        {\n            \"Sid\": \"AllowInstanceProfileReadActions\",\n            \"Effect\": \"Allow\",\n            \"Resource\": \"*\",\n            \"Action\": \"iam:GetInstanceProfile\"\n        },\n        {\n            \"Sid\": \"AllowUnscopedInstanceProfileListAction\",\n            \"Effect\": \"Allow\",\n            \"Resource\": \"*\",\n            \"Action\": \"iam:ListInstanceProfiles\"\n        }\n    ],\n    \"Version\": \"2012-10-17\"\n}\nEOF\n\naws iam put-role-policy --role-name \"KarpenterControllerRole-${CLUSTER_NAME}\" \\\n    --policy-name \"KarpenterControllerPolicy-${CLUSTER_NAME}\" \\\n    --policy-document file://controller-policy.json\n"
  },
  {
    "path": "website/content/en/docs/getting-started/migrating-from-cas/scripts/step05-tag-subnets.sh",
    "content": "for NODEGROUP in $(aws eks list-nodegroups --cluster-name \"${CLUSTER_NAME}\" --query 'nodegroups' --output text); do\n    aws ec2 create-tags \\\n        --tags \"Key=karpenter.sh/discovery,Value=${CLUSTER_NAME}\" \\\n        --resources $(aws eks describe-nodegroup --cluster-name \"${CLUSTER_NAME}\" \\\n        --nodegroup-name \"${NODEGROUP}\" --query 'nodegroup.subnets' --output text )\ndone\n"
  },
  {
    "path": "website/content/en/docs/getting-started/migrating-from-cas/scripts/step06-tag-security-groups.sh",
    "content": "NODEGROUP=$(aws eks list-nodegroups --cluster-name \"${CLUSTER_NAME}\" \\\n    --query 'nodegroups[0]' --output text)\n\nLAUNCH_TEMPLATE=$(aws eks describe-nodegroup --cluster-name \"${CLUSTER_NAME}\" \\\n    --nodegroup-name \"${NODEGROUP}\" --query 'nodegroup.launchTemplate.{id:id,version:version}' \\\n    --output text | tr -s \"\\t\" \",\")\n\n# If your EKS setup is configured to use only Cluster security group, then please execute -\n\nSECURITY_GROUPS=$(aws eks describe-cluster \\\n    --name \"${CLUSTER_NAME}\" --query \"cluster.resourcesVpcConfig.clusterSecurityGroupId\" --output text)\n\n# If your setup uses the security groups in the Launch template of a managed node group, then :\n\nSECURITY_GROUPS=\"$(aws ec2 describe-launch-template-versions \\\n    --launch-template-id \"${LAUNCH_TEMPLATE%,*}\" --versions \"${LAUNCH_TEMPLATE#*,}\" \\\n    --query 'LaunchTemplateVersions[0].LaunchTemplateData.[NetworkInterfaces[0].Groups||SecurityGroupIds]' \\\n    --output text)\"\n\naws ec2 create-tags \\\n    --tags \"Key=karpenter.sh/discovery,Value=${CLUSTER_NAME}\" \\\n    --resources \"${SECURITY_GROUPS}\"\n"
  },
  {
    "path": "website/content/en/docs/getting-started/migrating-from-cas/scripts/step07-edit-aws-auth.sh",
    "content": "kubectl edit configmap aws-auth -n kube-system\n"
  },
  {
    "path": "website/content/en/docs/getting-started/migrating-from-cas/scripts/step08-generate-chart.sh",
    "content": "helm template karpenter oci://public.ecr.aws/karpenter/karpenter --version \"${KARPENTER_VERSION}\" --namespace \"${KARPENTER_NAMESPACE}\" \\\n    --set \"settings.clusterName=${CLUSTER_NAME}\" \\\n    --set \"settings.interruptionQueue=${CLUSTER_NAME}\" \\\n    --set \"serviceAccount.annotations.eks\\.amazonaws\\.com/role-arn=arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/KarpenterControllerRole-${CLUSTER_NAME}\" \\\n    --set controller.resources.requests.cpu=1 \\\n    --set controller.resources.requests.memory=1Gi \\\n    --set controller.resources.limits.cpu=1 \\\n    --set controller.resources.limits.memory=1Gi > karpenter.yaml\n"
  },
  {
    "path": "website/content/en/docs/getting-started/migrating-from-cas/scripts/step09-deploy.sh",
    "content": "kubectl create namespace \"${KARPENTER_NAMESPACE}\" || true\nkubectl create -f \\\n    \"https://raw.githubusercontent.com/aws/karpenter-provider-aws/v${KARPENTER_VERSION}/pkg/apis/crds/karpenter.sh_nodepools.yaml\"\nkubectl create -f \\\n    \"https://raw.githubusercontent.com/aws/karpenter-provider-aws/v${KARPENTER_VERSION}/pkg/apis/crds/karpenter.k8s.aws_ec2nodeclasses.yaml\"\nkubectl create -f \\\n    \"https://raw.githubusercontent.com/aws/karpenter-provider-aws/v${KARPENTER_VERSION}/pkg/apis/crds/karpenter.sh_nodeclaims.yaml\"\nkubectl apply -f karpenter.yaml\n"
  },
  {
    "path": "website/content/en/docs/getting-started/migrating-from-cas/scripts/step10-create-nodepool.sh",
    "content": "cat <<EOF | envsubst | kubectl apply -f -\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\nspec:\n  template:\n    spec:\n      requirements:\n        - key: kubernetes.io/arch\n          operator: In\n          values: [\"amd64\"]\n        - key: kubernetes.io/os\n          operator: In\n          values: [\"linux\"]\n        - key: karpenter.sh/capacity-type\n          operator: In\n          values: [\"spot\"]\n        - key: karpenter.k8s.aws/instance-category\n          operator: In\n          values: [\"c\", \"m\", \"r\"]\n        - key: karpenter.k8s.aws/instance-generation\n          operator: Gt\n          values: [\"2\"]\n      nodeClassRef:\n        group: karpenter.k8s.aws\n        kind: EC2NodeClass\n        name: default\n      expireAfter: 720h # 30 * 24h = 720h\n  limits:\n    cpu: 1000\n  disruption:\n    consolidationPolicy: WhenEmptyOrUnderutilized\n    consolidateAfter: 1m\n---\napiVersion: karpenter.k8s.aws/v1\nkind: EC2NodeClass\nmetadata:\n  name: default\nspec:\n  role: \"KarpenterNodeRole-${CLUSTER_NAME}\" # replace with your cluster name\n  amiSelectorTerms:\n    - alias: \"al2023@${ALIAS_VERSION}\"\n  subnetSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\" # replace with your cluster name\n  securityGroupSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\" # replace with your cluster name\nEOF\n"
  },
  {
    "path": "website/content/en/docs/getting-started/migrating-from-cas/scripts/step11-scale-cas.sh",
    "content": "kubectl scale deploy/cluster-autoscaler -n kube-system --replicas=0\n"
  },
  {
    "path": "website/content/en/docs/getting-started/migrating-from-cas/scripts/step12-scale-multiple-ng.sh",
    "content": "for NODEGROUP in $(aws eks list-nodegroups --cluster-name \"${CLUSTER_NAME}\" \\\n    --query 'nodegroups' --output text); do aws eks update-nodegroup-config --cluster-name \"${CLUSTER_NAME}\" \\\n    --nodegroup-name \"${NODEGROUP}\" \\\n    --scaling-config \"minSize=1,maxSize=1,desiredSize=1\"\ndone\n"
  },
  {
    "path": "website/content/en/docs/getting-started/migrating-from-cas/scripts/step12-scale-single-ng.sh",
    "content": "aws eks update-nodegroup-config --cluster-name \"${CLUSTER_NAME}\" \\\n    --nodegroup-name \"${NODEGROUP}\" \\\n    --scaling-config \"minSize=2,maxSize=2,desiredSize=2\"\n"
  },
  {
    "path": "website/content/en/docs/reference/_index.md",
    "content": "---\ntitle: \"Reference\"\nlinkTitle: \"Reference\"\nweight: 50\ndescription: >\n  Reference documentation for Karpenter\n---"
  },
  {
    "path": "website/content/en/docs/reference/cloudformation.md",
    "content": "---\ntitle: \"CloudFormation\"\nlinkTitle: \"CloudFormation\"\nweight: 5\ndescription: >\n  A description of the Getting Started CloudFormation file and permissions\n---\nThe [Getting Started with Karpenter]({{< relref \"../getting-started/getting-started-with-karpenter\" >}}) guide uses CloudFormation to bootstrap the cluster to enable Karpenter to create and manage nodes, as well as to allow Karpenter to respond to interruption events.\nThis document describes the `cloudformation.yaml` file used in that guide.\nThese descriptions should allow you to understand:\n\n* What Karpenter is authorized to do with your EKS cluster and AWS resources when using the `cloudformation.yaml` file\n* What permissions you need to set up if you are adding Karpenter to an existing cluster\n\n## Overview\n\nTo download a particular version of `cloudformation.yaml`, set the version and use `curl` to pull the file to your local system:\n\n```bash\nexport KARPENTER_VERSION=\"1.10.0\"\ncurl https://raw.githubusercontent.com/aws/karpenter-provider-aws/v\"${KARPENTER_VERSION}\"/website/content/en/preview/getting-started/getting-started-with-karpenter/cloudformation.yaml > cloudformation.yaml\n```\n\nFollowing some header information, the rest of the `cloudformation.yaml` file describes the resources that CloudFormation deploys.\nThe sections of that file can be grouped together under the following general headings:\n\n* [**Node Authorization**]({{< relref \"#node-authorization\" >}}): Creates a NodeInstanceProfile, attaches a NodeRole to it, and connects it to an IAM Identity Mapping used to authorize nodes to the cluster. This defines the permissions each node managed by Karpenter has to access EC2 and other AWS resources. This doesn't actually create the IAM Identity Mapping. That part is orchestrated by `eksctl` in the Getting Started guide.\n* [**Controller Authorization**]({{< relref \"#controller-authorization\" >}}):  Creates 5 Karpenter controller policies that are attached to the service account's IAM role.\nAgain, the actual service account creation (`karpenter`), that is combined with these policies, is orchestrated by `eksctl` in the Getting Started guide.\n* [**Interruption Handling**]({{< relref \"#interruption-handling\" >}}): Allows the Karpenter controller to see and respond to interruptions that occur with the nodes that Karpenter is managing. See the [Interruption]({{< relref \"../concepts/disruption#interruption\" >}}) section of the Disruption page for details.\n\nA lot of the object naming that is done by `cloudformation.yaml` is based on the following:\n\n* Cluster name: With a username of `bob` the Getting Started Guide would name your cluster `bob-karpenter-demo`\nThat name would then be appended to any name below where `${ClusterName}` is included.\n\n* Partition: Any time an ARN is used, it includes the [partition name](https://docs.aws.amazon.com/whitepapers/latest/aws-fault-isolation-boundaries/partitions.html) to identify where the object is found. In most cases, that partition name is `aws`. However, it could also be `aws-cn` (for China Regions) or `aws-us-gov` (for AWS GovCloud US Regions).\n\n## Node Authorization\n\nThe following sections of the `cloudformation.yaml` file set up IAM permissions for Kubernetes nodes created by Karpenter.\nIn particular, this involves setting up a node role that can be attached and passed to instance profiles that Karpenter generates at runtime:\n\n* KarpenterNodeRole\n\n### KarpenterNodeRole\n\nThis section of the template defines the IAM role attached to generated instance profiles.\nGiven a cluster name of `bob-karpenter-demo`, this role would end up being named `\"KarpenterNodeRole-bob-karpenter-demo`.\n\n```yaml\nKarpenterNodeRole:\n  Type: \"AWS::IAM::Role\"\n  Properties:\n    RoleName: !Sub \"KarpenterNodeRole-${ClusterName}\"\n    Path: /\n    AssumeRolePolicyDocument:\n      Version: \"2012-10-17\"\n      Statement:\n        - Effect: Allow\n          Principal:\n            Service:\n              !Sub \"ec2.${AWS::URLSuffix}\"\n          Action:\n            - \"sts:AssumeRole\"\n    ManagedPolicyArns:\n      - !Sub \"arn:${AWS::Partition}:iam::aws:policy/AmazonEKS_CNI_Policy\"\n      - !Sub \"arn:${AWS::Partition}:iam::aws:policy/AmazonEKSWorkerNodePolicy\"\n      - !Sub \"arn:${AWS::Partition}:iam::aws:policy/AmazonEC2ContainerRegistryPullOnly\"\n      - !Sub \"arn:${AWS::Partition}:iam::aws:policy/AmazonSSMManagedInstanceCore\"\n```\n\nThe role created here includes several AWS managed policies, which are designed to provide permissions for specific uses needed by the nodes to work with EC2 and other AWS resources. These include:\n\n* [AmazonEKS_CNI_Policy](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonEKS_CNI_Policy.html): Provides the permissions that the Amazon VPC CNI Plugin needs to configure EKS worker nodes.\n* [AmazonEKSWorkerNodePolicy](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonEKSWorkerNodePolicy.html): Lets Amazon EKS worker nodes connect to EKS Clusters.\n* [AmazonEC2ContainerRegistryPullOnly](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonEC2ContainerRegistryPullOnly.html): Allows pulling images from repositories in the Amazon EC2 Container Registry.\n* [AmazonSSMManagedInstanceCore](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonSSMManagedInstanceCore.html): Adds AWS Systems Manager service core functions for Amazon EC2.\n\nIf you were to use a node role from an existing cluster, you could skip this provisioning step and pass this node role to any EC2NodeClasses that you create. Additionally, you would ensure that the [IAM Integration Policy]({{< relref \"#karpentercontrolleriamintegrationpolicy\" >}}) has `iam:PassRole` permission to the role attached to the generated instance profiles.\n\n## Controller Authorization\n\nThis section sets the AWS permissions for the Karpenter Controller. When used in the Getting Started guide, `eksctl` uses these permissions to create a service account (karpenter) whose IAM role has all 5 controller policies attached.\n\nThe controller permissions are split across 5 managed IAM policies:\n\n* [KarpenterControllerNodeLifecyclePolicy]({{< relref \"#karpentercontrollernodelifecyclepolicy\" >}}) - EC2 instance and launch template lifecycle management\n* [KarpenterControllerIAMIntegrationPolicy]({{< relref \"#karpentercontrolleriamintegrationpolicy\" >}}) - IAM instance profile management\n* [KarpenterControllerEKSIntegrationPolicy]({{< relref \"#karpentercontrollereksintegrationpolicy\" >}}) - EKS cluster discovery\n* [KarpenterControllerInterruptionPolicy]({{< relref \"#karpentercontrollerinterruptionpolicy\" >}}) - SQS interruption queue access\n* [KarpenterControllerResourceDiscoveryPolicy]({{< relref \"#karpentercontrollerresourcediscoverypolicy\" >}}) - Read-only resource discovery\n\nSomeone wanting to add Karpenter to an existing cluster, instead of using `cloudformation.yaml`, would need to create these IAM policies directly and assign them to the role leveraged by the service account using IRSA or EKS Pod Identity.\n\n### KarpenterControllerNodeLifecyclePolicy\n\nThe `NodeLifecyclePolicy` manages EC2 instance and launch template lifecycle operations. Given a cluster name of `bob-karpenter-demo`, this policy would be named: `KarpenterControllerNodeLifecyclePolicy-bob-karpenter-demo`\n\n```yaml\nNodeLifecyclePolicy:\n  Type: AWS::IAM::ManagedPolicy\n  Properties:\n    ManagedPolicyName: !Sub \"KarpenterControllerNodeLifecyclePolicy-${ClusterName}\"\n    Path: /\n    PolicyDocument: !Sub |\n      {\n        \"Version\": \"2012-10-17\",\n        \"Statement\": [\n```\n\n#### AllowScopedEC2InstanceAccessActions\n\nThe AllowScopedEC2InstanceAccessActions statement ID (Sid) identifies a set of EC2 resources that are allowed to be accessed with\n[RunInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html) and [CreateFleet](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet.html) actions.\nFor `RunInstances` and `CreateFleet` actions, the Karpenter controller can read (but not create) `image`, `snapshot`, `security-group`, `subnet` and `capacity-reservation` EC2 resources, scoped for the particular AWS partition and region.\n\n```json\n{\n  \"Sid\": \"AllowScopedEC2InstanceAccessActions\",\n  \"Effect\": \"Allow\",\n  \"Resource\": [\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}::image/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}::snapshot/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:security-group/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:subnet/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:capacity-reservation/*\"\n  ],\n  \"Action\": [\n    \"ec2:RunInstances\",\n    \"ec2:CreateFleet\"\n  ]\n}\n```\n\n#### AllowScopedEC2LaunchTemplateAccessActions\n\nThe AllowScopedEC2InstanceAccessActions statement ID (Sid) identifies launch templates that are allowed to be accessed with\n[RunInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html) and [CreateFleet](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet.html) actions.\nFor `RunInstances` and `CreateFleet` actions, the Karpenter controller can read (but not create) `launch-template` EC2 resources that have the `kubernetes.io/cluster/${ClusterName}` tag be set to `owned` and a `karpenter.sh/nodepool` tag, scoped for the particular AWS partition and region. This ensures that an instance launch can't access launch templates that weren't provisioned by Karpenter.\n\n```json\n{\n  \"Sid\": \"AllowScopedEC2LaunchTemplateAccessActions\",\n  \"Effect\": \"Allow\",\n  \"Resource\": \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:launch-template/*\",\n  \"Action\": [\n    \"ec2:RunInstances\",\n    \"ec2:CreateFleet\"\n  ],\n  \"Condition\": {\n    \"StringEquals\": {\n      \"aws:ResourceTag/kubernetes.io/cluster/${ClusterName}\": \"owned\"\n    },\n    \"StringLike\": {\n      \"aws:ResourceTag/karpenter.sh/nodepool\": \"*\"\n    }\n  }\n}\n```\n\n#### AllowScopedEC2InstanceActionsWithTags\n\nThe AllowScopedEC2InstanceActionsWithTags Sid allows the\n[RunInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html), [CreateFleet](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet.html), and [CreateLaunchTemplate](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateLaunchTemplate.html)\nactions requested by the Karpenter controller to create all `fleet`, `instance`, `volume`, `network-interface`, `launch-template` or `spot-instances-request` EC2 resources (for the partition and region). It also requires that the `kubernetes.io/cluster/${ClusterName}` tag be set to `owned`, `aws:RequestTag/eks:eks-cluster-name` be set to `\"${ClusterName}`, and a `karpenter.sh/nodepool` tag be set to any value. This ensures that Karpenter is only allowed to create instances for a single EKS cluster.\n\n```json\n{\n  \"Sid\": \"AllowScopedEC2InstanceActionsWithTags\",\n  \"Effect\": \"Allow\",\n  \"Resource\": [\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:fleet/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:instance/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:volume/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:network-interface/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:launch-template/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:spot-instances-request/*\"\n  ],\n  \"Action\": [\n    \"ec2:RunInstances\",\n    \"ec2:CreateFleet\",\n    \"ec2:CreateLaunchTemplate\"\n  ],\n  \"Condition\": {\n    \"StringEquals\": {\n      \"aws:RequestTag/kubernetes.io/cluster/${ClusterName}\": \"owned\"\n      \"aws:RequestTag/eks:eks-cluster-name\": \"${ClusterName}\"\n    },\n    \"StringLike\": {\n      \"aws:RequestTag/karpenter.sh/nodepool\": \"*\"\n    }\n  }\n}\n```\n\n#### AllowScopedResourceCreationTagging\n\nThe AllowScopedResourceCreationTagging Sid allows EC2 [CreateTags](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTags.html)\nactions on `fleet`, `instance`, `volume`, `network-interface`, `launch-template` and `spot-instances-request` resources, While making `RunInstance`, `CreateFleet`, or `CreateLaunchTemplate` calls. Additionally, this ensures that resources can't be tagged arbitrarily by Karpenter after they are created.\nConditions that must be met include that `aws:RequestTag/kubernetes.io/cluster/${ClusterName}` be set to `owned` and `aws:RequestTag/eks:eks-cluster-name` be set to `${ClusterName}`.\n\n```json\n{\n  \"Sid\": \"AllowScopedResourceCreationTagging\",\n  \"Effect\": \"Allow\",\n  \"Resource\": [\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:fleet/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:instance/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:volume/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:network-interface/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:launch-template/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:spot-instances-request/*\"\n  ],\n  \"Action\": \"ec2:CreateTags\",\n  \"Condition\": {\n    \"StringEquals\": {\n      \"aws:RequestTag/kubernetes.io/cluster/${ClusterName}\": \"owned\",\n      \"aws:RequestTag/eks:eks-cluster-name\": \"${ClusterName}\"\n      \"ec2:CreateAction\": [\n        \"RunInstances\",\n        \"CreateFleet\",\n        \"CreateLaunchTemplate\"\n      ]\n    },\n    \"StringLike\": {\n      \"aws:RequestTag/karpenter.sh/nodepool\": \"*\"\n    }\n  }\n}\n```\n\n#### AllowScopedResourceTagging\n\nThe AllowScopedResourceTagging Sid allows EC2 [CreateTags](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTags.html) actions on all instances created by Karpenter after their creation. It enforces that Karpenter is only able to update the tags on cluster instances it is operating on through the `kubernetes.io/cluster/${ClusterName}`\" and `karpenter.sh/nodepool` tags.\nLikewise, `RequestTag/eks:eks-cluster-name` must be set to `${ClusterName}`, if it exists, and `TagKeys` must equal `eks:eks-cluster-name`, `karpenter.sh/nodeclaim`, and `Name`, for all values.\n```json\n{\n  \"Sid\": \"AllowScopedResourceTagging\",\n  \"Effect\": \"Allow\",\n  \"Resource\": \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:instance/*\",\n  \"Action\": \"ec2:CreateTags\",\n  \"Condition\": {\n    \"StringEquals\": {\n      \"aws:ResourceTag/kubernetes.io/cluster/${ClusterName}\": \"owned\"\n    },\n    \"StringLike\": {\n      \"aws:ResourceTag/karpenter.sh/nodepool\": \"*\"\n    },\n    \"StringEqualsIfExists\": {\n      \"aws:RequestTag/eks:eks-cluster-name\": \"${ClusterName}\"\n    },\n    \"ForAllValues:StringEquals\": {\n      \"aws:TagKeys\": [\n        \"eks:eks-cluster-name\",\n        \"karpenter.sh/nodeclaim\",\n        \"Name\"\n      ]\n    }\n  }\n}\n```\n\n#### AllowScopedDeletion\n\nThe AllowScopedDeletion Sid allows [TerminateInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_TerminateInstances.html) and [DeleteLaunchTemplate](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DeleteLaunchTemplate.html) actions to delete instance and launch-template resources, provided that `karpenter.sh/nodepool` and `kubernetes.io/cluster/${ClusterName}` tags are set. These tags must be present on all resources that Karpenter is going to delete. This ensures that Karpenter can only delete instances and launch templates that are associated with it.\n\n```json\n{\n  \"Sid\": \"AllowScopedDeletion\",\n  \"Effect\": \"Allow\",\n  \"Resource\": [\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:instance/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:launch-template/*\"\n  ],\n  \"Action\": [\n    \"ec2:TerminateInstances\",\n    \"ec2:DeleteLaunchTemplate\"\n  ],\n  \"Condition\": {\n    \"StringEquals\": {\n      \"aws:ResourceTag/kubernetes.io/cluster/${ClusterName}\": \"owned\"\n    },\n    \"StringLike\": {\n      \"aws:ResourceTag/karpenter.sh/nodepool\": \"*\"\n    }\n  }\n}\n```\n\n### KarpenterControllerIAMIntegrationPolicy\n\nThe `IAMIntegrationPolicy` manages IAM instance profile operations. Given a cluster name of `bob-karpenter-demo`, this policy would be named: `KarpenterControllerIAMIntegrationPolicy-bob-karpenter-demo`\n\n```yaml\nIAMIntegrationPolicy:\n  Type: AWS::IAM::ManagedPolicy\n  Properties:\n    ManagedPolicyName: !Sub \"KarpenterControllerIAMIntegrationPolicy-${ClusterName}\"\n    Path: /\n    PolicyDocument: !Sub |\n      {\n        \"Version\": \"2012-10-17\",\n        \"Statement\": [\n```\n\n#### AllowPassingInstanceRole\n\nThe AllowPassingInstanceRole Sid gives the Karpenter controller permission to pass (`iam:PassRole`) the node role (`KarpenterNodeRole-${ClusterName}`) to generated instance profiles.\nThis gives EC2 permission explicit permission to use the `KarpenterNodeRole-${ClusterName}` when assigning permissions to generated instance profiles while launching nodes.\n\n```json\n{\n  \"Sid\": \"AllowPassingInstanceRole\",\n  \"Effect\": \"Allow\",\n  \"Resource\": \"${KarpenterNodeRole.Arn}\",\n  \"Action\": \"iam:PassRole\",\n  \"Condition\": {\n    \"StringEquals\": {\n      \"iam:PassedToService\": [\n        \"ec2.amazonaws.com\",\n        \"ec2.amazonaws.com.cn\"\n      ]\n    }\n  }\n}\n```\n\n#### AllowScopedInstanceProfileCreationActions\n\nThe AllowScopedInstanceProfileCreationActions Sid gives the Karpenter controller permission to create a new instance profile with [`iam:CreateInstanceProfile`](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateInstanceProfile.html),\nprovided that the request is made to a cluster with `RequestTag` `kubernetes.io/cluster/${ClusterName}` set to `owned`, the `eks:eks-cluster-name` set to `${ClusterName}`, and `topology.kubernetes.io/region` set to the current region.\nAlso, `karpenter.k8s.aws/ec2nodeclass` must be set to some value. This ensures that Karpenter can generate instance profiles on your behalf based on roles specified in your `EC2NodeClasses` that you use to configure Karpenter.\n\n```json\n{\n  \"Sid\": \"AllowScopedInstanceProfileCreationActions\",\n  \"Effect\": \"Allow\",\n  \"Resource\": \"arn:${AWS::Partition}:iam::${AWS::AccountId}:instance-profile/*\",\n  \"Action\": [\n    \"iam:CreateInstanceProfile\"\n  ],\n  \"Condition\": {\n    \"StringEquals\": {\n      \"aws:RequestTag/kubernetes.io/cluster/${ClusterName}\": \"owned\",\n      \"aws:RequestTag/eks:eks-cluster-name\": \"${ClusterName}\",\n      \"aws:RequestTag/topology.kubernetes.io/region\": \"${AWS::Region}\"\n    },\n    \"StringLike\": {\n      \"aws:RequestTag/karpenter.k8s.aws/ec2nodeclass\": \"*\"\n    }\n  }\n}\n```\n\n#### AllowScopedInstanceProfileTagActions\n\nThe AllowScopedInstanceProfileTagActions Sid gives the Karpenter controller permission to tag an instance profile with [`iam:TagInstanceProfile`](https://docs.aws.amazon.com/IAM/latest/APIReference/API_TagInstanceProfile.html), provided that `ResourceTag` attributes `kubernetes.io/cluster/${ClusterName}` is set to `owned` and `topology.kubernetes.io/region` is set to the current region and `RequestTag` attributes `kubernetes.io/cluster/${ClusterName}` is set to `owned`, `eks:eks-cluster-name` is set to `${ClusterName}`, and `topology.kubernetes.io/region` is set to the current region.\nAlso, `ResourceTag/karpenter.k8s.aws/ec2nodeclass` and `RequestTag/karpenter.k8s.aws/ec2nodeclass` must be set to some value. This ensures that Karpenter is only able to act on instance profiles that it provisions for this cluster.\n\n```json\n{\n  \"Sid\": \"AllowScopedInstanceProfileTagActions\",\n  \"Effect\": \"Allow\",\n  \"Resource\": \"arn:${AWS::Partition}:iam::${AWS::AccountId}:instance-profile/*\",\n  \"Action\": [\n    \"iam:TagInstanceProfile\"\n  ],\n  \"Condition\": {\n    \"StringEquals\": {\n      \"aws:ResourceTag/kubernetes.io/cluster/${ClusterName}\": \"owned\",\n      \"aws:ResourceTag/topology.kubernetes.io/region\": \"${AWS::Region}\",\n      \"aws:RequestTag/kubernetes.io/cluster/${ClusterName}\": \"owned\",\n      \"aws:RequestTag/eks:eks-cluster-name\": \"${ClusterName}\",\n      \"aws:RequestTag/topology.kubernetes.io/region\": \"${AWS::Region}\"\n    },\n    \"StringLike\": {\n      \"aws:ResourceTag/karpenter.k8s.aws/ec2nodeclass\": \"*\",\n      \"aws:RequestTag/karpenter.k8s.aws/ec2nodeclass\": \"*\"\n    }\n  }\n}\n```\n\n#### AllowScopedInstanceProfileActions\n\nThe AllowScopedInstanceProfileActions Sid gives the Karpenter controller permission to perform [`iam:AddRoleToInstanceProfile`](https://docs.aws.amazon.com/IAM/latest/APIReference/API_AddRoleToInstanceProfile.html), [`iam:RemoveRoleFromInstanceProfile`](https://docs.aws.amazon.com/IAM/latest/APIReference/API_RemoveRoleFromInstanceProfile.html), and [`iam:DeleteInstanceProfile`](https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeleteInstanceProfile.html) actions,\nprovided that the request is made to a cluster with `kubernetes.io/cluster/${ClusterName}` set to owned and is made in the current region.\nAlso, `karpenter.k8s.aws/ec2nodeclass` must be set to some value. This permission is further enforced by the `iam:PassRole` permission. If Karpenter attempts to add a role to an instance profile that it doesn't have `iam:PassRole` permission on, that call will fail. Therefore, if you configure Karpenter to use a new role through the `EC2NodeClass`, ensure that you also specify that role within your `iam:PassRole` permission.\n\n```json\n{\n  \"Sid\": \"AllowScopedInstanceProfileActions\",\n  \"Effect\": \"Allow\",\n  \"Resource\": \"arn:${AWS::Partition}:iam::${AWS::AccountId}:instance-profile/*\",\n  \"Action\": [\n    \"iam:AddRoleToInstanceProfile\",\n    \"iam:RemoveRoleFromInstanceProfile\",\n    \"iam:DeleteInstanceProfile\"\n  ],\n  \"Condition\": {\n    \"StringEquals\": {\n      \"aws:ResourceTag/kubernetes.io/cluster/${ClusterName}\": \"owned\",\n      \"aws:ResourceTag/topology.kubernetes.io/region\": \"${AWS::Region}\"\n    },\n    \"StringLike\": {\n      \"aws:ResourceTag/karpenter.k8s.aws/ec2nodeclass\": \"*\"\n    }\n  }\n}\n```\n\n### KarpenterControllerEKSIntegrationPolicy\n\nThe `EKSIntegrationPolicy` manages EKS cluster discovery. Given a cluster name of `bob-karpenter-demo`, this policy would be named: `KarpenterControllerEKSIntegrationPolicy-bob-karpenter-demo`\n\n```yaml\nEKSIntegrationPolicy:\n  Type: AWS::IAM::ManagedPolicy\n  Properties:\n    ManagedPolicyName: !Sub \"KarpenterControllerEKSIntegrationPolicy-${ClusterName}\"\n    Path: /\n    PolicyDocument: !Sub |\n      {\n        \"Version\": \"2012-10-17\",\n        \"Statement\": [\n```\n\n#### AllowAPIServerEndpointDiscovery\n\nYou can optionally allow the Karpenter controller to discover the Kubernetes cluster's external API endpoint to enable EC2 nodes to successfully join the EKS cluster.\n\n> **Note**: If you are not using an EKS control plane, you will have to specify this endpoint explicitly. See the description of the `aws.clusterEndpoint` setting in the [ConfigMap](.settings/#configmap) documentation for details.\n\nThe AllowAPIServerEndpointDiscovery Sid allows the Karpenter controller to get that information (`eks:DescribeCluster`) for the cluster (`cluster/${ClusterName}`).\n\n```json\n{\n  \"Sid\": \"AllowAPIServerEndpointDiscovery\",\n  \"Effect\": \"Allow\",\n  \"Resource\": \"arn:${AWS::Partition}:eks:${AWS::Region}:${AWS::AccountId}:cluster/${ClusterName}\",\n  \"Action\": \"eks:DescribeCluster\"\n}\n```\n\n### KarpenterControllerInterruptionPolicy\n\nThe `InterruptionPolicy` manages access to the SQS interruption queue. Given a cluster name of `bob-karpenter-demo`, this policy would be named: `KarpenterControllerInterruptionPolicy-bob-karpenter-demo`\n\n```yaml\nInterruptionPolicy:\n  Type: AWS::IAM::ManagedPolicy\n  Properties:\n    ManagedPolicyName: !Sub \"KarpenterControllerInterruptionPolicy-${ClusterName}\"\n    Path: /\n    PolicyDocument: !Sub |\n      {\n        \"Version\": \"2012-10-17\",\n        \"Statement\": [\n```\n\n#### AllowInterruptionQueueActions\n\nKarpenter supports interruption queues, that you can create as described in the [Interruption]({{< relref \"../concepts/disruption#interruption\" >}}) section of the Disruption page.\nThis section of the cloudformation.yaml template can give Karpenter permission to access those queues by specifying the resource ARN.\nFor the interruption queue you created (`${KarpenterInterruptionQueue.Arn}`), the AllowInterruptionQueueActions Sid lets the Karpenter controller have permission to delete messages ([DeleteMessage](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_DeleteMessage.html)), get queue URL ([GetQueueUrl](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_GetQueueUrl.html)), and receive messages ([ReceiveMessage](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ReceiveMessage.html)).\n\n```json\n{\n  \"Sid\": \"AllowInterruptionQueueActions\",\n  \"Effect\": \"Allow\",\n  \"Resource\": \"${KarpenterInterruptionQueue.Arn}\",\n  \"Action\": [\n    \"sqs:DeleteMessage\",\n    \"sqs:GetQueueUrl\",\n    \"sqs:ReceiveMessage\"\n  ]\n}\n```\n\n### KarpenterControllerResourceDiscoveryPolicy\n\nThe `ResourceDiscoveryPolicy` manages read-only resource discovery operations. Given a cluster name of `bob-karpenter-demo`, this policy would be named: `KarpenterControllerResourceDiscoveryPolicy-bob-karpenter-demo`\n\n```yaml\nResourceDiscoveryPolicy:\n  Type: AWS::IAM::ManagedPolicy\n  Properties:\n    ManagedPolicyName: !Sub \"KarpenterControllerResourceDiscoveryPolicy-${ClusterName}\"\n    Path: /\n    PolicyDocument: !Sub |\n      {\n        \"Version\": \"2012-10-17\",\n        \"Statement\": [\n```\n\n#### AllowRegionalReadActions\n\nThe AllowRegionalReadActions Sid allows [DescribeAvailabilityZones](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeAvailabilityZones.html), [DescribeImages](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeImages.html), [DescribeInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeInstances.html), [DescribeInstanceTypeOfferings](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeInstanceTypeOfferings.html), [DescribeInstanceTypes](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeInstanceTypes.html), [DescribeLaunchTemplates](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeLaunchTemplates.html), [DescribeSecurityGroups](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeSecurityGroups.html), [DescribeSpotPriceHistory](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeSpotPriceHistory.html), and [DescribeSubnets](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeSubnets.html) actions for the current AWS region.\nThis allows the Karpenter controller to do any of those read-only actions across all related resources for that AWS region.\n\n```json\n{\n  \"Sid\": \"AllowRegionalReadActions\",\n  \"Effect\": \"Allow\",\n  \"Resource\": \"*\",\n  \"Action\": [\n    \"ec2:DescribeCapacityReservations\",\n    \"ec2:DescribeImages\",\n    \"ec2:DescribeInstances\",\n    \"ec2:DescribeInstanceTypeOfferings\",\n    \"ec2:DescribeInstanceTypes\",\n    \"ec2:DescribeLaunchTemplates\",\n    \"ec2:DescribeSecurityGroups\",\n    \"ec2:DescribeSpotPriceHistory\",\n    \"ec2:DescribeSubnets\"\n  ],\n  \"Condition\": {\n    \"StringEquals\": {\n      \"aws:RequestedRegion\": \"${AWS::Region}\"\n    }\n  }\n}\n```\n\n#### AllowSSMReadActions\n\nThe AllowSSMReadActions Sid allows the Karpenter controller to get SSM parameters (`ssm:GetParameter`) from the current region for SSM parameters generated by AWS services.\n\n**NOTE**: If potentially sensitive information is stored in SSM parameters, you could consider restricting access to these messages further.\n```json\n{\n  \"Sid\": \"AllowSSMReadActions\",\n  \"Effect\": \"Allow\",\n  \"Resource\": \"arn:${AWS::Partition}:ssm:${AWS::Region}::parameter/aws/service/*\",\n  \"Action\": \"ssm:GetParameter\"\n}\n```\n\n#### AllowPricingReadActions\n\nBecause pricing information does not exist in every region at the moment, the AllowPricingReadActions Sid allows the Karpenter controller to get product pricing information (`pricing:GetProducts`) for all related resources across all regions.\n\n```json\n{\n  \"Sid\": \"AllowPricingReadActions\",\n  \"Effect\": \"Allow\",\n  \"Resource\": \"*\",\n  \"Action\": \"pricing:GetProducts\"\n}\n```\n\n#### AllowUnscopedInstanceProfileListAction\n\nThe AllowUnscopedInstanceProfileListAction Sid gives the Karpenter controller permission to perform [`iam:ListInstanceProfiles`](https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListInstanceProfiles.html) action to list instance profiles.\n\n```json\n{\n  \"Sid\": \"AllowUnscopedInstanceProfileListAction\",\n  \"Effect\": \"Allow\",\n  \"Resource\": \"*\",\n  \"Action\": \"iam:ListInstanceProfiles\"\n}\n```\n\n#### AllowInstanceProfileReadActions\n\nThe AllowInstanceProfileReadActions Sid gives the Karpenter controller permission to perform [`iam:GetInstanceProfile`](https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetInstanceProfile.html) actions to retrieve information about a specified instance profile, including understanding if an instance profile has been provisioned for an `EC2NodeClass` or needs to be re-provisioned.\n\n```json\n{\n  \"Sid\": \"AllowInstanceProfileReadActions\",\n  \"Effect\": \"Allow\",\n  \"Resource\": \"arn:${AWS::Partition}:iam::${AWS::AccountId}:instance-profile/*\",\n  \"Action\": \"iam:GetInstanceProfile\"\n}\n```\n\n## Interruption Handling\n\nSettings in this section allow the Karpenter controller to stand-up an interruption queue to receive notification messages from other AWS services about the health and status of instances. For example, this interruption queue allows Karpenter to be aware of spot instance interruptions that are sent 2 minutes before spot instances are reclaimed by EC2. Adding this queue allows Karpenter to be proactive in migrating workloads to new nodes.\nSee the [Interruption]({{< relref \"../concepts/disruption#interruption\" >}}) section of the Disruption page for details.\n\nDefining the `KarpenterInterruptionQueuePolicy` allows Karpenter to see and respond to the following:\n\n* AWS health events\n* Spot interruptions\n* Spot rebalance recommendations\n* Instance state changes\n\nThe resources defined in this section include:\n\n* KarpenterInterruptionQueue\n* KarpenterInterruptionQueuePolicy\n* ScheduledChangeRule\n* SpotInterruptionRule\n* RebalanceRule\n* InstanceStateChangeRule\n\n### KarpenterInterruptionQueue\n\nThe [AWS::SQS::Queue](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sqs-queue.html) resource is used to create an Amazon SQS standard queue.\nProperties of that resource set the `QueueName` to the name of your cluster, the time for which SQS retains each message (`MessageRetentionPeriod`) to 300 seconds, and enabling serverside-side encryption using SQS owned encryption keys (`SqsManagedSseEnabled`) to `true`.\nSee [SetQueueAttributes](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SetQueueAttributes.html) for descriptions of some of these attributes.\n\n```yaml\nKarpenterInterruptionQueue:\n  Type: AWS::SQS::Queue\n  Properties:\n    QueueName: !Sub \"${ClusterName}\"\n    MessageRetentionPeriod: 300\n    SqsManagedSseEnabled: true\n```\n\n### KarpenterInterruptionQueuePolicy\n\nThe Karpenter interruption queue policy is created to allow AWS services that we want to receive instance notifications from to push notification messages to the queue.\nThe [AWS::SQS::QueuePolicy](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sqs-queuepolicy.html) resource here applies `EC2InterruptionPolicy` to the `KarpenterInterruptionQueue`. The policy allows [sqs:SendMessage](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html) actions to `events.amazonaws.com` and `sqs.amazonaws.com` services. It also allows the `GetAtt` function to get attributes from `KarpenterInterruptionQueue.Arn`.\nAdditionally, it only allows access to the queue using encrypted connections over HTTPS (TLS) to adhere to [Amazon SQS Security Best Practices](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-security-best-practices.html#enforce-encryption-data-in-transit).\n\n```yaml\nKarpenterInterruptionQueuePolicy:\n  Type: AWS::SQS::QueuePolicy\n  Properties:\n    Queues:\n      - !Ref KarpenterInterruptionQueue\n    PolicyDocument:\n      Id: EC2InterruptionPolicy\n      Statement:\n        - Effect: Allow\n          Principal:\n            Service:\n              - events.amazonaws.com\n              - sqs.amazonaws.com\n          Action: sqs:SendMessage\n          Resource: !GetAtt KarpenterInterruptionQueue.Arn\n        - Sid: DenyHTTP\n          Effect: Deny\n          Action: sqs:*\n          Resource: !GetAtt KarpenterInterruptionQueue.Arn\n          Condition:\n            Bool:\n              aws:SecureTransport: false\n          Principal: \"*\"\n```\n\n### Rules\n\nThis section allows Karpenter to gather [AWS Health Events](https://docs.aws.amazon.com/health/latest/ug/cloudwatch-events-health.html#about-public-events) and direct them to a queue where they can be consumed by Karpenter.\nThese rules include:\n\n* ScheduledChangeRule: The [AWS::Events::Rule](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-events-rule.html) creates a rule where the [EventPattern](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-patterns.html) is set to send events from the `aws.health` source to `KarpenterInterruptionQueue`.\n\n  ```yaml\n  ScheduledChangeRule:\n    Type: 'AWS::Events::Rule'\n    Properties:\n     EventPattern:\n       source:\n         - aws.health\n       detail-type:\n         - AWS Health Event\n     Targets:\n       - Id: KarpenterInterruptionQueueTarget\n         Arn: !GetAtt KarpenterInterruptionQueue.Arn\n  ```\n\n* SpotInterruptionRule: An EC2 Spot Instance Interruption warning tells you that AWS is about to reclaim a Spot instance you are using. This rule allows Karpenter to gather [EC2 Spot Instance Interruption Warning](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-interruptions.html) events and direct them to a queue where they can be consumed by Karpenter. In particular, the [AWS::Events::Rule](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-events-rule.html) here creates a rule where the [EventPattern](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-patterns.html) is set to send events from the `aws.ec2` source to `KarpenterInterruptionQueue`.\n\n  ```yaml\n  SpotInterruptionRule:\n    Type: 'AWS::Events::Rule'\n    Properties:\n      EventPattern:\n        source:\n          - aws.ec2\n        detail-type:\n          - EC2 Spot Instance Interruption Warning\n      Targets:\n        - Id: KarpenterInterruptionQueueTarget\n          Arn: !GetAtt KarpenterInterruptionQueue.Arn\n  ```\n\n* RebalanceRule: An EC2 Instance Rebalance Recommendation signal tells you that a Spot instance is at a heightened risk of being interrupted, allowing Karpenter to get new instances or simply rebalance workloads.  This rule allows Karpenter to gather [EC2 Instance Rebalance Recommendation](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/rebalance-recommendations.html) signals and direct them to a queue where they can be consumed by Karpenter. In particular, the [AWS::Events::Rule](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-events-rule.html) here creates a rule where the [EventPattern](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-patterns.html) is set to send events from the `aws.ec2` source to `KarpenterInterruptionQueue`.\n\n  ```yaml\n  RebalanceRule:\n   Type: 'AWS::Events::Rule'\n   Properties:\n     EventPattern:\n       source:\n         - aws.ec2\n       detail-type:\n         - EC2 Instance Rebalance Recommendation\n     Targets:\n       - Id: KarpenterInterruptionQueueTarget\n         Arn: !GetAtt KarpenterInterruptionQueue.Arn\n  ```\n\n* InstanceStateChangeRule: An EC2 Instance State-change Notification signal tells you that the state of an instance has changed to one of the following states: pending, running, stopping, stopped, shutting-down, or terminated. This rule allows Karpenter to gather [EC2 Instance State-change](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/monitoring-instance-state-changes.html) signals and direct them to a queue where they can be consumed by Karpenter. In particular, the [AWS::Events::Rule](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-events-rule.html) here creates a rule where the [EventPattern](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-patterns.html) is set to send events from the `aws.ec2` source to `KarpenterInterruptionQueue`.\n\n  ```yaml\n  InstanceStateChangeRule:\n   Type: 'AWS::Events::Rule'\n   Properties:\n     EventPattern:\n       source:\n         - aws.ec2\n       detail-type:\n         - EC2 Instance State-change Notification\n     Targets:\n       - Id: KarpenterInterruptionQueueTarget\n         Arn: !GetAtt KarpenterInterruptionQueue.Arn\n  ```\n\n* CapacityReservationInterruptionRule: An EC2 Capacity Reservation Interruption warning informs users that the capacity owner within an AWS Organization is reclaiming reserved capacity, triggering a notification for node reclamation. The [AWS::Events::Rule](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-events-rule.html) here creates a rule to send events from the `aws.ec2` source to `KarpenterInterruptionQueue`.\n\n  ```yaml\n  CapacityReservationInterruptionRule:\n   Type: 'AWS::Events::Rule'\n   Properties:\n     EventPattern:\n       source:\n         - aws.ec2\n       detail-type:\n         - EC2 Capacity Reservation Instance Interruption Warning\n     Targets:\n       - Id: KarpenterInterruptionQueueTarget\n         Arn: !GetAtt KarpenterInterruptionQueue.Arn\n  ```\n"
  },
  {
    "path": "website/content/en/docs/reference/instance-types.md",
    "content": "---\ntitle: \"Instance Types\"\nlinkTitle: \"Instance Types\"\nweight: 100\n\ndescription: >\n  Evaluate Instance Type Resources\n---\n<!-- this document is generated from hack/docs/instancetypes_gen/main.go -->\nAWS instance types offer varying resources and can be selected by labels. The values provided\nbelow are the resources available with some assumptions and after the instance overhead has been subtracted:\n- `blockDeviceMappings` are not configured\n- `amiFamily` is set to `AL2023`\n## a1 Family\n### `a1.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|a|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|a1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|500|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|a1.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|1392Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|10|\n### `a1.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|a|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|a1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|a1.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3055Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `a1.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|a|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|a1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|a1.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6525Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `a1.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|a|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|a1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|a1.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `a1.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|a|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|a1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|a1.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27322Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `a1.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|a|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|a1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|a1.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27322Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n## c1 Family\n### `c1.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|0|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|1740|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c1.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|1122Mi|\n |pods|12|\n### `c1.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|0|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|7168|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c1.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|5637Mi|\n |pods|58|\n## c3 Family\n### `c3.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|3840|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c3.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|2878Mi|\n |pods|29|\n### `c3.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|7680|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c3.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6111Mi|\n |pods|58|\n### `c3.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|15360|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c3.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|13215Mi|\n |pods|58|\n### `c3.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|30720|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c3.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|25487Mi|\n |pods|234|\n### `c3.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|61440|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c3.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|53903Mi|\n |pods|234|\n## c4 Family\n### `c4.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|3840|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c4.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|2878Mi|\n |pods|29|\n### `c4.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|7680|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c4.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6111Mi|\n |pods|58|\n### `c4.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|1000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|15360|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c4.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|13215Mi|\n |pods|58|\n### `c4.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|30720|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c4.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|25487Mi|\n |pods|234|\n### `c4.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|36|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|61440|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c4.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|35840m|\n |ephemeral-storage|17Gi|\n |memory|53903Mi|\n |pods|234|\n## c5 Family\n### `c5.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3114Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c5.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6584Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c5.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c5.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27381Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5.9xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|36|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|73728|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|9xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5.9xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|35840m|\n |ephemeral-storage|17Gi|\n |memory|65269Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|88002Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5.18xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|72|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|147456|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|18xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5.18xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|71750m|\n |ephemeral-storage|17Gi|\n |memory|127934Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c5.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c5.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## c5a Family\n### `c5a.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5a.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3114Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c5a.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5a.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6584Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c5a.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5a.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c5a.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5a.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27381Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5a.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5a.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5a.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5a.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|88002Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5a.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6300|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5a.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112779Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c5a.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5a.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## c5ad Family\n### `c5ad.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|75|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5ad.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3114Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c5ad.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|150|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5ad.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6584Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c5ad.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|300|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5ad.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c5ad.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|600|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5ad.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27381Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5ad.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1200|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5ad.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5ad.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1800|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5ad.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|88002Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5ad.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6300|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2400|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5ad.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112779Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c5ad.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5ad.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## c5d Family\n### `c5d.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|50|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5d.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3114Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c5d.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|100|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5d.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6584Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c5d.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|200|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5d.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c5d.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|400|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5d.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27381Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5d.9xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|36|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|900|\n |karpenter.k8s.aws/instance-memory|73728|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|9xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5d.9xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|35840m|\n |ephemeral-storage|17Gi|\n |memory|65269Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5d.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1800|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5d.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|88002Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5d.18xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|72|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1800|\n |karpenter.k8s.aws/instance-memory|147456|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|18xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5d.18xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|71750m|\n |ephemeral-storage|17Gi|\n |memory|127934Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c5d.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3600|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5d.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c5d.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3600|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5d.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## c5n Family\n### `c5n.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|5376|\n |karpenter.k8s.aws/instance-network-bandwidth|3000|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5n.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|4298Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c5n.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|10752|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5n.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|8952Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c5n.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|21504|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5n.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|18898Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c5n.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|43008|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5n.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|36853Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5n.9xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|36|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|9xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5n.9xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|35840m|\n |ephemeral-storage|17Gi|\n |memory|88002Mi|\n |pods|234|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5n.18xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|72|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|18xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5n.18xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|71750m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c5n.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|72|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5n.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|71750m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## c6a Family\n### `c6a.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6a.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3114Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c6a.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6a.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6584Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c6a.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6a.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c6a.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6a.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27381Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c6a.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6a.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `c6a.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6a.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|88002Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `c6a.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6a.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112779Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6a.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6a.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6a.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6a.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6a.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6a.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6a.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6a.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## c6g Family\n### `c6g.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|500|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6g.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|1392Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `c6g.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6g.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3055Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c6g.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6g.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6525Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c6g.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6g.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c6g.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6g.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27322Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c6g.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6g.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c6g.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14250|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6g.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|87943Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c6g.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6g.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6g.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6g.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## c6gd Family\n### `c6gd.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|59|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|500|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gd.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|1392Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `c6gd.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gd.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3055Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c6gd.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gd.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6525Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c6gd.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gd.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c6gd.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gd.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27322Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c6gd.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gd.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c6gd.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14250|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gd.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|87943Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c6gd.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gd.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6gd.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gd.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## c6gn Family\n### `c6gn.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6gn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|1600|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gn.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|1392Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `c6gn.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6gn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|3000|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gn.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3055Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c6gn.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6gn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|6300|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gn.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6525Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c6gn.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6gn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gn.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c6gn.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6gn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gn.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27322Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c6gn.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6gn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gn.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c6gn.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|28500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6gn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gn.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|87943Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c6gn.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|38000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6gn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gn.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## c6i Family\n### `c6i.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6i.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3114Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c6i.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6i.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6584Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c6i.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6i.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c6i.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6i.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27381Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c6i.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6i.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `c6i.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6i.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|88002Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `c6i.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6i.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112779Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6i.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6i.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6i.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6i.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6i.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6i.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## c6id Family\n### `c6id.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6id.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3114Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c6id.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6id.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6584Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c6id.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6id.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c6id.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6id.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27381Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c6id.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6id.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `c6id.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6id.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|88002Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `c6id.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6id.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112779Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6id.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|5700|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6id.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6id.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6id.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6id.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6id.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## c6in Family\n### `c6in.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6in.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3114Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c6in.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6in.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6584Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c6in.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6in.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c6in.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6in.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27381Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c6in.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6in.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `c6in.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|37500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6in.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|88002Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `c6in.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|50000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6in.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112779Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6in.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|75000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|150000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6in.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6in.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6in.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|237794Mi|\n |pods|394|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|106|\n### `c6in.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6in.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|237794Mi|\n |pods|394|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|106|\n## c7a Family\n### `c7a.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|390|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7a.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|1451Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `c7a.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7a.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3114Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c7a.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7a.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6584Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c7a.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7a.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c7a.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7a.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27381Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c7a.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7a.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `c7a.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7a.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|88002Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `c7a.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7a.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112779Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c7a.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7a.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c7a.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7a.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c7a.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7a.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c7a.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7a.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## c7g Family\n### `c7g.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|520|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7g.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|1392Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `c7g.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7g.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3055Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c7g.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1876|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7g.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6525Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c7g.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7g.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c7g.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7g.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27322Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c7g.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7g.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c7g.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7g.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|87943Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c7g.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7g.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c7g.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7g.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## c7gd Family\n### `c7gd.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|59|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|520|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gd.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|1392Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `c7gd.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gd.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3055Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c7gd.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1876|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gd.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6525Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c7gd.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gd.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c7gd.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gd.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27322Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c7gd.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gd.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c7gd.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gd.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|87943Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c7gd.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gd.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c7gd.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gd.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## c7gn Family\n### `c7gn.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gn|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gn.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|1392Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `c7gn.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gn|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gn.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3055Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c7gn.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gn|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gn.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6525Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c7gn.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gn|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gn.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c7gn.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gn|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gn.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27322Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c7gn.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gn|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gn.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c7gn.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gn|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|150000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gn.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|87943Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c7gn.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gn|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gn.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c7gn.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gn|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gn.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## c7i Family\n### `c7i.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3114Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c7i.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6584Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c7i.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c7i.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27381Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c7i.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `c7i.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|88002Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `c7i.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112779Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c7i.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c7i.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c7i.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c7i.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## c7i-flex Family\n### `c7i-flex.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i-flex|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|390|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i-flex.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3114Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|3|\n### `c7i-flex.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i-flex|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i-flex.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6584Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|8|\n### `c7i-flex.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i-flex|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i-flex.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c7i-flex.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i-flex|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i-flex.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27381Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|34|\n### `c7i-flex.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i-flex|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i-flex.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c7i-flex.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i-flex|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|9375|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i-flex.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|88002Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `c7i-flex.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i-flex|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i-flex.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112779Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## c8a Family\n### `c8a.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|520|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8a.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|1451Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `c8a.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8a.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|2784Mi|\n |pods|59|\n |vpc.amazonaws.com/pod-eni|9|\n### `c8a.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8a.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6364Mi|\n |pods|78|\n |vpc.amazonaws.com/pod-eni|18|\n### `c8a.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8a.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|13062Mi|\n |pods|158|\n |vpc.amazonaws.com/pod-eni|38|\n### `c8a.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8a.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|26501Mi|\n |pods|314|\n |vpc.amazonaws.com/pod-eni|54|\n### `c8a.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8a.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|55953Mi|\n |pods|392|\n |vpc.amazonaws.com/pod-eni|82|\n### `c8a.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8a.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|82238Mi|\n |pods|758|\n |vpc.amazonaws.com/pod-eni|110|\n### `c8a.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8a.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|109776Mi|\n |pods|1010|\n |vpc.amazonaws.com/pod-eni|106|\n### `c8a.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8a.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|170397Mi|\n |pods|1010|\n |vpc.amazonaws.com/pod-eni|106|\n### `c8a.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8a.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|170397Mi|\n |pods|1010|\n |vpc.amazonaws.com/pod-eni|106|\n### `c8a.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8a.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|346715Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n### `c8a.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8a.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|346715Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n## c8g Family\n### `c8g.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|520|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8g.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|1392Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `c8g.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8g.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3055Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c8g.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8g.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6525Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c8g.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8g.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c8g.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8g.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27322Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c8g.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8g.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c8g.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8g.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|87943Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c8g.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8g.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c8g.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8g.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173341Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c8g.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8g.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173341Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c8g.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8g.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|355203Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c8g.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8g.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|355203Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## c8gb Family\n### `c8gb.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|2083|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gb.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|1392Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `c8gb.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|4166|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gb.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3055Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c8gb.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|8333|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gb.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6525Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c8gb.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|16666|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gb.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c8gb.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|33330|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gb.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27322Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c8gb.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|50000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|66660|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gb.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|56994Mi|\n |pods|292|\n |vpc.amazonaws.com/pod-eni|52|\n### `c8gb.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|75000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gb.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|86667Mi|\n |pods|350|\n |vpc.amazonaws.com/pod-eni|50|\n### `c8gb.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|133330|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gb.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112181Mi|\n |pods|786|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|106|\n### `c8gb.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|150000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gb.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|168490Mi|\n |pods|1178|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n### `c8gb.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|150000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gb.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|168490Mi|\n |pods|1178|\n |vpc.amazonaws.com/efa|1|\n### `c8gb.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|300000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gb.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|356820Mi|\n |pods|590|\n |vpc.amazonaws.com/efa|2|\n### `c8gb.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|300000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gb.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|356820Mi|\n |pods|590|\n |vpc.amazonaws.com/efa|2|\n## c8gd Family\n### `c8gd.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|59|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|520|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gd.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|1392Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `c8gd.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gd.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3055Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c8gd.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gd.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6525Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c8gd.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gd.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c8gd.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gd.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27322Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c8gd.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gd.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c8gd.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gd.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|87943Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c8gd.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gd.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c8gd.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|5700|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gd.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173341Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c8gd.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|5700|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gd.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173341Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c8gd.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|11400|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gd.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|355203Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c8gd.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|11400|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gd.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|355203Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## c8gn Family\n### `c8gn.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gn.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|1392Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `c8gn.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gn.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3055Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c8gn.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gn.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6525Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c8gn.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gn.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c8gn.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gn.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27322Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c8gn.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gn.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|56994Mi|\n |pods|292|\n |vpc.amazonaws.com/pod-eni|52|\n### `c8gn.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|150000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gn.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|86667Mi|\n |pods|350|\n |vpc.amazonaws.com/pod-eni|50|\n### `c8gn.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gn.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112181Mi|\n |pods|786|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|106|\n### `c8gn.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|300000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gn.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|168490Mi|\n |pods|1178|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n### `c8gn.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|300000|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gn.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|168490Mi|\n |pods|1178|\n |vpc.amazonaws.com/efa|1|\n### `c8gn.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|600000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gn.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|356820Mi|\n |pods|590|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|98|\n### `c8gn.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|600000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gn.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|356820Mi|\n |pods|590|\n |vpc.amazonaws.com/efa|2|\n## c8i Family\n### `c8i.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8i.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|2784Mi|\n |pods|59|\n |vpc.amazonaws.com/pod-eni|9|\n### `c8i.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8i.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|5924Mi|\n |pods|118|\n |vpc.amazonaws.com/pod-eni|18|\n### `c8i.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8i.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|13502Mi|\n |pods|118|\n |vpc.amazonaws.com/pod-eni|38|\n### `c8i.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8i.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|25621Mi|\n |pods|394|\n |vpc.amazonaws.com/pod-eni|54|\n### `c8i.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8i.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|54853Mi|\n |pods|492|\n |vpc.amazonaws.com/pod-eni|82|\n### `c8i.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8i.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|84086Mi|\n |pods|590|\n |vpc.amazonaws.com/pod-eni|110|\n### `c8i.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8i.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|109776Mi|\n |pods|1010|\n |vpc.amazonaws.com/pod-eni|106|\n### `c8i.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8i.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|170397Mi|\n |pods|1010|\n |vpc.amazonaws.com/pod-eni|106|\n### `c8i.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8i.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|225474Mi|\n |pods|1514|\n |vpc.amazonaws.com/pod-eni|98|\n### `c8i.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8i.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|346715Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n### `c8i.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8i.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|346715Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n### `c8i.96xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|384|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|96xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8i.96xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|382970m|\n |ephemeral-storage|17Gi|\n |memory|710440Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n### `c8i.metal-96xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|384|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal-96xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8i.metal-96xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|382970m|\n |ephemeral-storage|17Gi|\n |memory|710440Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n## c8i-flex Family\n### `c8i-flex.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|468|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8i-flex.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|2784Mi|\n |pods|59|\n |vpc.amazonaws.com/pod-eni|3|\n### `c8i-flex.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8i-flex.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|5924Mi|\n |pods|118|\n |vpc.amazonaws.com/pod-eni|8|\n### `c8i-flex.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8i-flex.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|13502Mi|\n |pods|118|\n |vpc.amazonaws.com/pod-eni|18|\n### `c8i-flex.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8i-flex.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|25621Mi|\n |pods|394|\n |vpc.amazonaws.com/pod-eni|34|\n### `c8i-flex.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8i-flex.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|54853Mi|\n |pods|492|\n |vpc.amazonaws.com/pod-eni|52|\n### `c8i-flex.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|11250|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8i-flex.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|84086Mi|\n |pods|590|\n |vpc.amazonaws.com/pod-eni|110|\n### `c8i-flex.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8i-flex.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|109776Mi|\n |pods|1010|\n |vpc.amazonaws.com/pod-eni|106|\n## c8id Family\n### `c8id.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8id.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|2784Mi|\n |pods|59|\n### `c8id.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8id.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|5924Mi|\n |pods|118|\n### `c8id.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8id.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|13502Mi|\n |pods|118|\n### `c8id.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8id.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|25621Mi|\n |pods|394|\n### `c8id.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8id.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|54853Mi|\n |pods|492|\n### `c8id.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8id.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|84086Mi|\n |pods|590|\n### `c8id.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8id.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|109776Mi|\n |pods|1010|\n### `c8id.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|5700|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8id.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|170397Mi|\n |pods|1010|\n### `c8id.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8id.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|225474Mi|\n |pods|1514|\n### `c8id.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|11400|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8id.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|346715Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n### `c8id.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|11400|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8id.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|346715Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n### `c8id.96xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|384|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|22800|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-size|96xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8id.96xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|382970m|\n |ephemeral-storage|17Gi|\n |memory|710440Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n### `c8id.metal-96xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|384|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|22800|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-size|metal-96xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8id.metal-96xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|382970m|\n |ephemeral-storage|17Gi|\n |memory|710440Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n## d2 Family\n### `d2.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|d2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|31232|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d2.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|27896Mi|\n |pods|58|\n### `d2.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|1000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|d2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|62464|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d2.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|56786Mi|\n |pods|58|\n### `d2.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|d2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|124928|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d2.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|112629Mi|\n |pods|234|\n### `d2.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|36|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|d2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|249856|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d2.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|35840m|\n |ephemeral-storage|17Gi|\n |memory|228187Mi|\n |pods|234|\n## d3 Family\n### `d3.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|d3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|5940|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|3000|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d3.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29845Mi|\n |pods|10|\n |vpc.amazonaws.com/pod-eni|42|\n### `d3.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|d3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|11880|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|6000|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d3.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|60067Mi|\n |pods|18|\n |vpc.amazonaws.com/pod-eni|92|\n### `d3.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|d3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|23760|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d3.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|120468Mi|\n |pods|38|\n |vpc.amazonaws.com/pod-eni|118|\n### `d3.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|5000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|d3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|47520|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d3.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|241479Mi|\n |pods|59|\n |vpc.amazonaws.com/pod-eni|119|\n## d3en Family\n### `d3en.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|d3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|27960|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|6000|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d3en.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14690Mi|\n |pods|10|\n |vpc.amazonaws.com/pod-eni|24|\n### `d3en.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|d3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|55920|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d3en.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29757Mi|\n |pods|18|\n |vpc.amazonaws.com/pod-eni|58|\n### `d3en.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|d3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|111840|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d3en.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|59847Mi|\n |pods|38|\n |vpc.amazonaws.com/pod-eni|118|\n### `d3en.6xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|24|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|d3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|167760|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|6xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d3en.6xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|23870m|\n |ephemeral-storage|17Gi|\n |memory|89938Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|118|\n### `d3en.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|5000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|d3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|223680|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d3en.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|120028Mi|\n |pods|78|\n |vpc.amazonaws.com/pod-eni|118|\n### `d3en.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|7000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|d3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|335520|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d3en.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|180528Mi|\n |pods|89|\n |vpc.amazonaws.com/pod-eni|119|\n## dl1 Family\n### `dl1.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|dl|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|dl1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-gpu-count|8|\n |karpenter.k8s.aws/instance-gpu-manufacturer|habana|\n |karpenter.k8s.aws/instance-gpu-memory|32768|\n |karpenter.k8s.aws/instance-gpu-name|gaudi-hl-205|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|4000|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|400000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|dl1.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |habana.ai/gaudi|8|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|4|\n |vpc.amazonaws.com/pod-eni|62|\n## dl2q Family\n### `dl2q.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-accelerator-count|8|\n |karpenter.k8s.aws/instance-accelerator-manufacturer|qualcomm|\n |karpenter.k8s.aws/instance-accelerator-name|qualcomm-ai100|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|dl|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|dl2q|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|dl2q.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## f1 Family\n### `f1.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|f|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|1700|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|f1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-local-nvme|470|\n |karpenter.k8s.aws/instance-memory|124928|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|f1.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|114565Mi|\n |pods|58|\n### `f1.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|f|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|f1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-local-nvme|940|\n |karpenter.k8s.aws/instance-memory|249856|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|f1.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|228187Mi|\n |pods|234|\n### `f1.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|f|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|f1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-local-nvme|3760|\n |karpenter.k8s.aws/instance-memory|999424|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|f1.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|919778Mi|\n |pods|394|\n## f2 Family\n### `f2.6xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|f|\n |karpenter.k8s.aws/instance-cpu|24|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|7500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|f2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|940|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|6xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|f2.6xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|23870m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `f2.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|f|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|f2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1880|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|f2.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|482037Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `f2.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|f|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|f2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7520|\n |karpenter.k8s.aws/instance-memory|2097152|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|f2.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1931403Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## g4ad Family\n### `g4ad.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g4ad|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-gpu-memory|8192|\n |karpenter.k8s.aws/instance-gpu-name|radeon-pro-v520|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|150|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2000|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g4ad.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |amd.com/gpu|1|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14712Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|12|\n### `g4ad.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g4ad|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-gpu-memory|8192|\n |karpenter.k8s.aws/instance-gpu-name|radeon-pro-v520|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|300|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|4167|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g4ad.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |amd.com/gpu|1|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29867Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|12|\n### `g4ad.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g4ad|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-gpu-memory|8192|\n |karpenter.k8s.aws/instance-gpu-name|radeon-pro-v520|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|600|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|8333|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g4ad.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |amd.com/gpu|1|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|59946Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|11|\n### `g4ad.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g4ad|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-gpu-count|2|\n |karpenter.k8s.aws/instance-gpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-gpu-memory|8192|\n |karpenter.k8s.aws/instance-gpu-name|radeon-pro-v520|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1200|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g4ad.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |amd.com/gpu|2|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|120248Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|10|\n### `g4ad.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6300|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g4ad|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-gpu-count|4|\n |karpenter.k8s.aws/instance-gpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-gpu-memory|8192|\n |karpenter.k8s.aws/instance-gpu-name|radeon-pro-v520|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2400|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g4ad.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |amd.com/gpu|4|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|6|\n## g4dn Family\n### `g4dn.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g4dn|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|t4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|125|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g4dn.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |nvidia.com/gpu|1|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|39|\n### `g4dn.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g4dn|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|t4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|225|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g4dn.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29636Mi|\n |nvidia.com/gpu|1|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|39|\n### `g4dn.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g4dn|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|t4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|225|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g4dn.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|59946Mi|\n |nvidia.com/gpu|1|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|59|\n### `g4dn.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g4dn|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|t4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|900|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g4dn.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|120248Mi|\n |nvidia.com/gpu|1|\n |pods|58|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|58|\n### `g4dn.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g4dn|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-gpu-count|4|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|t4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|900|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g4dn.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |nvidia.com/gpu|4|\n |pods|234|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|54|\n### `g4dn.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g4dn|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|t4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|900|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g4dn.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|241490Mi|\n |nvidia.com/gpu|1|\n |pods|58|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|118|\n### `g4dn.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g4dn|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-gpu-count|8|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|t4|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|1800|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g4dn.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |nvidia.com/gpu|8|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## g5 Family\n### `g5.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|a10g|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|250|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |nvidia.com/gpu|1|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|4|\n### `g5.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|a10g|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|450|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |nvidia.com/gpu|1|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|17|\n### `g5.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|a10g|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|600|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |nvidia.com/gpu|1|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|34|\n### `g5.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|16000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|a10g|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|900|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |nvidia.com/gpu|1|\n |pods|234|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|84|\n### `g5.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|16000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|4|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|a10g|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |nvidia.com/gpu|4|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `g5.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|16000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|a10g|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |nvidia.com/gpu|1|\n |pods|234|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|114|\n### `g5.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|4|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|a10g|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |nvidia.com/gpu|4|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `g5.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|8|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|a10g|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|723299Mi|\n |nvidia.com/gpu|8|\n |pods|345|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|115|\n## g5g Family\n### `g5g.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|g5g|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|t4g|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5g.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6525Mi|\n |nvidia.com/gpu|1|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `g5g.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|g5g|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|t4g|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5g.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |nvidia.com/gpu|1|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `g5g.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|g5g|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|t4g|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5g.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27322Mi|\n |nvidia.com/gpu|1|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `g5g.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|g5g|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|t4g|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5g.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |nvidia.com/gpu|1|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `g5g.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|g5g|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|2|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|t4g|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5g.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |nvidia.com/gpu|2|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `g5g.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|g5g|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|2|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|t4g|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5g.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |nvidia.com/gpu|2|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## g6 Family\n### `g6.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|5000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|250|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |nvidia.com/gpu|1|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `g6.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|5000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|450|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |nvidia.com/gpu|1|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `g6.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|8000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|600|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |nvidia.com/gpu|1|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `g6.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|16000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|900|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |nvidia.com/gpu|1|\n |pods|234|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|84|\n### `g6.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|4|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3760|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |nvidia.com/gpu|4|\n |pods|234|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|114|\n### `g6.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1880|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |nvidia.com/gpu|1|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `g6.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|4|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3760|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |nvidia.com/gpu|4|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `g6.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|8|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7520|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |nvidia.com/gpu|8|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## g6e Family\n### `g6e.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|5000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6e|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|45776|\n |karpenter.k8s.aws/instance-gpu-name|l40s|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|250|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6e.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |nvidia.com/gpu|1|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `g6e.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|5000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6e|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|45776|\n |karpenter.k8s.aws/instance-gpu-name|l40s|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|450|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6e.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |nvidia.com/gpu|1|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `g6e.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|8000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6e|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|45776|\n |karpenter.k8s.aws/instance-gpu-name|l40s|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|600|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6e.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |nvidia.com/gpu|1|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `g6e.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|16000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6e|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|45776|\n |karpenter.k8s.aws/instance-gpu-name|l40s|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|900|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6e.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |nvidia.com/gpu|1|\n |pods|234|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|84|\n### `g6e.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6e|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|4|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|45776|\n |karpenter.k8s.aws/instance-gpu-name|l40s|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6e.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360157Mi|\n |nvidia.com/gpu|4|\n |pods|292|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|112|\n### `g6e.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6e|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|45776|\n |karpenter.k8s.aws/instance-gpu-name|l40s|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|35000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6e.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |nvidia.com/gpu|1|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `g6e.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6e|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|4|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|45776|\n |karpenter.k8s.aws/instance-gpu-name|l40s|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6e.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|721682Mi|\n |nvidia.com/gpu|4|\n |pods|492|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|102|\n### `g6e.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6e|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|8|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|45776|\n |karpenter.k8s.aws/instance-gpu-name|l40s|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|400000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6e.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1449132Mi|\n |nvidia.com/gpu|8|\n |pods|492|\n |vpc.amazonaws.com/efa|4|\n |vpc.amazonaws.com/pod-eni|82|\n## g6f Family\n### `g6f.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|5000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6f|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|0|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|2861|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|100|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1500|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6f.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|7002Mi|\n |pods|20|\n |vpc.amazonaws.com/pod-eni|10|\n### `g6f.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|5000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6f|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|0|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|2861|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|100|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6f.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `g6f.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|5000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6f|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|0|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|5722|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|200|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6f.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `g6f.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6f|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|0|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|11444|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|450|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6f.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n## g7e Family\n### `g7e.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|5000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g7e|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|98304|\n |karpenter.k8s.aws/instance-gpu-name|rtx-pro-server-6000|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g7e.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|57471Mi|\n |nvidia.com/gpu|1|\n |pods|254|\n### `g7e.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|8000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g7e|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|98304|\n |karpenter.k8s.aws/instance-gpu-name|rtx-pro-server-6000|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g7e.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|115320Mi|\n |nvidia.com/gpu|1|\n |pods|506|\n### `g7e.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|16000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g7e|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|98304|\n |karpenter.k8s.aws/instance-gpu-name|rtx-pro-server-6000|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g7e.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|236562Mi|\n |nvidia.com/gpu|1|\n |pods|506|\n |vpc.amazonaws.com/efa|1|\n### `g7e.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g7e|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-gpu-count|2|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|98304|\n |karpenter.k8s.aws/instance-gpu-name|rtx-pro-server-6000|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|400000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g7e.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|477659Mi|\n |nvidia.com/gpu|2|\n |pods|632|\n |vpc.amazonaws.com/efa|1|\n### `g7e.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|50000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g7e|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-gpu-count|4|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|98304|\n |karpenter.k8s.aws/instance-gpu-name|rtx-pro-server-6000|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|800000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g7e.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|962625Mi|\n |nvidia.com/gpu|4|\n |pods|632|\n |vpc.amazonaws.com/efa|2|\n### `g7e.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g7e|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-gpu-count|8|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|98304|\n |karpenter.k8s.aws/instance-gpu-name|rtx-pro-server-6000|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|15200|\n |karpenter.k8s.aws/instance-memory|2097152|\n |karpenter.k8s.aws/instance-network-bandwidth|1600000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g7e.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1932558Mi|\n |nvidia.com/gpu|8|\n |pods|632|\n |vpc.amazonaws.com/efa|4|\n## gr6 Family\n### `gr6.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|gr|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|8000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|gr6|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|600|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|gr6.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |nvidia.com/gpu|1|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `gr6.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|gr|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|16000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|gr6|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|900|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|gr6.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |nvidia.com/gpu|1|\n |pods|234|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|84|\n## gr6f Family\n### `gr6f.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|gr|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|8000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|gr6f|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|0|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|11444|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|450|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|gr6f.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n## h1 Family\n### `h1.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|h|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|1750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|h1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|h1.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n### `h1.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|h|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|h1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|h1.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n### `h1.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|h|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|7000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|h1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|h1.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n### `h1.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|h|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|h1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|h1.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|237794Mi|\n |pods|394|\n## hpc6a Family\n### `hpc6a.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|hpc|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|hpc6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|hpc6a.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|362269Mi|\n |pods|100|\n |vpc.amazonaws.com/efa|1|\n## hpc6id Family\n### `hpc6id.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|hpc|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|hpc6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|15200|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|hpc6id.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|969016Mi|\n |pods|51|\n |vpc.amazonaws.com/efa|2|\n## hpc7a Family\n### `hpc7a.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|hpc|\n |karpenter.k8s.aws/instance-cpu|24|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|hpc7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|300000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|hpc7a.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|23870m|\n |ephemeral-storage|17Gi|\n |memory|725994Mi|\n |pods|100|\n |vpc.amazonaws.com/efa|2|\n### `hpc7a.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|hpc|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|hpc7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|300000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|hpc7a.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|725994Mi|\n |pods|100|\n |vpc.amazonaws.com/efa|2|\n### `hpc7a.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|hpc|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|hpc7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|300000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|hpc7a.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|725994Mi|\n |pods|100|\n |vpc.amazonaws.com/efa|2|\n### `hpc7a.96xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|hpc|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|hpc7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|300000|\n |karpenter.k8s.aws/instance-size|96xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|hpc7a.96xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|725994Mi|\n |pods|100|\n |vpc.amazonaws.com/efa|2|\n## hpc7g Family\n### `hpc7g.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|hpc|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|hpc7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|hpc7g.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118649Mi|\n |pods|198|\n |vpc.amazonaws.com/efa|1|\n### `hpc7g.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|hpc|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|hpc7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|hpc7g.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118649Mi|\n |pods|198|\n |vpc.amazonaws.com/efa|1|\n### `hpc7g.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|hpc|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|hpc7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|hpc7g.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|118649Mi|\n |pods|198|\n |vpc.amazonaws.com/efa|1|\n## hpc8a Family\n### `hpc8a.96xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|hpc|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|hpc8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-size|96xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|hpc8a.96xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|725994Mi|\n |pods|100|\n |vpc.amazonaws.com/efa|2|\n## i2 Family\n### `i2.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|i2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|31232|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i2.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|27896Mi|\n |pods|58|\n### `i2.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|i2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|62464|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i2.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|56786Mi|\n |pods|58|\n### `i2.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|i2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|124928|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i2.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|112629Mi|\n |pods|234|\n### `i2.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|i2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|249856|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i2.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|228187Mi|\n |pods|234|\n## i3 Family\n### `i3.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|425|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|i3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-local-nvme|475|\n |karpenter.k8s.aws/instance-memory|15616|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|13770Mi|\n |pods|29|\n### `i3.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|850|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|i3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|31232|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|27896Mi|\n |pods|58|\n### `i3.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|1700|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|i3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|62464|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|56786Mi|\n |pods|58|\n### `i3.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|i3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|124928|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|112629Mi|\n |pods|234|\n### `i3.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|7000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|i3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|249856|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|228187Mi|\n |pods|234|\n### `i3.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|i3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-local-nvme|15200|\n |karpenter.k8s.aws/instance-memory|499712|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|453771Mi|\n |pods|737|\n## i3en Family\n### `i3en.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1250|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2100|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3en.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|5|\n### `i3en.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2500|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|4200|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3en.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|12|\n### `i3en.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|5000|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|8400|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3en.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|28|\n### `i3en.3xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|12|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7500|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|3xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3en.3xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|11900m|\n |ephemeral-storage|17Gi|\n |memory|89938Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `i3en.6xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|24|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|15000|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|6xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3en.6xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|23870m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `i3en.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|30000|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3en.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|54|\n### `i3en.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|60000|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3en.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `i3en.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|60000|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3en.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## i4g Family\n### `i4g.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4g|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|468|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4g.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14422Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `i4g.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4g|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|937|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4g.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `i4g.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4g|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1875|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|4687|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4g.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59568Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `i4g.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4g|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3750|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|9375|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4g.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `i4g.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4g|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7500|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4g.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239495Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `i4g.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4g|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|15000|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4g.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476445Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## i4i Family\n### `i4i.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4i|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|468|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4i.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n### `i4i.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4i|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|937|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4i.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|6|\n### `i4i.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4i|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1875|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|4687|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4i.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|26|\n### `i4i.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4i|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3750|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|9375|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4i.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|52|\n### `i4i.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4i|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7500|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4i.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|112|\n### `i4i.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4i|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|11250|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|28120|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4i.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|112|\n### `i4i.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4i|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|15000|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4i.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|120|\n### `i4i.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4i|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|22500|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|56250|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4i.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|722287Mi|\n |pods|437|\n |vpc.amazonaws.com/pod-eni|105|\n### `i4i.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4i|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|30000|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4i.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|961470Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|120|\n### `i4i.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4i|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|30000|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4i.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|961470Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|120|\n## i7i Family\n### `i7i.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|468|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1171|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7i.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `i7i.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|937|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|2343|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7i.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `i7i.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1875|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|4687|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7i.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `i7i.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3750|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|9375|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7i.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `i7i.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7500|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7i.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `i7i.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|11250|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|28120|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7i.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `i7i.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|15000|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7i.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `i7i.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|22500|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|56250|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7i.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `i7i.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|22500|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|56250|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7i.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `i7i.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|45000|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7i.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446437Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `i7i.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|45000|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7i.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446437Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## i7ie Family\n### `i7ie.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7ie|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1250|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2083|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7ie.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|19|\n### `i7ie.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7ie|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2500|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|4166|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7ie.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|27|\n### `i7ie.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7ie|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|5000|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|8333|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7ie.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|27|\n### `i7ie.3xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|12|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7ie|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7500|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|3xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7ie.3xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|11900m|\n |ephemeral-storage|17Gi|\n |memory|89938Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|27|\n### `i7ie.6xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|24|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7ie|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|15000|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|6xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7ie.6xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|23870m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `i7ie.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7ie|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|30000|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7ie.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|359035Mi|\n |pods|394|\n |vpc.amazonaws.com/pod-eni|54|\n### `i7ie.18xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|72|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|22500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7ie|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|45000|\n |karpenter.k8s.aws/instance-memory|589824|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|18xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7ie.18xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|71750m|\n |ephemeral-storage|17Gi|\n |memory|537125Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `i7ie.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7ie|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|60000|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7ie.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `i7ie.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7ie|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|60000|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7ie.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `i7ie.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7ie|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|120000|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7ie.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446437Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `i7ie.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7ie|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|120000|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7ie.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446437Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## i8g Family\n### `i8g.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|468|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1172|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8g.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14422Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `i8g.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|937|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|2344|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8g.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `i8g.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1875|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|4688|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8g.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59568Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `i8g.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3750|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|9375|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8g.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `i8g.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7500|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8g.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239495Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `i8g.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|11250|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|28120|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8g.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360736Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `i8g.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|15000|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8g.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476445Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `i8g.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|22500|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|56250|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8g.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718928Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `i8g.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|22500|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|56250|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8g.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718928Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `i8g.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|45000|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8g.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446378Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `i8g.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|45000|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8g.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446378Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n## i8ge Family\n### `i8ge.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8ge|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1250|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2100|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8ge.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14422Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|19|\n### `i8ge.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8ge|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2500|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|4200|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8ge.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|27|\n### `i8ge.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8ge|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|5000|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|8400|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8ge.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59568Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|27|\n### `i8ge.3xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|12|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8ge|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7500|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|3xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8ge.3xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|11900m|\n |ephemeral-storage|17Gi|\n |memory|88581Mi|\n |pods|176|\n |vpc.amazonaws.com/pod-eni|25|\n### `i8ge.6xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|24|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8ge|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|15000|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|6xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8ge.6xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|23870m|\n |ephemeral-storage|17Gi|\n |memory|178236Mi|\n |pods|292|\n |vpc.amazonaws.com/pod-eni|52|\n### `i8ge.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8ge|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|30000|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8ge.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|359460Mi|\n |pods|350|\n |vpc.amazonaws.com/pod-eni|50|\n### `i8ge.18xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|72|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|22500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8ge|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|45000|\n |karpenter.k8s.aws/instance-memory|589824|\n |karpenter.k8s.aws/instance-network-bandwidth|112500|\n |karpenter.k8s.aws/instance-size|18xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8ge.18xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|71750m|\n |ephemeral-storage|17Gi|\n |memory|536527Mi|\n |pods|786|\n |vpc.amazonaws.com/pod-eni|106|\n### `i8ge.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8ge|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|60000|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|150000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8ge.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718389Mi|\n |pods|786|\n |vpc.amazonaws.com/pod-eni|106|\n### `i8ge.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8ge|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|60000|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|150000|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8ge.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718389Mi|\n |pods|786|\n |vpc.amazonaws.com/pod-eni|106|\n### `i8ge.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8ge|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|120000|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|180000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8ge.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1441527Mi|\n |pods|1178|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n### `i8ge.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8ge|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|120000|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|180000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8ge.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1441527Mi|\n |pods|1178|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n## im4gn Family\n### `im4gn.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|im|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|im4gn|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|937|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|im4gn.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6844Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `im4gn.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|im|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|im4gn|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1875|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|im4gn.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `im4gn.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|im|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|im4gn|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3750|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|im4gn.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `im4gn.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|im|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|im4gn|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7500|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|im4gn.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `im4gn.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|im|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|im4gn|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|15000|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|im4gn.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `im4gn.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|im|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|im4gn|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|30000|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|im4gn.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|233962Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## inf1 Family\n### `inf1.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-accelerator-count|1|\n |karpenter.k8s.aws/instance-accelerator-manufacturer|aws|\n |karpenter.k8s.aws/instance-accelerator-name|inferentia|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|inf|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|inf1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|inf1.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |aws.amazon.com/neuron|1|\n |aws.amazon.com/neuroncore|4|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6804Mi|\n |pods|38|\n |vpc.amazonaws.com/pod-eni|38|\n### `inf1.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-accelerator-count|1|\n |karpenter.k8s.aws/instance-accelerator-manufacturer|aws|\n |karpenter.k8s.aws/instance-accelerator-name|inferentia|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|inf|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|inf1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|inf1.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |aws.amazon.com/neuron|1|\n |aws.amazon.com/neuroncore|4|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14382Mi|\n |pods|38|\n |vpc.amazonaws.com/pod-eni|38|\n### `inf1.6xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-accelerator-count|4|\n |karpenter.k8s.aws/instance-accelerator-manufacturer|aws|\n |karpenter.k8s.aws/instance-accelerator-name|inferentia|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|inf|\n |karpenter.k8s.aws/instance-cpu|24|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|inf1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|49152|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|6xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|inf1.6xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |aws.amazon.com/neuron|4|\n |aws.amazon.com/neuroncore|16|\n |cpu|23870m|\n |ephemeral-storage|17Gi|\n |memory|42536Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `inf1.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-accelerator-count|16|\n |karpenter.k8s.aws/instance-accelerator-manufacturer|aws|\n |karpenter.k8s.aws/instance-accelerator-name|inferentia|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|inf|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|inf1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|inf1.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |aws.amazon.com/neuron|16|\n |aws.amazon.com/neuroncore|64|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|177976Mi|\n |pods|321|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|111|\n## inf2 Family\n### `inf2.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-accelerator-count|1|\n |karpenter.k8s.aws/instance-accelerator-manufacturer|aws|\n |karpenter.k8s.aws/instance-accelerator-name|inferentia2|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|inf|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|inf2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2083|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|inf2.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |aws.amazon.com/neuron|1|\n |aws.amazon.com/neuroncore|2|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `inf2.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-accelerator-count|1|\n |karpenter.k8s.aws/instance-accelerator-manufacturer|aws|\n |karpenter.k8s.aws/instance-accelerator-name|inferentia2|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|inf|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|inf2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|16667|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|inf2.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |aws.amazon.com/neuron|1|\n |aws.amazon.com/neuroncore|2|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `inf2.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-accelerator-count|6|\n |karpenter.k8s.aws/instance-accelerator-manufacturer|aws|\n |karpenter.k8s.aws/instance-accelerator-name|inferentia2|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|inf|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|inf2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|inf2.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |aws.amazon.com/neuron|6|\n |aws.amazon.com/neuroncore|12|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `inf2.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-accelerator-count|12|\n |karpenter.k8s.aws/instance-accelerator-manufacturer|aws|\n |karpenter.k8s.aws/instance-accelerator-name|inferentia2|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|inf|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|inf2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|inf2.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |aws.amazon.com/neuron|12|\n |aws.amazon.com/neuroncore|24|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## is4gen Family\n### `is4gen.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|is|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|is4gen|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|937|\n |karpenter.k8s.aws/instance-memory|6144|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|is4gen.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|5181Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `is4gen.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|is|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|is4gen|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1875|\n |karpenter.k8s.aws/instance-memory|12288|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|is4gen.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|10633Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `is4gen.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|is|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|is4gen|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3750|\n |karpenter.k8s.aws/instance-memory|24576|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|is4gen.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|21680Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `is4gen.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|is|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|is4gen|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7500|\n |karpenter.k8s.aws/instance-memory|49152|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|is4gen.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|44413Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `is4gen.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|is|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|is4gen|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|15000|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|is4gen.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|87943Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `is4gen.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|is|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|is4gen|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|30000|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|is4gen.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|178874Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n## m1 Family\n### `m1.small`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|0|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|1740|\n |karpenter.k8s.aws/instance-size|small|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m1.small|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|1166Mi|\n |pods|8|\n### `m1.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|0|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|3788|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m1.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|3016Mi|\n |pods|12|\n### `m1.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|0|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|7680|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m1.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6430Mi|\n |pods|29|\n### `m1.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|0|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|15360|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m1.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|13215Mi|\n |pods|58|\n## m2 Family\n### `m2.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|0|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|17510|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m2.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|15203Mi|\n |pods|58|\n### `m2.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|0|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|35020|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m2.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|30740Mi|\n |pods|118|\n### `m2.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|0|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|70041|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m2.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|61858Mi|\n |pods|234|\n## m3 Family\n### `m3.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|3840|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m3.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|3065Mi|\n |pods|12|\n### `m3.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|7680|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m3.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6430Mi|\n |pods|29|\n### `m3.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|15360|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m3.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|13215Mi|\n |pods|58|\n### `m3.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|30720|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m3.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|26763Mi|\n |pods|118|\n## m4 Family\n### `m4.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|450|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m4.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|7002Mi|\n |pods|20|\n### `m4.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m4.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n### `m4.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|1000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m4.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n### `m4.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m4.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n### `m4.10xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|40|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|163840|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|10xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m4.10xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|39830m|\n |ephemeral-storage|17Gi|\n |memory|148623Mi|\n |pods|234|\n### `m4.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m4.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n## m5 Family\n### `m5.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m5.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m5.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m5.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|13600|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m5.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m5.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|120|\n## m5a Family\n### `m5a.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5a.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m5a.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5a.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m5a.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5a.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m5a.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5a.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5a.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5a.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5a.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6780|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5a.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5a.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5a.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m5a.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|13750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5a.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## m5ad Family\n### `m5ad.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|75|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5ad.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m5ad.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|150|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5ad.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m5ad.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|300|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5ad.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m5ad.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|600|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5ad.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5ad.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1200|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5ad.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5ad.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6780|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1800|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5ad.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5ad.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2400|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5ad.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m5ad.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|13750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3600|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5ad.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## m5d Family\n### `m5d.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|75|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5d.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m5d.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|150|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5d.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m5d.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|300|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5d.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m5d.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|600|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5d.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5d.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1200|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5d.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5d.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1800|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5d.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5d.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|13600|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2400|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5d.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m5d.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3600|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5d.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m5d.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3600|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5d.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## m5dn Family\n### `m5dn.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|75|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|2100|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5dn.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m5dn.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|150|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|4100|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5dn.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m5dn.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|300|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|8125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5dn.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m5dn.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|600|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|16250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5dn.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5dn.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1200|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5dn.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5dn.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1800|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5dn.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5dn.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|13600|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2400|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5dn.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m5dn.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3600|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5dn.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m5dn.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3600|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5dn.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## m5n Family\n### `m5n.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|2100|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5n.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m5n.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|4100|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5n.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m5n.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|8125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5n.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m5n.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|16250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5n.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5n.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5n.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5n.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5n.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5n.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|13600|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5n.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m5n.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5n.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m5n.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5n.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## m5zn Family\n### `m5zn.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5zn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|3000|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5zn.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|13|\n### `m5zn.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5zn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5zn.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|29|\n### `m5zn.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5zn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5zn.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|62|\n### `m5zn.3xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|12|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5zn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|49152|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|3xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5zn.3xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|11900m|\n |ephemeral-storage|17Gi|\n |memory|42536Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|92|\n### `m5zn.6xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|24|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5zn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|6xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5zn.6xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|23870m|\n |ephemeral-storage|17Gi|\n |memory|88002Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `m5zn.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5zn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5zn.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m5zn.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5zn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5zn.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## m6a Family\n### `m6a.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6a.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m6a.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6a.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m6a.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6a.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m6a.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6a.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m6a.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6a.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `m6a.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6a.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `m6a.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6a.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6a.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6a.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6a.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6a.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6a.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6a.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6a.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6a.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## m6g Family\n### `m6g.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|500|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6g.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|3286Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `m6g.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6g.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6844Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m6g.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6g.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m6g.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6g.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m6g.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6g.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m6g.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6g.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m6g.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14250|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6g.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178874Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m6g.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6g.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|233962Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6g.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6g.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|233962Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## m6gd Family\n### `m6gd.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|59|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|500|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6gd.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|3286Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `m6gd.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6gd.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6844Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m6gd.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6gd.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m6gd.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6gd.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m6gd.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6gd.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m6gd.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6gd.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m6gd.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14250|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6gd.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178874Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m6gd.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6gd.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|233962Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6gd.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6gd.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|233962Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## m6i Family\n### `m6i.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6i.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m6i.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6i.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m6i.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6i.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m6i.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6i.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m6i.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6i.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `m6i.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6i.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `m6i.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6i.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6i.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6i.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6i.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6i.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6i.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6i.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## m6id Family\n### `m6id.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6id.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m6id.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6id.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m6id.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6id.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m6id.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6id.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m6id.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6id.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `m6id.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6id.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `m6id.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6id.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6id.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|5700|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6id.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6id.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6id.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6id.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6id.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## m6idn Family\n### `m6idn.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6idn.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m6idn.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6idn.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m6idn.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6idn.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m6idn.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6idn.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m6idn.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6idn.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `m6idn.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|37500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6idn.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `m6idn.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|50000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6idn.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6idn.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|75000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|5700|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|150000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6idn.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6idn.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6idn.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|480277Mi|\n |pods|394|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|106|\n### `m6idn.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6idn.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|480277Mi|\n |pods|394|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|106|\n## m6in Family\n### `m6in.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6in.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m6in.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6in.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m6in.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6in.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m6in.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6in.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m6in.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6in.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `m6in.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|37500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6in.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `m6in.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|50000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6in.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6in.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|75000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|150000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6in.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6in.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6in.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|480277Mi|\n |pods|394|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|106|\n### `m6in.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6in.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|480277Mi|\n |pods|394|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|106|\n## m7a Family\n### `m7a.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|390|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7a.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|3345Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `m7a.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7a.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m7a.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7a.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m7a.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7a.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m7a.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7a.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m7a.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7a.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `m7a.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7a.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `m7a.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7a.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m7a.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7a.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m7a.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7a.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m7a.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7a.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m7a.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7a.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## m7g Family\n### `m7g.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|520|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7g.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|3286Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `m7g.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7g.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6844Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m7g.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1876|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7g.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m7g.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7g.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m7g.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7g.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m7g.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7g.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m7g.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7g.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178874Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m7g.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7g.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|233962Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m7g.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7g.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|233962Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## m7gd Family\n### `m7gd.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|59|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|520|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7gd.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|3286Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `m7gd.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7gd.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6844Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m7gd.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1876|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7gd.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m7gd.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7gd.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m7gd.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7gd.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m7gd.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7gd.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m7gd.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7gd.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178874Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m7gd.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7gd.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|233962Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m7gd.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7gd.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|233962Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## m7i Family\n### `m7i.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m7i.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m7i.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m7i.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m7i.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `m7i.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `m7i.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m7i.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m7i.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m7i.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m7i.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## m7i-flex Family\n### `m7i-flex.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i-flex|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|390|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i-flex.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|3|\n### `m7i-flex.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i-flex|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i-flex.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|8|\n### `m7i-flex.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i-flex|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i-flex.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m7i-flex.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i-flex|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i-flex.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|34|\n### `m7i-flex.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i-flex|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i-flex.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m7i-flex.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i-flex|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|9375|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i-flex.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `m7i-flex.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i-flex|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i-flex.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## m8a Family\n### `m8a.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|520|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8a.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|3345Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `m8a.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8a.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6573Mi|\n |pods|59|\n |vpc.amazonaws.com/pod-eni|9|\n### `m8a.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8a.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|13942Mi|\n |pods|78|\n |vpc.amazonaws.com/pod-eni|18|\n### `m8a.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8a.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|28217Mi|\n |pods|158|\n |vpc.amazonaws.com/pod-eni|38|\n### `m8a.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8a.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|56811Mi|\n |pods|314|\n |vpc.amazonaws.com/pod-eni|54|\n### `m8a.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8a.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|116574Mi|\n |pods|392|\n |vpc.amazonaws.com/pod-eni|82|\n### `m8a.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8a.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|173169Mi|\n |pods|758|\n |vpc.amazonaws.com/pod-eni|110|\n### `m8a.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8a.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|231018Mi|\n |pods|1010|\n |vpc.amazonaws.com/pod-eni|106|\n### `m8a.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8a.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|352259Mi|\n |pods|1010|\n |vpc.amazonaws.com/pod-eni|106|\n### `m8a.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8a.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|352259Mi|\n |pods|1010|\n |vpc.amazonaws.com/pod-eni|106|\n### `m8a.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8a.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|710440Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n### `m8a.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8a.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|710440Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n## m8azn Family\n### `m8azn.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|5000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8azn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8azn.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|3312Mi|\n |pods|11|\n### `m8azn.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|5000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8azn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8azn.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6364Mi|\n |pods|78|\n### `m8azn.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|5000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8azn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8azn.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|13942Mi|\n |pods|78|\n### `m8azn.3xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|12|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|5000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8azn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|49152|\n |karpenter.k8s.aws/instance-size|3xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8azn.3xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|11900m|\n |ephemeral-storage|17Gi|\n |memory|41656Mi|\n |pods|314|\n### `m8azn.6xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|24|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|5000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8azn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-size|6xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8azn.6xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|23870m|\n |ephemeral-storage|17Gi|\n |memory|87122Mi|\n |pods|314|\n### `m8azn.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|5000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8azn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8azn.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|170397Mi|\n |pods|1010|\n### `m8azn.metal-12xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|5000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8azn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-size|metal-12xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8azn.metal-12xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|170397Mi|\n |pods|1010|\n### `m8azn.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|5000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8azn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8azn.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|352259Mi|\n |pods|1010|\n |vpc.amazonaws.com/efa|1|\n### `m8azn.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|5000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8azn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8azn.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|352259Mi|\n |pods|1010|\n |vpc.amazonaws.com/efa|1|\n## m8g Family\n### `m8g.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|520|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8g.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|3286Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `m8g.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8g.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6844Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m8g.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8g.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m8g.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8g.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m8g.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8g.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m8g.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8g.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m8g.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8g.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178874Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m8g.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8g.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|233962Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m8g.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8g.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355203Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m8g.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8g.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355203Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m8g.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8g.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|718928Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m8g.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8g.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|718928Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## m8gb Family\n### `m8gb.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|2083|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gb.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|3286Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `m8gb.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|4166|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gb.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6844Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m8gb.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|8333|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gb.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m8gb.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|16666|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gb.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m8gb.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|33330|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gb.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m8gb.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|50000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|66660|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gb.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|117615Mi|\n |pods|292|\n |vpc.amazonaws.com/pod-eni|52|\n### `m8gb.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|75000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gb.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|177598Mi|\n |pods|350|\n |vpc.amazonaws.com/pod-eni|50|\n### `m8gb.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|133330|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gb.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|233423Mi|\n |pods|786|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|106|\n### `m8gb.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|150000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gb.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|350352Mi|\n |pods|1178|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n### `m8gb.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|150000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gb.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|350352Mi|\n |pods|1178|\n |vpc.amazonaws.com/efa|1|\n### `m8gb.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|300000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gb.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|720545Mi|\n |pods|590|\n |vpc.amazonaws.com/efa|2|\n### `m8gb.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|300000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gb.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|720545Mi|\n |pods|590|\n |vpc.amazonaws.com/efa|2|\n## m8gd Family\n### `m8gd.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|59|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|520|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gd.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|3286Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `m8gd.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gd.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6844Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m8gd.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gd.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m8gd.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gd.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m8gd.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gd.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m8gd.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gd.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m8gd.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gd.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178874Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m8gd.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gd.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|233962Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m8gd.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|5700|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gd.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355203Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m8gd.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|5700|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gd.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355203Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m8gd.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|11400|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gd.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|718928Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m8gd.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|11400|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gd.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|718928Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## m8gn Family\n### `m8gn.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gn.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|3286Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `m8gn.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gn.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6844Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m8gn.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gn.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m8gn.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gn.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m8gn.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gn.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m8gn.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gn.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|117615Mi|\n |pods|292|\n |vpc.amazonaws.com/pod-eni|52|\n### `m8gn.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|150000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gn.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|177598Mi|\n |pods|350|\n |vpc.amazonaws.com/pod-eni|50|\n### `m8gn.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gn.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|233423Mi|\n |pods|786|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|106|\n### `m8gn.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|300000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gn.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|350352Mi|\n |pods|1178|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n### `m8gn.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gn.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|350352Mi|\n |pods|1178|\n |vpc.amazonaws.com/efa|1|\n### `m8gn.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|600000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gn.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|720545Mi|\n |pods|590|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|98|\n### `m8gn.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gn.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|720545Mi|\n |pods|590|\n |vpc.amazonaws.com/efa|2|\n## m8i Family\n### `m8i.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6573Mi|\n |pods|59|\n |vpc.amazonaws.com/pod-eni|9|\n### `m8i.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|13502Mi|\n |pods|118|\n |vpc.amazonaws.com/pod-eni|18|\n### `m8i.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|28657Mi|\n |pods|118|\n |vpc.amazonaws.com/pod-eni|38|\n### `m8i.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|55931Mi|\n |pods|394|\n |vpc.amazonaws.com/pod-eni|54|\n### `m8i.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|115474Mi|\n |pods|492|\n |vpc.amazonaws.com/pod-eni|82|\n### `m8i.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|175017Mi|\n |pods|590|\n |vpc.amazonaws.com/pod-eni|110|\n### `m8i.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|231018Mi|\n |pods|1010|\n |vpc.amazonaws.com/pod-eni|106|\n### `m8i.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|352259Mi|\n |pods|1010|\n |vpc.amazonaws.com/pod-eni|106|\n### `m8i.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|467957Mi|\n |pods|1514|\n |vpc.amazonaws.com/pod-eni|98|\n### `m8i.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|710440Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n### `m8i.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|710440Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n### `m8i.96xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|384|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|96xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i.96xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|382970m|\n |ephemeral-storage|17Gi|\n |memory|1437890Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n### `m8i.metal-96xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|384|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal-96xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i.metal-96xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|382970m|\n |ephemeral-storage|17Gi|\n |memory|1437890Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n## m8i-flex Family\n### `m8i-flex.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|468|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i-flex.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6573Mi|\n |pods|59|\n |vpc.amazonaws.com/pod-eni|3|\n### `m8i-flex.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i-flex.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|13502Mi|\n |pods|118|\n |vpc.amazonaws.com/pod-eni|8|\n### `m8i-flex.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i-flex.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|28657Mi|\n |pods|118|\n |vpc.amazonaws.com/pod-eni|18|\n### `m8i-flex.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i-flex.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|55931Mi|\n |pods|394|\n |vpc.amazonaws.com/pod-eni|34|\n### `m8i-flex.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i-flex.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|115474Mi|\n |pods|492|\n |vpc.amazonaws.com/pod-eni|52|\n### `m8i-flex.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|11250|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i-flex.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|175017Mi|\n |pods|590|\n |vpc.amazonaws.com/pod-eni|110|\n### `m8i-flex.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i-flex.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|231018Mi|\n |pods|1010|\n |vpc.amazonaws.com/pod-eni|106|\n## m8id Family\n### `m8id.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8id.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6573Mi|\n |pods|59|\n### `m8id.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8id.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|13502Mi|\n |pods|118|\n### `m8id.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8id.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|28657Mi|\n |pods|118|\n### `m8id.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8id.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|55931Mi|\n |pods|394|\n### `m8id.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8id.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|115474Mi|\n |pods|492|\n### `m8id.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8id.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|175017Mi|\n |pods|590|\n### `m8id.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8id.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|231018Mi|\n |pods|1010|\n### `m8id.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|5700|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8id.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|352259Mi|\n |pods|1010|\n### `m8id.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8id.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|467957Mi|\n |pods|1514|\n### `m8id.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|11400|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8id.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|710440Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n### `m8id.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|11400|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8id.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|710440Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n### `m8id.96xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|384|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|22800|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-size|96xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8id.96xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|382970m|\n |ephemeral-storage|17Gi|\n |memory|1437890Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n### `m8id.metal-96xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|384|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|22800|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-size|metal-96xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8id.metal-96xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|382970m|\n |ephemeral-storage|17Gi|\n |memory|1437890Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n## p3 Family\n### `p3.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|p|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|1750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|p3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|v100|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|62464|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|p3.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|56786Mi|\n |nvidia.com/gpu|1|\n |pods|58|\n### `p3.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|p|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|7000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|p3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-gpu-count|4|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|v100|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|249856|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|p3.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|228187Mi|\n |nvidia.com/gpu|4|\n |pods|234|\n### `p3.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|p|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|p3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-gpu-count|8|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|v100|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|499712|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|p3.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|459304Mi|\n |nvidia.com/gpu|8|\n |pods|234|\n## p3dn Family\n### `p3dn.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|p|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|p3dn|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-gpu-count|8|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|32768|\n |karpenter.k8s.aws/instance-gpu-name|v100|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1800|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|p3dn.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |nvidia.com/gpu|8|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## p4d Family\n### `p4d.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|p|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|p4d|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-gpu-count|8|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|40960|\n |karpenter.k8s.aws/instance-gpu-name|a100|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|8000|\n |karpenter.k8s.aws/instance-memory|1179648|\n |karpenter.k8s.aws/instance-network-bandwidth|400000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|p4d.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|1082712Mi|\n |nvidia.com/gpu|8|\n |pods|737|\n |vpc.amazonaws.com/efa|4|\n |vpc.amazonaws.com/pod-eni|62|\n## p4de Family\n### `p4de.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|p|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|p4de|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-gpu-count|8|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|81920|\n |karpenter.k8s.aws/instance-gpu-name|a100|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|8000|\n |karpenter.k8s.aws/instance-memory|1179648|\n |karpenter.k8s.aws/instance-network-bandwidth|400000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|p4de.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|1082712Mi|\n |nvidia.com/gpu|8|\n |pods|737|\n |vpc.amazonaws.com/efa|4|\n |vpc.amazonaws.com/pod-eni|62|\n## p5 Family\n### `p5.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|p|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|p5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|81920|\n |karpenter.k8s.aws/instance-gpu-name|h100|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|p5.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|240830Mi|\n |nvidia.com/gpu|1|\n |pods|118|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|58|\n### `p5.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|p|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|p5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|8|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|81920|\n |karpenter.k8s.aws/instance-gpu-name|h100|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|30400|\n |karpenter.k8s.aws/instance-memory|2097152|\n |karpenter.k8s.aws/instance-network-bandwidth|3200000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|p5.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1938410Mi|\n |nvidia.com/gpu|8|\n |pods|100|\n |vpc.amazonaws.com/efa|32|\n |vpc.amazonaws.com/pod-eni|120|\n## p5e Family\n### `p5e.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|p|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|p5e|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|8|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|144384|\n |karpenter.k8s.aws/instance-gpu-name|h200|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|30400|\n |karpenter.k8s.aws/instance-memory|2097152|\n |karpenter.k8s.aws/instance-network-bandwidth|3200000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|p5e.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1938410Mi|\n |nvidia.com/gpu|8|\n |pods|100|\n |vpc.amazonaws.com/efa|32|\n |vpc.amazonaws.com/pod-eni|120|\n## p5en Family\n### `p5en.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|p|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|p5en|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|8|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|144384|\n |karpenter.k8s.aws/instance-gpu-name|h200|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|30400|\n |karpenter.k8s.aws/instance-memory|2097152|\n |karpenter.k8s.aws/instance-network-bandwidth|3200000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|p5en.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1937332Mi|\n |nvidia.com/gpu|8|\n |pods|198|\n |vpc.amazonaws.com/efa|16|\n |vpc.amazonaws.com/pod-eni|120|\n## p6-b200 Family\n### `p6-b200.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|p|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|p6-b200|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|8|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|183359|\n |karpenter.k8s.aws/instance-gpu-name|b200|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|30400|\n |karpenter.k8s.aws/instance-memory|2097152|\n |karpenter.k8s.aws/instance-network-bandwidth|3200000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|p6-b200.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1937332Mi|\n |nvidia.com/gpu|8|\n |pods|198|\n |vpc.amazonaws.com/efa|8|\n |vpc.amazonaws.com/pod-eni|120|\n## p6-b300 Family\n### `p6-b300.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|p|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|p6-b300|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|8|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|275040|\n |karpenter.k8s.aws/instance-gpu-name|b300|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|30400|\n |karpenter.k8s.aws/instance-memory|4194304|\n |karpenter.k8s.aws/instance-network-bandwidth|6400000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|p6-b300.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|3877198Mi|\n |nvidia.com/gpu|8|\n |pods|198|\n |vpc.amazonaws.com/efa|16|\n |vpc.amazonaws.com/pod-eni|120|\n## r3 Family\n### `r3.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|15360|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r3.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|13534Mi|\n |pods|29|\n### `r3.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|31232|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r3.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|27896Mi|\n |pods|58|\n### `r3.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|62464|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r3.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|56786Mi|\n |pods|58|\n### `r3.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|124928|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r3.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|112629Mi|\n |pods|234|\n### `r3.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|249856|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r3.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|228187Mi|\n |pods|234|\n## r4 Family\n### `r4.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|425|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|15616|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r4.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|13770Mi|\n |pods|29|\n### `r4.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|850|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|31232|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r4.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|27896Mi|\n |pods|58|\n### `r4.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|1700|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|62464|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r4.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|56786Mi|\n |pods|58|\n### `r4.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|124928|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r4.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|112629Mi|\n |pods|234|\n### `r4.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|7000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|249856|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r4.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|228187Mi|\n |pods|234|\n### `r4.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|499712|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r4.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|453771Mi|\n |pods|737|\n## r5 Family\n### `r5.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r5.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r5.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r5.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|13600|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r5.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r5.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|120|\n## r5a Family\n### `r5a.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5a.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r5a.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5a.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r5a.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5a.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r5a.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5a.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5a.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5a.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5a.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6780|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5a.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5a.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5a.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r5a.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|13570|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5a.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## r5ad Family\n### `r5ad.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|75|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5ad.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r5ad.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|150|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5ad.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r5ad.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|300|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5ad.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r5ad.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|600|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5ad.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5ad.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1200|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5ad.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5ad.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6780|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1800|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5ad.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5ad.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2400|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5ad.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r5ad.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|13570|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3600|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5ad.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## r5b Family\n### `r5b.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5b|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5b.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r5b.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5b|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5b.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r5b.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5b|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5b.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r5b.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5b|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5b.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5b.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5b|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5b.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5b.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5b|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5b.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5b.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5b|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5b.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r5b.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5b|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5b.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r5b.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5b|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5b.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## r5d Family\n### `r5d.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|75|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5d.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r5d.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|150|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5d.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r5d.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|300|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5d.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r5d.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|600|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5d.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5d.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1200|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5d.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5d.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1800|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5d.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5d.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|13600|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2400|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5d.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r5d.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3600|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5d.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r5d.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3600|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5d.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## r5dn Family\n### `r5dn.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|75|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2100|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5dn.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r5dn.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|150|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|4100|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5dn.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r5dn.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|300|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|8125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5dn.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r5dn.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|600|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|16250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5dn.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5dn.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1200|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5dn.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5dn.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1800|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5dn.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5dn.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|13600|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2400|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5dn.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r5dn.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3600|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5dn.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r5dn.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3600|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5dn.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## r5n Family\n### `r5n.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2100|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5n.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r5n.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|4100|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5n.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r5n.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|8125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5n.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r5n.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|16250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5n.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5n.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5n.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5n.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5n.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5n.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|13600|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5n.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r5n.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5n.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r5n.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5n.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## r6a Family\n### `r6a.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6a.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r6a.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6a.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r6a.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6a.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r6a.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6a.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r6a.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6a.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `r6a.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6a.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `r6a.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6a.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6a.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6a.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6a.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6a.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|961470Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6a.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6a.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446437Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6a.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6a.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446437Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## r6g Family\n### `r6g.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|500|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6g.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|7075Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `r6g.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6g.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14422Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r6g.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6g.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r6g.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6g.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59568Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r6g.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6g.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r6g.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6g.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239495Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r6g.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14250|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6g.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360736Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r6g.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6g.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476445Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6g.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6g.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476445Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## r6gd Family\n### `r6gd.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|59|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|500|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6gd.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|7075Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `r6gd.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6gd.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14422Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r6gd.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6gd.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r6gd.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6gd.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59568Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r6gd.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6gd.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r6gd.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6gd.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239495Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r6gd.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14250|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6gd.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360736Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r6gd.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6gd.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476445Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6gd.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6gd.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476445Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## r6i Family\n### `r6i.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6i.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r6i.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6i.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r6i.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6i.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r6i.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6i.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r6i.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6i.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `r6i.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6i.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `r6i.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6i.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6i.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6i.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6i.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6i.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|961470Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6i.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6i.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|961470Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## r6id Family\n### `r6id.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6id.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r6id.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6id.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r6id.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6id.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r6id.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6id.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r6id.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6id.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `r6id.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6id.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `r6id.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6id.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6id.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|5700|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6id.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6id.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6id.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|961470Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6id.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6id.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|961470Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## r6idn Family\n### `r6idn.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6idn.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r6idn.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6idn.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r6idn.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6idn.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r6idn.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6idn.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r6idn.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6idn.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `r6idn.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|37500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6idn.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `r6idn.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|50000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6idn.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6idn.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|75000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|5700|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|150000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6idn.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6idn.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6idn.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|965243Mi|\n |pods|394|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|106|\n### `r6idn.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6idn.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|965243Mi|\n |pods|394|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|106|\n## r6in Family\n### `r6in.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6in.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r6in.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6in.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r6in.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6in.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r6in.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6in.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r6in.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6in.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `r6in.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|37500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6in.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `r6in.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|50000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6in.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6in.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|75000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|150000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6in.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6in.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6in.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|965243Mi|\n |pods|394|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|106|\n### `r6in.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6in.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|965243Mi|\n |pods|394|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|106|\n## r7a Family\n### `r7a.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|390|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7a.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|7134Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `r7a.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7a.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r7a.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7a.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r7a.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7a.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r7a.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7a.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r7a.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7a.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `r7a.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7a.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `r7a.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7a.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r7a.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7a.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r7a.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7a.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|961470Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r7a.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7a.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446437Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r7a.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7a.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446437Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## r7g Family\n### `r7g.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|520|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7g.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|7075Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `r7g.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7g.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14422Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r7g.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1876|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7g.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r7g.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7g.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59568Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r7g.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7g.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r7g.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7g.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239495Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r7g.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7g.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360736Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r7g.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7g.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476445Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r7g.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7g.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476445Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## r7gd Family\n### `r7gd.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|59|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|520|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7gd.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|7075Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `r7gd.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7gd.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14422Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r7gd.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1876|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7gd.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r7gd.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7gd.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59568Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r7gd.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7gd.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r7gd.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7gd.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239495Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r7gd.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7gd.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360736Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r7gd.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7gd.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476445Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r7gd.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7gd.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476445Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## r7i Family\n### `r7i.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7i.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r7i.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7i.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r7i.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7i.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r7i.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7i.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r7i.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7i.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `r7i.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7i.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `r7i.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7i.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r7i.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7i.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r7i.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7i.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r7i.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7i.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446437Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r7i.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7i.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446437Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## r7iz Family\n### `r7iz.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7iz|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7iz.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r7iz.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7iz|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7iz.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r7iz.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7iz|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7iz.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r7iz.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7iz|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7iz.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r7iz.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7iz|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7iz.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `r7iz.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7iz|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7iz.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `r7iz.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7iz|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7iz.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r7iz.metal-16xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7iz|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal-16xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7iz.metal-16xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r7iz.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7iz|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7iz.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|961470Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r7iz.metal-32xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7iz|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal-32xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7iz.metal-32xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|961470Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## r8a Family\n### `r8a.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|520|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8a.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|7134Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `r8a.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8a.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14151Mi|\n |pods|59|\n |vpc.amazonaws.com/pod-eni|9|\n### `r8a.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8a.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29097Mi|\n |pods|78|\n |vpc.amazonaws.com/pod-eni|18|\n### `r8a.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8a.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|58527Mi|\n |pods|158|\n |vpc.amazonaws.com/pod-eni|38|\n### `r8a.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8a.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|117432Mi|\n |pods|314|\n |vpc.amazonaws.com/pod-eni|54|\n### `r8a.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8a.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|237816Mi|\n |pods|392|\n |vpc.amazonaws.com/pod-eni|82|\n### `r8a.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8a.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|355031Mi|\n |pods|758|\n |vpc.amazonaws.com/pod-eni|110|\n### `r8a.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8a.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|473501Mi|\n |pods|1010|\n |vpc.amazonaws.com/pod-eni|106|\n### `r8a.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8a.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|715984Mi|\n |pods|1010|\n |vpc.amazonaws.com/pod-eni|106|\n### `r8a.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8a.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|715984Mi|\n |pods|1010|\n |vpc.amazonaws.com/pod-eni|106|\n### `r8a.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8a.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1437890Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n### `r8a.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8a.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1437890Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n## r8g Family\n### `r8g.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|520|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8g.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|7075Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `r8g.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8g.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14422Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r8g.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8g.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r8g.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8g.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59568Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r8g.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8g.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r8g.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8g.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239495Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r8g.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8g.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360736Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r8g.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8g.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476445Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r8g.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8g.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718928Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r8g.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8g.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718928Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r8g.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8g.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446378Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r8g.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8g.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446378Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## r8gb Family\n### `r8gb.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|2083|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gb.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|7075Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `r8gb.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|4166|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gb.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14422Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r8gb.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|8333|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gb.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r8gb.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|16666|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gb.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59568Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r8gb.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|33330|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gb.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r8gb.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|50000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|66660|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gb.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|238857Mi|\n |pods|292|\n |vpc.amazonaws.com/pod-eni|52|\n### `r8gb.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|75000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gb.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|359460Mi|\n |pods|350|\n |vpc.amazonaws.com/pod-eni|50|\n### `r8gb.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|133330|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gb.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|475906Mi|\n |pods|786|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|106|\n### `r8gb.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|150000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gb.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|714077Mi|\n |pods|1178|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n### `r8gb.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|150000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gb.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|714077Mi|\n |pods|1178|\n |vpc.amazonaws.com/efa|1|\n### `r8gb.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|300000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gb.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1447995Mi|\n |pods|590|\n |vpc.amazonaws.com/efa|2|\n### `r8gb.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|300000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gb.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1447995Mi|\n |pods|590|\n |vpc.amazonaws.com/efa|2|\n## r8gd Family\n### `r8gd.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|59|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|520|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gd.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|7075Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `r8gd.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gd.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14422Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r8gd.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gd.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r8gd.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gd.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59568Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r8gd.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gd.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r8gd.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gd.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239495Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r8gd.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gd.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360736Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r8gd.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gd.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476445Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r8gd.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|5700|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gd.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718928Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r8gd.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|5700|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gd.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718928Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r8gd.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|11400|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gd.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446378Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r8gd.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|11400|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gd.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446378Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## r8gn Family\n### `r8gn.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gn.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|7075Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `r8gn.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gn.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14422Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r8gn.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gn.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r8gn.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gn.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59568Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r8gn.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gn.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r8gn.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gn.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|238857Mi|\n |pods|292|\n |vpc.amazonaws.com/pod-eni|52|\n### `r8gn.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|150000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gn.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|359460Mi|\n |pods|350|\n |vpc.amazonaws.com/pod-eni|50|\n### `r8gn.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gn.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|475906Mi|\n |pods|786|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|106|\n### `r8gn.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|300000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gn.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|714077Mi|\n |pods|1178|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n### `r8gn.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|300000|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gn.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|714077Mi|\n |pods|1178|\n |vpc.amazonaws.com/efa|1|\n### `r8gn.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|600000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gn.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1447995Mi|\n |pods|590|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|98|\n### `r8gn.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|600000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gn.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1447995Mi|\n |pods|590|\n |vpc.amazonaws.com/efa|2|\n## r8i Family\n### `r8i.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14151Mi|\n |pods|59|\n |vpc.amazonaws.com/pod-eni|9|\n### `r8i.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|28657Mi|\n |pods|118|\n |vpc.amazonaws.com/pod-eni|18|\n### `r8i.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|58967Mi|\n |pods|118|\n |vpc.amazonaws.com/pod-eni|38|\n### `r8i.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|116552Mi|\n |pods|394|\n |vpc.amazonaws.com/pod-eni|54|\n### `r8i.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|236716Mi|\n |pods|492|\n |vpc.amazonaws.com/pod-eni|82|\n### `r8i.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|356879Mi|\n |pods|590|\n |vpc.amazonaws.com/pod-eni|110|\n### `r8i.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|473501Mi|\n |pods|1010|\n |vpc.amazonaws.com/pod-eni|106|\n### `r8i.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|715984Mi|\n |pods|1010|\n |vpc.amazonaws.com/pod-eni|106|\n### `r8i.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|952923Mi|\n |pods|1514|\n |vpc.amazonaws.com/pod-eni|98|\n### `r8i.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1437890Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n### `r8i.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1437890Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n### `r8i.96xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|384|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|3145728|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|96xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i.96xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|382970m|\n |ephemeral-storage|17Gi|\n |memory|2892789Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n### `r8i.metal-96xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|384|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|3145728|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal-96xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i.metal-96xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|382970m|\n |ephemeral-storage|17Gi|\n |memory|2892789Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n## r8i-flex Family\n### `r8i-flex.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|468|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i-flex.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14151Mi|\n |pods|59|\n |vpc.amazonaws.com/pod-eni|3|\n### `r8i-flex.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i-flex.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|28657Mi|\n |pods|118|\n |vpc.amazonaws.com/pod-eni|8|\n### `r8i-flex.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i-flex.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|58967Mi|\n |pods|118|\n |vpc.amazonaws.com/pod-eni|18|\n### `r8i-flex.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i-flex.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|116552Mi|\n |pods|394|\n |vpc.amazonaws.com/pod-eni|34|\n### `r8i-flex.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i-flex.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|236716Mi|\n |pods|492|\n |vpc.amazonaws.com/pod-eni|52|\n### `r8i-flex.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|11250|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i-flex.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|356879Mi|\n |pods|590|\n |vpc.amazonaws.com/pod-eni|110|\n### `r8i-flex.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i-flex.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|473501Mi|\n |pods|1010|\n |vpc.amazonaws.com/pod-eni|106|\n## r8id Family\n### `r8id.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8id.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14151Mi|\n |pods|59|\n### `r8id.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8id.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|28657Mi|\n |pods|118|\n### `r8id.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8id.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|58967Mi|\n |pods|118|\n### `r8id.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8id.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|116552Mi|\n |pods|394|\n### `r8id.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8id.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|236716Mi|\n |pods|492|\n### `r8id.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8id.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|356879Mi|\n |pods|590|\n### `r8id.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8id.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|473501Mi|\n |pods|1010|\n### `r8id.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|5700|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8id.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|715984Mi|\n |pods|1010|\n### `r8id.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8id.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|952923Mi|\n |pods|1514|\n### `r8id.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|11400|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8id.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1437890Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n### `r8id.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|11400|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8id.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1437890Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n### `r8id.96xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|384|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|22800|\n |karpenter.k8s.aws/instance-memory|3145728|\n |karpenter.k8s.aws/instance-size|96xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8id.96xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|382970m|\n |ephemeral-storage|17Gi|\n |memory|2892789Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n### `r8id.metal-96xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|384|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|22800|\n |karpenter.k8s.aws/instance-memory|3145728|\n |karpenter.k8s.aws/instance-size|metal-96xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8id.metal-96xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|382970m|\n |ephemeral-storage|17Gi|\n |memory|2892789Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n## t1 Family\n### `t1.micro`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|0|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|627|\n |karpenter.k8s.aws/instance-size|micro|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t1.micro|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|180Mi|\n |pods|4|\n## t2 Family\n### `t2.nano`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|512|\n |karpenter.k8s.aws/instance-size|nano|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t2.nano|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|74Mi|\n |pods|4|\n### `t2.micro`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|1024|\n |karpenter.k8s.aws/instance-size|micro|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t2.micro|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|548Mi|\n |pods|4|\n### `t2.small`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-size|small|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t2.small|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|1418Mi|\n |pods|11|\n### `t2.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t2.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3246Mi|\n |pods|17|\n### `t2.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t2.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6837Mi|\n |pods|35|\n### `t2.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t2.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14316Mi|\n |pods|44|\n### `t2.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t2.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29471Mi|\n |pods|44|\n## t3 Family\n### `t3.nano`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|512|\n |karpenter.k8s.aws/instance-network-bandwidth|32|\n |karpenter.k8s.aws/instance-size|nano|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3.nano|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|74Mi|\n |pods|4|\n### `t3.micro`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1024|\n |karpenter.k8s.aws/instance-network-bandwidth|64|\n |karpenter.k8s.aws/instance-size|micro|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3.micro|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|548Mi|\n |pods|4|\n### `t3.small`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|128|\n |karpenter.k8s.aws/instance-size|small|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3.small|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|1418Mi|\n |pods|11|\n### `t3.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|256|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3246Mi|\n |pods|17|\n### `t3.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2780|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|512|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6837Mi|\n |pods|35|\n### `t3.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2780|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1024|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n### `t3.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2780|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|2048|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n## t3a Family\n### `t3a.nano`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3a|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|512|\n |karpenter.k8s.aws/instance-network-bandwidth|32|\n |karpenter.k8s.aws/instance-size|nano|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3a.nano|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|74Mi|\n |pods|4|\n### `t3a.micro`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3a|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1024|\n |karpenter.k8s.aws/instance-network-bandwidth|64|\n |karpenter.k8s.aws/instance-size|micro|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3a.micro|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|548Mi|\n |pods|4|\n### `t3a.small`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3a|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|128|\n |karpenter.k8s.aws/instance-size|small|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3a.small|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|1451Mi|\n |pods|8|\n### `t3a.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3a|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|256|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3a.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3246Mi|\n |pods|17|\n### `t3a.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2780|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3a|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|512|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3a.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6837Mi|\n |pods|35|\n### `t3a.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2780|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3a|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1024|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3a.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n### `t3a.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2780|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3a|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|2048|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3a.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n## t4g Family\n### `t4g.nano`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t4g|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|512|\n |karpenter.k8s.aws/instance-network-bandwidth|32|\n |karpenter.k8s.aws/instance-size|nano|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t4g.nano|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|15Mi|\n |pods|4|\n### `t4g.micro`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t4g|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1024|\n |karpenter.k8s.aws/instance-network-bandwidth|64|\n |karpenter.k8s.aws/instance-size|micro|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t4g.micro|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|489Mi|\n |pods|4|\n### `t4g.small`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t4g|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|128|\n |karpenter.k8s.aws/instance-size|small|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t4g.small|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|1359Mi|\n |pods|11|\n### `t4g.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t4g|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|256|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t4g.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3187Mi|\n |pods|17|\n### `t4g.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2780|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t4g|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|512|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t4g.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6778Mi|\n |pods|35|\n### `t4g.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2780|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t4g|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1024|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t4g.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n### `t4g.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2780|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t4g|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|2048|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t4g.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n## trn1 Family\n### `trn1.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-accelerator-count|1|\n |karpenter.k8s.aws/instance-accelerator-manufacturer|aws|\n |karpenter.k8s.aws/instance-accelerator-name|trainium|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|trn|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|trn1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|trn1.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |aws.amazon.com/neuron|1|\n |aws.amazon.com/neuroncore|2|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|17|\n### `trn1.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-accelerator-count|16|\n |karpenter.k8s.aws/instance-accelerator-manufacturer|aws|\n |karpenter.k8s.aws/instance-accelerator-name|trainium|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|trn|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|trn1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|800000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|trn1.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |aws.amazon.com/neuron|16|\n |aws.amazon.com/neuroncore|32|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|481894Mi|\n |pods|247|\n |vpc.amazonaws.com/efa|8|\n |vpc.amazonaws.com/pod-eni|82|\n## trn1n Family\n### `trn1n.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-accelerator-count|16|\n |karpenter.k8s.aws/instance-accelerator-manufacturer|aws|\n |karpenter.k8s.aws/instance-accelerator-name|trainium|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|trn|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|trn1n|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|1600000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|trn1n.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |aws.amazon.com/neuron|16|\n |aws.amazon.com/neuroncore|32|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|481894Mi|\n |pods|247|\n |vpc.amazonaws.com/efa|16|\n |vpc.amazonaws.com/pod-eni|120|\n## trn2 Family\n### `trn2.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-accelerator-count|16|\n |karpenter.k8s.aws/instance-accelerator-manufacturer|aws|\n |karpenter.k8s.aws/instance-accelerator-name|trainium2|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|trn|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|trn2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|2097152|\n |karpenter.k8s.aws/instance-network-bandwidth|3200000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|trn2.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |aws.amazon.com/neuron|16|\n |aws.amazon.com/neuroncore|128|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1938410Mi|\n |pods|100|\n |vpc.amazonaws.com/efa|16|\n## u-3tb1 Family\n### `u-3tb1.56xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|u|\n |karpenter.k8s.aws/instance-cpu|224|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|u-3tb1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|3145728|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|56xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|u-3tb1.56xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|223370m|\n |ephemeral-storage|17Gi|\n |memory|2906869Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|6|\n## u-6tb1 Family\n### `u-6tb1.56xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|u|\n |karpenter.k8s.aws/instance-cpu|224|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|38000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|u-6tb1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|6291456|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|56xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|u-6tb1.56xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|223370m|\n |ephemeral-storage|17Gi|\n |memory|5811134Mi|\n |pods|737|\n### `u-6tb1.112xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|u|\n |karpenter.k8s.aws/instance-cpu|448|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|38000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|u-6tb1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|6291456|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|112xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|u-6tb1.112xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|446810m|\n |ephemeral-storage|17Gi|\n |memory|5811134Mi|\n |pods|737|\n## u7i-12tb Family\n### `u7i-12tb.224xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|u|\n |karpenter.k8s.aws/instance-cpu|896|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|1900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|u7i-12tb|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|12582912|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|224xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|u7i-12tb.224xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|893690m|\n |ephemeral-storage|17Gi|\n |memory|11630731Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## u7i-6tb Family\n### `u7i-6tb.112xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|u|\n |karpenter.k8s.aws/instance-cpu|448|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|1900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|u7i-6tb|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|6291456|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|112xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|u7i-6tb.112xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|446810m|\n |ephemeral-storage|17Gi|\n |memory|5811134Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## u7i-8tb Family\n### `u7i-8tb.112xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|u|\n |karpenter.k8s.aws/instance-cpu|448|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|1900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|u7i-8tb|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8388608|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|112xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|u7i-8tb.112xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|446810m|\n |ephemeral-storage|17Gi|\n |memory|7751000Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## u7in-16tb Family\n### `u7in-16tb.224xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|u|\n |karpenter.k8s.aws/instance-cpu|896|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|1900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|u7in-16tb|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16777216|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|224xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|u7in-16tb.224xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|893690m|\n |ephemeral-storage|17Gi|\n |memory|15514235Mi|\n |pods|394|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|106|\n## u7in-24tb Family\n### `u7in-24tb.224xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|u|\n |karpenter.k8s.aws/instance-cpu|896|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|1900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|u7in-24tb|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|25165824|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|224xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|u7in-24tb.224xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|893690m|\n |ephemeral-storage|17Gi|\n |memory|23273698Mi|\n |pods|394|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|106|\n## u7in-32tb Family\n### `u7in-32tb.224xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|u|\n |karpenter.k8s.aws/instance-cpu|896|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|1900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|u7in-32tb|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|33554432|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|224xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|u7in-32tb.224xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|893690m|\n |ephemeral-storage|17Gi|\n |memory|31033160Mi|\n |pods|394|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|106|\n## vt1 Family\n### `vt1.3xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|vt|\n |karpenter.k8s.aws/instance-cpu|12|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|vt1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|24576|\n |karpenter.k8s.aws/instance-network-bandwidth|3120|\n |karpenter.k8s.aws/instance-size|3xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|vt1.3xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|11900m|\n |ephemeral-storage|17Gi|\n |memory|21739Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `vt1.6xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|vt|\n |karpenter.k8s.aws/instance-cpu|24|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|vt1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|49152|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|6xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|vt1.6xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|23870m|\n |ephemeral-storage|17Gi|\n |memory|42536Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `vt1.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|vt|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|vt1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|vt1.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## x1 Family\n### `x1.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|7000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|999424|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x1.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|921538Mi|\n |pods|234|\n### `x1.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|1998848|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x1.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|1846005Mi|\n |pods|234|\n## x1e Family\n### `x1e.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x1e|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|124928|\n |karpenter.k8s.aws/instance-network-bandwidth|625|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x1e.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|114884Mi|\n |pods|29|\n### `x1e.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|1000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x1e|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|249856|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x1e.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|230123Mi|\n |pods|58|\n### `x1e.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|1750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x1e|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|499712|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x1e.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|461240Mi|\n |pods|58|\n### `x1e.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x1e|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|999424|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x1e.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|923474Mi|\n |pods|58|\n### `x1e.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|7000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x1e|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|1998848|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x1e.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|1846005Mi|\n |pods|234|\n### `x1e.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x1e|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|3997696|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x1e.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|3694939Mi|\n |pods|234|\n## x2gd Family\n### `x2gd.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x2gd|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|59|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|500|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2gd.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|14653Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|10|\n### `x2gd.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x2gd|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2gd.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|29577Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `x2gd.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x2gd|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2gd.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|59568Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `x2gd.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x2gd|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|475|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2gd.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|120189Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `x2gd.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x2gd|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2gd.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|239495Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `x2gd.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x2gd|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2gd.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|481978Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `x2gd.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14250|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x2gd|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2gd.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|724461Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `x2gd.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x2gd|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2gd.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|961411Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `x2gd.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x2gd|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2gd.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|961411Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## x2idn Family\n### `x2idn.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2idn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2idn.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|961470Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `x2idn.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2idn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2idn.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|1446437Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `x2idn.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2idn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|2097152|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2idn.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|1931403Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `x2idn.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2idn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|2097152|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2idn.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|1931403Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## x2iedn Family\n### `x2iedn.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iedn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iedn.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|120248Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|11|\n### `x2iedn.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iedn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iedn.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|241490Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|27|\n### `x2iedn.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iedn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|475|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iedn.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|482037Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `x2iedn.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iedn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iedn.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|967003Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `x2iedn.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iedn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|2097152|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iedn.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|1931403Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `x2iedn.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iedn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|3145728|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iedn.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|2901336Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `x2iedn.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iedn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|4194304|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iedn.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|3871269Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `x2iedn.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iedn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|4194304|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iedn.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|3871269Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## x2iezn Family\n### `x2iezn.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iezn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iezn.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|241490Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|62|\n### `x2iezn.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iezn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iezn.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|482037Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `x2iezn.6xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|24|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iezn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|6xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iezn.6xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|23870m|\n |ephemeral-storage|17Gi|\n |memory|724520Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `x2iezn.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|12000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iezn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iezn.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|967003Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `x2iezn.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iezn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iezn.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|1446437Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `x2iezn.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iezn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iezn.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|1446437Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## x8aedz Family\n### `x8aedz.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|5000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8aedz|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|158|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8aedz.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|59407Mi|\n |pods|78|\n |vpc.amazonaws.com/pod-eni|8|\n### `x8aedz.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|5000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8aedz|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|316|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8aedz.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|120028Mi|\n |pods|78|\n |vpc.amazonaws.com/pod-eni|18|\n### `x8aedz.3xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|12|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|5000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8aedz|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|9375|\n |karpenter.k8s.aws/instance-size|3xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8aedz.3xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|11900m|\n |ephemeral-storage|17Gi|\n |memory|359915Mi|\n |pods|314|\n |vpc.amazonaws.com/pod-eni|34|\n### `x8aedz.6xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|24|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|5000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8aedz|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|6xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8aedz.6xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|23870m|\n |ephemeral-storage|17Gi|\n |memory|723640Mi|\n |pods|314|\n |vpc.amazonaws.com/pod-eni|54|\n### `x8aedz.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|5000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8aedz|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8aedz.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|1443434Mi|\n |pods|1010|\n |vpc.amazonaws.com/pod-eni|106|\n### `x8aedz.metal-12xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|5000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8aedz|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|metal-12xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8aedz.metal-12xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|1443434Mi|\n |pods|1010|\n |vpc.amazonaws.com/pod-eni|106|\n### `x8aedz.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|5000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8aedz|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|3145728|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8aedz.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|2898333Mi|\n |pods|1010|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|106|\n### `x8aedz.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|5000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8aedz|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|3145728|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8aedz.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|2898333Mi|\n |pods|1010|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|106|\n## x8g Family\n### `x8g.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|520|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8g.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|14653Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `x8g.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8g.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|29577Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `x8g.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8g.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|59568Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `x8g.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8g.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|120189Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `x8g.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8g.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|239495Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `x8g.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8g.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|481978Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `x8g.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8g.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|724461Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `x8g.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8g.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|961411Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `x8g.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8g.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|1446378Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `x8g.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8g.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|1446378Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `x8g.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|3145728|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8g.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|2901277Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `x8g.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|3145728|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8g.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|2901277Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## x8i Family\n### `x8i.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8i.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|29306Mi|\n |pods|59|\n### `x8i.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8i.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|58967Mi|\n |pods|118|\n### `x8i.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8i.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|119588Mi|\n |pods|118|\n### `x8i.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8i.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|237794Mi|\n |pods|394|\n### `x8i.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8i.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|479199Mi|\n |pods|492|\n### `x8i.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8i.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|720604Mi|\n |pods|590|\n### `x8i.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8i.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|958467Mi|\n |pods|1010|\n### `x8i.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8i.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|1443434Mi|\n |pods|1010|\n### `x8i.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|2097152|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8i.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|1922856Mi|\n |pods|1514|\n### `x8i.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|3145728|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8i.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|2892789Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n### `x8i.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|3145728|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8i.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|2892789Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n### `x8i.64xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|256|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|70000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4194304|\n |karpenter.k8s.aws/instance-network-bandwidth|80000|\n |karpenter.k8s.aws/instance-size|64xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8i.64xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|255290m|\n |ephemeral-storage|17Gi|\n |memory|3862722Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n### `x8i.96xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|384|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|6291456|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|96xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8i.96xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|382970m|\n |ephemeral-storage|17Gi|\n |memory|5802587Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n### `x8i.metal-96xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|384|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|6291456|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal-96xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8i.metal-96xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|382970m|\n |ephemeral-storage|17Gi|\n |memory|5802587Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n## z1d Family\n### `z1d.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|z|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|z1d|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|75|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|z1d.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|13|\n### `z1d.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|z|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|z1d|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|150|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|z1d.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|28|\n### `z1d.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|z|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|z1d|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|300|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|z1d.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|58|\n### `z1d.3xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|z|\n |karpenter.k8s.aws/instance-cpu|12|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|z1d|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|450|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|3xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|z1d.3xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|11900m|\n |ephemeral-storage|17Gi|\n |memory|88002Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `z1d.6xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|z|\n |karpenter.k8s.aws/instance-cpu|24|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|z1d|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|900|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|6xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|z1d.6xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|23870m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `z1d.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|z|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|z1d|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1800|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|z1d.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `z1d.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|z|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|z1d|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|1800|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|z1d.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n"
  },
  {
    "path": "website/content/en/docs/reference/metrics.md",
    "content": "---\ntitle: \"Metrics\"\nlinkTitle: \"Metrics\"\nweight: 7\n\ndescription: >\n  Inspect Karpenter Metrics\n---\n<!-- this document is generated from hack/docs/metrics_gen/main.go -->\nKarpenter makes several metrics available in Prometheus format to allow monitoring cluster provisioning status. These metrics are available by default at `karpenter.kube-system.svc.cluster.local:8080/metrics` configurable via the `METRICS_PORT` environment variable documented [here](../settings)\n### `karpenter_ignored_pod_count`\nNumber of pods ignored during scheduling by Karpenter\n- Stability Level: ALPHA\n\n### `karpenter_build_info`\nA metric with a constant '1' value labeled by version from which karpenter was built.\n- Stability Level: STABLE\n\n## Nodeclaims Metrics\n\n### `karpenter_nodeclaims_termination_duration_seconds`\nDuration of NodeClaim termination in seconds.\n- Stability Level: BETA\n\n### `karpenter_nodeclaims_terminated_total`\nNumber of nodeclaims terminated in total by Karpenter. Labeled by the owning nodepool.\n- Stability Level: STABLE\n\n### `karpenter_nodeclaims_instance_termination_duration_seconds`\nDuration of CloudProvider Instance termination in seconds.\n- Stability Level: BETA\n\n### `karpenter_nodeclaims_disrupted_total`\nNumber of nodeclaims disrupted in total by Karpenter. Labeled by reason the nodeclaim was disrupted and the owning nodepool.\n- Stability Level: ALPHA\n\n### `karpenter_nodeclaims_created_total`\nNumber of nodeclaims created in total by Karpenter. Labeled by reason the nodeclaim was created and the owning nodepool.\n- Stability Level: STABLE\n\n### `operator_nodeclaim_status_condition_transitions_total`\nThe count of transitions of a nodeclaim, type and status. Labeled by the type, reason, and status.\n- Stability Level: BETA\n\n### `operator_nodeclaim_status_condition_transition_seconds`\nThe amount of time a condition was in a given state before transitioning. Labeled by the name of the nodeclaim, and the namespace.\n- Stability Level: BETA\n\n### `operator_nodeclaim_status_condition_current_status_seconds`\nThe current amount of time in seconds that a status condition has been in a specific state. Labeled by the name of the nodelcaim, namespace, type, status, and reason.\n- Stability Level: BETA\n\n### `operator_nodeclaim_status_condition_count`\nThe number of a condition for a nodeclaim, type and status. Labeled by the name, namespace, type, status, and reason.\n- Stability Level: BETA\n\n### `operator_nodeclaim_termination_current_time_seconds`\nThe current amount of time in seconds that a nodeclaim has been in terminating state. Labeled by name, and namespace.\n- Stability Level: BETA\n\n### `operator_nodeclaim_termination_duration_seconds`\nThe amount of time taken by a nodeclaim to terminate completely.\n- Stability Level: BETA\n\n## Nodes Metrics\n\n### `karpenter_nodes_total_pod_requests`\nNode total pod requests are the resources requested by pods bound to nodes, including the DaemonSet pods.\n- Stability Level: BETA\n\n### `karpenter_nodes_total_pod_limits`\nNode total pod limits are the resources specified by pod limits, including the DaemonSet pods.\n- Stability Level: BETA\n\n### `karpenter_nodes_total_daemon_requests`\nNode total daemon requests are the resource requested by DaemonSet pods bound to nodes.\n- Stability Level: BETA\n\n### `karpenter_nodes_total_daemon_limits`\nNode total daemon limits are the resources specified by DaemonSet pod limits.\n- Stability Level: BETA\n\n### `karpenter_nodes_termination_duration_seconds`\nThe time taken between a node's deletion request and the removal of its finalizer\n- Stability Level: BETA\n\n### `karpenter_nodes_terminated_total`\nNumber of nodes terminated in total by Karpenter. Labeled by owning nodepool.\n- Stability Level: STABLE\n\n### `karpenter_nodes_system_overhead`\nNode 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.\n- Stability Level: BETA\n\n### `karpenter_nodes_lifetime_duration_seconds`\nThe lifetime duration of the nodes since creation.\n- Stability Level: ALPHA\n\n### `karpenter_nodes_eviction_requests_total`\nThe total number of eviction requests made by Karpenter\n- Stability Level: ALPHA\n\n### `karpenter_nodes_drained_total`\nThe total number of nodes drained by Karpenter\n- Stability Level: ALPHA\n\n### `karpenter_nodes_current_lifetime_seconds`\nNode age in seconds\n- Stability Level: ALPHA\n\n### `karpenter_nodes_created_total`\nNumber of nodes created in total by Karpenter. Labeled by owning nodepool.\n- Stability Level: STABLE\n\n### `karpenter_nodes_allocatable`\nNode allocatable are the resources allocatable by nodes.\n- Stability Level: BETA\n\n### `operator_node_status_condition_transitions_total`\nThe count of transitions of a node, type and status.\n- Stability Level: BETA\n\n### `operator_node_status_condition_transition_seconds`\nThe amount of time a condition was in a given state before transitioning. Labeled by the name of the nodeclaim, and the namespace.\n- Stability Level: BETA\n\n### `operator_node_status_condition_current_status_seconds`\nThe current amount of time in seconds that a status condition has been in a specific state. Labeled by the name of the nodelcaim, namespace, type, status, and reason.\n- Stability Level: BETA\n\n### `operator_node_status_condition_count`\nThe number of a condition for a node, type and status. Labeled by the name, namespace, type, status, and reason.\n- Stability Level: BETA\n\n### `operator_node_termination_current_time_seconds`\nThe current amount of time in seconds that a node has been in terminating state. Labeled by name, and namespace.\n- Stability Level: BETA\n\n### `operator_node_termination_duration_seconds`\nThe amount of time taken by a node to terminate completely.\n- Stability Level: BETA\n\n### `operator_node_event_count`\nThe number of a events for a node.\n- Stability Level: BETA\n\n## Pods Metrics\n\n### `karpenter_pods_state`\nPod 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, nodepool name, zone, architecture, capacity type, instance type and pod phase.\n- Stability Level: BETA\n\n### `karpenter_pods_startup_duration_seconds`\nThe time from pod creation until the pod is running.\n- Stability Level: STABLE\n\n## Termination Metrics\n\n### `operator_termination_duration_seconds`\nThe amount of time taken by an object to terminate completely.\n- Stability Level: DEPRECATED\n\n### `operator_termination_current_time_seconds`\nThe current amount of time in seconds that an object has been in terminating state.\n- Stability Level: DEPRECATED\n\n## Voluntary Disruption Metrics\n\n### `karpenter_voluntary_disruption_queue_failures_total`\nThe number of times that an enqueued disruption decision failed. Labeled by disruption method.\n- Stability Level: BETA\n\n### `karpenter_voluntary_disruption_eligible_nodes`\nNumber of nodes eligible for disruption by Karpenter. Labeled by disruption reason.\n- Stability Level: BETA\n\n### `karpenter_voluntary_disruption_decisions_total`\nNumber of disruption decisions performed. Labeled by disruption decision, reason, and consolidation type.\n- Stability Level: STABLE\n\n### `karpenter_voluntary_disruption_decision_evaluation_duration_seconds`\nDuration of the disruption decision evaluation process in seconds. Labeled by method and consolidation type.\n- Stability Level: BETA\n\n### `karpenter_voluntary_disruption_consolidation_timeouts_total`\nNumber of times the Consolidation algorithm has reached a timeout. Labeled by consolidation type.\n- Stability Level: BETA\n\n## Scheduler Metrics\n\n### `karpenter_scheduler_scheduling_duration_seconds`\nDuration of scheduling simulations used for deprovisioning and provisioning in seconds.\n- Stability Level: STABLE\n\n### `karpenter_scheduler_queue_depth`\nThe number of pods currently waiting to be scheduled.\n- Stability Level: BETA\n\n## Nodepools Metrics\n\n### `karpenter_nodepools_usage`\nThe amount of resources that have been provisioned for a nodepool. Labeled by nodepool name and resource type.\n- Stability Level: ALPHA\n\n### `karpenter_nodepools_limit`\nLimits specified on the nodepool that restrict the quantity of resources provisioned. Labeled by nodepool name and resource type.\n- Stability Level: ALPHA\n\n### `karpenter_nodepools_allowed_disruptions`\nThe number of nodes for a given NodePool that can be concurrently disrupting at a point in time. Labeled by NodePool. Note that allowed disruptions can change very rapidly, as new nodes may be created and others may be deleted at any point.\n- Stability Level: ALPHA\n\n### `operator_nodepool_status_condition_transitions_total`\nThe count of transitions of a nodepool, type and status. Labeled by the type, reason, and status.\n- Stability Level: BETA\n\n### `operator_nodepool_status_condition_transition_seconds`\nThe amount of time a condition was in a given state before transitioning. Labeled by the name of the nodeclaim, and the namespace.\n- Stability Level: BETA\n\n### `operator_nodepool_status_condition_current_status_seconds`\nThe current amount of time in seconds that a status condition has been in a specific state. Labeled by the name of the nodelcaim, namespace, type, status, and reason.\n- Stability Level: BETA\n\n### `operator_nodepool_status_condition_count`\nThe number of an condition for a nodepool, type and status. Labeled by the name, namespace, type, status, and reason.\n- Stability Level: BETA\n\n### `operator_nodepool_termination_current_time_seconds`\nThe current amount of time in seconds that a nodepool has been in terminating state. Labeled by name, and namespace.\n- Stability Level: BETA\n\n### `operator_nodepool_termination_duration_seconds`\nDuration of NodePool termination in seconds.\n- Stability Level: BETA\n\n## EC2NodeClass Metrics\n\n### `operator_ec2nodeclass_status_condition_transitions_total`\nThe count of transitions of a ec2nodeclass, type and status. Labeled by the type, reason, and status.\n- Stability Level: BETA\n\n### `operator_ec2nodeclass_status_condition_transition_seconds`\nThe amount of time a condition was in a given state before transitioning. Labeled by the name of the nodeclaim, and the namespace.\n- Stability Level: BETA\n\n### `operator_ec2nodeclass_status_condition_current_status_seconds`\nThe current amount of time in seconds that a status condition has been in a specific state. Labeled by the name of the nodelcaim, namespace, type, status, and reason.\n- Stability Level: BETA\n\n### `operator_ec2nodeclass_status_condition_count`\nThe number of an condition for an ec2nodeclass, type and status. Labeled by the name, namespace, type, status, and reason.\n- Stability Level: BETA\n\n### `operator_ec2nodeclass_termination_current_time_seconds`\nThe current amount of time in seconds that an ec2nodeclass has been in terminating state. Labeled by name, and namespace.\n- Stability Level: BETA\n\n### `operator_ec2nodeclass_termination_duration_seconds`\nDuration of ec2nodeclass termination in seconds.\n- Stability Level: BETA\n\n## Interruption Metrics\n\n### `karpenter_interruption_received_messages_total`\nCount of messages received from the SQS queue. Broken down by message type and whether the message was actionable.\n- Stability Level: STABLE\n\n### `karpenter_interruption_message_queue_duration_seconds`\nAmount of time an interruption message is on the queue before it is processed by karpenter.\n- Stability Level: STABLE\n\n### `karpenter_interruption_deleted_messages_total`\nCount of messages deleted from the SQS queue.\n- Stability Level: STABLE\n\n## Cluster Metrics\n\n### `karpenter_cluster_utilization_percent`\nUtilization of allocatable resources by pod requests\n- Stability Level: ALPHA\n\n## Cluster State Metrics\n\n### `karpenter_cluster_state_unsynced_time_seconds`\nThe time for which cluster state is not synced\n- Stability Level: ALPHA\n\n### `karpenter_cluster_state_synced`\nReturns 1 if cluster state is synced and 0 otherwise. Synced checks that nodeclaims and nodes that are stored in the APIServer have the same representation as Karpenter's cluster state\n- Stability Level: STABLE\n\n### `karpenter_cluster_state_node_count`\nCurrent count of nodes in cluster state\n- Stability Level: STABLE\n\n## Cloudprovider Metrics\n\n### `karpenter_cloudprovider_instance_type_offering_price_estimate`\nInstance type offering estimated hourly price used when making informed decisions on node cost calculation, based on instance type, capacity type, and zone.\n- Stability Level: BETA\n\n### `karpenter_cloudprovider_instance_type_offering_available`\nInstance type offering availability, based on instance type, capacity type, and zone\n- Stability Level: BETA\n\n### `karpenter_cloudprovider_instance_type_memory_bytes`\nMemory, in bytes, for a given instance type.\n- Stability Level: BETA\n\n### `karpenter_cloudprovider_instance_type_cpu_cores`\nVCPUs cores for a given instance type.\n- Stability Level: BETA\n\n### `karpenter_cloudprovider_errors_total`\nTotal number of errors returned from CloudProvider calls.\n- Stability Level: BETA\n\n### `karpenter_cloudprovider_duration_seconds`\nDuration of cloud provider method calls. Labeled by the controller, method name and provider.\n- Stability Level: BETA\n\n## Cloudprovider Batcher Metrics\n\n### `karpenter_cloudprovider_batcher_batch_time_seconds`\nDuration of the batching window per batcher\n- Stability Level: BETA\n\n### `karpenter_cloudprovider_batcher_batch_size`\nSize of the request batch per batcher\n- Stability Level: BETA\n\n## Controller Runtime Metrics\n\n### `controller_runtime_terminal_reconcile_errors_total`\nTotal number of terminal reconciliation errors per controller\n- Stability Level: STABLE\n\n### `controller_runtime_reconcile_total`\nTotal number of reconciliations per controller\n- Stability Level: STABLE\n\n### `controller_runtime_reconcile_time_seconds`\nLength of time per reconciliation per controller\n- Stability Level: STABLE\n\n### `controller_runtime_reconcile_panics_total`\nTotal number of reconciliation panics per controller\n- Stability Level: STABLE\n\n### `controller_runtime_reconcile_errors_total`\nTotal number of reconciliation errors per controller\n- Stability Level: STABLE\n\n### `controller_runtime_max_concurrent_reconciles`\nMaximum number of concurrent reconciles per controller\n- Stability Level: STABLE\n\n### `controller_runtime_conversion_webhook_panics_total`\nTotal number of conversion webhook panics\n- Stability Level: STABLE\n\n### `controller_runtime_active_workers`\nNumber of currently used workers per controller\n- Stability Level: STABLE\n\n## Workqueue Metrics\n\n### `workqueue_work_duration_seconds`\nHow long in seconds processing an item from workqueue takes.\n- Stability Level: STABLE\n\n### `workqueue_unfinished_work_seconds`\nHow many seconds of work has been done that is in progress and hasn't been observed by work_duration. Large values indicate stuck threads. One can deduce the number of stuck threads by observing the rate at which this increases.\n- Stability Level: STABLE\n\n### `workqueue_retries_total`\nTotal number of retries handled by workqueue\n- Stability Level: STABLE\n\n### `workqueue_queue_duration_seconds`\nHow long in seconds an item stays in workqueue before being requested\n- Stability Level: STABLE\n\n### `workqueue_longest_running_processor_seconds`\nHow many seconds has the longest running processor for workqueue been running.\n- Stability Level: STABLE\n\n### `workqueue_depth`\nCurrent depth of workqueue by workqueue and priority\n- Stability Level: STABLE\n\n### `workqueue_adds_total`\nTotal number of adds handled by workqueue\n- Stability Level: STABLE\n\n## Status Condition Metrics\n\n### `operator_status_condition_transitions_total`\nThe count of transitions of a given object, type and status.\n- Stability Level: DEPRECATED\n\n### `operator_status_condition_transition_seconds`\nThe amount of time a condition was in a given state before transitioning. e.g. Alarm := P99(Updated=False) > 5 minutes\n- Stability Level: DEPRECATED\n\n### `operator_status_condition_current_status_seconds`\nThe current amount of time in seconds that a status condition has been in a specific state. Alarm := P99(Updated=Unknown) > 5 minutes\n- Stability Level: DEPRECATED\n\n### `operator_status_condition_count`\nThe number of an condition for a given object, type and status. e.g. Alarm := Available=False > 0\n- Stability Level: DEPRECATED\n\n## Client Go Metrics\n\n### `client_go_request_total`\nNumber of HTTP requests, partitioned by status code and method.\n- Stability Level: STABLE\n\n### `client_go_request_duration_seconds`\nRequest latency in seconds. Broken down by verb, group, version, kind, and subresource.\n- Stability Level: STABLE\n\n## AWS SDK Go Metrics\n\n### `aws_sdk_go_request_total`\nThe total number of AWS SDK Go requests\n- Stability Level: STABLE\n\n### `aws_sdk_go_request_retry_count`\nThe total number of AWS SDK Go retry attempts per request\n- Stability Level: STABLE\n\n### `aws_sdk_go_request_duration_seconds`\nLatency of AWS SDK Go requests\n- Stability Level: STABLE\n\n### `aws_sdk_go_request_attempt_total`\nThe total number of AWS SDK Go request attempts\n- Stability Level: STABLE\n\n### `aws_sdk_go_request_attempt_duration_seconds`\nLatency of AWS SDK Go request attempts\n- Stability Level: STABLE\n\n## Leader Election Metrics\n\n### `leader_election_slowpath_total`\nTotal number of slow path exercised in renewing leader leases. 'name' is the string used to identify the lease. Please make sure to group by name.\n- Stability Level: STABLE\n\n### `leader_election_master_status`\nGauge of if the reporting system is master of the relevant lease, 0 indicates backup, 1 indicates master. 'name' is the string used to identify the lease. Please make sure to group by name.\n- Stability Level: STABLE\n\n"
  },
  {
    "path": "website/content/en/docs/reference/settings.md",
    "content": "---\ntitle: \"Settings\"\nlinkTitle: \"Settings\"\nweight: 5\ndescription: >\n  Configure Karpenter\n---\n\nKarpenter surfaces environment variables and CLI parameters to allow you to configure certain global settings on the controllers. These settings are described below.\n\n[comment]: <> (the content below is generated from hack/docs/configuration_gen/main.go)\n\n| Environment Variable | CLI Flag | Description |\n|--|--|--|\n| BATCH_IDLE_DURATION | \\-\\-batch-idle-duration | The maximum amount of time with no new pending 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. (default = 1s)|\n| BATCH_MAX_DURATION | \\-\\-batch-max-duration | 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. (default = 10s)|\n| CLUSTER_CA_BUNDLE | \\-\\-cluster-ca-bundle | Cluster CA bundle for nodes to use for TLS connections with the API server. If not set, this is taken from the controller's TLS configuration.|\n| CLUSTER_ENDPOINT | \\-\\-cluster-endpoint | The external kubernetes cluster endpoint for new nodes to connect with. If not specified, will discover the cluster endpoint using DescribeCluster API.|\n| CLUSTER_NAME | \\-\\-cluster-name | [REQUIRED] The kubernetes cluster name for resource discovery.|\n| CPU_REQUESTS | \\-\\-cpu-requests | CPU requests in millicores on the container running the controller. (default = 1000)|\n| DISABLE_CLUSTER_STATE_OBSERVABILITY | \\-\\-disable-cluster-state-observability | Disable cluster state metrics and events|\n| DISABLE_CONTROLLER_WARMUP | \\-\\-disable-controller-warmup | Disable controller warmup which starts controller sources before leader election is won. Controller warmup pre-populates caches and improves leader failover time.|\n| DISABLE_DRY_RUN | \\-\\-disable-dry-run | If true, then disable dry run validation for EC2NodeClasses.|\n| DISABLE_LEADER_ELECTION | \\-\\-disable-leader-election | Disable the leader election client before executing the main loop. Disable when running replicated components for high availability is not desired.|\n| EKS_CONTROL_PLANE | \\-\\-eks-control-plane | Marking this true means that your cluster is running with an EKS control plane and Karpenter should attempt to discover cluster details from the DescribeCluster API |\n| ENABLE_PROFILING | \\-\\-enable-profiling | Enable the profiling on the metric endpoint|\n| FEATURE_GATES | \\-\\-feature-gates | Optional features can be enabled / disabled using feature gates. Current options are: NodeRepair, ReservedCapacity, SpotToSpotConsolidation, NodeOverlay, and StaticCapacity. (default = NodeRepair=false,ReservedCapacity=true,SpotToSpotConsolidation=false,NodeOverlay=false,StaticCapacity=false)|\n| HEALTH_PROBE_PORT | \\-\\-health-probe-port | The port the health probe endpoint binds to for reporting controller health (default = 8081)|\n| IGNORE_DRA_REQUESTS | \\-\\-ignore-dra-requests | When set, Karpenter will ignore pods' DRA requests during scheduling simulations. NOTE: This flag will be removed once formal DRA support is GA in Karpenter.|\n| INTERRUPTION_QUEUE | \\-\\-interruption-queue | Interruption queue is the name of the SQS queue used for processing interruption events from EC2. Interruption handling is disabled if not specified. Enabling interruption handling may require additional permissions on the controller service account. Additional permissions are outlined in the docs.|\n| ISOLATED_VPC | \\-\\-isolated-vpc | 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 on-demand pricing endpoint.|\n| KARPENTER_SERVICE | \\-\\-karpenter-service | The Karpenter Service name for the dynamic webhook certificate|\n| KUBE_CLIENT_BURST | \\-\\-kube-client-burst | The maximum allowed burst of queries to the kube-apiserver (default = 300)|\n| KUBE_CLIENT_QPS | \\-\\-kube-client-qps | The smoothed rate of qps to kube-apiserver (default = 200)|\n| LEADER_ELECTION_NAME | \\-\\-leader-election-name | Leader election name to create and monitor the lease if running outside the cluster (default = karpenter-leader-election)|\n| LEADER_ELECTION_NAMESPACE | \\-\\-leader-election-namespace | Leader election namespace to create and monitor the lease if running outside the cluster|\n| LOG_ERROR_OUTPUT_PATHS | \\-\\-log-error-output-paths | Optional comma separated paths for logging error output (default = stderr)|\n| LOG_LEVEL | \\-\\-log-level | Log verbosity level. Can be one of 'debug', 'info', or 'error' (default = info)|\n| LOG_OUTPUT_PATHS | \\-\\-log-output-paths | Optional comma separated paths for directing log output (default = stdout)|\n| 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)|\n| METRICS_PORT | \\-\\-metrics-port | The port the metric endpoint binds to for operating metrics about the controller itself (default = 8080)|\n| MIN_VALUES_POLICY | \\-\\-min-values-policy | Min values policy for scheduling. Options include 'Strict' for existing behavior where min values are strictly enforced or 'BestEffort' where Karpenter relaxes min values when it isn't satisfied. (default = Strict)|\n| PREFERENCE_POLICY | \\-\\-preference-policy | How the Karpenter scheduler should treat preferences. Preferences include preferredDuringSchedulingIgnoreDuringExecution node and pod affinities/anti-affinities and ScheduleAnyways topologySpreadConstraints. Can be one of 'Ignore' and 'Respect' (default = Respect)|\n| RESERVED_ENIS | \\-\\-reserved-enis | Reserved ENIs are not included in the calculations for max-pods or kube-reserved. This is most often used in the VPC CNI custom networking setup https://docs.aws.amazon.com/eks/latest/userguide/cni-custom-network.html. (default = 0)|\n| VM_MEMORY_OVERHEAD_PERCENT | \\-\\-vm-memory-overhead-percent | The VM memory overhead as a percent that will be subtracted from the total memory for all instance types when cached information is unavailable. (default = 0.075)|\n\n[comment]: <> (end docs generated content from hack/docs/configuration_gen/main.go)\n\n### Feature Gates\n\nKarpenter uses [feature gates](https://kubernetes.io/docs/reference/command-line-tools-reference/feature-gates/#feature-gates-for-alpha-or-beta-features) You can enable the feature gates through the `--feature-gates` CLI environment variable or the `FEATURE_GATES` environment variable in the Karpenter deployment. For example, you can configure drift, spotToSpotConsolidation by setting the CLI argument: `--feature-gates Drift=true,SpotToSpotConsolidation=true,ReservedCapacity=true`.\n\n| Feature                 | Default | Stage  | Since   | Until   |\n|-------------------------|---------|--------|---------|---------|\n| Drift                   | false   | Alpha  | v0.21.x | v0.32.x |\n| Drift                   | true    | Beta   | v0.33.x | v0.37.x |\n| SpotToSpotConsolidation | false   | Alpha  | v0.34.x |         |\n| NodeRepair              | false   | Alpha  | v1.1.x  |         |\n| ReservedCapacity        | false   | Alpha  | v1.3.x  | v1.5.x  |\n| ReservedCapacity        | true    | Beta   | v1.6.x  |         |\n| NodeOverlay             | false   | Alpha  | v1.7.x  |         |\n| StaticCapacity          | false   | Alpha  | v1.8.x  |         |\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nIn v1, drift has been promoted to stable and the feature gate removed. Users can continue to control drift by using disruption budgets by reason.\nExample:\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\nspec:\n…\n  disruption:\n    budgets:\n    - nodes: 10%\n    # On Weekdays during business hours, don't do any deprovisioning regarding drift.\n    - nodes: \"0\"\n      schedule: \"0 9 * * mon-fri\"\n      duration: 8h\n      reasons:\n      -\tDrifted\n    # during non-business hours do drift for up to 10% of nodes\n    - nodes: \"10%\"\n      reasons:\n      -\tDrifted\n```\n{{% /alert %}}\n\n### Batching Parameters\n\nThe 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.\n\nFor 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.\n\n#### Batch Idle Duration\n\nThe batch idle duration duration 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.\n\nThis 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`.\n\n#### Batch Max Duration\n\nThe batch max duration 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.\n\nThis 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`.\n"
  },
  {
    "path": "website/content/en/docs/reference/threat-model.md",
    "content": "---\ntitle: \"Threat Model\"\nlinkTitle: \"Threat Model\"\nweight: 999\n---\n\nKarpenter observes Kubernetes pods and launches nodes in response to those pods’ scheduling constraints. Karpenter does not perform the actual scheduling and instead waits for [kube-scheduler](https://kubernetes.io/docs/concepts/scheduling-eviction/kube-scheduler/) to schedule the pods.\n\nWhen running in AWS, Karpenter is typically installed onto EC2 instances that run in EKS Clusters. Karpenter relies on public facing AWS APIs and standard IAM Permissions. Karpenter uses AWS-SDK-Go v1, and AWS advises that credentials are provided using [IAM Roles for Service Accounts](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html).\n\n\n## Architecture & Actors\n\n1. **Cluster Operator**: An identity that installs and configures Karpenter in a Kubernetes cluster, and configures Karpenter's cloud identity and permissions.\n2. **Cluster Developer**: An identity that can create pods, typically through Deployments, DaemonSets, or other pod-controller types.\n3. **Karpenter Controller:** The Karpenter application pod that operates inside a cluster.\n\n![threat-model](/threat-model.png)\n\n## Capabilities\n\n### Cluster Operator\n\nThe Cluster Operator has full control to install and configure Karpenter including all [`NodePools`]({{<ref \"../concepts/nodepools\" >}}) and [`EC2NodeClasses`]({{<ref \"../concepts/nodeclasses\" >}}). The Cluster Operator has privileges to manage the cloud identities and permissions for Nodes, and the cloud identity and permissions for Karpenter.\n\n### Cluster Developer\n\nA Cluster Developer has the ability to create pods via `Deployments`, `ReplicaSets`, `StatefulSets`, `Jobs`, etc. This assumes that the Cluster Developer cannot modify the Karpenter pod or launch pods using Karpenter’s service account and gain access to Karpenter’s IAM role.\n\n### Karpenter Controller\n\nKarpenter has permissions to create and manage cloud instances. Karpenter has Kubernetes API permissions to create, update, and remove nodes, as well as evict pods. For a full list of the permissions, see the RBAC rules in the helm chart template. Karpenter also has AWS IAM permissions to create instances with IAM roles.\n\n* [aggregate-clusterrole.yaml](https://github.com/aws/karpenter/blob/v1.10.0/charts/karpenter/templates/aggregate-clusterrole.yaml)\n* [clusterrole-core.yaml](https://github.com/aws/karpenter/blob/v1.10.0/charts/karpenter/templates/clusterrole-core.yaml)\n* [clusterrole.yaml](https://github.com/aws/karpenter/blob/v1.10.0/charts/karpenter/templates/clusterrole.yaml)\n* [rolebinding.yaml](https://github.com/aws/karpenter/blob/v1.10.0/charts/karpenter/templates/rolebinding.yaml)\n* [role.yaml](https://github.com/aws/karpenter/blob/v1.10.0/charts/karpenter/templates/role.yaml)\n\n## Assumptions\n\n| Category\t     | Assumption\t                                                                                                                                                                                                            | Comment\t                                                                                                                                                                                                                          |\n|---------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| Generic\t      | The Karpenter pod is operated on a node in the cluster, and uses a Service Account for authentication to the Kubernetes API\t                                                                                           | Cluster Operators may want to isolate the node running the Karpenter pod to a system-pool of nodes to mitigate the possibility of container breakout with Karpenter’s permissions. \t                                              |\n| Generic\t      | Cluster Developer does not have any Kubernetes permissions to manage Karpenter running in the cluster (The deployment, pods, clusterrole, etc)\t                                                                        | \t                                                                                                                                                                                                                                 |\n| Generic\t      | Restrictions on the fields of pods a Cluster Developer can create are out of scope. \t                                                                                                                                  | Cluster Operators can use policy frameworks to enforce restrictions on Pod capabilities\t                                                                                                                                          |\n| Generic\t      | No sensitive data is included in non-Secret resources in the Kubernetes API. The Karpenter controller has the ability to list all pods, nodes, deployments, and many other pod-controller and storage resource types.\t | Karpenter does not have permission to list/watch cluster-wide ConfigMaps or Secrets\t                                                                                                                                              |\n| Generic\t      | Karpenter has permissions to create, modify, and delete nodes from the cluster, and evict any pod. \t                                                                                                                   | Cluster Operators running applications with varying security profiles in the same cluster may want to configure dedicated nodes and scheduling rules for Karpenter to mitigate potential container escapes from other containers\t |\n| AWS-Specific\t | The Karpenter IAM policy is encoded in the GitHub repo. Any additional permissions possibly granted to that role by the administrator are out of scope\t                                                                | \t                                                                                                                                                                                                                                 |\n| AWS-Specific\t | The Karpenter pod uses IRSA for AWS credentials \t                                                                                                                                                                      | Setup of IRSA is out of scope for this document \t                                                                                                                                                                                 |\n\n## Generic Threats and Mitigations\n\n### Threat: Cluster Developer can influence creation of an arbitrary number of nodes\n\n**Background**: Karpenter creates new instances based on the count of pending pods.\n\n**Threat**: A Cluster Developer attempts to have Karpenter create more instances than intended by creating a large number of pods or by using anti-affinity to schedule one pod per node.\n\n**Mitigation**: In addition to [Kubernetes resource limits](https://kubernetes.io/docs/concepts/policy/resource-quotas/#object-count-quota), Cluster Operators can [configure limits on a NodePool]({{< ref \"../concepts/nodepools#spec-limits\" >}}) to limit the total amount of memory, CPU, or other resources provisioned across all nodes.\n\n## Threats\n\n### Threat: Using EC2 CreateTag/DeleteTag Permissions to Orchestrate Instance Creation/Deletion\n\n**Background**: As of `0.28.0`, Karpenter creates a mapping between CloudProvider instances and CustomResources in the cluster for capacity tracking. To ensure this mapping is consistent, Karpenter utilizes the following tag keys:\n\n* `karpenter.sh/managed-by`\n* `karpenter.sh/nodepool`\n* `kubernetes.io/cluster/${CLUSTER_NAME}`\n* `karpenter.sh/provisioner-name` (prior to `0.32.0`)\n\nAny user that has the ability to Create/Delete tags on CloudProvider instances will have the ability to orchestrate Karpenter to Create/Delete CloudProvider instances as a side effect.\n\nIn addition, as of `0.29.0`, Karpenter will Drift on Security Groups and Subnets. If a user has the Create/Delete tags permission for either of resources, they can orchestrate Karpenter to Create/Delete CloudProvider instances as a side effect.\n\n**Threat:** A Cluster Operator attempts to create or delete a tag on a resource discovered by Karpenter. If it has the ability to create a tag it can effectively create or delete CloudProvider instances associated with the tagged resources.\n\n**Mitigation** Cluster Operators should [enforce tag-based IAM policies](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html) on these tags against any EC2 instance resource (`i-*`) for any users that might have [CreateTags](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTags.html)/[DeleteTags](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DeleteTags.html) permissions but should not have [RunInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html)/[TerminateInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_TerminateInstances.html) permissions.\n\n### Threat: Launching EC2 instances with IAM roles not intended for Karpenter nodes\n\n**Background**: Many IAM roles in an AWS account may trust the EC2 service principal. IAM administrators must grant the `iam:PassRole` permission to IAM principals to allow those principals in the account to launch instances with specific roles.\n\n**Threat:** A Cluster Operator attempts to create an `EC2NodeClass` with an IAM role not intended for Karpenter\n\n**Mitigation**: Cluster Operators must enumerate the roles in the resource section of the IAM policy granted to the Karpenter role for the `iam:PassRole` action. Karpenter will fail to generate an instance profile if role that is specified in the `spec.role` section of the `EC2NodeClass` is not enumerated in the `iam:PassRole` permission.\n\n### Threat: Karpenter can orchestrate the creation/deletion of IAM Instance Profiles it doesn't own\n\n**Background**: Karpenter has permission to create/update/delete instance profiles as part of its controller permissions to ensure that it can auto-generate instance profiles when EC2NodeClasses are created.\n\n**Threat**: An actor who obtains control of the Karpenter pod’s IAM role may delete instance profiles not owned by Karpenter, causing workload disruption to other instances using the profile in the account.\n\n**Mitigation**: Karpenter's controller permissions enforce that it creates instance profiles with tags which provide ownership information. These tags include:\n\n* `karpenter.sh/managed-by`\n* `kubernetes.io/cluster/${CLUSTER_NAME}`\n* `karpenter.k8s.aws/ec2nodeclass`\n* `topology.kubernetes.io/region`\n\nThese tags ensure that instance profiles created by Karpenter in the account are unique to that cluster. Karpenter's controller permissions _only_ allow it to act on instance profiles that contain these tags which match the cluster information.\n\n### Threat: Karpenter can be used to create or terminate EC2 instances outside the cluster\n\n**Background**: EC2 instances can exist in an AWS account outside of the Kubernetes cluster.\n\n**Threat**: An actor who obtains control of the Karpenter pod’s IAM role may be able to create or terminate EC2 instances not part of the Kubernetes cluster managed by Karpenter.\n\n**Mitigation**: Karpenter creates instances with tags, several of which are enforced in the IAM policy granted to the Karpenter IAM role that restrict the instances Karpenter can terminate. One tag requires that the instance was provisioned by a Karpenter controller (`karpenter.sh/nodepool`), another tag can include a cluster name to mitigate any termination between two clusters with Karpenter in the same account (`kubernetes.io/cluster/${CLUSTER_NAME}`. Cluster Operators also can restrict the region to prevent two clusters in the same account with the same name in different regions.\n\nAdditionally, Karpenter does not allow tags to be modified on instances unowned by Karpenter after creation, except for the `Name` and `karpenter.sh/nodeclaim` tags. Though these tags can be changed after instance creation, `aws:ResourceTag` conditions enforce that the Karpenter controller is only able to change these tags on instances that it already owns, enforced through the `karpenter.sh/nodepool` and `kubernetes.io/cluster/${CLUSTER_NAME}` tags.\n\n### Threat: Karpenter launches an EC2 instance using an unintended AMI\n\n**Background**: Cluster Developers can create Node Templates that refer to an AMI by metadata, such as a name rather than an AMI resource ID.\n\n**Threat:** A threat actor creates a public AMI with the same name as a customer’s AMI in an attempt to get Karpenter to select the threat actor’s AMI instead of the intended AMI.\n\n**Mitigation**: When selecting AMIs by name or tags, Karpenter defaults to adding an ownership filter of `self,amazon` so AMI images external to the account are not used.\n"
  },
  {
    "path": "website/content/en/docs/tasks/_index.md",
    "content": "---\ntitle: \"Tasks\"\nlinkTitle: \"Tasks\"\nweight: 25\ndescription: >\n  Tasks to run with Karpenter\ncascade:\n  type: docs\n---\n\n"
  },
  {
    "path": "website/content/en/docs/tasks/managing-amis.md",
    "content": "---\ntitle: \"Managing AMIs\"\nlinkTitle: \"Managing AMIs\"\ndescription: >\n  Task for managing AMIs in Karpenter\n---\n\n{{% alert title=\"Important\" color=\"warning\" %}}\nKarpenter __heavily recommends against__ opting-in to use an `amiSelectorTerm` with `@latest` unless you are doing this in a pre-production environment or are willing to accept the risk that a faulty AMI may cause downtime in your production clusters. In general, if using a publicly released version of a well-known AMI type (like AL2, AL2023, or Bottlerocket), we recommend that you pin to a version of that AMI and deploy newer versions of that AMI type in a staged approach when newer patch versions are available.\n\n```yaml\namiSelectorTerms:\n  - alias: al2023@v20240807\n```\n\nMore details are described in [Controlling AMI Replacement]({{< relref \"#controlling-ami-replacement\" >}}) below.\n{{% /alert %}}\n\nUnderstanding how Karpenter assigns AMIs to nodes can help ensure that your workloads will run successfully on those nodes and continue to run if the nodes are upgraded to newer AMIs.\nBelow we describe how Karpenter assigns AMIs to nodes when they are first deployed and how newer AMIs are assigned later when nodes are spun up to replace old ones.\nLater, it describes the options you have to assert control over how AMIs are used by Karpenter for your clusters.\n\nFeatures for managing AMIs described here should be considered as part of the larger upgrade policies that you have for your clusters.\nSee [How do I upgrade an EKS Cluster with Karpenter]({{< relref \"../faq/#how-do-i-upgrade-an-eks-cluster-with-karpenter\" >}}) for details on this process.\n\n## How Karpenter assigns AMIs to nodes\n\nHere is how Karpenter assigns AMIs nodes:\n\n* When you create an `EC2NodeClass`, you are required to specify [`amiSelectorTerms`]({{< relref \"../concepts/nodeclasses/#specamiselectorterms\" >}}). [`amiSelectorTerms`]({{< relref \"../concepts/nodeclasses/#specamiselectorterms\" >}}) allow you to select on AMIs that can be spun-up by this EC2NodeClass based on tags, id, name, or an alias. Multiple AMIs may be specified, and Karpenter will choose the newest compatible AMI when spinning up new nodes.\n* Some `amiSelectorTerm` types are static and always resolve to the same AMI (e.g. `id`). However, some are dynamic and may resolve to different AMIs over time. Examples of dynamic types include `alias`, `tags`, and `name` (when using a wildcard). For example, if you specify an `amiSelectorTerm` with an `alias` set to `@latest` (e.g. `al2023@latest`, `al2@latest`, or `bottlerocket@latest`), Karpenter will use the _latest_ release for that AMI type when spinning up a new node.\n* When a node is replaced, Karpenter checks to see if a newer AMI is available based on your `amiSelectorTerms`. If a newer AMI is available, Karpenter will automatically use the new AMI to spin up the new node. __In particular, if you are using a dynamic `amiSelectorTerm` type, you may get a new AMI deployed to your environment without having properly tested it.__\n\nWhenever a node is replaced, the replacement node will be launched using the newest AMI based on your `amiSelectorTerms`. Nodes may be replaced due to manual deletion, or any of Karpenter's automated methods:\n- [**Expiration**]({{< relref \"../concepts/disruption/#expiration\" >}}): Automatically initiates replacement at a certain time after the node is created.\n-  [**Consolidation**]({{< relref \"../concepts/disruption/#consolidation\" >}}): If Karpenter detects that a cheaper node can be used to run the same workloads, Karpenter may replace the current node automatically.\n- [**Drift**]({{< relref \"../concepts/disruption/#drift\" >}}): If a node's state no longer matches the desired state dictated by the `NodePool` or `EC2NodeClass`, it will be replaced, including if the node's AMI no longer matches the latest AMI selected by the `amiSelectorTerms`.\n- [**Interruption**]({{< relref \"../concepts/disruption/#interruption\" >}}): Nodes are sometimes involuntarily disrupted by things like Spot interruption, health changes, and instance events, requiring new nodes to be deployed.\n\nSee [**Automated Methods**]({{< relref \"../concepts/disruption/#automated-methods\" >}}) for details on how Karpenter uses these automated actions to replace nodes.\n\nThe most relevant automated disruption method is [**Drift**]({{< relref \"../concepts/disruption/#drift\" >}}), since it is initiated when a new AMI is selected-on by your `amiSelectorTerms`. This could be due to a manual update (e.g. a new `id` term was added), or due to a new AMI being resolved by a dynamic term.\n\nIf you're using an `alias` with the `latest` pin (e.g. `al2023@latest`), Karpenter periodically checks for new AMI releases. Since AMI releases are outside your control, this could result in new AMIs being deployed before they have been properly tested in a lower environment. This is why we **strongly recommend** using version pins in production environments when using an alias (e.g. `al2023@v20240807`).\n\n{{% alert title=\"Important\" color=\"warning\" %}}\nIf you are new to Karpenter, you should know that the behavior described here is different than you get with Managed Node Groups (MNG). MNG will always use the assigned AMI when it creates a new node and will never automatically upgrade to a new AMI when a new node is required. See [Updating a Managed Node Group](https://docs.aws.amazon.com/eks/latest/userguide/update-managed-node-group.html) to see how you would manually update MNG to use new AMIs.\n{{% /alert %}}\n\n## Controlling AMI Replacement\n\nKarpenter's automated node replacement functionality in tandem with the `EC2NodeClass` gives you a lot of flexibility to control the desired state of nodes on your cluster. For example, you can opt-in to AMI auto-upgrades using `alias` set to `@latest`; however, this has to be weighed heavily against the risk of newer versions of an AMI breaking existing applications on your cluster. Alternatively, you can choose to pin your AMIs in your production clusters to avoid the risk of breaking changes; however, this has to be weighed against the management cost of testing new AMIs in pre-production and keeping up with the latest AMI versions.\n\nKarpenter offers you various controls to ensure you don't take on too much risk as you rollout new versions of AMIs to your production clusters. Below shows how you can use these controls:\n\n* [Pinning AMIs]({{< relref \"#pinning-amis\" >}}): If workloads require a particluar AMI, this control ensures that it is the only AMI used by Karpenter. This can be used in combination with [Testing AMIs]({{< relref \"#testing-amis\" >}}) where you lock down the AMI in production, but allow the newest AMIs in a test cluster while you test your workloads before upgrading production.\n* [Testing AMIs]({{< relref \"#testing-amis\" >}}): The safest way for ensuring that a new AMI doesn't break your workloads is to test it before putting it into production. This takes the most effort on your part, but most effectively models how your workloads will run in production, allowing you to catch issues ahead of time. Note that you can sometimes get different results from your test environment when you roll a new AMI into production, since issues like scale and other factors can elevate problems you might not see in test. Combining this with other controls like [Using Disruption Budgets]({{< relref \"#using-disruption-budgets\" >}}) can allow you to catch problems before they impact your whole cluster.\n* [Using Disruption Budgets]({{< relref \"#using-disruption-budgets\" >}}): This option can be used as a way of mitigating the scope of impact if a new AMI causes problems with your workloads. With Disruption budgets you can slow the pace of upgrades to nodes with new AMIs or make sure that upgrades only happen during selected dates and times (using `schedule`). This doesn't prevent a bad AMI from being deployed, but it allows you to control when nodes are upgraded, and gives you more time to respond to rollout issues.\n\n### Pinning AMIs\n\nWhen you configure the [**EC2NodeClass**]({{< relref \"../concepts/nodeclasses\" >}}), you are required to configure which AMIs you want Karpenter to select on using the `amiSelectorTerms` field. When pinning to a specific `id`, `name`, `tags` or an `alias` that contains a fixed version, Karpenter will only select on a single AMI and won't automatically upgrade your nodes to a new version of an AMI. This prevents a new and potentially untested AMI from replacing existing nodes when those nodes are terminated.\n).\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nPinning an AMI to an `alias` type with a fixed version _will_ pin the AMI so long as your K8s control plane version doesn't change. Unlike `id` and `name` types, specifying a version `alias` in your `amiSelectorTerms` will cause Karpenter to consider the K8s control plane version of your cluster when choosing the AMI. If you upgrade your Kubernetes cluster while using this alias type, Karpenter _will_ automatically drift your nodes to a new AMI that still matches the AMI version but also matches your new K8s control plane version.\n{{% /alert %}}\n\nThese examples show three different ways to identify the same AMI:\n\n```yaml\n# Using alias\n# Pinning to this fixed version alias will pull this version of the AMI,\n# matching the K8s control plane version of your cluster\namiSelectorTerms:\n- alias: al2023@v20240219\n```\n\n```yaml\n# Using name\n# This will only ever select the AMI that contains this exact name\namiSelectorTerms:\n- name: al2023-ami-2023.3.20240219.0-kernel-6.1-x86_64\n```\n\n```yaml\n# Using id\n# This will only ever select this specific AMI id\namiSelectorTerms:\n- id: ami-052c9ea013e6e3567\n```\n\n```yaml\n# Using tags\n# You can use a CI/CD system to test newer versions of an AMI\n# and automatically tag them as you validate that they are safe to upgrade to\namiSelectorTerms:\n- tags:\n    karpenter.sh/discovery: \"${CLUSTER_NAME}\"\n    environment: prod\n```\n\nSee the [**spec.amiSelectorTerms**]({{< relref \"../concepts/nodeclasses/#specamiselectorterms\" >}}) section of the NodeClasses page for details.\nKeep in mind, that this could prevent you from getting critical security patches when new AMIs are available, but it does give you control over exactly which AMI is running.\n\n### Testing AMIs\n\nInstead of avoiding AMI upgrades, you can set up test clusters where you can try out new AMI releases before they are put into production. For example, you could have:\n\n* **Test clusters**: On lower environment clusters, you can run the latest AMIs e.g. `al2023@latest`, `al2@latest`, `bottlerocket@latest`, for your workloads in a safe environment. This ensures that you get the latest patches for AMIs where downtime to applications isn't as critical and allows you to validate patches to AMIs before they are deployed to production.\n\n* **Production clusters**: After you've confirmed that the AMI works in your lower environments, you can pin the latest AMIs to be deployed in your production clusters to roll out the AMI. Refer to [Pinning AMIs]({{< relref \"#pinning-amis\" >}}) for how to choose a particular AMI by `alias`, `name` or `id`. Remember that it is still best practice to gradually roll new AMIs into your cluster, even if they have been tested. So consider implementing that for your production clusters as described in [Using Disruption Budgets]({{< relref \"#using-disruption-budgets\" >}}).\n\n### Using Disruption Budgets\n\nTo reduce the risk of entire workloads being immediately degraded when a new AMI is deployed, you can enable Karpenter's [**Node Disruption Budgets**]({{< relref \"#node-disruption-budgets \" >}}) as well as ensure that you have [**Pod Disruption Budgets**]({{< relref \"#pod-disruption-budgets \" >}}) configured for applications on your cluster. Below provides more details on how to configure each.\n\n#### Node Disruption Budgets\n\n[Disruption Budgets]({{< relref \"../concepts/disruption/#disruption-budgets \" >}}) limit when and to what extent nodes can be disrupted. You can prevent disruption based on nodes (a percentage or number of nodes that can be disrupted at a time) and schedule (excluding certain times from disrupting nodes).\nYou can set Disruption Budgets in a `NodePool` spec. Here is an example:\n\n```yaml\ndisruption:\n  budgets:\n  - nodes: 15%\n  - nodes: \"3\"\n  - nodes: \"0\"\n    schedule: \"0 9 * * sat,sun\"\n    duration: 24h\n  - nodes: \"0\"\n    schedule: \"0 17 * * mon-fri\"\n    duration: 16h\n    reasons:\n      - Drifted\n```\n\nSettings for budgets in the above example include the following:\n\n* **Percentage of nodes**: From the first `nodes` setting, only `15%` of the NodePool’s nodes can be disrupted at a time.\n* **Number of nodes**: The second `nodes` setting limits the number of nodes that can be disrupted at a time to `3`.\n* **Schedule**: The third `nodes` setting uses schedule to say that zero disruptions (`0`) are allowed starting at 9am on Saturday and Sunday and continues for 24 (fully blocking disruptions all day).\nThe format of the schedule follows the `crontab` format for identifying dates and times.\nSee the [crontab](https://man7.org/linux/man-pages/man5/crontab.5.html) page for information on the supported values for these fields.\n* **Reasons**: The fourth `nodes` setting uses `reasons` which implies that this budget only applies to the `Drifted` disruption condition. This setting uses schedule to say that zero disruptions (`0`) are allowed starting at 5pm on Monday, Tuesday, Wednesday, Thursday, and Friday and continues for 16h (effectively blocking rolling nodes due to drift outside of working hours).\n\nAs with all disruption settings, keep in mind that avoiding updated AMIs for your nodes can result in not getting fixes for known security risks and bugs.\nYou need to balance that with your desire to not risk breaking the workloads on your cluster.\n\n#### Pod Disruption Budgets\n\n[Pod Disruption Budgets](https://kubernetes.io/docs/tasks/run-application/configure-pdb/#specifying-a-poddisruptionbudget) allow you to describe how much disruption an application can tolerate before it begins to become unhealthy. This is critical to configure for Karpenter, since Karpenter uses this information to determine if it can continue to replace nodes. Specifically, if replacing a node would cause a Pod Disruption Budget to be breached (for graceful forms of disruption e.g. Drift or Consolidation), Karpenter will not replace the node.\n\nIn a scenario where a faulty AMI is rolling out and begins causing downtime to your applications, configuring Pod Disruption Budgets is critical since this will tell Karpenter that it must stop replacing nodes until your applications become healthy again. This prevents Karpenter from deploying the faulty AMI throughout your cluster, reduces the imact the AMI has on your production applications, and gives you manually intervene in the cluster to remediate the issue.\n\n## Follow-up\n\nThe Karpenter project continues to add features to give you greater control over AMI upgrades on your clusters.\nIf you have opinions about features you would like to see to manage AMIs with Karpenter, feel free to enter a Karpenter [New Issue](https://github.com/aws/karpenter-provider-aws/issues/new/choose).\n"
  },
  {
    "path": "website/content/en/docs/tasks/odcrs.md",
    "content": "---\ntitle: \"Utilizing On-Demand Capacity Reservations and Capacity Blocks\"\nlinkTitle: \"Utilizing ODCRs and Capacity Blocks\"\n---\n\n<i class=\"fa-solid fa-circle-info\"></i> <b>Feature State: </b> [Beta]({{<ref \"../reference/settings#feature-gates\" >}})\n\nKarpenter introduced native support for [EC2 On-Demand Capacity Reservations](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-capacity-reservations.html)  (ODCRs) in [v1.3](https://github.com/aws/karpenter-provider-aws/releases/tag/v1.3.0), enabling users to select upon and prioritize specific capacity reservations.\nIn [v1.6](https://github.com/aws/karpenter-provider-aws/releases/tag/v1.6.0), this support was expanded to include [EC2 Capacity Blocks for ML](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-capacity-blocks.html). In [v1.10](https://github.com/aws/karpenter-provider-aws/releases/tag/v1.10.0), this was further extended to support [Interruptible Capacity Reservations](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/interruptible-capacity-reservations.html).\nTo enable native ODCR support, ensure the [`ReservedCapacity` feature gate]({{< relref \"../reference/settings#feature-gates\" >}}) is enabled.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nIf you were previously utilizing `open` ODCRs using Karpenter, review the [migration section]({{< relref \"#migrating-from-previous-versions\" >}}) of this task before enabling this feature.\n{{% /alert %}}\n\n## Selecting Capacity Reservations\n\nTo configure native ODCR support, you will need to make updates to both your EC2NodeClass and NodePool.\nFirst, you should configure `capacityReservationSelectorTerms` on your EC2NodeClass.\nSimilar to `amiSelectorTerms`, you can specify a number of terms which are ANDed together to select ODCRs in your AWS account.\nThe following example demonstrates how to select all capacity reservations tagged with `application: foobar` in addition to `cr-56fac701cc1951b03`:\n\n```yaml\ncapacityReservationSelectorTerms:\n- tags:\n    application: foobar\n- id: cr-56fac701cc1951b03\n```\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nCapacity blocks are modeled as on-demand capacity reservations in EC2.\nTo select capacity blocks, specify them in your `capacityReservationSelectorTerms` in the same way you would for a default ODCR.\n{{% /alert %}}\n\nFor more information on configuring `capacityReservationSelectorTerms`, see the [NodeClass docs]({{< relref \"../concepts/nodeclasses#speccapacityreservationselectorterms\" >}}).\n\nAdditionally, you will need to update your NodePool to be compatible with ODCRs.\nKarpenter doesn't model ODCRs as standard on-demand capacity, and instead uses a dedicated capacity type: `reserved`.\nFor a NodePool to utilize ODCRs, it must be compatible with `karpenter.sh/capacity-type: reserved`.\nThe following example demonstrates how to configure a NodePool to prioritize ODCRs and fallback to on-demand capacity:\n\n```yaml\nrequirements:\n- key: karpenter.sh/capacity-type\n  operator: In\n  values: ['reserved', 'on-demand']\n```\n\nAdditionaly, Karpenter supports the following scheduling labels:\n\n| Label                                                  | Example                       | Description                                       |\n| ------------------------------------------------------ | ----------------------------- | ------------------------------------------------- |\n| `karpenter.k8s.aws/capacity-reservation-id`            | `cr-56fac701cc1951b03`        | The capacity reservation's ID                     |\n| `karpenter.k8s.aws/capacity-reservation-type`          | `default` or `capacity-block` | The type of capacity reservation                  |\n| `karpenter.k8s.aws/capacity-reservation-interruptible` | `true` or `false`             | Whether the capacity reservation is interruptible |\n\nThese labels will only be present on reserved nodes.\nThey are supported as NodePool requirements and as pod scheduling constaints (e.g. [node affinity](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#node-affinity)).\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter does **not** support open matching for ODCRs.\nThis means that all ODCRs you wish to utilize, even those with `open` instance eligibility, must be included in your NodeClass' `spec.capacityReservationSelectorTerms`.\n{{% /alert %}}\n\n## Prioritization Behavior\n\nNodePools are not limited to a single compatible capacity-type -- they can be compatible with any combination of the available capacity-types (`on-demand`, `spot`, and `reserved`).\nConsider the following NodePool requirements:\n\n```yaml\nrequirements:\n- key: karpenter.sh/capacity-type\n  operator: In\n  values: ['reserved', 'on-demand', 'spot']\n```\n\nIn this example, the NodePool is compatible with all capacity types.\nKarpenter will prioritize ODCRs, but if none are available or none are compatible with the pending workloads it will fallback to spot or on-demand.\nSimilarly, Karpenter will prioritize reserved capacity during consolidation.\nSince ODCRs are pre-paid, Karpenter will model them as free and consolidate spot / on-demand nodes when possible.\n\n## Expiration\n\nAn instance launched into an ODCR is not necessarily in that ODCR indefinitely.\nThe ODCR could expire, be cancelled, or the instance could be manually removed from the ODCR.\nIf any of these occur, and Karpenter detects that the instance no longer belongs to an ODCR, it will update the `karpenter.sh/capacity-type` label to `on-demand`.\n\n### Capacity Blocks\n\nUnlike default ODCRs, Capacity Blocks must have an end time.\nAdditionally, instances launched into a capacity block will be terminated by EC2 ahead of the end time, rather than becoming standard on-demand capacity.\n\nFrom the [AWS docs](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-capacity-blocks.html):\n\n> You can use all the instances you reserved until 30 minutes (for instance types) or 60 minutes (for UltraServer type) before the end time of the Capacity Block.\n> With 30 minutes (for instance types) or 60 minutes (for UltraServer types) left in your Capacity Block reservation, we begin terminating any instances that are running in the Capacity Block.\n> We use this time to clean up your instances before delivering the Capacity Block to the next customer.\n\nKarpenter will preemptively begin draining nodes launched for capacity blocks 10 minutes before EC2 begins termination, ensuring your workloads can gracefully terminate before reclaimation.\n\n### Interruptible Capacity Reservations\n\nUnlike default ODCRs, capacity launched from interruptible ODCRs can be interrupted when capacity is reclaimed back the source ODCR.\n\nFrom the [AWS docs](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/interruptible-capacity-reservations.html), when capacity is reclaimed:\n\n> Running instances receive a 2-minute interruption warning through EventBridge events.\n> After the notice period, running instances in the reclaimed capacity enter a shutting down state and get terminated.\n\nKarpenter will begin draining nodes launched for IODCRs when the 2-minute interruption warning is recieved.\n\n## Migrating From Previous Versions\n\nAlthough it was not natively supported, it was possible to utilize ODCRs on previous versions of Karpenter.\nIf a NodeClaim's requirements happened to be compatible with an open ODCR in the target AWS account, it may have launched an instance into that open ODCR.\nThis could be ensured by constraining a NodePool such that it was only compatible with the desired open ODCR, and limits could be used to enable fallback to a different NodePool once the ODCR was exhausted.\nThis behavior is no longer supported when native on-demand capacity support is enabled.\n\nIf you were relying on this behavior, you should configure your `EC2NodeClasses` to select the desired ODCRs **before** enabling the feature gate.\nYou should also ensure any NodePools which you wish to use with ODCRs are compatible with `karpenter.sh/capacity-type: reserved`.\nPerforming these steps before enabling the feature gate will ensure that Karpenter can immediately continue utilizing your reservations, rather than falling back to on-demand.\n"
  },
  {
    "path": "website/content/en/docs/troubleshooting.md",
    "content": "---\ntitle: \"Troubleshooting\"\nlinkTitle: \"Troubleshooting\"\nweight: 70\ndescription: >\n  Troubleshoot Karpenter problems\n---\n\n## Controller\n\n### Enable debug logging\n\nThis can be done by updating the env variable `LOG_LEVEL` Karpenter deployment and then restarting the Karpenter deployment.\n\nYou can also enable debug logging during installation with Helm by setting the option `logLevel`.\n\n```\nhelm upgrade --install karpenter oci://public.ecr.aws/karpenter/karpenter \\\n  --set logLevel=debug \\\n  ...\n```\n\n## Installation\n\n### Missing Service Linked Role\n\nUnless your AWS account has already onboarded to EC2 Spot, you will need to create the service linked role to avoid `ServiceLinkedRoleCreationNotPermitted`.\n\n```\nAuthFailure.ServiceLinkedRoleCreationNotPermitted: The provided credentials do not have permission to create the service-linked role for EC2 Spot Instances\n```\n\nThis can be resolved by creating the [Service Linked Role](https://docs.aws.amazon.com/batch/latest/userguide/spot_fleet_IAM_role.html).\n\n```\naws iam create-service-linked-role --aws-service-name spot.amazonaws.com\n```\n\n### Failed Resolving STS Credentials with I/O Timeout\n\n```bash\nChecking EC2 API connectivity, WebIdentityErr: failed to retrieve credentials\\ncaused by: RequestError: send request failed\\ncaused by: Post \\\"https://sts.us-east-1.amazonaws.com/\\\": dial tcp: lookup sts.us-east-1.amazonaws.com: i/o timeout\n```\n\nIf you see the error above when you attempt to install Karpenter, this indicates that Karpenter is unable to reach out to the STS endpoint due to failed DNS resolution. This can happen when Karpenter is running with `dnsPolicy: ClusterFirst` and your in-cluster DNS service is not yet running.\n\nYou have two mitigations to resolve this error:\n1. Let Karpenter manage your in-cluster DNS service - You can let Karpenter manage your DNS application pods' capacity by changing Karpenter's `dnsPolicy` to be `Default` (run `--set dnsPolicy=Default` with a Helm installation). This ensures that Karpenter reaches out to the [VPC DNS service](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-dns.html) when running its controllers, allowing Karpenter to start-up without the DNS application pods running, enabling Karpenter to manage the capacity for these pods.\n2. Let MNG/Fargate manage your in-cluster DNS service - If running a cluster with MNG, ensure that your group has enough capacity to support the DNS application pods and ensure that the application has the correct tolerations to schedule against the capacity. If running a cluster with Fargate, ensure that you have a [fargate profile](https://docs.aws.amazon.com/eks/latest/userguide/fargate-profile.html) that selects against your DNS application pods.\n\n### Karpenter Role names exceeding 64-character limit\n\nIf 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).\n\nNode role names for Karpenter are created in the form `KarpenterNodeRole-${Cluster_Name}` in the [Create the KarpenterNode IAM Role]({{<ref \"./getting-started/getting-started-with-karpenter/#create-the-karpenternode-iam-role\" >}}) section of the getting started guide.\nIf a long cluster name causes the Karpenter node role name to exceed 64 characters, creating that object will fail.\n\nKeep in mind that `KarpenterNodeRole-` is just a recommendation from the getting started guide.\nInstead of using the eksctl role, you can shorten the name to anything you like, as long as it has the right permissions.\n\n### Unknown field in NodePool or EC2NodeClass spec\n\nIf 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:\n\n```\nError from server (BadRequest): error when creating \"STDIN\": NodePool in version \"v1\" cannot be handled as a NodePool: strict decoding error: unknown field \"spec.template.spec.nodeClassRef.foo\"\n```\n\nIf you see this error, you can solve the problem by following the [Custom Resource Definition Upgrade Guidance](../upgrade-guide/#custom-resource-definition-crd-upgrades).\n\nInfo 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)\n\n### Unable to schedule pod due to insufficient node group instances\n\n`0.16.0` changed the default replicas from 1 to 2.\n\nKarpenter won't launch capacity to run itself (log related to the `karpenter.sh/nodepool DoesNotExist requirement`)\nso it can't provision for the second Karpenter pod.\n\nTo 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 to run both pods.\n\nTo do so on AWS increase the `minimum` and `desired` parameters on the node group autoscaling group to launch at lease 2 instances.\n\n### Helm Error When Pulling the Chart\n\nIf Helm is showing an error when trying to install Karpenter Helm charts:\n\n- Ensure you are using a newer Helm version, Helm started supporting OCI images since `3.8.0`.\n- Helm does not have an `helm repo add` concept in OCI, so to install Karpenter you no longer need this.\n- If you get an error like `Error: public.ecr.aws/karpenter/karpenter:0.34.0: not found` make sure you're adding a `v` prefix for Karpenter versions between `0.17.0` & `0.34.x`.\n- Verify that the image you are trying to pull actually exists in [gallery.ecr.aws/karpenter](https://gallery.ecr.aws/karpenter/karpenter)\n- 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\n- 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).\n\n### Helm Error when installing the `karpenter-crd` chart\n\nKarpenter `0.26.1` introduced the `karpenter-crd` Helm chart. When installing this chart on your cluster, if you have previously added the Karpenter CRDs to your cluster through the `karpenter` controller chart or through `kubectl replace`, Helm will reject the install of the chart due to `invalid ownership metadata`.\n\n- In the case of `invalid ownership metadata; label validation error: missing key \"app.kubernetes.io/managed-by\": must be set to \"Helm\"` run:\n\n```shell\nkubectl label crd ec2nodeclasses.karpenter.k8s.aws nodepools.karpenter.sh nodeclaims.karpenter.sh app.kubernetes.io/managed-by=Helm --overwrite\n```\n\n- In the case of `annotation validation error: missing key \"meta.helm.sh/release-namespace\": must be set to \"karpenter\"` run:\n\n```shell\nKARPENTER_NAMESPACE=kube-system\nkubectl annotate crd ec2nodeclasses.karpenter.k8s.aws nodepools.karpenter.sh nodeclaims.karpenter.sh meta.helm.sh/release-name=karpenter-crd --overwrite\nkubectl annotate crd ec2nodeclasses.karpenter.k8s.aws nodepools.karpenter.sh nodeclaims.karpenter.sh meta.helm.sh/release-namespace=\"${KARPENTER_NAMESPACE}\" --overwrite\n```\n\n## Uninstallation\n\n### Unable to delete nodes after uninstalling Karpenter\n\nKarpenter 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.\n\nYou can fix this by patching the node objects:\n\n- `kubectl edit node <node_name>` and remove the line that says `karpenter.sh/termination` in the finalizers field.\n- Run the following script that gets all nodes with the finalizer and removes all the finalizers from those nodes.\n  - NOTE: this will remove ALL finalizers from nodes with the karpenter finalizer.\n\n```bash\nkubectl 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\"}]'\n```\n\n## Provisioning\n\n### Instances with swap volumes fail to register with control plane\n\nSome instance types (c1.medium and m1.small) are given limited amount of memory (see [Instance Store swap volumes](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-store-swap-volumes.html)). They are subsequently configured to use a swap volume, which will cause the kubelet to fail on launch. The following error can be seen in the systemd logs:\n\n```bash\n\"command failed\" err=\"failed to run Kubelet: running with swap on is not supported, please disable swap!...\"\n```\n\n##### Solutions\nDisabling swap will allow kubelet to join the cluster successfully, however users should be mindful of performance, and consider adjusting the NodePool requirements to use larger instance types.\n\n### DaemonSets can result in deployment failures\n\nFor Karpenter versions `0.5.3` and earlier, DaemonSets were not properly considered when provisioning nodes.\nThis sometimes caused nodes to be deployed that could not meet the needs of the requested DaemonSets and workloads.\nThis issue no longer occurs after Karpenter version `0.5.3` (see [PR #1155](https://github.com/aws/karpenter/pull/1155)).\n\nIf you are using a pre `0.5.3` version of Karpenter, one workaround is to set your NodePool to only use larger instance types that you know will be big enough for the DaemonSet and the workload.\nFor more information, see [Issue #1084](https://github.com/aws/karpenter/issues/1084).\nExamples of this behavior are included in [Issue #1180](https://github.com/aws/karpenter/issues/1180).\n\n### Unspecified resource requests cause scheduling/bin-pack failures\n\nNot 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.\nThis can cause issues as Karpenter bin-packs pods based on the resource requests.\n\nIf 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.\nThis behavior is not unique to Karpenter and can also occur with the standard `kube-scheduler` with pods that don't have accurate resource requests.\n\nTo prevent this, you can set LimitRanges on pod deployments on a per-namespace basis.\nSee 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.\n\n### Pods using Security Groups for Pods stuck in \"ContainerCreating\" state for up to 30 minutes before transitioning to \"Running\"\n\nWhen 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\".\nThis 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.\nMore info can be found in [issue #1252](https://github.com/aws/karpenter/issues/1252).\n\nTo workaround this problem, add the `vpc.amazonaws.com/has-trunk-attached: \"false\"` label in your Karpenter NodePool 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).\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\nspec:\n  template\n    metadata:\n      labels:\n        vpc.amazonaws.com/has-trunk-attached: \"false\"\n```\n\n### Pods using PVCs can hit volume limits and fail to scale-up\n\nWhen attempting to schedule a large number of pods with PersistentVolumes, it's possible that these pods will co-locate on the same node. Pods will report the following errors in their events using a `kubectl describe pod` call\n\n```bash\nWarning   FailedAttachVolume    pod/example-pod                      AttachVolume.Attach failed for volume \"***\" : rpc error: code = Internal desc = Could not attach volume \"***\" to node \"***\": attachment of disk \"***\" failed, expected device to be attached but was attaching\nWarning   FailedMount           pod/example-pod                      Unable to attach or mount volumes: unmounted volumes=[***], unattached volumes=[***]: timed out waiting for the condition\n```\n\nIn this case, Karpenter may fail to scale-up your nodes due to these pods due to one of the following reasons:\n\n#### Pods were not scheduled but Karpenter couldn't discover limits\n\nKarpenter does not support [in-tree storage plugins](https://kubernetes.io/blog/2021/12/10/storage-in-tree-to-csi-migration-status-update/) to provision PersistentVolumes, since nearly all of the in-tree plugins have been deprecated in upstream Kubernetes. This means that, if you are using a statically-provisioned PersistentVolume that references a volume source like `AWSElasticBlockStore` or a dynamically-provisioned PersistentVolume that references a StorageClass with a in-tree storage plugin provisioner like `kubernetes.io/aws-ebs`, Karpenter will fail to discover the maxiumum volume attachments for the node. Instead, Karpenter may think the node still has more schedulable space due to memory and cpu constraints when there is really no more schedulable space on the node due to volume limits. When Karpenter sees you are using an in-tree storage plugin on your pod volumes, it will print the following error message into the logs. If you see this message, upgrade your StorageClasses and statically-provisioned PersistentVolumes to use the latest CSI drivers for your cloud provider.\n\n```bash\n2023-04-05T23:56:53.363Z        ERROR   controller.node_state   PersistentVolume source 'AWSElasticBlockStore' uses an in-tree storage plugin which is unsupported by Karpenter and is deprecated by Kubernetes. Scale-ups may fail because Karpenter will not discover driver limits. Use a PersistentVolume that references the 'CSI' volume source for Karpenter auto-scaling support.       {\"commit\": \"b2af562\", \"node\": \"ip-192-168-36-137.us-west-2.compute.internal\", \"pod\": \"inflate0-6c4bdb8b75-7qmfd\", \"volume\": \"mypd\", \"persistent-volume\": \"pvc-11db7489-3c6e-46f3-a958-91f9d5009d41\"}\n2023-04-05T23:56:53.464Z        ERROR   controller.node_state   StorageClass .spec.provisioner uses an in-tree storage plugin which is unsupported by Karpenter and is deprecated by Kubernetes. Scale-ups may fail because Karpenter will not discover driver limits. Create a new StorageClass with a .spec.provisioner referencing the CSI driver plugin name 'ebs.csi.aws.com'.     {\"commit\": \"b2af562\", \"node\": \"ip-192-168-36-137.us-west-2.compute.internal\", \"pod\": \"inflate0-6c4bdb8b75-7qmfd\", \"volume\": \"mypd\", \"storage-class\": \"gp2\", \"provisioner\": \"kubernetes.io/aws-ebs\"}\n```\n\n#### Pods were scheduled due to a race condition in Kubernetes\n\nDue to [this race condition in Kubernetes](https://github.com/kubernetes/kubernetes/issues/95911), it's possible that the scheduler and the CSINode can race during node registration such that the scheduler assumes that a node can mount more volumes than the node attachments support. There is currently no universal solve for this problem other than enforcing `topologySpreadConstraints` and `podAntiAffinity` on your workloads that use PVCs such that you attempt to reduce the number of PVCs that schedule to a given node.\n\nThe following is a list of known CSI drivers which support a startupTaint to eliminate this issue:\n- [aws-ebs-csi-driver](https://github.com/kubernetes-sigs/aws-ebs-csi-driver/blob/master/docs/install.md#configure-node-startup-taint)\n- [aws-efs-csi-driver](https://github.com/kubernetes-sigs/aws-efs-csi-driver/tree/master/docs#configure-node-startup-taint)\n\nThese taints should be configured via `startupTaints` on your `NodePool`. For example, to enable this for EBS, add the following to your `NodePool`:\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nspec:\n  template:\n    spec:\n      startupTaints:\n        - key: ebs.csi.aws.com/agent-not-ready\n          effect: NoExecute\n```\n\n### CNI is unable to allocate IPs to pods\n\n_Note: This troubleshooting guidance is specific to the VPC CNI that is shipped by default with EKS clusters. If you are using a custom CNI, some of this guidance may not apply to your cluster._\n\nWhenever a new pod is assigned to a node, the CNI will assign an IP address to that pod (assuming it isn't using host networking), allowing it to communicate with other pods on the cluster. It's possible for this IP allocation and assignment process to fail for a number of reasons. If this process fails, you may see an error similar to the one below.\n\n```bash\ntime=2023-06-12T19:18:15Z type=Warning reason=FailedCreatePodSandBox from=kubelet message=Failed to create pod sandbox: rpc error: code = Unknown desc = failed to setup network for sandbox \"0f46f3f1289eed7afab81b6945c49336ef556861fe5bb09a902a00772848b7cc\": plugin type=\"aws-cni\" name=\"aws-cni\" failed (add): add cmd: failed to assign an IP address to container\n```\n\n#### `maxPods` is greater than the node's supported pod density\n\nBy 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.\n\nIf the max-pods (configured through your EC2NodeClass [`kubeletConfiguration`]({{<ref \"./concepts/nodeclasses/#speckubelet\" >}})) is greater than the number of supported IPs for a given instance type, the CNI will fail to assign an IP to the pod and your pod will be left in a `ContainerCreating` state.\n\nIf you've enabled [Security Groups per Pod](https://aws.github.io/aws-eks-best-practices/networking/sgpp/), one of the instance's ENIs is reserved as the trunk interface and uses branch interfaces off of that trunk interface to assign different security groups.\nIf you do not have any `SecurityGroupPolicies` configured for your pods, they will be unable to utilize branch interfaces attached to the trunk interface, and IPs will only be available from the non-trunk ENIs.\nThis effectively reduces the max-pods value by the number of IPs that would have been available from the trunk ENI.\nNote that Karpenter is not aware if [Security Groups per Pod](https://aws.github.io/aws-eks-best-practices/networking/sgpp/) is enabled, and will continue to compute max-pods assuming all ENIs on the instance can be utilized.\n\n##### Solutions\n\nTo avoid this discrepancy between `maxPods` and the supported pod density of the EC2 instance based on ENIs and allocatable IPs, you can perform one of the following actions on your cluster:\n\n1. Enable [Prefix Delegation](https://docs.aws.amazon.com/eks/latest/userguide/cni-increase-ip-addresses.html) to increase the number of allocatable IPs for the ENIs on each instance type\n2. Reduce your `maxPods` value to be under the maximum pod density for the instance types assigned to your NodePods\n3. Remove the `maxPods` value from your [`kubeletConfiguration`]({{<ref \"./concepts/nodeclasses#speckubeletconfiguration\" >}}) if you no longer need it and instead rely on the defaulted values from Karpenter and EKS AMIs.\n4. Set [RESERVED_ENIS]({{<ref \"./reference/settings\" >}})=1 in your Karpenter configuration to account for the reserved ENI when using Security Groups for Pods.\n\nFor more information on pod density, view the [Pod Density Section in the NodePools doc]({{<ref \"./concepts/nodeclasses#pod-density\" >}}).\n\n#### IP exhaustion in a subnet\n\nWhen a node is launched by Karpenter, it is assigned to a subnet within your VPC based on the [`subnetSelector`]({{<ref \"./concepts/nodeclasses#specsubnetselector\" >}}) value in your [`EC2NodeClass`]({{<ref \"./concepts/nodeclasses\" >}})). When a subnet becomes IP address constrained, EC2 may think that it can successfully launch an instance in the subnet; however, when the CNI tries to assign IPs to the pods, there are none remaining. In this case, your pod will stay in a `ContainerCreating` state until an IP address is freed in the subnet and the CNI can assign one to the pod.\n\n##### Solutions\n\n1. Use `topologySpreadConstraints` on `topology.kubernetes.io/zone` to spread your pods and nodes more evenly across zones\n2. Increase the IP address space (CIDR) for the subnets selected by your `EC2NodeClass`\n3. Use [custom networking](https://docs.aws.amazon.com/eks/latest/userguide/cni-custom-network.html) to assign separate IP address spaces to your pods and your nodes\n4. [Run your EKS cluster on IPv6](https://aws.github.io/aws-eks-best-practices/networking/ipv6/) (Note: IPv6 clusters have some known limitations which should be well-understood before choosing to use one)\n\nFor more troubleshooting information on why your pod may have a `FailedCreateSandbox` error, view the [EKS CreatePodSandbox Knowledge Center Post](https://repost.aws/knowledge-center/eks-failed-create-pod-sandbox).\n\n### Windows pods are failing with `FailedCreatedPodSandbox`\n\nThe following solution(s) may resolve your issue if you are seeing an error similar to the following when attempting to launch Windows pods. This error typically occurs if you have not enabled Windows support.\n\n```\nFailed to create pod sandbox: rpc error: code = Unknown desc = failed to setup network for sandbox \"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\": plugin type=\"vpc-bridge\" name=\"vpc\" failed (add): failed to parse Kubernetes args: pod does not have label vpc.amazonaws.com/PrivateIPv4Address\n```\n\n#### Solutions\n1. See [Enabling Windows support](https://docs.aws.amazon.com/eks/latest/userguide/windows-support.html#enable-windows-support) for instructions on how to enable Windows support.\n\n### Windows pods fail to launch with image pull error\n\nThe following solution(s) may resolve your issue if you are seeing an error similar to the following when attempting to launch Windows pods.\n\n```\nFailed to pull image \"mcr.microsoft.com/windows/servercore:xxx\": rpc error: code = NotFound desc = failed to pull and unpack image \"mcr.microsoft.com/windows/servercore:xxx\": no match for platform in manifest: not found\n```\n\nThis error typically occurs in a scenario whereby a pod with a given container OS version attempts to be scheduled on an incompatible Windows host OS version.\nWindows requires the host OS version to match the container OS version.\n\n#### Solutions\n\n1. Define your pod's `nodeSelector` to ensure that your containers are scheduled on a compatible OS host version. To learn more, see [Windows container version compatibility](https://learn.microsoft.com/en-us/virtualization/windowscontainers/deploy-containers/version-compatibility).\n\n### Windows pods unable to resolve DNS\nCauses for DNS resolution failure may vary, but in the case where DNS resolution is working for Linux pods but not for Windows pods,\nthen the following solution(s) may resolve your issue.\n\n#### Solution(s)\n1. Verify that the instance role of the Windows node includes the RBAC permission group `eks:kube-proxy-windows` as shown below.\n   This group is required for Windows nodes because in Windows, `kube-proxy` runs as a process on the node, and as such, the node requires the necessary RBAC cluster permissions to allow access to the resources required by `kube-proxy`.\n   For more information, see https://docs.aws.amazon.com/eks/latest/userguide/windows-support.html.\n```yaml\n...\n  username: system:node:{{EC2PrivateDNSName}}\n  groups:\n    - system:bootstrappers\n    - system:nodes\n    - eks:kube-proxy-windows # This is required for Windows DNS resolution to work\n...\n```\n\n### Karpenter incorrectly computes available resources for a node\n\nWhen creating nodes, the allocatable resources Karpenter computed (as seen in logs and `nodeClaim.status.allocatable`) do not always match the allocatable resources on the created node (`node.status.allocatable`) due to some amount of memory being reserved for the hypervisor and underlying OS.\nKarpenter uses the results from `ec2:DescribeInstanceTypes` along with a cache for tracking observed memory capacity to determine the resources available on a node launched with a given instance type.\nThe following computation is used to determine allocatable CPU, memory, and ephemeral storage based on the results returned from `ec2:DescribeInstanceTypes`.\n\n```\n### cpu\nnodeClaim.allocatable.cpu = instance.cpu - kubeReserved.cpu - systemReserved.cpu\n\n### memory\n# If first time launching this instance-type + AMI pair\nnodeClaim.allocatable.memory = (instance.memory  * (1.0 - VM_MEMORY_OVERHEAD_PERCENT)) - kubeReserved.memory - systemReserved.memory - max(evictionSoft.memory.available, evictionHard.memory.available)\n# For subsequent nodes where cached instance-type capacity is available\nnodeClaim.allocatable.memory = ( cached.instance.memory - kubeReserved.memory - systemReserved.memory - max(evictionSoft.memory.available, evictionHard.memory.available)\n\n### ephemeral-storage\nnodeClaim.allocatable.ephemeralStorage = instance.storage - kubeReserved.ephemeralStorage - systemReserved.ephemeralStorage - max(evictionSoft.nodefs.available, evictionHard.nodefs.available)\n```\n\nMost of these factors directly model user configuration (i.e. the KubeletConfiguration options).\nOn the other hand, `VM_MEMORY_OVERHEAD_PERCENT` models an implicit reduction of available memory that varies by instance type and AMI.\nHowever, once a node is created, the actual memory capacity on that node (node.status.capacity.memory) is checked by the controller. The controller caches the observed memory for any subsequent nodes launched with the same AMI and instance type pair, improving accuracy for future nodes.\nFor new combinations of AMI and instance type (i.e., when this pair is launched for the first time), Karpenter will still use the VM_MEMORY_OVERHEAD_PERCENT value as a fallback for estimating allocatable memory.\nThis fallback is necessary because Karpenter can't compute the exact value being modeled ahead of time, so `VM_MEMORY_OVERHEAD_PERCENT` is a [global setting]({{< ref \"./reference/settings.md\" >}}) used across all instance type and AMI combinations.\nThe default value (`7.5%`) has been tuned to closely match reality for the majority of instance types while not overestimating.\nAs a result, Karpenter will typically underestimate the memory available on a node for a given instance type.\nIf you know the real `VM_MEMORY_OVERHEAD_PERCENT` for the specific instances you're provisioning in your cluster, you can tune this value to tighten the bound.\nHowever, this should be done with caution.\nA `VM_MEMORY_OVERHEAD_PERCENT` which results in Karpenter overestimating the memory available on a node can result in Karpenter launching nodes which are too small for your workload.\n\nTo detect instances of Karpenter overestimating resource availability, the following status condition can be monitored:\n\n```bash\n$ kg nodeclaim $NODECLAIM_NAME -o jsonpath='{.status.conditions[?(@.type==\"ConsistentStateFound\")]}'\n```\n\n```json\n{\n    \"type\": \"ConsistentStateFound\",\n    \"status\": \"False\",\n    \"reason\": \"ConsistencyCheckFailed\",\n    \"message\": \"Consistency Check Failed\",\n    \"lastTransitionTime\": \"2024-08-19T20:02:16Z\"\n}\n```\n\nThis can be spot checked like shown above, or monitored via the following metric:\n\n```\noperator_status_condition_count{type=\"ConsistentStateFound\",kind=\"NodeClaim\",status=\"False\"}\n```\n\n### Karpenter Is Unable to Satisfy Topology Spread Constraint\n\nWhen scheduling pods with TopologySpreadConstraints, Karpenter will attempt to spread the pods across all eligible domains.\nEligible domains are determined based on the pod's requirements, e.g. node affinity terms.\nHowever, pod's do not inherit the requirements of compatible NodePools.\n\nFor example, consider the following NodePool and Deployment specs:\n\n```yaml\nappVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\nspec:\n  template:\n    spec:\n      requirements:\n      - key: topology.kubernetes.io/zone\n        operator: Exists\n---\nappVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: np-zonal-constraint\n  labels:\n    project: zone-specific-project\nspec:\n  template:\n    spec:\n      requirements:\n      - key: topology.kubernetes.io/zone\n        operator: In\n        values: ['us-east-1a', 'us-east-1b']\n      # ...\n---\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: inflate\nspec:\n  replicas: 3\n  selector:\n    matchLabels:\n      app: inflate\n  template:\n    metadata:\n      labels:\n        app: inflate\n    spec:\n      nodeSelector:\n        project: zone-specific-project\n      topologySpreadConstraints:\n        - maxSkew: 1\n          topologyKey: topology.kubernetes.io/zone\n          whenUnsatisfiable: DoNotSchedule\n          labelSelector:\n            matchLabels:\n              app: inflate\n```\n\nThis cluster has subnets in three availability zones: `us-east-1a`, `us-east-1b`, and `us-east-1c`.\nNodePool `default` can launch instance types in all three zones, but `np-zonal-constraint` is constrained to two.\nSince Karpenter uses the pod's requirements to derive eligible domains, and the pod does not have any zonal constraints, all three availability zones are considered eligible domains.\nHowever, the only NodePool compatible with the pod's requirements is `np-zonal-constraints`, which can only create instances in two of the three eligible domains.\nKarpenter will succeed to launch the first two instances, for the first two replicas, but will fail to provision capacity for subsequent replicas since it can't provision capacity in the third domain.\n\nIn order to prevent these scenarios, you should ensure that all eligible domains for a pod can be provisioned by compatible NodePools, or constrain the pod such that it's eligble domains match those of the NodePools.\nTo resolve this specific issue, zonal constraints should be added to the pod spec to match the requirements of `np-zonal-constraint`:\n```yaml\nnodeAffinity:\n  requiredDuringSchedulingIgnoredDuringExecution:\n    nodeSelectorTerms:\n      - matchExpressions:\n          - key: topology.kubernetes.io/zone\n            operator: In\n            values: ['us-east-1a', 'us-east-1b']\n```\n\n### Log message of `no instance type met the scheduling requirements or had a required offering` is reported\n\nThis error suggests that there is no instance type available that meets the pod's scheduling requirements. A pod may have resource requests that necessitate a minimum instance size. If the pod is confined to a Node Pool with a specific instance family and size, it might not find an instance type that aligns with its resource needs. Additionally, resource requests from daemonsets are considered when determining if an instance type is compatible with the pod.\n\n\nThe phrase `had a required offering` pertains to the availability of an instance type in a specific location, such as an availability zone. This error can occur if a pod is restricted to a particular availability zone. For instance, consider a pod in a stateful set that previously had an EBS volume attached. If the subnet where the pod is scheduled changes, the pod might end up in a different availability zone than the EBS volume it needs to attach to. This mismatch in availability zones can lead to an error related to the required offering.\n\n## Deprovisioning\n\n### Nodes not deprovisioned\n\nThere 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.\n\n#### Initialization\n\nKarpenter 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]({{<ref \"#nodes-not-initialized\" >}}).\n\n#### Disruption budgets\n\nKarpenter 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.\nKubernetes PDBs let you specify how much of a Deployment, ReplicationController, ReplicaSet, or StatefulSet must be protected from disruptions when pod eviction requests are made.\n\nPDBs can be used to strike a balance by protecting the application's availability while still allowing a cluster administrator to manage the cluster.\nHere 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.\n\n```yaml\napiVersion: policy/v1\nkind: PodDisruptionBudget\nmetadata:\n  name: myapp-pdb\nspec:\n  minAvailable: 4\n  selector:\n    matchLabels:\n      app: myapp\n```\n\nYou can set `minAvailable` or `maxUnavailable` as integers or as a percentage.\nReview 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/).\n\n#### `karpenter.sh/do-not-disrupt` Annotation\n\nIf a pod exists with the annotation `karpenter.sh/do-not-disrupt: 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-disrupt` 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.\n\nIf you want to terminate a node with a `do-not-disrupt` pod, you can simply remove the annotation and the deprovisioning process will continue.\n\n#### Scheduling Constraints (Consolidation Only)\n\nConsolidation 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.\n\n## Node Launch/Readiness\n\n### Node not created\n\nIn some circumstances, Karpenter controller can fail to start up a node.\nFor 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:\n\n```bash\n2022-01-19T18:22:23.366Z ERROR controller.provisioning Could not launch node, launching instances, with fleet error(s), InvalidBlockDeviceMapping: Invalid device name /dev/xvda; ...\n```\n\nYou can see errors like this by viewing Karpenter controller logs:\n\n```bash\nkubectl get pods -A | grep karpenter\n```\n\n```bash\nkarpenter     karpenter-XXXX   2/2     Running   2          21d\n```\n\n```bash\nkubectl logs karpenter-XXXX -c controller -n karpenter | less\n```\n\n### Nodes not initialized\n\nKarpenter 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.\n\nKarpenter determines node initialization using three factors:\n\n1. Node readiness\n2. Expected resources are registered\n3. NodePool startup taints are removed\n\n#### Node Readiness\n\nKarpenter checks the `Ready` condition type and expects it to be `True`.\n\nTo see troubleshooting around what might be preventing nodes from becoming ready, see [Node NotReady]({{<ref \"#node-notready\" >}})\n\n#### Expected resources are registered\n\nKarpenter 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`.\n\nCommon resources that don't register and leave nodes in a non-initialized state:\n\n1. `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\n2. `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.\n\n#### NodePool startup taints are removed\n\nKarpenter expects all startup taints specified in `.spec.template.spec.startupTaints` of the NodePool to be completely removed from node `.spec.taints` before it will consider the node initialized.\n\n### Node NotReady\n\nThere are cases where the node starts, but fails to join the cluster and is marked \"Node NotReady\".\nReasons that a node can fail to join the cluster include:\n\n- Permissions\n- Security Groups\n- Networking\n\nThe easiest way to start debugging is to connect to the instance and get the Kubelet logs.  For an AL2 based node:\n\n```bash\n# List the nodes managed by Karpenter\nkubectl get node -l karpenter.sh/nodepool\n# Extract the instance ID (replace <node-name> with a node name from the above listing)\nINSTANCE_ID=$(kubectl get node <node-name> -ojson | jq -r \".spec.providerID\" | cut -d \\/ -f5)\n# Connect to the instance\naws ssm start-session --target $INSTANCE_ID\n# Check Kubelet logs\nsudo journalctl -u kubelet\n```\n\nFor Bottlerocket, you'll need to get access to the root filesystem:\n\n```bash\n# List the nodes managed by Karpenter\nkubectl get node -l karpenter.sh/nodepool\n# Extract the instance ID (replace <node-name> with a node name from the above listing)\nINSTANCE_ID=$(kubectl get node <node-name> -ojson | jq -r \".spec.providerID\" | cut -d \\/ -f5)\n# Connect to the instance\naws ssm start-session --target $INSTANCE_ID\n# Enter the admin container\nenter-admin-container\n# Check Kubelet logs\njournalctl -D /.bottlerocket/rootfs/var/log/journal -u kubelet.service\n```\n\nHere are examples of errors from Node NotReady issues that you might see from `journalctl`:\n\n- The runtime network not being ready can reflect a problem with IAM role permissions:\n\n  ```\n  KubeletNotReady runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:Network plugin returns error: cni plugin not initialized\n    ```\n\n  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:\n\n  ```bash\n  kubectl get pods -n kube-system | grep aws-node\n  ```\n\n  ```\n  aws-node-?????             1/1     Running   2          20d\n  ```\n\n  ```bash\n  kubectl logs aws-node-????? -n kube-system\n  ```\n\n- Not being able to register the node with the Kubernetes API server indicates an error condition like the following:\n\n  ```\n  Attempting to register node\" node=\"ip-192-168-67-130.ec2.internal\"\n  Unable to register node with API server\" err=\"Unauthorized\" node=\"ip-192-168-67-130.ec2.internal\"\n  Error getting node\" err=\"node \\\"ip-192-168-67-130.ec2.internal\\\" not found\n  Failed to contact API server when waiting for CSINode publishing: Unauthorized\n  ```\n\n  Check the ConfigMap to check whether or not the correct node role is there. For example:\n\n  ```bash\n  kubectl get configmaps -n kube-system aws-auth -o yaml\n  ```\n\n  ```yaml\n  apiVersion: v1\n  data:\n  mapRoles: |\n     - groups:\n        - system:bootstrappers\n        - system:nodes\n        rolearn: arn:aws:iam::973227887653:role/eksctl-johnw-karpenter-demo-NodeInstanceRole-72CV61KQNOYS\n        username: system:node:{{EC2PrivateDNSName}}\n     - groups:\n        - system:bootstrappers\n        - system:nodes\n        rolearn: arn:aws:iam::973227887653:role/KarpenterNodeRole-johnw-karpenter-demo\n        username: system:node:{{EC2PrivateDNSName}}\n  mapUsers: |\n      []\n  kind: ConfigMap\n  ...\n    ```\n\nIf 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:\n\n- Your UserData (in `/var_log/cloud-init-output.log` and `/var_log/cloud-init.log`)\n- Your kubelets (`/kubelet/kubelet.log`)\n- Your networking pod logs (`/var_log/aws-node`)\n\nReach 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.\n\n### Nodes stuck in pending and not running the kubelet due to outdated CNI\n\nIf 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`:\n\n> No entry for c6i.xlarge in /etc/eks/eni-max-pods.txt\n\nThis 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).\n\n### Node terminates before ready on failed encrypted EBS volume\n\nIf 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.\nThis issue also applies to [Block Device Mappings]({{<ref \"./concepts/nodeclasses/#block-device-mappings\" >}}) specified in the EC2NodeClass.\nIn either case, this results in the node terminating almost immediately upon creation.\n\nKeep in mind that it is possible that EBS Encryption can be enabled without your knowledge.\nEBS encryption could have been enabled by an account administrator or by default on a per region basis.\nSee [Encryption by default](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html#encryption-by-default) for details.\n\nTo 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:\n\n```json\n[\n    {\n        \"Sid\": \"Allow access through EBS for all principals in the account that are authorized to use EBS\",\n        \"Effect\": \"Allow\",\n        \"Principal\": {\n            \"AWS\": \"*\"\n        },\n        \"Action\": [\n            \"kms:Encrypt\",\n            \"kms:Decrypt\",\n            \"kms:ReEncrypt*\",\n            \"kms:GenerateDataKey*\",\n            \"kms:CreateGrant\",\n            \"kms:DescribeKey\"\n        ],\n        \"Resource\": \"*\",\n        \"Condition\": {\n            \"StringEquals\": {\n            \"kms:ViaService\": \"ec2.${AWS_REGION}.amazonaws.com\",\n            \"kms:CallerAccount\": \"${AWS_ACCOUNT_ID}\"\n            }\n        }\n    },\n    {\n        \"Sid\": \"Allow direct access to key metadata to the account\",\n        \"Effect\": \"Allow\",\n        \"Principal\": {\n            \"AWS\": \"arn:aws:iam::${AWS_ACCOUNT_ID}:root\"\n        },\n        \"Action\": [\n            \"kms:Describe*\",\n            \"kms:Get*\",\n            \"kms:List*\",\n            \"kms:RevokeGrant\"\n        ],\n        \"Resource\": \"*\"\n    }\n]\n```\n\n### Node is not deleted, even though `ttlSecondsUntilExpired` is set or the node is empty\n\nThis 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.\n\n### Log message of `inflight check failed for node, Expected resource \"vpc.amazonaws.com/pod-eni\" didn't register on the node` is reported\n\nThis error indicates that the `vpc.amazonaws.com/pod-eni` resource was never reported on the node. 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.\n\n### AWS Node Termination Handler (NTH) interactions\nKarpenter [doesn't currently support draining and terminating on spot rebalance recommendations]({{< ref \"concepts/disruption#interruption\" >}}). Users who want support for both drain and terminate on spot interruption as well as drain and termination on spot rebalance recommendations may install Node Termination Handler (NTH) on their clusters to support this behavior.\n\nThese two components do not share information between each other, meaning if you have drain and terminate functionality enabled on NTH, NTH may remove a node for a spot rebalance recommendation. Karpenter will replace the node to fulfill the pod capacity that was being fulfilled by the old node; however, Karpenter won't be aware of the reason that that node was terminated. This means that Karpenter may launch the same instance type that was just deprovisioned, causing a spot rebalance recommendation to be sent again. This can result in very short-lived instances where NTH continually removes nodes and Karpeneter re-launches the same instance type over and over again.\n\nKarpenter doesn't recommend reacting to spot rebalance recommendations when running Karpenter with spot nodes; however, if you absolutely require this functionality, note that the above scenario is possible.\nSpot instances are time limited and, therefore, interruptible. When a signal is sent by AWS, it triggers actions from NTH and Karpenter, where the former signals a shutdown and the later provisions, creating a recursive situation.\nThis can be mitigated by either completely removing NTH or by setting the following values:\n\n* enableSpotInterruptionDraining: If false, do not drain nodes when the spot interruption termination notice is received. Only used in IMDS mode.\nenableSpotInterruptionDraining: false\n\n* enableRebalanceDrainin: If true, drain nodes when the rebalance recommendation notice is received. Only used in IMDS mode.\nenableRebalanceDraining: false\n\n## EC2NodeClass Validation\n\n### Force Validation Refresh\n\nIf you believe that Karpenter's EC2NodeClass validation cache is stale (e.g., after updating IAM permissions), you can force Karpenter to refresh the cache by adding any annotation on the EC2NodeClass.\n\n## Pricing\n\n### Stale pricing data on isolated subnet\n\nThe following pricing-related error occurs if you are running Karpenter in an isolated private subnet (no Internet egress via IGW or NAT gateways):\n\n```text\nERROR   controller.aws.pricing  updating on-demand pricing, RequestError: send request failed\ncaused by: Post \"https://api.pricing.us-east-1.amazonaws.com/\": dial tcp 52.94.231.236:443: i/o timeout; RequestError: send request failed\ncaused 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\"}\n```\n\nThis 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).\nTo 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.\nTo disable pricing lookups and avoid the error messages, set the `AWS_ISOLATED_VPC` environment variable (or the `--aws-isolated-vpc` option) to true.\nSee [Environment Variables / CLI Flags]({{<ref \"./reference/settings#environment-variables--cli-flags\" >}}) for details.\n"
  },
  {
    "path": "website/content/en/docs/upgrading/_index.md",
    "content": "---\ntitle: \"Upgrading\"\nlinkTitle: \"Upgrading\"\nweight: 30\ndescription: >\n  Upgrading Karpenter guide and reference\ncascade:\n  type: docs\n---\n\n"
  },
  {
    "path": "website/content/en/docs/upgrading/compatibility.md",
    "content": "---\ntitle: \"Compatibility\"\nlinkTitle: \"Compatibility\"\nweight: 20\ndescription: >\n  Compatibility issues for Karpenter\n---\n\n# Compatibility\n\nTo make upgrading easier we aim to minimize the introduction of breaking changes.\nBefore you begin upgrading Karpenter, consider Karpenter compatibility issues related to Kubernetes and the NodePool API (previously Provisioner).\n\n## Compatibility Matrix\n\n[comment]: <> (the content below is generated from hack/docs/compatibilitymatrix_gen/main.go)\n\n| KUBERNETES |   1.29   |   1.30   |   1.31    |  1.32   |  1.33   |  1.34   |  1.35   |\n|------------|----------|----------|-----------|---------|---------|---------|---------|\n| karpenter  | \\>= 0.34 | \\>= 0.37 | \\>= 1.0.5 | \\>= 1.2 | \\>= 1.5 | \\>= 1.6 | \\>= 1.9 |\n\n[comment]: <> (end docs generated content from hack/docs/compatibilitymatrix_gen/main.go)\n\n## Compatibility issues\n\nWhen we introduce a breaking change, we do so only as described in this document.\n\nKarpenter follows [Semantic Versioning 2.0.0](https://semver.org/) in its stable release versions, while in\nmajor version zero (`0.y.z`) [anything may change at any time](https://semver.org/#spec-item-4).\nHowever, to further protect users during this phase we will only introduce breaking changes in minor releases (releases that increment y in x.y.z).\nNote this does not mean every minor upgrade has a breaking change as we will also increment the\nminor version when we release a new feature.\n\nUsers should therefore check to see if there is a breaking change every time they are upgrading to a new minor version.\n\n### How Do We Break Incompatibility?\n\nWhen there is a breaking change we will:\n\n* Increment the minor version when in major version 0\n* Add a permanent separate section named `upgrading to x.y.z+` under [release upgrade notes](#release-upgrade-notes)\n  clearly explaining the breaking change and what needs to be done on the user side to ensure a safe upgrade\n* 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\n\n### How Do We Find Incompatibilities?\n\nBesides the peer review process for all changes to the code base we also do the followings in order to find\nincompatibilities:\n* (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\n* (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\n\n### Security Patches\n\nWhile we are in major version 0 we will not release security patches to older versions.\nRather we provide the patches in the latest versions.\nWhen at major version 1 we will have an EOL (end of life) policy where we provide security patches\nfor a subset of older versions and deprecate the others.\n\n## Release Types\n\nKarpenter offers three types of releases. This section explains the purpose of each release type and how the images for each release type are tagged in our [public image repository](https://gallery.ecr.aws/karpenter).\n\n### Stable Releases\n\nStable releases are the only recommended versions for production environments. Stable releases are tagged with a semantic version (e.g. `0.35.0`). Note that stable releases prior to `0.35.0` are prefixed with a `v` (e.g. `v0.34.0`).\n\n### Release Candidates\n\nWe consider having release candidates for major and important minor versions. Our release candidates are tagged like `x.y.z-rc.0`, `x.y.z-rc.1`. The release candidate will then graduate to `x.y.z` as a stable release.\nBy 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.\nNote that, like the stable releases, release candidates prior to `0.35.0` are prefixed with a `v`.\n\n### Snapshot Releases\n\nWe release a snapshot release for every commit that gets merged into [`aws/karpenter-provider-aws`](https://www.github.com/aws/karpenter-provider-aws). This enables users to immediately try a new feature or fix right after it's merged rather than waiting days or weeks for release.\n\nSnapshot releases are not made available in the same public ECR repository as other release types, they are instead published to a separate private ECR repository.\nHelm charts are published to `oci://{{< param \"snapshot_repo.account_id\" >}}.dkr.ecr.{{< param \"snapshot_repo.region\" >}}.amazonaws.com/karpenter/snapshot/karpenter` and are tagged with the git commit hash prefixed by the Karpenter major version (e.g. `0-fc17bfc89ebb30a3b102a86012b3e3992ec08adf`).\nAnyone with an AWS account can pull from this repository, but must first authenticate:\n\n```bash\naws ecr get-login-password --region {{< param \"snapshot_repo.region\" >}} | docker login --username AWS --password-stdin {{< param \"snapshot_repo.account_id\" >}}.dkr.ecr.{{< param \"snapshot_repo.region\" >}}.amazonaws.com\n```\n\n{{% alert title=\"Note\" color=\"warning\" %}}\nSnapshot releases are suitable for testing, and troubleshooting but they should not be used in production environments. Snapshot releases are ephemeral and will be removed 90 days after they were published.\n{{% /alert %}}\n"
  },
  {
    "path": "website/content/en/docs/upgrading/upgrade-guide.md",
    "content": "---\ntitle: \"Upgrade Guide\"\nlinkTitle: \"Upgrade Guide\"\nweight: 10\ndescription: >\n  Learn about upgrading Karpenter\n---\n\nKarpenter is a controller that runs in your cluster, but it is not tied to a specific Kubernetes version, as the Cluster Autoscaler is.\nUse your existing upgrade mechanisms to upgrade your core add-ons in Kubernetes and keep Karpenter up to date on bug fixes and new features.\nThis guide contains information needed to upgrade to the latest release of Karpenter, along with compatibility issues you need to be aware of when upgrading from earlier Karpenter versions.\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nWith the release of Karpenter v1.0.0, the Karpenter team has dropped support for karpenter versions v0.36 and below. We recommend upgrading to the latest version of Karpenter and keeping Karpenter up-to-date for bug fixes and new features.\n{{% /alert %}}\n\nWhen upgrading Karpenter in production environments, implementing a robust CI/CD pipeline approach is crucial. Improper upgrades can lead to significant disruptions including failed node provisioning, orphaned nodes, interrupted workloads, and potential cost implications from unmanaged scaling. Given Karpenter's critical role in cluster scaling and workload management, untested upgrades could result in production outages or resource allocation issues that directly impact application availability and performance. Therefore, we recommend following these structured steps:\n\n#### Pre-upgrade Validation\n\n- Validate all required IAM permissions (node role, controller role)\n- Check webhook configurations\n- Back up existing NodePool and NodeClass configurations\n- Document current version and settings\n\n#### Staging Environment Setup\n\n- Create or verify staging environment\n- Update version tags in Helm values or manifests\n- Configure automated validation tests\n\n#### Staging Deployment\n\n- Deploy to staging environment\n- Run comprehensive tests including node provisioning\n- Verify controller health\n- Test NodePool and NodeClass functionality\n- Monitor system behavior\n\n#### Production Approval and Deployment\n\n- Require manual approval/review\n- Schedule maintenance window if needed\n- Execute production deployment\n- Monitor deployment progress\n- Verify all components are functioning\n\n#### Post-Deployment\n\n- Monitor system health\n- Verify node provisioning\n- Keep rollback configurations accessible\n- Update documentation\n\nHere are few recommended CI/CD Pipeline Options:\n\n- GitHub Actions - Excellent for GitHub-hosted repositories with built-in Kubernetes support\n- GitLab CI - Strong container-native pipeline with integrated Kubernetes functionality\n- ArgoCD - Specialized for GitOps workflows with Kubernetes\n- AWS CodePipeline - Native integration with EKS and AWS services\n- Flux - Open-source GitOps tool for Kubernetes with automatic deployment capabilities\n\nEach pipeline tool can be configured to handle the Karpenter upgrade workflow, but choose based on your existing infrastructure, team expertise, and specific requirements for automation and integration.\n\n\n### CRD Upgrades\n\nKarpenter ships with a few Custom Resource Definitions (CRDs). These CRDs are published:\n* 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:\n  ```bash\n  KARPENTER_NAMESPACE=kube-system\n  helm upgrade --install karpenter-crd oci://public.ecr.aws/karpenter/karpenter-crd --version x.y.z --namespace \"${KARPENTER_NAMESPACE}\" --create-namespace\n  ```\n* As part of the helm chart [karpenter](https://gallery.ecr.aws/karpenter/karpenter) ([source](https://github.com/aws/karpenter/blob/main/charts/karpenter/crds)).\n  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.\n  Subsequent chart upgrades will not add or remove CRDs, even if the CRDs have changed.\n\nCRDs are coupled to the version of Karpenter, and should be updated along with Karpenter.\nFor this reason, we recommend using the independent `karpenter-crd` chart to manage CRDs.\n\n{{% alert title=\"Note\" color=\"warning\" %}}\nIf you get the error `invalid ownership metadata; label validation error:` while installing the `karpenter-crd` chart from an older version of Karpenter, follow the [Troubleshooting Guide]({{<ref \"../troubleshooting/#helm-error-when-installing-the-karpenter-crd-chart\" >}}) for details on how to resolve these errors.\n{{% /alert %}}\n\n<!--\nWHEN CREATING A NEW SECTION OF THE UPGRADE GUIDANCE FOR NEWER VERSIONS, ENSURE THAT YOU COPY THE BETA API ALERT SECTION FROM THE LAST RELEASE TO PROPERLY WARN USERS OF THE RISK OF UPGRADING WITHOUT GOING TO 0.32.x FIRST\n-->\n\n### Upgrading to `1.10.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter `1.1.0` drops the support for `v1beta1` APIs.\n**Do not** upgrade to `1.1.0`+ without following the [Migration Guide]({{<ref \"../../v1.0/upgrading/v1-migration.md#before-upgrading-to-v110\">}}).\n{{% /alert %}}\n\n* In the [getting started guide's cloudformation template]({{<ref \"../../docs/reference/cloudformation/#rules\">}}), \n  there is an extra `detail-type` for EventBridge rules to capture Capacity Reservation Instance Interruption warnings. \n  If you are using interruptible ODCRs, you will need to update your EventBridge rules to add this `detail-type`.\n\nFull Changelog:\n* https://github.com/aws/karpenter-provider-aws/releases/tag/v1.10.0\n* https://github.com/kubernetes-sigs/karpenter/releases/tag/v1.10.0\n\n### Upgrading to `1.9.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter `1.1.0` drops the support for `v1beta1` APIs.\n**Do not** upgrade to `1.1.0`+ without following the [Migration Guide]({{<ref \"../../v1.0/upgrading/v1-migration.md#before-upgrading-to-v110\">}}).\n{{% /alert %}}\n\n* The IAM policy in the getting started guide's cloudformation template has been split into 5 policies (addresses\n  [aws/karpenter-provider-aws#7874](https://github.com/aws/karpenter-provider-aws/issues/7874)). If you've taken a\n  dependency on the policy created by this cloudformation template, you will need to update your IAM role to attach all\n  5 policies. There has not been any change to the permissions granted by the policies since 1.8.\n\nFull Changelog:\n* https://github.com/aws/karpenter-provider-aws/releases/tag/v1.9.0\n* https://github.com/kubernetes-sigs/karpenter/releases/tag/v1.9.0\n\n\n### Upgrading to `1.8.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter `1.1.0` drops the support for `v1beta1` APIs.\n**Do not** upgrade to `1.1.0`+ without following the [Migration Guide]({{<ref \"../../v1.0/upgrading/v1-migration.md#before-upgrading-to-v110\">}}).\n\nKarpenter `v1.8.4` release contains a regression which may prevent Karpenter from scheduling pods with specific TopologySpreadConstraint configurations. Please do not upgrade to this version. For more details, see the following issue: https://github.com/kubernetes-sigs/karpenter/issues/2785\n{{% /alert %}}\n\n* This version adds support for [Static Capacity](https://github.com/kubernetes-sigs/karpenter/pull/2521). Make sure to upgrade your karpenter CRDs to use this feature.\n\nFull Changelog:\n* https://github.com/aws/karpenter-provider-aws/releases/tag/v1.8.0\n* https://github.com/kubernetes-sigs/karpenter/releases/tag/v1.8.0\n\n### Upgrading to `1.7.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter `1.1.0` drops the support for `v1beta1` APIs.\n**Do not** upgrade to `1.1.0`+ without following the [Migration Guide]({{<ref \"../../v1.0/upgrading/v1-migration.md#before-upgrading-to-v110\">}}).\n{{% /alert %}}\n\n* Instance profile path changes:\n  - Karpenter now creates instance profiles with a specific path structure `/karpenter/{region}/{cluster-name}/{nodeclass-uid}/` instead of the generic root path `/`\n  - This change helps with better organization and management of instance profiles\n  - No action is required for existing instance profiles, but new ones will use this path structure\n  - Additional IAM permissions required:\n    - The following new IAM permissions are required for the Karpenter controller role:\n      - `iam:ListInstanceProfiles`: Required for managing instance profiles\n* The `karpenter_pods_pods_drained_total` metric has been renamed to `karpenter_pods_drained_total`\n* The `karpenter_nodeclaims_disrupted_total` metric reason `liveness` has been renamed to `registration_timeout`\n* Pods with `ResourceClaim` requests are explicitly ignored. Older revisions of Karpenter are not aware of the field and would ignore those requests. DRA is not currently supported by Karpenter.\n\nFull Changelog:\n* https://github.com/aws/karpenter-provider-aws/releases/tag/v1.7.0\n* https://github.com/kubernetes-sigs/karpenter/releases/tag/v1.7.0\n\n### Upgrading to `1.6.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter `1.1.0` drops the support for `v1beta1` APIs.\n**Do not** upgrade to `1.1.0`+ without following the [Migration Guide]({{<ref \"../../v1.0/upgrading/v1-migration.md#before-upgrading-to-v110\">}}).\n{{% /alert %}}\n\n* Native ODCR support has graduated to beta and is enabled by default.\n  If you were previously using open ODCRs with Karpenter and have not already migrated to native ODCR support, review the [native ODCR support guide]({{< relref \"../tasks/odcrs\" >}}) before upgrading.\n* Support a new configuration option `MinValuesPolicy` which controls how the Karpenter scheduler treats min values. Options include 'Strict' (fails scheduling when min values can't be met) and 'BestEffort' (relaxes min values when they can't be met). Default is 'Strict' to preserve existing behavior.\n* Support a new configuration option `DisableDryRun` which disables the dry run calls made during EC2NodeClass validation (1.6.2+).\n\nFull Changelog:\n* https://github.com/aws/karpenter-provider-aws/releases/tag/v1.6.0\n* https://github.com/kubernetes-sigs/karpenter/releases/tag/v1.6.0\n\n### Upgrading to `1.5.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter `1.1.0` drops the support for `v1beta1` APIs.\n**Do not** upgrade to `1.1.0`+ without following the [Migration Guide]({{<ref \"../../v1.0/upgrading/v1-migration.md#before-upgrading-to-v110\">}}).\n{{% /alert %}}\n\n* No breaking changes 🎉\n\nFull Changelog:\n* https://github.com/aws/karpenter-provider-aws/releases/tag/v1.5.0\n* https://github.com/kubernetes-sigs/karpenter/releases/tag/v1.5.0\n\n### Upgrading to `1.4.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter `1.1.0` drops the support for `v1beta1` APIs.\n**Do not** upgrade to `1.1.0`+ without following the [Migration Guide]({{<ref \"../../v1.0/upgrading/v1-migration.md#before-upgrading-to-v110\">}}).\n{{% /alert %}}\n\n* No breaking changes 🎉\n\nFull Changelog:\n* https://github.com/aws/karpenter-provider-aws/releases/tag/v1.4.0\n* https://github.com/kubernetes-sigs/karpenter/releases/tag/v1.4.0\n\n### Upgrading to `1.3.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter `1.1.0` drops the support for `v1beta1` APIs.\n**Do not** upgrade to `1.1.0`+ without following the [Migration Guide]({{<ref \"../../v1.0/upgrading/v1-migration.md#before-upgrading-to-v110\">}}).\n{{% /alert %}}\n\n* `karpenter_ignored_pod_count` alpha metric had its name changed to `karpenter_scheduler_ignored_pod_count`\n* With the `ReservedCapacity` feature flag, Karpenter introduces a new `karpenter.sh/capacity-type` value (`reserved`). This means any applications that explicitly select on `on-demand` with a `nodeSelector` and want to utilize ODCR capacity may need to update their requirements to use `nodeAffinity` to opt-in to using both `reserved` and `on-demand` capacity.\n\n### Upgrading to `1.2.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter `1.1.0` drops the support for `v1beta1` APIs.\n**Do not** upgrade to `1.1.0`+ without following the [Migration Guide]({{<ref \"../../v1.0/upgrading/v1-migration.md#before-upgrading-to-v110\">}}).\n{{% /alert %}}\n\n* We have recently updated our labels on `karpenter_voluntary_disruption_queue_failures_total` and `karpenter_nodeclaims_disrupted_total` reason label from camille case to snake case. Therefore these reason labels values on those metrics have now been update as such:\n  - Drifted -> drifted\n  - Empty -> empty\n  - Expired -> expired\n  - Underutilized -> underutilized\n* Nodeclass status and termination controllers have been merged into a single `nodeclass` controller. If you are relying on logs or metrics for `nodeclass.termination` or `nodeclass.status` controllers, please make sure that you update them to reference the new `nodeclass` controller.\n\n### Upgrading to `1.1.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter `1.1.0` drops the support for `v1beta1` APIs.\n**Do not** upgrade to `1.1.0`+ without following the [Migration Guide]({{<ref \"../../v1.0/upgrading/v1-migration.md#before-upgrading-to-v110\">}}).\n{{% /alert %}}\n\n* Support for the `v1beta1` compatiblity annotations have been dropped. Ensure you have completed migration before upgrading to `v1.1.0`. Refer to the [migration guide]({{<ref \"../../v1.0/upgrading/v1-migration.md#kubelet-configuration-migration\">}}) for more details.\n* `nodeClassRef.group` and `nodeClassRef.kind` are strictly required. Ensure these values are set for all `NodePools` / `NodeClaims` before upgrading.\n* Bottlerocket AMIFamily now supports `instanceStorePolicy: RAID0`. This means that Karpenter will auto-generate userData to RAID0 your instance store volumes (similar to AL2 and AL2023) when specifying this value.\n  * Note: This userData configuration is _only_ valid on Bottlerocket v1.22.0+. If you are using an earlier version of a Bottlerocket image (< v1.22.0) with `amiFamily: Bottlerocket` and `instanceStorePolicy: RAID0`, nodes will fail to join the cluster.\n* The AWS Neuron accelerator well known name label (`karpenter.k8s.aws/instance-accelerator-name`) values now reflect their correct names of `trainium`, `inferentia`, and `inferentia2`. Previously, all Neuron accelerators were assigned the label name of `inferentia`.\n* Karpenter drops the internal `karpenter.k8s.aws/cluster` tag used for launch template management in favor of `eks:eks-cluster-name` and consistency with other Karpenter-provisioned resources\n* Generic operator metrics have been have been deprecated and replaced by resource-specific metrics.\n\n### Upgrading to `1.0.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter `1.0.0` introduces the `v1` APIs and uses [conversion webhooks](https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definition-versioning/#webhook-conversion) to support existing `v1beta1` APIs.\n**Do not** upgrade to `1.0.0`+ without following the [`v1` Migration Guide]({{<ref \"../../v1.0/upgrading/v1-migration.md\">}}).\n{{% /alert %}}\n\nRefer to the `v1` Migration Guide for the [full changelog]({{<ref \"../../v1.0/upgrading/v1-migration.md#changelog\">}}).\n\n### Upgrading to `0.37.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\n`0.33.0`+ _only_ supports Karpenter v1beta1 APIs and will not work with existing Provisioner, AWSNodeTemplate or Machine alpha APIs. Do not upgrade to `0.37.0`+ without first [upgrading to `0.32.x`]({{<ref \"#upgrading-to-0320\" >}}). This version supports both the alpha and beta APIs, allowing you to migrate all of your existing APIs to beta APIs without experiencing downtime.\n{{% /alert %}}\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nWebhooks have been re-enabled by default starting in `0.37.3` to faciliate migration to `v1.0`.\nIf your cluster has network policies that block Ingress then ports `8000`, `8001`, `8081`, `8443` will need to be allowlisted.\nYou may still choose to disable webhooks through the helm chart.\n{{% /alert %}}\n\n\n* Karpenter now adds a readiness status condition to the EC2NodeClass. Make sure to upgrade your Custom Resource Definitions before proceeding with the upgrade. Failure to do so will result in Karpenter being unable to provision new nodes.\n* Karpenter no longer updates the logger name when creating controller loggers. We now adhere to the controller-runtime standard, where the logger name will be set as `\"logger\": \"controller\"` always and the controller name will be stored in the structured value `\"controller\"`\n* Karpenter updated the NodeClass controller naming in the following way: `nodeclass` -> `nodeclass.status`, `nodeclass.hash`, `nodeclass.termination`\n* Karpenter's NodeClaim status conditions no longer include the `severity` field\n\n### Upgrading to `0.36.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\n`0.33.0`+ _only_ supports Karpenter v1beta1 APIs and will not work with existing Provisioner, AWSNodeTemplate or Machine alpha APIs. Do not upgrade to `0.36.0`+ without first [upgrading to `0.32.x`]({{<ref \"#upgrading-to-0320\" >}}). This version supports both the alpha and beta APIs, allowing you to migrate all of your existing APIs to beta APIs without experiencing downtime.\n{{% /alert %}}\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nv0.36.x introduces update to drift that restricts rollback. When rolling back from >=v0.36.0, note that v0.32.9+, v0.33.4+, v0.34.5+, v0.35.4+ are the patch versions that support rollback. If Karpenter is rolled back to an older patch version, Karpenter can potentially drift all the nodes in the cluster.\n{{% /alert %}}\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nWebhooks have been re-enabled by default starting in `0.36.5` to faciliate migration to `v1.0`.\nIf your cluster has network policies that block Ingress then ports `8000`, `8001`, `8081`, `8443` will need to be allowlisted.\nYou may still choose to disable webhooks through the helm chart.\n{{% /alert %}}\n\n* Karpenter changed the name of the `karpenter_cloudprovider_instance_type_price_estimate` metric to `karpenter_cloudprovider_instance_type_offering_price_estimate` to align with the new `karpenter_cloudprovider_instance_type_offering_available` metric. The `region` label was also dropped from the metric, since this can be inferred from the environment that Karpenter is running in.\n\n### Upgrading to `0.35.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\n`0.33.0`+ _only_ supports Karpenter v1beta1 APIs and will not work with existing Provisioner, AWSNodeTemplate or Machine alpha APIs. Do not upgrade to `0.35.0`+ without first [upgrading to `0.32.x`]({{<ref \"#upgrading-to-0320\" >}}). This version supports both the alpha and beta APIs, allowing you to migrate all of your existing APIs to beta APIs without experiencing downtime.\n{{% /alert %}}\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nWebhooks have been re-enabled by default starting in `0.35.8` to faciliate migration to `v1.0`.\nIf your cluster has network policies that block Ingress then ports `8000`, `8001`, `8081`, `8443` will need to be allowlisted.\nYou may still choose to disable webhooks through the helm chart.\n{{% /alert %}}\n\n* Karpenter OCI tags and Helm chart version are now valid semantic versions, meaning that the `v` prefix from the git tag has been removed and they now follow the `x.y.z` pattern.\n\n### Upgrading to `0.34.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\n`0.33.0`+ _only_ supports Karpenter v1beta1 APIs and will not work with existing Provisioner, AWSNodeTemplate or Machine alpha APIs. Do not upgrade to `0.34.0`+ without first [upgrading to `0.32.x`]({{<ref \"#upgrading-to-0320\" >}}). This version supports both the alpha and beta APIs, allowing you to migrate all of your existing APIs to beta APIs without experiencing downtime.\n{{% /alert %}}\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nThe Ubuntu EKS optimized AMI has moved from 20.04 to 22.04 for Kubernetes 1.29+. This new AMI version is __not currently__ supported for users relying on AMI auto-discovery with the Ubuntu AMI family. More details can be found in this [GitHub issue](https://github.com/aws/karpenter-provider-aws/issues/5572). Please review this issue before upgrading to Kubernetes 1.29 if you are using the Ubuntu AMI family. Upgrading to 1.29 without making any changes to your EC2NodeClass will result in Karpenter being unable to create new nodes.\n{{% /alert %}}\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nWebhooks have been re-enabled by default starting in `0.34.9` to faciliate migration to `v1.0`.\nIf your cluster has network policies that block Ingress then ports `8000`, `8001`, `8081`, `8443` will need to be allowlisted.\nYou may still choose to disable webhooks through the helm chart.\n{{% /alert %}}\n\n* Karpenter now supports `nodepool.spec.disruption.budgets`, which allows users to control the speed of disruption in the cluster. Since this requires an update to the Custom Resource, before upgrading, you should re-apply the new updates to the CRDs. Check out [Disruption Budgets]({{<ref \"../concepts/disruption#disruption-budgets\" >}}) for more.\n* With Disruption Budgets, Karpenter will disrupt multiple batches of nodes simultaneously, which can result in overall quicker scale-down of your cluster. Before `0.34.0`, Karpenter had a hard-coded parallelism limit for each type of disruption. In `0.34.0`+, Karpenter will now disrupt at most 10% of nodes for a given NodePool. There is no setting that will be perfectly equivalent with the behavior prior to `0.34.0`. When considering how to configure your budgets, please refer to the following limits for versions prior to `0.34.0`:\n  * `Empty Expiration / Empty Drift / Empty Consolidation`: infinite parallelism\n  * `Non-Empty Expiration / Non-Empty Drift / Single-Node Consolidation`: one node at a time\n  * `Multi-Node Consolidation`: max 100 nodes\n* To support Disruption Budgets, `0.34.0`+ includes critical changes to Karpenter's core controllers, which allows Karpenter to consider multiple batches of disrupting nodes simultaneously. This increases Karpenter's performance with the potential downside of higher CPU and memory utilization from the Karpenter pod. While the magnitude of this difference varies on a case-by-case basis, when upgrading to Karpenter `0.34.0`+, please note that you may need to increase the resources allocated to the Karpenter controller pods.\n* Karpenter now adds a default `podSecurityContext` that configures the `fsgroup: 65536` of volumes in the pod. If you are using sidecar containers, you should review if this configuration is compatible for them. You can disable this default `podSecurityContext` through helm by performing `--set podSecurityContext=null` when installing/upgrading the chart.\n* The `dnsPolicy` for the Karpenter controller pod has been changed back to the Kubernetes cluster default of `ClusterFirst`. Setting our `dnsPolicy` to `Default` (confusingly, this is not the Kubernetes cluster default) caused more confusion for any users running IPv6 clusters with dual-stack nodes or anyone running Karpenter with dependencies on cluster services (like clusters running service meshes). This change may be breaking for any users on Fargate or MNG who were allowing Karpenter to manage their in-cluster DNS service (`core-dns` on most clusters). If you still want the old behavior here, you can change the `dnsPolicy` to point to use `Default` by setting the helm value on install/upgrade with `--set dnsPolicy=Default`. More details on this issue can be found in the following Github issues: [#2186](https://github.com/aws/karpenter-provider-aws/issues/2186) and [#4947](https://github.com/aws/karpenter-provider-aws/issues/4947).\n* Karpenter now disallows `nodepool.spec.template.spec.resources` to be set. The webhook validation never allowed `nodepool.spec.template.spec.resources`. We are now ensuring that CEL validation also disallows `nodepool.spec.template.spec.resources` to be set. If you were previously setting the resources field on your NodePool, ensure that you remove this field before upgrading to the newest version of Karpenter or else updates to the resource may fail on the new version.\n\n### Upgrading to `0.33.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\n`0.33.0`+ _only_ supports Karpenter v1beta1 APIs and will not work with existing Provisioner, AWSNodeTemplate or Machine alpha APIs. **Do not** upgrade to `0.33.0`+ without first [upgrading to `0.32.x`]({{<ref \"#upgrading-to-0320\" >}}). This version supports both the alpha and beta APIs, allowing you to migrate all of your existing APIs to beta APIs without experiencing downtime.\n{{% /alert %}}\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nWebhooks have been re-enabled by default starting in `0.33.8` to faciliate migration to `v1.0`.\nIf your cluster has network policies that block Ingress then ports `8000`, `8001`, `8081`, `8443` will need to be allowlisted.\nYou may still choose to disable webhooks through the helm chart.\n{{% /alert %}}\n\n* Karpenter no longer supports using the `karpenter.sh/provisioner-name` label in NodePool labels and requirements or in application node selectors, affinities, or topologySpreadConstraints. If you were previously using this label to target applications to specific Provisioners, you should update your applications to use the `karpenter.sh/nodepool` label instead before upgrading. If you upgrade without changing these labels, you may begin to see pod scheduling failures for these applications.\n* Karpenter now tags `spot-instances-request` with the same tags that it tags instances, volumes, and primary ENIs. This means that you will now need to add `ec2:CreateTags` permission for `spot-instances-request`. You can also further scope your controller policy for the `ec2:RunInstances` action to require that it launches the `spot-instances-request` with these specific tags. You can view an example of scoping these actions in the [Getting Started Guide's default CloudFormation controller policy](https://github.com/aws/karpenter/blob/v0.33.0/website/content/en/preview/getting-started/getting-started-with-karpenter/cloudformation.yaml#L61).\n* We now recommend that you set the installation namespace for your Karpenter controllers to `kube-system` to denote Karpenter as a critical cluster component. This ensures that requests from the Karpenter controllers are treated with higher priority by assigning them to a different [PriorityLevelConfiguration](https://kubernetes.io/docs/concepts/cluster-administration/flow-control/#prioritylevelconfiguration) than generic requests from other namespaces. For more details on API Priority and Fairness, read the [Kubernetes API Priority and Fairness Conceptual Docs](https://kubernetes.io/docs/concepts/cluster-administration/flow-control/). Note: Changing the namespace for your Karpenter release will cause the service account namespace to change. If you are using IRSA for authentication with AWS, you will need to change scoping set in the controller's trust policy from `karpenter:karpenter` to `kube-system:karpenter`.\n* ~~`0.33.0` disables mutating and validating webhooks by default in favor of using [Common Expression Language for CRD validation](https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/#validation). The Common Expression Language Validation Feature [is enabled by default on EKS 1.25](https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/#validation-rules). If you are using Kubernetes version >= 1.25, no further action is required. If you are using a Kubernetes version below 1.25, you now need to set `DISABLE_WEBHOOK=false` in your container environment variables or `--set webhook.enabled=true` if using Helm. View the [Webhook Support Deprecated in Favor of CEL Section of the v1beta1 Migration Guide]({{<ref \"../../v1.0/upgrading/v1beta1-migration#webhook-support-deprecated-in-favor-of-cel\" >}}).~~\n* `0.33.0` drops support for passing settings through the `karpenter-global-settings` ConfigMap. You should pass settings through the container environment variables in the Karpenter deployment manifest. View the [Global Settings Section of the v1beta1 Migration Guide]({{<ref \"../../v1.0/upgrading/v1beta1-migration#global-settings\" >}}) for more details.\n* `0.33.0` enables `Drift=true` by default in the `FEATURE_GATES`. If you previously didn't enable the feature gate, Karpenter will now check if there is a difference between the desired state of your nodes declared in your NodePool and the actual state of your nodes. View the [Drift Section of Disruption Conceptual Docs]({{<ref \"../concepts/disruption#drift\" >}}) for more details.\n* `0.33.0` drops looking up the `zap-logger-config` through ConfigMap discovery. Instead, Karpenter now expects the logging config to be mounted on the filesystem if you are using this to configure Zap logging. This is not enabled by default, but can be enabled through `--set logConfig.enabled=true` in the Helm values. If you are setting any values in the `logConfig` from the `0.32.x` upgrade, such as `logConfig.logEncoding`, note that you will have to explicitly set `logConfig.enabled=true` alongside it. Also, note that setting the Zap logging config is a deprecated feature in beta and is planned to be dropped at v1. View the [Logging Configuration Section of the v1beta1 Migration Guide]({{<ref \"../../v1.0/upgrading/v1beta1-migration#logging-configuration-is-no-longer-dynamic\" >}}) for more details.\n* `0.33.0` change the default `LOG_LEVEL` from `debug` to `info` by default. If you are still enabling logging configuration through the `zap-logger-config`, no action is required.\n* `0.33.0` drops support for comma delimited lists on tags for `SubnetSelectorTerm`, `SecurityGroupsSelectorTerm`, and `AMISelectorTerm`. Karpenter now supports multiple terms for each of the selectors which means that we can specify a more explicit OR-based constraint through separate terms rather than a comma-delimited list of values.\n\n### Upgrading to `0.32.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter `0.32.0` introduces v1beta1 APIs, including _significant_ changes to the API and installation procedures for the Karpenter controllers. **Do not** upgrade to `0.32.0`+ without referencing the [v1beta1 Migration Upgrade Procedure]({{<ref \"../../v1.0/upgrading/v1beta1-migration#upgrade-procedure\" >}}).\n\nThis version includes **dual support** for both alpha and beta APIs to ensure that you can slowly migrate your existing Provisioner, AWSNodeTemplate, and Machine alpha APIs to the newer NodePool, EC2NodeClass, and NodeClaim beta APIs.\n\nNote that if you are rolling back after upgrading to `0.32.0`, note that __only__ versions `0.31.4` support handling rollback after you have deployed the v1beta1 APIs to your cluster.\n{{% /alert %}}\n\n* Karpenter now uses `settings.InterruptionQueue` instead of `settings.aws.InterruptionQueueName` in its helm chart. The CLI argument also changed to `--interruption-queue`.\n* Karpenter now serves the webhook prometheus metrics server on port `8001`. If this port is already in-use on the pod or you are running in `hostNetworking` mode, you may need to change this port value. You can configure this port value through the `WEBHOOK_METRICS_PORT` environment variable or the `webhook.metrics.port` value if installing via Helm.\n* Karpenter now exposes the ability to disable webhooks through the `webhook.enabled=false` value. This value will disable the webhook server and will prevent any permissions, mutating or validating webhook configurations from being deployed to the cluster.\n* Karpenter now moves all logging configuration for the Zap logger into the `logConfig` values block. Configuring Karpenter logging with this mechanism _is_ deprecated and will be dropped at v1. Karpenter now only surfaces logLevel through the `logLevel` helm value. If you need more advanced configuration due to log parsing constraints, we recommend configuring your log parser to handle Karpenter's Zap JSON logging.\n* The default log encoding changed from `console` to `json`. If you were previously not setting the type of log encoding, this default will change with the Helm chart. If you were setting the value through `logEncoding`, this value will continue to work until `0.33.x` but it is deprecated in favor of `logConfig.logEncoding`\n* Karpenter now uses the `karpenter.sh/disruption:NoSchedule=disrupting` taint instead of the upstream `node.kubernetes.io/unschedulable` taint for nodes spawned with a NodePool to prevent pods from scheduling to nodes being disrupted. Pods that previously tolerated the `node.kubernetes.io/unschedulable` taint that previously weren't evicted during termination will now be evicted. This most notably affects DaemonSets, which have the `node.kubernetes.io/unschedulable` toleration by default, where Karpenter will now remove these pods during termination. If you want your specific pods to not be evicted when nodes are scaled down, you should add a toleration to the pods with the following: `Key=karpenter.sh/disruption, Effect=NoSchedule, Operator=Equals, Values=disrupting`.\n  * Note: Karpenter will continue to use the old `node.kubernetes.io/unschedulable` taint for nodes spawned with a Provisioner.\n\n### Upgrading to `0.31.0`+\n\n* Karpenter moved its `securityContext` constraints from pod-wide to only applying to the Karpenter container exclusively. If you were previously relying on the pod-wide `securityContext` for your sidecar containers, you will now need to set these values explicitly in your sidecar container configuration.\n\n### Upgrading to `0.30.0`+\n\n* Karpenter will now [statically drift]({{<ref \"../concepts/disruption#drift\" >}}) on both Provisioner and AWSNodeTemplate Fields. For Provisioner Static Drift, the `karpenter.sh/provisioner-hash` annotation must be present on both the Provisioner and Machine. For AWSNodeTemplate drift, the `karpenter.k8s.aws/nodetemplate-hash` annotation must be present on the AWSNodeTemplate and Machine. Karpenter will not add these annotations to pre-existing nodes, so each of these nodes will need to be recycled one time for the annotations to be added.\n* Karpenter will now fail validation on AWSNodeTemplates and Provisioner `spec.provider` that have `amiSelectors`, `subnetSelectors`, or `securityGroupSelectors` set with a combination of id selectors (`aws-ids`, `aws::ids`) and other selectors.\n* Karpenter now statically sets the `securityContext` at both the pod and container-levels and doesn't allow override values to be passed through the Helm chart. This change was made to adhere to [Restricted Pod Security Standard](https://kubernetes.io/docs/concepts/security/pod-security-standards/#restricted), which follows pod hardening best practices.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nIf you have sidecar containers configured to run alongside Karpenter that cannot tolerate the [pod-wide `securityContext` constraints](https://github.com/aws/karpenter/blob/v0.30.0/charts/karpenter/templates/deployment.yaml#L40), you will need to specify overrides to the sidecar `securityContext` in your deployment.\n{{% /alert %}}\n\n### Upgrading to `0.29.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter `0.29.1` contains a [file descriptor and memory leak bug](https://github.com/aws/karpenter/issues/4296) that leads to Karpenter getting OOMKilled and restarting at the point that it hits its memory or file descriptor limit. Karpenter `0.29.2`+ fixes this leak.\n{{% /alert %}}\n\n* Karpenter has changed the default metrics service port from 8080 to 8000 and the default webhook service port from 443 to 8443. In `0.28.0`, the Karpenter pod port was changed to 8000, but referenced the service by name, allowing users to scrape the service at port 8080 for metrics. `0.29.0` aligns the two ports so that service and pod metrics ports are the same. These ports are set by the `controller.metrics.port` and `webhook.port` Helm chart values, so if you have previously set these to non-default values, you may need to update your Prometheus scraper to match these new values.\n\n* Karpenter will now reconcile nodes that are drifted due to their Security Groups or their Subnets. If your AWSNodeTemplate's Security Groups differ from the Security Groups used for an instance, Karpenter will consider it drifted. If the Subnet used by an instance is not contained in the allowed list of Subnets for an AWSNodeTemplate, Karpenter will also consider it drifted.\n  * Since Karpenter uses tags for discovery of Subnets and SecurityGroups, check the [Threat Model]({{<ref \"../reference/threat-model.md#threat-using-ec2-createtagdeletetag-permissions-to-orchestrate-machine-creationdeletion\" >}}) to see how to manage this IAM Permission.\n\n### Upgrading to `0.28.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter `0.28.0` is incompatible with Kubernetes version 1.26+, which can result in additional node scale outs when using `--cloudprovider=external`, which is the default for the EKS Optimized AMI. See: https://github.com/aws/karpenter-core/pull/375. Karpenter `0.28.1`+ fixes this issue and is compatible with Kubernetes version 1.26+.\n{{% /alert %}}\n\n* The `extraObjects` value is now removed from the Helm chart. Having this value in the chart proved to not work in the majority of Karpenter installs and often led to anti-patterns, where the Karpenter resources installed to manage Karpenter's capacity were directly tied to the install of the Karpenter controller deployments. The Karpenter team recommends that, if you want to install Karpenter manifests alongside the Karpenter Helm chart, to do so by creating a separate chart for the manifests, creating a dependency on the controller chart.\n* The `aws.nodeNameConvention` setting is now removed from the [`karpenter-global-settings`]({{<ref \"../reference/settings#configmap\" >}}) ConfigMap. Because Karpenter is now driving its orchestration of capacity through Machines, it no longer needs to know the node name, making this setting obsolete. Karpenter ignores configuration that it doesn't recognize in the [`karpenter-global-settings`]({{<ref \"../reference/settings#configmap\" >}}) ConfigMap, so leaving the `aws.nodeNameConvention` in the ConfigMap will simply cause this setting to be ignored.\n* Karpenter now defines a set of \"restricted tags\" which can't be overridden with custom tagging in the AWSNodeTemplate or in the [`karpenter-global-settings`]({{<ref \"../reference/settings#configmap\" >}}) ConfigMap. If you are currently using any of these tag overrides when tagging your instances, webhook validation will now fail. These tags include:\n\n  * `karpenter.sh/managed-by`\n  * `karpenter.sh/provisioner-name`\n  * `kubernetes.io/cluster/${CLUSTER_NAME}`\n\n* The following metrics changed their meaning, based on the introduction of the Machine resource:\n  * `karpenter_nodes_terminated`: Use `karpenter_machines_terminated` if you are interested in the reason why a Karpenter machine was deleted. `karpenter_nodes_terminated` now only tracks the count of terminated nodes without any additional labels.\n  * `karpenter_nodes_created`: Use `karpenter_machines_created` if you are interested in the reason why a Karpenter machine was created. `karpenter_nodes_created` now only tracks the count of created nodes without any additional labels.\n  * `karpenter_deprovisioning_replacement_node_initialized_seconds`: This metric has been replaced in favor of `karpenter_deprovisioning_replacement_machine_initialized_seconds`.\n* `0.28.0` introduces the Machine CustomResource into the `karpenter.sh` API Group and requires this CustomResourceDefinition to run properly. Karpenter now orchestrates its CloudProvider capacity through these in-cluster Machine CustomResources. When performing a scheduling decision, Karpenter will create a Machine, resulting in launching CloudProvider capacity. The kubelet running on the new capacity will then register the node to the cluster shortly after launch.\n  * If you are using Helm to upgrade between versions of Karpenter, note that [Helm does not automate the process of upgrading or install the new CRDs into your cluster](https://helm.sh/docs/chart_best_practices/custom_resource_definitions/#some-caveats-and-explanations). To install or upgrade the existing CRDs, follow the guidance under the [Custom Resource Definition (CRD) Upgrades]({{< relref \"#custom-resource-definition-crd-upgrades\" >}}) section of the upgrade guide.\n  * Karpenter will hydrate Machines on startup for existing capacity managed by Karpenter into the cluster. Existing capacity launched by an older version of Karpenter is discovered by finding CloudProvider capacity with the `karpenter.sh/provisioner-name` tag or the `karpenter.sh/provisioner-name` label on nodes.\n* The metrics port for the Karpenter deployment was changed from 8080 to 8000. Users who scrape the pod directly for metrics rather than the service will need to adjust the commands they use to reference port 8000. Any users who scrape metrics from the service should be unaffected.\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter creates a mapping between CloudProvider machines and CustomResources in the cluster for capacity tracking. To ensure this mapping is consistent, Karpenter utilizes the following tag keys:\n\n* `karpenter.sh/managed-by`\n* `karpenter.sh/provisioner-name`\n* `kubernetes.io/cluster/${CLUSTER_NAME}`\n\nBecause Karpenter takes this dependency, any user that has the ability to Create/Delete these tags on CloudProvider machines will have the ability to orchestrate Karpenter to Create/Delete CloudProvider machines as a side effect. Check the [Threat Model]({{<ref \"../reference/threat-model.md#threat-using-ec2-createtagdeletetag-permissions-to-orchestrate-machine-creationdeletion\" >}}) to see how this might affect you, and ways to mitigate this.\n{{% /alert %}}\n\n{{% alert title=\"Rolling Back\" color=\"warning\" %}}\nIf, after upgrading to `0.28.0`+, a rollback to an older version of Karpenter needs to be performed, Karpenter will continue to function normally, though you will still have the Machine CustomResources on your cluster. You will need to manually delete the Machines and patch out the finalizers to fully complete the rollback.\n\nKarpenter marks CloudProvider capacity as \"managed by\" a Machine using the `karpenter-sh/managed-by` tag on the CloudProvider machine. It uses this tag to ensure that the Machine CustomResources in the cluster match the CloudProvider capacity managed by Karpenter. If these states don't match, Karpenter will garbage collect the capacity. Because of this, if performing an upgrade, followed by a rollback, followed by another upgrade to `0.28.0`+, ensure you remove the `karpenter.sh/managed-by` tags from existing capacity; otherwise, Karpenter will deprovision the capacity without a Machine CR counterpart.\n{{% /alert %}}\n\n### Upgrading to `0.27.3`+\n\n* The `defaulting.webhook.karpenter.sh` mutating webhook was removed in `0.27.3`. If you are coming from an older version of Karpenter where this webhook existed and the webhook was not managed by Helm, you may need to delete the stale webhook.\n\n```bash\nkubectl delete mutatingwebhookconfigurations defaulting.webhook.karpenter.sh\n```\n\n### Upgrading to `0.27.0`+\n\n* The Karpenter controller pods now deploy with `kubernetes.io/hostname` self anti-affinity by default. If you are running Karpenter in HA (high-availability) mode and you do not have enough nodes to match the number of pod replicas you are deploying with, you will need to scale-out your nodes for Karpenter.\n* The following controller metrics changed and moved under the `controller_runtime` metrics namespace:\n  * `karpenter_metricscraper_...`\n  * `karpenter_deprovisioning_...`\n  * `karpenter_provisioner_...`\n  * `karpenter_interruption_...`\n* The following controller metric names changed, affecting the `controller` label value under `controller_runtime_...` metrics. These metrics include:\n  * `podmetrics` -> `pod_metrics`\n  * `provisionermetrics` -> `provisioner_metrics`\n  * `metricscraper` -> `metric_scraper`\n  * `provisioning` -> `provisioner_trigger`\n  * `node-state` -> `node_state`\n  * `pod-state` -> `pod_state`\n  * `provisioner-state` -> `provisioner_state`\n* The `karpenter_allocation_controller_scheduling_duration_seconds` metric name changed to `karpenter_provisioner_scheduling_duration_seconds`\n\n### Upgrading to `0.26.0`+\n\n* 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]({{<ref \"../concepts/disruption#disabling-deprovisioning\" >}}) for more details.\n* 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.\n* 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.\n\n### Upgrading to `0.25.0`+\n\n* 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.\n\n### Upgrading to `0.24.0`+\n\n* Settings are no longer updated dynamically while Karpenter is running. If you manually make a change to the [`karpenter-global-settings`]({{<ref \"../reference/settings#configmap\" >}}) ConfigMap, you will need to reload the containers by restarting the deployment with `kubectl rollout restart -n karpenter deploy/karpenter`\n* 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]({{<ref \"../concepts/scheduling#selecting-nodes\" >}}). 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.\n* `aws.tags` in [`karpenter-global-settings`]({{<ref \"../reference/settings#configmap\" >}}) 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.<key>: value` in the ConfigMap.\n\n### Upgrading to `0.22.0`+\n\n* 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.\n\n### Upgrading to `0.20.0`+\n\n* Prior to `0.20.0`, Karpenter would prioritize certain instance type categories absent of any requirements in the Provisioner. `0.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.\n\n### Upgrading to `0.19.0`+\n\n* 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.\n* 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/disruption/#interruption\" >}}).\n* 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.\n* Karpenter CRD raw YAML URLs have migrated from `https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.19.3/charts/karpenter/crds/...` to `https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.19.3/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.\n* 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.\n* The following CLI options/environment variables are now removed and replaced in favor of pulling settings dynamically from the [`karpenter-global-settings`]({{<ref \"../reference/settings#configmap\" >}}) ConfigMap. See the [Settings docs]({{<ref \"../reference/settings/#environment-variables--cli-flags\" >}}) for more details on configuring the new values in the ConfigMap.\n\n  * `CLUSTER_NAME` -> `settings.aws.clusterName`\n  * `CLUSTER_ENDPOINT` -> `settings.aws.clusterEndpoint`\n  * `AWS_DEFAULT_INSTANCE_PROFILE` -> `settings.aws.defaultInstanceProfile`\n  * `AWS_ENABLE_POD_ENI` -> `settings.aws.enablePodENI`\n  * `AWS_ENI_LIMITED_POD_DENSITY` -> `settings.aws.enableENILimitedPodDensity`\n  * `AWS_ISOLATED_VPC` -> `settings.aws.isolatedVPC`\n  * `AWS_NODE_NAME_CONVENTION` -> `settings.aws.nodeNameConvention`\n  * `VM_MEMORY_OVERHEAD` -> `settings.aws.vmMemoryOverheadPercent`\n\n### Upgrading to `0.18.0`+\n\n* `0.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]({{<ref \"../reference/metrics\" >}}).\n\n### Upgrading to `0.17.0`+\n\nKarpenter'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/).\nWith 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-karpenter/#install-karpenter-helm-chart\" >}}).\n\nUsers who have scripted the installation or upgrading of Karpenter need to adjust their scripts with the following changes:\n1. There is no longer a need to add the Karpenter Helm repo with `helm repo add`\n2. The full URL of the Helm chart needs to be present when using the `helm` CLI\n3. 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  (i.e `v0.17.0`).\n\n### Upgrading to `0.16.2`+\n\n* `0.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:\n```bash\nkubectl replace -f https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.16.2/charts/karpenter/crds/karpenter.sh_provisioners.yaml\n```\n\n### Upgrading to `0.16.0`+\n\n* `0.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:\n```bash\nkubectl replace -f https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.16.0/charts/karpenter/crds/karpenter.sh_provisioners.yaml\n```\n\n### Upgrading to `0.15.0`+\n\n* `0.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:\n```bash\nkubectl replace -f https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.15.0/charts/karpenter/crds/karpenter.sh_provisioners.yaml\n```\n\n### Upgrading to `0.14.0`+\n\n* `0.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:\n\n```bash\nkubectl replace -f https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.14.0/charts/karpenter/crds/karpenter.sh_provisioners.yaml\n\nkubectl replace -f https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.14.0/charts/karpenter/crds/karpenter.k8s.aws_awsnodetemplates.yaml\n```\n\n* `0.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:\n\n```bash\n## Find launch templates that match the naming pattern and you do not want to keep\naws ec2 describe-launch-templates --filters=\"Name=launch-template-name,Values=Karpenter-${CLUSTER_NAME}-*\"\n\n## Delete launch template(s) that match the name but do not have the \"karpenter.k8s.aws/cluster\" tag\naws ec2 delete-launch-template --launch-template-id <LAUNCH_TEMPLATE_ID>\n```\n\n* `0.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.\n```yaml\n  - key: node.kubernetes.io/instance-type\n    operator: Exists\n```\n\n* `0.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]({{<ref \"../concepts/nodepools#spec-amiselector\" >}}) to get started\n* `0.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`.\n\n* `0.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.\n\n### Upgrading to `0.13.0`+\n\n* `0.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. `0.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.\n\n  If you are upgrading from `0.10.1` - `0.11.1`, a new CRD `awsnodetemplate` was added. In `0.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:\n  1. Make sure any `awsnodetemplate` manifests are saved somewhere so that they can be reapplied to the cluster.\n  2. `kubectl delete crd awsnodetemplate`\n  3. `kubectl apply -f https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.13.2/charts/karpenter/crds/karpenter.k8s.aws_awsnodetemplates.yaml`\n  4. Perform the Karpenter upgrade to `0.13.0`+, which will install the new `awsnodetemplates` CRD.\n  5. Reapply the `awsnodetemplate` manifests you saved from step 1, if applicable.\n* `0.13.0` also adds EC2/spot price fetching to Karpenter to allow making more accurate decisions regarding node deployments.  Our [getting started guide]({{< ref \"../getting-started/getting-started-with-karpenter\" >}}) 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.\n\n### Upgrading to `0.12.0`+\n\n* `0.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.\n* If you are upgrading from `0.10.1` - `0.11.1`, a new CRD `awsnodetemplate` was added. In `0.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:\n  1. Make sure any `awsnodetemplate` manifests are saved somewhere so that they can be reapplied to the cluster.\n  2. `kubectl delete crd awsnodetemplate`\n  3. `kubectl apply -f https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.12.1/charts/karpenter/crds/karpenter.k8s.aws_awsnodetemplates.yaml`\n  4. Perform the Karpenter upgrade to `0.12.0`+, which will install the new `awsnodetemplates` CRD.\n  5. Reapply the `awsnodetemplate` manifests you saved from step 1, if applicable.\n\n### Upgrading to `0.11.0`+\n\n`0.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`.\n\nOther 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.\n\n`0.11.0` adds a `providerRef` field in the Provisioner CRD. To use this new field you will need to replace the Provisioner CRD manually:\n\n```shell\nkubectl replace -f https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.11.0/charts/karpenter/crds/karpenter.sh_provisioners.yaml\n```\n\n### Upgrading to `0.10.0`+\n\n`0.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:\n\n```shell\nkubectl replace -f https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.10.0/charts/karpenter/crds/karpenter.sh_provisioners.yaml\n```\n\n📝 If you don't perform this manual CRD update, Karpenter will work correctly except for rejecting the creation/update of provisioners that use `startupTaints`.\n\n### Upgrading to `0.6.2`+\n\nIf using Helm, the variable names have changed for the cluster's name and endpoint. You may need to update any configuration\nthat sets the old variable names.\n\n- `controller.clusterName` is now `clusterName`\n- `controller.clusterEndpoint` is now `clusterEndpoint`\n"
  },
  {
    "path": "website/content/en/preview/_index.md",
    "content": "---\ntitle: \"Documentation\"\nlinkTitle: \"Docs\"\nweight: 20\ncascade:\n  type: docs\n  tags:\n    - preview\n---\nKarpenter is an open-source node lifecycle management project built for Kubernetes.\nAdding Karpenter to a Kubernetes cluster can dramatically improve the efficiency and cost of running workloads on that cluster.\nKarpenter works by:\n\n* **Watching** for pods that the Kubernetes scheduler has marked as unschedulable\n* **Evaluating** scheduling constraints (resource requests, nodeselectors, affinities, tolerations, and topology spread constraints) requested by the pods\n* **Provisioning** nodes that meet the requirements of the pods\n* **Disrupting** the nodes when the nodes are no longer needed\n\nAs someone using Karpenter, once your Kubernetes cluster and the Karpenter controller are up and running (see [Getting Started]({{<ref \"./getting-started\" >}})), you can:\n\n* **Set up NodePools**: By applying a NodePool to Karpenter, you can configure constraints on node provisioning and set values for node expiry, node consolidation, or Kubelet configuration values.\n  NodePool-level constraints related to Kubernetes and your cloud provider (AWS, for example) include:\n\n  - 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.\n  - Labels (`labels`): Apply arbitrary key-value pairs to nodes that can be matched by pods.\n  - Requirements (`requirements`): Set acceptable (`In`) and unacceptable (`NotIn`) Kubernetes and Karpenter values for node provisioning based on [Well-Known Labels](https://kubernetes.io/docs/reference/labels-annotations-taints/) and [cloud-specific settings]({{<ref \"./concepts/nodeclasses\" >}}). 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]({{<ref \"./concepts/nodepools/#capacity-type\" >}}) (such as AWS spot or on-demand).\n  - 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.\n\n* **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:\n\n  - 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.\n  - 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.\n  - 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.\n  - 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.\n  - 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.\n  - 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.\n  - 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.\n\nLearn more about Karpenter and how to get started below.\n"
  },
  {
    "path": "website/content/en/preview/concepts/_index.md",
    "content": "---\ntitle: \"Concepts\"\nlinkTitle: \"Concepts\"\nweight: 20\ndescription: >\n  Understand key concepts of Karpenter\n---\n\nUsers fall under two basic roles: [Kubernetes cluster administrators]({{<ref \"#cluster-administrator\" >}}) and [application developers]({{<ref \"#application-developer\" >}}). This document describes Karpenter concepts through the lens of those two types of users.\n\n## Cluster Administrator\n\nAs a Kubernetes cluster administrator, you can engage with Karpenter to:\n\n* Install Karpenter\n* Configure NodePools to set constraints and other features for managing nodes\n* Disrupting nodes\n\nConcepts associated with this role are described below.\n\n\n### Installing Karpenter\n\nKarpenter 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.\n\n[Getting Started with Karpenter]({{<ref \"../getting-started/getting-started-with-karpenter\" >}}) describes the process of installing Karpenter. 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.\n\nOnce privileges are in place, Karpenter is deployed with a Helm chart.\n\n### Configuring NodePools\n\nKarpenter'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 [NodePools]({{<ref \"nodepools\" >}}) that define how Karpenter manages unschedulable pods and configures nodes. You will also define behaviors for your NodePools, capturing details like how Karpenter handles disruption of nodes and setting limits and weights for each NodePool.\n\nHere are some things to know about Karpenter's NodePools:\n\n* **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.\n\n* [**Defining Constraints**]({{<ref \"nodepools\" >}}): Karpenter defines a Custom Resource called a NodePool to specify configuration. Each NodePool manages a distinct set of nodes, but pods can be scheduled to any NodePool that supports its scheduling constraints. A NodePool defines constraints that determine which nodes can be provisioned and specifies the attributes these nodes will have. See the [NodePools Documentation]({{<ref \"nodepools\" >}}) docs for a description of configuration and NodePool examples.\n\n* [**Defining Disruption**]({{<ref \"disruption\" >}}): A NodePool can also include values to indicate when nodes should be disrupted. This includes configuration around concepts like [Consolidation]({{<ref \"disruption#consolidation\" >}}), [Drift]({{<ref \"disruption#drift\" >}}), and [Expiration]({{<ref \"disruption#automated-methods\" >}}).\n\n* **Well-known labels**: The NodePool 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.\n\n* **Multiple NodePools**: Multiple NodePools 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.\n\nAlthough most use cases are addressed with a single NodePool for multiple teams, multiple NodePools are useful to isolate nodes for billing, use different node constraints (such as no GPUs for a team), or use different disruption settings.\n\n### Disrupting nodes\n\nKarpenter deletes nodes when they are no longer needed.\n\n* [**Finalizer**]({{<ref \"disruption#manual-methods\" >}}): Karpenter places a finalizer bit on each node it creates.\nWhen 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.\nKarpenter handles all clean-up work needed to properly delete the node.\n* [**Expiration**]({{<ref \"disruption\" >}}): Karpenter will mark nodes as expired and disrupt them after they have lived a set number of seconds, based on the NodePool's `spec.template.spec.expireAfter` value. You can use node expiry to periodically recycle nodes due to security concerns.\n* [**Consolidation**]({{<ref \"disruption#consolidation\" >}}): Karpenter works to actively reduce cluster cost by identifying when:\n  * Nodes can be removed because the node is empty\n  * Nodes can be removed as their workloads will run on other nodes in the cluster.\n  * Nodes can be replaced with cheaper variants due to a change in the workloads.\n* [**Drift**]({{<ref \"disruption#drift\" >}}): Karpenter will mark nodes as drifted and disrupt nodes that have drifted from their desired specification. See [Drift]({{<ref \"#drift\" >}}) to see which fields are considered.\n* [**Interruption**]({{<ref \"disruption#interruption\" >}}): Karpenter will watch for upcoming 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.\n\nFor more details on how Karpenter deletes nodes, see the [Disruption Documentation]({{<ref \"disruption\" >}}).\n\n### Scheduling\n\nKarpenter 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.\n\nOnce Karpenter brings up a node, that node is available for the Kubernetes scheduler to schedule pods on it as well.\n\n#### Constraints\n\nThe concept of layered constraints is key to using Karpenter. With no constraints defined in NodePools 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.\n\nAn application developer can tighten the constraints defined in a NodePool 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.\n\n### Cloud Provider\n\nKarpenter 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.\n\nWhile using Kubernetes well-known labels, the NodePool can set some values that are specific to the cloud provider. 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`).\n\n### Kubernetes Cluster Autoscaler\n\nLike 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:\n\n* **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.\n\n* **Quick 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.\n\n## Application Developer\n\nAs 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).\n\nLayered *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).\nThe 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.\n\nThe 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.\n\nAs long as the requests are not outside the NodePool'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.\n\nSo, what constraints can you use as an application developer deploying pods that could be managed by Karpenter?\n\nKubernetes features that Karpenter supports for scheduling pods include nodeAffinity and [nodeSelector](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#nodeselector).\nIt 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).\n\nFrom 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:\n\n* **kubernetes.io/arch**: For example, kubernetes.io/arch=amd64\n* **node.kubernetes.io/instance-type**: For example, node.kubernetes.io/instance-type=m3.medium\n* **topology.kubernetes.io/zone**: For example, topology.kubernetes.io/zone=us-east-1c\n\nFor more on how, as a developer, you can add constraints to your pod deployment, see [Scheduling](./scheduling/) for details.\n"
  },
  {
    "path": "website/content/en/preview/concepts/disruption.md",
    "content": "---\ntitle: \"Disruption\"\nlinkTitle: \"Disruption\"\nweight: 50\ndescription: >\n  Understand different ways Karpenter disrupts nodes\n---\n\n## Control Flow\n\nKarpenter sets a Kubernetes [finalizer](https://kubernetes.io/docs/concepts/overview/working-with-objects/finalizers/) on each node and node claim it provisions.\nThe finalizer blocks deletion of the node object while the Termination Controller taints and drains the node, before removing the underlying NodeClaim. Disruption is triggered by the Disruption Controller, by the user through manual disruption, or through an external system that sends a delete request to the node object.\n\n### Disruption Controller\n\nKarpenter automatically discovers disruptable nodes and spins up replacements when needed. Karpenter disrupts nodes by executing one [automated method](#automated-graceful-methods) at a time, first doing Drift then Consolidation. Each method varies slightly, but they all follow the standard disruption process. Karpenter uses [disruption budgets]({{<ref \"#nodepool-disruption-budgets\" >}}) to control the speed at which these disruptions begin.\n1. Identify a list of prioritized candidates for the disruption method.\n   * If there are [pods that cannot be evicted](#pod-level-controls) on the node, Karpenter will ignore the node and try disrupting it later.\n   * If there are no disruptable nodes, continue to the next disruption method.\n2. For each disruptable node:\n   1. Check if disrupting it would violate its NodePool's disruption budget.\n   2. Execute a scheduling simulation with the pods on the node to find if any replacement nodes are needed.\n3. Add the `karpenter.sh/disrupted:NoSchedule` taint to the node(s) to prevent pods from scheduling to it.\n4. Pre-spin any replacement nodes needed as calculated in Step (2), and wait for them to become ready.\n   * If a replacement node fails to initialize, un-taint the node(s), and restart from Step (1), starting at the first disruption method again.\n5. Delete the node(s) and wait for the Termination Controller to gracefully shutdown the node(s).\n6. Once the Termination Controller terminates the node, go back to Step (1), starting at the first disruption method again.\n\n### Termination Controller\n\nWhen a Karpenter node is deleted, the Karpenter finalizer will block deletion and the APIServer will set the `DeletionTimestamp` on the node, allowing Karpenter to gracefully shutdown the node, modeled after [Kubernetes Graceful Node Shutdown](https://kubernetes.io/docs/concepts/cluster-administration/node-shutdown/#graceful-node-shutdown). Karpenter's graceful shutdown process will:\n1. Add the `karpenter.sh/disrupted:NoSchedule` taint to the node to prevent pods from scheduling to it.\n2. Begin evicting the pods on the node with the [Kubernetes Eviction API](https://kubernetes.io/docs/concepts/scheduling-eviction/api-eviction/) to respect PDBs, while ignoring all [static pods](https://kubernetes.io/docs/tasks/configure-pod-container/static-pod/), pods tolerating the `karpenter.sh/disrupted:NoSchedule` taint, and succeeded/failed pods. Wait for the node to be fully drained before proceeding to Step (3).\n   * While waiting, if the underlying NodeClaim for the node no longer exists, remove the finalizer to allow the APIServer to delete the node, completing termination.\n3. Verify that all [VolumeAttachment](https://kubernetes.io/docs/reference/kubernetes-api/config-and-storage-resources/volume-attachment-v1/) resources for drain-able pods are deleted.\n4. Terminate the NodeClaim in the Cloud Provider.\n5. Remove the finalizer from the node to allow the APIServer to delete the node, completing termination.\n\n## Manual Methods\n* **Node Deletion**: You can use `kubectl` to manually remove a single Karpenter node or nodeclaim. Since each Karpenter node is owned by a NodeClaim, deleting either the node or the nodeclaim will cause cascade deletion of the other:\n\n    ```bash\n    # Delete a specific nodeclaim\n    kubectl delete nodeclaim $NODECLAIM_NAME\n\n    # Delete a specific node\n    kubectl delete node $NODE_NAME\n\n    # Delete all nodeclaims\n    kubectl delete nodeclaims --all\n\n    # Delete all nodes owned by any nodepool\n    kubectl delete nodes -l karpenter.sh/nodepool\n\n    # Delete all nodeclaims owned by a specific nodepoolXS\n    kubectl delete nodeclaims -l karpenter.sh/nodepool=$NODEPOOL_NAME\n    ```\n* **NodePool Deletion**: NodeClaims are owned by the NodePool through an [owner reference](https://kubernetes.io/docs/concepts/overview/working-with-objects/owners-dependents/#owner-references-in-object-specifications) that launched them. Karpenter will gracefully terminate nodes through cascading deletion when the owning NodePool is deleted.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nBy adding the finalizer, Karpenter improves the default Kubernetes process of node deletion.\nWhen 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.\n{{% /alert %}}\n\n## Automated Graceful Methods\n\nAutomated graceful methods, can be rate limited through [NodePool Disruption Budgets]({{<ref \"#nodepool-disruption-budgets\" >}})\n\n* [**Consolidation**]({{<ref \"#consolidation\" >}}): Karpenter works to actively reduce cluster cost by identifying when:\n  * Nodes can be removed because the node is empty\n  * Nodes can be removed as their workloads will run on other nodes in the cluster.\n  * Nodes can be replaced with lower priced variants due to a change in the workloads.\n* [**Drift**]({{<ref \"#drift\" >}}): Karpenter will mark nodes as drifted and disrupt nodes that have drifted from their desired specification. See [Drift]({{<ref \"#drift\" >}}) to see which fields are considered.\n\n{{% alert title=\"Defaults\" color=\"secondary\" %}}\nDisruption is configured through the NodePool's disruption block by the `consolidationPolicy`, and `consolidateAfter` fields. Karpenter will configure these fields with the following values by default if they are not set:\n\n```yaml\nspec:\n  disruption:\n    consolidationPolicy: WhenEmptyOrUnderutilized\n    consolidateAfter: 0s\n```\n{{% /alert %}}\n\n### Consolidation\n\nConsolidation is configured by `consolidationPolicy` and `consolidateAfter`. `consolidationPolicy` determines the pre-conditions for nodes to be considered consolidatable, and are `WhenEmpty` or `WhenEmptyOrUnderutilized`. If a node has no running non-daemon pods, it is considered empty.  `consolidateAfter` can be set to indicate how long Karpenter should wait after a pod schedules or is removed from the node before considering the node consolidatable. With `WhenEmptyOrUnderutilized`, Karpenter will consider a node consolidatable when its `consolidateAfter` has been reached, empty or not.\n\nKarpenter has two mechanisms for cluster consolidation:\n1. **Deletion** - A node is eligible for deletion if all of its pods can run on free capacity of other nodes in the cluster.\n2. **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 lower price replacement node.\n\nConsolidation has three mechanisms that are performed in order to attempt to identify a consolidation action:\n1. **Empty Node Consolidation** - Delete any entirely empty nodes in parallel\n2. **Multi Node Consolidation** - Try to delete two or more nodes in parallel, possibly launching a single replacement whose price is lower than that of all nodes being removed\n3. **Single Node Consolidation** - Try to delete any single node, possibly launching a single replacement whose price is lower than that of the node being removed\n\nIt'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.\n\nWhen there are multiple nodes that could be potentially deleted or replaced, Karpenter chooses to consolidate the node that overall disrupts your workloads the least by preferring to terminate:\n\n* Nodes running fewer pods\n* Nodes that will expire soon\n* Nodes with lower priority pods\n\nIf 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.\n\n```bash\nEvents:\n  Type     Reason                   Age                From             Message\n  ----     ------                   ----               ----             -------\n  Normal   Unconsolidatable         66s                karpenter        pdb default/inflate-pdb prevents pod evictions\n  Normal   Unconsolidatable         33s (x3 over 30m)  karpenter        can't replace with a lower-priced node\n```\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nUsing 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 disrupt 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`).\n{{% /alert %}}\n\n#### Spot consolidation\nFor spot nodes, Karpenter has deletion consolidation enabled by default. If you would like to enable replacement with spot consolidation, you need to enable the feature through the [`SpotToSpotConsolidation` feature flag]({{<ref \"../reference/settings#features-gates\" >}}).\n\nLower priced spot instance types are selected with the [`price-capacity-optimized` strategy](https://aws.amazon.com/blogs/compute/introducing-price-capacity-optimized-allocation-strategy-for-ec2-spot-instances/). Sometimes, the lowest priced spot instance type is not launched due to the likelihood of interruption. As a result, Karpenter uses the number of available instance type options with a price lower than the currently launched spot instance as a heuristic for evaluating whether it should launch a replacement for the current spot node.\n\nWe refer to the number of instances that Karpenter has within its launch decision as a launch's \"instance type flexibility.\" When Karpenter is considering performing a spot-to-spot consolidation replacement, it will check whether replacing the instance type will lead to enough instance type flexibility in the subsequent launch request. As a result, we get the following properties when evaluating for consolidation:\n1) We shouldn't continually consolidate down to the lowest priced spot instance which might have very high rates of interruption.\n2) We launch with enough instance types that there’s high likelihood that our replacement instance has comparable availability to our current one.\n\nKarpenter requires a minimum instance type flexibility of 15 instance types when performing single node spot-to-spot consolidations (1 node to 1 node). It does not have the same instance type flexibility requirement for multi-node spot-to-spot consolidations (many nodes to 1 node) since doing so without requiring flexibility won't lead to \"race to the bottom\" scenarios.\n\n\n### Drift\nDrift handles changes to the NodePool/EC2NodeClass. For Drift, values in the NodePool/EC2NodeClass are reflected in the NodeClaimTemplateSpec/EC2NodeClassSpec in the same way that they’re set. A NodeClaim will be detected as drifted if the values in its owning NodePool/EC2NodeClass do not match the values in the NodeClaim. Similar to the upstream `deployment.spec.template` relationship to pods, Karpenter will annotate the owning NodePool and EC2NodeClass with a hash of the NodeClaimTemplateSpec to check for drift. Some special cases will be discovered either from Karpenter or through the CloudProvider interface, triggered by NodeClaim/Instance/NodePool/EC2NodeClass changes.\n\n#### Special Cases on Drift\nIn special cases, drift can correspond to multiple values and must be handled differently. Drift on resolved fields can create cases where drift occurs without changes to CRDs, or where CRD changes do not result in drift. For example, if a NodeClaim has `node.kubernetes.io/instance-type: m5.large`, and requirements change from `node.kubernetes.io/instance-type In [m5.large]` to `node.kubernetes.io/instance-type In [m5.large, m5.2xlarge]`, the NodeClaim will not be drifted because its value is still compatible with the new requirements. Conversely, if a NodeClaim is using a NodeClaim image `ami: ami-abc`, but a new image is published, Karpenter's `EC2NodeClass.spec.amiSelectorTerms` will discover that the new correct value is `ami: ami-xyz`, and detect the NodeClaim as drifted.\n\n##### NodePool\n| Fields         |\n|----------------|\n| spec.template.spec.requirements   |\n\n##### EC2NodeClass\n| Fields                        |\n|-------------------------------|\n| spec.subnetSelectorTerms      |\n| spec.securityGroupSelectorTerms  |\n| spec.amiSelectorTerms  |\n\n#### Behavioral Fields\nBehavioral Fields are treated as over-arching settings on the NodePool to dictate how Karpenter behaves. These fields don’t correspond to settings on the NodeClaim or instance. They’re set by the user to control Karpenter’s Provisioning and disruption logic. Since these don’t map to a desired state of NodeClaims, __behavioral fields are not considered for Drift__.\n\n##### NodePool\n| Fields              |\n|---------------------|\n| spec.weight         |\n| spec.limits         |\n| spec.disruption.*   |\n\nRead the [Drift Design](https://github.com/aws/karpenter-core/blob/main/designs/drift.md) for more.\n\n\nKarpenter will add the `Drifted` status condition on NodeClaims if the NodeClaim is drifted from its owning NodePool. Karpenter will also remove the `Drifted` status condition if either:\n1. The `Drift` feature gate is not enabled but the NodeClaim is drifted, Karpenter will remove the status condition.\n2. The NodeClaim isn't drifted, but has the status condition, Karpenter will remove it.\n\n## Automated Forceful Methods\n\nAutomated forceful methods will begin draining nodes as soon as the condition is met.\nUnlike the graceful methods mentioned above, these methods can not be rate-limited using [NodePool Disruption Budgets](#nodepool-disruption-budgets), and do not wait for a pre-spin replacement node to be healthy for the pods to reschedule.\nPod disruption budgets may be used to rate-limit application disruption.\n\n### Expiration\n\nExpiration is a forceful disruption method that begins draining a node immediately once its lifetime exceeds the duration set on the owning NodeClaim's `spec.expireAfter` field.\nChanges to `spec.template.spec.expireAfter` on the owning NodePool will not update the field for existing NodeClaims - it will induce NodeClaim drift and the replacements will have the updated value.\nExpiration can be used, in conjunction with [`terminationGracePeriod`](#terminationgraceperiod), to enforce a maximum Node lifetime.\nBy default, `expireAfter` is set to `720h` (30 days).\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nThe `expireAfter` field defines the **maximum** node lifetime (upper bound), not a guaranteed minimum.\nNodes can be disrupted earlier than the `expireAfter` duration by other disruption methods such as [Drift]({{<ref \"#drift\" >}}), [Consolidation]({{<ref \"#consolidation\" >}}), or [Emptiness]({{<ref \"#consolidation\" >}}) if their [disruption budgets]({{<ref \"#nodepool-disruption-budgets\" >}}) allow.\nFor example, a NodePool with `expireAfter: 720h` (30 days) can still have nodes terminated earlier if the node becomes drifted due to an AMI update and the disruption budget permits drift-based disruptions.\n\nTo enforce a true maximum node lifetime that cannot be shortened by other disruption methods, use `expireAfter` in combination with carefully configured disruption budgets that limit or prevent other disruption reasons.\n{{% /alert %}}\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nMisconfigured PDBs and pods with the `karpenter.sh/do-not-disrupt` annotation may block draining indefinitely.\nFor this reason, it is not recommended to set `expireAfter` without also setting `terminationGracePeriod` **if** your cluster has pods with the `karpenter.sh/do-not-disrupt` annotation.\nDoing so can result in partially drained nodes stuck in the cluster, driving up cluster cost and potentially requiring manual intervention to resolve.\n{{% /alert %}}\n\n### Interruption\n\nIf interruption-handling is enabled, Karpenter will watch for upcoming involuntary interruption events that would cause disruption to your workloads. These interruption events include:\n\n* Spot Interruption Warnings\n* Scheduled Change Health Events (Maintenance Events)\n* Instance Terminating Events\n* Instance Stopping Events\n\nWhen Karpenter detects one of these events will occur to your nodes, it automatically taints, 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.\n\nFor Spot interruptions, the NodePool will start a new node as soon as it sees the Spot interruption warning. Spot interruptions have a __2 minute notice__ before Amazon EC2 reclaims the instance. Once Karpenter has received this warning it will begin draining the node while in parallel provisioning a new node. Karpenter's average node startup time means that, generally, there is sufficient time for the new node to become ready before EC2 initiates termination for the spot instance.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nKarpenter publishes Kubernetes events to the node for all events listed above in addition to [__Spot Rebalance Recommendations__](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/rebalance-recommendations.html). Karpenter does not currently support taint, drain, and terminate logic for Spot Rebalance Recommendations.\n\nIf you require handling for Spot Rebalance Recommendations, you can use the [AWS Node Termination Handler (NTH)](https://github.com/aws/aws-node-termination-handler) alongside Karpenter; however, note that the AWS Node Termination Handler cordons and drains nodes on rebalance recommendations, potentially causing more node churn in the cluster than with interruptions alone. Further information can be found in the [Troubleshooting Guide]({{< ref \"../troubleshooting#aws-node-termination-handler-nth-interactions\" >}}).\n{{% /alert %}}\n\nKarpenter 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-karpenter/#create-the-karpenter-infrastructure-and-iam-roles).\n\nTo enable interruption handling, configure the `--interruption-queue` CLI argument with the name of the interruption queue provisioned to handle interruption events.\n\n### Node Auto Repair\n\n<i class=\"fa-solid fa-circle-info\"></i> <b>Feature State: </b> Karpenter v1.1.0 [alpha]({{<ref \"../reference/settings#feature-gates\" >}})\n\nNode Auto Repair is a feature that automatically identifies and replaces unhealthy nodes in your cluster, helping to maintain overall cluster health. Nodes can experience various types of failures affecting their hardware, file systems, or container environments. These failures may be surfaced through node conditions such as network unavailability, disk pressure, memory pressure, or other conditions reported by node diagnostic agents. When Karpenter detects these unhealthy conditions, it automatically replaces the affected nodes based on cloud provider-defined repair policies. Once a node has been in an unhealthy state beyond its configured toleration duration, Karpenter will forcefully terminate the node and its corresponding NodeClaim, bypassing the standard drain and grace period procedures to ensure swift replacement of problematic nodes. To prevent cascading failures, Karpenter includes safety mechanisms: it will not perform repairs if more than 20% of nodes in a NodePool are unhealthy, and for standalone NodeClaims, it evaluates this threshold against all nodes in the cluster. This ensures your cluster remains in a healthy state with minimal manual intervention, even in scenarios where normal node termination procedures might be impacted by the node's unhealthy state.\n\nTo enable Node Auto Repair:\n  1.  Ensure you have a [Node Monitoring Agent](https://docs.aws.amazon.com/en_us/eks/latest/userguide/node-health.html) deployed or any agent that will add status conditions to nodes that are supported (e.g., Node Problem Detector)\n  2.  Enable the feature flag: `NodeRepair=true`\n  3. Node AutoRepair will automatically terminate nodes when they have unhealthy status conditions based on your cloud provider's repair policies\n\n\nKarpenter monitors nodes for the following node status conditions when initiating repair actions:\n\n\n#### Kubelet Node Conditions\n\n|   Type  |    Status     | Toleration Duration |\n| ------  | ------------- | ------------------- |\n|  Ready  |     False     |     30 minutes      |\n|  Ready  |     Unknown   |     30 minutes      |\n\n#### Node Monitoring Agent Conditions\n\n|            Type            |    Status     | Toleration Duration |\n| ------------------------   | ------------| --------------------- |\n|  AcceleratedHardwareReady  |     False   |     10 minutes        |\n|  StorageReady              |     False   |     30 minutes        |\n|  NetworkingReady           |     False   |     30 minutes        |\n|  KernelReady               |     False   |     30 minutes        |\n|  ContainerRuntimeReady     |     False   |     30 minutes        |\n\nTo enable the NodeRepair feature flag, refer to the [Feature Gates]({{<ref \"../reference/settings#feature-gates\" >}}).\n\n## Controls\n\n### TerminationGracePeriod\n\nTo configure a maximum termination duration, `terminationGracePeriod` should be used.\nIt is configured through a NodePool's [`spec.template.spec.terminationGracePeriod`]({{<ref \"../concepts/nodepools/#spectemplatespecterminationgraceperiod\" >}}) field, and is persisted to created NodeClaims (`spec.terminationGracePeriod`).\nChanges to the [`spec.template.spec.terminationGracePeriod`]({{<ref \"../concepts/nodepools/#spectemplatespecterminationgraceperiod\" >}}) field on the NodePool will not result in a change for existing NodeClaims - it will induce NodeClaim drift and the replacements will have the updated `terminationGracePeriod`.\n\nOnce a node is disrupted, via either a [graceful](#automated-graceful-methods) or [forceful](#automated-forceful-methods) disruption method, Karpenter will begin draining the node.\nAt this point, the countdown for `terminationGracePeriod` begins.\nOnce the `terminationGracePeriod` elapses, remaining pods will be forcibly deleted and the underlying instance will be terminated.\nA node may be terminated before the `terminationGracePeriod` has elapsed if all disruptable pods have been drained.\n\nIn conjunction with `expireAfter`, `terminationGracePeriod` can be used to enforce an absolute maximum node lifetime.\nThe node will begin to drain once its `expireAfter` has elapsed, and it will be forcibly terminated once its `terminationGracePeriod` has elapsed, making the maximum node lifetime the sum of the two fields.\n\nAdditionally, configuring `terminationGracePeriod` changes the eligibility criteria for disruption via `Drift`.\nWhen configured, a node may be disrupted via drift even if there are pods with blocking PDBs or the `karpenter.sh/do-not-disrupt` annotation scheduled to it.\nThis enables cluster administrators to ensure crucial updates (e.g. AMI updates addressing CVEs) can't be blocked by misconfigured applications.\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nTo ensure that the `terminationGracePeriodSeconds` value for draining pods is respected, pods will be preemptively deleted before the Node's `terminationGracePeriod` has elapsed.\nThis includes pods with blocking [pod disruption budgets](https://kubernetes.io/docs/tasks/run-application/configure-pdb/) or the [`karpenter.sh/do-not-disrupt` annotation]({{<ref \"#pod-level-controls\" >}}).\n\nConsider the following example: a Node with a 1 hour `terminationGracePeriod` has been disrupted and begins to drain.\nA pod with the `karpenter.sh/do-not-disrupt` annotation and a 300 second (5 minute) `terminationGracePeriodsSeconds` is scheduled to it.\nIf the pod is still running 55 minutes after the Node begins to drain, the pod will be deleted to ensure its `terminationGracePeriodSeconds` value is respected.\n\nIf a pod's `terminationGracePeriodSeconds` value exceeds that of the Node it is scheduled to, Karpenter will prioritize the Node's `terminationGracePeriod`.\nThe pod will be deleted as soon as the Node begins to drain, and it will not receive it's full `terminationGracePeriodSeconds`.\n{{% /alert %}}\n\n### NodePool Disruption Budgets\n\nYou can rate limit Karpenter's disruption through the NodePool's `spec.disruption.budgets`. If undefined, Karpenter will default to one budget with `nodes: 10%`. Budgets will consider nodes that are actively being deleted for any reason, and will only block Karpenter from disrupting nodes voluntarily through drift, emptiness, and consolidation. Note that NodePool Disruption Budgets do not prevent Karpenter from terminating expired nodes.\n\n#### Reasons\nKarpenter allows specifying if a budget applies to any of `Drifted`, `Underutilized`, or `Empty`. When a budget has no reasons, it's assumed that it applies to all reasons. When calculating allowed disruptions for a given reason, Karpenter will take the minimum of the budgets that have listed the reason or have left reasons undefined.\n\n#### Nodes\nWhen calculating if a budget will block nodes from disruption, Karpenter lists the total number of nodes owned by a NodePool, subtracting out the nodes owned by that NodePool that are currently being deleted and nodes that are NotReady. If the number of nodes being deleted by Karpenter or any other processes is greater than the number of allowed disruptions, disruption for this node will not proceed.\n\nIf the budget is configured with a percentage value, such as `20%`, Karpenter will calculate the number of allowed disruptions as `allowed_disruptions = roundup(total * percentage) - total_deleting - total_notready`. If otherwise defined as a non-percentage value, Karpenter will simply use that number as a static ceiling `non_percentage_value - total_deleting - total_notready`. For multiple budgets in a NodePool, Karpenter will take the minimum value (most restrictive) of each of the budgets.\n\nFor example, the following NodePool with three budgets defines the following requirements:\n- The first budget will only allow 20% of nodes owned by that NodePool to be disrupted if it's empty or drifted. For instance, if there were 19 nodes owned by the NodePool, 4 empty or drifted nodes could be disrupted, rounding up from `19 * .2 = 3.8`.\n- The second budget acts as a ceiling to the previous budget, only allowing 5 disruptions when there are more than 25 nodes.\n- The last budget only blocks disruptions during the first 10 minutes of the day, where 0 disruptions are allowed, only applying to underutilized nodes.\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\nspec:\n  disruption:\n    consolidationPolicy: WhenEmptyOrUnderutilized\n    budgets:\n    - nodes: \"20%\"\n      reasons:\n      - \"Empty\"\n      - \"Drifted\"\n    - nodes: \"5\"\n    - nodes: \"0\"\n      schedule: \"@daily\"\n      duration: 10m\n      reasons:\n      - \"Underutilized\"\n```\n\n#### Schedule\nSchedule is a cronjob schedule. Generally, the cron syntax is five space-delimited values with options below, with additional special macros like `@yearly`, `@monthly`, `@weekly`, `@daily`, `@hourly`.\nFollow the [Kubernetes documentation](https://kubernetes.io/docs/concepts/workloads/controllers/cron-jobs/#writing-a-cronjob-spec) for more information on how to follow the cron syntax. Timezones are not currently supported. Schedules are always in UTC.\n\n```bash\n# ┌───────────── minute (0 - 59)\n# │ ┌───────────── hour (0 - 23)\n# │ │ ┌───────────── day of the month (1 - 31)\n# │ │ │ ┌───────────── month (1 - 12)\n# │ │ │ │ ┌───────────── day of the week (0 - 6) (Sunday to Saturday;\n# │ │ │ │ │                                   7 is also Sunday on some systems)\n# │ │ │ │ │                                   OR sun, mon, tue, wed, thu, fri, sat\n# │ │ │ │ │\n# * * * * *\n```\n\n#### Duration\nDuration allows compound durations with minutes and hours values such as `10h5m` or `30m` or `160h`. Since cron syntax does not accept denominations smaller than minutes, users can only define minutes or hours.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nDuration and Schedule must be defined together. When omitted, the budget is always active. When defined, the schedule determines a starting point where the budget will begin being enforced, and the duration determines how long from that starting point the budget will be enforced.\n{{% /alert %}}\n\n### Pod-Level Controls\n\nPods with blocking PDBs will not be evicted by the [Termination Controller]({{<ref \"#termination-controller\">}}) or be considered for voluntary disruption actions. When multiple pods on a node have different PDBs, none of the PDBs may be blocking for Karpenter to voluntary disrupt a node. This can create complex eviction scenarios:\n  - If a pod matches multiple PDBs (via label selectors), ALL of these PDBs must allow for disruption\n  - When different pods on the same node belong to different PDBs, ALL PDBs must simultaneously permit eviction\n  - A single blocking PDB can prevent the entire node from being voluntary disrupted\n\nFor example, consider a node with these pods and PDBs:\n- Pod A: Matches PDB-1 (maxUnavailable: 0) and PDB-2 (maxUnavailable: 1)\n- Pod B: Matches PDB-3 (minAvailable: 100%)\n- Pod C: No PDB\n\nIn this scenario, Karpenter cannot voluntary disrupt the node because:\n1. Pod A is blocked by PDB-1 even though PDB-2 would allow disruption\n2. Pod B is blocked by PDB-3's requirement for 100% availability\n\nAs seen in this example, the more PDBs there are affecting a Node, the more difficult it will be for Karpenter to find an opportunity to perform voluntary disruption actions.\n\nSecondly, you can block Karpenter from voluntarily disrupting and draining pods by adding the `karpenter.sh/do-not-disrupt: \"true\"` annotation to the pod.\nYou can treat this annotation as a single-pod, permanently blocking PDB.\nThis has the following consequences:\n- Nodes with `karpenter.sh/do-not-disrupt` pods will be excluded from [Consolidation]({{<ref \"#consolidation\" >}}), and conditionally excluded from [Drift]({{<ref \"#drift\" >}}).\n  - If the Node's owning NodeClaim has a [`terminationGracePeriod`]({{<ref \"#terminationgraceperiod\" >}}) configured, it will still be eligible for disruption via drift.\n- Like pods with a blocking PDB, pods with the `karpenter.sh/do-not-disrupt` annotation will **not** be gracefully evicted by the [Termination Controller]({{<ref \"#termination-controller\">}}).\n  Karpenter will not be able to complete termination of the node until one of the following conditions is met:\n  - All pods with the `karpenter.sh/do-not-disrupt` annotation are removed.\n  - All pods with the `karpenter.sh/do-not-disrupt` annotation have entered a [terminal phase](https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#pod-phase) (`Succeeded` or `Failed`).\n  - The owning NodeClaim's [`terminationGracePeriod`]({{<ref \"#terminationgraceperiod\" >}}) has elapsed.\n\nThis is useful for pods that you want to run from start to finish without disruption.\nExamples of pods that you might want to opt-out of disruption include an 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.\n\n```yaml\napiVersion: apps/v1\nkind: Deployment\nspec:\n  template:\n    metadata:\n      annotations:\n        karpenter.sh/do-not-disrupt: \"true\"\n```\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nThe `karpenter.sh/do-not-disrupt` annotation does **not** exclude nodes from the forceful disruption methods: [Expiration]({{<ref \"#expiration\" >}}), [Interruption]({{<ref \"#interruption\" >}}), [Node Repair](<ref \"#node-repair\" >), and manual deletion (e.g. `kubectl delete node ...`).\nWhile both interruption and node repair have implicit upper-bounds on termination time, expiration and manual termination do not.\nManual intervention may be required to unblock node termination, by removing pods with the `karpenter.sh/do-not-disrupt` annotation.\nFor this reason, it is not recommended to use the `karpenter.sh/do-not-disrupt` annotation with `expireAfter` **if** you have not also configured `terminationGracePeriod`.\n{{% /alert %}}\n\n### Node-Level Controls\n\nYou can block Karpenter from voluntarily choosing to disrupt certain nodes by setting the `karpenter.sh/do-not-disrupt: \"true\"` annotation on the node.\nThis will prevent voluntary disruption actions against the node.\n\n```yaml\napiVersion: v1\nkind: Node\nmetadata:\n  annotations:\n    karpenter.sh/do-not-disrupt: \"true\"\n```\n\n#### Example: Disable Disruption on a NodePool\n\nTo disable disruption for all nodes launched by a NodePool, you can configure its `.spec.disruption.budgets`. Setting a budget of zero nodes will prevent any of those nodes from being considered for voluntary disruption.\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\nspec:\n  disruption:\n    budgets:\n      - nodes: \"0\"\n```\n"
  },
  {
    "path": "website/content/en/preview/concepts/nodeclaims.md",
    "content": "---\ntitle: \"NodeClaims\"\nlinkTitle: \"NodeClaims\"\nweight: 30\ndescription: >\n  Understand NodeClaims\n---\n\nKarpenter uses NodeClaims to manage the lifecycle of Kubernetes Nodes with the underlying cloud provider.\nKarpenter will create and delete NodeClaims in response to the demands of Pods in the cluster.\nIt does this by evaluating the requirements of pending pods, finding a compatible [NodePool]({{< ref \"./nodepools\" >}}) and [NodeClass]({{< ref \"./nodeclasses\" >}}) pair, and creating a NodeClaim which meets both sets of requirements.\nAlthough NodeClaims are immutable resources managed by Karpenter, you can monitor NodeClaims to keep track of the status of your Nodes.\n\nIn addition to tracking the lifecycle of Nodes, NodeClaims serve as requests for capacity.\nKarpenter creates NodeClaims in response to provisioning and disruption needs (pre-spin). Whenever Karpenter\ncreates a NodeClaim, it asks the cloud provider to create the instance (launch), register and link the created node\nwith the NodeClaim (registration), and wait for the node and its resources to be ready (initialization).\n\nThis page describes how NodeClaims integrate throughout Karpenter and the cloud provider implementation.\n\nIf you want to learn more about the nodes being managed by Karpenter, you can either look directly at the NodeClaim or at the nodes they are associated with:\n\n* Checking NodeClaims:\nIf something goes wrong in the process of creating a node, you can look at the NodeClaim\nto see where the node creation process might have failed. `kubectl get nodeclaims` will show you the NodeClaims\nfor the cluster, and its linked node. Using `kubectl describe nodeclaim <nodeclaim>` will show the status of a particular NodeClaim.\nFor example, if the node is NotReady, you might see statuses indicating that the NodeClaim failed to launch, register, or initialize.\nThere will be logs emitted by the Karpenter controller to indicate this too.\n\n* Checking nodes:\nUse commands such as `kubectl get node` and  `kubectl describe node <nodename>` to see the actual resources,\nlabels, and other attributes associated with a particular node.\n\n## NodeClaim roles in node creation\n\nNodeClaims provide a critical role in the Karpenter workflow for provisioning capacity, and in node disruptions.\n\nThe following diagram illustrates how NodeClaims interact with other components during Karpenter-driven node creation.\n\n![nodeclaim-node-creation](/nodeclaims.png)\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nConfigure the `KARPENTER_NAMESPACE` environment variable to the namespace where you've installed Karpenter (`kube-system` is the default). Follow along with the Karpenter logs in your cluster and do the following:\n\n```bash\nexport KARPENTER_NAMESPACE=\"kube-system\"\nkubectl logs -f -n \"${KARPENTER_NAMESPACE}\" \\\n   -l app.kubernetes.io/name=karpenter\n```\nIn a separate terminal, start some pods that would require Karpenter to create nodes to handle those pods.\nFor example, start up some inflate pods as described in [Scale up deployment]({{< ref \"../getting-started/getting-started-with-karpenter/#6-scale-up-deployment\" >}}).\n{{% /alert %}}\n\nAs illustrated in the previous diagram, Karpenter interacts with NodeClaims and related components when creating a node:\n\n1. Watches for pods and monitors NodePools and NodeClasses:\n    * Checks the pod scheduling constraints and resource requests.\n    * Cross-references the requirements with the existing NodePools and NodeClasses, (e.g. zones, arch, os)\n\n   **Example log:**\n   ```json\n   {\n       \"level\": \"INFO\",\n       \"time\": \"2024-06-22T02:24:16.114Z\",\n       \"message\": \"found provisionable pod(s)\",\n       \"commit\": \"490ef94\",\n       \"Pods\": \"default/inflate-66fb68585c-xvs86, default/inflate-66fb68585c-hpcdz, default/inflate-66fb68585c-8xztf,01234567adb205c7e default/inflate-66fb68585c-t29d8, default/inflate-66fb68585c-nxflz\",\n       \"duration\": \"100.761702ms\"\n   }\n   ```\n\n2. Computes the shape and size of a NodeClaim (or NodeClaims) to create in the cluster to fit the set of pods from step 1.\n\n   **Example log:**\n   ```json\n   {\n       \"level\": \"INFO\",\n       \"time\": \"2024-06-22T02:24:16.114Z\",\n       \"message\": \"computed new nodeclaim(s) to fit pod(s)\",\n       \"controller\": \"provisioner\",\n       \"nodeclaims\": 1,\n       \"pods\": 5\n   }\n   ```\n\n3. Creates the NodeClaim object in the cluster.\n\n   **Example log:**\n   ```json\n   {\n       \"level\": \"INFO\",\n       \"time\": \"2024-06-22T02:24:16.128Z\",\n       \"message\": \"created nodeclaim\",\n       \"controller\": \"provisioner\",\n       \"NodePool\": {\n           \"name\":\"default\"\n       },\n       \"NodeClaim\": {\n           \"name\":\"default-sfpsl\"\n       },\n       \"requests\": {\n           \"cpu\":\"5150m\",\n           \"pods\":\"8\"\n       },\n       \"instance-types\": \"c3.2xlarge, c4.2xlarge, c4.4xlarge, c5.2xlarge, c5.4xlarge and 55 other(s)\"\n   }\n   ```\n\n4. Finds the new NodeClaim and translates it into an API call to create a cloud provider instance, logging\n   the response of the API call.\n\n   If the API response is an unrecoverable error, such as an Insufficient Capacity Error, Karpenter will delete the NodeClaim, mark that instance type as temporarily unavailable, and create another NodeClaim if necessary.\n\n   **Example log:**\n   ```json\n   {\n       \"level\": \"INFO\",\n       \"time\": \"2024-06-22T02:24:19.028Z\",\n       \"message\": \"launched nodeclaim\",\n       \"controller\": \"nodeclaim.lifecycle\",\n       \"NodeClaim\": {\n           \"name\": \"default-sfpsl\"\n       },\n       \"provider-id\": \"aws:///us-west-2b/i-01234567adb205c7e\",\n       \"instance-type\": \"c3.2xlarge\",\n       \"zone\": \"us-west-2b\",\n       \"capacity-type\": \"spot\",\n       \"allocatable\": {\n         \"cpu\": \"7910m\",\n         \"ephemeral-storage\": \"17Gi\",\n         \"memory\": \"13215Mi\",\n         \"pods\": \"58\"\n       }\n   }\n   ```\n\n5. Karpenter watches for the instance to register itself with the cluster as a node, and updates the node's\n   labels, annotations, taints, owner refs, and finalizer to match what was defined in the NodePool and NodeClaim. Once this step is\n   completed, Karpenter will remove the `karpenter.sh/unregistered` taint from the Node.\n\n   If this fails to succeed within 15 minutes, Karpenter will remove the NodeClaim from the cluster and delete\n   the underlying instance, creating another NodeClaim if necessary.\n\n   **Example log:**\n   ```json\n   {\n     \"level\": \"INFO\",\n     \"time\": \"2024-06-22T02:26:19.028Z\",\n     \"message\": \"registered nodeclaim\",\n     \"controller\": \"nodeclaim.lifecycle\",\n     \"NodeClaim\": {\n       \"name\": \"default-sfpsl\"\n     },\n     \"provider-id\": \"aws:///us-west-2b/i-01234567adb205c7e\",\n     \"Node\": {\n       \"name\": \"ip-xxx-xxx-xx-xxx.us-west-2.compute.internal\"\n     }\n   }\n   ```\n\n6. Karpenter continues to watch the node, waiting until the node becomes ready, has all its startup taints removed,\n   and has all requested resources registered on the node.\n\n   **Example log:**\n   ```json\n   {\n     \"level\": \"INFO\",\n     \"time\": \"2024-06-22T02:24:52.642Z\",\n     \"message\": \"initialized nodeclaim\",\n     \"controller\": \"nodeclaim.lifecycle\",\n     \"NodeClaim\": {\n       \"name\": \"default-sfpsl\"\n     },\n     \"provider-id\": \"aws:///us-west-2b/i-01234567adb205c7e\",\n     \"Node\": {\n       \"name\": \"ip-xxx-xxx-xx-xxx.us-west-2.compute.internal\"\n     },\n     \"allocatable\": {\n       \"cpu\": \"7910m\",\n       \"ephemeral-storage\": \"18242267924\",\n       \"hugepages-2Mi\": \"0\",\n       \"memory\": \"14320468Ki\",\n       \"pods\": \"58\"\n     }\n   }\n   ```\n\n## NodeClaim example\nThe following is an example of a NodeClaim. Keep in mind that you cannot modify a NodeClaim.\nTo see the contents of a NodeClaim, get the name of your NodeClaim, then run `kubectl describe` to see its contents:\n\n```\nkubectl get nodeclaim\nNAME            TYPE               ZONE         NODE                                           READY   AGE\ndefault-m6pzn   c7i-flex.2xlarge   us-west-1a   ip-xxx-xxx-xx-xxx.us-west-1.compute.internal   True    7m50s\n\nkubectl describe nodeclaim default-m6pzn\n```\nStarting at the bottom of this example, here are some highlights of what the NodeClaim contains:\n\n* The Node Name (ip-xxx-xxx-xx-xxx.us-west-1.compute.internal) and Provider ID (aws:///us-west-1a/i-xxxxxxxxxxxxxxxxx) identify the instance that is fulfilling this NodeClaim.\n* Image ID (ami-0ccbbed159cce4e37) represents the operating system image running on the node.\n* Status shows the resources that are available on the node (CPU, memory, and so on) as well as the conditions associated with the node. The conditions show the status of the node, including whether the node is launched, registered, and initialized. This is particularly useful if Pods are not deploying to the node and you want to determine the cause.\n* Spec contains the metadata required for Karpenter to launch and manage an instance. This includes any scheduling requirements, resource requirements, the NodeClass reference, taints, and immutable disruption fields (expireAfter and terminationGracePeriod).\n* Additional information includes annotations and labels which should be synced to the Node, creation metadata, the termination finalizer, and the owner reference.\n\n```\nName:         default-x9wxq\nNamespace:\nLabels:       karpenter.k8s.aws/instance-category=c\n              karpenter.k8s.aws/instance-cpu=8\n              karpenter.k8s.aws/instance-cpu-manufacturer=amd\n              karpenter.k8s.aws/instance-ebs-bandwidth=3170\n              karpenter.k8s.aws/instance-encryption-in-transit-supported=true\n              karpenter.k8s.aws/instance-family=c5a\n              karpenter.k8s.aws/instance-generation=5\n              karpenter.k8s.aws/instance-hypervisor=nitro\n              karpenter.k8s.aws/instance-memory=16384\n              karpenter.k8s.aws/instance-network-bandwidth=2500\n              karpenter.k8s.aws/instance-size=2xlarge\n              karpenter.sh/capacity-type=spot\n              karpenter.sh/nodepool=default\n              kubernetes.io/arch=amd64\n              kubernetes.io/os=linux\n              node.kubernetes.io/instance-type=c5a.2xlarge\n              topology.k8s.aws/zone-id=usw2-az3\n              topology.kubernetes.io/region=us-west-2\n              topology.kubernetes.io/zone=us-west-2c\nAnnotations:  compatibility.karpenter.k8s.aws/cluster-name-tagged: true\n              compatibility.karpenter.k8s.aws/kubelet-drift-hash: 15379597991425564585\n              karpenter.k8s.aws/ec2nodeclass-hash: 5763643673275251833\n              karpenter.k8s.aws/ec2nodeclass-hash-version: v3\n              karpenter.k8s.aws/tagged: true\n              karpenter.sh/nodepool-hash: 377058807571762610\n              karpenter.sh/nodepool-hash-version: v3\nAPI Version:  karpenter.sh/v1\nKind:         NodeClaim\nMetadata:\n  Creation Timestamp:  2024-08-07T05:37:30Z\n  Finalizers:\n    karpenter.sh/termination\n  Generate Name:  default-\n  Generation:     1\n  Owner References:\n    API Version:           karpenter.sh/v1\n    Block Owner Deletion:  true\n    Kind:                  NodePool\n    Name:                  default\n    UID:                   6b9c6781-ac05-4a4c-ad6a-7551a07b2ce7\n  Resource Version:        19600526\n  UID:                     98a2ba32-232d-45c4-b7c0-b183cfb13d93\nSpec:\n  Expire After:  720h0m0s\n  Node Class Ref:\n    Group:\n    Kind:   EC2NodeClass\n    Name:   default\n  Requirements:\n    Key:       kubernetes.io/arch\n    Operator:  In\n    Values:\n      amd64\n    Key:       kubernetes.io/os\n    Operator:  In\n    Values:\n      linux\n    Key:       karpenter.sh/capacity-type\n    Operator:  In\n    Values:\n      spot\n    Key:       karpenter.k8s.aws/instance-category\n    Operator:  In\n    Values:\n      c\n      m\n      r\n    Key:       karpenter.k8s.aws/instance-generation\n    Operator:  Gt\n    Values:\n      2\n    Key:       karpenter.sh/nodepool\n    Operator:  In\n    Values:\n      default\n    Key:       node.kubernetes.io/instance-type\n    Operator:  In\n    Values:\n      c3.xlarge\n      c4.xlarge\n      c5.2xlarge\n      c5.xlarge\n      c5a.xlarge\n      c5ad.2xlarge\n      c5ad.xlarge\n      c5d.2xlarge\n  Resources:\n    Requests:\n      Cpu:   3150m\n      Pods:  6\n  Startup Taints:\n    Effect:  NoSchedule\n    Key:     app.dev/example-startup\n  Taints:\n    Effect:                  NoSchedule\n    Key:                     app.dev/example\n  Termination Grace Period:  1h0m0s\nStatus:\n  Allocatable:\n    Cpu:                        7910m\n    Ephemeral - Storage:        17Gi\n    Memory:                     14162Mi\n    Pods:                       58\n    vpc.amazonaws.com/pod-eni:  38\n  Capacity:\n    Cpu:                        8\n    Ephemeral - Storage:        20Gi\n    Memory:                     15155Mi\n    Pods:                       58\n    vpc.amazonaws.com/pod-eni:  38\n  Conditions:\n    Last Transition Time:  2024-08-07T05:38:08Z\n    Message:\n    Reason:                Consolidatable\n    Status:                True\n    Type:                  Consolidatable\n    Last Transition Time:  2024-08-07T05:38:07Z\n    Message:\n    Reason:                Initialized\n    Status:                True\n    Type:                  Initialized\n    Last Transition Time:  2024-08-07T05:37:33Z\n    Message:\n    Reason:                Launched\n    Status:                True\n    Type:                  Launched\n    Last Transition Time:  2024-08-07T05:38:07Z\n    Message:\n    Reason:                Ready\n    Status:                True\n    Type:                  Ready\n    Last Transition Time:  2024-08-07T05:37:55Z\n    Message:\n    Reason:                Registered\n    Status:                True\n    Type:                  Registered\n  Image ID:                ami-08946d4d49fc3f27b\n  Node Name:               ip-xxx-xxx-xxx-xxx.us-west-2.compute.internal\n  Provider ID:             aws:///us-west-2c/i-01234567890123\nEvents:\n  Type    Reason             Age   From       Message\n  ----    ------             ----  ----       -------\n  Normal  Launched           70s   karpenter  Status condition transitioned, Type: Launched, Status: Unknown -> True, Reason: Launched\n  Normal  DisruptionBlocked  70s   karpenter  Cannot disrupt NodeClaim: state node doesn't contain both a node and a nodeclaim\n  Normal  Registered         48s   karpenter  Status condition transitioned, Type: Registered, Status: Unknown -> True, Reason: Registered\n  Normal  Initialized        36s   karpenter  Status condition transitioned, Type: Initialized, Status: Unknown -> True, Reason: Initialized\n  Normal  Ready              36s   karpenter  Status condition transitioned, Type: Ready, Status: Unknown -> True, Reason: Ready\n```\n"
  },
  {
    "path": "website/content/en/preview/concepts/nodeclasses.md",
    "content": "---\ntitle: \"NodeClasses\"\nlinkTitle: \"NodeClasses\"\nweight: 2\ndescription: >\n  Configure AWS-specific settings with EC2NodeClasses\n---\n\nNode Classes enable configuration of AWS specific settings.\nEach NodePool must reference an EC2NodeClass using `spec.template.spec.nodeClassRef`.\nMultiple NodePools may point to the same EC2NodeClass.\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\nspec:\n  template:\n    spec:\n      nodeClassRef:\n        group: karpenter.k8s.aws\n        kind: EC2NodeClass\n        name: default\n---\napiVersion: karpenter.k8s.aws/v1\nkind: EC2NodeClass\nmetadata:\n  name: default\nspec:\n  kubelet:\n    podsPerCore: 2\n    maxPods: 20\n    systemReserved:\n      cpu: 100m\n      memory: 100Mi\n      ephemeral-storage: 1Gi\n    kubeReserved:\n      cpu: 200m\n      memory: 100Mi\n      ephemeral-storage: 3Gi\n    evictionHard:\n      memory.available: 5%\n      nodefs.available: 10%\n      nodefs.inodesFree: 10%\n    evictionSoft:\n      memory.available: 500Mi\n      nodefs.available: 15%\n      nodefs.inodesFree: 15%\n    evictionSoftGracePeriod:\n      memory.available: 1m\n      nodefs.available: 1m30s\n      nodefs.inodesFree: 2m\n    evictionMaxPodGracePeriod: 60\n    imageGCHighThresholdPercent: 85\n    imageGCLowThresholdPercent: 80\n    cpuCFSQuota: true\n    clusterDNS: [\"10.0.1.100\"]\n  # Optional, dictates UserData generation and default block device mappings.\n  # May be ommited when using an `alias` amiSelectorTerm, otherwise required.\n  amiFamily: AL2\n\n  # Required, discovers subnets to attach to instances\n  # Each term in the array of subnetSelectorTerms is ORed together\n  # Within a single term, all conditions are ANDed\n  subnetSelectorTerms:\n    # Select on any subnet that has the \"karpenter.sh/discovery: ${CLUSTER_NAME}\"\n    # AND the \"environment: test\" tag OR any subnet with ID \"subnet-09fa4a0a8f233a921\"\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\"\n        environment: test\n    - id: subnet-09fa4a0a8f233a921\n\n  # Required, discovers security groups to attach to instances\n  # Each term in the array of securityGroupSelectorTerms is ORed together\n  # Within a single term, all conditions are ANDed\n  securityGroupSelectorTerms:\n    # Select on any security group that has both the \"karpenter.sh/discovery: ${CLUSTER_NAME}\" tag\n    # AND the \"environment: test\" tag OR any security group with the \"my-security-group\" name\n    # OR any security group with ID \"sg-063d7acfb4b06c82c\"\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\"\n        environment: test\n    - name: my-security-group\n    - id: sg-063d7acfb4b06c82c\n\n  # Optional, IAM role to use for the node identity.\n  # Must specify one of \"role\" or \"instanceProfile\" for Karpenter to launch nodes\n  role: \"KarpenterNodeRole-${CLUSTER_NAME}\"\n\n  # Optional, IAM instance profile to use for the node identity.\n  # Must specify one of \"role\" or \"instanceProfile\" for Karpenter to launch nodes\n  instanceProfile: \"KarpenterNodeInstanceProfile-${CLUSTER_NAME}\"\n\n  # Each term in the array of amiSelectorTerms is ORed together\n  # Within a single term, all conditions are ANDed\n  amiSelectorTerms:\n    # Select on any AMI that has both the `karpenter.sh/discovery: ${CLUSTER_NAME}`\n    # AND `environment: test` tags OR any AMI with the name `my-ami` OR an AMI with\n    # ID `ami-123` OR an AMI with ID matching the value of my-custom-parameter\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\"\n        environment: test\n    - name: my-ami\n    - id: ami-123\n    - ssmParameter: my-custom-parameter # ssm parameter name or ARN\n    # Select EKS optimized AL2023 AMIs with version `v20240703`. This term is mutually\n    # exclusive and can't be specified with other terms.\n    # - alias: al2023@v20240703\n\n  # Optional, each term in the array of capacityReservationSelectorTerms is ORed together.\n  capacityReservationSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: ${CLUSTER_NAME}\n    - id: cr-123\n    - instanceMatchCriteria: open\n\n  # Optional, propagates tags to underlying EC2 resources\n  tags:\n    team: team-a\n    app: team-a-app\n\n  # Optional, configures IMDS for the instance\n  metadataOptions:\n    httpEndpoint: enabled\n    httpProtocolIPv6: disabled\n    httpPutResponseHopLimit: 1 # This is changed to disable IMDS access from containers not on the host network\n    httpTokens: required\n\n  # Optional, configures storage devices for the instance\n  blockDeviceMappings:\n    - deviceName: /dev/xvda\n      ebs:\n        volumeSize: 100Gi\n        volumeType: gp3\n        iops: 10000\n        encrypted: true\n        kmsKeyID: \"1234abcd-12ab-34cd-56ef-1234567890ab\"\n        deleteOnTermination: true\n        throughput: 125\n        snapshotID: snap-0123456789\n        volumeInitializationRate: 100\n\n  # Optional, use instance-store volumes for node ephemeral-storage\n  instanceStorePolicy: RAID0\n\n  # Optional, overrides autogenerated userdata with a merge semantic\n  userData: |\n    echo \"Hello world\"\n\n  # Optional, configures detailed monitoring for the instance\n  detailedMonitoring: true\n\n  # Optional, configures if the instance should be launched with an associated public IP address.\n  # If not specified, the default value depends on the subnet's public IP auto-assign setting.\n  associatePublicIPAddress: true\nstatus:\n  # Resolved subnets\n  subnets:\n    - id: subnet-0a462d98193ff9fac\n      zone: us-east-2b\n    - id: subnet-0322dfafd76a609b6\n      zone: us-east-2c\n    - id: subnet-0727ef01daf4ac9fe\n      zone: us-east-2b\n    - id: subnet-00c99aeafe2a70304\n      zone: us-east-2a\n    - id: subnet-023b232fd5eb0028e\n      zone: us-east-2c\n    - id: subnet-03941e7ad6afeaa72\n      zone: us-east-2a\n\n  # Resolved security groups\n  securityGroups:\n    - id: sg-041513b454818610b\n      name: ClusterSharedNodeSecurityGroup\n    - id: sg-0286715698b894bca\n      name: ControlPlaneSecurityGroup-1AQ073TSAAPW\n\n  # Resolved AMIs\n  amis:\n    - id: ami-01234567890123456\n      name: custom-ami-amd64\n      requirements:\n        - key: kubernetes.io/arch\n          operator: In\n          values:\n            - amd64\n    - id: ami-01234567890123456\n      name: custom-ami-arm64\n      requirements:\n        - key: kubernetes.io/arch\n          operator: In\n          values:\n            - arm64\n\n  # Capacity Reservations\n  capacityReservations:\n    - availabilityZone: us-west-2a\n      id: cr-01234567890123456\n      instanceMatchCriteria: targeted\n      instanceType: g6.48xlarge\n      interruptible: false\n      ownerID: \"012345678901\"\n      reservationType: capacity-block\n      state: expiring\n    - availabilityZone: us-west-2c\n      id: cr-12345678901234567\n      instanceMatchCriteria: open\n      instanceType: g6.48xlarge\n      interruptible: true\n      ownerID: \"98765432109\"\n      reservationType: default\n      state: active\n\n  # Generated instance profile name from \"role\"\n  instanceProfile: \"${CLUSTER_NAME}-0123456778901234567789\"\n  conditions:\n    - lastTransitionTime: \"2024-02-02T19:54:34Z\"\n      status: \"True\"\n      type: InstanceProfileReady\n    - lastTransitionTime: \"2024-02-02T19:54:34Z\"\n      status: \"True\"\n      type: SubnetsReady\n    - lastTransitionTime: \"2024-02-02T19:54:34Z\"\n      status: \"True\"\n      type: SecurityGroupsReady\n    - lastTransitionTime: \"2024-02-02T19:54:34Z\"\n      status: \"True\"\n      type: AMIsReady\n    - lastTransitionTime: \"2024-02-02T19:54:34Z\"\n      status: \"True\"\n      type: Ready\n```\nRefer to the [NodePool docs]({{<ref \"./nodepools\" >}}) for settings applicable to all providers. To explore various `EC2NodeClass` configurations, refer to the examples provided [in the Karpenter Github repository](https://github.com/aws/karpenter/blob/main/examples/v1/).\n\n\n## spec.kubelet\n\nKarpenter provides the ability to specify a few additional Kubelet arguments.\nThese are all optional and provide support for additional customization and use cases.\nAdjust these only if you know you need to do so.\nFor more details on kubelet settings, see the [KubeletConfiguration reference](https://kubernetes.io/docs/reference/config-api/kubelet-config.v1/).\nThe implemented fields are a subset of the full list of upstream kubelet configuration arguments.\n\n```yaml\nkubelet:\n  podsPerCore: 2\n  maxPods: 20\n  systemReserved:\n    cpu: 100m\n    memory: 100Mi\n    ephemeral-storage: 1Gi\n  kubeReserved:\n    cpu: 200m\n    memory: 100Mi\n    ephemeral-storage: 3Gi\n  evictionHard:\n    memory.available: 5%\n    nodefs.available: 10%\n    nodefs.inodesFree: 10%\n  evictionSoft:\n    memory.available: 500Mi\n    nodefs.available: 15%\n    nodefs.inodesFree: 15%\n  evictionSoftGracePeriod:\n    memory.available: 1m\n    nodefs.available: 1m30s\n    nodefs.inodesFree: 2m\n  evictionMaxPodGracePeriod: 60\n  imageGCHighThresholdPercent: 85\n  imageGCLowThresholdPercent: 80\n  cpuCFSQuota: true\n  clusterDNS: [\"10.0.1.100\"]\n```\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nIf you need to specify a field that isn't present in `spec.kubelet`, you can set it via custom [UserData]({{< ref \"#specuserdata\" >}}).\nFor example, if you wanted to configure `maxPods` and `registryPullQPS` you would set the former through `spec.kubelet` and the latter through UserData.\nThe following example achieves this with AL2023:\n\n```yaml\napiVersion: karpenter.k8s.aws/v1\nkind: EC2NodeClass\nspec:\n  amiSelectorTerms:\n    - alias: al2023@v20240807\n  kubelet:\n    maxPods: 42\n  userData: |\n    apiVersion: node.eks.aws/v1alpha1\n    kind: NodeConfig\n    spec:\n      kubelet:\n        config:\n          # Configured through UserData since unavailable in `spec.kubelet`\n          registryPullQPS: 10\n```\n\nNote that when using the `Custom` AMIFamily you will need to specify fields **both** in `spec.kubelet` and `spec.userData`.\n{{% /alert %}}\n\n#### Pods Per Core\n\nAn alternative way to dynamically set the maximum density of pods on a node is to use the `.spec.kubelet.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.\n\nThe 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.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\n`maxPods` may not be set in the `kubelet` of an EC2NodeClass, 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 EC2NodeClass will not cause unexpected behavior by exceeding the `maxPods` value.\n{{% /alert %}}\n\n#### Max Pods\n\nFor 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.kubelet.maxPods`. This value will be used during Karpenter pod scheduling and passed through to `--max-pods` on kubelet startup.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nWhen 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.\n{{% /alert %}}\n\n{{% alert title=\"Windows Support Notice\" color=\"warning\" %}}\nPresently, Windows worker nodes do not support using more than one ENI.\nAs a consequence, the number of IP addresses, and subsequently, the number of pods that a Windows worker node can support is limited by the number of IPv4 addresses available on the primary ENI.\nCurrently, Karpenter will only consider individual secondary IP addresses when calculating the pod density limit.\n{{% /alert %}}\n\n### Reserved Resources\n\nKarpenter 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.kubelet.systemReserved` values and the `--kube-reserved` configuration defaults with the `.spec.kubelet.kubeReserved` values.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nKarpenter considers these reserved resources when computing the allocatable ephemeral storage on a given instance type.\nIf `kubeReserved` is not specified, Karpenter will compute the default reserved [CPU](https://github.com/awslabs/amazon-eks-ami/blob/db28da15d2b696bc08ac3aacc9675694f4a69933/files/bootstrap.sh#L251) and [memory](https://github.com/awslabs/amazon-eks-ami/blob/db28da15d2b696bc08ac3aacc9675694f4a69933/files/bootstrap.sh#L235) resources for the purpose of ephemeral storage computation.\nThese defaults are based on the defaults on Karpenter's supported AMI families, which are not the same as the kubelet defaults.\nYou should be aware of the CPU and memory default calculation when using Custom AMI Families. If they don't align, there may be a difference in Karpenter's computed allocatable ephemeral storage and the actually ephemeral storage available on the node.\n{{% /alert %}}\n\n### Eviction Thresholds\n\nThe 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.\n\nKubelet 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.\n\nKarpenter supports [hard evictions](https://kubernetes.io/docs/concepts/scheduling-eviction/node-pressure-eviction/#hard-eviction-thresholds) through the `.spec.kubelet.evictionHard` field and [soft evictions](https://kubernetes.io/docs/concepts/scheduling-eviction/node-pressure-eviction/#soft-eviction-thresholds) through the `.spec.kubelet.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.\n\n```yaml\nkubelet:\n  evictionHard:\n    memory.available: 500Mi\n    nodefs.available: 10%\n    nodefs.inodesFree: 10%\n    imagefs.available: 5%\n    imagefs.inodesFree: 5%\n    pid.available: 7%\n  evictionSoft:\n    memory.available: 1Gi\n    nodefs.available: 15%\n    nodefs.inodesFree: 15%\n    imagefs.available: 10%\n    imagefs.inodesFree: 10%\n    pid.available: 10%\n```\n\n#### Supported Eviction Signals\n\n| Eviction Signal    | Description                                                                     |\n|--------------------|---------------------------------------------------------------------------------|\n| memory.available   | memory.available := node.status.capacity[memory] - node.stats.memory.workingSet |\n| nodefs.available   | nodefs.available := node.stats.fs.available                                     |\n| nodefs.inodesFree  | nodefs.inodesFree := node.stats.fs.inodesFree                                   |\n| imagefs.available  | imagefs.available := node.stats.runtime.imagefs.available                       |\n| imagefs.inodesFree | imagefs.inodesFree := node.stats.runtime.imagefs.inodesFree                     |\n| pid.available      | pid.available := node.stats.rlimit.maxpid - node.stats.rlimit.curproc           |\n\nFor 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.\n\n#### Soft Eviction Grace Periods\n\nSoft 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.\n\nOptionally, 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.\n\n```yaml\nkubelet:\n  evictionSoftGracePeriod:\n    memory.available: 1m\n    nodefs.available: 1m30s\n    nodefs.inodesFree: 2m\n    imagefs.available: 1m30s\n    imagefs.inodesFree: 2m\n    pid.available: 2m\n  evictionMaxPodGracePeriod: 60\n```\n\n### Pod Density\n\nBy 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.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nBy default, the VPC CNI allocates IPs for a node and pods from the same subnet. With [VPC CNI Custom Networking](https://aws.github.io/aws-eks-best-practices/networking/custom-networking), the pods will receive IP addresses from another subnet dedicated to pod IPs. This approach makes it easier to manage IP addresses and allows for separate Network Access Control Lists (NACLs) applied to your pods. VPC CNI Custom Networking reduces the pod density of a node since one of the ENI attachments will be used for the node and cannot share the allocated IPs on the interface to pods. Karpenter supports VPC CNI Custom Networking and similar CNI setups where the primary node interface is separated from the pods interfaces through a global environment variable RESERVED_ENIS, see [Settings]({{<ref \"../reference/settings\" >}}). In the common case, RESERVED_ENIS should be set to \"1\" if using Custom Networking. {{% /alert %}}\n\n{{% alert title=\"Windows Support Notice\" color=\"warning\" %}}\nIt's currently not possible to specify custom networking with Windows nodes.\n{{% /alert %}}\n\n## spec.amiFamily\n\nAMIFamily dictates the default bootstrapping logic for nodes provisioned through this `EC2NodeClass`.\nAn `amiFamily` is only required if you don't specify a `spec.amiSelectorTerms.alias` object.\nFor example, if you specify `alias: al2023@v20240807`, the `amiFamily` is implicitly `AL2023`.\n\nAMIFamily does not impact which AMI is discovered, only the UserData generation and default BlockDeviceMappings. To automatically discover EKS optimized AMIs, use the new [`alias` field in amiSelectorTerms]({{< ref \"#specamiselectorterms\" >}}).\n\n{{% alert title=\"Ubuntu Support Dropped at v1\" color=\"warning\" %}}\n\nSupport for the Ubuntu AMIFamily has been dropped at Karpenter `v1.0.0`.\nThis means Karpenter no longer supports automatic AMI discovery and UserData generation for Ubuntu.\nTo continue using Ubuntu AMIs, you will need to select Ubuntu AMIs using `amiSelectorTerms`.\n\nAdditionally, you will need to either maintain UserData yourself using the `Custom` AMIFamily, or you can use the `AL2` AMIFamily and custom `blockDeviceMappings` (as shown below).\nThe `AL2` family has an identical UserData format, but this compatibility isn't guaranteed long term.\nChanges to AL2's or Ubuntu's UserData format could result in incompatibility, at which point the `Custom` AMIFamily must be used.\n\n**Ubuntu NodeClass Example:**\n```yaml\napiVersion: karpenter.k8s.aws/v1\nkind: EC2NodeClass\nspec:\n  amiFamily: AL2\n  amiSelectorTerms:\n    - id: ami-placeholder\n  blockDeviceMappings:\n  - deviceName: '/dev/sda1'\n    rootVolume: true\n    ebs:\n      encrypted: true\n      volumeType: gp3\n      volumeSize: 20Gi\n```\n\n{{% /alert %}}\n\n\n### AL2\n\n{{% alert title=\"AL2 support dropped at Kubernetes 1.33\" color=\"warning\" %}}\nKubernetes version 1.32 is the last version for which Amazon EKS will release Amazon Linux 2 (AL2) AMIs.\n{{% /alert %}}\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nNote that Karpenter will automatically generate a call to the `/etc/eks/bootstrap.sh` script as part of its generated UserData. When using `amiFamily: AL2` you should not call this script yourself in `.spec.userData`. If you need to, use the [Custom AMI family]({{< ref \"./nodeclasses/#custom\" >}}) instead.\n{{% /alert %}}\n\n```bash\nMIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"//\"\n\n--//\nContent-Type: text/x-shellscript; charset=\"us-ascii\"\n\n#!/bin/bash -xe\nexec > >(tee /var/log/user-data.log|logger -t user-data -s 2>/dev/console) 2>&1\n/etc/eks/bootstrap.sh 'test-cluster' --apiserver-endpoint 'https://test-cluster' --b64-cluster-ca 'ca-bundle' \\\n--dns-cluster-ip '10.100.0.10' \\\n--use-max-pods false \\\n--kubelet-extra-args '--node-labels=karpenter.sh/capacity-type=on-demand,karpenter.sh/nodepool=test  --max-pods=110'\n--//--\n```\n\n### AL2023\n\n```text\nMIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"//\"\n\n--//\nContent-Type: application/node.eks.aws\n\n# Karpenter Generated NodeConfig\napiVersion: node.eks.aws/v1alpha1\nkind: NodeConfig\nspec:\n  cluster:\n    name: test-cluster\n    apiServerEndpoint: https://example.com\n    certificateAuthority: ca-bundle\n    cidr: 10.100.0.0/16\n  kubelet:\n    config:\n      maxPods: 110\n    flags:\n      - --node-labels=karpenter.sh/capacity-type=on-demand,karpenter.sh/nodepool=test\n\n--//--\n\n```\n\n### Bottlerocket\n\n```toml\n[settings]\n[settings.kubernetes]\napi-server = 'https://test-cluster'\ncluster-certificate = 'ca-bundle'\ncluster-name = 'test-cluster'\ncluster-dns-ip = '10.100.0.10'\nmax-pods = 110\n\n[settings.kubernetes.node-labels]\n'karpenter.sh/capacity-type' = 'on-demand'\n'karpenter.sh/nodepool' = 'test'\n```\n\n### Windows2019\n\n```powershell\n<powershell>\n[string]$EKSBootstrapScriptFile = \"$env:ProgramFiles\\Amazon\\EKS\\Start-EKSBootstrap.ps1\"\n& $EKSBootstrapScriptFile -EKSClusterName 'test-cluster' -APIServerEndpoint 'https://test-cluster' -Base64ClusterCA 'ca-bundle' -KubeletExtraArgs '--node-labels=\"karpenter.sh/capacity-type=on-demand,karpenter.sh/nodepool=test\" --max-pods=110' -DNSClusterIP '10.100.0.10'\n</powershell>\n```\n\n### Windows2022\n\n```powershell\n<powershell>\n[string]$EKSBootstrapScriptFile = \"$env:ProgramFiles\\Amazon\\EKS\\Start-EKSBootstrap.ps1\"\n& $EKSBootstrapScriptFile -EKSClusterName 'test-cluster' -APIServerEndpoint 'https://test-cluster' -Base64ClusterCA 'ca-bundle' -KubeletExtraArgs '--node-labels=\"karpenter.sh/capacity-type=on-demand,karpenter.sh/nodepool=test\" --max-pods=110' -DNSClusterIP '10.100.0.10'\n</powershell>\n```\n\n### Windows2025\n\n```powershell\n<powershell>\n[string]$EKSBootstrapScriptFile = \"$env:ProgramFiles\\Amazon\\EKS\\Start-EKSBootstrap.ps1\"\n& $EKSBootstrapScriptFile -EKSClusterName 'test-cluster' -APIServerEndpoint 'https://test-cluster' -Base64ClusterCA 'ca-bundle' -KubeletExtraArgs '--node-labels=\"karpenter.sh/capacity-type=on-demand,karpenter.sh/nodepool=test\" --max-pods=110' -DNSClusterIP '10.100.0.10'\n</powershell>\n```\n\n### Custom\n\nThe `Custom` AMIFamily ships without any default userData to allow you to configure custom bootstrapping for control planes or images that don't support the default methods from the other families. For this AMIFamily, kubelet must add the taint `karpenter.sh/unregistered:NoExecute` via the `--register-with-taints` flag ([flags](https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet/#options)) or the KubeletConfiguration spec ([options](https://kubernetes.io/docs/reference/config-api/kubelet-config.v1/#kubelet-config-k8s-io-v1-CredentialProviderConfig) and [docs](https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/)). Karpenter will fail to register nodes that do not have this taint.\n\n## spec.subnetSelectorTerms\n\nSubnet Selector Terms allow you to specify selection logic for a set of subnet options that Karpenter can choose from when launching an instance from the `EC2NodeClass`. Karpenter discovers subnets through the `EC2NodeClass` using ids or [tags](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html). 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.\n\nThis selection logic is modeled as terms, where each term contains multiple conditions that must all be satisfied for the selector to match. Effectively, all requirements within a single term are ANDed together. It's possible that you may want to select on two different subnets that have unrelated requirements. In this case, you can specify multiple terms which will be ORed together to form your selection logic. The example below shows how this selection logic is fulfilled.\n\n```yaml\nsubnetSelectorTerms:\n  # Select on any subnet that has the \"karpenter.sh/discovery: ${CLUSTER_NAME}\"\n  # AND the \"environment: test\" tag OR any subnet with ID \"subnet-09fa4a0a8f233a921\"\n  - tags:\n      karpenter.sh/discovery: \"${CLUSTER_NAME}\"\n      environment: test\n  - id: subnet-09fa4a0a8f233a921\n```\n\n{{% alert title=\"Tip\" color=\"secondary\" %}}\nSubnets may be specified by any tag, including `Name`. Selecting tag values using wildcards (`*`) is supported.\n{{% /alert %}}\n\n#### Examples\n\nSelect all with a specified tag key:\n```yaml\nspec:\n  subnetSelectorTerms:\n    - tags:\n        karpenter.sh/discovery/MyClusterName: '*'\n```\n\nSelect by name and tag (all criteria must match):\n```yaml\nspec:\n  subnetSelectorTerms:\n    - tags:\n        Name: my-subnet\n        MyTag: '' # matches all resources with the tag\n```\n\nSelect using multiple tag terms:\n```yaml\nspec:\n  subnetSelectorTerms:\n    - tags:\n        Name: \"my-subnet-1\"\n    - tags:\n        Name: \"my-subnet-2\"\n```\n\nSelect using wildcards:\n```yaml\nspec:\n  subnetSelectorTerms:\n    - tags:\n        Name: \"*Public*\"\n\n```\n\nSelect using ids:\n```yaml\nspec:\n  subnetSelectorTerms:\n    - id: \"subnet-09fa4a0a8f233a921\"\n    - id: \"subnet-0471ca205b8a129ae\"\n```\n\n\n## spec.securityGroupSelectorTerms\n\nSecurity Group Selector Terms allow you to specify selection logic for all security groups that will be attached to an instance launched from the `EC2NodeClass`. The security group of an instance is comparable to a set of firewall rules.\n[EKS creates at least two security groups by default](https://docs.aws.amazon.com/eks/latest/userguide/sec-group-reqs.html).\n\nThis selection logic is modeled as terms, where each term contains multiple conditions that must all be satisfied for the selector to match. Effectively, all requirements within a single term are ANDed together. It's possible that you may want to select on two different security groups that have unrelated requirements. In this case, you can specify multiple terms which will be ORed together to form your selection logic. The example below shows how this selection logic is fulfilled.\n\n```yaml\nsecurityGroupSelectorTerms:\n  # Select on any security group that has both the \"karpenter.sh/discovery: ${CLUSTER_NAME}\" tag\n  # AND the \"environment: test\" tag OR any security group with the \"my-security-group\" name\n  # OR any security group with ID \"sg-063d7acfb4b06c82c\"\n  - tags:\n      karpenter.sh/discovery: \"${CLUSTER_NAME}\"\n      environment: test\n  - name: my-security-group\n  - id: sg-063d7acfb4b06c82c\n```\n\n{{% alert title=\"Tip\" color=\"secondary\" %}}\nSecurity groups may be specified by any tag, including \"Name\". Selecting tags using wildcards (`*`) is supported.\n{{% /alert %}}\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nWhen launching nodes, Karpenter uses all the security groups that match the selector. If you choose to use the `kubernetes.io/cluster/$CLUSTER_NAME` tag for discovery, note that 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.\n\nTo verify if this restriction affects you, run the following commands.\n```bash\nCLUSTER_VPC_ID=\"$(aws eks describe-cluster --name $CLUSTER_NAME --query cluster.resourcesVpcConfig.vpcId --output text)\"\n\naws ec2 describe-security-groups --filters Name=vpc-id,Values=$CLUSTER_VPC_ID Name=tag-key,Values=kubernetes.io/cluster/$CLUSTER_NAME --query 'SecurityGroups[].[GroupName]' --output text\n```\n\nIf multiple securityGroups are printed, you will need more specific securityGroupSelectorTerms. We generally recommend that you use the `karpenter.sh/discovery: $CLUSTER_NAME` tag selector instead.\n{{% /alert %}}\n\n#### Examples\n\nSelect all assigned to a cluster:\n```yaml\nspec:\n  securityGroupSelectorTerms:\n    - tags:\n        kubernetes.io/cluster/$CLUSTER_NAME: \"owned\"\n```\n\nSelect all with a specified tag key:\n```yaml\nspec:\n  securityGroupSelectorTerms:\n    - tags:\n        MyTag: '*'\n```\n\nSelect by name and tag (all criteria must match):\n```yaml\nspec:\n  securityGroupSelectorTerms:\n    - name: my-security-group\n      tags:\n        MyTag: '*' # matches all resources with the tag\n```\n\nSelect using multiple tag terms:\n```yaml\nspec:\n  securityGroupSelectorTerms:\n    - tags:\n        Name: \"my-security-group-1\"\n    - tags:\n        Name: \"my-security-group-2\"\n```\n\nSelect by name using a wildcard:\n```yaml\nspec:\n  securityGroupSelectorTerms:\n    - name: \"*Public*\"\n```\n\nSelect using ids:\n```yaml\nspec:\n securityGroupSelectorTerms:\n    - id: \"sg-063d7acfb4b06c82c\"\n    - id: \"sg-06e0cf9c198874591\"\n```\n\n## spec.role\n\n`Role` is an optional field and tells Karpenter which IAM identity nodes should assume. You must specify one of `role` or `instanceProfile` when creating a Karpenter `EC2NodeClass`. If using the [Karpenter Getting Started Guide]({{<ref \"../getting-started/getting-started-with-karpenter\" >}}) to deploy Karpenter, you can use the `KarpenterNodeRole-$CLUSTER_NAME` role provisioned by that process.\n\n```yaml\nspec:\n  role: \"KarpenterNodeRole-$CLUSTER_NAME\"\n```\n\n## spec.instanceProfile\n\n`InstanceProfile` is an optional field and tells Karpenter which IAM identity nodes should assume. You must specify one of `role` or `instanceProfile` when creating a Karpenter `EC2NodeClass`. If you use the `instanceProfile` field instead of `role`, Karpenter will not manage the InstanceProfile on your behalf; instead, it expects that you have pre-provisioned an IAM instance profile and assigned it a role.\n\nYou can provision and assign a role to an IAM instance profile using [CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-instanceprofile.html) or by using the [`aws iam create-instance-profile`](https://docs.aws.amazon.com/cli/latest/reference/iam/create-instance-profile.html) and [`aws iam add-role-to-instance-profile`](https://docs.aws.amazon.com/cli/latest/reference/iam/add-role-to-instance-profile.html) commands in the CLI.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\n\nFor [private clusters](https://docs.aws.amazon.com/eks/latest/userguide/private-clusters.html) that do not have access to the public internet, using `spec.instanceProfile` is required. `spec.role` cannot be used since Karpenter needs to access IAM endpoints to manage a generated instance profile. IAM [doesn't support private endpoints](https://docs.aws.amazon.com/vpc/latest/privatelink/aws-services-privatelink-support.html) to enable accessing the service without going to the public internet.\n\n{{% /alert %}}\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nWhen using `spec.instanceProfile`, ensure you are using pre-provisioned instance profiles that you manage yourself.\n{{% /alert %}}\n\n## spec.amiSelectorTerms\n\nAMI Selector Terms are __required__ and are used to configure AMIs for Karpenter to use. AMIs are discovered through alias, id, owner, name, and [tags](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html).\n\nThis selection logic is modeled as terms, where each term contains multiple conditions that must all be satisfied for the selector to match.\nEffectively, all requirements within a single term are ANDed together.\nIt's possible that you may want to select on two different AMIs that have unrelated requirements.\nIn this case, you can specify multiple terms which will be ORed together to form your selection logic.\nThe example below shows how this selection logic is fulfilled.\n\n```yaml\namiSelectorTerms:\n  # Select on any AMI that has both the `karpenter.sh/discovery: ${CLUSTER_NAME}`\n  # AND `environment: test` tags OR any AMI with the name `my-ami` OR an AMI with\n  # ID `ami-123` OR an AMI with ID matching the value of my-custom-parameter\n  - tags:\n      karpenter.sh/discovery: \"${CLUSTER_NAME}\"\n      environment: test\n  - name: my-ami\n  - id: ami-123\n  - ssmParameter: my-custom-parameter # ssm parameter name or ARN\n  # Select EKS optimized AL2023 AMIs with version `v20240807`. This term is mutually\n  # exclusive and can't be specified with other terms.\n  # - alias: al2023@v20240807\n```\n\nAn `alias` term can be used to select EKS-optimized AMIs. An `alias` is formatted as `family@version`. Family can be one of the following values:\n\n* `al2`\n* `al2023`\n* `bottlerocket`\n* `windows2019`\n* `windows2022`\n* `windows2025`\n\nThe version string can be set to `latest`, or pinned to a specific AMI using the format of that AMI's GitHub release tags.\nFor example, AL2 and AL2023 use dates for their release, so they can be pinned as follows:\n```yaml\nalias: al2023@v20240703\n```\nBottlerocket uses a semantic version for their releases. You can pin bottlerocket as follows:\n```yaml\nalias: bottlerocket@v1.20.4\n```\nThe Windows family does not support pinning, so only `latest` is supported.\n\nThe following commands can be used to determine the versions availble for an alias in your region:\n\n{{< tabpane text=true right=false >}}\n  {{% tab \"AL2023\" %}}\n  ```bash\n  export K8S_VERSION=\"{{< param \"latest_k8s_version\" >}}\"\n  aws ssm get-parameters-by-path --path \"/aws/service/eks/optimized-ami/$K8S_VERSION/amazon-linux-2023/\" --recursive | jq -cr '.Parameters[].Name' | grep -v \"recommended\" | awk -F '/' '{print $10}' | sed -r 's/.*(v[[:digit:]]+)$/\\1/' | sort | uniq\n  ```\n  {{% /tab %}}\n  {{% tab \"AL2\" %}}\n  ```bash\n  export K8S_VERSION=\"{{< param \"latest_k8s_version\" >}}\"\n  aws ssm get-parameters-by-path --path \"/aws/service/eks/optimized-ami/$K8S_VERSION/amazon-linux-2/\" --recursive | jq -cr '.Parameters[].Name' | grep -v \"recommended\" | awk -F '/' '{print $8}' | sed -r 's/.*(v[[:digit:]]+)$/\\1/' | sort | uniq\n  ```\n  {{% /tab %}}\n  {{% tab \"Bottlerocket\" %}}\n  ```bash\n  export K8S_VERSION=\"{{< param \"latest_k8s_version\" >}}\"\n  aws ssm get-parameters-by-path --path \"/aws/service/bottlerocket/aws-k8s-$K8S_VERSION\" --recursive | jq -cr '.Parameters[].Name' | grep -v \"latest\" | awk -F '/' '{print $7}' | sort | uniq\n  ```\n  {{% /tab %}}\n{{< /tabpane >}}\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter supports automatic AMI selection and upgrades using the `latest` version pin, but this is **not** recommended for production environments.\nWhen using `latest`, a new AMI release will cause Karpenter to drift all out-of-date nodes in the cluster, replacing them with nodes running the new AMI.\nWe strongly recommend evaluating new AMIs in a lower environment before rolling them out into a production environment.\nMore details on Karpenter's recommendations for managing AMIs can be found [here]({{< ref \"../tasks/managing-amis\" >}}).\n{{% /alert %}}\n\nTo select an AMI by name, use the `name` field in the selector term. To select an AMI by id, use the `id` field in the selector term. To select AMIs that are not owned by `amazon` or the account that Karpenter is running in, use the `owner` field - you can use a combination of account aliases (e.g. `self` `amazon`, `your-aws-account-name`) and account IDs.\n\nIf owner is not set for `name`, it defaults to `self,amazon`, preventing Karpenter from inadvertently selecting an AMI that is owned by a different account. Tags don't require an owner as tags can only be discovered by the user who created them.\n\n{{% alert title=\"Tip\" color=\"secondary\" %}}\nAMIs may be specified by any AWS tag, including `Name`. Selecting by tag or by name using wildcards (`*`) is supported.\n{{% /alert %}}\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nIf `amiSelectorTerms` match more than one AMI, Karpenter will automatically determine which AMI best fits the workloads on the launched worker node under the following constraints:\n\n* When launching nodes, Karpenter automatically determines which architecture a custom AMI is compatible with and will use images that match an instanceType's requirements.\n    * Unless using an alias, Karpenter **cannot** detect requirements other than architecture. If you need to specify different AMIs for different kind of nodes (e.g. accelerated GPU AMIs), you should use a separate `EC2NodeClass`.\n* If multiple AMIs are found that can be used, Karpenter will choose the latest one.\n* If no AMIs are found that can be used, then no nodes will be provisioned.\n{{% /alert %}}\n\n#### Examples\n\nSelect by AMI family and version:\n```yaml\n  amiSelectorTerms:\n    - alias: al2023@v20240807\n```\n\nSelect all with a specified tag:\n\n```yaml\n  amiSelectorTerms:\n    - tags:\n        karpenter.sh/discovery/MyClusterName: '*'\n```\n\nSelect by name:\n```yaml\n  amiSelectorTerms:\n    - name: my-ami\n```\n\nSelect by `Name` tag:\n```yaml\n  amiSelectorTerms:\n    - tags:\n        Name: my-ami\n```\n\nSelect by name and owner:\n```yaml\n  amiSelectorTerms:\n    - name: my-ami\n      owner: self\n    - name: my-ami\n      owner: \"0123456789\"\n```\n\nSelect by name using a wildcard:\n```yaml\nspec:\n  amiSelectorTerms:\n    - name: \"*EKS*\"\n```\n\nSelect by all under an owner:\n```yaml\nspec:\n  amiSelectorTerms:\n    - name: \"*\"\n      owner: self\n```\n\nSpecify using ids:\n```yaml\n  amiSelectorTerms:\n    - id: \"ami-123\"\n    - id: \"ami-456\"\n```\n\nSpecify using custom ssm parameter name or ARN:\n```yaml\n  amiSelectorTerms:\n    - ssmParameter: \"my-custom-parameter\"\n```\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nWhen using a custom SSM parameter, you'll need to expand the `ssm:GetParameter` permissions on the Karpenter IAM role to include your custom parameter, as the default policy only allows access to the AWS public parameters.\n{{% /alert %}}\n\n## spec.capacityReservationSelectorTerms\n\n<i class=\"fa-solid fa-circle-info\"></i> <b>Feature State: </b> [Beta]({{<ref \"../reference/settings#feature-gates\" >}})\n\nCapacity Reservation Selector Terms allow you to select [on-demand capacity reservations](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-capacity-reservations.html) (ODCRs), which will be made available to NodePools which select the given EC2NodeClass.\nKarpenter will prioritize utilizing the capacity in these reservations before falling back to on-demand and spot.\nCapacity reservations can be discovered using ids, tags, or instance match criteria.\n\nThis selection logic is modeled as terms.\nA term can specify an ID, a set of tags, or instance match criteria to select against.\nWhen specifying tags, it will select all capacity reservations accessible from the account with matching tags.\nWhen specifying instance match criteria, it selects reservations by their matching behavior: `open` (matches all compatible instances) or `targeted` (matches only explicitly targeted instances).\nThis can be further restricted by specifying an owner ID.\n\nFor more information on utilizing ODCRs with Karpenter, refer to the [Utilizing ODCRs Task]({{< relref \"../tasks/odcrs\" >}}).\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nNote that the IAM role Karpenter assumes should have a permissions policy associated with it that grants it permissions to use the [ec2:DescribeCapacityReservations](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonec2.html#amazonec2-DescribeCapacityReservations) action to discover capacity reservations and the [ec2:RunInstances](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonec2.html#amazonec2-RunInstances) action to run instances in those capacity reservations.\n{{% /alert %}}\n\n#### Examples\n\nSelect the reservations with the given IDs:\n\n```yaml\nspec:\n  capacityReservationSelectorTerms:\n  - id: cr-123\n  - id: cr-456\n```\n\nSelect the reservations by tags:\n\n```yaml\nspec:\n  capacityReservationSelectorTerms:\n  # Select all capacity reservations which have both matching tags\n  - tags:\n      key1: foo\n      key2: bar\n  # Additionally, select all capacity reservations with the following matching tag\n  - tags:\n      key3: foobar\n```\n\nSelect by tags and owner ID:\n\n```yaml\nspec:\n  # Select all capacity reservations with the matching tags which are also owned by\n  # the specified account.\n  capacityReservationSelectorTerms:\n  - tags:\n      key: foo\n    ownerID: 012345678901\n```\n\nSelect by instance match criteria:\n\n```yaml\nspec:\n  capacityReservationSelectorTerms:\n  # Select all open capacity reservations\n  - instanceMatchCriteria: open\n```\n\nSelect by instance match criteria and tags:\n\n```yaml\nspec:\n  capacityReservationSelectorTerms:\n  # Select targeted capacity reservations with matching tags\n  - instanceMatchCriteria: targeted\n    tags:\n      key: foo\n```\n\n## spec.tags\n\nKarpenter adds tags to all resources it creates, including EC2 Instances, EBS volumes, and Launch Templates. The default set of tags are listed below.\n\n```yaml\nName: <node-name>\nkarpenter.sh/nodeclaim: <nodeclaim-name>\nkarpenter.sh/nodepool: <nodepool-name>\nkarpenter.k8s.aws/ec2nodeclass: <ec2nodeclass-name>\nkubernetes.io/cluster/<cluster-name>: owned\neks:eks-cluster-name: <cluster-name>\n```\n\nAdditional tags can be added in the tags section, which will be merged with the default tags specified above.\n```yaml\nspec:\n  tags:\n    InternalAccountingTag: 1234\n    dev.corp.net/app: Calculator\n    dev.corp.net/team: MyTeam\n```\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nKarpenter allows overrides of the default \"Name\" tag but does not allow overrides to restricted domains (such as \"karpenter.sh\", \"karpenter.k8s.aws\", and \"kubernetes.io/cluster\"). This ensures that Karpenter is able to correctly auto-discover nodes that it owns.\n{{% /alert %}}\n\n## spec.metadataOptions\n\nControl the exposure of [Instance Metadata Service](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html) on EC2 Instances launched by this EC2NodeClass using a generated launch template.\n\nRefer 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.\n\nIf metadataOptions are omitted from this EC2NodeClass, the following default settings are applied:\n\n```yaml\nspec:\n  metadataOptions:\n    httpEndpoint: enabled\n    httpProtocolIPv6: disabled\n    httpPutResponseHopLimit: 1\n    httpTokens: required\n```\n\n## spec.blockDeviceMappings\n\nThe `blockDeviceMappings` field in an `EC2NodeClass` can be used to control the [Elastic Block Storage (EBS) volumes](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/block-device-mapping-concepts.html#instance-block-device-mapping) that Karpenter attaches to provisioned nodes. Karpenter uses default block device mappings for the AMIFamily 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.\n\n```yaml\nspec:\n  blockDeviceMappings:\n    - deviceName: /dev/xvda\n      ebs:\n        volumeSize: 100Gi\n        volumeType: gp3\n        iops: 10000\n        encrypted: true\n        kmsKeyID: \"1234abcd-12ab-34cd-56ef-1234567890ab\"\n        deleteOnTermination: true\n        throughput: 125\n        snapshotID: snap-0123456789\n        volumeInitializationRate: 100\n```\n\nThe following blockDeviceMapping defaults are used for each `AMIFamily` if no `blockDeviceMapping` overrides are specified in the `EC2NodeClass`\n\n### AL2\n```yaml\nspec:\n  blockDeviceMappings:\n    - deviceName: /dev/xvda\n      ebs:\n        volumeSize: 20Gi\n        volumeType: gp3\n        encrypted: true\n```\n\n### AL2023\n```yaml\nspec:\n  blockDeviceMappings:\n    - deviceName: /dev/xvda\n      ebs:\n        volumeSize: 20Gi\n        volumeType: gp3\n        encrypted: true\n```\n\n### Bottlerocket\n```yaml\nspec:\n  blockDeviceMappings:\n    # Root device\n    - deviceName: /dev/xvda\n      ebs:\n        volumeSize: 4Gi\n        volumeType: gp3\n        encrypted: true\n    # Data device: Container resources such as images and logs\n    - deviceName: /dev/xvdb\n      ebs:\n        volumeSize: 20Gi\n        volumeType: gp3\n        encrypted: true\n```\n\n### Windows2019/Windows2022/Windows2025\n```yaml\nspec:\n  blockDeviceMappings:\n    - deviceName: /dev/sda1\n      ebs:\n        volumeSize: 50Gi\n        volumeType: gp3\n        encrypted: true\n```\n\n### Custom\n\nThe `Custom` AMIFamily ships without any default `blockDeviceMappings`.\n\n## spec.instanceStorePolicy\n\nThe `instanceStorePolicy` field controls how [instance-store](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/InstanceStorage.html) volumes are handled. By default, Karpenter and Kubernetes will simply ignore them.\n\n### RAID0\n\nIf you intend to use these volumes for faster node ephemeral-storage, set `instanceStorePolicy` to `RAID0`:\n\n```yaml\nspec:\n  instanceStorePolicy: RAID0\n```\n\nThis will set the allocatable ephemeral-storage of each node to the total size of the instance-store volume(s). This configuration is likely to be useful for workloads that leverage dense storage instance types or require the low latency from instance-stores that are nvme ssd based.\n\nThe disks must be formatted & mounted in a RAID0 and be the underlying filesystem for the Kubelet & Containerd. Even if you already configure your volumes with RAID0, Karpenter won't recognize this by default unless you set the `instanceStorePolicy` to `RAID0`. Without this, scheduling workloads that depend on ephemeral-storage from the instance-stores may result in a deadlock due to insufficient storage.\n\nInstructions for each AMI family are listed below:\n\n#### AL2\n\nOn AL2, Karpenter automatically configures the disks through an additional boostrap argument (`--local-disks raid0`). The device name is `/dev/md/0` and its mount point is `/mnt/k8s-disks/0`. You should ensure any additional disk setup does not interfere with these.\n\n#### AL2023\n\nOn AL2023, Karpenter automatically configures the disks via the generated `NodeConfig` object. Like AL2, the device name is `/dev/md/0` and its mount point is `/mnt/k8s-disks/0`. You should ensure any additional disk setup does not interfere with these.\n\n#### Bottlerocket\n\nOn Bottlerocket, Karpenter automatically configures the disks by adding the required bootstrap commands to the settings. The ephemeral storage configuration is handled automatically, so you should not manually configure ephemeral storage settings in your userData.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nThis automatic disk configuration is only available on Bottlerocket v1.22.0 and later.\n{{% /alert %}}\n\n#### Others\n\nFor all other AMI families, you must configure the disks yourself. Check out the [`setup-local-disks`](https://github.com/awslabs/amazon-eks-ami/blob/main/templates/shared/runtime/bin/setup-local-disks) script in [amazon-eks-ami](https://github.com/awslabs/amazon-eks-ami) to see how this is done for AL2.\n\n{{% alert title=\"Tip\" color=\"secondary\" %}}\nSince the Kubelet & Containerd will be using the instance-store filesystem, you may consider using a more minimal root volume size.\n{{% /alert %}}\n\n## spec.userData\n\nYou can control the UserData that is applied to your worker nodes via this field. This allows you to run custom scripts or pass-through custom configuration to Karpenter instances on start-up.\n\n```yaml\napiVersion: karpenter.k8s.aws/v1\nkind: EC2NodeClass\nmetadata:\n  name: bottlerocket-example\nspec:\n  ...\n  amiFamily: Bottlerocket\n  userData:  |\n    [settings.kubernetes]\n    \"kube-api-qps\" = 30\n    \"shutdown-grace-period\" = \"30s\"\n    \"shutdown-grace-period-for-critical-pods\" = \"30s\"\n    [settings.kubernetes.eviction-hard]\n    \"memory.available\" = \"20%\"\n```\n\nThis example adds SSH keys to allow remote login to the node (replace *my-authorized_keys* with your public key file):\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nInstead 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.\nSee [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.\n\nAlso, **my-authorized_key** key is the public key. See [Retrieve the public key material](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/describe-keys.html#retrieving-the-public-key).\n{{% /alert %}}\n\n```yaml\napiVersion: karpenter.k8s.aws/v1\nkind: EC2NodeClass\nmetadata:\n  name: al2-example\nspec:\n  ...\n  amiFamily: AL2\n  userData: |\n    #!/bin/bash\n    mkdir -p ~ec2-user/.ssh/\n    touch ~ec2-user/.ssh/authorized_keys\n    cat >> ~ec2-user/.ssh/authorized_keys <<EOF\n    {{ insertFile \"../my-authorized_keys\" | indent 4  }}\n    EOF\n    chmod -R go-w ~ec2-user/.ssh/authorized_keys\n    chown -R ec2-user ~ec2-user/.ssh\n```\n\nAlternatively, you can save the [key in your SSM Parameter Store](https://docs.aws.amazon.com/systems-manager/latest/userguide/parameter-create-console.html) and use the get-parameter command mentioned below to retrieve the key for authorized_keys.\n\n```\naws ssm get-parameter --name \"<parameter-name>\" --region <region> --with-decryption --query \"Parameter.Value\" --output text > /home/ec2-user/.ssh/authorized_keys\n```\n\nFor more examples on configuring fields for different AMI families, see the [examples here](https://github.com/aws/karpenter/blob/main/examples/v1).\n\nKarpenter will merge the userData you specify with the default userData for that AMIFamily. See the [AMIFamily]({{< ref \"#specamifamily\" >}}) section for more details on these defaults. View the sections below to understand the different merge strategies for each AMIFamily.\n\n### AL2\n\n* Your UserData can be in the [MIME multi part archive](https://cloudinit.readthedocs.io/en/latest/topics/format.html#mime-multi-part-archive) format.\n* Karpenter will transform your custom user-data as a MIME part, if necessary, and then merge a final MIME part to the end of your UserData parts which will bootstrap the worker node. Karpenter will have full control over all the parameters being passed to the bootstrap script.\n  * Karpenter will continue to set MaxPods, ClusterDNS and all other parameters defined in `spec.kubeletConfiguration` as before.\n\nConsider the following example to understand how your custom UserData will be merged -\n\n#### Passed-in UserData (bash)\n\n```bash\n#!/bin/bash\necho \"Running custom user data script (bash)\"\n```\n\n#### Merged UserData (bash)\n\n```bash\nMIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"//\"\n\n--//\nContent-Type: text/x-shellscript; charset=\"us-ascii\"\n\n#!/bin/bash\necho \"Running custom user data script (bash)\"\n\n--//\nContent-Type: text/x-shellscript; charset=\"us-ascii\"\n\n#!/bin/bash -xe\nexec > >(tee /var/log/user-data.log|logger -t user-data -s 2>/dev/console) 2>&1\n/etc/eks/bootstrap.sh 'test-cluster' --apiserver-endpoint 'https://test-cluster' --b64-cluster-ca 'ca-bundle' \\\n--use-max-pods false \\\n--kubelet-extra-args '--node-labels=karpenter.sh/capacity-type=on-demand,karpenter.sh/nodepool=test  --max-pods=110'\n--//--\n```\n\n#### Passed-in UserData (MIME)\n\n```bash\nMIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"BOUNDARY\"\n\n--BOUNDARY\nContent-Type: text/x-shellscript; charset=\"us-ascii\"\n\n#!/bin/bash\necho \"Running custom user data script (mime)\"\n\n--BOUNDARY--\n```\n\n#### Merged UserData (MIME)\n\n```bash\nMIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"//\"\n\n--//\nContent-Type: text/x-shellscript; charset=\"us-ascii\"\n\n#!/bin/bash\necho \"Running custom user data script (mime)\"\n\n--//\nContent-Type: text/x-shellscript; charset=\"us-ascii\"\n\n#!/bin/bash -xe\nexec > >(tee /var/log/user-data.log|logger -t user-data -s 2>/dev/console) 2>&1\n/etc/eks/bootstrap.sh 'test-cluster' --apiserver-endpoint 'https://test-cluster' --b64-cluster-ca 'ca-bundle' \\\n--use-max-pods false \\\n--kubelet-extra-args '--node-labels=karpenter.sh/capacity-type=on-demand,karpenter.sh/nodepool=test  --max-pods=110'\n--//--\n```\n\n{{% alert title=\"Tip\" color=\"secondary\" %}}\nYou can set additional kubelet configuration properties, unavailable through `spec.kubelet`, by updating the `kubelet-config.json` file:\n\n```yaml\napiVersion: karpenter.k8s.aws/v1\nkind: EC2NodeClass\nmetadata:\n  name: kubelet-config-example\nspec:\n  amiFamily: AL2\n  userData: |\n    #!/bin/bash\n    echo \"$(jq '.kubeAPIQPS=50' /etc/kubernetes/kubelet/kubelet-config.json)\" > /etc/kubernetes/kubelet/kubelet-config.json\n```\n{{% /alert %}}\n\n### AL2023\n\n* Your UserData may be in one of three formats: a [MIME multi part archive](https://cloudinit.readthedocs.io/en/latest/topics/format.html#mime-multi-part-archive), a NodeConfig YAML / JSON string, or a shell script.\n* Karpenter will transform your custom UserData into a MIME part, if necessary, and then create a MIME multi-part archive. This archive will consist of a generated NodeConfig, containing Karpenter's default values, followed by the transformed custom UserData. For more information on the NodeConfig spec, refer to the [AL2023 EKS Optimized AMI docs](https://awslabs.github.io/amazon-eks-ami/nodeadm/doc/examples/).\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nAny values configured by the Karpenter generated NodeConfig object will take precedent over values specifed in `spec.userData`.\nThis includes cluster name, cluster CIDR, cluster endpoint, certificate authority, taints, labels, and any value in [spec.kubelet]({{< ref \"#speckubelet\" >}}).\nThese fields must be configured natively through Karpenter rather than through UserData.\n{{% /alert %}}\n\n#### Passed-in UserData (NodeConfig)\n\n```yaml\napiVersion: node.eks.aws/v1alpha1\nkind: NodeConfig\nspec:\n  kubelet:\n    config:\n      maxPods: 42\n```\n\n#### Merged UserData (NodeConfig)\n\n```text\nMIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"//\"\n\n--//\nContent-Type: application/node.eks.aws\n\napiVersion: node.eks.aws/v1alpha1\nkind: NodeConfig\nspec:\n  kubelet:\n    config:\n      maxPods: 42\n\n--//\nContent-Type: application/node.eks.aws\n\n# Karpenter Generated NodeConfig\napiVersion: node.eks.aws/v1alpha1\nkind: NodeConfig\nspec:\n  cluster:\n    apiServerEndpoint: https://test-cluster\n    certificateAuthority: cluster-ca\n    cidr: 10.100.0.0/16\n    name: test-cluster\n  kubelet:\n    config:\n      clusterDNS:\n      - 10.100.0.10\n      maxPods: 118\n    flags:\n    - --node-labels=\"karpenter.sh/capacity-type=on-demand,karpenter.sh/nodepool=default\"\n\n--//--\n```\n\n#### Passed-in UserData (bash)\n\n```shell\n#!/bin/bash\necho \"Hello, AL2023!\"\n```\n\n#### Merged UserData (bash)\n\n```text\nMIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"//\"\n\n--//\nContent-Type: text/x-shellscript; charset=\"us-ascii\"\n\n#!/bin/bash\necho \"Hello, AL2023!\"\n\n--//\nContent-Type: application/node.eks.aws\n\n# Karpenter Generated NodeConfig\napiVersion: node.eks.aws/v1alpha1\nkind: NodeConfig\nspec:\n  cluster:\n    apiServerEndpoint: https://test-cluster\n    certificateAuthority: cluster-ca\n    cidr: 10.100.0.0/16\n    name: test-cluster\n  kubelet:\n    config:\n      clusterDNS:\n      - 10.100.0.10\n      maxPods: 118\n    flags:\n    - --node-labels=\"karpenter.sh/capacity-type=on-demand,karpenter.sh/nodepool=default\"\n\n--//--\n```\n\n#### Passed-in UserData (MIME)\n\n```text\nMIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"//\"\n\n--//\nContent-Type: text/x-shellscript; charset=\"us-ascii\"\n\n#!/bin/bash\necho \"Hello, AL2023!\"\n\n--//\nContent-Type: application/node.eks.aws\n\napiVersion: node.eks.aws/v1alpha1\nkind: NodeConfig\nspec:\n  kubelet:\n    config:\n      maxPods: 42\n--//\n```\n\n#### Merged UserData (MIME)\n\n```text\nMIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"//\"\n\n--//\nContent-Type: application/node.eks.aws\n\napiVersion: node.eks.aws/v1alpha1\nkind: NodeConfig\nspec:\n  kubelet:\n    config:\n      maxPods: 42\n--//\nContent-Type: text/x-shellscript; charset=\"us-ascii\"\n\n#!/bin/bash\necho \"Hello, AL2023!\"\n\n--//\nContent-Type: application/node.eks.aws\n\n# Karpenter Generated NodeConfig\napiVersion: node.eks.aws/v1alpha1\nkind: NodeConfig\nspec:\n  cluster:\n    apiServerEndpoint: https://test-cluster\n    certificateAuthority: cluster-ca\n    cidr: 10.100.0.0/16\n    name: test-cluster\n  kubelet:\n    config:\n      clusterDNS:\n      - 10.100.0.10\n      maxPods: 118\n    flags:\n    - --node-labels=\"karpenter.sh/capacity-type=on-demand,karpenter.sh/nodepool=default\"\n\n--//--\n```\n\n### Bottlerocket\n\n* Your UserData must be valid TOML.\n* Unknown TOML fields will be ignored when the final merged UserData is generated by Karpenter.\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nAny values configured by Karpenter will take precedent over values specifed in `spec.userData`.\nThis includes cluster name, cluster endpoint, cluster certificate, taints, labels, and any value in [spec.kubelet]({{< ref \"#speckubelet\" >}}).\nThese fields must be configured natively through Karpenter rather than through UserData.\n{{% /alert %}}\n\nConsider the following example to understand how your custom UserData settings will be merged in.\n\n#### Passed-in UserData\n\n```toml\n[settings.kubernetes.eviction-hard]\n\"memory.available\" = \"12%\"\n[settings.kubernetes]\n\"unknown-setting\" = \"unknown\"\n[settings.kubernetes.node-labels]\n'field.controlled.by/karpenter' = 'will-be-overridden'\n```\n\n#### Merged UserData\n\n```toml\n[settings]\n[settings.kubernetes]\napi-server = 'https://cluster'\ncluster-certificate = 'ca-bundle'\ncluster-name = 'cluster'\n\n[settings.kubernetes.node-labels]\n'karpenter.sh/capacity-type' = 'on-demand'\n'karpenter.sh/nodepool' = 'default'\n\n[settings.kubernetes.node-taints]\n\n[settings.kubernetes.eviction-hard]\n'memory.available' = '12%%'\n```\n\n#### Device ownership in Bottlerocket\n\nBottlerocket `v1.30.0+` supports device ownership using the [security context](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/) provided in the Kubernetes specfile. To enable this, you will need the following user-data configurations:\n\n```toml\n[settings]\n[settings.kubernetes]\ndevice-ownership-from-security-context = true\n```\n\nThis allows the container to take ownership of devices allocated to the pod via device-plugins based on the `runAsUser` and `runAsGroup` values provided in the spec. For more details on this, see the [Kubernetes documentation](https://kubernetes.io/blog/2021/11/09/non-root-containers-and-devices/)\n\nThis setting helps you enable Neuron workloads on Bottlerocket instances. See [Accelerators/GPU Resources]({{< ref \"./scheduling#acceleratorsgpu-resources\" >}}) for more details.\n\n### Windows2019/Windows2022/Windows2025\n\n* Your UserData must be specified as PowerShell commands.\n* The UserData specified will be prepended to a Karpenter managed section that will bootstrap the kubelet.\n* Karpenter will continue to set ClusterDNS and all other parameters defined in spec.kubeletConfiguration as before.\n\nConsider the following example to understand how your custom UserData settings will be merged in.\n\n#### Passed-in UserData\n\n```powershell\nWrite-Host \"Running custom user data script\"\n```\n\n#### Merged UserData\n\n```powershell\n<powershell>\nWrite-Host \"Running custom user data script\"\n[string]$EKSBootstrapScriptFile = \"$env:ProgramFiles\\Amazon\\EKS\\Start-EKSBootstrap.ps1\"\n& $EKSBootstrapScriptFile -EKSClusterName 'test-cluster' -APIServerEndpoint 'https://test-cluster' -Base64ClusterCA 'ca-bundle' -KubeletExtraArgs '--node-labels=\"karpenter.sh/capacity-type=spot,karpenter.sh/nodepool=windows2022\" --max-pods=110' -DNSClusterIP '10.0.100.10'\n</powershell>\n```\n\n{{% alert title=\"Windows Support Notice\" color=\"warning\" %}}\nCurrently, Karpenter does not specify `-ServiceCIDR` to [EKS Windows AMI Bootstrap script](https://docs.aws.amazon.com/eks/latest/userguide/eks-optimized-windows-ami.html#bootstrap-script-configuration-parameters).\nWindows worker nodes will use `172.20.0.0/16` or `10.100.0.0/16` for Kubernetes service IP address ranges based on the IP address of the primary interface.\nThe effective ServiceCIDR can be verified at `$env:ProgramData\\Amazon\\EKS\\cni\\config\\vpc-bridge.conf` on the worker node.\n\nSupport for the Windows ServiceCIDR argument can be tracked in a [Karpenter Github Issue](https://github.com/aws/karpenter/issues/4088). Currently, if the effective ServiceCIDR is incorrect for your windows worker nodes, you can add the following userData as a workaround.\n\n```yaml\nspec:\n  userData: |\n    $global:EKSCluster = Get-EKSCluster -Name my-cluster\n```\n{{% /alert %}}\n\n### Custom\n\n* No merging is performed, your UserData must perform all setup required of the node to allow it to join the cluster.\n* Custom UserData must meet the following requirements to work correctly with Karpenter:\n  * It must ensure the node is registered with the `karpenter.sh/unregistered:NoExecute` taint (via kubelet configuration field `registerWithTaints`)\n  * It must set kubelet config options to match those configured in `spec.kubelet`\n\n## spec.detailedMonitoring\n\nEnabling detailed monitoring controls the [EC2 detailed monitoring](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-cloudwatch-new.html) feature. If you enable this option, the Amazon EC2 console displays monitoring graphs with a 1-minute period for the instances that Karpenter launches.\n\n```yaml\nspec:\n  detailedMonitoring: true\n```\n\n## spec.associatePublicIPAddress\n\nYou can explicitly set `AssociatePublicIPAddress: false` when you are only launching into private subnets.\nPreviously, Karpenter auto-set `associatePublicIPAddress` on the primary ENI to false if a user’s subnet options were all private subnets.\nThis value is a boolean field that controls whether instances created by Karpenter for this EC2NodeClass will have an associated public IP address. This overrides the `MapPublicIpOnLaunch` setting applied to the subnet the node is launched in. If this field is not set, the `MapPublicIpOnLaunch` field will be respected.\n\n\n{{% alert title=\"Note\" color=\"warning\" %}}\nIf a `NodeClaim` requests `vpc.amazonaws.com/efa` resources, `spec.associatePublicIPAddress` is respected. However, if this `NodeClaim` requests **multiple** EFA resources and the value for `spec.associatePublicIPAddress` is true, the instance will fail to launch. This is due to an EC2 restriction which\nrequires that the field is only set to true when configuring an instance with a single ENI at launch. When using this field, it is advised that users segregate their EFA workload to use a separate `NodePool` / `EC2NodeClass` pair.\n{{% /alert %}}\n\n## spec.ipPrefixCount\n\nThis value is a integer field that controls how many ip prefixes will be assigned to `NodeClaim`. See the [EC2 Launch Template Network Interface Spec](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-properties-ec2-launchtemplate-networkinterface.html) for more information. Sets ipv4PrefixCount if you are using an IPv4 Cluster, or ipv6PrefixCount if you are using IPv6.\n\n## status.subnets\n[`status.subnets`]({{< ref \"#statussubnets\" >}}) contains the resolved `id` and `zone` of the subnets that were selected by the [`spec.subnetSelectorTerms`]({{< ref \"#specsubnetselectorterms\" >}}) for the node class. The subnets will be sorted by the available IP address count in decreasing order.\n\n#### Examples\n\n```yaml\nspec:\n  subnetSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\"\nstatus:\n  subnets:\n  - id: subnet-0a462d98193ff9fac\n    zone: us-east-2b\n  - id: subnet-0322dfafd76a609b6\n    zone: us-east-2c\n  - id: subnet-0727ef01daf4ac9fe\n    zone: us-east-2b\n  - id: subnet-00c99aeafe2a70304\n    zone: us-east-2a\n  - id: subnet-023b232fd5eb0028e\n    zone: us-east-2c\n  - id: subnet-03941e7ad6afeaa72\n    zone: us-east-2a\n```\n\n## status.securityGroups\n\n[`status.securityGroups`]({{< ref \"#statussecuritygroups\" >}}) contains the resolved `id` and `name` of the security groups that were selected by the [`spec.securityGroupSelectorTerms`]({{< ref \"#specsecuritygroupselectorterms\" >}}) for the node class. The subnets will be sorted by the available IP address count in decreasing order.\n\n#### Examples\n\n```yaml\nspec:\n  securityGroupSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\"\nstatus:\n  securityGroups:\n  - id: sg-041513b454818610b\n    name: ClusterSharedNodeSecurityGroup\n  - id: sg-0286715698b894bca\n    name: ControlPlaneSecurityGroup-1AQ073TSAAPW\n```\n\n## status.amis\n\n[`status.amis`]({{< ref \"#statusamis\" >}}) contains the resolved `id`, `name`, `requirements`, and the `deprecated` status of either the default AMIs for the [`spec.amiFamily`]({{< ref \"#specamifamily\" >}}) or the AMIs selected by the [`spec.amiSelectorTerms`]({{< ref \"#specamiselectorterms\" >}}) if this field is specified. The `deprecated` status will be shown for resolved AMIs that are deprecated.\n\n#### Examples\n\nAMIs resolved with an AL2 alias:\n\n```yaml\nspec:\n  amiSelectorTerms:\n    - alias: al2@v20240807\nstatus:\n  amis:\n  - id: ami-03c3a3dcda64f5b75\n    name: amazon-linux-2-gpu\n    requirements:\n    - key: kubernetes.io/arch\n      operator: In\n      values:\n      - amd64\n    - key: karpenter.k8s.aws/instance-gpu-count\n      operator: Exists\n  - id: ami-03c3a3dcda64f5b75\n    name: amazon-linux-2-gpu\n    requirements:\n    - key: kubernetes.io/arch\n      operator: In\n      values:\n      - amd64\n    - key: karpenter.k8s.aws/instance-accelerator-count\n      operator: Exists\n  - id: ami-06afb2d101cc4b8bd\n    name: amazon-linux-2-arm64\n    requirements:\n    - key: kubernetes.io/arch\n      operator: In\n      values:\n      - arm64\n    - key: karpenter.k8s.aws/instance-gpu-count\n      operator: DoesNotExist\n    - key: karpenter.k8s.aws/instance-accelerator-count\n      operator: DoesNotExist\n  - id: ami-0e28b76d768af234e\n    name: amazon-linux-2\n    requirements:\n    - key: kubernetes.io/arch\n      operator: In\n      values:\n      - amd64\n    - key: karpenter.k8s.aws/instance-gpu-count\n      operator: DoesNotExist\n    - key: karpenter.k8s.aws/instance-accelerator-count\n      operator: DoesNotExist\n```\n\nAMIs resolved from tags:\n\n```yaml\nspec:\n  amiSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\"\nstatus:\n  amis:\n  - id: ami-01234567890123456\n    name: custom-ami-amd64\n    deprecated: true\n    requirements:\n    - key: kubernetes.io/arch\n      operator: In\n      values:\n      - amd64\n  - id: ami-01234567890123456\n    name: custom-ami-arm64\n    requirements:\n    - key: kubernetes.io/arch\n      operator: In\n      values:\n      - arm64\n```\n\n## status.capacityReservations\n\n[`status.capacityReservations`]({{< ref \"#statuscapacityreservations\" >}}) contains the following information for each resolved capacity reservation:\n\n| Field                   | Example                | Description                                                                          |\n| ----------------------- | ---------------------- | ------------------------------------------------------------------------------------ |\n| `availabilityZone`      | `us-east-1a`           | The availability zone the capacity reservation is available in                       |\n| `id`                    | `cr-56fac701cc1951b03` | The ID of the capacity reservation                                                   |\n| `instanceMatchCriteria` | `open`                 | The instanceMatchCriteria for the capacity reservation. Can be `open` or `targeted`. |\n| `instanceType`          | `m5.large`             | The EC2 instance type of the capacity reservation                                    |\n| `ownerID`               | `459763720645`         | The account ID that owns the capacity reservation                                    |\n| `reservationType`       | `default`              | The type of the capacity reservation. Can be `default` or `capacity-block`.          |\n| `state`                 | `active`               | The state of the capacity reservation. Can be `active` or `expiring`.                |\n| `interruptible`         | `true` or `false`      | Whether the capacity reservation is interruptible.                                   |\n\n#### Examples\n\n```yaml\nstatus:\n  capacityReservations:\n  - availabilityZone: us-west-2a\n    id: cr-01234567890123456\n    instanceMatchCriteria: targeted\n    instanceType: g6.48xlarge\n    interruptible: false\n    ownerID: \"012345678901\"\n    reservationType: capacity-block\n    state: expiring\n  - availabilityZone: us-west-2c\n    id: cr-12345678901234567\n    instanceMatchCriteria: open\n    instanceType: g6.48xlarge\n    interruptible: true\n    ownerID: \"98765432109\"\n    reservationType: default\n    state: active\n```\n\n## status.instanceProfile\n\n[`status.instanceProfile`]({{< ref \"#statusinstanceprofile\" >}}) contains the resolved instance profile generated by Karpenter from the [`spec.role`]({{< ref \"#specrole\" >}})\n\n```yaml\nspec:\n  role: \"KarpenterNodeRole-${CLUSTER_NAME}\"\nstatus:\n  instanceProfile: \"${CLUSTER_NAME}-0123456778901234567789\"\n```\n\n## status.conditions\n\n[`status.conditions`]({{< ref \"#statusconditions\" >}}) indicates EC2NodeClass readiness. This will be `Ready` when Karpenter successfully discovers AMIs, Instance Profile, Subnets, Cluster CIDR (AL2023 only) and SecurityGroups for the EC2NodeClass.\n\nNodeClasses have the following status conditions:\n\n| Condition Type       | Description                                                                                                                                                                                                                       |\n|----------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| SubnetsReady         | Subnets are discovered.                                                                                                                                                                                                           |\n| SecurityGroupsReady  | Security Groups are discovered.                                                                                                                                                                                                   |\n| InstanceProfileReady | Instance Profile is discovered.                                                                                                                                                                                                   |\n| AMIsReady            | AMIs are discovered.                                                |\n| Ready                | Top level condition that indicates if the nodeClass is ready. If any of the underlying conditions is `False` then this condition is set to `False` and `Message` on the condition indicates the dependency that was not resolved. |\n\nIf a NodeClass is not ready, NodePools that reference it through their `nodeClassRef` will not be considered for scheduling.\n"
  },
  {
    "path": "website/content/en/preview/concepts/nodeoverlays.md",
    "content": "---\ntitle: \"NodeOverlays\"\nlinkTitle: \"NodeOverlays\"\nweight: 40\ndescription: >\n  Understand NodeOverlays and how they enable fine-tuning of Karpenter's scheduling simulation for advanced use cases.\n---\n\n<i class=\"fa-solid fa-circle-info\"></i> <b>Feature State: </b> [Alpha]({{<ref \"../reference/settings#feature-gates\" >}})\n\n\nKarpenter uses NodeOverlays to inject alternative instance type information into the scheduling simulation for more accurate scheduling decisions.\nNodeOverlays enable users to fine-tune instance pricing and add extended resources to instance types that should be considered during Karpenter's decision-making process.\nThey provide a flexible way to account for real-world factors like savings plans, licensing costs, and custom hardware resources that aren't captured in the base instance data from cloud providers.\n\nNodeOverlays work by modifying the instance type information that Karpenter uses during its scheduling simulation.\nWhen Karpenter evaluates which instance types can satisfy pending pod requirements, it applies any matching NodeOverlays to adjust pricing information or add extended resources before making provisioning decisions.\n\n## NodeOverlay Configuration\n\n```yaml\napiVersion: karpenter.sh/v1alpha1\nkind: NodeOverlay\nmetadata:\n  name: example-overlay\nspec:\n  # Optional weight for conflict resolution (higher weight wins)\n  weight: 10\n  \n  # Requirements determine which instance types this overlay applies to\n  requirements:\n    - key: node.kubernetes.io/instance-type\n      operator: In\n      values: [\"m5.large\", \"m5.xlarge\"]\n    - key: karpenter.sh/capacity-type  \n      operator: In\n      values: [\"spot\"]\n    - key: karpenter.k8s.aws/instance-cpu \n      operator: Gte\n      values: [\"32\"]\n  \n  # Price and priceAdjustment are mutually exclusive\n  # Price override (sets absolute price)\n  price: \"5.00\"\n  \n  # Price adjustment (modifies existing price)\n  priceAdjustment: \"+10%\"  # or \"-0.50\" for absolute adjustment\n  \n  # Extended resources to add to matching instance types\n  capacity:\n    hugepages-2Mi: 100Mi\n    hugepages-1Gi: 2Gi\n    custom-device/gpu-slice: 4\n```\n\n## spec.weight\nOptional integer that determines precedence when multiple NodeOverlays match the same instance type. Higher weights take precedence over lower weights. When weights are equal, alphabetical ordering by name is used for conflict resolution. If not specified, the default weight is 0. If there is a conflict between NodeOverlays with the same weight, it will be indicated in the status and the NodeOverlay will not be applied.\n\n## spec.requirements\nArray of requirements that determine which instance types this overlay applies to. Uses the same format as NodePool requirements and supports all standard Kubernetes label selectors. An empty requirements array applies the overlay to all instance types. Kubernetes defines the following [Well-Known Labels](https://kubernetes.io/docs/reference/labels-annotations-taints/), and cloud providers (e.g., AWS) implement them.\n\nCurrently, requirements sets are defined based on the well-known labels that are discovered for instance types. 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).\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nThere is currently a limit of 100 on the total number of requirements on both the NodeOverlay.\n{{% /alert %}}\n\n## spec.price\nAbsolute price override as a string representing the price in your currency. This completely replaces the original instance price reported by the cloud provider. Karpenter is currency-agnostic, so this works with any currency unit.\n\n## spec.priceAdjustment\nPrice modification that can be specified as:\n- **Absolute adjustment**: `\"+5.00\"` (increase by 5.00) or `\"-2.50\"` (decrease by 2.50)\n- **Percentage adjustment**: `\"+15%\"` (increase by 15%) or `\"-10%\"` (decrease by 10%)\n\n## spec.capacity\nMap of extended resources to add to matching instance types. These resources are added to the existing standard capacity and do not replace or modify well-known resources. Only extended resources should be specified here.\n\n```yaml\napiVersion: karpenter.sh/v1alpha1\nkind: NodeOverlay\nmetadata:\n  name: custom-devices\nspec:\n  requirements:\n    - key: node.kubernetes.io/instance-type\n      operator: In\n      values: [\"m5.large\", \"m5.xlarge\", \"m5.2xlarge\"]\n  capacity:\n    smarter-devices/fuse: 1\n    custom-hardware/accelerator: 2\n```\n\n## Conflict Resolution\n\nWhen multiple NodeOverlays match the same instance type, conflicts are resolved using the following rules:\n\n1. **Weight-based precedence**: Higher weight values take precedence over lower weights\n2. **Alphabetical ordering**: When weights are equal, overlays are applied in alphabetical order by name\n3. **Field-level merging**: Higher-weight overlays override specific fields from lower-weight overlays, but capacity fields from different overlays are merged together\n\n### Example Conflict Resolution\n\n```yaml\napiVersion: karpenter.sh/v1alpha1\nkind: NodeOverlay\nmetadata:\n  name: overlay-a\nspec:\n  weight: 5\n  requirements:\n    - key: node.kubernetes.io/instance-type\n      operator: In\n      values: [\"m5.large\"]\n  priceAdjustment: \"-10%\"\n  capacity:\n    hugepages-2Mi: 50Mi\n---\napiVersion: karpenter.sh/v1alpha1\nkind: NodeOverlay\nmetadata:\n  name: overlay-b\nspec:\n  weight: 10  # Higher weight\n  requirements:\n    - key: node.kubernetes.io/instance-type\n      operator: In\n      values: [\"m5.large\"]\n  priceAdjustment: \"-20%\"  # This overrides overlay-a's adjustment\n  capacity:\n    custom-device/gpu: 1   # This is merged with hugepages-2Mi from overlay-a\n```\n\n**Result for m5.large instances:**\n- Price adjustment: `-20%` (from overlay-b, overrides overlay-a)\n- Capacity: `hugepages-2Mi: 50Mi` (from overlay-a) + `custom-device/gpu: 1` (from overlay-b)\n\n## Integration with Consolidation\n\nNodeOverlay modifications are automatically integrated into Karpenter's consolidation process:\n\n* **Price adjustments** affect consolidation decisions by changing the cost calculations used to determine optimal instance selections during replacement operations\n* **Capacity additions** are considered during consolidation when evaluating whether workloads can be moved between nodes\n* Changes take effect through normal consolidation cycles without requiring additional drift detection or forced node replacement\n\nWhen NodeOverlay configurations change, Karpenter incorporates these changes into its next consolidation evaluation, potentially triggering node replacements if the new configurations significantly change the optimal instance selection for existing workloads.\n\n## Status and Observability\n\nNodeOverlays include status conditions to help you understand their current state and troubleshoot configuration issues.\n\n### Common Status Conditions\n\n* **Ready=True**: The overlay is successfully applied to matching instance types\n* **Ready=False**: Configuration conflicts, requirement mismatches, or other errors prevent the overlay from being applied\n\n### Status Messages\n\nWhen `Ready=False`, the status message provides specific information about the issue:\n\n```yaml\nstatus:\n  conditions:\n  - type: ValidationSucceeded\n    status: \"False\"\n    lastTransitionTime: \"2024-07-24T18:30:00Z\"\n    reason: \"Conflict\"\n    message: \"conflict with another overlay\"\n```\n\n## Limitations and Considerations\n\n* **Resource Scope**: NodeOverlays can only add extended resources; they cannot modify or remove standard resources (CPU, memory, storage)\n* **Actual vs. Simulated**: Capacity modifications only affect Karpenter's scheduling simulation; actual node resources must be configured through other means\n* **Pricing vs. Billing**: Price adjustments influence Karpenter's scheduling decisions but don't affect actual cloud provider billing\n* **Alpha Status**: NodeOverlays are currently in alpha (v1alpha1) and the API may change in future versions"
  },
  {
    "path": "website/content/en/preview/concepts/nodepools.md",
    "content": "---\ntitle: \"NodePools\"\nlinkTitle: \"NodePools\"\nweight: 10\ndescription: >\n  Configure Karpenter with NodePools\n---\n\nWhen you first installed Karpenter, you set up a default NodePool. The NodePool sets constraints on the nodes that can be created by Karpenter and the pods that can run on those nodes. The NodePool can be set to do things like:\n\n* Define taints to limit the pods that can run on nodes Karpenter creates\n* Define any startup taints to inform Karpenter that it should taint the node initially, but that the taint is temporary.\n* Limit node creation to certain zones, instance types, and computer architectures\n* Set defaults for node expiration\n\nYou can change your NodePool or add other NodePools to Karpenter.\nHere are things you should know about NodePools:\n\n* Karpenter won't do anything if there is not at least one NodePool configured.\n* Each NodePool that is configured is looped through by Karpenter.\n* If Karpenter encounters a taint in the NodePool that is not tolerated by a Pod, Karpenter won't use that NodePool to provision the pod.\n* If Karpenter encounters a startup taint in the NodePool 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.\n* It is recommended to create NodePools that are mutually exclusive. So no Pod should match multiple NodePools. If multiple NodePools are matched, Karpenter will use the NodePool with the highest [weight](#specweight).\n\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nObjects for setting Kubelet features have been moved from the NodePool spec to the EC2NodeClasses spec, to not require other Karpenter providers to support those features.\n{{% /alert %}}\n\nFor some example `NodePool` configurations, see the [examples in the Karpenter GitHub repository](https://github.com/aws/karpenter/blob/main/examples/v1/).\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\nspec:\n  # Template section that describes how to template out NodeClaim resources that Karpenter will provision\n  # Karpenter will consider this template to be the minimum requirements needed to provision a Node using this NodePool\n  # It will overlay this NodePool with Pods that need to schedule to further constrain the NodeClaims\n  # Karpenter will provision to launch new Nodes for the cluster\n  template:\n    metadata:\n      # Labels are arbitrary key-values that are applied to all nodes\n      labels:\n        billing-team: my-team\n\n      # Annotations are arbitrary key-values that are applied to all nodes\n      annotations:\n        example.com/owner: \"my-team\"\n    spec:\n      # References the Cloud Provider's NodeClass resource, see your cloud provider specific documentation\n      nodeClassRef:\n        group: karpenter.k8s.aws  # Updated since only a single version will be served\n        kind: EC2NodeClass\n        name: default\n\n      # Provisioned nodes will have these taints\n      # Taints may prevent pods from scheduling if they are not tolerated by the pod.\n      taints:\n        - key: example.com/special-taint\n          effect: NoSchedule\n\n      # Provisioned nodes will have these taints, but pods do not need to tolerate these taints to be provisioned by this\n      # NodePool. These taints are expected to be temporary and some other entity (e.g. a DaemonSet) is responsible for\n      # removing the taint after it has finished initializing the node.\n      startupTaints:\n        - key: example.com/another-taint\n          effect: NoSchedule\n\n      # The amount of time a Node can live on the cluster before being removed\n      # Avoiding long-running Nodes helps to reduce security vulnerabilities as well as to reduce the chance of issues that can plague Nodes with long uptimes such as file fragmentation or memory leaks from system processes\n      # You can choose to disable expiration entirely by setting the string value 'Never' here\n\n      # Note: changing this value in the nodepool will drift the nodeclaims.\n      expireAfter: 720h | Never\n\n      # The amount of time that a node can be draining before it's forcibly deleted. A node begins draining when a delete call is made against it, starting\n      # its finalization flow. Pods with TerminationGracePeriodSeconds will be deleted preemptively before this terminationGracePeriod ends to give as much time to cleanup as possible.\n      # If your pod's terminationGracePeriodSeconds is larger than this terminationGracePeriod, Karpenter may forcibly delete the pod\n      # before it has its full terminationGracePeriod to cleanup.\n\n      # Note: changing this value in the nodepool will drift the nodeclaims.\n      terminationGracePeriod: 48h\n\n      # Requirements that constrain the parameters of provisioned nodes.\n      # These requirements are combined with pod.spec.topologySpreadConstraints, pod.spec.affinity.nodeAffinity, pod.spec.affinity.podAffinity, and pod.spec.nodeSelector rules.\n      # Operators { In, NotIn, Exists, DoesNotExist, Gt, Lt, Gte, and Lte } are supported.\n      # https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#operators\n      requirements:\n        - key: \"karpenter.k8s.aws/instance-category\"\n          operator: In\n          values: [\"c\", \"m\", \"r\"]\n          # minValues here enforces the scheduler to consider at least that number of unique instance-category to schedule the pods.\n          # This field is ALPHA and can be dropped or replaced at any time\n          minValues: 2\n        - key: \"karpenter.k8s.aws/instance-family\"\n          operator: In\n          values: [\"m5\",\"m5d\",\"c5\",\"c5d\",\"c4\",\"r4\"]\n          minValues: 5\n        - key: \"karpenter.k8s.aws/instance-cpu\"\n          operator: In\n          values: [\"4\", \"8\", \"16\", \"32\"]\n        - key: \"karpenter.k8s.aws/instance-hypervisor\"\n          operator: In\n          values: [\"nitro\"]\n        - key: \"karpenter.k8s.aws/instance-generation\"\n          operator: Gte\n          values: [\"3\"]\n        - key: \"topology.kubernetes.io/zone\"\n          operator: In\n          values: [\"us-west-2a\", \"us-west-2b\"]\n        - key: \"kubernetes.io/arch\"\n          operator: In\n          values: [\"arm64\", \"amd64\"]\n        - key: \"karpenter.sh/capacity-type\"\n          operator: In\n          values: [\"spot\", \"on-demand\", \"reserved\"]\n\n  # Disruption section which describes the ways in which Karpenter can disrupt and replace Nodes\n  # Configuration in this section constrains how aggressive Karpenter can be with performing operations\n  # like rolling Nodes due to them hitting their maximum lifetime (expiry) or scaling down nodes to reduce cluster cost\n  disruption:\n    # Describes which types of Nodes Karpenter should consider for consolidation\n    # If using 'WhenEmptyOrUnderutilized', Karpenter will consider all nodes for consolidation and attempt to remove or replace Nodes when it discovers that the Node is empty or underutilized and could be changed to reduce cost\n    # If using `WhenEmpty`, Karpenter will only consider nodes for consolidation that contain no workload pods\n    consolidationPolicy: WhenEmptyOrUnderutilized | WhenEmpty\n\n    # The amount of time Karpenter should wait to consolidate a node after a pod has been added or removed from the node.\n    # You can choose to disable consolidation entirely by setting the string value 'Never' here\n    consolidateAfter: 1m | Never # Added to allow additional control over consolidation aggressiveness\n\n    # Budgets control the speed Karpenter can scale down nodes.\n    # Karpenter will respect the minimum of the currently active budgets, and will round up\n    # when considering percentages. Duration and Schedule must be set together.\n    budgets:\n    - nodes: 10%\n    # On Weekdays during business hours, don't do any deprovisioning.\n    - schedule: \"0 9 * * mon-fri\"\n      duration: 8h\n      nodes: \"0\"\n\n  # Optional: Number of nodes to maintain for static capacity\n  # When set, NodePool operates in static mode maintaining fixed node count\n  replicas: 5\n\n  # Resource limits constrain the total size of the pool.\n  # Limits prevent Karpenter from creating new instances once the limit is exceeded.\n  limits:\n    cpu: \"1000\"\n    memory: 1000Gi\n    # For static NodePools, limits.nodes constrains maximum node count during scaling/drift\n    # Note : Supported only for static NodePools\n    nodes: 10\n\n  # Priority given to the NodePool when the scheduler considers which NodePool\n  # to select. Higher weights indicate higher priority when comparing NodePools.\n  # Specifying no weight is equivalent to specifying a weight of 0.\n  # Note: weight cannot be set when replicas is specified\n  weight: 10\nstatus:\n  conditions:\n    - type: Initialized\n      status: \"False\"\n      observedGeneration: 1\n      lastTransitionTime: \"2024-02-02T19:54:34Z\"\n      reason: NodeClaimNotLaunched\n      message: \"NodeClaim hasn't succeeded launch\"\n  # Current node count for the NodePool\n  nodes: 5\n  resources:\n    cpu: \"20\"\n    memory: \"8192Mi\"\n    ephemeral-storage: \"100Gi\"\n```\n\n## metadata.name\nThe name of the NodePool.\n\n## spec.template.metadata.labels\nArbitrary key/value pairs to apply to all nodes.\n\n## spec.template.metadata.annotations\nArbitrary key/value pairs to apply to all nodes.\n\n## spec.template.spec.nodeClassRef\n\nThis field points to the Cloud Provider NodeClass resource. See [EC2NodeClasses]({{<ref \"nodeclasses\" >}}) for details.\n\n## spec.template.spec.taints\n\nTaints to add to provisioned nodes. Pods that don't tolerate those taints could be prevented from scheduling.\nSee [Taints and Tolerations](https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/) for details.\n\n## spec.template.spec.startupTaints\n\nTaints that are added to nodes to indicate that a certain condition must be met, such as starting an agent or setting up networking, before the node is can be initialized.\nThese taints must be cleared before pods can be deployed to a node.\n\n## spec.template.spec.expireAfter\n\nThe amount of time a Node can live on the cluster before being deleted by Karpenter. Nodes will begin draining once it's expiration has been hit.\n\n## spec.template.spec.terminationGracePeriod\n\nThe amount of time a Node can be draining before Karpenter forcibly cleans up the node. Pods blocking eviction like PDBs and do-not-disrupt will be respected during draining until the `terminationGracePeriod` is reached, where those pods will be forcibly deleted.\n\n## spec.template.spec.requirements\n\nKubernetes 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 NodePool API.\n\nIn 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).\n\nThese well-known labels may be specified at the NodePool level, or in a workload definition (e.g., nodeSelector on a pod.spec). Nodes are chosen using both the NodePool'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 NodePool's requirements. If a requirement is not defined for a well known label, any value available to the cloud provider may be chosen.\n\nFor example, an instance type may be specified using a nodeSelector in a pod spec. If the instance type requested is not included in the NodePool list and the NodePool has instance type requirements, Karpenter will not create a node or schedule the pod.\n\n**Static NodePool**\n\nThe requirements for static NodePool behaves identically to dynamic pools — it defines the constraints for all NodeClaims launched under that NodePool.\n\nThe NodeClaim requirements are directly derived from the NodeClaimTemplate on the NodePool. These are evaluated once per NodeClaim at creation, meaning the selection is based solely on what the template allows.\nAs a result, NodeClaims created for the same static NodePool could result in different instance types being launched depending on instance availability so long as those instance types are compatible with the NodePool's requirements.\n\n### Well-Known Labels\n\n#### Instance Types\n\n- key: `node.kubernetes.io/instance-type`\n- key: `karpenter.k8s.aws/instance-family`\n- key: `karpenter.k8s.aws/instance-category`\n- key: `karpenter.k8s.aws/instance-generation`\n- key: `karpenter.k8s.aws/instance-capability-flex`\n\nGenerally, 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.\n\nReview [AWS instance types](../../reference/instance-types). Most instance types are supported with the exclusion of [non-HVM](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/virtualization_types.html).\n\n#### Availability Zones\n\n- key: `topology.kubernetes.io/zone`\n- value example: `us-east-1c`\n- value list: `aws ec2 describe-availability-zones --region <region-name>`\n\nKarpenter 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.\n\n[Learn more about Availability Zone\nIDs.](https://docs.aws.amazon.com/ram/latest/userguide/working-with-az-ids.html)\n\n#### Architecture\n\n- key: `kubernetes.io/arch`\n- values\n  - `amd64`\n  - `arm64`\n\nKarpenter supports `amd64` nodes, and `arm64` nodes.\n\n#### Operating System\n - key: `kubernetes.io/os`\n - values\n   - `linux`\n   - `windows`\n\nKarpenter supports `linux` and `windows` operating systems.\n\n#### Capacity Type\n\n- key: `karpenter.sh/capacity-type`\n- values\n  - `spot`\n  - `on-demand`\n  - `reserved`\n\nKarpenter supports specifying capacity type, which is analogous to [EC2 purchase options](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-purchasing-options.html). Note that the `reserved` capacity type refers to [capacity reservations](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/capacity-reservation-overview.html) (on-demand capacity reservations and capacity blocks) not [reserved instances](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-reserved-instances.html) (RIs).\n\nIf a NodePool is compatible with multiple capacity types, Karpenter will prioritize `reserved` capacity, followed by `spot`, then finally `on-demand`.\nIf the provider API (e.g. EC2 Fleet's API) indicates capacity is unavailable, Karpenter caches that result across all attempts to provision EC2 capacity for that instance type and zone for the next 3 minutes.\nIf there are no other possible offerings available for a higher priority capacity type, Karpenter will attempt to fallback to a lower priority capacity type, generally within milliseconds.\n\nKarpenter also allows `karpenter.sh/capacity-type` to be used as a topology key for enforcing topology-spread.\n\n#### Tenancy\n\n- key: `karpenter.k8s.aws/instance-tenancy`\n- values\n    - `default`\n    - `dedicated`\n\nKarpenter supports specifying tenancy type.\n\nIf a NodeClaim requires dedicated tenancy, then it will launch on a [Dedicated Instance](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/dedicated-instance.html).  If the NodeClaim does not specify the label, or if both types are allowed, then it will launch with default tenancy.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nThere is currently a limit of 100 on the total number of requirements on both the NodePool and the NodeClaim. It's important to note that `spec.template.metadata.labels` are also propagated as requirements on the NodeClaim when it's created, meaning that you can't have more than 100 requirements and labels combined set on your NodePool.\n{{% /alert %}}\n\n### Min Values\n\nAlong with the combination of [key,operator,values] in the requirements, Karpenter also supports `minValues` in the NodePool requirements block, allowing the scheduler to be aware of user-specified flexibility minimums while scheduling pods to a cluster. Depending on the policy configured via the flag `--min-values-policy` or environment variable `MIN_VALUES_POLICY`, if Karpenter cannot meet this minimum flexibility for each key when scheduling a pod, it will either fail the scheduling loop for that NodePool, either falling back to another NodePool which meets the pod requirements or failing scheduling the pod altogether (when policy is set to `Strict`) or relax `minValues` until they can be met (when policy is set to `BestEffort`).\n\nFor spot instances, you should specify `karpenter.sh/capacity-type: spot` in your requirements. For example, the below spec will use spot instance type for all provisioned instances and enforces `minValues` to various keys where it is defined\ni.e at least 2 unique instance families from [c,m,r], 5 unique instance families [eg: \"m5\",\"m5d\",\"r4\",\"c5\",\"c5d\",\"c4\" etc], 10 unique instance types [eg: \"c5.2xlarge\",\"c4.xlarge\" etc] is required for scheduling the pods.\n\n```yaml\nspec:\n  template:\n    spec:\n      requirements:\n        - key: kubernetes.io/arch\n          operator: In\n          values: [\"amd64\"]\n        - key: kubernetes.io/os\n          operator: In\n          values: [\"linux\"]\n        - key: karpenter.sh/capacity-type\n          operator: In\n          values: [\"spot\"]\n        - key: karpenter.k8s.aws/instance-category\n          operator: In\n          values: [\"c\", \"m\", \"r\"]\n          minValues: 2\n        - key: karpenter.k8s.aws/instance-family\n          operator: Exists\n          minValues: 5\n        - key: node.kubernetes.io/instance-type\n          operator: Exists\n          minValues: 10\n        - key: karpenter.k8s.aws/instance-generation\n          operator: Gte\n          values: [\"3\"]\n```\n\nNote that `minValues` can be used with multiple operators and multiple requirements. And if the `minValues` are defined with multiple operators for the same requirement key, scheduler considers the max of all the `minValues` for that requirement. For example, the below spec requires scheduler to consider at least 5 instance-family to schedule the pods.\n\n```yaml\nspec:\n  template:\n    spec:\n      requirements:\n        - key: kubernetes.io/arch\n          operator: In\n          values: [\"amd64\"]\n        - key: kubernetes.io/os\n          operator: In\n          values: [\"linux\"]\n        - key: karpenter.k8s.aws/instance-category\n          operator: In\n          values: [\"c\", \"m\", \"r\"]\n          minValues: 2\n        - key: karpenter.k8s.aws/instance-family\n          operator: Exists\n          minValues: 5\n        - key: karpenter.k8s.aws/instance-family\n          operator: In\n          values: [\"m5\",\"m5d\",\"c5\",\"c5d\",\"c4\",\"r4\"]\n          minValues: 3\n        - key: node.kubernetes.io/instance-type\n          operator: Exists\n          minValues: 10\n        - key: karpenter.k8s.aws/instance-generation\n          operator: Gte\n          values: [\"3\"]\n```\n\n{{% alert title=\"Recommended\" color=\"primary\" %}}\nKarpenter allows you to be extremely flexible with your NodePools by only constraining your instance types in ways that are absolutely necessary for your cluster. By default, Karpenter will enforce that you specify the `spec.template.spec.requirements` field, but will not enforce that you specify any requirements within the field. If you choose to specify `requirements: []`, this means that you will completely flexible to _all_ instance types that your cloud provider supports.\n\nThough Karpenter doesn't enforce these defaults, for most use-cases, we recommend that you specify _some_ requirements to avoid odd behavior or exotic instance types. Below, is a high-level recommendation for requirements that should fit the majority of use-cases for generic workloads\n\n```yaml\nspec:\n  template:\n    spec:\n      requirements:\n        - key: kubernetes.io/arch\n          operator: In\n          values: [\"amd64\"]\n        - key: kubernetes.io/os\n          operator: In\n          values: [\"linux\"]\n        - key: karpenter.sh/capacity-type\n          operator: In\n          values: [\"on-demand\"]\n        - key: karpenter.k8s.aws/instance-category\n          operator: In\n          values: [\"c\", \"m\", \"r\"]\n        - key: karpenter.k8s.aws/instance-generation\n          operator: Gte\n          values: [\"3\"]\n```\n\n{{% /alert %}}\n\n\n## spec.disruption\n\nYou can configure Karpenter to disrupt Nodes through your NodePool in multiple ways. You can use `spec.disruption.consolidationPolicy`, `spec.disruption.consolidateAfter`, or `spec.template.spec.expireAfter`.\nYou can also rate limit Karpenter's disruption through the NodePool's `spec.disruption.budgets`.\nRead [Disruption]({{<ref \"disruption\" >}}) for more.\n\n## spec.replicas\n\nOptional field that enables static capacity mode. When specified, the NodePool maintains a fixed number of nodes regardless of pod demand.\n\n**Static NodePool Constraints:**\n- Cannot be removed once set (NodePool cannot switch between static and dynamic modes)\n- Only `limits.nodes` is allowed in limits section\n- `weight` field cannot be set\n- Nodes are not considered for consolidation\n- Scale operations bypass node disruption budgets but respect PodDisruptionBudgets\n\n**Scaling:** Use `kubectl scale nodepool <name> --replicas=<count>` to change replica count.\n\n## spec.limits\n\nThe NodePool spec includes a limits section (`spec.limits`), which constrains the maximum amount of resources that the NodePool can consume.\n\nIf the `NodePool.spec.limits` section is unspecified, it means that there is no default limitation on resource allocation. In this case, the maximum resource consumption is governed by the quotas set by your cloud provider. If a limit has been exceeded, nodes provisioning is prevented until some nodes have been terminated.\n\n**For Static NodePools:** Only `limits.nodes` is supported. This field constrains the maximum number of nodes during scaling operations or drift replacement. Note that `limits.nodes` is support only on static NodePools.\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\nspec:\n  replicas: 10\n  template:\n    spec:\n      requirements:\n        - key: karpenter.sh/capacity-type\n          operator: In\n          values: [\"spot\"]\n  limits:\n    cpu: 1000\n    memory: 1000Gi\n    nvidia.com/gpu: 2\n    # For static NodePools, only nodes limit is allowed\n    nodes: 20\n```\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nKarpenter provisioning is highly parallel. Because of this, limit checking is eventually consistent, which can result in overrun during rapid scale outs.\n{{% /alert %}}\n\nCPU 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.\n\nMemory limits are described with a [`BinarySI` value, such as 1000Gi.](https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/#meaning-of-memory)\n\nYou can view the current consumption of cpu and memory on your cluster by running:\n```\nkubectl get nodepool -o=jsonpath='{.items[0].status}'\n```\n\nReview 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`.\n\n## spec.weight\n\nKarpenter allows you to describe NodePool 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).\n\nFor more information on weighting NodePools, see the [Weighted NodePools section]({{<ref \"scheduling#weighted-nodepools\" >}}) in the scheduling docs.\n\n## status.conditions\n[Conditions](https://github.com/kubernetes/apimachinery/blob/f14778da5523847e4c07346e3161a4b4f6c9186e/pkg/apis/meta/v1/types.go#L1523) objects add observability features to Karpenter.\n* The `status.conditions.type` object reflects node status, such as `Initialized` or `Available`.\n* The status of the condition, `status.conditions.status`, indicates if the condition is `True` or `False`.\n* The `status.conditions.observedGeneration` indicates  if the instance is out of date with the current state of `.metadata.generation`.\n* The `status.conditions.lastTransitionTime` object contains a programatic identifier that indicates the time of the condition's previous transition.\n* The `status.conditions.reason` object indicates the reason for the condition's previous transition.\n* The `status.conditions.message` object provides human-readable details about the condition's previous transition.\n\nNodePools have the following status conditions:\n\n| Condition Type      | Description                                                                                                                                       |\n|---------------------|---------------------------------------------------------------------------------------------------------------------------------------------------|\n| NodeClassReady      | Underlying nodeClass is ready                                                                                                                     |\n| ValidationSucceeded | NodePool CRD validation succeeded                                                                                                                 |\n| Ready               | Top level condition that indicates if the nodePool is ready. This condition will not be true until all the other conditions on nodePool are true. |\n\nIf a NodePool is not ready, it will not be considered for scheduling.\n\n## status.nodes\nThis field shows the current number of nodes managed by the NodePool.\n\n## status.resources\nObjects under `status.resources` provide information about the status of resources such as `cpu`, `memory`, and `ephemeral-storage`.\n\n## Examples\n\n### Isolating Expensive Hardware\n\nA NodePool can be set up to only provision nodes on particular processor types.\nThe following example sets a taint that only allows pods with tolerations for Nvidia GPUs to be scheduled:\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: gpu\nspec:\n  disruption:\n    consolidationPolicy: WhenEmptyOrUnderutilized\n  template:\n    spec:\n      requirements:\n      - key: node.kubernetes.io/instance-type\n        operator: In\n        values: [\"p3.8xlarge\", \"p3.16xlarge\"]\n      taints:\n      - key: nvidia.com/gpu\n        value: \"true\"\n        effect: NoSchedule\n```\nIn order for a pod to run on a node defined in this NodePool, it must tolerate `nvidia.com/gpu` in its pod spec.\n\n### Static NodePool\n\nA NodePool can be configured for static capacity by setting the `replicas` field. This maintains a fixed number of nodes regardless of pod demand.\nUsers who want to spread nodes across zones can do so explicitly by:\n- Creating multiple static NodePools, each pinned to a specific AZ.\n\nThe following example creates a static NodePool with 10 replicas:\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: static-capacity\nspec:\n  replicas: 10\n  template:\n    spec:\n      requirements:\n      - key: node.kubernetes.io/instance-type\n        operator: In\n        values: [\"m5.large\", \"m5.xlarge\"]\n      - key: topology.kubernetes.io/zone\n        operator: In\n        values: [\"us-west-2a\"]  # All replicas will come up in specified zone\n  limits:\n    nodes: 15  # Maximum nodes during scaling/drift\n  disruption:\n    budgets:\n    - nodes: 20%  # Disruption budget for drift replacement\n```\n\n### Cilium Startup Taint\n\nPer the Cilium [docs](https://docs.cilium.io/en/stable/installation/taints/#taint-effects), 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.\n\nFailure to provide accurate `startupTaints` can result in Karpenter continually provisioning new nodes. When the new node joins and the startup taint that Karpenter is unaware of is added, Karpenter now considers the pending pod to be unschedulable to this node. Karpenter will attempt to provision yet another new node to schedule the pending pod.\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: cilium-startup\nspec:\n  disruption:\n    consolidationPolicy: WhenEmptyOrUnderutilized\n  template:\n    spec:\n      startupTaints:\n      - key: node.cilium.io/agent-not-ready\n        value: \"true\"\n        effect: NoExecute\n```\n"
  },
  {
    "path": "website/content/en/preview/concepts/scheduling.md",
    "content": "---\ntitle: \"Scheduling\"\nlinkTitle: \"Scheduling\"\nweight: 40\ndescription: >\n  Learn about scheduling workloads with Karpenter\n---\n\nIf 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.\nHowever, 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.\nReasons for constraining where your pods run could include:\n\n* Needing to run in zones where dependent applications or storage are available\n* Requiring certain kinds of processors or other hardware\n* Wanting to use techniques like topology spread to help ensure high availability\n\nYour Cloud Provider defines the first layer of constraints, including all instance types, architectures, zones, and purchase types available to its cloud.\nThe cluster administrator adds the next layer of constraints by creating one or more NodePools.\nThe final layer comes from you adding specifications to your Kubernetes pod deployments.\nPod scheduling constraints must fall within a NodePool's constraints or the pods will not deploy.\nFor example, if the NodePool sets limits that allow only a particular zone to be used, and a pod asks for a different zone, it will not be scheduled.\n\nConstraints you can request include:\n\n* **Resource requests**: Request that certain amount of memory or CPU be available.\n* **Node selection**: Choose to run on a node that is has a particular label (`nodeSelector`).\n* **Node affinity**: Draws a pod to run on nodes with particular attributes (affinity).\n* **Topology spread**: Use topology spread to help ensure availability of the application.\n* **Pod affinity/anti-affinity**: Draws pods towards or away from topology domains based on the scheduling of other pods.\n\nKarpenter supports standard Kubernetes scheduling constraints.\nThis allows you to define a single set of rules that apply to both existing and provisioned capacity.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nKarpenter supports specific [Well-Known Labels, Annotations and Taints](https://kubernetes.io/docs/reference/labels-annotations-taints/) that are useful for scheduling.\n{{% /alert %}}\n\n## Resource requests\n\nWithin a Pod spec, you can both make requests and set limits on resources a pod needs, such as CPU and memory.\nFor example:\n\n```yaml\napiVersion: v1\nkind: Pod\nmetadata:\n  name: myapp\nspec:\n  containers:\n  - name: app\n    image: myimage\n    resources:\n      requests:\n        memory: \"128Mi\"\n        cpu: \"500m\"\n      limits:\n        memory: \"256Mi\"\n        cpu: \"1000m\"\n```\nIn this example, the container is requesting 128MiB of memory and .5 CPU.\nIts limits are set to 256MiB of memory and 1 CPU.\nInstance type selection math only uses `requests`, but `limits` may be configured to enable resource oversubscription.\n\n\nSee [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 [NodePools]({{<ref \"./nodepools\" >}}) for a list of supported resources.\n\n### Accelerators/GPU Resources\n\nAccelerator (e.g., GPU) values include\n- `nvidia.com/gpu`\n- `amd.com/gpu`\n- `aws.amazon.com/neuron`\n- `aws.amazon.com/neuroncore`\n- `habana.ai/gaudi`\n\nKarpenter supports accelerators, such as GPUs.\n\nAdditionally, include a resource requirement in the workload manifest. This will cause the GPU dependent pod to be scheduled onto the appropriate node.\n\nHere is an example of an accelerator resource in a workload manifest (e.g., pod):\n\n```yaml\nspec:\n  template:\n    spec:\n      containers:\n      - resources:\n          limits:\n            nvidia.com/gpu: \"1\"\n```\n{{% alert title=\"Note\" color=\"primary\" %}}\nIf you are provisioning nodes that will utilize accelerators/GPUs, you need to deploy the appropriate device plugin daemonset.\nWithout the respective device plugin daemonset, Karpenter will not see those nodes as initialized.\nRefer 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:\n* `nvidia.com/gpu`: [NVIDIA device plugin for Kubernetes](https://github.com/NVIDIA/k8s-device-plugin)\n* `amd.com/gpu`: [AMD GPU device plugin for Kubernetes](https://github.com/RadeonOpenCompute/k8s-device-plugin)\n* `aws.amazon.com/neuron`/`aws.amazon.com/neuroncore`: [AWS Neuron device plugin for Kubernetes](https://awsdocs-neuron.readthedocs-hosted.com/en/latest/containers/kubernetes-getting-started.html#neuron-device-plugin)\n* `habana.ai/gaudi`: [Habana device plugin for Kubernetes](https://github.com/HabanaAI/habanalabs-k8s-device-plugin)\n  {{% /alert %}}\n\n#### AWS Neuron Resources\n\nThe [Neuron scheduler extension](https://awsdocs-neuron.readthedocs-hosted.com/en/latest/containers/kubernetes-getting-started.html#neuron-scheduler-extension) is required for pods that require more than one Neuron core (`aws.amazon.com/neuroncore`) or device (`aws.amazon.com/neuron`) resource, but less than all available Neuron cores or devices on a node. From the AWS Neuron documentation:\n\n> The Neuron scheduler extension finds sets of directly connected devices with minimal communication latency when scheduling containers. On Inf1 and Inf2 instance types where Neuron devices are connected through a ring topology, the scheduler finds sets of contiguous devices. For example, for a container requesting 3 Neuron devices the scheduler might assign Neuron devices 0,1,2 to the container if they are available but never devices 0,2,4 because those devices are not directly connected. On Trn1.32xlarge and Trn1n.32xlarge instance types where devices are connected through a 2D torus topology, the Neuron scheduler enforces additional constraints that containers request 1, 4, 8, or all 16 devices. If your container requires a different number of devices, such as 2 or 5, we recommend that you use an Inf2 instance instead of Trn1 to benefit from more advanced topology.\n\nHowever, Karpenter is not aware of the decisions made by the Neuron scheduler extension which precludes it from making any optimizations to consolidate and bin pack pods requiring Neuron resources. To ensure Karpenter's bin-packing is consistent with the decisions made by the scheduler extension, containers must have like-sized, power of 2 requests (e.g. 1, 2, 4, etc). Failing to do so may result in permanently pending pods.\n\n### Pod ENI Resources (Security Groups for Pods)\n[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.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nYou 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.\n{{% /alert %}}\n{{% alert title=\"Note\" color=\"primary\" %}}\nIf you've enabled [Security Groups per Pod](https://aws.github.io/aws-eks-best-practices/networking/sgpp/), one of the instance's ENIs is reserved. To avoid discrepancies between the `maxPods` value and the node's supported pod density, you need to set [RESERVED_ENIS]({{<ref \"../reference/settings\" >}})=1.\n{{% /alert %}}\n\nHere is an example of a pod-eni resource defined in a deployment manifest:\n```\nspec:\n  template:\n    spec:\n      containers:\n      - resources:\n          limits:\n            vpc.amazonaws.com/pod-eni: \"1\"\n```\n\n{{% alert title=\"Windows Support Notice\" color=\"warning\" %}}\nSecurity groups for pods are [currently unsupported for Windows nodes](https://docs.aws.amazon.com/eks/latest/userguide/security-groups-for-pods.html)\n{{% /alert %}}\n\n## Selecting nodes\n\nWith `nodeSelector` you can ask for a node that matches selected key-value pairs.\nThis can include well-known labels or custom labels you create yourself.\n\nYou 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.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nKarpenter extends the upstream Kubernetes requirement operators with `Gte` (>=) and `Lte` (<=) for more intuitive numeric comparisons on labels like `karpenter.k8s.aws/instance-cpu` or `karpenter.k8s.aws/instance-memory`.\n{{% /alert %}}\n\n### Labels\nWell-known labels may be specified as NodePool requirements or pod scheduling constraints. You can also define your own custom labels by specifying `requirements` or `labels` on your NodePool and select them using `nodeAffinity` or `nodeSelectors` on your Pods.\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nTake 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.\n{{% /alert %}}\n\n#### Well-Known Labels\n\n| Label                                                          | Example              | Description                                                                                                                                                                                                                               |\n| -------------------------------------------------------------- |----------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| 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))                                                                                               |\n| node.kubernetes.io/instance-type                               | g4dn.8xlarge         | Instance types are defined by your cloud provider ([aws](https://aws.amazon.com/ec2/instance-types/))                                                                                                                                     |\n| node.kubernetes.io/windows-build                               | 10.0.17763           | Windows OS build in the format \"MajorVersion.MinorVersion.BuildNumber\". Can be `10.0.17763` for WS2019, `10.0.20348` for WS2022, or `10.0.26100` for WS2025. ([k8s](https://kubernetes.io/docs/reference/labels-annotations-taints/#nodekubernetesiowindows-build)) |\n| kubernetes.io/os                                               | linux                | Operating systems are defined by [GOOS values](https://github.com/golang/go/blob/master/src/internal/syslist/syslist.go) (`KnownOS`) on the instance                                                                                      |\n| kubernetes.io/arch                                             | amd64                | Architectures are defined by [GOARCH values](https://github.com/golang/go/blob/master/src/internal/syslist/syslist.go) (`KnownArch`) on the instance                                                                                      |\n| karpenter.sh/capacity-type                                     | spot                 | Capacity types include `reserved`, `spot`, and `on-demand`                                                                                                                                                                                |\n| karpenter.sh/nodepool                                          | default              | The name of the nodepool used to provision the node.                                                                                                                                                                                      |\n| karpenter.k8s.aws/capacity-reservation-id                      | cr-56fac701cc1951b03 | [AWS Specific] The capacity reservation ID. Only present on reserved nodes.                                                                                                                                                               |\n| karpenter.k8s.aws/capacity-reservation-type                    | default              | [AWS Specific] The capacity reservation type. Can be `default` or `capacity-block`. Only present on reserved nodes.                                                                                                                       |\n| karpenter.k8s.aws/capacity-reservation-interruptible           | true                 | [AWS Specific] Whether the capacity reservation is interruptible. Only present on reserved nodes.                                                                                                                                            |\n| karpenter.k8s.aws/ec2nodeclass                                 | default              | [AWS Specific] The name of the ec2 nodeclass used to provision the node                                                                                                                                                                   |\n| karpenter.k8s.aws/instance-hypervisor                          | nitro                | [AWS Specific] Instance types that use a specific hypervisor                                                                                                                                                                              |\n| karpenter.k8s.aws/instance-encryption-in-transit-supported     | true                 | [AWS Specific] Instance types that support (or not) in-transit encryption                                                                                                                                                                 |\n| karpenter.k8s.aws/instance-category                            | g                    | [AWS Specific] Instance types of the same category, usually the string before the generation number                                                                                                                                       |\n| karpenter.k8s.aws/instance-generation                          | 4                    | [AWS Specific] Instance type generation number within an instance category                                                                                                                                                                |\n| karpenter.k8s.aws/instance-family                              | g4dn                 | [AWS Specific] Instance types of similar properties but different resource quantities                                                                                                                                                     |\n| karpenter.k8s.aws/instance-size                                | 8xlarge              | [AWS Specific] Instance types of similar resource quantities but different properties                                                                                                                                                     |\n| karpenter.k8s.aws/instance-cpu                                 | 32                   | [AWS Specific] Number of CPUs on the instance                                                                                                                                                                                             |\n| karpenter.k8s.aws/instance-cpu-manufacturer                    | aws                  | [AWS Specific] Name of the CPU manufacturer                                                                                                                                                                                               |\n| karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz       | 3600                 | [AWS Specific] The CPU clock speed, in MHz                                                                                                                                                                                                |\n| karpenter.k8s.aws/instance-memory                              | 131072               | [AWS Specific] Number of mebibytes of memory on the instance                                                                                                                                                                              |\n| karpenter.k8s.aws/instance-ebs-bandwidth                       | 9500                 | [AWS Specific] Number of [maximum megabits](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-optimized.html#ebs-optimization-performance) of EBS available on the instance                                                         |\n| 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                                                                           |\n| karpenter.k8s.aws/instance-pods                                | 110                  | [AWS Specific] Number of pods the instance supports                                                                                                                                                                                       |\n| karpenter.k8s.aws/instance-gpu-name                            | t4                   | [AWS Specific] Name of the GPU on the instance, if available                                                                                                                                                                              |\n| karpenter.k8s.aws/instance-gpu-manufacturer                    | nvidia               | [AWS Specific] Name of the GPU manufacturer                                                                                                                                                                                               |\n| karpenter.k8s.aws/instance-gpu-count                           | 1                    | [AWS Specific] Number of GPUs on the instance                                                                                                                                                                                             |\n| karpenter.k8s.aws/instance-gpu-memory                          | 16384                | [AWS Specific] Number of mebibytes of memory on the GPU                                                                                                                                                                                   |\n| karpenter.k8s.aws/instance-local-nvme                          | 900                  | [AWS Specific] Number of gibibytes of local nvme storage on the instance                                                                                                                                                                  |\n| karpenter.k8s.aws/instance-capability-flex                     | true                 | [AWS Specific] Instance with capacity flex                                                                                                                                                                                                |\n| karpenter.k8s.aws/instance-tenancy                             | default              | [AWS Specific] Tenancy types include `default`, and `dedicated`                                                                                                                                                                           |\n| topology.k8s.aws/zone-id                                       | use1-az1             | [AWS Specific] Globally consistent [zone id](https://docs.aws.amazon.com/global-infrastructure/latest/regions/az-ids.html)                                                                                                                |\n\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nKarpenter translates the following deprecated labels to their stable equivalents: `failure-domain.beta.kubernetes.io/zone`, `failure-domain.beta.kubernetes.io/region`, `beta.kubernetes.io/arch`, `beta.kubernetes.io/os`, and `beta.kubernetes.io/instance-type`.\n{{% /alert %}}\n\n#### User-Defined Labels\n\nKarpenter 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 NodePool requirements with the `Exists` operator:\n\n```yaml\nrequirements:\n  - key: user.defined.label/type\n    operator: Exists\n```\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nThere is currently a limit of 100 on the total number of requirements on both the NodePool and the NodeClaim. It's important to note that `spec.template.metadata.labels` are also propagated as requirements on the NodeClaim when it's created, meaning that you can't have more than 100 requirements and labels combined set on your NodePool.\n{{% /alert %}}\n\n#### Node selectors\n\nHere is an example of a `nodeSelector` for selecting nodes:\n\n```yaml\nnodeSelector:\n  topology.kubernetes.io/zone: us-west-2a\n  karpenter.sh/capacity-type: spot\n```\nThis example features a well-known label (`topology.kubernetes.io/zone`) and a label that is well known to Karpenter (`karpenter.sh/capacity-type`).\n\nIf you want to create a custom label, you should do that at the NodePool level.\nThen the pod can declare that custom label.\n\n\nSee [nodeSelector](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#nodeselector) in the Kubernetes documentation for details.\n\n## Preferences\n\nKarpenter is aware of preferences (node affinity, pod affinity, pod anti-affinity, and pod topology) and treats them as requirements in most circumstances. Karpenter uses these preferences when determining if a pod can schedule on a node (absent topology requirements), or when determining if a pod can be shifted to a new node.\n\nKarpenter starts by treating preferred affinities as required affinities when constructing requirements for a pod. When these requirements cannot be met, the pod's preferences are relaxed one-at-a-time by ascending weight (lowest weight is relaxed first), and the remaining requirements are tried again.\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter does not interpret preferred affinities as required when constructing topology requirements for scheduling to a node. If these preferences are necessary, required affinities should be used [as documented in Node Affinity](#node-affinity).\n{{% /alert %}}\n\n### Node affinity\n\nExamples below illustrate how to use Node affinity to include (`In`) and exclude (`NotIn`) objects.\nSee [Node affinity](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#node-affinity) for details.\nWhen setting rules, the following Node affinity types define how hard or soft each rule is:\n\n* **requiredDuringSchedulingIgnoredDuringExecution**: This is a hard rule that must be met.\n* **preferredDuringSchedulingIgnoredDuringExecution**: This is a preference, but the pod can run on a node where it is not guaranteed.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nPreferred affinities on pods can result in more nodes being created than expected because Karpenter will prefer to create new nodes to satisfy preferences, [see the preferences documentation](#preferences) for details.\n{{% /alert %}}\n\nThe `IgnoredDuringExecution` part of each tells the pod to keep running, even if conditions change on the node so the rules no longer matched.\nYou can think of these concepts as `required` and `preferred`, since Kubernetes never implemented other variants of these rules.\n\nAll examples below assume that the NodePool 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.\n\n```yaml\n affinity:\n   nodeAffinity:\n     requiredDuringSchedulingIgnoredDuringExecution:\n       nodeSelectorTerms:\n         - matchExpressions:\n           - key: \"topology.kubernetes.io/zone\"\n             operator: \"In\"\n             values: [\"us-west-2a\", \"us-west-2b\"]\n           - key: \"topology.kubernetes.io/zone\"\n             operator: \"In\"\n             values: [\"us-west-2b\"]\n```\n\nChanging the second operator to `NotIn` would allow the pod to run in `us-west-2a` only:\n\n```yaml\n           - key: \"topology.kubernetes.io/zone\"\n             operator: \"In\"\n             values: [\"us-west-2a\", \"us-west-2b\"]\n           - key: \"topology.kubernetes.io/zone\"\n             operator: \"NotIn\"\n             values: [\"us-west-2b\"]\n```\n\nContinuing to add to the example, `nodeAffinity` lets you define terms so if one term doesn't work it goes to the next one.\nHere, if `us-west-2a` is not available, the second term will cause the pod to run on a spot instance in `us-west-2d`.\n\n\n```yaml\n affinity:\n   nodeAffinity:\n     requiredDuringSchedulingIgnoredDuringExecution:\n       nodeSelectorTerms:\n         - matchExpressions: # OR\n           - key: \"topology.kubernetes.io/zone\" # AND\n             operator: \"In\"\n             values: [\"us-west-2a\", \"us-west-2b\"]\n           - key: \"topology.kubernetes.io/zone\" # AND\n             operator: \"NotIn\"\n             values: [\"us-west-2b\"]\n         - matchExpressions: # OR\n           - key: \"karpenter.sh/capacity-type\" # AND\n             operator: \"In\"\n             values: [\"spot\"]\n           - key: \"topology.kubernetes.io/zone\" # AND\n             operator: \"In\"\n             values: [\"us-west-2d\"]\n```\nIn general, Karpenter will go through each of the `nodeSelectorTerms` in order and take the first one that works.\nHowever, if Karpenter fails to provision on the first `nodeSelectorTerms`, it will try again using the second one.\nIf they all fail, Karpenter will fail to provision the pod.\nKarpenter will backoff and retry over time.\nSo if capacity becomes available, it will schedule the pod without user intervention.\n\n### Taints and tolerations\n\nTaints are the opposite of affinity.\nSetting 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 NodePool that was set up with a taint for only running pods that require a GPU, such as the following:\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: gpu\nspec:\n  template:\n    spec:\n      requirements:\n      - key: karpenter.k8s.aws/instance-family\n        operator: In\n        values:\n          - p3\n      taints:\n      - key: nvidia.com/gpu\n        value: \"true\"\n        effect: \"NoSchedule\"\n```\n\nFor a pod to request to run on a node that has this NodePool, it could set a toleration as follows:\n\n```yaml\napiVersion: v1\nkind: Pod\nmetadata:\n  name: mygpupod\nspec:\n  containers:\n  - name: gpuapp\n    resources:\n      requests:\n        nvidia.com/gpu: 1\n      limits:\n        nvidia.com/gpu: 1\n    image: mygpucontainer\n  tolerations:\n  - key: \"nvidia.com/gpu\"\n    operator: \"Exists\"\n    effect: \"NoSchedule\"\n```\nSee [Taints and Tolerations](https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/) in the Kubernetes documentation for details.\n\n### Topology Spread\n\nBy using the Kubernetes `topologySpreadConstraints` you can ask the NodePool 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.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nPreferred topology spread (`ScheduleAnyway`) can result in more nodes being created than expected because Karpenter will prefer to create new nodes to satisfy spread constraints, [see the preferences documentation](#preferences) for details.\n{{% /alert %}}\n\nFor example:\n\n```yaml\nspec:\n  topologySpreadConstraints:\n    - maxSkew: 1\n      topologyKey: \"topology.kubernetes.io/zone\"\n      whenUnsatisfiable: ScheduleAnyway\n      labelSelector:\n        matchLabels:\n          dev: jjones\n    - maxSkew: 1\n      topologyKey: \"kubernetes.io/hostname\"\n      whenUnsatisfiable: ScheduleAnyway\n      labelSelector:\n        matchLabels:\n          dev: jjones\n    - maxSkew: 1\n      topologyKey: \"karpenter.sh/capacity-type\"\n      whenUnsatisfiable: ScheduleAnyway\n      labelSelector:\n        matchLabels:\n          dev: jjones\n\n```\nAdding this to your podspec would result in:\n\n* Pods being spread across zones, hosts, and capacity-type (`topologyKey`).\n* 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.\n* No more than one pod difference in the number of pods on each host (`maxSkew`).\nFor example, if there were three nodes and five pods the pods could be spread 1, 2, 2 or 2, 1, 2 and so on.\nIf instead the maxSkew were 5, pods could be spread 5, 0, 0 or 3, 2, 0, or 2, 1, 2 and so on.\n\nThe three supported `topologyKey` values that Karpenter supports are:\n- `topology.kubernetes.io/zone`\n- `kubernetes.io/hostname`\n- `karpenter.sh/capacity-type`\n\nSee [Pod Topology Spread Constraints](https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/) for details.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nNodePools do not attempt to balance or rebalance the availability zones for their nodes. Availability zone balancing may be achieved by defining zonal Topology Spread Constraints for Pods that require multi-zone durability, and NodePools will respect these constraints while optimizing for compute costs.\n{{% /alert %}}\n\n### Pod affinity/anti-affinity\n\nBy using the `podAffinity` and `podAntiAffinity` configuration on a pod spec, you can inform the Karpenter scheduler of your desire for pods to schedule together or apart with respect to different topology domains.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nPreferred affinities on pods can result in more nodes being created than expected because Karpenter will prefer to create new nodes to satisfy preferences, [see the preferences documentation](#preferences) for details.\n{{% /alert %}}\n\nFor example:\n\n```yaml\nspec:\n  affinity:\n    podAffinity:\n      requiredDuringSchedulingIgnoredDuringExecution:\n      - labelSelector:\n          matchExpressions:\n          - key: system\n            operator: In\n            values:\n            - backend\n        topologyKey: topology.kubernetes.io/zone\n    podAntiAffinity:\n      requiredDuringSchedulingIgnoredDuringExecution:\n      - labelSelector:\n          matchLabels:\n            app: inflate\n        topologyKey: kubernetes.io/hostname\n```\n\nThe above pod affinity rule would cause the pod to only schedule in zones where a pod with the label `system=backend` is already running.\n\nThe 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.\n\nSee [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.\n\n### Persistent Volume Topology\n\nKarpenter automatically detects storage scheduling requirements and includes them in node launch decisions.\n\nIn 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).\nWhen 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`.\nIt randomly selects `us-west-2a`, provisions a node in that zone, and waits for kube-scheduler to bind the pod to the node.\nThe CSI driver creates a `PersistentVolume` according to the `PersistentVolumeClaim` and gives it a node affinity rule for `us-west-2a`.\n\nLater 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.\n\n```yaml\napiVersion: v1\nkind: Pod\nmetadata:\n  name: app\nspec:\n  containers: ...\n  volumes:\n    - name: storage\n      persistentVolumeClaim:\n        claimName: ebs-claim\n---\nkind: StorageClass\napiVersion: storage.k8s.io/v1\nmetadata:\n  name: ebs\nprovisioner: ebs.csi.aws.com\nvolumeBindingMode: WaitForFirstConsumer\nallowedTopologies:\n- matchLabelExpressions:\n  - key: topology.ebs.csi.aws.com/zone\n    values: [\"us-west-2a\", \"us-west-2b\"]\n---\napiVersion: v1\nkind: PersistentVolumeClaim\nmetadata:\n  name: ebs-claim\nspec:\n  accessModes:\n    - ReadWriteOnce\n  storageClassName: ebs\n  resources:\n    requests:\n      storage: 4Gi\n```\n\n{{% alert title=\"Note\" color=\"primary\" %}}\n☁️ AWS Specific\n\nThe 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`.\n{{% /alert %}}\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nThe 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)\n{{% /alert %}}\n\n## Weighted NodePools\n\nKarpenter allows you to order your NodePools using the `.spec.weight` field so that the Karpenter scheduler will attempt to schedule one NodePool before another.\n\n### Savings Plans and Reserved Instances\n\nIf 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.\n\nTo 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` field on the NodePool to limit the capacity that can be launched by this NodePool. Combined with the `.spec.weight` value, we can tell Karpenter to pull from instance types in the reserved NodePool before defaulting to generic instance types.\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: reserved-instance\nspec:\n  weight: 50\n  limits:\n    cpu: 100\n  template:\n    spec:\n      requirements:\n      - key: \"node.kubernetes.io/instance-type\"\n        operator: In\n        values: [\"c4.large\"]\n---\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\nspec:\n  template:\n    spec:\n      requirements:\n      - key: karpenter.sh/capacity-type\n        operator: In\n        values: [\"spot\", \"on-demand\"]\n      - key: kubernetes.io/arch\n        operator: In\n        values: [\"amd64\"]\n```\n\n### Fallback\n\nPods 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.\n\nBy assigning a higher `.spec.weight` value and restricting a NodePool 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.\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\nspec:\n  weight: 50\n  template:\n    spec:\n      requirements:\n      - key: karpenter.sh/capacity-type\n        operator: In\n        values: [\"spot\", \"on-demand\"]\n      - key: kubernetes.io/arch\n        operator: In\n        values: [\"amd64\"]\n---\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: arm64-specific\nspec:\n  template:\n    spec:\n      requirements:\n      - key: karpenter.sh/capacity-type\n        operator: In\n        values: [\"spot\", \"on-demand\"]\n      - key: kubernetes.io/arch\n        operator: In\n        values: [\"arm64\"]\n      - key: node.kubernetes.io/instance-type\n        operator: In\n        values: [\"a1.large\", \"a1.xlarge\"]\n```\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nBased on the way that Karpenter performs pod batching and bin packing, it is not guaranteed that Karpenter will always choose the highest priority NodePool given specific requirements. For example, if a pod can't be scheduled with the highest priority NodePool, it will force creation of a node using a lower priority NodePool, allowing 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.\n{{% /alert %}}\n\n## Advanced Scheduling Techniques\n\n### Scheduling based on Node Resources\n\nYou may want pods to be able to request resources of nodes that Kubernetes natively does not provide as a schedulable resource or that are aspects of certain nodes like\nHigh Performance Networking or NVME Local Storage. You can use Karpenter's Well-Known Labels to accomplish this.\n\nThese can further be applied at the NodePool or Workload level using Requirements, NodeSelectors or Affinities\n\nPod example of requiring any NVME disk:\n```yaml\n...\n affinity:\n   nodeAffinity:\n     requiredDuringSchedulingIgnoredDuringExecution:\n       nodeSelectorTerms:\n         - matchExpressions:\n           - key: \"karpenter.k8s.aws/instance-local-nvme\"\n             operator: \"Exists\"\n...\n```\n\nNodePool Example:\n```yaml\n...\nrequirement:\n  - key: \"karpenter.k8s.aws/instance-local-nvme\"\n    operator: \"Exists\"\n...\n```\n\nPod example of requiring at least 100GB of NVME disk:\n```yaml\n...\n affinity:\n   nodeAffinity:\n     requiredDuringSchedulingIgnoredDuringExecution:\n       nodeSelectorTerms:\n         - matchExpressions:\n            - key: \"karpenter.k8s.aws/instance-local-nvme\"\n              operator: Gte\n              values: [\"100\"]\n...\n```\n\nNodePool Example:\n```yaml\n...\nrequirement:\n  - key: \"karpenter.k8s.aws/instance-local-nvme\"\n    operator: Gte\n    values: [\"100\"]\n...\n```\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nKarpenter cannot yet take into account ephemeral-storage requests while scheduling pods, we're purely requesting attributes of nodes and getting X amount of resources\nas a side effect. You may need to tweak schedulable resources like CPU or Memory to achieve desired fit, especially if Consolidation is enabled.\n\nYour NodeClass will also need to support automatically formatting and mounting NVME Instance Storage if available.\n{{% /alert %}}\n\nPod example of requiring at least 50 Gbps of network bandwidth:\n```yaml\n...\n affinity:\n   nodeAffinity:\n     requiredDuringSchedulingIgnoredDuringExecution:\n       nodeSelectorTerms:\n         - matchExpressions:\n            - key: \"karpenter.k8s.aws/instance-network-bandwidth\"\n              operator: Gte\n              values: [\"50000\"]\n...\n```\n\nNodePool Example:\n```yaml\n...\nrequirement:\n  - key: \"karpenter.k8s.aws/instance-network-bandwidth\"\n    operator: Gte\n    values: [\"50000\"]\n...\n```\n\n### `Exists` Operator\n\nThe `Exists` operator can be used on a NodePool to provide workload segregation across nodes.\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nspec:\n  template:\n    spec:\n      requirements:\n        - key: company.com/team\n          operator: Exists\n...\n```\n\nWith this requirement on the NodePool, workloads can specify the same key (e.g. `company.com/team`) with custom values (e.g. `team-a`, `team-b`, etc.) as a required `nodeAffinity` or `nodeSelector`. Karpenter will then apply the key/value pair to nodes it launches dynamically based on the pod's node requirements.\n\nIf each set of pods that can schedule with this NodePool specifies this key in its `nodeAffinity` or `nodeSelector`, you can isolate pods onto different nodes based on their values. This provides a way to more dynamically isolate workloads without requiring a unique NodePool for each workload subset.\n\nFor example, providing the following `nodeSelectors` would isolate the pods for each of these deployments on different nodes.\n\n#### Team A Deployment\n\n```yaml\napiVersion: v1\nkind: Deployment\nmetadata:\n  name: team-a-deployment\nspec:\n  replicas: 5\n  template:\n    spec:\n      nodeSelector:\n        company.com/team: team-a\n```\n\n#### Team A Node\n\n```yaml\napiVersion: v1\nkind: Node\nmetadata:\n  labels:\n    company.com/team: team-a\n```\n\n#### Team B Deployment\n\n```yaml\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: team-b-deployment\nspec:\n  replicas: 5\n  template:\n    spec:\n      nodeSelector:\n        company.com/team: team-b\n```\n\n#### Team B Node\n\n```yaml\napiVersion: v1\nkind: Node\nmetadata:\n  labels:\n    company.com/team: team-b\n```\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nIf a workload matches the NodePool but doesn't specify a label, Karpenter will generate a random label for the node.\n{{% /alert %}}\n\n### On-Demand/Spot Ratio Split\n\nTaking 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.\n\nTo do this, we create one NodePool 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 NodePool and one value for the on-demand NodePool.  When we spread across our new label evenly, we'll end up with a ratio of 4:1 spot to on-demand nodes.\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nThis 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.\n{{% /alert %}}\n\n#### NodePools\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: spot\nspec:\n  template:\n    spec:\n      requirements:\n      - key: \"karpenter.sh/capacity-type\"\n        operator: In\n        values: [\"spot\"]\n      - key: capacity-spread\n        operator: In\n        values:\n        - \"2\"\n        - \"3\"\n        - \"4\"\n        - \"5\"\n---\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: on-demand\nspec:\n  template:\n    spec:\n      requirements:\n      - key: \"karpenter.sh/capacity-type\"\n        operator: In\n        values: [\"on-demand\"]\n      - key: capacity-spread\n        operator: In\n        values:\n        - \"1\"\n```\n\n#### Workload Topology Spread Constraint\n\n```yaml\ntopologySpreadConstraints:\n- maxSkew: 1\n  topologyKey: capacity-spread\n  whenUnsatisfiable: DoNotSchedule\n  labelSelector:\n    ...\n```\n"
  },
  {
    "path": "website/content/en/preview/contributing/_index.md",
    "content": "---\ntitle: \"Contributing\"\nlinkTitle: \"Contributing\"\nweight: 40\ndescription: >\n  Learn about how to contribute to Karpenter\n---\n"
  },
  {
    "path": "website/content/en/preview/contributing/community-meetings.md",
    "content": "---\ntitle: \"Community Meetings\"\nlinkTitle: \"Community Meetings\"\nweight: 10\ndescription: >\n  Join the Karpenter Community Meetings\n---\n\nKarpenter hosts two types of regular community meetings to foster collaboration and maintain project health:\n\nThe **Working Group** meetings focus on project direction, technical discussions, and feature development. These bi-weekly sessions bring together contributors, users, and maintainers to review designs, plan releases, and address architectural decisions that shape Karpenter's future.\n\nThe **Issue Triage** meetings, held weekly, are dedicated to maintaining project health through focused issue management across our repositories. These sessions ensure proper prioritization, assignment coordination, and timely response to community contributions.\n\nMeeting times alternate to accommodate our global community. All interested participants are welcome to join, contribute, and learn more about Karpenter.\n\n### Working Group Meetings\n\nThe Karpenter Working Group meetings serve as a collaborative forum for project development, technical discussions, and community engagement. These sessions bring together contributors, users, and maintainers to shape the project's direction and ensure its continued success. Through these meetings, we align on architectural decisions, review critical features, and address community needs.\n\nKey focus areas include:\n- Review and discussion of design proposals and technical implementations\n- Planning of upcoming releases and feature roadmaps\n- Coordination between contributors and cross-team collaboration\n- Technical deep-dives on specific components and challenges\n- Discussion of user feedback and community requirements\n\nThe working group provides a platform for both synchronous decision-making and asynchronous follow-ups, ensuring the project maintains its technical excellence while growing its community impact.\n\nWorking group meetings will be held every other Thursday, alternating between a 3:00 PM PST (Americas-friendly) and 9:00 AM PST (Europe-friendly) start time.\nPlease refer to our [calendar](https://calendar.google.com/calendar/u/0?cid=N3FmZGVvZjVoZWJkZjZpMnJrMmplZzVqYmtAZ3JvdXAuY2FsZW5kYXIuZ29vZ2xlLmNvbQ) for an up-to-date schedule.\n\n### Issue Triage Meetings\n\nKarpenter is expanding our community meetings to include dedicated Issue Triage sessions alongside our regular Working Group meetings. This addition aims to improve issue management across both kubernetes-sigs/karpenter and karpenter-provider-aws repositories.\n\nThese weekly meetings rotate between repositories and time zones to accommodate our global community. These dedicated triage sessions focus on:\n- Issue prioritization\n- Assignment coordination\n- Discussion of complex issues\n- Maintaining repository health\n\nAn issue triage meeting for each repository will be held monthly, alternating between a 3:00 PM PST (Americas-friendly) and 9:00 AM PST (Europe-friendly) start time.\nPlease refer to our [calendar](https://calendar.google.com/calendar/u/0?cid=N3FmZGVvZjVoZWJkZjZpMnJrMmplZzVqYmtAZ3JvdXAuY2FsZW5kYXIuZ29vZ2xlLmNvbQ) for an up-to-date schedule.\n\n### Getting Involved\nAll community members are welcome to join these meetings. Meeting links and calendar invites are shared through our usual communication channels.\n\n- All invites are managed through our [Calendar](https://calendar.google.com/calendar/u/0?cid=N3FmZGVvZjVoZWJkZjZpMnJrMmplZzVqYmtAZ3JvdXAuY2FsZW5kYXIuZ29vZ2xlLmNvbQ).\n- 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.\n\n{{% alert title=\"Meeting Access\" %}}\nJoin our meetings using the following credentials:\n\n🔗 **Zoom**: [https://zoom.us/j/95618088729](https://zoom.us/j/95618088729)\n🆔 **Meeting ID**: 956 1808 8729\n🔑 **Passcode**: 77777\n\nNeed help? Contact the maintainers on Slack.\n{{% /alert %}}\n\nAdd future questions or read past discussions in our [Working Group Log](https://docs.google.com/document/d/18BT0AIMugpNpiSPJNlcAL2rv69yAE6Z06gUVj7v_clg).\n"
  },
  {
    "path": "website/content/en/preview/contributing/design-guide.md",
    "content": "---\ntitle: \"Design Guide\"\nlinkTitle: \"Design Guide\"\nweight: 20\ndescription: >\n  Read this before making large changes to Karpenter\n---\n\nTechnical 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.\n\nDesigns don’t have to be long or formal, and should match the scope of the problem they’re trying to solve.\n\n* Are there multiple potential solutions?\n* Will users need to be aware of the changes?\n* Would it be painful to discard a rejected implementation?\n* When in doubt, write a 1 pager.\n\n## Tell a Story\n\nA 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.\n\nYour story should include,\n\n* [Context] Include some technical background that helps readers think about your idea in context\n* [Problem] Clearly identify the problem to be solved and some guiding principles to help think about the solutions\n* [Solutions] Talk through different potential solutions and their tradeoffs. Include diagrams to clarify concepts\n* [Recommendation] Make a recommendation, but don’t be overly invested in it\n\nThe 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.\n\n## Gather Broad Feedback\n\nThe 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).\n\nThe 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.\n\nIt 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.\n\n## Simple Solutions to Complex Problems\n\nThe 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.\n\n## Common Gotchas\n\n### Does your change introduce new APIs?\n\nAPIs 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.\n\nThink 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.\n\nBuild minimal and maintainable APIs by:\n\n* Push back on requirements that introduces concepts for all users to solve problems for a few.\n* Identify an opinionated default that solves the majority of use cases.\n* Delay introducing a parameter into your API surface until users demand it; you can always add it later.\n* 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.\n* Take advantage of opportunities to refine APIs while the impact of backwards incompatibility is small\n\n### Does your change behave differently with different cloud providers?\n\nKubernetes 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.\n\nAchieving 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.\n\n### Does your change expose details users may rely on?\n\nKubernetes 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?\n\nBe 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.\n\n### Does your change have a risk of breaking an undocumented invariant?\n\nSystems 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.\n\n* Identify the fundamental reason the existing mechanism is insufficient and be able to explain it in plain terms.\n* Separate the new mechanism from the new feature that relies on it.\n* Clean up after yourself and avoid getting stuck halfway between old and new mechanisms.\n\n### Does your change impact performance?\n\nUsers 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.\n\n* Beware code that scales linearly with pods or nodes. Milliseconds in testing turn into seconds at scale.\n* Cloud provider read APIs can have surprisingly high latency and low limits, use caching to minimize calls.\n* Increases to memory and CPU usage increase capex cost for operators. Profile and optimize your implementations.\n"
  },
  {
    "path": "website/content/en/preview/contributing/development-guide.md",
    "content": "---\ntitle: \"Development Guide\"\nlinkTitle: \"Development Guide\"\nweight: 80\ndescription: >\n  Set up a Karpenter development environment\n---\n\n## Dependencies\n\nThe following tools are required for contributing to the Karpenter project.\n\n| Package                                                            | Version  | Install                                        |\n| ------------------------------------------------------------------ | -------- | ---------------------------------------------- |\n| [go](https://golang.org/dl/)                                       | v1.19+   | [Instructions](https://golang.org/doc/install) |\n| [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) |          | `brew install kubectl`                         |\n| [helm](https://helm.sh/docs/intro/install/)                        |          | `brew install helm`                            |\n| Other tools                                                        |          | `make toolchain`                               |\n\n## Developing\n\n### Setup / Teardown\n\nBased 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/).\n\n#### Locally\n\nOnce 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`\n\n```bash\nmake run\n```\n\n#### Inside a Kubernetes Cluster\n\nOnce you have your environment set up, to install Karpenter in the Kubernetes cluster specified in your `~/.kube/config`  run the following commands.\n\n```bash\nmake apply # Install Karpenter\nmake delete # Uninstall Karpenter\n```\n\n### Developer Loop\n\n* Make sure dependencies are installed\n    * Run `make codegen` to make sure yaml manifests are generated (requires a working set of AWS credentials, see [Specifying Credentials](https://docs.aws.amazon.com/sdk-for-go/v1/developer-guide/configuring-sdk.html#specifying-credentials))\n    * Run `make toolchain` to install cli tools for building and testing the project\n* You will need a personal development image repository (e.g. ECR)\n    * Make sure you have valid credentials to your development repository.\n    * `$KO_DOCKER_REPO` must point to your development repository\n    * Your cluster must have permissions to read from the repository\n\n### Build and Deploy\n\n*Note: these commands do not rely on each other and may be executed independently*\n\n```bash\nmake apply # quickly deploy changes to your cluster\nmake presubmit # run codegen, lint, and tests\n```\n\nIf you are only interested in building the Karpenter images and not deploying the updated release to your cluster immediately with Helm, you can run the following:\n\n```bash\nmake image # build and push the karpenter images\n```\n\n*Note: that this will produce a build with the version of https://github.com/kubernetes-sigs/karpenter in your local filesystem.\n\nYou can test out changes made in https://github.com/kubernetes-sigs/karpenter by replacing the dependency of https://github.com/aws/karpenter-provider-aws/.\nFor local changes, replace `$PATH_TO_KUBERNETES_SIGS_KARPENTER` with the relative or absolute path and run:\n\n```bash\ngo mod edit -replace sigs.k8s.io/karpenter=$PATH_TO_KUBERNETES_SIGS_KARPENTER\n```\n\nThen you can build your image using the previous steps.\n\n### Publishing Images Only\n\nIf you only need to build and publish an image to a container registry, run the following:\n\n```bash\nmake image # build and push the karpenter images\n```\nYou can test out changes made in https://github.com/kubernetes-sigs/karpenter by replacing the dependency of https://github.com/aws/karpenter-provider-aws/.\nFor local changes, replace `$PATH_TO_KUBERNETES_SIGS_KARPENTER` with the relative or absolute path and run:\n\n```bash\ngo mod edit -replace sigs.k8s.io/karpenter=$PATH_TO_KUBERNETES_SIGS_KARPENTER\n```\n\nThen you can build your image using the previous steps.\n\n*Note: you need to commit the go.mod changes before running `make image` for the changes to be picked up.\n\n### Testing\n\n```bash\nmake test       # E2E correctness tests\n```\n\n### Change Log Level\n\nBy default, `make apply` will set the log level to debug. You can change the log level by setting the log level in your Helm values.\n\n```bash\n--set logLevel=debug\n```\n\n### Debugging Metrics\n\nOSX:\n\n```bash\nopen http://localhost:8080/metrics && kubectl port-forward service/karpenter -n kube-system 8080\n```\n\nLinux:\n\n```bash\ngio open http://localhost:8080/metrics && kubectl port-forward service/karpenter -n karpenter 8080\n```\n\n### Tailing Logs\n\nWhile 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):\n\n```bash\nstern -n karpenter -l app.kubernetes.io/name=karpenter\n```\n\n## Environment specific setup\n\n### AWS\n\nFor local development on Karpenter you will need a Docker repo which can manage your images for Karpenter components.\nYou can use the following command to provision an ECR repository. We recommend using a single \"dev\" repository for \ndevelopment across multiple projects, and to use specific image hashes instead of image tags. \n\n```bash\naws ecr create-repository \\\n    --repository-name dev \\\n    --image-scanning-configuration scanOnPush=true \\\n    --region \"${AWS_DEFAULT_REGION}\"\n```\n\nOnce you have your ECR repository provisioned, configure your Docker daemon to authenticate with your newly created repository.\n\n```bash\nexport KO_DOCKER_REPO=\"${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_DEFAULT_REGION}.amazonaws.com/dev\"\naws ecr get-login-password --region \"${AWS_DEFAULT_REGION}\" | docker login --username AWS --password-stdin \"${KO_DOCKER_REPO}\"\n```\n\n## Profiling\nKarpenter exposes a pprof endpoint on its metrics port when [profiling]({{< relref \"../reference/settings\" >}}) is enabled.\n\nLearn about profiling with pprof: https://jvns.ca/blog/2017/09/24/profiling-go-with-pprof/\n\n### Prerequisites\n```\nbrew install graphviz\ngo install github.com/google/pprof@latest\n```\n\n### Get a profile\n```\n# Connect to the metrics endpoint\nkubectl port-forward service/karpenter -n karpenter 8080\nopen http://localhost:8080/debug/pprof/\n# Visualize the memory\ngo tool pprof -http 0.0.0.0:9000 localhost:8080/debug/pprof/heap\n# Visualize CPU\ngo tool pprof -http 0.0.0.0:9000 \"localhost:8080/debug/pprof/profile?seconds=60\"\n```\n"
  },
  {
    "path": "website/content/en/preview/contributing/documentation-updates.md",
    "content": "---\ntitle: \"Documentation Updates\"\nlinkTitle: \"Documentation Updates\"\nweight: 50\ndescription: >\n  Information helpful for contributing simple documentation updates.\n---\n\n- Documentation for https://karpenter.sh/docs/ is built under website/content/en/preview/.\n- Documentation updates should be made to the \"preview\" directory. Your changes will be promoted to website/content/en/docs/ by an automated process after the change has been merged.\n- Previews for your changes are built and available a few minutes after you push. Look for the \"Amplify Preview URL\" link in a comment in your PR.\n- If your update applies to more than just the current version of Karpenter, please backport your changes into all of the versions under website/content/en/ *besides* the /docs/ folder"
  },
  {
    "path": "website/content/en/preview/faq.md",
    "content": "---\ntitle: \"FAQs\"\nlinkTitle: \"FAQs\"\nweight: 60\ndescription: >\n  Review Karpenter Frequently Asked Questions\n---\n## General\n\n### Is Karpenter safe for production use?\nKarpenter v1 is the first stable Karpenter API. Any future incompatible API changes will require a v2 version.\n\n### How does a NodePool decide to manage a particular node?\nSee [Configuring NodePools]({{< ref \"./concepts/#configuring-nodepools\" >}}) for information on how Karpenter configures and manages nodes.\n\n### What cloud providers are supported?\nAWS is the first cloud provider supported by Karpenter, although it is designed to be used with other cloud providers as well.\n\n### Can I write my own cloud provider for Karpenter?\nYes, but there is no documentation yet for it. Start with Karpenter's GitHub [cloudprovider](https://github.com/aws/karpenter-provider-aws/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.\n\n### What operating system nodes does Karpenter deploy?\nKarpenter uses the OS defined by the [AMI Family in your EC2NodeClass]({{< ref \"./concepts/nodeclasses#specamifamily\" >}}).\n\n### Can I provide my own custom operating system images?\nKarpenter has multiple mechanisms for configuring the [operating system]({{< ref \"./concepts/nodeclasses/#specamiselectorterms\" >}}) for your nodes.\n\n### Can Karpenter deal with workloads for mixed architecture cluster (arm vs. amd)?\nKarpenter is flexible to multi-architecture configurations using [well known labels]({{< ref \"./concepts/scheduling/#supported-labels\">}}).\n\n### What RBAC access is required?\nAll the required RBAC rules can be found in the Helm chart template. See [clusterrole-core.yaml](https://github.com/aws/karpenter/blob{{< githubRelRef >}}charts/karpenter/templates/clusterrole-core.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.\n\n### Can I run Karpenter outside of a Kubernetes cluster?\nYes, as long as the controller has network and IAM/RBAC access to the Kubernetes API and your provider API.\n\n### What do I do if I encounter a security issue with Karpenter?\nRefer to [Reporting Security Issues](https://github.com/aws/karpenter/security/policy) for information on how to report Karpenter security issues. Do not create a public GitHub issue.\n\n## Compatibility\n\n### Which versions of Kubernetes does Karpenter support?\nSee the [Compatibility Matrix in the Upgrade Section]({{< ref \"./upgrading/compatibility#compatibility-matrix\" >}}) to view the supported Kubernetes versions per Karpenter released version.\n\n### What Kubernetes distributions are supported?\nKarpenter documents integration with a fresh or existing installation of the latest AWS Elastic Kubernetes Service (EKS). Other Kubernetes distributions (KOPs, etc.) can be used, but setting up cloud provider permissions for those distributions has not been documented.\n\n### How does Karpenter interact with AWS node group features?\nNodePools 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 NodePools, 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 NodePool-managed in the long term.\n\n\n### How does Karpenter interact with Kubernetes features?\n* Kubernetes Cluster Autoscaler: Karpenter can work alongside Cluster Autoscaler. See [Kubernetes Cluster Autoscaler]({{< ref \"./concepts/#kubernetes-cluster-autoscaler\" >}}) for details.\n* 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.\n\n## Provisioning\n\n### What features does the Karpenter NodePool support?\nSee the [NodePool API docs]({{< ref \"./concepts/nodepools\" >}}) for NodePool examples and descriptions of features.\n\n### Can I create multiple (team-based) NodePools on a cluster?\nYes, NodePools can identify multiple teams based on labels. See the [NodePool API docs]({{< ref \"./concepts/nodepools\" >}}) for details.\n\n### If multiple NodePools are defined, which will my pod use?\n\nPending pods will be handled by any NodePools that matches the requirements of the pod. There is no ordering guarantee if multiple NodePools match pod requirements. We recommend that NodePools are set-up to be mutually exclusive. To select a specific NodePool, use the node selector `karpenter.sh/nodepool: my-nodepool`.\n\n### How can I configure Karpenter to only provision pods for a particular namespace?\n\nThere 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` using the same mechanisms 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.\n\nWe 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/).\n\n### Can I add SSH keys to a NodePool?\n\nKarpenter does not offer a way to add SSH keys via NodePools or secrets to the nodes it manages.\nHowever, 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.\n\nThough not recommended, if you need to access Karpenter-managed nodes without AWS credentials, you can add SSH keys using EC2NodeClass User Data. See the [User Data section in the EC2NodeClass documentation]({{< ref \"./concepts/nodeclasses/#specuserdata\" >}}) for details.\n\n### Can I set limits of CPU and memory for a NodePool?\nYes. View the [NodePool API docs]({{< ref \"./concepts/nodepools#speclimits\" >}}) for NodePool examples and descriptions of how to configure limits.\n\n### Can I mix spot and on-demand EC2 run types?\nYes, see the [NodePool API docs]({{< ref \"./concepts/nodepools#examples\" >}}) for an example.\n\n### Can I restrict EC2 instance types?\n\n* Attribute-based requests are currently not possible.\n* You can select instances with special hardware, such as gpu.\n\n### Can I use Bare Metal instance types?\n\nYes, Karpenter supports provisioning metal instance types when a NodePool'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.\n\n### How does Karpenter dynamically select instance types?\n\nKarpenter 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. Karpenter [recommends the use of C, M, and R >= Gen 3 instance types]({{< ref \"./concepts/nodepools#spectemplatespecrequirements\" >}}) for most generic workloads, but it can be constrained in the NodePool spec with the [instance-type](https://kubernetes.io/docs/reference/labels-annotations-taints/#nodekubernetesioinstance-type) well-known label in the requirements section.\n\nAfter 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.\n\n\nThe EC2 fleet API attempts to provision the instance type based on the [Price Capacity Optimized allocation strategy](https://aws.amazon.com/blogs/compute/introducing-price-capacity-optimized-allocation-strategy-for-ec2-spot-instances/). For the on-demand capacity type, this is effectively equivalent to the `lowest-price` allocation strategy. For the spot capacity type, Fleet will determine an instance type that has both the lowest price combined with the lowest chance of being interrupted. Note that this may not give you the instance type with the strictly lowest price for spot.\n\n### How does Karpenter calculate the resource usage of Daemonsets when simulating scheduling?\n\nKarpenter currently calculates the applicable daemonsets at the NodePool level with label selectors/taints, etc. It does not look to see if there are requirements on the daemonsets that would exclude it from running on particular instances that the NodePool could or couldn't launch.\nThe recommendation for now is to use multiple NodePools with taints/tolerations or label selectors to limit daemonsets to only nodes launched from specific NodePoools.\n\n### What if there is no Spot capacity?\n\nThe best defense against running out of Spot capacity is to allow Karpenter to provision as many distinct 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.\n\nAllowing 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 instance type diversity will also increase the chances that you’ll be able to continue to launch On-Demand capacity for your workloads.\n\nKarpenter has a concept of an “offering” for each instance type, which is a combination of zone and capacity type. Whenever the Fleet API returns an insufficient capacity error for Spot instances, those particular offerings are temporarily removed from consideration (across the entire NodePool) so that Karpenter can make forward progress with different options.\n\n### Does Karpenter support IPv6?\n\nYes! 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 NodePool to only allow Nitro instance types:\n\n```\napiVersion: karpenter.sh/v1\nkind: NodePool\n...\nspec:\n  template:\n    spec:\n      requirements:\n        - key: karpenter.k8s.aws/instance-hypervisor\n          operator: In\n          values:\n            - nitro\n```\n\nFor more documentation on enabling IPv6 with the Amazon VPC CNI, see the [docs](https://docs.aws.amazon.com/eks/latest/userguide/cni-ipv6.html).\n\n{{% alert title=\"Windows Support Notice\" color=\"warning\" %}}\nWindows nodes do not support IPv6.\n{{% /alert %}}\n\n### Why do I see extra nodes get launched to schedule pending pods that remain empty and are later removed?\n\nYou might have a daemonset, userData configuration, or some other workload that applies a taint after a node is provisioned. After the taint is applied, Karpenter will detect that the pod cannot be scheduled to this new node due to the added taint. As a result, Karpenter will provision yet another node. Typically, the original node has the taint removed and the pod schedules to it, leaving the extra new node unused and reaped by emptiness/consolidation. If the taint is not removed quickly enough, Karpenter may remove the original node before the pod can be scheduled via emptiness consolidation. This could result in an infinite loop of nodes being provisioned and consolidated without the pending pod ever scheduling.\n\nThe solution is to configure [startupTaints]({{<ref \"./concepts/nodepools/#cilium-startup-taint\" >}}) to make Karpenter aware of any temporary taints that are needed to ensure that pods do not schedule on nodes that are not yet ready to receive them.\n\nHere's an example for Cilium's startup taint.\n```\napiVersion: karpenter.sh/v1\nkind: NodePool\n...\nspec:\n  template:\n    spec:\n      startupTaints:\n        - key: node.cilium.io/agent-not-ready\n          effect: NoSchedule\n```\n\n## Scheduling\n\n### When using preferred scheduling constraints, Karpenter launches the correct number of nodes at first.  Why do they then sometimes get consolidated immediately?\n\n`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.\n\nAs 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 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.\n\n### When deploying an additional DaemonSet to my cluster, why does Karpenter not scale-up my nodes to support the extra DaemonSet?\n\nKarpenter will not scale-up more capacity for an additional DaemonSet on its own. This is due to the fact that the only pod that would schedule to that new node would be the DaemonSet pod, which is consuming additional capacity with no benefit. Therefore, Karpenter only considers DaemonSets when doing overhead calculations for scale-ups to workload pods.\n\nTo avoid new DaemonSets failing to schedule to existing Nodes, you should [set a high priority on your DaemonSet pods with a `preemptionPolicy: PreemptLowerPriority`](https://kubernetes.io/docs/concepts/scheduling-eviction/pod-priority-preemption/#example-priorityclass) so that DaemonSet pods will be guaranteed to schedule on all existing and new Nodes. For existing Nodes, this will cause some pods with lower priority to get [preempted](https://kubernetes.io/docs/concepts/scheduling-eviction/pod-priority-preemption/#preemption), replaced by the DaemonSet and re-scheduled onto new capacity that Karpenter will launch in response to the new pending pods.\n\nThe Karpenter maintainer team is also discussing a consolidation mechanism [in this Github issue](https://github.com/aws/karpenter/issues/3256) that would allow existing capacity to be rolled when a new DaemonSet is deployed without having to set [priority or preemption](https://kubernetes.io/docs/concepts/scheduling-eviction/pod-priority-preemption/) on the pods.\n\n\n### Why aren’t my Topology Spread Constraints spreading pods across zones?\n\nKarpenter will provision nodes according to `topologySpreadConstraints`. However, the Kubernetes scheduler may schedule pods to nodes that do not fulfill zonal spread constraints if the `minDomains` field is not set. If Karpenter launches nodes that can handle more than the required number of pods, and the newly launched nodes initialize at different times, then the Kubernetes scheduler may place more than the desired number of pods on the first node that is Ready.\n\nThe preferred solution is to use the [`minDomains` field in `topologySpreadConstraints`](https://kubernetes.io/docs/concepts/scheduling-eviction/topology-spread-constraints/#topologyspreadconstraints-field), which is enabled by default starting in Kubernetes 1.27.\n\nBefore `minDomains` was available, another workaround has been to launch a lower [Priority](https://kubernetes.io/docs/concepts/scheduling-eviction/pod-priority-preemption/) pause container to each zone before launching the pods that you want to spread across the zones. The lower Priority on these pause pods would mean that they would be preempted when your desired pods are scheduled.\n\n## Workloads\n\n### How can someone deploying pods take advantage of Karpenter?\n\nSee [Application developer]({{< ref \"./concepts/#application-developer\" >}}) for descriptions of how Karpenter matches nodes with pod requests.\n\n### Can I use Karpenter with EBS disks per availability zone?\nYes.  See [Persistent Volume Topology]({{< ref \"./concepts/scheduling#persistent-volume-topology\" >}}) for details.\n\n### Can I set `--max-pods` on my nodes?\nYes, see the [KubeletConfiguration Section in the NodePool docs]({{<ref \"./concepts/nodepools#spectemplatespeckubelet\" >}}) to learn more.\n\n### Why do the Windows2019, Windows2022 and Windows2025 AMI families only support Windows Server Core?\nThe difference between the Core and Full variants is that Core is a minimal OS with less components and no graphic user interface (GUI) or desktop experience.\n`Windows2019`, `Windows2022` and `Windows2025` AMI families use the Windows Server Core option for simplicity, but if required, you can specify a custom AMI to run Windows Server Full.\n\nYou can specify the [Amazon EKS optimized AMI](https://docs.aws.amazon.com/eks/latest/userguide/eks-optimized-windows-ami.html) with Windows Server 2022 Full for Kubernetes {{< param \"latest_k8s_version\" >}} by configuring an `amiSelector` that references the AMI name.\n```yaml\namiSelectorTerms:\n    - name: Windows_Server-2022-English-Full-EKS_Optimized-{{< param \"latest_k8s_version\" >}}*\n```\n\n### Can I use Karpenter to scale my workload's pods?\nKarpenter is a node autoscaler which will create new nodes in response to unschedulable pods. Scaling the pods themselves is outside of its scope.\nThis is the realm of pod autoscalers such as the [Vertical Pod Autoscaler](https://github.com/kubernetes/autoscaler/tree/master/vertical-pod-autoscaler) (for scaling an individual pod's resources) or the [Horizontal Pod Autoscaler](https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/) (for scaling replicas).\nWe also recommend taking a look at [Keda](https://keda.sh/) if you're looking for more advanced autoscaling capabilities for pods.\n\n## Deprovisioning\n### How does Karpenter deprovision nodes?\nSee [Deprovisioning nodes]({{< ref \"./concepts/disruption\" >}}) for information on how Karpenter deprovisions nodes.\n\n## Upgrading Karpenter\n\n### How do I upgrade Karpenter?\nKarpenter is a controller that runs in your cluster, but it is not tied to a specific Kubernetes version, as the Cluster Autoscaler is.\nUse your existing upgrade mechanisms to upgrade your core add-ons in Kubernetes and keep Karpenter up to date on bug fixes and new features.\n\nKarpenter requires proper permissions in the `KarpenterNode IAM Role` and the `KarpenterController IAM Role`.\nTo 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-karpenter/cloudformation.yaml`.\nNext, locate `KarpenterController IAM Role` ARN (i.e., ARN of the resource created in [Create the KarpenterController IAM Role](../getting-started/getting-started-with-karpenter/#create-the-karpentercontroller-iam-role)) and pass them to the Helm upgrade command.\n{{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step08-apply-helm-chart.sh\" language=\"bash\"%}}\n\nFor information on upgrading Karpenter, see the [Upgrade Guide]({{< ref \"./upgrading/upgrade-guide/\" >}}).\n\n## Upgrading Kubernetes Cluster\n\n### How do I upgrade an EKS Cluster with Karpenter?\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nKarpenter recommends that you always validate AMIs in your lower environments before using them in production environments. Read [Managing AMIs]({{<ref \"./tasks/managing-amis\" >}}) to understand best practices about upgrading your AMIs.\n\nIf using a custom AMI, you will need to trigger the rollout of new worker node images through the publication of a new AMI with tags matching the [`amiSelector`]({{<ref \"./concepts/nodeclasses#specamiselectorterms\" >}}), or a change to the [`amiSelector`]({{<ref \"./concepts/nodeclasses#specamiselectorterms\" >}}) field.\n{{% /alert %}}\n\nKarpenter's default behavior will upgrade your nodes when you've upgraded your Amazon EKS Cluster. Karpenter will [drift]({{<ref \"./concepts/disruption#drift\" >}}) nodes to stay in-sync with the EKS control plane version. Drift is enabled by default starting in `v0.33`. This means that as soon as your cluster is upgraded, Karpenter will auto-discover the new AMIs for that version.\n\nStart by [upgrading the EKS Cluster control plane](https://docs.aws.amazon.com/eks/latest/userguide/update-cluster.html). After the EKS Cluster upgrade completes, Karpenter will Drift and disrupt the Karpenter-provisioned nodes using EKS Optimized AMIs for the previous cluster version by first spinning up replacement nodes. Karpenter respects [Pod Disruption Budgets](https://kubernetes.io/docs/concepts/workloads/pods/disruptions/) (PDB), and automatically [replaces, cordons, and drains those nodes]({{<ref \"./concepts/disruption#control-flow\" >}}). To best support pods moving to new nodes, follow Kubernetes best practices by setting appropriate pod [Resource Quotas](https://kubernetes.io/docs/concepts/policy/resource-quotas/) and using PDBs.\n\n## Interruption Handling\n\n### Should I use Karpenter interruption handling alongside Node Termination Handler?\nNo. We recommend against using Node Termination Handler alongside Karpenter due to conflicts that could occur from the two components handling the same events.\n\n### Why should I migrate from Node Termination Handler?\nKarpenter's native interruption handling offers two main benefits over the standalone Node Termination Handler component:\n1. You don't have to manage and maintain a separate component to exclusively handle interruption events.\n2. Karpenter's native interruption handling coordinates with other deprovisioning so that consolidation, expiration, etc. can be aware of interruption events and vice-versa.\n\n### Why am I receiving QueueNotFound errors when I set `--interruption-queue`?\nKarpenter requires a queue to exist that receives event messages from EC2 and health services in order to handle interruption messages properly for nodes.\n\nDetails on the types of events that Karpenter handles can be found in the [Interruption Handling Docs]({{< ref \"./concepts/disruption/#interruption\" >}}).\n\nDetails on provisioning the SQS queue and EventBridge rules can be found in the [Getting Started Guide]({{< ref \"./getting-started/getting-started-with-karpenter/#create-the-karpenter-infrastructure-and-iam-roles\" >}}).\n\n## Consolidation\n\n### Why do I sometimes see an extra node get launched when updating a deployment that remains empty and is later removed?\n\nConsolidation 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.\n\n## Logging\n\n### How do I customize or configure the log output?\n\nKarpenter uses [uber-go/zap](https://github.com/uber-go/zap) for logging. You can customize or configure the log messages by editing the [configmap-logging.yaml](https://github.com/aws/karpenter/blob/main/charts/karpenter/templates/configmap-logging.yaml)\n`ConfigMap`'s [data.zap-logger-config](https://github.com/aws/karpenter/blob/main/charts/karpenter/templates/configmap-logging.yaml#L26) field.\nThe available configuration options are specified in the [zap.Config godocs](https://pkg.go.dev/go.uber.org/zap#Config).\n"
  },
  {
    "path": "website/content/en/preview/getting-started/_index.md",
    "content": "---\ntitle: \"Getting Started\"\nlinkTitle: \"Getting Started\"\nweight: 10\ndescription: >\n  Choose from different methods to get started with Karpenter\n---\n\n\nTo get started with Karpenter, the [Getting Started with Karpenter]({{< relref \"getting-started-with-karpenter\" >}}) guide provides an end-to-end procedure for creating a cluster (with `eksctl`) and adding Karpenter.\n\nSee the [AKS Node autoprovisioning article](https://learn.microsoft.com/azure/aks/node-autoprovision) on how to use Karpenter on Azure's AKS or go to the [Karpenter provider for Azure open source repository](https://github.com/Azure/karpenter-provider-azure) for self-hosting on Azure and additional information.\n\nSee the [Deploy Karpenter on Alibabacloud's ACK](https://docs.cloudpilot.ai/karpenter/alibabacloud/preview/getting-started/set-up-a-cluster-and-add-karpenter/) to know how to use Karpenter on Alibabacloud's ACK. Or you can go to the [Karpenter-provider-alibabacloud](https://github.com/cloudpilot-ai/karpenter-provider-alibabacloud) for more details.\n\nIf you prefer, the following instructions use Terraform to create a cluster and add Karpenter:\n\n* [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/getting-started/) guide and also add modules and add-ons. This includes a [Karpenter](https://aws-ia.github.io/terraform-aws-eks-blueprints/patterns/karpenter/) add-on that lets you bypass the instructions in this guide for setting up Karpenter.\n\nAlthough not supported, you could also try Karpenter on other Kubernetes distributions running on AWS. For example:\n\n* [kOps](https://kops.sigs.k8s.io/operations/karpenter/): These instructions describe how to create a kOps Kubernetes cluster in AWS that includes Karpenter.\n\nLearn more about Karpenter and how to get started below.\n\n* [Karpenter EKS Best Practices](https://aws.github.io/aws-eks-best-practices/karpenter/) guide\n* [EC2 Spot Workshop for Karpenter](https://ec2spotworkshops.com/karpenter.html)\n* [EKS Karpenter Workshop](https://www.eksworkshop.com/docs/autoscaling/compute/karpenter/)\n* [Advanced EKS Immersion Karpenter Workshop](https://catalog.us-east-1.prod.workshops.aws/workshops/76a5dd80-3249-4101-8726-9be3eeee09b2/en-US/autoscaling/karpenter)\n* [Karpenter Blueprints](https://github.com/aws-samples/karpenter-blueprints)\n* [Tutorial: Run Kubernetes Clusters for Less with Amazon EC2 Spot and Karpenter](https://community.aws/tutorials/run-kubernetes-clusters-for-less-with-amazon-ec2-spot-and-karpenter#step-6-optional-simulate-spot-interruption)\n"
  },
  {
    "path": "website/content/en/preview/getting-started/getting-started-with-karpenter/_index.md",
    "content": "\n---\ntitle: \"Getting Started with Karpenter\"\nlinkTitle: \"Getting Started with Karpenter\"\nweight: 10\ndescription: >\n  Set up a cluster and add Karpenter\n---\n\nKarpenter 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.\n\nThis guide shows how to get started with Karpenter by creating a Kubernetes cluster and installing Karpenter.\nTo use Karpenter, you must be running a supported Kubernetes cluster on a supported cloud provider.\n\nThe guide below explains how to utilize the [Karpenter provider for AWS](https://github.com/aws/karpenter-provider-aws) with EKS.\n\nSee the [AKS Node autoprovisioning article](https://learn.microsoft.com/azure/aks/node-autoprovision) on how to use Karpenter on Azure's AKS or go to the [Karpenter provider for Azure open source repository](https://github.com/Azure/karpenter-provider-azure) for self-hosting on Azure and additional information.\n\n## Create a cluster and add Karpenter\n\nThis guide uses `eksctl` to create the cluster.\nIt should take less than 1 hour to complete, and cost less than $0.25.\nFollow the clean-up instructions to reduce any charges.\n\n### 1. Install utilities\n\nKarpenter is installed in clusters with a Helm chart.\n\nKarpenter requires cloud provider permissions to provision nodes, for AWS IAM\nRoles for Service Accounts (IRSA) should be used. IRSA permits Karpenter\n(within the cluster) to make privileged requests to AWS (as the cloud provider)\nvia a ServiceAccount.\n\nInstall these tools before proceeding:\n\n1. [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2-linux.html)\n2. `kubectl` - [the Kubernetes CLI](https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/)\n3. `eksctl` (>= v0.202.0) - [the CLI for AWS EKS](https://eksctl.io/installation)\n4. `helm` - [the package manager for Kubernetes](https://helm.sh/docs/intro/install/)\n\n[Configure the AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html)\nwith a user that has sufficient privileges to create an EKS cluster. Verify that the CLI can\nauthenticate properly by running `aws sts get-caller-identity`.\n\n### 2. Set environment variables\n\nAfter setting up the tools, set the Karpenter and Kubernetes version:\n\n```bash\nexport KARPENTER_NAMESPACE=\"kube-system\"\nexport KARPENTER_VERSION=\"{{< param \"latest_release_version\" >}}\"\nexport K8S_VERSION=\"{{< param \"latest_k8s_version\" >}}\"\n```\n\nThen set the following environment variable:\n\n{{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step01-config.sh\" language=\"bash\"%}}\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nIf you open a new shell to run steps in this procedure, you need to set some or all of the environment variables again.\nTo remind yourself of these values, type:\n\n```bash\necho \"${KARPENTER_NAMESPACE}\" \"${KARPENTER_VERSION}\" \"${K8S_VERSION}\" \"${CLUSTER_NAME}\" \"${AWS_DEFAULT_REGION}\" \"${AWS_ACCOUNT_ID}\" \"${TEMPOUT}\" \"${ALIAS_VERSION}\"\n```\n\n{{% /alert %}}\n\n\n### 3. Create a Cluster\n\nCreate a basic cluster with `eksctl`.\nThe following cluster configuration will:\n\n* Use CloudFormation to set up the infrastructure needed by the EKS cluster. See [CloudFormation]({{< relref \"../../reference/cloudformation/\" >}}) for a complete description of what `cloudformation.yaml` does for Karpenter.\n* Create a Kubernetes service account and AWS IAM Role, and associate them using IRSA to let Karpenter launch instances.\n* Add the Karpenter node role to the aws-auth configmap to allow nodes to connect.\n* 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.\n* Set KARPENTER_IAM_ROLE_ARN variables.\n* Create a role to allow spot instances.\n* Run Helm to install Karpenter\n\n{{< tabpane text=true right=false >}}\n  {{% tab header=\"**Create cluster command**:\" disabled=true /%}}\n  {{% tab header=\"Managed NodeGroups\" %}}\n  {{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step02-create-cluster.sh\" language=\"bash\"%}}\n  {{% /tab %}}\n  {{% tab header=\"Fargate\" %}}\n  {{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step02-create-cluster-fargate.sh\" language=\"bash\"%}}\n  {{% /tab %}}\n{{< /tabpane >}}\n\nUnless your AWS account has already onboarded to EC2 Spot, you will need to create the service linked role to\navoid the [`ServiceLinkedRoleCreationNotPermitted` error]({{<ref \"../../troubleshooting/#missing-service-linked-role\" >}}).\n\n{{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step06-add-spot-role.sh\" language=\"bash\"%}}\n\n{{% alert title=\"Windows Support Notice\" color=\"warning\" %}}\nIn order to run Windows workloads, Windows support should be enabled in your EKS Cluster.\nSee [Enabling Windows support](https://docs.aws.amazon.com/eks/latest/userguide/windows-support.html#enable-windows-support) to learn more.\n{{% /alert %}}\n\n### 4. Install Karpenter\n\n{{< tabpane text=true right=false >}}\n  {{% tab header=\"**Karpenter installation command**:\" disabled=true /%}}\n  {{% tab header=\"Managed NodeGroups\" %}}\n  {{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step08-apply-helm-chart.sh\" language=\"bash\"%}}\n  {{% /tab %}}\n  {{% tab header=\"Fargate\" %}}\n  {{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step08-apply-helm-chart-fargate.sh\" language=\"bash\"%}}\n  {{% /tab %}}\n{{< /tabpane >}}\n\nAs the OCI Helm chart is signed by [Cosign](https://github.com/sigstore/cosign) as part of the release process you can verify the chart before installing it by running the following command.\n\n```bash\ncosign verify public.ecr.aws/karpenter/karpenter:{{< param \"latest_release_version\" >}} \\\n  --certificate-oidc-issuer=https://token.actions.githubusercontent.com \\\n  --certificate-identity-regexp='https://github\\.com/aws/karpenter-provider-aws/\\.github/workflows/release\\.yaml@.+' \\\n  --certificate-github-workflow-repository=aws/karpenter-provider-aws \\\n  --certificate-github-workflow-name=Release \\\n  --certificate-github-workflow-ref=refs/tags/v{{< param \"latest_release_version\" >}} \\\n  --annotations version={{< param \"latest_release_version\" >}}\n```\n\n{{% alert title=\"DNS Policy Notice\" color=\"warning\" %}}\nKarpenter uses the `ClusterFirst` pod DNS policy by default. This is the Kubernetes cluster default and this ensures that Karpenter can reach-out to internal Kubernetes services during its lifetime. There may be cases where you do not have the DNS service that you are using on your cluster up-and-running before Karpenter starts up. The most common case of this is you want Karpenter to manage the node capacity where your DNS service pods are running.\n\nIf you need Karpenter to manage the DNS service pods' capacity, this means that DNS won't be running when Karpenter starts-up. In this case, you will need to set the pod DNS policy to `Default` with `--set dnsPolicy=Default`. This will tell Karpenter to use the host's DNS resolution instead of the internal DNS resolution, ensuring that you don't have a dependency on the DNS service pods to run. More details on this issue can be found in the following Github issues: [#2186](https://github.com/aws/karpenter-provider-aws/issues/2186) and [#4947](https://github.com/aws/karpenter-provider-aws/issues/4947).\n{{% /alert %}}\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter creates a mapping between CloudProvider machines and CustomResources in the cluster for capacity tracking. To ensure this mapping is consistent, Karpenter utilizes the following tag keys:\n\n* `karpenter.sh/managed-by`\n* `karpenter.sh/nodepool`\n* `kubernetes.io/cluster/${CLUSTER_NAME}`\n\nBecause Karpenter takes this dependency, any user that has the ability to Create/Delete these tags on CloudProvider machines will have the ability to orchestrate Karpenter to Create/Delete CloudProvider machines as a side effect. We recommend that you [enforce tag-based IAM policies](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html) on these tags against any EC2 instance resource (`i-*`) for any users that might have [CreateTags](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTags.html)/[DeleteTags](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DeleteTags.html) permissions but should not have [RunInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html)/[TerminateInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_TerminateInstances.html) permissions.\n{{% /alert %}}\n\n### 5. Create NodePool\n\nA single Karpenter NodePool 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.\n\nCreate a default NodePool using the command below. This NodePool uses `securityGroupSelectorTerms` and `subnetSelectorTerms` to discover resources used to launch nodes. We applied the tag `karpenter.sh/discovery` in the `eksctl` command above. Depending on how these resources are shared between clusters, you may need to use different tagging schemes.\n\nThe `consolidationPolicy` set to `WhenEmptyOrUnderutilized` in the `disruption` block configures Karpenter to reduce cluster cost by removing and replacing nodes. As a result, consolidation will terminate any empty nodes on the cluster. This behavior can be disabled by setting `consolidateAfter` to `Never`, telling Karpenter that it should never consolidate nodes. Review the [NodePool API docs]({{<ref \"../../concepts/nodepools\" >}}) for more information.\n\nNote: This NodePool will create capacity as long as the sum of all created capacity is less than the specified limit.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step12-add-nodepool.sh\" language=\"bash\"%}}\n\nKarpenter is now active and ready to begin provisioning nodes.\n\n### 6. Scale up deployment\n\nThis deployment uses the [pause image](https://www.ianlewis.org/en/almighty-pause-container) and starts with zero replicas.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step13-automatic-node-provisioning.sh\" language=\"bash\"%}}\n\n### 7. Scale down deployment\n\nNow, delete the deployment. After a short amount of time, Karpenter should terminate the empty nodes due to consolidation.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step14-deprovisioning.sh\" language=\"bash\"%}}\n\n### 8. Delete Karpenter nodes manually\n\nIf you delete a node with kubectl, Karpenter will gracefully cordon, drain,\nand shutdown the corresponding instance. Under the hood, Karpenter adds a\nfinalizer to the node object, which blocks deletion until all pods are\ndrained and the instance is terminated. Keep in mind, this only works for\nnodes provisioned by Karpenter.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step16-delete-node.sh\" language=\"bash\"%}}\n\n### 9. Delete the cluster\nTo avoid additional charges, remove the demo infrastructure from your AWS account.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step17-cleanup.sh\" language=\"bash\"%}}\n\n## Monitoring with Grafana (optional)\n\nThis section describes optional ways to configure Karpenter to enhance its capabilities.\nIn 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.\nThis deployment includes two Karpenter dashboards that are automatically onboarded to Grafana. They provide a variety of visualization examples on Karpenter metrics.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step09-add-prometheus-grafana.sh\" language=\"bash\"%}}\n\nThe Grafana instance may be accessed using port forwarding.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step10-add-grafana-port-forward.sh\" language=\"bash\"%}}\n\nThe new stack has only one user, `admin`, and the password is stored in a secret. The following command will retrieve the password.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step11-grafana-get-password.sh\" language=\"bash\"%}}\n\n## Advanced Installation\n\nThe section below covers advanced installation techniques for installing Karpenter. This includes things such as running Karpenter on a cluster without public internet access or ensuring that Karpenter avoids getting throttled by other components in your cluster.\n\n### Private Clusters\n\nYou can optionally install Karpenter on a [private cluster](https://docs.aws.amazon.com/eks/latest/userguide/private-clusters.html#private-cluster-requirements) using the `eksctl` installation by setting `privateCluster.enabled` to true in your [ClusterConfig](https://eksctl.io/usage/eks-private-cluster/#eks-fully-private-cluster) and by setting `--set settings.isolatedVPC=true` when installing the `karpenter` Helm chart.\n\n```bash\nprivateCluster:\n  enabled: true\n```\n\nPrivate clusters have no outbound access to the internet. This means that in order for Karpenter to reach out to the services that it needs to access, you need to enable specific VPC private endpoints. Below shows the endpoints that you need to enable to successfully run Karpenter in a private cluster:\n\n```text\ncom.amazonaws.<region>.ec2\ncom.amazonaws.<region>.ecr.api\ncom.amazonaws.<region>.ecr.dkr\ncom.amazonaws.<region>.s3 – For pulling container images\ncom.amazonaws.<region>.sts – For IAM roles for service accounts\ncom.amazonaws.<region>.ssm - For resolving default AMIs\ncom.amazonaws.<region>.sqs - For accessing SQS if using interruption handling\ncom.amazonaws.<region>.eks - For Karpenter to discover the cluster endpoint\n```\n\nIf you do not currently have these endpoints surfaced in your VPC, you can add the endpoints by running\n\n```bash\naws ec2 create-vpc-endpoint --vpc-id ${VPC_ID} --service-name ${SERVICE_NAME} --vpc-endpoint-type Interface --subnet-ids ${SUBNET_IDS} --security-group-ids ${SECURITY_GROUP_IDS}\n```\n\n{{% alert title=\"Note\" color=\"primary\" %}}\n\nKarpenter (controller and webhook deployment) container images must be in or copied to Amazon ECR private or to another private registry accessible from inside the VPC. If these are not available from within the VPC, or from networks peered with the VPC, you will get Image pull errors when Kubernetes tries to pull these images from ECR public.\n\n{{% /alert %}}\n\n{{% alert title=\"Note\" color=\"primary\" %}}\n\nThere is currently no VPC private endpoint for the [IAM API](https://docs.aws.amazon.com/IAM/latest/APIReference/welcome.html). As a result, you cannot use the default `spec.role` field in your `EC2NodeClass`. Instead, you need to provision and manage an instance profile manually and then specify Karpenter to use this instance profile through the `spec.instanceProfile` field.\n\nYou can provision an instance profile manually and assign a Node role to it by calling the following command\n\n```bash\naws iam create-instance-profile --instance-profile-name \"KarpenterNodeInstanceProfile-${CLUSTER_NAME}\"\naws iam add-role-to-instance-profile --instance-profile-name \"KarpenterNodeInstanceProfile-${CLUSTER_NAME}\" --role-name \"KarpenterNodeRole-${CLUSTER_NAME}\"\n```\n\n{{% /alert %}}\n\n{{% alert title=\"Note\" color=\"primary\" %}}\n\nThere is currently no VPC private endpoint for the [Price List Query API](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/using-price-list-query-api.html). As a result, pricing data can go stale over time. By default, Karpenter ships a static price list that is updated when each binary is released.\n\nFailed requests for pricing data will result in the following error messages\n\n```bash\nERROR   controller.aws.pricing  updating on-demand pricing, RequestError: send request failed\ncaused by: Post \"https://api.pricing.us-east-1.amazonaws.com/\": dial tcp 52.94.231.236:443: i/o timeout; RequestError: send request failed\ncaused 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\"}\n```\n\n{{% /alert %}}\n\n### Preventing APIServer Request Throttling\n\nKubernetes uses [FlowSchemas](https://kubernetes.io/docs/concepts/cluster-administration/flow-control/#flowschema) and [PriorityLevelConfigurations](https://kubernetes.io/docs/concepts/cluster-administration/flow-control/#prioritylevelconfiguration) to map calls to the API server into buckets which determine each user agent's throttling limits.\n\nBy default, Karpenter is installed into the `kube-system` namespace, which leverages the `system-leader-election` and `kube-system-service-accounts` [FlowSchemas](https://kubernetes.io/docs/concepts/cluster-administration/flow-control/#flowschema) to map calls from the `kube-system` namespace to the `leader-election` and `workload-high` PriorityLevelConfigurations respectively. By putting Karpenter in these PriorityLevelConfigurations, we ensure that Karpenter and other critical cluster components are able to run even if other components on the cluster are throttled in other PriorityLevelConfigurations.\n\nIf you install Karpenter in a different namespace than the default `kube-system` namespace, Karpenter will not be put into these higher-priority FlowSchemas by default. Instead, you will need to create custom FlowSchemas for the namespace and service account where Karpenter is installed to ensure that requests are put into this higher PriorityLevelConfiguration.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step15-apply-flowschemas.sh\" language=\"bash\"%}}\n"
  },
  {
    "path": "website/content/en/preview/getting-started/getting-started-with-karpenter/cloudformation.yaml",
    "content": "AWSTemplateFormatVersion: \"2010-09-09\"\nDescription: Resources used by https://github.com/aws/karpenter\nParameters:\n  ClusterName:\n    Type: String\n    Description: \"EKS cluster name\"\nResources:\n  KarpenterNodeRole:\n    Type: \"AWS::IAM::Role\"\n    Properties:\n      RoleName: !Sub \"KarpenterNodeRole-${ClusterName}\"\n      Path: /\n      AssumeRolePolicyDocument:\n        Version: \"2012-10-17\"\n        Statement:\n          - Effect: Allow\n            Principal:\n              Service:\n                !Sub \"ec2.${AWS::URLSuffix}\"\n            Action:\n              - \"sts:AssumeRole\"\n      ManagedPolicyArns:\n        - !Sub \"arn:${AWS::Partition}:iam::aws:policy/AmazonEKS_CNI_Policy\"\n        - !Sub \"arn:${AWS::Partition}:iam::aws:policy/AmazonEKSWorkerNodePolicy\"\n        - !Sub \"arn:${AWS::Partition}:iam::aws:policy/AmazonEC2ContainerRegistryPullOnly\"\n        - !Sub \"arn:${AWS::Partition}:iam::aws:policy/AmazonSSMManagedInstanceCore\"\n  NodeLifecyclePolicy:\n    Type: AWS::IAM::ManagedPolicy\n    Properties:\n      ManagedPolicyName: !Sub \"KarpenterControllerNodeLifecyclePolicy-${ClusterName}\"\n      Path: /\n      # The PolicyDocument must be in JSON string format because we use a StringEquals condition that uses an interpolated\n      # value in one of its key parameters which isn't natively supported by CloudFormation\n      PolicyDocument: !Sub |\n        {\n          \"Version\": \"2012-10-17\",\n          \"Statement\": [\n            {\n              \"Sid\": \"AllowScopedEC2InstanceAccessActions\",\n              \"Effect\": \"Allow\",\n              \"Resource\": [\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}::image/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}::snapshot/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:security-group/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:subnet/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:capacity-reservation/*\"\n              ],\n              \"Action\": [\n                \"ec2:RunInstances\",\n                \"ec2:CreateFleet\"\n              ]\n            },\n            {\n              \"Sid\": \"AllowScopedEC2LaunchTemplateAccessActions\",\n              \"Effect\": \"Allow\",\n              \"Resource\": \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:launch-template/*\",\n              \"Action\": [\n                \"ec2:RunInstances\",\n                \"ec2:CreateFleet\"\n              ],\n              \"Condition\": {\n                \"StringEquals\": {\n                  \"aws:ResourceTag/kubernetes.io/cluster/${ClusterName}\": \"owned\"\n                },\n                \"StringLike\": {\n                  \"aws:ResourceTag/karpenter.sh/nodepool\": \"*\"\n                }\n              }\n            },\n            {\n              \"Sid\": \"AllowScopedEC2InstanceActionsWithTags\",\n              \"Effect\": \"Allow\",\n              \"Resource\": [\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:fleet/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:instance/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:volume/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:network-interface/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:launch-template/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:spot-instances-request/*\"\n              ],\n              \"Action\": [\n                \"ec2:RunInstances\",\n                \"ec2:CreateFleet\",\n                \"ec2:CreateLaunchTemplate\"\n              ],\n              \"Condition\": {\n                \"StringEquals\": {\n                  \"aws:RequestTag/kubernetes.io/cluster/${ClusterName}\": \"owned\",\n                  \"aws:RequestTag/eks:eks-cluster-name\": \"${ClusterName}\"\n                },\n                \"StringLike\": {\n                  \"aws:RequestTag/karpenter.sh/nodepool\": \"*\"\n                }\n              }\n            },\n            {\n              \"Sid\": \"AllowScopedResourceCreationTagging\",\n              \"Effect\": \"Allow\",\n              \"Resource\": [\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:fleet/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:instance/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:volume/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:network-interface/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:launch-template/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:spot-instances-request/*\"\n              ],\n              \"Action\": \"ec2:CreateTags\",\n              \"Condition\": {\n                \"StringEquals\": {\n                  \"aws:RequestTag/kubernetes.io/cluster/${ClusterName}\": \"owned\",\n                  \"aws:RequestTag/eks:eks-cluster-name\": \"${ClusterName}\",\n                  \"ec2:CreateAction\": [\n                    \"RunInstances\",\n                    \"CreateFleet\",\n                    \"CreateLaunchTemplate\"\n                  ]\n                },\n                \"StringLike\": {\n                  \"aws:RequestTag/karpenter.sh/nodepool\": \"*\"\n                }\n              }\n            },\n            {\n              \"Sid\": \"AllowScopedResourceTagging\",\n              \"Effect\": \"Allow\",\n              \"Resource\": \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:instance/*\",\n              \"Action\": \"ec2:CreateTags\",\n              \"Condition\": {\n                \"StringEquals\": {\n                  \"aws:ResourceTag/kubernetes.io/cluster/${ClusterName}\": \"owned\"\n                },\n                \"StringLike\": {\n                  \"aws:ResourceTag/karpenter.sh/nodepool\": \"*\"\n                },\n                \"StringEqualsIfExists\": {\n                  \"aws:RequestTag/eks:eks-cluster-name\": \"${ClusterName}\"\n                },\n                \"ForAllValues:StringEquals\": {\n                  \"aws:TagKeys\": [\n                    \"eks:eks-cluster-name\",\n                    \"karpenter.sh/nodeclaim\",\n                    \"Name\"\n                  ]\n                }\n              }\n            },\n            {\n              \"Sid\": \"AllowScopedDeletion\",\n              \"Effect\": \"Allow\",\n              \"Resource\": [\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:instance/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:launch-template/*\"\n              ],\n              \"Action\": [\n                \"ec2:TerminateInstances\",\n                \"ec2:DeleteLaunchTemplate\"\n              ],\n              \"Condition\": {\n                \"StringEquals\": {\n                  \"aws:ResourceTag/kubernetes.io/cluster/${ClusterName}\": \"owned\"\n                },\n                \"StringLike\": {\n                  \"aws:ResourceTag/karpenter.sh/nodepool\": \"*\"\n                }\n              }\n            }\n          ]\n        }\n  IAMIntegrationPolicy:\n    Type: AWS::IAM::ManagedPolicy\n    Properties:\n      ManagedPolicyName: !Sub \"KarpenterControllerIAMIntegrationPolicy-${ClusterName}\"\n      Path: /\n      # The PolicyDocument must be in JSON string format because we use a StringEquals condition that uses an interpolated\n      # value in one of its key parameters which isn't natively supported by CloudFormation\n      PolicyDocument: !Sub |\n        {\n          \"Version\": \"2012-10-17\",\n          \"Statement\": [\n            {\n              \"Sid\": \"AllowPassingInstanceRole\",\n              \"Effect\": \"Allow\",\n              \"Resource\": \"${KarpenterNodeRole.Arn}\",\n              \"Action\": \"iam:PassRole\",\n              \"Condition\": {\n                \"StringEquals\": {\n                  \"iam:PassedToService\": [\n                    \"ec2.amazonaws.com\",\n                    \"ec2.amazonaws.com.cn\"\n                  ]\n                }\n              }\n            },\n            {\n              \"Sid\": \"AllowScopedInstanceProfileCreationActions\",\n              \"Effect\": \"Allow\",\n              \"Resource\": \"arn:${AWS::Partition}:iam::${AWS::AccountId}:instance-profile/*\",\n              \"Action\": [\n                \"iam:CreateInstanceProfile\"\n              ],\n              \"Condition\": {\n                \"StringEquals\": {\n                  \"aws:RequestTag/kubernetes.io/cluster/${ClusterName}\": \"owned\",\n                  \"aws:RequestTag/eks:eks-cluster-name\": \"${ClusterName}\",\n                  \"aws:RequestTag/topology.kubernetes.io/region\": \"${AWS::Region}\"\n                },\n                \"StringLike\": {\n                  \"aws:RequestTag/karpenter.k8s.aws/ec2nodeclass\": \"*\"\n                }\n              }\n            },\n            {\n              \"Sid\": \"AllowScopedInstanceProfileTagActions\",\n              \"Effect\": \"Allow\",\n              \"Resource\": \"arn:${AWS::Partition}:iam::${AWS::AccountId}:instance-profile/*\",\n              \"Action\": [\n                \"iam:TagInstanceProfile\"\n              ],\n              \"Condition\": {\n                \"StringEquals\": {\n                  \"aws:ResourceTag/kubernetes.io/cluster/${ClusterName}\": \"owned\",\n                  \"aws:ResourceTag/topology.kubernetes.io/region\": \"${AWS::Region}\",\n                  \"aws:RequestTag/kubernetes.io/cluster/${ClusterName}\": \"owned\",\n                  \"aws:RequestTag/eks:eks-cluster-name\": \"${ClusterName}\",\n                  \"aws:RequestTag/topology.kubernetes.io/region\": \"${AWS::Region}\"\n                },\n                \"StringLike\": {\n                  \"aws:ResourceTag/karpenter.k8s.aws/ec2nodeclass\": \"*\",\n                  \"aws:RequestTag/karpenter.k8s.aws/ec2nodeclass\": \"*\"\n                }\n              }\n            },\n            {\n              \"Sid\": \"AllowScopedInstanceProfileActions\",\n              \"Effect\": \"Allow\",\n              \"Resource\": \"arn:${AWS::Partition}:iam::${AWS::AccountId}:instance-profile/*\",\n              \"Action\": [\n                \"iam:AddRoleToInstanceProfile\",\n                \"iam:RemoveRoleFromInstanceProfile\",\n                \"iam:DeleteInstanceProfile\"\n              ],\n              \"Condition\": {\n                \"StringEquals\": {\n                  \"aws:ResourceTag/kubernetes.io/cluster/${ClusterName}\": \"owned\",\n                  \"aws:ResourceTag/topology.kubernetes.io/region\": \"${AWS::Region}\"\n                },\n                \"StringLike\": {\n                  \"aws:ResourceTag/karpenter.k8s.aws/ec2nodeclass\": \"*\"\n                }\n              }\n            }\n          ]\n        }\n  EKSIntegrationPolicy:\n    Type: AWS::IAM::ManagedPolicy\n    Properties:\n      ManagedPolicyName: !Sub \"KarpenterControllerEKSIntegrationPolicy-${ClusterName}\"\n      Path: /\n      # The PolicyDocument must be in JSON string format because we use a StringEquals condition that uses an interpolated\n      # value in one of its key parameters which isn't natively supported by CloudFormation\n      PolicyDocument: !Sub |\n        {\n          \"Version\": \"2012-10-17\",\n          \"Statement\": [\n            {\n              \"Sid\": \"AllowAPIServerEndpointDiscovery\",\n              \"Effect\": \"Allow\",\n              \"Resource\": \"arn:${AWS::Partition}:eks:${AWS::Region}:${AWS::AccountId}:cluster/${ClusterName}\",\n              \"Action\": \"eks:DescribeCluster\"\n            }\n          ]\n        }\n  InterruptionPolicy:\n    Type: AWS::IAM::ManagedPolicy\n    Properties:\n      ManagedPolicyName: !Sub \"KarpenterControllerInterruptionPolicy-${ClusterName}\"\n      Path: /\n      # The PolicyDocument must be in JSON string format because we use a StringEquals condition that uses an interpolated\n      # value in one of its key parameters which isn't natively supported by CloudFormation\n      PolicyDocument: !Sub |\n        {\n          \"Version\": \"2012-10-17\",\n          \"Statement\": [\n            {\n              \"Sid\": \"AllowInterruptionQueueActions\",\n              \"Effect\": \"Allow\",\n              \"Resource\": \"${KarpenterInterruptionQueue.Arn}\",\n              \"Action\": [\n                \"sqs:DeleteMessage\",\n                \"sqs:GetQueueUrl\",\n                \"sqs:ReceiveMessage\"\n              ]\n            }\n          ]\n        }\n  ResourceDiscoveryPolicy:\n    Type: AWS::IAM::ManagedPolicy\n    Properties:\n      ManagedPolicyName: !Sub \"KarpenterControllerResourceDiscoveryPolicy-${ClusterName}\"\n      Path: /\n      # The PolicyDocument must be in JSON string format because we use a StringEquals condition that uses an interpolated\n      # value in one of its key parameters which isn't natively supported by CloudFormation\n      PolicyDocument: !Sub |\n        {\n          \"Version\": \"2012-10-17\",\n          \"Statement\": [\n            {\n              \"Sid\": \"AllowRegionalReadActions\",\n              \"Effect\": \"Allow\",\n              \"Resource\": \"*\",\n              \"Action\": [\n                \"ec2:DescribeCapacityReservations\",\n                \"ec2:DescribeImages\",\n                \"ec2:DescribeInstances\",\n                \"ec2:DescribeInstanceTypeOfferings\",\n                \"ec2:DescribeInstanceTypes\",\n                \"ec2:DescribeLaunchTemplates\",\n                \"ec2:DescribeSecurityGroups\",\n                \"ec2:DescribeSpotPriceHistory\",\n                \"ec2:DescribeSubnets\"\n              ],\n              \"Condition\": {\n                \"StringEquals\": {\n                  \"aws:RequestedRegion\": \"${AWS::Region}\"\n                }\n              }\n            },\n            {\n              \"Sid\": \"AllowSSMReadActions\",\n              \"Effect\": \"Allow\",\n              \"Resource\": \"arn:${AWS::Partition}:ssm:${AWS::Region}::parameter/aws/service/*\",\n              \"Action\": \"ssm:GetParameter\"\n            },\n            {\n              \"Sid\": \"AllowPricingReadActions\",\n              \"Effect\": \"Allow\",\n              \"Resource\": \"*\",\n              \"Action\": \"pricing:GetProducts\"\n            },\n            {\n              \"Sid\": \"AllowUnscopedInstanceProfileListAction\",\n              \"Effect\": \"Allow\",\n              \"Resource\": \"*\",\n              \"Action\": \"iam:ListInstanceProfiles\"\n            },\n            {\n              \"Sid\": \"AllowInstanceProfileReadActions\",\n              \"Effect\": \"Allow\",\n              \"Resource\": \"arn:${AWS::Partition}:iam::${AWS::AccountId}:instance-profile/*\",\n              \"Action\": \"iam:GetInstanceProfile\"\n            }\n          ]\n        }\n  KarpenterInterruptionQueue:\n    Type: AWS::SQS::Queue\n    Properties:\n      QueueName: !Sub \"${ClusterName}\"\n      MessageRetentionPeriod: 300\n      SqsManagedSseEnabled: true\n  KarpenterInterruptionQueuePolicy:\n    Type: AWS::SQS::QueuePolicy\n    Properties:\n      Queues:\n        - !Ref KarpenterInterruptionQueue\n      PolicyDocument:\n        Id: EC2InterruptionPolicy\n        Statement:\n          - Effect: Allow\n            Principal:\n              Service:\n                - events.amazonaws.com\n                - sqs.amazonaws.com\n            Action: sqs:SendMessage\n            Resource: !GetAtt KarpenterInterruptionQueue.Arn\n          - Sid: DenyHTTP\n            Effect: Deny\n            Action: sqs:*\n            Resource: !GetAtt KarpenterInterruptionQueue.Arn\n            Condition:\n              Bool:\n                aws:SecureTransport: false\n            Principal: \"*\"\n  ScheduledChangeRule:\n    Type: 'AWS::Events::Rule'\n    Properties:\n      EventPattern:\n        source:\n          - aws.health\n        detail-type:\n          - AWS Health Event\n      Targets:\n        - Id: KarpenterInterruptionQueueTarget\n          Arn: !GetAtt KarpenterInterruptionQueue.Arn\n  SpotInterruptionRule:\n    Type: 'AWS::Events::Rule'\n    Properties:\n      EventPattern:\n        source:\n          - aws.ec2\n        detail-type:\n          - EC2 Spot Instance Interruption Warning\n      Targets:\n        - Id: KarpenterInterruptionQueueTarget\n          Arn: !GetAtt KarpenterInterruptionQueue.Arn\n  RebalanceRule:\n    Type: 'AWS::Events::Rule'\n    Properties:\n      EventPattern:\n        source:\n          - aws.ec2\n        detail-type:\n          - EC2 Instance Rebalance Recommendation\n      Targets:\n        - Id: KarpenterInterruptionQueueTarget\n          Arn: !GetAtt KarpenterInterruptionQueue.Arn\n  InstanceStateChangeRule:\n    Type: 'AWS::Events::Rule'\n    Properties:\n      EventPattern:\n        source:\n          - aws.ec2\n        detail-type:\n          - EC2 Instance State-change Notification\n      Targets:\n        - Id: KarpenterInterruptionQueueTarget\n          Arn: !GetAtt KarpenterInterruptionQueue.Arn\n  CapacityReservationInterruptionRule:\n    Type: 'AWS::Events::Rule'\n    Properties:\n      EventPattern:\n        source:\n          - aws.ec2\n        detail-type:\n          - EC2 Capacity Reservation Instance Interruption Warning\n      Targets:\n        - Id: KarpenterInterruptionQueueTarget\n          Arn: !GetAtt KarpenterInterruptionQueue.Arn"
  },
  {
    "path": "website/content/en/preview/getting-started/getting-started-with-karpenter/grafana-values.yaml",
    "content": "datasources:\n  datasources.yaml:\n    apiVersion: 1\n    datasources:\n    - name: Prometheus\n      type: prometheus\n      version: 1\n      url: http://prometheus-server:80\n      access: proxy\ndashboardProviders:\n  dashboardproviders.yaml:\n    apiVersion: 1\n    providers:\n    - name: 'default'\n      orgId: 1\n      folder: ''\n      type: file\n      disableDeletion: false\n      editable: true\n      options:\n        path: /var/lib/grafana/dashboards/default\ndashboards:\n  default:\n    capacity-dashboard:\n      url: https://karpenter.sh/preview/getting-started/getting-started-with-karpenter/karpenter-capacity-dashboard.json\n    performance-dashboard:\n      url: https://karpenter.sh/preview/getting-started/getting-started-with-karpenter/karpenter-performance-dashboard.json\n"
  },
  {
    "path": "website/content/en/preview/getting-started/getting-started-with-karpenter/karpenter-capacity-dashboard.json",
    "content": "{\n    \"annotations\": {\n      \"list\": [\n        {\n          \"builtIn\": 1,\n          \"datasource\": \"-- Grafana --\",\n          \"enable\": true,\n          \"hide\": true,\n          \"iconColor\": \"rgba(0, 211, 255, 1)\",\n          \"name\": \"Annotations & Alerts\",\n          \"target\": {\n            \"limit\": 100,\n            \"matchAny\": false,\n            \"tags\": [],\n            \"type\": \"dashboard\"\n          },\n          \"type\": \"dashboard\"\n        }\n      ]\n    },\n    \"editable\": true,\n    \"fiscalYearStartMonth\": 0,\n    \"graphTooltip\": 0,\n    \"id\": 32,\n    \"links\": [],\n    \"liveNow\": true,\n    \"panels\": [\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"description\": \"\",\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisBorderShow\": false,\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"Nodes rate\",\n              \"axisPlacement\": \"auto\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 10,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"insertNulls\": false,\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"auto\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"none\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"min\": 0,\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            },\n            \"unit\": \"none\"\n          },\n          \"overrides\": [\n            {\n              \"matcher\": {\n                \"id\": \"byFrameRefID\",\n                \"options\": \"B\"\n              },\n              \"properties\": [\n                {\n                  \"id\": \"custom.axisPlacement\",\n                  \"value\": \"right\"\n                },\n                {\n                  \"id\": \"custom.axisLabel\",\n                  \"value\": \"Nodes total\"\n                }\n              ]\n            }\n          ]\n        },\n        \"gridPos\": {\n          \"h\": 5,\n          \"w\": 24,\n          \"x\": 0,\n          \"y\": 0\n        },\n        \"id\": 14,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [\n              \"lastNotNull\"\n            ],\n            \"displayMode\": \"table\",\n            \"placement\": \"right\",\n            \"showLegend\": true\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"sum(rate(karpenter_nodes_created_total{nodepool=~\\\"$nodepool\\\"}[$__rate_interval])) by(cluster,nodepool)\",\n            \"format\": \"time_series\",\n            \"legendFormat\": \"{{cluster}}\",\n            \"range\": true,\n            \"refId\": \"A\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"sum by(cluster,nodepool) (karpenter_nodes_created_total{nodepool=~\\\"$nodepool\\\"})\",\n            \"hide\": false,\n            \"instant\": false,\n            \"legendFormat\": \"__auto\",\n            \"range\": true,\n            \"refId\": \"B\"\n          }\n        ],\n        \"title\": \"Nodes Created by nodepool\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"description\": \"\",\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisBorderShow\": false,\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"Nodes rate\",\n              \"axisPlacement\": \"auto\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 10,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"insertNulls\": false,\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"auto\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"none\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"min\": 0,\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            },\n            \"unit\": \"none\"\n          },\n          \"overrides\": [\n            {\n              \"matcher\": {\n                \"id\": \"byFrameRefID\",\n                \"options\": \"B\"\n              },\n              \"properties\": [\n                {\n                  \"id\": \"custom.axisPlacement\",\n                  \"value\": \"right\"\n                },\n                {\n                  \"id\": \"custom.axisLabel\",\n                  \"value\": \"Nodes total\"\n                }\n              ]\n            }\n          ]\n        },\n        \"gridPos\": {\n          \"h\": 5,\n          \"w\": 24,\n          \"x\": 0,\n          \"y\": 5\n        },\n        \"id\": 15,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [\n              \"lastNotNull\"\n            ],\n            \"displayMode\": \"table\",\n            \"placement\": \"right\",\n            \"showLegend\": true\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"sum(rate(karpenter_nodes_terminated_total{nodepool=~\\\"$nodepool\\\"}[$__rate_interval])) by(cluster,nodepool)\",\n            \"format\": \"time_series\",\n            \"legendFormat\": \"__auto\",\n            \"range\": true,\n            \"refId\": \"A\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"sum by(cluster,nodepool) (karpenter_nodes_terminated_total{nodepool=~\\\"$nodepool\\\"})\",\n            \"hide\": false,\n            \"instant\": false,\n            \"legendFormat\": \"__auto\",\n            \"range\": true,\n            \"refId\": \"B\"\n          }\n        ],\n        \"title\": \"Nodes Terminated by nodepool\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisBorderShow\": false,\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"\",\n              \"axisPlacement\": \"auto\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 10,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"insertNulls\": false,\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"auto\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"none\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            }\n          },\n          \"overrides\": []\n        },\n        \"gridPos\": {\n          \"h\": 6,\n          \"w\": 24,\n          \"x\": 0,\n          \"y\": 10\n        },\n        \"id\": 12,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [\n              \"last\"\n            ],\n            \"displayMode\": \"table\",\n            \"placement\": \"right\",\n            \"showLegend\": true\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"exemplar\": false,\n            \"expr\": \"sum by(reason)(karpenter_voluntary_disruption_eligible_nodes)\",\n            \"legendFormat\": \"reason={{reason}}\",\n            \"range\": true,\n            \"refId\": \"A\"\n          }\n        ],\n        \"title\": \"Nodes Eligible for Disruptions by \\\"reason\\\"\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"description\": \"\",\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisBorderShow\": false,\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"Disruptions rate\",\n              \"axisPlacement\": \"auto\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 10,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"insertNulls\": false,\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"auto\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"normal\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            }\n          },\n          \"overrides\": [\n            {\n              \"matcher\": {\n                \"id\": \"byFrameRefID\",\n                \"options\": \"B\"\n              },\n              \"properties\": [\n                {\n                  \"id\": \"custom.axisPlacement\",\n                  \"value\": \"right\"\n                },\n                {\n                  \"id\": \"custom.axisLabel\",\n                  \"value\": \"Disruptions total\"\n                }\n              ]\n            }\n          ]\n        },\n        \"gridPos\": {\n          \"h\": 6,\n          \"w\": 24,\n          \"x\": 0,\n          \"y\": 16\n        },\n        \"id\": 17,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [\n              \"last\"\n            ],\n            \"displayMode\": \"table\",\n            \"placement\": \"right\",\n            \"showLegend\": true\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"exemplar\": false,\n            \"expr\": \"sum(rate(karpenter_nodeclaims_disrupted_total{nodepool=~\\\"$nodepool\\\"}[$__rate_interval])) by(cluster,nodepool)\",\n            \"legendFormat\": \"{{label_name}}\",\n            \"range\": true,\n            \"refId\": \"A\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"sum by(cluster,nodepool)(karpenter_nodeclaims_disrupted_total{nodepool=~\\\"$nodepool\\\"})\",\n            \"hide\": false,\n            \"instant\": false,\n            \"legendFormat\": \"{{label_name}}\",\n            \"range\": true,\n            \"refId\": \"B\"\n          }\n        ],\n        \"title\": \"Node Disruptions by \\\"$distribution_filter\\\"\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisBorderShow\": false,\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"Disruptions rate\",\n              \"axisPlacement\": \"left\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 10,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"insertNulls\": false,\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"auto\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"normal\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            }\n          },\n          \"overrides\": [\n            {\n              \"matcher\": {\n                \"id\": \"byFrameRefID\",\n                \"options\": \"B\"\n              },\n              \"properties\": [\n                {\n                  \"id\": \"custom.axisPlacement\",\n                  \"value\": \"right\"\n                },\n                {\n                  \"id\": \"custom.axisLabel\",\n                  \"value\": \"Disruptions total\"\n                }\n              ]\n            }\n          ]\n        },\n        \"gridPos\": {\n          \"h\": 6,\n          \"w\": 24,\n          \"x\": 0,\n          \"y\": 22\n        },\n        \"id\": 19,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [\n              \"last\"\n            ],\n            \"displayMode\": \"table\",\n            \"placement\": \"right\",\n            \"showLegend\": true\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"exemplar\": true,\n            \"expr\": \"sum(rate(karpenter_voluntary_disruption_decisions_total[$__rate_interval])) by(cluster,nodepool,consolidation_type,decision)\",\n            \"hide\": false,\n            \"legendFormat\": \"type={{consolidation_type}}, decision={{decision}}\",\n            \"range\": true,\n            \"refId\": \"A\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"sum by(consolidation_type,decision)(karpenter_voluntary_disruption_decisions_total)\",\n            \"hide\": true,\n            \"instant\": false,\n            \"legendFormat\": \"{{label_name}}\",\n            \"range\": true,\n            \"refId\": \"B\"\n          }\n        ],\n        \"title\": \"Disruption Actions performed by \\\"type\\\" and \\\"decision\\\"\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisBorderShow\": false,\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"\",\n              \"axisPlacement\": \"auto\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 10,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"insertNulls\": false,\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"auto\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"normal\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            }\n          },\n          \"overrides\": []\n        },\n        \"gridPos\": {\n          \"h\": 8,\n          \"w\": 24,\n          \"x\": 0,\n          \"y\": 28\n        },\n        \"id\": 6,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [],\n            \"displayMode\": \"table\",\n            \"placement\": \"right\",\n            \"showLegend\": true\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"sum by ($distribution_filter)(\\n    karpenter_pods_state{arch=~\\\"$arch\\\", capacity_type=~\\\"$capacity_type\\\", instance_type=~\\\"$instance_type\\\", nodepool=~\\\"$nodepool\\\"}\\n)\",\n            \"legendFormat\": \"{{label_name}}\",\n            \"range\": true,\n            \"refId\": \"A\"\n          }\n        ],\n        \"title\": \"Pod Distribution by \\\"$distribution_filter\\\"\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisBorderShow\": false,\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"\",\n              \"axisPlacement\": \"auto\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 10,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"insertNulls\": false,\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"auto\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"normal\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            }\n          },\n          \"overrides\": []\n        },\n        \"gridPos\": {\n          \"h\": 6,\n          \"w\": 24,\n          \"x\": 0,\n          \"y\": 36\n        },\n        \"id\": 20,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [\n              \"last\"\n            ],\n            \"displayMode\": \"table\",\n            \"placement\": \"right\",\n            \"showLegend\": true\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"sum by(phase)(karpenter_pods_state)\",\n            \"legendFormat\": \"{{label_name}}\",\n            \"range\": true,\n            \"refId\": \"A\"\n          }\n        ],\n        \"title\": \"Pod Phase\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"continuous-RdYlGr\"\n            },\n            \"custom\": {\n              \"align\": \"left\",\n              \"cellOptions\": {\n                \"type\": \"auto\"\n              },\n              \"inspect\": false\n            },\n            \"mappings\": [],\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            }\n          },\n          \"overrides\": [\n            {\n              \"matcher\": {\n                \"id\": \"byRegexp\",\n                \"options\": \".*Utilization$\"\n              },\n              \"properties\": [\n                {\n                  \"id\": \"custom.cellOptions\",\n                  \"value\": {\n                    \"mode\": \"gradient\",\n                    \"type\": \"gauge\"\n                  }\n                },\n                {\n                  \"id\": \"min\",\n                  \"value\": 0\n                },\n                {\n                  \"id\": \"max\",\n                  \"value\": 1\n                },\n                {\n                  \"id\": \"unit\",\n                  \"value\": \"percentunit\"\n                }\n              ]\n            },\n            {\n              \"matcher\": {\n                \"id\": \"byName\",\n                \"options\": \"Memory Provisioned\"\n              },\n              \"properties\": [\n                {\n                  \"id\": \"unit\",\n                  \"value\": \"bytes\"\n                }\n              ]\n            }\n          ]\n        },\n        \"gridPos\": {\n          \"h\": 11,\n          \"w\": 18,\n          \"x\": 0,\n          \"y\": 42\n        },\n        \"id\": 10,\n        \"options\": {\n          \"cellHeight\": \"sm\",\n          \"footer\": {\n            \"countRows\": false,\n            \"fields\": \"\",\n            \"reducer\": [\n              \"sum\"\n            ],\n            \"show\": false\n          },\n          \"showHeader\": true\n        },\n        \"pluginVersion\": \"11.1.0\",\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"exemplar\": false,\n            \"expr\": \"karpenter_nodepools_usage{resource_type=\\\"cpu\\\"} / karpenter_nodepools_limit{resource_type=\\\"cpu\\\"}\",\n            \"format\": \"table\",\n            \"instant\": true,\n            \"legendFormat\": \"CPU Limit Utilization\",\n            \"range\": false,\n            \"refId\": \"CPU Limit Utilization\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"exemplar\": false,\n            \"expr\": \"count by (nodepool)(karpenter_nodes_allocatable{nodepool!=\\\"N/A\\\",resource_type=\\\"cpu\\\"}) # Selects a single resource type to get node count\",\n            \"format\": \"table\",\n            \"hide\": false,\n            \"instant\": true,\n            \"range\": false,\n            \"refId\": \"Node Count\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"exemplar\": false,\n            \"expr\": \"karpenter_nodepools_usage{resource_type=\\\"memory\\\"} / karpenter_nodepools_limit{resource_type=\\\"memory\\\"}\",\n            \"format\": \"table\",\n            \"hide\": false,\n            \"instant\": true,\n            \"legendFormat\": \"Memory Limit Utilization\",\n            \"range\": false,\n            \"refId\": \"Memory Limit Utilization\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"exemplar\": false,\n            \"expr\": \"sum by (nodepool)(karpenter_nodes_allocatable{nodepool!=\\\"N/A\\\",resource_type=\\\"cpu\\\"})\",\n            \"format\": \"table\",\n            \"hide\": false,\n            \"instant\": true,\n            \"range\": false,\n            \"refId\": \"CPU Capacity\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"exemplar\": false,\n            \"expr\": \"sum by (nodepool)(karpenter_nodes_allocatable{nodepool!=\\\"N/A\\\",resource_type=\\\"memory\\\"})\",\n            \"format\": \"table\",\n            \"hide\": false,\n            \"instant\": true,\n            \"range\": false,\n            \"refId\": \"Memory Capacity\"\n          }\n        ],\n        \"title\": \"Nodepool Summary\",\n        \"transformations\": [\n          {\n            \"id\": \"seriesToColumns\",\n            \"options\": {\n              \"byField\": \"nodepool\"\n            }\n          },\n          {\n            \"id\": \"organize\",\n            \"options\": {\n              \"excludeByName\": {\n                \"Time\": true,\n                \"Time 1\": true,\n                \"Time 2\": true,\n                \"Time 3\": true,\n                \"Time 4\": true,\n                \"Time 5\": true,\n                \"__name__\": true,\n                \"instance\": true,\n                \"instance 1\": true,\n                \"instance 2\": true,\n                \"job\": true,\n                \"job 1\": true,\n                \"job 2\": true,\n                \"resource_type\": true,\n                \"resource_type 1\": true,\n                \"resource_type 2\": true\n              },\n              \"indexByName\": {\n                \"Time 1\": 6,\n                \"Time 2\": 7,\n                \"Time 3\": 11,\n                \"Time 4\": 15,\n                \"Time 5\": 16,\n                \"Value #CPU Capacity\": 2,\n                \"Value #CPU Limit Utilization\": 3,\n                \"Value #Memory Capacity\": 4,\n                \"Value #Memory Limit Utilization\": 5,\n                \"Value #Node Count\": 1,\n                \"instance 1\": 8,\n                \"instance 2\": 12,\n                \"job 1\": 9,\n                \"job 2\": 13,\n                \"nodepool\": 0,\n                \"resource_type 1\": 10,\n                \"resource_type 2\": 14\n              },\n              \"renameByName\": {\n                \"Time 1\": \"\",\n                \"Value\": \"CPU Utilization\",\n                \"Value #CPU Capacity\": \"CPU Provisioned\",\n                \"Value #CPU Limit Utilization\": \"CPU Limit Utilization\",\n                \"Value #CPU Utilization\": \"CPU Limit Utilization\",\n                \"Value #Memory Capacity\": \"Memory Provisioned\",\n                \"Value #Memory Limit Utilization\": \"Memory Limit Utilization\",\n                \"Value #Memory Utilization\": \"Memory Utilization\",\n                \"Value #Node Count\": \"Node Count\",\n                \"instance\": \"\",\n                \"instance 1\": \"\",\n                \"job\": \"\",\n                \"nodepool\": \"Nodepool\"\n              }\n            }\n          }\n        ],\n        \"type\": \"table\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisBorderShow\": false,\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"\",\n              \"axisPlacement\": \"auto\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 0,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"insertNulls\": false,\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"auto\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"none\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"max\": 1,\n            \"min\": 0,\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            },\n            \"unit\": \"percentunit\"\n          },\n          \"overrides\": []\n        },\n        \"gridPos\": {\n          \"h\": 11,\n          \"w\": 6,\n          \"x\": 18,\n          \"y\": 42\n        },\n        \"id\": 8,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [],\n            \"displayMode\": \"list\",\n            \"placement\": \"bottom\",\n            \"showLegend\": false\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"(count(karpenter_nodes_allocatable{arch=~\\\"$arch\\\",capacity_type=\\\"spot\\\",instance_type=~\\\"$instance_type\\\",nodepool=~\\\"$nodepool\\\",zone=~\\\"$zone\\\"}) or vector(0)) / count(karpenter_nodes_allocatable{arch=~\\\"$arch\\\",instance_type=~\\\"$instance_type\\\",nodepool=~\\\"$nodepool\\\",zone=~\\\"$zone\\\"})\",\n            \"legendFormat\": \"Percentage\",\n            \"range\": true,\n            \"refId\": \"A\"\n          }\n        ],\n        \"title\": \"Spot Node Percentage\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"continuous-RdYlGr\"\n            },\n            \"custom\": {\n              \"align\": \"left\",\n              \"cellOptions\": {\n                \"type\": \"auto\"\n              },\n              \"inspect\": false\n            },\n            \"mappings\": [],\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            }\n          },\n          \"overrides\": [\n            {\n              \"matcher\": {\n                \"id\": \"byName\",\n                \"options\": \"node_name\"\n              },\n              \"properties\": [\n                {\n                  \"id\": \"custom.width\",\n                  \"value\": 333\n                }\n              ]\n            },\n            {\n              \"matcher\": {\n                \"id\": \"byRegexp\",\n                \"options\": \".*Utilization\"\n              },\n              \"properties\": [\n                {\n                  \"id\": \"custom.cellOptions\",\n                  \"value\": {\n                    \"mode\": \"gradient\",\n                    \"type\": \"gauge\"\n                  }\n                },\n                {\n                  \"id\": \"unit\",\n                  \"value\": \"percentunit\"\n                },\n                {\n                  \"id\": \"min\",\n                  \"value\": 0\n                },\n                {\n                  \"id\": \"thresholds\",\n                  \"value\": {\n                    \"mode\": \"percentage\",\n                    \"steps\": [\n                      {\n                        \"color\": \"green\",\n                        \"value\": null\n                      },\n                      {\n                        \"color\": \"red\",\n                        \"value\": 75\n                      }\n                    ]\n                  }\n                },\n                {\n                  \"id\": \"max\",\n                  \"value\": 1\n                }\n              ]\n            },\n            {\n              \"matcher\": {\n                \"id\": \"byName\",\n                \"options\": \"Uptime\"\n              },\n              \"properties\": [\n                {\n                  \"id\": \"unit\",\n                  \"value\": \"s\"\n                },\n                {\n                  \"id\": \"decimals\",\n                  \"value\": 0\n                }\n              ]\n            }\n          ]\n        },\n        \"gridPos\": {\n          \"h\": 9,\n          \"w\": 24,\n          \"x\": 0,\n          \"y\": 53\n        },\n        \"id\": 4,\n        \"options\": {\n          \"cellHeight\": \"sm\",\n          \"footer\": {\n            \"countRows\": false,\n            \"fields\": \"\",\n            \"reducer\": [\n              \"sum\"\n            ],\n            \"show\": false\n          },\n          \"showHeader\": true,\n          \"sortBy\": [\n            {\n              \"desc\": true,\n              \"displayName\": \"Uptime\"\n            }\n          ]\n        },\n        \"pluginVersion\": \"11.1.0\",\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"exemplar\": false,\n            \"expr\": \"((karpenter_nodes_total_daemon_requests{resource_type=\\\"cpu\\\",arch=~\\\"$arch\\\",capacity_type=~\\\"$capacity_type\\\",instance_type=~\\\"$instance_type\\\",nodepool=~\\\"$nodepool\\\",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\\\",nodepool=~\\\"$nodepool\\\",zone=~\\\"$zone\\\"} or karpenter_nodes_allocatable*0)) / \\nkarpenter_nodes_allocatable{resource_type=\\\"cpu\\\",arch=~\\\"$arch\\\",capacity_type=~\\\"$capacity_type\\\",instance_type=~\\\"$instance_type\\\",nodepool=~\\\"$nodepool\\\",zone=~\\\"$zone\\\"}\",\n            \"format\": \"table\",\n            \"hide\": false,\n            \"instant\": true,\n            \"legendFormat\": \"CPU Utilization\",\n            \"range\": false,\n            \"refId\": \"CPU Utilization\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"exemplar\": false,\n            \"expr\": \"((karpenter_nodes_total_daemon_requests{resource_type=\\\"memory\\\",arch=~\\\"$arch\\\",capacity_type=~\\\"$capacity_type\\\",instance_type=~\\\"$instance_type\\\",nodepool=~\\\"$nodepool\\\",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\\\",nodepool=~\\\"$nodepool\\\",zone=~\\\"$zone\\\"} or karpenter_nodes_allocatable*0)) / \\nkarpenter_nodes_allocatable{resource_type=\\\"memory\\\",arch=~\\\"$arch\\\",capacity_type=~\\\"$capacity_type\\\",instance_type=~\\\"$instance_type\\\",nodepool=~\\\"$nodepool\\\",zone=~\\\"$zone\\\"}\",\n            \"format\": \"table\",\n            \"hide\": false,\n            \"instant\": true,\n            \"legendFormat\": \"Memory Utilization\",\n            \"range\": false,\n            \"refId\": \"Memory Utilization\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"exemplar\": false,\n            \"expr\": \"karpenter_nodes_total_daemon_requests{resource_type=\\\"pods\\\",arch=~\\\"$arch\\\",capacity_type=~\\\"$capacity_type\\\",instance_type=~\\\"$instance_type\\\",nodepool=~\\\"$nodepool\\\",zone=~\\\"$zone\\\"} + \\nkarpenter_nodes_total_pod_requests{resource_type=\\\"pods\\\",arch=~\\\"$arch\\\",capacity_type=~\\\"$capacity_type\\\",instance_type=~\\\"$instance_type\\\",nodepool=~\\\"$nodepool\\\",zone=~\\\"$zone\\\"}\",\n            \"format\": \"table\",\n            \"hide\": false,\n            \"instant\": true,\n            \"legendFormat\": \"Memory Utilization\",\n            \"range\": false,\n            \"refId\": \"Pod Count\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"exemplar\": false,\n            \"expr\": \"label_replace(\\n    sum by (node)(node_time_seconds) - sum by (node)(node_boot_time_seconds),\\n    \\\"node_name\\\", \\\"$1\\\", \\\"node\\\", \\\"(.+)\\\"\\n)\",\n            \"format\": \"table\",\n            \"hide\": false,\n            \"instant\": true,\n            \"legendFormat\": \"Uptime\",\n            \"range\": false,\n            \"refId\": \"Uptime\"\n          }\n        ],\n        \"title\": \"Node Summary\",\n        \"transformations\": [\n          {\n            \"id\": \"seriesToColumns\",\n            \"options\": {\n              \"byField\": \"node_name\"\n            }\n          },\n          {\n            \"id\": \"organize\",\n            \"options\": {\n              \"excludeByName\": {\n                \"Time\": true,\n                \"Time 1\": true,\n                \"Time 2\": true,\n                \"Time 3\": true,\n                \"Time 4\": true,\n                \"Value\": false,\n                \"Value #Pod Count\": false,\n                \"__name__\": true,\n                \"arch\": true,\n                \"arch 1\": true,\n                \"arch 2\": true,\n                \"arch 3\": true,\n                \"capacity_type 2\": true,\n                \"capacity_type 3\": true,\n                \"instance\": true,\n                \"instance 1\": true,\n                \"instance 2\": true,\n                \"instance 3\": true,\n                \"instance_category 1\": true,\n                \"instance_category 2\": true,\n                \"instance_category 3\": true,\n                \"instance_cpu\": true,\n                \"instance_cpu 1\": true,\n                \"instance_cpu 2\": true,\n                \"instance_cpu 3\": true,\n                \"instance_family\": true,\n                \"instance_family 1\": true,\n                \"instance_family 2\": true,\n                \"instance_family 3\": true,\n                \"instance_generation 1\": true,\n                \"instance_generation 2\": true,\n                \"instance_generation 3\": true,\n                \"instance_gpu_count\": true,\n                \"instance_gpu_count 1\": true,\n                \"instance_gpu_count 2\": true,\n                \"instance_gpu_count 3\": true,\n                \"instance_gpu_manufacturer\": true,\n                \"instance_gpu_manufacturer 1\": true,\n                \"instance_gpu_manufacturer 2\": true,\n                \"instance_gpu_manufacturer 3\": true,\n                \"instance_gpu_memory\": true,\n                \"instance_gpu_memory 1\": true,\n                \"instance_gpu_memory 2\": true,\n                \"instance_gpu_memory 3\": true,\n                \"instance_gpu_name\": true,\n                \"instance_gpu_name 1\": true,\n                \"instance_gpu_name 2\": true,\n                \"instance_gpu_name 3\": true,\n                \"instance_hypervisor\": true,\n                \"instance_hypervisor 1\": true,\n                \"instance_hypervisor 2\": true,\n                \"instance_hypervisor 3\": true,\n                \"instance_local_nvme 1\": true,\n                \"instance_local_nvme 2\": true,\n                \"instance_local_nvme 3\": true,\n                \"instance_memory\": true,\n                \"instance_memory 1\": true,\n                \"instance_memory 2\": true,\n                \"instance_memory 3\": true,\n                \"instance_pods\": true,\n                \"instance_pods 1\": true,\n                \"instance_pods 2\": true,\n                \"instance_pods 3\": true,\n                \"instance_size\": true,\n                \"instance_size 1\": true,\n                \"instance_size 2\": true,\n                \"instance_size 3\": true,\n                \"instance_type 1\": false,\n                \"instance_type 2\": true,\n                \"instance_type 3\": true,\n                \"job\": true,\n                \"job 1\": true,\n                \"job 2\": true,\n                \"job 3\": true,\n                \"node\": true,\n                \"nodepool 1\": false,\n                \"nodepool 2\": true,\n                \"nodepool 3\": true,\n                \"os\": true,\n                \"os 1\": true,\n                \"os 2\": true,\n                \"os 3\": true,\n                \"resource_type\": true,\n                \"resource_type 1\": true,\n                \"resource_type 2\": true,\n                \"resource_type 3\": true,\n                \"zone 1\": false,\n                \"zone 2\": true,\n                \"zone 3\": true\n              },\n              \"indexByName\": {\n                \"Time 1\": 1,\n                \"Time 2\": 25,\n                \"Time 3\": 45,\n                \"Time 4\": 65,\n                \"Value #CPU Utilization\": 10,\n                \"Value #Memory Utilization\": 11,\n                \"Value #Pod Count\": 9,\n                \"Value #Uptime\": 8,\n                \"arch 1\": 5,\n                \"arch 2\": 26,\n                \"arch 3\": 46,\n                \"capacity_type 1\": 6,\n                \"capacity_type 2\": 27,\n                \"capacity_type 3\": 47,\n                \"instance 1\": 4,\n                \"instance 2\": 28,\n                \"instance 3\": 48,\n                \"instance_cpu 1\": 12,\n                \"instance_cpu 2\": 29,\n                \"instance_cpu 3\": 49,\n                \"instance_family 1\": 13,\n                \"instance_family 2\": 30,\n                \"instance_family 3\": 50,\n                \"instance_gpu_count 1\": 14,\n                \"instance_gpu_count 2\": 31,\n                \"instance_gpu_count 3\": 51,\n                \"instance_gpu_manufacturer 1\": 15,\n                \"instance_gpu_manufacturer 2\": 32,\n                \"instance_gpu_manufacturer 3\": 52,\n                \"instance_gpu_memory 1\": 16,\n                \"instance_gpu_memory 2\": 33,\n                \"instance_gpu_memory 3\": 53,\n                \"instance_gpu_name 1\": 17,\n                \"instance_gpu_name 2\": 34,\n                \"instance_gpu_name 3\": 54,\n                \"instance_hypervisor 1\": 18,\n                \"instance_hypervisor 2\": 35,\n                \"instance_hypervisor 3\": 55,\n                \"instance_memory 1\": 19,\n                \"instance_memory 2\": 36,\n                \"instance_memory 3\": 56,\n                \"instance_pods 1\": 20,\n                \"instance_pods 2\": 37,\n                \"instance_pods 3\": 57,\n                \"instance_size 1\": 21,\n                \"instance_size 2\": 38,\n                \"instance_size 3\": 58,\n                \"instance_type 1\": 3,\n                \"instance_type 2\": 39,\n                \"instance_type 3\": 59,\n                \"job 1\": 22,\n                \"job 2\": 40,\n                \"job 3\": 60,\n                \"node\": 66,\n                \"node_name\": 0,\n                \"nodepool 1\": 2,\n                \"nodepool 2\": 42,\n                \"nodepool 3\": 62,\n                \"os 1\": 23,\n                \"os 2\": 41,\n                \"os 3\": 61,\n                \"resource_type 1\": 24,\n                \"resource_type 2\": 43,\n                \"resource_type 3\": 63,\n                \"zone 1\": 7,\n                \"zone 2\": 44,\n                \"zone 3\": 64\n              },\n              \"renameByName\": {\n                \"Time\": \"\",\n                \"Time 1\": \"\",\n                \"Value\": \"CPU Utilization\",\n                \"Value #Allocatable\": \"\",\n                \"Value #CPU Utilization\": \"CPU Utilization\",\n                \"Value #Memory Utilization\": \"Memory Utilization\",\n                \"Value #Pod CPU\": \"\",\n                \"Value #Pod Count\": \"Pods\",\n                \"Value #Uptime\": \"Uptime\",\n                \"arch\": \"Architecture\",\n                \"arch 1\": \"Arch\",\n                \"capacity_type\": \"Capacity Type\",\n                \"capacity_type 1\": \"Capacity Type\",\n                \"instance 1\": \"Instance\",\n                \"instance_cpu 1\": \"vCPU\",\n                \"instance_type\": \"Instance Type\",\n                \"instance_type 1\": \"Instance Type\",\n                \"node_name\": \"Node Name\",\n                \"nodepool 1\": \"Nodepool\",\n                \"zone 1\": \"Zone\"\n              }\n            }\n          }\n        ],\n        \"type\": \"table\"\n      }\n    ],\n    \"refresh\": \"10s\",\n    \"schemaVersion\": 39,\n    \"tags\": [],\n    \"templating\": {\n      \"list\": [\n        {\n          \"current\": {\n            \"selected\": false,\n            \"text\": \"Prometheus\",\n            \"value\": \"prometheus\"\n          },\n          \"hide\": 0,\n          \"includeAll\": false,\n          \"label\": \"Data Source\",\n          \"multi\": false,\n          \"name\": \"datasource\",\n          \"options\": [],\n          \"query\": \"prometheus\",\n          \"refresh\": 1,\n          \"regex\": \"\",\n          \"skipUrlSync\": false,\n          \"type\": \"datasource\"\n        },\n        {\n          \"current\": {\n            \"selected\": true,\n            \"text\": [\n              \"All\"\n            ],\n            \"value\": [\n              \"$__all\"\n            ]\n          },\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"definition\": \"label_values(karpenter_nodes_allocatable, nodepool)\",\n          \"hide\": 0,\n          \"includeAll\": true,\n          \"multi\": true,\n          \"name\": \"nodepool\",\n          \"options\": [],\n          \"query\": {\n            \"query\": \"label_values(karpenter_nodes_allocatable, nodepool)\",\n            \"refId\": \"StandardVariableQuery\"\n          },\n          \"refresh\": 2,\n          \"regex\": \"\",\n          \"skipUrlSync\": false,\n          \"sort\": 1,\n          \"type\": \"query\"\n        },\n        {\n          \"current\": {\n            \"selected\": true,\n            \"text\": [\n              \"All\"\n            ],\n            \"value\": [\n              \"$__all\"\n            ]\n          },\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"definition\": \"label_values(karpenter_nodes_allocatable, zone)\",\n          \"hide\": 0,\n          \"includeAll\": true,\n          \"multi\": true,\n          \"name\": \"zone\",\n          \"options\": [],\n          \"query\": {\n            \"query\": \"label_values(karpenter_nodes_allocatable, zone)\",\n            \"refId\": \"StandardVariableQuery\"\n          },\n          \"refresh\": 2,\n          \"regex\": \"\",\n          \"skipUrlSync\": false,\n          \"sort\": 1,\n          \"type\": \"query\"\n        },\n        {\n          \"current\": {\n            \"selected\": true,\n            \"text\": [\n              \"All\"\n            ],\n            \"value\": [\n              \"$__all\"\n            ]\n          },\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"definition\": \"label_values(karpenter_nodes_allocatable, arch)\",\n          \"hide\": 0,\n          \"includeAll\": true,\n          \"multi\": true,\n          \"name\": \"arch\",\n          \"options\": [],\n          \"query\": {\n            \"query\": \"label_values(karpenter_nodes_allocatable, arch)\",\n            \"refId\": \"StandardVariableQuery\"\n          },\n          \"refresh\": 2,\n          \"regex\": \"\",\n          \"skipUrlSync\": false,\n          \"sort\": 1,\n          \"type\": \"query\"\n        },\n        {\n          \"current\": {\n            \"selected\": true,\n            \"text\": [\n              \"All\"\n            ],\n            \"value\": [\n              \"$__all\"\n            ]\n          },\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"definition\": \"label_values(karpenter_nodes_allocatable, capacity_type)\",\n          \"hide\": 0,\n          \"includeAll\": true,\n          \"multi\": true,\n          \"name\": \"capacity_type\",\n          \"options\": [],\n          \"query\": {\n            \"query\": \"label_values(karpenter_nodes_allocatable, capacity_type)\",\n            \"refId\": \"StandardVariableQuery\"\n          },\n          \"refresh\": 2,\n          \"regex\": \"\",\n          \"skipUrlSync\": false,\n          \"sort\": 1,\n          \"type\": \"query\"\n        },\n        {\n          \"current\": {\n            \"selected\": true,\n            \"text\": [\n              \"All\"\n            ],\n            \"value\": [\n              \"$__all\"\n            ]\n          },\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"definition\": \"label_values(karpenter_nodes_allocatable, instance_type)\",\n          \"hide\": 0,\n          \"includeAll\": true,\n          \"multi\": true,\n          \"name\": \"instance_type\",\n          \"options\": [],\n          \"query\": {\n            \"query\": \"label_values(karpenter_nodes_allocatable, instance_type)\",\n            \"refId\": \"StandardVariableQuery\"\n          },\n          \"refresh\": 2,\n          \"regex\": \"\",\n          \"skipUrlSync\": false,\n          \"sort\": 1,\n          \"type\": \"query\"\n        },\n        {\n          \"current\": {\n            \"selected\": true,\n            \"text\": \"nodepool\",\n            \"value\": \"nodepool\"\n          },\n          \"hide\": 0,\n          \"includeAll\": false,\n          \"multi\": false,\n          \"name\": \"distribution_filter\",\n          \"options\": [\n            {\n              \"selected\": false,\n              \"text\": \"arch\",\n              \"value\": \"arch\"\n            },\n            {\n              \"selected\": false,\n              \"text\": \"capacity_type\",\n              \"value\": \"capacity_type\"\n            },\n            {\n              \"selected\": false,\n              \"text\": \"instance_type\",\n              \"value\": \"instance_type\"\n            },\n            {\n              \"selected\": false,\n              \"text\": \"namespace\",\n              \"value\": \"namespace\"\n            },\n            {\n              \"selected\": false,\n              \"text\": \"node\",\n              \"value\": \"node\"\n            },\n            {\n              \"selected\": true,\n              \"text\": \"nodepool\",\n              \"value\": \"nodepool\"\n            },\n            {\n              \"selected\": false,\n              \"text\": \"zone\",\n              \"value\": \"zone\"\n            }\n          ],\n          \"query\": \"arch,capacity_type,instance_type,namespace,node,nodepool,zone\",\n          \"queryValue\": \"\",\n          \"skipUrlSync\": false,\n          \"type\": \"custom\"\n        }\n      ]\n    },\n    \"time\": {\n      \"from\": \"now-3h\",\n      \"to\": \"now\"\n    },\n    \"timepicker\": {},\n    \"timezone\": \"\",\n    \"title\": \"Karpenter Capacity v1\",\n    \"uid\": \"ta8I9Q67Z\",\n    \"version\": 7,\n    \"weekStart\": \"\"\n  }\n"
  },
  {
    "path": "website/content/en/preview/getting-started/getting-started-with-karpenter/karpenter-controllers-allocation.json",
    "content": "{\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": {\n          \"type\": \"datasource\",\n          \"uid\": \"grafana\"\n        },\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"target\": {\n          \"limit\": 100,\n          \"matchAny\": false,\n          \"tags\": [],\n          \"type\": \"dashboard\"\n        },\n        \"type\": \"dashboard\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"gnetId\": null,\n  \"graphTooltip\": 0,\n  \"id\": null,\n  \"iteration\": 1636732403925,\n  \"links\": [],\n  \"panels\": [\n    {\n      \"datasource\": null,\n      \"gridPos\": {\n        \"h\": 4,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"id\": 5,\n      \"options\": {\n        \"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).\",\n        \"mode\": \"markdown\"\n      },\n      \"pluginVersion\": \"8.1.6\",\n      \"targets\": [\n        {\n          \"datasource\": {},\n          \"queryType\": \"randomWalk\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"timeFrom\": null,\n      \"timeShift\": null,\n      \"title\": \"About this dashboard\",\n      \"type\": \"text\"\n    },\n    {\n      \"cards\": {\n        \"cardPadding\": null,\n        \"cardRound\": null\n      },\n      \"color\": {\n        \"cardColor\": \"#b4ff00\",\n        \"colorScale\": \"sqrt\",\n        \"colorScheme\": \"interpolateMagma\",\n        \"exponent\": 0.5,\n        \"min\": null,\n        \"mode\": \"spectrum\"\n      },\n      \"dataFormat\": \"tsbuckets\",\n      \"datasource\": {\n        \"uid\": \"${datasource}\"\n      },\n      \"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.\",\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 4\n      },\n      \"heatmap\": {},\n      \"hideZeroBuckets\": false,\n      \"highlightCards\": true,\n      \"id\": 2,\n      \"legend\": {\n        \"show\": true\n      },\n      \"maxDataPoints\": 25,\n      \"pluginVersion\": \"7.5.0\",\n      \"reverseYBuckets\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"uid\": \"${datasource}\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"sum(increase(karpenter_allocation_controller_bind_duration_seconds_bucket[$__interval])) by (le)\",\n          \"format\": \"heatmap\",\n          \"instant\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{le}}\",\n          \"queryType\": \"randomWalk\",\n          \"refId\": \"All Binds\"\n        }\n      ],\n      \"title\": \"Bind duration\",\n      \"tooltip\": {\n        \"show\": true,\n        \"showHistogram\": false\n      },\n      \"type\": \"heatmap\",\n      \"xAxis\": {\n        \"show\": true\n      },\n      \"xBucketNumber\": null,\n      \"xBucketSize\": null,\n      \"yAxis\": {\n        \"decimals\": 0,\n        \"format\": \"s\",\n        \"logBase\": 1,\n        \"max\": null,\n        \"min\": \"0\",\n        \"show\": true,\n        \"splitFactor\": null\n      },\n      \"yBucketBound\": \"auto\",\n      \"yBucketNumber\": null,\n      \"yBucketSize\": null\n    },\n    {\n      \"cards\": {\n        \"cardPadding\": null,\n        \"cardRound\": null\n      },\n      \"color\": {\n        \"cardColor\": \"#b4ff00\",\n        \"colorScale\": \"sqrt\",\n        \"colorScheme\": \"interpolateMagma\",\n        \"exponent\": 0.5,\n        \"mode\": \"spectrum\"\n      },\n      \"dataFormat\": \"tsbuckets\",\n      \"datasource\": {\n        \"uid\": \"${datasource}\"\n      },\n      \"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.\",\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 12\n      },\n      \"heatmap\": {},\n      \"hideZeroBuckets\": false,\n      \"highlightCards\": true,\n      \"id\": 7,\n      \"legend\": {\n        \"show\": true\n      },\n      \"maxDataPoints\": 25,\n      \"pluginVersion\": \"7.5.0\",\n      \"reverseYBuckets\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"uid\": \"${datasource}\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"sum(increase(karpenter_allocation_controller_binpacking_duration_seconds_bucket[$__interval])) by (le)\",\n          \"format\": \"heatmap\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{le}}\",\n          \"queryType\": \"randomWalk\",\n          \"refId\": \"Binpacking Duration\"\n        }\n      ],\n      \"title\": \"Binpack duration\",\n      \"tooltip\": {\n        \"show\": true,\n        \"showHistogram\": false\n      },\n      \"type\": \"heatmap\",\n      \"xAxis\": {\n        \"show\": true\n      },\n      \"xBucketNumber\": null,\n      \"xBucketSize\": null,\n      \"yAxis\": {\n        \"decimals\": 0,\n        \"format\": \"s\",\n        \"logBase\": 1,\n        \"max\": null,\n        \"min\": \"0\",\n        \"show\": true,\n        \"splitFactor\": null\n      },\n      \"yBucketBound\": \"auto\",\n      \"yBucketNumber\": null,\n      \"yBucketSize\": null\n    },\n    {\n      \"cards\": {\n        \"cardPadding\": null,\n        \"cardRound\": null\n      },\n      \"color\": {\n        \"cardColor\": \"#b4ff00\",\n        \"colorScale\": \"sqrt\",\n        \"colorScheme\": \"interpolateInferno\",\n        \"exponent\": 0.5,\n        \"mode\": \"spectrum\"\n      },\n      \"dataFormat\": \"tsbuckets\",\n      \"datasource\": {\n        \"uid\": \"${datasource}\"\n      },\n      \"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.\",\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 20\n      },\n      \"heatmap\": {},\n      \"hideZeroBuckets\": false,\n      \"highlightCards\": true,\n      \"id\": 9,\n      \"legend\": {\n        \"show\": true\n      },\n      \"maxDataPoints\": 25,\n      \"pluginVersion\": \"7.5.0\",\n      \"reverseYBuckets\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"uid\": \"${datasource}\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"sum(increase(karpenter_allocation_controller_scheduling_duration_seconds_bucket{provisioner=\\\"$provisioner\\\"}[$__interval])) by (le)\",\n          \"format\": \"heatmap\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{le}}\",\n          \"queryType\": \"randomWalk\",\n          \"refId\": \"Scheduling Duration\"\n        }\n      ],\n      \"title\": \"Scheduling duration\",\n      \"tooltip\": {\n        \"show\": true,\n        \"showHistogram\": false\n      },\n      \"type\": \"heatmap\",\n      \"xAxis\": {\n        \"show\": true\n      },\n      \"xBucketNumber\": null,\n      \"xBucketSize\": null,\n      \"yAxis\": {\n        \"decimals\": 0,\n        \"format\": \"s\",\n        \"logBase\": 1,\n        \"max\": null,\n        \"min\": null,\n        \"show\": true,\n        \"splitFactor\": null\n      },\n      \"yBucketBound\": \"auto\",\n      \"yBucketNumber\": null,\n      \"yBucketSize\": null\n    }\n  ],\n  \"refresh\": \"1m\",\n  \"schemaVersion\": 30,\n  \"style\": \"dark\",\n  \"tags\": [],\n  \"templating\": {\n    \"list\": [\n      {\n        \"current\": {\n          \"selected\": false,\n          \"text\": \"Prometheus\",\n          \"value\": \"Prometheus\"\n        },\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Data Source\",\n        \"multi\": false,\n        \"name\": \"datasource\",\n        \"options\": [],\n        \"query\": \"prometheus\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"type\": \"datasource\"\n      },\n      {\n        \"allValue\": null,\n        \"current\": {},\n        \"datasource\": {\n          \"uid\": \"${datasource}\"\n        },\n        \"definition\": \"label_values(karpenter_allocation_controller_scheduling_duration_seconds_bucket, provisioner)\",\n        \"description\": \"Karpenter provisioner\",\n        \"error\": null,\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Provisioner\",\n        \"multi\": false,\n        \"name\": \"provisioner\",\n        \"options\": [],\n        \"query\": {\n          \"query\": \"label_values(karpenter_allocation_controller_scheduling_duration_seconds_bucket, provisioner)\",\n          \"refId\": \"StandardVariableQuery\"\n        },\n        \"refresh\": 2,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"sort\": 1,\n        \"type\": \"query\"\n      }\n    ]\n  },\n  \"time\": {\n    \"from\": \"now-3h\",\n    \"to\": \"now\"\n  },\n  \"timepicker\": {},\n  \"timezone\": \"\",\n  \"title\": \"Controllers / Allocation\",\n  \"uid\": \"fs47R-Dnz\",\n  \"version\": 9\n}\n"
  },
  {
    "path": "website/content/en/preview/getting-started/getting-started-with-karpenter/karpenter-controllers.json",
    "content": "{\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": {\n          \"type\": \"datasource\",\n          \"uid\": \"grafana\"\n        },\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"target\": {\n          \"limit\": 100,\n          \"matchAny\": false,\n          \"tags\": [],\n          \"type\": \"dashboard\"\n        },\n        \"type\": \"dashboard\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"gnetId\": null,\n  \"graphTooltip\": 0,\n  \"id\": null,\n  \"iteration\": 1636733515850,\n  \"links\": [],\n  \"panels\": [\n    {\n      \"datasource\": null,\n      \"description\": \"\",\n      \"gridPos\": {\n        \"h\": 4,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"id\": 99,\n      \"options\": {\n        \"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).\",\n        \"mode\": \"markdown\"\n      },\n      \"pluginVersion\": \"8.1.6\",\n      \"title\": \"About this dashboard\",\n      \"type\": \"text\"\n    },\n    {\n      \"aliasColors\": {\n        \"items\": \"light-blue\"\n      },\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": {\n        \"uid\": \"${datasource}\"\n      },\n      \"description\": \"\",\n      \"fill\": 1,\n      \"fillGradient\": 2,\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 8,\n        \"x\": 0,\n        \"y\": 4\n      },\n      \"hiddenSeries\": false,\n      \"id\": 14,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": true,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"options\": {\n        \"alertThreshold\": true\n      },\n      \"percentage\": false,\n      \"pluginVersion\": \"8.1.6\",\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"uid\": \"${datasource}\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"workqueue_depth{name=\\\"$controller\\\"}\",\n          \"interval\": \"\",\n          \"legendFormat\": \"items\",\n          \"queryType\": \"randomWalk\",\n          \"refId\": \"Work Queue Depth\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeFrom\": null,\n      \"timeRegions\": [],\n      \"timeShift\": null,\n      \"title\": \"Items in Work Queue\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"graph\",\n      \"xaxis\": {\n        \"buckets\": null,\n        \"mode\": \"time\",\n        \"name\": null,\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"decimals\": 0,\n          \"format\": \"short\",\n          \"label\": \"\",\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"label\": null,\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": null,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false,\n        \"alignLevel\": null\n      }\n    },\n    {\n      \"aliasColors\": {\n        \"error\": \"red\",\n        \"requeue\": \"orange\",\n        \"requeue_after\": \"semi-dark-purple\",\n        \"success\": \"green\"\n      },\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": {\n        \"uid\": \"${datasource}\"\n      },\n      \"description\": \"The rate of completed reconciliations per minute broken out by result status.\",\n      \"fill\": 1,\n      \"fillGradient\": 1,\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 8,\n        \"x\": 8,\n        \"y\": 4\n      },\n      \"hiddenSeries\": false,\n      \"id\": 76,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": true,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"options\": {\n        \"alertThreshold\": true\n      },\n      \"percentage\": false,\n      \"pluginVersion\": \"8.1.6\",\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"uid\": \"${datasource}\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"rate(controller_runtime_reconcile_total{controller=\\\"$controller\\\"}[$trailing]) * 60\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{result}}\",\n          \"queryType\": \"randomWalk\",\n          \"refId\": \"Reconciliations per minute\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeFrom\": null,\n      \"timeRegions\": [],\n      \"timeShift\": null,\n      \"title\": \"Reconciliations per minute\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"graph\",\n      \"xaxis\": {\n        \"buckets\": null,\n        \"mode\": \"time\",\n        \"name\": null,\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"$$hashKey\": \"object:566\",\n          \"format\": \"short\",\n          \"label\": null,\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": true\n        },\n        {\n          \"$$hashKey\": \"object:567\",\n          \"format\": \"short\",\n          \"label\": null,\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": null,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false,\n        \"alignLevel\": null\n      }\n    },\n    {\n      \"cards\": {\n        \"cardPadding\": null,\n        \"cardRound\": null\n      },\n      \"color\": {\n        \"cardColor\": \"#b4ff00\",\n        \"colorScale\": \"sqrt\",\n        \"colorScheme\": \"interpolateMagma\",\n        \"exponent\": 0.5,\n        \"mode\": \"spectrum\"\n      },\n      \"dataFormat\": \"tsbuckets\",\n      \"datasource\": {\n        \"uid\": \"${datasource}\"\n      },\n      \"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.\",\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 8,\n        \"x\": 16,\n        \"y\": 4\n      },\n      \"heatmap\": {},\n      \"hideZeroBuckets\": false,\n      \"highlightCards\": true,\n      \"id\": 126,\n      \"legend\": {\n        \"show\": true\n      },\n      \"maxDataPoints\": 25,\n      \"pluginVersion\": \"8.1.6\",\n      \"reverseYBuckets\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"uid\": \"${datasource}\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"sum(increase(controller_runtime_reconcile_time_seconds_bucket{controller=\\\"$controller\\\"}[$__interval])) by (le)\",\n          \"format\": \"heatmap\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{le}}\",\n          \"queryType\": \"randomWalk\",\n          \"refId\": \"p100\"\n        }\n      ],\n      \"timeFrom\": null,\n      \"timeShift\": null,\n      \"title\": \"Reconciliation duration\",\n      \"tooltip\": {\n        \"show\": true,\n        \"showHistogram\": false\n      },\n      \"type\": \"heatmap\",\n      \"xAxis\": {\n        \"show\": true\n      },\n      \"xBucketNumber\": null,\n      \"xBucketSize\": null,\n      \"yAxis\": {\n        \"decimals\": 0,\n        \"format\": \"s\",\n        \"logBase\": 1,\n        \"max\": null,\n        \"min\": \"0\",\n        \"show\": true,\n        \"splitFactor\": null\n      },\n      \"yBucketBound\": \"auto\",\n      \"yBucketNumber\": null,\n      \"yBucketSize\": null\n    }\n  ],\n  \"refresh\": \"1m\",\n  \"schemaVersion\": 31,\n  \"style\": \"dark\",\n  \"tags\": [],\n  \"templating\": {\n    \"list\": [\n      {\n        \"current\": {},\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Data Source\",\n        \"multi\": false,\n        \"name\": \"datasource\",\n        \"options\": [],\n        \"query\": \"prometheus\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"type\": \"datasource\"\n      },\n      {\n        \"allValue\": \"\",\n        \"current\": {},\n        \"datasource\": {\n          \"uid\": \"${datasource}\"\n        },\n        \"definition\": \"label_values(controller_runtime_reconcile_errors_total, controller)\",\n        \"description\": \"Kubernetes controller\",\n        \"error\": null,\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Controller\",\n        \"multi\": false,\n        \"name\": \"controller\",\n        \"options\": [],\n        \"query\": {\n          \"query\": \"label_values(controller_runtime_reconcile_errors_total, controller)\",\n          \"refId\": \"StandardVariableQuery\"\n        },\n        \"refresh\": 2,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"selected\": true,\n          \"text\": \"10m\",\n          \"value\": \"10m\"\n        },\n        \"description\": \"Trailing aggregation window\",\n        \"error\": null,\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Trailing\",\n        \"multi\": false,\n        \"name\": \"trailing\",\n        \"options\": [\n          {\n            \"selected\": false,\n            \"text\": \"30s\",\n            \"value\": \"30s\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"1m\",\n            \"value\": \"1m\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"5m\",\n            \"value\": \"5m\"\n          },\n          {\n            \"selected\": true,\n            \"text\": \"10m\",\n            \"value\": \"10m\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"30m\",\n            \"value\": \"30m\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"1h\",\n            \"value\": \"1h\"\n          }\n        ],\n        \"query\": \"30s,1m,5m,10m,30m,1h\",\n        \"queryValue\": \"\",\n        \"skipUrlSync\": false,\n        \"type\": \"custom\"\n      }\n    ]\n  },\n  \"time\": {\n    \"from\": \"now-1h\",\n    \"to\": \"now\"\n  },\n  \"timepicker\": {},\n  \"timezone\": \"\",\n  \"title\": \"Controllers\",\n  \"uid\": \"-Yw9ShDnz\",\n  \"version\": 15\n}\n"
  },
  {
    "path": "website/content/en/preview/getting-started/getting-started-with-karpenter/karpenter-performance-dashboard.json",
    "content": "{\n    \"annotations\": {\n      \"list\": [\n        {\n          \"builtIn\": 1,\n          \"datasource\": \"-- Grafana --\",\n          \"enable\": true,\n          \"hide\": true,\n          \"iconColor\": \"rgba(0, 211, 255, 1)\",\n          \"name\": \"Annotations & Alerts\",\n          \"target\": {\n            \"limit\": 100,\n            \"matchAny\": false,\n            \"tags\": [],\n            \"type\": \"dashboard\"\n          },\n          \"type\": \"dashboard\"\n        }\n      ]\n    },\n    \"editable\": true,\n    \"fiscalYearStartMonth\": 0,\n    \"graphTooltip\": 0,\n    \"id\": 33,\n    \"links\": [],\n    \"liveNow\": true,\n    \"panels\": [\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisBorderShow\": false,\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"\",\n              \"axisPlacement\": \"auto\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 0,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"insertNulls\": false,\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"never\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"none\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            },\n            \"unit\": \"s\"\n          },\n          \"overrides\": []\n        },\n        \"gridPos\": {\n          \"h\": 9,\n          \"w\": 24,\n          \"x\": 0,\n          \"y\": 0\n        },\n        \"id\": 4,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [\n              \"max\"\n            ],\n            \"displayMode\": \"table\",\n            \"placement\": \"right\",\n            \"showLegend\": true\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"max(karpenter_nodes_termination_duration_seconds{quantile=\\\"0\\\"})\",\n            \"legendFormat\": \"Min\",\n            \"range\": true,\n            \"refId\": \"A\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"max(karpenter_nodes_termination_duration_seconds{quantile=\\\"0.5\\\"})\",\n            \"hide\": false,\n            \"legendFormat\": \"P50\",\n            \"range\": true,\n            \"refId\": \"B\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"max(karpenter_nodes_termination_duration_seconds{quantile=\\\"0.9\\\"})\",\n            \"hide\": false,\n            \"legendFormat\": \"P90\",\n            \"range\": true,\n            \"refId\": \"C\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"max(karpenter_nodes_termination_duration_seconds{quantile=\\\"0.99\\\"})\",\n            \"hide\": false,\n            \"legendFormat\": \"P99\",\n            \"range\": true,\n            \"refId\": \"D\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"max(karpenter_nodes_termination_duration_seconds{quantile=\\\"1\\\"})\",\n            \"hide\": false,\n            \"legendFormat\": \"Max\",\n            \"range\": true,\n            \"refId\": \"E\"\n          }\n        ],\n        \"title\": \"Node Termination Latency\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisBorderShow\": false,\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"\",\n              \"axisPlacement\": \"auto\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 10,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"insertNulls\": false,\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"never\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"none\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"min\": 0,\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            },\n            \"unit\": \"s\"\n          },\n          \"overrides\": []\n        },\n        \"gridPos\": {\n          \"h\": 8,\n          \"w\": 24,\n          \"x\": 0,\n          \"y\": 9\n        },\n        \"id\": 2,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [\n              \"max\"\n            ],\n            \"displayMode\": \"table\",\n            \"placement\": \"right\",\n            \"showLegend\": true\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"max(karpenter_pods_startup_duration_seconds{quantile=\\\"0\\\"})\",\n            \"format\": \"time_series\",\n            \"legendFormat\": \"Min\",\n            \"range\": true,\n            \"refId\": \"Minimum\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"max(karpenter_pods_startup_duration_seconds{quantile=\\\"0.5\\\"})\",\n            \"hide\": false,\n            \"legendFormat\": \"P50\",\n            \"range\": true,\n            \"refId\": \"Median\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"max(karpenter_pods_startup_duration_seconds{quantile=\\\"0.9\\\"})\",\n            \"hide\": false,\n            \"legendFormat\": \"P90\",\n            \"range\": true,\n            \"refId\": \"P90\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"max(karpenter_pods_startup_duration_seconds{quantile=\\\"0.99\\\"})\",\n            \"hide\": false,\n            \"legendFormat\": \"P99\",\n            \"range\": true,\n            \"refId\": \"P99\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"max(karpenter_pods_startup_duration_seconds{quantile=\\\"1\\\"})\",\n            \"hide\": false,\n            \"legendFormat\": \"Max\",\n            \"range\": true,\n            \"refId\": \"Maximum\"\n          }\n        ],\n        \"title\": \"Pod Startup Latency\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisBorderShow\": false,\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"\",\n              \"axisPlacement\": \"auto\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 10,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"insertNulls\": false,\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"never\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"none\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            },\n            \"unit\": \"s\"\n          },\n          \"overrides\": []\n        },\n        \"gridPos\": {\n          \"h\": 8,\n          \"w\": 13,\n          \"x\": 0,\n          \"y\": 17\n        },\n        \"id\": 6,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [],\n            \"displayMode\": \"list\",\n            \"placement\": \"bottom\",\n            \"showLegend\": true\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"histogram_quantile(0, rate(controller_runtime_reconcile_time_seconds_bucket{controller=\\\"$controller\\\"}[10m]))\",\n            \"hide\": false,\n            \"legendFormat\": \"Min\",\n            \"range\": true,\n            \"refId\": \"Minimum\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"histogram_quantile(0.5, rate(controller_runtime_reconcile_time_seconds_bucket{controller=\\\"$controller\\\"}[10m]))\",\n            \"legendFormat\": \"P50\",\n            \"range\": true,\n            \"refId\": \"Median\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"histogram_quantile(0.9, rate(controller_runtime_reconcile_time_seconds_bucket{controller=\\\"$controller\\\"}[10m]))\",\n            \"hide\": false,\n            \"legendFormat\": \"P90\",\n            \"range\": true,\n            \"refId\": \"P90\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"histogram_quantile(0.99, rate(controller_runtime_reconcile_time_seconds_bucket{controller=\\\"$controller\\\"}[10m]))\",\n            \"hide\": false,\n            \"legendFormat\": \"P99\",\n            \"range\": true,\n            \"refId\": \"P99\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"histogram_quantile(1, rate(controller_runtime_reconcile_time_seconds_bucket{controller=\\\"$controller\\\"}[10m]))\",\n            \"hide\": false,\n            \"legendFormat\": \"Max\",\n            \"range\": true,\n            \"refId\": \"Maximum\"\n          }\n        ],\n        \"title\": \"Controller Reconciliation Latency [$controller]\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"thresholds\"\n            },\n            \"mappings\": [],\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            },\n            \"unit\": \"reqps\"\n          },\n          \"overrides\": []\n        },\n        \"gridPos\": {\n          \"h\": 8,\n          \"w\": 11,\n          \"x\": 13,\n          \"y\": 17\n        },\n        \"id\": 8,\n        \"options\": {\n          \"displayMode\": \"gradient\",\n          \"maxVizHeight\": 300,\n          \"minVizHeight\": 10,\n          \"minVizWidth\": 0,\n          \"namePlacement\": \"auto\",\n          \"orientation\": \"horizontal\",\n          \"reduceOptions\": {\n            \"calcs\": [\n              \"lastNotNull\"\n            ],\n            \"fields\": \"\",\n            \"values\": false\n          },\n          \"showUnfilled\": true,\n          \"sizing\": \"auto\",\n          \"valueMode\": \"color\"\n        },\n        \"pluginVersion\": \"11.1.0\",\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"sum(rate(controller_runtime_reconcile_total{job=\\\"karpenter\\\"}[10m])) by (controller)\",\n            \"legendFormat\": \"{{controller}}\",\n            \"range\": true,\n            \"refId\": \"A\"\n          }\n        ],\n        \"title\": \"Controller Reconciliation Rate\",\n        \"type\": \"bargauge\"\n      }\n    ],\n    \"refresh\": \"5s\",\n    \"schemaVersion\": 39,\n    \"tags\": [],\n    \"templating\": {\n      \"list\": [\n        {\n          \"current\": {\n            \"selected\": false,\n            \"text\": \"Prometheus\",\n            \"value\": \"prometheus\"\n          },\n          \"hide\": 0,\n          \"includeAll\": false,\n          \"label\": \"Data Source\",\n          \"multi\": false,\n          \"name\": \"datasource\",\n          \"options\": [],\n          \"query\": \"prometheus\",\n          \"refresh\": 1,\n          \"regex\": \"\",\n          \"skipUrlSync\": false,\n          \"type\": \"datasource\"\n        },\n        {\n          \"current\": {\n            \"selected\": false,\n            \"text\": \"disruption\",\n            \"value\": \"disruption\"\n          },\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"definition\": \"label_values(controller_runtime_reconcile_time_seconds_count{job=\\\"karpenter\\\"}, controller)\",\n          \"hide\": 0,\n          \"includeAll\": false,\n          \"multi\": false,\n          \"name\": \"controller\",\n          \"options\": [],\n          \"query\": {\n            \"query\": \"label_values(controller_runtime_reconcile_time_seconds_count{job=\\\"karpenter\\\"}, controller)\",\n            \"refId\": \"StandardVariableQuery\"\n          },\n          \"refresh\": 2,\n          \"regex\": \"\",\n          \"skipUrlSync\": false,\n          \"sort\": 0,\n          \"type\": \"query\"\n        }\n      ]\n    },\n    \"time\": {\n      \"from\": \"now-3h\",\n      \"to\": \"now\"\n    },\n    \"timepicker\": {},\n    \"timezone\": \"\",\n    \"title\": \"Karpenter Performance v1\",\n    \"uid\": \"fdusq1f2alerke\",\n    \"version\": 3,\n    \"weekStart\": \"\"\n  }\n"
  },
  {
    "path": "website/content/en/preview/getting-started/getting-started-with-karpenter/prometheus-values.yaml",
    "content": "alertmanager:\n  persistentVolume:\n    enabled: false\n\nserver:\n  fullnameOverride: prometheus-server\n  persistentVolume:\n    enabled: false\n\nextraScrapeConfigs: |\n    - job_name: karpenter\n      kubernetes_sd_configs:\n      - role: endpoints\n        namespaces:\n          names:\n          - $KARPENTER_NAMESPACE\n      relabel_configs:\n      - source_labels:\n        - __meta_kubernetes_endpoints_name\n        - __meta_kubernetes_endpoint_port_name\n        action: keep\n        regex: karpenter;http-metrics\n"
  },
  {
    "path": "website/content/en/preview/getting-started/getting-started-with-karpenter/scripts/step01-config.sh",
    "content": "export AWS_PARTITION=\"aws\" # if you are not using standard partitions, you may need to configure to aws-cn / aws-us-gov\nexport CLUSTER_NAME=\"${USER}-karpenter-demo\"\nexport AWS_DEFAULT_REGION=\"us-west-2\"\nexport AWS_ACCOUNT_ID=\"$(aws sts get-caller-identity --query Account --output text)\"\nexport TEMPOUT=\"$(mktemp)\"\nexport ALIAS_VERSION=\"$(aws ssm get-parameter --name \"/aws/service/eks/optimized-ami/${K8S_VERSION}/amazon-linux-2023/x86_64/standard/recommended/image_id\" --query Parameter.Value | xargs aws ec2 describe-images --query 'Images[0].Name' --image-ids | sed -r 's/^.*(v[[:digit:]]+).*$/\\1/')\"\n"
  },
  {
    "path": "website/content/en/preview/getting-started/getting-started-with-karpenter/scripts/step02-create-cluster-fargate.sh",
    "content": "curl -fsSL https://raw.githubusercontent.com/aws/karpenter-provider-aws/v\"${KARPENTER_VERSION}\"/website/content/en/preview/getting-started/getting-started-with-karpenter/cloudformation.yaml  > $TEMPOUT \\\n&& aws cloudformation deploy \\\n  --stack-name \"Karpenter-${CLUSTER_NAME}\" \\\n  --template-file \"${TEMPOUT}\" \\\n  --capabilities CAPABILITY_NAMED_IAM \\\n  --parameter-overrides \"ClusterName=${CLUSTER_NAME}\"\n\neksctl create cluster -f - <<EOF\n---\napiVersion: eksctl.io/v1alpha5\nkind: ClusterConfig\nmetadata:\n  name: ${CLUSTER_NAME}\n  region: ${AWS_DEFAULT_REGION}\n  version: \"${K8S_VERSION}\"\n  tags:\n    karpenter.sh/discovery: ${CLUSTER_NAME}\n\niam:\n  withOIDC: true\n  serviceAccounts:\n  - metadata:\n      name: karpenter\n      namespace: \"${KARPENTER_NAMESPACE}\"\n    roleName: ${CLUSTER_NAME}-karpenter\n    attachPolicyARNs:\n    - arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:policy/KarpenterControllerNodeLifecyclePolicy-${CLUSTER_NAME}\n    - arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:policy/KarpenterControllerIAMIntegrationPolicy-${CLUSTER_NAME}\n    - arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:policy/KarpenterControllerEKSIntegrationPolicy-${CLUSTER_NAME}\n    - arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:policy/KarpenterControllerInterruptionPolicy-${CLUSTER_NAME}\n    - arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:policy/KarpenterControllerResourceDiscoveryPolicy-${CLUSTER_NAME}\n    roleOnly: true\n\niamIdentityMappings:\n- arn: \"arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/KarpenterNodeRole-${CLUSTER_NAME}\"\n  username: system:node:{{EC2PrivateDNSName}}\n  groups:\n  - system:bootstrappers\n  - system:nodes\n  ## If you intend to run Windows workloads, the kube-proxy group should be specified.\n  # For more information, see https://github.com/aws/karpenter/issues/5099.\n  # - eks:kube-proxy-windows\n\nfargateProfiles:\n- name: karpenter\n  selectors:\n  - namespace: \"${KARPENTER_NAMESPACE}\"\nEOF\n\nexport CLUSTER_ENDPOINT=\"$(aws eks describe-cluster --name ${CLUSTER_NAME} --query \"cluster.endpoint\" --output text)\"\nexport KARPENTER_IAM_ROLE_ARN=\"arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/${CLUSTER_NAME}-karpenter\"\n\necho $CLUSTER_ENDPOINT $KARPENTER_IAM_ROLE_ARN\n"
  },
  {
    "path": "website/content/en/preview/getting-started/getting-started-with-karpenter/scripts/step02-create-cluster.sh",
    "content": "curl -fsSL https://raw.githubusercontent.com/aws/karpenter-provider-aws/v\"${KARPENTER_VERSION}\"/website/content/en/preview/getting-started/getting-started-with-karpenter/cloudformation.yaml  > \"${TEMPOUT}\" \\\n&& aws cloudformation deploy \\\n  --stack-name \"Karpenter-${CLUSTER_NAME}\" \\\n  --template-file \"${TEMPOUT}\" \\\n  --capabilities CAPABILITY_NAMED_IAM \\\n  --parameter-overrides \"ClusterName=${CLUSTER_NAME}\"\n\neksctl create cluster -f - <<EOF\n---\napiVersion: eksctl.io/v1alpha5\nkind: ClusterConfig\nmetadata:\n  name: ${CLUSTER_NAME}\n  region: ${AWS_DEFAULT_REGION}\n  version: \"${K8S_VERSION}\"\n  tags:\n    karpenter.sh/discovery: ${CLUSTER_NAME}\n\niam:\n  withOIDC: true\n  podIdentityAssociations:\n  - namespace: \"${KARPENTER_NAMESPACE}\"\n    serviceAccountName: karpenter\n    roleName: ${CLUSTER_NAME}-karpenter\n    permissionPolicyARNs:\n    - arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:policy/KarpenterControllerNodeLifecyclePolicy-${CLUSTER_NAME}\n    - arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:policy/KarpenterControllerIAMIntegrationPolicy-${CLUSTER_NAME}\n    - arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:policy/KarpenterControllerEKSIntegrationPolicy-${CLUSTER_NAME}\n    - arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:policy/KarpenterControllerInterruptionPolicy-${CLUSTER_NAME}\n    - arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:policy/KarpenterControllerResourceDiscoveryPolicy-${CLUSTER_NAME}\n\niamIdentityMappings:\n- arn: \"arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/KarpenterNodeRole-${CLUSTER_NAME}\"\n  username: system:node:{{EC2PrivateDNSName}}\n  groups:\n  - system:bootstrappers\n  - system:nodes\n  ## If you intend to run Windows workloads, the kube-proxy group should be specified.\n  # For more information, see https://github.com/aws/karpenter/issues/5099.\n  # - eks:kube-proxy-windows\n\nmanagedNodeGroups:\n- instanceType: m5.large\n  amiFamily: AmazonLinux2023\n  name: ${CLUSTER_NAME}-ng\n  desiredCapacity: 2\n  minSize: 1\n  maxSize: 10\n\naddons:\n- name: eks-pod-identity-agent\nEOF\n\nexport CLUSTER_ENDPOINT=\"$(aws eks describe-cluster --name \"${CLUSTER_NAME}\" --query \"cluster.endpoint\" --output text)\"\nexport KARPENTER_IAM_ROLE_ARN=\"arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/${CLUSTER_NAME}-karpenter\"\n\necho \"${CLUSTER_ENDPOINT} ${KARPENTER_IAM_ROLE_ARN}\"\n"
  },
  {
    "path": "website/content/en/preview/getting-started/getting-started-with-karpenter/scripts/step03-iam-cloud-formation.sh",
    "content": "TEMPOUT=\"$(mktemp)\"\n\ncurl -fsSL https://raw.githubusercontent.com/aws/karpenter-provider-aws/v\"${KARPENTER_VERSION}\"/website/content/en/preview/getting-started/getting-started-with-karpenter/cloudformation.yaml  > \"${TEMPOUT}\" \\\n&& aws cloudformation deploy \\\n  --stack-name \"Karpenter-${CLUSTER_NAME}\" \\\n  --template-file \"${TEMPOUT}\" \\\n  --capabilities CAPABILITY_NAMED_IAM \\\n  --parameter-overrides \"ClusterName=${CLUSTER_NAME}\"\n"
  },
  {
    "path": "website/content/en/preview/getting-started/getting-started-with-karpenter/scripts/step04-grant-access.sh",
    "content": "eksctl create iamidentitymapping \\\n  --username system:node:{{EC2PrivateDNSName}} \\\n  --cluster \"${CLUSTER_NAME}\" \\\n  --arn \"arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/KarpenterNodeRole-${CLUSTER_NAME}\" \\\n  --group system:bootstrappers \\\n  --group system:nodes\n"
  },
  {
    "path": "website/content/en/preview/getting-started/getting-started-with-karpenter/scripts/step05-controller-iam.sh",
    "content": "eksctl create iamserviceaccount \\\n  --cluster \"${CLUSTER_NAME}\" --name karpenter --namespace \"${KARPENTER_NAMESPACE}\" \\\n  --role-name \"${CLUSTER_NAME}-karpenter\" \\\n  --attach-policy-arn \"arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:policy/KarpenterControllerPolicy-${CLUSTER_NAME}\" \\\n  --role-only \\\n  --approve\n\nexport KARPENTER_IAM_ROLE_ARN=\"arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/${CLUSTER_NAME}-karpenter\"\n"
  },
  {
    "path": "website/content/en/preview/getting-started/getting-started-with-karpenter/scripts/step06-add-spot-role.sh",
    "content": "aws iam create-service-linked-role --aws-service-name spot.amazonaws.com || true\n# If the role has already been successfully created, you will see:\n# An error occurred (InvalidInput) when calling the CreateServiceLinkedRole operation: Service role name AWSServiceRoleForEC2Spot has been taken in this account, please try a different suffix.\n"
  },
  {
    "path": "website/content/en/preview/getting-started/getting-started-with-karpenter/scripts/step08-apply-helm-chart-fargate.sh",
    "content": "# Logout of helm registry to perform an unauthenticated pull against the public ECR\nhelm registry logout public.ecr.aws\n\nhelm upgrade --install karpenter oci://public.ecr.aws/karpenter/karpenter --version \"${KARPENTER_VERSION}\" --namespace \"${KARPENTER_NAMESPACE}\" --create-namespace \\\n  --set \"settings.clusterName=${CLUSTER_NAME}\" \\\n  --set \"settings.interruptionQueue=${CLUSTER_NAME}\" \\\n  --set controller.resources.requests.cpu=1 \\\n  --set controller.resources.requests.memory=1Gi \\\n  --set controller.resources.limits.cpu=1 \\\n  --set controller.resources.limits.memory=1Gi \\\n  --set serviceAccount.annotations.\"eks\\.amazonaws\\.com/role-arn\"=\"arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/${CLUSTER_NAME}-karpenter\" \\\n  --wait\n"
  },
  {
    "path": "website/content/en/preview/getting-started/getting-started-with-karpenter/scripts/step08-apply-helm-chart.sh",
    "content": "# Logout of helm registry to perform an unauthenticated pull against the public ECR\nhelm registry logout public.ecr.aws\n\nhelm upgrade --install karpenter oci://public.ecr.aws/karpenter/karpenter --version \"${KARPENTER_VERSION}\" --namespace \"${KARPENTER_NAMESPACE}\" --create-namespace \\\n  --set \"settings.clusterName=${CLUSTER_NAME}\" \\\n  --set \"settings.interruptionQueue=${CLUSTER_NAME}\" \\\n  --set controller.resources.requests.cpu=1 \\\n  --set controller.resources.requests.memory=1Gi \\\n  --set controller.resources.limits.cpu=1 \\\n  --set controller.resources.limits.memory=1Gi \\\n  --wait\n"
  },
  {
    "path": "website/content/en/preview/getting-started/getting-started-with-karpenter/scripts/step09-add-prometheus-grafana.sh",
    "content": "helm repo add grafana-charts https://grafana.github.io/helm-charts\nhelm repo add prometheus-community https://prometheus-community.github.io/helm-charts\nhelm repo update\n\nkubectl create namespace monitoring\n\ncurl -fsSL https://raw.githubusercontent.com/aws/karpenter-provider-aws/v\"${KARPENTER_VERSION}\"/website/content/en/preview/getting-started/getting-started-with-karpenter/prometheus-values.yaml | envsubst | tee prometheus-values.yaml\nhelm install --namespace monitoring prometheus prometheus-community/prometheus --values prometheus-values.yaml\n\ncurl -fsSL https://raw.githubusercontent.com/aws/karpenter-provider-aws/v\"${KARPENTER_VERSION}\"/website/content/en/preview/getting-started/getting-started-with-karpenter/grafana-values.yaml | tee grafana-values.yaml\nhelm install --namespace monitoring grafana grafana-charts/grafana --values grafana-values.yaml\n"
  },
  {
    "path": "website/content/en/preview/getting-started/getting-started-with-karpenter/scripts/step10-add-grafana-port-forward.sh",
    "content": "kubectl port-forward --namespace monitoring svc/grafana 3000:80\n"
  },
  {
    "path": "website/content/en/preview/getting-started/getting-started-with-karpenter/scripts/step11-grafana-get-password.sh",
    "content": "kubectl get secret --namespace monitoring grafana -o jsonpath=\"{.data.admin-password}\" | base64 --decode\n"
  },
  {
    "path": "website/content/en/preview/getting-started/getting-started-with-karpenter/scripts/step12-add-nodepool.sh",
    "content": "cat <<EOF | envsubst | kubectl apply -f -\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\nspec:\n  template:\n    spec:\n      requirements:\n        - key: kubernetes.io/arch\n          operator: In\n          values: [\"amd64\"]\n        - key: kubernetes.io/os\n          operator: In\n          values: [\"linux\"]\n        - key: karpenter.sh/capacity-type\n          operator: In\n          values: [\"on-demand\"]\n        - key: karpenter.k8s.aws/instance-category\n          operator: In\n          values: [\"c\", \"m\", \"r\"]\n        - key: karpenter.k8s.aws/instance-generation\n          operator: Gt\n          values: [\"2\"]\n      nodeClassRef:\n        group: karpenter.k8s.aws\n        kind: EC2NodeClass\n        name: default\n      expireAfter: 720h # 30 * 24h = 720h\n  limits:\n    cpu: 1000\n  disruption:\n    consolidationPolicy: WhenEmptyOrUnderutilized\n    consolidateAfter: 1m\n---\napiVersion: karpenter.k8s.aws/v1\nkind: EC2NodeClass\nmetadata:\n  name: default\nspec:\n  role: \"KarpenterNodeRole-${CLUSTER_NAME}\" # replace with your cluster name\n  amiSelectorTerms:\n    - alias: \"al2023@${ALIAS_VERSION}\"\n  subnetSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\" # replace with your cluster name\n  securityGroupSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\" # replace with your cluster name\nEOF\n"
  },
  {
    "path": "website/content/en/preview/getting-started/getting-started-with-karpenter/scripts/step13-automatic-node-provisioning.sh",
    "content": "cat <<EOF | kubectl apply -f -\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: inflate\nspec:\n  replicas: 0\n  selector:\n    matchLabels:\n      app: inflate\n  template:\n    metadata:\n      labels:\n        app: inflate\n    spec:\n      terminationGracePeriodSeconds: 0\n      securityContext:\n        runAsUser: 1000\n        runAsGroup: 3000\n        fsGroup: 2000\n      containers:\n      - name: inflate\n        image: public.ecr.aws/eks-distro/kubernetes/pause:3.7\n        resources:\n          requests:\n            cpu: 1\n        securityContext:\n          allowPrivilegeEscalation: false\nEOF\n\nkubectl scale deployment inflate --replicas 5\nkubectl logs -f -n \"${KARPENTER_NAMESPACE}\" -l app.kubernetes.io/name=karpenter -c controller\n"
  },
  {
    "path": "website/content/en/preview/getting-started/getting-started-with-karpenter/scripts/step14-deprovisioning.sh",
    "content": "kubectl delete deployment inflate\nkubectl logs -f -n \"${KARPENTER_NAMESPACE}\" -l app.kubernetes.io/name=karpenter -c controller\n"
  },
  {
    "path": "website/content/en/preview/getting-started/getting-started-with-karpenter/scripts/step15-apply-flowschemas.sh",
    "content": "cat <<EOF | envsubst | kubectl apply -f -\n---\napiVersion: flowcontrol.apiserver.k8s.io/v1\nkind: FlowSchema\nmetadata:\n  name: karpenter-leader-election\nspec:\n  distinguisherMethod:\n    type: ByUser\n  matchingPrecedence: 200\n  priorityLevelConfiguration:\n    name: leader-election\n  rules:\n  - resourceRules:\n    - apiGroups:\n      - coordination.k8s.io\n      namespaces:\n      - '*'\n      resources:\n      - leases\n      verbs:\n      - get\n      - create\n      - update\n    subjects:\n    - kind: ServiceAccount\n      serviceAccount:\n        name: karpenter\n        namespace: \"${KARPENTER_NAMESPACE}\"\n\n---\napiVersion: flowcontrol.apiserver.k8s.io/v1\nkind: FlowSchema\nmetadata:\n  name: karpenter-workload\nspec:\n  distinguisherMethod:\n    type: ByUser\n  matchingPrecedence: 1000\n  priorityLevelConfiguration:\n    name: workload-high\n  rules:\n  - nonResourceRules:\n    - nonResourceURLs:\n      - '*'\n      verbs:\n      - '*'\n    resourceRules:\n    - apiGroups:\n      - '*'\n      clusterScope: true\n      namespaces:\n      - '*'\n      resources:\n      - '*'\n      verbs:\n      - '*'\n    subjects:\n    - kind: ServiceAccount\n      serviceAccount:\n        name: karpenter\n        namespace: \"${KARPENTER_NAMESPACE}\"\nEOF\n"
  },
  {
    "path": "website/content/en/preview/getting-started/getting-started-with-karpenter/scripts/step16-delete-node.sh",
    "content": "kubectl delete node \"${NODE_NAME}\"\n"
  },
  {
    "path": "website/content/en/preview/getting-started/getting-started-with-karpenter/scripts/step17-cleanup.sh",
    "content": "helm uninstall karpenter --namespace \"${KARPENTER_NAMESPACE}\"\naws cloudformation delete-stack --stack-name \"Karpenter-${CLUSTER_NAME}\"\naws ec2 describe-launch-templates --filters \"Name=tag:karpenter.k8s.aws/cluster,Values=${CLUSTER_NAME}\" |\n    jq -r \".LaunchTemplates[].LaunchTemplateName\" |\n    xargs -I{} aws ec2 delete-launch-template --launch-template-name {}\neksctl delete cluster --name \"${CLUSTER_NAME}\"\n"
  },
  {
    "path": "website/content/en/preview/getting-started/migrating-from-cas/_index.md",
    "content": "---\ntitle: \"Migrating from Cluster Autoscaler\"\nlinkTitle: \"Migrating from Cluster Autoscaler\"\nweight: 10\ndescription: >\n  Migrate to Karpenter from Cluster Autoscaler\n---\n\nThis guide will show you how to switch from the [Kubernetes Cluster Autoscaler](https://github.com/kubernetes/autoscaler) to Karpenter for automatic node provisioning.\nWe will make the following assumptions in this guide\n\n* You will use an existing EKS cluster\n* You will use existing VPC and subnets\n* You will use existing security groups\n* Your nodes are part of one or more node groups\n* Your workloads have pod disruption budgets that adhere to [EKS best practices](https://aws.github.io/aws-eks-best-practices/karpenter/)\n* Your cluster has an [OIDC provider](https://docs.aws.amazon.com/eks/latest/userguide/enable-iam-roles-for-service-accounts.html) for service accounts\n\nThis guide will also assume you have the `aws` CLI installed.\nYou can also perform many of these steps in the console, but we will use the command line for simplicity.\n\nSet a variable for your cluster name.\n\n```bash\nKARPENTER_NAMESPACE=kube-system\nCLUSTER_NAME=<your cluster name>\n```\n\nSet other variables from your cluster configuration.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step01-env.sh\" language=\"bash\" %}}\n\nUse that information to create our IAM roles, inline policy, and trust relationship.\n\n## Create IAM roles\n\nTo get started with our migration we first need to create two new IAM roles for nodes provisioned with Karpenter and the Karpenter controller.\n\nTo create the Karpenter node role we will use the following policy and commands.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step02-node-iam.sh\" language=\"bash\" %}}\n\nNow attach the required policies to the role\n\n{{% script file=\"./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step03-node-policies.sh\" language=\"bash\" %}}\n\nNow we need to create an IAM role that the Karpenter controller will use to provision new instances.\nThe 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.\n\nIf you have another option for using IAM credentials with workloads (e.g. [kube2iam](https://github.com/jtblin/kube2iam)) your steps will be different.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step04-controller-iam.sh\" language=\"bash\" %}}\n\n## Add tags to subnets and security groups\n\nWe need to add tags to our nodegroup subnets so Karpenter will know which subnets to use.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step05-tag-subnets.sh\" language=\"bash\" %}}\n\nAdd tags to our security groups.\nThis command only tags the security groups for the first nodegroup in the cluster.\nIf you have multiple nodegroups or multiple security groups you will need to decide which one Karpenter should use.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step06-tag-security-groups.sh\" language=\"bash\" %}}\n\n## Update aws-auth ConfigMap\n\nWe need to allow nodes that are using the node IAM role we just created to join the cluster.\nTo do that we have to modify the `aws-auth` ConfigMap in the cluster.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step07-edit-aws-auth.sh\" language=\"bash\" %}}\n\nYou will need to add a section to the mapRoles that looks something like this.\nReplace the `${AWS_PARTITION}` variable with the account partition, `${AWS_ACCOUNT_ID}` variable with your account ID, and `${CLUSTER_NAME}` variable with the cluster name, but do not replace the `{{EC2PrivateDNSName}}`.\n\n```yaml\n- groups:\n  - system:bootstrappers\n  - system:nodes\n  ## If you intend to run Windows workloads, the kube-proxy group should be specified.\n  # For more information, see https://github.com/aws/karpenter/issues/5099.\n  # - eks:kube-proxy-windows\n  rolearn: arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/KarpenterNodeRole-${CLUSTER_NAME}\n  username: system:node:{{EC2PrivateDNSName}}\n```\n\nThe full aws-auth configmap should have two groups.\nOne for your Karpenter node role and one for your existing node group.\n\n## Deploy Karpenter\n\nFirst set the Karpenter release you want to deploy.\n\n```bash\nexport KARPENTER_VERSION=\"{{< param \"latest_release_version\" >}}\"\n```\n\nWe can now generate a full Karpenter deployment yaml from the Helm chart.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step08-generate-chart.sh\" language=\"bash\" %}}\n\nModify the following lines in the karpenter.yaml file.\n\n### Set node affinity\n\nEdit the karpenter.yaml file and find the karpenter deployment affinity rules.\nModify the affinity so karpenter will run on one of the existing node group nodes.\n\nThe rules should look something like this.\nModify the value to match your `$NODEGROUP`, one node group per line.\n\n```yaml\naffinity:\n  nodeAffinity:\n    requiredDuringSchedulingIgnoredDuringExecution:\n      nodeSelectorTerms:\n      - matchExpressions:\n        - key: karpenter.sh/nodepool\n          operator: DoesNotExist\n        - key: eks.amazonaws.com/nodegroup\n          operator: In\n          values:\n          - ${NODEGROUP}\n  podAntiAffinity:\n    requiredDuringSchedulingIgnoredDuringExecution:\n      - topologyKey: \"kubernetes.io/hostname\"\n```\n\nNow that our deployment is ready we can create the karpenter namespace, create the NodePool CRD, and then deploy the rest of the karpenter resources.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step09-deploy.sh\" language=\"bash\" %}}\n\n## Create default NodePool\n\nWe need to create a default NodePool so Karpenter knows what types of nodes we want for unscheduled workloads. You can refer to some of the [example NodePool](https://github.com/aws/karpenter/tree{{< githubRelRef >}}examples/v1) for specific needs.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step10-create-nodepool.sh\" language=\"bash\" %}}\n\n## Set nodeAffinity for critical workloads (optional)\n\nYou may also want to set a nodeAffinity for other critical cluster workloads.\n\nSome examples are\n\n* coredns\n* metric-server\n\nYou can edit them with `kubectl edit deploy ...` and you should add node affinity for your static node group instances.\nModify the value to match your `$NODEGROUP`, one node group per line.\n\n```yaml\naffinity:\n  nodeAffinity:\n    requiredDuringSchedulingIgnoredDuringExecution:\n      nodeSelectorTerms:\n      - matchExpressions:\n        - key: eks.amazonaws.com/nodegroup\n          operator: In\n          values:\n          - ${NODEGROUP}\n```\n\n## Remove CAS\n\nNow that karpenter is running we can disable the cluster autoscaler.\nTo do that we will scale the number of replicas to zero.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step11-scale-cas.sh\" language=\"bash\" %}}\n\nTo 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.\n\n> 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.**\n\nIf you have a single multi-AZ node group, we suggest a minimum of 2 instances.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step12-scale-single-ng.sh\" language=\"bash\" %}}\n\nOr, if you have multiple single-AZ node groups, we suggest a minimum of 1 instance each.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step12-scale-multiple-ng.sh\" language=\"bash\" %}}\n\n{{% alert title=\"Note\" color=\"warning\" %}}\nIf 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.\n{{% /alert %}}\n\n## Verify Karpenter\n\nAs nodegroup nodes are drained you can verify that Karpenter is creating nodes for your workloads.\n\n```bash\nkubectl logs -f -n \"${KARPENTER_NAMESPACE}\" -l app.kubernetes.io/name=karpenter -c controller\n```\n\nYou should also see new nodes created in your cluster as the old nodes are removed\n\n```bash\nkubectl get nodes\n```\n"
  },
  {
    "path": "website/content/en/preview/getting-started/migrating-from-cas/scripts/step01-env.sh",
    "content": "AWS_PARTITION=\"aws\" # if you are not using standard partitions, you may need to configure to aws-cn / aws-us-gov\nAWS_REGION=\"$(aws configure list | grep region | tr -s \" \" | cut -d\" \" -f3)\"\nOIDC_ENDPOINT=\"$(aws eks describe-cluster --name \"${CLUSTER_NAME}\" \\\n    --query \"cluster.identity.oidc.issuer\" --output text)\"\nAWS_ACCOUNT_ID=$(aws sts get-caller-identity --query 'Account' \\\n    --output text)\nK8S_VERSION=$(aws eks describe-cluster --name \"${CLUSTER_NAME}\" --query \"cluster.version\" --output text)\nALIAS_VERSION=\"$(aws ssm get-parameter --name \"/aws/service/eks/optimized-ami/${K8S_VERSION}/amazon-linux-2023/x86_64/standard/recommended/image_id\" --query Parameter.Value | xargs aws ec2 describe-images --query 'Images[0].Name' --image-ids | sed -r 's/^.*(v[[:digit:]]+).*$/\\1/')\"\n"
  },
  {
    "path": "website/content/en/preview/getting-started/migrating-from-cas/scripts/step02-node-iam.sh",
    "content": "echo '{\n    \"Version\": \"2012-10-17\",\n    \"Statement\": [\n        {\n            \"Effect\": \"Allow\",\n            \"Principal\": {\n                \"Service\": \"ec2.amazonaws.com\"\n            },\n            \"Action\": \"sts:AssumeRole\"\n        }\n    ]\n}' > node-trust-policy.json\n\naws iam create-role --role-name \"KarpenterNodeRole-${CLUSTER_NAME}\" \\\n    --assume-role-policy-document file://node-trust-policy.json\n"
  },
  {
    "path": "website/content/en/preview/getting-started/migrating-from-cas/scripts/step03-node-policies.sh",
    "content": "aws iam attach-role-policy --role-name \"KarpenterNodeRole-${CLUSTER_NAME}\" \\\n    --policy-arn \"arn:${AWS_PARTITION}:iam::aws:policy/AmazonEKSWorkerNodePolicy\"\n\naws iam attach-role-policy --role-name \"KarpenterNodeRole-${CLUSTER_NAME}\" \\\n    --policy-arn \"arn:${AWS_PARTITION}:iam::aws:policy/AmazonEKS_CNI_Policy\"\n\naws iam attach-role-policy --role-name \"KarpenterNodeRole-${CLUSTER_NAME}\" \\\n    --policy-arn \"arn:${AWS_PARTITION}:iam::aws:policy/AmazonEC2ContainerRegistryPullOnly\"\n\naws iam attach-role-policy --role-name \"KarpenterNodeRole-${CLUSTER_NAME}\" \\\n    --policy-arn \"arn:${AWS_PARTITION}:iam::aws:policy/AmazonSSMManagedInstanceCore\"\n"
  },
  {
    "path": "website/content/en/preview/getting-started/migrating-from-cas/scripts/step04-controller-iam.sh",
    "content": "cat << EOF > controller-trust-policy.json\n{\n    \"Version\": \"2012-10-17\",\n    \"Statement\": [\n        {\n            \"Effect\": \"Allow\",\n            \"Principal\": {\n                \"Federated\": \"arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:oidc-provider/${OIDC_ENDPOINT#*//}\"\n            },\n            \"Action\": \"sts:AssumeRoleWithWebIdentity\",\n            \"Condition\": {\n                \"StringEquals\": {\n                    \"${OIDC_ENDPOINT#*//}:aud\": \"sts.amazonaws.com\",\n                    \"${OIDC_ENDPOINT#*//}:sub\": \"system:serviceaccount:${KARPENTER_NAMESPACE}:karpenter\"\n                }\n            }\n        }\n    ]\n}\nEOF\n\naws iam create-role --role-name \"KarpenterControllerRole-${CLUSTER_NAME}\" \\\n    --assume-role-policy-document file://controller-trust-policy.json\n\ncat << EOF > controller-policy.json\n{\n    \"Statement\": [\n        {\n            \"Action\": [\n                \"ssm:GetParameter\",\n                \"ec2:DescribeImages\",\n                \"ec2:RunInstances\",\n                \"ec2:DescribeSubnets\",\n                \"ec2:DescribeSecurityGroups\",\n                \"ec2:DescribeLaunchTemplates\",\n                \"ec2:DescribeInstances\",\n                \"ec2:DescribeInstanceTypes\",\n                \"ec2:DescribeInstanceTypeOfferings\",\n                \"ec2:DeleteLaunchTemplate\",\n                \"ec2:CreateTags\",\n                \"ec2:CreateLaunchTemplate\",\n                \"ec2:CreateFleet\",\n                \"ec2:DescribeSpotPriceHistory\",\n                \"pricing:GetProducts\"\n            ],\n            \"Effect\": \"Allow\",\n            \"Resource\": \"*\",\n            \"Sid\": \"Karpenter\"\n        },\n        {\n            \"Action\": \"ec2:TerminateInstances\",\n            \"Condition\": {\n                \"StringLike\": {\n                    \"ec2:ResourceTag/karpenter.sh/nodepool\": \"*\"\n                }\n            },\n            \"Effect\": \"Allow\",\n            \"Resource\": \"*\",\n            \"Sid\": \"ConditionalEC2Termination\"\n        },\n        {\n            \"Effect\": \"Allow\",\n            \"Action\": \"iam:PassRole\",\n            \"Resource\": \"arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/KarpenterNodeRole-${CLUSTER_NAME}\",\n            \"Sid\": \"PassNodeIAMRole\"\n        },\n        {\n            \"Effect\": \"Allow\",\n            \"Action\": \"eks:DescribeCluster\",\n            \"Resource\": \"arn:${AWS_PARTITION}:eks:${AWS_REGION}:${AWS_ACCOUNT_ID}:cluster/${CLUSTER_NAME}\",\n            \"Sid\": \"EKSClusterEndpointLookup\"\n        },\n        {\n            \"Sid\": \"AllowScopedInstanceProfileCreationActions\",\n            \"Effect\": \"Allow\",\n            \"Resource\": \"*\",\n            \"Action\": [\n                \"iam:CreateInstanceProfile\"\n            ],\n            \"Condition\": {\n                \"StringEquals\": {\n                    \"aws:RequestTag/kubernetes.io/cluster/${CLUSTER_NAME}\": \"owned\",\n                    \"aws:RequestTag/topology.kubernetes.io/region\": \"${AWS_REGION}\"\n                },\n                \"StringLike\": {\n                    \"aws:RequestTag/karpenter.k8s.aws/ec2nodeclass\": \"*\"\n                }\n            }\n        },\n        {\n            \"Sid\": \"AllowScopedInstanceProfileTagActions\",\n            \"Effect\": \"Allow\",\n            \"Resource\": \"*\",\n            \"Action\": [\n                \"iam:TagInstanceProfile\"\n            ],\n            \"Condition\": {\n                \"StringEquals\": {\n                    \"aws:ResourceTag/kubernetes.io/cluster/${CLUSTER_NAME}\": \"owned\",\n                    \"aws:ResourceTag/topology.kubernetes.io/region\": \"${AWS_REGION}\",\n                    \"aws:RequestTag/kubernetes.io/cluster/${CLUSTER_NAME}\": \"owned\",\n                    \"aws:RequestTag/topology.kubernetes.io/region\": \"${AWS_REGION}\"\n                },\n                \"StringLike\": {\n                    \"aws:ResourceTag/karpenter.k8s.aws/ec2nodeclass\": \"*\",\n                    \"aws:RequestTag/karpenter.k8s.aws/ec2nodeclass\": \"*\"\n                }\n            }\n        },\n        {\n            \"Sid\": \"AllowScopedInstanceProfileActions\",\n            \"Effect\": \"Allow\",\n            \"Resource\": \"*\",\n            \"Action\": [\n                \"iam:AddRoleToInstanceProfile\",\n                \"iam:RemoveRoleFromInstanceProfile\",\n                \"iam:DeleteInstanceProfile\"\n            ],\n            \"Condition\": {\n                \"StringEquals\": {\n                    \"aws:ResourceTag/kubernetes.io/cluster/${CLUSTER_NAME}\": \"owned\",\n                    \"aws:ResourceTag/topology.kubernetes.io/region\": \"${AWS_REGION}\"\n                },\n                \"StringLike\": {\n                    \"aws:ResourceTag/karpenter.k8s.aws/ec2nodeclass\": \"*\"\n                }\n            }\n        },\n        {\n            \"Sid\": \"AllowInstanceProfileReadActions\",\n            \"Effect\": \"Allow\",\n            \"Resource\": \"*\",\n            \"Action\": \"iam:GetInstanceProfile\"\n        },\n        {\n            \"Sid\": \"AllowUnscopedInstanceProfileListAction\",\n            \"Effect\": \"Allow\",\n            \"Resource\": \"*\",\n            \"Action\": \"iam:ListInstanceProfiles\"\n        }\n    ],\n    \"Version\": \"2012-10-17\"\n}\nEOF\n\naws iam put-role-policy --role-name \"KarpenterControllerRole-${CLUSTER_NAME}\" \\\n    --policy-name \"KarpenterControllerPolicy-${CLUSTER_NAME}\" \\\n    --policy-document file://controller-policy.json\n"
  },
  {
    "path": "website/content/en/preview/getting-started/migrating-from-cas/scripts/step05-tag-subnets.sh",
    "content": "for NODEGROUP in $(aws eks list-nodegroups --cluster-name \"${CLUSTER_NAME}\" --query 'nodegroups' --output text); do\n    aws ec2 create-tags \\\n        --tags \"Key=karpenter.sh/discovery,Value=${CLUSTER_NAME}\" \\\n        --resources $(aws eks describe-nodegroup --cluster-name \"${CLUSTER_NAME}\" \\\n        --nodegroup-name \"${NODEGROUP}\" --query 'nodegroup.subnets' --output text )\ndone\n"
  },
  {
    "path": "website/content/en/preview/getting-started/migrating-from-cas/scripts/step06-tag-security-groups.sh",
    "content": "NODEGROUP=$(aws eks list-nodegroups --cluster-name \"${CLUSTER_NAME}\" \\\n    --query 'nodegroups[0]' --output text)\n\nLAUNCH_TEMPLATE=$(aws eks describe-nodegroup --cluster-name \"${CLUSTER_NAME}\" \\\n    --nodegroup-name \"${NODEGROUP}\" --query 'nodegroup.launchTemplate.{id:id,version:version}' \\\n    --output text | tr -s \"\\t\" \",\")\n\n# If your EKS setup is configured to use only Cluster security group, then please execute -\n\nSECURITY_GROUPS=$(aws eks describe-cluster \\\n    --name \"${CLUSTER_NAME}\" --query \"cluster.resourcesVpcConfig.clusterSecurityGroupId\" --output text)\n\n# If your setup uses the security groups in the Launch template of a managed node group, then :\n\nSECURITY_GROUPS=\"$(aws ec2 describe-launch-template-versions \\\n    --launch-template-id \"${LAUNCH_TEMPLATE%,*}\" --versions \"${LAUNCH_TEMPLATE#*,}\" \\\n    --query 'LaunchTemplateVersions[0].LaunchTemplateData.[NetworkInterfaces[0].Groups||SecurityGroupIds]' \\\n    --output text)\"\n\naws ec2 create-tags \\\n    --tags \"Key=karpenter.sh/discovery,Value=${CLUSTER_NAME}\" \\\n    --resources \"${SECURITY_GROUPS}\"\n"
  },
  {
    "path": "website/content/en/preview/getting-started/migrating-from-cas/scripts/step07-edit-aws-auth.sh",
    "content": "kubectl edit configmap aws-auth -n kube-system\n"
  },
  {
    "path": "website/content/en/preview/getting-started/migrating-from-cas/scripts/step08-generate-chart.sh",
    "content": "helm template karpenter oci://public.ecr.aws/karpenter/karpenter --version \"${KARPENTER_VERSION}\" --namespace \"${KARPENTER_NAMESPACE}\" \\\n    --set \"settings.clusterName=${CLUSTER_NAME}\" \\\n    --set \"settings.interruptionQueue=${CLUSTER_NAME}\" \\\n    --set \"serviceAccount.annotations.eks\\.amazonaws\\.com/role-arn=arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/KarpenterControllerRole-${CLUSTER_NAME}\" \\\n    --set controller.resources.requests.cpu=1 \\\n    --set controller.resources.requests.memory=1Gi \\\n    --set controller.resources.limits.cpu=1 \\\n    --set controller.resources.limits.memory=1Gi > karpenter.yaml\n"
  },
  {
    "path": "website/content/en/preview/getting-started/migrating-from-cas/scripts/step09-deploy.sh",
    "content": "kubectl create namespace \"${KARPENTER_NAMESPACE}\" || true\nkubectl create -f \\\n    \"https://raw.githubusercontent.com/aws/karpenter-provider-aws/v${KARPENTER_VERSION}/pkg/apis/crds/karpenter.sh_nodepools.yaml\"\nkubectl create -f \\\n    \"https://raw.githubusercontent.com/aws/karpenter-provider-aws/v${KARPENTER_VERSION}/pkg/apis/crds/karpenter.k8s.aws_ec2nodeclasses.yaml\"\nkubectl create -f \\\n    \"https://raw.githubusercontent.com/aws/karpenter-provider-aws/v${KARPENTER_VERSION}/pkg/apis/crds/karpenter.sh_nodeclaims.yaml\"\nkubectl apply -f karpenter.yaml\n"
  },
  {
    "path": "website/content/en/preview/getting-started/migrating-from-cas/scripts/step10-create-nodepool.sh",
    "content": "cat <<EOF | envsubst | kubectl apply -f -\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\nspec:\n  template:\n    spec:\n      requirements:\n        - key: kubernetes.io/arch\n          operator: In\n          values: [\"amd64\"]\n        - key: kubernetes.io/os\n          operator: In\n          values: [\"linux\"]\n        - key: karpenter.sh/capacity-type\n          operator: In\n          values: [\"spot\"]\n        - key: karpenter.k8s.aws/instance-category\n          operator: In\n          values: [\"c\", \"m\", \"r\"]\n        - key: karpenter.k8s.aws/instance-generation\n          operator: Gt\n          values: [\"2\"]\n      nodeClassRef:\n        group: karpenter.k8s.aws\n        kind: EC2NodeClass\n        name: default\n      expireAfter: 720h # 30 * 24h = 720h\n  limits:\n    cpu: 1000\n  disruption:\n    consolidationPolicy: WhenEmptyOrUnderutilized\n    consolidateAfter: 1m\n---\napiVersion: karpenter.k8s.aws/v1\nkind: EC2NodeClass\nmetadata:\n  name: default\nspec:\n  role: \"KarpenterNodeRole-${CLUSTER_NAME}\" # replace with your cluster name\n  amiSelectorTerms:\n    - alias: \"al2023@${ALIAS_VERSION}\"\n  subnetSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\" # replace with your cluster name\n  securityGroupSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\" # replace with your cluster name\nEOF\n"
  },
  {
    "path": "website/content/en/preview/getting-started/migrating-from-cas/scripts/step11-scale-cas.sh",
    "content": "kubectl scale deploy/cluster-autoscaler -n kube-system --replicas=0\n"
  },
  {
    "path": "website/content/en/preview/getting-started/migrating-from-cas/scripts/step12-scale-multiple-ng.sh",
    "content": "for NODEGROUP in $(aws eks list-nodegroups --cluster-name \"${CLUSTER_NAME}\" \\\n    --query 'nodegroups' --output text); do aws eks update-nodegroup-config --cluster-name \"${CLUSTER_NAME}\" \\\n    --nodegroup-name \"${NODEGROUP}\" \\\n    --scaling-config \"minSize=1,maxSize=1,desiredSize=1\"\ndone\n"
  },
  {
    "path": "website/content/en/preview/getting-started/migrating-from-cas/scripts/step12-scale-single-ng.sh",
    "content": "aws eks update-nodegroup-config --cluster-name \"${CLUSTER_NAME}\" \\\n    --nodegroup-name \"${NODEGROUP}\" \\\n    --scaling-config \"minSize=2,maxSize=2,desiredSize=2\"\n"
  },
  {
    "path": "website/content/en/preview/reference/_index.md",
    "content": "---\ntitle: \"Reference\"\nlinkTitle: \"Reference\"\nweight: 50\ndescription: >\n  Reference documentation for Karpenter\n---"
  },
  {
    "path": "website/content/en/preview/reference/cloudformation.md",
    "content": "---\ntitle: \"CloudFormation\"\nlinkTitle: \"CloudFormation\"\nweight: 5\ndescription: >\n  A description of the Getting Started CloudFormation file and permissions\n---\nThe [Getting Started with Karpenter]({{< relref \"../getting-started/getting-started-with-karpenter\" >}}) guide uses CloudFormation to bootstrap the cluster to enable Karpenter to create and manage nodes, as well as to allow Karpenter to respond to interruption events.\nThis document describes the `cloudformation.yaml` file used in that guide.\nThese descriptions should allow you to understand:\n\n* What Karpenter is authorized to do with your EKS cluster and AWS resources when using the `cloudformation.yaml` file\n* What permissions you need to set up if you are adding Karpenter to an existing cluster\n\n## Overview\n\nTo download a particular version of `cloudformation.yaml`, set the version and use `curl` to pull the file to your local system:\n\n```bash\nexport KARPENTER_VERSION=\"{{< param \"latest_release_version\" >}}\"\ncurl https://raw.githubusercontent.com/aws/karpenter-provider-aws/v\"${KARPENTER_VERSION}\"/website/content/en/preview/getting-started/getting-started-with-karpenter/cloudformation.yaml > cloudformation.yaml\n```\n\nFollowing some header information, the rest of the `cloudformation.yaml` file describes the resources that CloudFormation deploys.\nThe sections of that file can be grouped together under the following general headings:\n\n* [**Node Authorization**]({{< relref \"#node-authorization\" >}}): Creates a NodeInstanceProfile, attaches a NodeRole to it, and connects it to an IAM Identity Mapping used to authorize nodes to the cluster. This defines the permissions each node managed by Karpenter has to access EC2 and other AWS resources. This doesn't actually create the IAM Identity Mapping. That part is orchestrated by `eksctl` in the Getting Started guide.\n* [**Controller Authorization**]({{< relref \"#controller-authorization\" >}}):  Creates 5 Karpenter controller policies that are attached to the service account's IAM role.\nAgain, the actual service account creation (`karpenter`), that is combined with these policies, is orchestrated by `eksctl` in the Getting Started guide.\n* [**Interruption Handling**]({{< relref \"#interruption-handling\" >}}): Allows the Karpenter controller to see and respond to interruptions that occur with the nodes that Karpenter is managing. See the [Interruption]({{< relref \"../concepts/disruption#interruption\" >}}) section of the Disruption page for details.\n\nA lot of the object naming that is done by `cloudformation.yaml` is based on the following:\n\n* Cluster name: With a username of `bob` the Getting Started Guide would name your cluster `bob-karpenter-demo`\nThat name would then be appended to any name below where `${ClusterName}` is included.\n\n* Partition: Any time an ARN is used, it includes the [partition name](https://docs.aws.amazon.com/whitepapers/latest/aws-fault-isolation-boundaries/partitions.html) to identify where the object is found. In most cases, that partition name is `aws`. However, it could also be `aws-cn` (for China Regions) or `aws-us-gov` (for AWS GovCloud US Regions).\n\n## Node Authorization\n\nThe following sections of the `cloudformation.yaml` file set up IAM permissions for Kubernetes nodes created by Karpenter.\nIn particular, this involves setting up a node role that can be attached and passed to instance profiles that Karpenter generates at runtime:\n\n* KarpenterNodeRole\n\n### KarpenterNodeRole\n\nThis section of the template defines the IAM role attached to generated instance profiles.\nGiven a cluster name of `bob-karpenter-demo`, this role would end up being named `\"KarpenterNodeRole-bob-karpenter-demo`.\n\n```yaml\nKarpenterNodeRole:\n  Type: \"AWS::IAM::Role\"\n  Properties:\n    RoleName: !Sub \"KarpenterNodeRole-${ClusterName}\"\n    Path: /\n    AssumeRolePolicyDocument:\n      Version: \"2012-10-17\"\n      Statement:\n        - Effect: Allow\n          Principal:\n            Service:\n              !Sub \"ec2.${AWS::URLSuffix}\"\n          Action:\n            - \"sts:AssumeRole\"\n    ManagedPolicyArns:\n      - !Sub \"arn:${AWS::Partition}:iam::aws:policy/AmazonEKS_CNI_Policy\"\n      - !Sub \"arn:${AWS::Partition}:iam::aws:policy/AmazonEKSWorkerNodePolicy\"\n      - !Sub \"arn:${AWS::Partition}:iam::aws:policy/AmazonEC2ContainerRegistryPullOnly\"\n      - !Sub \"arn:${AWS::Partition}:iam::aws:policy/AmazonSSMManagedInstanceCore\"\n```\n\nThe role created here includes several AWS managed policies, which are designed to provide permissions for specific uses needed by the nodes to work with EC2 and other AWS resources. These include:\n\n* [AmazonEKS_CNI_Policy](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonEKS_CNI_Policy.html): Provides the permissions that the Amazon VPC CNI Plugin needs to configure EKS worker nodes.\n* [AmazonEKSWorkerNodePolicy](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonEKSWorkerNodePolicy.html): Lets Amazon EKS worker nodes connect to EKS Clusters.\n* [AmazonEC2ContainerRegistryPullOnly](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonEC2ContainerRegistryPullOnly.html): Allows pulling images from repositories in the Amazon EC2 Container Registry.\n* [AmazonSSMManagedInstanceCore](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonSSMManagedInstanceCore.html): Adds AWS Systems Manager service core functions for Amazon EC2.\n\nIf you were to use a node role from an existing cluster, you could skip this provisioning step and pass this node role to any EC2NodeClasses that you create. Additionally, you would ensure that the [IAM Integration Policy]({{< relref \"#karpentercontrolleriamintegrationpolicy\" >}}) has `iam:PassRole` permission to the role attached to the generated instance profiles.\n\n## Controller Authorization\n\nThis section sets the AWS permissions for the Karpenter Controller. When used in the Getting Started guide, `eksctl` uses these permissions to create a service account (karpenter) whose IAM role has all 5 controller policies attached.\n\nThe controller permissions are split across 5 managed IAM policies:\n\n* [KarpenterControllerNodeLifecyclePolicy]({{< relref \"#karpentercontrollernodelifecyclepolicy\" >}}) - EC2 instance and launch template lifecycle management\n* [KarpenterControllerIAMIntegrationPolicy]({{< relref \"#karpentercontrolleriamintegrationpolicy\" >}}) - IAM instance profile management\n* [KarpenterControllerEKSIntegrationPolicy]({{< relref \"#karpentercontrollereksintegrationpolicy\" >}}) - EKS cluster discovery\n* [KarpenterControllerInterruptionPolicy]({{< relref \"#karpentercontrollerinterruptionpolicy\" >}}) - SQS interruption queue access\n* [KarpenterControllerResourceDiscoveryPolicy]({{< relref \"#karpentercontrollerresourcediscoverypolicy\" >}}) - Read-only resource discovery\n\nSomeone wanting to add Karpenter to an existing cluster, instead of using `cloudformation.yaml`, would need to create these IAM policies directly and assign them to the role leveraged by the service account using IRSA or EKS Pod Identity.\n\n### KarpenterControllerNodeLifecyclePolicy\n\nThe `NodeLifecyclePolicy` manages EC2 instance and launch template lifecycle operations. Given a cluster name of `bob-karpenter-demo`, this policy would be named: `KarpenterControllerNodeLifecyclePolicy-bob-karpenter-demo`\n\n```yaml\nNodeLifecyclePolicy:\n  Type: AWS::IAM::ManagedPolicy\n  Properties:\n    ManagedPolicyName: !Sub \"KarpenterControllerNodeLifecyclePolicy-${ClusterName}\"\n    Path: /\n    PolicyDocument: !Sub |\n      {\n        \"Version\": \"2012-10-17\",\n        \"Statement\": [\n```\n\n#### AllowScopedEC2InstanceAccessActions\n\nThe AllowScopedEC2InstanceAccessActions statement ID (Sid) identifies a set of EC2 resources that are allowed to be accessed with\n[RunInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html) and [CreateFleet](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet.html) actions.\nFor `RunInstances` and `CreateFleet` actions, the Karpenter controller can read (but not create) `image`, `snapshot`, `security-group`, `subnet` and `capacity-reservation` EC2 resources, scoped for the particular AWS partition and region.\n\n```json\n{\n  \"Sid\": \"AllowScopedEC2InstanceAccessActions\",\n  \"Effect\": \"Allow\",\n  \"Resource\": [\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}::image/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}::snapshot/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:security-group/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:subnet/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:capacity-reservation/*\"\n  ],\n  \"Action\": [\n    \"ec2:RunInstances\",\n    \"ec2:CreateFleet\"\n  ]\n}\n```\n\n#### AllowScopedEC2LaunchTemplateAccessActions\n\nThe AllowScopedEC2InstanceAccessActions statement ID (Sid) identifies launch templates that are allowed to be accessed with\n[RunInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html) and [CreateFleet](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet.html) actions.\nFor `RunInstances` and `CreateFleet` actions, the Karpenter controller can read (but not create) `launch-template` EC2 resources that have the `kubernetes.io/cluster/${ClusterName}` tag be set to `owned` and a `karpenter.sh/nodepool` tag, scoped for the particular AWS partition and region. This ensures that an instance launch can't access launch templates that weren't provisioned by Karpenter.\n\n```json\n{\n  \"Sid\": \"AllowScopedEC2LaunchTemplateAccessActions\",\n  \"Effect\": \"Allow\",\n  \"Resource\": \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:launch-template/*\",\n  \"Action\": [\n    \"ec2:RunInstances\",\n    \"ec2:CreateFleet\"\n  ],\n  \"Condition\": {\n    \"StringEquals\": {\n      \"aws:ResourceTag/kubernetes.io/cluster/${ClusterName}\": \"owned\"\n    },\n    \"StringLike\": {\n      \"aws:ResourceTag/karpenter.sh/nodepool\": \"*\"\n    }\n  }\n}\n```\n\n#### AllowScopedEC2InstanceActionsWithTags\n\nThe AllowScopedEC2InstanceActionsWithTags Sid allows the\n[RunInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html), [CreateFleet](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet.html), and [CreateLaunchTemplate](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateLaunchTemplate.html)\nactions requested by the Karpenter controller to create all `fleet`, `instance`, `volume`, `network-interface`, `launch-template` or `spot-instances-request` EC2 resources (for the partition and region). It also requires that the `kubernetes.io/cluster/${ClusterName}` tag be set to `owned`, `aws:RequestTag/eks:eks-cluster-name` be set to `\"${ClusterName}`, and a `karpenter.sh/nodepool` tag be set to any value. This ensures that Karpenter is only allowed to create instances for a single EKS cluster.\n\n```json\n{\n  \"Sid\": \"AllowScopedEC2InstanceActionsWithTags\",\n  \"Effect\": \"Allow\",\n  \"Resource\": [\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:fleet/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:instance/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:volume/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:network-interface/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:launch-template/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:spot-instances-request/*\"\n  ],\n  \"Action\": [\n    \"ec2:RunInstances\",\n    \"ec2:CreateFleet\",\n    \"ec2:CreateLaunchTemplate\"\n  ],\n  \"Condition\": {\n    \"StringEquals\": {\n      \"aws:RequestTag/kubernetes.io/cluster/${ClusterName}\": \"owned\"\n      \"aws:RequestTag/eks:eks-cluster-name\": \"${ClusterName}\"\n    },\n    \"StringLike\": {\n      \"aws:RequestTag/karpenter.sh/nodepool\": \"*\"\n    }\n  }\n}\n```\n\n#### AllowScopedResourceCreationTagging\n\nThe AllowScopedResourceCreationTagging Sid allows EC2 [CreateTags](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTags.html)\nactions on `fleet`, `instance`, `volume`, `network-interface`, `launch-template` and `spot-instances-request` resources, While making `RunInstance`, `CreateFleet`, or `CreateLaunchTemplate` calls. Additionally, this ensures that resources can't be tagged arbitrarily by Karpenter after they are created.\nConditions that must be met include that `aws:RequestTag/kubernetes.io/cluster/${ClusterName}` be set to `owned` and `aws:RequestTag/eks:eks-cluster-name` be set to `${ClusterName}`.\n\n```json\n{\n  \"Sid\": \"AllowScopedResourceCreationTagging\",\n  \"Effect\": \"Allow\",\n  \"Resource\": [\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:fleet/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:instance/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:volume/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:network-interface/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:launch-template/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:spot-instances-request/*\"\n  ],\n  \"Action\": \"ec2:CreateTags\",\n  \"Condition\": {\n    \"StringEquals\": {\n      \"aws:RequestTag/kubernetes.io/cluster/${ClusterName}\": \"owned\",\n      \"aws:RequestTag/eks:eks-cluster-name\": \"${ClusterName}\"\n      \"ec2:CreateAction\": [\n        \"RunInstances\",\n        \"CreateFleet\",\n        \"CreateLaunchTemplate\"\n      ]\n    },\n    \"StringLike\": {\n      \"aws:RequestTag/karpenter.sh/nodepool\": \"*\"\n    }\n  }\n}\n```\n\n#### AllowScopedResourceTagging\n\nThe AllowScopedResourceTagging Sid allows EC2 [CreateTags](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTags.html) actions on all instances created by Karpenter after their creation. It enforces that Karpenter is only able to update the tags on cluster instances it is operating on through the `kubernetes.io/cluster/${ClusterName}`\" and `karpenter.sh/nodepool` tags.\nLikewise, `RequestTag/eks:eks-cluster-name` must be set to `${ClusterName}`, if it exists, and `TagKeys` must equal `eks:eks-cluster-name`, `karpenter.sh/nodeclaim`, and `Name`, for all values.\n```json\n{\n  \"Sid\": \"AllowScopedResourceTagging\",\n  \"Effect\": \"Allow\",\n  \"Resource\": \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:instance/*\",\n  \"Action\": \"ec2:CreateTags\",\n  \"Condition\": {\n    \"StringEquals\": {\n      \"aws:ResourceTag/kubernetes.io/cluster/${ClusterName}\": \"owned\"\n    },\n    \"StringLike\": {\n      \"aws:ResourceTag/karpenter.sh/nodepool\": \"*\"\n    },\n    \"StringEqualsIfExists\": {\n      \"aws:RequestTag/eks:eks-cluster-name\": \"${ClusterName}\"\n    },\n    \"ForAllValues:StringEquals\": {\n      \"aws:TagKeys\": [\n        \"eks:eks-cluster-name\",\n        \"karpenter.sh/nodeclaim\",\n        \"Name\"\n      ]\n    }\n  }\n}\n```\n\n#### AllowScopedDeletion\n\nThe AllowScopedDeletion Sid allows [TerminateInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_TerminateInstances.html) and [DeleteLaunchTemplate](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DeleteLaunchTemplate.html) actions to delete instance and launch-template resources, provided that `karpenter.sh/nodepool` and `kubernetes.io/cluster/${ClusterName}` tags are set. These tags must be present on all resources that Karpenter is going to delete. This ensures that Karpenter can only delete instances and launch templates that are associated with it.\n\n```json\n{\n  \"Sid\": \"AllowScopedDeletion\",\n  \"Effect\": \"Allow\",\n  \"Resource\": [\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:instance/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:launch-template/*\"\n  ],\n  \"Action\": [\n    \"ec2:TerminateInstances\",\n    \"ec2:DeleteLaunchTemplate\"\n  ],\n  \"Condition\": {\n    \"StringEquals\": {\n      \"aws:ResourceTag/kubernetes.io/cluster/${ClusterName}\": \"owned\"\n    },\n    \"StringLike\": {\n      \"aws:ResourceTag/karpenter.sh/nodepool\": \"*\"\n    }\n  }\n}\n```\n\n### KarpenterControllerIAMIntegrationPolicy\n\nThe `IAMIntegrationPolicy` manages IAM instance profile operations. Given a cluster name of `bob-karpenter-demo`, this policy would be named: `KarpenterControllerIAMIntegrationPolicy-bob-karpenter-demo`\n\n```yaml\nIAMIntegrationPolicy:\n  Type: AWS::IAM::ManagedPolicy\n  Properties:\n    ManagedPolicyName: !Sub \"KarpenterControllerIAMIntegrationPolicy-${ClusterName}\"\n    Path: /\n    PolicyDocument: !Sub |\n      {\n        \"Version\": \"2012-10-17\",\n        \"Statement\": [\n```\n\n#### AllowPassingInstanceRole\n\nThe AllowPassingInstanceRole Sid gives the Karpenter controller permission to pass (`iam:PassRole`) the node role (`KarpenterNodeRole-${ClusterName}`) to generated instance profiles.\nThis gives EC2 permission explicit permission to use the `KarpenterNodeRole-${ClusterName}` when assigning permissions to generated instance profiles while launching nodes.\n\n```json\n{\n  \"Sid\": \"AllowPassingInstanceRole\",\n  \"Effect\": \"Allow\",\n  \"Resource\": \"${KarpenterNodeRole.Arn}\",\n  \"Action\": \"iam:PassRole\",\n  \"Condition\": {\n    \"StringEquals\": {\n      \"iam:PassedToService\": [\n        \"ec2.amazonaws.com\",\n        \"ec2.amazonaws.com.cn\"\n      ]\n    }\n  }\n}\n```\n\n#### AllowScopedInstanceProfileCreationActions\n\nThe AllowScopedInstanceProfileCreationActions Sid gives the Karpenter controller permission to create a new instance profile with [`iam:CreateInstanceProfile`](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateInstanceProfile.html),\nprovided that the request is made to a cluster with `RequestTag` `kubernetes.io/cluster/${ClusterName}` set to `owned`, the `eks:eks-cluster-name` set to `${ClusterName}`, and `topology.kubernetes.io/region` set to the current region.\nAlso, `karpenter.k8s.aws/ec2nodeclass` must be set to some value. This ensures that Karpenter can generate instance profiles on your behalf based on roles specified in your `EC2NodeClasses` that you use to configure Karpenter.\n\n```json\n{\n  \"Sid\": \"AllowScopedInstanceProfileCreationActions\",\n  \"Effect\": \"Allow\",\n  \"Resource\": \"arn:${AWS::Partition}:iam::${AWS::AccountId}:instance-profile/*\",\n  \"Action\": [\n    \"iam:CreateInstanceProfile\"\n  ],\n  \"Condition\": {\n    \"StringEquals\": {\n      \"aws:RequestTag/kubernetes.io/cluster/${ClusterName}\": \"owned\",\n      \"aws:RequestTag/eks:eks-cluster-name\": \"${ClusterName}\",\n      \"aws:RequestTag/topology.kubernetes.io/region\": \"${AWS::Region}\"\n    },\n    \"StringLike\": {\n      \"aws:RequestTag/karpenter.k8s.aws/ec2nodeclass\": \"*\"\n    }\n  }\n}\n```\n\n#### AllowScopedInstanceProfileTagActions\n\nThe AllowScopedInstanceProfileTagActions Sid gives the Karpenter controller permission to tag an instance profile with [`iam:TagInstanceProfile`](https://docs.aws.amazon.com/IAM/latest/APIReference/API_TagInstanceProfile.html), provided that `ResourceTag` attributes `kubernetes.io/cluster/${ClusterName}` is set to `owned` and `topology.kubernetes.io/region` is set to the current region and `RequestTag` attributes `kubernetes.io/cluster/${ClusterName}` is set to `owned`, `eks:eks-cluster-name` is set to `${ClusterName}`, and `topology.kubernetes.io/region` is set to the current region.\nAlso, `ResourceTag/karpenter.k8s.aws/ec2nodeclass` and `RequestTag/karpenter.k8s.aws/ec2nodeclass` must be set to some value. This ensures that Karpenter is only able to act on instance profiles that it provisions for this cluster.\n\n```json\n{\n  \"Sid\": \"AllowScopedInstanceProfileTagActions\",\n  \"Effect\": \"Allow\",\n  \"Resource\": \"arn:${AWS::Partition}:iam::${AWS::AccountId}:instance-profile/*\",\n  \"Action\": [\n    \"iam:TagInstanceProfile\"\n  ],\n  \"Condition\": {\n    \"StringEquals\": {\n      \"aws:ResourceTag/kubernetes.io/cluster/${ClusterName}\": \"owned\",\n      \"aws:ResourceTag/topology.kubernetes.io/region\": \"${AWS::Region}\",\n      \"aws:RequestTag/kubernetes.io/cluster/${ClusterName}\": \"owned\",\n      \"aws:RequestTag/eks:eks-cluster-name\": \"${ClusterName}\",\n      \"aws:RequestTag/topology.kubernetes.io/region\": \"${AWS::Region}\"\n    },\n    \"StringLike\": {\n      \"aws:ResourceTag/karpenter.k8s.aws/ec2nodeclass\": \"*\",\n      \"aws:RequestTag/karpenter.k8s.aws/ec2nodeclass\": \"*\"\n    }\n  }\n}\n```\n\n#### AllowScopedInstanceProfileActions\n\nThe AllowScopedInstanceProfileActions Sid gives the Karpenter controller permission to perform [`iam:AddRoleToInstanceProfile`](https://docs.aws.amazon.com/IAM/latest/APIReference/API_AddRoleToInstanceProfile.html), [`iam:RemoveRoleFromInstanceProfile`](https://docs.aws.amazon.com/IAM/latest/APIReference/API_RemoveRoleFromInstanceProfile.html), and [`iam:DeleteInstanceProfile`](https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeleteInstanceProfile.html) actions,\nprovided that the request is made to a cluster with `kubernetes.io/cluster/${ClusterName}` set to owned and is made in the current region.\nAlso, `karpenter.k8s.aws/ec2nodeclass` must be set to some value. This permission is further enforced by the `iam:PassRole` permission. If Karpenter attempts to add a role to an instance profile that it doesn't have `iam:PassRole` permission on, that call will fail. Therefore, if you configure Karpenter to use a new role through the `EC2NodeClass`, ensure that you also specify that role within your `iam:PassRole` permission.\n\n```json\n{\n  \"Sid\": \"AllowScopedInstanceProfileActions\",\n  \"Effect\": \"Allow\",\n  \"Resource\": \"arn:${AWS::Partition}:iam::${AWS::AccountId}:instance-profile/*\",\n  \"Action\": [\n    \"iam:AddRoleToInstanceProfile\",\n    \"iam:RemoveRoleFromInstanceProfile\",\n    \"iam:DeleteInstanceProfile\"\n  ],\n  \"Condition\": {\n    \"StringEquals\": {\n      \"aws:ResourceTag/kubernetes.io/cluster/${ClusterName}\": \"owned\",\n      \"aws:ResourceTag/topology.kubernetes.io/region\": \"${AWS::Region}\"\n    },\n    \"StringLike\": {\n      \"aws:ResourceTag/karpenter.k8s.aws/ec2nodeclass\": \"*\"\n    }\n  }\n}\n```\n\n### KarpenterControllerEKSIntegrationPolicy\n\nThe `EKSIntegrationPolicy` manages EKS cluster discovery. Given a cluster name of `bob-karpenter-demo`, this policy would be named: `KarpenterControllerEKSIntegrationPolicy-bob-karpenter-demo`\n\n```yaml\nEKSIntegrationPolicy:\n  Type: AWS::IAM::ManagedPolicy\n  Properties:\n    ManagedPolicyName: !Sub \"KarpenterControllerEKSIntegrationPolicy-${ClusterName}\"\n    Path: /\n    PolicyDocument: !Sub |\n      {\n        \"Version\": \"2012-10-17\",\n        \"Statement\": [\n```\n\n#### AllowAPIServerEndpointDiscovery\n\nYou can optionally allow the Karpenter controller to discover the Kubernetes cluster's external API endpoint to enable EC2 nodes to successfully join the EKS cluster.\n\n> **Note**: If you are not using an EKS control plane, you will have to specify this endpoint explicitly. See the description of the `aws.clusterEndpoint` setting in the [ConfigMap](.settings/#configmap) documentation for details.\n\nThe AllowAPIServerEndpointDiscovery Sid allows the Karpenter controller to get that information (`eks:DescribeCluster`) for the cluster (`cluster/${ClusterName}`).\n\n```json\n{\n  \"Sid\": \"AllowAPIServerEndpointDiscovery\",\n  \"Effect\": \"Allow\",\n  \"Resource\": \"arn:${AWS::Partition}:eks:${AWS::Region}:${AWS::AccountId}:cluster/${ClusterName}\",\n  \"Action\": \"eks:DescribeCluster\"\n}\n```\n\n### KarpenterControllerInterruptionPolicy\n\nThe `InterruptionPolicy` manages access to the SQS interruption queue. Given a cluster name of `bob-karpenter-demo`, this policy would be named: `KarpenterControllerInterruptionPolicy-bob-karpenter-demo`\n\n```yaml\nInterruptionPolicy:\n  Type: AWS::IAM::ManagedPolicy\n  Properties:\n    ManagedPolicyName: !Sub \"KarpenterControllerInterruptionPolicy-${ClusterName}\"\n    Path: /\n    PolicyDocument: !Sub |\n      {\n        \"Version\": \"2012-10-17\",\n        \"Statement\": [\n```\n\n#### AllowInterruptionQueueActions\n\nKarpenter supports interruption queues, that you can create as described in the [Interruption]({{< relref \"../concepts/disruption#interruption\" >}}) section of the Disruption page.\nThis section of the cloudformation.yaml template can give Karpenter permission to access those queues by specifying the resource ARN.\nFor the interruption queue you created (`${KarpenterInterruptionQueue.Arn}`), the AllowInterruptionQueueActions Sid lets the Karpenter controller have permission to delete messages ([DeleteMessage](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_DeleteMessage.html)), get queue URL ([GetQueueUrl](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_GetQueueUrl.html)), and receive messages ([ReceiveMessage](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ReceiveMessage.html)).\n\n```json\n{\n  \"Sid\": \"AllowInterruptionQueueActions\",\n  \"Effect\": \"Allow\",\n  \"Resource\": \"${KarpenterInterruptionQueue.Arn}\",\n  \"Action\": [\n    \"sqs:DeleteMessage\",\n    \"sqs:GetQueueUrl\",\n    \"sqs:ReceiveMessage\"\n  ]\n}\n```\n\n### KarpenterControllerResourceDiscoveryPolicy\n\nThe `ResourceDiscoveryPolicy` manages read-only resource discovery operations. Given a cluster name of `bob-karpenter-demo`, this policy would be named: `KarpenterControllerResourceDiscoveryPolicy-bob-karpenter-demo`\n\n```yaml\nResourceDiscoveryPolicy:\n  Type: AWS::IAM::ManagedPolicy\n  Properties:\n    ManagedPolicyName: !Sub \"KarpenterControllerResourceDiscoveryPolicy-${ClusterName}\"\n    Path: /\n    PolicyDocument: !Sub |\n      {\n        \"Version\": \"2012-10-17\",\n        \"Statement\": [\n```\n\n#### AllowRegionalReadActions\n\nThe AllowRegionalReadActions Sid allows [DescribeAvailabilityZones](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeAvailabilityZones.html), [DescribeImages](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeImages.html), [DescribeInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeInstances.html), [DescribeInstanceTypeOfferings](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeInstanceTypeOfferings.html), [DescribeInstanceTypes](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeInstanceTypes.html), [DescribeLaunchTemplates](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeLaunchTemplates.html), [DescribeSecurityGroups](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeSecurityGroups.html), [DescribeSpotPriceHistory](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeSpotPriceHistory.html), and [DescribeSubnets](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeSubnets.html) actions for the current AWS region.\nThis allows the Karpenter controller to do any of those read-only actions across all related resources for that AWS region.\n\n```json\n{\n  \"Sid\": \"AllowRegionalReadActions\",\n  \"Effect\": \"Allow\",\n  \"Resource\": \"*\",\n  \"Action\": [\n    \"ec2:DescribeCapacityReservations\",\n    \"ec2:DescribeImages\",\n    \"ec2:DescribeInstances\",\n    \"ec2:DescribeInstanceTypeOfferings\",\n    \"ec2:DescribeInstanceTypes\",\n    \"ec2:DescribeLaunchTemplates\",\n    \"ec2:DescribeSecurityGroups\",\n    \"ec2:DescribeSpotPriceHistory\",\n    \"ec2:DescribeSubnets\"\n  ],\n  \"Condition\": {\n    \"StringEquals\": {\n      \"aws:RequestedRegion\": \"${AWS::Region}\"\n    }\n  }\n}\n```\n\n#### AllowSSMReadActions\n\nThe AllowSSMReadActions Sid allows the Karpenter controller to get SSM parameters (`ssm:GetParameter`) from the current region for SSM parameters generated by AWS services.\n\n**NOTE**: If potentially sensitive information is stored in SSM parameters, you could consider restricting access to these messages further.\n```json\n{\n  \"Sid\": \"AllowSSMReadActions\",\n  \"Effect\": \"Allow\",\n  \"Resource\": \"arn:${AWS::Partition}:ssm:${AWS::Region}::parameter/aws/service/*\",\n  \"Action\": \"ssm:GetParameter\"\n}\n```\n\n#### AllowPricingReadActions\n\nBecause pricing information does not exist in every region at the moment, the AllowPricingReadActions Sid allows the Karpenter controller to get product pricing information (`pricing:GetProducts`) for all related resources across all regions.\n\n```json\n{\n  \"Sid\": \"AllowPricingReadActions\",\n  \"Effect\": \"Allow\",\n  \"Resource\": \"*\",\n  \"Action\": \"pricing:GetProducts\"\n}\n```\n\n#### AllowUnscopedInstanceProfileListAction\n\nThe AllowUnscopedInstanceProfileListAction Sid gives the Karpenter controller permission to perform [`iam:ListInstanceProfiles`](https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListInstanceProfiles.html) action to list instance profiles.\n\n```json\n{\n  \"Sid\": \"AllowUnscopedInstanceProfileListAction\",\n  \"Effect\": \"Allow\",\n  \"Resource\": \"*\",\n  \"Action\": \"iam:ListInstanceProfiles\"\n}\n```\n\n#### AllowInstanceProfileReadActions\n\nThe AllowInstanceProfileReadActions Sid gives the Karpenter controller permission to perform [`iam:GetInstanceProfile`](https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetInstanceProfile.html) actions to retrieve information about a specified instance profile, including understanding if an instance profile has been provisioned for an `EC2NodeClass` or needs to be re-provisioned.\n\n```json\n{\n  \"Sid\": \"AllowInstanceProfileReadActions\",\n  \"Effect\": \"Allow\",\n  \"Resource\": \"arn:${AWS::Partition}:iam::${AWS::AccountId}:instance-profile/*\",\n  \"Action\": \"iam:GetInstanceProfile\"\n}\n```\n\n## Interruption Handling\n\nSettings in this section allow the Karpenter controller to stand-up an interruption queue to receive notification messages from other AWS services about the health and status of instances. For example, this interruption queue allows Karpenter to be aware of spot instance interruptions that are sent 2 minutes before spot instances are reclaimed by EC2. Adding this queue allows Karpenter to be proactive in migrating workloads to new nodes.\nSee the [Interruption]({{< relref \"../concepts/disruption#interruption\" >}}) section of the Disruption page for details.\n\nDefining the `KarpenterInterruptionQueuePolicy` allows Karpenter to see and respond to the following:\n\n* AWS health events\n* Spot interruptions\n* Spot rebalance recommendations\n* Instance state changes\n\nThe resources defined in this section include:\n\n* KarpenterInterruptionQueue\n* KarpenterInterruptionQueuePolicy\n* ScheduledChangeRule\n* SpotInterruptionRule\n* RebalanceRule\n* InstanceStateChangeRule\n\n### KarpenterInterruptionQueue\n\nThe [AWS::SQS::Queue](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sqs-queue.html) resource is used to create an Amazon SQS standard queue.\nProperties of that resource set the `QueueName` to the name of your cluster, the time for which SQS retains each message (`MessageRetentionPeriod`) to 300 seconds, and enabling serverside-side encryption using SQS owned encryption keys (`SqsManagedSseEnabled`) to `true`.\nSee [SetQueueAttributes](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SetQueueAttributes.html) for descriptions of some of these attributes.\n\n```yaml\nKarpenterInterruptionQueue:\n  Type: AWS::SQS::Queue\n  Properties:\n    QueueName: !Sub \"${ClusterName}\"\n    MessageRetentionPeriod: 300\n    SqsManagedSseEnabled: true\n```\n\n### KarpenterInterruptionQueuePolicy\n\nThe Karpenter interruption queue policy is created to allow AWS services that we want to receive instance notifications from to push notification messages to the queue.\nThe [AWS::SQS::QueuePolicy](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sqs-queuepolicy.html) resource here applies `EC2InterruptionPolicy` to the `KarpenterInterruptionQueue`. The policy allows [sqs:SendMessage](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html) actions to `events.amazonaws.com` and `sqs.amazonaws.com` services. It also allows the `GetAtt` function to get attributes from `KarpenterInterruptionQueue.Arn`.\nAdditionally, it only allows access to the queue using encrypted connections over HTTPS (TLS) to adhere to [Amazon SQS Security Best Practices](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-security-best-practices.html#enforce-encryption-data-in-transit).\n\n```yaml\nKarpenterInterruptionQueuePolicy:\n  Type: AWS::SQS::QueuePolicy\n  Properties:\n    Queues:\n      - !Ref KarpenterInterruptionQueue\n    PolicyDocument:\n      Id: EC2InterruptionPolicy\n      Statement:\n        - Effect: Allow\n          Principal:\n            Service:\n              - events.amazonaws.com\n              - sqs.amazonaws.com\n          Action: sqs:SendMessage\n          Resource: !GetAtt KarpenterInterruptionQueue.Arn\n        - Sid: DenyHTTP\n          Effect: Deny\n          Action: sqs:*\n          Resource: !GetAtt KarpenterInterruptionQueue.Arn\n          Condition:\n            Bool:\n              aws:SecureTransport: false\n          Principal: \"*\"\n```\n\n### Rules\n\nThis section allows Karpenter to gather [AWS Health Events](https://docs.aws.amazon.com/health/latest/ug/cloudwatch-events-health.html#about-public-events) and direct them to a queue where they can be consumed by Karpenter.\nThese rules include:\n\n* ScheduledChangeRule: The [AWS::Events::Rule](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-events-rule.html) creates a rule where the [EventPattern](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-patterns.html) is set to send events from the `aws.health` source to `KarpenterInterruptionQueue`.\n\n  ```yaml\n  ScheduledChangeRule:\n    Type: 'AWS::Events::Rule'\n    Properties:\n     EventPattern:\n       source:\n         - aws.health\n       detail-type:\n         - AWS Health Event\n     Targets:\n       - Id: KarpenterInterruptionQueueTarget\n         Arn: !GetAtt KarpenterInterruptionQueue.Arn\n  ```\n\n* SpotInterruptionRule: An EC2 Spot Instance Interruption warning tells you that AWS is about to reclaim a Spot instance you are using. This rule allows Karpenter to gather [EC2 Spot Instance Interruption Warning](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-interruptions.html) events and direct them to a queue where they can be consumed by Karpenter. In particular, the [AWS::Events::Rule](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-events-rule.html) here creates a rule where the [EventPattern](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-patterns.html) is set to send events from the `aws.ec2` source to `KarpenterInterruptionQueue`.\n\n  ```yaml\n  SpotInterruptionRule:\n    Type: 'AWS::Events::Rule'\n    Properties:\n      EventPattern:\n        source:\n          - aws.ec2\n        detail-type:\n          - EC2 Spot Instance Interruption Warning\n      Targets:\n        - Id: KarpenterInterruptionQueueTarget\n          Arn: !GetAtt KarpenterInterruptionQueue.Arn\n  ```\n\n* RebalanceRule: An EC2 Instance Rebalance Recommendation signal tells you that a Spot instance is at a heightened risk of being interrupted, allowing Karpenter to get new instances or simply rebalance workloads.  This rule allows Karpenter to gather [EC2 Instance Rebalance Recommendation](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/rebalance-recommendations.html) signals and direct them to a queue where they can be consumed by Karpenter. In particular, the [AWS::Events::Rule](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-events-rule.html) here creates a rule where the [EventPattern](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-patterns.html) is set to send events from the `aws.ec2` source to `KarpenterInterruptionQueue`.\n\n  ```yaml\n  RebalanceRule:\n   Type: 'AWS::Events::Rule'\n   Properties:\n     EventPattern:\n       source:\n         - aws.ec2\n       detail-type:\n         - EC2 Instance Rebalance Recommendation\n     Targets:\n       - Id: KarpenterInterruptionQueueTarget\n         Arn: !GetAtt KarpenterInterruptionQueue.Arn\n  ```\n\n* InstanceStateChangeRule: An EC2 Instance State-change Notification signal tells you that the state of an instance has changed to one of the following states: pending, running, stopping, stopped, shutting-down, or terminated. This rule allows Karpenter to gather [EC2 Instance State-change](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/monitoring-instance-state-changes.html) signals and direct them to a queue where they can be consumed by Karpenter. In particular, the [AWS::Events::Rule](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-events-rule.html) here creates a rule where the [EventPattern](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-patterns.html) is set to send events from the `aws.ec2` source to `KarpenterInterruptionQueue`.\n\n  ```yaml\n  InstanceStateChangeRule:\n   Type: 'AWS::Events::Rule'\n   Properties:\n     EventPattern:\n       source:\n         - aws.ec2\n       detail-type:\n         - EC2 Instance State-change Notification\n     Targets:\n       - Id: KarpenterInterruptionQueueTarget\n         Arn: !GetAtt KarpenterInterruptionQueue.Arn\n  ```\n\n* CapacityReservationInterruptionRule: An EC2 Capacity Reservation Interruption warning informs users that the capacity owner within an AWS Organization is reclaiming reserved capacity, triggering a notification for node reclamation. The [AWS::Events::Rule](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-events-rule.html) here creates a rule to send events from the `aws.ec2` source to `KarpenterInterruptionQueue`.\n\n  ```yaml\n  CapacityReservationInterruptionRule:\n   Type: 'AWS::Events::Rule'\n   Properties:\n     EventPattern:\n       source:\n         - aws.ec2\n       detail-type:\n         - EC2 Capacity Reservation Instance Interruption Warning\n     Targets:\n       - Id: KarpenterInterruptionQueueTarget\n         Arn: !GetAtt KarpenterInterruptionQueue.Arn\n  ```\n"
  },
  {
    "path": "website/content/en/preview/reference/instance-types.md",
    "content": "---\ntitle: \"Instance Types\"\nlinkTitle: \"Instance Types\"\nweight: 100\n\ndescription: >\n  Evaluate Instance Type Resources\n---\n<!-- this document is generated from hack/docs/instancetypes_gen/main.go -->\nAWS instance types offer varying resources and can be selected by labels. The values provided\nbelow are the resources available with some assumptions and after the instance overhead has been subtracted:\n- `blockDeviceMappings` are not configured\n- `amiFamily` is set to `AL2023`\n## a1 Family\n### `a1.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|a|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|a1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|500|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|a1.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|1392Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|10|\n### `a1.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|a|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|a1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|a1.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3055Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `a1.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|a|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|a1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|a1.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6525Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `a1.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|a|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|a1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|a1.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `a1.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|a|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|a1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|a1.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27322Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `a1.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|a|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|a1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|a1.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27322Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n## c1 Family\n### `c1.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|0|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|1740|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c1.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|1122Mi|\n |pods|12|\n### `c1.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|0|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|7168|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c1.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|5637Mi|\n |pods|58|\n## c3 Family\n### `c3.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|3840|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c3.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|2878Mi|\n |pods|29|\n### `c3.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|7680|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c3.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6111Mi|\n |pods|58|\n### `c3.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|15360|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c3.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|13215Mi|\n |pods|58|\n### `c3.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|30720|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c3.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|25487Mi|\n |pods|234|\n### `c3.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|61440|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c3.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|53903Mi|\n |pods|234|\n## c4 Family\n### `c4.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|3840|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c4.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|2878Mi|\n |pods|29|\n### `c4.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|7680|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c4.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6111Mi|\n |pods|58|\n### `c4.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|1000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|15360|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c4.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|13215Mi|\n |pods|58|\n### `c4.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|30720|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c4.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|25487Mi|\n |pods|234|\n### `c4.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|36|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|61440|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c4.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|35840m|\n |ephemeral-storage|17Gi|\n |memory|53903Mi|\n |pods|234|\n## c5 Family\n### `c5.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3114Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c5.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6584Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c5.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c5.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27381Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5.9xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|36|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|73728|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|9xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5.9xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|35840m|\n |ephemeral-storage|17Gi|\n |memory|65269Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|88002Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5.18xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|72|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|147456|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|18xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5.18xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|71750m|\n |ephemeral-storage|17Gi|\n |memory|127934Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c5.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c5.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## c5a Family\n### `c5a.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5a.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3114Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c5a.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5a.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6584Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c5a.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5a.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c5a.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5a.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27381Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5a.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5a.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5a.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5a.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|88002Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5a.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6300|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5a.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112779Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c5a.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5a.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## c5ad Family\n### `c5ad.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|75|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5ad.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3114Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c5ad.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|150|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5ad.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6584Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c5ad.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|300|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5ad.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c5ad.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|600|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5ad.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27381Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5ad.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1200|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5ad.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5ad.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1800|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5ad.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|88002Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5ad.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6300|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2400|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5ad.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112779Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c5ad.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5ad.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## c5d Family\n### `c5d.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|50|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5d.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3114Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c5d.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|100|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5d.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6584Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c5d.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|200|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5d.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c5d.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|400|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5d.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27381Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5d.9xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|36|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|900|\n |karpenter.k8s.aws/instance-memory|73728|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|9xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5d.9xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|35840m|\n |ephemeral-storage|17Gi|\n |memory|65269Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5d.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1800|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5d.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|88002Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5d.18xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|72|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1800|\n |karpenter.k8s.aws/instance-memory|147456|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|18xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5d.18xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|71750m|\n |ephemeral-storage|17Gi|\n |memory|127934Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c5d.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3600|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5d.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c5d.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3600|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5d.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## c5n Family\n### `c5n.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|5376|\n |karpenter.k8s.aws/instance-network-bandwidth|3000|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5n.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|4298Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c5n.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|10752|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5n.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|8952Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c5n.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|21504|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5n.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|18898Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c5n.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|43008|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5n.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|36853Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5n.9xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|36|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|9xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5n.9xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|35840m|\n |ephemeral-storage|17Gi|\n |memory|88002Mi|\n |pods|234|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5n.18xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|72|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|18xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5n.18xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|71750m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c5n.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|72|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5n.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|71750m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## c6a Family\n### `c6a.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6a.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3114Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c6a.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6a.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6584Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c6a.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6a.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c6a.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6a.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27381Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c6a.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6a.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `c6a.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6a.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|88002Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `c6a.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6a.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112779Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6a.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6a.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6a.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6a.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6a.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6a.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6a.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6a.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## c6g Family\n### `c6g.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|500|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6g.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|1392Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `c6g.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6g.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3055Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c6g.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6g.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6525Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c6g.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6g.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c6g.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6g.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27322Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c6g.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6g.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c6g.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14250|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6g.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|87943Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c6g.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6g.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6g.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6g.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## c6gd Family\n### `c6gd.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|59|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|500|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gd.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|1392Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `c6gd.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gd.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3055Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c6gd.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gd.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6525Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c6gd.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gd.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c6gd.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gd.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27322Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c6gd.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gd.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c6gd.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14250|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gd.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|87943Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c6gd.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gd.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6gd.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gd.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## c6gn Family\n### `c6gn.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6gn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|1600|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gn.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|1392Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `c6gn.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6gn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|3000|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gn.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3055Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c6gn.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6gn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|6300|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gn.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6525Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c6gn.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6gn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gn.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c6gn.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6gn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gn.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27322Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c6gn.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6gn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gn.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c6gn.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|28500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6gn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gn.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|87943Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c6gn.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|38000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6gn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gn.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## c6i Family\n### `c6i.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6i.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3114Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c6i.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6i.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6584Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c6i.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6i.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c6i.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6i.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27381Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c6i.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6i.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `c6i.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6i.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|88002Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `c6i.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6i.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112779Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6i.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6i.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6i.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6i.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6i.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6i.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## c6id Family\n### `c6id.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6id.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3114Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c6id.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6id.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6584Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c6id.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6id.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c6id.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6id.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27381Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c6id.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6id.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `c6id.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6id.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|88002Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `c6id.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6id.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112779Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6id.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|5700|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6id.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6id.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6id.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6id.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6id.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## c6in Family\n### `c6in.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6in.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3114Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c6in.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6in.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6584Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c6in.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6in.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c6in.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6in.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27381Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c6in.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6in.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `c6in.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|37500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6in.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|88002Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `c6in.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|50000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6in.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112779Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6in.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|75000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|150000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6in.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6in.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6in.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|237794Mi|\n |pods|394|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|106|\n### `c6in.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6in.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|237794Mi|\n |pods|394|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|106|\n## c7a Family\n### `c7a.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|390|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7a.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|1451Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `c7a.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7a.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3114Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c7a.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7a.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6584Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c7a.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7a.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c7a.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7a.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27381Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c7a.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7a.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `c7a.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7a.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|88002Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `c7a.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7a.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112779Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c7a.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7a.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c7a.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7a.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c7a.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7a.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c7a.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7a.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## c7g Family\n### `c7g.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|520|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7g.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|1392Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `c7g.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7g.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3055Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c7g.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1876|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7g.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6525Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c7g.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7g.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c7g.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7g.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27322Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c7g.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7g.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c7g.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7g.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|87943Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c7g.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7g.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c7g.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7g.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## c7gd Family\n### `c7gd.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|59|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|520|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gd.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|1392Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `c7gd.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gd.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3055Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c7gd.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1876|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gd.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6525Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c7gd.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gd.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c7gd.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gd.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27322Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c7gd.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gd.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c7gd.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gd.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|87943Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c7gd.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gd.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c7gd.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gd.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## c7gn Family\n### `c7gn.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gn|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gn.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|1392Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `c7gn.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gn|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gn.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3055Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c7gn.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gn|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gn.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6525Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c7gn.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gn|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gn.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c7gn.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gn|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gn.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27322Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c7gn.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gn|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gn.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c7gn.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gn|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|150000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gn.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|87943Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c7gn.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gn|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gn.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c7gn.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gn|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gn.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## c7i Family\n### `c7i.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3114Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c7i.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6584Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c7i.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c7i.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27381Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c7i.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `c7i.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|88002Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `c7i.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112779Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c7i.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c7i.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c7i.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c7i.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## c7i-flex Family\n### `c7i-flex.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i-flex|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|390|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i-flex.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3114Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|3|\n### `c7i-flex.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i-flex|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i-flex.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6584Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|8|\n### `c7i-flex.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i-flex|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i-flex.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c7i-flex.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i-flex|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i-flex.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27381Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|34|\n### `c7i-flex.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i-flex|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i-flex.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c7i-flex.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i-flex|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|9375|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i-flex.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|88002Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `c7i-flex.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i-flex|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i-flex.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112779Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## c8a Family\n### `c8a.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|520|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8a.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|1451Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `c8a.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8a.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|2784Mi|\n |pods|59|\n |vpc.amazonaws.com/pod-eni|9|\n### `c8a.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8a.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6364Mi|\n |pods|78|\n |vpc.amazonaws.com/pod-eni|18|\n### `c8a.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8a.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|13062Mi|\n |pods|158|\n |vpc.amazonaws.com/pod-eni|38|\n### `c8a.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8a.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|26501Mi|\n |pods|314|\n |vpc.amazonaws.com/pod-eni|54|\n### `c8a.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8a.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|55953Mi|\n |pods|392|\n |vpc.amazonaws.com/pod-eni|82|\n### `c8a.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8a.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|82238Mi|\n |pods|758|\n |vpc.amazonaws.com/pod-eni|110|\n### `c8a.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8a.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|109776Mi|\n |pods|1010|\n |vpc.amazonaws.com/pod-eni|106|\n### `c8a.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8a.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|170397Mi|\n |pods|1010|\n |vpc.amazonaws.com/pod-eni|106|\n### `c8a.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8a.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|170397Mi|\n |pods|1010|\n |vpc.amazonaws.com/pod-eni|106|\n### `c8a.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8a.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|346715Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n### `c8a.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8a.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|346715Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n## c8g Family\n### `c8g.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|520|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8g.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|1392Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `c8g.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8g.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3055Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c8g.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8g.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6525Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c8g.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8g.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c8g.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8g.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27322Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c8g.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8g.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c8g.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8g.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|87943Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c8g.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8g.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c8g.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8g.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173341Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c8g.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8g.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173341Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c8g.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8g.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|355203Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c8g.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8g.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|355203Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## c8gb Family\n### `c8gb.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|2083|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gb.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|1392Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `c8gb.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|4166|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gb.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3055Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c8gb.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|8333|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gb.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6525Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c8gb.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|16666|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gb.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c8gb.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|33330|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gb.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27322Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c8gb.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|50000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|66660|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gb.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|56994Mi|\n |pods|292|\n |vpc.amazonaws.com/pod-eni|52|\n### `c8gb.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|75000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gb.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|86667Mi|\n |pods|350|\n |vpc.amazonaws.com/pod-eni|50|\n### `c8gb.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|133330|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gb.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112181Mi|\n |pods|786|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|106|\n### `c8gb.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|150000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gb.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|168490Mi|\n |pods|1178|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n### `c8gb.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|150000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gb.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|168490Mi|\n |pods|1178|\n |vpc.amazonaws.com/efa|1|\n### `c8gb.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|300000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gb.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|356820Mi|\n |pods|590|\n |vpc.amazonaws.com/efa|2|\n### `c8gb.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|300000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gb.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|356820Mi|\n |pods|590|\n |vpc.amazonaws.com/efa|2|\n## c8gd Family\n### `c8gd.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|59|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|520|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gd.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|1392Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `c8gd.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gd.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3055Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c8gd.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gd.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6525Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c8gd.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gd.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c8gd.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gd.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27322Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c8gd.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gd.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c8gd.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gd.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|87943Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c8gd.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gd.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c8gd.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|5700|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gd.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173341Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c8gd.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|5700|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gd.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173341Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c8gd.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|11400|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gd.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|355203Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c8gd.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|11400|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gd.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|355203Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## c8gn Family\n### `c8gn.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gn.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|1392Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `c8gn.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gn.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3055Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c8gn.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gn.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6525Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c8gn.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gn.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c8gn.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gn.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27322Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c8gn.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gn.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|56994Mi|\n |pods|292|\n |vpc.amazonaws.com/pod-eni|52|\n### `c8gn.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|150000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gn.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|86667Mi|\n |pods|350|\n |vpc.amazonaws.com/pod-eni|50|\n### `c8gn.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gn.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112181Mi|\n |pods|786|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|106|\n### `c8gn.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|300000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gn.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|168490Mi|\n |pods|1178|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n### `c8gn.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|300000|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gn.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|168490Mi|\n |pods|1178|\n |vpc.amazonaws.com/efa|1|\n### `c8gn.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|600000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gn.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|356820Mi|\n |pods|590|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|98|\n### `c8gn.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|600000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gn.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|356820Mi|\n |pods|590|\n |vpc.amazonaws.com/efa|2|\n## c8i Family\n### `c8i.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8i.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|2784Mi|\n |pods|59|\n |vpc.amazonaws.com/pod-eni|9|\n### `c8i.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8i.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|5924Mi|\n |pods|118|\n |vpc.amazonaws.com/pod-eni|18|\n### `c8i.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8i.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|13502Mi|\n |pods|118|\n |vpc.amazonaws.com/pod-eni|38|\n### `c8i.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8i.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|25621Mi|\n |pods|394|\n |vpc.amazonaws.com/pod-eni|54|\n### `c8i.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8i.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|54853Mi|\n |pods|492|\n |vpc.amazonaws.com/pod-eni|82|\n### `c8i.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8i.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|84086Mi|\n |pods|590|\n |vpc.amazonaws.com/pod-eni|110|\n### `c8i.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8i.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|109776Mi|\n |pods|1010|\n |vpc.amazonaws.com/pod-eni|106|\n### `c8i.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8i.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|170397Mi|\n |pods|1010|\n |vpc.amazonaws.com/pod-eni|106|\n### `c8i.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8i.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|225474Mi|\n |pods|1514|\n |vpc.amazonaws.com/pod-eni|98|\n### `c8i.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8i.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|346715Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n### `c8i.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8i.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|346715Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n### `c8i.96xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|384|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|96xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8i.96xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|382970m|\n |ephemeral-storage|17Gi|\n |memory|710440Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n### `c8i.metal-96xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|384|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal-96xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8i.metal-96xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|382970m|\n |ephemeral-storage|17Gi|\n |memory|710440Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n## c8i-flex Family\n### `c8i-flex.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|468|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8i-flex.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|2784Mi|\n |pods|59|\n |vpc.amazonaws.com/pod-eni|3|\n### `c8i-flex.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8i-flex.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|5924Mi|\n |pods|118|\n |vpc.amazonaws.com/pod-eni|8|\n### `c8i-flex.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8i-flex.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|13502Mi|\n |pods|118|\n |vpc.amazonaws.com/pod-eni|18|\n### `c8i-flex.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8i-flex.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|25621Mi|\n |pods|394|\n |vpc.amazonaws.com/pod-eni|34|\n### `c8i-flex.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8i-flex.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|54853Mi|\n |pods|492|\n |vpc.amazonaws.com/pod-eni|52|\n### `c8i-flex.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|11250|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8i-flex.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|84086Mi|\n |pods|590|\n |vpc.amazonaws.com/pod-eni|110|\n### `c8i-flex.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8i-flex.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|109776Mi|\n |pods|1010|\n |vpc.amazonaws.com/pod-eni|106|\n## c8id Family\n### `c8id.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8id.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|2784Mi|\n |pods|59|\n### `c8id.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8id.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|5924Mi|\n |pods|118|\n### `c8id.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8id.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|13502Mi|\n |pods|118|\n### `c8id.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8id.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|25621Mi|\n |pods|394|\n### `c8id.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8id.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|54853Mi|\n |pods|492|\n### `c8id.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8id.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|84086Mi|\n |pods|590|\n### `c8id.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8id.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|109776Mi|\n |pods|1010|\n### `c8id.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|5700|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8id.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|170397Mi|\n |pods|1010|\n### `c8id.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8id.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|225474Mi|\n |pods|1514|\n### `c8id.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|11400|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8id.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|346715Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n### `c8id.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|11400|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8id.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|346715Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n### `c8id.96xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|384|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|22800|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-size|96xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8id.96xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|382970m|\n |ephemeral-storage|17Gi|\n |memory|710440Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n### `c8id.metal-96xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|384|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|22800|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-size|metal-96xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8id.metal-96xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|382970m|\n |ephemeral-storage|17Gi|\n |memory|710440Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n## d2 Family\n### `d2.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|d2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|31232|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d2.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|27896Mi|\n |pods|58|\n### `d2.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|1000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|d2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|62464|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d2.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|56786Mi|\n |pods|58|\n### `d2.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|d2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|124928|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d2.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|112629Mi|\n |pods|234|\n### `d2.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|36|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|d2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|249856|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d2.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|35840m|\n |ephemeral-storage|17Gi|\n |memory|228187Mi|\n |pods|234|\n## d3 Family\n### `d3.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|d3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|5940|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|3000|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d3.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29845Mi|\n |pods|10|\n |vpc.amazonaws.com/pod-eni|42|\n### `d3.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|d3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|11880|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|6000|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d3.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|60067Mi|\n |pods|18|\n |vpc.amazonaws.com/pod-eni|92|\n### `d3.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|d3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|23760|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d3.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|120468Mi|\n |pods|38|\n |vpc.amazonaws.com/pod-eni|118|\n### `d3.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|5000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|d3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|47520|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d3.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|241479Mi|\n |pods|59|\n |vpc.amazonaws.com/pod-eni|119|\n## d3en Family\n### `d3en.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|d3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|27960|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|6000|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d3en.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14690Mi|\n |pods|10|\n |vpc.amazonaws.com/pod-eni|24|\n### `d3en.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|d3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|55920|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d3en.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29757Mi|\n |pods|18|\n |vpc.amazonaws.com/pod-eni|58|\n### `d3en.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|d3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|111840|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d3en.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|59847Mi|\n |pods|38|\n |vpc.amazonaws.com/pod-eni|118|\n### `d3en.6xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|24|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|d3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|167760|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|6xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d3en.6xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|23870m|\n |ephemeral-storage|17Gi|\n |memory|89938Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|118|\n### `d3en.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|5000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|d3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|223680|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d3en.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|120028Mi|\n |pods|78|\n |vpc.amazonaws.com/pod-eni|118|\n### `d3en.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|7000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|d3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|335520|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d3en.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|180528Mi|\n |pods|89|\n |vpc.amazonaws.com/pod-eni|119|\n## dl1 Family\n### `dl1.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|dl|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|dl1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-gpu-count|8|\n |karpenter.k8s.aws/instance-gpu-manufacturer|habana|\n |karpenter.k8s.aws/instance-gpu-memory|32768|\n |karpenter.k8s.aws/instance-gpu-name|gaudi-hl-205|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|4000|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|400000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|dl1.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |habana.ai/gaudi|8|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|4|\n |vpc.amazonaws.com/pod-eni|62|\n## dl2q Family\n### `dl2q.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-accelerator-count|8|\n |karpenter.k8s.aws/instance-accelerator-manufacturer|qualcomm|\n |karpenter.k8s.aws/instance-accelerator-name|qualcomm-ai100|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|dl|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|dl2q|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|dl2q.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## f1 Family\n### `f1.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|f|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|1700|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|f1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-local-nvme|470|\n |karpenter.k8s.aws/instance-memory|124928|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|f1.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|114565Mi|\n |pods|58|\n### `f1.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|f|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|f1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-local-nvme|940|\n |karpenter.k8s.aws/instance-memory|249856|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|f1.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|228187Mi|\n |pods|234|\n### `f1.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|f|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|f1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-local-nvme|3760|\n |karpenter.k8s.aws/instance-memory|999424|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|f1.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|919778Mi|\n |pods|394|\n## f2 Family\n### `f2.6xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|f|\n |karpenter.k8s.aws/instance-cpu|24|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|7500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|f2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|940|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|6xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|f2.6xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|23870m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `f2.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|f|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|f2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1880|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|f2.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|482037Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `f2.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|f|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|f2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7520|\n |karpenter.k8s.aws/instance-memory|2097152|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|f2.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1931403Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## g4ad Family\n### `g4ad.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g4ad|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-gpu-memory|8192|\n |karpenter.k8s.aws/instance-gpu-name|radeon-pro-v520|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|150|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2000|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g4ad.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |amd.com/gpu|1|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14712Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|12|\n### `g4ad.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g4ad|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-gpu-memory|8192|\n |karpenter.k8s.aws/instance-gpu-name|radeon-pro-v520|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|300|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|4167|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g4ad.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |amd.com/gpu|1|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29867Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|12|\n### `g4ad.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g4ad|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-gpu-memory|8192|\n |karpenter.k8s.aws/instance-gpu-name|radeon-pro-v520|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|600|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|8333|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g4ad.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |amd.com/gpu|1|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|59946Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|11|\n### `g4ad.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g4ad|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-gpu-count|2|\n |karpenter.k8s.aws/instance-gpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-gpu-memory|8192|\n |karpenter.k8s.aws/instance-gpu-name|radeon-pro-v520|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1200|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g4ad.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |amd.com/gpu|2|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|120248Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|10|\n### `g4ad.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6300|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g4ad|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-gpu-count|4|\n |karpenter.k8s.aws/instance-gpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-gpu-memory|8192|\n |karpenter.k8s.aws/instance-gpu-name|radeon-pro-v520|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2400|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g4ad.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |amd.com/gpu|4|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|6|\n## g4dn Family\n### `g4dn.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g4dn|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|t4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|125|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g4dn.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |nvidia.com/gpu|1|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|39|\n### `g4dn.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g4dn|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|t4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|225|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g4dn.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29636Mi|\n |nvidia.com/gpu|1|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|39|\n### `g4dn.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g4dn|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|t4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|225|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g4dn.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|59946Mi|\n |nvidia.com/gpu|1|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|59|\n### `g4dn.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g4dn|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|t4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|900|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g4dn.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|120248Mi|\n |nvidia.com/gpu|1|\n |pods|58|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|58|\n### `g4dn.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g4dn|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-gpu-count|4|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|t4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|900|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g4dn.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |nvidia.com/gpu|4|\n |pods|234|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|54|\n### `g4dn.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g4dn|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|t4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|900|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g4dn.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|241490Mi|\n |nvidia.com/gpu|1|\n |pods|58|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|118|\n### `g4dn.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g4dn|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-gpu-count|8|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|t4|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|1800|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g4dn.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |nvidia.com/gpu|8|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## g5 Family\n### `g5.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|a10g|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|250|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |nvidia.com/gpu|1|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|4|\n### `g5.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|a10g|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|450|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |nvidia.com/gpu|1|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|17|\n### `g5.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|a10g|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|600|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |nvidia.com/gpu|1|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|34|\n### `g5.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|16000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|a10g|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|900|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |nvidia.com/gpu|1|\n |pods|234|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|84|\n### `g5.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|16000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|4|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|a10g|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |nvidia.com/gpu|4|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `g5.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|16000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|a10g|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |nvidia.com/gpu|1|\n |pods|234|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|114|\n### `g5.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|4|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|a10g|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |nvidia.com/gpu|4|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `g5.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|8|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|a10g|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|723299Mi|\n |nvidia.com/gpu|8|\n |pods|345|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|115|\n## g5g Family\n### `g5g.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|g5g|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|t4g|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5g.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6525Mi|\n |nvidia.com/gpu|1|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `g5g.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|g5g|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|t4g|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5g.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |nvidia.com/gpu|1|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `g5g.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|g5g|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|t4g|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5g.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27322Mi|\n |nvidia.com/gpu|1|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `g5g.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|g5g|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|t4g|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5g.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |nvidia.com/gpu|1|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `g5g.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|g5g|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|2|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|t4g|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5g.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |nvidia.com/gpu|2|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `g5g.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|g5g|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|2|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|t4g|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5g.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |nvidia.com/gpu|2|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## g6 Family\n### `g6.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|5000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|250|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |nvidia.com/gpu|1|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `g6.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|5000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|450|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |nvidia.com/gpu|1|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `g6.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|8000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|600|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |nvidia.com/gpu|1|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `g6.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|16000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|900|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |nvidia.com/gpu|1|\n |pods|234|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|84|\n### `g6.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|4|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3760|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |nvidia.com/gpu|4|\n |pods|234|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|114|\n### `g6.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1880|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |nvidia.com/gpu|1|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `g6.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|4|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3760|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |nvidia.com/gpu|4|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `g6.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|8|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7520|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |nvidia.com/gpu|8|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## g6e Family\n### `g6e.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|5000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6e|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|45776|\n |karpenter.k8s.aws/instance-gpu-name|l40s|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|250|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6e.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |nvidia.com/gpu|1|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `g6e.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|5000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6e|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|45776|\n |karpenter.k8s.aws/instance-gpu-name|l40s|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|450|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6e.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |nvidia.com/gpu|1|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `g6e.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|8000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6e|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|45776|\n |karpenter.k8s.aws/instance-gpu-name|l40s|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|600|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6e.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |nvidia.com/gpu|1|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `g6e.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|16000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6e|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|45776|\n |karpenter.k8s.aws/instance-gpu-name|l40s|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|900|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6e.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |nvidia.com/gpu|1|\n |pods|234|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|84|\n### `g6e.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6e|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|4|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|45776|\n |karpenter.k8s.aws/instance-gpu-name|l40s|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6e.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360157Mi|\n |nvidia.com/gpu|4|\n |pods|292|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|112|\n### `g6e.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6e|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|45776|\n |karpenter.k8s.aws/instance-gpu-name|l40s|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|35000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6e.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |nvidia.com/gpu|1|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `g6e.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6e|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|4|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|45776|\n |karpenter.k8s.aws/instance-gpu-name|l40s|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6e.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|721682Mi|\n |nvidia.com/gpu|4|\n |pods|492|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|102|\n### `g6e.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6e|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|8|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|45776|\n |karpenter.k8s.aws/instance-gpu-name|l40s|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|400000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6e.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1449132Mi|\n |nvidia.com/gpu|8|\n |pods|492|\n |vpc.amazonaws.com/efa|4|\n |vpc.amazonaws.com/pod-eni|82|\n## g6f Family\n### `g6f.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|5000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6f|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|0|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|2861|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|100|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1500|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6f.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|7002Mi|\n |pods|20|\n |vpc.amazonaws.com/pod-eni|10|\n### `g6f.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|5000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6f|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|0|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|2861|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|100|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6f.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `g6f.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|5000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6f|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|0|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|5722|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|200|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6f.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `g6f.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6f|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|0|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|11444|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|450|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6f.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n## g7e Family\n### `g7e.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|5000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g7e|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|98304|\n |karpenter.k8s.aws/instance-gpu-name|rtx-pro-server-6000|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g7e.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|57471Mi|\n |nvidia.com/gpu|1|\n |pods|254|\n### `g7e.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|8000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g7e|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|98304|\n |karpenter.k8s.aws/instance-gpu-name|rtx-pro-server-6000|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g7e.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|115320Mi|\n |nvidia.com/gpu|1|\n |pods|506|\n### `g7e.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|16000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g7e|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|98304|\n |karpenter.k8s.aws/instance-gpu-name|rtx-pro-server-6000|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g7e.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|236562Mi|\n |nvidia.com/gpu|1|\n |pods|506|\n |vpc.amazonaws.com/efa|1|\n### `g7e.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g7e|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-gpu-count|2|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|98304|\n |karpenter.k8s.aws/instance-gpu-name|rtx-pro-server-6000|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|400000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g7e.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|477659Mi|\n |nvidia.com/gpu|2|\n |pods|632|\n |vpc.amazonaws.com/efa|1|\n### `g7e.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|50000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g7e|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-gpu-count|4|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|98304|\n |karpenter.k8s.aws/instance-gpu-name|rtx-pro-server-6000|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|800000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g7e.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|962625Mi|\n |nvidia.com/gpu|4|\n |pods|632|\n |vpc.amazonaws.com/efa|2|\n### `g7e.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g7e|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-gpu-count|8|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|98304|\n |karpenter.k8s.aws/instance-gpu-name|rtx-pro-server-6000|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|15200|\n |karpenter.k8s.aws/instance-memory|2097152|\n |karpenter.k8s.aws/instance-network-bandwidth|1600000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g7e.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1932558Mi|\n |nvidia.com/gpu|8|\n |pods|632|\n |vpc.amazonaws.com/efa|4|\n## gr6 Family\n### `gr6.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|gr|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|8000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|gr6|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|600|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|gr6.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |nvidia.com/gpu|1|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `gr6.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|gr|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|16000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|gr6|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|900|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|gr6.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |nvidia.com/gpu|1|\n |pods|234|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|84|\n## gr6f Family\n### `gr6f.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|gr|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|8000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|gr6f|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|0|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|11444|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|450|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|gr6f.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n## h1 Family\n### `h1.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|h|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|1750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|h1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|h1.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n### `h1.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|h|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|h1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|h1.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n### `h1.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|h|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|7000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|h1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|h1.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n### `h1.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|h|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|h1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|h1.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|237794Mi|\n |pods|394|\n## hpc6a Family\n### `hpc6a.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|hpc|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|hpc6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|hpc6a.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|362269Mi|\n |pods|100|\n |vpc.amazonaws.com/efa|1|\n## hpc6id Family\n### `hpc6id.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|hpc|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|hpc6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|15200|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|hpc6id.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|969016Mi|\n |pods|51|\n |vpc.amazonaws.com/efa|2|\n## hpc7a Family\n### `hpc7a.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|hpc|\n |karpenter.k8s.aws/instance-cpu|24|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|hpc7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|300000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|hpc7a.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|23870m|\n |ephemeral-storage|17Gi|\n |memory|725994Mi|\n |pods|100|\n |vpc.amazonaws.com/efa|2|\n### `hpc7a.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|hpc|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|hpc7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|300000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|hpc7a.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|725994Mi|\n |pods|100|\n |vpc.amazonaws.com/efa|2|\n### `hpc7a.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|hpc|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|hpc7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|300000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|hpc7a.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|725994Mi|\n |pods|100|\n |vpc.amazonaws.com/efa|2|\n### `hpc7a.96xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|hpc|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|hpc7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|300000|\n |karpenter.k8s.aws/instance-size|96xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|hpc7a.96xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|725994Mi|\n |pods|100|\n |vpc.amazonaws.com/efa|2|\n## hpc7g Family\n### `hpc7g.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|hpc|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|hpc7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|hpc7g.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118649Mi|\n |pods|198|\n |vpc.amazonaws.com/efa|1|\n### `hpc7g.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|hpc|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|hpc7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|hpc7g.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118649Mi|\n |pods|198|\n |vpc.amazonaws.com/efa|1|\n### `hpc7g.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|hpc|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|hpc7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|hpc7g.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|118649Mi|\n |pods|198|\n |vpc.amazonaws.com/efa|1|\n## hpc8a Family\n### `hpc8a.96xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|hpc|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|hpc8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-size|96xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|hpc8a.96xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|725994Mi|\n |pods|100|\n |vpc.amazonaws.com/efa|2|\n## i2 Family\n### `i2.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|i2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|31232|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i2.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|27896Mi|\n |pods|58|\n### `i2.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|i2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|62464|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i2.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|56786Mi|\n |pods|58|\n### `i2.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|i2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|124928|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i2.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|112629Mi|\n |pods|234|\n### `i2.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|i2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|249856|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i2.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|228187Mi|\n |pods|234|\n## i3 Family\n### `i3.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|425|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|i3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-local-nvme|475|\n |karpenter.k8s.aws/instance-memory|15616|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|13770Mi|\n |pods|29|\n### `i3.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|850|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|i3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|31232|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|27896Mi|\n |pods|58|\n### `i3.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|1700|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|i3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|62464|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|56786Mi|\n |pods|58|\n### `i3.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|i3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|124928|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|112629Mi|\n |pods|234|\n### `i3.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|7000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|i3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|249856|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|228187Mi|\n |pods|234|\n### `i3.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|i3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-local-nvme|15200|\n |karpenter.k8s.aws/instance-memory|499712|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|453771Mi|\n |pods|737|\n## i3en Family\n### `i3en.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1250|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2100|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3en.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|5|\n### `i3en.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2500|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|4200|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3en.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|12|\n### `i3en.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|5000|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|8400|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3en.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|28|\n### `i3en.3xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|12|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7500|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|3xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3en.3xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|11900m|\n |ephemeral-storage|17Gi|\n |memory|89938Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `i3en.6xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|24|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|15000|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|6xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3en.6xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|23870m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `i3en.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|30000|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3en.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|54|\n### `i3en.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|60000|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3en.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `i3en.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|60000|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3en.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## i4g Family\n### `i4g.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4g|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|468|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4g.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14422Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `i4g.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4g|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|937|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4g.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `i4g.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4g|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1875|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|4687|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4g.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59568Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `i4g.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4g|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3750|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|9375|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4g.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `i4g.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4g|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7500|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4g.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239495Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `i4g.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4g|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|15000|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4g.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476445Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## i4i Family\n### `i4i.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4i|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|468|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4i.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n### `i4i.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4i|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|937|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4i.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|6|\n### `i4i.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4i|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1875|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|4687|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4i.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|26|\n### `i4i.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4i|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3750|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|9375|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4i.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|52|\n### `i4i.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4i|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7500|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4i.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|112|\n### `i4i.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4i|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|11250|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|28120|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4i.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|112|\n### `i4i.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4i|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|15000|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4i.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|120|\n### `i4i.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4i|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|22500|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|56250|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4i.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|722287Mi|\n |pods|437|\n |vpc.amazonaws.com/pod-eni|105|\n### `i4i.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4i|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|30000|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4i.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|961470Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|120|\n### `i4i.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4i|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|30000|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4i.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|961470Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|120|\n## i7i Family\n### `i7i.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|468|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1171|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7i.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `i7i.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|937|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|2343|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7i.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `i7i.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1875|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|4687|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7i.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `i7i.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3750|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|9375|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7i.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `i7i.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7500|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7i.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `i7i.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|11250|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|28120|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7i.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `i7i.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|15000|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7i.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `i7i.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|22500|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|56250|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7i.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `i7i.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|22500|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|56250|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7i.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `i7i.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|45000|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7i.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446437Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `i7i.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|45000|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7i.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446437Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## i7ie Family\n### `i7ie.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7ie|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1250|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2083|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7ie.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|19|\n### `i7ie.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7ie|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2500|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|4166|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7ie.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|27|\n### `i7ie.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7ie|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|5000|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|8333|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7ie.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|27|\n### `i7ie.3xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|12|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7ie|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7500|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|3xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7ie.3xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|11900m|\n |ephemeral-storage|17Gi|\n |memory|89938Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|27|\n### `i7ie.6xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|24|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7ie|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|15000|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|6xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7ie.6xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|23870m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `i7ie.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7ie|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|30000|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7ie.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|359035Mi|\n |pods|394|\n |vpc.amazonaws.com/pod-eni|54|\n### `i7ie.18xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|72|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|22500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7ie|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|45000|\n |karpenter.k8s.aws/instance-memory|589824|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|18xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7ie.18xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|71750m|\n |ephemeral-storage|17Gi|\n |memory|537125Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `i7ie.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7ie|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|60000|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7ie.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `i7ie.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7ie|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|60000|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7ie.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `i7ie.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7ie|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|120000|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7ie.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446437Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `i7ie.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7ie|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|120000|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7ie.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446437Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## i8g Family\n### `i8g.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|468|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1172|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8g.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14422Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `i8g.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|937|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|2344|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8g.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `i8g.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1875|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|4688|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8g.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59568Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `i8g.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3750|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|9375|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8g.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `i8g.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7500|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8g.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239495Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `i8g.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|11250|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|28120|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8g.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360736Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `i8g.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|15000|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8g.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476445Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `i8g.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|22500|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|56250|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8g.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718928Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `i8g.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|22500|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|56250|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8g.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718928Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `i8g.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|45000|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8g.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446378Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `i8g.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|45000|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8g.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446378Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n## i8ge Family\n### `i8ge.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8ge|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1250|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2100|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8ge.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14422Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|19|\n### `i8ge.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8ge|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2500|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|4200|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8ge.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|27|\n### `i8ge.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8ge|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|5000|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|8400|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8ge.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59568Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|27|\n### `i8ge.3xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|12|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8ge|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7500|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|3xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8ge.3xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|11900m|\n |ephemeral-storage|17Gi|\n |memory|88581Mi|\n |pods|176|\n |vpc.amazonaws.com/pod-eni|25|\n### `i8ge.6xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|24|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8ge|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|15000|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|6xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8ge.6xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|23870m|\n |ephemeral-storage|17Gi|\n |memory|178236Mi|\n |pods|292|\n |vpc.amazonaws.com/pod-eni|52|\n### `i8ge.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8ge|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|30000|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8ge.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|359460Mi|\n |pods|350|\n |vpc.amazonaws.com/pod-eni|50|\n### `i8ge.18xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|72|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|22500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8ge|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|45000|\n |karpenter.k8s.aws/instance-memory|589824|\n |karpenter.k8s.aws/instance-network-bandwidth|112500|\n |karpenter.k8s.aws/instance-size|18xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8ge.18xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|71750m|\n |ephemeral-storage|17Gi|\n |memory|536527Mi|\n |pods|786|\n |vpc.amazonaws.com/pod-eni|106|\n### `i8ge.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8ge|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|60000|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|150000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8ge.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718389Mi|\n |pods|786|\n |vpc.amazonaws.com/pod-eni|106|\n### `i8ge.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8ge|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|60000|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|150000|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8ge.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718389Mi|\n |pods|786|\n |vpc.amazonaws.com/pod-eni|106|\n### `i8ge.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8ge|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|120000|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|180000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8ge.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1441527Mi|\n |pods|1178|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n### `i8ge.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8ge|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|120000|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|180000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8ge.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1441527Mi|\n |pods|1178|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n## im4gn Family\n### `im4gn.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|im|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|im4gn|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|937|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|im4gn.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6844Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `im4gn.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|im|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|im4gn|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1875|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|im4gn.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `im4gn.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|im|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|im4gn|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3750|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|im4gn.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `im4gn.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|im|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|im4gn|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7500|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|im4gn.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `im4gn.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|im|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|im4gn|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|15000|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|im4gn.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `im4gn.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|im|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|im4gn|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|30000|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|im4gn.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|233962Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## inf1 Family\n### `inf1.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-accelerator-count|1|\n |karpenter.k8s.aws/instance-accelerator-manufacturer|aws|\n |karpenter.k8s.aws/instance-accelerator-name|inferentia|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|inf|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|inf1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|inf1.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |aws.amazon.com/neuron|1|\n |aws.amazon.com/neuroncore|4|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6804Mi|\n |pods|38|\n |vpc.amazonaws.com/pod-eni|38|\n### `inf1.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-accelerator-count|1|\n |karpenter.k8s.aws/instance-accelerator-manufacturer|aws|\n |karpenter.k8s.aws/instance-accelerator-name|inferentia|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|inf|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|inf1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|inf1.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |aws.amazon.com/neuron|1|\n |aws.amazon.com/neuroncore|4|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14382Mi|\n |pods|38|\n |vpc.amazonaws.com/pod-eni|38|\n### `inf1.6xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-accelerator-count|4|\n |karpenter.k8s.aws/instance-accelerator-manufacturer|aws|\n |karpenter.k8s.aws/instance-accelerator-name|inferentia|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|inf|\n |karpenter.k8s.aws/instance-cpu|24|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|inf1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|49152|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|6xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|inf1.6xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |aws.amazon.com/neuron|4|\n |aws.amazon.com/neuroncore|16|\n |cpu|23870m|\n |ephemeral-storage|17Gi|\n |memory|42536Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `inf1.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-accelerator-count|16|\n |karpenter.k8s.aws/instance-accelerator-manufacturer|aws|\n |karpenter.k8s.aws/instance-accelerator-name|inferentia|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|inf|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|inf1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|inf1.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |aws.amazon.com/neuron|16|\n |aws.amazon.com/neuroncore|64|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|177976Mi|\n |pods|321|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|111|\n## inf2 Family\n### `inf2.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-accelerator-count|1|\n |karpenter.k8s.aws/instance-accelerator-manufacturer|aws|\n |karpenter.k8s.aws/instance-accelerator-name|inferentia2|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|inf|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|inf2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2083|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|inf2.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |aws.amazon.com/neuron|1|\n |aws.amazon.com/neuroncore|2|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `inf2.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-accelerator-count|1|\n |karpenter.k8s.aws/instance-accelerator-manufacturer|aws|\n |karpenter.k8s.aws/instance-accelerator-name|inferentia2|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|inf|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|inf2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|16667|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|inf2.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |aws.amazon.com/neuron|1|\n |aws.amazon.com/neuroncore|2|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `inf2.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-accelerator-count|6|\n |karpenter.k8s.aws/instance-accelerator-manufacturer|aws|\n |karpenter.k8s.aws/instance-accelerator-name|inferentia2|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|inf|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|inf2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|inf2.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |aws.amazon.com/neuron|6|\n |aws.amazon.com/neuroncore|12|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `inf2.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-accelerator-count|12|\n |karpenter.k8s.aws/instance-accelerator-manufacturer|aws|\n |karpenter.k8s.aws/instance-accelerator-name|inferentia2|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|inf|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|inf2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|inf2.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |aws.amazon.com/neuron|12|\n |aws.amazon.com/neuroncore|24|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## is4gen Family\n### `is4gen.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|is|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|is4gen|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|937|\n |karpenter.k8s.aws/instance-memory|6144|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|is4gen.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|5181Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `is4gen.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|is|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|is4gen|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1875|\n |karpenter.k8s.aws/instance-memory|12288|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|is4gen.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|10633Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `is4gen.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|is|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|is4gen|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3750|\n |karpenter.k8s.aws/instance-memory|24576|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|is4gen.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|21680Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `is4gen.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|is|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|is4gen|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7500|\n |karpenter.k8s.aws/instance-memory|49152|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|is4gen.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|44413Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `is4gen.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|is|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|is4gen|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|15000|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|is4gen.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|87943Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `is4gen.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|is|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|is4gen|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|30000|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|is4gen.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|178874Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n## m1 Family\n### `m1.small`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|0|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|1740|\n |karpenter.k8s.aws/instance-size|small|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m1.small|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|1166Mi|\n |pods|8|\n### `m1.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|0|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|3788|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m1.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|3016Mi|\n |pods|12|\n### `m1.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|0|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|7680|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m1.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6430Mi|\n |pods|29|\n### `m1.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|0|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|15360|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m1.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|13215Mi|\n |pods|58|\n## m2 Family\n### `m2.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|0|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|17510|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m2.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|15203Mi|\n |pods|58|\n### `m2.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|0|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|35020|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m2.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|30740Mi|\n |pods|118|\n### `m2.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|0|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|70041|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m2.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|61858Mi|\n |pods|234|\n## m3 Family\n### `m3.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|3840|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m3.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|3065Mi|\n |pods|12|\n### `m3.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|7680|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m3.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6430Mi|\n |pods|29|\n### `m3.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|15360|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m3.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|13215Mi|\n |pods|58|\n### `m3.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|30720|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m3.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|26763Mi|\n |pods|118|\n## m4 Family\n### `m4.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|450|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m4.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|7002Mi|\n |pods|20|\n### `m4.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m4.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n### `m4.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|1000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m4.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n### `m4.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m4.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n### `m4.10xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|40|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|163840|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|10xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m4.10xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|39830m|\n |ephemeral-storage|17Gi|\n |memory|148623Mi|\n |pods|234|\n### `m4.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m4.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n## m5 Family\n### `m5.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m5.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m5.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m5.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|13600|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m5.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m5.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|120|\n## m5a Family\n### `m5a.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5a.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m5a.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5a.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m5a.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5a.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m5a.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5a.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5a.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5a.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5a.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6780|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5a.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5a.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5a.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m5a.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|13750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5a.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## m5ad Family\n### `m5ad.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|75|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5ad.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m5ad.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|150|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5ad.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m5ad.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|300|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5ad.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m5ad.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|600|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5ad.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5ad.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1200|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5ad.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5ad.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6780|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1800|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5ad.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5ad.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2400|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5ad.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m5ad.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|13750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3600|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5ad.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## m5d Family\n### `m5d.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|75|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5d.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m5d.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|150|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5d.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m5d.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|300|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5d.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m5d.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|600|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5d.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5d.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1200|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5d.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5d.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1800|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5d.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5d.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|13600|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2400|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5d.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m5d.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3600|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5d.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m5d.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3600|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5d.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## m5dn Family\n### `m5dn.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|75|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|2100|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5dn.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m5dn.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|150|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|4100|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5dn.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m5dn.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|300|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|8125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5dn.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m5dn.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|600|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|16250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5dn.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5dn.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1200|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5dn.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5dn.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1800|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5dn.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5dn.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|13600|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2400|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5dn.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m5dn.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3600|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5dn.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m5dn.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3600|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5dn.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## m5n Family\n### `m5n.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|2100|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5n.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m5n.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|4100|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5n.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m5n.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|8125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5n.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m5n.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|16250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5n.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5n.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5n.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5n.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5n.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5n.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|13600|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5n.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m5n.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5n.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m5n.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5n.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## m5zn Family\n### `m5zn.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5zn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|3000|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5zn.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|13|\n### `m5zn.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5zn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5zn.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|29|\n### `m5zn.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5zn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5zn.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|62|\n### `m5zn.3xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|12|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5zn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|49152|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|3xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5zn.3xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|11900m|\n |ephemeral-storage|17Gi|\n |memory|42536Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|92|\n### `m5zn.6xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|24|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5zn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|6xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5zn.6xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|23870m|\n |ephemeral-storage|17Gi|\n |memory|88002Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `m5zn.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5zn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5zn.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m5zn.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5zn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5zn.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## m6a Family\n### `m6a.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6a.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m6a.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6a.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m6a.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6a.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m6a.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6a.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m6a.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6a.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `m6a.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6a.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `m6a.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6a.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6a.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6a.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6a.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6a.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6a.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6a.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6a.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6a.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## m6g Family\n### `m6g.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|500|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6g.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|3286Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `m6g.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6g.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6844Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m6g.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6g.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m6g.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6g.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m6g.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6g.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m6g.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6g.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m6g.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14250|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6g.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178874Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m6g.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6g.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|233962Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6g.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6g.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|233962Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## m6gd Family\n### `m6gd.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|59|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|500|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6gd.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|3286Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `m6gd.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6gd.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6844Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m6gd.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6gd.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m6gd.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6gd.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m6gd.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6gd.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m6gd.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6gd.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m6gd.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14250|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6gd.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178874Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m6gd.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6gd.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|233962Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6gd.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6gd.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|233962Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## m6i Family\n### `m6i.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6i.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m6i.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6i.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m6i.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6i.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m6i.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6i.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m6i.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6i.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `m6i.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6i.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `m6i.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6i.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6i.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6i.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6i.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6i.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6i.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6i.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## m6id Family\n### `m6id.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6id.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m6id.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6id.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m6id.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6id.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m6id.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6id.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m6id.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6id.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `m6id.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6id.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `m6id.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6id.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6id.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|5700|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6id.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6id.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6id.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6id.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6id.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## m6idn Family\n### `m6idn.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6idn.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m6idn.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6idn.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m6idn.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6idn.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m6idn.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6idn.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m6idn.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6idn.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `m6idn.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|37500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6idn.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `m6idn.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|50000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6idn.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6idn.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|75000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|5700|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|150000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6idn.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6idn.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6idn.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|480277Mi|\n |pods|394|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|106|\n### `m6idn.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6idn.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|480277Mi|\n |pods|394|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|106|\n## m6in Family\n### `m6in.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6in.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m6in.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6in.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m6in.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6in.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m6in.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6in.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m6in.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6in.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `m6in.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|37500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6in.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `m6in.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|50000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6in.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6in.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|75000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|150000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6in.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6in.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6in.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|480277Mi|\n |pods|394|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|106|\n### `m6in.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6in.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|480277Mi|\n |pods|394|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|106|\n## m7a Family\n### `m7a.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|390|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7a.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|3345Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `m7a.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7a.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m7a.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7a.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m7a.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7a.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m7a.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7a.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m7a.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7a.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `m7a.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7a.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `m7a.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7a.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m7a.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7a.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m7a.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7a.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m7a.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7a.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m7a.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7a.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## m7g Family\n### `m7g.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|520|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7g.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|3286Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `m7g.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7g.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6844Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m7g.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1876|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7g.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m7g.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7g.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m7g.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7g.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m7g.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7g.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m7g.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7g.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178874Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m7g.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7g.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|233962Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m7g.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7g.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|233962Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## m7gd Family\n### `m7gd.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|59|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|520|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7gd.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|3286Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `m7gd.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7gd.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6844Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m7gd.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1876|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7gd.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m7gd.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7gd.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m7gd.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7gd.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m7gd.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7gd.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m7gd.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7gd.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178874Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m7gd.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7gd.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|233962Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m7gd.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7gd.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|233962Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## m7i Family\n### `m7i.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m7i.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m7i.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m7i.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m7i.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `m7i.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `m7i.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m7i.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m7i.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m7i.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m7i.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## m7i-flex Family\n### `m7i-flex.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i-flex|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|390|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i-flex.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|3|\n### `m7i-flex.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i-flex|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i-flex.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|8|\n### `m7i-flex.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i-flex|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i-flex.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m7i-flex.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i-flex|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i-flex.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|34|\n### `m7i-flex.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i-flex|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i-flex.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m7i-flex.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i-flex|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|9375|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i-flex.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `m7i-flex.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i-flex|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i-flex.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## m8a Family\n### `m8a.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|520|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8a.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|3345Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `m8a.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8a.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6573Mi|\n |pods|59|\n |vpc.amazonaws.com/pod-eni|9|\n### `m8a.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8a.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|13942Mi|\n |pods|78|\n |vpc.amazonaws.com/pod-eni|18|\n### `m8a.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8a.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|28217Mi|\n |pods|158|\n |vpc.amazonaws.com/pod-eni|38|\n### `m8a.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8a.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|56811Mi|\n |pods|314|\n |vpc.amazonaws.com/pod-eni|54|\n### `m8a.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8a.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|116574Mi|\n |pods|392|\n |vpc.amazonaws.com/pod-eni|82|\n### `m8a.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8a.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|173169Mi|\n |pods|758|\n |vpc.amazonaws.com/pod-eni|110|\n### `m8a.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8a.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|231018Mi|\n |pods|1010|\n |vpc.amazonaws.com/pod-eni|106|\n### `m8a.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8a.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|352259Mi|\n |pods|1010|\n |vpc.amazonaws.com/pod-eni|106|\n### `m8a.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8a.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|352259Mi|\n |pods|1010|\n |vpc.amazonaws.com/pod-eni|106|\n### `m8a.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8a.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|710440Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n### `m8a.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8a.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|710440Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n## m8azn Family\n### `m8azn.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|5000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8azn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8azn.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|3312Mi|\n |pods|11|\n### `m8azn.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|5000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8azn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8azn.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6364Mi|\n |pods|78|\n### `m8azn.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|5000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8azn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8azn.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|13942Mi|\n |pods|78|\n### `m8azn.3xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|12|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|5000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8azn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|49152|\n |karpenter.k8s.aws/instance-size|3xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8azn.3xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|11900m|\n |ephemeral-storage|17Gi|\n |memory|41656Mi|\n |pods|314|\n### `m8azn.6xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|24|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|5000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8azn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-size|6xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8azn.6xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|23870m|\n |ephemeral-storage|17Gi|\n |memory|87122Mi|\n |pods|314|\n### `m8azn.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|5000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8azn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8azn.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|170397Mi|\n |pods|1010|\n### `m8azn.metal-12xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|5000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8azn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-size|metal-12xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8azn.metal-12xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|170397Mi|\n |pods|1010|\n### `m8azn.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|5000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8azn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8azn.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|352259Mi|\n |pods|1010|\n |vpc.amazonaws.com/efa|1|\n### `m8azn.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|5000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8azn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8azn.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|352259Mi|\n |pods|1010|\n |vpc.amazonaws.com/efa|1|\n## m8g Family\n### `m8g.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|520|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8g.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|3286Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `m8g.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8g.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6844Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m8g.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8g.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m8g.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8g.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m8g.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8g.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m8g.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8g.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m8g.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8g.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178874Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m8g.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8g.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|233962Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m8g.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8g.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355203Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m8g.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8g.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355203Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m8g.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8g.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|718928Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m8g.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8g.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|718928Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## m8gb Family\n### `m8gb.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|2083|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gb.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|3286Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `m8gb.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|4166|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gb.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6844Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m8gb.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|8333|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gb.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m8gb.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|16666|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gb.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m8gb.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|33330|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gb.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m8gb.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|50000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|66660|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gb.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|117615Mi|\n |pods|292|\n |vpc.amazonaws.com/pod-eni|52|\n### `m8gb.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|75000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gb.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|177598Mi|\n |pods|350|\n |vpc.amazonaws.com/pod-eni|50|\n### `m8gb.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|133330|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gb.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|233423Mi|\n |pods|786|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|106|\n### `m8gb.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|150000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gb.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|350352Mi|\n |pods|1178|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n### `m8gb.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|150000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gb.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|350352Mi|\n |pods|1178|\n |vpc.amazonaws.com/efa|1|\n### `m8gb.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|300000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gb.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|720545Mi|\n |pods|590|\n |vpc.amazonaws.com/efa|2|\n### `m8gb.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|300000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gb.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|720545Mi|\n |pods|590|\n |vpc.amazonaws.com/efa|2|\n## m8gd Family\n### `m8gd.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|59|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|520|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gd.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|3286Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `m8gd.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gd.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6844Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m8gd.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gd.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m8gd.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gd.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m8gd.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gd.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m8gd.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gd.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m8gd.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gd.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178874Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m8gd.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gd.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|233962Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m8gd.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|5700|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gd.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355203Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m8gd.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|5700|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gd.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355203Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m8gd.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|11400|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gd.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|718928Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m8gd.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|11400|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gd.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|718928Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## m8gn Family\n### `m8gn.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gn.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|3286Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `m8gn.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gn.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6844Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m8gn.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gn.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m8gn.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gn.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m8gn.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gn.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m8gn.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gn.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|117615Mi|\n |pods|292|\n |vpc.amazonaws.com/pod-eni|52|\n### `m8gn.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|150000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gn.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|177598Mi|\n |pods|350|\n |vpc.amazonaws.com/pod-eni|50|\n### `m8gn.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gn.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|233423Mi|\n |pods|786|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|106|\n### `m8gn.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|300000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gn.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|350352Mi|\n |pods|1178|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n### `m8gn.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gn.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|350352Mi|\n |pods|1178|\n |vpc.amazonaws.com/efa|1|\n### `m8gn.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|600000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gn.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|720545Mi|\n |pods|590|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|98|\n### `m8gn.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gn.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|720545Mi|\n |pods|590|\n |vpc.amazonaws.com/efa|2|\n## m8i Family\n### `m8i.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6573Mi|\n |pods|59|\n |vpc.amazonaws.com/pod-eni|9|\n### `m8i.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|13502Mi|\n |pods|118|\n |vpc.amazonaws.com/pod-eni|18|\n### `m8i.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|28657Mi|\n |pods|118|\n |vpc.amazonaws.com/pod-eni|38|\n### `m8i.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|55931Mi|\n |pods|394|\n |vpc.amazonaws.com/pod-eni|54|\n### `m8i.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|115474Mi|\n |pods|492|\n |vpc.amazonaws.com/pod-eni|82|\n### `m8i.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|175017Mi|\n |pods|590|\n |vpc.amazonaws.com/pod-eni|110|\n### `m8i.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|231018Mi|\n |pods|1010|\n |vpc.amazonaws.com/pod-eni|106|\n### `m8i.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|352259Mi|\n |pods|1010|\n |vpc.amazonaws.com/pod-eni|106|\n### `m8i.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|467957Mi|\n |pods|1514|\n |vpc.amazonaws.com/pod-eni|98|\n### `m8i.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|710440Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n### `m8i.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|710440Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n### `m8i.96xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|384|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|96xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i.96xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|382970m|\n |ephemeral-storage|17Gi|\n |memory|1437890Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n### `m8i.metal-96xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|384|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal-96xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i.metal-96xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|382970m|\n |ephemeral-storage|17Gi|\n |memory|1437890Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n## m8i-flex Family\n### `m8i-flex.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|468|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i-flex.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6573Mi|\n |pods|59|\n |vpc.amazonaws.com/pod-eni|3|\n### `m8i-flex.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i-flex.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|13502Mi|\n |pods|118|\n |vpc.amazonaws.com/pod-eni|8|\n### `m8i-flex.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i-flex.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|28657Mi|\n |pods|118|\n |vpc.amazonaws.com/pod-eni|18|\n### `m8i-flex.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i-flex.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|55931Mi|\n |pods|394|\n |vpc.amazonaws.com/pod-eni|34|\n### `m8i-flex.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i-flex.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|115474Mi|\n |pods|492|\n |vpc.amazonaws.com/pod-eni|52|\n### `m8i-flex.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|11250|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i-flex.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|175017Mi|\n |pods|590|\n |vpc.amazonaws.com/pod-eni|110|\n### `m8i-flex.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i-flex.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|231018Mi|\n |pods|1010|\n |vpc.amazonaws.com/pod-eni|106|\n## m8id Family\n### `m8id.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8id.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6573Mi|\n |pods|59|\n### `m8id.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8id.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|13502Mi|\n |pods|118|\n### `m8id.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8id.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|28657Mi|\n |pods|118|\n### `m8id.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8id.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|55931Mi|\n |pods|394|\n### `m8id.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8id.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|115474Mi|\n |pods|492|\n### `m8id.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8id.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|175017Mi|\n |pods|590|\n### `m8id.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8id.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|231018Mi|\n |pods|1010|\n### `m8id.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|5700|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8id.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|352259Mi|\n |pods|1010|\n### `m8id.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8id.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|467957Mi|\n |pods|1514|\n### `m8id.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|11400|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8id.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|710440Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n### `m8id.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|11400|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8id.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|710440Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n### `m8id.96xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|384|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|22800|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-size|96xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8id.96xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|382970m|\n |ephemeral-storage|17Gi|\n |memory|1437890Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n### `m8id.metal-96xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|384|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|22800|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-size|metal-96xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8id.metal-96xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|382970m|\n |ephemeral-storage|17Gi|\n |memory|1437890Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n## p3 Family\n### `p3.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|p|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|1750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|p3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|v100|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|62464|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|p3.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|56786Mi|\n |nvidia.com/gpu|1|\n |pods|58|\n### `p3.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|p|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|7000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|p3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-gpu-count|4|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|v100|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|249856|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|p3.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|228187Mi|\n |nvidia.com/gpu|4|\n |pods|234|\n### `p3.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|p|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|p3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-gpu-count|8|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|v100|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|499712|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|p3.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|459304Mi|\n |nvidia.com/gpu|8|\n |pods|234|\n## p3dn Family\n### `p3dn.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|p|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|p3dn|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-gpu-count|8|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|32768|\n |karpenter.k8s.aws/instance-gpu-name|v100|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1800|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|p3dn.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |nvidia.com/gpu|8|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## p4d Family\n### `p4d.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|p|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|p4d|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-gpu-count|8|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|40960|\n |karpenter.k8s.aws/instance-gpu-name|a100|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|8000|\n |karpenter.k8s.aws/instance-memory|1179648|\n |karpenter.k8s.aws/instance-network-bandwidth|400000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|p4d.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|1082712Mi|\n |nvidia.com/gpu|8|\n |pods|737|\n |vpc.amazonaws.com/efa|4|\n |vpc.amazonaws.com/pod-eni|62|\n## p4de Family\n### `p4de.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|p|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|p4de|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-gpu-count|8|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|81920|\n |karpenter.k8s.aws/instance-gpu-name|a100|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|8000|\n |karpenter.k8s.aws/instance-memory|1179648|\n |karpenter.k8s.aws/instance-network-bandwidth|400000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|p4de.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|1082712Mi|\n |nvidia.com/gpu|8|\n |pods|737|\n |vpc.amazonaws.com/efa|4|\n |vpc.amazonaws.com/pod-eni|62|\n## p5 Family\n### `p5.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|p|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|p5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|81920|\n |karpenter.k8s.aws/instance-gpu-name|h100|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|p5.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|240830Mi|\n |nvidia.com/gpu|1|\n |pods|118|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|58|\n### `p5.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|p|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|p5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|8|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|81920|\n |karpenter.k8s.aws/instance-gpu-name|h100|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|30400|\n |karpenter.k8s.aws/instance-memory|2097152|\n |karpenter.k8s.aws/instance-network-bandwidth|3200000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|p5.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1938410Mi|\n |nvidia.com/gpu|8|\n |pods|100|\n |vpc.amazonaws.com/efa|32|\n |vpc.amazonaws.com/pod-eni|120|\n## p5e Family\n### `p5e.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|p|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|p5e|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|8|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|144384|\n |karpenter.k8s.aws/instance-gpu-name|h200|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|30400|\n |karpenter.k8s.aws/instance-memory|2097152|\n |karpenter.k8s.aws/instance-network-bandwidth|3200000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|p5e.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1938410Mi|\n |nvidia.com/gpu|8|\n |pods|100|\n |vpc.amazonaws.com/efa|32|\n |vpc.amazonaws.com/pod-eni|120|\n## p5en Family\n### `p5en.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|p|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|p5en|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|8|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|144384|\n |karpenter.k8s.aws/instance-gpu-name|h200|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|30400|\n |karpenter.k8s.aws/instance-memory|2097152|\n |karpenter.k8s.aws/instance-network-bandwidth|3200000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|p5en.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1937332Mi|\n |nvidia.com/gpu|8|\n |pods|198|\n |vpc.amazonaws.com/efa|16|\n |vpc.amazonaws.com/pod-eni|120|\n## p6-b200 Family\n### `p6-b200.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|p|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|p6-b200|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|8|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|183359|\n |karpenter.k8s.aws/instance-gpu-name|b200|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|30400|\n |karpenter.k8s.aws/instance-memory|2097152|\n |karpenter.k8s.aws/instance-network-bandwidth|3200000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|p6-b200.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1937332Mi|\n |nvidia.com/gpu|8|\n |pods|198|\n |vpc.amazonaws.com/efa|8|\n |vpc.amazonaws.com/pod-eni|120|\n## p6-b300 Family\n### `p6-b300.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|p|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|p6-b300|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|8|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|275040|\n |karpenter.k8s.aws/instance-gpu-name|b300|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|30400|\n |karpenter.k8s.aws/instance-memory|4194304|\n |karpenter.k8s.aws/instance-network-bandwidth|6400000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|p6-b300.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|3877198Mi|\n |nvidia.com/gpu|8|\n |pods|198|\n |vpc.amazonaws.com/efa|16|\n |vpc.amazonaws.com/pod-eni|120|\n## r3 Family\n### `r3.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|15360|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r3.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|13534Mi|\n |pods|29|\n### `r3.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|31232|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r3.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|27896Mi|\n |pods|58|\n### `r3.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|62464|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r3.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|56786Mi|\n |pods|58|\n### `r3.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|124928|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r3.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|112629Mi|\n |pods|234|\n### `r3.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|249856|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r3.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|228187Mi|\n |pods|234|\n## r4 Family\n### `r4.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|425|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|15616|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r4.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|13770Mi|\n |pods|29|\n### `r4.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|850|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|31232|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r4.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|27896Mi|\n |pods|58|\n### `r4.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|1700|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|62464|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r4.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|56786Mi|\n |pods|58|\n### `r4.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|124928|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r4.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|112629Mi|\n |pods|234|\n### `r4.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|7000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|249856|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r4.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|228187Mi|\n |pods|234|\n### `r4.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|499712|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r4.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|453771Mi|\n |pods|737|\n## r5 Family\n### `r5.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r5.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r5.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r5.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|13600|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r5.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r5.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|120|\n## r5a Family\n### `r5a.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5a.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r5a.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5a.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r5a.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5a.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r5a.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5a.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5a.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5a.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5a.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6780|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5a.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5a.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5a.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r5a.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|13570|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5a.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## r5ad Family\n### `r5ad.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|75|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5ad.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r5ad.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|150|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5ad.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r5ad.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|300|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5ad.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r5ad.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|600|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5ad.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5ad.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1200|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5ad.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5ad.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6780|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1800|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5ad.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5ad.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2400|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5ad.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r5ad.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|13570|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3600|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5ad.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## r5b Family\n### `r5b.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5b|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5b.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r5b.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5b|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5b.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r5b.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5b|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5b.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r5b.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5b|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5b.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5b.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5b|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5b.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5b.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5b|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5b.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5b.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5b|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5b.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r5b.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5b|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5b.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r5b.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5b|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5b.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## r5d Family\n### `r5d.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|75|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5d.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r5d.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|150|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5d.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r5d.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|300|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5d.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r5d.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|600|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5d.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5d.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1200|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5d.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5d.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1800|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5d.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5d.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|13600|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2400|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5d.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r5d.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3600|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5d.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r5d.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3600|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5d.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## r5dn Family\n### `r5dn.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|75|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2100|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5dn.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r5dn.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|150|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|4100|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5dn.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r5dn.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|300|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|8125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5dn.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r5dn.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|600|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|16250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5dn.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5dn.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1200|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5dn.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5dn.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1800|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5dn.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5dn.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|13600|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2400|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5dn.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r5dn.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3600|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5dn.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r5dn.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3600|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5dn.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## r5n Family\n### `r5n.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2100|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5n.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r5n.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|4100|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5n.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r5n.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|8125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5n.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r5n.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|16250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5n.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5n.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5n.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5n.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5n.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5n.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|13600|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5n.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r5n.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5n.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r5n.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5n.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## r6a Family\n### `r6a.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6a.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r6a.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6a.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r6a.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6a.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r6a.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6a.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r6a.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6a.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `r6a.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6a.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `r6a.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6a.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6a.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6a.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6a.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6a.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|961470Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6a.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6a.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446437Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6a.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6a.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446437Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## r6g Family\n### `r6g.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|500|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6g.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|7075Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `r6g.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6g.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14422Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r6g.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6g.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r6g.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6g.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59568Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r6g.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6g.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r6g.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6g.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239495Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r6g.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14250|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6g.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360736Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r6g.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6g.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476445Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6g.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6g.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476445Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## r6gd Family\n### `r6gd.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|59|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|500|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6gd.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|7075Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `r6gd.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6gd.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14422Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r6gd.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6gd.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r6gd.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6gd.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59568Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r6gd.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6gd.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r6gd.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6gd.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239495Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r6gd.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14250|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6gd.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360736Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r6gd.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6gd.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476445Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6gd.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6gd.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476445Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## r6i Family\n### `r6i.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6i.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r6i.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6i.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r6i.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6i.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r6i.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6i.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r6i.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6i.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `r6i.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6i.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `r6i.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6i.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6i.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6i.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6i.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6i.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|961470Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6i.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6i.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|961470Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## r6id Family\n### `r6id.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6id.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r6id.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6id.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r6id.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6id.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r6id.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6id.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r6id.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6id.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `r6id.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6id.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `r6id.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6id.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6id.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|5700|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6id.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6id.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6id.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|961470Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6id.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6id.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|961470Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## r6idn Family\n### `r6idn.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6idn.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r6idn.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6idn.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r6idn.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6idn.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r6idn.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6idn.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r6idn.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6idn.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `r6idn.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|37500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6idn.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `r6idn.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|50000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6idn.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6idn.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|75000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|5700|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|150000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6idn.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6idn.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6idn.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|965243Mi|\n |pods|394|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|106|\n### `r6idn.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6idn.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|965243Mi|\n |pods|394|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|106|\n## r6in Family\n### `r6in.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6in.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r6in.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6in.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r6in.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6in.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r6in.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6in.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r6in.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6in.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `r6in.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|37500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6in.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `r6in.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|50000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6in.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6in.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|75000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|150000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6in.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6in.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6in.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|965243Mi|\n |pods|394|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|106|\n### `r6in.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6in.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|965243Mi|\n |pods|394|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|106|\n## r7a Family\n### `r7a.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|390|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7a.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|7134Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `r7a.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7a.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r7a.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7a.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r7a.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7a.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r7a.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7a.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r7a.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7a.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `r7a.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7a.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `r7a.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7a.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r7a.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7a.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r7a.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7a.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|961470Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r7a.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7a.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446437Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r7a.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7a.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446437Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## r7g Family\n### `r7g.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|520|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7g.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|7075Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `r7g.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7g.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14422Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r7g.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1876|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7g.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r7g.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7g.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59568Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r7g.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7g.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r7g.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7g.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239495Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r7g.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7g.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360736Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r7g.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7g.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476445Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r7g.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7g.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476445Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## r7gd Family\n### `r7gd.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|59|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|520|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7gd.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|7075Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `r7gd.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7gd.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14422Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r7gd.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1876|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7gd.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r7gd.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7gd.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59568Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r7gd.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7gd.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r7gd.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7gd.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239495Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r7gd.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7gd.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360736Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r7gd.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7gd.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476445Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r7gd.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7gd.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476445Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## r7i Family\n### `r7i.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7i.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r7i.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7i.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r7i.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7i.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r7i.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7i.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r7i.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7i.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `r7i.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7i.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `r7i.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7i.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r7i.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7i.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r7i.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7i.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r7i.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7i.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446437Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r7i.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7i.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446437Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## r7iz Family\n### `r7iz.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7iz|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7iz.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r7iz.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7iz|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7iz.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r7iz.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7iz|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7iz.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r7iz.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7iz|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7iz.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r7iz.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7iz|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7iz.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `r7iz.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7iz|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7iz.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `r7iz.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7iz|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7iz.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r7iz.metal-16xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7iz|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal-16xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7iz.metal-16xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r7iz.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7iz|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7iz.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|961470Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r7iz.metal-32xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7iz|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal-32xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7iz.metal-32xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|961470Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## r8a Family\n### `r8a.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|520|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8a.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|7134Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `r8a.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8a.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14151Mi|\n |pods|59|\n |vpc.amazonaws.com/pod-eni|9|\n### `r8a.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8a.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29097Mi|\n |pods|78|\n |vpc.amazonaws.com/pod-eni|18|\n### `r8a.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8a.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|58527Mi|\n |pods|158|\n |vpc.amazonaws.com/pod-eni|38|\n### `r8a.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8a.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|117432Mi|\n |pods|314|\n |vpc.amazonaws.com/pod-eni|54|\n### `r8a.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8a.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|237816Mi|\n |pods|392|\n |vpc.amazonaws.com/pod-eni|82|\n### `r8a.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8a.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|355031Mi|\n |pods|758|\n |vpc.amazonaws.com/pod-eni|110|\n### `r8a.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8a.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|473501Mi|\n |pods|1010|\n |vpc.amazonaws.com/pod-eni|106|\n### `r8a.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8a.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|715984Mi|\n |pods|1010|\n |vpc.amazonaws.com/pod-eni|106|\n### `r8a.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8a.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|715984Mi|\n |pods|1010|\n |vpc.amazonaws.com/pod-eni|106|\n### `r8a.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8a.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1437890Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n### `r8a.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8a.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1437890Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n## r8g Family\n### `r8g.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|520|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8g.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|7075Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `r8g.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8g.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14422Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r8g.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8g.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r8g.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8g.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59568Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r8g.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8g.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r8g.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8g.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239495Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r8g.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8g.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360736Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r8g.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8g.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476445Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r8g.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8g.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718928Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r8g.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8g.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718928Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r8g.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8g.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446378Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r8g.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8g.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446378Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## r8gb Family\n### `r8gb.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|2083|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gb.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|7075Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `r8gb.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|4166|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gb.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14422Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r8gb.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|8333|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gb.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r8gb.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|16666|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gb.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59568Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r8gb.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|33330|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gb.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r8gb.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|50000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|66660|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gb.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|238857Mi|\n |pods|292|\n |vpc.amazonaws.com/pod-eni|52|\n### `r8gb.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|75000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gb.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|359460Mi|\n |pods|350|\n |vpc.amazonaws.com/pod-eni|50|\n### `r8gb.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|133330|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gb.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|475906Mi|\n |pods|786|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|106|\n### `r8gb.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|150000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gb.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|714077Mi|\n |pods|1178|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n### `r8gb.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|150000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gb.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|714077Mi|\n |pods|1178|\n |vpc.amazonaws.com/efa|1|\n### `r8gb.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|300000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gb.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1447995Mi|\n |pods|590|\n |vpc.amazonaws.com/efa|2|\n### `r8gb.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|300000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gb.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1447995Mi|\n |pods|590|\n |vpc.amazonaws.com/efa|2|\n## r8gd Family\n### `r8gd.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|59|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|520|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gd.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|7075Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `r8gd.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gd.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14422Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r8gd.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gd.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r8gd.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gd.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59568Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r8gd.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gd.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r8gd.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gd.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239495Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r8gd.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gd.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360736Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r8gd.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gd.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476445Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r8gd.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|5700|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gd.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718928Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r8gd.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|5700|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gd.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718928Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r8gd.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|11400|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gd.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446378Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r8gd.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|11400|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gd.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446378Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## r8gn Family\n### `r8gn.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gn.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|7075Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `r8gn.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gn.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14422Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r8gn.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gn.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r8gn.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gn.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59568Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r8gn.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gn.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r8gn.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gn.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|238857Mi|\n |pods|292|\n |vpc.amazonaws.com/pod-eni|52|\n### `r8gn.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|150000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gn.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|359460Mi|\n |pods|350|\n |vpc.amazonaws.com/pod-eni|50|\n### `r8gn.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gn.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|475906Mi|\n |pods|786|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|106|\n### `r8gn.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|300000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gn.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|714077Mi|\n |pods|1178|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n### `r8gn.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|300000|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gn.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|714077Mi|\n |pods|1178|\n |vpc.amazonaws.com/efa|1|\n### `r8gn.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|600000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gn.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1447995Mi|\n |pods|590|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|98|\n### `r8gn.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|600000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gn.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1447995Mi|\n |pods|590|\n |vpc.amazonaws.com/efa|2|\n## r8i Family\n### `r8i.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14151Mi|\n |pods|59|\n |vpc.amazonaws.com/pod-eni|9|\n### `r8i.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|28657Mi|\n |pods|118|\n |vpc.amazonaws.com/pod-eni|18|\n### `r8i.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|58967Mi|\n |pods|118|\n |vpc.amazonaws.com/pod-eni|38|\n### `r8i.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|116552Mi|\n |pods|394|\n |vpc.amazonaws.com/pod-eni|54|\n### `r8i.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|236716Mi|\n |pods|492|\n |vpc.amazonaws.com/pod-eni|82|\n### `r8i.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|356879Mi|\n |pods|590|\n |vpc.amazonaws.com/pod-eni|110|\n### `r8i.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|473501Mi|\n |pods|1010|\n |vpc.amazonaws.com/pod-eni|106|\n### `r8i.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|715984Mi|\n |pods|1010|\n |vpc.amazonaws.com/pod-eni|106|\n### `r8i.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|952923Mi|\n |pods|1514|\n |vpc.amazonaws.com/pod-eni|98|\n### `r8i.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1437890Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n### `r8i.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1437890Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n### `r8i.96xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|384|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|3145728|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|96xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i.96xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|382970m|\n |ephemeral-storage|17Gi|\n |memory|2892789Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n### `r8i.metal-96xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|384|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|3145728|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal-96xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i.metal-96xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|382970m|\n |ephemeral-storage|17Gi|\n |memory|2892789Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n## r8i-flex Family\n### `r8i-flex.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|468|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i-flex.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14151Mi|\n |pods|59|\n |vpc.amazonaws.com/pod-eni|3|\n### `r8i-flex.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i-flex.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|28657Mi|\n |pods|118|\n |vpc.amazonaws.com/pod-eni|8|\n### `r8i-flex.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i-flex.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|58967Mi|\n |pods|118|\n |vpc.amazonaws.com/pod-eni|18|\n### `r8i-flex.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i-flex.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|116552Mi|\n |pods|394|\n |vpc.amazonaws.com/pod-eni|34|\n### `r8i-flex.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i-flex.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|236716Mi|\n |pods|492|\n |vpc.amazonaws.com/pod-eni|52|\n### `r8i-flex.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|11250|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i-flex.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|356879Mi|\n |pods|590|\n |vpc.amazonaws.com/pod-eni|110|\n### `r8i-flex.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i-flex.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|473501Mi|\n |pods|1010|\n |vpc.amazonaws.com/pod-eni|106|\n## r8id Family\n### `r8id.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8id.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14151Mi|\n |pods|59|\n### `r8id.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8id.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|28657Mi|\n |pods|118|\n### `r8id.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8id.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|58967Mi|\n |pods|118|\n### `r8id.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8id.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|116552Mi|\n |pods|394|\n### `r8id.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8id.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|236716Mi|\n |pods|492|\n### `r8id.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8id.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|356879Mi|\n |pods|590|\n### `r8id.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8id.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|473501Mi|\n |pods|1010|\n### `r8id.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|5700|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8id.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|715984Mi|\n |pods|1010|\n### `r8id.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8id.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|952923Mi|\n |pods|1514|\n### `r8id.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|11400|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8id.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1437890Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n### `r8id.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|11400|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8id.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1437890Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n### `r8id.96xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|384|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|22800|\n |karpenter.k8s.aws/instance-memory|3145728|\n |karpenter.k8s.aws/instance-size|96xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8id.96xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|382970m|\n |ephemeral-storage|17Gi|\n |memory|2892789Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n### `r8id.metal-96xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|384|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|22800|\n |karpenter.k8s.aws/instance-memory|3145728|\n |karpenter.k8s.aws/instance-size|metal-96xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8id.metal-96xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|382970m|\n |ephemeral-storage|17Gi|\n |memory|2892789Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n## t1 Family\n### `t1.micro`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|0|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|627|\n |karpenter.k8s.aws/instance-size|micro|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t1.micro|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|180Mi|\n |pods|4|\n## t2 Family\n### `t2.nano`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|512|\n |karpenter.k8s.aws/instance-size|nano|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t2.nano|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|74Mi|\n |pods|4|\n### `t2.micro`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|1024|\n |karpenter.k8s.aws/instance-size|micro|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t2.micro|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|548Mi|\n |pods|4|\n### `t2.small`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-size|small|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t2.small|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|1418Mi|\n |pods|11|\n### `t2.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t2.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3246Mi|\n |pods|17|\n### `t2.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t2.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6837Mi|\n |pods|35|\n### `t2.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t2.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14316Mi|\n |pods|44|\n### `t2.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t2.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29471Mi|\n |pods|44|\n## t3 Family\n### `t3.nano`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|512|\n |karpenter.k8s.aws/instance-network-bandwidth|32|\n |karpenter.k8s.aws/instance-size|nano|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3.nano|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|74Mi|\n |pods|4|\n### `t3.micro`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1024|\n |karpenter.k8s.aws/instance-network-bandwidth|64|\n |karpenter.k8s.aws/instance-size|micro|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3.micro|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|548Mi|\n |pods|4|\n### `t3.small`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|128|\n |karpenter.k8s.aws/instance-size|small|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3.small|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|1418Mi|\n |pods|11|\n### `t3.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|256|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3246Mi|\n |pods|17|\n### `t3.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2780|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|512|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6837Mi|\n |pods|35|\n### `t3.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2780|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1024|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n### `t3.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2780|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|2048|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n## t3a Family\n### `t3a.nano`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3a|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|512|\n |karpenter.k8s.aws/instance-network-bandwidth|32|\n |karpenter.k8s.aws/instance-size|nano|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3a.nano|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|74Mi|\n |pods|4|\n### `t3a.micro`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3a|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1024|\n |karpenter.k8s.aws/instance-network-bandwidth|64|\n |karpenter.k8s.aws/instance-size|micro|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3a.micro|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|548Mi|\n |pods|4|\n### `t3a.small`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3a|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|128|\n |karpenter.k8s.aws/instance-size|small|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3a.small|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|1451Mi|\n |pods|8|\n### `t3a.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3a|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|256|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3a.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3246Mi|\n |pods|17|\n### `t3a.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2780|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3a|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|512|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3a.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6837Mi|\n |pods|35|\n### `t3a.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2780|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3a|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1024|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3a.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n### `t3a.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2780|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3a|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|2048|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3a.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n## t4g Family\n### `t4g.nano`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t4g|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|512|\n |karpenter.k8s.aws/instance-network-bandwidth|32|\n |karpenter.k8s.aws/instance-size|nano|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t4g.nano|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|15Mi|\n |pods|4|\n### `t4g.micro`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t4g|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1024|\n |karpenter.k8s.aws/instance-network-bandwidth|64|\n |karpenter.k8s.aws/instance-size|micro|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t4g.micro|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|489Mi|\n |pods|4|\n### `t4g.small`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t4g|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|128|\n |karpenter.k8s.aws/instance-size|small|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t4g.small|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|1359Mi|\n |pods|11|\n### `t4g.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t4g|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|256|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t4g.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3187Mi|\n |pods|17|\n### `t4g.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2780|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t4g|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|512|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t4g.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6778Mi|\n |pods|35|\n### `t4g.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2780|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t4g|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1024|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t4g.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n### `t4g.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2780|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t4g|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|2048|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t4g.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n## trn1 Family\n### `trn1.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-accelerator-count|1|\n |karpenter.k8s.aws/instance-accelerator-manufacturer|aws|\n |karpenter.k8s.aws/instance-accelerator-name|trainium|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|trn|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|trn1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|trn1.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |aws.amazon.com/neuron|1|\n |aws.amazon.com/neuroncore|2|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|17|\n### `trn1.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-accelerator-count|16|\n |karpenter.k8s.aws/instance-accelerator-manufacturer|aws|\n |karpenter.k8s.aws/instance-accelerator-name|trainium|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|trn|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|trn1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|800000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|trn1.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |aws.amazon.com/neuron|16|\n |aws.amazon.com/neuroncore|32|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|481894Mi|\n |pods|247|\n |vpc.amazonaws.com/efa|8|\n |vpc.amazonaws.com/pod-eni|82|\n## trn1n Family\n### `trn1n.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-accelerator-count|16|\n |karpenter.k8s.aws/instance-accelerator-manufacturer|aws|\n |karpenter.k8s.aws/instance-accelerator-name|trainium|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|trn|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|trn1n|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|1600000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|trn1n.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |aws.amazon.com/neuron|16|\n |aws.amazon.com/neuroncore|32|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|481894Mi|\n |pods|247|\n |vpc.amazonaws.com/efa|16|\n |vpc.amazonaws.com/pod-eni|120|\n## trn2 Family\n### `trn2.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-accelerator-count|16|\n |karpenter.k8s.aws/instance-accelerator-manufacturer|aws|\n |karpenter.k8s.aws/instance-accelerator-name|trainium2|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|trn|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|trn2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|2097152|\n |karpenter.k8s.aws/instance-network-bandwidth|3200000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|trn2.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |aws.amazon.com/neuron|16|\n |aws.amazon.com/neuroncore|128|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1938410Mi|\n |pods|100|\n |vpc.amazonaws.com/efa|16|\n## u-3tb1 Family\n### `u-3tb1.56xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|u|\n |karpenter.k8s.aws/instance-cpu|224|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|u-3tb1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|3145728|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|56xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|u-3tb1.56xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|223370m|\n |ephemeral-storage|17Gi|\n |memory|2906869Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|6|\n## u-6tb1 Family\n### `u-6tb1.56xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|u|\n |karpenter.k8s.aws/instance-cpu|224|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|38000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|u-6tb1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|6291456|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|56xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|u-6tb1.56xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|223370m|\n |ephemeral-storage|17Gi|\n |memory|5811134Mi|\n |pods|737|\n### `u-6tb1.112xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|u|\n |karpenter.k8s.aws/instance-cpu|448|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|38000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|u-6tb1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|6291456|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|112xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|u-6tb1.112xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|446810m|\n |ephemeral-storage|17Gi|\n |memory|5811134Mi|\n |pods|737|\n## u7i-12tb Family\n### `u7i-12tb.224xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|u|\n |karpenter.k8s.aws/instance-cpu|896|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|1900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|u7i-12tb|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|12582912|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|224xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|u7i-12tb.224xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|893690m|\n |ephemeral-storage|17Gi|\n |memory|11630731Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## u7i-6tb Family\n### `u7i-6tb.112xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|u|\n |karpenter.k8s.aws/instance-cpu|448|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|1900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|u7i-6tb|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|6291456|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|112xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|u7i-6tb.112xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|446810m|\n |ephemeral-storage|17Gi|\n |memory|5811134Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## u7i-8tb Family\n### `u7i-8tb.112xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|u|\n |karpenter.k8s.aws/instance-cpu|448|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|1900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|u7i-8tb|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8388608|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|112xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|u7i-8tb.112xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|446810m|\n |ephemeral-storage|17Gi|\n |memory|7751000Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## u7in-16tb Family\n### `u7in-16tb.224xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|u|\n |karpenter.k8s.aws/instance-cpu|896|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|1900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|u7in-16tb|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16777216|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|224xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|u7in-16tb.224xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|893690m|\n |ephemeral-storage|17Gi|\n |memory|15514235Mi|\n |pods|394|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|106|\n## u7in-24tb Family\n### `u7in-24tb.224xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|u|\n |karpenter.k8s.aws/instance-cpu|896|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|1900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|u7in-24tb|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|25165824|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|224xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|u7in-24tb.224xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|893690m|\n |ephemeral-storage|17Gi|\n |memory|23273698Mi|\n |pods|394|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|106|\n## u7in-32tb Family\n### `u7in-32tb.224xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|u|\n |karpenter.k8s.aws/instance-cpu|896|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|1900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|u7in-32tb|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|33554432|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|224xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|u7in-32tb.224xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|893690m|\n |ephemeral-storage|17Gi|\n |memory|31033160Mi|\n |pods|394|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|106|\n## vt1 Family\n### `vt1.3xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|vt|\n |karpenter.k8s.aws/instance-cpu|12|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|vt1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|24576|\n |karpenter.k8s.aws/instance-network-bandwidth|3120|\n |karpenter.k8s.aws/instance-size|3xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|vt1.3xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|11900m|\n |ephemeral-storage|17Gi|\n |memory|21739Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `vt1.6xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|vt|\n |karpenter.k8s.aws/instance-cpu|24|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|vt1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|49152|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|6xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|vt1.6xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|23870m|\n |ephemeral-storage|17Gi|\n |memory|42536Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `vt1.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|vt|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|vt1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|vt1.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## x1 Family\n### `x1.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|7000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|999424|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x1.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|921538Mi|\n |pods|234|\n### `x1.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|1998848|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x1.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|1846005Mi|\n |pods|234|\n## x1e Family\n### `x1e.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x1e|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|124928|\n |karpenter.k8s.aws/instance-network-bandwidth|625|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x1e.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|114884Mi|\n |pods|29|\n### `x1e.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|1000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x1e|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|249856|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x1e.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|230123Mi|\n |pods|58|\n### `x1e.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|1750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x1e|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|499712|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x1e.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|461240Mi|\n |pods|58|\n### `x1e.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x1e|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|999424|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x1e.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|923474Mi|\n |pods|58|\n### `x1e.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|7000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x1e|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|1998848|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x1e.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|1846005Mi|\n |pods|234|\n### `x1e.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x1e|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|3997696|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x1e.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|3694939Mi|\n |pods|234|\n## x2gd Family\n### `x2gd.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x2gd|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|59|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|500|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2gd.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|14653Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|10|\n### `x2gd.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x2gd|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2gd.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|29577Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `x2gd.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x2gd|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2gd.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|59568Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `x2gd.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x2gd|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|475|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2gd.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|120189Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `x2gd.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x2gd|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2gd.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|239495Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `x2gd.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x2gd|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2gd.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|481978Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `x2gd.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14250|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x2gd|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2gd.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|724461Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `x2gd.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x2gd|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2gd.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|961411Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `x2gd.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x2gd|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2gd.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|961411Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## x2idn Family\n### `x2idn.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2idn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2idn.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|961470Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `x2idn.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2idn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2idn.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|1446437Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `x2idn.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2idn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|2097152|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2idn.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|1931403Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `x2idn.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2idn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|2097152|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2idn.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|1931403Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## x2iedn Family\n### `x2iedn.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iedn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iedn.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|120248Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|11|\n### `x2iedn.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iedn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iedn.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|241490Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|27|\n### `x2iedn.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iedn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|475|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iedn.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|482037Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `x2iedn.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iedn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iedn.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|967003Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `x2iedn.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iedn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|2097152|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iedn.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|1931403Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `x2iedn.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iedn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|3145728|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iedn.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|2901336Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `x2iedn.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iedn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|4194304|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iedn.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|3871269Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `x2iedn.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iedn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|4194304|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iedn.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|3871269Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## x2iezn Family\n### `x2iezn.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iezn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iezn.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|241490Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|62|\n### `x2iezn.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iezn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iezn.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|482037Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `x2iezn.6xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|24|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iezn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|6xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iezn.6xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|23870m|\n |ephemeral-storage|17Gi|\n |memory|724520Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `x2iezn.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|12000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iezn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iezn.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|967003Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `x2iezn.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iezn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iezn.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|1446437Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `x2iezn.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iezn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iezn.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|1446437Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## x8aedz Family\n### `x8aedz.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|5000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8aedz|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|158|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8aedz.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|59407Mi|\n |pods|78|\n |vpc.amazonaws.com/pod-eni|8|\n### `x8aedz.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|5000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8aedz|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|316|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8aedz.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|120028Mi|\n |pods|78|\n |vpc.amazonaws.com/pod-eni|18|\n### `x8aedz.3xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|12|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|5000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8aedz|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|9375|\n |karpenter.k8s.aws/instance-size|3xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8aedz.3xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|11900m|\n |ephemeral-storage|17Gi|\n |memory|359915Mi|\n |pods|314|\n |vpc.amazonaws.com/pod-eni|34|\n### `x8aedz.6xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|24|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|5000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8aedz|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|6xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8aedz.6xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|23870m|\n |ephemeral-storage|17Gi|\n |memory|723640Mi|\n |pods|314|\n |vpc.amazonaws.com/pod-eni|54|\n### `x8aedz.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|5000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8aedz|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8aedz.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|1443434Mi|\n |pods|1010|\n |vpc.amazonaws.com/pod-eni|106|\n### `x8aedz.metal-12xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|5000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8aedz|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|metal-12xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8aedz.metal-12xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|1443434Mi|\n |pods|1010|\n |vpc.amazonaws.com/pod-eni|106|\n### `x8aedz.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|5000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8aedz|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|3145728|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8aedz.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|2898333Mi|\n |pods|1010|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|106|\n### `x8aedz.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|5000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8aedz|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|3145728|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8aedz.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|2898333Mi|\n |pods|1010|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|106|\n## x8g Family\n### `x8g.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|520|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8g.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|14653Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `x8g.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8g.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|29577Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `x8g.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8g.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|59568Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `x8g.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8g.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|120189Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `x8g.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8g.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|239495Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `x8g.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8g.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|481978Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `x8g.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8g.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|724461Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `x8g.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8g.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|961411Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `x8g.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8g.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|1446378Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `x8g.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8g.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|1446378Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `x8g.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|3145728|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8g.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|2901277Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `x8g.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|3145728|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8g.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|2901277Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## x8i Family\n### `x8i.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8i.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|29306Mi|\n |pods|59|\n### `x8i.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8i.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|58967Mi|\n |pods|118|\n### `x8i.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8i.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|119588Mi|\n |pods|118|\n### `x8i.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8i.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|237794Mi|\n |pods|394|\n### `x8i.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8i.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|479199Mi|\n |pods|492|\n### `x8i.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8i.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|720604Mi|\n |pods|590|\n### `x8i.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8i.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|958467Mi|\n |pods|1010|\n### `x8i.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8i.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|1443434Mi|\n |pods|1010|\n### `x8i.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|2097152|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8i.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|1922856Mi|\n |pods|1514|\n### `x8i.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|3145728|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8i.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|2892789Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n### `x8i.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|3145728|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8i.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|2892789Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n### `x8i.64xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|256|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|70000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4194304|\n |karpenter.k8s.aws/instance-network-bandwidth|80000|\n |karpenter.k8s.aws/instance-size|64xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8i.64xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|255290m|\n |ephemeral-storage|17Gi|\n |memory|3862722Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n### `x8i.96xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|384|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|6291456|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|96xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8i.96xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|382970m|\n |ephemeral-storage|17Gi|\n |memory|5802587Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n### `x8i.metal-96xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|384|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|6291456|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal-96xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8i.metal-96xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|382970m|\n |ephemeral-storage|17Gi|\n |memory|5802587Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n## z1d Family\n### `z1d.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|z|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|z1d|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|75|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|z1d.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|13|\n### `z1d.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|z|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|z1d|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|150|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|z1d.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|28|\n### `z1d.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|z|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|z1d|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|300|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|z1d.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|58|\n### `z1d.3xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|z|\n |karpenter.k8s.aws/instance-cpu|12|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|z1d|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|450|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|3xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|z1d.3xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|11900m|\n |ephemeral-storage|17Gi|\n |memory|88002Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `z1d.6xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|z|\n |karpenter.k8s.aws/instance-cpu|24|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|z1d|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|900|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|6xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|z1d.6xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|23870m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `z1d.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|z|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|z1d|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1800|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|z1d.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `z1d.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|z|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|z1d|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|1800|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|z1d.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n"
  },
  {
    "path": "website/content/en/preview/reference/metrics.md",
    "content": "---\ntitle: \"Metrics\"\nlinkTitle: \"Metrics\"\nweight: 7\n\ndescription: >\n  Inspect Karpenter Metrics\n---\n<!-- this document is generated from hack/docs/metrics_gen/main.go -->\nKarpenter makes several metrics available in Prometheus format to allow monitoring cluster provisioning status. These metrics are available by default at `karpenter.kube-system.svc.cluster.local:8080/metrics` configurable via the `METRICS_PORT` environment variable documented [here](../settings)\n\n### `karpenter_ignored_pod_count`\nNumber of pods ignored during scheduling by Karpenter\n- Stability Level: ALPHA\n\n### `karpenter_build_info`\nA metric with a constant '1' value labeled by version from which karpenter was built.\n- Stability Level: STABLE\n\n## Nodeclaims Metrics\n\n### `karpenter_nodeclaims_termination_duration_seconds`\nDuration of NodeClaim termination in seconds.\n- Stability Level: BETA\n\n### `karpenter_nodeclaims_terminated_total`\nNumber of nodeclaims terminated in total by Karpenter. Labeled by the owning nodepool.\n- Stability Level: STABLE\n\n### `karpenter_nodeclaims_instance_termination_duration_seconds`\nDuration of CloudProvider Instance termination in seconds.\n- Stability Level: BETA\n\n### `karpenter_nodeclaims_disrupted_total`\nNumber of nodeclaims disrupted in total by Karpenter. Labeled by reason the nodeclaim was disrupted and the owning nodepool.\n- Stability Level: ALPHA\n\n### `karpenter_nodeclaims_created_total`\nNumber of nodeclaims created in total by Karpenter. Labeled by reason the nodeclaim was created and the owning nodepool.\n- Stability Level: STABLE\n\n### `operator_nodeclaim_status_condition_transitions_total`\nThe count of transitions of a nodeclaim, type and status. Labeled by the type, reason, and status.\n- Stability Level: BETA\n\n### `operator_nodeclaim_status_condition_transition_seconds`\nThe amount of time a condition was in a given state before transitioning. Labeled by the name of the nodeclaim, and the namespace.\n- Stability Level: BETA\n\n### `operator_nodeclaim_status_condition_current_status_seconds`\nThe current amount of time in seconds that a status condition has been in a specific state. Labeled by the name of the nodelcaim, namespace, type, status, and reason.\n- Stability Level: BETA\n\n### `operator_nodeclaim_status_condition_count`\nThe number of a condition for a nodeclaim, type and status. Labeled by the name, namespace, type, status, and reason.\n- Stability Level: BETA\n\n### `operator_nodeclaim_termination_current_time_seconds`\nThe current amount of time in seconds that a nodeclaim has been in terminating state. Labeled by name, and namespace.\n- Stability Level: BETA\n\n### `operator_nodeclaim_termination_duration_seconds`\nThe amount of time taken by a nodeclaim to terminate completely.\n- Stability Level: BETA\n\n## Nodes Metrics\n\n### `karpenter_nodes_total_pod_requests`\nNode total pod requests are the resources requested by pods bound to nodes, including the DaemonSet pods.\n- Stability Level: BETA\n\n### `karpenter_nodes_total_pod_limits`\nNode total pod limits are the resources specified by pod limits, including the DaemonSet pods.\n- Stability Level: BETA\n\n### `karpenter_nodes_total_daemon_requests`\nNode total daemon requests are the resource requested by DaemonSet pods bound to nodes.\n- Stability Level: BETA\n\n### `karpenter_nodes_total_daemon_limits`\nNode total daemon limits are the resources specified by DaemonSet pod limits.\n- Stability Level: BETA\n\n### `karpenter_nodes_termination_duration_seconds`\nThe time taken between a node's deletion request and the removal of its finalizer\n- Stability Level: BETA\n\n### `karpenter_nodes_terminated_total`\nNumber of nodes terminated in total by Karpenter. Labeled by owning nodepool.\n- Stability Level: STABLE\n\n### `karpenter_nodes_system_overhead`\nNode 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.\n- Stability Level: BETA\n\n### `karpenter_nodes_lifetime_duration_seconds`\nThe lifetime duration of the nodes since creation.\n- Stability Level: ALPHA\n\n### `karpenter_nodes_eviction_requests_total`\nThe total number of eviction requests made by Karpenter\n- Stability Level: ALPHA\n\n### `karpenter_nodes_drained_total`\nThe total number of nodes drained by Karpenter\n- Stability Level: ALPHA\n\n### `karpenter_nodes_current_lifetime_seconds`\nNode age in seconds\n- Stability Level: ALPHA\n\n### `karpenter_nodes_created_total`\nNumber of nodes created in total by Karpenter. Labeled by owning nodepool.\n- Stability Level: STABLE\n\n### `karpenter_nodes_allocatable`\nNode allocatable are the resources allocatable by nodes.\n- Stability Level: BETA\n\n### `operator_node_status_condition_transitions_total`\nThe count of transitions of a node, type and status.\n- Stability Level: BETA\n\n### `operator_node_status_condition_transition_seconds`\nThe amount of time a condition was in a given state before transitioning. Labeled by the name of the nodeclaim, and the namespace.\n- Stability Level: BETA\n\n### `operator_node_status_condition_current_status_seconds`\nThe current amount of time in seconds that a status condition has been in a specific state. Labeled by the name of the nodelcaim, namespace, type, status, and reason.\n- Stability Level: BETA\n\n### `operator_node_status_condition_count`\nThe number of a condition for a node, type and status. Labeled by the name, namespace, type, status, and reason.\n- Stability Level: BETA\n\n### `operator_node_termination_current_time_seconds`\nThe current amount of time in seconds that a node has been in terminating state. Labeled by name, and namespace.\n- Stability Level: BETA\n\n### `operator_node_termination_duration_seconds`\nThe amount of time taken by a node to terminate completely.\n- Stability Level: BETA\n\n### `operator_node_event_count`\nThe number of a events for a node.\n- Stability Level: BETA\n\n## Pods Metrics\n\n### `karpenter_pods_state`\nPod 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, nodepool name, zone, architecture, capacity type, instance type and pod phase.\n- Stability Level: BETA\n\n### `karpenter_pods_startup_duration_seconds`\nThe time from pod creation until the pod is running.\n- Stability Level: STABLE\n\n## Termination Metrics\n\n### `operator_termination_duration_seconds`\nThe amount of time taken by an object to terminate completely.\n- Stability Level: DEPRECATED\n\n### `operator_termination_current_time_seconds`\nThe current amount of time in seconds that an object has been in terminating state.\n- Stability Level: DEPRECATED\n\n## Voluntary Disruption Metrics\n\n### `karpenter_voluntary_disruption_queue_failures_total`\nThe number of times that an enqueued disruption decision failed. Labeled by disruption method.\n- Stability Level: BETA\n\n### `karpenter_voluntary_disruption_eligible_nodes`\nNumber of nodes eligible for disruption by Karpenter. Labeled by disruption reason.\n- Stability Level: BETA\n\n### `karpenter_voluntary_disruption_decisions_total`\nNumber of disruption decisions performed. Labeled by disruption decision, reason, and consolidation type.\n- Stability Level: STABLE\n\n### `karpenter_voluntary_disruption_decision_evaluation_duration_seconds`\nDuration of the disruption decision evaluation process in seconds. Labeled by method and consolidation type.\n- Stability Level: BETA\n\n### `karpenter_voluntary_disruption_consolidation_timeouts_total`\nNumber of times the Consolidation algorithm has reached a timeout. Labeled by consolidation type.\n- Stability Level: BETA\n\n## Scheduler Metrics\n\n### `karpenter_scheduler_scheduling_duration_seconds`\nDuration of scheduling simulations used for deprovisioning and provisioning in seconds.\n- Stability Level: STABLE\n\n### `karpenter_scheduler_queue_depth`\nThe number of pods currently waiting to be scheduled.\n- Stability Level: BETA\n\n## Nodepools Metrics\n\n### `karpenter_nodepools_usage`\nThe amount of resources that have been provisioned for a nodepool. Labeled by nodepool name and resource type.\n- Stability Level: ALPHA\n\n### `karpenter_nodepools_limit`\nLimits specified on the nodepool that restrict the quantity of resources provisioned. Labeled by nodepool name and resource type.\n- Stability Level: ALPHA\n\n### `karpenter_nodepools_allowed_disruptions`\nThe number of nodes for a given NodePool that can be concurrently disrupting at a point in time. Labeled by NodePool. Note that allowed disruptions can change very rapidly, as new nodes may be created and others may be deleted at any point.\n- Stability Level: ALPHA\n\n### `operator_nodepool_status_condition_transitions_total`\nThe count of transitions of a nodepool, type and status. Labeled by the type, reason, and status.\n- Stability Level: BETA\n\n### `operator_nodepool_status_condition_transition_seconds`\nThe amount of time a condition was in a given state before transitioning. Labeled by the name of the nodeclaim, and the namespace.\n- Stability Level: BETA\n\n### `operator_nodepool_status_condition_current_status_seconds`\nThe current amount of time in seconds that a status condition has been in a specific state. Labeled by the name of the nodelcaim, namespace, type, status, and reason.\n- Stability Level: BETA\n\n### `operator_nodepool_status_condition_count`\nThe number of an condition for a nodepool, type and status. Labeled by the name, namespace, type, status, and reason.\n- Stability Level: BETA\n\n### `operator_nodepool_termination_current_time_seconds`\nThe current amount of time in seconds that a nodepool has been in terminating state. Labeled by name, and namespace.\n- Stability Level: BETA\n\n### `operator_nodepool_termination_duration_seconds`\nDuration of NodePool termination in seconds.\n- Stability Level: BETA\n\n## EC2NodeClass Metrics\n\n### `operator_ec2nodeclass_status_condition_transitions_total`\nThe count of transitions of a ec2nodeclass, type and status. Labeled by the type, reason, and status.\n- Stability Level: BETA\n\n### `operator_ec2nodeclass_status_condition_transition_seconds`\nThe amount of time a condition was in a given state before transitioning. Labeled by the name of the nodeclaim, and the namespace.\n- Stability Level: BETA\n\n### `operator_ec2nodeclass_status_condition_current_status_seconds`\nThe current amount of time in seconds that a status condition has been in a specific state. Labeled by the name of the nodelcaim, namespace, type, status, and reason.\n- Stability Level: BETA\n\n### `operator_ec2nodeclass_status_condition_count`\nThe number of an condition for an ec2nodeclass, type and status. Labeled by the name, namespace, type, status, and reason.\n- Stability Level: BETA\n\n### `operator_ec2nodeclass_termination_current_time_seconds`\nThe current amount of time in seconds that an ec2nodeclass has been in terminating state. Labeled by name, and namespace.\n- Stability Level: BETA\n\n### `operator_ec2nodeclass_termination_duration_seconds`\nDuration of ec2nodeclass termination in seconds.\n- Stability Level: BETA\n\n## Interruption Metrics\n\n### `karpenter_interruption_received_messages_total`\nCount of messages received from the SQS queue. Broken down by message type and whether the message was actionable.\n- Stability Level: STABLE\n\n### `karpenter_interruption_message_queue_duration_seconds`\nAmount of time an interruption message is on the queue before it is processed by karpenter.\n- Stability Level: STABLE\n\n### `karpenter_interruption_deleted_messages_total`\nCount of messages deleted from the SQS queue.\n- Stability Level: STABLE\n\n## Cluster Metrics\n\n### `karpenter_cluster_utilization_percent`\nUtilization of allocatable resources by pod requests\n- Stability Level: ALPHA\n\n## Cluster State Metrics\n\n### `karpenter_cluster_state_unsynced_time_seconds`\nThe time for which cluster state is not synced\n- Stability Level: ALPHA\n\n### `karpenter_cluster_state_synced`\nReturns 1 if cluster state is synced and 0 otherwise. Synced checks that nodeclaims and nodes that are stored in the APIServer have the same representation as Karpenter's cluster state\n- Stability Level: STABLE\n\n### `karpenter_cluster_state_node_count`\nCurrent count of nodes in cluster state\n- Stability Level: STABLE\n\n## Cloudprovider Metrics\n\n### `karpenter_cloudprovider_instance_type_offering_price_estimate`\nInstance type offering estimated hourly price used when making informed decisions on node cost calculation, based on instance type, capacity type, and zone.\n- Stability Level: BETA\n\n### `karpenter_cloudprovider_instance_type_offering_available`\nInstance type offering availability, based on instance type, capacity type, and zone\n- Stability Level: BETA\n\n### `karpenter_cloudprovider_instance_type_memory_bytes`\nMemory, in bytes, for a given instance type.\n- Stability Level: BETA\n\n### `karpenter_cloudprovider_instance_type_cpu_cores`\nVCPUs cores for a given instance type.\n- Stability Level: BETA\n\n### `karpenter_cloudprovider_errors_total`\nTotal number of errors returned from CloudProvider calls.\n- Stability Level: BETA\n\n### `karpenter_cloudprovider_duration_seconds`\nDuration of cloud provider method calls. Labeled by the controller, method name and provider.\n- Stability Level: BETA\n\n## Cloudprovider Batcher Metrics\n\n### `karpenter_cloudprovider_batcher_batch_time_seconds`\nDuration of the batching window per batcher\n- Stability Level: BETA\n\n### `karpenter_cloudprovider_batcher_batch_size`\nSize of the request batch per batcher\n- Stability Level: BETA\n\n## Controller Runtime Metrics\n\n### `controller_runtime_terminal_reconcile_errors_total`\nTotal number of terminal reconciliation errors per controller\n- Stability Level: STABLE\n\n### `controller_runtime_reconcile_total`\nTotal number of reconciliations per controller\n- Stability Level: STABLE\n\n### `controller_runtime_reconcile_time_seconds`\nLength of time per reconciliation per controller\n- Stability Level: STABLE\n\n### `controller_runtime_reconcile_panics_total`\nTotal number of reconciliation panics per controller\n- Stability Level: STABLE\n\n### `controller_runtime_reconcile_errors_total`\nTotal number of reconciliation errors per controller\n- Stability Level: STABLE\n\n### `controller_runtime_max_concurrent_reconciles`\nMaximum number of concurrent reconciles per controller\n- Stability Level: STABLE\n\n### `controller_runtime_conversion_webhook_panics_total`\nTotal number of conversion webhook panics\n- Stability Level: STABLE\n\n### `controller_runtime_active_workers`\nNumber of currently used workers per controller\n- Stability Level: STABLE\n\n## Workqueue Metrics\n\n### `workqueue_work_duration_seconds`\nHow long in seconds processing an item from workqueue takes.\n- Stability Level: STABLE\n\n### `workqueue_unfinished_work_seconds`\nHow many seconds of work has been done that is in progress and hasn't been observed by work_duration. Large values indicate stuck threads. One can deduce the number of stuck threads by observing the rate at which this increases.\n- Stability Level: STABLE\n\n### `workqueue_retries_total`\nTotal number of retries handled by workqueue\n- Stability Level: STABLE\n\n### `workqueue_queue_duration_seconds`\nHow long in seconds an item stays in workqueue before being requested\n- Stability Level: STABLE\n\n### `workqueue_longest_running_processor_seconds`\nHow many seconds has the longest running processor for workqueue been running.\n- Stability Level: STABLE\n\n### `workqueue_depth`\nCurrent depth of workqueue by workqueue and priority\n- Stability Level: STABLE\n\n### `workqueue_adds_total`\nTotal number of adds handled by workqueue\n- Stability Level: STABLE\n\n## Status Condition Metrics\n\n### `operator_status_condition_transitions_total`\nThe count of transitions of a given object, type and status.\n- Stability Level: DEPRECATED\n\n### `operator_status_condition_transition_seconds`\nThe amount of time a condition was in a given state before transitioning. e.g. Alarm := P99(Updated=False) > 5 minutes\n- Stability Level: DEPRECATED\n\n### `operator_status_condition_current_status_seconds`\nThe current amount of time in seconds that a status condition has been in a specific state. Alarm := P99(Updated=Unknown) > 5 minutes\n- Stability Level: DEPRECATED\n\n### `operator_status_condition_count`\nThe number of an condition for a given object, type and status. e.g. Alarm := Available=False > 0\n- Stability Level: DEPRECATED\n\n## Client Go Metrics\n\n### `client_go_request_total`\nNumber of HTTP requests, partitioned by status code and method.\n- Stability Level: STABLE\n\n### `client_go_request_duration_seconds`\nRequest latency in seconds. Broken down by verb, group, version, kind, and subresource.\n- Stability Level: STABLE\n\n## AWS SDK Go Metrics\n\n### `aws_sdk_go_request_total`\nThe total number of AWS SDK Go requests\n- Stability Level: STABLE\n\n### `aws_sdk_go_request_retry_count`\nThe total number of AWS SDK Go retry attempts per request\n- Stability Level: STABLE\n\n### `aws_sdk_go_request_duration_seconds`\nLatency of AWS SDK Go requests\n- Stability Level: STABLE\n\n### `aws_sdk_go_request_attempt_total`\nThe total number of AWS SDK Go request attempts\n- Stability Level: STABLE\n\n### `aws_sdk_go_request_attempt_duration_seconds`\nLatency of AWS SDK Go request attempts\n- Stability Level: STABLE\n\n## Leader Election Metrics\n\n### `leader_election_slowpath_total`\nTotal number of slow path exercised in renewing leader leases. 'name' is the string used to identify the lease. Please make sure to group by name.\n- Stability Level: STABLE\n\n### `leader_election_master_status`\nGauge of if the reporting system is master of the relevant lease, 0 indicates backup, 1 indicates master. 'name' is the string used to identify the lease. Please make sure to group by name.\n- Stability Level: STABLE\n\n"
  },
  {
    "path": "website/content/en/preview/reference/settings.md",
    "content": "---\ntitle: \"Settings\"\nlinkTitle: \"Settings\"\nweight: 5\ndescription: >\n  Configure Karpenter\n---\n\nKarpenter surfaces environment variables and CLI parameters to allow you to configure certain global settings on the controllers. These settings are described below.\n\n[comment]: <> (the content below is generated from hack/docs/configuration_gen/main.go)\n\n| Environment Variable | CLI Flag | Description |\n|--|--|--|\n| BATCH_IDLE_DURATION | \\-\\-batch-idle-duration | The maximum amount of time with no new pending 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. (default = 1s)|\n| BATCH_MAX_DURATION | \\-\\-batch-max-duration | 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. (default = 10s)|\n| CLUSTER_CA_BUNDLE | \\-\\-cluster-ca-bundle | Cluster CA bundle for nodes to use for TLS connections with the API server. If not set, this is taken from the controller's TLS configuration.|\n| CLUSTER_ENDPOINT | \\-\\-cluster-endpoint | The external kubernetes cluster endpoint for new nodes to connect with. If not specified, will discover the cluster endpoint using DescribeCluster API.|\n| CLUSTER_NAME | \\-\\-cluster-name | [REQUIRED] The kubernetes cluster name for resource discovery.|\n| CPU_REQUESTS | \\-\\-cpu-requests | CPU requests in millicores on the container running the controller. (default = 1000)|\n| DISABLE_CLUSTER_STATE_OBSERVABILITY | \\-\\-disable-cluster-state-observability | Disable cluster state metrics and events|\n| DISABLE_CONTROLLER_WARMUP | \\-\\-disable-controller-warmup | Disable controller warmup which starts controller sources before leader election is won. Controller warmup pre-populates caches and improves leader failover time.|\n| DISABLE_DRY_RUN | \\-\\-disable-dry-run | If true, then disable dry run validation for EC2NodeClasses.|\n| DISABLE_LEADER_ELECTION | \\-\\-disable-leader-election | Disable the leader election client before executing the main loop. Disable when running replicated components for high availability is not desired.|\n| EKS_CONTROL_PLANE | \\-\\-eks-control-plane | Marking this true means that your cluster is running with an EKS control plane and Karpenter should attempt to discover cluster details from the DescribeCluster API |\n| ENABLE_PROFILING | \\-\\-enable-profiling | Enable the profiling on the metric endpoint|\n| FEATURE_GATES | \\-\\-feature-gates | Optional features can be enabled / disabled using feature gates. Current options are: NodeRepair, ReservedCapacity, SpotToSpotConsolidation, NodeOverlay, and StaticCapacity. (default = NodeRepair=false,ReservedCapacity=true,SpotToSpotConsolidation=false,NodeOverlay=false,StaticCapacity=false)|\n| HEALTH_PROBE_PORT | \\-\\-health-probe-port | The port the health probe endpoint binds to for reporting controller health (default = 8081)|\n| IGNORE_DRA_REQUESTS | \\-\\-ignore-dra-requests | When set, Karpenter will ignore pods' DRA requests during scheduling simulations. NOTE: This flag will be removed once formal DRA support is GA in Karpenter.|\n| INTERRUPTION_QUEUE | \\-\\-interruption-queue | Interruption queue is the name of the SQS queue used for processing interruption events from EC2. Interruption handling is disabled if not specified. Enabling interruption handling may require additional permissions on the controller service account. Additional permissions are outlined in the docs.|\n| ISOLATED_VPC | \\-\\-isolated-vpc | 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 on-demand pricing endpoint.|\n| KARPENTER_SERVICE | \\-\\-karpenter-service | The Karpenter Service name for the dynamic webhook certificate|\n| KUBE_CLIENT_BURST | \\-\\-kube-client-burst | The maximum allowed burst of queries to the kube-apiserver (default = 300)|\n| KUBE_CLIENT_QPS | \\-\\-kube-client-qps | The smoothed rate of qps to kube-apiserver (default = 200)|\n| LEADER_ELECTION_NAME | \\-\\-leader-election-name | Leader election name to create and monitor the lease if running outside the cluster (default = karpenter-leader-election)|\n| LEADER_ELECTION_NAMESPACE | \\-\\-leader-election-namespace | Leader election namespace to create and monitor the lease if running outside the cluster|\n| LOG_ERROR_OUTPUT_PATHS | \\-\\-log-error-output-paths | Optional comma separated paths for logging error output (default = stderr)|\n| LOG_LEVEL | \\-\\-log-level | Log verbosity level. Can be one of 'debug', 'info', or 'error' (default = info)|\n| LOG_OUTPUT_PATHS | \\-\\-log-output-paths | Optional comma separated paths for directing log output (default = stdout)|\n| 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)|\n| METRICS_PORT | \\-\\-metrics-port | The port the metric endpoint binds to for operating metrics about the controller itself (default = 8080)|\n| MIN_VALUES_POLICY | \\-\\-min-values-policy | Min values policy for scheduling. Options include 'Strict' for existing behavior where min values are strictly enforced or 'BestEffort' where Karpenter relaxes min values when it isn't satisfied. (default = Strict)|\n| PREFERENCE_POLICY | \\-\\-preference-policy | How the Karpenter scheduler should treat preferences. Preferences include preferredDuringSchedulingIgnoreDuringExecution node and pod affinities/anti-affinities and ScheduleAnyways topologySpreadConstraints. Can be one of 'Ignore' and 'Respect' (default = Respect)|\n| RESERVED_ENIS | \\-\\-reserved-enis | Reserved ENIs are not included in the calculations for max-pods or kube-reserved. This is most often used in the VPC CNI custom networking setup https://docs.aws.amazon.com/eks/latest/userguide/cni-custom-network.html. (default = 0)|\n| VM_MEMORY_OVERHEAD_PERCENT | \\-\\-vm-memory-overhead-percent | The VM memory overhead as a percent that will be subtracted from the total memory for all instance types when cached information is unavailable. (default = 0.075)|\n\n[comment]: <> (end docs generated content from hack/docs/configuration_gen/main.go)\n\n### Feature Gates\n\nKarpenter uses [feature gates](https://kubernetes.io/docs/reference/command-line-tools-reference/feature-gates/#feature-gates-for-alpha-or-beta-features) You can enable the feature gates through the `--feature-gates` CLI environment variable or the `FEATURE_GATES` environment variable in the Karpenter deployment. For example, you can configure drift, spotToSpotConsolidation by setting the CLI argument: `--feature-gates Drift=true,SpotToSpotConsolidation=true,ReservedCapacity=true`.\n\n| Feature                 | Default | Stage  | Since   | Until   |\n|-------------------------|---------|--------|---------|---------|\n| Drift                   | false   | Alpha  | v0.21.x | v0.32.x |\n| Drift                   | true    | Beta   | v0.33.x | v0.37.x |\n| SpotToSpotConsolidation | false   | Alpha  | v0.34.x |         |\n| NodeRepair              | false   | Alpha  | v1.1.x  |         |\n| ReservedCapacity        | false   | Alpha  | v1.3.x  | v1.5.x  |\n| ReservedCapacity        | true    | Beta   | v1.6.x  |         |\n| NodeOverlay             | false   | Alpha  | v1.7.x  |         |\n| StaticCapacity          | false   | Alpha  | v1.8.x  |         |\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nIn v1, drift has been promoted to stable and the feature gate removed. Users can continue to control drift by using disruption budgets by reason.\nExample:\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\nspec:\n…\n  disruption:\n    budgets:\n    - nodes: 10%\n    # On Weekdays during business hours, don't do any deprovisioning regarding drift.\n    - nodes: \"0\"\n      schedule: \"0 9 * * mon-fri\"\n      duration: 8h\n      reasons:\n      -\tDrifted\n    # during non-business hours do drift for up to 10% of nodes\n    - nodes: \"10%\"\n      reasons:\n      -\tDrifted\n```\n{{% /alert %}}\n\n### Batching Parameters\n\nThe 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.\n\nFor 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.\n\n#### Batch Idle Duration\n\nThe batch idle duration duration 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.\n\nThis 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`.\n\n#### Batch Max Duration\n\nThe batch max duration 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.\n\nThis 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`.\n"
  },
  {
    "path": "website/content/en/preview/reference/threat-model.md",
    "content": "---\ntitle: \"Threat Model\"\nlinkTitle: \"Threat Model\"\nweight: 999\n---\n\nKarpenter observes Kubernetes pods and launches nodes in response to those pods’ scheduling constraints. Karpenter does not perform the actual scheduling and instead waits for [kube-scheduler](https://kubernetes.io/docs/concepts/scheduling-eviction/kube-scheduler/) to schedule the pods.\n\nWhen running in AWS, Karpenter is typically installed onto EC2 instances that run in EKS Clusters. Karpenter relies on public facing AWS APIs and standard IAM Permissions. Karpenter uses AWS-SDK-Go v1, and AWS advises that credentials are provided using [IAM Roles for Service Accounts](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html).\n\n\n## Architecture & Actors\n\n1. **Cluster Operator**: An identity that installs and configures Karpenter in a Kubernetes cluster, and configures Karpenter's cloud identity and permissions.\n2. **Cluster Developer**: An identity that can create pods, typically through Deployments, DaemonSets, or other pod-controller types.\n3. **Karpenter Controller:** The Karpenter application pod that operates inside a cluster.\n\n![threat-model](/threat-model.png)\n\n## Capabilities\n\n### Cluster Operator\n\nThe Cluster Operator has full control to install and configure Karpenter including all [`NodePools`]({{<ref \"../concepts/nodepools\" >}}) and [`EC2NodeClasses`]({{<ref \"../concepts/nodeclasses\" >}}). The Cluster Operator has privileges to manage the cloud identities and permissions for Nodes, and the cloud identity and permissions for Karpenter.\n\n### Cluster Developer\n\nA Cluster Developer has the ability to create pods via `Deployments`, `ReplicaSets`, `StatefulSets`, `Jobs`, etc. This assumes that the Cluster Developer cannot modify the Karpenter pod or launch pods using Karpenter’s service account and gain access to Karpenter’s IAM role.\n\n### Karpenter Controller\n\nKarpenter has permissions to create and manage cloud instances. Karpenter has Kubernetes API permissions to create, update, and remove nodes, as well as evict pods. For a full list of the permissions, see the RBAC rules in the helm chart template. Karpenter also has AWS IAM permissions to create instances with IAM roles.\n\n* [aggregate-clusterrole.yaml](https://github.com/aws/karpenter/blob{{< githubRelRef >}}charts/karpenter/templates/aggregate-clusterrole.yaml)\n* [clusterrole-core.yaml](https://github.com/aws/karpenter/blob{{< githubRelRef >}}charts/karpenter/templates/clusterrole-core.yaml)\n* [clusterrole.yaml](https://github.com/aws/karpenter/blob{{< githubRelRef >}}charts/karpenter/templates/clusterrole.yaml)\n* [rolebinding.yaml](https://github.com/aws/karpenter/blob{{< githubRelRef >}}charts/karpenter/templates/rolebinding.yaml)\n* [role.yaml](https://github.com/aws/karpenter/blob{{< githubRelRef >}}charts/karpenter/templates/role.yaml)\n\n## Assumptions\n\n| Category\t     | Assumption\t                                                                                                                                                                                                            | Comment\t                                                                                                                                                                                                                          |\n|---------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| Generic\t      | The Karpenter pod is operated on a node in the cluster, and uses a Service Account for authentication to the Kubernetes API\t                                                                                           | Cluster Operators may want to isolate the node running the Karpenter pod to a system-pool of nodes to mitigate the possibility of container breakout with Karpenter’s permissions. \t                                              |\n| Generic\t      | Cluster Developer does not have any Kubernetes permissions to manage Karpenter running in the cluster (The deployment, pods, clusterrole, etc)\t                                                                        | \t                                                                                                                                                                                                                                 |\n| Generic\t      | Restrictions on the fields of pods a Cluster Developer can create are out of scope. \t                                                                                                                                  | Cluster Operators can use policy frameworks to enforce restrictions on Pod capabilities\t                                                                                                                                          |\n| Generic\t      | No sensitive data is included in non-Secret resources in the Kubernetes API. The Karpenter controller has the ability to list all pods, nodes, deployments, and many other pod-controller and storage resource types.\t | Karpenter does not have permission to list/watch cluster-wide ConfigMaps or Secrets\t                                                                                                                                              |\n| Generic\t      | Karpenter has permissions to create, modify, and delete nodes from the cluster, and evict any pod. \t                                                                                                                   | Cluster Operators running applications with varying security profiles in the same cluster may want to configure dedicated nodes and scheduling rules for Karpenter to mitigate potential container escapes from other containers\t |\n| AWS-Specific\t | The Karpenter IAM policy is encoded in the GitHub repo. Any additional permissions possibly granted to that role by the administrator are out of scope\t                                                                | \t                                                                                                                                                                                                                                 |\n| AWS-Specific\t | The Karpenter pod uses IRSA for AWS credentials \t                                                                                                                                                                      | Setup of IRSA is out of scope for this document \t                                                                                                                                                                                 |\n\n## Generic Threats and Mitigations\n\n### Threat: Cluster Developer can influence creation of an arbitrary number of nodes\n\n**Background**: Karpenter creates new instances based on the count of pending pods.\n\n**Threat**: A Cluster Developer attempts to have Karpenter create more instances than intended by creating a large number of pods or by using anti-affinity to schedule one pod per node.\n\n**Mitigation**: In addition to [Kubernetes resource limits](https://kubernetes.io/docs/concepts/policy/resource-quotas/#object-count-quota), Cluster Operators can [configure limits on a NodePool]({{< ref \"../concepts/nodepools#spec-limits\" >}}) to limit the total amount of memory, CPU, or other resources provisioned across all nodes.\n\n## Threats\n\n### Threat: Using EC2 CreateTag/DeleteTag Permissions to Orchestrate Instance Creation/Deletion\n\n**Background**: As of `0.28.0`, Karpenter creates a mapping between CloudProvider instances and CustomResources in the cluster for capacity tracking. To ensure this mapping is consistent, Karpenter utilizes the following tag keys:\n\n* `karpenter.sh/managed-by`\n* `karpenter.sh/nodepool`\n* `kubernetes.io/cluster/${CLUSTER_NAME}`\n* `karpenter.sh/provisioner-name` (prior to `0.32.0`)\n\nAny user that has the ability to Create/Delete tags on CloudProvider instances will have the ability to orchestrate Karpenter to Create/Delete CloudProvider instances as a side effect.\n\nIn addition, as of `0.29.0`, Karpenter will Drift on Security Groups and Subnets. If a user has the Create/Delete tags permission for either of resources, they can orchestrate Karpenter to Create/Delete CloudProvider instances as a side effect.\n\n**Threat:** A Cluster Operator attempts to create or delete a tag on a resource discovered by Karpenter. If it has the ability to create a tag it can effectively create or delete CloudProvider instances associated with the tagged resources.\n\n**Mitigation** Cluster Operators should [enforce tag-based IAM policies](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html) on these tags against any EC2 instance resource (`i-*`) for any users that might have [CreateTags](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTags.html)/[DeleteTags](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DeleteTags.html) permissions but should not have [RunInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html)/[TerminateInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_TerminateInstances.html) permissions.\n\n### Threat: Launching EC2 instances with IAM roles not intended for Karpenter nodes\n\n**Background**: Many IAM roles in an AWS account may trust the EC2 service principal. IAM administrators must grant the `iam:PassRole` permission to IAM principals to allow those principals in the account to launch instances with specific roles.\n\n**Threat:** A Cluster Operator attempts to create an `EC2NodeClass` with an IAM role not intended for Karpenter\n\n**Mitigation**: Cluster Operators must enumerate the roles in the resource section of the IAM policy granted to the Karpenter role for the `iam:PassRole` action. Karpenter will fail to generate an instance profile if role that is specified in the `spec.role` section of the `EC2NodeClass` is not enumerated in the `iam:PassRole` permission.\n\n### Threat: Karpenter can orchestrate the creation/deletion of IAM Instance Profiles it doesn't own\n\n**Background**: Karpenter has permission to create/update/delete instance profiles as part of its controller permissions to ensure that it can auto-generate instance profiles when EC2NodeClasses are created.\n\n**Threat**: An actor who obtains control of the Karpenter pod’s IAM role may delete instance profiles not owned by Karpenter, causing workload disruption to other instances using the profile in the account.\n\n**Mitigation**: Karpenter's controller permissions enforce that it creates instance profiles with tags which provide ownership information. These tags include:\n\n* `karpenter.sh/managed-by`\n* `kubernetes.io/cluster/${CLUSTER_NAME}`\n* `karpenter.k8s.aws/ec2nodeclass`\n* `topology.kubernetes.io/region`\n\nThese tags ensure that instance profiles created by Karpenter in the account are unique to that cluster. Karpenter's controller permissions _only_ allow it to act on instance profiles that contain these tags which match the cluster information.\n\n### Threat: Karpenter can be used to create or terminate EC2 instances outside the cluster\n\n**Background**: EC2 instances can exist in an AWS account outside of the Kubernetes cluster.\n\n**Threat**: An actor who obtains control of the Karpenter pod’s IAM role may be able to create or terminate EC2 instances not part of the Kubernetes cluster managed by Karpenter.\n\n**Mitigation**: Karpenter creates instances with tags, several of which are enforced in the IAM policy granted to the Karpenter IAM role that restrict the instances Karpenter can terminate. One tag requires that the instance was provisioned by a Karpenter controller (`karpenter.sh/nodepool`), another tag can include a cluster name to mitigate any termination between two clusters with Karpenter in the same account (`kubernetes.io/cluster/${CLUSTER_NAME}`. Cluster Operators also can restrict the region to prevent two clusters in the same account with the same name in different regions.\n\nAdditionally, Karpenter does not allow tags to be modified on instances unowned by Karpenter after creation, except for the `Name` and `karpenter.sh/nodeclaim` tags. Though these tags can be changed after instance creation, `aws:ResourceTag` conditions enforce that the Karpenter controller is only able to change these tags on instances that it already owns, enforced through the `karpenter.sh/nodepool` and `kubernetes.io/cluster/${CLUSTER_NAME}` tags.\n\n### Threat: Karpenter launches an EC2 instance using an unintended AMI\n\n**Background**: Cluster Developers can create Node Templates that refer to an AMI by metadata, such as a name rather than an AMI resource ID.\n\n**Threat:** A threat actor creates a public AMI with the same name as a customer’s AMI in an attempt to get Karpenter to select the threat actor’s AMI instead of the intended AMI.\n\n**Mitigation**: When selecting AMIs by name or tags, Karpenter defaults to adding an ownership filter of `self,amazon` so AMI images external to the account are not used.\n"
  },
  {
    "path": "website/content/en/preview/tasks/_index.md",
    "content": "---\ntitle: \"Tasks\"\nlinkTitle: \"Tasks\"\nweight: 25\ndescription: >\n  Tasks to run with Karpenter\ncascade:\n  type: docs\n---\n\n"
  },
  {
    "path": "website/content/en/preview/tasks/managing-amis.md",
    "content": "---\ntitle: \"Managing AMIs\"\nlinkTitle: \"Managing AMIs\"\ndescription: >\n  Task for managing AMIs in Karpenter\n---\n\n{{% alert title=\"Important\" color=\"warning\" %}}\nKarpenter __heavily recommends against__ opting-in to use an `amiSelectorTerm` with `@latest` unless you are doing this in a pre-production environment or are willing to accept the risk that a faulty AMI may cause downtime in your production clusters. In general, if using a publicly released version of a well-known AMI type (like AL2, AL2023, or Bottlerocket), we recommend that you pin to a version of that AMI and deploy newer versions of that AMI type in a staged approach when newer patch versions are available.\n\n```yaml\namiSelectorTerms:\n  - alias: al2023@v20240807\n```\n\nMore details are described in [Controlling AMI Replacement]({{< relref \"#controlling-ami-replacement\" >}}) below.\n{{% /alert %}}\n\nUnderstanding how Karpenter assigns AMIs to nodes can help ensure that your workloads will run successfully on those nodes and continue to run if the nodes are upgraded to newer AMIs.\nBelow we describe how Karpenter assigns AMIs to nodes when they are first deployed and how newer AMIs are assigned later when nodes are spun up to replace old ones.\nLater, it describes the options you have to assert control over how AMIs are used by Karpenter for your clusters.\n\nFeatures for managing AMIs described here should be considered as part of the larger upgrade policies that you have for your clusters.\nSee [How do I upgrade an EKS Cluster with Karpenter]({{< relref \"../faq/#how-do-i-upgrade-an-eks-cluster-with-karpenter\" >}}) for details on this process.\n\n## How Karpenter assigns AMIs to nodes\n\nHere is how Karpenter assigns AMIs nodes:\n\n* When you create an `EC2NodeClass`, you are required to specify [`amiSelectorTerms`]({{< relref \"../concepts/nodeclasses/#specamiselectorterms\" >}}). [`amiSelectorTerms`]({{< relref \"../concepts/nodeclasses/#specamiselectorterms\" >}}) allow you to select on AMIs that can be spun-up by this EC2NodeClass based on tags, id, name, or an alias. Multiple AMIs may be specified, and Karpenter will choose the newest compatible AMI when spinning up new nodes.\n* Some `amiSelectorTerm` types are static and always resolve to the same AMI (e.g. `id`). However, some are dynamic and may resolve to different AMIs over time. Examples of dynamic types include `alias`, `tags`, and `name` (when using a wildcard). For example, if you specify an `amiSelectorTerm` with an `alias` set to `@latest` (e.g. `al2023@latest`, `al2@latest`, or `bottlerocket@latest`), Karpenter will use the _latest_ release for that AMI type when spinning up a new node.\n* When a node is replaced, Karpenter checks to see if a newer AMI is available based on your `amiSelectorTerms`. If a newer AMI is available, Karpenter will automatically use the new AMI to spin up the new node. __In particular, if you are using a dynamic `amiSelectorTerm` type, you may get a new AMI deployed to your environment without having properly tested it.__\n\nWhenever a node is replaced, the replacement node will be launched using the newest AMI based on your `amiSelectorTerms`. Nodes may be replaced due to manual deletion, or any of Karpenter's automated methods:\n- [**Expiration**]({{< relref \"../concepts/disruption/#expiration\" >}}): Automatically initiates replacement at a certain time after the node is created.\n-  [**Consolidation**]({{< relref \"../concepts/disruption/#consolidation\" >}}): If Karpenter detects that a cheaper node can be used to run the same workloads, Karpenter may replace the current node automatically.\n- [**Drift**]({{< relref \"../concepts/disruption/#drift\" >}}): If a node's state no longer matches the desired state dictated by the `NodePool` or `EC2NodeClass`, it will be replaced, including if the node's AMI no longer matches the latest AMI selected by the `amiSelectorTerms`.\n- [**Interruption**]({{< relref \"../concepts/disruption/#interruption\" >}}): Nodes are sometimes involuntarily disrupted by things like Spot interruption, health changes, and instance events, requiring new nodes to be deployed.\n\nSee [**Automated Methods**]({{< relref \"../concepts/disruption/#automated-methods\" >}}) for details on how Karpenter uses these automated actions to replace nodes.\n\nThe most relevant automated disruption method is [**Drift**]({{< relref \"../concepts/disruption/#drift\" >}}), since it is initiated when a new AMI is selected-on by your `amiSelectorTerms`. This could be due to a manual update (e.g. a new `id` term was added), or due to a new AMI being resolved by a dynamic term.\n\nIf you're using an `alias` with the `latest` pin (e.g. `al2023@latest`), Karpenter periodically checks for new AMI releases. Since AMI releases are outside your control, this could result in new AMIs being deployed before they have been properly tested in a lower environment. This is why we **strongly recommend** using version pins in production environments when using an alias (e.g. `al2023@v20240807`).\n\n{{% alert title=\"Important\" color=\"warning\" %}}\nIf you are new to Karpenter, you should know that the behavior described here is different than you get with Managed Node Groups (MNG). MNG will always use the assigned AMI when it creates a new node and will never automatically upgrade to a new AMI when a new node is required. See [Updating a Managed Node Group](https://docs.aws.amazon.com/eks/latest/userguide/update-managed-node-group.html) to see how you would manually update MNG to use new AMIs.\n{{% /alert %}}\n\n## Controlling AMI Replacement\n\nKarpenter's automated node replacement functionality in tandem with the `EC2NodeClass` gives you a lot of flexibility to control the desired state of nodes on your cluster. For example, you can opt-in to AMI auto-upgrades using `alias` set to `@latest`; however, this has to be weighed heavily against the risk of newer versions of an AMI breaking existing applications on your cluster. Alternatively, you can choose to pin your AMIs in your production clusters to avoid the risk of breaking changes; however, this has to be weighed against the management cost of testing new AMIs in pre-production and keeping up with the latest AMI versions.\n\nKarpenter offers you various controls to ensure you don't take on too much risk as you rollout new versions of AMIs to your production clusters. Below shows how you can use these controls:\n\n* [Pinning AMIs]({{< relref \"#pinning-amis\" >}}): If workloads require a particluar AMI, this control ensures that it is the only AMI used by Karpenter. This can be used in combination with [Testing AMIs]({{< relref \"#testing-amis\" >}}) where you lock down the AMI in production, but allow the newest AMIs in a test cluster while you test your workloads before upgrading production.\n* [Testing AMIs]({{< relref \"#testing-amis\" >}}): The safest way for ensuring that a new AMI doesn't break your workloads is to test it before putting it into production. This takes the most effort on your part, but most effectively models how your workloads will run in production, allowing you to catch issues ahead of time. Note that you can sometimes get different results from your test environment when you roll a new AMI into production, since issues like scale and other factors can elevate problems you might not see in test. Combining this with other controls like [Using Disruption Budgets]({{< relref \"#using-disruption-budgets\" >}}) can allow you to catch problems before they impact your whole cluster.\n* [Using Disruption Budgets]({{< relref \"#using-disruption-budgets\" >}}): This option can be used as a way of mitigating the scope of impact if a new AMI causes problems with your workloads. With Disruption budgets you can slow the pace of upgrades to nodes with new AMIs or make sure that upgrades only happen during selected dates and times (using `schedule`). This doesn't prevent a bad AMI from being deployed, but it allows you to control when nodes are upgraded, and gives you more time to respond to rollout issues.\n\n### Pinning AMIs\n\nWhen you configure the [**EC2NodeClass**]({{< relref \"../concepts/nodeclasses\" >}}), you are required to configure which AMIs you want Karpenter to select on using the `amiSelectorTerms` field. When pinning to a specific `id`, `name`, `tags` or an `alias` that contains a fixed version, Karpenter will only select on a single AMI and won't automatically upgrade your nodes to a new version of an AMI. This prevents a new and potentially untested AMI from replacing existing nodes when those nodes are terminated.\n).\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nPinning an AMI to an `alias` type with a fixed version _will_ pin the AMI so long as your K8s control plane version doesn't change. Unlike `id` and `name` types, specifying a version `alias` in your `amiSelectorTerms` will cause Karpenter to consider the K8s control plane version of your cluster when choosing the AMI. If you upgrade your Kubernetes cluster while using this alias type, Karpenter _will_ automatically drift your nodes to a new AMI that still matches the AMI version but also matches your new K8s control plane version.\n{{% /alert %}}\n\nThese examples show three different ways to identify the same AMI:\n\n```yaml\n# Using alias\n# Pinning to this fixed version alias will pull this version of the AMI,\n# matching the K8s control plane version of your cluster\namiSelectorTerms:\n- alias: al2023@v20240219\n```\n\n```yaml\n# Using name\n# This will only ever select the AMI that contains this exact name\namiSelectorTerms:\n- name: al2023-ami-2023.3.20240219.0-kernel-6.1-x86_64\n```\n\n```yaml\n# Using id\n# This will only ever select this specific AMI id\namiSelectorTerms:\n- id: ami-052c9ea013e6e3567\n```\n\n```yaml\n# Using tags\n# You can use a CI/CD system to test newer versions of an AMI\n# and automatically tag them as you validate that they are safe to upgrade to\namiSelectorTerms:\n- tags:\n    karpenter.sh/discovery: \"${CLUSTER_NAME}\"\n    environment: prod\n```\n\nSee the [**spec.amiSelectorTerms**]({{< relref \"../concepts/nodeclasses/#specamiselectorterms\" >}}) section of the NodeClasses page for details.\nKeep in mind, that this could prevent you from getting critical security patches when new AMIs are available, but it does give you control over exactly which AMI is running.\n\n### Testing AMIs\n\nInstead of avoiding AMI upgrades, you can set up test clusters where you can try out new AMI releases before they are put into production. For example, you could have:\n\n* **Test clusters**: On lower environment clusters, you can run the latest AMIs e.g. `al2023@latest`, `al2@latest`, `bottlerocket@latest`, for your workloads in a safe environment. This ensures that you get the latest patches for AMIs where downtime to applications isn't as critical and allows you to validate patches to AMIs before they are deployed to production.\n\n* **Production clusters**: After you've confirmed that the AMI works in your lower environments, you can pin the latest AMIs to be deployed in your production clusters to roll out the AMI. Refer to [Pinning AMIs]({{< relref \"#pinning-amis\" >}}) for how to choose a particular AMI by `alias`, `name` or `id`. Remember that it is still best practice to gradually roll new AMIs into your cluster, even if they have been tested. So consider implementing that for your production clusters as described in [Using Disruption Budgets]({{< relref \"#using-disruption-budgets\" >}}).\n\n### Using Disruption Budgets\n\nTo reduce the risk of entire workloads being immediately degraded when a new AMI is deployed, you can enable Karpenter's [**Node Disruption Budgets**]({{< relref \"#node-disruption-budgets \" >}}) as well as ensure that you have [**Pod Disruption Budgets**]({{< relref \"#pod-disruption-budgets \" >}}) configured for applications on your cluster. Below provides more details on how to configure each.\n\n#### Node Disruption Budgets\n\n[Disruption Budgets]({{< relref \"../concepts/disruption/#disruption-budgets \" >}}) limit when and to what extent nodes can be disrupted. You can prevent disruption based on nodes (a percentage or number of nodes that can be disrupted at a time) and schedule (excluding certain times from disrupting nodes).\nYou can set Disruption Budgets in a `NodePool` spec. Here is an example:\n\n```yaml\ndisruption:\n  budgets:\n  - nodes: 15%\n  - nodes: \"3\"\n  - nodes: \"0\"\n    schedule: \"0 9 * * sat,sun\"\n    duration: 24h\n  - nodes: \"0\"\n    schedule: \"0 17 * * mon-fri\"\n    duration: 16h\n    reasons:\n      - Drifted\n```\n\nSettings for budgets in the above example include the following:\n\n* **Percentage of nodes**: From the first `nodes` setting, only `15%` of the NodePool’s nodes can be disrupted at a time.\n* **Number of nodes**: The second `nodes` setting limits the number of nodes that can be disrupted at a time to `3`.\n* **Schedule**: The third `nodes` setting uses schedule to say that zero disruptions (`0`) are allowed starting at 9am on Saturday and Sunday and continues for 24 (fully blocking disruptions all day).\nThe format of the schedule follows the `crontab` format for identifying dates and times.\nSee the [crontab](https://man7.org/linux/man-pages/man5/crontab.5.html) page for information on the supported values for these fields.\n* **Reasons**: The fourth `nodes` setting uses `reasons` which implies that this budget only applies to the `Drifted` disruption condition. This setting uses schedule to say that zero disruptions (`0`) are allowed starting at 5pm on Monday, Tuesday, Wednesday, Thursday, and Friday and continues for 16h (effectively blocking rolling nodes due to drift outside of working hours).\n\nAs with all disruption settings, keep in mind that avoiding updated AMIs for your nodes can result in not getting fixes for known security risks and bugs.\nYou need to balance that with your desire to not risk breaking the workloads on your cluster.\n\n#### Pod Disruption Budgets\n\n[Pod Disruption Budgets](https://kubernetes.io/docs/tasks/run-application/configure-pdb/#specifying-a-poddisruptionbudget) allow you to describe how much disruption an application can tolerate before it begins to become unhealthy. This is critical to configure for Karpenter, since Karpenter uses this information to determine if it can continue to replace nodes. Specifically, if replacing a node would cause a Pod Disruption Budget to be breached (for graceful forms of disruption e.g. Drift or Consolidation), Karpenter will not replace the node.\n\nIn a scenario where a faulty AMI is rolling out and begins causing downtime to your applications, configuring Pod Disruption Budgets is critical since this will tell Karpenter that it must stop replacing nodes until your applications become healthy again. This prevents Karpenter from deploying the faulty AMI throughout your cluster, reduces the imact the AMI has on your production applications, and gives you manually intervene in the cluster to remediate the issue.\n\n## Follow-up\n\nThe Karpenter project continues to add features to give you greater control over AMI upgrades on your clusters.\nIf you have opinions about features you would like to see to manage AMIs with Karpenter, feel free to enter a Karpenter [New Issue](https://github.com/aws/karpenter-provider-aws/issues/new/choose).\n"
  },
  {
    "path": "website/content/en/preview/tasks/odcrs.md",
    "content": "---\ntitle: \"Utilizing On-Demand Capacity Reservations and Capacity Blocks\"\nlinkTitle: \"Utilizing ODCRs and Capacity Blocks\"\n---\n\n<i class=\"fa-solid fa-circle-info\"></i> <b>Feature State: </b> [Beta]({{<ref \"../reference/settings#feature-gates\" >}})\n\nKarpenter introduced native support for [EC2 On-Demand Capacity Reservations](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-capacity-reservations.html)  (ODCRs) in [v1.3](https://github.com/aws/karpenter-provider-aws/releases/tag/v1.3.0), enabling users to select upon and prioritize specific capacity reservations.\nIn [v1.6](https://github.com/aws/karpenter-provider-aws/releases/tag/v1.6.0), this support was expanded to include [EC2 Capacity Blocks for ML](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-capacity-blocks.html). In [v1.10](https://github.com/aws/karpenter-provider-aws/releases/tag/v1.10.0), this was further extended to support [Interruptible Capacity Reservations](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/interruptible-capacity-reservations.html).\nTo enable native ODCR support, ensure the [`ReservedCapacity` feature gate]({{< relref \"../reference/settings#feature-gates\" >}}) is enabled.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nIf you were previously utilizing `open` ODCRs using Karpenter, review the [migration section]({{< relref \"#migrating-from-previous-versions\" >}}) of this task before enabling this feature.\n{{% /alert %}}\n\n## Selecting Capacity Reservations\n\nTo configure native ODCR support, you will need to make updates to both your EC2NodeClass and NodePool.\nFirst, you should configure `capacityReservationSelectorTerms` on your EC2NodeClass.\nSimilar to `amiSelectorTerms`, you can specify a number of terms which are ANDed together to select ODCRs in your AWS account.\nThe following example demonstrates how to select all capacity reservations tagged with `application: foobar` in addition to `cr-56fac701cc1951b03`:\n\n```yaml\ncapacityReservationSelectorTerms:\n- tags:\n    application: foobar\n- id: cr-56fac701cc1951b03\n```\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nCapacity blocks are modeled as on-demand capacity reservations in EC2.\nTo select capacity blocks, specify them in your `capacityReservationSelectorTerms` in the same way you would for a default ODCR.\n{{% /alert %}}\n\nFor more information on configuring `capacityReservationSelectorTerms`, see the [NodeClass docs]({{< relref \"../concepts/nodeclasses#speccapacityreservationselectorterms\" >}}).\n\nAdditionally, you will need to update your NodePool to be compatible with ODCRs.\nKarpenter doesn't model ODCRs as standard on-demand capacity, and instead uses a dedicated capacity type: `reserved`.\nFor a NodePool to utilize ODCRs, it must be compatible with `karpenter.sh/capacity-type: reserved`.\nThe following example demonstrates how to configure a NodePool to prioritize ODCRs and fallback to on-demand capacity:\n\n```yaml\nrequirements:\n- key: karpenter.sh/capacity-type\n  operator: In\n  values: ['reserved', 'on-demand']\n```\n\nAdditionaly, Karpenter supports the following scheduling labels:\n\n| Label                                                  | Example                       | Description                                       |\n| ------------------------------------------------------ | ----------------------------- | ------------------------------------------------- |\n| `karpenter.k8s.aws/capacity-reservation-id`            | `cr-56fac701cc1951b03`        | The capacity reservation's ID                     |\n| `karpenter.k8s.aws/capacity-reservation-type`          | `default` or `capacity-block` | The type of capacity reservation                  |\n| `karpenter.k8s.aws/capacity-reservation-interruptible` | `true` or `false`             | Whether the capacity reservation is interruptible |\n\nThese labels will only be present on reserved nodes.\nThey are supported as NodePool requirements and as pod scheduling constaints (e.g. [node affinity](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#node-affinity)).\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter does **not** support open matching for ODCRs.\nThis means that all ODCRs you wish to utilize, even those with `open` instance eligibility, must be included in your NodeClass' `spec.capacityReservationSelectorTerms`.\n{{% /alert %}}\n\n## Prioritization Behavior\n\nNodePools are not limited to a single compatible capacity-type -- they can be compatible with any combination of the available capacity-types (`on-demand`, `spot`, and `reserved`).\nConsider the following NodePool requirements:\n\n```yaml\nrequirements:\n- key: karpenter.sh/capacity-type\n  operator: In\n  values: ['reserved', 'on-demand', 'spot']\n```\n\nIn this example, the NodePool is compatible with all capacity types.\nKarpenter will prioritize ODCRs, but if none are available or none are compatible with the pending workloads it will fallback to spot or on-demand.\nSimilarly, Karpenter will prioritize reserved capacity during consolidation.\nSince ODCRs are pre-paid, Karpenter will model them as free and consolidate spot / on-demand nodes when possible.\n\n## Expiration\n\nAn instance launched into an ODCR is not necessarily in that ODCR indefinitely.\nThe ODCR could expire, be cancelled, or the instance could be manually removed from the ODCR.\nIf any of these occur, and Karpenter detects that the instance no longer belongs to an ODCR, it will update the `karpenter.sh/capacity-type` label to `on-demand`.\n\n### Capacity Blocks\n\nUnlike default ODCRs, Capacity Blocks must have an end time.\nAdditionally, instances launched into a capacity block will be terminated by EC2 ahead of the end time, rather than becoming standard on-demand capacity.\n\nFrom the [AWS docs](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-capacity-blocks.html):\n\n> You can use all the instances you reserved until 30 minutes (for instance types) or 60 minutes (for UltraServer type) before the end time of the Capacity Block.\n> With 30 minutes (for instance types) or 60 minutes (for UltraServer types) left in your Capacity Block reservation, we begin terminating any instances that are running in the Capacity Block.\n> We use this time to clean up your instances before delivering the Capacity Block to the next customer.\n\nKarpenter will preemptively begin draining nodes launched for capacity blocks 10 minutes before EC2 begins termination, ensuring your workloads can gracefully terminate before reclaimation.\n\n### Interruptible Capacity Reservations\n\nUnlike default ODCRs, capacity launched from interruptible ODCRs can be interrupted when capacity is reclaimed back the source ODCR.\n\nFrom the [AWS docs](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/interruptible-capacity-reservations.html), when capacity is reclaimed:\n\n> Running instances receive a 2-minute interruption warning through EventBridge events.\n> After the notice period, running instances in the reclaimed capacity enter a shutting down state and get terminated.\n\nKarpenter will begin draining nodes launched for IODCRs when the 2-minute interruption warning is recieved.\n\n## Migrating From Previous Versions\n\nAlthough it was not natively supported, it was possible to utilize ODCRs on previous versions of Karpenter.\nIf a NodeClaim's requirements happened to be compatible with an open ODCR in the target AWS account, it may have launched an instance into that open ODCR.\nThis could be ensured by constraining a NodePool such that it was only compatible with the desired open ODCR, and limits could be used to enable fallback to a different NodePool once the ODCR was exhausted.\nThis behavior is no longer supported when native on-demand capacity support is enabled.\n\nIf you were relying on this behavior, you should configure your `EC2NodeClasses` to select the desired ODCRs **before** enabling the feature gate.\nYou should also ensure any NodePools which you wish to use with ODCRs are compatible with `karpenter.sh/capacity-type: reserved`.\nPerforming these steps before enabling the feature gate will ensure that Karpenter can immediately continue utilizing your reservations, rather than falling back to on-demand.\n"
  },
  {
    "path": "website/content/en/preview/troubleshooting.md",
    "content": "---\ntitle: \"Troubleshooting\"\nlinkTitle: \"Troubleshooting\"\nweight: 70\ndescription: >\n  Troubleshoot Karpenter problems\n---\n\n## Controller\n\n### Enable debug logging\n\nThis can be done by updating the env variable `LOG_LEVEL` Karpenter deployment and then restarting the Karpenter deployment.\n\nYou can also enable debug logging during installation with Helm by setting the option `logLevel`.\n\n```\nhelm upgrade --install karpenter oci://public.ecr.aws/karpenter/karpenter \\\n  --set logLevel=debug \\\n  ...\n```\n\n## Installation\n\n### Missing Service Linked Role\n\nUnless your AWS account has already onboarded to EC2 Spot, you will need to create the service linked role to avoid `ServiceLinkedRoleCreationNotPermitted`.\n\n```\nAuthFailure.ServiceLinkedRoleCreationNotPermitted: The provided credentials do not have permission to create the service-linked role for EC2 Spot Instances\n```\n\nThis can be resolved by creating the [Service Linked Role](https://docs.aws.amazon.com/batch/latest/userguide/spot_fleet_IAM_role.html).\n\n```\naws iam create-service-linked-role --aws-service-name spot.amazonaws.com\n```\n\n### Failed Resolving STS Credentials with I/O Timeout\n\n```bash\nChecking EC2 API connectivity, WebIdentityErr: failed to retrieve credentials\\ncaused by: RequestError: send request failed\\ncaused by: Post \\\"https://sts.us-east-1.amazonaws.com/\\\": dial tcp: lookup sts.us-east-1.amazonaws.com: i/o timeout\n```\n\nIf you see the error above when you attempt to install Karpenter, this indicates that Karpenter is unable to reach out to the STS endpoint due to failed DNS resolution. This can happen when Karpenter is running with `dnsPolicy: ClusterFirst` and your in-cluster DNS service is not yet running.\n\nYou have two mitigations to resolve this error:\n1. Let Karpenter manage your in-cluster DNS service - You can let Karpenter manage your DNS application pods' capacity by changing Karpenter's `dnsPolicy` to be `Default` (run `--set dnsPolicy=Default` with a Helm installation). This ensures that Karpenter reaches out to the [VPC DNS service](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-dns.html) when running its controllers, allowing Karpenter to start-up without the DNS application pods running, enabling Karpenter to manage the capacity for these pods.\n2. Let MNG/Fargate manage your in-cluster DNS service - If running a cluster with MNG, ensure that your group has enough capacity to support the DNS application pods and ensure that the application has the correct tolerations to schedule against the capacity. If running a cluster with Fargate, ensure that you have a [fargate profile](https://docs.aws.amazon.com/eks/latest/userguide/fargate-profile.html) that selects against your DNS application pods.\n\n### Karpenter Role names exceeding 64-character limit\n\nIf 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).\n\nNode role names for Karpenter are created in the form `KarpenterNodeRole-${Cluster_Name}` in the [Create the KarpenterNode IAM Role]({{<ref \"./getting-started/getting-started-with-karpenter/#create-the-karpenternode-iam-role\" >}}) section of the getting started guide.\nIf a long cluster name causes the Karpenter node role name to exceed 64 characters, creating that object will fail.\n\nKeep in mind that `KarpenterNodeRole-` is just a recommendation from the getting started guide.\nInstead of using the eksctl role, you can shorten the name to anything you like, as long as it has the right permissions.\n\n### Unknown field in NodePool or EC2NodeClass spec\n\nIf 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:\n\n```\nError from server (BadRequest): error when creating \"STDIN\": NodePool in version \"v1\" cannot be handled as a NodePool: strict decoding error: unknown field \"spec.template.spec.nodeClassRef.foo\"\n```\n\nIf you see this error, you can solve the problem by following the [Custom Resource Definition Upgrade Guidance](../upgrade-guide/#custom-resource-definition-crd-upgrades).\n\nInfo 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)\n\n### Unable to schedule pod due to insufficient node group instances\n\n`0.16.0` changed the default replicas from 1 to 2.\n\nKarpenter won't launch capacity to run itself (log related to the `karpenter.sh/nodepool DoesNotExist requirement`)\nso it can't provision for the second Karpenter pod.\n\nTo 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 to run both pods.\n\nTo do so on AWS increase the `minimum` and `desired` parameters on the node group autoscaling group to launch at lease 2 instances.\n\n### Helm Error When Pulling the Chart\n\nIf Helm is showing an error when trying to install Karpenter Helm charts:\n\n- Ensure you are using a newer Helm version, Helm started supporting OCI images since `3.8.0`.\n- Helm does not have an `helm repo add` concept in OCI, so to install Karpenter you no longer need this.\n- If you get an error like `Error: public.ecr.aws/karpenter/karpenter:0.34.0: not found` make sure you're adding a `v` prefix for Karpenter versions between `0.17.0` & `0.34.x`.\n- Verify that the image you are trying to pull actually exists in [gallery.ecr.aws/karpenter](https://gallery.ecr.aws/karpenter/karpenter)\n- 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\n- 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).\n\n### Helm Error when installing the `karpenter-crd` chart\n\nKarpenter `0.26.1` introduced the `karpenter-crd` Helm chart. When installing this chart on your cluster, if you have previously added the Karpenter CRDs to your cluster through the `karpenter` controller chart or through `kubectl replace`, Helm will reject the install of the chart due to `invalid ownership metadata`.\n\n- In the case of `invalid ownership metadata; label validation error: missing key \"app.kubernetes.io/managed-by\": must be set to \"Helm\"` run:\n\n```shell\nkubectl label crd ec2nodeclasses.karpenter.k8s.aws nodepools.karpenter.sh nodeclaims.karpenter.sh app.kubernetes.io/managed-by=Helm --overwrite\n```\n\n- In the case of `annotation validation error: missing key \"meta.helm.sh/release-namespace\": must be set to \"karpenter\"` run:\n\n```shell\nKARPENTER_NAMESPACE=kube-system\nkubectl annotate crd ec2nodeclasses.karpenter.k8s.aws nodepools.karpenter.sh nodeclaims.karpenter.sh meta.helm.sh/release-name=karpenter-crd --overwrite\nkubectl annotate crd ec2nodeclasses.karpenter.k8s.aws nodepools.karpenter.sh nodeclaims.karpenter.sh meta.helm.sh/release-namespace=\"${KARPENTER_NAMESPACE}\" --overwrite\n```\n\n## Uninstallation\n\n### Unable to delete nodes after uninstalling Karpenter\n\nKarpenter 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.\n\nYou can fix this by patching the node objects:\n\n- `kubectl edit node <node_name>` and remove the line that says `karpenter.sh/termination` in the finalizers field.\n- Run the following script that gets all nodes with the finalizer and removes all the finalizers from those nodes.\n  - NOTE: this will remove ALL finalizers from nodes with the karpenter finalizer.\n\n```bash\nkubectl 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\"}]'\n```\n\n## Provisioning\n\n### Instances with swap volumes fail to register with control plane\n\nSome instance types (c1.medium and m1.small) are given limited amount of memory (see [Instance Store swap volumes](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-store-swap-volumes.html)). They are subsequently configured to use a swap volume, which will cause the kubelet to fail on launch. The following error can be seen in the systemd logs:\n\n```bash\n\"command failed\" err=\"failed to run Kubelet: running with swap on is not supported, please disable swap!...\"\n```\n\n##### Solutions\nDisabling swap will allow kubelet to join the cluster successfully, however users should be mindful of performance, and consider adjusting the NodePool requirements to use larger instance types.\n\n### DaemonSets can result in deployment failures\n\nFor Karpenter versions `0.5.3` and earlier, DaemonSets were not properly considered when provisioning nodes.\nThis sometimes caused nodes to be deployed that could not meet the needs of the requested DaemonSets and workloads.\nThis issue no longer occurs after Karpenter version `0.5.3` (see [PR #1155](https://github.com/aws/karpenter/pull/1155)).\n\nIf you are using a pre `0.5.3` version of Karpenter, one workaround is to set your NodePool to only use larger instance types that you know will be big enough for the DaemonSet and the workload.\nFor more information, see [Issue #1084](https://github.com/aws/karpenter/issues/1084).\nExamples of this behavior are included in [Issue #1180](https://github.com/aws/karpenter/issues/1180).\n\n### Unspecified resource requests cause scheduling/bin-pack failures\n\nNot 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.\nThis can cause issues as Karpenter bin-packs pods based on the resource requests.\n\nIf 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.\nThis behavior is not unique to Karpenter and can also occur with the standard `kube-scheduler` with pods that don't have accurate resource requests.\n\nTo prevent this, you can set LimitRanges on pod deployments on a per-namespace basis.\nSee 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.\n\n### Pods using Security Groups for Pods stuck in \"ContainerCreating\" state for up to 30 minutes before transitioning to \"Running\"\n\nWhen 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\".\nThis 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.\nMore info can be found in [issue #1252](https://github.com/aws/karpenter/issues/1252).\n\nTo workaround this problem, add the `vpc.amazonaws.com/has-trunk-attached: \"false\"` label in your Karpenter NodePool 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).\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\nspec:\n  template\n    metadata:\n      labels:\n        vpc.amazonaws.com/has-trunk-attached: \"false\"\n```\n\n### Pods using PVCs can hit volume limits and fail to scale-up\n\nWhen attempting to schedule a large number of pods with PersistentVolumes, it's possible that these pods will co-locate on the same node. Pods will report the following errors in their events using a `kubectl describe pod` call\n\n```bash\nWarning   FailedAttachVolume    pod/example-pod                      AttachVolume.Attach failed for volume \"***\" : rpc error: code = Internal desc = Could not attach volume \"***\" to node \"***\": attachment of disk \"***\" failed, expected device to be attached but was attaching\nWarning   FailedMount           pod/example-pod                      Unable to attach or mount volumes: unmounted volumes=[***], unattached volumes=[***]: timed out waiting for the condition\n```\n\nIn this case, Karpenter may fail to scale-up your nodes due to these pods due to one of the following reasons:\n\n#### Pods were not scheduled but Karpenter couldn't discover limits\n\nKarpenter does not support [in-tree storage plugins](https://kubernetes.io/blog/2021/12/10/storage-in-tree-to-csi-migration-status-update/) to provision PersistentVolumes, since nearly all of the in-tree plugins have been deprecated in upstream Kubernetes. This means that, if you are using a statically-provisioned PersistentVolume that references a volume source like `AWSElasticBlockStore` or a dynamically-provisioned PersistentVolume that references a StorageClass with a in-tree storage plugin provisioner like `kubernetes.io/aws-ebs`, Karpenter will fail to discover the maxiumum volume attachments for the node. Instead, Karpenter may think the node still has more schedulable space due to memory and cpu constraints when there is really no more schedulable space on the node due to volume limits. When Karpenter sees you are using an in-tree storage plugin on your pod volumes, it will print the following error message into the logs. If you see this message, upgrade your StorageClasses and statically-provisioned PersistentVolumes to use the latest CSI drivers for your cloud provider.\n\n```bash\n2023-04-05T23:56:53.363Z        ERROR   controller.node_state   PersistentVolume source 'AWSElasticBlockStore' uses an in-tree storage plugin which is unsupported by Karpenter and is deprecated by Kubernetes. Scale-ups may fail because Karpenter will not discover driver limits. Use a PersistentVolume that references the 'CSI' volume source for Karpenter auto-scaling support.       {\"commit\": \"b2af562\", \"node\": \"ip-192-168-36-137.us-west-2.compute.internal\", \"pod\": \"inflate0-6c4bdb8b75-7qmfd\", \"volume\": \"mypd\", \"persistent-volume\": \"pvc-11db7489-3c6e-46f3-a958-91f9d5009d41\"}\n2023-04-05T23:56:53.464Z        ERROR   controller.node_state   StorageClass .spec.provisioner uses an in-tree storage plugin which is unsupported by Karpenter and is deprecated by Kubernetes. Scale-ups may fail because Karpenter will not discover driver limits. Create a new StorageClass with a .spec.provisioner referencing the CSI driver plugin name 'ebs.csi.aws.com'.     {\"commit\": \"b2af562\", \"node\": \"ip-192-168-36-137.us-west-2.compute.internal\", \"pod\": \"inflate0-6c4bdb8b75-7qmfd\", \"volume\": \"mypd\", \"storage-class\": \"gp2\", \"provisioner\": \"kubernetes.io/aws-ebs\"}\n```\n\n#### Pods were scheduled due to a race condition in Kubernetes\n\nDue to [this race condition in Kubernetes](https://github.com/kubernetes/kubernetes/issues/95911), it's possible that the scheduler and the CSINode can race during node registration such that the scheduler assumes that a node can mount more volumes than the node attachments support. There is currently no universal solve for this problem other than enforcing `topologySpreadConstraints` and `podAntiAffinity` on your workloads that use PVCs such that you attempt to reduce the number of PVCs that schedule to a given node.\n\nThe following is a list of known CSI drivers which support a startupTaint to eliminate this issue:\n- [aws-ebs-csi-driver](https://github.com/kubernetes-sigs/aws-ebs-csi-driver/blob/master/docs/install.md#configure-node-startup-taint)\n- [aws-efs-csi-driver](https://github.com/kubernetes-sigs/aws-efs-csi-driver/tree/master/docs#configure-node-startup-taint)\n\nThese taints should be configured via `startupTaints` on your `NodePool`. For example, to enable this for EBS, add the following to your `NodePool`:\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nspec:\n  template:\n    spec:\n      startupTaints:\n        - key: ebs.csi.aws.com/agent-not-ready\n          effect: NoExecute\n```\n\n### CNI is unable to allocate IPs to pods\n\n_Note: This troubleshooting guidance is specific to the VPC CNI that is shipped by default with EKS clusters. If you are using a custom CNI, some of this guidance may not apply to your cluster._\n\nWhenever a new pod is assigned to a node, the CNI will assign an IP address to that pod (assuming it isn't using host networking), allowing it to communicate with other pods on the cluster. It's possible for this IP allocation and assignment process to fail for a number of reasons. If this process fails, you may see an error similar to the one below.\n\n```bash\ntime=2023-06-12T19:18:15Z type=Warning reason=FailedCreatePodSandBox from=kubelet message=Failed to create pod sandbox: rpc error: code = Unknown desc = failed to setup network for sandbox \"0f46f3f1289eed7afab81b6945c49336ef556861fe5bb09a902a00772848b7cc\": plugin type=\"aws-cni\" name=\"aws-cni\" failed (add): add cmd: failed to assign an IP address to container\n```\n\n#### `maxPods` is greater than the node's supported pod density\n\nBy 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.\n\nIf the max-pods (configured through your EC2NodeClass [`kubeletConfiguration`]({{<ref \"./concepts/nodeclasses/#speckubelet\" >}})) is greater than the number of supported IPs for a given instance type, the CNI will fail to assign an IP to the pod and your pod will be left in a `ContainerCreating` state.\n\nIf you've enabled [Security Groups per Pod](https://aws.github.io/aws-eks-best-practices/networking/sgpp/), one of the instance's ENIs is reserved as the trunk interface and uses branch interfaces off of that trunk interface to assign different security groups.\nIf you do not have any `SecurityGroupPolicies` configured for your pods, they will be unable to utilize branch interfaces attached to the trunk interface, and IPs will only be available from the non-trunk ENIs.\nThis effectively reduces the max-pods value by the number of IPs that would have been available from the trunk ENI.\nNote that Karpenter is not aware if [Security Groups per Pod](https://aws.github.io/aws-eks-best-practices/networking/sgpp/) is enabled, and will continue to compute max-pods assuming all ENIs on the instance can be utilized.\n\n##### Solutions\n\nTo avoid this discrepancy between `maxPods` and the supported pod density of the EC2 instance based on ENIs and allocatable IPs, you can perform one of the following actions on your cluster:\n\n1. Enable [Prefix Delegation](https://docs.aws.amazon.com/eks/latest/userguide/cni-increase-ip-addresses.html) to increase the number of allocatable IPs for the ENIs on each instance type\n2. Reduce your `maxPods` value to be under the maximum pod density for the instance types assigned to your NodePods\n3. Remove the `maxPods` value from your [`kubeletConfiguration`]({{<ref \"./concepts/nodeclasses#speckubeletconfiguration\" >}}) if you no longer need it and instead rely on the defaulted values from Karpenter and EKS AMIs.\n4. Set [RESERVED_ENIS]({{<ref \"./reference/settings\" >}})=1 in your Karpenter configuration to account for the reserved ENI when using Security Groups for Pods.\n\nFor more information on pod density, view the [Pod Density Section in the NodePools doc]({{<ref \"./concepts/nodeclasses#pod-density\" >}}).\n\n#### IP exhaustion in a subnet\n\nWhen a node is launched by Karpenter, it is assigned to a subnet within your VPC based on the [`subnetSelector`]({{<ref \"./concepts/nodeclasses#specsubnetselector\" >}}) value in your [`EC2NodeClass`]({{<ref \"./concepts/nodeclasses\" >}})). When a subnet becomes IP address constrained, EC2 may think that it can successfully launch an instance in the subnet; however, when the CNI tries to assign IPs to the pods, there are none remaining. In this case, your pod will stay in a `ContainerCreating` state until an IP address is freed in the subnet and the CNI can assign one to the pod.\n\n##### Solutions\n\n1. Use `topologySpreadConstraints` on `topology.kubernetes.io/zone` to spread your pods and nodes more evenly across zones\n2. Increase the IP address space (CIDR) for the subnets selected by your `EC2NodeClass`\n3. Use [custom networking](https://docs.aws.amazon.com/eks/latest/userguide/cni-custom-network.html) to assign separate IP address spaces to your pods and your nodes\n4. [Run your EKS cluster on IPv6](https://aws.github.io/aws-eks-best-practices/networking/ipv6/) (Note: IPv6 clusters have some known limitations which should be well-understood before choosing to use one)\n\nFor more troubleshooting information on why your pod may have a `FailedCreateSandbox` error, view the [EKS CreatePodSandbox Knowledge Center Post](https://repost.aws/knowledge-center/eks-failed-create-pod-sandbox).\n\n### Windows pods are failing with `FailedCreatedPodSandbox`\n\nThe following solution(s) may resolve your issue if you are seeing an error similar to the following when attempting to launch Windows pods. This error typically occurs if you have not enabled Windows support.\n\n```\nFailed to create pod sandbox: rpc error: code = Unknown desc = failed to setup network for sandbox \"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\": plugin type=\"vpc-bridge\" name=\"vpc\" failed (add): failed to parse Kubernetes args: pod does not have label vpc.amazonaws.com/PrivateIPv4Address\n```\n\n#### Solutions\n1. See [Enabling Windows support](https://docs.aws.amazon.com/eks/latest/userguide/windows-support.html#enable-windows-support) for instructions on how to enable Windows support.\n\n### Windows pods fail to launch with image pull error\n\nThe following solution(s) may resolve your issue if you are seeing an error similar to the following when attempting to launch Windows pods.\n\n```\nFailed to pull image \"mcr.microsoft.com/windows/servercore:xxx\": rpc error: code = NotFound desc = failed to pull and unpack image \"mcr.microsoft.com/windows/servercore:xxx\": no match for platform in manifest: not found\n```\n\nThis error typically occurs in a scenario whereby a pod with a given container OS version attempts to be scheduled on an incompatible Windows host OS version.\nWindows requires the host OS version to match the container OS version.\n\n#### Solutions\n\n1. Define your pod's `nodeSelector` to ensure that your containers are scheduled on a compatible OS host version. To learn more, see [Windows container version compatibility](https://learn.microsoft.com/en-us/virtualization/windowscontainers/deploy-containers/version-compatibility).\n\n### Windows pods unable to resolve DNS\nCauses for DNS resolution failure may vary, but in the case where DNS resolution is working for Linux pods but not for Windows pods,\nthen the following solution(s) may resolve your issue.\n\n#### Solution(s)\n1. Verify that the instance role of the Windows node includes the RBAC permission group `eks:kube-proxy-windows` as shown below.\n   This group is required for Windows nodes because in Windows, `kube-proxy` runs as a process on the node, and as such, the node requires the necessary RBAC cluster permissions to allow access to the resources required by `kube-proxy`.\n   For more information, see https://docs.aws.amazon.com/eks/latest/userguide/windows-support.html.\n```yaml\n...\n  username: system:node:{{EC2PrivateDNSName}}\n  groups:\n    - system:bootstrappers\n    - system:nodes\n    - eks:kube-proxy-windows # This is required for Windows DNS resolution to work\n...\n```\n\n### Karpenter incorrectly computes available resources for a node\n\nWhen creating nodes, the allocatable resources Karpenter computed (as seen in logs and `nodeClaim.status.allocatable`) do not always match the allocatable resources on the created node (`node.status.allocatable`) due to some amount of memory being reserved for the hypervisor and underlying OS.\nKarpenter uses the results from `ec2:DescribeInstanceTypes` along with a cache for tracking observed memory capacity to determine the resources available on a node launched with a given instance type.\nThe following computation is used to determine allocatable CPU, memory, and ephemeral storage based on the results returned from `ec2:DescribeInstanceTypes`.\n\n```\n### cpu\nnodeClaim.allocatable.cpu = instance.cpu - kubeReserved.cpu - systemReserved.cpu\n\n### memory\n# If first time launching this instance-type + AMI pair\nnodeClaim.allocatable.memory = (instance.memory  * (1.0 - VM_MEMORY_OVERHEAD_PERCENT)) - kubeReserved.memory - systemReserved.memory - max(evictionSoft.memory.available, evictionHard.memory.available)\n# For subsequent nodes where cached instance-type capacity is available\nnodeClaim.allocatable.memory = ( cached.instance.memory - kubeReserved.memory - systemReserved.memory - max(evictionSoft.memory.available, evictionHard.memory.available)\n\n### ephemeral-storage\nnodeClaim.allocatable.ephemeralStorage = instance.storage - kubeReserved.ephemeralStorage - systemReserved.ephemeralStorage - max(evictionSoft.nodefs.available, evictionHard.nodefs.available)\n```\n\nMost of these factors directly model user configuration (i.e. the KubeletConfiguration options).\nOn the other hand, `VM_MEMORY_OVERHEAD_PERCENT` models an implicit reduction of available memory that varies by instance type and AMI.\nHowever, once a node is created, the actual memory capacity on that node (node.status.capacity.memory) is checked by the controller. The controller caches the observed memory for any subsequent nodes launched with the same AMI and instance type pair, improving accuracy for future nodes.\nFor new combinations of AMI and instance type (i.e., when this pair is launched for the first time), Karpenter will still use the VM_MEMORY_OVERHEAD_PERCENT value as a fallback for estimating allocatable memory.\nThis fallback is necessary because Karpenter can't compute the exact value being modeled ahead of time, so `VM_MEMORY_OVERHEAD_PERCENT` is a [global setting]({{< ref \"./reference/settings.md\" >}}) used across all instance type and AMI combinations.\nThe default value (`7.5%`) has been tuned to closely match reality for the majority of instance types while not overestimating.\nAs a result, Karpenter will typically underestimate the memory available on a node for a given instance type.\nIf you know the real `VM_MEMORY_OVERHEAD_PERCENT` for the specific instances you're provisioning in your cluster, you can tune this value to tighten the bound.\nHowever, this should be done with caution.\nA `VM_MEMORY_OVERHEAD_PERCENT` which results in Karpenter overestimating the memory available on a node can result in Karpenter launching nodes which are too small for your workload.\n\nTo detect instances of Karpenter overestimating resource availability, the following status condition can be monitored:\n\n```bash\n$ kg nodeclaim $NODECLAIM_NAME -o jsonpath='{.status.conditions[?(@.type==\"ConsistentStateFound\")]}'\n```\n\n```json\n{\n    \"type\": \"ConsistentStateFound\",\n    \"status\": \"False\",\n    \"reason\": \"ConsistencyCheckFailed\",\n    \"message\": \"Consistency Check Failed\",\n    \"lastTransitionTime\": \"2024-08-19T20:02:16Z\"\n}\n```\n\nThis can be spot checked like shown above, or monitored via the following metric:\n\n```\noperator_status_condition_count{type=\"ConsistentStateFound\",kind=\"NodeClaim\",status=\"False\"}\n```\n\n### Karpenter Is Unable to Satisfy Topology Spread Constraint\n\nWhen scheduling pods with TopologySpreadConstraints, Karpenter will attempt to spread the pods across all eligible domains.\nEligible domains are determined based on the pod's requirements, e.g. node affinity terms.\nHowever, pod's do not inherit the requirements of compatible NodePools.\n\nFor example, consider the following NodePool and Deployment specs:\n\n```yaml\nappVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\nspec:\n  template:\n    spec:\n      requirements:\n      - key: topology.kubernetes.io/zone\n        operator: Exists\n---\nappVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: np-zonal-constraint\n  labels:\n    project: zone-specific-project\nspec:\n  template:\n    spec:\n      requirements:\n      - key: topology.kubernetes.io/zone\n        operator: In\n        values: ['us-east-1a', 'us-east-1b']\n      # ...\n---\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: inflate\nspec:\n  replicas: 3\n  selector:\n    matchLabels:\n      app: inflate\n  template:\n    metadata:\n      labels:\n        app: inflate\n    spec:\n      nodeSelector:\n        project: zone-specific-project\n      topologySpreadConstraints:\n        - maxSkew: 1\n          topologyKey: topology.kubernetes.io/zone\n          whenUnsatisfiable: DoNotSchedule\n          labelSelector:\n            matchLabels:\n              app: inflate\n```\n\nThis cluster has subnets in three availability zones: `us-east-1a`, `us-east-1b`, and `us-east-1c`.\nNodePool `default` can launch instance types in all three zones, but `np-zonal-constraint` is constrained to two.\nSince Karpenter uses the pod's requirements to derive eligible domains, and the pod does not have any zonal constraints, all three availability zones are considered eligible domains.\nHowever, the only NodePool compatible with the pod's requirements is `np-zonal-constraints`, which can only create instances in two of the three eligible domains.\nKarpenter will succeed to launch the first two instances, for the first two replicas, but will fail to provision capacity for subsequent replicas since it can't provision capacity in the third domain.\n\nIn order to prevent these scenarios, you should ensure that all eligible domains for a pod can be provisioned by compatible NodePools, or constrain the pod such that it's eligble domains match those of the NodePools.\nTo resolve this specific issue, zonal constraints should be added to the pod spec to match the requirements of `np-zonal-constraint`:\n```yaml\nnodeAffinity:\n  requiredDuringSchedulingIgnoredDuringExecution:\n    nodeSelectorTerms:\n      - matchExpressions:\n          - key: topology.kubernetes.io/zone\n            operator: In\n            values: ['us-east-1a', 'us-east-1b']\n```\n\n### Log message of `no instance type met the scheduling requirements or had a required offering` is reported\n\nThis error suggests that there is no instance type available that meets the pod's scheduling requirements. A pod may have resource requests that necessitate a minimum instance size. If the pod is confined to a Node Pool with a specific instance family and size, it might not find an instance type that aligns with its resource needs. Additionally, resource requests from daemonsets are considered when determining if an instance type is compatible with the pod.\n\n\nThe phrase `had a required offering` pertains to the availability of an instance type in a specific location, such as an availability zone. This error can occur if a pod is restricted to a particular availability zone. For instance, consider a pod in a stateful set that previously had an EBS volume attached. If the subnet where the pod is scheduled changes, the pod might end up in a different availability zone than the EBS volume it needs to attach to. This mismatch in availability zones can lead to an error related to the required offering.\n\n## Deprovisioning\n\n### Nodes not deprovisioned\n\nThere 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.\n\n#### Initialization\n\nKarpenter 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]({{<ref \"#nodes-not-initialized\" >}}).\n\n#### Disruption budgets\n\nKarpenter 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.\nKubernetes PDBs let you specify how much of a Deployment, ReplicationController, ReplicaSet, or StatefulSet must be protected from disruptions when pod eviction requests are made.\n\nPDBs can be used to strike a balance by protecting the application's availability while still allowing a cluster administrator to manage the cluster.\nHere 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.\n\n```yaml\napiVersion: policy/v1\nkind: PodDisruptionBudget\nmetadata:\n  name: myapp-pdb\nspec:\n  minAvailable: 4\n  selector:\n    matchLabels:\n      app: myapp\n```\n\nYou can set `minAvailable` or `maxUnavailable` as integers or as a percentage.\nReview 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/).\n\n#### `karpenter.sh/do-not-disrupt` Annotation\n\nIf a pod exists with the annotation `karpenter.sh/do-not-disrupt: 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-disrupt` 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.\n\nIf you want to terminate a node with a `do-not-disrupt` pod, you can simply remove the annotation and the deprovisioning process will continue.\n\n#### Scheduling Constraints (Consolidation Only)\n\nConsolidation 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.\n\n## Node Launch/Readiness\n\n### Node not created\n\nIn some circumstances, Karpenter controller can fail to start up a node.\nFor 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:\n\n```bash\n2022-01-19T18:22:23.366Z ERROR controller.provisioning Could not launch node, launching instances, with fleet error(s), InvalidBlockDeviceMapping: Invalid device name /dev/xvda; ...\n```\n\nYou can see errors like this by viewing Karpenter controller logs:\n\n```bash\nkubectl get pods -A | grep karpenter\n```\n\n```bash\nkarpenter     karpenter-XXXX   2/2     Running   2          21d\n```\n\n```bash\nkubectl logs karpenter-XXXX -c controller -n karpenter | less\n```\n\n### Nodes not initialized\n\nKarpenter 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.\n\nKarpenter determines node initialization using three factors:\n\n1. Node readiness\n2. Expected resources are registered\n3. NodePool startup taints are removed\n\n#### Node Readiness\n\nKarpenter checks the `Ready` condition type and expects it to be `True`.\n\nTo see troubleshooting around what might be preventing nodes from becoming ready, see [Node NotReady]({{<ref \"#node-notready\" >}})\n\n#### Expected resources are registered\n\nKarpenter 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`.\n\nCommon resources that don't register and leave nodes in a non-initialized state:\n\n1. `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\n2. `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.\n\n#### NodePool startup taints are removed\n\nKarpenter expects all startup taints specified in `.spec.template.spec.startupTaints` of the NodePool to be completely removed from node `.spec.taints` before it will consider the node initialized.\n\n### Node NotReady\n\nThere are cases where the node starts, but fails to join the cluster and is marked \"Node NotReady\".\nReasons that a node can fail to join the cluster include:\n\n- Permissions\n- Security Groups\n- Networking\n\nThe easiest way to start debugging is to connect to the instance and get the Kubelet logs.  For an AL2 based node:\n\n```bash\n# List the nodes managed by Karpenter\nkubectl get node -l karpenter.sh/nodepool\n# Extract the instance ID (replace <node-name> with a node name from the above listing)\nINSTANCE_ID=$(kubectl get node <node-name> -ojson | jq -r \".spec.providerID\" | cut -d \\/ -f5)\n# Connect to the instance\naws ssm start-session --target $INSTANCE_ID\n# Check Kubelet logs\nsudo journalctl -u kubelet\n```\n\nFor Bottlerocket, you'll need to get access to the root filesystem:\n\n```bash\n# List the nodes managed by Karpenter\nkubectl get node -l karpenter.sh/nodepool\n# Extract the instance ID (replace <node-name> with a node name from the above listing)\nINSTANCE_ID=$(kubectl get node <node-name> -ojson | jq -r \".spec.providerID\" | cut -d \\/ -f5)\n# Connect to the instance\naws ssm start-session --target $INSTANCE_ID\n# Enter the admin container\nenter-admin-container\n# Check Kubelet logs\njournalctl -D /.bottlerocket/rootfs/var/log/journal -u kubelet.service\n```\n\nHere are examples of errors from Node NotReady issues that you might see from `journalctl`:\n\n- The runtime network not being ready can reflect a problem with IAM role permissions:\n\n  ```\n  KubeletNotReady runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:Network plugin returns error: cni plugin not initialized\n    ```\n\n  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:\n\n  ```bash\n  kubectl get pods -n kube-system | grep aws-node\n  ```\n\n  ```\n  aws-node-?????             1/1     Running   2          20d\n  ```\n\n  ```bash\n  kubectl logs aws-node-????? -n kube-system\n  ```\n\n- Not being able to register the node with the Kubernetes API server indicates an error condition like the following:\n\n  ```\n  Attempting to register node\" node=\"ip-192-168-67-130.ec2.internal\"\n  Unable to register node with API server\" err=\"Unauthorized\" node=\"ip-192-168-67-130.ec2.internal\"\n  Error getting node\" err=\"node \\\"ip-192-168-67-130.ec2.internal\\\" not found\n  Failed to contact API server when waiting for CSINode publishing: Unauthorized\n  ```\n\n  Check the ConfigMap to check whether or not the correct node role is there. For example:\n\n  ```bash\n  kubectl get configmaps -n kube-system aws-auth -o yaml\n  ```\n\n  ```yaml\n  apiVersion: v1\n  data:\n  mapRoles: |\n     - groups:\n        - system:bootstrappers\n        - system:nodes\n        rolearn: arn:aws:iam::973227887653:role/eksctl-johnw-karpenter-demo-NodeInstanceRole-72CV61KQNOYS\n        username: system:node:{{EC2PrivateDNSName}}\n     - groups:\n        - system:bootstrappers\n        - system:nodes\n        rolearn: arn:aws:iam::973227887653:role/KarpenterNodeRole-johnw-karpenter-demo\n        username: system:node:{{EC2PrivateDNSName}}\n  mapUsers: |\n      []\n  kind: ConfigMap\n  ...\n    ```\n\nIf 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:\n\n- Your UserData (in `/var_log/cloud-init-output.log` and `/var_log/cloud-init.log`)\n- Your kubelets (`/kubelet/kubelet.log`)\n- Your networking pod logs (`/var_log/aws-node`)\n\nReach 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.\n\n### Nodes stuck in pending and not running the kubelet due to outdated CNI\n\nIf 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`:\n\n> No entry for c6i.xlarge in /etc/eks/eni-max-pods.txt\n\nThis 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).\n\n### Node terminates before ready on failed encrypted EBS volume\n\nIf 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.\nThis issue also applies to [Block Device Mappings]({{<ref \"./concepts/nodeclasses/#block-device-mappings\" >}}) specified in the EC2NodeClass.\nIn either case, this results in the node terminating almost immediately upon creation.\n\nKeep in mind that it is possible that EBS Encryption can be enabled without your knowledge.\nEBS encryption could have been enabled by an account administrator or by default on a per region basis.\nSee [Encryption by default](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html#encryption-by-default) for details.\n\nTo 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:\n\n```json\n[\n    {\n        \"Sid\": \"Allow access through EBS for all principals in the account that are authorized to use EBS\",\n        \"Effect\": \"Allow\",\n        \"Principal\": {\n            \"AWS\": \"*\"\n        },\n        \"Action\": [\n            \"kms:Encrypt\",\n            \"kms:Decrypt\",\n            \"kms:ReEncrypt*\",\n            \"kms:GenerateDataKey*\",\n            \"kms:CreateGrant\",\n            \"kms:DescribeKey\"\n        ],\n        \"Resource\": \"*\",\n        \"Condition\": {\n            \"StringEquals\": {\n            \"kms:ViaService\": \"ec2.${AWS_REGION}.amazonaws.com\",\n            \"kms:CallerAccount\": \"${AWS_ACCOUNT_ID}\"\n            }\n        }\n    },\n    {\n        \"Sid\": \"Allow direct access to key metadata to the account\",\n        \"Effect\": \"Allow\",\n        \"Principal\": {\n            \"AWS\": \"arn:aws:iam::${AWS_ACCOUNT_ID}:root\"\n        },\n        \"Action\": [\n            \"kms:Describe*\",\n            \"kms:Get*\",\n            \"kms:List*\",\n            \"kms:RevokeGrant\"\n        ],\n        \"Resource\": \"*\"\n    }\n]\n```\n\n### Node is not deleted, even though `ttlSecondsUntilExpired` is set or the node is empty\n\nThis 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.\n\n### Log message of `inflight check failed for node, Expected resource \"vpc.amazonaws.com/pod-eni\" didn't register on the node` is reported\n\nThis error indicates that the `vpc.amazonaws.com/pod-eni` resource was never reported on the node. 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.\n\n### AWS Node Termination Handler (NTH) interactions\nKarpenter [doesn't currently support draining and terminating on spot rebalance recommendations]({{< ref \"concepts/disruption#interruption\" >}}). Users who want support for both drain and terminate on spot interruption as well as drain and termination on spot rebalance recommendations may install Node Termination Handler (NTH) on their clusters to support this behavior.\n\nThese two components do not share information between each other, meaning if you have drain and terminate functionality enabled on NTH, NTH may remove a node for a spot rebalance recommendation. Karpenter will replace the node to fulfill the pod capacity that was being fulfilled by the old node; however, Karpenter won't be aware of the reason that that node was terminated. This means that Karpenter may launch the same instance type that was just deprovisioned, causing a spot rebalance recommendation to be sent again. This can result in very short-lived instances where NTH continually removes nodes and Karpeneter re-launches the same instance type over and over again.\n\nKarpenter doesn't recommend reacting to spot rebalance recommendations when running Karpenter with spot nodes; however, if you absolutely require this functionality, note that the above scenario is possible.\nSpot instances are time limited and, therefore, interruptible. When a signal is sent by AWS, it triggers actions from NTH and Karpenter, where the former signals a shutdown and the later provisions, creating a recursive situation.\nThis can be mitigated by either completely removing NTH or by setting the following values:\n\n* enableSpotInterruptionDraining: If false, do not drain nodes when the spot interruption termination notice is received. Only used in IMDS mode.\nenableSpotInterruptionDraining: false\n\n* enableRebalanceDrainin: If true, drain nodes when the rebalance recommendation notice is received. Only used in IMDS mode.\nenableRebalanceDraining: false\n\n## EC2NodeClass Validation\n\n### Force Validation Refresh\n\nIf you believe that Karpenter's EC2NodeClass validation cache is stale (e.g., after updating IAM permissions), you can force Karpenter to refresh the cache by adding any annotation on the EC2NodeClass.\n\n## Pricing\n\n### Stale pricing data on isolated subnet\n\nThe following pricing-related error occurs if you are running Karpenter in an isolated private subnet (no Internet egress via IGW or NAT gateways):\n\n```text\nERROR   controller.aws.pricing  updating on-demand pricing, RequestError: send request failed\ncaused by: Post \"https://api.pricing.us-east-1.amazonaws.com/\": dial tcp 52.94.231.236:443: i/o timeout; RequestError: send request failed\ncaused 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\"}\n```\n\nThis 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).\nTo 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.\nTo disable pricing lookups and avoid the error messages, set the `AWS_ISOLATED_VPC` environment variable (or the `--aws-isolated-vpc` option) to true.\nSee [Environment Variables / CLI Flags]({{<ref \"./reference/settings#environment-variables--cli-flags\" >}}) for details.\n"
  },
  {
    "path": "website/content/en/preview/upgrading/_index.md",
    "content": "---\ntitle: \"Upgrading\"\nlinkTitle: \"Upgrading\"\nweight: 30\ndescription: >\n  Upgrading Karpenter guide and reference\ncascade:\n  type: docs\n---\n\n"
  },
  {
    "path": "website/content/en/preview/upgrading/compatibility.md",
    "content": "---\ntitle: \"Compatibility\"\nlinkTitle: \"Compatibility\"\nweight: 20\ndescription: >\n  Compatibility issues for Karpenter\n---\n\n# Compatibility\n\nTo make upgrading easier we aim to minimize the introduction of breaking changes.\nBefore you begin upgrading Karpenter, consider Karpenter compatibility issues related to Kubernetes and the NodePool API (previously Provisioner).\n\n## Compatibility Matrix\n\n[comment]: <> (the content below is generated from hack/docs/compatibilitymatrix_gen/main.go)\n\n| KUBERNETES |   1.29   |   1.30   |   1.31    |  1.32   |  1.33   |  1.34   |  1.35   |\n|------------|----------|----------|-----------|---------|---------|---------|---------|\n| karpenter  | \\>= 0.34 | \\>= 0.37 | \\>= 1.0.5 | \\>= 1.2 | \\>= 1.5 | \\>= 1.6 | \\>= 1.9 |\n\n[comment]: <> (end docs generated content from hack/docs/compatibilitymatrix_gen/main.go)\n\n## Compatibility issues\n\nWhen we introduce a breaking change, we do so only as described in this document.\n\nKarpenter follows [Semantic Versioning 2.0.0](https://semver.org/) in its stable release versions, while in\nmajor version zero (`0.y.z`) [anything may change at any time](https://semver.org/#spec-item-4).\nHowever, to further protect users during this phase we will only introduce breaking changes in minor releases (releases that increment y in x.y.z).\nNote this does not mean every minor upgrade has a breaking change as we will also increment the\nminor version when we release a new feature.\n\nUsers should therefore check to see if there is a breaking change every time they are upgrading to a new minor version.\n\n### How Do We Break Incompatibility?\n\nWhen there is a breaking change we will:\n\n* Increment the minor version when in major version 0\n* Add a permanent separate section named `upgrading to x.y.z+` under [release upgrade notes](#release-upgrade-notes)\n  clearly explaining the breaking change and what needs to be done on the user side to ensure a safe upgrade\n* 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\n\n### How Do We Find Incompatibilities?\n\nBesides the peer review process for all changes to the code base we also do the followings in order to find\nincompatibilities:\n* (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\n* (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\n\n### Security Patches\n\nWhile we are in major version 0 we will not release security patches to older versions.\nRather we provide the patches in the latest versions.\nWhen at major version 1 we will have an EOL (end of life) policy where we provide security patches\nfor a subset of older versions and deprecate the others.\n\n## Release Types\n\nKarpenter offers three types of releases. This section explains the purpose of each release type and how the images for each release type are tagged in our [public image repository](https://gallery.ecr.aws/karpenter).\n\n### Stable Releases\n\nStable releases are the only recommended versions for production environments. Stable releases are tagged with a semantic version (e.g. `0.35.0`). Note that stable releases prior to `0.35.0` are prefixed with a `v` (e.g. `v0.34.0`).\n\n### Release Candidates\n\nWe consider having release candidates for major and important minor versions. Our release candidates are tagged like `x.y.z-rc.0`, `x.y.z-rc.1`. The release candidate will then graduate to `x.y.z` as a stable release.\nBy 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.\nNote that, like the stable releases, release candidates prior to `0.35.0` are prefixed with a `v`.\n\n### Snapshot Releases\n\nWe release a snapshot release for every commit that gets merged into [`aws/karpenter-provider-aws`](https://www.github.com/aws/karpenter-provider-aws). This enables users to immediately try a new feature or fix right after it's merged rather than waiting days or weeks for release.\n\nSnapshot releases are not made available in the same public ECR repository as other release types, they are instead published to a separate private ECR repository.\nHelm charts are published to `oci://{{< param \"snapshot_repo.account_id\" >}}.dkr.ecr.{{< param \"snapshot_repo.region\" >}}.amazonaws.com/karpenter/snapshot/karpenter` and are tagged with the git commit hash prefixed by the Karpenter major version (e.g. `0-fc17bfc89ebb30a3b102a86012b3e3992ec08adf`).\nAnyone with an AWS account can pull from this repository, but must first authenticate:\n\n```bash\naws ecr get-login-password --region {{< param \"snapshot_repo.region\" >}} | docker login --username AWS --password-stdin {{< param \"snapshot_repo.account_id\" >}}.dkr.ecr.{{< param \"snapshot_repo.region\" >}}.amazonaws.com\n```\n\n{{% alert title=\"Note\" color=\"warning\" %}}\nSnapshot releases are suitable for testing, and troubleshooting but they should not be used in production environments. Snapshot releases are ephemeral and will be removed 90 days after they were published.\n{{% /alert %}}\n"
  },
  {
    "path": "website/content/en/preview/upgrading/upgrade-guide.md",
    "content": "---\ntitle: \"Upgrade Guide\"\nlinkTitle: \"Upgrade Guide\"\nweight: 10\ndescription: >\n  Learn about upgrading Karpenter\n---\n\nKarpenter is a controller that runs in your cluster, but it is not tied to a specific Kubernetes version, as the Cluster Autoscaler is.\nUse your existing upgrade mechanisms to upgrade your core add-ons in Kubernetes and keep Karpenter up to date on bug fixes and new features.\nThis guide contains information needed to upgrade to the latest release of Karpenter, along with compatibility issues you need to be aware of when upgrading from earlier Karpenter versions.\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nWith the release of Karpenter v1.0.0, the Karpenter team has dropped support for karpenter versions v0.36 and below. We recommend upgrading to the latest version of Karpenter and keeping Karpenter up-to-date for bug fixes and new features.\n{{% /alert %}}\n\nWhen upgrading Karpenter in production environments, implementing a robust CI/CD pipeline approach is crucial. Improper upgrades can lead to significant disruptions including failed node provisioning, orphaned nodes, interrupted workloads, and potential cost implications from unmanaged scaling. Given Karpenter's critical role in cluster scaling and workload management, untested upgrades could result in production outages or resource allocation issues that directly impact application availability and performance. Therefore, we recommend following these structured steps:\n\n#### Pre-upgrade Validation\n\n- Validate all required IAM permissions (node role, controller role)\n- Check webhook configurations\n- Back up existing NodePool and NodeClass configurations\n- Document current version and settings\n\n#### Staging Environment Setup\n\n- Create or verify staging environment\n- Update version tags in Helm values or manifests\n- Configure automated validation tests\n\n#### Staging Deployment\n\n- Deploy to staging environment\n- Run comprehensive tests including node provisioning\n- Verify controller health\n- Test NodePool and NodeClass functionality\n- Monitor system behavior\n\n#### Production Approval and Deployment\n\n- Require manual approval/review\n- Schedule maintenance window if needed\n- Execute production deployment\n- Monitor deployment progress\n- Verify all components are functioning\n\n#### Post-Deployment\n\n- Monitor system health\n- Verify node provisioning\n- Keep rollback configurations accessible\n- Update documentation\n\nHere are few recommended CI/CD Pipeline Options:\n\n- GitHub Actions - Excellent for GitHub-hosted repositories with built-in Kubernetes support\n- GitLab CI - Strong container-native pipeline with integrated Kubernetes functionality\n- ArgoCD - Specialized for GitOps workflows with Kubernetes\n- AWS CodePipeline - Native integration with EKS and AWS services\n- Flux - Open-source GitOps tool for Kubernetes with automatic deployment capabilities\n\nEach pipeline tool can be configured to handle the Karpenter upgrade workflow, but choose based on your existing infrastructure, team expertise, and specific requirements for automation and integration.\n\n\n### CRD Upgrades\n\nKarpenter ships with a few Custom Resource Definitions (CRDs). These CRDs are published:\n* 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:\n  ```bash\n  KARPENTER_NAMESPACE=kube-system\n  helm upgrade --install karpenter-crd oci://public.ecr.aws/karpenter/karpenter-crd --version x.y.z --namespace \"${KARPENTER_NAMESPACE}\" --create-namespace\n  ```\n* As part of the helm chart [karpenter](https://gallery.ecr.aws/karpenter/karpenter) ([source](https://github.com/aws/karpenter/blob/main/charts/karpenter/crds)).\n  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.\n  Subsequent chart upgrades will not add or remove CRDs, even if the CRDs have changed.\n\nCRDs are coupled to the version of Karpenter, and should be updated along with Karpenter.\nFor this reason, we recommend using the independent `karpenter-crd` chart to manage CRDs.\n\n{{% alert title=\"Note\" color=\"warning\" %}}\nIf you get the error `invalid ownership metadata; label validation error:` while installing the `karpenter-crd` chart from an older version of Karpenter, follow the [Troubleshooting Guide]({{<ref \"../troubleshooting/#helm-error-when-installing-the-karpenter-crd-chart\" >}}) for details on how to resolve these errors.\n{{% /alert %}}\n\n<!--\nWHEN CREATING A NEW SECTION OF THE UPGRADE GUIDANCE FOR NEWER VERSIONS, ENSURE THAT YOU COPY THE BETA API ALERT SECTION FROM THE LAST RELEASE TO PROPERLY WARN USERS OF THE RISK OF UPGRADING WITHOUT GOING TO 0.32.x FIRST\n-->\n\n### Upgrading to `1.10.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter `1.1.0` drops the support for `v1beta1` APIs.\n**Do not** upgrade to `1.1.0`+ without following the [Migration Guide]({{<ref \"../../v1.0/upgrading/v1-migration.md#before-upgrading-to-v110\">}}).\n{{% /alert %}}\n\n* In the [getting started guide's cloudformation template]({{<ref \"../../docs/reference/cloudformation/#rules\">}}), \n  there is an extra `detail-type` for EventBridge rules to capture Capacity Reservation Instance Interruption warnings. \n  If you are using interruptible ODCRs, you will need to update your EventBridge rules to add this `detail-type`.\n\nFull Changelog:\n* https://github.com/aws/karpenter-provider-aws/releases/tag/v1.10.0\n* https://github.com/kubernetes-sigs/karpenter/releases/tag/v1.10.0\n\n### Upgrading to `1.9.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter `1.1.0` drops the support for `v1beta1` APIs.\n**Do not** upgrade to `1.1.0`+ without following the [Migration Guide]({{<ref \"../../v1.0/upgrading/v1-migration.md#before-upgrading-to-v110\">}}).\n{{% /alert %}}\n\n* The IAM policy in the getting started guide's cloudformation template has been split into 5 policies (addresses\n  [aws/karpenter-provider-aws#7874](https://github.com/aws/karpenter-provider-aws/issues/7874)). If you've taken a\n  dependency on the policy created by this cloudformation template, you will need to update your IAM role to attach all\n  5 policies. There has not been any change to the permissions granted by the policies since 1.8.\n\nFull Changelog:\n* https://github.com/aws/karpenter-provider-aws/releases/tag/v1.9.0\n* https://github.com/kubernetes-sigs/karpenter/releases/tag/v1.9.0\n\n\n### Upgrading to `1.8.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter `1.1.0` drops the support for `v1beta1` APIs.\n**Do not** upgrade to `1.1.0`+ without following the [Migration Guide]({{<ref \"../../v1.0/upgrading/v1-migration.md#before-upgrading-to-v110\">}}).\n\nKarpenter `v1.8.4` release contains a regression which may prevent Karpenter from scheduling pods with specific TopologySpreadConstraint configurations. Please do not upgrade to this version. For more details, see the following issue: https://github.com/kubernetes-sigs/karpenter/issues/2785\n{{% /alert %}}\n\n* This version adds support for [Static Capacity](https://github.com/kubernetes-sigs/karpenter/pull/2521). Make sure to upgrade your karpenter CRDs to use this feature.\n\nFull Changelog:\n* https://github.com/aws/karpenter-provider-aws/releases/tag/v1.8.0\n* https://github.com/kubernetes-sigs/karpenter/releases/tag/v1.8.0\n\n### Upgrading to `1.7.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter `1.1.0` drops the support for `v1beta1` APIs.\n**Do not** upgrade to `1.1.0`+ without following the [Migration Guide]({{<ref \"../../v1.0/upgrading/v1-migration.md#before-upgrading-to-v110\">}}).\n{{% /alert %}}\n\n* Instance profile path changes:\n  - Karpenter now creates instance profiles with a specific path structure `/karpenter/{region}/{cluster-name}/{nodeclass-uid}/` instead of the generic root path `/`\n  - This change helps with better organization and management of instance profiles\n  - No action is required for existing instance profiles, but new ones will use this path structure\n  - Additional IAM permissions required:\n    - The following new IAM permissions are required for the Karpenter controller role:\n      - `iam:ListInstanceProfiles`: Required for managing instance profiles\n* The `karpenter_pods_pods_drained_total` metric has been renamed to `karpenter_pods_drained_total`\n* The `karpenter_nodeclaims_disrupted_total` metric reason `liveness` has been renamed to `registration_timeout`\n* Pods with `ResourceClaim` requests are explicitly ignored. Older revisions of Karpenter are not aware of the field and would ignore those requests. DRA is not currently supported by Karpenter.\n\nFull Changelog:\n* https://github.com/aws/karpenter-provider-aws/releases/tag/v1.7.0\n* https://github.com/kubernetes-sigs/karpenter/releases/tag/v1.7.0\n\n### Upgrading to `1.6.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter `1.1.0` drops the support for `v1beta1` APIs.\n**Do not** upgrade to `1.1.0`+ without following the [Migration Guide]({{<ref \"../../v1.0/upgrading/v1-migration.md#before-upgrading-to-v110\">}}).\n{{% /alert %}}\n\n* Native ODCR support has graduated to beta and is enabled by default.\n  If you were previously using open ODCRs with Karpenter and have not already migrated to native ODCR support, review the [native ODCR support guide]({{< relref \"../tasks/odcrs\" >}}) before upgrading.\n* Support a new configuration option `MinValuesPolicy` which controls how the Karpenter scheduler treats min values. Options include 'Strict' (fails scheduling when min values can't be met) and 'BestEffort' (relaxes min values when they can't be met). Default is 'Strict' to preserve existing behavior.\n* Support a new configuration option `DisableDryRun` which disables the dry run calls made during EC2NodeClass validation (1.6.2+).\n\nFull Changelog:\n* https://github.com/aws/karpenter-provider-aws/releases/tag/v1.6.0\n* https://github.com/kubernetes-sigs/karpenter/releases/tag/v1.6.0\n\n### Upgrading to `1.5.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter `1.1.0` drops the support for `v1beta1` APIs.\n**Do not** upgrade to `1.1.0`+ without following the [Migration Guide]({{<ref \"../../v1.0/upgrading/v1-migration.md#before-upgrading-to-v110\">}}).\n{{% /alert %}}\n\n* No breaking changes 🎉\n\nFull Changelog:\n* https://github.com/aws/karpenter-provider-aws/releases/tag/v1.5.0\n* https://github.com/kubernetes-sigs/karpenter/releases/tag/v1.5.0\n\n### Upgrading to `1.4.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter `1.1.0` drops the support for `v1beta1` APIs.\n**Do not** upgrade to `1.1.0`+ without following the [Migration Guide]({{<ref \"../../v1.0/upgrading/v1-migration.md#before-upgrading-to-v110\">}}).\n{{% /alert %}}\n\n* No breaking changes 🎉\n\nFull Changelog:\n* https://github.com/aws/karpenter-provider-aws/releases/tag/v1.4.0\n* https://github.com/kubernetes-sigs/karpenter/releases/tag/v1.4.0\n\n### Upgrading to `1.3.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter `1.1.0` drops the support for `v1beta1` APIs.\n**Do not** upgrade to `1.1.0`+ without following the [Migration Guide]({{<ref \"../../v1.0/upgrading/v1-migration.md#before-upgrading-to-v110\">}}).\n{{% /alert %}}\n\n* `karpenter_ignored_pod_count` alpha metric had its name changed to `karpenter_scheduler_ignored_pod_count`\n* With the `ReservedCapacity` feature flag, Karpenter introduces a new `karpenter.sh/capacity-type` value (`reserved`). This means any applications that explicitly select on `on-demand` with a `nodeSelector` and want to utilize ODCR capacity may need to update their requirements to use `nodeAffinity` to opt-in to using both `reserved` and `on-demand` capacity.\n\n### Upgrading to `1.2.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter `1.1.0` drops the support for `v1beta1` APIs.\n**Do not** upgrade to `1.1.0`+ without following the [Migration Guide]({{<ref \"../../v1.0/upgrading/v1-migration.md#before-upgrading-to-v110\">}}).\n{{% /alert %}}\n\n* We have recently updated our labels on `karpenter_voluntary_disruption_queue_failures_total` and `karpenter_nodeclaims_disrupted_total` reason label from camille case to snake case. Therefore these reason labels values on those metrics have now been update as such:\n  - Drifted -> drifted\n  - Empty -> empty\n  - Expired -> expired\n  - Underutilized -> underutilized\n* Nodeclass status and termination controllers have been merged into a single `nodeclass` controller. If you are relying on logs or metrics for `nodeclass.termination` or `nodeclass.status` controllers, please make sure that you update them to reference the new `nodeclass` controller.\n\n### Upgrading to `1.1.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter `1.1.0` drops the support for `v1beta1` APIs.\n**Do not** upgrade to `1.1.0`+ without following the [Migration Guide]({{<ref \"../../v1.0/upgrading/v1-migration.md#before-upgrading-to-v110\">}}).\n{{% /alert %}}\n\n* Support for the `v1beta1` compatiblity annotations have been dropped. Ensure you have completed migration before upgrading to `v1.1.0`. Refer to the [migration guide]({{<ref \"../../v1.0/upgrading/v1-migration.md#kubelet-configuration-migration\">}}) for more details.\n* `nodeClassRef.group` and `nodeClassRef.kind` are strictly required. Ensure these values are set for all `NodePools` / `NodeClaims` before upgrading.\n* Bottlerocket AMIFamily now supports `instanceStorePolicy: RAID0`. This means that Karpenter will auto-generate userData to RAID0 your instance store volumes (similar to AL2 and AL2023) when specifying this value.\n  * Note: This userData configuration is _only_ valid on Bottlerocket v1.22.0+. If you are using an earlier version of a Bottlerocket image (< v1.22.0) with `amiFamily: Bottlerocket` and `instanceStorePolicy: RAID0`, nodes will fail to join the cluster.\n* The AWS Neuron accelerator well known name label (`karpenter.k8s.aws/instance-accelerator-name`) values now reflect their correct names of `trainium`, `inferentia`, and `inferentia2`. Previously, all Neuron accelerators were assigned the label name of `inferentia`.\n* Karpenter drops the internal `karpenter.k8s.aws/cluster` tag used for launch template management in favor of `eks:eks-cluster-name` and consistency with other Karpenter-provisioned resources\n* Generic operator metrics have been have been deprecated and replaced by resource-specific metrics.\n\n### Upgrading to `1.0.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter `1.0.0` introduces the `v1` APIs and uses [conversion webhooks](https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definition-versioning/#webhook-conversion) to support existing `v1beta1` APIs.\n**Do not** upgrade to `1.0.0`+ without following the [`v1` Migration Guide]({{<ref \"../../v1.0/upgrading/v1-migration.md\">}}).\n{{% /alert %}}\n\nRefer to the `v1` Migration Guide for the [full changelog]({{<ref \"../../v1.0/upgrading/v1-migration.md#changelog\">}}).\n\n### Upgrading to `0.37.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\n`0.33.0`+ _only_ supports Karpenter v1beta1 APIs and will not work with existing Provisioner, AWSNodeTemplate or Machine alpha APIs. Do not upgrade to `0.37.0`+ without first [upgrading to `0.32.x`]({{<ref \"#upgrading-to-0320\" >}}). This version supports both the alpha and beta APIs, allowing you to migrate all of your existing APIs to beta APIs without experiencing downtime.\n{{% /alert %}}\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nWebhooks have been re-enabled by default starting in `0.37.3` to faciliate migration to `v1.0`.\nIf your cluster has network policies that block Ingress then ports `8000`, `8001`, `8081`, `8443` will need to be allowlisted.\nYou may still choose to disable webhooks through the helm chart.\n{{% /alert %}}\n\n\n* Karpenter now adds a readiness status condition to the EC2NodeClass. Make sure to upgrade your Custom Resource Definitions before proceeding with the upgrade. Failure to do so will result in Karpenter being unable to provision new nodes.\n* Karpenter no longer updates the logger name when creating controller loggers. We now adhere to the controller-runtime standard, where the logger name will be set as `\"logger\": \"controller\"` always and the controller name will be stored in the structured value `\"controller\"`\n* Karpenter updated the NodeClass controller naming in the following way: `nodeclass` -> `nodeclass.status`, `nodeclass.hash`, `nodeclass.termination`\n* Karpenter's NodeClaim status conditions no longer include the `severity` field\n\n### Upgrading to `0.36.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\n`0.33.0`+ _only_ supports Karpenter v1beta1 APIs and will not work with existing Provisioner, AWSNodeTemplate or Machine alpha APIs. Do not upgrade to `0.36.0`+ without first [upgrading to `0.32.x`]({{<ref \"#upgrading-to-0320\" >}}). This version supports both the alpha and beta APIs, allowing you to migrate all of your existing APIs to beta APIs without experiencing downtime.\n{{% /alert %}}\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nv0.36.x introduces update to drift that restricts rollback. When rolling back from >=v0.36.0, note that v0.32.9+, v0.33.4+, v0.34.5+, v0.35.4+ are the patch versions that support rollback. If Karpenter is rolled back to an older patch version, Karpenter can potentially drift all the nodes in the cluster.\n{{% /alert %}}\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nWebhooks have been re-enabled by default starting in `0.36.5` to faciliate migration to `v1.0`.\nIf your cluster has network policies that block Ingress then ports `8000`, `8001`, `8081`, `8443` will need to be allowlisted.\nYou may still choose to disable webhooks through the helm chart.\n{{% /alert %}}\n\n* Karpenter changed the name of the `karpenter_cloudprovider_instance_type_price_estimate` metric to `karpenter_cloudprovider_instance_type_offering_price_estimate` to align with the new `karpenter_cloudprovider_instance_type_offering_available` metric. The `region` label was also dropped from the metric, since this can be inferred from the environment that Karpenter is running in.\n\n### Upgrading to `0.35.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\n`0.33.0`+ _only_ supports Karpenter v1beta1 APIs and will not work with existing Provisioner, AWSNodeTemplate or Machine alpha APIs. Do not upgrade to `0.35.0`+ without first [upgrading to `0.32.x`]({{<ref \"#upgrading-to-0320\" >}}). This version supports both the alpha and beta APIs, allowing you to migrate all of your existing APIs to beta APIs without experiencing downtime.\n{{% /alert %}}\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nWebhooks have been re-enabled by default starting in `0.35.8` to faciliate migration to `v1.0`.\nIf your cluster has network policies that block Ingress then ports `8000`, `8001`, `8081`, `8443` will need to be allowlisted.\nYou may still choose to disable webhooks through the helm chart.\n{{% /alert %}}\n\n* Karpenter OCI tags and Helm chart version are now valid semantic versions, meaning that the `v` prefix from the git tag has been removed and they now follow the `x.y.z` pattern.\n\n### Upgrading to `0.34.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\n`0.33.0`+ _only_ supports Karpenter v1beta1 APIs and will not work with existing Provisioner, AWSNodeTemplate or Machine alpha APIs. Do not upgrade to `0.34.0`+ without first [upgrading to `0.32.x`]({{<ref \"#upgrading-to-0320\" >}}). This version supports both the alpha and beta APIs, allowing you to migrate all of your existing APIs to beta APIs without experiencing downtime.\n{{% /alert %}}\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nThe Ubuntu EKS optimized AMI has moved from 20.04 to 22.04 for Kubernetes 1.29+. This new AMI version is __not currently__ supported for users relying on AMI auto-discovery with the Ubuntu AMI family. More details can be found in this [GitHub issue](https://github.com/aws/karpenter-provider-aws/issues/5572). Please review this issue before upgrading to Kubernetes 1.29 if you are using the Ubuntu AMI family. Upgrading to 1.29 without making any changes to your EC2NodeClass will result in Karpenter being unable to create new nodes.\n{{% /alert %}}\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nWebhooks have been re-enabled by default starting in `0.34.9` to faciliate migration to `v1.0`.\nIf your cluster has network policies that block Ingress then ports `8000`, `8001`, `8081`, `8443` will need to be allowlisted.\nYou may still choose to disable webhooks through the helm chart.\n{{% /alert %}}\n\n* Karpenter now supports `nodepool.spec.disruption.budgets`, which allows users to control the speed of disruption in the cluster. Since this requires an update to the Custom Resource, before upgrading, you should re-apply the new updates to the CRDs. Check out [Disruption Budgets]({{<ref \"../concepts/disruption#disruption-budgets\" >}}) for more.\n* With Disruption Budgets, Karpenter will disrupt multiple batches of nodes simultaneously, which can result in overall quicker scale-down of your cluster. Before `0.34.0`, Karpenter had a hard-coded parallelism limit for each type of disruption. In `0.34.0`+, Karpenter will now disrupt at most 10% of nodes for a given NodePool. There is no setting that will be perfectly equivalent with the behavior prior to `0.34.0`. When considering how to configure your budgets, please refer to the following limits for versions prior to `0.34.0`:\n  * `Empty Expiration / Empty Drift / Empty Consolidation`: infinite parallelism\n  * `Non-Empty Expiration / Non-Empty Drift / Single-Node Consolidation`: one node at a time\n  * `Multi-Node Consolidation`: max 100 nodes\n* To support Disruption Budgets, `0.34.0`+ includes critical changes to Karpenter's core controllers, which allows Karpenter to consider multiple batches of disrupting nodes simultaneously. This increases Karpenter's performance with the potential downside of higher CPU and memory utilization from the Karpenter pod. While the magnitude of this difference varies on a case-by-case basis, when upgrading to Karpenter `0.34.0`+, please note that you may need to increase the resources allocated to the Karpenter controller pods.\n* Karpenter now adds a default `podSecurityContext` that configures the `fsgroup: 65536` of volumes in the pod. If you are using sidecar containers, you should review if this configuration is compatible for them. You can disable this default `podSecurityContext` through helm by performing `--set podSecurityContext=null` when installing/upgrading the chart.\n* The `dnsPolicy` for the Karpenter controller pod has been changed back to the Kubernetes cluster default of `ClusterFirst`. Setting our `dnsPolicy` to `Default` (confusingly, this is not the Kubernetes cluster default) caused more confusion for any users running IPv6 clusters with dual-stack nodes or anyone running Karpenter with dependencies on cluster services (like clusters running service meshes). This change may be breaking for any users on Fargate or MNG who were allowing Karpenter to manage their in-cluster DNS service (`core-dns` on most clusters). If you still want the old behavior here, you can change the `dnsPolicy` to point to use `Default` by setting the helm value on install/upgrade with `--set dnsPolicy=Default`. More details on this issue can be found in the following Github issues: [#2186](https://github.com/aws/karpenter-provider-aws/issues/2186) and [#4947](https://github.com/aws/karpenter-provider-aws/issues/4947).\n* Karpenter now disallows `nodepool.spec.template.spec.resources` to be set. The webhook validation never allowed `nodepool.spec.template.spec.resources`. We are now ensuring that CEL validation also disallows `nodepool.spec.template.spec.resources` to be set. If you were previously setting the resources field on your NodePool, ensure that you remove this field before upgrading to the newest version of Karpenter or else updates to the resource may fail on the new version.\n\n### Upgrading to `0.33.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\n`0.33.0`+ _only_ supports Karpenter v1beta1 APIs and will not work with existing Provisioner, AWSNodeTemplate or Machine alpha APIs. **Do not** upgrade to `0.33.0`+ without first [upgrading to `0.32.x`]({{<ref \"#upgrading-to-0320\" >}}). This version supports both the alpha and beta APIs, allowing you to migrate all of your existing APIs to beta APIs without experiencing downtime.\n{{% /alert %}}\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nWebhooks have been re-enabled by default starting in `0.33.8` to faciliate migration to `v1.0`.\nIf your cluster has network policies that block Ingress then ports `8000`, `8001`, `8081`, `8443` will need to be allowlisted.\nYou may still choose to disable webhooks through the helm chart.\n{{% /alert %}}\n\n* Karpenter no longer supports using the `karpenter.sh/provisioner-name` label in NodePool labels and requirements or in application node selectors, affinities, or topologySpreadConstraints. If you were previously using this label to target applications to specific Provisioners, you should update your applications to use the `karpenter.sh/nodepool` label instead before upgrading. If you upgrade without changing these labels, you may begin to see pod scheduling failures for these applications.\n* Karpenter now tags `spot-instances-request` with the same tags that it tags instances, volumes, and primary ENIs. This means that you will now need to add `ec2:CreateTags` permission for `spot-instances-request`. You can also further scope your controller policy for the `ec2:RunInstances` action to require that it launches the `spot-instances-request` with these specific tags. You can view an example of scoping these actions in the [Getting Started Guide's default CloudFormation controller policy](https://github.com/aws/karpenter/blob/v0.33.0/website/content/en/preview/getting-started/getting-started-with-karpenter/cloudformation.yaml#L61).\n* We now recommend that you set the installation namespace for your Karpenter controllers to `kube-system` to denote Karpenter as a critical cluster component. This ensures that requests from the Karpenter controllers are treated with higher priority by assigning them to a different [PriorityLevelConfiguration](https://kubernetes.io/docs/concepts/cluster-administration/flow-control/#prioritylevelconfiguration) than generic requests from other namespaces. For more details on API Priority and Fairness, read the [Kubernetes API Priority and Fairness Conceptual Docs](https://kubernetes.io/docs/concepts/cluster-administration/flow-control/). Note: Changing the namespace for your Karpenter release will cause the service account namespace to change. If you are using IRSA for authentication with AWS, you will need to change scoping set in the controller's trust policy from `karpenter:karpenter` to `kube-system:karpenter`.\n* ~~`0.33.0` disables mutating and validating webhooks by default in favor of using [Common Expression Language for CRD validation](https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/#validation). The Common Expression Language Validation Feature [is enabled by default on EKS 1.25](https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/#validation-rules). If you are using Kubernetes version >= 1.25, no further action is required. If you are using a Kubernetes version below 1.25, you now need to set `DISABLE_WEBHOOK=false` in your container environment variables or `--set webhook.enabled=true` if using Helm. View the [Webhook Support Deprecated in Favor of CEL Section of the v1beta1 Migration Guide]({{<ref \"../../v1.0/upgrading/v1beta1-migration#webhook-support-deprecated-in-favor-of-cel\" >}}).~~\n* `0.33.0` drops support for passing settings through the `karpenter-global-settings` ConfigMap. You should pass settings through the container environment variables in the Karpenter deployment manifest. View the [Global Settings Section of the v1beta1 Migration Guide]({{<ref \"../../v1.0/upgrading/v1beta1-migration#global-settings\" >}}) for more details.\n* `0.33.0` enables `Drift=true` by default in the `FEATURE_GATES`. If you previously didn't enable the feature gate, Karpenter will now check if there is a difference between the desired state of your nodes declared in your NodePool and the actual state of your nodes. View the [Drift Section of Disruption Conceptual Docs]({{<ref \"../concepts/disruption#drift\" >}}) for more details.\n* `0.33.0` drops looking up the `zap-logger-config` through ConfigMap discovery. Instead, Karpenter now expects the logging config to be mounted on the filesystem if you are using this to configure Zap logging. This is not enabled by default, but can be enabled through `--set logConfig.enabled=true` in the Helm values. If you are setting any values in the `logConfig` from the `0.32.x` upgrade, such as `logConfig.logEncoding`, note that you will have to explicitly set `logConfig.enabled=true` alongside it. Also, note that setting the Zap logging config is a deprecated feature in beta and is planned to be dropped at v1. View the [Logging Configuration Section of the v1beta1 Migration Guide]({{<ref \"../../v1.0/upgrading/v1beta1-migration#logging-configuration-is-no-longer-dynamic\" >}}) for more details.\n* `0.33.0` change the default `LOG_LEVEL` from `debug` to `info` by default. If you are still enabling logging configuration through the `zap-logger-config`, no action is required.\n* `0.33.0` drops support for comma delimited lists on tags for `SubnetSelectorTerm`, `SecurityGroupsSelectorTerm`, and `AMISelectorTerm`. Karpenter now supports multiple terms for each of the selectors which means that we can specify a more explicit OR-based constraint through separate terms rather than a comma-delimited list of values.\n\n### Upgrading to `0.32.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter `0.32.0` introduces v1beta1 APIs, including _significant_ changes to the API and installation procedures for the Karpenter controllers. **Do not** upgrade to `0.32.0`+ without referencing the [v1beta1 Migration Upgrade Procedure]({{<ref \"../../v1.0/upgrading/v1beta1-migration#upgrade-procedure\" >}}).\n\nThis version includes **dual support** for both alpha and beta APIs to ensure that you can slowly migrate your existing Provisioner, AWSNodeTemplate, and Machine alpha APIs to the newer NodePool, EC2NodeClass, and NodeClaim beta APIs.\n\nNote that if you are rolling back after upgrading to `0.32.0`, note that __only__ versions `0.31.4` support handling rollback after you have deployed the v1beta1 APIs to your cluster.\n{{% /alert %}}\n\n* Karpenter now uses `settings.InterruptionQueue` instead of `settings.aws.InterruptionQueueName` in its helm chart. The CLI argument also changed to `--interruption-queue`.\n* Karpenter now serves the webhook prometheus metrics server on port `8001`. If this port is already in-use on the pod or you are running in `hostNetworking` mode, you may need to change this port value. You can configure this port value through the `WEBHOOK_METRICS_PORT` environment variable or the `webhook.metrics.port` value if installing via Helm.\n* Karpenter now exposes the ability to disable webhooks through the `webhook.enabled=false` value. This value will disable the webhook server and will prevent any permissions, mutating or validating webhook configurations from being deployed to the cluster.\n* Karpenter now moves all logging configuration for the Zap logger into the `logConfig` values block. Configuring Karpenter logging with this mechanism _is_ deprecated and will be dropped at v1. Karpenter now only surfaces logLevel through the `logLevel` helm value. If you need more advanced configuration due to log parsing constraints, we recommend configuring your log parser to handle Karpenter's Zap JSON logging.\n* The default log encoding changed from `console` to `json`. If you were previously not setting the type of log encoding, this default will change with the Helm chart. If you were setting the value through `logEncoding`, this value will continue to work until `0.33.x` but it is deprecated in favor of `logConfig.logEncoding`\n* Karpenter now uses the `karpenter.sh/disruption:NoSchedule=disrupting` taint instead of the upstream `node.kubernetes.io/unschedulable` taint for nodes spawned with a NodePool to prevent pods from scheduling to nodes being disrupted. Pods that previously tolerated the `node.kubernetes.io/unschedulable` taint that previously weren't evicted during termination will now be evicted. This most notably affects DaemonSets, which have the `node.kubernetes.io/unschedulable` toleration by default, where Karpenter will now remove these pods during termination. If you want your specific pods to not be evicted when nodes are scaled down, you should add a toleration to the pods with the following: `Key=karpenter.sh/disruption, Effect=NoSchedule, Operator=Equals, Values=disrupting`.\n  * Note: Karpenter will continue to use the old `node.kubernetes.io/unschedulable` taint for nodes spawned with a Provisioner.\n\n### Upgrading to `0.31.0`+\n\n* Karpenter moved its `securityContext` constraints from pod-wide to only applying to the Karpenter container exclusively. If you were previously relying on the pod-wide `securityContext` for your sidecar containers, you will now need to set these values explicitly in your sidecar container configuration.\n\n### Upgrading to `0.30.0`+\n\n* Karpenter will now [statically drift]({{<ref \"../concepts/disruption#drift\" >}}) on both Provisioner and AWSNodeTemplate Fields. For Provisioner Static Drift, the `karpenter.sh/provisioner-hash` annotation must be present on both the Provisioner and Machine. For AWSNodeTemplate drift, the `karpenter.k8s.aws/nodetemplate-hash` annotation must be present on the AWSNodeTemplate and Machine. Karpenter will not add these annotations to pre-existing nodes, so each of these nodes will need to be recycled one time for the annotations to be added.\n* Karpenter will now fail validation on AWSNodeTemplates and Provisioner `spec.provider` that have `amiSelectors`, `subnetSelectors`, or `securityGroupSelectors` set with a combination of id selectors (`aws-ids`, `aws::ids`) and other selectors.\n* Karpenter now statically sets the `securityContext` at both the pod and container-levels and doesn't allow override values to be passed through the Helm chart. This change was made to adhere to [Restricted Pod Security Standard](https://kubernetes.io/docs/concepts/security/pod-security-standards/#restricted), which follows pod hardening best practices.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nIf you have sidecar containers configured to run alongside Karpenter that cannot tolerate the [pod-wide `securityContext` constraints](https://github.com/aws/karpenter/blob/v0.30.0/charts/karpenter/templates/deployment.yaml#L40), you will need to specify overrides to the sidecar `securityContext` in your deployment.\n{{% /alert %}}\n\n### Upgrading to `0.29.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter `0.29.1` contains a [file descriptor and memory leak bug](https://github.com/aws/karpenter/issues/4296) that leads to Karpenter getting OOMKilled and restarting at the point that it hits its memory or file descriptor limit. Karpenter `0.29.2`+ fixes this leak.\n{{% /alert %}}\n\n* Karpenter has changed the default metrics service port from 8080 to 8000 and the default webhook service port from 443 to 8443. In `0.28.0`, the Karpenter pod port was changed to 8000, but referenced the service by name, allowing users to scrape the service at port 8080 for metrics. `0.29.0` aligns the two ports so that service and pod metrics ports are the same. These ports are set by the `controller.metrics.port` and `webhook.port` Helm chart values, so if you have previously set these to non-default values, you may need to update your Prometheus scraper to match these new values.\n\n* Karpenter will now reconcile nodes that are drifted due to their Security Groups or their Subnets. If your AWSNodeTemplate's Security Groups differ from the Security Groups used for an instance, Karpenter will consider it drifted. If the Subnet used by an instance is not contained in the allowed list of Subnets for an AWSNodeTemplate, Karpenter will also consider it drifted.\n  * Since Karpenter uses tags for discovery of Subnets and SecurityGroups, check the [Threat Model]({{<ref \"../reference/threat-model.md#threat-using-ec2-createtagdeletetag-permissions-to-orchestrate-machine-creationdeletion\" >}}) to see how to manage this IAM Permission.\n\n### Upgrading to `0.28.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter `0.28.0` is incompatible with Kubernetes version 1.26+, which can result in additional node scale outs when using `--cloudprovider=external`, which is the default for the EKS Optimized AMI. See: https://github.com/aws/karpenter-core/pull/375. Karpenter `0.28.1`+ fixes this issue and is compatible with Kubernetes version 1.26+.\n{{% /alert %}}\n\n* The `extraObjects` value is now removed from the Helm chart. Having this value in the chart proved to not work in the majority of Karpenter installs and often led to anti-patterns, where the Karpenter resources installed to manage Karpenter's capacity were directly tied to the install of the Karpenter controller deployments. The Karpenter team recommends that, if you want to install Karpenter manifests alongside the Karpenter Helm chart, to do so by creating a separate chart for the manifests, creating a dependency on the controller chart.\n* The `aws.nodeNameConvention` setting is now removed from the [`karpenter-global-settings`]({{<ref \"../reference/settings#configmap\" >}}) ConfigMap. Because Karpenter is now driving its orchestration of capacity through Machines, it no longer needs to know the node name, making this setting obsolete. Karpenter ignores configuration that it doesn't recognize in the [`karpenter-global-settings`]({{<ref \"../reference/settings#configmap\" >}}) ConfigMap, so leaving the `aws.nodeNameConvention` in the ConfigMap will simply cause this setting to be ignored.\n* Karpenter now defines a set of \"restricted tags\" which can't be overridden with custom tagging in the AWSNodeTemplate or in the [`karpenter-global-settings`]({{<ref \"../reference/settings#configmap\" >}}) ConfigMap. If you are currently using any of these tag overrides when tagging your instances, webhook validation will now fail. These tags include:\n\n  * `karpenter.sh/managed-by`\n  * `karpenter.sh/provisioner-name`\n  * `kubernetes.io/cluster/${CLUSTER_NAME}`\n\n* The following metrics changed their meaning, based on the introduction of the Machine resource:\n  * `karpenter_nodes_terminated`: Use `karpenter_machines_terminated` if you are interested in the reason why a Karpenter machine was deleted. `karpenter_nodes_terminated` now only tracks the count of terminated nodes without any additional labels.\n  * `karpenter_nodes_created`: Use `karpenter_machines_created` if you are interested in the reason why a Karpenter machine was created. `karpenter_nodes_created` now only tracks the count of created nodes without any additional labels.\n  * `karpenter_deprovisioning_replacement_node_initialized_seconds`: This metric has been replaced in favor of `karpenter_deprovisioning_replacement_machine_initialized_seconds`.\n* `0.28.0` introduces the Machine CustomResource into the `karpenter.sh` API Group and requires this CustomResourceDefinition to run properly. Karpenter now orchestrates its CloudProvider capacity through these in-cluster Machine CustomResources. When performing a scheduling decision, Karpenter will create a Machine, resulting in launching CloudProvider capacity. The kubelet running on the new capacity will then register the node to the cluster shortly after launch.\n  * If you are using Helm to upgrade between versions of Karpenter, note that [Helm does not automate the process of upgrading or install the new CRDs into your cluster](https://helm.sh/docs/chart_best_practices/custom_resource_definitions/#some-caveats-and-explanations). To install or upgrade the existing CRDs, follow the guidance under the [Custom Resource Definition (CRD) Upgrades]({{< relref \"#custom-resource-definition-crd-upgrades\" >}}) section of the upgrade guide.\n  * Karpenter will hydrate Machines on startup for existing capacity managed by Karpenter into the cluster. Existing capacity launched by an older version of Karpenter is discovered by finding CloudProvider capacity with the `karpenter.sh/provisioner-name` tag or the `karpenter.sh/provisioner-name` label on nodes.\n* The metrics port for the Karpenter deployment was changed from 8080 to 8000. Users who scrape the pod directly for metrics rather than the service will need to adjust the commands they use to reference port 8000. Any users who scrape metrics from the service should be unaffected.\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter creates a mapping between CloudProvider machines and CustomResources in the cluster for capacity tracking. To ensure this mapping is consistent, Karpenter utilizes the following tag keys:\n\n* `karpenter.sh/managed-by`\n* `karpenter.sh/provisioner-name`\n* `kubernetes.io/cluster/${CLUSTER_NAME}`\n\nBecause Karpenter takes this dependency, any user that has the ability to Create/Delete these tags on CloudProvider machines will have the ability to orchestrate Karpenter to Create/Delete CloudProvider machines as a side effect. Check the [Threat Model]({{<ref \"../reference/threat-model.md#threat-using-ec2-createtagdeletetag-permissions-to-orchestrate-machine-creationdeletion\" >}}) to see how this might affect you, and ways to mitigate this.\n{{% /alert %}}\n\n{{% alert title=\"Rolling Back\" color=\"warning\" %}}\nIf, after upgrading to `0.28.0`+, a rollback to an older version of Karpenter needs to be performed, Karpenter will continue to function normally, though you will still have the Machine CustomResources on your cluster. You will need to manually delete the Machines and patch out the finalizers to fully complete the rollback.\n\nKarpenter marks CloudProvider capacity as \"managed by\" a Machine using the `karpenter-sh/managed-by` tag on the CloudProvider machine. It uses this tag to ensure that the Machine CustomResources in the cluster match the CloudProvider capacity managed by Karpenter. If these states don't match, Karpenter will garbage collect the capacity. Because of this, if performing an upgrade, followed by a rollback, followed by another upgrade to `0.28.0`+, ensure you remove the `karpenter.sh/managed-by` tags from existing capacity; otherwise, Karpenter will deprovision the capacity without a Machine CR counterpart.\n{{% /alert %}}\n\n### Upgrading to `0.27.3`+\n\n* The `defaulting.webhook.karpenter.sh` mutating webhook was removed in `0.27.3`. If you are coming from an older version of Karpenter where this webhook existed and the webhook was not managed by Helm, you may need to delete the stale webhook.\n\n```bash\nkubectl delete mutatingwebhookconfigurations defaulting.webhook.karpenter.sh\n```\n\n### Upgrading to `0.27.0`+\n\n* The Karpenter controller pods now deploy with `kubernetes.io/hostname` self anti-affinity by default. If you are running Karpenter in HA (high-availability) mode and you do not have enough nodes to match the number of pod replicas you are deploying with, you will need to scale-out your nodes for Karpenter.\n* The following controller metrics changed and moved under the `controller_runtime` metrics namespace:\n  * `karpenter_metricscraper_...`\n  * `karpenter_deprovisioning_...`\n  * `karpenter_provisioner_...`\n  * `karpenter_interruption_...`\n* The following controller metric names changed, affecting the `controller` label value under `controller_runtime_...` metrics. These metrics include:\n  * `podmetrics` -> `pod_metrics`\n  * `provisionermetrics` -> `provisioner_metrics`\n  * `metricscraper` -> `metric_scraper`\n  * `provisioning` -> `provisioner_trigger`\n  * `node-state` -> `node_state`\n  * `pod-state` -> `pod_state`\n  * `provisioner-state` -> `provisioner_state`\n* The `karpenter_allocation_controller_scheduling_duration_seconds` metric name changed to `karpenter_provisioner_scheduling_duration_seconds`\n\n### Upgrading to `0.26.0`+\n\n* 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]({{<ref \"../concepts/disruption#disabling-deprovisioning\" >}}) for more details.\n* 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.\n* 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.\n\n### Upgrading to `0.25.0`+\n\n* 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.\n\n### Upgrading to `0.24.0`+\n\n* Settings are no longer updated dynamically while Karpenter is running. If you manually make a change to the [`karpenter-global-settings`]({{<ref \"../reference/settings#configmap\" >}}) ConfigMap, you will need to reload the containers by restarting the deployment with `kubectl rollout restart -n karpenter deploy/karpenter`\n* 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]({{<ref \"../concepts/scheduling#selecting-nodes\" >}}). 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.\n* `aws.tags` in [`karpenter-global-settings`]({{<ref \"../reference/settings#configmap\" >}}) 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.<key>: value` in the ConfigMap.\n\n### Upgrading to `0.22.0`+\n\n* 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.\n\n### Upgrading to `0.20.0`+\n\n* Prior to `0.20.0`, Karpenter would prioritize certain instance type categories absent of any requirements in the Provisioner. `0.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.\n\n### Upgrading to `0.19.0`+\n\n* 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.\n* 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/disruption/#interruption\" >}}).\n* 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.\n* Karpenter CRD raw YAML URLs have migrated from `https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.19.3/charts/karpenter/crds/...` to `https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.19.3/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.\n* 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.\n* The following CLI options/environment variables are now removed and replaced in favor of pulling settings dynamically from the [`karpenter-global-settings`]({{<ref \"../reference/settings#configmap\" >}}) ConfigMap. See the [Settings docs]({{<ref \"../reference/settings/#environment-variables--cli-flags\" >}}) for more details on configuring the new values in the ConfigMap.\n\n  * `CLUSTER_NAME` -> `settings.aws.clusterName`\n  * `CLUSTER_ENDPOINT` -> `settings.aws.clusterEndpoint`\n  * `AWS_DEFAULT_INSTANCE_PROFILE` -> `settings.aws.defaultInstanceProfile`\n  * `AWS_ENABLE_POD_ENI` -> `settings.aws.enablePodENI`\n  * `AWS_ENI_LIMITED_POD_DENSITY` -> `settings.aws.enableENILimitedPodDensity`\n  * `AWS_ISOLATED_VPC` -> `settings.aws.isolatedVPC`\n  * `AWS_NODE_NAME_CONVENTION` -> `settings.aws.nodeNameConvention`\n  * `VM_MEMORY_OVERHEAD` -> `settings.aws.vmMemoryOverheadPercent`\n\n### Upgrading to `0.18.0`+\n\n* `0.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]({{<ref \"../reference/metrics\" >}}).\n\n### Upgrading to `0.17.0`+\n\nKarpenter'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/).\nWith 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-karpenter/#install-karpenter-helm-chart\" >}}).\n\nUsers who have scripted the installation or upgrading of Karpenter need to adjust their scripts with the following changes:\n1. There is no longer a need to add the Karpenter Helm repo with `helm repo add`\n2. The full URL of the Helm chart needs to be present when using the `helm` CLI\n3. 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  (i.e `v0.17.0`).\n\n### Upgrading to `0.16.2`+\n\n* `0.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:\n```bash\nkubectl replace -f https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.16.2/charts/karpenter/crds/karpenter.sh_provisioners.yaml\n```\n\n### Upgrading to `0.16.0`+\n\n* `0.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:\n```bash\nkubectl replace -f https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.16.0/charts/karpenter/crds/karpenter.sh_provisioners.yaml\n```\n\n### Upgrading to `0.15.0`+\n\n* `0.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:\n```bash\nkubectl replace -f https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.15.0/charts/karpenter/crds/karpenter.sh_provisioners.yaml\n```\n\n### Upgrading to `0.14.0`+\n\n* `0.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:\n\n```bash\nkubectl replace -f https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.14.0/charts/karpenter/crds/karpenter.sh_provisioners.yaml\n\nkubectl replace -f https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.14.0/charts/karpenter/crds/karpenter.k8s.aws_awsnodetemplates.yaml\n```\n\n* `0.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:\n\n```bash\n## Find launch templates that match the naming pattern and you do not want to keep\naws ec2 describe-launch-templates --filters=\"Name=launch-template-name,Values=Karpenter-${CLUSTER_NAME}-*\"\n\n## Delete launch template(s) that match the name but do not have the \"karpenter.k8s.aws/cluster\" tag\naws ec2 delete-launch-template --launch-template-id <LAUNCH_TEMPLATE_ID>\n```\n\n* `0.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.\n```yaml\n  - key: node.kubernetes.io/instance-type\n    operator: Exists\n```\n\n* `0.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]({{<ref \"../concepts/nodepools#spec-amiselector\" >}}) to get started\n* `0.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`.\n\n* `0.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.\n\n### Upgrading to `0.13.0`+\n\n* `0.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. `0.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.\n\n  If you are upgrading from `0.10.1` - `0.11.1`, a new CRD `awsnodetemplate` was added. In `0.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:\n  1. Make sure any `awsnodetemplate` manifests are saved somewhere so that they can be reapplied to the cluster.\n  2. `kubectl delete crd awsnodetemplate`\n  3. `kubectl apply -f https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.13.2/charts/karpenter/crds/karpenter.k8s.aws_awsnodetemplates.yaml`\n  4. Perform the Karpenter upgrade to `0.13.0`+, which will install the new `awsnodetemplates` CRD.\n  5. Reapply the `awsnodetemplate` manifests you saved from step 1, if applicable.\n* `0.13.0` also adds EC2/spot price fetching to Karpenter to allow making more accurate decisions regarding node deployments.  Our [getting started guide]({{< ref \"../getting-started/getting-started-with-karpenter\" >}}) 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.\n\n### Upgrading to `0.12.0`+\n\n* `0.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.\n* If you are upgrading from `0.10.1` - `0.11.1`, a new CRD `awsnodetemplate` was added. In `0.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:\n  1. Make sure any `awsnodetemplate` manifests are saved somewhere so that they can be reapplied to the cluster.\n  2. `kubectl delete crd awsnodetemplate`\n  3. `kubectl apply -f https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.12.1/charts/karpenter/crds/karpenter.k8s.aws_awsnodetemplates.yaml`\n  4. Perform the Karpenter upgrade to `0.12.0`+, which will install the new `awsnodetemplates` CRD.\n  5. Reapply the `awsnodetemplate` manifests you saved from step 1, if applicable.\n\n### Upgrading to `0.11.0`+\n\n`0.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`.\n\nOther 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.\n\n`0.11.0` adds a `providerRef` field in the Provisioner CRD. To use this new field you will need to replace the Provisioner CRD manually:\n\n```shell\nkubectl replace -f https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.11.0/charts/karpenter/crds/karpenter.sh_provisioners.yaml\n```\n\n### Upgrading to `0.10.0`+\n\n`0.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:\n\n```shell\nkubectl replace -f https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.10.0/charts/karpenter/crds/karpenter.sh_provisioners.yaml\n```\n\n📝 If you don't perform this manual CRD update, Karpenter will work correctly except for rejecting the creation/update of provisioners that use `startupTaints`.\n\n### Upgrading to `0.6.2`+\n\nIf using Helm, the variable names have changed for the cluster's name and endpoint. You may need to update any configuration\nthat sets the old variable names.\n\n- `controller.clusterName` is now `clusterName`\n- `controller.clusterEndpoint` is now `clusterEndpoint`\n"
  },
  {
    "path": "website/content/en/v1.0/_index.md",
    "content": "---\ntitle: \"Documentation\"\nlinkTitle: \"Docs\"\nweight: 20\ncascade:\n  type: docs\n  tags:\n    - preview\n---\nKarpenter is an open-source node lifecycle management project built for Kubernetes.\nAdding Karpenter to a Kubernetes cluster can dramatically improve the efficiency and cost of running workloads on that cluster.\nKarpenter works by:\n\n* **Watching** for pods that the Kubernetes scheduler has marked as unschedulable\n* **Evaluating** scheduling constraints (resource requests, nodeselectors, affinities, tolerations, and topology spread constraints) requested by the pods\n* **Provisioning** nodes that meet the requirements of the pods\n* **Disrupting** the nodes when the nodes are no longer needed\n\nAs someone using Karpenter, once your Kubernetes cluster and the Karpenter controller are up and running (see [Getting Started]({{<ref \"./getting-started\" >}})), you can:\n\n* **Set up NodePools**: By applying a NodePool to Karpenter, you can configure constraints on node provisioning and set values for node expiry, node consolidation, or Kubelet configuration values.\n  NodePool-level constraints related to Kubernetes and your cloud provider (AWS, for example) include:\n\n  - 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.\n  - Labels (`labels`): Apply arbitrary key-value pairs to nodes that can be matched by pods.\n  - Requirements (`requirements`): Set acceptable (`In`) and unacceptable (`NotIn`) Kubernetes and Karpenter values for node provisioning based on [Well-Known Labels](https://kubernetes.io/docs/reference/labels-annotations-taints/) and [cloud-specific settings]({{<ref \"./concepts/nodeclasses\" >}}). 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]({{<ref \"./concepts/nodepools/#capacity-type\" >}}) (such as AWS spot or on-demand).\n  - 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.\n\n* **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:\n\n  - 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.\n  - 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.\n  - 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.\n  - 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.\n  - 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.\n  - 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.\n  - 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.\n\nLearn more about Karpenter and how to get started below.\n"
  },
  {
    "path": "website/content/en/v1.0/concepts/_index.md",
    "content": "---\ntitle: \"Concepts\"\nlinkTitle: \"Concepts\"\nweight: 20\ndescription: >\n  Understand key concepts of Karpenter\n---\n\nUsers fall under two basic roles: [Kubernetes cluster administrators]({{<ref \"#cluster-administrator\" >}}) and [application developers]({{<ref \"#application-developer\" >}}). This document describes Karpenter concepts through the lens of those two types of users.\n\n## Cluster Administrator\n\nAs a Kubernetes cluster administrator, you can engage with Karpenter to:\n\n* Install Karpenter\n* Configure NodePools to set constraints and other features for managing nodes\n* Disrupting nodes\n\nConcepts associated with this role are described below.\n\n\n### Installing Karpenter\n\nKarpenter 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.\n\n[Getting Started with Karpenter]({{<ref \"../getting-started/getting-started-with-karpenter\" >}}) describes the process of installing Karpenter. 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.\n\nOnce privileges are in place, Karpenter is deployed with a Helm chart.\n\n### Configuring NodePools\n\nKarpenter'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 [NodePools]({{<ref \"nodepools\" >}}) that define how Karpenter manages unschedulable pods and configures nodes. You will also define behaviors for your NodePools, capturing details like how Karpenter handles disruption of nodes and setting limits and weights for each NodePool.\n\nHere are some things to know about Karpenter's NodePools:\n\n* **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.\n\n* [**Defining Constraints**]({{<ref \"nodepools\" >}}): Karpenter defines a Custom Resource called a NodePool to specify configuration. Each NodePool manages a distinct set of nodes, but pods can be scheduled to any NodePool that supports its scheduling constraints. A NodePool defines constraints that determine which nodes can be provisioned and specifies the attributes these nodes will have. See the [NodePools Documentation]({{<ref \"nodepools\" >}}) docs for a description of configuration and NodePool examples.\n\n* [**Defining Disruption**]({{<ref \"disruption\" >}}): A NodePool can also include values to indicate when nodes should be disrupted. This includes configuration around concepts like [Consolidation]({{<ref \"disruption#consolidation\" >}}), [Drift]({{<ref \"disruption#drift\" >}}), and [Expiration]({{<ref \"disruption#automated-methods\" >}}).\n\n* **Well-known labels**: The NodePool 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.\n\n* **Multiple NodePools**: Multiple NodePools 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.\n\nAlthough most use cases are addressed with a single NodePool for multiple teams, multiple NodePools are useful to isolate nodes for billing, use different node constraints (such as no GPUs for a team), or use different disruption settings.\n\n### Disrupting nodes\n\nKarpenter deletes nodes when they are no longer needed.\n\n* [**Finalizer**]({{<ref \"disruption#manual-methods\" >}}): Karpenter places a finalizer bit on each node it creates.\nWhen 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.\nKarpenter handles all clean-up work needed to properly delete the node.\n* [**Expiration**]({{<ref \"disruption\" >}}): Karpenter will mark nodes as expired and disrupt them after they have lived a set number of seconds, based on the NodePool's `spec.template.spec.expireAfter` value. You can use node expiry to periodically recycle nodes due to security concerns.\n* [**Consolidation**]({{<ref \"disruption#consolidation\" >}}): Karpenter works to actively reduce cluster cost by identifying when:\n  * Nodes can be removed because the node is empty\n  * Nodes can be removed as their workloads will run on other nodes in the cluster.\n  * Nodes can be replaced with cheaper variants due to a change in the workloads.\n* [**Drift**]({{<ref \"disruption#drift\" >}}): Karpenter will mark nodes as drifted and disrupt nodes that have drifted from their desired specification. See [Drift]({{<ref \"#drift\" >}}) to see which fields are considered.\n* [**Interruption**]({{<ref \"disruption#interruption\" >}}): Karpenter will watch for upcoming 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.\n\nFor more details on how Karpenter deletes nodes, see the [Disruption Documentation]({{<ref \"disruption\" >}}).\n\n### Scheduling\n\nKarpenter 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.\n\nOnce Karpenter brings up a node, that node is available for the Kubernetes scheduler to schedule pods on it as well.\n\n#### Constraints\n\nThe concept of layered constraints is key to using Karpenter. With no constraints defined in NodePools 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.\n\nAn application developer can tighten the constraints defined in a NodePool 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.\n\n### Cloud Provider\n\nKarpenter 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.\n\nWhile using Kubernetes well-known labels, the NodePool can set some values that are specific to the cloud provider. 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`).\n\n### Kubernetes Cluster Autoscaler\n\nLike 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:\n\n* **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.\n\n* **Quick 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.\n\n## Application Developer\n\nAs 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).\n\nLayered *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).\nThe 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.\n\nThe 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.\n\nAs long as the requests are not outside the NodePool'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.\n\nSo, what constraints can you use as an application developer deploying pods that could be managed by Karpenter?\n\nKubernetes features that Karpenter supports for scheduling pods include nodeAffinity and [nodeSelector](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#nodeselector).\nIt 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).\n\nFrom 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:\n\n* **kubernetes.io/arch**: For example, kubernetes.io/arch=amd64\n* **node.kubernetes.io/instance-type**: For example, node.kubernetes.io/instance-type=m3.medium\n* **topology.kubernetes.io/zone**: For example, topology.kubernetes.io/zone=us-east-1c\n\nFor more on how, as a developer, you can add constraints to your pod deployment, see [Scheduling](./scheduling/) for details.\n"
  },
  {
    "path": "website/content/en/v1.0/concepts/disruption.md",
    "content": "---\ntitle: \"Disruption\"\nlinkTitle: \"Disruption\"\nweight: 50\ndescription: >\n  Understand different ways Karpenter disrupts nodes\n---\n\n## Control Flow\n\nKarpenter sets a Kubernetes [finalizer](https://kubernetes.io/docs/concepts/overview/working-with-objects/finalizers/) on each node and node claim it provisions.\nThe finalizer blocks deletion of the node object while the Termination Controller taints and drains the node, before removing the underlying NodeClaim. Disruption is triggered by the Disruption Controller, by the user through manual disruption, or through an external system that sends a delete request to the node object.\n\n### Disruption Controller\n\nKarpenter automatically discovers disruptable nodes and spins up replacements when needed. Karpenter disrupts nodes by executing one [automated method](#automated-graceful-methods) at a time, first doing Drift then Consolidation. Each method varies slightly, but they all follow the standard disruption process. Karpenter uses [disruption budgets]({{<ref \"#nodepool-disruption-budgets\" >}}) to control the speed at which these disruptions begin.\n1. Identify a list of prioritized candidates for the disruption method.\n   * If there are [pods that cannot be evicted](#pod-level-controls) on the node, Karpenter will ignore the node and try disrupting it later.\n   * If there are no disruptable nodes, continue to the next disruption method.\n2. For each disruptable node:\n   1. Check if disrupting it would violate its NodePool's disruption budget.\n   2. Execute a scheduling simulation with the pods on the node to find if any replacement nodes are needed.\n3. Add the `karpenter.sh/disrupted:NoSchedule` taint to the node(s) to prevent pods from scheduling to it.\n4. Pre-spin any replacement nodes needed as calculated in Step (2), and wait for them to become ready.\n   * If a replacement node fails to initialize, un-taint the node(s), and restart from Step (1), starting at the first disruption method again.\n5. Delete the node(s) and wait for the Termination Controller to gracefully shutdown the node(s).\n6. Once the Termination Controller terminates the node, go back to Step (1), starting at the first disruption method again.\n\n### Termination Controller\n\nWhen a Karpenter node is deleted, the Karpenter finalizer will block deletion and the APIServer will set the `DeletionTimestamp` on the node, allowing Karpenter to gracefully shutdown the node, modeled after [Kubernetes Graceful Node Shutdown](https://kubernetes.io/docs/concepts/cluster-administration/node-shutdown/#graceful-node-shutdown). Karpenter's graceful shutdown process will:\n1. Add the `karpenter.sh/disrupted:NoSchedule` taint to the node to prevent pods from scheduling to it.\n2. Begin evicting the pods on the node with the [Kubernetes Eviction API](https://kubernetes.io/docs/concepts/scheduling-eviction/api-eviction/) to respect PDBs, while ignoring all [static pods](https://kubernetes.io/docs/tasks/configure-pod-container/static-pod/), pods tolerating the `karpenter.sh/disrupted:NoSchedule` taint, and succeeded/failed pods. Wait for the node to be fully drained before proceeding to Step (3).\n   * While waiting, if the underlying NodeClaim for the node no longer exists, remove the finalizer to allow the APIServer to delete the node, completing termination.\n3. Verify that all [VolumeAttachment](https://kubernetes.io/docs/reference/kubernetes-api/config-and-storage-resources/volume-attachment-v1/) resources for drain-able pods are deleted.\n4. Terminate the NodeClaim in the Cloud Provider.\n5. Remove the finalizer from the node to allow the APIServer to delete the node, completing termination.\n\n## Manual Methods\n* **Node Deletion**: You can use `kubectl` to manually remove a single Karpenter node or nodeclaim. Since each Karpenter node is owned by a NodeClaim, deleting either the node or the nodeclaim will cause cascade deletion of the other:\n\n    ```bash\n    # Delete a specific nodeclaim\n    kubectl delete nodeclaim $NODECLAIM_NAME\n\n    # Delete a specific node\n    kubectl delete node $NODE_NAME\n\n    # Delete all nodeclaims\n    kubectl delete nodeclaims --all\n\n    # Delete all nodes owned by any nodepool\n    kubectl delete nodes -l karpenter.sh/nodepool\n\n    # Delete all nodeclaims owned by a specific nodepoolXS\n    kubectl delete nodeclaims -l karpenter.sh/nodepool=$NODEPOOL_NAME\n    ```\n* **NodePool Deletion**: NodeClaims are owned by the NodePool through an [owner reference](https://kubernetes.io/docs/concepts/overview/working-with-objects/owners-dependents/#owner-references-in-object-specifications) that launched them. Karpenter will gracefully terminate nodes through cascading deletion when the owning NodePool is deleted.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nBy adding the finalizer, Karpenter improves the default Kubernetes process of node deletion.\nWhen 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.\n{{% /alert %}}\n\n## Automated Graceful Methods\n\nAutomated graceful methods, can be rate limited through [NodePool Disruption Budgets]({{<ref \"#nodepool-disruption-budgets\" >}})\n\n* [**Consolidation**]({{<ref \"#consolidation\" >}}): Karpenter works to actively reduce cluster cost by identifying when:\n  * Nodes can be removed because the node is empty\n  * Nodes can be removed as their workloads will run on other nodes in the cluster.\n  * Nodes can be replaced with lower priced variants due to a change in the workloads.\n* [**Drift**]({{<ref \"#drift\" >}}): Karpenter will mark nodes as drifted and disrupt nodes that have drifted from their desired specification. See [Drift]({{<ref \"#drift\" >}}) to see which fields are considered.\n\n{{% alert title=\"Defaults\" color=\"secondary\" %}}\nDisruption is configured through the NodePool's disruption block by the `consolidationPolicy`, and `consolidateAfter` fields. Karpenter will configure these fields with the following values by default if they are not set:\n\n```yaml\nspec:\n  disruption:\n    consolidationPolicy: WhenEmptyOrUnderutilized\n    consolidateAfter: 0s\n```\n{{% /alert %}}\n\n### Consolidation\n\nConsolidation is configured by `consolidationPolicy` and `consolidateAfter`. `consolidationPolicy` determines the pre-conditions for nodes to be considered consolidatable, and are `WhenEmpty` or `WhenEmptyOrUnderutilized`. If a node has no running non-daemon pods, it is considered empty.  `consolidateAfter` can be set to indicate how long Karpenter should wait after a pod schedules or is removed from the node before considering the node consolidatable. With `WhenEmptyOrUnderutilized`, Karpenter will consider a node consolidatable when its `consolidateAfter` has been reached, empty or not.\n\nKarpenter has two mechanisms for cluster consolidation:\n1. **Deletion** - A node is eligible for deletion if all of its pods can run on free capacity of other nodes in the cluster.\n2. **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 lower price replacement node.\n\nConsolidation has three mechanisms that are performed in order to attempt to identify a consolidation action:\n1. **Empty Node Consolidation** - Delete any entirely empty nodes in parallel\n2. **Multi Node Consolidation** - Try to delete two or more nodes in parallel, possibly launching a single replacement whose price is lower than that of all nodes being removed\n3. **Single Node Consolidation** - Try to delete any single node, possibly launching a single replacement whose price is lower than that of the node being removed\n\nIt'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.\n\nWhen there are multiple nodes that could be potentially deleted or replaced, Karpenter chooses to consolidate the node that overall disrupts your workloads the least by preferring to terminate:\n\n* Nodes running fewer pods\n* Nodes that will expire soon\n* Nodes with lower priority pods\n\nIf 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.\n\n```bash\nEvents:\n  Type     Reason                   Age                From             Message\n  ----     ------                   ----               ----             -------\n  Normal   Unconsolidatable         66s                karpenter        pdb default/inflate-pdb prevents pod evictions\n  Normal   Unconsolidatable         33s (x3 over 30m)  karpenter        can't replace with a lower-priced node\n```\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nUsing 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 disrupt 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`).\n{{% /alert %}}\n\n#### Spot consolidation\nFor spot nodes, Karpenter has deletion consolidation enabled by default. If you would like to enable replacement with spot consolidation, you need to enable the feature through the [`SpotToSpotConsolidation` feature flag]({{<ref \"../reference/settings#features-gates\" >}}).\n\nLower priced spot instance types are selected with the [`price-capacity-optimized` strategy](https://aws.amazon.com/blogs/compute/introducing-price-capacity-optimized-allocation-strategy-for-ec2-spot-instances/). Sometimes, the lowest priced spot instance type is not launched due to the likelihood of interruption. As a result, Karpenter uses the number of available instance type options with a price lower than the currently launched spot instance as a heuristic for evaluating whether it should launch a replacement for the current spot node.\n\nWe refer to the number of instances that Karpenter has within its launch decision as a launch's \"instance type flexibility.\" When Karpenter is considering performing a spot-to-spot consolidation replacement, it will check whether replacing the instance type will lead to enough instance type flexibility in the subsequent launch request. As a result, we get the following properties when evaluating for consolidation:\n1) We shouldn't continually consolidate down to the lowest priced spot instance which might have very high rates of interruption.\n2) We launch with enough instance types that there’s high likelihood that our replacement instance has comparable availability to our current one.\n\nKarpenter requires a minimum instance type flexibility of 15 instance types when performing single node spot-to-spot consolidations (1 node to 1 node). It does not have the same instance type flexibility requirement for multi-node spot-to-spot consolidations (many nodes to 1 node) since doing so without requiring flexibility won't lead to \"race to the bottom\" scenarios.\n\n\n### Drift\nDrift handles changes to the NodePool/EC2NodeClass. For Drift, values in the NodePool/EC2NodeClass are reflected in the NodeClaimTemplateSpec/EC2NodeClassSpec in the same way that they’re set. A NodeClaim will be detected as drifted if the values in its owning NodePool/EC2NodeClass do not match the values in the NodeClaim. Similar to the upstream `deployment.spec.template` relationship to pods, Karpenter will annotate the owning NodePool and EC2NodeClass with a hash of the NodeClaimTemplateSpec to check for drift. Some special cases will be discovered either from Karpenter or through the CloudProvider interface, triggered by NodeClaim/Instance/NodePool/EC2NodeClass changes.\n\n#### Special Cases on Drift\nIn special cases, drift can correspond to multiple values and must be handled differently. Drift on resolved fields can create cases where drift occurs without changes to CRDs, or where CRD changes do not result in drift. For example, if a NodeClaim has `node.kubernetes.io/instance-type: m5.large`, and requirements change from `node.kubernetes.io/instance-type In [m5.large]` to `node.kubernetes.io/instance-type In [m5.large, m5.2xlarge]`, the NodeClaim will not be drifted because its value is still compatible with the new requirements. Conversely, if a NodeClaim is using a NodeClaim image `ami: ami-abc`, but a new image is published, Karpenter's `EC2NodeClass.spec.amiSelectorTerms` will discover that the new correct value is `ami: ami-xyz`, and detect the NodeClaim as drifted.\n\n##### NodePool\n| Fields         |\n|----------------|\n| spec.template.spec.requirements   |\n\n##### EC2NodeClass\n| Fields                        |\n|-------------------------------|\n| spec.subnetSelectorTerms      |\n| spec.securityGroupSelectorTerms  |\n| spec.amiSelectorTerms  |\n\n#### Behavioral Fields\nBehavioral Fields are treated as over-arching settings on the NodePool to dictate how Karpenter behaves. These fields don’t correspond to settings on the NodeClaim or instance. They’re set by the user to control Karpenter’s Provisioning and disruption logic. Since these don’t map to a desired state of NodeClaims, __behavioral fields are not considered for Drift__.\n\n##### NodePool\n| Fields              |\n|---------------------|\n| spec.weight         |\n| spec.limits         |\n| spec.disruption.*   |\n\nRead the [Drift Design](https://github.com/aws/karpenter-core/blob/main/designs/drift.md) for more.\n\nTo enable the drift feature flag, refer to the [Feature Gates]({{<ref \"../reference/settings#feature-gates\" >}}).\n\nKarpenter will add the `Drifted` status condition on NodeClaims if the NodeClaim is drifted from its owning NodePool. Karpenter will also remove the `Drifted` status condition if either:\n1. The `Drift` feature gate is not enabled but the NodeClaim is drifted, Karpenter will remove the status condition.\n2. The NodeClaim isn't drifted, but has the status condition, Karpenter will remove it.\n\n## Automated Forceful Methods\n\nAutomated forceful methods will begin draining nodes as soon as the condition is met.\nUnlike the graceful methods mentioned above, these methods can not be rate-limited using [NodePool Disruption Budgets](#nodepool-disruption-budgets), and do not wait for a pre-spin replacement node to be healthy for the pods to reschedule.\nPod disruption budgets may be used to rate-limit application disruption.\n\n### Expiration\n\nExpiration is a forceful disruption method that begins draining a node immediately once its lifetime exceeds the duration set on the owning NodeClaim's `spec.expireAfter` field.\nChanges to `spec.template.spec.expireAfter` on the owning NodePool will not update the field for existing NodeClaims - it will induce NodeClaim drift and the replacements will have the updated value.\nExpiration can be used, in conjunction with [`terminationGracePeriod`](#terminationgraceperiod), to enforce a maximum Node lifetime.\nBy default, `expireAfter` is set to `720h` (30 days).\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nThe `expireAfter` field defines the **maximum** node lifetime (upper bound), not a guaranteed minimum.\nNodes can be disrupted earlier than the `expireAfter` duration by other disruption methods such as [Drift]({{<ref \"#drift\" >}}), [Consolidation]({{<ref \"#consolidation\" >}}), or [Emptiness]({{<ref \"#consolidation\" >}}) if their [disruption budgets]({{<ref \"#nodepool-disruption-budgets\" >}}) allow.\nFor example, a NodePool with `expireAfter: 720h` (30 days) can still have nodes terminated earlier if the node becomes drifted due to an AMI update and the disruption budget permits drift-based disruptions.\n\nTo enforce a true maximum node lifetime that cannot be shortened by other disruption methods, use `expireAfter` in combination with carefully configured disruption budgets that limit or prevent other disruption reasons.\n{{% /alert %}}\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nMisconfigured PDBs and pods with the `karpenter.sh/do-not-disrupt` annotation may block draining indefinitely.\nFor this reason, it is not recommended to set `expireAfter` without also setting `terminationGracePeriod` **if** your cluster has pods with the `karpenter.sh/do-not-disrupt` annotation.\nDoing so can result in partially drained nodes stuck in the cluster, driving up cluster cost and potentially requiring manual intervention to resolve.\n{{% /alert %}}\n\n### Interruption\n\nIf interruption-handling is enabled, Karpenter will watch for upcoming involuntary interruption events that would cause disruption to your workloads. These interruption events include:\n\n* Spot Interruption Warnings\n* Scheduled Change Health Events (Maintenance Events)\n* Instance Terminating Events\n* Instance Stopping Events\n\nWhen Karpenter detects one of these events will occur to your nodes, it automatically taints, 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.\n\nFor Spot interruptions, the NodePool will start a new node as soon as it sees the Spot interruption warning. Spot interruptions have a __2 minute notice__ before Amazon EC2 reclaims the instance. Once Karpenter has received this warning it will begin draining the node while in parallel provisioning a new node. Karpenter's average node startup time means that, generally, there is sufficient time for the new node to become ready before EC2 initiates termination for the spot instance.\n{{% alert title=\"Note\" color=\"primary\" %}}\nKarpenter publishes Kubernetes events to the node for all events listed above in addition to [__Spot Rebalance Recommendations__](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/rebalance-recommendations.html). Karpenter does not currently support taint, drain, and terminate logic for Spot Rebalance Recommendations.\n\nIf you require handling for Spot Rebalance Recommendations, you can use the [AWS Node Termination Handler (NTH)](https://github.com/aws/aws-node-termination-handler) alongside Karpenter; however, note that the AWS Node Termination Handler cordons and drains nodes on rebalance recommendations, potentially causing more node churn in the cluster than with interruptions alone. Further information can be found in the [Troubleshooting Guide]({{< ref \"../troubleshooting#aws-node-termination-handler-nth-interactions\" >}}).\n{{% /alert %}}\n\nKarpenter 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-karpenter/#create-the-karpenter-infrastructure-and-iam-roles).\n\nTo enable interruption handling, configure the `--interruption-queue` CLI argument with the name of the interruption queue provisioned to handle interruption events.\n\n## Controls\n\n### TerminationGracePeriod\n\nTo configure a maximum termination duration, `terminationGracePeriod` should be used.\nIt is configured through a NodePool's [`spec.template.spec.terminationGracePeriod`]({{<ref \"../concepts/nodepools/#spectemplatespecterminationgraceperiod\" >}}) field, and is persisted to created NodeClaims (`spec.terminationGracePeriod`).\nChanges to the [`spec.template.spec.terminationGracePeriod`]({{<ref \"../concepts/nodepools/#spectemplatespecterminationgraceperiod\" >}}) field on the NodePool will not result in a change for existing NodeClaims - it will induce NodeClaim drift and the replacements will have the updated `terminationGracePeriod`.\n\nOnce a node is disrupted, via either a [graceful](#automated-graceful-methods) or [forceful](#automated-forceful-methods) disruption method, Karpenter will begin draining the node.\nAt this point, the countdown for `terminationGracePeriod` begins.\nOnce the `terminationGracePeriod` elapses, remaining pods will be forcibly deleted and the underlying instance will be terminated.\nA node may be terminated before the `terminationGracePeriod` has elapsed if all disruptable pods have been drained.\n\nIn conjunction with `expireAfter`, `terminationGracePeriod` can be used to enforce an absolute maximum node lifetime.\nThe node will begin to drain once its `expireAfter` has elapsed, and it will be forcibly terminated once its `terminationGracePeriod` has elapsed, making the maximum node lifetime the sum of the two fields.\n\nAdditionally, configuring `terminationGracePeriod` changes the eligibility criteria for disruption via `Drift`.\nWhen configured, a node may be disrupted via drift even if there are pods with blocking PDBs or the `karpenter.sh/do-not-disrupt` annotation scheduled to it.\nThis enables cluster administrators to ensure crucial updates (e.g. AMI updates addressing CVEs) can't be blocked by misconfigured applications.\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nTo ensure that the `terminationGracePeriodSeconds` value for draining pods is respected, pods will be preemptively deleted before the Node's `terminationGracePeriod` has elapsed.\nThis includes pods with blocking [pod disruption budgets](https://kubernetes.io/docs/tasks/run-application/configure-pdb/) or the [`karpenter.sh/do-not-disrupt` annotation]({{<ref \"#pod-level-controls\" >}}).\n\nConsider the following example: a Node with a 1 hour `terminationGracePeriod` has been disrupted and begins to drain.\nA pod with the `karpenter.sh/do-not-disrupt` annotation and a 300 second (5 minute) `terminationGracePeriodsSeconds` is scheduled to it.\n\nIf the pod is still running 55 minutes after the Node begins to drain, the pod will be deleted to ensure its `terminationGracePeriodSeconds` value is respected.\nIf a pod's `terminationGracePeriodSeconds` value exceeds that of the Node it is scheduled to, Karpenter will prioritize the Node's `terminationGracePeriod`.\nThe pod will be deleted as soon as the Node begins to drain, and it will not receive it's full `terminationGracePeriodSeconds`.\n{{% /alert %}}\n\n### NodePool Disruption Budgets\n\nYou can rate limit Karpenter's disruption through the NodePool's `spec.disruption.budgets`. If undefined, Karpenter will default to one budget with `nodes: 10%`. Budgets will consider nodes that are actively being deleted for any reason, and will only block Karpenter from disrupting nodes voluntarily through drift, emptiness, and consolidation. Note that NodePool Disruption Budgets do not prevent Karpenter from terminating expired nodes.\n\n#### Reasons\nKarpenter allows specifying if a budget applies to any of `Drifted`, `Underutilized`, or `Empty`. When a budget has no reasons, it's assumed that it applies to all reasons. When calculating allowed disruptions for a given reason, Karpenter will take the minimum of the budgets that have listed the reason or have left reasons undefined.\n\n#### Nodes\nWhen calculating if a budget will block nodes from disruption, Karpenter lists the total number of nodes owned by a NodePool, subtracting out the nodes owned by that NodePool that are currently being deleted and nodes that are NotReady. If the number of nodes being deleted by Karpenter or any other processes is greater than the number of allowed disruptions, disruption for this node will not proceed.\n\nIf the budget is configured with a percentage value, such as `20%`, Karpenter will calculate the number of allowed disruptions as `allowed_disruptions = roundup(total * percentage) - total_deleting - total_notready`. If otherwise defined as a non-percentage value, Karpenter will simply use that number as a static ceiling `non_percentage_value - total_deleting - total_notready`. For multiple budgets in a NodePool, Karpenter will take the minimum value (most restrictive) of each of the budgets.\n\nFor example, the following NodePool with three budgets defines the following requirements:\n- The first budget will only allow 20% of nodes owned by that NodePool to be disrupted if it's empty or drifted. For instance, if there were 19 nodes owned by the NodePool, 4 empty or drifted nodes could be disrupted, rounding up from `19 * .2 = 3.8`.\n- The second budget acts as a ceiling to the previous budget, only allowing 5 disruptions when there are more than 25 nodes.\n- The last budget only blocks disruptions during the first 10 minutes of the day, where 0 disruptions are allowed, only applying to underutilized nodes.\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\nspec:\n  template:\n    spec:\n      expireAfter: 720h # 30 * 24h = 720h\n  disruption:\n    consolidationPolicy: WhenEmptyOrUnderutilized\n    budgets:\n    - nodes: \"20%\"\n      reasons:\n      - \"Empty\"\n      - \"Drifted\"\n    - nodes: \"5\"\n    - nodes: \"0\"\n      schedule: \"@daily\"\n      duration: 10m\n      reasons:\n      - \"Underutilized\"\n```\n\n#### Schedule\nSchedule is a cronjob schedule. Generally, the cron syntax is five space-delimited values with options below, with additional special macros like `@yearly`, `@monthly`, `@weekly`, `@daily`, `@hourly`.\nFollow the [Kubernetes documentation](https://kubernetes.io/docs/concepts/workloads/controllers/cron-jobs/#writing-a-cronjob-spec) for more information on how to follow the cron syntax. Timezones are not currently supported. Schedules are always in UTC.\n\n```bash\n# ┌───────────── minute (0 - 59)\n# │ ┌───────────── hour (0 - 23)\n# │ │ ┌───────────── day of the month (1 - 31)\n# │ │ │ ┌───────────── month (1 - 12)\n# │ │ │ │ ┌───────────── day of the week (0 - 6) (Sunday to Saturday;\n# │ │ │ │ │                                   7 is also Sunday on some systems)\n# │ │ │ │ │                                   OR sun, mon, tue, wed, thu, fri, sat\n# │ │ │ │ │\n# * * * * *\n```\n\n#### Duration\nDuration allows compound durations with minutes and hours values such as `10h5m` or `30m` or `160h`. Since cron syntax does not accept denominations smaller than minutes, users can only define minutes or hours.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nDuration and Schedule must be defined together. When omitted, the budget is always active. When defined, the schedule determines a starting point where the budget will begin being enforced, and the duration determines how long from that starting point the budget will be enforced.\n{{% /alert %}}\n\n### Pod-Level Controls\n\nPods with blocking PDBs will not be evicted by the [Termination Controller]({{<ref \"#termination-controller\">}}) or be considered for voluntary disruption actions. When multiple pods on a node have different PDBs, none of the PDBs may be blocking for Karpenter to voluntary disrupt a node. This can create complex eviction scenarios:\n  - If a pod matches multiple PDBs (via label selectors), ALL of these PDBs must allow for disruption\n  - When different pods on the same node belong to different PDBs, ALL PDBs must simultaneously permit eviction\n  - A single blocking PDB can prevent the entire node from being voluntary disrupted\n\nFor example, consider a node with these pods and PDBs:\n- Pod A: Matches PDB-1 (maxUnavailable: 0) and PDB-2 (maxUnavailable: 1)\n- Pod B: Matches PDB-3 (minAvailable: 100%)\n- Pod C: No PDB\n\nIn this scenario, Karpenter cannot voluntary disrupt the node because:\n1. Pod A is blocked by PDB-1 even though PDB-2 would allow disruption\n2. Pod B is blocked by PDB-3's requirement for 100% availability\n\nAs seen in this example, the more PDBs there are affecting a Node, the more difficult it will be for Karpenter to find an opportunity to perform voluntary disruption actions.\n\nSecondly, you can block Karpenter from voluntarily disrupting and draining pods by adding the `karpenter.sh/do-not-disrupt: \"true\"` annotation to the pod.\nYou can treat this annotation as a single-pod, permanently blocking PDB.\nThis has the following consequences:\n- Nodes with `karpenter.sh/do-not-disrupt` pods will be excluded from [Consolidation]({{<ref \"#consolidation\" >}}), and conditionally excluded from [Drift]({{<ref \"#drift\" >}}).\n  - If the Node's owning NodeClaim has a [`terminationGracePeriod`]({{<ref \"#terminationgraceperiod\" >}}) configured, it will still be eligible for disruption via drift.\n- Like pods with a blocking PDB, pods with the `karpenter.sh/do-not-disrupt` annotation will **not** be gracefully evicted by the [Termination Controller]({{<ref \"#termination-controller\">}}).\n  Karpenter will not be able to complete termination of the node until one of the following conditions is met:\n  - All pods with the `karpenter.sh/do-not-disrupt` annotation are removed.\n  - All pods with the `karpenter.sh/do-not-disrupt` annotation have entered a [terminal phase](https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#pod-phase) (`Succeeded` or `Failed`).\n  - The owning NodeClaim's [`terminationGracePeriod`]({{<ref \"#terminationgraceperiod\" >}}) has elapsed.\n\nThis is useful for pods that you want to run from start to finish without disruption.\nExamples of pods that you might want to opt-out of disruption include an 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.\n\n```yaml\napiVersion: apps/v1\nkind: Deployment\nspec:\n  template:\n    metadata:\n      annotations:\n        karpenter.sh/do-not-disrupt: \"true\"\n```\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nThe `karpenter.sh/do-not-disrupt` annotation does **not** exclude nodes from the forceful disruption methods: [Expiration]({{<ref \"#expiration\" >}}), [Interruption]({{<ref \"#interruption\" >}}), [Node Repair](<ref \"#node-repair\" >), and manual deletion (e.g. `kubectl delete node ...`).\nWhile both interruption and node repair have implicit upper-bounds on termination time, expiration and manual termination do not.\nManual intervention may be required to unblock node termination, by removing pods with the `karpenter.sh/do-not-disrupt` annotation.\nFor this reason, it is not recommended to use the `karpenter.sh/do-not-disrupt` annotation with `expireAfter` **if** you have not also configured `terminationGracePeriod`.\n{{% /alert %}}\n\n### Node-Level Controls\n\nYou can block Karpenter from voluntarily choosing to disrupt certain nodes by setting the `karpenter.sh/do-not-disrupt: \"true\"` annotation on the node. This will prevent disruption actions on the node.\n\n```yaml\napiVersion: v1\nkind: Node\nmetadata:\n  annotations:\n    karpenter.sh/do-not-disrupt: \"true\"\n```\n\n#### Example: Disable Disruption on a NodePool\n\nTo disable disruption for all nodes launched by a NodePool, you can configure its `.spec.disruption.budgets`. Setting a budget of zero nodes will prevent any of those nodes from being considered for voluntary disruption.\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\nspec:\n  disruption:\n    budgets:\n      - nodes: \"0\"\n```\n"
  },
  {
    "path": "website/content/en/v1.0/concepts/nodeclaims.md",
    "content": "---\ntitle: \"NodeClaims\"\nlinkTitle: \"NodeClaims\"\nweight: 30\ndescription: >\n  Understand NodeClaims\n---\n\nKarpenter uses NodeClaims to manage the lifecycle of Kubernetes Nodes with the underlying cloud provider.\nKarpenter will create and delete NodeClaims in response to the demands of Pods in the cluster.\nIt does this by evaluating the requirements of pending pods, finding a compatible [NodePool]({{< ref \"./nodepools\" >}}) and [NodeClass]({{< ref \"./nodeclasses\" >}}) pair, and creating a NodeClaim which meets both sets of requirements.\nAlthough NodeClaims are immutable resources managed by Karpenter, you can monitor NodeClaims to keep track of the status of your Nodes.\n\nIn addition to tracking the lifecycle of Nodes, NodeClaims serve as requests for capacity.\nKarpenter creates NodeClaims in response to provisioning and disruption needs (pre-spin). Whenever Karpenter\ncreates a NodeClaim, it asks the cloud provider to create the instance (launch), register and link the created node\nwith the NodeClaim (registration), and wait for the node and its resources to be ready (initialization).\n\nThis page describes how NodeClaims integrate throughout Karpenter and the cloud provider implementation.\n\nIf you want to learn more about the nodes being managed by Karpenter, you can either look directly at the NodeClaim or at the nodes they are associated with:\n\n* Checking NodeClaims:\nIf something goes wrong in the process of creating a node, you can look at the NodeClaim\nto see where the node creation process might have failed. `kubectl get nodeclaims` will show you the NodeClaims\nfor the cluster, and its linked node. Using `kubectl describe nodeclaim <nodeclaim>` will show the status of a particular NodeClaim.\nFor example, if the node is NotReady, you might see statuses indicating that the NodeClaim failed to launch, register, or initialize.\nThere will be logs emitted by the Karpenter controller to indicate this too.\n\n* Checking nodes:\nUse commands such as `kubectl get node` and  `kubectl describe node <nodename>` to see the actual resources,\nlabels, and other attributes associated with a particular node.\n\n## NodeClaim roles in node creation\n\nNodeClaims provide a critical role in the Karpenter workflow for provisioning capacity, and in node disruptions.\n\nThe following diagram illustrates how NodeClaims interact with other components during Karpenter-driven node creation.\n\n![nodeclaim-node-creation](/nodeclaims.png)\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nConfigure the `KARPENTER_NAMESPACE` environment variable to the namespace where you've installed Karpenter (`kube-system` is the default). Follow along with the Karpenter logs in your cluster and do the following:\n\n```bash\nexport KARPENTER_NAMESPACE=\"kube-system\"\nkubectl logs -f -n \"${KARPENTER_NAMESPACE}\" \\\n   -l app.kubernetes.io/name=karpenter\n```\nIn a separate terminal, start some pods that would require Karpenter to create nodes to handle those pods.\nFor example, start up some inflate pods as described in [Scale up deployment]({{< ref \"../getting-started/getting-started-with-karpenter/#6-scale-up-deployment\" >}}).\n{{% /alert %}}\n\nAs illustrated in the previous diagram, Karpenter interacts with NodeClaims and related components when creating a node:\n\n1. Watches for pods and monitors NodePools and NodeClasses:\n    * Checks the pod scheduling constraints and resource requests.\n    * Cross-references the requirements with the existing NodePools and NodeClasses, (e.g. zones, arch, os)\n\n   **Example log:**\n   ```json\n   {\n       \"level\": \"INFO\",\n       \"time\": \"2024-06-22T02:24:16.114Z\",\n       \"message\": \"found provisionable pod(s)\",\n       \"commit\": \"490ef94\",\n       \"Pods\": \"default/inflate-66fb68585c-xvs86, default/inflate-66fb68585c-hpcdz, default/inflate-66fb68585c-8xztf,01234567adb205c7e default/inflate-66fb68585c-t29d8, default/inflate-66fb68585c-nxflz\",\n       \"duration\": \"100.761702ms\"\n   }\n   ```\n\n2. Computes the shape and size of a NodeClaim (or NodeClaims) to create in the cluster to fit the set of pods from step 1.\n\n   **Example log:**\n   ```json\n   {\n       \"level\": \"INFO\",\n       \"time\": \"2024-06-22T02:24:16.114Z\",\n       \"message\": \"computed new nodeclaim(s) to fit pod(s)\",\n       \"controller\": \"provisioner\",\n       \"nodeclaims\": 1,\n       \"pods\": 5\n   }\n   ```\n\n3. Creates the NodeClaim object in the cluster.\n\n   **Example log:**\n   ```json\n   {\n       \"level\": \"INFO\",\n       \"time\": \"2024-06-22T02:24:16.128Z\",\n       \"message\": \"created nodeclaim\",\n       \"controller\": \"provisioner\",\n       \"NodePool\": {\n           \"name\":\"default\"\n       },\n       \"NodeClaim\": {\n           \"name\":\"default-sfpsl\"\n       },\n       \"requests\": {\n           \"cpu\":\"5150m\",\n           \"pods\":\"8\"\n       },\n       \"instance-types\": \"c3.2xlarge, c4.2xlarge, c4.4xlarge, c5.2xlarge, c5.4xlarge and 55 other(s)\"\n   }\n   ```\n\n4. Finds the new NodeClaim and translates it into an API call to create a cloud provider instance, logging\n   the response of the API call.\n\n   If the API response is an unrecoverable error, such as an Insufficient Capacity Error, Karpenter will delete the NodeClaim, mark that instance type as temporarily unavailable, and create another NodeClaim if necessary.\n\n   **Example log:**\n   ```json\n   {\n       \"level\": \"INFO\",\n       \"time\": \"2024-06-22T02:24:19.028Z\",\n       \"message\": \"launched nodeclaim\",\n       \"controller\": \"nodeclaim.lifecycle\",\n       \"NodeClaim\": {\n           \"name\": \"default-sfpsl\"\n       },\n       \"provider-id\": \"aws:///us-west-2b/i-01234567adb205c7e\",\n       \"instance-type\": \"c3.2xlarge\",\n       \"zone\": \"us-west-2b\",\n       \"capacity-type\": \"spot\",\n       \"allocatable\": {\n         \"cpu\": \"7910m\",\n         \"ephemeral-storage\": \"17Gi\",\n         \"memory\": \"13215Mi\",\n         \"pods\": \"58\"\n       }\n   }\n   ```\n\n5. Karpenter watches for the instance to register itself with the cluster as a node, and updates the node's\n   labels, annotations, taints, owner refs, and finalizer to match what was defined in the NodePool and NodeClaim. Once this step is\n   completed, Karpenter will remove the `karpenter.sh/unregistered` taint from the Node.\n\n   If this fails to succeed within 15 minutes, Karpenter will remove the NodeClaim from the cluster and delete\n   the underlying instance, creating another NodeClaim if necessary.\n\n   **Example log:**\n   ```json\n   {\n     \"level\": \"INFO\",\n     \"time\": \"2024-06-22T02:26:19.028Z\",\n     \"message\": \"registered nodeclaim\",\n     \"controller\": \"nodeclaim.lifecycle\",\n     \"NodeClaim\": {\n       \"name\": \"default-sfpsl\"\n     },\n     \"provider-id\": \"aws:///us-west-2b/i-01234567adb205c7e\",\n     \"Node\": {\n       \"name\": \"ip-xxx-xxx-xx-xxx.us-west-2.compute.internal\"\n     }\n   }\n   ```\n\n6. Karpenter continues to watch the node, waiting until the node becomes ready, has all its startup taints removed,\n   and has all requested resources registered on the node.\n\n   **Example log:**\n   ```json\n   {\n     \"level\": \"INFO\",\n     \"time\": \"2024-06-22T02:24:52.642Z\",\n     \"message\": \"initialized nodeclaim\",\n     \"controller\": \"nodeclaim.lifecycle\",\n     \"NodeClaim\": {\n       \"name\": \"default-sfpsl\"\n     },\n     \"provider-id\": \"aws:///us-west-2b/i-01234567adb205c7e\",\n     \"Node\": {\n       \"name\": \"ip-xxx-xxx-xx-xxx.us-west-2.compute.internal\"\n     },\n     \"allocatable\": {\n       \"cpu\": \"7910m\",\n       \"ephemeral-storage\": \"18242267924\",\n       \"hugepages-2Mi\": \"0\",\n       \"memory\": \"14320468Ki\",\n       \"pods\": \"58\"\n     }\n   }\n   ```\n\n## NodeClaim example\nThe following is an example of a NodeClaim. Keep in mind that you cannot modify a NodeClaim.\nTo see the contents of a NodeClaim, get the name of your NodeClaim, then run `kubectl describe` to see its contents:\n\n```\nkubectl get nodeclaim\nNAME            TYPE               ZONE         NODE                                           READY   AGE\ndefault-m6pzn   c7i-flex.2xlarge   us-west-1a   ip-xxx-xxx-xx-xxx.us-west-1.compute.internal   True    7m50s\n\nkubectl describe nodeclaim default-m6pzn\n```\nStarting at the bottom of this example, here are some highlights of what the NodeClaim contains:\n\n* The Node Name (ip-xxx-xxx-xx-xxx.us-west-1.compute.internal) and Provider ID (aws:///us-west-1a/i-xxxxxxxxxxxxxxxxx) identify the instance that is fulfilling this NodeClaim.\n* Image ID (ami-0ccbbed159cce4e37) represents the operating system image running on the node.\n* Status shows the resources that are available on the node (CPU, memory, and so on) as well as the conditions associated with the node. The conditions show the status of the node, including whether the node is launched, registered, and initialized. This is particularly useful if Pods are not deploying to the node and you want to determine the cause.\n* Spec contains the metadata required for Karpenter to launch and manage an instance. This includes any scheduling requirements, resource requirements, the NodeClass reference, taints, and immutable disruption fields (expireAfter and terminationGracePeriod).\n* Additional information includes annotations and labels which should be synced to the Node, creation metadata, the termination finalizer, and the owner reference.\n\n```\nName:         default-x9wxq\nNamespace:\nLabels:       karpenter.k8s.aws/instance-category=c\n              karpenter.k8s.aws/instance-cpu=8\n              karpenter.k8s.aws/instance-cpu-manufacturer=amd\n              karpenter.k8s.aws/instance-ebs-bandwidth=3170\n              karpenter.k8s.aws/instance-encryption-in-transit-supported=true\n              karpenter.k8s.aws/instance-family=c5a\n              karpenter.k8s.aws/instance-generation=5\n              karpenter.k8s.aws/instance-hypervisor=nitro\n              karpenter.k8s.aws/instance-memory=16384\n              karpenter.k8s.aws/instance-network-bandwidth=2500\n              karpenter.k8s.aws/instance-size=2xlarge\n              karpenter.sh/capacity-type=spot\n              karpenter.sh/nodepool=default\n              kubernetes.io/arch=amd64\n              kubernetes.io/os=linux\n              node.kubernetes.io/instance-type=c5a.2xlarge\n              topology.k8s.aws/zone-id=usw2-az3\n              topology.kubernetes.io/region=us-west-2\n              topology.kubernetes.io/zone=us-west-2c\nAnnotations:  compatibility.karpenter.k8s.aws/cluster-name-tagged: true\n              compatibility.karpenter.k8s.aws/kubelet-drift-hash: 15379597991425564585\n              karpenter.k8s.aws/ec2nodeclass-hash: 5763643673275251833\n              karpenter.k8s.aws/ec2nodeclass-hash-version: v3\n              karpenter.k8s.aws/tagged: true\n              karpenter.sh/nodepool-hash: 377058807571762610\n              karpenter.sh/nodepool-hash-version: v3\nAPI Version:  karpenter.sh/v1\nKind:         NodeClaim\nMetadata:\n  Creation Timestamp:  2024-08-07T05:37:30Z\n  Finalizers:\n    karpenter.sh/termination\n  Generate Name:  default-\n  Generation:     1\n  Owner References:\n    API Version:           karpenter.sh/v1\n    Block Owner Deletion:  true\n    Kind:                  NodePool\n    Name:                  default\n    UID:                   6b9c6781-ac05-4a4c-ad6a-7551a07b2ce7\n  Resource Version:        19600526\n  UID:                     98a2ba32-232d-45c4-b7c0-b183cfb13d93\nSpec:\n  Expire After:  720h0m0s\n  Node Class Ref:\n    Group:\n    Kind:   EC2NodeClass\n    Name:   default\n  Requirements:\n    Key:       kubernetes.io/arch\n    Operator:  In\n    Values:\n      amd64\n    Key:       kubernetes.io/os\n    Operator:  In\n    Values:\n      linux\n    Key:       karpenter.sh/capacity-type\n    Operator:  In\n    Values:\n      spot\n    Key:       karpenter.k8s.aws/instance-category\n    Operator:  In\n    Values:\n      c\n      m\n      r\n    Key:       karpenter.k8s.aws/instance-generation\n    Operator:  Gt\n    Values:\n      2\n    Key:       karpenter.sh/nodepool\n    Operator:  In\n    Values:\n      default\n    Key:       node.kubernetes.io/instance-type\n    Operator:  In\n    Values:\n      c3.xlarge\n      c4.xlarge\n      c5.2xlarge\n      c5.xlarge\n      c5a.xlarge\n      c5ad.2xlarge\n      c5ad.xlarge\n      c5d.2xlarge\n  Resources:\n    Requests:\n      Cpu:   3150m\n      Pods:  6\n  Startup Taints:\n    Effect:  NoSchedule\n    Key:     app.dev/example-startup\n  Taints:\n    Effect:                  NoSchedule\n    Key:                     app.dev/example\n  Termination Grace Period:  1h0m0s\nStatus:\n  Allocatable:\n    Cpu:                        7910m\n    Ephemeral - Storage:        17Gi\n    Memory:                     14162Mi\n    Pods:                       58\n    vpc.amazonaws.com/pod-eni:  38\n  Capacity:\n    Cpu:                        8\n    Ephemeral - Storage:        20Gi\n    Memory:                     15155Mi\n    Pods:                       58\n    vpc.amazonaws.com/pod-eni:  38\n  Conditions:\n    Last Transition Time:  2024-08-07T05:38:08Z\n    Message:\n    Reason:                Consolidatable\n    Status:                True\n    Type:                  Consolidatable\n    Last Transition Time:  2024-08-07T05:38:07Z\n    Message:\n    Reason:                Initialized\n    Status:                True\n    Type:                  Initialized\n    Last Transition Time:  2024-08-07T05:37:33Z\n    Message:\n    Reason:                Launched\n    Status:                True\n    Type:                  Launched\n    Last Transition Time:  2024-08-07T05:38:07Z\n    Message:\n    Reason:                Ready\n    Status:                True\n    Type:                  Ready\n    Last Transition Time:  2024-08-07T05:37:55Z\n    Message:\n    Reason:                Registered\n    Status:                True\n    Type:                  Registered\n  Image ID:                ami-08946d4d49fc3f27b\n  Node Name:               ip-xxx-xxx-xxx-xxx.us-west-2.compute.internal\n  Provider ID:             aws:///us-west-2c/i-01234567890123\nEvents:\n  Type    Reason             Age   From       Message\n  ----    ------             ----  ----       -------\n  Normal  Launched           70s   karpenter  Status condition transitioned, Type: Launched, Status: Unknown -> True, Reason: Launched\n  Normal  DisruptionBlocked  70s   karpenter  Cannot disrupt NodeClaim: state node doesn't contain both a node and a nodeclaim\n  Normal  Registered         48s   karpenter  Status condition transitioned, Type: Registered, Status: Unknown -> True, Reason: Registered\n  Normal  Initialized        36s   karpenter  Status condition transitioned, Type: Initialized, Status: Unknown -> True, Reason: Initialized\n  Normal  Ready              36s   karpenter  Status condition transitioned, Type: Ready, Status: Unknown -> True, Reason: Ready\n```\n"
  },
  {
    "path": "website/content/en/v1.0/concepts/nodeclasses.md",
    "content": "---\ntitle: \"NodeClasses\"\nlinkTitle: \"NodeClasses\"\nweight: 2\ndescription: >\n  Configure AWS-specific settings with EC2NodeClasses\n---\n\nNode Classes enable configuration of AWS specific settings.\nEach NodePool must reference an EC2NodeClass using `spec.template.spec.nodeClassRef`.\nMultiple NodePools may point to the same EC2NodeClass.\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\nspec:\n  template:\n    spec:\n      nodeClassRef:\n        group: karpenter.k8s.aws\n        kind: EC2NodeClass\n        name: default\n---\napiVersion: karpenter.k8s.aws/v1\nkind: EC2NodeClass\nmetadata:\n  name: default\nspec:\n  kubelet:\n    podsPerCore: 2\n    maxPods: 20\n    systemReserved:\n      cpu: 100m\n      memory: 100Mi\n      ephemeral-storage: 1Gi\n    kubeReserved:\n      cpu: 200m\n      memory: 100Mi\n      ephemeral-storage: 3Gi\n    evictionHard:\n      memory.available: 5%\n      nodefs.available: 10%\n      nodefs.inodesFree: 10%\n    evictionSoft:\n      memory.available: 500Mi\n      nodefs.available: 15%\n      nodefs.inodesFree: 15%\n    evictionSoftGracePeriod:\n      memory.available: 1m\n      nodefs.available: 1m30s\n      nodefs.inodesFree: 2m\n    evictionMaxPodGracePeriod: 60\n    imageGCHighThresholdPercent: 85\n    imageGCLowThresholdPercent: 80\n    cpuCFSQuota: true\n    clusterDNS: [\"10.0.1.100\"]\n  # Optional, dictates UserData generation and default block device mappings.\n  # May be ommited when using an `alias` amiSelectorTerm, otherwise required.\n  amiFamily: AL2\n\n  # Required, discovers subnets to attach to instances\n  # Each term in the array of subnetSelectorTerms is ORed together\n  # Within a single term, all conditions are ANDed\n  subnetSelectorTerms:\n    # Select on any subnet that has the \"karpenter.sh/discovery: ${CLUSTER_NAME}\"\n    # AND the \"environment: test\" tag OR any subnet with ID \"subnet-09fa4a0a8f233a921\"\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\"\n        environment: test\n    - id: subnet-09fa4a0a8f233a921\n\n  # Required, discovers security groups to attach to instances\n  # Each term in the array of securityGroupSelectorTerms is ORed together\n  # Within a single term, all conditions are ANDed\n  securityGroupSelectorTerms:\n    # Select on any security group that has both the \"karpenter.sh/discovery: ${CLUSTER_NAME}\" tag\n    # AND the \"environment: test\" tag OR any security group with the \"my-security-group\" name\n    # OR any security group with ID \"sg-063d7acfb4b06c82c\"\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\"\n        environment: test\n    - name: my-security-group\n    - id: sg-063d7acfb4b06c82c\n\n  # Optional, IAM role to use for the node identity.\n  # The \"role\" field is immutable after EC2NodeClass creation. This may change in the\n  # future, but this restriction is currently in place today to ensure that Karpenter\n  # avoids leaking managed instance profiles in your account.\n  # Must specify one of \"role\" or \"instanceProfile\" for Karpenter to launch nodes\n  role: \"KarpenterNodeRole-${CLUSTER_NAME}\"\n\n  # Optional, IAM instance profile to use for the node identity.\n  # Must specify one of \"role\" or \"instanceProfile\" for Karpenter to launch nodes\n  instanceProfile: \"KarpenterNodeInstanceProfile-${CLUSTER_NAME}\"\n\n  # Each term in the array of amiSelectorTerms is ORed together\n  # Within a single term, all conditions are ANDed\n  amiSelectorTerms:\n    # Select on any AMI that has both the `karpenter.sh/discovery: ${CLUSTER_NAME}`\n    # AND `environment: test` tags OR any AMI with the name `my-ami` OR an AMI with\n    # ID `ami-123`\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\"\n        environment: test\n    - name: my-ami\n    - id: ami-123\n    # Select EKS optimized AL2023 AMIs with version `v20240703`. This term is mutually\n    # exclusive and can't be specified with other terms.\n    # - alias: al2023@v20240703\n\n  # Optional, propagates tags to underlying EC2 resources\n  tags:\n    team: team-a\n    app: team-a-app\n\n  # Optional, configures IMDS for the instance\n  metadataOptions:\n    httpEndpoint: enabled\n    httpProtocolIPv6: disabled\n    httpPutResponseHopLimit: 1 # This is changed to disable IMDS access from containers not on the host network\n    httpTokens: required\n\n  # Optional, configures storage devices for the instance\n  blockDeviceMappings:\n    - deviceName: /dev/xvda\n      ebs:\n        volumeSize: 100Gi\n        volumeType: gp3\n        iops: 10000\n        encrypted: true\n        kmsKeyID: \"1234abcd-12ab-34cd-56ef-1234567890ab\"\n        deleteOnTermination: true\n        throughput: 125\n        snapshotID: snap-0123456789\n\n  # Optional, use instance-store volumes for node ephemeral-storage\n  instanceStorePolicy: RAID0\n\n  # Optional, overrides autogenerated userdata with a merge semantic\n  userData: |\n    echo \"Hello world\"\n\n  # Optional, configures detailed monitoring for the instance\n  detailedMonitoring: true\n\n  # Optional, configures if the instance should be launched with an associated public IP address.\n  # If not specified, the default value depends on the subnet's public IP auto-assign setting.\n  associatePublicIPAddress: true\nstatus:\n  # Resolved subnets\n  subnets:\n    - id: subnet-0a462d98193ff9fac\n      zone: us-east-2b\n    - id: subnet-0322dfafd76a609b6\n      zone: us-east-2c\n    - id: subnet-0727ef01daf4ac9fe\n      zone: us-east-2b\n    - id: subnet-00c99aeafe2a70304\n      zone: us-east-2a\n    - id: subnet-023b232fd5eb0028e\n      zone: us-east-2c\n    - id: subnet-03941e7ad6afeaa72\n      zone: us-east-2a\n\n  # Resolved security groups\n  securityGroups:\n    - id: sg-041513b454818610b\n      name: ClusterSharedNodeSecurityGroup\n    - id: sg-0286715698b894bca\n      name: ControlPlaneSecurityGroup-1AQ073TSAAPW\n\n  # Resolved AMIs\n  amis:\n    - id: ami-01234567890123456\n      name: custom-ami-amd64\n      requirements:\n        - key: kubernetes.io/arch\n          operator: In\n          values:\n            - amd64\n    - id: ami-01234567890123456\n      name: custom-ami-arm64\n      requirements:\n        - key: kubernetes.io/arch\n          operator: In\n          values:\n            - arm64\n\n  # Generated instance profile name from \"role\"\n  instanceProfile: \"${CLUSTER_NAME}-0123456778901234567789\"\n  conditions:\n    - lastTransitionTime: \"2024-02-02T19:54:34Z\"\n      status: \"True\"\n      type: InstanceProfileReady\n    - lastTransitionTime: \"2024-02-02T19:54:34Z\"\n      status: \"True\"\n      type: SubnetsReady\n    - lastTransitionTime: \"2024-02-02T19:54:34Z\"\n      status: \"True\"\n      type: SecurityGroupsReady\n    - lastTransitionTime: \"2024-02-02T19:54:34Z\"\n      status: \"True\"\n      type: AMIsReady\n    - lastTransitionTime: \"2024-02-02T19:54:34Z\"\n      status: \"True\"\n      type: Ready\n```\nRefer to the [NodePool docs]({{<ref \"./nodepools\" >}}) for settings applicable to all providers. To explore various `EC2NodeClass` configurations, refer to the examples provided [in the Karpenter Github repository](https://github.com/aws/karpenter/blob/v1.0.11/examples/v1/).\n\n\n## spec.kubelet\n\nKarpenter provides the ability to specify a few additional Kubelet arguments.\nThese are all optional and provide support for additional customization and use cases.\nAdjust these only if you know you need to do so.\nFor more details on kubelet settings, see the [KubeletConfiguration reference](https://kubernetes.io/docs/reference/config-api/kubelet-config.v1/).\nThe implemented fields are a subset of the full list of upstream kubelet configuration arguments.\n\n```yaml\nkubelet:\n  podsPerCore: 2\n  maxPods: 20\n  systemReserved:\n    cpu: 100m\n    memory: 100Mi\n    ephemeral-storage: 1Gi\n  kubeReserved:\n    cpu: 200m\n    memory: 100Mi\n    ephemeral-storage: 3Gi\n  evictionHard:\n    memory.available: 5%\n    nodefs.available: 10%\n    nodefs.inodesFree: 10%\n  evictionSoft:\n    memory.available: 500Mi\n    nodefs.available: 15%\n    nodefs.inodesFree: 15%\n  evictionSoftGracePeriod:\n    memory.available: 1m\n    nodefs.available: 1m30s\n    nodefs.inodesFree: 2m\n  evictionMaxPodGracePeriod: 60\n  imageGCHighThresholdPercent: 85\n  imageGCLowThresholdPercent: 80\n  cpuCFSQuota: true\n  clusterDNS: [\"10.0.1.100\"]\n```\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nIf you need to specify a field that isn't present in `spec.kubelet`, you can set it via custom [UserData]({{< ref \"#specuserdata\" >}}).\nFor example, if you wanted to configure `maxPods` and `registryPullQPS` you would set the former through `spec.kubelet` and the latter through UserData.\nThe following example achieves this with AL2023:\n\n```yaml\napiVersion: karpenter.k8s.aws/v1\nkind: EC2NodeClass\nspec:\n  amiSelectorTerms:\n    - alias: al2023@v20240807\n  kubelet:\n    maxPods: 42\n  userData: |\n    apiVersion: node.eks.aws/v1alpha1\n    kind: NodeConfig\n    spec:\n      kubelet:\n        config:\n          # Configured through UserData since unavailable in `spec.kubelet`\n          registryPullQPS: 10\n```\n\nNote that when using the `Custom` AMIFamily you will need to specify fields **both** in `spec.kublet` and `spec.userData`.\n{{% /alert %}}\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nThe Bottlerocket AMIFamily does not support the following fields:\n\n* `evictionSoft`\n* `evictionSoftGracePeriod`\n* `evictionMaxPodGracePeriod`\n\nIf any of these fields are specified on a Bottlerocket EC2NodeClass, they will be ommited from generated UserData and ignored for scheduling purposes.\nSupport for these fields can be tracked via GitHub issue [#3722](https://github.com/aws/karpenter-provider-aws/issues/3722).\n{{% /alert %}}\n\n#### Pods Per Core\n\nAn alternative way to dynamically set the maximum density of pods on a node is to use the `.spec.kubelet.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.\n\nThe 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.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\n`maxPods` may not be set in the `kubelet` of an EC2NodeClass, 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 EC2NodeClass will not cause unexpected behavior by exceeding the `maxPods` value.\n{{% /alert %}}\n\n#### Max Pods\n\nFor 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.kubelet.maxPods`. This value will be used during Karpenter pod scheduling and passed through to `--max-pods` on kubelet startup.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nWhen 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.\n{{% /alert %}}\n\n{{% alert title=\"Windows Support Notice\" color=\"warning\" %}}\nPresently, Windows worker nodes do not support using more than one ENI.\nAs a consequence, the number of IP addresses, and subsequently, the number of pods that a Windows worker node can support is limited by the number of IPv4 addresses available on the primary ENI.\nCurrently, Karpenter will only consider individual secondary IP addresses when calculating the pod density limit.\n{{% /alert %}}\n\n### Reserved Resources\n\nKarpenter 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.kubelet.systemReserved` values and the `--kube-reserved` configuration defaults with the `.spec.kubelet.kubeReserved` values.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nKarpenter considers these reserved resources when computing the allocatable ephemeral storage on a given instance type.\nIf `kubeReserved` is not specified, Karpenter will compute the default reserved [CPU](https://github.com/awslabs/amazon-eks-ami/blob/db28da15d2b696bc08ac3aacc9675694f4a69933/files/bootstrap.sh#L251) and [memory](https://github.com/awslabs/amazon-eks-ami/blob/db28da15d2b696bc08ac3aacc9675694f4a69933/files/bootstrap.sh#L235) resources for the purpose of ephemeral storage computation.\nThese defaults are based on the defaults on Karpenter's supported AMI families, which are not the same as the kubelet defaults.\nYou should be aware of the CPU and memory default calculation when using Custom AMI Families. If they don't align, there may be a difference in Karpenter's computed allocatable ephemeral storage and the actually ephemeral storage available on the node.\n{{% /alert %}}\n\n### Eviction Thresholds\n\nThe 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.\n\nKubelet 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.\n\nKarpenter supports [hard evictions](https://kubernetes.io/docs/concepts/scheduling-eviction/node-pressure-eviction/#hard-eviction-thresholds) through the `.spec.kubelet.evictionHard` field and [soft evictions](https://kubernetes.io/docs/concepts/scheduling-eviction/node-pressure-eviction/#soft-eviction-thresholds) through the `.spec.kubelet.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.\n\n```yaml\nkubelet:\n  evictionHard:\n    memory.available: 500Mi\n    nodefs.available: 10%\n    nodefs.inodesFree: 10%\n    imagefs.available: 5%\n    imagefs.inodesFree: 5%\n    pid.available: 7%\n  evictionSoft:\n    memory.available: 1Gi\n    nodefs.available: 15%\n    nodefs.inodesFree: 15%\n    imagefs.available: 10%\n    imagefs.inodesFree: 10%\n    pid.available: 10%\n```\n\n#### Supported Eviction Signals\n\n| Eviction Signal    | Description                                                                     |\n|--------------------|---------------------------------------------------------------------------------|\n| memory.available   | memory.available := node.status.capacity[memory] - node.stats.memory.workingSet |\n| nodefs.available   | nodefs.available := node.stats.fs.available                                     |\n| nodefs.inodesFree  | nodefs.inodesFree := node.stats.fs.inodesFree                                   |\n| imagefs.available  | imagefs.available := node.stats.runtime.imagefs.available                       |\n| imagefs.inodesFree | imagefs.inodesFree := node.stats.runtime.imagefs.inodesFree                     |\n| pid.available      | pid.available := node.stats.rlimit.maxpid - node.stats.rlimit.curproc           |\n\nFor 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.\n\n#### Soft Eviction Grace Periods\n\nSoft 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.\n\nOptionally, 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.\n\n```yaml\nkubelet:\n  evictionSoftGracePeriod:\n    memory.available: 1m\n    nodefs.available: 1m30s\n    nodefs.inodesFree: 2m\n    imagefs.available: 1m30s\n    imagefs.inodesFree: 2m\n    pid.available: 2m\n  evictionMaxPodGracePeriod: 60\n```\n\n### Pod Density\n\nBy 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.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nBy default, the VPC CNI allocates IPs for a node and pods from the same subnet. With [VPC CNI Custom Networking](https://aws.github.io/aws-eks-best-practices/networking/custom-networking), the pods will receive IP addresses from another subnet dedicated to pod IPs. This approach makes it easier to manage IP addresses and allows for separate Network Access Control Lists (NACLs) applied to your pods. VPC CNI Custom Networking reduces the pod density of a node since one of the ENI attachments will be used for the node and cannot share the allocated IPs on the interface to pods. Karpenter supports VPC CNI Custom Networking and similar CNI setups where the primary node interface is separated from the pods interfaces through a global environment variable `RESERVED_ENIS`, see [Settings]({{<ref \"../reference/settings\" >}}). In the common case, `RESERVED_ENIS` should be set to `\"1\"` if using Custom Networking.\n{{% /alert %}}\n\n{{% alert title=\"Windows Support Notice\" color=\"warning\" %}}\nIt's currently not possible to specify custom networking with Windows nodes.\n{{% /alert %}}\n\n## spec.amiFamily\n\nAMIFamily dictates the default bootstrapping logic for nodes provisioned through this `EC2NodeClass`.\nAn `amiFamily` is only required if you don't specify a `spec.amiSelectorTerms.alias` object.\nFor example, if you specify `alias: al2023@v20240807`, the `amiFamily` is implicitly `AL2023`.\n\nAMIFamily does not impact which AMI is discovered, only the UserData generation and default BlockDeviceMappings. To automatically discover EKS optimized AMIs, use the new [`alias` field in amiSelectorTerms]({{< ref \"#specamiselectorterms\" >}}).\n\n{{% alert title=\"Ubuntu Support Dropped at v1\" color=\"warning\" %}}\n\nSupport for the Ubuntu AMIFamily has been dropped at Karpenter `v1.0.0`.\nThis means Karpenter no longer supports automatic AMI discovery and UserData generation for Ubuntu.\nTo continue using Ubuntu AMIs, you will need to select Ubuntu AMIs using `amiSelectorTerms`.\n\nAdditionally, you will need to either maintain UserData yourself using the `Custom` AMIFamily, or you can use the `AL2` AMIFamily and custom `blockDeviceMappings` (as shown below).\nThe `AL2` family has an identical UserData format, but this compatibility isn't guaranteed long term.\nChanges to AL2's or Ubuntu's UserData format could result in incompatibility, at which point the `Custom` AMIFamily must be used.\n\n**Ubuntu NodeClass Example:**\n```yaml\napiVersion: karpenter.k8s.aws/v1\nkind: EC2NodeClass\nspec:\n  amiFamily: AL2\n  amiSelectorTerms:\n    - id: ami-placeholder\n  blockDeviceMappings:\n  - deviceName: '/dev/sda1'\n    rootVolume: true\n    ebs:\n      encrypted: true\n      volumeType: gp3\n      volumeSize: 20Gi\n```\n\n{{% /alert %}}\n\n\n### AL2\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nNote that Karpenter will automatically generate a call to the `/etc/eks/bootstrap.sh` script as part of its generated UserData. When using `amiFamily: AL2` you should not call this script yourself in `.spec.userData`. If you need to, use the [Custom AMI family]({{< ref \"./nodeclasses/#custom\" >}}) instead.\n{{% /alert %}}\n\n```bash\nMIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"//\"\n\n--//\nContent-Type: text/x-shellscript; charset=\"us-ascii\"\n\n#!/bin/bash -xe\nexec > >(tee /var/log/user-data.log|logger -t user-data -s 2>/dev/console) 2>&1\n/etc/eks/bootstrap.sh 'test-cluster' --apiserver-endpoint 'https://test-cluster' --b64-cluster-ca 'ca-bundle' \\\n--dns-cluster-ip '10.100.0.10' \\\n--use-max-pods false \\\n--kubelet-extra-args '--node-labels=karpenter.sh/capacity-type=on-demand,karpenter.sh/nodepool=test  --max-pods=110'\n--//--\n```\n\n### AL2023\n\n```text\nMIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"//\"\n\n--//\nContent-Type: application/node.eks.aws\n\n# Karpenter Generated NodeConfig\napiVersion: node.eks.aws/v1alpha1\nkind: NodeConfig\nspec:\n  cluster:\n    name: test-cluster\n    apiServerEndpoint: https://example.com\n    certificateAuthority: ca-bundle\n    cidr: 10.100.0.0/16\n  kubelet:\n    config:\n      maxPods: 110\n    flags:\n      - --node-labels=karpenter.sh/capacity-type=on-demand,karpenter.sh/nodepool=test\n\n--//--\n\n```\n\n### Bottlerocket\n\n```toml\n[settings]\n[settings.kubernetes]\napi-server = 'https://test-cluster'\ncluster-certificate = 'ca-bundle'\ncluster-name = 'test-cluster'\ncluster-dns-ip = '10.100.0.10'\nmax-pods = 110\n\n[settings.kubernetes.node-labels]\n'karpenter.sh/capacity-type' = 'on-demand'\n'karpenter.sh/nodepool' = 'test'\n```\n\n### Windows2019\n\n```powershell\n<powershell>\n[string]$EKSBootstrapScriptFile = \"$env:ProgramFiles\\Amazon\\EKS\\Start-EKSBootstrap.ps1\"\n& $EKSBootstrapScriptFile -EKSClusterName 'test-cluster' -APIServerEndpoint 'https://test-cluster' -Base64ClusterCA 'ca-bundle' -KubeletExtraArgs '--node-labels=\"karpenter.sh/capacity-type=on-demand,karpenter.sh/nodepool=test\" --max-pods=110' -DNSClusterIP '10.100.0.10'\n</powershell>\n```\n\n### Windows2022\n\n```powershell\n<powershell>\n[string]$EKSBootstrapScriptFile = \"$env:ProgramFiles\\Amazon\\EKS\\Start-EKSBootstrap.ps1\"\n& $EKSBootstrapScriptFile -EKSClusterName 'test-cluster' -APIServerEndpoint 'https://test-cluster' -Base64ClusterCA 'ca-bundle' -KubeletExtraArgs '--node-labels=\"karpenter.sh/capacity-type=on-demand,karpenter.sh/nodepool=test\" --max-pods=110' -DNSClusterIP '10.100.0.10'\n</powershell>\n```\n\n### Custom\n\nThe `Custom` AMIFamily ships without any default userData to allow you to configure custom bootstrapping for control planes or images that don't support the default methods from the other families. For this AMIFamily, kubelet must add the taint `karpenter.sh/unregistered:NoExecute` via the `--register-with-taints` flag ([flags](https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet/#options)) or the KubeletConfiguration spec ([options](https://kubernetes.io/docs/reference/config-api/kubelet-config.v1/#kubelet-config-k8s-io-v1-CredentialProviderConfig) and [docs](https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/)). Karpenter will fail to register nodes that do not have this taint.\n\n## spec.subnetSelectorTerms\n\nSubnet Selector Terms allow you to specify selection logic for a set of subnet options that Karpenter can choose from when launching an instance from the `EC2NodeClass`. Karpenter discovers subnets through the `EC2NodeClass` using ids or [tags](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html). 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.\n\nThis selection logic is modeled as terms, where each term contains multiple conditions that must all be satisfied for the selector to match. Effectively, all requirements within a single term are ANDed together. It's possible that you may want to select on two different subnets that have unrelated requirements. In this case, you can specify multiple terms which will be ORed together to form your selection logic. The example below shows how this selection logic is fulfilled.\n\n```yaml\nsubnetSelectorTerms:\n  # Select on any subnet that has the \"karpenter.sh/discovery: ${CLUSTER_NAME}\"\n  # AND the \"environment: test\" tag OR any subnet with ID \"subnet-09fa4a0a8f233a921\"\n  - tags:\n      karpenter.sh/discovery: \"${CLUSTER_NAME}\"\n      environment: test\n  - id: subnet-09fa4a0a8f233a921\n```\n\n{{% alert title=\"Tip\" color=\"secondary\" %}}\nSubnets may be specified by any tag, including `Name`. Selecting tag values using wildcards (`*`) is supported.\n{{% /alert %}}\n\n#### Examples\n\nSelect all with a specified tag key:\n```yaml\nspec:\n  subnetSelectorTerms:\n    - tags:\n        karpenter.sh/discovery/MyClusterName: '*'\n```\n\nSelect by name and tag (all criteria must match):\n```yaml\nspec:\n  subnetSelectorTerms:\n    - tags:\n        Name: my-subnet\n        MyTag: '' # matches all resources with the tag\n```\n\nSelect using multiple tag terms:\n```yaml\nspec:\n  subnetSelectorTerms:\n    - tags:\n        Name: \"my-subnet-1\"\n    - tags:\n        Name: \"my-subnet-2\"\n```\n\nSelect using wildcards:\n```yaml\nspec:\n  subnetSelectorTerms:\n    - tags:\n        Name: \"*Public*\"\n\n```\n\nSelect using ids:\n```yaml\nspec:\n  subnetSelectorTerms:\n    - id: \"subnet-09fa4a0a8f233a921\"\n    - id: \"subnet-0471ca205b8a129ae\"\n```\n\n\n## spec.securityGroupSelectorTerms\n\nSecurity Group Selector Terms allow you to specify selection logic for all security groups that will be attached to an instance launched from the `EC2NodeClass`. The security group of an instance is comparable to a set of firewall rules.\n[EKS creates at least two security groups by default](https://docs.aws.amazon.com/eks/latest/userguide/sec-group-reqs.html).\n\nThis selection logic is modeled as terms, where each term contains multiple conditions that must all be satisfied for the selector to match. Effectively, all requirements within a single term are ANDed together. It's possible that you may want to select on two different security groups that have unrelated requirements. In this case, you can specify multiple terms which will be ORed together to form your selection logic. The example below shows how this selection logic is fulfilled.\n\n```yaml\nsecurityGroupSelectorTerms:\n  # Select on any security group that has both the \"karpenter.sh/discovery: ${CLUSTER_NAME}\" tag\n  # AND the \"environment: test\" tag OR any security group with the \"my-security-group\" name\n  # OR any security group with ID \"sg-063d7acfb4b06c82c\"\n  - tags:\n      karpenter.sh/discovery: \"${CLUSTER_NAME}\"\n      environment: test\n  - name: my-security-group\n  - id: sg-063d7acfb4b06c82c\n```\n\n{{% alert title=\"Tip\" color=\"secondary\" %}}\nSecurity groups may be specified by any tag, including \"Name\". Selecting tags using wildcards (`*`) is supported.\n{{% /alert %}}\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nWhen launching nodes, Karpenter uses all the security groups that match the selector. If you choose to use the `kubernetes.io/cluster/$CLUSTER_NAME` tag for discovery, note that 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.\n\nTo verify if this restriction affects you, run the following commands.\n```bash\nCLUSTER_VPC_ID=\"$(aws eks describe-cluster --name $CLUSTER_NAME --query cluster.resourcesVpcConfig.vpcId --output text)\"\n\naws ec2 describe-security-groups --filters Name=vpc-id,Values=$CLUSTER_VPC_ID Name=tag-key,Values=kubernetes.io/cluster/$CLUSTER_NAME --query 'SecurityGroups[].[GroupName]' --output text\n```\n\nIf multiple securityGroups are printed, you will need more specific securityGroupSelectorTerms. We generally recommend that you use the `karpenter.sh/discovery: $CLUSTER_NAME` tag selector instead.\n{{% /alert %}}\n\n#### Examples\n\nSelect all assigned to a cluster:\n```yaml\nspec:\n  securityGroupSelectorTerms:\n    - tags:\n        kubernetes.io/cluster/$CLUSTER_NAME: \"owned\"\n```\n\nSelect all with a specified tag key:\n```yaml\nspec:\n  securityGroupSelectorTerms:\n    - tags:\n        MyTag: '*'\n```\n\nSelect by name and tag (all criteria must match):\n```yaml\nspec:\n  securityGroupSelectorTerms:\n    - name: my-security-group\n      tags:\n        MyTag: '*' # matches all resources with the tag\n```\n\nSelect using multiple tag terms:\n```yaml\nspec:\n  securityGroupSelectorTerms:\n    - tags:\n        Name: \"my-security-group-1\"\n    - tags:\n        Name: \"my-security-group-2\"\n```\n\nSelect by name using a wildcard:\n```yaml\nspec:\n  securityGroupSelectorTerms:\n    - name: \"*Public*\"\n```\n\nSelect using ids:\n```yaml\nspec:\n securityGroupSelectorTerms:\n    - id: \"sg-063d7acfb4b06c82c\"\n    - id: \"sg-06e0cf9c198874591\"\n```\n\n## spec.role\n\n`Role` is an optional field and tells Karpenter which IAM identity nodes should assume. You must specify one of `role` or `instanceProfile` when creating a Karpenter `EC2NodeClass`. If using the [Karpenter Getting Started Guide]({{<ref \"../getting-started/getting-started-with-karpenter\" >}}) to deploy Karpenter, you can use the `KarpenterNodeRole-$CLUSTER_NAME` role provisioned by that process.\n\n```yaml\nspec:\n  role: \"KarpenterNodeRole-$CLUSTER_NAME\"\n```\n\n## spec.instanceProfile\n\n`InstanceProfile` is an optional field and tells Karpenter which IAM identity nodes should assume. You must specify one of `role` or `instanceProfile` when creating a Karpenter `EC2NodeClass`. If you use the `instanceProfile` field instead of `role`, Karpenter will not manage the InstanceProfile on your behalf; instead, it expects that you have pre-provisioned an IAM instance profile and assigned it a role.\n\nYou can provision and assign a role to an IAM instance profile using [CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-instanceprofile.html) or by using the [`aws iam create-instance-profile`](https://docs.aws.amazon.com/cli/latest/reference/iam/create-instance-profile.html) and [`aws iam add-role-to-instance-profile`](https://docs.aws.amazon.com/cli/latest/reference/iam/add-role-to-instance-profile.html) commands in the CLI.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\n\nFor [private clusters](https://docs.aws.amazon.com/eks/latest/userguide/private-clusters.html) that do not have access to the public internet, using `spec.instanceProfile` is required. `spec.role` cannot be used since Karpenter needs to access IAM endpoints to manage a generated instance profile. IAM [doesn't support private endpoints](https://docs.aws.amazon.com/vpc/latest/privatelink/aws-services-privatelink-support.html) to enable accessing the service without going to the public internet.\n\n{{% /alert %}}\n\n## spec.amiSelectorTerms\n\nAMI Selector Terms are __required__ and are used to configure AMIs for Karpenter to use. AMIs are discovered through alias, id, owner, name, and [tags](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html).\n\nThis selection logic is modeled as terms, where each term contains multiple conditions that must all be satisfied for the selector to match.\nEffectively, all requirements within a single term are ANDed together.\nIt's possible that you may want to select on two different AMIs that have unrelated requirements.\nIn this case, you can specify multiple terms which will be ORed together to form your selection logic.\nThe example below shows how this selection logic is fulfilled.\n\n```yaml\namiSelectorTerms:\n  # Select on any AMI that has both the `karpenter.sh/discovery: ${CLUSTER_NAME}`\n  # AND `environment: test` tags OR any AMI with the name `my-ami` OR an AMI with\n  # ID `ami-123`\n  - tags:\n      karpenter.sh/discovery: \"${CLUSTER_NAME}\"\n      environment: test\n  - name: my-ami\n  - id: ami-123\n  # Select EKS optimized AL2023 AMIs with version `v20240807`. This term is mutually\n  # exclusive and can't be specified with other terms.\n  # - alias: al2023@v20240807\n```\n\nAn `alias` term can be used to select EKS-optimized AMIs. An `alias` is formatted as `family@version`. Family can be one of the following values:\n\n* `al2`\n* `al2023`\n* `bottlerocket`\n* `windows2019`\n* `windows2022`\n\nThe version string can be set to `latest`, or pinned to a specific AMI using the format of that AMI's GitHub release tags.\nFor example, AL2 and AL2023 use dates for their release, so they can be pinned as follows:\n```yaml\nalias: al2023@v20240703\n```\nBottlerocket uses a semantic version for their releases. You can pin bottlerocket as follows:\n```yaml\nalias: bottlerocket@v1.20.4\n```\nThe Windows family does not support pinning, so only `latest` is supported.\n\nThe following commands can be used to determine the versions availble for an alias in your region:\n\n{{< tabpane text=true right=false >}}\n  {{% tab \"AL2023\" %}}\n  ```bash\n  export K8S_VERSION=\"{{< param \"latest_k8s_version\" >}}\"\n  aws ssm get-parameters-by-path --path \"/aws/service/eks/optimized-ami/$K8S_VERSION/amazon-linux-2023/\" --recursive | jq -cr '.Parameters[].Name' | grep -v \"recommended\" | awk -F '/' '{print $10}' | sed -r 's/.*(v[[:digit:]]+)$/\\1/' | sort | uniq\n  ```\n  {{% /tab %}}\n  {{% tab \"AL2\" %}}\n  ```bash\n  export K8S_VERSION=\"{{< param \"latest_k8s_version\" >}}\"\n  aws ssm get-parameters-by-path --path \"/aws/service/eks/optimized-ami/$K8S_VERSION/amazon-linux-2/\" --recursive | jq -cr '.Parameters[].Name' | grep -v \"recommended\" | awk -F '/' '{print $8}' | sed -r 's/.*(v[[:digit:]]+)$/\\1/' | sort | uniq\n  ```\n  {{% /tab %}}\n  {{% tab \"Bottlerocket\" %}}\n  ```bash\n  export K8S_VERSION=\"{{< param \"latest_k8s_version\" >}}\"\n  aws ssm get-parameters-by-path --path \"/aws/service/bottlerocket/aws-k8s-$K8S_VERSION\" --recursive | jq -cr '.Parameters[].Name' | grep -v \"latest\" | awk -F '/' '{print $7}' | sort | uniq\n  ```\n  {{% /tab %}}\n{{< /tabpane >}}\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter supports automatic AMI selection and upgrades using the `latest` version pin, but this is **not** recommended for production environments.\nWhen using `latest`, a new AMI release will cause Karpenter to drift all out-of-date nodes in the cluster, replacing them with nodes running the new AMI.\nWe strongly recommend evaluating new AMIs in a lower environment before rolling them out into a production environment.\nMore details on Karpenter's recommendations for managing AMIs can be found [here]({{< ref \"../tasks/managing-amis\" >}}).\n{{% /alert %}}\n\nTo select an AMI by name, use the `name` field in the selector term. To select an AMI by id, use the `id` field in the selector term. To select AMIs that are not owned by `amazon` or the account that Karpenter is running in, use the `owner` field - you can use a combination of account aliases (e.g. `self` `amazon`, `your-aws-account-name`) and account IDs.\n\nIf owner is not set for `name`, it defaults to `self,amazon`, preventing Karpenter from inadvertently selecting an AMI that is owned by a different account. Tags don't require an owner as tags can only be discovered by the user who created them.\n\n{{% alert title=\"Tip\" color=\"secondary\" %}}\nAMIs may be specified by any AWS tag, including `Name`. Selecting by tag or by name using wildcards (`*`) is supported.\n{{% /alert %}}\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nIf `amiSelectorTerms` match more than one AMI, Karpenter will automatically determine which AMI best fits the workloads on the launched worker node under the following constraints:\n\n* When launching nodes, Karpenter automatically determines which architecture a custom AMI is compatible with and will use images that match an instanceType's requirements.\n    * Unless using an alias, Karpenter **cannot** detect requirements other than architecture. If you need to specify different AMIs for different kind of nodes (e.g. accelerated GPU AMIs), you should use a separate `EC2NodeClass`.\n* If multiple AMIs are found that can be used, Karpenter will choose the latest one.\n* If no AMIs are found that can be used, then no nodes will be provisioned.\n{{% /alert %}}\n\n#### Examples\n\nSelect by AMI family and version:\n```yaml\n  amiSelectorTerms:\n    - alias: al2023@v20240807\n```\n\nSelect all with a specified tag:\n\n```yaml\n  amiSelectorTerms:\n    - tags:\n        karpenter.sh/discovery/MyClusterName: '*'\n```\n\nSelect by name:\n```yaml\n  amiSelectorTerms:\n    - name: my-ami\n```\n\nSelect by `Name` tag:\n```yaml\n  amiSelectorTerms:\n    - tags:\n        Name: my-ami\n```\n\nSelect by name and owner:\n```yaml\n  amiSelectorTerms:\n    - name: my-ami\n      owner: self\n    - name: my-ami\n      owner: \"0123456789\"\n```\n\nSelect by name using a wildcard:\n```yaml\nspec:\n  amiSelectorTerms:\n    - name: \"*EKS*\"\n```\n\nSelect by all under an owner:\n```yaml\nspec:\n  amiSelectorTerms:\n    - name: \"*\"\n      owner: self\n```\n\nSpecify using ids:\n```yaml\n  amiSelectorTerms:\n    - id: \"ami-123\"\n    - id: \"ami-456\"\n```\n\n## spec.tags\n\nKarpenter adds tags to all resources it creates, including EC2 Instances, EBS volumes, and Launch Templates. The default set of tags are listed below.\n\n```yaml\nName: <node-name>\nkarpenter.sh/nodeclaim: <nodeclaim-name>\nkarpenter.sh/nodepool: <nodepool-name>\nkarpenter.k8s.aws/ec2nodeclass: <ec2nodeclass-name>\nkubernetes.io/cluster/<cluster-name>: owned\neks:eks-cluster-name: <cluster-name>\n```\n\nAdditional tags can be added in the tags section, which will be merged with the default tags specified above.\n```yaml\nspec:\n  tags:\n    InternalAccountingTag: 1234\n    dev.corp.net/app: Calculator\n    dev.corp.net/team: MyTeam\n```\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nKarpenter allows overrides of the default \"Name\" tag but does not allow overrides to restricted domains (such as \"karpenter.sh\", \"karpenter.k8s.aws\", and \"kubernetes.io/cluster\"). This ensures that Karpenter is able to correctly auto-discover nodes that it owns.\n{{% /alert %}}\n\n## spec.metadataOptions\n\nControl the exposure of [Instance Metadata Service](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html) on EC2 Instances launched by this EC2NodeClass using a generated launch template.\n\nRefer 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.\n\nIf metadataOptions are omitted from this EC2NodeClass, the following default settings are applied:\n\n```yaml\nspec:\n  metadataOptions:\n    httpEndpoint: enabled\n    httpProtocolIPv6: disabled\n    httpPutResponseHopLimit: 1\n    httpTokens: required\n```\n\n## spec.blockDeviceMappings\n\nThe `blockDeviceMappings` field in an `EC2NodeClass` can be used to control the [Elastic Block Storage (EBS) volumes](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/block-device-mapping-concepts.html#instance-block-device-mapping) that Karpenter attaches to provisioned nodes. Karpenter uses default block device mappings for the AMIFamily 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.\n\n```yaml\nspec:\n  blockDeviceMappings:\n    - deviceName: /dev/xvda\n      ebs:\n        volumeSize: 100Gi\n        volumeType: gp3\n        iops: 10000\n        encrypted: true\n        kmsKeyID: \"1234abcd-12ab-34cd-56ef-1234567890ab\"\n        deleteOnTermination: true\n        throughput: 125\n        snapshotID: snap-0123456789\n```\n\nThe following blockDeviceMapping defaults are used for each `AMIFamily` if no `blockDeviceMapping` overrides are specified in the `EC2NodeClass`\n\n### AL2\n```yaml\nspec:\n  blockDeviceMappings:\n    - deviceName: /dev/xvda\n      ebs:\n        volumeSize: 20Gi\n        volumeType: gp3\n        encrypted: true\n```\n\n### AL2023\n```yaml\nspec:\n  blockDeviceMappings:\n    - deviceName: /dev/xvda\n      ebs:\n        volumeSize: 20Gi\n        volumeType: gp3\n        encrypted: true\n```\n\n### Bottlerocket\n```yaml\nspec:\n  blockDeviceMappings:\n    # Root device\n    - deviceName: /dev/xvda\n      ebs:\n        volumeSize: 4Gi\n        volumeType: gp3\n        encrypted: true\n    # Data device: Container resources such as images and logs\n    - deviceName: /dev/xvdb\n      ebs:\n        volumeSize: 20Gi\n        volumeType: gp3\n        encrypted: true\n```\n\n### Windows2019/Windows2022\n```yaml\nspec:\n  blockDeviceMappings:\n    - deviceName: /dev/sda1\n      ebs:\n        volumeSize: 50Gi\n        volumeType: gp3\n        encrypted: true\n```\n\n### Custom\n\nThe `Custom` AMIFamily ships without any default `blockDeviceMappings`.\n\n## spec.instanceStorePolicy\n\nThe `instanceStorePolicy` field controls how [instance-store](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/InstanceStorage.html) volumes are handled. By default, Karpenter and Kubernetes will simply ignore them.\n\n### RAID0\n\nIf you intend to use these volumes for faster node ephemeral-storage, set `instanceStorePolicy` to `RAID0`:\n\n```yaml\nspec:\n  instanceStorePolicy: RAID0\n```\n\nThis will set the allocatable ephemeral-storage of each node to the total size of the instance-store volume(s). This configuration is likely to be useful for workloads that leverage dense storage instance types or require the low latency from instance-stores that are nvme ssd based.\n\nThe disks must be formatted & mounted in a RAID0 and be the underlying filesystem for the Kubelet & Containerd. Even if you already configure your volumes with RAID0, Karpenter won't recognize this by default unless you set the `instanceStorePolicy` to `RAID0`. Without this, scheduling workloads that depend on ephemeral-storage from the instance-stores may result in a deadlock due to insufficient storage.\n\nInstructions for each AMI family are listed below:\n\n#### AL2\n\nOn AL2, Karpenter automatically configures the disks through an additional boostrap argument (`--local-disks raid0`). The device name is `/dev/md/0` and its mount point is `/mnt/k8s-disks/0`. You should ensure any additional disk setup does not interfere with these.\n\n#### AL2023\n\nOn AL2023, Karpenter automatically configures the disks via the generated `NodeConfig` object. Like AL2, the device name is `/dev/md/0` and its mount point is `/mnt/k8s-disks/0`. You should ensure any additional disk setup does not interfere with these.\n\n#### Others\n\nFor all other AMI families, you must configure the disks yourself. Check out the [`setup-local-disks`](https://github.com/awslabs/amazon-eks-ami/blob/main/templates/shared/runtime/bin/setup-local-disks) script in [amazon-eks-ami](https://github.com/awslabs/amazon-eks-ami) to see how this is done for AL2.\n\n{{% alert title=\"Tip\" color=\"secondary\" %}}\nSince the Kubelet & Containerd will be using the instance-store filesystem, you may consider using a more minimal root volume size.\n{{% /alert %}}\n\n## spec.userData\n\nYou can control the UserData that is applied to your worker nodes via this field. This allows you to run custom scripts or pass-through custom configuration to Karpenter instances on start-up.\n\n```yaml\napiVersion: karpenter.k8s.aws/v1\nkind: EC2NodeClass\nmetadata:\n  name: bottlerocket-example\nspec:\n  ...\n  amiFamily: Bottlerocket\n  userData:  |\n    [settings.kubernetes]\n    \"kube-api-qps\" = 30\n    \"shutdown-grace-period\" = \"30s\"\n    \"shutdown-grace-period-for-critical-pods\" = \"30s\"\n    [settings.kubernetes.eviction-hard]\n    \"memory.available\" = \"20%\"\n```\n\nThis example adds SSH keys to allow remote login to the node (replace *my-authorized_keys* with your key file):\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nInstead 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.\nSee [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.\n{{% /alert %}}\n\n```yaml\napiVersion: karpenter.k8s.aws/v1\nkind: EC2NodeClass\nmetadata:\n  name: al2-example\nspec:\n  ...\n  amiFamily: AL2\n  userData: |\n    #!/bin/bash\n    mkdir -p ~ec2-user/.ssh/\n    touch ~ec2-user/.ssh/authorized_keys\n    cat >> ~ec2-user/.ssh/authorized_keys <<EOF\n    {{ insertFile \"../my-authorized_keys\" | indent 4  }}\n    EOF\n    chmod -R go-w ~ec2-user/.ssh/authorized_keys\n    chown -R ec2-user ~ec2-user/.ssh\n```\n\nFor more examples on configuring fields for different AMI families, see the [examples here](https://github.com/aws/karpenter/blob/v1.0.11/examples/v1).\n\nKarpenter will merge the userData you specify with the default userData for that AMIFamily. See the [AMIFamily]({{< ref \"#specamifamily\" >}}) section for more details on these defaults. View the sections below to understand the different merge strategies for each AMIFamily.\n\n### AL2\n\n* Your UserData can be in the [MIME multi part archive](https://cloudinit.readthedocs.io/en/latest/topics/format.html#mime-multi-part-archive) format.\n* Karpenter will transform your custom user-data as a MIME part, if necessary, and then merge a final MIME part to the end of your UserData parts which will bootstrap the worker node. Karpenter will have full control over all the parameters being passed to the bootstrap script.\n  * Karpenter will continue to set MaxPods, ClusterDNS and all other parameters defined in `spec.kubeletConfiguration` as before.\n\nConsider the following example to understand how your custom UserData will be merged -\n\n#### Passed-in UserData (bash)\n\n```bash\n#!/bin/bash\necho \"Running custom user data script (bash)\"\n```\n\n#### Merged UserData (bash)\n\n```bash\nMIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"//\"\n\n--//\nContent-Type: text/x-shellscript; charset=\"us-ascii\"\n\n#!/bin/bash\necho \"Running custom user data script (bash)\"\n\n--//\nContent-Type: text/x-shellscript; charset=\"us-ascii\"\n\n#!/bin/bash -xe\nexec > >(tee /var/log/user-data.log|logger -t user-data -s 2>/dev/console) 2>&1\n/etc/eks/bootstrap.sh 'test-cluster' --apiserver-endpoint 'https://test-cluster' --b64-cluster-ca 'ca-bundle' \\\n--use-max-pods false \\\n--kubelet-extra-args '--node-labels=karpenter.sh/capacity-type=on-demand,karpenter.sh/nodepool=test  --max-pods=110'\n--//--\n```\n\n#### Passed-in UserData (MIME)\n\n```bash\nMIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"BOUNDARY\"\n\n--BOUNDARY\nContent-Type: text/x-shellscript; charset=\"us-ascii\"\n\n#!/bin/bash\necho \"Running custom user data script (mime)\"\n\n--BOUNDARY--\n```\n\n#### Merged UserData (MIME)\n\n```bash\nMIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"//\"\n\n--//\nContent-Type: text/x-shellscript; charset=\"us-ascii\"\n\n#!/bin/bash\necho \"Running custom user data script (mime)\"\n\n--//\nContent-Type: text/x-shellscript; charset=\"us-ascii\"\n\n#!/bin/bash -xe\nexec > >(tee /var/log/user-data.log|logger -t user-data -s 2>/dev/console) 2>&1\n/etc/eks/bootstrap.sh 'test-cluster' --apiserver-endpoint 'https://test-cluster' --b64-cluster-ca 'ca-bundle' \\\n--use-max-pods false \\\n--kubelet-extra-args '--node-labels=karpenter.sh/capacity-type=on-demand,karpenter.sh/nodepool=test  --max-pods=110'\n--//--\n```\n\n{{% alert title=\"Tip\" color=\"secondary\" %}}\nYou can set additional kubelet configuration properties, unavailable through `spec.kubelet`, by updating the `kubelet-config.json` file:\n\n```yaml\napiVersion: karpenter.k8s.aws/v1\nkind: EC2NodeClass\nmetadata:\n  name: kubelet-config-example\nspec:\n  amiFamily: AL2\n  userData: |\n    #!/bin/bash\n    echo \"$(jq '.kubeAPIQPS=50' /etc/kubernetes/kubelet/kubelet-config.json)\" > /etc/kubernetes/kubelet/kubelet-config.json\n```\n{{% /alert %}}\n\n### AL2023\n\n* Your UserData may be in one of three formats: a [MIME multi part archive](https://cloudinit.readthedocs.io/en/latest/topics/format.html#mime-multi-part-archive), a NodeConfig YAML / JSON string, or a shell script.\n* Karpenter will transform your custom UserData into a MIME part, if necessary, and then create a MIME multi-part archive. This archive will consist of a generated NodeConfig, containing Karpenter's default values, followed by the transformed custom UserData. For more information on the NodeConfig spec, refer to the [AL2023 EKS Optimized AMI docs](https://awslabs.github.io/amazon-eks-ami/nodeadm/doc/examples/).\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nAny values configured by the Karpenter generated NodeConfig object will take precedent over values specifed in `spec.userData`.\nThis includes cluster name, cluster CIDR, cluster endpoint, certificate authority, taints, labels, and any value in [spec.kubelet]({{< ref \"#speckubelet\" >}}).\nThese fields must be configured natively through Karpenter rather than through UserData.\n{{% /alert %}}\n\n#### Passed-in UserData (NodeConfig)\n\n```yaml\napiVersion: node.eks.aws/v1alpha1\nkind: NodeConfig\nspec:\n  kubelet:\n    config:\n      maxPods: 42\n```\n\n#### Merged UserData (NodeConfig)\n\n```text\nMIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"//\"\n\n--//\nContent-Type: application/node.eks.aws\n\napiVersion: node.eks.aws/v1alpha1\nkind: NodeConfig\nspec:\n  kubelet:\n    config:\n      maxPods: 42\n\n--//\nContent-Type: application/node.eks.aws\n\n# Karpenter Generated NodeConfig\napiVersion: node.eks.aws/v1alpha1\nkind: NodeConfig\nspec:\n  cluster:\n    apiServerEndpoint: https://test-cluster\n    certificateAuthority: cluster-ca\n    cidr: 10.100.0.0/16\n    name: test-cluster\n  kubelet:\n    config:\n      clusterDNS:\n      - 10.100.0.10\n      maxPods: 118\n    flags:\n    - --node-labels=\"karpenter.sh/capacity-type=on-demand,karpenter.sh/nodepool=default\"\n\n--//--\n```\n\n#### Passed-in UserData (bash)\n\n```shell\n#!/bin/bash\necho \"Hello, AL2023!\"\n```\n\n#### Merged UserData (bash)\n\n```text\nMIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"//\"\n\n--//\nContent-Type: text/x-shellscript; charset=\"us-ascii\"\n\n#!/bin/bash\necho \"Hello, AL2023!\"\n\n--//\nContent-Type: application/node.eks.aws\n\n# Karpenter Generated NodeConfig\napiVersion: node.eks.aws/v1alpha1\nkind: NodeConfig\nspec:\n  cluster:\n    apiServerEndpoint: https://test-cluster\n    certificateAuthority: cluster-ca\n    cidr: 10.100.0.0/16\n    name: test-cluster\n  kubelet:\n    config:\n      clusterDNS:\n      - 10.100.0.10\n      maxPods: 118\n    flags:\n    - --node-labels=\"karpenter.sh/capacity-type=on-demand,karpenter.sh/nodepool=default\"\n\n--//--\n```\n\n#### Passed-in UserData (MIME)\n\n```text\nMIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"//\"\n\n--//\nContent-Type: text/x-shellscript; charset=\"us-ascii\"\n\n#!/bin/bash\necho \"Hello, AL2023!\"\n\n--//\nContent-Type: application/node.eks.aws\n\napiVersion: node.eks.aws/v1alpha1\nkind: NodeConfig\nspec:\n  kubelet:\n    config:\n      maxPods: 42\n--//\n```\n\n#### Merged UserData (MIME)\n\n```text\nMIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"//\"\n\n--//\nContent-Type: application/node.eks.aws\n\napiVersion: node.eks.aws/v1alpha1\nkind: NodeConfig\nspec:\n  kubelet:\n    config:\n      maxPods: 42\n--//\nContent-Type: text/x-shellscript; charset=\"us-ascii\"\n\n#!/bin/bash\necho \"Hello, AL2023!\"\n\n--//\nContent-Type: application/node.eks.aws\n\n# Karpenter Generated NodeConfig\napiVersion: node.eks.aws/v1alpha1\nkind: NodeConfig\nspec:\n  cluster:\n    apiServerEndpoint: https://test-cluster\n    certificateAuthority: cluster-ca\n    cidr: 10.100.0.0/16\n    name: test-cluster\n  kubelet:\n    config:\n      clusterDNS:\n      - 10.100.0.10\n      maxPods: 118\n    flags:\n    - --node-labels=\"karpenter.sh/capacity-type=on-demand,karpenter.sh/nodepool=default\"\n\n--//--\n```\n\n### Bottlerocket\n\n* Your UserData must be valid TOML.\n* Unknown TOML fields will be ignored when the final merged UserData is generated by Karpenter.\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nAny values configured by Karpenter will take precedent over values specifed in `spec.userData`.\nThis includes cluster name, cluster endpoint, cluster certificate, taints, labels, and any value in [spec.kubelet]({{< ref \"#speckubelet\" >}}).\nThese fields must be configured natively through Karpenter rather than through UserData.\n{{% /alert %}}\n\nConsider the following example to understand how your custom UserData settings will be merged in.\n\n#### Passed-in UserData\n\n```toml\n[settings.kubernetes.eviction-hard]\n\"memory.available\" = \"12%\"\n[settings.kubernetes]\n\"unknown-setting\" = \"unknown\"\n[settings.kubernetes.node-labels]\n'field.controlled.by/karpenter' = 'will-be-overridden'\n```\n\n#### Merged UserData\n\n```toml\n[settings]\n[settings.kubernetes]\napi-server = 'https://cluster'\ncluster-certificate = 'ca-bundle'\ncluster-name = 'cluster'\n\n[settings.kubernetes.node-labels]\n'karpenter.sh/capacity-type' = 'on-demand'\n'karpenter.sh/nodepool' = 'default'\n\n[settings.kubernetes.node-taints]\n\n[settings.kubernetes.eviction-hard]\n'memory.available' = '12%%'\n```\n\n### Windows2019/Windows2022\n\n* Your UserData must be specified as PowerShell commands.\n* The UserData specified will be prepended to a Karpenter managed section that will bootstrap the kubelet.\n* Karpenter will continue to set ClusterDNS and all other parameters defined in spec.kubeletConfiguration as before.\n\nConsider the following example to understand how your custom UserData settings will be merged in.\n\n#### Passed-in UserData\n\n```powershell\nWrite-Host \"Running custom user data script\"\n```\n\n#### Merged UserData\n\n```powershell\n<powershell>\nWrite-Host \"Running custom user data script\"\n[string]$EKSBootstrapScriptFile = \"$env:ProgramFiles\\Amazon\\EKS\\Start-EKSBootstrap.ps1\"\n& $EKSBootstrapScriptFile -EKSClusterName 'test-cluster' -APIServerEndpoint 'https://test-cluster' -Base64ClusterCA 'ca-bundle' -KubeletExtraArgs '--node-labels=\"karpenter.sh/capacity-type=spot,karpenter.sh/nodepool=windows2022\" --max-pods=110' -DNSClusterIP '10.0.100.10'\n</powershell>\n```\n\n{{% alert title=\"Windows Support Notice\" color=\"warning\" %}}\nCurrently, Karpenter does not specify `-ServiceCIDR` to [EKS Windows AMI Bootstrap script](https://docs.aws.amazon.com/eks/latest/userguide/eks-optimized-windows-ami.html#bootstrap-script-configuration-parameters).\nWindows worker nodes will use `172.20.0.0/16` or `10.100.0.0/16` for Kubernetes service IP address ranges based on the IP address of the primary interface.\nThe effective ServiceCIDR can be verified at `$env:ProgramData\\Amazon\\EKS\\cni\\config\\vpc-bridge.conf` on the worker node.\n\nSupport for the Windows ServiceCIDR argument can be tracked in a [Karpenter Github Issue](https://github.com/aws/karpenter/issues/4088). Currently, if the effective ServiceCIDR is incorrect for your windows worker nodes, you can add the following userData as a workaround.\n\n```yaml\nspec:\n  userData: |\n    $global:EKSCluster = Get-EKSCluster -Name my-cluster\n```\n{{% /alert %}}\n\n### Custom\n\n* No merging is performed, your UserData must perform all setup required of the node to allow it to join the cluster.\n* Custom UserData must meet the following requirements to work correctly with Karpenter:\n  * It must ensure the node is registered with the `karpenter.sh/unregistered:NoExecute` taint (via kubelet configuration field `registerWithTaints`)\n  * It must set kubelet config options to match those configured in `spec.kubelet`\n\n## spec.detailedMonitoring\n\nEnabling detailed monitoring controls the [EC2 detailed monitoring](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-cloudwatch-new.html) feature. If you enable this option, the Amazon EC2 console displays monitoring graphs with a 1-minute period for the instances that Karpenter launches.\n\n```yaml\nspec:\n  detailedMonitoring: true\n```\n\n## spec.associatePublicIPAddress\n\nYou can explicitly set `AssociatePublicIPAddress: false` when you are only launching into private subnets.\nPreviously, Karpenter auto-set `associatePublicIPAddress` on the primary ENI to false if a user’s subnet options were all private subnets.\nThis value is a boolean field that controls whether instances created by Karpenter for this EC2NodeClass will have an associated public IP address. This overrides the `MapPublicIpOnLaunch` setting applied to the subnet the node is launched in. If this field is not set, the `MapPublicIpOnLaunch` field will be respected.\n\n\n{{% alert title=\"Note\" color=\"warning\" %}}\nIf a `NodeClaim` requests `vpc.amazonaws.com/efa` resources, `spec.associatePublicIPAddress` is respected. However, if this `NodeClaim` requests **multiple** EFA resources and the value for `spec.associatePublicIPAddress` is true, the instance will fail to launch. This is due to an EC2 restriction which\nrequires that the field is only set to true when configuring an instance with a single ENI at launch. When using this field, it is advised that users segregate their EFA workload to use a separate `NodePool` / `EC2NodeClass` pair.\n{{% /alert %}}\n\n## status.subnets\n[`status.subnets`]({{< ref \"#statussubnets\" >}}) contains the resolved `id` and `zone` of the subnets that were selected by the [`spec.subnetSelectorTerms`]({{< ref \"#specsubnetselectorterms\" >}}) for the node class. The subnets will be sorted by the available IP address count in decreasing order.\n\n#### Examples\n\n```yaml\nspec:\n  subnetSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\"\nstatus:\n  subnets:\n  - id: subnet-0a462d98193ff9fac\n    zone: us-east-2b\n  - id: subnet-0322dfafd76a609b6\n    zone: us-east-2c\n  - id: subnet-0727ef01daf4ac9fe\n    zone: us-east-2b\n  - id: subnet-00c99aeafe2a70304\n    zone: us-east-2a\n  - id: subnet-023b232fd5eb0028e\n    zone: us-east-2c\n  - id: subnet-03941e7ad6afeaa72\n    zone: us-east-2a\n```\n\n## status.securityGroups\n\n[`status.securityGroups`]({{< ref \"#statussecuritygroups\" >}}) contains the resolved `id` and `name` of the security groups that were selected by the [`spec.securityGroupSelectorTerms`]({{< ref \"#specsecuritygroupselectorterms\" >}}) for the node class. The subnets will be sorted by the available IP address count in decreasing order.\n\n#### Examples\n\n```yaml\nspec:\n  securityGroupSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\"\nstatus:\n  securityGroups:\n  - id: sg-041513b454818610b\n    name: ClusterSharedNodeSecurityGroup\n  - id: sg-0286715698b894bca\n    name: ControlPlaneSecurityGroup-1AQ073TSAAPW\n```\n\n## status.amis\n\n[`status.amis`]({{< ref \"#statusamis\" >}}) contains the resolved `id`, `name`, and `requirements` of either the default AMIs for the [`spec.amiFamily`]({{< ref \"#specamifamily\" >}}) or the AMIs selected by the [`spec.amiSelectorTerms`]({{< ref \"#specamiselectorterms\" >}}) if this field is specified.\n\n#### Examples\n\nAMIs resolved with an AL2 alias:\n\n```yaml\nspec:\n  amiSelectorTerms:\n    - alias: al2@v20240807\nstatus:\n  amis:\n  - id: ami-03c3a3dcda64f5b75\n    name: amazon-linux-2-gpu\n    requirements:\n    - key: kubernetes.io/arch\n      operator: In\n      values:\n      - amd64\n    - key: karpenter.k8s.aws/instance-gpu-count\n      operator: Exists\n  - id: ami-03c3a3dcda64f5b75\n    name: amazon-linux-2-gpu\n    requirements:\n    - key: kubernetes.io/arch\n      operator: In\n      values:\n      - amd64\n    - key: karpenter.k8s.aws/instance-accelerator-count\n      operator: Exists\n  - id: ami-06afb2d101cc4b8bd\n    name: amazon-linux-2-arm64\n    requirements:\n    - key: kubernetes.io/arch\n      operator: In\n      values:\n      - arm64\n    - key: karpenter.k8s.aws/instance-gpu-count\n      operator: DoesNotExist\n    - key: karpenter.k8s.aws/instance-accelerator-count\n      operator: DoesNotExist\n  - id: ami-0e28b76d768af234e\n    name: amazon-linux-2\n    requirements:\n    - key: kubernetes.io/arch\n      operator: In\n      values:\n      - amd64\n    - key: karpenter.k8s.aws/instance-gpu-count\n      operator: DoesNotExist\n    - key: karpenter.k8s.aws/instance-accelerator-count\n      operator: DoesNotExist\n```\n\nAMIs resolved from tags:\n\n```yaml\nspec:\n  amiSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\"\nstatus:\n  amis:\n  - id: ami-01234567890123456\n    name: custom-ami-amd64\n    requirements:\n    - key: kubernetes.io/arch\n      operator: In\n      values:\n      - amd64\n  - id: ami-01234567890123456\n    name: custom-ami-arm64\n    requirements:\n    - key: kubernetes.io/arch\n      operator: In\n      values:\n      - arm64\n```\n\n## status.instanceProfile\n\n[`status.instanceProfile`]({{< ref \"#statusinstanceprofile\" >}}) contains the resolved instance profile generated by Karpenter from the [`spec.role`]({{< ref \"#specrole\" >}})\n\n```yaml\nspec:\n  role: \"KarpenterNodeRole-${CLUSTER_NAME}\"\nstatus:\n  instanceProfile: \"${CLUSTER_NAME}-0123456778901234567789\"\n```\n\n## status.conditions\n\n[`status.conditions`]({{< ref \"#statusconditions\" >}}) indicates EC2NodeClass readiness. This will be `Ready` when Karpenter successfully discovers AMIs, Instance Profile, Subnets, Cluster CIDR (AL2023 only) and SecurityGroups for the EC2NodeClass.\n\nNodeClasses have the following status conditions:\n\n| Condition Type       | Description                                                                                                                                                                                                                       |\n|----------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| SubnetsReady         | Subnets are discovered.                                                                                                                                                                                                           |\n| SecurityGroupsReady  | Security Groups are discovered.                                                                                                                                                                                                   |\n| InstanceProfileReady | Instance Profile is discovered.                                                                                                                                                                                                   |\n| AMIsReady            | AMIs are discovered                                                                                                                                                                                                               |\n| Ready                | Top level condition that indicates if the nodeClass is ready. If any of the underlying conditions is `False` then this condition is set to `False` and `Message` on the condition indicates the dependency that was not resolved. |\n\nIf a NodeClass is not ready, NodePools that reference it through their `nodeClassRef` will not be considered for scheduling.\n"
  },
  {
    "path": "website/content/en/v1.0/concepts/nodepools.md",
    "content": "---\ntitle: \"NodePools\"\nlinkTitle: \"NodePools\"\nweight: 10\ndescription: >\n  Configure Karpenter with NodePools\n---\n\nWhen you first installed Karpenter, you set up a default NodePool. The NodePool sets constraints on the nodes that can be created by Karpenter and the pods that can run on those nodes. The NodePool can be set to do things like:\n\n* Define taints to limit the pods that can run on nodes Karpenter creates\n* Define any startup taints to inform Karpenter that it should taint the node initially, but that the taint is temporary.\n* Limit node creation to certain zones, instance types, and computer architectures\n* Set defaults for node expiration\n\nYou can change your NodePool or add other NodePools to Karpenter.\nHere are things you should know about NodePools:\n\n* Karpenter won't do anything if there is not at least one NodePool configured.\n* Each NodePool that is configured is looped through by Karpenter.\n* If Karpenter encounters a taint in the NodePool that is not tolerated by a Pod, Karpenter won't use that NodePool to provision the pod.\n* If Karpenter encounters a startup taint in the NodePool 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.\n* It is recommended to create NodePools that are mutually exclusive. So no Pod should match multiple NodePools. If multiple NodePools are matched, Karpenter will use the NodePool with the highest [weight](#specweight).\n\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nObjects for setting Kubelet features have been moved from the NodePool spec to the EC2NodeClasses spec, to not require other Karpenter providers to support those features.\n{{% /alert %}}\n\nFor some example `NodePool` configurations, see the [examples in the Karpenter GitHub repository](https://github.com/aws/karpenter/blob/v1.0.11/examples/v1/).\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\nspec:\n  # Template section that describes how to template out NodeClaim resources that Karpenter will provision\n  # Karpenter will consider this template to be the minimum requirements needed to provision a Node using this NodePool\n  # It will overlay this NodePool with Pods that need to schedule to further constrain the NodeClaims\n  # Karpenter will provision to launch new Nodes for the cluster\n  template:\n    metadata:\n      # Labels are arbitrary key-values that are applied to all nodes\n      labels:\n        billing-team: my-team\n\n      # Annotations are arbitrary key-values that are applied to all nodes\n      annotations:\n        example.com/owner: \"my-team\"\n    spec:\n      # References the Cloud Provider's NodeClass resource, see your cloud provider specific documentation\n      nodeClassRef:\n        group: karpenter.k8s.aws  # Updated since only a single version will be served\n        kind: EC2NodeClass\n        name: default\n\n      # Provisioned nodes will have these taints\n      # Taints may prevent pods from scheduling if they are not tolerated by the pod.\n      taints:\n        - key: example.com/special-taint\n          effect: NoSchedule\n\n      # Provisioned nodes will have these taints, but pods do not need to tolerate these taints to be provisioned by this\n      # NodePool. These taints are expected to be temporary and some other entity (e.g. a DaemonSet) is responsible for\n      # removing the taint after it has finished initializing the node.\n      startupTaints:\n        - key: example.com/another-taint\n          effect: NoSchedule\n\n      # The amount of time a Node can live on the cluster before being removed\n      # Avoiding long-running Nodes helps to reduce security vulnerabilities as well as to reduce the chance of issues that can plague Nodes with long uptimes such as file fragmentation or memory leaks from system processes\n      # You can choose to disable expiration entirely by setting the string value 'Never' here\n\n      # Note: changing this value in the nodepool will drift the nodeclaims.\n      expireAfter: 720h | Never\n\n      # The amount of time that a node can be draining before it's forcibly deleted. A node begins draining when a delete call is made against it, starting\n      # its finalization flow. Pods with TerminationGracePeriodSeconds will be deleted preemptively before this terminationGracePeriod ends to give as much time to cleanup as possible.\n      # If your pod's terminationGracePeriodSeconds is larger than this terminationGracePeriod, Karpenter may forcibly delete the pod\n      # before it has its full terminationGracePeriod to cleanup.\n\n      # Note: changing this value in the nodepool will drift the nodeclaims.\n      terminationGracePeriod: 48h\n\n      # Requirements that constrain the parameters of provisioned nodes.\n      # These requirements are combined with pod.spec.topologySpreadConstraints, pod.spec.affinity.nodeAffinity, pod.spec.affinity.podAffinity, and pod.spec.nodeSelector rules.\n      # Operators { In, NotIn, Exists, DoesNotExist, Gt, and Lt } are supported.\n      # https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#operators\n      requirements:\n        - key: \"karpenter.k8s.aws/instance-category\"\n          operator: In\n          values: [\"c\", \"m\", \"r\"]\n          # minValues here enforces the scheduler to consider at least that number of unique instance-category to schedule the pods.\n          # This field is ALPHA and can be dropped or replaced at any time\n          minValues: 2\n        - key: \"karpenter.k8s.aws/instance-family\"\n          operator: In\n          values: [\"m5\",\"m5d\",\"c5\",\"c5d\",\"c4\",\"r4\"]\n          minValues: 5\n        - key: \"karpenter.k8s.aws/instance-cpu\"\n          operator: In\n          values: [\"4\", \"8\", \"16\", \"32\"]\n        - key: \"karpenter.k8s.aws/instance-hypervisor\"\n          operator: In\n          values: [\"nitro\"]\n        - key: \"karpenter.k8s.aws/instance-generation\"\n          operator: Gt\n          values: [\"2\"]\n        - key: \"topology.kubernetes.io/zone\"\n          operator: In\n          values: [\"us-west-2a\", \"us-west-2b\"]\n        - key: \"kubernetes.io/arch\"\n          operator: In\n          values: [\"arm64\", \"amd64\"]\n        - key: \"karpenter.sh/capacity-type\"\n          operator: In\n          values: [\"spot\", \"on-demand\"]\n\n  # Disruption section which describes the ways in which Karpenter can disrupt and replace Nodes\n  # Configuration in this section constrains how aggressive Karpenter can be with performing operations\n  # like rolling Nodes due to them hitting their maximum lifetime (expiry) or scaling down nodes to reduce cluster cost\n  disruption:\n    # Describes which types of Nodes Karpenter should consider for consolidation\n    # If using 'WhenEmptyOrUnderutilized', Karpenter will consider all nodes for consolidation and attempt to remove or replace Nodes when it discovers that the Node is empty or underutilized and could be changed to reduce cost\n    # If using `WhenEmpty`, Karpenter will only consider nodes for consolidation that contain no workload pods\n    consolidationPolicy: WhenEmptyOrUnderutilized | WhenEmpty\n\n    # The amount of time Karpenter should wait to consolidate a node after a pod has been added or removed from the node.\n    # You can choose to disable consolidation entirely by setting the string value 'Never' here\n    consolidateAfter: 1m | Never # Added to allow additional control over consolidation aggressiveness\n\n    # Budgets control the speed Karpenter can scale down nodes.\n    # Karpenter will respect the minimum of the currently active budgets, and will round up\n    # when considering percentages. Duration and Schedule must be set together.\n    budgets:\n    - nodes: 10%\n    # On Weekdays during business hours, don't do any deprovisioning.\n    - schedule: \"0 9 * * mon-fri\"\n      duration: 8h\n      nodes: \"0\"\n\n  # Resource limits constrain the total size of the pool.\n  # Limits prevent Karpenter from creating new instances once the limit is exceeded.\n  limits:\n    cpu: \"1000\"\n    memory: 1000Gi\n\n  # Priority given to the NodePool when the scheduler considers which NodePool\n  # to select. Higher weights indicate higher priority when comparing NodePools.\n  # Specifying no weight is equivalent to specifying a weight of 0.\n  weight: 10\nstatus:\n  conditions:\n    - type: Initialized\n      status: \"False\"\n      observedGeneration: 1\n      lastTransitionTime: \"2024-02-02T19:54:34Z\"\n      reason: NodeClaimNotLaunched\n      message: \"NodeClaim hasn't succeeded launch\"\n  resources:\n    cpu: \"20\"\n    memory: \"8192Mi\"\n    ephemeral-storage: \"100Gi\"\n```\n## metadata.name\nThe name of the NodePool.\n\n## spec.template.metadata.labels\nArbitrary key/value pairs to apply to all nodes.\n\n## spec.template.metadata.annotations\nArbitrary key/value pairs to apply to all nodes.\n\n## spec.template.spec.nodeClassRef\n\nThis field points to the Cloud Provider NodeClass resource. See [EC2NodeClasses]({{<ref \"nodeclasses\" >}}) for details.\n\n## spec.template.spec.taints\n\nTaints to add to provisioned nodes. Pods that don't tolerate those taints could be prevented from scheduling.\nSee [Taints and Tolerations](https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/) for details.\n\n## spec.template.spec.startupTaints\n\nTaints that are added to nodes to indicate that a certain condition must be met, such as starting an agent or setting up networking, before the node is can be initialized.\nThese taints must be cleared before pods can be deployed to a node.\n\n## spec.template.spec.expireAfter\n\nThe amount of time a Node can live on the cluster before being deleted by Karpenter. Nodes will begin draining once it's expiration has been hit.\n\n## spec.template.spec.terminationGracePeriod\n\nThe amount of time a Node can be draining before Karpenter forcibly cleans up the node. Pods blocking eviction like PDBs and do-not-disrupt will be respected during draining until the `terminationGracePeriod` is reached, where those pods will be forcibly deleted.\n\n## spec.template.spec.requirements\n\nKubernetes 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 NodePool API.\n\nIn 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).\n\nThese well-known labels may be specified at the NodePool level, or in a workload definition (e.g., nodeSelector on a pod.spec). Nodes are chosen using both the NodePool'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 NodePool's requirements. If a requirement is not defined for a well known label, any value available to the cloud provider may be chosen.\n\nFor example, an instance type may be specified using a nodeSelector in a pod spec. If the instance type requested is not included in the NodePool list and the NodePool has instance type requirements, Karpenter will not create a node or schedule the pod.\n\n### Well-Known Labels\n\n#### Instance Types\n\n- key: `node.kubernetes.io/instance-type`\n- key: `karpenter.k8s.aws/instance-family`\n- key: `karpenter.k8s.aws/instance-category`\n- key: `karpenter.k8s.aws/instance-generation`\n\nGenerally, 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.\n\nReview [AWS instance types](../../reference/instance-types). Most instance types are supported with the exclusion of [non-HVM](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/virtualization_types.html).\n\n#### Availability Zones\n\n- key: `topology.kubernetes.io/zone`\n- value example: `us-east-1c`\n- value list: `aws ec2 describe-availability-zones --region <region-name>`\n\nKarpenter 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.\n\n[Learn more about Availability Zone\nIDs.](https://docs.aws.amazon.com/ram/latest/userguide/working-with-az-ids.html)\n\n#### Architecture\n\n- key: `kubernetes.io/arch`\n- values\n  - `amd64`\n  - `arm64`\n\nKarpenter supports `amd64` nodes, and `arm64` nodes.\n\n#### Operating System\n - key: `kubernetes.io/os`\n - values\n   - `linux`\n   - `windows`\n\nKarpenter supports `linux` and `windows` operating systems.\n\n#### Capacity Type\n\n- key: `karpenter.sh/capacity-type`\n- values\n  - `spot`\n  - `on-demand`\n\nKarpenter supports specifying capacity type, which is analogous to [EC2 purchase options](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-purchasing-options.html).\n\nKarpenter prioritizes Spot offerings if the NodePool allows Spot and on-demand instances (note that in this scenario any Spot instances priced higher than the cheapest on-demand instance will be temporarily removed from consideration).\nIf 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 3 minutes.\nIf there are no other possible offerings available for Spot, Karpenter will attempt to provision on-demand instances, generally within milliseconds.\n\nKarpenter also allows `karpenter.sh/capacity-type` to be used as a topology key for enforcing topology-spread.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nThere is currently a limit of 100 on the total number of requirements on both the NodePool and the NodeClaim. It's important to note that `spec.template.metadata.labels` are also propagated as requirements on the NodeClaim when it's created, meaning that you can't have more than 100 requirements and labels combined set on your NodePool.\n{{% /alert %}}\n\n### Min Values\n\nAlong with the combination of [key,operator,values] in the requirements, Karpenter also supports `minValues` in the NodePool requirements block, allowing the scheduler to be aware of user-specified flexibility minimums while scheduling pods to a cluster. If Karpenter cannot meet this minimum flexibility for each key when scheduling a pod, it will fail the scheduling loop for that NodePool, either falling back to another NodePool which meets the pod requirements or failing scheduling the pod altogether.\n\nFor example, the below spec will use spot instance type for all provisioned instances and enforces `minValues` to various keys where it is defined\ni.e at least 2 unique instance families from [c,m,r], 5 unique instance families [eg: \"m5\",\"m5d\",\"r4\",\"c5\",\"c5d\",\"c4\" etc], 10 unique instance types [eg: \"c5.2xlarge\",\"c4.xlarge\" etc] is required for scheduling the pods.\n\n```yaml\nspec:\n  template:\n    spec:\n      requirements:\n        - key: kubernetes.io/arch\n          operator: In\n          values: [\"amd64\"]\n        - key: kubernetes.io/os\n          operator: In\n          values: [\"linux\"]\n        - key: karpenter.k8s.aws/instance-category\n          operator: In\n          values: [\"c\", \"m\", \"r\"]\n          minValues: 2\n        - key: karpenter.k8s.aws/instance-family\n          operator: Exists\n          minValues: 5\n        - key: node.kubernetes.io/instance-type\n          operator: Exists\n          minValues: 10\n        - key: karpenter.k8s.aws/instance-generation\n          operator: Gt\n          values: [\"2\"]\n```\n\nNote that `minValues` can be used with multiple operators and multiple requirements. And if the `minValues` are defined with multiple operators for the same requirement key, scheduler considers the max of all the `minValues` for that requirement. For example, the below spec requires scheduler to consider at least 5 instance-family to schedule the pods.\n\n```yaml\nspec:\n  template:\n    spec:\n      requirements:\n        - key: kubernetes.io/arch\n          operator: In\n          values: [\"amd64\"]\n        - key: kubernetes.io/os\n          operator: In\n          values: [\"linux\"]\n        - key: karpenter.k8s.aws/instance-category\n          operator: In\n          values: [\"c\", \"m\", \"r\"]\n          minValues: 2\n        - key: karpenter.k8s.aws/instance-family\n          operator: Exists\n          minValues: 5\n        - key: karpenter.k8s.aws/instance-family\n          operator: In\n          values: [\"m5\",\"m5d\",\"c5\",\"c5d\",\"c4\",\"r4\"]\n          minValues: 3\n        - key: node.kubernetes.io/instance-type\n          operator: Exists\n          minValues: 10\n        - key: karpenter.k8s.aws/instance-generation\n          operator: Gt\n          values: [\"2\"]\n```\n\n{{% alert title=\"Recommended\" color=\"primary\" %}}\nKarpenter allows you to be extremely flexible with your NodePools by only constraining your instance types in ways that are absolutely necessary for your cluster. By default, Karpenter will enforce that you specify the `spec.template.spec.requirements` field, but will not enforce that you specify any requirements within the field. If you choose to specify `requirements: []`, this means that you will completely flexible to _all_ instance types that your cloud provider supports.\n\nThough Karpenter doesn't enforce these defaults, for most use-cases, we recommend that you specify _some_ requirements to avoid odd behavior or exotic instance types. Below, is a high-level recommendation for requirements that should fit the majority of use-cases for generic workloads\n\n```yaml\nspec:\n  template:\n    spec:\n      requirements:\n        - key: kubernetes.io/arch\n          operator: In\n          values: [\"amd64\"]\n        - key: kubernetes.io/os\n          operator: In\n          values: [\"linux\"]\n        - key: karpenter.sh/capacity-type\n          operator: In\n          values: [\"on-demand\"]\n        - key: karpenter.k8s.aws/instance-category\n          operator: In\n          values: [\"c\", \"m\", \"r\"]\n        - key: karpenter.k8s.aws/instance-generation\n          operator: Gt\n          values: [\"2\"]\n```\n\n{{% /alert %}}\n\n\n## spec.disruption\n\nYou can configure Karpenter to disrupt Nodes through your NodePool in multiple ways. You can use `spec.disruption.consolidationPolicy`, `spec.disruption.consolidateAfter`, or `spec.template.spec.expireAfter`.\nYou can also rate limit Karpenter's disruption through the NodePool's `spec.disruption.budgets`.\nRead [Disruption]({{<ref \"disruption\" >}}) for more.\n\n## spec.limits\n\nThe NodePool spec includes a limits section (`spec.limits`), which constrains the maximum amount of resources that the NodePool can consume.\n\nIf the `NodePool.spec.limits` section is unspecified, it means that there is no default limitation on resource allocation. In this case, the maximum resource consumption is governed by the quotas set by your cloud provider. If a limit has been exceeded, nodes provisioning is prevented until some nodes have been terminated.\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\nspec:\n  template:\n    spec:\n      requirements:\n        - key: karpenter.sh/capacity-type\n          operator: In\n          values: [\"spot\"]\n  limits:\n    cpu: 1000\n    memory: 1000Gi\n    nvidia.com/gpu: 2\n```\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nKarpenter provisioning is highly parallel. Because of this, limit checking is eventually consistent, which can result in overrun during rapid scale outs.\n{{% /alert %}}\n\nCPU 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.\n\nMemory limits are described with a [`BinarySI` value, such as 1000Gi.](https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/#meaning-of-memory)\n\nYou can view the current consumption of cpu and memory on your cluster by running:\n```\nkubectl get nodepool -o=jsonpath='{.items[0].status}'\n```\n\nReview 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`.\n\n## spec.weight\n\nKarpenter allows you to describe NodePool 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).\n\nFor more information on weighting NodePools, see the [Weighted NodePools section]({{<ref \"scheduling#weighted-nodepools\" >}}) in the scheduling docs.\n\n## status.conditions\n[Conditions](https://github.com/kubernetes/apimachinery/blob/f14778da5523847e4c07346e3161a4b4f6c9186e/pkg/apis/meta/v1/types.go#L1523) objects add observability features to Karpenter.\n* The `status.conditions.type` object reflects node status, such as `Initialized` or `Available`.\n* The status of the condition, `status.conditions.status`, indicates if the condition is `True` or `False`.\n* The `status.conditions.observedGeneration` indicates  if the instance is out of date with the current state of `.metadata.generation`.\n* The `status.conditions.lastTransitionTime` object contains a programatic identifier that indicates the time of the condition's previous transition.\n* The `status.conditions.reason` object indicates the reason for the condition's previous transition.\n* The `status.conditions.message` object provides human-readable details about the condition's previous transition.\n\nNodePools have the following status conditions:\n\n| Condition Type      | Description                                                                                                                                       |\n|---------------------|---------------------------------------------------------------------------------------------------------------------------------------------------|\n| NodeClassReady      | Underlying nodeClass is ready                                                                                                                     |\n| ValidationSucceeded | NodePool CRD validation succeeded                                                                                                                 |\n| Ready               | Top level condition that indicates if the nodePool is ready. This condition will not be true until all the other conditions on nodePool are true. |\n\nIf a NodePool is not ready, it will not be considered for scheduling.\n\n## status.resources\nObjects under `status.resources` provide information about the status of resources such as `cpu`, `memory`, and `ephemeral-storage`.\n\n## Examples\n\n### Isolating Expensive Hardware\n\nA NodePool can be set up to only provision nodes on particular processor types.\nThe following example sets a taint that only allows pods with tolerations for Nvidia GPUs to be scheduled:\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: gpu\nspec:\n  disruption:\n    consolidationPolicy: WhenEmptyOrUnderutilized\n  template:\n    spec:\n      requirements:\n      - key: node.kubernetes.io/instance-type\n        operator: In\n        values: [\"p3.8xlarge\", \"p3.16xlarge\"]\n      taints:\n      - key: nvidia.com/gpu\n        value: \"true\"\n        effect: NoSchedule\n```\nIn order for a pod to run on a node defined in this NodePool, it must tolerate `nvidia.com/gpu` in its pod spec.\n\n### Cilium Startup Taint\n\nPer the Cilium [docs](https://docs.cilium.io/en/stable/installation/taints/#taint-effects), 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.\n\nFailure to provide accurate `startupTaints` can result in Karpenter continually provisioning new nodes. When the new node joins and the startup taint that Karpenter is unaware of is added, Karpenter now considers the pending pod to be unschedulable to this node. Karpenter will attempt to provision yet another new node to schedule the pending pod.\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: cilium-startup\nspec:\n  disruption:\n    consolidationPolicy: WhenEmptyOrUnderutilized\n  template:\n    spec:\n      startupTaints:\n      - key: node.cilium.io/agent-not-ready\n        value: \"true\"\n        effect: NoExecute\n```\n"
  },
  {
    "path": "website/content/en/v1.0/concepts/scheduling.md",
    "content": "---\ntitle: \"Scheduling\"\nlinkTitle: \"Scheduling\"\nweight: 40\ndescription: >\n  Learn about scheduling workloads with Karpenter\n---\n\nIf 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.\nHowever, 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.\nReasons for constraining where your pods run could include:\n\n* Needing to run in zones where dependent applications or storage are available\n* Requiring certain kinds of processors or other hardware\n* Wanting to use techniques like topology spread to help ensure high availability\n\nYour Cloud Provider defines the first layer of constraints, including all instance types, architectures, zones, and purchase types available to its cloud.\nThe cluster administrator adds the next layer of constraints by creating one or more NodePools.\nThe final layer comes from you adding specifications to your Kubernetes pod deployments.\nPod scheduling constraints must fall within a NodePool's constraints or the pods will not deploy.\nFor example, if the NodePool sets limits that allow only a particular zone to be used, and a pod asks for a different zone, it will not be scheduled.\n\nConstraints you can request include:\n\n* **Resource requests**: Request that certain amount of memory or CPU be available.\n* **Node selection**: Choose to run on a node that is has a particular label (`nodeSelector`).\n* **Node affinity**: Draws a pod to run on nodes with particular attributes (affinity).\n* **Topology spread**: Use topology spread to help ensure availability of the application.\n* **Pod affinity/anti-affinity**: Draws pods towards or away from topology domains based on the scheduling of other pods.\n\nKarpenter supports standard Kubernetes scheduling constraints.\nThis allows you to define a single set of rules that apply to both existing and provisioned capacity.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nKarpenter supports specific [Well-Known Labels, Annotations and Taints](https://kubernetes.io/docs/reference/labels-annotations-taints/) that are useful for scheduling.\n{{% /alert %}}\n\n## Resource requests\n\nWithin a Pod spec, you can both make requests and set limits on resources a pod needs, such as CPU and memory.\nFor example:\n\n```yaml\napiVersion: v1\nkind: Pod\nmetadata:\n  name: myapp\nspec:\n  containers:\n  - name: app\n    image: myimage\n    resources:\n      requests:\n        memory: \"128Mi\"\n        cpu: \"500m\"\n      limits:\n        memory: \"256Mi\"\n        cpu: \"1000m\"\n```\nIn this example, the container is requesting 128MiB of memory and .5 CPU.\nIts limits are set to 256MiB of memory and 1 CPU.\nInstance type selection math only uses `requests`, but `limits` may be configured to enable resource oversubscription.\n\n\nSee [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 [NodePools]({{<ref \"./nodepools\" >}}) for a list of supported resources.\n\n### Accelerators/GPU Resources\n\nAccelerator (e.g., GPU) values include\n- `nvidia.com/gpu`\n- `amd.com/gpu`\n- `aws.amazon.com/neuron`\n- `habana.ai/gaudi`\n\nKarpenter supports accelerators, such as GPUs.\n\nAdditionally, include a resource requirement in the workload manifest. This will cause the GPU dependent pod to be scheduled onto the appropriate node.\n\nHere is an example of an accelerator resource in a workload manifest (e.g., pod):\n\n```yaml\nspec:\n  template:\n    spec:\n      containers:\n      - resources:\n          limits:\n            nvidia.com/gpu: \"1\"\n```\n{{% alert title=\"Note\" color=\"primary\" %}}\nIf you are provisioning GPU nodes, you need to deploy an appropriate GPU device plugin daemonset for those nodes.\nWithout the daemonset running, Karpenter will not see those nodes as initialized.\nRefer 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:\n* `nvidia.com/gpu`: [NVIDIA device plugin for Kubernetes](https://github.com/NVIDIA/k8s-device-plugin)\n* `amd.com/gpu`: [AMD GPU device plugin for Kubernetes](https://github.com/RadeonOpenCompute/k8s-device-plugin)\n* `aws.amazon.com/neuron`: [Kubernetes environment setup for Neuron](https://github.com/aws-neuron/aws-neuron-sdk/tree/master/src/k8)\n* `habana.ai/gaudi`: [Habana device plugin for Kubernetes](https://github.com/HabanaAI/habanalabs-k8s-device-plugin)\n  {{% /alert %}}\n\n### Pod ENI Resources (Security Groups for Pods)\n[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.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nYou 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.\n{{% /alert %}}\n{{% alert title=\"Note\" color=\"primary\" %}}\nIf you've enabled [Security Groups per Pod](https://aws.github.io/aws-eks-best-practices/networking/sgpp/), one of the instance's ENIs is reserved. To avoid discrepancies between the `maxPods` value and the node's supported pod density, you need to set [RESERVED_ENIS]({{<ref \"../reference/settings\" >}})=1.\n{{% /alert %}}\n\n\nHere is an example of a pod-eni resource defined in a deployment manifest:\n```\nspec:\n  template:\n    spec:\n      containers:\n      - resources:\n          limits:\n            vpc.amazonaws.com/pod-eni: \"1\"\n```\n\n{{% alert title=\"Windows Support Notice\" color=\"warning\" %}}\nSecurity groups for pods are [currently unsupported for Windows nodes](https://docs.aws.amazon.com/eks/latest/userguide/security-groups-for-pods.html)\n{{% /alert %}}\n\n## Selecting nodes\n\nWith `nodeSelector` you can ask for a node that matches selected key-value pairs.\nThis can include well-known labels or custom labels you create yourself.\n\nYou 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.\n\n### Labels\nWell-known labels may be specified as NodePool requirements or pod scheduling constraints. You can also define your own custom labels by specifying `requirements` or `labels` on your NodePool and select them using `nodeAffinity` or `nodeSelectors` on your Pods.\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nTake 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.\n{{% /alert %}}\n\n#### Well-Known Labels\n\n| Label                                                          | Example     | Description                                                                                                                                                     |\n| -------------------------------------------------------------- | ----------  | --------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| 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))                     |\n| node.kubernetes.io/instance-type                               | g4dn.8xlarge| Instance types are defined by your cloud provider ([aws](https://aws.amazon.com/ec2/instance-types/))                                                           |\n| node.kubernetes.io/windows-build                               | 10.0.17763  | Windows OS build in the format \"MajorVersion.MinorVersion.BuildNumber\". Can be `10.0.17763` for WS2019, or `10.0.20348` for WS2022. ([k8s](https://kubernetes.io/docs/reference/labels-annotations-taints/#nodekubernetesiowindows-build)) |\n| 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                            |\n| 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                              |\n| karpenter.sh/nodepool                                          | default     | The name of the nodepool used to provision the node.                                                                                                            |\n| karpenter.sh/capacity-type                                     | spot        | Capacity types include `spot`, `on-demand`                                                                                                                      |\n| karpenter.k8s.aws/ec2nodeclass                                 | default     | [AWS Specific] The name of the ec2 nodeclass used to provision the node                                                                                         |\n| karpenter.k8s.aws/instance-hypervisor                          | nitro       | [AWS Specific] Instance types that use a specific hypervisor                                                                                                    |\n| karpenter.k8s.aws/instance-encryption-in-transit-supported     | true        | [AWS Specific] Instance types that support (or not) in-transit encryption                                                                                       |\n| karpenter.k8s.aws/instance-category                            | g           | [AWS Specific] Instance types of the same category, usually the string before the generation number                                                             |\n| karpenter.k8s.aws/instance-generation                          | 4           | [AWS Specific] Instance type generation number within an instance category                                                                                      |\n| karpenter.k8s.aws/instance-family                              | g4dn        | [AWS Specific] Instance types of similar properties but different resource quantities                                                                           |\n| karpenter.k8s.aws/instance-size                                | 8xlarge     | [AWS Specific] Instance types of similar resource quantities but different properties                                                                           |\n| karpenter.k8s.aws/instance-cpu                                 | 32          | [AWS Specific] Number of CPUs on the instance                                                                                                                   |\n| karpenter.k8s.aws/instance-cpu-manufacturer                    | aws          | [AWS Specific] Name of the CPU manufacturer                                                                                                                   |\n| karpenter.k8s.aws/instance-memory                              | 131072      | [AWS Specific] Number of mebibytes of memory on the instance                                                                                                    |\n| karpenter.k8s.aws/instance-ebs-bandwidth                       | 9500        | [AWS Specific] Number of [maximum megabits](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-optimized.html#ebs-optimization-performance) of EBS available on the instance |\n| 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 |\n| karpenter.k8s.aws/instance-pods                                | 110         | [AWS Specific] Number of pods the instance supports                                                                                                             |\n| karpenter.k8s.aws/instance-gpu-name                            | t4          | [AWS Specific] Name of the GPU on the instance, if available                                                                                                    |\n| karpenter.k8s.aws/instance-gpu-manufacturer                    | nvidia      | [AWS Specific] Name of the GPU manufacturer                                                                                                                     |\n| karpenter.k8s.aws/instance-gpu-count                           | 1           | [AWS Specific] Number of GPUs on the instance                                                                                                                   |\n| karpenter.k8s.aws/instance-gpu-memory                          | 16384       | [AWS Specific] Number of mebibytes of memory on the GPU                                                                                                         |\n| karpenter.k8s.aws/instance-local-nvme                          | 900         | [AWS Specific] Number of gibibytes of local nvme storage on the instance                                                                                        |\n| topology.k8s.aws/zone-id                                       | use1-az1             | [AWS Specific] Globally consistent [zone id](https://docs.aws.amazon.com/global-infrastructure/latest/regions/az-ids.html)                             |\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nKarpenter translates the following deprecated labels to their stable equivalents: `failure-domain.beta.kubernetes.io/zone`, `failure-domain.beta.kubernetes.io/region`, `beta.kubernetes.io/arch`, `beta.kubernetes.io/os`, and `beta.kubernetes.io/instance-type`.\n{{% /alert %}}\n\n#### User-Defined Labels\n\nKarpenter 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 NodePool requirements with the `Exists` operator:\n\n```yaml\nrequirements:\n  - key: user.defined.label/type\n    operator: Exists\n```\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nThere is currently a limit of 100 on the total number of requirements on both the NodePool and the NodeClaim. It's important to note that `spec.template.metadata.labels` are also propagated as requirements on the NodeClaim when it's created, meaning that you can't have more than 100 requirements and labels combined set on your NodePool.\n{{% /alert %}}\n\n#### Node selectors\n\nHere is an example of a `nodeSelector` for selecting nodes:\n\n```yaml\nnodeSelector:\n  topology.kubernetes.io/zone: us-west-2a\n  karpenter.sh/capacity-type: spot\n```\nThis example features a well-known label (`topology.kubernetes.io/zone`) and a label that is well known to Karpenter (`karpenter.sh/capacity-type`).\n\nIf you want to create a custom label, you should do that at the NodePool level.\nThen the pod can declare that custom label.\n\n\nSee [nodeSelector](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#nodeselector) in the Kubernetes documentation for details.\n\n## Preferences\n\nKarpenter is aware of preferences (node affinity, pod affinity, pod anti-affinity, and pod topology) and treats them as requirements in most circumstances. Karpenter uses these preferences when determining if a pod can schedule on a node (absent topology requirements), or when determining if a pod can be shifted to a new node.\n\nKarpenter starts by treating preferred affinities as required affinities when constructing requirements for a pod. When these requirements cannot be met, the pod's preferences are relaxed one-at-a-time by ascending weight (lowest weight is relaxed first), and the remaining requirements are tried again.\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter does not interpret preferred affinities as required when constructing topology requirements for scheduling to a node. If these preferences are necessary, required affinities should be used [as documented in Node Affinity](#node-affinity).\n{{% /alert %}}\n\n### Node affinity\n\nExamples below illustrate how to use Node affinity to include (`In`) and exclude (`NotIn`) objects.\nSee [Node affinity](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#node-affinity) for details.\nWhen setting rules, the following Node affinity types define how hard or soft each rule is:\n\n* **requiredDuringSchedulingIgnoredDuringExecution**: This is a hard rule that must be met.\n* **preferredDuringSchedulingIgnoredDuringExecution**: This is a preference, but the pod can run on a node where it is not guaranteed.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nPreferred affinities on pods can result in more nodes being created than expected because Karpenter will prefer to create new nodes to satisfy preferences, [see the preferences documentation](#preferences) for details.\n{{% /alert %}}\n\nThe `IgnoredDuringExecution` part of each tells the pod to keep running, even if conditions change on the node so the rules no longer matched.\nYou can think of these concepts as `required` and `preferred`, since Kubernetes never implemented other variants of these rules.\n\nAll examples below assume that the NodePool 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.\n\n```yaml\n affinity:\n   nodeAffinity:\n     requiredDuringSchedulingIgnoredDuringExecution:\n       nodeSelectorTerms:\n         - matchExpressions:\n           - key: \"topology.kubernetes.io/zone\"\n             operator: \"In\"\n             values: [\"us-west-2a\", \"us-west-2b\"]\n           - key: \"topology.kubernetes.io/zone\"\n             operator: \"In\"\n             values: [\"us-west-2b\"]\n```\n\nChanging the second operator to `NotIn` would allow the pod to run in `us-west-2a` only:\n\n```yaml\n           - key: \"topology.kubernetes.io/zone\"\n             operator: \"In\"\n             values: [\"us-west-2a\", \"us-west-2b\"]\n           - key: \"topology.kubernetes.io/zone\"\n             operator: \"NotIn\"\n             values: [\"us-west-2b\"]\n```\n\nContinuing to add to the example, `nodeAffinity` lets you define terms so if one term doesn't work it goes to the next one.\nHere, if `us-west-2a` is not available, the second term will cause the pod to run on a spot instance in `us-west-2d`.\n\n\n```yaml\n affinity:\n   nodeAffinity:\n     requiredDuringSchedulingIgnoredDuringExecution:\n       nodeSelectorTerms:\n         - matchExpressions: # OR\n           - key: \"topology.kubernetes.io/zone\" # AND\n             operator: \"In\"\n             values: [\"us-west-2a\", \"us-west-2b\"]\n           - key: \"topology.kubernetes.io/zone\" # AND\n             operator: \"NotIn\"\n             values: [\"us-west-2b\"]\n         - matchExpressions: # OR\n           - key: \"karpenter.sh/capacity-type\" # AND\n             operator: \"In\"\n             values: [\"spot\"]\n           - key: \"topology.kubernetes.io/zone\" # AND\n             operator: \"In\"\n             values: [\"us-west-2d\"]\n```\nIn general, Karpenter will go through each of the `nodeSelectorTerms` in order and take the first one that works.\nHowever, if Karpenter fails to provision on the first `nodeSelectorTerms`, it will try again using the second one.\nIf they all fail, Karpenter will fail to provision the pod.\nKarpenter will backoff and retry over time.\nSo if capacity becomes available, it will schedule the pod without user intervention.\n\n### Taints and tolerations\n\nTaints are the opposite of affinity.\nSetting 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 NodePool that was set up with a taint for only running pods that require a GPU, such as the following:\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: gpu\nspec:\n  template:\n    spec:\n      requirements:\n      - key: karpenter.k8s.aws/instance-family\n        operator: In\n        values:\n          - p3\n      taints:\n      - key: nvidia.com/gpu\n        value: \"true\"\n        effect: \"NoSchedule\"\n```\n\nFor a pod to request to run on a node that has this NodePool, it could set a toleration as follows:\n\n```yaml\napiVersion: v1\nkind: Pod\nmetadata:\n  name: mygpupod\nspec:\n  containers:\n  - name: gpuapp\n    resources:\n      requests:\n        nvidia.com/gpu: 1\n      limits:\n        nvidia.com/gpu: 1\n    image: mygpucontainer\n  tolerations:\n  - key: \"nvidia.com/gpu\"\n    operator: \"Exists\"\n    effect: \"NoSchedule\"\n```\nSee [Taints and Tolerations](https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/) in the Kubernetes documentation for details.\n\n### Topology Spread\n\nBy using the Kubernetes `topologySpreadConstraints` you can ask the NodePool 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.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nPreferred topology spread (`ScheduleAnyway`) can result in more nodes being created than expected because Karpenter will prefer to create new nodes to satisfy spread constraints, [see the preferences documentation](#preferences) for details.\n{{% /alert %}}\n\nFor example:\n\n```yaml\nspec:\n  topologySpreadConstraints:\n    - maxSkew: 1\n      topologyKey: \"topology.kubernetes.io/zone\"\n      whenUnsatisfiable: ScheduleAnyway\n      labelSelector:\n        matchLabels:\n          dev: jjones\n    - maxSkew: 1\n      topologyKey: \"kubernetes.io/hostname\"\n      whenUnsatisfiable: ScheduleAnyway\n      labelSelector:\n        matchLabels:\n          dev: jjones\n    - maxSkew: 1\n      topologyKey: \"karpenter.sh/capacity-type\"\n      whenUnsatisfiable: ScheduleAnyway\n      labelSelector:\n        matchLabels:\n          dev: jjones\n\n```\nAdding this to your podspec would result in:\n\n* Pods being spread across zones, hosts, and capacity-type (`topologyKey`).\n* 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.\n* No more than one pod difference in the number of pods on each host (`maxSkew`).\nFor example, if there were three nodes and five pods the pods could be spread 1, 2, 2 or 2, 1, 2 and so on.\nIf instead the spread were 5, pods could be 5, 0, 0 or 3, 2, 0, or 2, 1, 2 and so on.\n\nThe three supported `topologyKey` values that Karpenter supports are:\n- `topology.kubernetes.io/zone`\n- `kubernetes.io/hostname`\n- `karpenter.sh/capacity-type`\n\nSee [Pod Topology Spread Constraints](https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/) for details.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nNodePools do not attempt to balance or rebalance the availability zones for their nodes. Availability zone balancing may be achieved by defining zonal Topology Spread Constraints for Pods that require multi-zone durability, and NodePools will respect these constraints while optimizing for compute costs.\n{{% /alert %}}\n\n### Pod affinity/anti-affinity\n\nBy using the `podAffinity` and `podAntiAffinity` configuration on a pod spec, you can inform the Karpenter scheduler of your desire for pods to schedule together or apart with respect to different topology domains.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nPreferred affinities on pods can result in more nodes being created than expected because Karpenter will prefer to create new nodes to satisfy preferences, [see the preferences documentation](#preferences) for details.\n{{% /alert %}}\n\nFor example:\n\n```yaml\nspec:\n  affinity:\n    podAffinity:\n      requiredDuringSchedulingIgnoredDuringExecution:\n      - labelSelector:\n          matchExpressions:\n          - key: system\n            operator: In\n            values:\n            - backend\n        topologyKey: topology.kubernetes.io/zone\n    podAntiAffinity:\n      requiredDuringSchedulingIgnoredDuringExecution:\n      - labelSelector:\n          matchLabels:\n            app: inflate\n        topologyKey: kubernetes.io/hostname\n```\n\nThe above pod affinity rule would cause the pod to only schedule in zones where a pod with the label `system=backend` is already running.\n\nThe 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.\n\nSee [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.\n\n### Persistent Volume Topology\n\nKarpenter automatically detects storage scheduling requirements and includes them in node launch decisions.\n\nIn 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).\nWhen 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`.\nIt randomly selects `us-west-2a`, provisions a node in that zone, and waits for kube-scheduler to bind the pod to the node.\nThe CSI driver creates a `PersistentVolume` according to the `PersistentVolumeClaim` and gives it a node affinity rule for `us-west-2a`.\n\nLater 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.\n\n```yaml\napiVersion: v1\nkind: Pod\nmetadata:\n  name: app\nspec:\n  containers: ...\n  volumes:\n    - name: storage\n      persistentVolumeClaim:\n        claimName: ebs-claim\n---\nkind: StorageClass\napiVersion: storage.k8s.io/v1\nmetadata:\n  name: ebs\nprovisioner: ebs.csi.aws.com\nvolumeBindingMode: WaitForFirstConsumer\nallowedTopologies:\n- matchLabelExpressions:\n  - key: topology.ebs.csi.aws.com/zone\n    values: [\"us-west-2a\", \"us-west-2b\"]\n---\napiVersion: v1\nkind: PersistentVolumeClaim\nmetadata:\n  name: ebs-claim\nspec:\n  accessModes:\n    - ReadWriteOnce\n  storageClassName: ebs\n  resources:\n    requests:\n      storage: 4Gi\n```\n\n{{% alert title=\"Note\" color=\"primary\" %}}\n☁️ AWS Specific\n\nThe 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`.\n{{% /alert %}}\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nThe 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)\n{{% /alert %}}\n\n## Weighted NodePools\n\nKarpenter allows you to order your NodePools using the `.spec.weight` field so that the Karpenter scheduler will attempt to schedule one NodePool before another.\n\n### Savings Plans and Reserved Instances\n\nIf 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.\n\nTo 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` field on the NodePool to limit the capacity that can be launched by this NodePool. Combined with the `.spec.weight` value, we can tell Karpenter to pull from instance types in the reserved NodePool before defaulting to generic instance types.\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: reserved-instance\nspec:\n  weight: 50\n  limits:\n    cpu: 100\n  template:\n    spec:\n      requirements:\n      - key: \"node.kubernetes.io/instance-type\"\n        operator: In\n        values: [\"c4.large\"]\n---\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\nspec:\n  template:\n    spec:\n      requirements:\n      - key: karpenter.sh/capacity-type\n        operator: In\n        values: [\"spot\", \"on-demand\"]\n      - key: kubernetes.io/arch\n        operator: In\n        values: [\"amd64\"]\n```\n\n### Fallback\n\nPods 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.\n\nBy assigning a higher `.spec.weight` value and restricting a NodePool 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.\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\nspec:\n  weight: 50\n  template:\n    spec:\n      requirements:\n      - key: karpenter.sh/capacity-type\n        operator: In\n        values: [\"spot\", \"on-demand\"]\n      - key: kubernetes.io/arch\n        operator: In\n        values: [\"amd64\"]\n---\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: arm64-specific\nspec:\n  template:\n    spec:\n      requirements:\n      - key: karpenter.sh/capacity-type\n        operator: In\n        values: [\"spot\", \"on-demand\"]\n      - key: kubernetes.io/arch\n        operator: In\n        values: [\"arm64\"]\n      - key: node.kubernetes.io/instance-type\n        operator: In\n        values: [\"a1.large\", \"a1.xlarge\"]\n```\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nBased on the way that Karpenter performs pod batching and bin packing, it is not guaranteed that Karpenter will always choose the highest priority NodePool given specific requirements. For example, if a pod can't be scheduled with the highest priority NodePool, it will force creation of a node using a lower priority NodePool, allowing 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.\n{{% /alert %}}\n\n## Advanced Scheduling Techniques\n\n### Scheduling based on Node Resources\n\nYou may want pods to be able to request resources of nodes that Kubernetes natively does not provide as a schedulable resource or that are aspects of certain nodes like\nHigh Performance Networking or NVME Local Storage. You can use Karpenter's Well-Known Labels to accomplish this.\n\nThese can further be applied at the NodePool or Workload level using Requirements, NodeSelectors or Affinities\n\nPod example of requiring any NVME disk:\n```yaml\n...\n affinity:\n   nodeAffinity:\n     requiredDuringSchedulingIgnoredDuringExecution:\n       nodeSelectorTerms:\n         - matchExpressions:\n           - key: \"karpenter.k8s.aws/instance-local-nvme\"\n             operator: \"Exists\"\n...\n```\n\nNodePool Example:\n```yaml\n...\nrequirement:\n  - key: \"karpenter.k8s.aws/instance-local-nvme\"\n    operator: \"Exists\"\n...\n```\n\nPod example of requiring at least 100GB of NVME disk:\n```yaml\n...\n affinity:\n   nodeAffinity:\n     requiredDuringSchedulingIgnoredDuringExecution:\n       nodeSelectorTerms:\n         - matchExpressions:\n            - key: \"karpenter.k8s.aws/instance-local-nvme\"\n              operator: Gt\n              values: [\"99\"]\n...\n```\n\nNodePool Example:\n```yaml\n...\nrequirement:\n  - key: \"karpenter.k8s.aws/instance-local-nvme\"\n    operator: Gt\n    values: [\"99\"]\n...\n```\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nKarpenter cannot yet take into account ephemeral-storage requests while scheduling pods, we're purely requesting attributes of nodes and getting X amount of resources\nas a side effect. You may need to tweak schedulable resources like CPU or Memory to achieve desired fit, especially if Consolidation is enabled.\n\nYour NodeClass will also need to support automatically formatting and mounting NVME Instance Storage if available.\n{{% /alert %}}\n\nPod example of requiring at least 50 Gbps of network bandwidth:\n```yaml\n...\n affinity:\n   nodeAffinity:\n     requiredDuringSchedulingIgnoredDuringExecution:\n       nodeSelectorTerms:\n         - matchExpressions:\n            - key: \"karpenter.k8s.aws/instance-network-bandwidth\"\n              operator: Gt\n              values: [\"49999\"]\n...\n```\n\nNodePool Example:\n```yaml\n...\nrequirement:\n  - key: \"karpenter.k8s.aws/instance-network-bandwidth\"\n    operator: Gt\n    values: [\"49999\"]\n...\n```\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nIf using Gt/Lt operators, make sure to use values under the actual label values of the desired resource.\n{{% /alert %}}\n\n### `Exists` Operator\n\nThe `Exists` operator can be used on a NodePool to provide workload segregation across nodes.\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nspec:\n  template:\n    spec:\n      requirements:\n        - key: company.com/team\n          operator: Exists\n...\n```\n\nWith this requirement on the NodePool, workloads can specify the same key (e.g. `company.com/team`) with custom values (e.g. `team-a`, `team-b`, etc.) as a required `nodeAffinity` or `nodeSelector`. Karpenter will then apply the key/value pair to nodes it launches dynamically based on the pod's node requirements.\n\nIf each set of pods that can schedule with this NodePool specifies this key in its `nodeAffinity` or `nodeSelector`, you can isolate pods onto different nodes based on their values. This provides a way to more dynamically isolate workloads without requiring a unique NodePool for each workload subset.\n\nFor example, providing the following `nodeSelectors` would isolate the pods for each of these deployments on different nodes.\n\n#### Team A Deployment\n\n```yaml\napiVersion: v1\nkind: Deployment\nmetadata:\n  name: team-a-deployment\nspec:\n  replicas: 5\n  template:\n    spec:\n      nodeSelector:\n        company.com/team: team-a\n```\n\n#### Team A Node\n\n```yaml\napiVersion: v1\nkind: Node\nmetadata:\n  labels:\n    company.com/team: team-a\n```\n\n#### Team B Deployment\n\n```yaml\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: team-b-deployment\nspec:\n  replicas: 5\n  template:\n    spec:\n      nodeSelector:\n        company.com/team: team-b\n```\n\n#### Team B Node\n\n```yaml\napiVersion: v1\nkind: Node\nmetadata:\n  labels:\n    company.com/team: team-b\n```\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nIf a workload matches the NodePool but doesn't specify a label, Karpenter will generate a random label for the node.\n{{% /alert %}}\n\n### On-Demand/Spot Ratio Split\n\nTaking 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.\n\nTo do this, we create one NodePool 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 NodePool and one value for the on-demand NodePool.  When we spread across our new label evenly, we'll end up with a ratio of 4:1 spot to on-demand nodes.\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nThis 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.\n{{% /alert %}}\n\n#### NodePools\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: spot\nspec:\n  template:\n    spec:\n      requirements:\n      - key: \"karpenter.sh/capacity-type\"\n        operator: In\n        values: [\"spot\"]\n      - key: capacity-spread\n        operator: In\n        values:\n        - \"2\"\n        - \"3\"\n        - \"4\"\n        - \"5\"\n---\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: on-demand\nspec:\n  template:\n    spec:\n      requirements:\n      - key: \"karpenter.sh/capacity-type\"\n        operator: In\n        values: [\"on-demand\"]\n      - key: capacity-spread\n        operator: In\n        values:\n        - \"1\"\n```\n\n#### Workload Topology Spread Constraint\n\n```yaml\ntopologySpreadConstraints:\n- maxSkew: 1\n  topologyKey: capacity-spread\n  whenUnsatisfiable: DoNotSchedule\n  labelSelector:\n    ...\n```\n"
  },
  {
    "path": "website/content/en/v1.0/contributing/_index.md",
    "content": "---\ntitle: \"Contributing\"\nlinkTitle: \"Contributing\"\nweight: 40\ndescription: >\n  Learn about how to contribute to Karpenter\n---\n"
  },
  {
    "path": "website/content/en/v1.0/contributing/community-meetings.md",
    "content": "---\ntitle: \"Community Meetings\"\nlinkTitle: \"Community Meetings\"\nweight: 10\ndescription: >\n  Join the Karpenter Community Meetings\n---\n\nKarpenter hosts two types of regular community meetings to foster collaboration and maintain project health:\n\nThe **Working Group** meetings focus on project direction, technical discussions, and feature development. These bi-weekly sessions bring together contributors, users, and maintainers to review designs, plan releases, and address architectural decisions that shape Karpenter's future.\n\nThe **Issue Triage** meetings, held weekly, are dedicated to maintaining project health through focused issue management across our repositories. These sessions ensure proper prioritization, assignment coordination, and timely response to community contributions.\n\nMeeting times alternate to accommodate our global community. All interested participants are welcome to join, contribute, and learn more about Karpenter.\n\n### Working Group Meetings\n\nThe Karpenter Working Group meetings serve as a collaborative forum for project development, technical discussions, and community engagement. These sessions bring together contributors, users, and maintainers to shape the project's direction and ensure its continued success. Through these meetings, we align on architectural decisions, review critical features, and address community needs.\n\nKey focus areas include:\n- Review and discussion of design proposals and technical implementations\n- Planning of upcoming releases and feature roadmaps\n- Coordination between contributors and cross-team collaboration\n- Technical deep-dives on specific components and challenges\n- Discussion of user feedback and community requirements\n\nThe working group provides a platform for both synchronous decision-making and asynchronous follow-ups, ensuring the project maintains its technical excellence while growing its community impact.\n\nWorking group meetings will be held every other Thursday, alternating between a 3:00 PM PST (Americas-friendly) and 9:00 AM PST (Europe-friendly) start time.\nPlease refer to our [calendar](https://calendar.google.com/calendar/u/0?cid=N3FmZGVvZjVoZWJkZjZpMnJrMmplZzVqYmtAZ3JvdXAuY2FsZW5kYXIuZ29vZ2xlLmNvbQ) for an up-to-date schedule.\n\n### Issue Triage Meetings\n\nKarpenter is expanding our community meetings to include dedicated Issue Triage sessions alongside our regular Working Group meetings. This addition aims to improve issue management across both kubernetes-sigs/karpenter and karpenter-provider-aws repositories.\n\nThese weekly meetings rotate between repositories and time zones to accommodate our global community. These dedicated triage sessions focus on:\n- Issue prioritization\n- Assignment coordination\n- Discussion of complex issues\n- Maintaining repository health\n\nAn issue triage meeting for each repository will be held monthly, alternating between a 3:00 PM PST (Americas-friendly) and 9:00 AM PST (Europe-friendly) start time.\nPlease refer to our [calendar](https://calendar.google.com/calendar/u/0?cid=N3FmZGVvZjVoZWJkZjZpMnJrMmplZzVqYmtAZ3JvdXAuY2FsZW5kYXIuZ29vZ2xlLmNvbQ) for an up-to-date schedule.\n\n### Getting Involved\nAll community members are welcome to join these meetings. Meeting links and calendar invites are shared through our usual communication channels.\n\n- All invites are managed through our [Calendar](https://calendar.google.com/calendar/u/0?cid=N3FmZGVvZjVoZWJkZjZpMnJrMmplZzVqYmtAZ3JvdXAuY2FsZW5kYXIuZ29vZ2xlLmNvbQ).\n- 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.\n\n{{% alert title=\"Meeting Access\" %}}\nJoin our meetings using the following credentials:\n\n🔗 **Zoom**: [https://zoom.us/j/95618088729](https://zoom.us/j/95618088729)\n🆔 **Meeting ID**: 956 1808 8729\n🔑 **Passcode**: 77777\n\nNeed help? Contact the maintainers on Slack.\n{{% /alert %}}\n\nAdd future questions or read past discussions in our [Working Group Log](https://docs.google.com/document/d/18BT0AIMugpNpiSPJNlcAL2rv69yAE6Z06gUVj7v_clg).\n"
  },
  {
    "path": "website/content/en/v1.0/contributing/design-guide.md",
    "content": "---\ntitle: \"Design Guide\"\nlinkTitle: \"Design Guide\"\nweight: 20\ndescription: >\n  Read this before making large changes to Karpenter\n---\n\nTechnical 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.\n\nDesigns don’t have to be long or formal, and should match the scope of the problem they’re trying to solve.\n\n* Are there multiple potential solutions?\n* Will users need to be aware of the changes?\n* Would it be painful to discard a rejected implementation?\n* When in doubt, write a 1 pager.\n\n## Tell a Story\n\nA 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.\n\nYour story should include,\n\n* [Context] Include some technical background that helps readers think about your idea in context\n* [Problem] Clearly identify the problem to be solved and some guiding principles to help think about the solutions\n* [Solutions] Talk through different potential solutions and their tradeoffs. Include diagrams to clarify concepts\n* [Recommendation] Make a recommendation, but don’t be overly invested in it\n\nThe 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.\n\n## Gather Broad Feedback\n\nThe 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).\n\nThe 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.\n\nIt 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.\n\n## Simple Solutions to Complex Problems\n\nThe 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.\n\n## Common Gotchas\n\n### Does your change introduce new APIs?\n\nAPIs 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.\n\nThink 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.\n\nBuild minimal and maintainable APIs by:\n\n* Push back on requirements that introduces concepts for all users to solve problems for a few.\n* Identify an opinionated default that solves the majority of use cases.\n* Delay introducing a parameter into your API surface until users demand it; you can always add it later.\n* 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.\n* Take advantage of opportunities to refine APIs while the impact of backwards incompatibility is small\n\n### Does your change behave differently with different cloud providers?\n\nKubernetes 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.\n\nAchieving 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.\n\n### Does your change expose details users may rely on?\n\nKubernetes 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?\n\nBe 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.\n\n### Does your change have a risk of breaking an undocumented invariant?\n\nSystems 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.\n\n* Identify the fundamental reason the existing mechanism is insufficient and be able to explain it in plain terms.\n* Separate the new mechanism from the new feature that relies on it.\n* Clean up after yourself and avoid getting stuck halfway between old and new mechanisms.\n\n### Does your change impact performance?\n\nUsers 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.\n\n* Beware code that scales linearly with pods or nodes. Milliseconds in testing turn into seconds at scale.\n* Cloud provider read APIs can have surprisingly high latency and low limits, use caching to minimize calls.\n* Increases to memory and CPU usage increase capex cost for operators. Profile and optimize your implementations.\n"
  },
  {
    "path": "website/content/en/v1.0/contributing/development-guide.md",
    "content": "---\ntitle: \"Development Guide\"\nlinkTitle: \"Development Guide\"\nweight: 80\ndescription: >\n  Set up a Karpenter development environment\n---\n\n## Dependencies\n\nThe following tools are required for contributing to the Karpenter project.\n\n| Package                                                            | Version  | Install                                        |\n| ------------------------------------------------------------------ | -------- | ---------------------------------------------- |\n| [go](https://golang.org/dl/)                                       | v1.19+   | [Instructions](https://golang.org/doc/install) |\n| [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) |          | `brew install kubectl`                         |\n| [helm](https://helm.sh/docs/intro/install/)                        |          | `brew install helm`                            |\n| Other tools                                                        |          | `make toolchain`                               |\n\n## Developing\n\n### Setup / Teardown\n\nBased 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/).\n\n#### Locally\n\nOnce 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`\n\n```bash\nmake run\n```\n\n#### Inside a Kubernetes Cluster\n\nOnce you have your environment set up, to install Karpenter in the Kubernetes cluster specified in your `~/.kube/config`  run the following commands.\n\n```bash\nmake apply # Install Karpenter\nmake delete # Uninstall Karpenter\n```\n\n### Developer Loop\n\n* Make sure dependencies are installed\n    * Run `make codegen` to make sure yaml manifests are generated (requires a working set of AWS credentials, see [Specifying Credentials](https://docs.aws.amazon.com/sdk-for-go/v1/developer-guide/configuring-sdk.html#specifying-credentials))\n    * Run `make toolchain` to install cli tools for building and testing the project\n* You will need a personal development image repository (e.g. ECR)\n    * Make sure you have valid credentials to your development repository.\n    * `$KO_DOCKER_REPO` must point to your development repository\n    * Your cluster must have permissions to read from the repository\n\n### Build and Deploy\n\n*Note: these commands do not rely on each other and may be executed independently*\n\n```bash\nmake apply # quickly deploy changes to your cluster\nmake presubmit # run codegen, lint, and tests\n```\n\nIf you are only interested in building the Karpenter images and not deploying the updated release to your cluster immediately with Helm, you can run the following:\n\n```bash\nmake image # build and push the karpenter images\n```\n\n*Note: that this will produce a build with the version of https://github.com/kubernetes-sigs/karpenter in your local filesystem.\n\nYou can test out changes made in https://github.com/kubernetes-sigs/karpenter by replacing the dependency of https://github.com/aws/karpenter-provider-aws/.\nFor local changes, replace `$PATH_TO_KUBERNETES_SIGS_KARPENTER` with the relative or absolute path and run:\n\n```bash\ngo mod edit -replace sigs.k8s.io/karpenter=$PATH_TO_KUBERNETES_SIGS_KARPENTER\n```\n\nThen you can build your image using the previous steps.\n\n### Publishing Images Only\n\nIf you only need to build and publish an image to a container registry, run the following:\n\n```bash\nmake image # build and push the karpenter images\n```\nYou can test out changes made in https://github.com/kubernetes-sigs/karpenter by replacing the dependency of https://github.com/aws/karpenter-provider-aws/.\nFor local changes, replace `$PATH_TO_KUBERNETES_SIGS_KARPENTER` with the relative or absolute path and run:\n\n```bash\ngo mod edit -replace sigs.k8s.io/karpenter=$PATH_TO_KUBERNETES_SIGS_KARPENTER\n```\n\nThen you can build your image using the previous steps.\n\n*Note: you need to commit the go.mod changes before running `make image` for the changes to be picked up.\n\n### Testing\n\n```bash\nmake test       # E2E correctness tests\n```\n\n### Change Log Level\n\nBy default, `make apply` will set the log level to debug. You can change the log level by setting the log level in your Helm values.\n\n```bash\n--set logLevel=debug\n```\n\n### Debugging Metrics\n\nOSX:\n\n```bash\nopen http://localhost:8080/metrics && kubectl port-forward service/karpenter -n kube-system 8080\n```\n\nLinux:\n\n```bash\ngio open http://localhost:8080/metrics && kubectl port-forward service/karpenter -n karpenter 8080\n```\n\n### Tailing Logs\n\nWhile 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):\n\n```bash\nstern -n karpenter -l app.kubernetes.io/name=karpenter\n```\n\n## Environment specific setup\n\n### AWS\n\nFor local development on Karpenter you will need a Docker repo which can manage your images for Karpenter components.\nYou can use the following command to provision an ECR repository. We recommend using a single \"dev\" repository for\ndevelopment across multiple projects, and to use specific image hashes instead of image tags.\n\n```bash\naws ecr create-repository \\\n    --repository-name dev \\\n    --image-scanning-configuration scanOnPush=true \\\n    --region \"${AWS_DEFAULT_REGION}\"\n```\n\nOnce you have your ECR repository provisioned, configure your Docker daemon to authenticate with your newly created repository.\n\n```bash\nexport KO_DOCKER_REPO=\"${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_DEFAULT_REGION}.amazonaws.com/dev\"\naws ecr get-login-password --region \"${AWS_DEFAULT_REGION}\" | docker login --username AWS --password-stdin \"${KO_DOCKER_REPO}\"\n```\n\n## Profiling\nKarpenter exposes a pprof endpoint on its metrics port when [profiling]({{< relref \"../reference/settings\" >}}) is enabled.\n\nLearn about profiling with pprof: https://jvns.ca/blog/2017/09/24/profiling-go-with-pprof/\n\n### Prerequisites\n```\nbrew install graphviz\ngo install github.com/google/pprof@latest\n```\n\n### Get a profile\n```\n# Connect to the metrics endpoint\nkubectl port-forward service/karpenter -n karpenter 8080\nopen http://localhost:8080/debug/pprof/\n# Visualize the memory\ngo tool pprof -http 0.0.0.0:9000 localhost:8080/debug/pprof/heap\n# Visualize CPU\ngo tool pprof -http 0.0.0.0:9000 \"localhost:8080/debug/pprof/profile?seconds=60\"\n```\n"
  },
  {
    "path": "website/content/en/v1.0/contributing/documentation-updates.md",
    "content": "---\ntitle: \"Documentation Updates\"\nlinkTitle: \"Documentation Updates\"\nweight: 50\ndescription: >\n  Information helpful for contributing simple documentation updates.\n---\n\n- Documentation for https://karpenter.sh/docs/ is built under website/content/en/preview/.\n- Documentation updates should be made to the \"preview\" directory. Your changes will be promoted to website/content/en/docs/ by an automated process after the change has been merged.\n- Previews for your changes are built and available a few minutes after you push. Look for the \"Amplify Preview URL\" link in a comment in your PR.\n- If your update applies to more than just the current version of Karpenter, please backport your changes into all of the versions under website/content/en/ *besides* the /docs/ folder\n"
  },
  {
    "path": "website/content/en/v1.0/faq.md",
    "content": "---\ntitle: \"FAQs\"\nlinkTitle: \"FAQs\"\nweight: 60\ndescription: >\n  Review Karpenter Frequently Asked Questions\n---\n## General\n\n### Is Karpenter safe for production use?\nKarpenter v1 is the first stable Karpenter API. Any future incompatible API changes will require a v2 version.\n\n### How does a NodePool decide to manage a particular node?\nSee [Configuring NodePools]({{< ref \"./concepts/#configuring-nodepools\" >}}) for information on how Karpenter configures and manages nodes.\n\n### What cloud providers are supported?\nAWS is the first cloud provider supported by Karpenter, although it is designed to be used with other cloud providers as well.\n\n### Can I write my own cloud provider for Karpenter?\nYes, but there is no documentation yet for it. Start with Karpenter's GitHub [cloudprovider](https://github.com/aws/karpenter-provider-aws/tree/v1.0.11/pkg/cloudprovider) documentation to see how the AWS provider is built, but there are other sections of the code that will require changes too.\n\n### What operating system nodes does Karpenter deploy?\nKarpenter uses the OS defined by the [AMI Family in your EC2NodeClass]({{< ref \"./concepts/nodeclasses#specamifamily\" >}}).\n\n### Can I provide my own custom operating system images?\nKarpenter has multiple mechanisms for configuring the [operating system]({{< ref \"./concepts/nodeclasses/#specamiselectorterms\" >}}) for your nodes.\n\n### Can Karpenter deal with workloads for mixed architecture cluster (arm vs. amd)?\nKarpenter is flexible to multi-architecture configurations using [well known labels]({{< ref \"./concepts/scheduling/#supported-labels\">}}).\n\n### What RBAC access is required?\nAll the required RBAC rules can be found in the Helm chart template. See [clusterrole-core.yaml](https://github.com/aws/karpenter/blob/v1.0.11/charts/karpenter/templates/clusterrole-core.yaml), [clusterrole.yaml](https://github.com/aws/karpenter/blob/v1.0.11/charts/karpenter/templates/clusterrole.yaml), [rolebinding.yaml](https://github.com/aws/karpenter/blob/v1.0.11/charts/karpenter/templates/rolebinding.yaml), and [role.yaml](https://github.com/aws/karpenter/blob/v1.0.11/charts/karpenter/templates/role.yaml) files for details.\n\n### Can I run Karpenter outside of a Kubernetes cluster?\nYes, as long as the controller has network and IAM/RBAC access to the Kubernetes API and your provider API.\n\n### What do I do if I encounter a security issue with Karpenter?\nRefer to [Reporting Security Issues](https://github.com/aws/karpenter/security/policy) for information on how to report Karpenter security issues. Do not create a public GitHub issue.\n\n## Compatibility\n\n### Which versions of Kubernetes does Karpenter support?\nSee the [Compatibility Matrix in the Upgrade Section]({{< ref \"./upgrading/compatibility#compatibility-matrix\" >}}) to view the supported Kubernetes versions per Karpenter released version.\n\n### What Kubernetes distributions are supported?\nKarpenter documents integration with a fresh or existing installation of the latest AWS Elastic Kubernetes Service (EKS). Other Kubernetes distributions (KOPs, etc.) can be used, but setting up cloud provider permissions for those distributions has not been documented.\n\n### How does Karpenter interact with AWS node group features?\nNodePools 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 NodePools, 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 NodePool-managed in the long term.\n\n\n### How does Karpenter interact with Kubernetes features?\n* Kubernetes Cluster Autoscaler: Karpenter can work alongside Cluster Autoscaler. See [Kubernetes Cluster Autoscaler]({{< ref \"./concepts/#kubernetes-cluster-autoscaler\" >}}) for details.\n* 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.\n\n## Provisioning\n\n### What features does the Karpenter NodePool support?\nSee the [NodePool API docs]({{< ref \"./concepts/nodepools\" >}}) for NodePool examples and descriptions of features.\n\n### Can I create multiple (team-based) NodePools on a cluster?\nYes, NodePools can identify multiple teams based on labels. See the [NodePool API docs]({{< ref \"./concepts/nodepools\" >}}) for details.\n\n### If multiple NodePools are defined, which will my pod use?\n\nPending pods will be handled by any NodePools that matches the requirements of the pod. There is no ordering guarantee if multiple NodePools match pod requirements. We recommend that NodePools are set-up to be mutually exclusive. To select a specific NodePool, use the node selector `karpenter.sh/nodepool: my-nodepool`.\n\n### How can I configure Karpenter to only provision pods for a particular namespace?\n\nThere 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` using the same mechanisms 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.\n\nWe 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/).\n\n### Can I add SSH keys to a NodePool?\n\nKarpenter does not offer a way to add SSH keys via NodePools or secrets to the nodes it manages.\nHowever, 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.\n\nThough not recommended, if you need to access Karpenter-managed nodes without AWS credentials, you can add SSH keys using EC2NodeClass User Data. See the [User Data section in the EC2NodeClass documentation]({{< ref \"./concepts/nodeclasses/#specuserdata\" >}}) for details.\n\n### Can I set limits of CPU and memory for a NodePool?\nYes. View the [NodePool API docs]({{< ref \"./concepts/nodepools#speclimits\" >}}) for NodePool examples and descriptions of how to configure limits.\n\n### Can I mix spot and on-demand EC2 run types?\nYes, see the [NodePool API docs]({{< ref \"./concepts/nodepools#examples\" >}}) for an example.\n\n### Can I restrict EC2 instance types?\n\n* Attribute-based requests are currently not possible.\n* You can select instances with special hardware, such as gpu.\n\n### Can I use Bare Metal instance types?\n\nYes, Karpenter supports provisioning metal instance types when a NodePool'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.\n\n### How does Karpenter dynamically select instance types?\n\nKarpenter 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. Karpenter [recommends the use of C, M, and R >= Gen 3 instance types]({{< ref \"./concepts/nodepools#spectemplatespecrequirements\" >}}) for most generic workloads, but it can be constrained in the NodePool spec with the [instance-type](https://kubernetes.io/docs/reference/labels-annotations-taints/#nodekubernetesioinstance-type) well-known label in the requirements section.\n\nAfter 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.\n\n\nThe EC2 fleet API attempts to provision the instance type based on the [Price Capacity Optimized allocation strategy](https://aws.amazon.com/blogs/compute/introducing-price-capacity-optimized-allocation-strategy-for-ec2-spot-instances/). For the on-demand capacity type, this is effectively equivalent to the `lowest-price` allocation strategy. For the spot capacity type, Fleet will determine an instance type that has both the lowest price combined with the lowest chance of being interrupted. Note that this may not give you the instance type with the strictly lowest price for spot.\n\n### How does Karpenter calculate the resource usage of Daemonsets when simulating scheduling?\n\nKarpenter currently calculates the applicable daemonsets at the NodePool level with label selectors/taints, etc. It does not look to see if there are requirements on the daemonsets that would exclude it from running on particular instances that the NodePool could or couldn't launch.\nThe recommendation for now is to use multiple NodePools with taints/tolerations or label selectors to limit daemonsets to only nodes launched from specific NodePoools.\n\n### What if there is no Spot capacity?\n\nThe best defense against running out of Spot capacity is to allow Karpenter to provision as many distinct 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.\n\nAllowing 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 instance type diversity will also increase the chances that you’ll be able to continue to launch On-Demand capacity for your workloads.\n\nKarpenter has a concept of an “offering” for each instance type, which is a combination of zone and capacity type. Whenever the Fleet API returns an insufficient capacity error for Spot instances, those particular offerings are temporarily removed from consideration (across the entire NodePool) so that Karpenter can make forward progress with different options.\n\n### Does Karpenter support IPv6?\n\nYes! 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 NodePool to only allow Nitro instance types:\n\n```\napiVersion: karpenter.sh/v1\nkind: NodePool\n...\nspec:\n  template:\n    spec:\n      requirements:\n        - key: karpenter.k8s.aws/instance-hypervisor\n          operator: In\n          values:\n            - nitro\n```\n\nFor more documentation on enabling IPv6 with the Amazon VPC CNI, see the [docs](https://docs.aws.amazon.com/eks/latest/userguide/cni-ipv6.html).\n\n{{% alert title=\"Windows Support Notice\" color=\"warning\" %}}\nWindows nodes do not support IPv6.\n{{% /alert %}}\n\n### Why do I see extra nodes get launched to schedule pending pods that remain empty and are later removed?\n\nYou might have a daemonset, userData configuration, or some other workload that applies a taint after a node is provisioned. After the taint is applied, Karpenter will detect that the pod cannot be scheduled to this new node due to the added taint. As a result, Karpenter will provision yet another node. Typically, the original node has the taint removed and the pod schedules to it, leaving the extra new node unused and reaped by emptiness/consolidation. If the taint is not removed quickly enough, Karpenter may remove the original node before the pod can be scheduled via emptiness consolidation. This could result in an infinite loop of nodes being provisioned and consolidated without the pending pod ever scheduling.\n\nThe solution is to configure [startupTaints]({{<ref \"./concepts/nodepools/#cilium-startup-taint\" >}}) to make Karpenter aware of any temporary taints that are needed to ensure that pods do not schedule on nodes that are not yet ready to receive them.\n\nHere's an example for Cilium's startup taint.\n```\napiVersion: karpenter.sh/v1\nkind: NodePool\n...\nspec:\n  template:\n    spec:\n      startupTaints:\n        - key: node.cilium.io/agent-not-ready\n          effect: NoSchedule\n```\n\n## Scheduling\n\n### When using preferred scheduling constraints, Karpenter launches the correct number of nodes at first.  Why do they then sometimes get consolidated immediately?\n\n`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.\n\nAs 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 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.\n\n### When deploying an additional DaemonSet to my cluster, why does Karpenter not scale-up my nodes to support the extra DaemonSet?\n\nKarpenter will not scale-up more capacity for an additional DaemonSet on its own. This is due to the fact that the only pod that would schedule to that new node would be the DaemonSet pod, which is consuming additional capacity with no benefit. Therefore, Karpenter only considers DaemonSets when doing overhead calculations for scale-ups to workload pods.\n\nTo avoid new DaemonSets failing to schedule to existing Nodes, you should [set a high priority on your DaemonSet pods with a `preemptionPolicy: PreemptLowerPriority`](https://kubernetes.io/docs/concepts/scheduling-eviction/pod-priority-preemption/#example-priorityclass) so that DaemonSet pods will be guaranteed to schedule on all existing and new Nodes. For existing Nodes, this will cause some pods with lower priority to get [preempted](https://kubernetes.io/docs/concepts/scheduling-eviction/pod-priority-preemption/#preemption), replaced by the DaemonSet and re-scheduled onto new capacity that Karpenter will launch in response to the new pending pods.\n\nThe Karpenter maintainer team is also discussing a consolidation mechanism [in this Github issue](https://github.com/aws/karpenter/issues/3256) that would allow existing capacity to be rolled when a new DaemonSet is deployed without having to set [priority or preemption](https://kubernetes.io/docs/concepts/scheduling-eviction/pod-priority-preemption/) on the pods.\n\n\n### Why aren’t my Topology Spread Constraints spreading pods across zones?\n\nKarpenter will provision nodes according to `topologySpreadConstraints`. However, the Kubernetes scheduler may schedule pods to nodes that do not fulfill zonal spread constraints if the `minDomains` field is not set. If Karpenter launches nodes that can handle more than the required number of pods, and the newly launched nodes initialize at different times, then the Kubernetes scheduler may place more than the desired number of pods on the first node that is Ready.\n\nThe preferred solution is to use the [`minDomains` field in `topologySpreadConstraints`](https://kubernetes.io/docs/concepts/scheduling-eviction/topology-spread-constraints/#topologyspreadconstraints-field), which is enabled by default starting in Kubernetes 1.27.\n\nBefore `minDomains` was available, another workaround has been to launch a lower [Priority](https://kubernetes.io/docs/concepts/scheduling-eviction/pod-priority-preemption/) pause container to each zone before launching the pods that you want to spread across the zones. The lower Priority on these pause pods would mean that they would be preempted when your desired pods are scheduled.\n\n## Workloads\n\n### How can someone deploying pods take advantage of Karpenter?\n\nSee [Application developer]({{< ref \"./concepts/#application-developer\" >}}) for descriptions of how Karpenter matches nodes with pod requests.\n\n### Can I use Karpenter with EBS disks per availability zone?\nYes.  See [Persistent Volume Topology]({{< ref \"./concepts/scheduling#persistent-volume-topology\" >}}) for details.\n\n### Can I set `--max-pods` on my nodes?\nYes, see the [KubeletConfiguration Section in the NodePool docs]({{<ref \"./concepts/nodepools#spectemplatespeckubelet\" >}}) to learn more.\n\n### Why do the Windows2019 and Windows2022 AMI families only support Windows Server Core?\nThe difference between the Core and Full variants is that Core is a minimal OS with less components and no graphic user interface (GUI) or desktop experience.\n`Windows2019` and `Windows2022` AMI families use the Windows Server Core option for simplicity, but if required, you can specify a custom AMI to run Windows Server Full.\n\nYou can specify the [Amazon EKS optimized AMI](https://docs.aws.amazon.com/eks/latest/userguide/eks-optimized-windows-ami.html) with Windows Server 2022 Full for Kubernetes 1.30 by configuring an `amiSelector` that references the AMI name.\n```yaml\namiSelectorTerms:\n    - name: Windows_Server-2022-English-Full-EKS_Optimized-1.30*\n```\n\n### Can I use Karpenter to scale my workload's pods?\nKarpenter is a node autoscaler which will create new nodes in response to unschedulable pods. Scaling the pods themselves is outside of its scope.\nThis is the realm of pod autoscalers such as the [Vertical Pod Autoscaler](https://github.com/kubernetes/autoscaler/tree/master/vertical-pod-autoscaler) (for scaling an individual pod's resources) or the [Horizontal Pod Autoscaler](https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/) (for scaling replicas).\nWe also recommend taking a look at [Keda](https://keda.sh/) if you're looking for more advanced autoscaling capabilities for pods.\n\n## Deprovisioning\n### How does Karpenter deprovision nodes?\nSee [Deprovisioning nodes]({{< ref \"./concepts/disruption\" >}}) for information on how Karpenter deprovisions nodes.\n\n## Upgrading Karpenter\n\n### How do I upgrade Karpenter?\nKarpenter is a controller that runs in your cluster, but it is not tied to a specific Kubernetes version, as the Cluster Autoscaler is.\nUse your existing upgrade mechanisms to upgrade your core add-ons in Kubernetes and keep Karpenter up to date on bug fixes and new features.\n\nKarpenter requires proper permissions in the `KarpenterNode IAM Role` and the `KarpenterController IAM Role`.\nTo 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-karpenter/cloudformation.yaml`.\nNext, locate `KarpenterController IAM Role` ARN (i.e., ARN of the resource created in [Create the KarpenterController IAM Role](../getting-started/getting-started-with-karpenter/#create-the-karpentercontroller-iam-role)) and pass them to the Helm upgrade command.\n{{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step08-apply-helm-chart.sh\" language=\"bash\"%}}\n\nFor information on upgrading Karpenter, see the [Upgrade Guide]({{< ref \"./upgrading/upgrade-guide/\" >}}).\n\n## Upgrading Kubernetes Cluster\n\n### How do I upgrade an EKS Cluster with Karpenter?\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nKarpenter recommends that you always validate AMIs in your lower environments before using them in production environments. Read [Managing AMIs]({{<ref \"./tasks/managing-amis\" >}}) to understand best practices about upgrading your AMIs.\n\nIf using a custom AMI, you will need to trigger the rollout of new worker node images through the publication of a new AMI with tags matching the [`amiSelector`]({{<ref \"./concepts/nodeclasses#specamiselectorterms\" >}}), or a change to the [`amiSelector`]({{<ref \"./concepts/nodeclasses#specamiselectorterms\" >}}) field.\n{{% /alert %}}\n\nKarpenter's default behavior will upgrade your nodes when you've upgraded your Amazon EKS Cluster. Karpenter will [drift]({{<ref \"./concepts/disruption#drift\" >}}) nodes to stay in-sync with the EKS control plane version. Drift is enabled by default starting in `v0.33`. This means that as soon as your cluster is upgraded, Karpenter will auto-discover the new AMIs for that version.\n\nStart by [upgrading the EKS Cluster control plane](https://docs.aws.amazon.com/eks/latest/userguide/update-cluster.html). After the EKS Cluster upgrade completes, Karpenter will Drift and disrupt the Karpenter-provisioned nodes using EKS Optimized AMIs for the previous cluster version by first spinning up replacement nodes. Karpenter respects [Pod Disruption Budgets](https://kubernetes.io/docs/concepts/workloads/pods/disruptions/) (PDB), and automatically [replaces, cordons, and drains those nodes]({{<ref \"./concepts/disruption#control-flow\" >}}). To best support pods moving to new nodes, follow Kubernetes best practices by setting appropriate pod [Resource Quotas](https://kubernetes.io/docs/concepts/policy/resource-quotas/) and using PDBs.\n\n## Interruption Handling\n\n### Should I use Karpenter interruption handling alongside Node Termination Handler?\nNo. We recommend against using Node Termination Handler alongside Karpenter due to conflicts that could occur from the two components handling the same events.\n\n### Why should I migrate from Node Termination Handler?\nKarpenter's native interruption handling offers two main benefits over the standalone Node Termination Handler component:\n1. You don't have to manage and maintain a separate component to exclusively handle interruption events.\n2. Karpenter's native interruption handling coordinates with other deprovisioning so that consolidation, expiration, etc. can be aware of interruption events and vice-versa.\n\n### Why am I receiving QueueNotFound errors when I set `--interruption-queue`?\nKarpenter requires a queue to exist that receives event messages from EC2 and health services in order to handle interruption messages properly for nodes.\n\nDetails on the types of events that Karpenter handles can be found in the [Interruption Handling Docs]({{< ref \"./concepts/disruption/#interruption\" >}}).\n\nDetails on provisioning the SQS queue and EventBridge rules can be found in the [Getting Started Guide]({{< ref \"./getting-started/getting-started-with-karpenter/#create-the-karpenter-infrastructure-and-iam-roles\" >}}).\n\n## Consolidation\n\n### Why do I sometimes see an extra node get launched when updating a deployment that remains empty and is later removed?\n\nConsolidation 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.\n\n## Logging\n\n### How do I customize or configure the log output?\n\nKarpenter uses [uber-go/zap](https://github.com/uber-go/zap) for logging. You can customize or configure the log messages by editing the [configmap-logging.yaml](https://github.com/aws/karpenter/blob/main/charts/karpenter/templates/configmap-logging.yaml)\n`ConfigMap`'s [data.zap-logger-config](https://github.com/aws/karpenter/blob/main/charts/karpenter/templates/configmap-logging.yaml#L26) field.\nThe available configuration options are specified in the [zap.Config godocs](https://pkg.go.dev/go.uber.org/zap#Config).\n"
  },
  {
    "path": "website/content/en/v1.0/getting-started/_index.md",
    "content": "---\ntitle: \"Getting Started\"\nlinkTitle: \"Getting Started\"\nweight: 10\ndescription: >\n  Choose from different methods to get started with Karpenter\n---\n\n\nTo get started with Karpenter, the [Getting Started with Karpenter]({{< relref \"getting-started-with-karpenter\" >}}) guide provides an end-to-end procedure for creating a cluster (with `eksctl`) and adding Karpenter.\n\nSee the [AKS Node autoprovisioning article](https://learn.microsoft.com/azure/aks/node-autoprovision) on how to use Karpenter on Azure's AKS or go to the [Karpenter provider for Azure open source repository](https://github.com/Azure/karpenter-provider-azure) for self-hosting on Azure and additional information.\n\nIf you prefer, the following instructions use Terraform to create a cluster and add Karpenter:\n\n* [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/getting-started/) guide and also add modules and add-ons. This includes a [Karpenter](https://aws-ia.github.io/terraform-aws-eks-blueprints/patterns/karpenter/) add-on that lets you bypass the instructions in this guide for setting up Karpenter.\n\nAlthough not supported, you could also try Karpenter on other Kubernetes distributions running on AWS. For example:\n\n* [kOps](https://kops.sigs.k8s.io/operations/karpenter/): These instructions describe how to create a kOps Kubernetes cluster in AWS that includes Karpenter.\n\nLearn more about Karpenter and how to get started below.\n\n* [Karpenter EKS Best Practices](https://aws.github.io/aws-eks-best-practices/karpenter/) guide\n* [EC2 Spot Workshop for Karpenter](https://ec2spotworkshops.com/karpenter.html)\n* [EKS Karpenter Workshop](https://www.eksworkshop.com/docs/autoscaling/compute/karpenter/)\n* [Advanced EKS Immersion Karpenter Workshop](https://catalog.us-east-1.prod.workshops.aws/workshops/76a5dd80-3249-4101-8726-9be3eeee09b2/en-US/autoscaling/karpenter)\n* [Karpenter Blueprints](https://github.com/aws-samples/karpenter-blueprints)\n* [Tutorial: Run Kubernetes Clusters for Less with Amazon EC2 Spot and Karpenter](https://community.aws/tutorials/run-kubernetes-clusters-for-less-with-amazon-ec2-spot-and-karpenter#step-6-optional-simulate-spot-interruption)\n"
  },
  {
    "path": "website/content/en/v1.0/getting-started/getting-started-with-karpenter/_index.md",
    "content": "\n---\ntitle: \"Getting Started with Karpenter\"\nlinkTitle: \"Getting Started with Karpenter\"\nweight: 10\ndescription: >\n  Set up a cluster and add Karpenter\n---\n\nKarpenter 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.\n\nThis guide shows how to get started with Karpenter by creating a Kubernetes cluster and installing Karpenter.\nTo use Karpenter, you must be running a supported Kubernetes cluster on a supported cloud provider.\n\nThe guide below explains how to utilize the [Karpenter provider for AWS](https://github.com/aws/karpenter-provider-aws) with EKS.\n\nSee the [AKS Node autoprovisioning article](https://learn.microsoft.com/azure/aks/node-autoprovision) on how to use Karpenter on Azure's AKS or go to the [Karpenter provider for Azure open source repository](https://github.com/Azure/karpenter-provider-azure) for self-hosting on Azure and additional information.\n\n## Create a cluster and add Karpenter\n\nThis guide uses `eksctl` to create the cluster.\nIt should take less than 1 hour to complete, and cost less than $0.25.\nFollow the clean-up instructions to reduce any charges.\n\n### 1. Install utilities\n\nKarpenter is installed in clusters with a Helm chart.\n\nKarpenter requires cloud provider permissions to provision nodes, for AWS IAM\nRoles for Service Accounts (IRSA) should be used. IRSA permits Karpenter\n(within the cluster) to make privileged requests to AWS (as the cloud provider)\nvia a ServiceAccount.\n\nInstall these tools before proceeding:\n\n1. [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2-linux.html)\n2. `kubectl` - [the Kubernetes CLI](https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/)\n3. `eksctl` (>= v0.191.0) - [the CLI for AWS EKS](https://eksctl.io/installation)\n4. `helm` - [the package manager for Kubernetes](https://helm.sh/docs/intro/install/)\n\n[Configure the AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html)\nwith a user that has sufficient privileges to create an EKS cluster. Verify that the CLI can\nauthenticate properly by running `aws sts get-caller-identity`.\n\n### 2. Set environment variables\n\nAfter setting up the tools, set the Karpenter and Kubernetes version:\n\n```bash\nexport KARPENTER_NAMESPACE=\"kube-system\"\nexport KARPENTER_VERSION=\"1.0.11\"\nexport K8S_VERSION=\"1.31\"\n```\n\nThen set the following environment variable:\n\n{{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step01-config.sh\" language=\"bash\"%}}\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nIf you open a new shell to run steps in this procedure, you need to set some or all of the environment variables again.\nTo remind yourself of these values, type:\n\n```bash\necho \"${KARPENTER_NAMESPACE}\" \"${KARPENTER_VERSION}\" \"${K8S_VERSION}\" \"${CLUSTER_NAME}\" \"${AWS_DEFAULT_REGION}\" \"${AWS_ACCOUNT_ID}\" \"${TEMPOUT}\" \"${ARM_AMI_ID}\" \"${AMD_AMI_ID}\" \"${GPU_AMI_ID}\"\n```\n\n{{% /alert %}}\n\n\n### 3. Create a Cluster\n\nCreate a basic cluster with `eksctl`.\nThe following cluster configuration will:\n\n* Use CloudFormation to set up the infrastructure needed by the EKS cluster. See [CloudFormation]({{< relref \"../../reference/cloudformation/\" >}}) for a complete description of what `cloudformation.yaml` does for Karpenter.\n* Create a Kubernetes service account and AWS IAM Role, and associate them using IRSA to let Karpenter launch instances.\n* Add the Karpenter node role to the aws-auth configmap to allow nodes to connect.\n* 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.\n* Set KARPENTER_IAM_ROLE_ARN variables.\n* Create a role to allow spot instances.\n* Run Helm to install Karpenter\n\n{{< tabpane text=true right=false >}}\n  {{% tab header=\"**Create cluster command**:\" disabled=true /%}}\n  {{% tab header=\"Managed NodeGroups\" %}}\n  {{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step02-create-cluster.sh\" language=\"bash\"%}}\n  {{% /tab %}}\n  {{% tab header=\"Fargate\" %}}\n  {{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step02-create-cluster-fargate.sh\" language=\"bash\"%}}\n  {{% /tab %}}\n{{< /tabpane >}}\n\nUnless your AWS account has already onboarded to EC2 Spot, you will need to create the service linked role to\navoid the [`ServiceLinkedRoleCreationNotPermitted` error]({{<ref \"../../troubleshooting/#missing-service-linked-role\" >}}).\n\n{{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step06-add-spot-role.sh\" language=\"bash\"%}}\n\n{{% alert title=\"Windows Support Notice\" color=\"warning\" %}}\nIn order to run Windows workloads, Windows support should be enabled in your EKS Cluster.\nSee [Enabling Windows support](https://docs.aws.amazon.com/eks/latest/userguide/windows-support.html#enable-windows-support) to learn more.\n{{% /alert %}}\n\n### 4. Install Karpenter\n\n{{< tabpane text=true right=false >}}\n  {{% tab header=\"**Karpenter installation command**:\" disabled=true /%}}\n  {{% tab header=\"Managed NodeGroups\" %}}\n  {{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step08-apply-helm-chart.sh\" language=\"bash\"%}}\n  {{% /tab %}}\n  {{% tab header=\"Fargate\" %}}\n  {{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step08-apply-helm-chart-fargate.sh\" language=\"bash\"%}}\n  {{% /tab %}}\n{{< /tabpane >}}\n\nAs the OCI Helm chart is signed by [Cosign](https://github.com/sigstore/cosign) as part of the release process you can verify the chart before installing it by running the following command.\n\n```bash\ncosign verify public.ecr.aws/karpenter/karpenter:1.0.11 \\\n  --certificate-oidc-issuer=https://token.actions.githubusercontent.com \\\n  --certificate-identity-regexp='https://github\\.com/aws/karpenter-provider-aws/\\.github/workflows/release\\.yaml@.+' \\\n  --certificate-github-workflow-repository=aws/karpenter-provider-aws \\\n  --certificate-github-workflow-name=Release \\\n  --certificate-github-workflow-ref=refs/tags/v1.0.11 \\\n  --annotations version=1.0.11\n```\n\n{{% alert title=\"DNS Policy Notice\" color=\"warning\" %}}\nKarpenter uses the `ClusterFirst` pod DNS policy by default. This is the Kubernetes cluster default and this ensures that Karpenter can reach-out to internal Kubernetes services during its lifetime. There may be cases where you do not have the DNS service that you are using on your cluster up-and-running before Karpenter starts up. The most common case of this is you want Karpenter to manage the node capacity where your DNS service pods are running.\n\nIf you need Karpenter to manage the DNS service pods' capacity, this means that DNS won't be running when Karpenter starts-up. In this case, you will need to set the pod DNS policy to `Default` with `--set dnsPolicy=Default`. This will tell Karpenter to use the host's DNS resolution instead of the internal DNS resolution, ensuring that you don't have a dependency on the DNS service pods to run. More details on this issue can be found in the following Github issues: [#2186](https://github.com/aws/karpenter-provider-aws/issues/2186) and [#4947](https://github.com/aws/karpenter-provider-aws/issues/4947).\n{{% /alert %}}\n\n{{% alert title=\"Common Expression Language/Webhooks Notice\" color=\"warning\" %}}\nKarpenter supports using [Kubernetes Common Expression Language](https://kubernetes.io/docs/reference/using-api/cel/) for validating its Custom Resource Definitions out-of-the-box; however, this feature is not supported on versions of Kubernetes < 1.25. If you are running an earlier version of Kubernetes, you will need to use the Karpenter admission webhooks for validation instead. You can enable these webhooks with `--set webhook.enabled=true` when applying the Karpenter Helm chart.\n{{% /alert %}}\n\n{{% alert title=\"Pod Identity Supports Notice\" color=\"warning\" %}}\nKarpenter now supports using [Pod Identity](https://docs.aws.amazon.com/eks/latest/userguide/pod-identities.html) to authenticate AWS SDK to make API requests to AWS services using AWS Identity and Access Management (IAM) permissions. This feature not supported on versions of Kubernetes < 1.24.  If you are running an earlier version of Kubernetes, you will need to use the [IAM Roles for Service Accounts(IRSA)](https://docs.aws.amazon.com/emr/latest/EMR-on-EKS-DevelopmentGuide/setting-up-enable-IAM.html) for pod authentication instead. You can enable these IRSA with `--set \"serviceAccount.annotations.eks\\.amazonaws\\.com/role-arn=${KARPENTER_IAM_ROLE_ARN}\"` when applying the Karpenter Helm chart.\n{{% /alert %}}\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter creates a mapping between CloudProvider machines and CustomResources in the cluster for capacity tracking. To ensure this mapping is consistent, Karpenter utilizes the following tag keys:\n\n* `karpenter.sh/managed-by`\n* `karpenter.sh/nodepool`\n* `kubernetes.io/cluster/${CLUSTER_NAME}`\n\nBecause Karpenter takes this dependency, any user that has the ability to Create/Delete these tags on CloudProvider machines will have the ability to orchestrate Karpenter to Create/Delete CloudProvider machines as a side effect. We recommend that you [enforce tag-based IAM policies](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html) on these tags against any EC2 instance resource (`i-*`) for any users that might have [CreateTags](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTags.html)/[DeleteTags](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DeleteTags.html) permissions but should not have [RunInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html)/[TerminateInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_TerminateInstances.html) permissions.\n{{% /alert %}}\n\n### 5. Create NodePool\n\nA single Karpenter NodePool 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.\n\nCreate a default NodePool using the command below. This NodePool uses `securityGroupSelectorTerms` and `subnetSelectorTerms` to discover resources used to launch nodes. We applied the tag `karpenter.sh/discovery` in the `eksctl` command above. Depending on how these resources are shared between clusters, you may need to use different tagging schemes.\n\nThe `consolidationPolicy` set to `WhenEmptyOrUnderutilized` in the `disruption` block configures Karpenter to reduce cluster cost by removing and replacing nodes. As a result, consolidation will terminate any empty nodes on the cluster. This behavior can be disabled by setting `consolidateAfter` to `Never`, telling Karpenter that it should never consolidate nodes. Review the [NodePool API docs]({{<ref \"../../concepts/nodepools\" >}}) for more information.\n\nNote: This NodePool will create capacity as long as the sum of all created capacity is less than the specified limit.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step12-add-nodepool.sh\" language=\"bash\"%}}\n\nKarpenter is now active and ready to begin provisioning nodes.\n\n### 6. Scale up deployment\n\nThis deployment uses the [pause image](https://www.ianlewis.org/en/almighty-pause-container) and starts with zero replicas.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step13-automatic-node-provisioning.sh\" language=\"bash\"%}}\n\n### 7. Scale down deployment\n\nNow, delete the deployment. After a short amount of time, Karpenter should terminate the empty nodes due to consolidation.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step14-deprovisioning.sh\" language=\"bash\"%}}\n\n### 8. Delete Karpenter nodes manually\n\nIf you delete a node with kubectl, Karpenter will gracefully cordon, drain,\nand shutdown the corresponding instance. Under the hood, Karpenter adds a\nfinalizer to the node object, which blocks deletion until all pods are\ndrained and the instance is terminated. Keep in mind, this only works for\nnodes provisioned by Karpenter.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step16-delete-node.sh\" language=\"bash\"%}}\n\n### 9. Delete the cluster\nTo avoid additional charges, remove the demo infrastructure from your AWS account.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step17-cleanup.sh\" language=\"bash\"%}}\n\n## Monitoring with Grafana (optional)\n\nThis section describes optional ways to configure Karpenter to enhance its capabilities.\nIn 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.\nThis deployment includes two Karpenter dashboards that are automatically onboarded to Grafana. They provide a variety of visualization examples on Karpenter metrics.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step09-add-prometheus-grafana.sh\" language=\"bash\"%}}\n\nThe Grafana instance may be accessed using port forwarding.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step10-add-grafana-port-forward.sh\" language=\"bash\"%}}\n\nThe new stack has only one user, `admin`, and the password is stored in a secret. The following command will retrieve the password.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step11-grafana-get-password.sh\" language=\"bash\"%}}\n\n## Advanced Installation\n\nThe section below covers advanced installation techniques for installing Karpenter. This includes things such as running Karpenter on a cluster without public internet access or ensuring that Karpenter avoids getting throttled by other components in your cluster.\n\n### Private Clusters\n\nYou can optionally install Karpenter on a [private cluster](https://docs.aws.amazon.com/eks/latest/userguide/private-clusters.html#private-cluster-requirements) using the `eksctl` installation by setting `privateCluster.enabled` to true in your [ClusterConfig](https://eksctl.io/usage/eks-private-cluster/#eks-fully-private-cluster) and by setting `--set settings.isolatedVPC=true` when installing the `karpenter` Helm chart.\n\n```bash\nprivateCluster:\n  enabled: true\n```\n\nPrivate clusters have no outbound access to the internet. This means that in order for Karpenter to reach out to the services that it needs to access, you need to enable specific VPC private endpoints. Below shows the endpoints that you need to enable to successfully run Karpenter in a private cluster:\n\n```text\ncom.amazonaws.<region>.ec2\ncom.amazonaws.<region>.ecr.api\ncom.amazonaws.<region>.ecr.dkr\ncom.amazonaws.<region>.s3 – For pulling container images\ncom.amazonaws.<region>.sts – For IAM roles for service accounts\ncom.amazonaws.<region>.ssm - For resolving default AMIs\ncom.amazonaws.<region>.sqs - For accessing SQS if using interruption handling\ncom.amazonaws.<region>.eks - For Karpenter to discover the cluster endpoint\n```\n\nIf you do not currently have these endpoints surfaced in your VPC, you can add the endpoints by running\n\n```bash\naws ec2 create-vpc-endpoint --vpc-id ${VPC_ID} --service-name ${SERVICE_NAME} --vpc-endpoint-type Interface --subnet-ids ${SUBNET_IDS} --security-group-ids ${SECURITY_GROUP_IDS}\n```\n\n{{% alert title=\"Note\" color=\"primary\" %}}\n\nKarpenter (controller and webhook deployment) container images must be in or copied to Amazon ECR private or to another private registry accessible from inside the VPC. If these are not available from within the VPC, or from networks peered with the VPC, you will get Image pull errors when Kubernetes tries to pull these images from ECR public.\n\n{{% /alert %}}\n\n{{% alert title=\"Note\" color=\"primary\" %}}\n\nThere is currently no VPC private endpoint for the [IAM API](https://docs.aws.amazon.com/IAM/latest/APIReference/welcome.html). As a result, you cannot use the default `spec.role` field in your `EC2NodeClass`. Instead, you need to provision and manage an instance profile manually and then specify Karpenter to use this instance profile through the `spec.instanceProfile` field.\n\nYou can provision an instance profile manually and assign a Node role to it by calling the following command\n\n```bash\naws iam create-instance-profile --instance-profile-name \"KarpenterNodeInstanceProfile-${CLUSTER_NAME}\"\naws iam add-role-to-instance-profile --instance-profile-name \"KarpenterNodeInstanceProfile-${CLUSTER_NAME}\" --role-name \"KarpenterNodeRole-${CLUSTER_NAME}\"\n```\n\n{{% /alert %}}\n\n{{% alert title=\"Note\" color=\"primary\" %}}\n\nThere is currently no VPC private endpoint for the [Price List Query API](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/using-price-list-query-api.html). As a result, pricing data can go stale over time. By default, Karpenter ships a static price list that is updated when each binary is released.\n\nFailed requests for pricing data will result in the following error messages\n\n```bash\nERROR   controller.aws.pricing  updating on-demand pricing, RequestError: send request failed\ncaused by: Post \"https://api.pricing.us-east-1.amazonaws.com/\": dial tcp 52.94.231.236:443: i/o timeout; RequestError: send request failed\ncaused 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\"}\n```\n\n{{% /alert %}}\n\n### Preventing APIServer Request Throttling\n\nKubernetes uses [FlowSchemas](https://kubernetes.io/docs/concepts/cluster-administration/flow-control/#flowschema) and [PriorityLevelConfigurations](https://kubernetes.io/docs/concepts/cluster-administration/flow-control/#prioritylevelconfiguration) to map calls to the API server into buckets which determine each user agent's throttling limits.\n\nBy default, Karpenter is installed into the `kube-system` namespace, which leverages the `system-leader-election` and `kube-system-service-accounts` [FlowSchemas](https://kubernetes.io/docs/concepts/cluster-administration/flow-control/#flowschema) to map calls from the `kube-system` namespace to the `leader-election` and `workload-high` PriorityLevelConfigurations respectively. By putting Karpenter in these PriorityLevelConfigurations, we ensure that Karpenter and other critical cluster components are able to run even if other components on the cluster are throttled in other PriorityLevelConfigurations.\n\nIf you install Karpenter in a different namespace than the default `kube-system` namespace, Karpenter will not be put into these higher-priority FlowSchemas by default. Instead, you will need to create custom FlowSchemas for the namespace and service account where Karpenter is installed to ensure that requests are put into this higher PriorityLevelConfiguration.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step15-apply-flowschemas.sh\" language=\"bash\"%}}\n"
  },
  {
    "path": "website/content/en/v1.0/getting-started/getting-started-with-karpenter/cloudformation.yaml",
    "content": "AWSTemplateFormatVersion: \"2010-09-09\"\nDescription: Resources used by https://github.com/aws/karpenter\nParameters:\n  ClusterName:\n    Type: String\n    Description: \"EKS cluster name\"\nResources:\n  KarpenterNodeRole:\n    Type: \"AWS::IAM::Role\"\n    Properties:\n      RoleName: !Sub \"KarpenterNodeRole-${ClusterName}\"\n      Path: /\n      AssumeRolePolicyDocument:\n        Version: \"2012-10-17\"\n        Statement:\n          - Effect: Allow\n            Principal:\n              Service:\n                !Sub \"ec2.${AWS::URLSuffix}\"\n            Action:\n              - \"sts:AssumeRole\"\n      ManagedPolicyArns:\n        - !Sub \"arn:${AWS::Partition}:iam::aws:policy/AmazonEKS_CNI_Policy\"\n        - !Sub \"arn:${AWS::Partition}:iam::aws:policy/AmazonEKSWorkerNodePolicy\"\n        - !Sub \"arn:${AWS::Partition}:iam::aws:policy/AmazonEC2ContainerRegistryPullOnly\"\n        - !Sub \"arn:${AWS::Partition}:iam::aws:policy/AmazonSSMManagedInstanceCore\"\n  KarpenterControllerPolicy:\n    Type: AWS::IAM::ManagedPolicy\n    Properties:\n      ManagedPolicyName: !Sub \"KarpenterControllerPolicy-${ClusterName}\"\n      # The PolicyDocument must be in JSON string format because we use a StringEquals condition that uses an interpolated\n      # value in one of its key parameters which isn't natively supported by CloudFormation\n      PolicyDocument: !Sub |\n        {\n          \"Version\": \"2012-10-17\",\n          \"Statement\": [\n            {\n              \"Sid\": \"AllowScopedEC2InstanceAccessActions\",\n              \"Effect\": \"Allow\",\n              \"Resource\": [\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}::image/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}::snapshot/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:security-group/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:subnet/*\"\n              ],\n              \"Action\": [\n                \"ec2:RunInstances\",\n                \"ec2:CreateFleet\"\n              ]\n            },\n            {\n              \"Sid\": \"AllowScopedEC2LaunchTemplateAccessActions\",\n              \"Effect\": \"Allow\",\n              \"Resource\": \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:launch-template/*\",\n              \"Action\": [\n                \"ec2:RunInstances\",\n                \"ec2:CreateFleet\"\n              ],\n              \"Condition\": {\n                \"StringEquals\": {\n                  \"aws:ResourceTag/kubernetes.io/cluster/${ClusterName}\": \"owned\"\n                },\n                \"StringLike\": {\n                  \"aws:ResourceTag/karpenter.sh/nodepool\": \"*\"\n                }\n              }\n            },\n            {\n              \"Sid\": \"AllowScopedEC2InstanceActionsWithTags\",\n              \"Effect\": \"Allow\",\n              \"Resource\": [\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:fleet/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:instance/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:volume/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:network-interface/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:launch-template/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:spot-instances-request/*\"\n              ],\n              \"Action\": [\n                \"ec2:RunInstances\",\n                \"ec2:CreateFleet\",\n                \"ec2:CreateLaunchTemplate\"\n              ],\n              \"Condition\": {\n                \"StringEquals\": {\n                  \"aws:RequestTag/kubernetes.io/cluster/${ClusterName}\": \"owned\",\n                  \"aws:RequestTag/eks:eks-cluster-name\": \"${ClusterName}\"\n                },\n                \"StringLike\": {\n                  \"aws:RequestTag/karpenter.sh/nodepool\": \"*\"\n                }\n              }\n            },\n            {\n              \"Sid\": \"AllowScopedResourceCreationTagging\",\n              \"Effect\": \"Allow\",\n              \"Resource\": [\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:fleet/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:instance/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:volume/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:network-interface/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:launch-template/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:spot-instances-request/*\"\n              ],\n              \"Action\": \"ec2:CreateTags\",\n              \"Condition\": {\n                \"StringEquals\": {\n                  \"aws:RequestTag/kubernetes.io/cluster/${ClusterName}\": \"owned\",\n                  \"aws:RequestTag/eks:eks-cluster-name\": \"${ClusterName}\",\n                  \"ec2:CreateAction\": [\n                    \"RunInstances\",\n                    \"CreateFleet\",\n                    \"CreateLaunchTemplate\"\n                  ]\n                },\n                \"StringLike\": {\n                  \"aws:RequestTag/karpenter.sh/nodepool\": \"*\"\n                }\n              }\n            },\n            {\n              \"Sid\": \"AllowScopedResourceTagging\",\n              \"Effect\": \"Allow\",\n              \"Resource\": \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:instance/*\",\n              \"Action\": \"ec2:CreateTags\",\n              \"Condition\": {\n                \"StringEquals\": {\n                  \"aws:ResourceTag/kubernetes.io/cluster/${ClusterName}\": \"owned\"\n                },\n                \"StringLike\": {\n                  \"aws:ResourceTag/karpenter.sh/nodepool\": \"*\"\n                },\n                \"StringEqualsIfExists\": {\n                  \"aws:RequestTag/eks:eks-cluster-name\": \"${ClusterName}\"\n                },\n                \"ForAllValues:StringEquals\": {\n                  \"aws:TagKeys\": [\n                    \"eks:eks-cluster-name\",\n                    \"karpenter.sh/nodeclaim\",\n                    \"Name\"\n                  ]\n                }\n              }\n            },\n            {\n              \"Sid\": \"AllowScopedDeletion\",\n              \"Effect\": \"Allow\",\n              \"Resource\": [\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:instance/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:launch-template/*\"\n              ],\n              \"Action\": [\n                \"ec2:TerminateInstances\",\n                \"ec2:DeleteLaunchTemplate\"\n              ],\n              \"Condition\": {\n                \"StringEquals\": {\n                  \"aws:ResourceTag/kubernetes.io/cluster/${ClusterName}\": \"owned\"\n                },\n                \"StringLike\": {\n                  \"aws:ResourceTag/karpenter.sh/nodepool\": \"*\"\n                }\n              }\n            },\n            {\n              \"Sid\": \"AllowRegionalReadActions\",\n              \"Effect\": \"Allow\",\n              \"Resource\": \"*\",\n              \"Action\": [\n                \"ec2:DescribeImages\",\n                \"ec2:DescribeInstances\",\n                \"ec2:DescribeInstanceTypeOfferings\",\n                \"ec2:DescribeInstanceTypes\",\n                \"ec2:DescribeLaunchTemplates\",\n                \"ec2:DescribeSecurityGroups\",\n                \"ec2:DescribeSpotPriceHistory\",\n                \"ec2:DescribeSubnets\"\n              ],\n              \"Condition\": {\n                \"StringEquals\": {\n                  \"aws:RequestedRegion\": \"${AWS::Region}\"\n                }\n              }\n            },\n            {\n              \"Sid\": \"AllowSSMReadActions\",\n              \"Effect\": \"Allow\",\n              \"Resource\": \"arn:${AWS::Partition}:ssm:${AWS::Region}::parameter/aws/service/*\",\n              \"Action\": \"ssm:GetParameter\"\n            },\n            {\n              \"Sid\": \"AllowPricingReadActions\",\n              \"Effect\": \"Allow\",\n              \"Resource\": \"*\",\n              \"Action\": \"pricing:GetProducts\"\n            },\n            {\n              \"Sid\": \"AllowInterruptionQueueActions\",\n              \"Effect\": \"Allow\",\n              \"Resource\": \"${KarpenterInterruptionQueue.Arn}\",\n              \"Action\": [\n                \"sqs:DeleteMessage\",\n                \"sqs:GetQueueUrl\",\n                \"sqs:ReceiveMessage\"\n              ]\n            },\n            {\n              \"Sid\": \"AllowPassingInstanceRole\",\n              \"Effect\": \"Allow\",\n              \"Resource\": \"${KarpenterNodeRole.Arn}\",\n              \"Action\": \"iam:PassRole\",\n              \"Condition\": {\n                \"StringEquals\": {\n                  \"iam:PassedToService\": [\n                    \"ec2.amazonaws.com\",\n                    \"ec2.amazonaws.com.cn\"\n                  ]\n                }\n              }\n            },\n            {\n              \"Sid\": \"AllowScopedInstanceProfileCreationActions\",\n              \"Effect\": \"Allow\",\n              \"Resource\": \"arn:${AWS::Partition}:iam::${AWS::AccountId}:instance-profile/*\",\n              \"Action\": [\n                \"iam:CreateInstanceProfile\"\n              ],\n              \"Condition\": {\n                \"StringEquals\": {\n                  \"aws:RequestTag/kubernetes.io/cluster/${ClusterName}\": \"owned\",\n                  \"aws:RequestTag/eks:eks-cluster-name\": \"${ClusterName}\",\n                  \"aws:RequestTag/topology.kubernetes.io/region\": \"${AWS::Region}\"\n                },\n                \"StringLike\": {\n                  \"aws:RequestTag/karpenter.k8s.aws/ec2nodeclass\": \"*\"\n                }\n              }\n            },\n            {\n              \"Sid\": \"AllowScopedInstanceProfileTagActions\",\n              \"Effect\": \"Allow\",\n              \"Resource\": \"arn:${AWS::Partition}:iam::${AWS::AccountId}:instance-profile/*\",\n              \"Action\": [\n                \"iam:TagInstanceProfile\"\n              ],\n              \"Condition\": {\n                \"StringEquals\": {\n                  \"aws:ResourceTag/kubernetes.io/cluster/${ClusterName}\": \"owned\",\n                  \"aws:ResourceTag/topology.kubernetes.io/region\": \"${AWS::Region}\",\n                  \"aws:RequestTag/kubernetes.io/cluster/${ClusterName}\": \"owned\",\n                  \"aws:RequestTag/eks:eks-cluster-name\": \"${ClusterName}\",\n                  \"aws:RequestTag/topology.kubernetes.io/region\": \"${AWS::Region}\"\n                },\n                \"StringLike\": {\n                  \"aws:ResourceTag/karpenter.k8s.aws/ec2nodeclass\": \"*\",\n                  \"aws:RequestTag/karpenter.k8s.aws/ec2nodeclass\": \"*\"\n                }\n              }\n            },\n            {\n              \"Sid\": \"AllowScopedInstanceProfileActions\",\n              \"Effect\": \"Allow\",\n              \"Resource\": \"arn:${AWS::Partition}:iam::${AWS::AccountId}:instance-profile/*\",\n              \"Action\": [\n                \"iam:AddRoleToInstanceProfile\",\n                \"iam:RemoveRoleFromInstanceProfile\",\n                \"iam:DeleteInstanceProfile\"\n              ],\n              \"Condition\": {\n                \"StringEquals\": {\n                  \"aws:ResourceTag/kubernetes.io/cluster/${ClusterName}\": \"owned\",\n                  \"aws:ResourceTag/topology.kubernetes.io/region\": \"${AWS::Region}\"\n                },\n                \"StringLike\": {\n                  \"aws:ResourceTag/karpenter.k8s.aws/ec2nodeclass\": \"*\"\n                }\n              }\n            },\n            {\n              \"Sid\": \"AllowInstanceProfileReadActions\",\n              \"Effect\": \"Allow\",\n              \"Resource\": \"arn:${AWS::Partition}:iam::${AWS::AccountId}:instance-profile/*\",\n              \"Action\": \"iam:GetInstanceProfile\"\n            },\n            {\n              \"Sid\": \"AllowAPIServerEndpointDiscovery\",\n              \"Effect\": \"Allow\",\n              \"Resource\": \"arn:${AWS::Partition}:eks:${AWS::Region}:${AWS::AccountId}:cluster/${ClusterName}\",\n              \"Action\": \"eks:DescribeCluster\"\n            }\n          ]\n        }\n  KarpenterInterruptionQueue:\n    Type: AWS::SQS::Queue\n    Properties:\n      QueueName: !Sub \"${ClusterName}\"\n      MessageRetentionPeriod: 300\n      SqsManagedSseEnabled: true\n  KarpenterInterruptionQueuePolicy:\n    Type: AWS::SQS::QueuePolicy\n    Properties:\n      Queues:\n        - !Ref KarpenterInterruptionQueue\n      PolicyDocument:\n        Id: EC2InterruptionPolicy\n        Statement:\n          - Effect: Allow\n            Principal:\n              Service:\n                - events.amazonaws.com\n                - sqs.amazonaws.com\n            Action: sqs:SendMessage\n            Resource: !GetAtt KarpenterInterruptionQueue.Arn\n          - Sid: DenyHTTP\n            Effect: Deny\n            Action: sqs:*\n            Resource: !GetAtt KarpenterInterruptionQueue.Arn\n            Condition:\n              Bool:\n                aws:SecureTransport: false\n            Principal: \"*\"\n  ScheduledChangeRule:\n    Type: 'AWS::Events::Rule'\n    Properties:\n      EventPattern:\n        source:\n          - aws.health\n        detail-type:\n          - AWS Health Event\n      Targets:\n        - Id: KarpenterInterruptionQueueTarget\n          Arn: !GetAtt KarpenterInterruptionQueue.Arn\n  SpotInterruptionRule:\n    Type: 'AWS::Events::Rule'\n    Properties:\n      EventPattern:\n        source:\n          - aws.ec2\n        detail-type:\n          - EC2 Spot Instance Interruption Warning\n      Targets:\n        - Id: KarpenterInterruptionQueueTarget\n          Arn: !GetAtt KarpenterInterruptionQueue.Arn\n  RebalanceRule:\n    Type: 'AWS::Events::Rule'\n    Properties:\n      EventPattern:\n        source:\n          - aws.ec2\n        detail-type:\n          - EC2 Instance Rebalance Recommendation\n      Targets:\n        - Id: KarpenterInterruptionQueueTarget\n          Arn: !GetAtt KarpenterInterruptionQueue.Arn\n  InstanceStateChangeRule:\n    Type: 'AWS::Events::Rule'\n    Properties:\n      EventPattern:\n        source:\n          - aws.ec2\n        detail-type:\n          - EC2 Instance State-change Notification\n      Targets:\n        - Id: KarpenterInterruptionQueueTarget\n          Arn: !GetAtt KarpenterInterruptionQueue.Arn\n"
  },
  {
    "path": "website/content/en/v1.0/getting-started/getting-started-with-karpenter/grafana-values.yaml",
    "content": "datasources:\n  datasources.yaml:\n    apiVersion: 1\n    datasources:\n    - name: Prometheus\n      type: prometheus\n      version: 1\n      url: http://prometheus-server:80\n      access: proxy\ndashboardProviders:\n  dashboardproviders.yaml:\n    apiVersion: 1\n    providers:\n    - name: 'default'\n      orgId: 1\n      folder: ''\n      type: file\n      disableDeletion: false\n      editable: true\n      options:\n        path: /var/lib/grafana/dashboards/default\ndashboards:\n  default:\n    capacity-dashboard:\n      url: https://karpenter.sh/v1.0/getting-started/getting-started-with-karpenter/karpenter-capacity-dashboard.json\n    performance-dashboard:\n      url: https://karpenter.sh/v1.0/getting-started/getting-started-with-karpenter/karpenter-performance-dashboard.json\n"
  },
  {
    "path": "website/content/en/v1.0/getting-started/getting-started-with-karpenter/karpenter-capacity-dashboard.json",
    "content": "{\n    \"annotations\": {\n      \"list\": [\n        {\n          \"builtIn\": 1,\n          \"datasource\": \"-- Grafana --\",\n          \"enable\": true,\n          \"hide\": true,\n          \"iconColor\": \"rgba(0, 211, 255, 1)\",\n          \"name\": \"Annotations & Alerts\",\n          \"target\": {\n            \"limit\": 100,\n            \"matchAny\": false,\n            \"tags\": [],\n            \"type\": \"dashboard\"\n          },\n          \"type\": \"dashboard\"\n        }\n      ]\n    },\n    \"editable\": true,\n    \"fiscalYearStartMonth\": 0,\n    \"graphTooltip\": 0,\n    \"id\": 32,\n    \"links\": [],\n    \"liveNow\": true,\n    \"panels\": [\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"description\": \"\",\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisBorderShow\": false,\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"Nodes rate\",\n              \"axisPlacement\": \"auto\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 10,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"insertNulls\": false,\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"auto\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"none\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"min\": 0,\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            },\n            \"unit\": \"none\"\n          },\n          \"overrides\": [\n            {\n              \"matcher\": {\n                \"id\": \"byFrameRefID\",\n                \"options\": \"B\"\n              },\n              \"properties\": [\n                {\n                  \"id\": \"custom.axisPlacement\",\n                  \"value\": \"right\"\n                },\n                {\n                  \"id\": \"custom.axisLabel\",\n                  \"value\": \"Nodes total\"\n                }\n              ]\n            }\n          ]\n        },\n        \"gridPos\": {\n          \"h\": 5,\n          \"w\": 24,\n          \"x\": 0,\n          \"y\": 0\n        },\n        \"id\": 14,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [\n              \"lastNotNull\"\n            ],\n            \"displayMode\": \"table\",\n            \"placement\": \"right\",\n            \"showLegend\": true\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"sum(rate(karpenter_nodes_created_total{nodepool=~\\\"$nodepool\\\"}[$__rate_interval])) by(cluster,nodepool)\",\n            \"format\": \"time_series\",\n            \"legendFormat\": \"{{cluster}}\",\n            \"range\": true,\n            \"refId\": \"A\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"sum by(cluster,nodepool) (karpenter_nodes_created_total{nodepool=~\\\"$nodepool\\\"})\",\n            \"hide\": false,\n            \"instant\": false,\n            \"legendFormat\": \"__auto\",\n            \"range\": true,\n            \"refId\": \"B\"\n          }\n        ],\n        \"title\": \"Nodes Created by nodepool\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"description\": \"\",\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisBorderShow\": false,\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"Nodes rate\",\n              \"axisPlacement\": \"auto\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 10,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"insertNulls\": false,\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"auto\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"none\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"min\": 0,\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            },\n            \"unit\": \"none\"\n          },\n          \"overrides\": [\n            {\n              \"matcher\": {\n                \"id\": \"byFrameRefID\",\n                \"options\": \"B\"\n              },\n              \"properties\": [\n                {\n                  \"id\": \"custom.axisPlacement\",\n                  \"value\": \"right\"\n                },\n                {\n                  \"id\": \"custom.axisLabel\",\n                  \"value\": \"Nodes total\"\n                }\n              ]\n            }\n          ]\n        },\n        \"gridPos\": {\n          \"h\": 5,\n          \"w\": 24,\n          \"x\": 0,\n          \"y\": 5\n        },\n        \"id\": 15,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [\n              \"lastNotNull\"\n            ],\n            \"displayMode\": \"table\",\n            \"placement\": \"right\",\n            \"showLegend\": true\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"sum(rate(karpenter_nodes_terminated_total{nodepool=~\\\"$nodepool\\\"}[$__rate_interval])) by(cluster,nodepool)\",\n            \"format\": \"time_series\",\n            \"legendFormat\": \"__auto\",\n            \"range\": true,\n            \"refId\": \"A\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"sum by(cluster,nodepool) (karpenter_nodes_terminated_total{nodepool=~\\\"$nodepool\\\"})\",\n            \"hide\": false,\n            \"instant\": false,\n            \"legendFormat\": \"__auto\",\n            \"range\": true,\n            \"refId\": \"B\"\n          }\n        ],\n        \"title\": \"Nodes Terminated by nodepool\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisBorderShow\": false,\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"\",\n              \"axisPlacement\": \"auto\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 10,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"insertNulls\": false,\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"auto\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"none\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            }\n          },\n          \"overrides\": []\n        },\n        \"gridPos\": {\n          \"h\": 6,\n          \"w\": 24,\n          \"x\": 0,\n          \"y\": 10\n        },\n        \"id\": 12,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [\n              \"last\"\n            ],\n            \"displayMode\": \"table\",\n            \"placement\": \"right\",\n            \"showLegend\": true\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"exemplar\": false,\n            \"expr\": \"sum by(reason)(karpenter_voluntary_disruption_eligible_nodes)\",\n            \"legendFormat\": \"reason={{reason}}\",\n            \"range\": true,\n            \"refId\": \"A\"\n          }\n        ],\n        \"title\": \"Nodes Eligible for Disruptions by \\\"reason\\\"\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"description\": \"\",\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisBorderShow\": false,\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"Disruptions rate\",\n              \"axisPlacement\": \"auto\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 10,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"insertNulls\": false,\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"auto\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"normal\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            }\n          },\n          \"overrides\": [\n            {\n              \"matcher\": {\n                \"id\": \"byFrameRefID\",\n                \"options\": \"B\"\n              },\n              \"properties\": [\n                {\n                  \"id\": \"custom.axisPlacement\",\n                  \"value\": \"right\"\n                },\n                {\n                  \"id\": \"custom.axisLabel\",\n                  \"value\": \"Disruptions total\"\n                }\n              ]\n            }\n          ]\n        },\n        \"gridPos\": {\n          \"h\": 6,\n          \"w\": 24,\n          \"x\": 0,\n          \"y\": 16\n        },\n        \"id\": 17,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [\n              \"last\"\n            ],\n            \"displayMode\": \"table\",\n            \"placement\": \"right\",\n            \"showLegend\": true\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"exemplar\": false,\n            \"expr\": \"sum(rate(karpenter_nodeclaims_disrupted_total{nodepool=~\\\"$nodepool\\\"}[$__rate_interval])) by(cluster,nodepool)\",\n            \"legendFormat\": \"{{label_name}}\",\n            \"range\": true,\n            \"refId\": \"A\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"sum by(cluster,nodepool)(karpenter_nodeclaims_disrupted_total{nodepool=~\\\"$nodepool\\\"})\",\n            \"hide\": false,\n            \"instant\": false,\n            \"legendFormat\": \"{{label_name}}\",\n            \"range\": true,\n            \"refId\": \"B\"\n          }\n        ],\n        \"title\": \"Node Disruptions by \\\"$distribution_filter\\\"\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisBorderShow\": false,\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"Disruptions rate\",\n              \"axisPlacement\": \"left\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 10,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"insertNulls\": false,\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"auto\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"normal\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            }\n          },\n          \"overrides\": [\n            {\n              \"matcher\": {\n                \"id\": \"byFrameRefID\",\n                \"options\": \"B\"\n              },\n              \"properties\": [\n                {\n                  \"id\": \"custom.axisPlacement\",\n                  \"value\": \"right\"\n                },\n                {\n                  \"id\": \"custom.axisLabel\",\n                  \"value\": \"Disruptions total\"\n                }\n              ]\n            }\n          ]\n        },\n        \"gridPos\": {\n          \"h\": 6,\n          \"w\": 24,\n          \"x\": 0,\n          \"y\": 22\n        },\n        \"id\": 19,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [\n              \"last\"\n            ],\n            \"displayMode\": \"table\",\n            \"placement\": \"right\",\n            \"showLegend\": true\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"exemplar\": true,\n            \"expr\": \"sum(rate(karpenter_voluntary_disruption_decisions_total[$__rate_interval])) by(cluster,nodepool,consolidation_type,decision)\",\n            \"hide\": false,\n            \"legendFormat\": \"type={{consolidation_type}}, decision={{decision}}\",\n            \"range\": true,\n            \"refId\": \"A\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"sum by(consolidation_type,decision)(karpenter_voluntary_disruption_decisions_total)\",\n            \"hide\": true,\n            \"instant\": false,\n            \"legendFormat\": \"{{label_name}}\",\n            \"range\": true,\n            \"refId\": \"B\"\n          }\n        ],\n        \"title\": \"Disruption Actions performed by \\\"type\\\" and \\\"decision\\\"\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisBorderShow\": false,\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"\",\n              \"axisPlacement\": \"auto\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 10,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"insertNulls\": false,\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"auto\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"normal\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            }\n          },\n          \"overrides\": []\n        },\n        \"gridPos\": {\n          \"h\": 8,\n          \"w\": 24,\n          \"x\": 0,\n          \"y\": 28\n        },\n        \"id\": 6,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [],\n            \"displayMode\": \"table\",\n            \"placement\": \"right\",\n            \"showLegend\": true\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"sum by ($distribution_filter)(\\n    karpenter_pods_state{arch=~\\\"$arch\\\", capacity_type=~\\\"$capacity_type\\\", instance_type=~\\\"$instance_type\\\", nodepool=~\\\"$nodepool\\\"}\\n)\",\n            \"legendFormat\": \"{{label_name}}\",\n            \"range\": true,\n            \"refId\": \"A\"\n          }\n        ],\n        \"title\": \"Pod Distribution by \\\"$distribution_filter\\\"\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisBorderShow\": false,\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"\",\n              \"axisPlacement\": \"auto\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 10,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"insertNulls\": false,\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"auto\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"normal\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            }\n          },\n          \"overrides\": []\n        },\n        \"gridPos\": {\n          \"h\": 6,\n          \"w\": 24,\n          \"x\": 0,\n          \"y\": 36\n        },\n        \"id\": 20,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [\n              \"last\"\n            ],\n            \"displayMode\": \"table\",\n            \"placement\": \"right\",\n            \"showLegend\": true\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"sum by(phase)(karpenter_pods_state)\",\n            \"legendFormat\": \"{{label_name}}\",\n            \"range\": true,\n            \"refId\": \"A\"\n          }\n        ],\n        \"title\": \"Pod Phase\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"continuous-RdYlGr\"\n            },\n            \"custom\": {\n              \"align\": \"left\",\n              \"cellOptions\": {\n                \"type\": \"auto\"\n              },\n              \"inspect\": false\n            },\n            \"mappings\": [],\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            }\n          },\n          \"overrides\": [\n            {\n              \"matcher\": {\n                \"id\": \"byRegexp\",\n                \"options\": \".*Utilization$\"\n              },\n              \"properties\": [\n                {\n                  \"id\": \"custom.cellOptions\",\n                  \"value\": {\n                    \"mode\": \"gradient\",\n                    \"type\": \"gauge\"\n                  }\n                },\n                {\n                  \"id\": \"min\",\n                  \"value\": 0\n                },\n                {\n                  \"id\": \"max\",\n                  \"value\": 1\n                },\n                {\n                  \"id\": \"unit\",\n                  \"value\": \"percentunit\"\n                }\n              ]\n            },\n            {\n              \"matcher\": {\n                \"id\": \"byName\",\n                \"options\": \"Memory Provisioned\"\n              },\n              \"properties\": [\n                {\n                  \"id\": \"unit\",\n                  \"value\": \"bytes\"\n                }\n              ]\n            }\n          ]\n        },\n        \"gridPos\": {\n          \"h\": 11,\n          \"w\": 18,\n          \"x\": 0,\n          \"y\": 42\n        },\n        \"id\": 10,\n        \"options\": {\n          \"cellHeight\": \"sm\",\n          \"footer\": {\n            \"countRows\": false,\n            \"fields\": \"\",\n            \"reducer\": [\n              \"sum\"\n            ],\n            \"show\": false\n          },\n          \"showHeader\": true\n        },\n        \"pluginVersion\": \"11.1.0\",\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"exemplar\": false,\n            \"expr\": \"karpenter_nodepools_usage{resource_type=\\\"cpu\\\"} / karpenter_nodepools_limit{resource_type=\\\"cpu\\\"}\",\n            \"format\": \"table\",\n            \"instant\": true,\n            \"legendFormat\": \"CPU Limit Utilization\",\n            \"range\": false,\n            \"refId\": \"CPU Limit Utilization\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"exemplar\": false,\n            \"expr\": \"count by (nodepool)(karpenter_nodes_allocatable{nodepool!=\\\"N/A\\\",resource_type=\\\"cpu\\\"}) # Selects a single resource type to get node count\",\n            \"format\": \"table\",\n            \"hide\": false,\n            \"instant\": true,\n            \"range\": false,\n            \"refId\": \"Node Count\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"exemplar\": false,\n            \"expr\": \"karpenter_nodepools_usage{resource_type=\\\"memory\\\"} / karpenter_nodepools_limit{resource_type=\\\"memory\\\"}\",\n            \"format\": \"table\",\n            \"hide\": false,\n            \"instant\": true,\n            \"legendFormat\": \"Memory Limit Utilization\",\n            \"range\": false,\n            \"refId\": \"Memory Limit Utilization\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"exemplar\": false,\n            \"expr\": \"sum by (nodepool)(karpenter_nodes_allocatable{nodepool!=\\\"N/A\\\",resource_type=\\\"cpu\\\"})\",\n            \"format\": \"table\",\n            \"hide\": false,\n            \"instant\": true,\n            \"range\": false,\n            \"refId\": \"CPU Capacity\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"exemplar\": false,\n            \"expr\": \"sum by (nodepool)(karpenter_nodes_allocatable{nodepool!=\\\"N/A\\\",resource_type=\\\"memory\\\"})\",\n            \"format\": \"table\",\n            \"hide\": false,\n            \"instant\": true,\n            \"range\": false,\n            \"refId\": \"Memory Capacity\"\n          }\n        ],\n        \"title\": \"Nodepool Summary\",\n        \"transformations\": [\n          {\n            \"id\": \"seriesToColumns\",\n            \"options\": {\n              \"byField\": \"nodepool\"\n            }\n          },\n          {\n            \"id\": \"organize\",\n            \"options\": {\n              \"excludeByName\": {\n                \"Time\": true,\n                \"Time 1\": true,\n                \"Time 2\": true,\n                \"Time 3\": true,\n                \"Time 4\": true,\n                \"Time 5\": true,\n                \"__name__\": true,\n                \"instance\": true,\n                \"instance 1\": true,\n                \"instance 2\": true,\n                \"job\": true,\n                \"job 1\": true,\n                \"job 2\": true,\n                \"resource_type\": true,\n                \"resource_type 1\": true,\n                \"resource_type 2\": true\n              },\n              \"indexByName\": {\n                \"Time 1\": 6,\n                \"Time 2\": 7,\n                \"Time 3\": 11,\n                \"Time 4\": 15,\n                \"Time 5\": 16,\n                \"Value #CPU Capacity\": 2,\n                \"Value #CPU Limit Utilization\": 3,\n                \"Value #Memory Capacity\": 4,\n                \"Value #Memory Limit Utilization\": 5,\n                \"Value #Node Count\": 1,\n                \"instance 1\": 8,\n                \"instance 2\": 12,\n                \"job 1\": 9,\n                \"job 2\": 13,\n                \"nodepool\": 0,\n                \"resource_type 1\": 10,\n                \"resource_type 2\": 14\n              },\n              \"renameByName\": {\n                \"Time 1\": \"\",\n                \"Value\": \"CPU Utilization\",\n                \"Value #CPU Capacity\": \"CPU Provisioned\",\n                \"Value #CPU Limit Utilization\": \"CPU Limit Utilization\",\n                \"Value #CPU Utilization\": \"CPU Limit Utilization\",\n                \"Value #Memory Capacity\": \"Memory Provisioned\",\n                \"Value #Memory Limit Utilization\": \"Memory Limit Utilization\",\n                \"Value #Memory Utilization\": \"Memory Utilization\",\n                \"Value #Node Count\": \"Node Count\",\n                \"instance\": \"\",\n                \"instance 1\": \"\",\n                \"job\": \"\",\n                \"nodepool\": \"Nodepool\"\n              }\n            }\n          }\n        ],\n        \"type\": \"table\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisBorderShow\": false,\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"\",\n              \"axisPlacement\": \"auto\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 0,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"insertNulls\": false,\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"auto\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"none\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"max\": 1,\n            \"min\": 0,\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            },\n            \"unit\": \"percentunit\"\n          },\n          \"overrides\": []\n        },\n        \"gridPos\": {\n          \"h\": 11,\n          \"w\": 6,\n          \"x\": 18,\n          \"y\": 42\n        },\n        \"id\": 8,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [],\n            \"displayMode\": \"list\",\n            \"placement\": \"bottom\",\n            \"showLegend\": false\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"(count(karpenter_nodes_allocatable{arch=~\\\"$arch\\\",capacity_type=\\\"spot\\\",instance_type=~\\\"$instance_type\\\",nodepool=~\\\"$nodepool\\\",zone=~\\\"$zone\\\"}) or vector(0)) / count(karpenter_nodes_allocatable{arch=~\\\"$arch\\\",instance_type=~\\\"$instance_type\\\",nodepool=~\\\"$nodepool\\\",zone=~\\\"$zone\\\"})\",\n            \"legendFormat\": \"Percentage\",\n            \"range\": true,\n            \"refId\": \"A\"\n          }\n        ],\n        \"title\": \"Spot Node Percentage\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"continuous-RdYlGr\"\n            },\n            \"custom\": {\n              \"align\": \"left\",\n              \"cellOptions\": {\n                \"type\": \"auto\"\n              },\n              \"inspect\": false\n            },\n            \"mappings\": [],\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            }\n          },\n          \"overrides\": [\n            {\n              \"matcher\": {\n                \"id\": \"byName\",\n                \"options\": \"node_name\"\n              },\n              \"properties\": [\n                {\n                  \"id\": \"custom.width\",\n                  \"value\": 333\n                }\n              ]\n            },\n            {\n              \"matcher\": {\n                \"id\": \"byRegexp\",\n                \"options\": \".*Utilization\"\n              },\n              \"properties\": [\n                {\n                  \"id\": \"custom.cellOptions\",\n                  \"value\": {\n                    \"mode\": \"gradient\",\n                    \"type\": \"gauge\"\n                  }\n                },\n                {\n                  \"id\": \"unit\",\n                  \"value\": \"percentunit\"\n                },\n                {\n                  \"id\": \"min\",\n                  \"value\": 0\n                },\n                {\n                  \"id\": \"thresholds\",\n                  \"value\": {\n                    \"mode\": \"percentage\",\n                    \"steps\": [\n                      {\n                        \"color\": \"green\",\n                        \"value\": null\n                      },\n                      {\n                        \"color\": \"red\",\n                        \"value\": 75\n                      }\n                    ]\n                  }\n                },\n                {\n                  \"id\": \"max\",\n                  \"value\": 1\n                }\n              ]\n            },\n            {\n              \"matcher\": {\n                \"id\": \"byName\",\n                \"options\": \"Uptime\"\n              },\n              \"properties\": [\n                {\n                  \"id\": \"unit\",\n                  \"value\": \"s\"\n                },\n                {\n                  \"id\": \"decimals\",\n                  \"value\": 0\n                }\n              ]\n            }\n          ]\n        },\n        \"gridPos\": {\n          \"h\": 9,\n          \"w\": 24,\n          \"x\": 0,\n          \"y\": 53\n        },\n        \"id\": 4,\n        \"options\": {\n          \"cellHeight\": \"sm\",\n          \"footer\": {\n            \"countRows\": false,\n            \"fields\": \"\",\n            \"reducer\": [\n              \"sum\"\n            ],\n            \"show\": false\n          },\n          \"showHeader\": true,\n          \"sortBy\": [\n            {\n              \"desc\": true,\n              \"displayName\": \"Uptime\"\n            }\n          ]\n        },\n        \"pluginVersion\": \"11.1.0\",\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"exemplar\": false,\n            \"expr\": \"((karpenter_nodes_total_daemon_requests{resource_type=\\\"cpu\\\",arch=~\\\"$arch\\\",capacity_type=~\\\"$capacity_type\\\",instance_type=~\\\"$instance_type\\\",nodepool=~\\\"$nodepool\\\",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\\\",nodepool=~\\\"$nodepool\\\",zone=~\\\"$zone\\\"} or karpenter_nodes_allocatable*0)) / \\nkarpenter_nodes_allocatable{resource_type=\\\"cpu\\\",arch=~\\\"$arch\\\",capacity_type=~\\\"$capacity_type\\\",instance_type=~\\\"$instance_type\\\",nodepool=~\\\"$nodepool\\\",zone=~\\\"$zone\\\"}\",\n            \"format\": \"table\",\n            \"hide\": false,\n            \"instant\": true,\n            \"legendFormat\": \"CPU Utilization\",\n            \"range\": false,\n            \"refId\": \"CPU Utilization\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"exemplar\": false,\n            \"expr\": \"((karpenter_nodes_total_daemon_requests{resource_type=\\\"memory\\\",arch=~\\\"$arch\\\",capacity_type=~\\\"$capacity_type\\\",instance_type=~\\\"$instance_type\\\",nodepool=~\\\"$nodepool\\\",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\\\",nodepool=~\\\"$nodepool\\\",zone=~\\\"$zone\\\"} or karpenter_nodes_allocatable*0)) / \\nkarpenter_nodes_allocatable{resource_type=\\\"memory\\\",arch=~\\\"$arch\\\",capacity_type=~\\\"$capacity_type\\\",instance_type=~\\\"$instance_type\\\",nodepool=~\\\"$nodepool\\\",zone=~\\\"$zone\\\"}\",\n            \"format\": \"table\",\n            \"hide\": false,\n            \"instant\": true,\n            \"legendFormat\": \"Memory Utilization\",\n            \"range\": false,\n            \"refId\": \"Memory Utilization\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"exemplar\": false,\n            \"expr\": \"karpenter_nodes_total_daemon_requests{resource_type=\\\"pods\\\",arch=~\\\"$arch\\\",capacity_type=~\\\"$capacity_type\\\",instance_type=~\\\"$instance_type\\\",nodepool=~\\\"$nodepool\\\",zone=~\\\"$zone\\\"} + \\nkarpenter_nodes_total_pod_requests{resource_type=\\\"pods\\\",arch=~\\\"$arch\\\",capacity_type=~\\\"$capacity_type\\\",instance_type=~\\\"$instance_type\\\",nodepool=~\\\"$nodepool\\\",zone=~\\\"$zone\\\"}\",\n            \"format\": \"table\",\n            \"hide\": false,\n            \"instant\": true,\n            \"legendFormat\": \"Memory Utilization\",\n            \"range\": false,\n            \"refId\": \"Pod Count\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"exemplar\": false,\n            \"expr\": \"label_replace(\\n    sum by (node)(node_time_seconds) - sum by (node)(node_boot_time_seconds),\\n    \\\"node_name\\\", \\\"$1\\\", \\\"node\\\", \\\"(.+)\\\"\\n)\",\n            \"format\": \"table\",\n            \"hide\": false,\n            \"instant\": true,\n            \"legendFormat\": \"Uptime\",\n            \"range\": false,\n            \"refId\": \"Uptime\"\n          }\n        ],\n        \"title\": \"Node Summary\",\n        \"transformations\": [\n          {\n            \"id\": \"seriesToColumns\",\n            \"options\": {\n              \"byField\": \"node_name\"\n            }\n          },\n          {\n            \"id\": \"organize\",\n            \"options\": {\n              \"excludeByName\": {\n                \"Time\": true,\n                \"Time 1\": true,\n                \"Time 2\": true,\n                \"Time 3\": true,\n                \"Time 4\": true,\n                \"Value\": false,\n                \"Value #Pod Count\": false,\n                \"__name__\": true,\n                \"arch\": true,\n                \"arch 1\": true,\n                \"arch 2\": true,\n                \"arch 3\": true,\n                \"capacity_type 2\": true,\n                \"capacity_type 3\": true,\n                \"instance\": true,\n                \"instance 1\": true,\n                \"instance 2\": true,\n                \"instance 3\": true,\n                \"instance_category 1\": true,\n                \"instance_category 2\": true,\n                \"instance_category 3\": true,\n                \"instance_cpu\": true,\n                \"instance_cpu 1\": true,\n                \"instance_cpu 2\": true,\n                \"instance_cpu 3\": true,\n                \"instance_family\": true,\n                \"instance_family 1\": true,\n                \"instance_family 2\": true,\n                \"instance_family 3\": true,\n                \"instance_generation 1\": true,\n                \"instance_generation 2\": true,\n                \"instance_generation 3\": true,\n                \"instance_gpu_count\": true,\n                \"instance_gpu_count 1\": true,\n                \"instance_gpu_count 2\": true,\n                \"instance_gpu_count 3\": true,\n                \"instance_gpu_manufacturer\": true,\n                \"instance_gpu_manufacturer 1\": true,\n                \"instance_gpu_manufacturer 2\": true,\n                \"instance_gpu_manufacturer 3\": true,\n                \"instance_gpu_memory\": true,\n                \"instance_gpu_memory 1\": true,\n                \"instance_gpu_memory 2\": true,\n                \"instance_gpu_memory 3\": true,\n                \"instance_gpu_name\": true,\n                \"instance_gpu_name 1\": true,\n                \"instance_gpu_name 2\": true,\n                \"instance_gpu_name 3\": true,\n                \"instance_hypervisor\": true,\n                \"instance_hypervisor 1\": true,\n                \"instance_hypervisor 2\": true,\n                \"instance_hypervisor 3\": true,\n                \"instance_local_nvme 1\": true,\n                \"instance_local_nvme 2\": true,\n                \"instance_local_nvme 3\": true,\n                \"instance_memory\": true,\n                \"instance_memory 1\": true,\n                \"instance_memory 2\": true,\n                \"instance_memory 3\": true,\n                \"instance_pods\": true,\n                \"instance_pods 1\": true,\n                \"instance_pods 2\": true,\n                \"instance_pods 3\": true,\n                \"instance_size\": true,\n                \"instance_size 1\": true,\n                \"instance_size 2\": true,\n                \"instance_size 3\": true,\n                \"instance_type 1\": false,\n                \"instance_type 2\": true,\n                \"instance_type 3\": true,\n                \"job\": true,\n                \"job 1\": true,\n                \"job 2\": true,\n                \"job 3\": true,\n                \"node\": true,\n                \"nodepool 1\": false,\n                \"nodepool 2\": true,\n                \"nodepool 3\": true,\n                \"os\": true,\n                \"os 1\": true,\n                \"os 2\": true,\n                \"os 3\": true,\n                \"resource_type\": true,\n                \"resource_type 1\": true,\n                \"resource_type 2\": true,\n                \"resource_type 3\": true,\n                \"zone 1\": false,\n                \"zone 2\": true,\n                \"zone 3\": true\n              },\n              \"indexByName\": {\n                \"Time 1\": 1,\n                \"Time 2\": 25,\n                \"Time 3\": 45,\n                \"Time 4\": 65,\n                \"Value #CPU Utilization\": 10,\n                \"Value #Memory Utilization\": 11,\n                \"Value #Pod Count\": 9,\n                \"Value #Uptime\": 8,\n                \"arch 1\": 5,\n                \"arch 2\": 26,\n                \"arch 3\": 46,\n                \"capacity_type 1\": 6,\n                \"capacity_type 2\": 27,\n                \"capacity_type 3\": 47,\n                \"instance 1\": 4,\n                \"instance 2\": 28,\n                \"instance 3\": 48,\n                \"instance_cpu 1\": 12,\n                \"instance_cpu 2\": 29,\n                \"instance_cpu 3\": 49,\n                \"instance_family 1\": 13,\n                \"instance_family 2\": 30,\n                \"instance_family 3\": 50,\n                \"instance_gpu_count 1\": 14,\n                \"instance_gpu_count 2\": 31,\n                \"instance_gpu_count 3\": 51,\n                \"instance_gpu_manufacturer 1\": 15,\n                \"instance_gpu_manufacturer 2\": 32,\n                \"instance_gpu_manufacturer 3\": 52,\n                \"instance_gpu_memory 1\": 16,\n                \"instance_gpu_memory 2\": 33,\n                \"instance_gpu_memory 3\": 53,\n                \"instance_gpu_name 1\": 17,\n                \"instance_gpu_name 2\": 34,\n                \"instance_gpu_name 3\": 54,\n                \"instance_hypervisor 1\": 18,\n                \"instance_hypervisor 2\": 35,\n                \"instance_hypervisor 3\": 55,\n                \"instance_memory 1\": 19,\n                \"instance_memory 2\": 36,\n                \"instance_memory 3\": 56,\n                \"instance_pods 1\": 20,\n                \"instance_pods 2\": 37,\n                \"instance_pods 3\": 57,\n                \"instance_size 1\": 21,\n                \"instance_size 2\": 38,\n                \"instance_size 3\": 58,\n                \"instance_type 1\": 3,\n                \"instance_type 2\": 39,\n                \"instance_type 3\": 59,\n                \"job 1\": 22,\n                \"job 2\": 40,\n                \"job 3\": 60,\n                \"node\": 66,\n                \"node_name\": 0,\n                \"nodepool 1\": 2,\n                \"nodepool 2\": 42,\n                \"nodepool 3\": 62,\n                \"os 1\": 23,\n                \"os 2\": 41,\n                \"os 3\": 61,\n                \"resource_type 1\": 24,\n                \"resource_type 2\": 43,\n                \"resource_type 3\": 63,\n                \"zone 1\": 7,\n                \"zone 2\": 44,\n                \"zone 3\": 64\n              },\n              \"renameByName\": {\n                \"Time\": \"\",\n                \"Time 1\": \"\",\n                \"Value\": \"CPU Utilization\",\n                \"Value #Allocatable\": \"\",\n                \"Value #CPU Utilization\": \"CPU Utilization\",\n                \"Value #Memory Utilization\": \"Memory Utilization\",\n                \"Value #Pod CPU\": \"\",\n                \"Value #Pod Count\": \"Pods\",\n                \"Value #Uptime\": \"Uptime\",\n                \"arch\": \"Architecture\",\n                \"arch 1\": \"Arch\",\n                \"capacity_type\": \"Capacity Type\",\n                \"capacity_type 1\": \"Capacity Type\",\n                \"instance 1\": \"Instance\",\n                \"instance_cpu 1\": \"vCPU\",\n                \"instance_type\": \"Instance Type\",\n                \"instance_type 1\": \"Instance Type\",\n                \"node_name\": \"Node Name\",\n                \"nodepool 1\": \"Nodepool\",\n                \"zone 1\": \"Zone\"\n              }\n            }\n          }\n        ],\n        \"type\": \"table\"\n      }\n    ],\n    \"refresh\": \"10s\",\n    \"schemaVersion\": 39,\n    \"tags\": [],\n    \"templating\": {\n      \"list\": [\n        {\n          \"current\": {\n            \"selected\": false,\n            \"text\": \"Prometheus\",\n            \"value\": \"prometheus\"\n          },\n          \"hide\": 0,\n          \"includeAll\": false,\n          \"label\": \"Data Source\",\n          \"multi\": false,\n          \"name\": \"datasource\",\n          \"options\": [],\n          \"query\": \"prometheus\",\n          \"refresh\": 1,\n          \"regex\": \"\",\n          \"skipUrlSync\": false,\n          \"type\": \"datasource\"\n        },\n        {\n          \"current\": {\n            \"selected\": true,\n            \"text\": [\n              \"All\"\n            ],\n            \"value\": [\n              \"$__all\"\n            ]\n          },\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"definition\": \"label_values(karpenter_nodes_allocatable, nodepool)\",\n          \"hide\": 0,\n          \"includeAll\": true,\n          \"multi\": true,\n          \"name\": \"nodepool\",\n          \"options\": [],\n          \"query\": {\n            \"query\": \"label_values(karpenter_nodes_allocatable, nodepool)\",\n            \"refId\": \"StandardVariableQuery\"\n          },\n          \"refresh\": 2,\n          \"regex\": \"\",\n          \"skipUrlSync\": false,\n          \"sort\": 1,\n          \"type\": \"query\"\n        },\n        {\n          \"current\": {\n            \"selected\": true,\n            \"text\": [\n              \"All\"\n            ],\n            \"value\": [\n              \"$__all\"\n            ]\n          },\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"definition\": \"label_values(karpenter_nodes_allocatable, zone)\",\n          \"hide\": 0,\n          \"includeAll\": true,\n          \"multi\": true,\n          \"name\": \"zone\",\n          \"options\": [],\n          \"query\": {\n            \"query\": \"label_values(karpenter_nodes_allocatable, zone)\",\n            \"refId\": \"StandardVariableQuery\"\n          },\n          \"refresh\": 2,\n          \"regex\": \"\",\n          \"skipUrlSync\": false,\n          \"sort\": 1,\n          \"type\": \"query\"\n        },\n        {\n          \"current\": {\n            \"selected\": true,\n            \"text\": [\n              \"All\"\n            ],\n            \"value\": [\n              \"$__all\"\n            ]\n          },\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"definition\": \"label_values(karpenter_nodes_allocatable, arch)\",\n          \"hide\": 0,\n          \"includeAll\": true,\n          \"multi\": true,\n          \"name\": \"arch\",\n          \"options\": [],\n          \"query\": {\n            \"query\": \"label_values(karpenter_nodes_allocatable, arch)\",\n            \"refId\": \"StandardVariableQuery\"\n          },\n          \"refresh\": 2,\n          \"regex\": \"\",\n          \"skipUrlSync\": false,\n          \"sort\": 1,\n          \"type\": \"query\"\n        },\n        {\n          \"current\": {\n            \"selected\": true,\n            \"text\": [\n              \"All\"\n            ],\n            \"value\": [\n              \"$__all\"\n            ]\n          },\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"definition\": \"label_values(karpenter_nodes_allocatable, capacity_type)\",\n          \"hide\": 0,\n          \"includeAll\": true,\n          \"multi\": true,\n          \"name\": \"capacity_type\",\n          \"options\": [],\n          \"query\": {\n            \"query\": \"label_values(karpenter_nodes_allocatable, capacity_type)\",\n            \"refId\": \"StandardVariableQuery\"\n          },\n          \"refresh\": 2,\n          \"regex\": \"\",\n          \"skipUrlSync\": false,\n          \"sort\": 1,\n          \"type\": \"query\"\n        },\n        {\n          \"current\": {\n            \"selected\": true,\n            \"text\": [\n              \"All\"\n            ],\n            \"value\": [\n              \"$__all\"\n            ]\n          },\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"definition\": \"label_values(karpenter_nodes_allocatable, instance_type)\",\n          \"hide\": 0,\n          \"includeAll\": true,\n          \"multi\": true,\n          \"name\": \"instance_type\",\n          \"options\": [],\n          \"query\": {\n            \"query\": \"label_values(karpenter_nodes_allocatable, instance_type)\",\n            \"refId\": \"StandardVariableQuery\"\n          },\n          \"refresh\": 2,\n          \"regex\": \"\",\n          \"skipUrlSync\": false,\n          \"sort\": 1,\n          \"type\": \"query\"\n        },\n        {\n          \"current\": {\n            \"selected\": true,\n            \"text\": \"nodepool\",\n            \"value\": \"nodepool\"\n          },\n          \"hide\": 0,\n          \"includeAll\": false,\n          \"multi\": false,\n          \"name\": \"distribution_filter\",\n          \"options\": [\n            {\n              \"selected\": false,\n              \"text\": \"arch\",\n              \"value\": \"arch\"\n            },\n            {\n              \"selected\": false,\n              \"text\": \"capacity_type\",\n              \"value\": \"capacity_type\"\n            },\n            {\n              \"selected\": false,\n              \"text\": \"instance_type\",\n              \"value\": \"instance_type\"\n            },\n            {\n              \"selected\": false,\n              \"text\": \"namespace\",\n              \"value\": \"namespace\"\n            },\n            {\n              \"selected\": false,\n              \"text\": \"node\",\n              \"value\": \"node\"\n            },\n            {\n              \"selected\": true,\n              \"text\": \"nodepool\",\n              \"value\": \"nodepool\"\n            },\n            {\n              \"selected\": false,\n              \"text\": \"zone\",\n              \"value\": \"zone\"\n            }\n          ],\n          \"query\": \"arch,capacity_type,instance_type,namespace,node,nodepool,zone\",\n          \"queryValue\": \"\",\n          \"skipUrlSync\": false,\n          \"type\": \"custom\"\n        }\n      ]\n    },\n    \"time\": {\n      \"from\": \"now-3h\",\n      \"to\": \"now\"\n    },\n    \"timepicker\": {},\n    \"timezone\": \"\",\n    \"title\": \"Karpenter Capacity v1\",\n    \"uid\": \"ta8I9Q67Z\",\n    \"version\": 7,\n    \"weekStart\": \"\"\n  }\n"
  },
  {
    "path": "website/content/en/v1.0/getting-started/getting-started-with-karpenter/karpenter-controllers-allocation.json",
    "content": "{\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": {\n          \"type\": \"datasource\",\n          \"uid\": \"grafana\"\n        },\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"target\": {\n          \"limit\": 100,\n          \"matchAny\": false,\n          \"tags\": [],\n          \"type\": \"dashboard\"\n        },\n        \"type\": \"dashboard\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"gnetId\": null,\n  \"graphTooltip\": 0,\n  \"id\": null,\n  \"iteration\": 1636732403925,\n  \"links\": [],\n  \"panels\": [\n    {\n      \"datasource\": null,\n      \"gridPos\": {\n        \"h\": 4,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"id\": 5,\n      \"options\": {\n        \"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).\",\n        \"mode\": \"markdown\"\n      },\n      \"pluginVersion\": \"8.1.6\",\n      \"targets\": [\n        {\n          \"datasource\": {},\n          \"queryType\": \"randomWalk\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"timeFrom\": null,\n      \"timeShift\": null,\n      \"title\": \"About this dashboard\",\n      \"type\": \"text\"\n    },\n    {\n      \"cards\": {\n        \"cardPadding\": null,\n        \"cardRound\": null\n      },\n      \"color\": {\n        \"cardColor\": \"#b4ff00\",\n        \"colorScale\": \"sqrt\",\n        \"colorScheme\": \"interpolateMagma\",\n        \"exponent\": 0.5,\n        \"min\": null,\n        \"mode\": \"spectrum\"\n      },\n      \"dataFormat\": \"tsbuckets\",\n      \"datasource\": {\n        \"uid\": \"${datasource}\"\n      },\n      \"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.\",\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 4\n      },\n      \"heatmap\": {},\n      \"hideZeroBuckets\": false,\n      \"highlightCards\": true,\n      \"id\": 2,\n      \"legend\": {\n        \"show\": true\n      },\n      \"maxDataPoints\": 25,\n      \"pluginVersion\": \"7.5.0\",\n      \"reverseYBuckets\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"uid\": \"${datasource}\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"sum(increase(karpenter_allocation_controller_bind_duration_seconds_bucket[$__interval])) by (le)\",\n          \"format\": \"heatmap\",\n          \"instant\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{le}}\",\n          \"queryType\": \"randomWalk\",\n          \"refId\": \"All Binds\"\n        }\n      ],\n      \"title\": \"Bind duration\",\n      \"tooltip\": {\n        \"show\": true,\n        \"showHistogram\": false\n      },\n      \"type\": \"heatmap\",\n      \"xAxis\": {\n        \"show\": true\n      },\n      \"xBucketNumber\": null,\n      \"xBucketSize\": null,\n      \"yAxis\": {\n        \"decimals\": 0,\n        \"format\": \"s\",\n        \"logBase\": 1,\n        \"max\": null,\n        \"min\": \"0\",\n        \"show\": true,\n        \"splitFactor\": null\n      },\n      \"yBucketBound\": \"auto\",\n      \"yBucketNumber\": null,\n      \"yBucketSize\": null\n    },\n    {\n      \"cards\": {\n        \"cardPadding\": null,\n        \"cardRound\": null\n      },\n      \"color\": {\n        \"cardColor\": \"#b4ff00\",\n        \"colorScale\": \"sqrt\",\n        \"colorScheme\": \"interpolateMagma\",\n        \"exponent\": 0.5,\n        \"mode\": \"spectrum\"\n      },\n      \"dataFormat\": \"tsbuckets\",\n      \"datasource\": {\n        \"uid\": \"${datasource}\"\n      },\n      \"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.\",\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 12\n      },\n      \"heatmap\": {},\n      \"hideZeroBuckets\": false,\n      \"highlightCards\": true,\n      \"id\": 7,\n      \"legend\": {\n        \"show\": true\n      },\n      \"maxDataPoints\": 25,\n      \"pluginVersion\": \"7.5.0\",\n      \"reverseYBuckets\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"uid\": \"${datasource}\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"sum(increase(karpenter_allocation_controller_binpacking_duration_seconds_bucket[$__interval])) by (le)\",\n          \"format\": \"heatmap\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{le}}\",\n          \"queryType\": \"randomWalk\",\n          \"refId\": \"Binpacking Duration\"\n        }\n      ],\n      \"title\": \"Binpack duration\",\n      \"tooltip\": {\n        \"show\": true,\n        \"showHistogram\": false\n      },\n      \"type\": \"heatmap\",\n      \"xAxis\": {\n        \"show\": true\n      },\n      \"xBucketNumber\": null,\n      \"xBucketSize\": null,\n      \"yAxis\": {\n        \"decimals\": 0,\n        \"format\": \"s\",\n        \"logBase\": 1,\n        \"max\": null,\n        \"min\": \"0\",\n        \"show\": true,\n        \"splitFactor\": null\n      },\n      \"yBucketBound\": \"auto\",\n      \"yBucketNumber\": null,\n      \"yBucketSize\": null\n    },\n    {\n      \"cards\": {\n        \"cardPadding\": null,\n        \"cardRound\": null\n      },\n      \"color\": {\n        \"cardColor\": \"#b4ff00\",\n        \"colorScale\": \"sqrt\",\n        \"colorScheme\": \"interpolateInferno\",\n        \"exponent\": 0.5,\n        \"mode\": \"spectrum\"\n      },\n      \"dataFormat\": \"tsbuckets\",\n      \"datasource\": {\n        \"uid\": \"${datasource}\"\n      },\n      \"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.\",\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 20\n      },\n      \"heatmap\": {},\n      \"hideZeroBuckets\": false,\n      \"highlightCards\": true,\n      \"id\": 9,\n      \"legend\": {\n        \"show\": true\n      },\n      \"maxDataPoints\": 25,\n      \"pluginVersion\": \"7.5.0\",\n      \"reverseYBuckets\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"uid\": \"${datasource}\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"sum(increase(karpenter_allocation_controller_scheduling_duration_seconds_bucket{provisioner=\\\"$provisioner\\\"}[$__interval])) by (le)\",\n          \"format\": \"heatmap\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{le}}\",\n          \"queryType\": \"randomWalk\",\n          \"refId\": \"Scheduling Duration\"\n        }\n      ],\n      \"title\": \"Scheduling duration\",\n      \"tooltip\": {\n        \"show\": true,\n        \"showHistogram\": false\n      },\n      \"type\": \"heatmap\",\n      \"xAxis\": {\n        \"show\": true\n      },\n      \"xBucketNumber\": null,\n      \"xBucketSize\": null,\n      \"yAxis\": {\n        \"decimals\": 0,\n        \"format\": \"s\",\n        \"logBase\": 1,\n        \"max\": null,\n        \"min\": null,\n        \"show\": true,\n        \"splitFactor\": null\n      },\n      \"yBucketBound\": \"auto\",\n      \"yBucketNumber\": null,\n      \"yBucketSize\": null\n    }\n  ],\n  \"refresh\": \"1m\",\n  \"schemaVersion\": 30,\n  \"style\": \"dark\",\n  \"tags\": [],\n  \"templating\": {\n    \"list\": [\n      {\n        \"current\": {\n          \"selected\": false,\n          \"text\": \"Prometheus\",\n          \"value\": \"Prometheus\"\n        },\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Data Source\",\n        \"multi\": false,\n        \"name\": \"datasource\",\n        \"options\": [],\n        \"query\": \"prometheus\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"type\": \"datasource\"\n      },\n      {\n        \"allValue\": null,\n        \"current\": {},\n        \"datasource\": {\n          \"uid\": \"${datasource}\"\n        },\n        \"definition\": \"label_values(karpenter_allocation_controller_scheduling_duration_seconds_bucket, provisioner)\",\n        \"description\": \"Karpenter provisioner\",\n        \"error\": null,\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Provisioner\",\n        \"multi\": false,\n        \"name\": \"provisioner\",\n        \"options\": [],\n        \"query\": {\n          \"query\": \"label_values(karpenter_allocation_controller_scheduling_duration_seconds_bucket, provisioner)\",\n          \"refId\": \"StandardVariableQuery\"\n        },\n        \"refresh\": 2,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"sort\": 1,\n        \"type\": \"query\"\n      }\n    ]\n  },\n  \"time\": {\n    \"from\": \"now-3h\",\n    \"to\": \"now\"\n  },\n  \"timepicker\": {},\n  \"timezone\": \"\",\n  \"title\": \"Controllers / Allocation\",\n  \"uid\": \"fs47R-Dnz\",\n  \"version\": 9\n}\n"
  },
  {
    "path": "website/content/en/v1.0/getting-started/getting-started-with-karpenter/karpenter-controllers.json",
    "content": "{\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": {\n          \"type\": \"datasource\",\n          \"uid\": \"grafana\"\n        },\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"target\": {\n          \"limit\": 100,\n          \"matchAny\": false,\n          \"tags\": [],\n          \"type\": \"dashboard\"\n        },\n        \"type\": \"dashboard\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"gnetId\": null,\n  \"graphTooltip\": 0,\n  \"id\": null,\n  \"iteration\": 1636733515850,\n  \"links\": [],\n  \"panels\": [\n    {\n      \"datasource\": null,\n      \"description\": \"\",\n      \"gridPos\": {\n        \"h\": 4,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"id\": 99,\n      \"options\": {\n        \"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).\",\n        \"mode\": \"markdown\"\n      },\n      \"pluginVersion\": \"8.1.6\",\n      \"title\": \"About this dashboard\",\n      \"type\": \"text\"\n    },\n    {\n      \"aliasColors\": {\n        \"items\": \"light-blue\"\n      },\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": {\n        \"uid\": \"${datasource}\"\n      },\n      \"description\": \"\",\n      \"fill\": 1,\n      \"fillGradient\": 2,\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 8,\n        \"x\": 0,\n        \"y\": 4\n      },\n      \"hiddenSeries\": false,\n      \"id\": 14,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": true,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"options\": {\n        \"alertThreshold\": true\n      },\n      \"percentage\": false,\n      \"pluginVersion\": \"8.1.6\",\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"uid\": \"${datasource}\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"workqueue_depth{name=\\\"$controller\\\"}\",\n          \"interval\": \"\",\n          \"legendFormat\": \"items\",\n          \"queryType\": \"randomWalk\",\n          \"refId\": \"Work Queue Depth\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeFrom\": null,\n      \"timeRegions\": [],\n      \"timeShift\": null,\n      \"title\": \"Items in Work Queue\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"graph\",\n      \"xaxis\": {\n        \"buckets\": null,\n        \"mode\": \"time\",\n        \"name\": null,\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"decimals\": 0,\n          \"format\": \"short\",\n          \"label\": \"\",\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"label\": null,\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": null,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false,\n        \"alignLevel\": null\n      }\n    },\n    {\n      \"aliasColors\": {\n        \"error\": \"red\",\n        \"requeue\": \"orange\",\n        \"requeue_after\": \"semi-dark-purple\",\n        \"success\": \"green\"\n      },\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": {\n        \"uid\": \"${datasource}\"\n      },\n      \"description\": \"The rate of completed reconciliations per minute broken out by result status.\",\n      \"fill\": 1,\n      \"fillGradient\": 1,\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 8,\n        \"x\": 8,\n        \"y\": 4\n      },\n      \"hiddenSeries\": false,\n      \"id\": 76,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": true,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"options\": {\n        \"alertThreshold\": true\n      },\n      \"percentage\": false,\n      \"pluginVersion\": \"8.1.6\",\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"uid\": \"${datasource}\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"rate(controller_runtime_reconcile_total{controller=\\\"$controller\\\"}[$trailing]) * 60\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{result}}\",\n          \"queryType\": \"randomWalk\",\n          \"refId\": \"Reconciliations per minute\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeFrom\": null,\n      \"timeRegions\": [],\n      \"timeShift\": null,\n      \"title\": \"Reconciliations per minute\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"graph\",\n      \"xaxis\": {\n        \"buckets\": null,\n        \"mode\": \"time\",\n        \"name\": null,\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"$$hashKey\": \"object:566\",\n          \"format\": \"short\",\n          \"label\": null,\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": true\n        },\n        {\n          \"$$hashKey\": \"object:567\",\n          \"format\": \"short\",\n          \"label\": null,\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": null,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false,\n        \"alignLevel\": null\n      }\n    },\n    {\n      \"cards\": {\n        \"cardPadding\": null,\n        \"cardRound\": null\n      },\n      \"color\": {\n        \"cardColor\": \"#b4ff00\",\n        \"colorScale\": \"sqrt\",\n        \"colorScheme\": \"interpolateMagma\",\n        \"exponent\": 0.5,\n        \"mode\": \"spectrum\"\n      },\n      \"dataFormat\": \"tsbuckets\",\n      \"datasource\": {\n        \"uid\": \"${datasource}\"\n      },\n      \"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.\",\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 8,\n        \"x\": 16,\n        \"y\": 4\n      },\n      \"heatmap\": {},\n      \"hideZeroBuckets\": false,\n      \"highlightCards\": true,\n      \"id\": 126,\n      \"legend\": {\n        \"show\": true\n      },\n      \"maxDataPoints\": 25,\n      \"pluginVersion\": \"8.1.6\",\n      \"reverseYBuckets\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"uid\": \"${datasource}\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"sum(increase(controller_runtime_reconcile_time_seconds_bucket{controller=\\\"$controller\\\"}[$__interval])) by (le)\",\n          \"format\": \"heatmap\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{le}}\",\n          \"queryType\": \"randomWalk\",\n          \"refId\": \"p100\"\n        }\n      ],\n      \"timeFrom\": null,\n      \"timeShift\": null,\n      \"title\": \"Reconciliation duration\",\n      \"tooltip\": {\n        \"show\": true,\n        \"showHistogram\": false\n      },\n      \"type\": \"heatmap\",\n      \"xAxis\": {\n        \"show\": true\n      },\n      \"xBucketNumber\": null,\n      \"xBucketSize\": null,\n      \"yAxis\": {\n        \"decimals\": 0,\n        \"format\": \"s\",\n        \"logBase\": 1,\n        \"max\": null,\n        \"min\": \"0\",\n        \"show\": true,\n        \"splitFactor\": null\n      },\n      \"yBucketBound\": \"auto\",\n      \"yBucketNumber\": null,\n      \"yBucketSize\": null\n    }\n  ],\n  \"refresh\": \"1m\",\n  \"schemaVersion\": 31,\n  \"style\": \"dark\",\n  \"tags\": [],\n  \"templating\": {\n    \"list\": [\n      {\n        \"current\": {},\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Data Source\",\n        \"multi\": false,\n        \"name\": \"datasource\",\n        \"options\": [],\n        \"query\": \"prometheus\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"type\": \"datasource\"\n      },\n      {\n        \"allValue\": \"\",\n        \"current\": {},\n        \"datasource\": {\n          \"uid\": \"${datasource}\"\n        },\n        \"definition\": \"label_values(controller_runtime_reconcile_errors_total, controller)\",\n        \"description\": \"Kubernetes controller\",\n        \"error\": null,\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Controller\",\n        \"multi\": false,\n        \"name\": \"controller\",\n        \"options\": [],\n        \"query\": {\n          \"query\": \"label_values(controller_runtime_reconcile_errors_total, controller)\",\n          \"refId\": \"StandardVariableQuery\"\n        },\n        \"refresh\": 2,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"selected\": true,\n          \"text\": \"10m\",\n          \"value\": \"10m\"\n        },\n        \"description\": \"Trailing aggregation window\",\n        \"error\": null,\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Trailing\",\n        \"multi\": false,\n        \"name\": \"trailing\",\n        \"options\": [\n          {\n            \"selected\": false,\n            \"text\": \"30s\",\n            \"value\": \"30s\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"1m\",\n            \"value\": \"1m\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"5m\",\n            \"value\": \"5m\"\n          },\n          {\n            \"selected\": true,\n            \"text\": \"10m\",\n            \"value\": \"10m\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"30m\",\n            \"value\": \"30m\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"1h\",\n            \"value\": \"1h\"\n          }\n        ],\n        \"query\": \"30s,1m,5m,10m,30m,1h\",\n        \"queryValue\": \"\",\n        \"skipUrlSync\": false,\n        \"type\": \"custom\"\n      }\n    ]\n  },\n  \"time\": {\n    \"from\": \"now-1h\",\n    \"to\": \"now\"\n  },\n  \"timepicker\": {},\n  \"timezone\": \"\",\n  \"title\": \"Controllers\",\n  \"uid\": \"-Yw9ShDnz\",\n  \"version\": 15\n}\n"
  },
  {
    "path": "website/content/en/v1.0/getting-started/getting-started-with-karpenter/karpenter-performance-dashboard.json",
    "content": "{\n    \"annotations\": {\n      \"list\": [\n        {\n          \"builtIn\": 1,\n          \"datasource\": \"-- Grafana --\",\n          \"enable\": true,\n          \"hide\": true,\n          \"iconColor\": \"rgba(0, 211, 255, 1)\",\n          \"name\": \"Annotations & Alerts\",\n          \"target\": {\n            \"limit\": 100,\n            \"matchAny\": false,\n            \"tags\": [],\n            \"type\": \"dashboard\"\n          },\n          \"type\": \"dashboard\"\n        }\n      ]\n    },\n    \"editable\": true,\n    \"fiscalYearStartMonth\": 0,\n    \"graphTooltip\": 0,\n    \"id\": 33,\n    \"links\": [],\n    \"liveNow\": true,\n    \"panels\": [\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisBorderShow\": false,\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"\",\n              \"axisPlacement\": \"auto\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 0,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"insertNulls\": false,\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"never\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"none\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            },\n            \"unit\": \"s\"\n          },\n          \"overrides\": []\n        },\n        \"gridPos\": {\n          \"h\": 9,\n          \"w\": 24,\n          \"x\": 0,\n          \"y\": 0\n        },\n        \"id\": 4,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [\n              \"max\"\n            ],\n            \"displayMode\": \"table\",\n            \"placement\": \"right\",\n            \"showLegend\": true\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"max(karpenter_nodes_termination_duration_seconds{quantile=\\\"0\\\"})\",\n            \"legendFormat\": \"Min\",\n            \"range\": true,\n            \"refId\": \"A\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"max(karpenter_nodes_termination_duration_seconds{quantile=\\\"0.5\\\"})\",\n            \"hide\": false,\n            \"legendFormat\": \"P50\",\n            \"range\": true,\n            \"refId\": \"B\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"max(karpenter_nodes_termination_duration_seconds{quantile=\\\"0.9\\\"})\",\n            \"hide\": false,\n            \"legendFormat\": \"P90\",\n            \"range\": true,\n            \"refId\": \"C\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"max(karpenter_nodes_termination_duration_seconds{quantile=\\\"0.99\\\"})\",\n            \"hide\": false,\n            \"legendFormat\": \"P99\",\n            \"range\": true,\n            \"refId\": \"D\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"max(karpenter_nodes_termination_duration_seconds{quantile=\\\"1\\\"})\",\n            \"hide\": false,\n            \"legendFormat\": \"Max\",\n            \"range\": true,\n            \"refId\": \"E\"\n          }\n        ],\n        \"title\": \"Node Termination Latency\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisBorderShow\": false,\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"\",\n              \"axisPlacement\": \"auto\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 10,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"insertNulls\": false,\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"never\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"none\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"min\": 0,\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            },\n            \"unit\": \"s\"\n          },\n          \"overrides\": []\n        },\n        \"gridPos\": {\n          \"h\": 8,\n          \"w\": 24,\n          \"x\": 0,\n          \"y\": 9\n        },\n        \"id\": 2,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [\n              \"max\"\n            ],\n            \"displayMode\": \"table\",\n            \"placement\": \"right\",\n            \"showLegend\": true\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"max(karpenter_pods_startup_duration_seconds{quantile=\\\"0\\\"})\",\n            \"format\": \"time_series\",\n            \"legendFormat\": \"Min\",\n            \"range\": true,\n            \"refId\": \"Minimum\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"max(karpenter_pods_startup_duration_seconds{quantile=\\\"0.5\\\"})\",\n            \"hide\": false,\n            \"legendFormat\": \"P50\",\n            \"range\": true,\n            \"refId\": \"Median\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"max(karpenter_pods_startup_duration_seconds{quantile=\\\"0.9\\\"})\",\n            \"hide\": false,\n            \"legendFormat\": \"P90\",\n            \"range\": true,\n            \"refId\": \"P90\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"max(karpenter_pods_startup_duration_seconds{quantile=\\\"0.99\\\"})\",\n            \"hide\": false,\n            \"legendFormat\": \"P99\",\n            \"range\": true,\n            \"refId\": \"P99\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"max(karpenter_pods_startup_duration_seconds{quantile=\\\"1\\\"})\",\n            \"hide\": false,\n            \"legendFormat\": \"Max\",\n            \"range\": true,\n            \"refId\": \"Maximum\"\n          }\n        ],\n        \"title\": \"Pod Startup Latency\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisBorderShow\": false,\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"\",\n              \"axisPlacement\": \"auto\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 10,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"insertNulls\": false,\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"never\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"none\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            },\n            \"unit\": \"s\"\n          },\n          \"overrides\": []\n        },\n        \"gridPos\": {\n          \"h\": 8,\n          \"w\": 13,\n          \"x\": 0,\n          \"y\": 17\n        },\n        \"id\": 6,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [],\n            \"displayMode\": \"list\",\n            \"placement\": \"bottom\",\n            \"showLegend\": true\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"histogram_quantile(0, rate(controller_runtime_reconcile_time_seconds_bucket{controller=\\\"$controller\\\"}[10m]))\",\n            \"hide\": false,\n            \"legendFormat\": \"Min\",\n            \"range\": true,\n            \"refId\": \"Minimum\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"histogram_quantile(0.5, rate(controller_runtime_reconcile_time_seconds_bucket{controller=\\\"$controller\\\"}[10m]))\",\n            \"legendFormat\": \"P50\",\n            \"range\": true,\n            \"refId\": \"Median\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"histogram_quantile(0.9, rate(controller_runtime_reconcile_time_seconds_bucket{controller=\\\"$controller\\\"}[10m]))\",\n            \"hide\": false,\n            \"legendFormat\": \"P90\",\n            \"range\": true,\n            \"refId\": \"P90\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"histogram_quantile(0.99, rate(controller_runtime_reconcile_time_seconds_bucket{controller=\\\"$controller\\\"}[10m]))\",\n            \"hide\": false,\n            \"legendFormat\": \"P99\",\n            \"range\": true,\n            \"refId\": \"P99\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"histogram_quantile(1, rate(controller_runtime_reconcile_time_seconds_bucket{controller=\\\"$controller\\\"}[10m]))\",\n            \"hide\": false,\n            \"legendFormat\": \"Max\",\n            \"range\": true,\n            \"refId\": \"Maximum\"\n          }\n        ],\n        \"title\": \"Controller Reconciliation Latency [$controller]\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"thresholds\"\n            },\n            \"mappings\": [],\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            },\n            \"unit\": \"reqps\"\n          },\n          \"overrides\": []\n        },\n        \"gridPos\": {\n          \"h\": 8,\n          \"w\": 11,\n          \"x\": 13,\n          \"y\": 17\n        },\n        \"id\": 8,\n        \"options\": {\n          \"displayMode\": \"gradient\",\n          \"maxVizHeight\": 300,\n          \"minVizHeight\": 10,\n          \"minVizWidth\": 0,\n          \"namePlacement\": \"auto\",\n          \"orientation\": \"horizontal\",\n          \"reduceOptions\": {\n            \"calcs\": [\n              \"lastNotNull\"\n            ],\n            \"fields\": \"\",\n            \"values\": false\n          },\n          \"showUnfilled\": true,\n          \"sizing\": \"auto\",\n          \"valueMode\": \"color\"\n        },\n        \"pluginVersion\": \"11.1.0\",\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"sum(rate(controller_runtime_reconcile_total{job=\\\"karpenter\\\"}[10m])) by (controller)\",\n            \"legendFormat\": \"{{controller}}\",\n            \"range\": true,\n            \"refId\": \"A\"\n          }\n        ],\n        \"title\": \"Controller Reconciliation Rate\",\n        \"type\": \"bargauge\"\n      }\n    ],\n    \"refresh\": \"5s\",\n    \"schemaVersion\": 39,\n    \"tags\": [],\n    \"templating\": {\n      \"list\": [\n        {\n          \"current\": {\n            \"selected\": false,\n            \"text\": \"Prometheus\",\n            \"value\": \"prometheus\"\n          },\n          \"hide\": 0,\n          \"includeAll\": false,\n          \"label\": \"Data Source\",\n          \"multi\": false,\n          \"name\": \"datasource\",\n          \"options\": [],\n          \"query\": \"prometheus\",\n          \"refresh\": 1,\n          \"regex\": \"\",\n          \"skipUrlSync\": false,\n          \"type\": \"datasource\"\n        },\n        {\n          \"current\": {\n            \"selected\": false,\n            \"text\": \"disruption\",\n            \"value\": \"disruption\"\n          },\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"definition\": \"label_values(controller_runtime_reconcile_time_seconds_count{job=\\\"karpenter\\\"}, controller)\",\n          \"hide\": 0,\n          \"includeAll\": false,\n          \"multi\": false,\n          \"name\": \"controller\",\n          \"options\": [],\n          \"query\": {\n            \"query\": \"label_values(controller_runtime_reconcile_time_seconds_count{job=\\\"karpenter\\\"}, controller)\",\n            \"refId\": \"StandardVariableQuery\"\n          },\n          \"refresh\": 2,\n          \"regex\": \"\",\n          \"skipUrlSync\": false,\n          \"sort\": 0,\n          \"type\": \"query\"\n        }\n      ]\n    },\n    \"time\": {\n      \"from\": \"now-3h\",\n      \"to\": \"now\"\n    },\n    \"timepicker\": {},\n    \"timezone\": \"\",\n    \"title\": \"Karpenter Performance v1\",\n    \"uid\": \"fdusq1f2alerke\",\n    \"version\": 3,\n    \"weekStart\": \"\"\n  }\n"
  },
  {
    "path": "website/content/en/v1.0/getting-started/getting-started-with-karpenter/prometheus-values.yaml",
    "content": "alertmanager:\n  persistentVolume:\n    enabled: false\n\nserver:\n  fullnameOverride: prometheus-server\n  persistentVolume:\n    enabled: false\n\nextraScrapeConfigs: |\n    - job_name: karpenter\n      kubernetes_sd_configs:\n      - role: endpoints\n        namespaces:\n          names:\n          - $KARPENTER_NAMESPACE\n      relabel_configs:\n      - source_labels:\n        - __meta_kubernetes_endpoints_name\n        - __meta_kubernetes_endpoint_port_name\n        action: keep\n        regex: karpenter;http-metrics\n"
  },
  {
    "path": "website/content/en/v1.0/getting-started/getting-started-with-karpenter/scripts/step01-config.sh",
    "content": "export AWS_PARTITION=\"aws\" # if you are not using standard partitions, you may need to configure to aws-cn / aws-us-gov\nexport CLUSTER_NAME=\"${USER}-karpenter-demo\"\nexport AWS_DEFAULT_REGION=\"us-west-2\"\nexport AWS_ACCOUNT_ID=\"$(aws sts get-caller-identity --query Account --output text)\"\nexport TEMPOUT=\"$(mktemp)\"\nexport ARM_AMI_ID=\"$(aws ssm get-parameter --name /aws/service/eks/optimized-ami/${K8S_VERSION}/amazon-linux-2-arm64/recommended/image_id --query Parameter.Value --output text)\"\nexport AMD_AMI_ID=\"$(aws ssm get-parameter --name /aws/service/eks/optimized-ami/${K8S_VERSION}/amazon-linux-2/recommended/image_id --query Parameter.Value --output text)\"\nexport GPU_AMI_ID=\"$(aws ssm get-parameter --name /aws/service/eks/optimized-ami/${K8S_VERSION}/amazon-linux-2-gpu/recommended/image_id --query Parameter.Value --output text)\"\n"
  },
  {
    "path": "website/content/en/v1.0/getting-started/getting-started-with-karpenter/scripts/step02-create-cluster-fargate.sh",
    "content": "curl -fsSL https://raw.githubusercontent.com/aws/karpenter-provider-aws/v\"${KARPENTER_VERSION}\"/website/content/en/preview/getting-started/getting-started-with-karpenter/cloudformation.yaml  > $TEMPOUT \\\n&& aws cloudformation deploy \\\n  --stack-name \"Karpenter-${CLUSTER_NAME}\" \\\n  --template-file \"${TEMPOUT}\" \\\n  --capabilities CAPABILITY_NAMED_IAM \\\n  --parameter-overrides \"ClusterName=${CLUSTER_NAME}\"\n\neksctl create cluster -f - <<EOF\n---\napiVersion: eksctl.io/v1alpha5\nkind: ClusterConfig\nmetadata:\n  name: ${CLUSTER_NAME}\n  region: ${AWS_DEFAULT_REGION}\n  version: \"${K8S_VERSION}\"\n  tags:\n    karpenter.sh/discovery: ${CLUSTER_NAME}\n\niam:\n  withOIDC: true\n  serviceAccounts:\n  - metadata:\n      name: karpenter\n      namespace: \"${KARPENTER_NAMESPACE}\"\n    roleName: ${CLUSTER_NAME}-karpenter\n    attachPolicyARNs:\n    - arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:policy/KarpenterControllerPolicy-${CLUSTER_NAME}\n    roleOnly: true\n\niamIdentityMappings:\n- arn: \"arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/KarpenterNodeRole-${CLUSTER_NAME}\"\n  username: system:node:{{EC2PrivateDNSName}}\n  groups:\n  - system:bootstrappers\n  - system:nodes\n  ## If you intend to run Windows workloads, the kube-proxy group should be specified.\n  # For more information, see https://github.com/aws/karpenter/issues/5099.\n  # - eks:kube-proxy-windows\n\nfargateProfiles:\n- name: karpenter\n  selectors:\n  - namespace: \"${KARPENTER_NAMESPACE}\"\nEOF\n\nexport CLUSTER_ENDPOINT=\"$(aws eks describe-cluster --name ${CLUSTER_NAME} --query \"cluster.endpoint\" --output text)\"\nexport KARPENTER_IAM_ROLE_ARN=\"arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/${CLUSTER_NAME}-karpenter\"\n\necho $CLUSTER_ENDPOINT $KARPENTER_IAM_ROLE_ARN\n"
  },
  {
    "path": "website/content/en/v1.0/getting-started/getting-started-with-karpenter/scripts/step02-create-cluster.sh",
    "content": "curl -fsSL https://raw.githubusercontent.com/aws/karpenter-provider-aws/v\"${KARPENTER_VERSION}\"/website/content/en/preview/getting-started/getting-started-with-karpenter/cloudformation.yaml  > \"${TEMPOUT}\" \\\n&& aws cloudformation deploy \\\n  --stack-name \"Karpenter-${CLUSTER_NAME}\" \\\n  --template-file \"${TEMPOUT}\" \\\n  --capabilities CAPABILITY_NAMED_IAM \\\n  --parameter-overrides \"ClusterName=${CLUSTER_NAME}\"\n\neksctl create cluster -f - <<EOF\n---\napiVersion: eksctl.io/v1alpha5\nkind: ClusterConfig\nmetadata:\n  name: ${CLUSTER_NAME}\n  region: ${AWS_DEFAULT_REGION}\n  version: \"${K8S_VERSION}\"\n  tags:\n    karpenter.sh/discovery: ${CLUSTER_NAME}\n\niam:\n  withOIDC: true\n  podIdentityAssociations:\n  - namespace: \"${KARPENTER_NAMESPACE}\"\n    serviceAccountName: karpenter\n    roleName: ${CLUSTER_NAME}-karpenter\n    permissionPolicyARNs:\n    - arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:policy/KarpenterControllerPolicy-${CLUSTER_NAME}\n\niamIdentityMappings:\n- arn: \"arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/KarpenterNodeRole-${CLUSTER_NAME}\"\n  username: system:node:{{EC2PrivateDNSName}}\n  groups:\n  - system:bootstrappers\n  - system:nodes\n  ## If you intend to run Windows workloads, the kube-proxy group should be specified.\n  # For more information, see https://github.com/aws/karpenter/issues/5099.\n  # - eks:kube-proxy-windows\n\nmanagedNodeGroups:\n- instanceType: m5.large\n  amiFamily: AmazonLinux2\n  name: ${CLUSTER_NAME}-ng\n  desiredCapacity: 2\n  minSize: 1\n  maxSize: 10\n\naddons:\n- name: eks-pod-identity-agent\nEOF\n\nexport CLUSTER_ENDPOINT=\"$(aws eks describe-cluster --name \"${CLUSTER_NAME}\" --query \"cluster.endpoint\" --output text)\"\nexport KARPENTER_IAM_ROLE_ARN=\"arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/${CLUSTER_NAME}-karpenter\"\n\necho \"${CLUSTER_ENDPOINT} ${KARPENTER_IAM_ROLE_ARN}\"\n"
  },
  {
    "path": "website/content/en/v1.0/getting-started/getting-started-with-karpenter/scripts/step03-iam-cloud-formation.sh",
    "content": "TEMPOUT=\"$(mktemp)\"\n\ncurl -fsSL https://raw.githubusercontent.com/aws/karpenter-provider-aws/v\"${KARPENTER_VERSION}\"/website/content/en/preview/getting-started/getting-started-with-karpenter/cloudformation.yaml  > \"${TEMPOUT}\" \\\n&& aws cloudformation deploy \\\n  --stack-name \"Karpenter-${CLUSTER_NAME}\" \\\n  --template-file \"${TEMPOUT}\" \\\n  --capabilities CAPABILITY_NAMED_IAM \\\n  --parameter-overrides \"ClusterName=${CLUSTER_NAME}\"\n"
  },
  {
    "path": "website/content/en/v1.0/getting-started/getting-started-with-karpenter/scripts/step04-grant-access.sh",
    "content": "eksctl create iamidentitymapping \\\n  --username system:node:{{EC2PrivateDNSName}} \\\n  --cluster \"${CLUSTER_NAME}\" \\\n  --arn \"arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/KarpenterNodeRole-${CLUSTER_NAME}\" \\\n  --group system:bootstrappers \\\n  --group system:nodes\n"
  },
  {
    "path": "website/content/en/v1.0/getting-started/getting-started-with-karpenter/scripts/step05-controller-iam.sh",
    "content": "eksctl create iamserviceaccount \\\n  --cluster \"${CLUSTER_NAME}\" --name karpenter --namespace \"${KARPENTER_NAMESPACE}\" \\\n  --role-name \"${CLUSTER_NAME}-karpenter\" \\\n  --attach-policy-arn \"arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:policy/KarpenterControllerPolicy-${CLUSTER_NAME}\" \\\n  --role-only \\\n  --approve\n\nexport KARPENTER_IAM_ROLE_ARN=\"arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/${CLUSTER_NAME}-karpenter\"\n"
  },
  {
    "path": "website/content/en/v1.0/getting-started/getting-started-with-karpenter/scripts/step06-add-spot-role.sh",
    "content": "aws iam create-service-linked-role --aws-service-name spot.amazonaws.com || true\n# If the role has already been successfully created, you will see:\n# An error occurred (InvalidInput) when calling the CreateServiceLinkedRole operation: Service role name AWSServiceRoleForEC2Spot has been taken in this account, please try a different suffix.\n"
  },
  {
    "path": "website/content/en/v1.0/getting-started/getting-started-with-karpenter/scripts/step08-apply-helm-chart-fargate.sh",
    "content": "# Logout of helm registry to perform an unauthenticated pull against the public ECR\nhelm registry logout public.ecr.aws\n\nhelm upgrade --install karpenter oci://public.ecr.aws/karpenter/karpenter --version \"${KARPENTER_VERSION}\" --namespace \"${KARPENTER_NAMESPACE}\" --create-namespace \\\n  --set \"settings.clusterName=${CLUSTER_NAME}\" \\\n  --set \"settings.interruptionQueue=${CLUSTER_NAME}\" \\\n  --set controller.resources.requests.cpu=1 \\\n  --set controller.resources.requests.memory=1Gi \\\n  --set controller.resources.limits.cpu=1 \\\n  --set controller.resources.limits.memory=1Gi \\\n  --set serviceAccount.annotations.\"eks\\.amazonaws\\.com/role-arn\"=\"arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/${CLUSTER_NAME}-karpenter\" \\\n  --wait\n"
  },
  {
    "path": "website/content/en/v1.0/getting-started/getting-started-with-karpenter/scripts/step08-apply-helm-chart.sh",
    "content": "# Logout of helm registry to perform an unauthenticated pull against the public ECR\nhelm registry logout public.ecr.aws\n\nhelm upgrade --install karpenter oci://public.ecr.aws/karpenter/karpenter --version \"${KARPENTER_VERSION}\" --namespace \"${KARPENTER_NAMESPACE}\" --create-namespace \\\n  --set \"settings.clusterName=${CLUSTER_NAME}\" \\\n  --set \"settings.interruptionQueue=${CLUSTER_NAME}\" \\\n  --set controller.resources.requests.cpu=1 \\\n  --set controller.resources.requests.memory=1Gi \\\n  --set controller.resources.limits.cpu=1 \\\n  --set controller.resources.limits.memory=1Gi \\\n  --wait\n"
  },
  {
    "path": "website/content/en/v1.0/getting-started/getting-started-with-karpenter/scripts/step09-add-prometheus-grafana.sh",
    "content": "helm repo add grafana-charts https://grafana.github.io/helm-charts\nhelm repo add prometheus-community https://prometheus-community.github.io/helm-charts\nhelm repo update\n\nkubectl create namespace monitoring\n\ncurl -fsSL https://raw.githubusercontent.com/aws/karpenter-provider-aws/v\"${KARPENTER_VERSION}\"/website/content/en/preview/getting-started/getting-started-with-karpenter/prometheus-values.yaml | envsubst | tee prometheus-values.yaml\nhelm install --namespace monitoring prometheus prometheus-community/prometheus --values prometheus-values.yaml\n\ncurl -fsSL https://raw.githubusercontent.com/aws/karpenter-provider-aws/v\"${KARPENTER_VERSION}\"/website/content/en/preview/getting-started/getting-started-with-karpenter/grafana-values.yaml | tee grafana-values.yaml\nhelm install --namespace monitoring grafana grafana-charts/grafana --values grafana-values.yaml\n"
  },
  {
    "path": "website/content/en/v1.0/getting-started/getting-started-with-karpenter/scripts/step10-add-grafana-port-forward.sh",
    "content": "kubectl port-forward --namespace monitoring svc/grafana 3000:80\n"
  },
  {
    "path": "website/content/en/v1.0/getting-started/getting-started-with-karpenter/scripts/step11-grafana-get-password.sh",
    "content": "kubectl get secret --namespace monitoring grafana -o jsonpath=\"{.data.admin-password}\" | base64 --decode\n"
  },
  {
    "path": "website/content/en/v1.0/getting-started/getting-started-with-karpenter/scripts/step12-add-nodepool.sh",
    "content": "cat <<EOF | envsubst | kubectl apply -f -\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\nspec:\n  template:\n    spec:\n      requirements:\n        - key: kubernetes.io/arch\n          operator: In\n          values: [\"amd64\"]\n        - key: kubernetes.io/os\n          operator: In\n          values: [\"linux\"]\n        - key: karpenter.sh/capacity-type\n          operator: In\n          values: [\"on-demand\"]\n        - key: karpenter.k8s.aws/instance-category\n          operator: In\n          values: [\"c\", \"m\", \"r\"]\n        - key: karpenter.k8s.aws/instance-generation\n          operator: Gt\n          values: [\"2\"]\n      nodeClassRef:\n        group: karpenter.k8s.aws\n        kind: EC2NodeClass\n        name: default\n      expireAfter: 720h # 30 * 24h = 720h\n  limits:\n    cpu: 1000\n  disruption:\n    consolidationPolicy: WhenEmptyOrUnderutilized\n    consolidateAfter: 1m\n---\napiVersion: karpenter.k8s.aws/v1\nkind: EC2NodeClass\nmetadata:\n  name: default\nspec:\n  amiFamily: AL2 # Amazon Linux 2\n  role: \"KarpenterNodeRole-${CLUSTER_NAME}\" # replace with your cluster name\n  subnetSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\" # replace with your cluster name\n  securityGroupSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\" # replace with your cluster name\n  amiSelectorTerms:\n    - id: \"${ARM_AMI_ID}\"\n    - id: \"${AMD_AMI_ID}\"\n#   - id: \"${GPU_AMI_ID}\" # <- GPU Optimized AMD AMI \n#   - name: \"amazon-eks-node-${K8S_VERSION}-*\" # <- automatically upgrade when a new AL2 EKS Optimized AMI is released. This is unsafe for production workloads. Validate AMIs in lower environments before deploying them to production.\nEOF\n"
  },
  {
    "path": "website/content/en/v1.0/getting-started/getting-started-with-karpenter/scripts/step13-automatic-node-provisioning.sh",
    "content": "cat <<EOF | kubectl apply -f -\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: inflate\nspec:\n  replicas: 0\n  selector:\n    matchLabels:\n      app: inflate\n  template:\n    metadata:\n      labels:\n        app: inflate\n    spec:\n      terminationGracePeriodSeconds: 0\n      securityContext:\n        runAsUser: 1000\n        runAsGroup: 3000\n        fsGroup: 2000\n      containers:\n      - name: inflate\n        image: public.ecr.aws/eks-distro/kubernetes/pause:3.7\n        resources:\n          requests:\n            cpu: 1\n        securityContext:\n          allowPrivilegeEscalation: false\nEOF\n\nkubectl scale deployment inflate --replicas 5\nkubectl logs -f -n \"${KARPENTER_NAMESPACE}\" -l app.kubernetes.io/name=karpenter -c controller\n"
  },
  {
    "path": "website/content/en/v1.0/getting-started/getting-started-with-karpenter/scripts/step14-deprovisioning.sh",
    "content": "kubectl delete deployment inflate\nkubectl logs -f -n \"${KARPENTER_NAMESPACE}\" -l app.kubernetes.io/name=karpenter -c controller\n"
  },
  {
    "path": "website/content/en/v1.0/getting-started/getting-started-with-karpenter/scripts/step15-apply-flowschemas.sh",
    "content": "cat <<EOF | envsubst | kubectl apply -f -\n---\napiVersion: flowcontrol.apiserver.k8s.io/v1\nkind: FlowSchema\nmetadata:\n  name: karpenter-leader-election\nspec:\n  distinguisherMethod:\n    type: ByUser\n  matchingPrecedence: 200\n  priorityLevelConfiguration:\n    name: leader-election\n  rules:\n  - resourceRules:\n    - apiGroups:\n      - coordination.k8s.io\n      namespaces:\n      - '*'\n      resources:\n      - leases\n      verbs:\n      - get\n      - create\n      - update\n    subjects:\n    - kind: ServiceAccount\n      serviceAccount:\n        name: karpenter\n        namespace: \"${KARPENTER_NAMESPACE}\"\n\n---\napiVersion: flowcontrol.apiserver.k8s.io/v1\nkind: FlowSchema\nmetadata:\n  name: karpenter-workload\nspec:\n  distinguisherMethod:\n    type: ByUser\n  matchingPrecedence: 1000\n  priorityLevelConfiguration:\n    name: workload-high\n  rules:\n  - nonResourceRules:\n    - nonResourceURLs:\n      - '*'\n      verbs:\n      - '*'\n    resourceRules:\n    - apiGroups:\n      - '*'\n      clusterScope: true\n      namespaces:\n      - '*'\n      resources:\n      - '*'\n      verbs:\n      - '*'\n    subjects:\n    - kind: ServiceAccount\n      serviceAccount:\n        name: karpenter\n        namespace: \"${KARPENTER_NAMESPACE}\"\nEOF\n"
  },
  {
    "path": "website/content/en/v1.0/getting-started/getting-started-with-karpenter/scripts/step16-delete-node.sh",
    "content": "kubectl delete node \"${NODE_NAME}\"\n"
  },
  {
    "path": "website/content/en/v1.0/getting-started/getting-started-with-karpenter/scripts/step17-cleanup.sh",
    "content": "helm uninstall karpenter --namespace \"${KARPENTER_NAMESPACE}\"\naws cloudformation delete-stack --stack-name \"Karpenter-${CLUSTER_NAME}\"\naws ec2 describe-launch-templates --filters \"Name=tag:karpenter.k8s.aws/cluster,Values=${CLUSTER_NAME}\" |\n    jq -r \".LaunchTemplates[].LaunchTemplateName\" |\n    xargs -I{} aws ec2 delete-launch-template --launch-template-name {}\neksctl delete cluster --name \"${CLUSTER_NAME}\"\n"
  },
  {
    "path": "website/content/en/v1.0/getting-started/migrating-from-cas/_index.md",
    "content": "---\ntitle: \"Migrating from Cluster Autoscaler\"\nlinkTitle: \"Migrating from Cluster Autoscaler\"\nweight: 10\ndescription: >\n  Migrate to Karpenter from Cluster Autoscaler\n---\n\nThis guide will show you how to switch from the [Kubernetes Cluster Autoscaler](https://github.com/kubernetes/autoscaler) to Karpenter for automatic node provisioning.\nWe will make the following assumptions in this guide\n\n* You will use an existing EKS cluster\n* You will use existing VPC and subnets\n* You will use existing security groups\n* Your nodes are part of one or more node groups\n* Your workloads have pod disruption budgets that adhere to [EKS best practices](https://aws.github.io/aws-eks-best-practices/karpenter/)\n* Your cluster has an [OIDC provider](https://docs.aws.amazon.com/eks/latest/userguide/enable-iam-roles-for-service-accounts.html) for service accounts\n\nThis guide will also assume you have the `aws` CLI installed.\nYou can also perform many of these steps in the console, but we will use the command line for simplicity.\n\nSet a variable for your cluster name.\n\n```bash\nKARPENTER_NAMESPACE=kube-system\nCLUSTER_NAME=<your cluster name>\n```\n\nSet other variables from your cluster configuration.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step01-env.sh\" language=\"bash\" %}}\n\nUse that information to create our IAM roles, inline policy, and trust relationship.\n\n## Create IAM roles\n\nTo get started with our migration we first need to create two new IAM roles for nodes provisioned with Karpenter and the Karpenter controller.\n\nTo create the Karpenter node role we will use the following policy and commands.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step02-node-iam.sh\" language=\"bash\" %}}\n\nNow attach the required policies to the role\n\n{{% script file=\"./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step03-node-policies.sh\" language=\"bash\" %}}\n\nNow we need to create an IAM role that the Karpenter controller will use to provision new instances.\nThe 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.\n\nIf you have another option for using IAM credentials with workloads (e.g. [kube2iam](https://github.com/jtblin/kube2iam)) your steps will be different.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step04-controller-iam.sh\" language=\"bash\" %}}\n\n## Add tags to subnets and security groups\n\nWe need to add tags to our nodegroup subnets so Karpenter will know which subnets to use.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step05-tag-subnets.sh\" language=\"bash\" %}}\n\nAdd tags to our security groups.\nThis command only tags the security groups for the first nodegroup in the cluster.\nIf you have multiple nodegroups or multiple security groups you will need to decide which one Karpenter should use.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step06-tag-security-groups.sh\" language=\"bash\" %}}\n\n## Update aws-auth ConfigMap\n\nWe need to allow nodes that are using the node IAM role we just created to join the cluster.\nTo do that we have to modify the `aws-auth` ConfigMap in the cluster.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step07-edit-aws-auth.sh\" language=\"bash\" %}}\n\nYou will need to add a section to the mapRoles that looks something like this.\nReplace the `${AWS_PARTITION}` variable with the account partition, `${AWS_ACCOUNT_ID}` variable with your account ID, and `${CLUSTER_NAME}` variable with the cluster name, but do not replace the `{{EC2PrivateDNSName}}`.\n\n```yaml\n- groups:\n  - system:bootstrappers\n  - system:nodes\n  ## If you intend to run Windows workloads, the kube-proxy group should be specified.\n  # For more information, see https://github.com/aws/karpenter/issues/5099.\n  # - eks:kube-proxy-windows\n  rolearn: arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/KarpenterNodeRole-${CLUSTER_NAME}\n  username: system:node:{{EC2PrivateDNSName}}\n```\n\nThe full aws-auth configmap should have two groups.\nOne for your Karpenter node role and one for your existing node group.\n\n## Deploy Karpenter\n\nFirst set the Karpenter release you want to deploy.\n\n```bash\nexport KARPENTER_VERSION=\"1.0.11\"\n```\n\nWe can now generate a full Karpenter deployment yaml from the Helm chart.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step08-generate-chart.sh\" language=\"bash\" %}}\n\nModify the following lines in the karpenter.yaml file.\n\n### Set node affinity\n\nEdit the karpenter.yaml file and find the karpenter deployment affinity rules.\nModify the affinity so karpenter will run on one of the existing node group nodes.\n\nThe rules should look something like this.\nModify the value to match your `$NODEGROUP`, one node group per line.\n\n```yaml\naffinity:\n  nodeAffinity:\n    requiredDuringSchedulingIgnoredDuringExecution:\n      nodeSelectorTerms:\n      - matchExpressions:\n        - key: karpenter.sh/nodepool\n          operator: DoesNotExist\n        - key: eks.amazonaws.com/nodegroup\n          operator: In\n          values:\n          - ${NODEGROUP}\n  podAntiAffinity:\n    requiredDuringSchedulingIgnoredDuringExecution:\n      - topologyKey: \"kubernetes.io/hostname\"\n```\n\nNow that our deployment is ready we can create the karpenter namespace, create the NodePool CRD, and then deploy the rest of the karpenter resources.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step09-deploy.sh\" language=\"bash\" %}}\n\n## Create default NodePool\n\nWe need to create a default NodePool so Karpenter knows what types of nodes we want for unscheduled workloads. You can refer to some of the [example NodePool](https://github.com/aws/karpenter/tree/v1.0.11/examples/v1) for specific needs.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step10-create-nodepool.sh\" language=\"bash\" %}}\n\n## Set nodeAffinity for critical workloads (optional)\n\nYou may also want to set a nodeAffinity for other critical cluster workloads.\n\nSome examples are\n\n* coredns\n* metric-server\n\nYou can edit them with `kubectl edit deploy ...` and you should add node affinity for your static node group instances.\nModify the value to match your `$NODEGROUP`, one node group per line.\n\n```yaml\naffinity:\n  nodeAffinity:\n    requiredDuringSchedulingIgnoredDuringExecution:\n      nodeSelectorTerms:\n      - matchExpressions:\n        - key: eks.amazonaws.com/nodegroup\n          operator: In\n          values:\n          - ${NODEGROUP}\n```\n\n## Remove CAS\n\nNow that karpenter is running we can disable the cluster autoscaler.\nTo do that we will scale the number of replicas to zero.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step11-scale-cas.sh\" language=\"bash\" %}}\n\nTo 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.\n\n> 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.**\n\nIf you have a single multi-AZ node group, we suggest a minimum of 2 instances.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step12-scale-single-ng.sh\" language=\"bash\" %}}\n\nOr, if you have multiple single-AZ node groups, we suggest a minimum of 1 instance each.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step12-scale-multiple-ng.sh\" language=\"bash\" %}}\n\n{{% alert title=\"Note\" color=\"warning\" %}}\nIf 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.\n{{% /alert %}}\n\n## Verify Karpenter\n\nAs nodegroup nodes are drained you can verify that Karpenter is creating nodes for your workloads.\n\n```bash\nkubectl logs -f -n \"${KARPENTER_NAMESPACE}\" -l app.kubernetes.io/name=karpenter -c controller\n```\n\nYou should also see new nodes created in your cluster as the old nodes are removed\n\n```bash\nkubectl get nodes\n```\n"
  },
  {
    "path": "website/content/en/v1.0/getting-started/migrating-from-cas/scripts/step01-env.sh",
    "content": "AWS_PARTITION=\"aws\" # if you are not using standard partitions, you may need to configure to aws-cn / aws-us-gov\nAWS_REGION=\"$(aws configure list | grep region | tr -s \" \" | cut -d\" \" -f3)\"\nOIDC_ENDPOINT=\"$(aws eks describe-cluster --name \"${CLUSTER_NAME}\" \\\n    --query \"cluster.identity.oidc.issuer\" --output text)\"\nAWS_ACCOUNT_ID=$(aws sts get-caller-identity --query 'Account' \\\n    --output text)\nK8S_VERSION=$(aws eks describe-cluster --name \"${CLUSTER_NAME}\" --query \"cluster.version\" --output text)\nARM_AMI_ID=\"$(aws ssm get-parameter --name /aws/service/eks/optimized-ami/${K8S_VERSION}/amazon-linux-2-arm64/recommended/image_id --query Parameter.Value --output text)\"\nAMD_AMI_ID=\"$(aws ssm get-parameter --name /aws/service/eks/optimized-ami/${K8S_VERSION}/amazon-linux-2/recommended/image_id --query Parameter.Value --output text)\"\nGPU_AMI_ID=\"$(aws ssm get-parameter --name /aws/service/eks/optimized-ami/${K8S_VERSION}/amazon-linux-2-gpu/recommended/image_id --query Parameter.Value --output text)\"\n"
  },
  {
    "path": "website/content/en/v1.0/getting-started/migrating-from-cas/scripts/step02-node-iam.sh",
    "content": "echo '{\n    \"Version\": \"2012-10-17\",\n    \"Statement\": [\n        {\n            \"Effect\": \"Allow\",\n            \"Principal\": {\n                \"Service\": \"ec2.amazonaws.com\"\n            },\n            \"Action\": \"sts:AssumeRole\"\n        }\n    ]\n}' > node-trust-policy.json\n\naws iam create-role --role-name \"KarpenterNodeRole-${CLUSTER_NAME}\" \\\n    --assume-role-policy-document file://node-trust-policy.json\n"
  },
  {
    "path": "website/content/en/v1.0/getting-started/migrating-from-cas/scripts/step03-node-policies.sh",
    "content": "aws iam attach-role-policy --role-name \"KarpenterNodeRole-${CLUSTER_NAME}\" \\\n    --policy-arn \"arn:${AWS_PARTITION}:iam::aws:policy/AmazonEKSWorkerNodePolicy\"\n\naws iam attach-role-policy --role-name \"KarpenterNodeRole-${CLUSTER_NAME}\" \\\n    --policy-arn \"arn:${AWS_PARTITION}:iam::aws:policy/AmazonEKS_CNI_Policy\"\n\naws iam attach-role-policy --role-name \"KarpenterNodeRole-${CLUSTER_NAME}\" \\\n    --policy-arn \"arn:${AWS_PARTITION}:iam::aws:policy/AmazonEC2ContainerRegistryPullOnly\"\n\naws iam attach-role-policy --role-name \"KarpenterNodeRole-${CLUSTER_NAME}\" \\\n    --policy-arn \"arn:${AWS_PARTITION}:iam::aws:policy/AmazonSSMManagedInstanceCore\"\n"
  },
  {
    "path": "website/content/en/v1.0/getting-started/migrating-from-cas/scripts/step04-controller-iam.sh",
    "content": "cat << EOF > controller-trust-policy.json\n{\n    \"Version\": \"2012-10-17\",\n    \"Statement\": [\n        {\n            \"Effect\": \"Allow\",\n            \"Principal\": {\n                \"Federated\": \"arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:oidc-provider/${OIDC_ENDPOINT#*//}\"\n            },\n            \"Action\": \"sts:AssumeRoleWithWebIdentity\",\n            \"Condition\": {\n                \"StringEquals\": {\n                    \"${OIDC_ENDPOINT#*//}:aud\": \"sts.amazonaws.com\",\n                    \"${OIDC_ENDPOINT#*//}:sub\": \"system:serviceaccount:${KARPENTER_NAMESPACE}:karpenter\"\n                }\n            }\n        }\n    ]\n}\nEOF\n\naws iam create-role --role-name \"KarpenterControllerRole-${CLUSTER_NAME}\" \\\n    --assume-role-policy-document file://controller-trust-policy.json\n\ncat << EOF > controller-policy.json\n{\n    \"Statement\": [\n        {\n            \"Action\": [\n                \"ssm:GetParameter\",\n                \"ec2:DescribeImages\",\n                \"ec2:RunInstances\",\n                \"ec2:DescribeSubnets\",\n                \"ec2:DescribeSecurityGroups\",\n                \"ec2:DescribeLaunchTemplates\",\n                \"ec2:DescribeInstances\",\n                \"ec2:DescribeInstanceTypes\",\n                \"ec2:DescribeInstanceTypeOfferings\",\n                \"ec2:DeleteLaunchTemplate\",\n                \"ec2:CreateTags\",\n                \"ec2:CreateLaunchTemplate\",\n                \"ec2:CreateFleet\",\n                \"ec2:DescribeSpotPriceHistory\",\n                \"pricing:GetProducts\"\n            ],\n            \"Effect\": \"Allow\",\n            \"Resource\": \"*\",\n            \"Sid\": \"Karpenter\"\n        },\n        {\n            \"Action\": \"ec2:TerminateInstances\",\n            \"Condition\": {\n                \"StringLike\": {\n                    \"ec2:ResourceTag/karpenter.sh/nodepool\": \"*\"\n                }\n            },\n            \"Effect\": \"Allow\",\n            \"Resource\": \"*\",\n            \"Sid\": \"ConditionalEC2Termination\"\n        },\n        {\n            \"Effect\": \"Allow\",\n            \"Action\": \"iam:PassRole\",\n            \"Resource\": \"arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/KarpenterNodeRole-${CLUSTER_NAME}\",\n            \"Sid\": \"PassNodeIAMRole\"\n        },\n        {\n            \"Effect\": \"Allow\",\n            \"Action\": \"eks:DescribeCluster\",\n            \"Resource\": \"arn:${AWS_PARTITION}:eks:${AWS_REGION}:${AWS_ACCOUNT_ID}:cluster/${CLUSTER_NAME}\",\n            \"Sid\": \"EKSClusterEndpointLookup\"\n        },\n        {\n            \"Sid\": \"AllowScopedInstanceProfileCreationActions\",\n            \"Effect\": \"Allow\",\n            \"Resource\": \"*\",\n            \"Action\": [\n                \"iam:CreateInstanceProfile\"\n            ],\n            \"Condition\": {\n                \"StringEquals\": {\n                    \"aws:RequestTag/kubernetes.io/cluster/${CLUSTER_NAME}\": \"owned\",\n                    \"aws:RequestTag/topology.kubernetes.io/region\": \"${AWS_REGION}\"\n                },\n                \"StringLike\": {\n                    \"aws:RequestTag/karpenter.k8s.aws/ec2nodeclass\": \"*\"\n                }\n            }\n        },\n        {\n            \"Sid\": \"AllowScopedInstanceProfileTagActions\",\n            \"Effect\": \"Allow\",\n            \"Resource\": \"*\",\n            \"Action\": [\n                \"iam:TagInstanceProfile\"\n            ],\n            \"Condition\": {\n                \"StringEquals\": {\n                    \"aws:ResourceTag/kubernetes.io/cluster/${CLUSTER_NAME}\": \"owned\",\n                    \"aws:ResourceTag/topology.kubernetes.io/region\": \"${AWS_REGION}\",\n                    \"aws:RequestTag/kubernetes.io/cluster/${CLUSTER_NAME}\": \"owned\",\n                    \"aws:RequestTag/topology.kubernetes.io/region\": \"${AWS_REGION}\"\n                },\n                \"StringLike\": {\n                    \"aws:ResourceTag/karpenter.k8s.aws/ec2nodeclass\": \"*\",\n                    \"aws:RequestTag/karpenter.k8s.aws/ec2nodeclass\": \"*\"\n                }\n            }\n        },\n        {\n            \"Sid\": \"AllowScopedInstanceProfileActions\",\n            \"Effect\": \"Allow\",\n            \"Resource\": \"*\",\n            \"Action\": [\n                \"iam:AddRoleToInstanceProfile\",\n                \"iam:RemoveRoleFromInstanceProfile\",\n                \"iam:DeleteInstanceProfile\"\n            ],\n            \"Condition\": {\n                \"StringEquals\": {\n                    \"aws:ResourceTag/kubernetes.io/cluster/${CLUSTER_NAME}\": \"owned\",\n                    \"aws:ResourceTag/topology.kubernetes.io/region\": \"${AWS_REGION}\"\n                },\n                \"StringLike\": {\n                    \"aws:ResourceTag/karpenter.k8s.aws/ec2nodeclass\": \"*\"\n                }\n            }\n        },\n        {\n            \"Sid\": \"AllowInstanceProfileReadActions\",\n            \"Effect\": \"Allow\",\n            \"Resource\": \"*\",\n            \"Action\": \"iam:GetInstanceProfile\"\n        }\n    ],\n    \"Version\": \"2012-10-17\"\n}\nEOF\n\naws iam put-role-policy --role-name \"KarpenterControllerRole-${CLUSTER_NAME}\" \\\n    --policy-name \"KarpenterControllerPolicy-${CLUSTER_NAME}\" \\\n    --policy-document file://controller-policy.json\n"
  },
  {
    "path": "website/content/en/v1.0/getting-started/migrating-from-cas/scripts/step05-tag-subnets.sh",
    "content": "for NODEGROUP in $(aws eks list-nodegroups --cluster-name \"${CLUSTER_NAME}\" --query 'nodegroups' --output text); do\n    aws ec2 create-tags \\\n        --tags \"Key=karpenter.sh/discovery,Value=${CLUSTER_NAME}\" \\\n        --resources $(aws eks describe-nodegroup --cluster-name \"${CLUSTER_NAME}\" \\\n        --nodegroup-name \"${NODEGROUP}\" --query 'nodegroup.subnets' --output text )\ndone\n"
  },
  {
    "path": "website/content/en/v1.0/getting-started/migrating-from-cas/scripts/step06-tag-security-groups.sh",
    "content": "NODEGROUP=$(aws eks list-nodegroups --cluster-name \"${CLUSTER_NAME}\" \\\n    --query 'nodegroups[0]' --output text)\n\nLAUNCH_TEMPLATE=$(aws eks describe-nodegroup --cluster-name \"${CLUSTER_NAME}\" \\\n    --nodegroup-name \"${NODEGROUP}\" --query 'nodegroup.launchTemplate.{id:id,version:version}' \\\n    --output text | tr -s \"\\t\" \",\")\n\n# If your EKS setup is configured to use only Cluster security group, then please execute -\n\nSECURITY_GROUPS=$(aws eks describe-cluster \\\n    --name \"${CLUSTER_NAME}\" --query \"cluster.resourcesVpcConfig.clusterSecurityGroupId\" --output text)\n\n# If your setup uses the security groups in the Launch template of a managed node group, then :\n\nSECURITY_GROUPS=\"$(aws ec2 describe-launch-template-versions \\\n    --launch-template-id \"${LAUNCH_TEMPLATE%,*}\" --versions \"${LAUNCH_TEMPLATE#*,}\" \\\n    --query 'LaunchTemplateVersions[0].LaunchTemplateData.[NetworkInterfaces[0].Groups||SecurityGroupIds]' \\\n    --output text)\"\n\naws ec2 create-tags \\\n    --tags \"Key=karpenter.sh/discovery,Value=${CLUSTER_NAME}\" \\\n    --resources \"${SECURITY_GROUPS}\"\n"
  },
  {
    "path": "website/content/en/v1.0/getting-started/migrating-from-cas/scripts/step07-edit-aws-auth.sh",
    "content": "kubectl edit configmap aws-auth -n kube-system\n"
  },
  {
    "path": "website/content/en/v1.0/getting-started/migrating-from-cas/scripts/step08-generate-chart.sh",
    "content": "helm template karpenter oci://public.ecr.aws/karpenter/karpenter --version \"${KARPENTER_VERSION}\" --namespace \"${KARPENTER_NAMESPACE}\" \\\n    --set \"settings.clusterName=${CLUSTER_NAME}\" \\\n    --set \"settings.interruptionQueue=${CLUSTER_NAME}\" \\\n    --set \"serviceAccount.annotations.eks\\.amazonaws\\.com/role-arn=arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/KarpenterControllerRole-${CLUSTER_NAME}\" \\\n    --set controller.resources.requests.cpu=1 \\\n    --set controller.resources.requests.memory=1Gi \\\n    --set controller.resources.limits.cpu=1 \\\n    --set controller.resources.limits.memory=1Gi > karpenter.yaml\n"
  },
  {
    "path": "website/content/en/v1.0/getting-started/migrating-from-cas/scripts/step09-deploy.sh",
    "content": "kubectl create namespace \"${KARPENTER_NAMESPACE}\" || true\nkubectl create -f \\\n    \"https://raw.githubusercontent.com/aws/karpenter-provider-aws/v${KARPENTER_VERSION}/pkg/apis/crds/karpenter.sh_nodepools.yaml\"\nkubectl create -f \\\n    \"https://raw.githubusercontent.com/aws/karpenter-provider-aws/v${KARPENTER_VERSION}/pkg/apis/crds/karpenter.k8s.aws_ec2nodeclasses.yaml\"\nkubectl create -f \\\n    \"https://raw.githubusercontent.com/aws/karpenter-provider-aws/v${KARPENTER_VERSION}/pkg/apis/crds/karpenter.sh_nodeclaims.yaml\"\nkubectl apply -f karpenter.yaml\n"
  },
  {
    "path": "website/content/en/v1.0/getting-started/migrating-from-cas/scripts/step10-create-nodepool.sh",
    "content": "cat <<EOF | envsubst | kubectl apply -f -\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\nspec:\n  template:\n    spec:\n      requirements:\n        - key: kubernetes.io/arch\n          operator: In\n          values: [\"amd64\"]\n        - key: kubernetes.io/os\n          operator: In\n          values: [\"linux\"]\n        - key: karpenter.sh/capacity-type\n          operator: In\n          values: [\"spot\"]\n        - key: karpenter.k8s.aws/instance-category\n          operator: In\n          values: [\"c\", \"m\", \"r\"]\n        - key: karpenter.k8s.aws/instance-generation\n          operator: Gt\n          values: [\"2\"]\n      nodeClassRef:\n        group: karpenter.k8s.aws\n        kind: EC2NodeClass\n        name: default\n      expireAfter: 720h # 30 * 24h = 720h\n  limits:\n    cpu: 1000\n  disruption:\n    consolidationPolicy: WhenEmptyOrUnderutilized\n    consolidateAfter: 1m\n---\napiVersion: karpenter.k8s.aws/v1\nkind: EC2NodeClass\nmetadata:\n  name: default\nspec:\n  amiFamily: AL2 # Amazon Linux 2\n  role: \"KarpenterNodeRole-${CLUSTER_NAME}\" # replace with your cluster name\n  subnetSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\" # replace with your cluster name\n  securityGroupSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\" # replace with your cluster name\n  amiSelectorTerms:\n    - id: \"${ARM_AMI_ID}\"\n    - id: \"${AMD_AMI_ID}\"\n#   - id: \"${GPU_AMI_ID}\" # <- GPU Optimized AMD AMI \n#   - name: \"amazon-eks-node-${K8S_VERSION}-*\" # <- automatically upgrade when a new AL2 EKS Optimized AMI is released. This is unsafe for production workloads. Validate AMIs in lower environments before deploying them to production.\nEOF\n"
  },
  {
    "path": "website/content/en/v1.0/getting-started/migrating-from-cas/scripts/step11-scale-cas.sh",
    "content": "kubectl scale deploy/cluster-autoscaler -n kube-system --replicas=0\n"
  },
  {
    "path": "website/content/en/v1.0/getting-started/migrating-from-cas/scripts/step12-scale-multiple-ng.sh",
    "content": "for NODEGROUP in $(aws eks list-nodegroups --cluster-name \"${CLUSTER_NAME}\" \\\n    --query 'nodegroups' --output text); do aws eks update-nodegroup-config --cluster-name \"${CLUSTER_NAME}\" \\\n    --nodegroup-name \"${NODEGROUP}\" \\\n    --scaling-config \"minSize=1,maxSize=1,desiredSize=1\"\ndone\n"
  },
  {
    "path": "website/content/en/v1.0/getting-started/migrating-from-cas/scripts/step12-scale-single-ng.sh",
    "content": "aws eks update-nodegroup-config --cluster-name \"${CLUSTER_NAME}\" \\\n    --nodegroup-name \"${NODEGROUP}\" \\\n    --scaling-config \"minSize=2,maxSize=2,desiredSize=2\"\n"
  },
  {
    "path": "website/content/en/v1.0/reference/_index.md",
    "content": "---\ntitle: \"Reference\"\nlinkTitle: \"Reference\"\nweight: 50\ndescription: >\n  Reference documentation for Karpenter\n---"
  },
  {
    "path": "website/content/en/v1.0/reference/cloudformation.md",
    "content": "---\ntitle: \"CloudFormation\"\nlinkTitle: \"CloudFormation\"\nweight: 5\ndescription: >\n  A description of the Getting Started CloudFormation file and permissions\n---\nThe [Getting Started with Karpenter]({{< relref \"../getting-started/getting-started-with-karpenter\" >}}) guide uses CloudFormation to bootstrap the cluster to enable Karpenter to create and manage nodes, as well as to allow Karpenter to respond to interruption events.\nThis document describes the `cloudformation.yaml` file used in that guide.\nThese descriptions should allow you to understand:\n\n* What Karpenter is authorized to do with your EKS cluster and AWS resources when using the `cloudformation.yaml` file\n* What permissions you need to set up if you are adding Karpenter to an existing cluster\n\n## Overview\n\nTo download a particular version of `cloudformation.yaml`, set the version and use `curl` to pull the file to your local system:\n\n```bash\nexport KARPENTER_VERSION=\"1.0.11\"\ncurl https://raw.githubusercontent.com/aws/karpenter-provider-aws/v\"${KARPENTER_VERSION}\"/website/content/en/preview/getting-started/getting-started-with-karpenter/cloudformation.yaml > cloudformation.yaml\n```\n\nFollowing some header information, the rest of the `cloudformation.yaml` file describes the resources that CloudFormation deploys.\nThe sections of that file can be grouped together under the following general headings:\n\n* [**Node Authorization**]({{< relref \"#node-authorization\" >}}): Creates a NodeInstanceProfile, attaches a NodeRole to it, and connects it to an IAM Identity Mapping used to authorize nodes to the cluster. This defines the permissions each node managed by Karpenter has to access EC2 and other AWS resources. This doesn't actually create the IAM Identity Mapping. That part is orchestrated by `eksctl` in the Getting Started guide.\n* [**Controller Authorization**]({{< relref \"#controller-authorization\" >}}):  Creates the `KarpenterControllerPolicy` that is attached to the service account.\nAgain, the actual service account creation (`karpenter`), that is combined with the `KarpenterControllerPolicy`, is orchestrated by `eksctl` in the Getting Started guide.\n* [**Interruption Handling**]({{< relref \"#interruption-handling\" >}}): Allows the Karpenter controller to see and respond to interruptions that occur with the nodes that Karpenter is managing. See the [Interruption]({{< relref \"../concepts/disruption#interruption\" >}}) section of the Disruption page for details.\n\nA lot of the object naming that is done by `cloudformation.yaml` is based on the following:\n\n* Cluster name: With a username of `bob` the Getting Started Guide would name your cluster `bob-karpenter-demo`\nThat name would then be appended to any name below where `${ClusterName}` is included.\n\n* Partition: Any time an ARN is used, it includes the [partition name](https://docs.aws.amazon.com/whitepapers/latest/aws-fault-isolation-boundaries/partitions.html) to identify where the object is found. In most cases, that partition name is `aws`. However, it could also be `aws-cn` (for China Regions) or `aws-us-gov` (for AWS GovCloud US Regions).\n\n## Node Authorization\n\nThe following sections of the `cloudformation.yaml` file set up IAM permissions for Kubernetes nodes created by Karpenter.\nIn particular, this involves setting up a node role that can be attached and passed to instance profiles that Karpenter generates at runtime:\n\n* KarpenterNodeRole\n\n### KarpenterNodeRole\n\nThis section of the template defines the IAM role attached to generated instance profiles.\nGiven a cluster name of `bob-karpenter-demo`, this role would end up being named `\"KarpenterNodeRole-bob-karpenter-demo`.\n\n```yaml\nKarpenterNodeRole:\n  Type: \"AWS::IAM::Role\"\n  Properties:\n    RoleName: !Sub \"KarpenterNodeRole-${ClusterName}\"\n    Path: /\n    AssumeRolePolicyDocument:\n      Version: \"2012-10-17\"\n      Statement:\n        - Effect: Allow\n          Principal:\n            Service:\n              !Sub \"ec2.${AWS::URLSuffix}\"\n          Action:\n            - \"sts:AssumeRole\"\n    ManagedPolicyArns:\n      - !Sub \"arn:${AWS::Partition}:iam::aws:policy/AmazonEKS_CNI_Policy\"\n      - !Sub \"arn:${AWS::Partition}:iam::aws:policy/AmazonEKSWorkerNodePolicy\"\n      - !Sub \"arn:${AWS::Partition}:iam::aws:policy/AmazonEC2ContainerRegistryPullOnly\"\n      - !Sub \"arn:${AWS::Partition}:iam::aws:policy/AmazonSSMManagedInstanceCore\"\n```\n\nThe role created here includes several AWS managed policies, which are designed to provide permissions for specific uses needed by the nodes to work with EC2 and other AWS resources. These include:\n\n* [AmazonEKS_CNI_Policy](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonEKS_CNI_Policy.html): Provides the permissions that the Amazon VPC CNI Plugin needs to configure EKS worker nodes.\n* [AmazonEKSWorkerNodePolicy](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonEKSWorkerNodePolicy.html): Lets Amazon EKS worker nodes connect to EKS Clusters.\n* [AmazonEC2ContainerRegistryPullOnly](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonEC2ContainerRegistryPullOnly.html): Allows pulling images from repositories in the Amazon EC2 Container Registry.\n* [AmazonSSMManagedInstanceCore](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonSSMManagedInstanceCore.html): Adds AWS Systems Manager service core functions for Amazon EC2.\n\nIf you were to use a node role from an existing cluster, you could skip this provisioning step and pass this node role to any EC2NodeClasses that you create. Additionally, you would ensure that the [Controller Policy]({{< relref \"#controllerpolicy\" >}}) has `iam:PassRole` permission to the role attached to the generated instance profiles.\n\n## Controller Authorization\n\nThis section sets the AWS permissions for the Karpenter Controller. When used in the Getting Started guide, `eksctl` uses these permissions to create a service account (karpenter) that is combined with the KarpenterControllerPolicy.\n\nThe resources defined in this section are associated with:\n\n* KarpenterControllerPolicy\n\nBecause the scope of the KarpenterControllerPolicy is an AWS region, the cluster's AWS region is included in the `AllowScopedEC2InstanceAccessActions`.\n\n### KarpenterControllerPolicy\n\nA `KarpenterControllerPolicy` object sets the name of the policy, then defines a set of resources and actions allowed for those resources.\nFor our example, the KarpenterControllerPolicy would be named: `KarpenterControllerPolicy-bob-karpenter-demo`\n\n```yaml\nKarpenterControllerPolicy:\n  Type: AWS::IAM::ManagedPolicy\n  Properties:\n    ManagedPolicyName: !Sub \"KarpenterControllerPolicy-${ClusterName}\"\n    # The PolicyDocument must be in JSON string format because we use a StringEquals condition that uses an interpolated\n    # value in one of its key parameters which isn't natively supported by CloudFormation\n    PolicyDocument: !Sub |\n      {\n        \"Version\": \"2012-10-17\",\n        \"Statement\": [\n```\n\nSomeone wanting to add Karpenter to an existing cluster, instead of using `cloudformation.yaml`, would need to create the IAM policy directly and assign that policy to the role leveraged by the service account using IRSA.\n\n#### AllowScopedEC2InstanceAccessActions\n\nThe AllowScopedEC2InstanceAccessActions statement ID (Sid) identifies a set of EC2 resources that are allowed to be accessed with\n[RunInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html) and [CreateFleet](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet.html) actions.\nFor `RunInstances` and `CreateFleet` actions, the Karpenter controller can read (but not create) `image`, `snapshot`, `security-group`, `subnet` and `launch-template` EC2 resources, scoped for the particular AWS partition and region.\n\n```json\n{\n  \"Sid\": \"AllowScopedEC2InstanceAccessActions\",\n  \"Effect\": \"Allow\",\n  \"Resource\": [\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}::image/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}::snapshot/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:security-group/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:subnet/*\"\n  ],\n  \"Action\": [\n    \"ec2:RunInstances\",\n    \"ec2:CreateFleet\"\n  ]\n}\n```\n\n#### AllowScopedEC2LaunchTemplateAccessActions\n\nThe AllowScopedEC2InstanceAccessActions statement ID (Sid) identifies launch templates that are allowed to be accessed with\n[RunInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html) and [CreateFleet](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet.html) actions.\nFor `RunInstances` and `CreateFleet` actions, the Karpenter controller can read (but not create) `launch-template` EC2 resources that have the `kubernetes.io/cluster/${ClusterName}` tag be set to `owned` and a `karpenter.sh/nodepool` tag, scoped for the particular AWS partition and region. This ensures that an instance launch can't access launch templates that weren't provisioned by Karpenter.\n\n```json\n{\n  \"Sid\": \"AllowScopedEC2LaunchTemplateAccessActions\",\n  \"Effect\": \"Allow\",\n  \"Resource\": \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:launch-template/*\",\n  \"Action\": [\n    \"ec2:RunInstances\",\n    \"ec2:CreateFleet\"\n  ],\n  \"Condition\": {\n    \"StringEquals\": {\n      \"aws:ResourceTag/kubernetes.io/cluster/${ClusterName}\": \"owned\"\n    },\n    \"StringLike\": {\n      \"aws:ResourceTag/karpenter.sh/nodepool\": \"*\"\n    }\n  }\n}\n```\n\n#### AllowScopedEC2InstanceActionsWithTags\n\nThe AllowScopedEC2InstanceActionsWithTags Sid allows the\n[RunInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html), [CreateFleet](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet.html), and [CreateLaunchTemplate](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateLaunchTemplate.html)\nactions requested by the Karpenter controller to create all `fleet`, `instance`, `volume`, `network-interface`, `launch-template` or `spot-instances-request` EC2 resources (for the partition and region). It also requires that the `kubernetes.io/cluster/${ClusterName}` tag be set to `owned`, `aws:RequestTag/eks:eks-cluster-name` be set to `\"${ClusterName}`, and a `karpenter.sh/nodepool` tag be set to any value. This ensures that Karpenter is only allowed to create instances for a single EKS cluster.\n\n```json\n{\n  \"Sid\": \"AllowScopedEC2InstanceActionsWithTags\",\n  \"Effect\": \"Allow\",\n  \"Resource\": [\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:fleet/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:instance/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:volume/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:network-interface/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:launch-template/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:spot-instances-request/*\"\n  ],\n  \"Action\": [\n    \"ec2:RunInstances\",\n    \"ec2:CreateFleet\",\n    \"ec2:CreateLaunchTemplate\"\n  ],\n  \"Condition\": {\n    \"StringEquals\": {\n      \"aws:RequestTag/kubernetes.io/cluster/${ClusterName}\": \"owned\"\n      \"aws:RequestTag/eks:eks-cluster-name\": \"${ClusterName}\"\n    },\n    \"StringLike\": {\n      \"aws:RequestTag/karpenter.sh/nodepool\": \"*\"\n    }\n  }\n}\n```\n\n#### AllowScopedResourceCreationTagging\n\nThe AllowScopedResourceCreationTagging Sid allows EC2 [CreateTags](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTags.html)\nactions on `fleet`, `instance`, `volume`, `network-interface`, `launch-template` and `spot-instances-request` resources, While making `RunInstance`, `CreateFleet`, or `CreateLaunchTemplate` calls. Additionally, this ensures that resources can't be tagged arbitrarily by Karpenter after they are created.\nConditions that must be met include that `aws:RequestTag/kubernetes.io/cluster/${ClusterName}` be set to `owned` and `aws:RequestTag/eks:eks-cluster-name` be set to `${ClusterName}`.\n\n```json\n{\n  \"Sid\": \"AllowScopedResourceCreationTagging\",\n  \"Effect\": \"Allow\",\n  \"Resource\": [\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:fleet/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:instance/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:volume/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:network-interface/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:launch-template/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:spot-instances-request/*\"\n  ],\n  \"Action\": \"ec2:CreateTags\",\n  \"Condition\": {\n    \"StringEquals\": {\n      \"aws:RequestTag/kubernetes.io/cluster/${ClusterName}\": \"owned\",\n      \"aws:RequestTag/eks:eks-cluster-name\": \"${ClusterName}\"\n      \"ec2:CreateAction\": [\n        \"RunInstances\",\n        \"CreateFleet\",\n        \"CreateLaunchTemplate\"\n      ]\n    },\n    \"StringLike\": {\n      \"aws:RequestTag/karpenter.sh/nodepool\": \"*\"\n    }\n  }\n}\n```\n\n#### AllowScopedResourceTagging\n\nThe AllowScopedResourceTagging Sid allows EC2 [CreateTags](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTags.html) actions on all instances created by Karpenter after their creation. It enforces that Karpenter is only able to update the tags on cluster instances it is operating on through the `kubernetes.io/cluster/${ClusterName}`\" and `karpenter.sh/nodepool` tags.\nLikewise, `RequestTag/eks:eks-cluster-name` must be set to `${ClusterName}`, if it exists, and `TagKeys` must equal `eks:eks-cluster-name`, `karpenter.sh/nodeclaim`, and `Name`, for all values.\n```json\n{\n  \"Sid\": \"AllowScopedResourceTagging\",\n  \"Effect\": \"Allow\",\n  \"Resource\": \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:instance/*\",\n  \"Action\": \"ec2:CreateTags\",\n  \"Condition\": {\n    \"StringEquals\": {\n      \"aws:ResourceTag/kubernetes.io/cluster/${ClusterName}\": \"owned\"\n    },\n    \"StringLike\": {\n      \"aws:ResourceTag/karpenter.sh/nodepool\": \"*\"\n    },\n    \"StringEqualsIfExists\": {\n      \"aws:RequestTag/eks:eks-cluster-name\": \"${ClusterName}\"\n    },\n    \"ForAllValues:StringEquals\": {\n      \"aws:TagKeys\": [\n        \"eks:eks-cluster-name\",\n        \"karpenter.sh/nodeclaim\",\n        \"Name\"\n      ]\n    }\n  }\n}\n```\n\n#### AllowScopedDeletion\n\nThe AllowScopedDeletion Sid allows [TerminateInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_TerminateInstances.html) and [DeleteLaunchTemplate](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DeleteLaunchTemplate.html) actions to delete instance and launch-template resources, provided that `karpenter.sh/nodepool` and `kubernetes.io/cluster/${ClusterName}` tags are set. These tags must be present on all resources that Karpenter is going to delete. This ensures that Karpenter can only delete instances and launch templates that are associated with it.\n\n```json\n{\n  \"Sid\": \"AllowScopedDeletion\",\n  \"Effect\": \"Allow\",\n  \"Resource\": [\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:instance/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:launch-template/*\"\n  ],\n  \"Action\": [\n    \"ec2:TerminateInstances\",\n    \"ec2:DeleteLaunchTemplate\"\n  ],\n  \"Condition\": {\n    \"StringEquals\": {\n      \"aws:ResourceTag/kubernetes.io/cluster/${ClusterName}\": \"owned\"\n    },\n    \"StringLike\": {\n      \"aws:ResourceTag/karpenter.sh/nodepool\": \"*\"\n    }\n  }\n}\n```\n\n#### AllowRegionalReadActions\n\nThe AllowRegionalReadActions Sid allows [DescribeAvailabilityZones](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeAvailabilityZones.html), [DescribeImages](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeImages.html), [DescribeInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeInstances.html), [DescribeInstanceTypeOfferings](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeInstanceTypeOfferings.html), [DescribeInstanceTypes](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeInstanceTypes.html), [DescribeLaunchTemplates](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeLaunchTemplates.html), [DescribeSecurityGroups](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeSecurityGroups.html), [DescribeSpotPriceHistory](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeSpotPriceHistory.html), and [DescribeSubnets](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeSubnets.html) actions for the current AWS region.\nThis allows the Karpenter controller to do any of those read-only actions across all related resources for that AWS region.\n\n```json\n{\n  \"Sid\": \"AllowRegionalReadActions\",\n  \"Effect\": \"Allow\",\n  \"Resource\": \"*\",\n  \"Action\": [\n    \"ec2:DescribeImages\",\n    \"ec2:DescribeInstances\",\n    \"ec2:DescribeInstanceTypeOfferings\",\n    \"ec2:DescribeInstanceTypes\",\n    \"ec2:DescribeLaunchTemplates\",\n    \"ec2:DescribeSecurityGroups\",\n    \"ec2:DescribeSpotPriceHistory\",\n    \"ec2:DescribeSubnets\"\n  ],\n  \"Condition\": {\n    \"StringEquals\": {\n      \"aws:RequestedRegion\": \"${AWS::Region}\"\n    }\n  }\n}\n```\n\n#### AllowSSMReadActions\n\nThe AllowSSMReadActions Sid allows the Karpenter controller to get SSM parameters (`ssm:GetParameter`) from the current region for SSM parameters generated by AWS services.\n\n**NOTE**: If potentially sensitive information is stored in SSM parameters, you could consider restricting access to these messages further.\n```json\n{\n  \"Sid\": \"AllowSSMReadActions\",\n  \"Effect\": \"Allow\",\n  \"Resource\": \"arn:${AWS::Partition}:ssm:${AWS::Region}::parameter/aws/service/*\",\n  \"Action\": \"ssm:GetParameter\"\n}\n```\n\n#### AllowPricingReadActions\n\nBecause pricing information does not exist in every region at the moment, the AllowPricingReadActions Sid allows the Karpenter controller to get product pricing information (`pricing:GetProducts`) for all related resources across all regions.\n\n```json\n{\n  \"Sid\": \"AllowPricingReadActions\",\n  \"Effect\": \"Allow\",\n  \"Resource\": \"*\",\n  \"Action\": \"pricing:GetProducts\"\n}\n```\n\n#### AllowInterruptionQueueActions\n\nKarpenter supports interruption queues, that you can create as described in the [Interruption]({{< relref \"../concepts/disruption#interruption\" >}}) section of the Disruption page.\nThis section of the cloudformation.yaml template can give Karpenter permission to access those queues by specifying the resource ARN.\nFor the interruption queue you created (`${KarpenterInterruptionQueue.Arn}`), the AllowInterruptionQueueActions Sid lets the Karpenter controller have permission to delete messages ([DeleteMessage](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_DeleteMessage.html)), get queue URL ([GetQueueUrl](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_GetQueueUrl.html)), and receive messages ([ReceiveMessage](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ReceiveMessage.html)).\n\n```json\n{\n  \"Sid\": \"AllowInterruptionQueueActions\",\n  \"Effect\": \"Allow\",\n  \"Resource\": \"${KarpenterInterruptionQueue.Arn}\",\n  \"Action\": [\n    \"sqs:DeleteMessage\",\n    \"sqs:GetQueueUrl\",\n    \"sqs:ReceiveMessage\"\n  ]\n}\n```\n\n#### AllowPassingInstanceRole\n\nThe AllowPassingInstanceRole Sid gives the Karpenter controller permission to pass (`iam:PassRole`) the node role (`KarpenterNodeRole-${ClusterName}`) to generated instance profiles.\nThis gives EC2 permission explicit permission to use the `KarpenterNodeRole-${ClusterName}` when assigning permissions to generated instance profiles while launching nodes.\n\n```json\n{\n  \"Sid\": \"AllowPassingInstanceRole\",\n  \"Effect\": \"Allow\",\n  \"Resource\": \"${KarpenterNodeRole.Arn}\",\n  \"Action\": \"iam:PassRole\",\n  \"Condition\": {\n    \"StringEquals\": {\n      \"iam:PassedToService\": [\n        \"ec2.amazonaws.com\",\n        \"ec2.amazonaws.com.cn\"\n      ]\n    }\n  }\n}\n```\n\n#### AllowScopedInstanceProfileCreationActions\n\nThe AllowScopedInstanceProfileCreationActions Sid gives the Karpenter controller permission to create a new instance profile with [`iam:CreateInstanceProfile`](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateInstanceProfile.html),\nprovided that the request is made to a cluster with `RequestTag` `kubernetes.io/cluster/${ClusterName}` set to `owned`, the `eks:eks-cluster-name` set to `${ClusterName}`, and `topology.kubernetes.io/region` set to the current region.\nAlso, `karpenter.k8s.aws/ec2nodeclass` must be set to some value. This ensures that Karpenter can generate instance profiles on your behalf based on roles specified in your `EC2NodeClasses` that you use to configure Karpenter.\n\n```json\n{\n  \"Sid\": \"AllowScopedInstanceProfileCreationActions\",\n  \"Effect\": \"Allow\",\n  \"Resource\": \"arn:${AWS::Partition}:iam::${AWS::AccountId}:instance-profile/*\",\n  \"Action\": [\n    \"iam:CreateInstanceProfile\"\n  ],\n  \"Condition\": {\n    \"StringEquals\": {\n      \"aws:RequestTag/kubernetes.io/cluster/${ClusterName}\": \"owned\",\n      \"aws:RequestTag/eks:eks-cluster-name\": \"${ClusterName}\",\n      \"aws:RequestTag/topology.kubernetes.io/region\": \"${AWS::Region}\"\n    },\n    \"StringLike\": {\n      \"aws:RequestTag/karpenter.k8s.aws/ec2nodeclass\": \"*\"\n    }\n  }\n}\n```\n\n#### AllowScopedInstanceProfileTagActions\n\nThe AllowScopedInstanceProfileTagActions Sid gives the Karpenter controller permission to tag an instance profile with [`iam:TagInstanceProfile`](https://docs.aws.amazon.com/IAM/latest/APIReference/API_TagInstanceProfile.html), provided that `ResourceTag` attributes `kubernetes.io/cluster/${ClusterName}` is set to `owned` and `topology.kubernetes.io/region` is set to the current region and `RequestTag` attributes `kubernetes.io/cluster/${ClusterName}` is set to `owned`, `eks:eks-cluster-name` is set to `${ClusterName}`, and `topology.kubernetes.io/region` is set to the current region.\nAlso, `ResourceTag/karpenter.k8s.aws/ec2nodeclass` and `RequestTag/karpenter.k8s.aws/ec2nodeclass` must be set to some value. This ensures that Karpenter is only able to act on instance profiles that it provisions for this cluster.\n\n```json\n{\n  \"Sid\": \"AllowScopedInstanceProfileTagActions\",\n  \"Effect\": \"Allow\",\n  \"Resource\": \"arn:${AWS::Partition}:iam::${AWS::AccountId}:instance-profile/*\",\n  \"Action\": [\n    \"iam:TagInstanceProfile\"\n  ],\n  \"Condition\": {\n    \"StringEquals\": {\n      \"aws:ResourceTag/kubernetes.io/cluster/${ClusterName}\": \"owned\",\n      \"aws:ResourceTag/topology.kubernetes.io/region\": \"${AWS::Region}\",\n      \"aws:RequestTag/kubernetes.io/cluster/${ClusterName}\": \"owned\",\n      \"aws:RequestTag/eks:eks-cluster-name\": \"${ClusterName}\",\n      \"aws:RequestTag/topology.kubernetes.io/region\": \"${AWS::Region}\"\n    },\n    \"StringLike\": {\n      \"aws:ResourceTag/karpenter.k8s.aws/ec2nodeclass\": \"*\",\n      \"aws:RequestTag/karpenter.k8s.aws/ec2nodeclass\": \"*\"\n    }\n  }\n}\n```\n\n\n#### AllowScopedInstanceProfileActions\n\nThe AllowScopedInstanceProfileActions Sid gives the Karpenter controller permission to perform [`iam:AddRoleToInstanceProfile`](https://docs.aws.amazon.com/IAM/latest/APIReference/API_AddRoleToInstanceProfile.html), [`iam:RemoveRoleFromInstanceProfile`](https://docs.aws.amazon.com/IAM/latest/APIReference/API_RemoveRoleFromInstanceProfile.html), and [`iam:DeleteInstanceProfile`](https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeleteInstanceProfile.html) actions,\nprovided that the request is made to a cluster with `kubernetes.io/cluster/${ClusterName}` set to owned and is made in the current region.\nAlso, `karpenter.k8s.aws/ec2nodeclass` must be set to some value. This permission is further enforced by the `iam:PassRole` permission. If Karpenter attempts to add a role to an instance profile that it doesn't have `iam:PassRole` permission on, that call will fail. Therefore, if you configure Karpenter to use a new role through the `EC2NodeClass`, ensure that you also specify that role within your `iam:PassRole` permission.\n\n```json\n{\n  \"Sid\": \"AllowScopedInstanceProfileActions\",\n  \"Effect\": \"Allow\",\n  \"Resource\": \"arn:${AWS::Partition}:iam::${AWS::AccountId}:instance-profile/*\",\n  \"Action\": [\n    \"iam:AddRoleToInstanceProfile\",\n    \"iam:RemoveRoleFromInstanceProfile\",\n    \"iam:DeleteInstanceProfile\"\n  ],\n  \"Condition\": {\n    \"StringEquals\": {\n      \"aws:ResourceTag/kubernetes.io/cluster/${ClusterName}\": \"owned\",\n      \"aws:ResourceTag/topology.kubernetes.io/region\": \"${AWS::Region}\"\n    },\n    \"StringLike\": {\n      \"aws:ResourceTag/karpenter.k8s.aws/ec2nodeclass\": \"*\"\n    }\n  }\n}\n```\n\n#### AllowInstanceProfileReadActions\n\nThe AllowInstanceProfileReadActions Sid gives the Karpenter controller permission to perform [`iam:GetInstanceProfile`](https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetInstanceProfile.html) actions to retrieve information about a specified instance profile, including understanding if an instance profile has been provisioned for an `EC2NodeClass` or needs to be re-provisioned.\n\n```json\n{\n  \"Sid\": \"AllowInstanceProfileReadActions\",\n  \"Effect\": \"Allow\",\n  \"Resource\": \"arn:${AWS::Partition}:iam::${AWS::AccountId}:instance-profile/*\",\n  \"Action\": \"iam:GetInstanceProfile\"\n}\n```\n\n#### AllowAPIServerEndpointDiscovery\n\nYou can optionally allow the Karpenter controller to discover the Kubernetes cluster's external API endpoint to enable EC2 nodes to successfully join the EKS cluster.\n\n> **Note**: If you are not using an EKS control plane, you will have to specify this endpoint explicitly. See the description of the `aws.clusterEndpoint` setting in the [ConfigMap](.settings/#configmap) documentation for details.\n\nThe AllowAPIServerEndpointDiscovery Sid allows the Karpenter controller to get that information (`eks:DescribeCluster`) for the cluster (`cluster/${ClusterName}`).\n```json\n{\n  \"Sid\": \"AllowAPIServerEndpointDiscovery\",\n  \"Effect\": \"Allow\",\n  \"Resource\": \"arn:${AWS::Partition}:eks:${AWS::Region}:${AWS::AccountId}:cluster/${ClusterName}\",\n  \"Action\": \"eks:DescribeCluster\"\n}\n```\n\n## Interruption Handling\n\nSettings in this section allow the Karpenter controller to stand-up an interruption queue to receive notification messages from other AWS services about the health and status of instances. For example, this interruption queue allows Karpenter to be aware of spot instance interruptions that are sent 2 minutes before spot instances are reclaimed by EC2. Adding this queue allows Karpenter to be proactive in migrating workloads to new nodes.\nSee the [Interruption]({{< relref \"../concepts/disruption#interruption\" >}}) section of the Disruption page for details.\n\nDefining the `KarpenterInterruptionQueuePolicy` allows Karpenter to see and respond to the following:\n\n* AWS health events\n* Spot interruptions\n* Spot rebalance recommendations\n* Instance state changes\n\nThe resources defined in this section include:\n\n* KarpenterInterruptionQueue\n* KarpenterInterruptionQueuePolicy\n* ScheduledChangeRule\n* SpotInterruptionRule\n* RebalanceRule\n* InstanceStateChangeRule\n\n### KarpenterInterruptionQueue\n\nThe [AWS::SQS::Queue](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sqs-queue.html) resource is used to create an Amazon SQS standard queue.\nProperties of that resource set the `QueueName` to the name of your cluster, the time for which SQS retains each message (`MessageRetentionPeriod`) to 300 seconds, and enabling serverside-side encryption using SQS owned encryption keys (`SqsManagedSseEnabled`) to `true`.\nSee [SetQueueAttributes](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SetQueueAttributes.html) for descriptions of some of these attributes.\n\n```yaml\nKarpenterInterruptionQueue:\n  Type: AWS::SQS::Queue\n  Properties:\n    QueueName: !Sub \"${ClusterName}\"\n    MessageRetentionPeriod: 300\n    SqsManagedSseEnabled: true\n```\n\n### KarpenterInterruptionQueuePolicy\n\nThe Karpenter interruption queue policy is created to allow AWS services that we want to receive instance notifications from to push notification messages to the queue.\nThe [AWS::SQS::QueuePolicy](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sqs-queuepolicy.html) resource here applies `EC2InterruptionPolicy` to the `KarpenterInterruptionQueue`. The policy allows [sqs:SendMessage](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html) actions to `events.amazonaws.com` and `sqs.amazonaws.com` services. It also allows the `GetAtt` function to get attributes from `KarpenterInterruptionQueue.Arn`.\nAdditionally, it only allows access to the queue using encrypted connections over HTTPS (TLS) to adhere to [Amazon SQS Security Best Practices](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-security-best-practices.html#enforce-encryption-data-in-transit).\n\n```yaml\nKarpenterInterruptionQueuePolicy:\n  Type: AWS::SQS::QueuePolicy\n  Properties:\n    Queues:\n      - !Ref KarpenterInterruptionQueue\n    PolicyDocument:\n      Id: EC2InterruptionPolicy\n      Statement:\n        - Effect: Allow\n          Principal:\n            Service:\n              - events.amazonaws.com\n              - sqs.amazonaws.com\n          Action: sqs:SendMessage\n          Resource: !GetAtt KarpenterInterruptionQueue.Arn\n        - Sid: DenyHTTP\n          Effect: Deny\n          Action: sqs:*\n          Resource: !GetAtt KarpenterInterruptionQueue.Arn\n          Condition:\n            Bool:\n              aws:SecureTransport: false\n          Principal: \"*\"\n```\n\n### Rules\n\nThis section allows Karpenter to gather [AWS Health Events](https://docs.aws.amazon.com/health/latest/ug/cloudwatch-events-health.html#about-public-events) and direct them to a queue where they can be consumed by Karpenter.\nThese rules include:\n\n* ScheduledChangeRule: The [AWS::Events::Rule](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-events-rule.html) creates a rule where the [EventPattern](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-patterns.html) is set to send events from the `aws.health` source to `KarpenterInterruptionQueue`.\n\n  ```yaml\n  ScheduledChangeRule:\n    Type: 'AWS::Events::Rule'\n    Properties:\n     EventPattern:\n       source:\n         - aws.health\n       detail-type:\n         - AWS Health Event\n     Targets:\n       - Id: KarpenterInterruptionQueueTarget\n         Arn: !GetAtt KarpenterInterruptionQueue.Arn\n  ```\n\n* SpotInterruptionRule: An EC2 Spot Instance Interruption warning tells you that AWS is about to reclaim a Spot instance you are using. This rule allows Karpenter to gather [EC2 Spot Instance Interruption Warning](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-interruptions.html) events and direct them to a queue where they can be consumed by Karpenter. In particular, the [AWS::Events::Rule](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-events-rule.html) here creates a rule where the [EventPattern](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-patterns.html) is set to send events from the `aws.ec2` source to `KarpenterInterruptionQueue`.\n\n  ```yaml\n  SpotInterruptionRule:\n    Type: 'AWS::Events::Rule'\n    Properties:\n      EventPattern:\n        source:\n          - aws.ec2\n        detail-type:\n          - EC2 Spot Instance Interruption Warning\n      Targets:\n        - Id: KarpenterInterruptionQueueTarget\n          Arn: !GetAtt KarpenterInterruptionQueue.Arn\n  ```\n\n* RebalanceRule: An EC2 Instance Rebalance Recommendation signal tells you that a Spot instance is at a heightened risk of being interrupted, allowing Karpenter to get new instances or simply rebalance workloads.  This rule allows Karpenter to gather [EC2 Instance Rebalance Recommendation](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/rebalance-recommendations.html) signals and direct them to a queue where they can be consumed by Karpenter. In particular, the [AWS::Events::Rule](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-events-rule.html) here creates a rule where the [EventPattern](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-patterns.html) is set to send events from the `aws.ec2` source to `KarpenterInterruptionQueue`.\n\n  ```yaml\n  RebalanceRule:\n   Type: 'AWS::Events::Rule'\n   Properties:\n     EventPattern:\n       source:\n         - aws.ec2\n       detail-type:\n         - EC2 Instance Rebalance Recommendation\n     Targets:\n       - Id: KarpenterInterruptionQueueTarget\n         Arn: !GetAtt KarpenterInterruptionQueue.Arn\n  ```\n\n* InstanceStateChangeRule: An EC2 Instance State-change Notification signal tells you that the state of an instance has changed to one of the following states: pending, running, stopping, stopped, shutting-down, or terminated. This rule allows Karpenter to gather [EC2 Instance State-change](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/monitoring-instance-state-changes.html) signals and direct them to a queue where they can be consumed by Karpenter. In particular, the [AWS::Events::Rule](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-events-rule.html) here creates a rule where the [EventPattern](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-patterns.html) is set to send events from the `aws.ec2` source to `KarpenterInterruptionQueue`.\n\n  ```yaml\n  InstanceStateChangeRule:\n   Type: 'AWS::Events::Rule'\n   Properties:\n     EventPattern:\n       source:\n         - aws.ec2\n       detail-type:\n         - EC2 Instance State-change Notification\n     Targets:\n       - Id: KarpenterInterruptionQueueTarget\n         Arn: !GetAtt KarpenterInterruptionQueue.Arn\n  ```\n"
  },
  {
    "path": "website/content/en/v1.0/reference/instance-types.md",
    "content": "---\ntitle: \"Instance Types\"\nlinkTitle: \"Instance Types\"\nweight: 100\n\ndescription: >\n  Evaluate Instance Type Resources\n---\n<!-- this document is generated from hack/docs/instancetypes_gen_docs.go -->\nAWS instance types offer varying resources and can be selected by labels. The values provided\nbelow are the resources available with some assumptions and after the instance overhead has been subtracted:\n- `blockDeviceMappings` are not configured\n- `amiFamily` is set to `AL2023`\n## a1 Family\n### `a1.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|a|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|a1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|500|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|a1.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|1392Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|10|\n### `a1.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|a|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|a1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|a1.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3055Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `a1.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|a|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|a1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|a1.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6525Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `a1.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|a|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|a1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|a1.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `a1.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|a|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|a1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|a1.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27322Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `a1.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|a|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|a1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|a1.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27322Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n## c1 Family\n### `c1.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|1740|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c1.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|1122Mi|\n |pods|12|\n### `c1.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|7168|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c1.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|5637Mi|\n |pods|58|\n## c3 Family\n### `c3.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|3840|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c3.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|2878Mi|\n |pods|29|\n### `c3.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|7680|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c3.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6111Mi|\n |pods|58|\n### `c3.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|15360|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c3.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|13215Mi|\n |pods|58|\n### `c3.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|30720|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c3.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|25487Mi|\n |pods|234|\n### `c3.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|61440|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c3.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|53903Mi|\n |pods|234|\n## c4 Family\n### `c4.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|3840|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c4.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|2878Mi|\n |pods|29|\n### `c4.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|7680|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c4.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6111Mi|\n |pods|58|\n### `c4.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|1000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|15360|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c4.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|13215Mi|\n |pods|58|\n### `c4.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|30720|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c4.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|25487Mi|\n |pods|234|\n### `c4.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|36|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|61440|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c4.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|35840m|\n |ephemeral-storage|17Gi|\n |memory|53903Mi|\n |pods|234|\n## c5 Family\n### `c5.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3114Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c5.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6584Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c5.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c5.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27381Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5.9xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|36|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|73728|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|9xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5.9xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|35840m|\n |ephemeral-storage|17Gi|\n |memory|65269Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|88002Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5.18xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|72|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|147456|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|18xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5.18xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|71750m|\n |ephemeral-storage|17Gi|\n |memory|127934Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c5.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c5.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## c5a Family\n### `c5a.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5a.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3114Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c5a.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5a.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6584Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c5a.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5a.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c5a.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5a.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27381Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5a.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5a.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5a.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5a.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|88002Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5a.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6300|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5a.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112779Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c5a.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5a.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## c5ad Family\n### `c5ad.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|75|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5ad.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3114Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c5ad.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|150|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5ad.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6584Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c5ad.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|300|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5ad.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c5ad.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|600|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5ad.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27381Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5ad.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1200|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5ad.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5ad.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1800|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5ad.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|88002Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5ad.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6300|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2400|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5ad.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112779Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c5ad.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5ad.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## c5d Family\n### `c5d.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|50|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5d.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3114Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c5d.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|100|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5d.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6584Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c5d.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|200|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5d.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c5d.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|400|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5d.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27381Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5d.9xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|36|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|900|\n |karpenter.k8s.aws/instance-memory|73728|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|9xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5d.9xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|35840m|\n |ephemeral-storage|17Gi|\n |memory|65269Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5d.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1800|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5d.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|88002Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5d.18xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|72|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1800|\n |karpenter.k8s.aws/instance-memory|147456|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|18xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5d.18xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|71750m|\n |ephemeral-storage|17Gi|\n |memory|127934Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c5d.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3600|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5d.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c5d.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3600|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5d.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## c5n Family\n### `c5n.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|5376|\n |karpenter.k8s.aws/instance-network-bandwidth|3000|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5n.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|4298Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c5n.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|10752|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5n.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|8952Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c5n.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|21504|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5n.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|18898Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c5n.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|43008|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5n.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|36853Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5n.9xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|36|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|9xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5n.9xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|35840m|\n |ephemeral-storage|17Gi|\n |memory|88002Mi|\n |pods|234|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5n.18xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|72|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|18xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5n.18xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|71750m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c5n.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|72|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5n.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|71750m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## c6a Family\n### `c6a.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6a.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3114Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c6a.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6a.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6584Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c6a.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6a.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c6a.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6a.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27381Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c6a.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6a.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `c6a.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6a.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|88002Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `c6a.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6a.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112779Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6a.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6a.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6a.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6a.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6a.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6a.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6a.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6a.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## c6g Family\n### `c6g.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|500|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6g.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|1392Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `c6g.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6g.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3055Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c6g.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6g.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6525Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c6g.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6g.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c6g.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6g.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27322Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c6g.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6g.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c6g.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14250|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6g.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|87943Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c6g.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6g.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6g.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6g.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## c6gd Family\n### `c6gd.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|59|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|500|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gd.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|1392Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `c6gd.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gd.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3055Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c6gd.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gd.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6525Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c6gd.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gd.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c6gd.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gd.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27322Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c6gd.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gd.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c6gd.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14250|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gd.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|87943Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c6gd.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gd.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6gd.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gd.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## c6gn Family\n### `c6gn.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6gn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|1600|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gn.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|1392Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `c6gn.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6gn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|3000|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gn.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3055Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c6gn.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6gn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|6300|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gn.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6525Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c6gn.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6gn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gn.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c6gn.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6gn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gn.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27322Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c6gn.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6gn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gn.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c6gn.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|28500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6gn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gn.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|87943Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c6gn.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|38000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6gn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gn.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## c6i Family\n### `c6i.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6i.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3114Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c6i.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6i.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6584Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c6i.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6i.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c6i.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6i.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27381Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c6i.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6i.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `c6i.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6i.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|88002Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `c6i.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6i.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112779Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6i.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6i.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6i.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6i.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6i.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6i.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## c6id Family\n### `c6id.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6id.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3114Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c6id.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6id.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6584Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c6id.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6id.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c6id.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6id.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27381Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c6id.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6id.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `c6id.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6id.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|88002Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `c6id.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6id.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112779Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6id.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|5700|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6id.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6id.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6id.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6id.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6id.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## c6in Family\n### `c6in.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6in.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3114Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c6in.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6in.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6584Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c6in.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6in.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c6in.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6in.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27381Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c6in.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6in.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `c6in.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|37500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6in.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|88002Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `c6in.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|50000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6in.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112779Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6in.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|75000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|150000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6in.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6in.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6in.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|237794Mi|\n |pods|394|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|106|\n### `c6in.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6in.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|237794Mi|\n |pods|394|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|106|\n## c7a Family\n### `c7a.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|390|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7a.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|1451Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `c7a.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7a.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3114Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c7a.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7a.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6584Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c7a.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7a.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c7a.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7a.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27381Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c7a.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7a.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `c7a.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7a.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|88002Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `c7a.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7a.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112779Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c7a.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7a.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c7a.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7a.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c7a.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7a.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c7a.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7a.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## c7g Family\n### `c7g.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|520|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7g.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|1392Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `c7g.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7g.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3055Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c7g.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1876|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7g.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6525Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c7g.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7g.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c7g.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7g.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27322Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c7g.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7g.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c7g.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7g.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|87943Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c7g.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7g.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c7g.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7g.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## c7gd Family\n### `c7gd.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|59|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|520|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gd.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|1392Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `c7gd.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gd.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3055Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c7gd.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1876|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gd.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6525Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c7gd.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gd.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c7gd.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gd.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27322Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c7gd.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gd.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c7gd.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gd.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|87943Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c7gd.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gd.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c7gd.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gd.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## c7gn Family\n### `c7gn.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gn|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gn.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|1392Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `c7gn.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gn|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gn.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3055Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c7gn.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gn|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gn.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6525Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c7gn.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gn|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gn.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c7gn.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gn|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gn.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27322Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c7gn.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gn|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gn.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c7gn.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gn|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|150000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gn.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|87943Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c7gn.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gn|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gn.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c7gn.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gn|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gn.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## c7i Family\n### `c7i.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3114Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c7i.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6584Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c7i.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c7i.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27381Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c7i.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `c7i.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|88002Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `c7i.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112779Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c7i.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c7i.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c7i.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c7i.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## d2 Family\n### `d2.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|d2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|31232|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d2.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|27896Mi|\n |pods|58|\n### `d2.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|1000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|d2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|62464|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d2.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|56786Mi|\n |pods|58|\n### `d2.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|d2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|124928|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d2.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|112629Mi|\n |pods|234|\n### `d2.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|36|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|d2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|249856|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d2.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|35840m|\n |ephemeral-storage|17Gi|\n |memory|228187Mi|\n |pods|234|\n## d3 Family\n### `d3.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|d3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|5940|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|3000|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d3.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29845Mi|\n |pods|10|\n |vpc.amazonaws.com/pod-eni|42|\n### `d3.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|d3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|11880|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|6000|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d3.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|60067Mi|\n |pods|18|\n |vpc.amazonaws.com/pod-eni|92|\n### `d3.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|d3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|23760|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d3.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|120468Mi|\n |pods|38|\n |vpc.amazonaws.com/pod-eni|118|\n### `d3.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|5000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|d3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|47520|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d3.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|241479Mi|\n |pods|59|\n |vpc.amazonaws.com/pod-eni|119|\n## d3en Family\n### `d3en.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|d3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|27960|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|6000|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d3en.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14690Mi|\n |pods|10|\n |vpc.amazonaws.com/pod-eni|24|\n### `d3en.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|d3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|55920|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d3en.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29757Mi|\n |pods|18|\n |vpc.amazonaws.com/pod-eni|58|\n### `d3en.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|d3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|111840|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d3en.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|59847Mi|\n |pods|38|\n |vpc.amazonaws.com/pod-eni|118|\n### `d3en.6xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|24|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|d3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|167760|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|6xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d3en.6xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|23870m|\n |ephemeral-storage|17Gi|\n |memory|89938Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|118|\n### `d3en.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|5000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|d3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|223680|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d3en.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|120028Mi|\n |pods|78|\n |vpc.amazonaws.com/pod-eni|118|\n### `d3en.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|7000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|d3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|335520|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d3en.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|180528Mi|\n |pods|89|\n |vpc.amazonaws.com/pod-eni|119|\n## dl1 Family\n### `dl1.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|dl|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|dl1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-gpu-count|8|\n |karpenter.k8s.aws/instance-gpu-manufacturer|habana|\n |karpenter.k8s.aws/instance-gpu-memory|32768|\n |karpenter.k8s.aws/instance-gpu-name|gaudi-hl-205|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|4000|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|400000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|dl1.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |habana.ai/gaudi|8|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|4|\n |vpc.amazonaws.com/pod-eni|62|\n## f1 Family\n### `f1.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|f|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|1700|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|f1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-local-nvme|470|\n |karpenter.k8s.aws/instance-memory|124928|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|f1.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|114565Mi|\n |pods|58|\n### `f1.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|f|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|f1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-local-nvme|940|\n |karpenter.k8s.aws/instance-memory|249856|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|f1.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|228187Mi|\n |pods|234|\n### `f1.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|f|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|f1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-local-nvme|3760|\n |karpenter.k8s.aws/instance-memory|999424|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|f1.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|919778Mi|\n |pods|394|\n## g3 Family\n### `g3.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|g3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|8192|\n |karpenter.k8s.aws/instance-gpu-name|m60|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|124928|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g3.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|112629Mi|\n |nvidia.com/gpu|1|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|6|\n### `g3.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|7000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|g3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-gpu-count|2|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|8192|\n |karpenter.k8s.aws/instance-gpu-name|m60|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|249856|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g3.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|228187Mi|\n |nvidia.com/gpu|2|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|6|\n### `g3.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|g3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-gpu-count|4|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|8192|\n |karpenter.k8s.aws/instance-gpu-name|m60|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|499712|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g3.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|453771Mi|\n |nvidia.com/gpu|4|\n |pods|737|\n## g3s Family\n### `g3s.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|850|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|g3s|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|8192|\n |karpenter.k8s.aws/instance-gpu-name|m60|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|31232|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g3s.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|27896Mi|\n |nvidia.com/gpu|1|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|10|\n## g4ad Family\n### `g4ad.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g4ad|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-gpu-memory|8192|\n |karpenter.k8s.aws/instance-gpu-name|radeon-pro-v520|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|150|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2000|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g4ad.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |amd.com/gpu|1|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14712Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|12|\n### `g4ad.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g4ad|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-gpu-memory|8192|\n |karpenter.k8s.aws/instance-gpu-name|radeon-pro-v520|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|300|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|4167|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g4ad.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |amd.com/gpu|1|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29867Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|12|\n### `g4ad.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g4ad|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-gpu-memory|8192|\n |karpenter.k8s.aws/instance-gpu-name|radeon-pro-v520|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|600|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|8333|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g4ad.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |amd.com/gpu|1|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|59946Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|11|\n### `g4ad.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g4ad|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-gpu-count|2|\n |karpenter.k8s.aws/instance-gpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-gpu-memory|8192|\n |karpenter.k8s.aws/instance-gpu-name|radeon-pro-v520|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1200|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g4ad.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |amd.com/gpu|2|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|120248Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|10|\n### `g4ad.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6300|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g4ad|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-gpu-count|4|\n |karpenter.k8s.aws/instance-gpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-gpu-memory|8192|\n |karpenter.k8s.aws/instance-gpu-name|radeon-pro-v520|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2400|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g4ad.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |amd.com/gpu|4|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|6|\n## g4dn Family\n### `g4dn.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g4dn|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|t4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|125|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g4dn.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |nvidia.com/gpu|1|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|39|\n### `g4dn.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g4dn|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|t4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|225|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g4dn.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29636Mi|\n |nvidia.com/gpu|1|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|39|\n### `g4dn.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g4dn|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|t4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|225|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g4dn.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|59946Mi|\n |nvidia.com/gpu|1|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|59|\n### `g4dn.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g4dn|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|t4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|900|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g4dn.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|120248Mi|\n |nvidia.com/gpu|1|\n |pods|58|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|58|\n### `g4dn.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g4dn|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-gpu-count|4|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|t4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|900|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g4dn.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |nvidia.com/gpu|4|\n |pods|234|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|54|\n### `g4dn.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g4dn|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|t4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|900|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g4dn.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|241490Mi|\n |nvidia.com/gpu|1|\n |pods|58|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|118|\n### `g4dn.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g4dn|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-gpu-count|8|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|t4|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|1800|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g4dn.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |nvidia.com/gpu|8|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## g5 Family\n### `g5.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|24576|\n |karpenter.k8s.aws/instance-gpu-name|a10g|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|250|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |nvidia.com/gpu|1|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|4|\n### `g5.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|24576|\n |karpenter.k8s.aws/instance-gpu-name|a10g|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|450|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |nvidia.com/gpu|1|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|17|\n### `g5.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|24576|\n |karpenter.k8s.aws/instance-gpu-name|a10g|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|600|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |nvidia.com/gpu|1|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|34|\n### `g5.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|16000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|24576|\n |karpenter.k8s.aws/instance-gpu-name|a10g|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|900|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |nvidia.com/gpu|1|\n |pods|234|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|84|\n### `g5.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|16000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|4|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|24576|\n |karpenter.k8s.aws/instance-gpu-name|a10g|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |nvidia.com/gpu|4|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `g5.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|16000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|24576|\n |karpenter.k8s.aws/instance-gpu-name|a10g|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |nvidia.com/gpu|1|\n |pods|234|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|114|\n### `g5.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|4|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|24576|\n |karpenter.k8s.aws/instance-gpu-name|a10g|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |nvidia.com/gpu|4|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `g5.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|8|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|24576|\n |karpenter.k8s.aws/instance-gpu-name|a10g|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|723299Mi|\n |nvidia.com/gpu|8|\n |pods|345|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|115|\n## g5g Family\n### `g5g.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|g5g|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|t4g|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5g.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6525Mi|\n |nvidia.com/gpu|1|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `g5g.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|g5g|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|t4g|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5g.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |nvidia.com/gpu|1|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `g5g.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|g5g|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|t4g|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5g.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27322Mi|\n |nvidia.com/gpu|1|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `g5g.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|g5g|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|t4g|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5g.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |nvidia.com/gpu|1|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `g5g.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|g5g|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|2|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|t4g|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5g.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |nvidia.com/gpu|2|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `g5g.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|g5g|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|2|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|t4g|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5g.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |nvidia.com/gpu|2|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## g6 Family\n### `g6.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|5000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|250|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |nvidia.com/gpu|1|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `g6.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|5000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|450|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |nvidia.com/gpu|1|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `g6.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|8000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|600|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |nvidia.com/gpu|1|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `g6.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|16000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|900|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |nvidia.com/gpu|1|\n |pods|234|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|84|\n### `g6.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|4|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|91553|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3760|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |nvidia.com/gpu|4|\n |pods|234|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|114|\n### `g6.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1880|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |nvidia.com/gpu|1|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `g6.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|4|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|91553|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3760|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |nvidia.com/gpu|4|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `g6.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|8|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|183105|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7520|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |nvidia.com/gpu|8|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## gr6 Family\n### `gr6.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|gr|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|8000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|gr6|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|600|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|gr6.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |nvidia.com/gpu|1|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `gr6.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|gr|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|16000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|gr6|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|900|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|gr6.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |nvidia.com/gpu|1|\n |pods|234|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|84|\n## h1 Family\n### `h1.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|h|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|1750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|h1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|h1.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n### `h1.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|h|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|h1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|h1.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n### `h1.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|h|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|7000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|h1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|h1.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n### `h1.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|h|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|h1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|h1.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|237794Mi|\n |pods|394|\n## hpc7g Family\n### `hpc7g.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|hpc|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|hpc7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|hpc7g.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118649Mi|\n |pods|198|\n |vpc.amazonaws.com/efa|1|\n### `hpc7g.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|hpc|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|hpc7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|hpc7g.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118649Mi|\n |pods|198|\n |vpc.amazonaws.com/efa|1|\n### `hpc7g.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|hpc|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|hpc7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|hpc7g.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|118649Mi|\n |pods|198|\n |vpc.amazonaws.com/efa|1|\n## i2 Family\n### `i2.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|i2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|31232|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i2.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|27896Mi|\n |pods|58|\n### `i2.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|i2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|62464|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i2.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|56786Mi|\n |pods|58|\n### `i2.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|i2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|124928|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i2.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|112629Mi|\n |pods|234|\n### `i2.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|i2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|249856|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i2.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|228187Mi|\n |pods|234|\n## i3 Family\n### `i3.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|425|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|i3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-local-nvme|475|\n |karpenter.k8s.aws/instance-memory|15616|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|13770Mi|\n |pods|29|\n### `i3.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|850|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|i3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|31232|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|27896Mi|\n |pods|58|\n### `i3.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|1700|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|i3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|62464|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|56786Mi|\n |pods|58|\n### `i3.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|i3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|124928|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|112629Mi|\n |pods|234|\n### `i3.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|7000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|i3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|249856|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|228187Mi|\n |pods|234|\n### `i3.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|i3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-local-nvme|15200|\n |karpenter.k8s.aws/instance-memory|499712|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|453771Mi|\n |pods|737|\n### `i3.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|72|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|i3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|15200|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|71750m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|120|\n## i3en Family\n### `i3en.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1250|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2100|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3en.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|5|\n### `i3en.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2500|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|4200|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3en.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|12|\n### `i3en.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|5000|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|8400|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3en.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|28|\n### `i3en.3xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|12|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7500|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|3xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3en.3xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|11900m|\n |ephemeral-storage|17Gi|\n |memory|89938Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `i3en.6xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|24|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|15000|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|6xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3en.6xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|23870m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `i3en.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|30000|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3en.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|54|\n### `i3en.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|60000|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3en.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `i3en.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|60000|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3en.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## i4g Family\n### `i4g.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4g|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|468|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4g.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14422Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `i4g.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4g|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|937|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4g.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `i4g.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4g|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1875|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|4687|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4g.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59568Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `i4g.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4g|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3750|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|9375|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4g.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `i4g.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4g|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7500|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4g.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239495Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `i4g.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4g|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|15000|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4g.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476445Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## i4i Family\n### `i4i.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4i|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|468|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4i.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n### `i4i.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4i|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|937|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4i.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|6|\n### `i4i.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4i|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1875|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|4687|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4i.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|26|\n### `i4i.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4i|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3750|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|9375|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4i.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|52|\n### `i4i.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4i|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7500|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4i.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|112|\n### `i4i.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4i|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|11250|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|28120|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4i.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|112|\n### `i4i.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4i|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|15000|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4i.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|120|\n### `i4i.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4i|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|22500|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|56250|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4i.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|722287Mi|\n |pods|437|\n |vpc.amazonaws.com/pod-eni|105|\n### `i4i.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4i|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|30000|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4i.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|961470Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|120|\n### `i4i.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4i|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|30000|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4i.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|961470Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|120|\n## im4gn Family\n### `im4gn.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|im|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|im4gn|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|937|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|im4gn.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6844Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `im4gn.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|im|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|im4gn|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1875|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|im4gn.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `im4gn.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|im|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|im4gn|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3750|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|im4gn.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `im4gn.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|im|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|im4gn|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7500|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|im4gn.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `im4gn.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|im|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|im4gn|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|15000|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|im4gn.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `im4gn.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|im|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|im4gn|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|30000|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|im4gn.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|233962Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## inf1 Family\n### `inf1.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-accelerator-count|1|\n |karpenter.k8s.aws/instance-accelerator-manufacturer|aws|\n |karpenter.k8s.aws/instance-accelerator-name|inferentia|\n |karpenter.k8s.aws/instance-category|inf|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|inf1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|inf1.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |aws.amazon.com/neuron|1|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6804Mi|\n |pods|38|\n |vpc.amazonaws.com/pod-eni|38|\n### `inf1.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-accelerator-count|1|\n |karpenter.k8s.aws/instance-accelerator-manufacturer|aws|\n |karpenter.k8s.aws/instance-accelerator-name|inferentia|\n |karpenter.k8s.aws/instance-category|inf|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|inf1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|inf1.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |aws.amazon.com/neuron|1|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14382Mi|\n |pods|38|\n |vpc.amazonaws.com/pod-eni|38|\n### `inf1.6xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-accelerator-count|4|\n |karpenter.k8s.aws/instance-accelerator-manufacturer|aws|\n |karpenter.k8s.aws/instance-accelerator-name|inferentia|\n |karpenter.k8s.aws/instance-category|inf|\n |karpenter.k8s.aws/instance-cpu|24|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|inf1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|49152|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|6xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|inf1.6xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |aws.amazon.com/neuron|4|\n |cpu|23870m|\n |ephemeral-storage|17Gi|\n |memory|42536Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `inf1.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-accelerator-count|16|\n |karpenter.k8s.aws/instance-accelerator-manufacturer|aws|\n |karpenter.k8s.aws/instance-accelerator-name|inferentia|\n |karpenter.k8s.aws/instance-category|inf|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|inf1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|inf1.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |aws.amazon.com/neuron|16|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|177976Mi|\n |pods|321|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|111|\n## inf2 Family\n### `inf2.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-accelerator-count|1|\n |karpenter.k8s.aws/instance-accelerator-manufacturer|aws|\n |karpenter.k8s.aws/instance-accelerator-name|inferentia|\n |karpenter.k8s.aws/instance-category|inf|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|inf2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2083|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|inf2.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |aws.amazon.com/neuron|1|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `inf2.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-accelerator-count|1|\n |karpenter.k8s.aws/instance-accelerator-manufacturer|aws|\n |karpenter.k8s.aws/instance-accelerator-name|inferentia|\n |karpenter.k8s.aws/instance-category|inf|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|inf2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|16667|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|inf2.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |aws.amazon.com/neuron|1|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `inf2.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-accelerator-count|6|\n |karpenter.k8s.aws/instance-accelerator-manufacturer|aws|\n |karpenter.k8s.aws/instance-accelerator-name|inferentia|\n |karpenter.k8s.aws/instance-category|inf|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|inf2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|inf2.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |aws.amazon.com/neuron|6|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `inf2.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-accelerator-count|12|\n |karpenter.k8s.aws/instance-accelerator-manufacturer|aws|\n |karpenter.k8s.aws/instance-accelerator-name|inferentia|\n |karpenter.k8s.aws/instance-category|inf|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|inf2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|inf2.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |aws.amazon.com/neuron|12|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## is4gen Family\n### `is4gen.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|is|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|is4gen|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|937|\n |karpenter.k8s.aws/instance-memory|6144|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|is4gen.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|5181Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `is4gen.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|is|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|is4gen|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1875|\n |karpenter.k8s.aws/instance-memory|12288|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|is4gen.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|10633Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `is4gen.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|is|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|is4gen|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3750|\n |karpenter.k8s.aws/instance-memory|24576|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|is4gen.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|21680Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `is4gen.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|is|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|is4gen|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7500|\n |karpenter.k8s.aws/instance-memory|49152|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|is4gen.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|44413Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `is4gen.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|is|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|is4gen|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|15000|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|is4gen.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|87943Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `is4gen.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|is|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|is4gen|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|30000|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|is4gen.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|178874Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n## m1 Family\n### `m1.small`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|1740|\n |karpenter.k8s.aws/instance-size|small|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m1.small|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|1166Mi|\n |pods|8|\n### `m1.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|3788|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m1.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|3016Mi|\n |pods|12|\n### `m1.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|7680|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m1.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6430Mi|\n |pods|29|\n### `m1.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|15360|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m1.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|13215Mi|\n |pods|58|\n## m2 Family\n### `m2.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|17510|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m2.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|15203Mi|\n |pods|58|\n### `m2.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|35020|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m2.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|30740Mi|\n |pods|118|\n### `m2.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|70041|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m2.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|61858Mi|\n |pods|234|\n## m3 Family\n### `m3.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|3840|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m3.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|3065Mi|\n |pods|12|\n### `m3.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|7680|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m3.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6430Mi|\n |pods|29|\n### `m3.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|15360|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m3.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|13215Mi|\n |pods|58|\n### `m3.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|30720|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m3.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|26763Mi|\n |pods|118|\n## m4 Family\n### `m4.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|450|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m4.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|7002Mi|\n |pods|20|\n### `m4.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m4.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n### `m4.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|1000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m4.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n### `m4.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m4.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n### `m4.10xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|40|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|163840|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|10xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m4.10xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|39830m|\n |ephemeral-storage|17Gi|\n |memory|148623Mi|\n |pods|234|\n### `m4.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m4.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n## m5 Family\n### `m5.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m5.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m5.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m5.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|13600|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m5.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m5.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|120|\n## m5a Family\n### `m5a.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5a.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m5a.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5a.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m5a.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5a.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m5a.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5a.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5a.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5a.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5a.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6780|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5a.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5a.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5a.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m5a.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|13750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5a.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## m5ad Family\n### `m5ad.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|75|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5ad.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m5ad.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|150|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5ad.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m5ad.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|300|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5ad.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m5ad.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|600|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5ad.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5ad.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1200|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5ad.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5ad.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6780|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1800|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5ad.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5ad.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2400|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5ad.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m5ad.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|13750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3600|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5ad.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## m5d Family\n### `m5d.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|75|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5d.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m5d.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|150|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5d.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m5d.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|300|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5d.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m5d.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|600|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5d.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5d.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1200|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5d.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5d.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1800|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5d.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5d.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|13600|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2400|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5d.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m5d.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3600|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5d.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m5d.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3600|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5d.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## m5dn Family\n### `m5dn.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|75|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|2100|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5dn.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m5dn.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|150|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|4100|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5dn.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m5dn.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|300|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|8125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5dn.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m5dn.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|600|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|16250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5dn.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5dn.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1200|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5dn.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5dn.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1800|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5dn.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5dn.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|13600|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2400|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5dn.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m5dn.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3600|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5dn.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m5dn.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3600|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5dn.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## m5n Family\n### `m5n.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|2100|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5n.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m5n.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|4100|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5n.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m5n.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|8125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5n.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m5n.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|16250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5n.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5n.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5n.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5n.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5n.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5n.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|13600|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5n.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m5n.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5n.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m5n.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5n.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## m5zn Family\n### `m5zn.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5zn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|3000|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5zn.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|13|\n### `m5zn.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5zn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5zn.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|29|\n### `m5zn.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5zn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5zn.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|62|\n### `m5zn.3xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|12|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5zn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|49152|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|3xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5zn.3xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|11900m|\n |ephemeral-storage|17Gi|\n |memory|42536Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|92|\n### `m5zn.6xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|24|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5zn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|6xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5zn.6xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|23870m|\n |ephemeral-storage|17Gi|\n |memory|88002Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `m5zn.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5zn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5zn.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m5zn.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5zn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5zn.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## m6a Family\n### `m6a.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6a.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m6a.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6a.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m6a.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6a.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m6a.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6a.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m6a.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6a.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `m6a.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6a.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `m6a.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6a.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6a.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6a.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6a.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6a.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6a.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6a.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6a.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6a.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## m6g Family\n### `m6g.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|500|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6g.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|3286Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `m6g.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6g.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6844Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m6g.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6g.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m6g.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6g.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m6g.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6g.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m6g.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6g.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m6g.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14250|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6g.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178874Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m6g.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6g.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|233962Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6g.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6g.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|233962Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## m6gd Family\n### `m6gd.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|59|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|500|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6gd.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|3286Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `m6gd.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6gd.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6844Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m6gd.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6gd.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m6gd.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6gd.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m6gd.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6gd.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m6gd.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6gd.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m6gd.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14250|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6gd.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178874Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m6gd.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6gd.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|233962Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6gd.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6gd.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|233962Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## m6i Family\n### `m6i.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6i.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m6i.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6i.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m6i.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6i.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m6i.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6i.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m6i.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6i.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `m6i.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6i.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `m6i.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6i.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6i.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6i.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6i.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6i.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6i.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6i.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## m6id Family\n### `m6id.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6id.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m6id.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6id.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m6id.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6id.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m6id.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6id.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m6id.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6id.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `m6id.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6id.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `m6id.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6id.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6id.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|5700|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6id.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6id.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6id.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6id.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6id.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## m6idn Family\n### `m6idn.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6idn.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m6idn.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6idn.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m6idn.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6idn.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m6idn.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6idn.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m6idn.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6idn.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `m6idn.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|37500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6idn.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `m6idn.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|50000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6idn.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6idn.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|75000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|5700|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|150000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6idn.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6idn.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6idn.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|480277Mi|\n |pods|394|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|106|\n### `m6idn.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6idn.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|480277Mi|\n |pods|394|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|106|\n## m6in Family\n### `m6in.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6in.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m6in.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6in.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m6in.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6in.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m6in.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6in.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m6in.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6in.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `m6in.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|37500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6in.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `m6in.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|50000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6in.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6in.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|75000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|150000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6in.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6in.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6in.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|480277Mi|\n |pods|394|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|106|\n### `m6in.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6in.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|480277Mi|\n |pods|394|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|106|\n## m7a Family\n### `m7a.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|390|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7a.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|3345Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `m7a.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7a.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m7a.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7a.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m7a.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7a.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m7a.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7a.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m7a.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7a.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `m7a.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7a.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `m7a.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7a.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m7a.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7a.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m7a.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7a.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m7a.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7a.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m7a.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7a.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## m7g Family\n### `m7g.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|520|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7g.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|3286Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `m7g.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7g.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6844Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m7g.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1876|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7g.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m7g.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7g.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m7g.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7g.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m7g.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7g.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m7g.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7g.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178874Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m7g.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7g.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|233962Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m7g.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7g.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|233962Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## m7gd Family\n### `m7gd.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|59|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|520|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7gd.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|3286Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `m7gd.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7gd.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6844Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m7gd.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1876|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7gd.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m7gd.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7gd.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m7gd.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7gd.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m7gd.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7gd.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m7gd.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7gd.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178874Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m7gd.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7gd.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|233962Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m7gd.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7gd.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|233962Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## m7i Family\n### `m7i.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m7i.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m7i.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m7i.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m7i.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `m7i.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `m7i.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m7i.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m7i.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m7i.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m7i.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## m7i-flex Family\n### `m7i-flex.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i-flex|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|390|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i-flex.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|3|\n### `m7i-flex.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i-flex|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i-flex.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|8|\n### `m7i-flex.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i-flex|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i-flex.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m7i-flex.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i-flex|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i-flex.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|34|\n### `m7i-flex.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i-flex|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i-flex.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n## p2 Family\n### `p2.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|p|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|p2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|12288|\n |karpenter.k8s.aws/instance-gpu-name|k80|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|62464|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|p2.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|56786Mi|\n |nvidia.com/gpu|1|\n |pods|58|\n### `p2.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|p|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|5000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|p2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-gpu-count|8|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|12288|\n |karpenter.k8s.aws/instance-gpu-name|k80|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|499712|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|p2.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|459304Mi|\n |nvidia.com/gpu|8|\n |pods|234|\n### `p2.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|p|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|p2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-gpu-count|16|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|12288|\n |karpenter.k8s.aws/instance-gpu-name|k80|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|749568|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|p2.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|690421Mi|\n |nvidia.com/gpu|16|\n |pods|234|\n## p3 Family\n### `p3.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|p|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|1750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|p3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|v100|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|62464|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|p3.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|56786Mi|\n |nvidia.com/gpu|1|\n |pods|58|\n### `p3.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|p|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|7000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|p3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-gpu-count|4|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|v100|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|249856|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|p3.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|228187Mi|\n |nvidia.com/gpu|4|\n |pods|234|\n### `p3.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|p|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|p3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-gpu-count|8|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|v100|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|499712|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|p3.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|459304Mi|\n |nvidia.com/gpu|8|\n |pods|234|\n## p3dn Family\n### `p3dn.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|p|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|p3dn|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-gpu-count|8|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|32768|\n |karpenter.k8s.aws/instance-gpu-name|v100|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1800|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|p3dn.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |nvidia.com/gpu|8|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## p4d Family\n### `p4d.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|p|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|p4d|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-gpu-count|8|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|40960|\n |karpenter.k8s.aws/instance-gpu-name|a100|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|8000|\n |karpenter.k8s.aws/instance-memory|1179648|\n |karpenter.k8s.aws/instance-network-bandwidth|400000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|p4d.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|1082712Mi|\n |nvidia.com/gpu|8|\n |pods|737|\n |vpc.amazonaws.com/efa|4|\n |vpc.amazonaws.com/pod-eni|62|\n## p5 Family\n### `p5.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|p|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|p5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|8|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|81920|\n |karpenter.k8s.aws/instance-gpu-name|h100|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|30400|\n |karpenter.k8s.aws/instance-memory|2097152|\n |karpenter.k8s.aws/instance-network-bandwidth|3200000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|p5.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1938410Mi|\n |nvidia.com/gpu|8|\n |pods|100|\n |vpc.amazonaws.com/efa|32|\n |vpc.amazonaws.com/pod-eni|120|\n## r3 Family\n### `r3.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|15360|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r3.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|13534Mi|\n |pods|29|\n### `r3.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|31232|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r3.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|27896Mi|\n |pods|58|\n### `r3.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|62464|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r3.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|56786Mi|\n |pods|58|\n### `r3.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|124928|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r3.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|112629Mi|\n |pods|234|\n### `r3.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|249856|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r3.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|228187Mi|\n |pods|234|\n## r4 Family\n### `r4.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|425|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|15616|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r4.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|13770Mi|\n |pods|29|\n### `r4.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|850|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|31232|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r4.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|27896Mi|\n |pods|58|\n### `r4.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|1700|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|62464|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r4.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|56786Mi|\n |pods|58|\n### `r4.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|124928|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r4.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|112629Mi|\n |pods|234|\n### `r4.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|7000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|249856|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r4.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|228187Mi|\n |pods|234|\n### `r4.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|499712|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r4.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|453771Mi|\n |pods|737|\n## r5 Family\n### `r5.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r5.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r5.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r5.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|13600|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r5.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r5.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|120|\n## r5a Family\n### `r5a.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5a.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r5a.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5a.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r5a.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5a.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r5a.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5a.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5a.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5a.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5a.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6780|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5a.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5a.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5a.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r5a.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|13570|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5a.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## r5ad Family\n### `r5ad.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|75|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5ad.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r5ad.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|150|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5ad.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r5ad.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|300|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5ad.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r5ad.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|600|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5ad.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5ad.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1200|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5ad.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5ad.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6780|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1800|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5ad.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5ad.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2400|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5ad.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r5ad.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|13570|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3600|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5ad.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## r5b Family\n### `r5b.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5b|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5b.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r5b.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5b|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5b.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r5b.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5b|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5b.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r5b.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5b|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5b.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5b.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5b|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5b.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5b.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5b|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5b.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5b.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5b|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5b.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r5b.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5b|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5b.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r5b.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5b|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5b.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## r5d Family\n### `r5d.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|75|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5d.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r5d.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|150|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5d.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r5d.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|300|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5d.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r5d.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|600|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5d.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5d.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1200|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5d.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5d.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1800|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5d.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5d.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|13600|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2400|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5d.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r5d.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3600|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5d.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r5d.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3600|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5d.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## r5dn Family\n### `r5dn.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|75|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2100|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5dn.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r5dn.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|150|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|4100|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5dn.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r5dn.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|300|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|8125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5dn.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r5dn.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|600|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|16250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5dn.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5dn.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1200|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5dn.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5dn.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1800|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5dn.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5dn.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|13600|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2400|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5dn.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r5dn.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3600|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5dn.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r5dn.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3600|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5dn.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## r5n Family\n### `r5n.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2100|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5n.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r5n.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|4100|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5n.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r5n.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|8125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5n.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r5n.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|16250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5n.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5n.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5n.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5n.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5n.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5n.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|13600|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5n.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r5n.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5n.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r5n.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5n.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## r6a Family\n### `r6a.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6a.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r6a.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6a.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r6a.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6a.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r6a.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6a.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r6a.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6a.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `r6a.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6a.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `r6a.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6a.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6a.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6a.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6a.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6a.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|961470Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6a.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6a.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446437Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6a.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6a.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446437Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## r6g Family\n### `r6g.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|500|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6g.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|7075Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `r6g.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6g.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14422Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r6g.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6g.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r6g.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6g.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59568Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r6g.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6g.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r6g.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6g.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239495Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r6g.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14250|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6g.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360736Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r6g.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6g.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476445Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6g.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6g.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476445Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## r6gd Family\n### `r6gd.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|59|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|500|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6gd.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|7075Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `r6gd.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6gd.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14422Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r6gd.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6gd.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r6gd.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6gd.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59568Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r6gd.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6gd.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r6gd.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6gd.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239495Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r6gd.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14250|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6gd.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360736Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r6gd.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6gd.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476445Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6gd.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6gd.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476445Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## r6i Family\n### `r6i.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6i.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r6i.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6i.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r6i.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6i.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r6i.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6i.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r6i.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6i.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `r6i.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6i.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `r6i.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6i.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6i.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6i.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6i.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6i.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|961470Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6i.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6i.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|961470Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## r6id Family\n### `r6id.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6id.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r6id.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6id.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r6id.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6id.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r6id.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6id.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r6id.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6id.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `r6id.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6id.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `r6id.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6id.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6id.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|5700|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6id.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6id.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6id.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|961470Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6id.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6id.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|961470Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## r6idn Family\n### `r6idn.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6idn.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r6idn.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6idn.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r6idn.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6idn.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r6idn.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6idn.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r6idn.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6idn.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `r6idn.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|37500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6idn.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `r6idn.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|50000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6idn.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6idn.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|75000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|5700|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|150000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6idn.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6idn.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6idn.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|965243Mi|\n |pods|394|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|106|\n### `r6idn.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6idn.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|965243Mi|\n |pods|394|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|106|\n## r6in Family\n### `r6in.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6in.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r6in.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6in.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r6in.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6in.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r6in.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6in.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r6in.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6in.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `r6in.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|37500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6in.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `r6in.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|50000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6in.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6in.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|75000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|150000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6in.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6in.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6in.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|965243Mi|\n |pods|394|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|106|\n### `r6in.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6in.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|965243Mi|\n |pods|394|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|106|\n## r7a Family\n### `r7a.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|390|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7a.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|7134Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `r7a.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7a.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r7a.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7a.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r7a.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7a.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r7a.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7a.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r7a.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7a.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `r7a.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7a.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `r7a.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7a.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r7a.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7a.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r7a.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7a.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|961470Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r7a.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7a.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446437Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r7a.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7a.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446437Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## r7g Family\n### `r7g.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|520|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7g.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|7075Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `r7g.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7g.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14422Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r7g.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1876|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7g.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r7g.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7g.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59568Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r7g.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7g.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r7g.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7g.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239495Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r7g.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7g.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360736Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r7g.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7g.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476445Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r7g.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7g.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476445Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## r7gd Family\n### `r7gd.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|59|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|520|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7gd.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|7075Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `r7gd.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7gd.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14422Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r7gd.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1876|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7gd.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r7gd.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7gd.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59568Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r7gd.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7gd.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r7gd.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7gd.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239495Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r7gd.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7gd.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360736Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r7gd.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7gd.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476445Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r7gd.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7gd.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476445Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## r7i Family\n### `r7i.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7i.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r7i.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7i.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r7i.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7i.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r7i.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7i.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r7i.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7i.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `r7i.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7i.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `r7i.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7i.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r7i.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7i.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r7i.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7i.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r7i.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7i.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446437Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r7i.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7i.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446437Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## r7iz Family\n### `r7iz.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7iz|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7iz.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r7iz.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7iz|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7iz.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r7iz.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7iz|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7iz.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r7iz.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7iz|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7iz.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r7iz.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7iz|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7iz.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `r7iz.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7iz|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7iz.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `r7iz.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7iz|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7iz.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r7iz.metal-16xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7iz|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal-16xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7iz.metal-16xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r7iz.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7iz|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7iz.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|961470Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r7iz.metal-32xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7iz|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal-32xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7iz.metal-32xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|961470Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## r8g Family\n### `r8g.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|520|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8g.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|7075Mi|\n |pods|8|\n### `r8g.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8g.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14422Mi|\n |pods|29|\n### `r8g.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1876|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8g.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n### `r8g.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8g.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59568Mi|\n |pods|58|\n### `r8g.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8g.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n### `r8g.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8g.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239495Mi|\n |pods|234|\n### `r8g.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8g.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360736Mi|\n |pods|234|\n### `r8g.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8g.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476445Mi|\n |pods|737|\n### `r8g.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8g.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718928Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n### `r8g.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8g.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718928Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n### `r8g.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8g.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446378Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n### `r8g.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8g.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446378Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n## t1 Family\n### `t1.micro`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|627|\n |karpenter.k8s.aws/instance-size|micro|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t1.micro|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|180Mi|\n |pods|4|\n## t2 Family\n### `t2.nano`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|512|\n |karpenter.k8s.aws/instance-size|nano|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t2.nano|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|74Mi|\n |pods|4|\n### `t2.micro`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|1024|\n |karpenter.k8s.aws/instance-size|micro|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t2.micro|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|548Mi|\n |pods|4|\n### `t2.small`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-size|small|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t2.small|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|1418Mi|\n |pods|11|\n### `t2.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t2.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3246Mi|\n |pods|17|\n### `t2.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t2.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6837Mi|\n |pods|35|\n### `t2.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t2.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14316Mi|\n |pods|44|\n### `t2.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t2.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29471Mi|\n |pods|44|\n## t3 Family\n### `t3.nano`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|512|\n |karpenter.k8s.aws/instance-network-bandwidth|32|\n |karpenter.k8s.aws/instance-size|nano|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3.nano|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|74Mi|\n |pods|4|\n### `t3.micro`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1024|\n |karpenter.k8s.aws/instance-network-bandwidth|64|\n |karpenter.k8s.aws/instance-size|micro|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3.micro|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|548Mi|\n |pods|4|\n### `t3.small`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|128|\n |karpenter.k8s.aws/instance-size|small|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3.small|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|1418Mi|\n |pods|11|\n### `t3.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|256|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3246Mi|\n |pods|17|\n### `t3.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2780|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|512|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6837Mi|\n |pods|35|\n### `t3.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2780|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1024|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n### `t3.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2780|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|2048|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n## t3a Family\n### `t3a.nano`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3a|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|512|\n |karpenter.k8s.aws/instance-network-bandwidth|32|\n |karpenter.k8s.aws/instance-size|nano|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3a.nano|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|74Mi|\n |pods|4|\n### `t3a.micro`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3a|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1024|\n |karpenter.k8s.aws/instance-network-bandwidth|64|\n |karpenter.k8s.aws/instance-size|micro|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3a.micro|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|548Mi|\n |pods|4|\n### `t3a.small`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3a|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|128|\n |karpenter.k8s.aws/instance-size|small|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3a.small|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|1451Mi|\n |pods|8|\n### `t3a.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3a|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|256|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3a.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3246Mi|\n |pods|17|\n### `t3a.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2780|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3a|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|512|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3a.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6837Mi|\n |pods|35|\n### `t3a.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2780|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3a|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1024|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3a.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n### `t3a.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2780|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3a|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|2048|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3a.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n## t4g Family\n### `t4g.nano`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t4g|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|512|\n |karpenter.k8s.aws/instance-network-bandwidth|32|\n |karpenter.k8s.aws/instance-size|nano|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t4g.nano|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|15Mi|\n |pods|4|\n### `t4g.micro`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t4g|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1024|\n |karpenter.k8s.aws/instance-network-bandwidth|64|\n |karpenter.k8s.aws/instance-size|micro|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t4g.micro|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|489Mi|\n |pods|4|\n### `t4g.small`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t4g|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|128|\n |karpenter.k8s.aws/instance-size|small|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t4g.small|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|1359Mi|\n |pods|11|\n### `t4g.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t4g|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|256|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t4g.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3187Mi|\n |pods|17|\n### `t4g.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2780|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t4g|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|512|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t4g.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6778Mi|\n |pods|35|\n### `t4g.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2780|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t4g|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1024|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t4g.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n### `t4g.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2780|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t4g|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|2048|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t4g.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n## trn1 Family\n### `trn1.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-accelerator-count|1|\n |karpenter.k8s.aws/instance-accelerator-manufacturer|aws|\n |karpenter.k8s.aws/instance-accelerator-name|inferentia|\n |karpenter.k8s.aws/instance-category|trn|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|trn1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|trn1.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |aws.amazon.com/neuron|1|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|17|\n### `trn1.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-accelerator-count|16|\n |karpenter.k8s.aws/instance-accelerator-manufacturer|aws|\n |karpenter.k8s.aws/instance-accelerator-name|inferentia|\n |karpenter.k8s.aws/instance-category|trn|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|trn1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|800000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|trn1.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |aws.amazon.com/neuron|16|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|481894Mi|\n |pods|247|\n |vpc.amazonaws.com/efa|8|\n |vpc.amazonaws.com/pod-eni|82|\n## trn1n Family\n### `trn1n.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-accelerator-count|16|\n |karpenter.k8s.aws/instance-accelerator-manufacturer|aws|\n |karpenter.k8s.aws/instance-accelerator-name|inferentia|\n |karpenter.k8s.aws/instance-category|trn|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|trn1n|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|1600000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|trn1n.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |aws.amazon.com/neuron|16|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|481894Mi|\n |pods|247|\n |vpc.amazonaws.com/efa|16|\n |vpc.amazonaws.com/pod-eni|120|\n## u-12tb1 Family\n### `u-12tb1.112xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|u|\n |karpenter.k8s.aws/instance-cpu|448|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|38000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|u-12tb1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|12582912|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|112xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|u-12tb1.112xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|446810m|\n |ephemeral-storage|17Gi|\n |memory|11630731Mi|\n |pods|737|\n## u-18tb1 Family\n### `u-18tb1.112xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|u|\n |karpenter.k8s.aws/instance-cpu|448|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|38000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|u-18tb1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|18874368|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|112xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|u-18tb1.112xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|446810m|\n |ephemeral-storage|17Gi|\n |memory|17450328Mi|\n |pods|737|\n## u-24tb1 Family\n### `u-24tb1.112xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|u|\n |karpenter.k8s.aws/instance-cpu|448|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|38000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|u-24tb1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|25165824|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|112xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|u-24tb1.112xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|446810m|\n |ephemeral-storage|17Gi|\n |memory|23269925Mi|\n |pods|737|\n## u-3tb1 Family\n### `u-3tb1.56xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|u|\n |karpenter.k8s.aws/instance-cpu|224|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|u-3tb1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|3145728|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|56xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|u-3tb1.56xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|223370m|\n |ephemeral-storage|17Gi|\n |memory|2906869Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|6|\n## u-6tb1 Family\n### `u-6tb1.56xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|u|\n |karpenter.k8s.aws/instance-cpu|224|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|38000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|u-6tb1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|6291456|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|56xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|u-6tb1.56xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|223370m|\n |ephemeral-storage|17Gi|\n |memory|5811134Mi|\n |pods|737|\n### `u-6tb1.112xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|u|\n |karpenter.k8s.aws/instance-cpu|448|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|38000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|u-6tb1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|6291456|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|112xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|u-6tb1.112xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|446810m|\n |ephemeral-storage|17Gi|\n |memory|5811134Mi|\n |pods|737|\n## u-9tb1 Family\n### `u-9tb1.112xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|u|\n |karpenter.k8s.aws/instance-cpu|448|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|38000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|u-9tb1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|9437184|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|112xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|u-9tb1.112xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|446810m|\n |ephemeral-storage|17Gi|\n |memory|8720933Mi|\n |pods|737|\n## u7i-12tb Family\n### `u7i-12tb.224xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|u|\n |karpenter.k8s.aws/instance-cpu|896|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|u7i-12tb|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|12582912|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|224xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|u7i-12tb.224xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|893690m|\n |ephemeral-storage|17Gi|\n |memory|11630731Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n## u7in-16tb Family\n### `u7in-16tb.224xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|u|\n |karpenter.k8s.aws/instance-cpu|896|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|u7in-16tb|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16777216|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|224xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|u7in-16tb.224xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|893690m|\n |ephemeral-storage|17Gi|\n |memory|15514235Mi|\n |pods|394|\n |vpc.amazonaws.com/efa|2|\n## u7in-24tb Family\n### `u7in-24tb.224xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|u|\n |karpenter.k8s.aws/instance-cpu|896|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|u7in-24tb|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|25165824|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|224xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|u7in-24tb.224xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|893690m|\n |ephemeral-storage|17Gi|\n |memory|23273698Mi|\n |pods|394|\n |vpc.amazonaws.com/efa|2|\n## u7in-32tb Family\n### `u7in-32tb.224xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|u|\n |karpenter.k8s.aws/instance-cpu|896|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|u7in-32tb|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|33554432|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|224xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|u7in-32tb.224xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|893690m|\n |ephemeral-storage|17Gi|\n |memory|31033160Mi|\n |pods|394|\n |vpc.amazonaws.com/efa|2|\n## vt1 Family\n### `vt1.3xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|vt|\n |karpenter.k8s.aws/instance-cpu|12|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|vt1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|24576|\n |karpenter.k8s.aws/instance-network-bandwidth|3120|\n |karpenter.k8s.aws/instance-size|3xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|vt1.3xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|11900m|\n |ephemeral-storage|17Gi|\n |memory|21739Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `vt1.6xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|vt|\n |karpenter.k8s.aws/instance-cpu|24|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|vt1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|49152|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|6xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|vt1.6xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|23870m|\n |ephemeral-storage|17Gi|\n |memory|42536Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `vt1.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|vt|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|vt1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|vt1.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## x1 Family\n### `x1.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|7000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|999424|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x1.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|921538Mi|\n |pods|234|\n### `x1.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|1998848|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x1.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|1846005Mi|\n |pods|234|\n## x1e Family\n### `x1e.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x1e|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|124928|\n |karpenter.k8s.aws/instance-network-bandwidth|625|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x1e.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|114884Mi|\n |pods|29|\n### `x1e.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|1000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x1e|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|249856|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x1e.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|230123Mi|\n |pods|58|\n### `x1e.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|1750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x1e|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|499712|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x1e.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|461240Mi|\n |pods|58|\n### `x1e.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x1e|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|999424|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x1e.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|923474Mi|\n |pods|58|\n### `x1e.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|7000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x1e|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|1998848|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x1e.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|1846005Mi|\n |pods|234|\n### `x1e.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x1e|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|3997696|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x1e.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|3694939Mi|\n |pods|234|\n## x2gd Family\n### `x2gd.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x2gd|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|59|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|500|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2gd.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|14653Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|10|\n### `x2gd.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x2gd|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2gd.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|29577Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `x2gd.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x2gd|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2gd.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|59568Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `x2gd.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x2gd|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|475|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2gd.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|120189Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `x2gd.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x2gd|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2gd.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|239495Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `x2gd.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x2gd|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2gd.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|481978Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `x2gd.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14250|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x2gd|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2gd.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|724461Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `x2gd.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x2gd|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2gd.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|961411Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `x2gd.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x2gd|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2gd.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|961411Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## x2idn Family\n### `x2idn.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2idn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2idn.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|961470Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `x2idn.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2idn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2idn.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|1446437Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `x2idn.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2idn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|2097152|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2idn.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|1931403Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `x2idn.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2idn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|2097152|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2idn.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|1931403Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## x2iedn Family\n### `x2iedn.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iedn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iedn.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|120248Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|11|\n### `x2iedn.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iedn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iedn.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|241490Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|27|\n### `x2iedn.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iedn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|475|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iedn.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|482037Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `x2iedn.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iedn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iedn.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|967003Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `x2iedn.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iedn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|2097152|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iedn.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|1931403Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `x2iedn.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iedn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|3145728|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iedn.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|2901336Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `x2iedn.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iedn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|4194304|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iedn.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|3871269Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `x2iedn.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iedn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|4194304|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iedn.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|3871269Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## x2iezn Family\n### `x2iezn.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iezn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iezn.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|241490Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|62|\n### `x2iezn.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iezn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iezn.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|482037Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `x2iezn.6xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|24|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iezn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|6xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iezn.6xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|23870m|\n |ephemeral-storage|17Gi|\n |memory|724520Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `x2iezn.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|12000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iezn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iezn.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|967003Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `x2iezn.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iezn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iezn.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|1446437Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `x2iezn.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iezn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iezn.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|1446437Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## z1d Family\n### `z1d.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|z|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|z1d|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|75|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|z1d.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|13|\n### `z1d.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|z|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|z1d|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|150|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|z1d.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|28|\n### `z1d.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|z|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|z1d|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|300|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|z1d.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|58|\n### `z1d.3xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|z|\n |karpenter.k8s.aws/instance-cpu|12|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|z1d|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|450|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|3xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|z1d.3xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|11900m|\n |ephemeral-storage|17Gi|\n |memory|88002Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `z1d.6xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|z|\n |karpenter.k8s.aws/instance-cpu|24|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|z1d|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|900|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|6xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|z1d.6xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|23870m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `z1d.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|z|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|z1d|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1800|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|z1d.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `z1d.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-category|z|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|z1d|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|1800|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|z1d.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n"
  },
  {
    "path": "website/content/en/v1.0/reference/metrics.md",
    "content": "---\ntitle: \"Metrics\"\nlinkTitle: \"Metrics\"\nweight: 7\n\ndescription: >\n  Inspect Karpenter Metrics\n---\n<!-- this document is generated from hack/docs/metrics_gen_docs.go -->\nKarpenter 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)\n### `karpenter_build_info`\nA metric with a constant '1' value labeled by version from which karpenter was built.\n- Stability Level: STABLE\n\n## Nodeclaims Metrics\n\n### `karpenter_nodeclaims_termination_duration_seconds`\nDuration of NodeClaim termination in seconds.\n- Stability Level: BETA\n\n### `karpenter_nodeclaims_terminated_total`\nNumber of nodeclaims terminated in total by Karpenter. Labeled by the owning nodepool.\n- Stability Level: STABLE\n\n### `karpenter_nodeclaims_instance_termination_duration_seconds`\nDuration of CloudProvider Instance termination in seconds.\n- Stability Level: BETA\n\n### `karpenter_nodeclaims_disrupted_total`\nNumber of nodeclaims disrupted in total by Karpenter. Labeled by reason the nodeclaim was disrupted and the owning nodepool.\n- Stability Level: ALPHA\n\n### `karpenter_nodeclaims_created_total`\nNumber of nodeclaims created in total by Karpenter. Labeled by reason the nodeclaim was created and the owning nodepool.\n- Stability Level: STABLE\n\n## Nodes Metrics\n\n### `karpenter_nodes_total_pod_requests`\nNode total pod requests are the resources requested by pods bound to nodes, including the DaemonSet pods.\n- Stability Level: BETA\n\n### `karpenter_nodes_total_pod_limits`\nNode total pod limits are the resources specified by pod limits, including the DaemonSet pods.\n- Stability Level: BETA\n\n### `karpenter_nodes_total_daemon_requests`\nNode total daemon requests are the resource requested by DaemonSet pods bound to nodes.\n- Stability Level: BETA\n\n### `karpenter_nodes_total_daemon_limits`\nNode total daemon limits are the resources specified by DaemonSet pod limits.\n- Stability Level: BETA\n\n### `karpenter_nodes_termination_duration_seconds`\nThe time taken between a node's deletion request and the removal of its finalizer\n- Stability Level: BETA\n\n### `karpenter_nodes_terminated_total`\nNumber of nodes terminated in total by Karpenter. Labeled by owning nodepool.\n- Stability Level: STABLE\n\n### `karpenter_nodes_system_overhead`\nNode 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.\n- Stability Level: BETA\n\n### `karpenter_nodes_leases_deleted_total`\nNumber of deleted leaked leases.\n- Stability Level: ALPHA\n\n### `karpenter_nodes_created_total`\nNumber of nodes created in total by Karpenter. Labeled by owning nodepool.\n- Stability Level: STABLE\n\n### `karpenter_nodes_allocatable`\nNode allocatable are the resources allocatable by nodes.\n- Stability Level: BETA\n\n## Pods Metrics\n\n### `karpenter_pods_state`\nPod 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, nodepool name, zone, architecture, capacity type, instance type and pod phase.\n- Stability Level: BETA\n\n### `karpenter_pods_startup_duration_seconds`\nThe time from pod creation until the pod is running.\n- Stability Level: STABLE\n\n## Voluntary Disruption Metrics\n\n### `karpenter_voluntary_disruption_queue_failures_total`\nThe number of times that an enqueued disruption decision failed. Labeled by disruption method.\n- Stability Level: BETA\n\n### `karpenter_voluntary_disruption_eligible_nodes`\nNumber of nodes eligible for disruption by Karpenter. Labeled by disruption reason.\n- Stability Level: BETA\n\n### `karpenter_voluntary_disruption_decisions_total`\nNumber of disruption decisions performed. Labeled by disruption decision, reason, and consolidation type.\n- Stability Level: STABLE\n\n### `karpenter_voluntary_disruption_decision_evaluation_duration_seconds`\nDuration of the disruption decision evaluation process in seconds. Labeled by method and consolidation type.\n- Stability Level: BETA\n\n### `karpenter_voluntary_disruption_consolidation_timeouts_total`\nNumber of times the Consolidation algorithm has reached a timeout. Labeled by consolidation type.\n- Stability Level: BETA\n\n## Scheduler Metrics\n\n### `karpenter_scheduler_scheduling_duration_seconds`\nDuration of scheduling simulations used for deprovisioning and provisioning in seconds.\n- Stability Level: STABLE\n\n### `karpenter_scheduler_queue_depth`\nThe number of pods currently waiting to be scheduled.\n- Stability Level: BETA\n\n## Nodepools Metrics\n\n### `karpenter_nodepools_usage`\nThe amount of resources that have been provisioned for a nodepool. Labeled by nodepool name and resource type.\n- Stability Level: ALPHA\n\n### `karpenter_nodepools_limit`\nLimits specified on the nodepool that restrict the quantity of resources provisioned. Labeled by nodepool name and resource type.\n- Stability Level: ALPHA\n\n### `karpenter_nodepools_allowed_disruptions`\nThe number of nodes for a given NodePool that can be concurrently disrupting at a point in time. Labeled by NodePool. Note that allowed disruptions can change very rapidly, as new nodes may be created and others may be deleted at any point.\n- Stability Level: ALPHA\n\n## Interruption Metrics\n\n### `karpenter_interruption_received_messages_total`\nCount of messages received from the SQS queue. Broken down by message type and whether the message was actionable.\n- Stability Level: STABLE\n\n### `karpenter_interruption_message_queue_duration_seconds`\nAmount of time an interruption message is on the queue before it is processed by karpenter.\n- Stability Level: STABLE\n\n### `karpenter_interruption_deleted_messages_total`\nCount of messages deleted from the SQS queue.\n- Stability Level: STABLE\n\n## Cluster State Metrics\n\n### `karpenter_cluster_state_synced`\nReturns 1 if cluster state is synced and 0 otherwise. Synced checks that nodeclaims and nodes that are stored in the APIServer have the same representation as Karpenter's cluster state\n- Stability Level: STABLE\n\n### `karpenter_cluster_state_node_count`\nCurrent count of nodes in cluster state\n- Stability Level: STABLE\n\n## Cloudprovider Metrics\n\n### `karpenter_cloudprovider_instance_type_offering_price_estimate`\nInstance type offering estimated hourly price used when making informed decisions on node cost calculation, based on instance type, capacity type, and zone.\n- Stability Level: BETA\n\n### `karpenter_cloudprovider_instance_type_offering_available`\nInstance type offering availability, based on instance type, capacity type, and zone\n- Stability Level: BETA\n\n### `karpenter_cloudprovider_instance_type_memory_bytes`\nMemory, in bytes, for a given instance type.\n- Stability Level: BETA\n\n### `karpenter_cloudprovider_instance_type_cpu_cores`\nVCPUs cores for a given instance type.\n- Stability Level: BETA\n\n### `karpenter_cloudprovider_errors_total`\nTotal number of errors returned from CloudProvider calls.\n- Stability Level: BETA\n\n### `karpenter_cloudprovider_duration_seconds`\nDuration of cloud provider method calls. Labeled by the controller, method name and provider.\n- Stability Level: BETA\n\n## Cloudprovider Batcher Metrics\n\n### `karpenter_cloudprovider_batcher_batch_time_seconds`\nDuration of the batching window per batcher\n- Stability Level: BETA\n\n### `karpenter_cloudprovider_batcher_batch_size`\nSize of the request batch per batcher\n- Stability Level: BETA\n\n## Controller Runtime Metrics\n\n### `controller_runtime_terminal_reconcile_errors_total`\nTotal number of terminal reconciliation errors per controller\n- Stability Level: STABLE\n\n### `controller_runtime_reconcile_total`\nTotal number of reconciliations per controller\n- Stability Level: STABLE\n\n### `controller_runtime_reconcile_time_seconds`\nLength of time per reconciliation per controller\n- Stability Level: STABLE\n\n### `controller_runtime_reconcile_errors_total`\nTotal number of reconciliation errors per controller\n- Stability Level: STABLE\n\n### `controller_runtime_max_concurrent_reconciles`\nMaximum number of concurrent reconciles per controller\n- Stability Level: STABLE\n\n### `controller_runtime_active_workers`\nNumber of currently used workers per controller\n- Stability Level: STABLE\n\n## Workqueue Metrics\n\n### `workqueue_work_duration_seconds`\nHow long in seconds processing an item from workqueue takes.\n- Stability Level: STABLE\n\n### `workqueue_unfinished_work_seconds`\nHow many seconds of work has been done that is in progress and hasn't been observed by work_duration. Large values indicate stuck threads. One can deduce the number of stuck threads by observing the rate at which this increases.\n- Stability Level: STABLE\n\n### `workqueue_retries_total`\nTotal number of retries handled by workqueue\n- Stability Level: STABLE\n\n### `workqueue_queue_duration_seconds`\nHow long in seconds an item stays in workqueue before being requested\n- Stability Level: STABLE\n\n### `workqueue_longest_running_processor_seconds`\nHow many seconds has the longest running processor for workqueue been running.\n- Stability Level: STABLE\n\n### `workqueue_depth`\nCurrent depth of workqueue\n- Stability Level: STABLE\n\n### `workqueue_adds_total`\nTotal number of adds handled by workqueue\n- Stability Level: STABLE\n\n## Status Condition Metrics\n\n### `operator_status_condition_transitions_total`\nThe count of transitions of a given object, type and status.\n- Stability Level: BETA\n\n### `operator_status_condition_transition_seconds`\nThe amount of time a condition was in a given state before transitioning. e.g. Alarm := P99(Updated=False) > 5 minutes\n- Stability Level: BETA\n\n### `operator_status_condition_current_status_seconds`\nThe current amount of time in seconds that a status condition has been in a specific state. Alarm := P99(Updated=Unknown) > 5 minutes\n- Stability Level: BETA\n\n### `operator_status_condition_count`\nThe number of an condition for a given object, type and status. e.g. Alarm := Available=False > 0\n- Stability Level: BETA\n\n## Client Go Metrics\n\n### `client_go_request_total`\nNumber of HTTP requests, partitioned by status code and method.\n- Stability Level: STABLE\n\n### `client_go_request_duration_seconds`\nRequest latency in seconds. Broken down by verb, group, version, kind, and subresource.\n- Stability Level: STABLE\n\n## AWS SDK Go Metrics\n\n### `aws_sdk_go_request_total`\nThe total number of AWS SDK Go requests\n- Stability Level: STABLE\n\n### `aws_sdk_go_request_retry_count`\nThe total number of AWS SDK Go retry attempts per request\n- Stability Level: STABLE\n\n### `aws_sdk_go_request_duration_seconds`\nLatency of AWS SDK Go requests\n- Stability Level: STABLE\n\n### `aws_sdk_go_request_attempt_total`\nThe total number of AWS SDK Go request attempts\n- Stability Level: STABLE\n\n### `aws_sdk_go_request_attempt_duration_seconds`\nLatency of AWS SDK Go request attempts\n- Stability Level: STABLE\n\n## Leader Election Metrics\n\n### `leader_election_slowpath_total`\nTotal number of slow path exercised in renewing leader leases. 'name' is the string used to identify the lease. Please make sure to group by name.\n- Stability Level: STABLE\n\n### `leader_election_master_status`\nGauge of if the reporting system is master of the relevant lease, 0 indicates backup, 1 indicates master. 'name' is the string used to identify the lease. Please make sure to group by name.\n- Stability Level: STABLE\n\n"
  },
  {
    "path": "website/content/en/v1.0/reference/settings.md",
    "content": "---\ntitle: \"Settings\"\nlinkTitle: \"Settings\"\nweight: 5\ndescription: >\n  Configure Karpenter\n---\n\nKarpenter surfaces environment variables and CLI parameters to allow you to configure certain global settings on the controllers. These settings are described below.\n\n[comment]: <> (the content below is generated from hack/docs/configuration_gen_docs.go)\n\n| Environment Variable | CLI Flag | Description |\n|--|--|--|\n| BATCH_IDLE_DURATION | \\-\\-batch-idle-duration | The maximum amount of time with no new pending 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. (default = 1s)|\n| BATCH_MAX_DURATION | \\-\\-batch-max-duration | 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. (default = 10s)|\n| CLUSTER_CA_BUNDLE | \\-\\-cluster-ca-bundle | Cluster CA bundle for nodes to use for TLS connections with the API server. If not set, this is taken from the controller's TLS configuration.|\n| CLUSTER_ENDPOINT | \\-\\-cluster-endpoint | The external kubernetes cluster endpoint for new nodes to connect with. If not specified, will discover the cluster endpoint using DescribeCluster API.|\n| CLUSTER_NAME | \\-\\-cluster-name | [REQUIRED] The kubernetes cluster name for resource discovery.|\n| DISABLE_LEADER_ELECTION | \\-\\-disable-leader-election | Disable the leader election client before executing the main loop. Disable when running replicated components for high availability is not desired.|\n| DISABLE_WEBHOOK | \\-\\-disable-webhook | Disable the conversion webhooks|\n| ENABLE_PROFILING | \\-\\-enable-profiling | Enable the profiling on the metric endpoint|\n| FEATURE_GATES | \\-\\-feature-gates | Optional features can be enabled / disabled using feature gates. Current options are: SpotToSpotConsolidation (default = SpotToSpotConsolidation=false)|\n| HEALTH_PROBE_PORT | \\-\\-health-probe-port | The port the health probe endpoint binds to for reporting controller health (default = 8081)|\n| INTERRUPTION_QUEUE | \\-\\-interruption-queue | Interruption queue is the name of the SQS queue used for processing interruption events from EC2. Interruption handling is disabled if not specified. Enabling interruption handling may require additional permissions on the controller service account. Additional permissions are outlined in the docs.|\n| ISOLATED_VPC | \\-\\-isolated-vpc | 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 on-demand pricing endpoint.|\n| EKS_CONTROL_PLANE | \\-\\-eks-control-plane | Marking this true means that your cluster is running with an EKS control plane and Karpenter should attempt to discover cluster details from the DescribeCluster API|\n| KARPENTER_SERVICE | \\-\\-karpenter-service | The Karpenter Service name for the dynamic webhook certificate|\n| KUBE_CLIENT_BURST | \\-\\-kube-client-burst | The maximum allowed burst of queries to the kube-apiserver (default = 300)|\n| KUBE_CLIENT_QPS | \\-\\-kube-client-qps | The smoothed rate of qps to kube-apiserver (default = 200)|\n| LOG_ERROR_OUTPUT_PATHS | \\-\\-log-error-output-paths | Optional comma separated paths for logging error output (default = stderr)|\n| LOG_LEVEL | \\-\\-log-level | Log verbosity level. Can be one of 'debug', 'info', or 'error' (default = info)|\n| LOG_OUTPUT_PATHS | \\-\\-log-output-paths | Optional comma separated paths for directing log output (default = stdout)|\n| 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)|\n| METRICS_PORT | \\-\\-metrics-port | The port the metric endpoint binds to for operating metrics about the controller itself (default = 8080)|\n| RESERVED_ENIS | \\-\\-reserved-enis | Reserved ENIs are not included in the calculations for max-pods or kube-reserved. This is most often used with the [VPC CNI custom networking setup](https://docs.aws.amazon.com/eks/latest/userguide/cni-custom-network.html) and [Security Groups for Pods]({{<ref \"../concepts/scheduling/#pod-eni-resources-security-groups-for-pods\">}}). (default = 0)|\n| VM_MEMORY_OVERHEAD_PERCENT | \\-\\-vm-memory-overhead-percent | The VM memory overhead as a percent that will be subtracted from the total memory for all instance types. (default = 0.075, which equals to 7.5%)|\n| WEBHOOK_METRICS_PORT | \\-\\-webhook-metrics-port | The port the webhook metric endpoing binds to for operating metrics about the webhook (default = 8001)|\n| WEBHOOK_PORT | \\-\\-webhook-port | The port the webhook endpoint binds to for validation and mutation of resources (default = 8443)|\n\n[comment]: <> (end docs generated content from hack/docs/configuration_gen_docs.go)\n\n### Feature Gates\n\nKarpenter uses [feature gates](https://kubernetes.io/docs/reference/command-line-tools-reference/feature-gates/#feature-gates-for-alpha-or-beta-features) You can enable the feature gates through the `--feature-gates` CLI environment variable or the `FEATURE_GATES` environment variable in the Karpenter deployment. For example, you can configure drift, spotToSpotConsolidation by setting the CLI argument: `--feature-gates Drift=true,SpotToSpotConsolidation=true`.\n\n| Feature                 | Default | Stage | Since   | Until   |\n|-------------------------|---------|-------|---------|---------|\n| Drift                   | false   | Alpha | v0.21.x | v0.32.x |\n| Drift                   | true    | Beta  | v0.33.x | v0.37.x |\n| SpotToSpotConsolidation | false   | Alpha  | v0.34.x |         |\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nIn v1, drift has been promoted to stable and the feature gate removed. Users can continue to control drift by using disruption budgets by reason.\nExample:\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\nspec:\n…\n  disruption:\n    budgets:\n    - nodes: 10%\n    # On Weekdays during business hours, don't do any deprovisioning regarding drift.\n    - nodes: \"0\"\n      schedule: \"0 9 * * mon-fri\"\n      duration: 8h\n      reasons:\n      -\tDrifted\n    # during non-business hours do drift for up to 10% of nodes\n    - nodes: \"10%\"\n      reasons:\n      -\tDrifted\n```\n{{% /alert %}}\n\n### Batching Parameters\n\nThe 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.\n\nFor 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.\n\n#### Batch Idle Duration\n\nThe batch idle duration duration 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.\n\nThis 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`.\n\n#### Batch Max Duration\n\nThe batch max duration 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.\n\nThis 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`.\n"
  },
  {
    "path": "website/content/en/v1.0/reference/threat-model.md",
    "content": "---\ntitle: \"Threat Model\"\nlinkTitle: \"Threat Model\"\nweight: 999\n---\n\nKarpenter observes Kubernetes pods and launches nodes in response to those pods’ scheduling constraints. Karpenter does not perform the actual scheduling and instead waits for [kube-scheduler](https://kubernetes.io/docs/concepts/scheduling-eviction/kube-scheduler/) to schedule the pods.\n\nWhen running in AWS, Karpenter is typically installed onto EC2 instances that run in EKS Clusters. Karpenter relies on public facing AWS APIs and standard IAM Permissions. Karpenter uses AWS-SDK-Go v1, and AWS advises that credentials are provided using [IAM Roles for Service Accounts](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html).\n\n\n## Architecture & Actors\n\n1. **Cluster Operator**: An identity that installs and configures Karpenter in a Kubernetes cluster, and configures Karpenter's cloud identity and permissions.\n2. **Cluster Developer**: An identity that can create pods, typically through Deployments, DaemonSets, or other pod-controller types.\n3. **Karpenter Controller:** The Karpenter application pod that operates inside a cluster.\n\n![threat-model](/threat-model.png)\n\n## Capabilities\n\n### Cluster Operator\n\nThe Cluster Operator has full control to install and configure Karpenter including all [`NodePools`]({{<ref \"../concepts/nodepools\" >}}) and [`EC2NodeClasses`]({{<ref \"../concepts/nodeclasses\" >}}). The Cluster Operator has privileges to manage the cloud identities and permissions for Nodes, and the cloud identity and permissions for Karpenter.\n\n### Cluster Developer\n\nA Cluster Developer has the ability to create pods via `Deployments`, `ReplicaSets`, `StatefulSets`, `Jobs`, etc. This assumes that the Cluster Developer cannot modify the Karpenter pod or launch pods using Karpenter’s service account and gain access to Karpenter’s IAM role.\n\n### Karpenter Controller\n\nKarpenter has permissions to create and manage cloud instances. Karpenter has Kubernetes API permissions to create, update, and remove nodes, as well as evict pods. For a full list of the permissions, see the RBAC rules in the helm chart template. Karpenter also has AWS IAM permissions to create instances with IAM roles.\n\n* [aggregate-clusterrole.yaml](https://github.com/aws/karpenter/blob/v1.0.11/charts/karpenter/templates/aggregate-clusterrole.yaml)\n* [clusterrole-core.yaml](https://github.com/aws/karpenter/blob/v1.0.11/charts/karpenter/templates/clusterrole-core.yaml)\n* [clusterrole.yaml](https://github.com/aws/karpenter/blob/v1.0.11/charts/karpenter/templates/clusterrole.yaml)\n* [rolebinding.yaml](https://github.com/aws/karpenter/blob/v1.0.11/charts/karpenter/templates/rolebinding.yaml)\n* [role.yaml](https://github.com/aws/karpenter/blob/v1.0.11/charts/karpenter/templates/role.yaml)\n\n## Assumptions\n\n| Category\t     | Assumption\t                                                                                                                                                                                                            | Comment\t                                                                                                                                                                                                                          |\n|---------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| Generic\t      | The Karpenter pod is operated on a node in the cluster, and uses a Service Account for authentication to the Kubernetes API\t                                                                                           | Cluster Operators may want to isolate the node running the Karpenter pod to a system-pool of nodes to mitigate the possibility of container breakout with Karpenter’s permissions. \t                                              |\n| Generic\t      | Cluster Developer does not have any Kubernetes permissions to manage Karpenter running in the cluster (The deployment, pods, clusterrole, etc)\t                                                                        | \t                                                                                                                                                                                                                                 |\n| Generic\t      | Restrictions on the fields of pods a Cluster Developer can create are out of scope. \t                                                                                                                                  | Cluster Operators can use policy frameworks to enforce restrictions on Pod capabilities\t                                                                                                                                          |\n| Generic\t      | No sensitive data is included in non-Secret resources in the Kubernetes API. The Karpenter controller has the ability to list all pods, nodes, deployments, and many other pod-controller and storage resource types.\t | Karpenter does not have permission to list/watch cluster-wide ConfigMaps or Secrets\t                                                                                                                                              |\n| Generic\t      | Karpenter has permissions to create, modify, and delete nodes from the cluster, and evict any pod. \t                                                                                                                   | Cluster Operators running applications with varying security profiles in the same cluster may want to configure dedicated nodes and scheduling rules for Karpenter to mitigate potential container escapes from other containers\t |\n| AWS-Specific\t | The Karpenter IAM policy is encoded in the GitHub repo. Any additional permissions possibly granted to that role by the administrator are out of scope\t                                                                | \t                                                                                                                                                                                                                                 |\n| AWS-Specific\t | The Karpenter pod uses IRSA for AWS credentials \t                                                                                                                                                                      | Setup of IRSA is out of scope for this document \t                                                                                                                                                                                 |\n\n## Generic Threats and Mitigations\n\n### Threat: Cluster Developer can influence creation of an arbitrary number of nodes\n\n**Background**: Karpenter creates new instances based on the count of pending pods.\n\n**Threat**: A Cluster Developer attempts to have Karpenter create more instances than intended by creating a large number of pods or by using anti-affinity to schedule one pod per node.\n\n**Mitigation**: In addition to [Kubernetes resource limits](https://kubernetes.io/docs/concepts/policy/resource-quotas/#object-count-quota), Cluster Operators can [configure limits on a NodePool]({{< ref \"../concepts/nodepools#spec-limits\" >}}) to limit the total amount of memory, CPU, or other resources provisioned across all nodes.\n\n## Threats\n\n### Threat: Using EC2 CreateTag/DeleteTag Permissions to Orchestrate Instance Creation/Deletion\n\n**Background**: As of `0.28.0`, Karpenter creates a mapping between CloudProvider instances and CustomResources in the cluster for capacity tracking. To ensure this mapping is consistent, Karpenter utilizes the following tag keys:\n\n* `karpenter.sh/managed-by`\n* `karpenter.sh/nodepool`\n* `kubernetes.io/cluster/${CLUSTER_NAME}`\n* `karpenter.sh/provisioner-name` (prior to `0.32.0`)\n\nAny user that has the ability to Create/Delete tags on CloudProvider instances will have the ability to orchestrate Karpenter to Create/Delete CloudProvider instances as a side effect.\n\nIn addition, as of `0.29.0`, Karpenter will Drift on Security Groups and Subnets. If a user has the Create/Delete tags permission for either of resources, they can orchestrate Karpenter to Create/Delete CloudProvider instances as a side effect.\n\n**Threat:** A Cluster Operator attempts to create or delete a tag on a resource discovered by Karpenter. If it has the ability to create a tag it can effectively create or delete CloudProvider instances associated with the tagged resources.\n\n**Mitigation** Cluster Operators should [enforce tag-based IAM policies](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html) on these tags against any EC2 instance resource (`i-*`) for any users that might have [CreateTags](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTags.html)/[DeleteTags](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DeleteTags.html) permissions but should not have [RunInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html)/[TerminateInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_TerminateInstances.html) permissions.\n\n### Threat: Launching EC2 instances with IAM roles not intended for Karpenter nodes\n\n**Background**: Many IAM roles in an AWS account may trust the EC2 service principal. IAM administrators must grant the `iam:PassRole` permission to IAM principals to allow those principals in the account to launch instances with specific roles.\n\n**Threat:** A Cluster Operator attempts to create an `EC2NodeClass` with an IAM role not intended for Karpenter\n\n**Mitigation**: Cluster Operators must enumerate the roles in the resource section of the IAM policy granted to the Karpenter role for the `iam:PassRole` action. Karpenter will fail to generate an instance profile if role that is specified in the `spec.role` section of the `EC2NodeClass` is not enumerated in the `iam:PassRole` permission.\n\n### Threat: Karpenter can orchestrate the creation/deletion of IAM Instance Profiles it doesn't own\n\n**Background**: Karpenter has permission to create/update/delete instance profiles as part of its controller permissions to ensure that it can auto-generate instance profiles when EC2NodeClasses are created.\n\n**Threat**: An actor who obtains control of the Karpenter pod’s IAM role may delete instance profiles not owned by Karpenter, causing workload disruption to other instances using the profile in the account.\n\n**Mitigation**: Karpenter's controller permissions enforce that it creates instance profiles with tags which provide ownership information. These tags include:\n\n* `karpenter.sh/managed-by`\n* `kubernetes.io/cluster/${CLUSTER_NAME}`\n* `karpenter.k8s.aws/ec2nodeclass`\n* `topology.kubernetes.io/region`\n\nThese tags ensure that instance profiles created by Karpenter in the account are unique to that cluster. Karpenter's controller permissions _only_ allow it to act on instance profiles that contain these tags which match the cluster information.\n\n### Threat: Karpenter can be used to create or terminate EC2 instances outside the cluster\n\n**Background**: EC2 instances can exist in an AWS account outside of the Kubernetes cluster.\n\n**Threat**: An actor who obtains control of the Karpenter pod’s IAM role may be able to create or terminate EC2 instances not part of the Kubernetes cluster managed by Karpenter.\n\n**Mitigation**: Karpenter creates instances with tags, several of which are enforced in the IAM policy granted to the Karpenter IAM role that restrict the instances Karpenter can terminate. One tag requires that the instance was provisioned by a Karpenter controller (`karpenter.sh/nodepool`), another tag can include a cluster name to mitigate any termination between two clusters with Karpenter in the same account (`kubernetes.io/cluster/${CLUSTER_NAME}`. Cluster Operators also can restrict the region to prevent two clusters in the same account with the same name in different regions.\n\nAdditionally, Karpenter does not allow tags to be modified on instances unowned by Karpenter after creation, except for the `Name` and `karpenter.sh/nodeclaim` tags. Though these tags can be changed after instance creation, `aws:ResourceTag` conditions enforce that the Karpenter controller is only able to change these tags on instances that it already owns, enforced through the `karpenter.sh/nodepool` and `kubernetes.io/cluster/${CLUSTER_NAME}` tags.\n\n### Threat: Karpenter launches an EC2 instance using an unintended AMI\n\n**Background**: Cluster Developers can create Node Templates that refer to an AMI by metadata, such as a name rather than an AMI resource ID.\n\n**Threat:** A threat actor creates a public AMI with the same name as a customer’s AMI in an attempt to get Karpenter to select the threat actor’s AMI instead of the intended AMI.\n\n**Mitigation**: When selecting AMIs by name or tags, Karpenter defaults to adding an ownership filter of `self,amazon` so AMI images external to the account are not used.\n"
  },
  {
    "path": "website/content/en/v1.0/tasks/_index.md",
    "content": "---\ntitle: \"Tasks\"\nlinkTitle: \"Tasks\"\nweight: 25\ndescription: >\n  Tasks to run with Karpenter\ncascade:\n  type: docs\n---\n\n"
  },
  {
    "path": "website/content/en/v1.0/tasks/managing-amis.md",
    "content": "---\ntitle: \"Managing AMIs\"\nlinkTitle: \"Managing AMIs\"\nweight: 10\ndescription: >\n  Task for managing AMIs in Karpenter\n---\n\n{{% alert title=\"Important\" color=\"warning\" %}}\nKarpenter __heavily recommends against__ opting-in to use an `amiSelectorTerm` with `@latest` unless you are doing this in a pre-production environment or are willing to accept the risk that a faulty AMI may cause downtime in your production clusters. In general, if using a publicly released version of a well-known AMI type (like AL2, AL2023, or Bottlerocket), we recommend that you pin to a version of that AMI and deploy newer versions of that AMI type in a staged approach when newer patch versions are available.\n\n```yaml\namiSelectorTerms:\n  - alias: al2023@v20240807\n```\n\nMore details are described in [Controlling AMI Replacement]({{< relref \"#controlling-ami-replacement\" >}}) below.\n{{% /alert %}}\n\nUnderstanding how Karpenter assigns AMIs to nodes can help ensure that your workloads will run successfully on those nodes and continue to run if the nodes are upgraded to newer AMIs.\nBelow we describe how Karpenter assigns AMIs to nodes when they are first deployed and how newer AMIs are assigned later when nodes are spun up to replace old ones.\nLater, it describes the options you have to assert control over how AMIs are used by Karpenter for your clusters.\n\nFeatures for managing AMIs described here should be considered as part of the larger upgrade policies that you have for your clusters.\nSee [How do I upgrade an EKS Cluster with Karpenter]({{< relref \"../faq/#how-do-i-upgrade-an-eks-cluster-with-karpenter\" >}}) for details on this process. \n\n## How Karpenter assigns AMIs to nodes\n\nHere is how Karpenter assigns AMIs nodes:\n\n* When you create an `EC2NodeClass`, you are required to specify [`amiSelectorTerms`]({{< relref \"../concepts/nodeclasses/#specamiselectorterms\" >}}). [`amiSelectorTerms`]({{< relref \"../concepts/nodeclasses/#specamiselectorterms\" >}}) allow you to select on AMIs that can be spun-up by this EC2NodeClass based on tags, id, name, or an alias. Multiple AMIs may be specified, and Karpenter will choose the newest compatible AMI when spinning up new nodes.\n* Some `amiSelectorTerm` types are static and always resolve to the same AMI (e.g. `id`). However, some are dynamic and may resolve to different AMIs over time. Examples of dynamic types include `alias`, `tags`, and `name` (when using a wildcard). For example, if you specify an `amiSelectorTerm` with an `alias` set to `@latest` (e.g. `al2023@latest`, `al2@latest`, or `bottlerocket@latest`), Karpenter will use the _latest_ release for that AMI type when spinning up a new node.\n* When a node is replaced, Karpenter checks to see if a newer AMI is available based on your `amiSelectorTerms`. If a newer AMI is available, Karpenter will automatically use the new AMI to spin up the new node. __In particular, if you are using a dynamic `amiSelectorTerm` type, you may get a new AMI deployed to your environment without having properly tested it.__\n\nWhenever a node is replaced, the replacement node will be launched using the newest AMI based on your `amiSelectorTerms`. Nodes may be replaced due to manual deletion, or any of Karpenter's automated methods:\n- [**Expiration**]({{< relref \"../concepts/disruption/#expiration\" >}}): Automatically initiates replacement at a certain time after the node is created.\n-  [**Consolidation**]({{< relref \"../concepts/disruption/#consolidation\" >}}): If Karpenter detects that a cheaper node can be used to run the same workloads, Karpenter may replace the current node automatically.\n- [**Drift**]({{< relref \"../concepts/disruption/#drift\" >}}): If a node's state no longer matches the desired state dictated by the `NodePool` or `EC2NodeClass`, it will be replaced, including if the node's AMI no longer matches the latest AMI selected by the `amiSelectorTerms`.\n- [**Interruption**]({{< relref \"../concepts/disruption/#interruption\" >}}): Nodes are sometimes involuntarily disrupted by things like Spot interruption, health changes, and instance events, requiring new nodes to be deployed.\n\nSee [**Automated Methods**]({{< relref \"../concepts/disruption/#automated-methods\" >}}) for details on how Karpenter uses these automated actions to replace nodes.\n\nThe most relevant automated disruption method is [**Drift**]({{< relref \"../concepts/disruption/#drift\" >}}), since it is initiated when a new AMI is selected-on by your `amiSelectorTerms`. This could be due to a manual update (e.g. a new `id` term was added), or due to a new AMI being resolved by a dynamic term.\n\nIf you're using an `alias` with the `latest` pin (e.g. `al2023@latest`), Karpenter periodically checks for new AMI releases. Since AMI releases are outside your control, this could result in new AMIs being deployed before they have been properly tested in a lower environment. This is why we **strongly recommend** using version pins in production environments when using an alias (e.g. `al2023@v20240807`).\n\n{{% alert title=\"Important\" color=\"warning\" %}}\nIf you are new to Karpenter, you should know that the behavior described here is different than you get with Managed Node Groups (MNG). MNG will always use the assigned AMI when it creates a new node and will never automatically upgrade to a new AMI when a new node is required. See [Updating a Managed Node Group](https://docs.aws.amazon.com/eks/latest/userguide/update-managed-node-group.html) to see how you would manually update MNG to use new AMIs.\n{{% /alert %}}\n\n## Controlling AMI Replacement\n\nKarpenter's automated node replacement functionality in tandem with the `EC2NodeClass` gives you a lot of flexibility to control the desired state of nodes on your cluster. For example, you can opt-in to AMI auto-upgrades using `alias` set to `@latest`; however, this has to be weighed heavily against the risk of newer versions of an AMI breaking existing applications on your cluster. Alternatively, you can choose to pin your AMIs in your production clusters to avoid the risk of breaking changes; however, this has to be weighed against the management cost of testing new AMIs in pre-production and keeping up with the latest AMI versions.\n\nKarpenter offers you various controls to ensure you don't take on too much risk as you rollout new versions of AMIs to your production clusters. Below shows how you can use these controls:\n\n* [Pinning AMIs]({{< relref \"#pinning-amis\" >}}): If workloads require a particluar AMI, this control ensures that it is the only AMI used by Karpenter. This can be used in combination with [Testing AMIs]({{< relref \"#testing-amis\" >}}) where you lock down the AMI in production, but allow the newest AMIs in a test cluster while you test your workloads before upgrading production.\n* [Testing AMIs]({{< relref \"#testing-amis\" >}}): The safest way for ensuring that a new AMI doesn't break your workloads is to test it before putting it into production. This takes the most effort on your part, but most effectively models how your workloads will run in production, allowing you to catch issues ahead of time. Note that you can sometimes get different results from your test environment when you roll a new AMI into production, since issues like scale and other factors can elevate problems you might not see in test. Combining this with other controls like [Using Disruption Budgets]({{< relref \"#using-disruption-budgets\" >}}) can allow you to catch problems before they impact your whole cluster.\n* [Using Disruption Budgets]({{< relref \"#using-disruption-budgets\" >}}): This option can be used as a way of mitigating the scope of impact if a new AMI causes problems with your workloads. With Disruption budgets you can slow the pace of upgrades to nodes with new AMIs or make sure that upgrades only happen during selected dates and times (using `schedule`). This doesn't prevent a bad AMI from being deployed, but it allows you to control when nodes are upgraded, and gives you more time to respond to rollout issues.\n\n### Pinning AMIs\n\nWhen you configure the [**EC2NodeClass**]({{< relref \"../concepts/nodeclasses\" >}}), you are required to configure which AMIs you want Karpenter to select on using the `amiSelectorTerms` field. When pinning to a specific `id`, `name`, `tags` or an `alias` that contains a fixed version, Karpenter will only select on a single AMI and won't automatically upgrade your nodes to a new version of an AMI. This prevents a new and potentially untested AMI from replacing existing nodes when those nodes are terminated.\n).\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nPinning an AMI to an `alias` type with a fixed version _will_ pin the AMI so long as your K8s control plane version doesn't change. Unlike `id` and `name` types, specifying a version `alias` in your `amiSelectorTerms` will cause Karpenter to consider the K8s control plane version of your cluster when choosing the AMI. If you upgrade your Kubernetes cluster while using this alias type, Karpenter _will_ automatically drift your nodes to a new AMI that still matches the AMI version but also matches your new K8s control plane version.\n{{% /alert %}}\n\nThese examples show three different ways to identify the same AMI:\n\n```yaml\n# Using alias\n# Pinning to this fixed version alias will pull this version of the AMI,\n# matching the K8s control plane version of your cluster\namiSelectorTerms:\n- alias: al2023@v20240219\n```\n\n```yaml\n# Using name\n# This will only ever select the AMI that contains this exact name\namiSelectorTerms:\n- name: al2023-ami-2023.3.20240219.0-kernel-6.1-x86_64\n```\n\n```yaml\n# Using id\n# This will only ever select this specific AMI id\namiSelectorTerms:\n- id: ami-052c9ea013e6e3567\n```\n\n```yaml\n# Using tags\n# You can use a CI/CD system to test newer versions of an AMI\n# and automatically tag them as you validate that they are safe to upgrade to\namiSelectorTerms:\n- tags:\n    karpenter.sh/discovery: \"${CLUSTER_NAME}\"\n    environment: prod\n```\n\nSee the [**spec.amiSelectorTerms**]({{< relref \"../concepts/nodeclasses/#specamiselectorterms\" >}}) section of the NodeClasses page for details.\nKeep in mind, that this could prevent you from getting critical security patches when new AMIs are available, but it does give you control over exactly which AMI is running.\n\n### Testing AMIs\n\nInstead of avoiding AMI upgrades, you can set up test clusters where you can try out new AMI releases before they are put into production. For example, you could have:\n\n* **Test clusters**: On lower environment clusters, you can run the latest AMIs e.g. `al2023@latest`, `al2@latest`, `bottlerocket@latest`, for your workloads in a safe environment. This ensures that you get the latest patches for AMIs where downtime to applications isn't as critical and allows you to validate patches to AMIs before they are deployed to production.\n\n* **Production clusters**: After you've confirmed that the AMI works in your lower environments, you can pin the latest AMIs to be deployed in your production clusters to roll out the AMI. Refer to [Pinning AMIs]({{< relref \"#pinning-amis\" >}}) for how to choose a particular AMI by `alias`, `name` or `id`. Remember that it is still best practice to gradually roll new AMIs into your cluster, even if they have been tested. So consider implementing that for your production clusters as described in [Using Disruption Budgets]({{< relref \"#using-disruption-budgets\" >}}).\n\n### Using Disruption Budgets\n\nTo reduce the risk of entire workloads being immediately degraded when a new AMI is deployed, you can enable Karpenter's [**Node Disruption Budgets**]({{< relref \"#node-disruption-budgets \" >}}) as well as ensure that you have [**Pod Disruption Budgets**]({{< relref \"#pod-disruption-budgets \" >}}) configured for applications on your cluster. Below provides more details on how to configure each.\n\n#### Node Disruption Budgets\n\n[Disruption Budgets]({{< relref \"../concepts/disruption/#disruption-budgets \" >}}) limit when and to what extent nodes can be disrupted. You can prevent disruption based on nodes (a percentage or number of nodes that can be disrupted at a time) and schedule (excluding certain times from disrupting nodes).\nYou can set Disruption Budgets in a `NodePool` spec. Here is an example:\n\n```yaml\ndisruption:\n  budgets:\n  - nodes: 15%\n  - nodes: \"3\"\n  - nodes: \"0\"\n    schedule: \"0 9 * * sat,sun\"\n    duration: 24h\n  - nodes: \"0\"\n    schedule: \"0 17 * * mon-fri\"\n    duration: 16h\n    reasons:\n      - Drifted\n```\n\nSettings for budgets in the above example include the following:\n\n* **Percentage of nodes**: From the first `nodes` setting, only `15%` of the NodePool’s nodes can be disrupted at a time.\n* **Number of nodes**: The second `nodes` setting limits the number of nodes that can be disrupted at a time to `3`.\n* **Schedule**: The third `nodes` setting uses schedule to say that zero disruptions (`0`) are allowed starting at 9am on Saturday and Sunday and continues for 24 (fully blocking disruptions all day).\nThe format of the schedule follows the `crontab` format for identifying dates and times.\nSee the [crontab](https://man7.org/linux/man-pages/man5/crontab.5.html) page for information on the supported values for these fields.\n* **Reasons**: The fourth `nodes` setting uses `reasons` which implies that this budget only applies to the `Drifted` disruption condition. This setting uses schedule to say that zero disruptions (`0`) are allowed starting at 5pm on Monday, Tuesday, Wednesday, Thursday, and Friday and continues for 16h (effectively blocking rolling nodes due to drift outside of working hours).\n\nAs with all disruption settings, keep in mind that avoiding updated AMIs for your nodes can result in not getting fixes for known security risks and bugs.\nYou need to balance that with your desire to not risk breaking the workloads on your cluster.\n\n#### Pod Disruption Budgets\n\n[Pod Disruption Budgets](https://kubernetes.io/docs/tasks/run-application/configure-pdb/#specifying-a-poddisruptionbudget) allow you to describe how much disruption an application can tolerate before it begins to become unhealthy. This is critical to configure for Karpenter, since Karpenter uses this information to determine if it can continue to replace nodes. Specifically, if replacing a node would cause a Pod Disruption Budget to be breached (for graceful forms of disruption e.g. Drift or Consolidation), Karpenter will not replace the node.\n\nIn a scenario where a faulty AMI is rolling out and begins causing downtime to your applications, configuring Pod Disruption Budgets is critical since this will tell Karpenter that it must stop replacing nodes until your applications become healthy again. This prevents Karpenter from deploying the faulty AMI throughout your cluster, reduces the imact the AMI has on your production applications, and gives you manually intervene in the cluster to remediate the issue.\n\n## Follow-up\n\nThe Karpenter project continues to add features to give you greater control over AMI upgrades on your clusters.\nIf you have opinions about features you would like to see to manage AMIs with Karpenter, feel free to enter a Karpenter [New Issue](https://github.com/aws/karpenter-provider-aws/issues/new/choose).\n"
  },
  {
    "path": "website/content/en/v1.0/troubleshooting.md",
    "content": "---\ntitle: \"Troubleshooting\"\nlinkTitle: \"Troubleshooting\"\nweight: 70\ndescription: >\n  Troubleshoot Karpenter problems\n---\n\n## Controller\n\n### Enable debug logging\n\nThis can be done by updating the env variable `LOG_LEVEL` Karpenter deployment and then restarting the Karpenter deployment.\n\nYou can also enable debug logging during installation with Helm by setting the option `logLevel`.\n\n```\nhelm upgrade --install karpenter oci://public.ecr.aws/karpenter/karpenter \\\n  --set logLevel=debug \\\n  ...\n```\n\n## Installation\n\n### Missing Service Linked Role\n\nUnless your AWS account has already onboarded to EC2 Spot, you will need to create the service linked role to avoid `ServiceLinkedRoleCreationNotPermitted`.\n\n```\nAuthFailure.ServiceLinkedRoleCreationNotPermitted: The provided credentials do not have permission to create the service-linked role for EC2 Spot Instances\n```\n\nThis can be resolved by creating the [Service Linked Role](https://docs.aws.amazon.com/batch/latest/userguide/spot_fleet_IAM_role.html).\n\n```\naws iam create-service-linked-role --aws-service-name spot.amazonaws.com\n```\n\n### Failed Resolving STS Credentials with I/O Timeout\n\n```bash\nChecking EC2 API connectivity, WebIdentityErr: failed to retrieve credentials\\ncaused by: RequestError: send request failed\\ncaused by: Post \\\"https://sts.us-east-1.amazonaws.com/\\\": dial tcp: lookup sts.us-east-1.amazonaws.com: i/o timeout\n```\n\nIf you see the error above when you attempt to install Karpenter, this indicates that Karpenter is unable to reach out to the STS endpoint due to failed DNS resolution. This can happen when Karpenter is running with `dnsPolicy: ClusterFirst` and your in-cluster DNS service is not yet running.\n\nYou have two mitigations to resolve this error:\n1. Let Karpenter manage your in-cluster DNS service - You can let Karpenter manage your DNS application pods' capacity by changing Karpenter's `dnsPolicy` to be `Default` (run `--set dnsPolicy=Default` with a Helm installation). This ensures that Karpenter reaches out to the [VPC DNS service](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-dns.html) when running its controllers, allowing Karpenter to start-up without the DNS application pods running, enabling Karpenter to manage the capacity for these pods.\n2. Let MNG/Fargate manage your in-cluster DNS service - If running a cluster with MNG, ensure that your group has enough capacity to support the DNS application pods and ensure that the application has the correct tolerations to schedule against the capacity. If running a cluster with Fargate, ensure that you have a [fargate profile](https://docs.aws.amazon.com/eks/latest/userguide/fargate-profile.html) that selects against your DNS application pods.\n\n### Karpenter Role names exceeding 64-character limit\n\nIf 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).\n\nNode role names for Karpenter are created in the form `KarpenterNodeRole-${Cluster_Name}` in the [Create the KarpenterNode IAM Role]({{<ref \"./getting-started/getting-started-with-karpenter/#create-the-karpenternode-iam-role\" >}}) section of the getting started guide.\nIf a long cluster name causes the Karpenter node role name to exceed 64 characters, creating that object will fail.\n\nKeep in mind that `KarpenterNodeRole-` is just a recommendation from the getting started guide.\nInstead of using the eksctl role, you can shorten the name to anything you like, as long as it has the right permissions.\n\n### Unknown field in NodePool or EC2NodeClass spec\n\nIf 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:\n\n```\nError from server (BadRequest): error when creating \"STDIN\": NodePool in version \"v1\" cannot be handled as a NodePool: strict decoding error: unknown field \"spec.template.spec.nodeClassRef.foo\"\n```\n\nIf you see this error, you can solve the problem by following the [Custom Resource Definition Upgrade Guidance](../upgrade-guide/#custom-resource-definition-crd-upgrades).\n\nInfo 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)\n\n### Unable to schedule pod due to insufficient node group instances\n\n`0.16.0` changed the default replicas from 1 to 2.\n\nKarpenter won't launch capacity to run itself (log related to the `karpenter.sh/nodepool DoesNotExist requirement`)\nso it can't provision for the second Karpenter pod.\n\nTo 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 to run both pods.\n\nTo do so on AWS increase the `minimum` and `desired` parameters on the node group autoscaling group to launch at lease 2 instances.\n\n### Helm Error When Pulling the Chart\n\nIf Helm is showing an error when trying to install Karpenter Helm charts:\n\n- Ensure you are using a newer Helm version, Helm started supporting OCI images since `3.8.0`.\n- Helm does not have an `helm repo add` concept in OCI, so to install Karpenter you no longer need this.\n- If you get an error like `Error: public.ecr.aws/karpenter/karpenter:0.34.0: not found` make sure you're adding a `v` prefix for Karpenter versions between `0.17.0` & `0.34.x`.\n- Verify that the image you are trying to pull actually exists in [gallery.ecr.aws/karpenter](https://gallery.ecr.aws/karpenter/karpenter)\n- 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\n- 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).\n\n### Helm Error when installing the `karpenter-crd` chart\n\nKarpenter `0.26.1` introduced the `karpenter-crd` Helm chart. When installing this chart on your cluster, if you have previously added the Karpenter CRDs to your cluster through the `karpenter` controller chart or through `kubectl replace`, Helm will reject the install of the chart due to `invalid ownership metadata`.\n\n- In the case of `invalid ownership metadata; label validation error: missing key \"app.kubernetes.io/managed-by\": must be set to \"Helm\"` run:\n\n```shell\nkubectl label crd ec2nodeclasses.karpenter.k8s.aws nodepools.karpenter.sh nodeclaims.karpenter.sh app.kubernetes.io/managed-by=Helm --overwrite\n```\n\n- In the case of `annotation validation error: missing key \"meta.helm.sh/release-namespace\": must be set to \"karpenter\"` run:\n\n```shell\nKARPENTER_NAMESPACE=kube-system\nkubectl annotate crd ec2nodeclasses.karpenter.k8s.aws nodepools.karpenter.sh nodeclaims.karpenter.sh meta.helm.sh/release-name=karpenter-crd --overwrite\nkubectl annotate crd ec2nodeclasses.karpenter.k8s.aws nodepools.karpenter.sh nodeclaims.karpenter.sh meta.helm.sh/release-namespace=\"${KARPENTER_NAMESPACE}\" --overwrite\n```\n\n## Uninstallation\n\n### Unable to delete nodes after uninstalling Karpenter\n\nKarpenter 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.\n\nYou can fix this by patching the node objects:\n\n- `kubectl edit node <node_name>` and remove the line that says `karpenter.sh/termination` in the finalizers field.\n- Run the following script that gets all nodes with the finalizer and removes all the finalizers from those nodes.\n  - NOTE: this will remove ALL finalizers from nodes with the karpenter finalizer.\n\n```bash\nkubectl 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\"}]'\n```\n\n## Provisioning\n\n### Instances with swap volumes fail to register with control plane\n\nSome instance types (c1.medium and m1.small) are given limited amount of memory (see [Instance Store swap volumes](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-store-swap-volumes.html)). They are subsequently configured to use a swap volume, which will cause the kubelet to fail on launch. The following error can be seen in the systemd logs:\n\n```bash\n\"command failed\" err=\"failed to run Kubelet: running with swap on is not supported, please disable swap!...\"\n```\n\n##### Solutions\nDisabling swap will allow kubelet to join the cluster successfully, however users should be mindful of performance, and consider adjusting the NodePool requirements to use larger instance types.\n\n### DaemonSets can result in deployment failures\n\nFor Karpenter versions `0.5.3` and earlier, DaemonSets were not properly considered when provisioning nodes.\nThis sometimes caused nodes to be deployed that could not meet the needs of the requested DaemonSets and workloads.\nThis issue no longer occurs after Karpenter version `0.5.3` (see [PR #1155](https://github.com/aws/karpenter/pull/1155)).\n\nIf you are using a pre `0.5.3` version of Karpenter, one workaround is to set your NodePool to only use larger instance types that you know will be big enough for the DaemonSet and the workload.\nFor more information, see [Issue #1084](https://github.com/aws/karpenter/issues/1084).\nExamples of this behavior are included in [Issue #1180](https://github.com/aws/karpenter/issues/1180).\n\n### Unspecified resource requests cause scheduling/bin-pack failures\n\nNot 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.\nThis can cause issues as Karpenter bin-packs pods based on the resource requests.\n\nIf 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.\nThis behavior is not unique to Karpenter and can also occur with the standard `kube-scheduler` with pods that don't have accurate resource requests.\n\nTo prevent this, you can set LimitRanges on pod deployments on a per-namespace basis.\nSee 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.\n\n### Pods using Security Groups for Pods stuck in \"ContainerCreating\" state for up to 30 minutes before transitioning to \"Running\"\n\nWhen 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\".\nThis 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.\nMore info can be found in [issue #1252](https://github.com/aws/karpenter/issues/1252).\n\nTo workaround this problem, add the `vpc.amazonaws.com/has-trunk-attached: \"false\"` label in your Karpenter NodePool 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).\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\nspec:\n  template\n    metadata:\n      labels:\n        vpc.amazonaws.com/has-trunk-attached: \"false\"\n```\n\n### Pods using PVCs can hit volume limits and fail to scale-up\n\nWhen attempting to schedule a large number of pods with PersistentVolumes, it's possible that these pods will co-locate on the same node. Pods will report the following errors in their events using a `kubectl describe pod` call\n\n```bash\nWarning   FailedAttachVolume    pod/example-pod                      AttachVolume.Attach failed for volume \"***\" : rpc error: code = Internal desc = Could not attach volume \"***\" to node \"***\": attachment of disk \"***\" failed, expected device to be attached but was attaching\nWarning   FailedMount           pod/example-pod                      Unable to attach or mount volumes: unmounted volumes=[***], unattached volumes=[***]: timed out waiting for the condition\n```\n\nIn this case, Karpenter may fail to scale-up your nodes due to these pods due to one of the following reasons:\n\n#### Pods were not scheduled but Karpenter couldn't discover limits\n\nKarpenter does not support [in-tree storage plugins](https://kubernetes.io/blog/2021/12/10/storage-in-tree-to-csi-migration-status-update/) to provision PersistentVolumes, since nearly all of the in-tree plugins have been deprecated in upstream Kubernetes. This means that, if you are using a statically-provisioned PersistentVolume that references a volume source like `AWSElasticBlockStore` or a dynamically-provisioned PersistentVolume that references a StorageClass with a in-tree storage plugin provisioner like `kubernetes.io/aws-ebs`, Karpenter will fail to discover the maxiumum volume attachments for the node. Instead, Karpenter may think the node still has more schedulable space due to memory and cpu constraints when there is really no more schedulable space on the node due to volume limits. When Karpenter sees you are using an in-tree storage plugin on your pod volumes, it will print the following error message into the logs. If you see this message, upgrade your StorageClasses and statically-provisioned PersistentVolumes to use the latest CSI drivers for your cloud provider.\n\n```bash\n2023-04-05T23:56:53.363Z        ERROR   controller.node_state   PersistentVolume source 'AWSElasticBlockStore' uses an in-tree storage plugin which is unsupported by Karpenter and is deprecated by Kubernetes. Scale-ups may fail because Karpenter will not discover driver limits. Use a PersistentVolume that references the 'CSI' volume source for Karpenter auto-scaling support.       {\"commit\": \"b2af562\", \"node\": \"ip-192-168-36-137.us-west-2.compute.internal\", \"pod\": \"inflate0-6c4bdb8b75-7qmfd\", \"volume\": \"mypd\", \"persistent-volume\": \"pvc-11db7489-3c6e-46f3-a958-91f9d5009d41\"}\n2023-04-05T23:56:53.464Z        ERROR   controller.node_state   StorageClass .spec.provisioner uses an in-tree storage plugin which is unsupported by Karpenter and is deprecated by Kubernetes. Scale-ups may fail because Karpenter will not discover driver limits. Create a new StorageClass with a .spec.provisioner referencing the CSI driver plugin name 'ebs.csi.aws.com'.     {\"commit\": \"b2af562\", \"node\": \"ip-192-168-36-137.us-west-2.compute.internal\", \"pod\": \"inflate0-6c4bdb8b75-7qmfd\", \"volume\": \"mypd\", \"storage-class\": \"gp2\", \"provisioner\": \"kubernetes.io/aws-ebs\"}\n```\n\n#### Pods were scheduled due to a race condition in Kubernetes\n\nDue to [this race condition in Kubernetes](https://github.com/kubernetes/kubernetes/issues/95911), it's possible that the scheduler and the CSINode can race during node registration such that the scheduler assumes that a node can mount more volumes than the node attachments support. There is currently no universal solve for this problem other than enforcing `topologySpreadConstraints` and `podAntiAffinity` on your workloads that use PVCs such that you attempt to reduce the number of PVCs that schedule to a given node.\n\nThe following is a list of known CSI drivers which support a startupTaint to eliminate this issue:\n- [aws-ebs-csi-driver](https://github.com/kubernetes-sigs/aws-ebs-csi-driver/blob/master/docs/install.md#configure-node-startup-taint)\n- [aws-efs-csi-driver](https://github.com/kubernetes-sigs/aws-efs-csi-driver/tree/master/docs#configure-node-startup-taint)\n\nThese taints should be configured via `startupTaints` on your `NodePool`. For example, to enable this for EBS, add the following to your `NodePool`:\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nspec:\n  template:\n    spec:\n      startupTaints:\n        - key: ebs.csi.aws.com/agent-not-ready\n          effect: NoExecute\n```\n\n### CNI is unable to allocate IPs to pods\n\n_Note: This troubleshooting guidance is specific to the VPC CNI that is shipped by default with EKS clusters. If you are using a custom CNI, some of this guidance may not apply to your cluster._\n\nWhenever a new pod is assigned to a node, the CNI will assign an IP address to that pod (assuming it isn't using host networking), allowing it to communicate with other pods on the cluster. It's possible for this IP allocation and assignment process to fail for a number of reasons. If this process fails, you may see an error similar to the one below.\n\n```bash\ntime=2023-06-12T19:18:15Z type=Warning reason=FailedCreatePodSandBox from=kubelet message=Failed to create pod sandbox: rpc error: code = Unknown desc = failed to setup network for sandbox \"0f46f3f1289eed7afab81b6945c49336ef556861fe5bb09a902a00772848b7cc\": plugin type=\"aws-cni\" name=\"aws-cni\" failed (add): add cmd: failed to assign an IP address to container\n```\n\n#### `maxPods` is greater than the node's supported pod density\n\nBy 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.\n\nIf the max-pods (configured through your EC2NodeClass [`kubeletConfiguration`]({{<ref \"./concepts/nodeclasses/#speckubelet\" >}})) is greater than the number of supported IPs for a given instance type, the CNI will fail to assign an IP to the pod and your pod will be left in a `ContainerCreating` state.\n\nIf you've enabled [Security Groups per Pod](https://aws.github.io/aws-eks-best-practices/networking/sgpp/), one of the instance's ENIs is reserved as the trunk interface and uses branch interfaces off of that trunk interface to assign different security groups.\nIf you do not have any `SecurityGroupPolicies` configured for your pods, they will be unable to utilize branch interfaces attached to the trunk interface, and IPs will only be available from the non-trunk ENIs.\nThis effectively reduces the max-pods value by the number of IPs that would have been available from the trunk ENI.\nNote that Karpenter is not aware if [Security Groups per Pod](https://aws.github.io/aws-eks-best-practices/networking/sgpp/) is enabled, and will continue to compute max-pods assuming all ENIs on the instance can be utilized.\n\n##### Solutions\n\nTo avoid this discrepancy between `maxPods` and the supported pod density of the EC2 instance based on ENIs and allocatable IPs, you can perform one of the following actions on your cluster:\n\n1. Enable [Prefix Delegation](https://docs.aws.amazon.com/eks/latest/userguide/cni-increase-ip-addresses.html) to increase the number of allocatable IPs for the ENIs on each instance type\n2. Reduce your `maxPods` value to be under the maximum pod density for the instance types assigned to your NodePods\n3. Remove the `maxPods` value from your [`kubeletConfiguration`]({{<ref \"./concepts/nodeclasses#speckubeletconfiguration\" >}}) if you no longer need it and instead rely on the defaulted values from Karpenter and EKS AMIs.\n4. Set [RESERVED_ENIS]({{<ref \"./reference/settings\" >}})=1 in your Karpenter configuration to account for the reserved ENI when using Security Groups for Pods.\n\nFor more information on pod density, view the [Pod Density Section in the NodePools doc]({{<ref \"./concepts/nodeclasses#pod-density\" >}}).\n\n#### IP exhaustion in a subnet\n\nWhen a node is launched by Karpenter, it is assigned to a subnet within your VPC based on the [`subnetSelector`]({{<ref \"./concepts/nodeclasses#specsubnetselector\" >}}) value in your [`EC2NodeClass`]({{<ref \"./concepts/nodeclasses\" >}})). When a subnet becomes IP address constrained, EC2 may think that it can successfully launch an instance in the subnet; however, when the CNI tries to assign IPs to the pods, there are none remaining. In this case, your pod will stay in a `ContainerCreating` state until an IP address is freed in the subnet and the CNI can assign one to the pod.\n\n##### Solutions\n\n1. Use `topologySpreadConstraints` on `topology.kubernetes.io/zone` to spread your pods and nodes more evenly across zones\n2. Increase the IP address space (CIDR) for the subnets selected by your `EC2NodeClass`\n3. Use [custom networking](https://docs.aws.amazon.com/eks/latest/userguide/cni-custom-network.html) to assign separate IP address spaces to your pods and your nodes\n4. [Run your EKS cluster on IPv6](https://aws.github.io/aws-eks-best-practices/networking/ipv6/) (Note: IPv6 clusters have some known limitations which should be well-understood before choosing to use one)\n\nFor more troubleshooting information on why your pod may have a `FailedCreateSandbox` error, view the [EKS CreatePodSandbox Knowledge Center Post](https://repost.aws/knowledge-center/eks-failed-create-pod-sandbox).\n\n### Windows pods are failing with `FailedCreatedPodSandbox`\n\nThe following solution(s) may resolve your issue if you are seeing an error similar to the following when attempting to launch Windows pods. This error typically occurs if you have not enabled Windows support.\n\n```\nFailed to create pod sandbox: rpc error: code = Unknown desc = failed to setup network for sandbox \"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\": plugin type=\"vpc-bridge\" name=\"vpc\" failed (add): failed to parse Kubernetes args: pod does not have label vpc.amazonaws.com/PrivateIPv4Address\n```\n\n#### Solutions\n1. See [Enabling Windows support](https://docs.aws.amazon.com/eks/latest/userguide/windows-support.html#enable-windows-support) for instructions on how to enable Windows support.\n\n### Windows pods fail to launch with image pull error\n\nThe following solution(s) may resolve your issue if you are seeing an error similar to the following when attempting to launch Windows pods.\n\n```\nFailed to pull image \"mcr.microsoft.com/windows/servercore:xxx\": rpc error: code = NotFound desc = failed to pull and unpack image \"mcr.microsoft.com/windows/servercore:xxx\": no match for platform in manifest: not found\n```\n\nThis error typically occurs in a scenario whereby a pod with a given container OS version attempts to be scheduled on an incompatible Windows host OS version.\nWindows requires the host OS version to match the container OS version.\n\n#### Solutions\n\n1. Define your pod's `nodeSelector` to ensure that your containers are scheduled on a compatible OS host version. To learn more, see [Windows container version compatibility](https://learn.microsoft.com/en-us/virtualization/windowscontainers/deploy-containers/version-compatibility).\n\n### Windows pods unable to resolve DNS\nCauses for DNS resolution failure may vary, but in the case where DNS resolution is working for Linux pods but not for Windows pods,\nthen the following solution(s) may resolve your issue.\n\n#### Solution(s)\n1. Verify that the instance role of the Windows node includes the RBAC permission group `eks:kube-proxy-windows` as shown below.\n   This group is required for Windows nodes because in Windows, `kube-proxy` runs as a process on the node, and as such, the node requires the necessary RBAC cluster permissions to allow access to the resources required by `kube-proxy`.\n   For more information, see https://docs.aws.amazon.com/eks/latest/userguide/windows-support.html.\n```yaml\n...\n  username: system:node:{{EC2PrivateDNSName}}\n  groups:\n    - system:bootstrappers\n    - system:nodes\n    - eks:kube-proxy-windows # This is required for Windows DNS resolution to work\n...\n```\n\n### Karpenter incorrectly computes available resources for a node\n\nWhen creating nodes, the allocatable resources Karpenter computed (as seen in logs and `nodeClaim.status.allocatable`) do not always match the allocatable resources on the created node (`node.status.allocatable`).\nKarpenter uses the results from `ec2:DescribeInstanceTypes` to determine the resources available on a node launched with a given instance type.\nThe following computation is used to determine allocatable CPU, memory, and ephemeral storage based on the results returned from `ec2:DescribeInstanceTypes`.\n\n```\nnodeClaim.allocatable.cpu = instance.cpu - kubeReserved.cpu - systemReserved.cpu\nnodeClaim.allocatable.memory = (instance.memory * (1.0 - VM_MEMORY_OVERHEAD_PERCENT)) - kubeReserved.memory - systemReserved.memory - max(evictionSoft.memory.available, evictionHard.memory.available)\nnodeClaim.allocatable.ephemeralStorage = instance.storage - kubeReserved.ephemeralStorage - systemReserved.ephemeralStorage - max(evictionSoft.nodefs.available, evictionHard.nodefs.available)\n```\n\nMost of these factors directly model user configuration (i.e. the KubeletConfiguration options).\nOn the other hand, `VM_MEMORY_OVERHEAD_PERCENT` models an implicit reduction of available memory that varies by instance type and AMI.\nKarpenter can't compute the exact value being modeled, so `VM_MEMORY_OVERHEAD_PERCENT` is a [global setting]({{< ref \"./reference/settings.md\" >}}) used across all instance type and AMI combinations.\nThe default value (`7.5%`) has been tuned to closely match reality for the majority of instance types while not overestimating.\nAs a result, Karpenter will typically underestimate the memory availble on a node for a given instance type.\nIf you know the real `VM_MEMORY_OVERHEAD_PERCENT` for the specific instances you're provisioning in your cluster, you can tune this value to tighten the bound.\nHowever, this should be done with caution.\nA `VM_MEMORY_OVERHEAD_PERCENT` which results in Karpenter overestimating the memory available on a node can result in Karpenter launching nodes which are too small for your workload.\nIn the worst case, this can result in an instance launch loop and your workload remaining unschedulable indefinitely.\n\nTo detect instances of Karpenter overestimating resource availability, the following status condition can be monitored:\n\n```bash\n$ kg nodeclaim $NODECLAIM_NAME -o jsonpath='{.status.conditions[?(@.type==\"ConsistentStateFound\")]}'\n```\n\n```json\n{\n    \"type\": \"ConsistentStateFound\",\n    \"status\": \"False\",\n    \"reason\": \"ConsistencyCheckFailed\",\n    \"message\": \"Consistency Check Failed\",\n    \"lastTransitionTime\": \"2024-08-19T20:02:16Z\"\n}\n```\n\nThis can be spot checked like shown above, or monitored via the following metric:\n\n```\noperator_status_condition_count{type=\"ConsistentStateFound\",kind=\"NodeClaim\",status=\"False\"}\n```\n\n### Karpenter Is Unable to Satisfy Topology Spread Constraint\n\nWhen scheduling pods with TopologySpreadConstraints, Karpenter will attempt to spread the pods across all eligible domains.\nEligible domains are determined based on the pod's requirements, e.g. node affinity terms.\nHowever, pod's do not inherit the requirements of compatible NodePools.\n\nFor example, consider the following NodePool and Deployment specs:\n\n```yaml\nappVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\nspec:\n  template:\n    spec:\n      requirements:\n      - key: topology.kubernetes.io/zone\n        operator: Exists\n---\nappVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: np-zonal-constraint\n  labels:\n    project: zone-specific-project\nspec:\n  template:\n    spec:\n      requirements:\n      - key: topology.kubernetes.io/zone\n        operator: In\n        values: ['us-east-1a', 'us-east-1b']\n      # ...\n---\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: inflate\nspec:\n  replicas: 3\n  selector:\n    matchLabels:\n      app: inflate\n  template:\n    metadata:\n      labels:\n        app: inflate\n    spec:\n      nodeSelector:\n        project: zone-specific-project\n      topologySpreadConstraints:\n        - maxSkew: 1\n          topologyKey: topology.kubernetes.io/zone\n          whenUnsatisfiable: DoNotSchedule\n          labelSelector:\n            matchLabels:\n              app: inflate\n```\n\nThis cluster has subnets in three availability zones: `us-east-1a`, `us-east-1b`, and `us-east-1c`.\nNodePool `default` can launch instance types in all three zones, but `np-zonal-constraint` is constrained to two.\nSince Karpenter uses the pod's requirements to derive eligible domains, and the pod does not have any zonal constraints, all three availability zones are considered eligible domains.\nHowever, the only NodePool compatible with the pod's requirements is `np-zonal-constraints`, which can only create instances in two of the three eligible domains.\nKarpenter will succeed to launch the first two instances, for the first two replicas, but will fail to provision capacity for subsequent replicas since it can't provision capacity in the third domain.\n\nIn order to prevent these scenarios, you should ensure that all eligible domains for a pod can be provisioned by compatible NodePools, or constrain the pod such that it's eligble domains match those of the NodePools.\nTo resolve this specific issue, zonal constraints should be added to the pod spec to match the requirements of `np-zonal-constraint`:\n```yaml\nnodeAffinity:\n  requiredDuringSchedulingIgnoredDuringExecution:\n    nodeSelectorTerms:\n      - matchExpressions:\n          - key: topology.kubernetes.io/zone\n            operator: In\n            values: ['us-east-1a', 'us-east-1b']\n```\n\n### Log message of `no instance type met the scheduling requirements or had a required offering` is reported\n\nThis error suggests that there is no instance type available that meets the pod's scheduling requirements. A pod may have resource requests that necessitate a minimum instance size. If the pod is confined to a Node Pool with a specific instance family and size, it might not find an instance type that aligns with its resource needs. Additionally, resource requests from daemonsets are considered when determining if an instance type is compatible with the pod.\n\n\nThe phrase `had a required offering` pertains to the availability of an instance type in a specific location, such as an availability zone. This error can occur if a pod is restricted to a particular availability zone. For instance, consider a pod in a stateful set that previously had an EBS volume attached. If the subnet where the pod is scheduled changes, the pod might end up in a different availability zone than the EBS volume it needs to attach to. This mismatch in availability zones can lead to an error related to the required offering.\n\n## Deprovisioning\n\n### Nodes not deprovisioned\n\nThere 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.\n\n#### Initialization\n\nKarpenter 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]({{<ref \"#nodes-not-initialized\" >}}).\n\n#### Disruption budgets\n\nKarpenter 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.\nKubernetes PDBs let you specify how much of a Deployment, ReplicationController, ReplicaSet, or StatefulSet must be protected from disruptions when pod eviction requests are made.\n\nPDBs can be used to strike a balance by protecting the application's availability while still allowing a cluster administrator to manage the cluster.\nHere 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.\n\n```yaml\napiVersion: policy/v1\nkind: PodDisruptionBudget\nmetadata:\n  name: myapp-pdb\nspec:\n  minAvailable: 4\n  selector:\n    matchLabels:\n      app: myapp\n```\n\nYou can set `minAvailable` or `maxUnavailable` as integers or as a percentage.\nReview 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/).\n\n#### `karpenter.sh/do-not-disrupt` Annotation\n\nIf a pod exists with the annotation `karpenter.sh/do-not-disrupt: 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-disrupt` 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.\n\nIf you want to terminate a node with a `do-not-disrupt` pod, you can simply remove the annotation and the deprovisioning process will continue.\n\n#### Scheduling Constraints (Consolidation Only)\n\nConsolidation 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.\n\n## Node Launch/Readiness\n\n### Node not created\n\nIn some circumstances, Karpenter controller can fail to start up a node.\nFor 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:\n\n```bash\n2022-01-19T18:22:23.366Z ERROR controller.provisioning Could not launch node, launching instances, with fleet error(s), InvalidBlockDeviceMapping: Invalid device name /dev/xvda; ...\n```\n\nYou can see errors like this by viewing Karpenter controller logs:\n\n```bash\nkubectl get pods -A | grep karpenter\n```\n\n```bash\nkarpenter     karpenter-XXXX   2/2     Running   2          21d\n```\n\n```bash\nkubectl logs karpenter-XXXX -c controller -n karpenter | less\n```\n\n### Nodes not initialized\n\nKarpenter 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.\n\nKarpenter determines node initialization using three factors:\n\n1. Node readiness\n2. Expected resources are registered\n3. NodePool startup taints are removed\n\n#### Node Readiness\n\nKarpenter checks the `Ready` condition type and expects it to be `True`.\n\nTo see troubleshooting around what might be preventing nodes from becoming ready, see [Node NotReady]({{<ref \"#node-notready\" >}})\n\n#### Expected resources are registered\n\nKarpenter 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`.\n\nCommon resources that don't register and leave nodes in a non-initialized state:\n\n1. `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\n2. `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.\n\n#### NodePool startup taints are removed\n\nKarpenter expects all startup taints specified in `.spec.template.spec.startupTaints` of the NodePool to be completely removed from node `.spec.taints` before it will consider the node initialized.\n\n### Node NotReady\n\nThere are cases where the node starts, but fails to join the cluster and is marked \"Node NotReady\".\nReasons that a node can fail to join the cluster include:\n\n- Permissions\n- Security Groups\n- Networking\n\nThe easiest way to start debugging is to connect to the instance and get the Kubelet logs.  For an AL2 based node:\n\n```bash\n# List the nodes managed by Karpenter\nkubectl get node -l karpenter.sh/nodepool\n# Extract the instance ID (replace <node-name> with a node name from the above listing)\nINSTANCE_ID=$(kubectl get node <node-name> -ojson | jq -r \".spec.providerID\" | cut -d \\/ -f5)\n# Connect to the instance\naws ssm start-session --target $INSTANCE_ID\n# Check Kubelet logs\nsudo journalctl -u kubelet\n```\n\nFor Bottlerocket, you'll need to get access to the root filesystem:\n\n```bash\n# List the nodes managed by Karpenter\nkubectl get node -l karpenter.sh/nodepool\n# Extract the instance ID (replace <node-name> with a node name from the above listing)\nINSTANCE_ID=$(kubectl get node <node-name> -ojson | jq -r \".spec.providerID\" | cut -d \\/ -f5)\n# Connect to the instance\naws ssm start-session --target $INSTANCE_ID\n# Enter the admin container\nenter-admin-container\n# Check Kubelet logs\njournalctl -D /.bottlerocket/rootfs/var/log/journal -u kubelet.service\n```\n\nHere are examples of errors from Node NotReady issues that you might see from `journalctl`:\n\n- The runtime network not being ready can reflect a problem with IAM role permissions:\n\n  ```\n  KubeletNotReady runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:Network plugin returns error: cni plugin not initialized\n    ```\n\n  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:\n\n  ```bash\n  kubectl get pods -n kube-system | grep aws-node\n  ```\n\n  ```\n  aws-node-?????             1/1     Running   2          20d\n  ```\n\n  ```bash\n  kubectl logs aws-node-????? -n kube-system\n  ```\n\n- Not being able to register the node with the Kubernetes API server indicates an error condition like the following:\n\n  ```\n  Attempting to register node\" node=\"ip-192-168-67-130.ec2.internal\"\n  Unable to register node with API server\" err=\"Unauthorized\" node=\"ip-192-168-67-130.ec2.internal\"\n  Error getting node\" err=\"node \\\"ip-192-168-67-130.ec2.internal\\\" not found\n  Failed to contact API server when waiting for CSINode publishing: Unauthorized\n  ```\n\n  Check the ConfigMap to check whether or not the correct node role is there. For example:\n\n  ```bash\n  kubectl get configmaps -n kube-system aws-auth -o yaml\n  ```\n\n  ```yaml\n  apiVersion: v1\n  data:\n  mapRoles: |\n     - groups:\n        - system:bootstrappers\n        - system:nodes\n        rolearn: arn:aws:iam::973227887653:role/eksctl-johnw-karpenter-demo-NodeInstanceRole-72CV61KQNOYS\n        username: system:node:{{EC2PrivateDNSName}}\n     - groups:\n        - system:bootstrappers\n        - system:nodes\n        rolearn: arn:aws:iam::973227887653:role/KarpenterNodeRole-johnw-karpenter-demo\n        username: system:node:{{EC2PrivateDNSName}}\n  mapUsers: |\n      []\n  kind: ConfigMap\n  ...\n    ```\n\nIf 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:\n\n- Your UserData (in `/var_log/cloud-init-output.log` and `/var_log/cloud-init.log`)\n- Your kubelets (`/kubelet/kubelet.log`)\n- Your networking pod logs (`/var_log/aws-node`)\n\nReach 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.\n\n### Nodes stuck in pending and not running the kubelet due to outdated CNI\n\nIf 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`:\n\n> No entry for c6i.xlarge in /etc/eks/eni-max-pods.txt\n\nThis 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).\n\n### Node terminates before ready on failed encrypted EBS volume\n\nIf 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.\nThis issue also applies to [Block Device Mappings]({{<ref \"./concepts/nodeclasses/#block-device-mappings\" >}}) specified in the EC2NodeClass.\nIn either case, this results in the node terminating almost immediately upon creation.\n\nKeep in mind that it is possible that EBS Encryption can be enabled without your knowledge.\nEBS encryption could have been enabled by an account administrator or by default on a per region basis.\nSee [Encryption by default](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html#encryption-by-default) for details.\n\nTo 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:\n\n```json\n[\n    {\n        \"Sid\": \"Allow access through EBS for all principals in the account that are authorized to use EBS\",\n        \"Effect\": \"Allow\",\n        \"Principal\": {\n            \"AWS\": \"*\"\n        },\n        \"Action\": [\n            \"kms:Encrypt\",\n            \"kms:Decrypt\",\n            \"kms:ReEncrypt*\",\n            \"kms:GenerateDataKey*\",\n            \"kms:CreateGrant\",\n            \"kms:DescribeKey\"\n        ],\n        \"Resource\": \"*\",\n        \"Condition\": {\n            \"StringEquals\": {\n            \"kms:ViaService\": \"ec2.${AWS_REGION}.amazonaws.com\",\n            \"kms:CallerAccount\": \"${AWS_ACCOUNT_ID}\"\n            }\n        }\n    },\n    {\n        \"Sid\": \"Allow direct access to key metadata to the account\",\n        \"Effect\": \"Allow\",\n        \"Principal\": {\n            \"AWS\": \"arn:aws:iam::${AWS_ACCOUNT_ID}:root\"\n        },\n        \"Action\": [\n            \"kms:Describe*\",\n            \"kms:Get*\",\n            \"kms:List*\",\n            \"kms:RevokeGrant\"\n        ],\n        \"Resource\": \"*\"\n    }\n]\n```\n\n### Node is not deleted, even though `ttlSecondsUntilExpired` is set or the node is empty\n\nThis 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.\n\n### Log message of `inflight check failed for node, Expected resource \"vpc.amazonaws.com/pod-eni\" didn't register on the node` is reported\n\nThis error indicates that the `vpc.amazonaws.com/pod-eni` resource was never reported on the node. 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.\n\n### AWS Node Termination Handler (NTH) interactions\nKarpenter [doesn't currently support draining and terminating on spot rebalance recommendations]({{< ref \"concepts/disruption#interruption\" >}}). Users who want support for both drain and terminate on spot interruption as well as drain and termination on spot rebalance recommendations may install Node Termination Handler (NTH) on their clusters to support this behavior.\n\nThese two components do not share information between each other, meaning if you have drain and terminate functionality enabled on NTH, NTH may remove a node for a spot rebalance recommendation. Karpenter will replace the node to fulfill the pod capacity that was being fulfilled by the old node; however, Karpenter won't be aware of the reason that that node was terminated. This means that Karpenter may launch the same instance type that was just deprovisioned, causing a spot rebalance recommendation to be sent again. This can result in very short-lived instances where NTH continually removes nodes and Karpeneter re-launches the same instance type over and over again.\n\nKarpenter doesn't recommend reacting to spot rebalance recommendations when running Karpenter with spot nodes; however, if you absolutely require this functionality, note that the above scenario is possible.\nSpot instances are time limited and, therefore, interruptible. When a signal is sent by AWS, it triggers actions from NTH and Karpenter, where the former signals a shutdown and the later provisions, creating a recursive situation.\nThis can be mitigated by either completely removing NTH or by setting the following values:\n\n* enableSpotInterruptionDraining: If false, do not drain nodes when the spot interruption termination notice is received. Only used in IMDS mode.\nenableSpotInterruptionDraining: false\n\n* enableRebalanceDrainin: If true, drain nodes when the rebalance recommendation notice is received. Only used in IMDS mode.\nenableRebalanceDraining: false\n\n## Pricing\n\n### Stale pricing data on isolated subnet\n\nThe following pricing-related error occurs if you are running Karpenter in an isolated private subnet (no Internet egress via IGW or NAT gateways):\n\n```text\nERROR   controller.aws.pricing  updating on-demand pricing, RequestError: send request failed\ncaused by: Post \"https://api.pricing.us-east-1.amazonaws.com/\": dial tcp 52.94.231.236:443: i/o timeout; RequestError: send request failed\ncaused 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\"}\n```\n\nThis 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).\nTo 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.\nTo disable pricing lookups and avoid the error messages, set the `AWS_ISOLATED_VPC` environment variable (or the `--aws-isolated-vpc` option) to true.\nSee [Environment Variables / CLI Flags]({{<ref \"./reference/settings#environment-variables--cli-flags\" >}}) for details.\n"
  },
  {
    "path": "website/content/en/v1.0/upgrading/_index.md",
    "content": "---\ntitle: \"Upgrading\"\nlinkTitle: \"Upgrading\"\nweight: 30\ndescription: >\n  Upgrading Karpenter guide and reference\ncascade:\n  type: docs\n---\n\n"
  },
  {
    "path": "website/content/en/v1.0/upgrading/compatibility.md",
    "content": "---\ntitle: \"Compatibility\"\nlinkTitle: \"Compatibility\"\nweight: 20\ndescription: >\n  Compatibility issues for Karpenter\n---\n\n# Compatibility\n\nTo make upgrading easier we aim to minimize the introduction of breaking changes.\nBefore you begin upgrading Karpenter, consider Karpenter compatibility issues related to Kubernetes and the NodePool API (previously Provisioner).\n\n## Compatibility Matrix\n\n[comment]: <> (the content below is generated from hack/docs/compataiblitymetrix_gen_docs.go)\n\n| KUBERNETES |   1.25   |   1.26   |   1.27   |   1.28   |   1.29   |   1.30   |   1.31    |\n|------------|----------|----------|----------|----------|----------|----------|-----------|\n| karpenter  | \\>= 0.25 | \\>= 0.28 | \\>= 0.28 | \\>= 0.31 | \\>= 0.34 | \\>= 0.37 | \\>= 1.0.5 |\n\n[comment]: <> (end docs generated content from hack/docs/compataiblitymetrix_gen_docs.go)\n\n{{% alert title=\"Note\" color=\"warning\" %}}\nKarpenter currently does not support the following [new `topologySpreadConstraints` keys](https://kubernetes.io/blog/2023/04/17/fine-grained-pod-topology-spread-features-beta/), promoted to beta in Kubernetes 1.27:\n- `matchLabelKeys`\n- `nodeAffinityPolicy`\n- `nodeTaintsPolicy`\n\nFor more information on Karpenter's support for these keys, view [this tracking issue](https://github.com/aws/karpenter-core/issues/430).\n{{% /alert %}}\n\n{{% alert title=\"Note\" color=\"warning\" %}}\nKarpenter supports using [Kubernetes Common Expression Language](https://kubernetes.io/docs/reference/using-api/cel/) for validating its Custom Resource Definitions out-of-the-box; however, this feature is not supported on versions of Kubernetes < 1.25. If you are running an earlier version of Kubernetes, you will need to use the Karpenter admission webhooks for validation instead. You can enable these webhooks with `--set webhook.enabled=true` when applying the Karpenter Helm chart.\n{{% /alert %}}\n\n## Compatibility issues\n\nWhen we introduce a breaking change, we do so only as described in this document.\n\nKarpenter follows [Semantic Versioning 2.0.0](https://semver.org/) in its stable release versions, while in\nmajor version zero (`0.y.z`) [anything may change at any time](https://semver.org/#spec-item-4).\nHowever, to further protect users during this phase we will only introduce breaking changes in minor releases (releases that increment y in x.y.z).\nNote this does not mean every minor upgrade has a breaking change as we will also increment the\nminor version when we release a new feature.\n\nUsers should therefore check to see if there is a breaking change every time they are upgrading to a new minor version.\n\n### How Do We Break Incompatibility?\n\nWhen there is a breaking change we will:\n\n* Increment the minor version when in major version 0\n* Add a permanent separate section named `upgrading to x.y.z+` under [release upgrade notes](#release-upgrade-notes)\n  clearly explaining the breaking change and what needs to be done on the user side to ensure a safe upgrade\n* 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\n\n### How Do We Find Incompatibilities?\n\nBesides the peer review process for all changes to the code base we also do the followings in order to find\nincompatibilities:\n* (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\n* (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\n\n### Security Patches\n\nWhile we are in major version 0 we will not release security patches to older versions.\nRather we provide the patches in the latest versions.\nWhen at major version 1 we will have an EOL (end of life) policy where we provide security patches\nfor a subset of older versions and deprecate the others.\n\n## Release Types\n\nKarpenter offers three types of releases. This section explains the purpose of each release type and how the images for each release type are tagged in our [public image repository](https://gallery.ecr.aws/karpenter).\n\n### Stable Releases\n\nStable releases are the only recommended versions for production environments. Stable releases are tagged with a semantic version (e.g. `0.35.0`). Note that stable releases prior to `0.35.0` are prefixed with a `v` (e.g. `v0.34.0`).\n\n### Release Candidates\n\nWe consider having release candidates for major and important minor versions. Our release candidates are tagged like `x.y.z-rc.0`, `x.y.z-rc.1`. The release candidate will then graduate to `x.y.z` as a stable release.\nBy 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.\nNote that, like the stable releases, release candidates prior to `0.35.0` are prefixed with a `v`.\n\n### Snapshot Releases\n\nWe release a snapshot release for every commit that gets merged into [`aws/karpenter-provider-aws`](https://www.github.com/aws/karpenter-provider-aws). This enables users to immediately try a new feature or fix right after it's merged rather than waiting days or weeks for release.\n\nSnapshot releases are not made available in the same public ECR repository as other release types, they are instead published to a separate private ECR repository.\nHelm charts are published to `oci://{{< param \"snapshot_repo.account_id\" >}}.dkr.ecr.{{< param \"snapshot_repo.region\" >}}.amazonaws.com/karpenter/snapshot/karpenter` and are tagged with the git commit hash prefixed by the Karpenter major version (e.g. `0-fc17bfc89ebb30a3b102a86012b3e3992ec08adf`).\nAnyone with an AWS account can pull from this repository, but must first authenticate:\n\n```bash\naws ecr get-login-password --region {{< param \"snapshot_repo.region\" >}} | docker login --username AWS --password-stdin {{< param \"snapshot_repo.account_id\" >}}.dkr.ecr.{{< param \"snapshot_repo.region\" >}}.amazonaws.com\n```\n\n{{% alert title=\"Note\" color=\"warning\" %}}\nSnapshot releases are suitable for testing, and troubleshooting but they should not be used in production environments. Snapshot releases are ephemeral and will be removed 90 days after they were published.\n{{% /alert %}}\n"
  },
  {
    "path": "website/content/en/v1.0/upgrading/get-controller-policy.sh",
    "content": "#!/usr/bin/env bash\n\nsourceVersionCfn=$(mktemp)\nversionTag=$([[ ${KARPENTER_VERSION} == v* ]] && echo \"${KARPENTER_VERSION}\" || echo \"v${KARPENTER_VERSION}\")\ncurl -fsSL https://raw.githubusercontent.com/aws/karpenter-provider-aws/${versionTag}/website/content/en/preview/getting-started/getting-started-with-karpenter/cloudformation.yaml > ${sourceVersionCfn}\n\n# Substitute the cloudformation templating strings for our environment variables\ntmpfile=$(mktemp)\nsed \\\n  -e 's/!Sub//g' \\\n  -e 's/${AWS::Partition}/${AWS_PARTITION}/g' \\\n  -e 's/${AWS::Region}/${AWS_REGION}/g' \\\n  -e 's/${AWS::AccountId}/${AWS_ACCOUNT_ID}/g' \\\n  -e 's/${ClusterName}/${CLUSTER_NAME}/g' \\\n  -e 's/${KarpenterInterruptionQueue.Arn}/arn:${AWS_PARTITION}:sqs:${AWS_REGION}:${AWS_ACCOUNT_ID}:${CLUSTER_NAME}/g' \\\n  -e 's/${KarpenterNodeRole.Arn}/arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role\\/KarpenterNodeRole-${CLUSTER_NAME}/g' \\\n  \"${sourceVersionCfn}\" > \"${tmpfile}\" && mv \"${tmpfile}\" \"${sourceVersionCfn}\"\n\nyq '.Resources.KarpenterControllerPolicy.Properties.PolicyDocument' ${sourceVersionCfn} | envsubst\n"
  },
  {
    "path": "website/content/en/v1.0/upgrading/upgrade-guide.md",
    "content": "---\ntitle: \"Upgrade Guide\"\nlinkTitle: \"Upgrade Guide\"\nweight: 10\ndescription: >\n  Learn about upgrading Karpenter\n---\n\nKarpenter is a controller that runs in your cluster, but it is not tied to a specific Kubernetes version, as the Cluster Autoscaler is.\nUse your existing upgrade mechanisms to upgrade your core add-ons in Kubernetes and keep Karpenter up to date on bug fixes and new features.\nThis guide contains information needed to upgrade to the latest release of Karpenter, along with compatibility issues you need to be aware of when upgrading from earlier Karpenter versions.\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nWith the release of Karpenter v1.0.0, the Karpenter team has dropped support for karpenter versions v0.36 and below. We recommend upgrading to the latest version of Karpenter and keeping Karpenter up-to-date for bug fixes and new features.\n{{% /alert %}}\n\nWhen upgrading Karpenter in production environments, implementing a robust CI/CD pipeline approach is crucial. Improper upgrades can lead to significant disruptions including failed node provisioning, orphaned nodes, interrupted workloads, and potential cost implications from unmanaged scaling. Given Karpenter's critical role in cluster scaling and workload management, untested upgrades could result in production outages or resource allocation issues that directly impact application availability and performance. Therefore, we recommend following these structured steps:\n\n#### Pre-upgrade Validation\n\n- Validate all required IAM permissions (node role, controller role)\n- Check webhook configurations\n- Back up existing NodePool and NodeClass configurations\n- Document current version and settings\n\n#### Staging Environment Setup\n\n- Create or verify staging environment\n- Update version tags in Helm values or manifests\n- Configure automated validation tests\n\n#### Staging Deployment\n\n- Deploy to staging environment\n- Run comprehensive tests including node provisioning\n- Verify controller health\n- Test NodePool and NodeClass functionality\n- Monitor system behavior\n\n#### Production Approval and Deployment\n\n- Require manual approval/review\n- Schedule maintenance window if needed\n- Execute production deployment\n- Monitor deployment progress\n- Verify all components are functioning\n\n#### Post-Deployment\n\n- Monitor system health\n- Verify node provisioning\n- Keep rollback configurations accessible\n- Update documentation\n\nHere are few recommended CI/CD Pipeline Options:\n\n- GitHub Actions - Excellent for GitHub-hosted repositories with built-in Kubernetes support\n- GitLab CI - Strong container-native pipeline with integrated Kubernetes functionality\n- ArgoCD - Specialized for GitOps workflows with Kubernetes\n- AWS CodePipeline - Native integration with EKS and AWS services\n- Flux - Open-source GitOps tool for Kubernetes with automatic deployment capabilities\n\nEach pipeline tool can be configured to handle the Karpenter upgrade workflow, but choose based on your existing infrastructure, team expertise, and specific requirements for automation and integration.\n\n\n### CRD Upgrades\n\nKarpenter ships with a few Custom Resource Definitions (CRDs). These CRDs are published:\n* 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:\n  ```bash\n  KARPENTER_NAMESPACE=kube-system\n  helm upgrade --install karpenter-crd oci://public.ecr.aws/karpenter/karpenter-crd --version x.y.z --namespace \"${KARPENTER_NAMESPACE}\" --create-namespace\n  ```\n* As part of the helm chart [karpenter](https://gallery.ecr.aws/karpenter/karpenter) ([source](https://github.com/aws/karpenter/blob/main/charts/karpenter/crds)).\n  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.\n  Subsequent chart upgrades will not add or remove CRDs, even if the CRDs have changed.\n\nCRDs are coupled to the version of Karpenter, and should be updated along with Karpenter.\nFor this reason, we recommend using the independent `karpenter-crd` chart to manage CRDs.\n\n{{% alert title=\"Note\" color=\"warning\" %}}\nIf you get the error `invalid ownership metadata; label validation error:` while installing the `karpenter-crd` chart from an older version of Karpenter, follow the [Troubleshooting Guide]({{<ref \"../troubleshooting/#helm-error-when-installing-the-karpenter-crd-chart\" >}}) for details on how to resolve these errors.\n{{% /alert %}}\n\n<!--\nWHEN CREATING A NEW SECTION OF THE UPGRADE GUIDANCE FOR NEWER VERSIONS, ENSURE THAT YOU COPY THE BETA API ALERT SECTION FROM THE LAST RELEASE TO PROPERLY WARN USERS OF THE RISK OF UPGRADING WITHOUT GOING TO 0.32.x FIRST\n-->\n\n### Upgrading to `1.0.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter `1.0.0` introduces the `v1` APIs and uses [conversion webhooks](https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definition-versioning/#webhook-conversion) to support existing `v1beta1` APIs.\n**Do not** upgrade to `1.0.0`+ without following the [`v1` Migration Guide]({{<ref \"./v1-migration.md\">}}).\n{{% /alert %}}\n\nRefer to the `v1` Migration Guide for the [full changelog]({{<ref \"./v1-migration.md#changelog\">}}).\n\n### Upgrading to `0.37.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\n`0.33.0`+ _only_ supports Karpenter v1beta1 APIs and will not work with existing Provisioner, AWSNodeTemplate or Machine alpha APIs. Do not upgrade to `0.37.0`+ without first [upgrading to `0.32.x`]({{<ref \"#upgrading-to-0320\" >}}). This version supports both the alpha and beta APIs, allowing you to migrate all of your existing APIs to beta APIs without experiencing downtime.\n{{% /alert %}}\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nWebhooks have been re-enabled by default starting in `0.37.3` to faciliate migration to `v1.0`.\nIf your cluster has network policies that block Ingress then ports `8000`, `8001`, `8081`, `8443` will need to be allowlisted.\nYou may still choose to disable webhooks through the helm chart.\n{{% /alert %}}\n\n\n* Karpenter now adds a readiness status condition to the EC2NodeClass. Make sure to upgrade your Custom Resource Definitions before proceeding with the upgrade. Failure to do so will result in Karpenter being unable to provision new nodes.\n* Karpenter no longer updates the logger name when creating controller loggers. We now adhere to the controller-runtime standard, where the logger name will be set as `\"logger\": \"controller\"` always and the controller name will be stored in the structured value `\"controller\"`\n* Karpenter updated the NodeClass controller naming in the following way: `nodeclass` -> `nodeclass.status`, `nodeclass.hash`, `nodeclass.termination`\n* Karpenter's NodeClaim status conditions no longer include the `severity` field\n\n### Upgrading to `0.36.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\n`0.33.0`+ _only_ supports Karpenter v1beta1 APIs and will not work with existing Provisioner, AWSNodeTemplate or Machine alpha APIs. Do not upgrade to `0.36.0`+ without first [upgrading to `0.32.x`]({{<ref \"#upgrading-to-0320\" >}}). This version supports both the alpha and beta APIs, allowing you to migrate all of your existing APIs to beta APIs without experiencing downtime.\n{{% /alert %}}\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nv0.36.x introduces update to drift that restricts rollback. When rolling back from >=v0.36.0, note that v0.32.9+, v0.33.4+, v0.34.5+, v0.35.4+ are the patch versions that support rollback. If Karpenter is rolled back to an older patch version, Karpenter can potentially drift all the nodes in the cluster.\n{{% /alert %}}\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nWebhooks have been re-enabled by default starting in `0.36.5` to faciliate migration to `v1.0`.\nIf your cluster has network policies that block Ingress then ports `8000`, `8001`, `8081`, `8443` will need to be allowlisted.\nYou may still choose to disable webhooks through the helm chart.\n{{% /alert %}}\n\n* Karpenter changed the name of the `karpenter_cloudprovider_instance_type_price_estimate` metric to `karpenter_cloudprovider_instance_type_offering_price_estimate` to align with the new `karpenter_cloudprovider_instance_type_offering_available` metric. The `region` label was also dropped from the metric, since this can be inferred from the environment that Karpenter is running in.\n\n### Upgrading to `0.35.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\n`0.33.0`+ _only_ supports Karpenter v1beta1 APIs and will not work with existing Provisioner, AWSNodeTemplate or Machine alpha APIs. Do not upgrade to `0.35.0`+ without first [upgrading to `0.32.x`]({{<ref \"#upgrading-to-0320\" >}}). This version supports both the alpha and beta APIs, allowing you to migrate all of your existing APIs to beta APIs without experiencing downtime.\n{{% /alert %}}\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nWebhooks have been re-enabled by default starting in `0.35.8` to faciliate migration to `v1.0`.\nIf your cluster has network policies that block Ingress then ports `8000`, `8001`, `8081`, `8443` will need to be allowlisted.\nYou may still choose to disable webhooks through the helm chart.\n{{% /alert %}}\n\n* Karpenter OCI tags and Helm chart version are now valid semantic versions, meaning that the `v` prefix from the git tag has been removed and they now follow the `x.y.z` pattern.\n\n### Upgrading to `0.34.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\n`0.33.0`+ _only_ supports Karpenter v1beta1 APIs and will not work with existing Provisioner, AWSNodeTemplate or Machine alpha APIs. Do not upgrade to `0.34.0`+ without first [upgrading to `0.32.x`]({{<ref \"#upgrading-to-0320\" >}}). This version supports both the alpha and beta APIs, allowing you to migrate all of your existing APIs to beta APIs without experiencing downtime.\n{{% /alert %}}\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nThe Ubuntu EKS optimized AMI has moved from 20.04 to 22.04 for Kubernetes 1.29+. This new AMI version is __not currently__ supported for users relying on AMI auto-discovery with the Ubuntu AMI family. More details can be found in this [GitHub issue](https://github.com/aws/karpenter-provider-aws/issues/5572). Please review this issue before upgrading to Kubernetes 1.29 if you are using the Ubuntu AMI family. Upgrading to 1.29 without making any changes to your EC2NodeClass will result in Karpenter being unable to create new nodes.\n{{% /alert %}}\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nWebhooks have been re-enabled by default starting in `0.34.9` to faciliate migration to `v1.0`.\nIf your cluster has network policies that block Ingress then ports `8000`, `8001`, `8081`, `8443` will need to be allowlisted.\nYou may still choose to disable webhooks through the helm chart.\n{{% /alert %}}\n\n* Karpenter now supports `nodepool.spec.disruption.budgets`, which allows users to control the speed of disruption in the cluster. Since this requires an update to the Custom Resource, before upgrading, you should re-apply the new updates to the CRDs. Check out [Disruption Budgets]({{<ref \"../concepts/disruption#disruption-budgets\" >}}) for more.\n* With Disruption Budgets, Karpenter will disrupt multiple batches of nodes simultaneously, which can result in overall quicker scale-down of your cluster. Before `0.34.0`, Karpenter had a hard-coded parallelism limit for each type of disruption. In `0.34.0`+, Karpenter will now disrupt at most 10% of nodes for a given NodePool. There is no setting that will be perfectly equivalent with the behavior prior to `0.34.0`. When considering how to configure your budgets, please refer to the following limits for versions prior to `0.34.0`:\n  * `Empty Expiration / Empty Drift / Empty Consolidation`: infinite parallelism\n  * `Non-Empty Expiration / Non-Empty Drift / Single-Node Consolidation`: one node at a time\n  * `Multi-Node Consolidation`: max 100 nodes\n* To support Disruption Budgets, `0.34.0`+ includes critical changes to Karpenter's core controllers, which allows Karpenter to consider multiple batches of disrupting nodes simultaneously. This increases Karpenter's performance with the potential downside of higher CPU and memory utilization from the Karpenter pod. While the magnitude of this difference varies on a case-by-case basis, when upgrading to Karpenter `0.34.0`+, please note that you may need to increase the resources allocated to the Karpenter controller pods.\n* Karpenter now adds a default `podSecurityContext` that configures the `fsgroup: 65536` of volumes in the pod. If you are using sidecar containers, you should review if this configuration is compatible for them. You can disable this default `podSecurityContext` through helm by performing `--set podSecurityContext=null` when installing/upgrading the chart.\n* The `dnsPolicy` for the Karpenter controller pod has been changed back to the Kubernetes cluster default of `ClusterFirst`. Setting our `dnsPolicy` to `Default` (confusingly, this is not the Kubernetes cluster default) caused more confusion for any users running IPv6 clusters with dual-stack nodes or anyone running Karpenter with dependencies on cluster services (like clusters running service meshes). This change may be breaking for any users on Fargate or MNG who were allowing Karpenter to manage their in-cluster DNS service (`core-dns` on most clusters). If you still want the old behavior here, you can change the `dnsPolicy` to point to use `Default` by setting the helm value on install/upgrade with `--set dnsPolicy=Default`. More details on this issue can be found in the following Github issues: [#2186](https://github.com/aws/karpenter-provider-aws/issues/2186) and [#4947](https://github.com/aws/karpenter-provider-aws/issues/4947).\n* Karpenter now disallows `nodepool.spec.template.spec.resources` to be set. The webhook validation never allowed `nodepool.spec.template.spec.resources`. We are now ensuring that CEL validation also disallows `nodepool.spec.template.spec.resources` to be set. If you were previously setting the resources field on your NodePool, ensure that you remove this field before upgrading to the newest version of Karpenter or else updates to the resource may fail on the new version.\n\n### Upgrading to `0.33.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\n`0.33.0`+ _only_ supports Karpenter v1beta1 APIs and will not work with existing Provisioner, AWSNodeTemplate or Machine alpha APIs. **Do not** upgrade to `0.33.0`+ without first [upgrading to `0.32.x`]({{<ref \"#upgrading-to-0320\" >}}). This version supports both the alpha and beta APIs, allowing you to migrate all of your existing APIs to beta APIs without experiencing downtime.\n{{% /alert %}}\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nWebhooks have been re-enabled by default starting in `0.33.8` to faciliate migration to `v1.0`.\nIf your cluster has network policies that block Ingress then ports `8000`, `8001`, `8081`, `8443` will need to be allowlisted.\nYou may still choose to disable webhooks through the helm chart.\n{{% /alert %}}\n\n* Karpenter no longer supports using the `karpenter.sh/provisioner-name` label in NodePool labels and requirements or in application node selectors, affinities, or topologySpreadConstraints. If you were previously using this label to target applications to specific Provisioners, you should update your applications to use the `karpenter.sh/nodepool` label instead before upgrading. If you upgrade without changing these labels, you may begin to see pod scheduling failures for these applications.\n* Karpenter now tags `spot-instances-request` with the same tags that it tags instances, volumes, and primary ENIs. This means that you will now need to add `ec2:CreateTags` permission for `spot-instances-request`. You can also further scope your controller policy for the `ec2:RunInstances` action to require that it launches the `spot-instances-request` with these specific tags. You can view an example of scoping these actions in the [Getting Started Guide's default CloudFormation controller policy](https://github.com/aws/karpenter/blob/v0.33.0/website/content/en/preview/getting-started/getting-started-with-karpenter/cloudformation.yaml#L61).\n* We now recommend that you set the installation namespace for your Karpenter controllers to `kube-system` to denote Karpenter as a critical cluster component. This ensures that requests from the Karpenter controllers are treated with higher priority by assigning them to a different [PriorityLevelConfiguration](https://kubernetes.io/docs/concepts/cluster-administration/flow-control/#prioritylevelconfiguration) than generic requests from other namespaces. For more details on API Priority and Fairness, read the [Kubernetes API Priority and Fairness Conceptual Docs](https://kubernetes.io/docs/concepts/cluster-administration/flow-control/). Note: Changing the namespace for your Karpenter release will cause the service account namespace to change. If you are using IRSA for authentication with AWS, you will need to change scoping set in the controller's trust policy from `karpenter:karpenter` to `kube-system:karpenter`.\n* ~~`0.33.0` disables mutating and validating webhooks by default in favor of using [Common Expression Language for CRD validation](https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/#validation). The Common Expression Language Validation Feature [is enabled by default on EKS 1.25](https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/#validation-rules). If you are using Kubernetes version >= 1.25, no further action is required. If you are using a Kubernetes version below 1.25, you now need to set `DISABLE_WEBHOOK=false` in your container environment variables or `--set webhook.enabled=true` if using Helm. View the [Webhook Support Deprecated in Favor of CEL Section of the v1beta1 Migration Guide]({{<ref \"../../v1.0/upgrading/v1beta1-migration#webhook-support-deprecated-in-favor-of-cel\" >}}).~~\n* `0.33.0` drops support for passing settings through the `karpenter-global-settings` ConfigMap. You should pass settings through the container environment variables in the Karpenter deployment manifest. View the [Global Settings Section of the v1beta1 Migration Guide]({{<ref \"../../v1.0/upgrading/v1beta1-migration#global-settings\" >}}) for more details.\n* `0.33.0` enables `Drift=true` by default in the `FEATURE_GATES`. If you previously didn't enable the feature gate, Karpenter will now check if there is a difference between the desired state of your nodes declared in your NodePool and the actual state of your nodes. View the [Drift Section of Disruption Conceptual Docs]({{<ref \"../concepts/disruption#drift\" >}}) for more details.\n* `0.33.0` drops looking up the `zap-logger-config` through ConfigMap discovery. Instead, Karpenter now expects the logging config to be mounted on the filesystem if you are using this to configure Zap logging. This is not enabled by default, but can be enabled through `--set logConfig.enabled=true` in the Helm values. If you are setting any values in the `logConfig` from the `0.32.x` upgrade, such as `logConfig.logEncoding`, note that you will have to explicitly set `logConfig.enabled=true` alongside it. Also, note that setting the Zap logging config is a deprecated feature in beta and is planned to be dropped at v1. View the [Logging Configuration Section of the v1beta1 Migration Guide]({{<ref \"../../v1.0/upgrading/v1beta1-migration#logging-configuration-is-no-longer-dynamic\" >}}) for more details.\n* `0.33.0` change the default `LOG_LEVEL` from `debug` to `info` by default. If you are still enabling logging configuration through the `zap-logger-config`, no action is required.\n* `0.33.0` drops support for comma delimited lists on tags for `SubnetSelectorTerm`, `SecurityGroupsSelectorTerm`, and `AMISelectorTerm`. Karpenter now supports multiple terms for each of the selectors which means that we can specify a more explicit OR-based constraint through separate terms rather than a comma-delimited list of values.\n\n### Upgrading to `0.32.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter `0.32.0` introduces v1beta1 APIs, including _significant_ changes to the API and installation procedures for the Karpenter controllers. **Do not** upgrade to `0.32.0`+ without referencing the [v1beta1 Migration Upgrade Procedure]({{<ref \"../../v1.0/upgrading/v1beta1-migration#upgrade-procedure\" >}}).\n\nThis version includes **dual support** for both alpha and beta APIs to ensure that you can slowly migrate your existing Provisioner, AWSNodeTemplate, and Machine alpha APIs to the newer NodePool, EC2NodeClass, and NodeClaim beta APIs.\n\nNote that if you are rolling back after upgrading to `0.32.0`, note that __only__ versions `0.31.4` support handling rollback after you have deployed the v1beta1 APIs to your cluster.\n{{% /alert %}}\n\n* Karpenter now uses `settings.InterruptionQueue` instead of `settings.aws.InterruptionQueueName` in its helm chart. The CLI argument also changed to `--interruption-queue`.\n* Karpenter now serves the webhook prometheus metrics server on port `8001`. If this port is already in-use on the pod or you are running in `hostNetworking` mode, you may need to change this port value. You can configure this port value through the `WEBHOOK_METRICS_PORT` environment variable or the `webhook.metrics.port` value if installing via Helm.\n* Karpenter now exposes the ability to disable webhooks through the `webhook.enabled=false` value. This value will disable the webhook server and will prevent any permissions, mutating or validating webhook configurations from being deployed to the cluster.\n* Karpenter now moves all logging configuration for the Zap logger into the `logConfig` values block. Configuring Karpenter logging with this mechanism _is_ deprecated and will be dropped at v1. Karpenter now only surfaces logLevel through the `logLevel` helm value. If you need more advanced configuration due to log parsing constraints, we recommend configuring your log parser to handle Karpenter's Zap JSON logging.\n* The default log encoding changed from `console` to `json`. If you were previously not setting the type of log encoding, this default will change with the Helm chart. If you were setting the value through `logEncoding`, this value will continue to work until `0.33.x` but it is deprecated in favor of `logConfig.logEncoding`\n* Karpenter now uses the `karpenter.sh/disruption:NoSchedule=disrupting` taint instead of the upstream `node.kubernetes.io/unschedulable` taint for nodes spawned with a NodePool to prevent pods from scheduling to nodes being disrupted. Pods that previously tolerated the `node.kubernetes.io/unschedulable` taint that previously weren't evicted during termination will now be evicted. This most notably affects DaemonSets, which have the `node.kubernetes.io/unschedulable` toleration by default, where Karpenter will now remove these pods during termination. If you want your specific pods to not be evicted when nodes are scaled down, you should add a toleration to the pods with the following: `Key=karpenter.sh/disruption, Effect=NoSchedule, Operator=Equals, Values=disrupting`.\n  * Note: Karpenter will continue to use the old `node.kubernetes.io/unschedulable` taint for nodes spawned with a Provisioner.\n\n### Upgrading to `0.31.0`+\n\n* Karpenter moved its `securityContext` constraints from pod-wide to only applying to the Karpenter container exclusively. If you were previously relying on the pod-wide `securityContext` for your sidecar containers, you will now need to set these values explicitly in your sidecar container configuration.\n\n### Upgrading to `0.30.0`+\n\n* Karpenter will now [statically drift]({{<ref \"../concepts/disruption#drift\" >}}) on both Provisioner and AWSNodeTemplate Fields. For Provisioner Static Drift, the `karpenter.sh/provisioner-hash` annotation must be present on both the Provisioner and Machine. For AWSNodeTemplate drift, the `karpenter.k8s.aws/nodetemplate-hash` annotation must be present on the AWSNodeTemplate and Machine. Karpenter will not add these annotations to pre-existing nodes, so each of these nodes will need to be recycled one time for the annotations to be added.\n* Karpenter will now fail validation on AWSNodeTemplates and Provisioner `spec.provider` that have `amiSelectors`, `subnetSelectors`, or `securityGroupSelectors` set with a combination of id selectors (`aws-ids`, `aws::ids`) and other selectors.\n* Karpenter now statically sets the `securityContext` at both the pod and container-levels and doesn't allow override values to be passed through the Helm chart. This change was made to adhere to [Restricted Pod Security Standard](https://kubernetes.io/docs/concepts/security/pod-security-standards/#restricted), which follows pod hardening best practices.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nIf you have sidecar containers configured to run alongside Karpenter that cannot tolerate the [pod-wide `securityContext` constraints](https://github.com/aws/karpenter/blob/v0.30.0/charts/karpenter/templates/deployment.yaml#L40), you will need to specify overrides to the sidecar `securityContext` in your deployment.\n{{% /alert %}}\n\n### Upgrading to `0.29.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter `0.29.1` contains a [file descriptor and memory leak bug](https://github.com/aws/karpenter/issues/4296) that leads to Karpenter getting OOMKilled and restarting at the point that it hits its memory or file descriptor limit. Karpenter `0.29.2`+ fixes this leak.\n{{% /alert %}}\n\n* Karpenter has changed the default metrics service port from 8080 to 8000 and the default webhook service port from 443 to 8443. In `0.28.0`, the Karpenter pod port was changed to 8000, but referenced the service by name, allowing users to scrape the service at port 8080 for metrics. `0.29.0` aligns the two ports so that service and pod metrics ports are the same. These ports are set by the `controller.metrics.port` and `webhook.port` Helm chart values, so if you have previously set these to non-default values, you may need to update your Prometheus scraper to match these new values.\n\n* Karpenter will now reconcile nodes that are drifted due to their Security Groups or their Subnets. If your AWSNodeTemplate's Security Groups differ from the Security Groups used for an instance, Karpenter will consider it drifted. If the Subnet used by an instance is not contained in the allowed list of Subnets for an AWSNodeTemplate, Karpenter will also consider it drifted.\n  * Since Karpenter uses tags for discovery of Subnets and SecurityGroups, check the [Threat Model]({{<ref \"../reference/threat-model.md#threat-using-ec2-createtagdeletetag-permissions-to-orchestrate-machine-creationdeletion\" >}}) to see how to manage this IAM Permission.\n\n### Upgrading to `0.28.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter `0.28.0` is incompatible with Kubernetes version 1.26+, which can result in additional node scale outs when using `--cloudprovider=external`, which is the default for the EKS Optimized AMI. See: https://github.com/aws/karpenter-core/pull/375. Karpenter `0.28.1`+ fixes this issue and is compatible with Kubernetes version 1.26+.\n{{% /alert %}}\n\n* The `extraObjects` value is now removed from the Helm chart. Having this value in the chart proved to not work in the majority of Karpenter installs and often led to anti-patterns, where the Karpenter resources installed to manage Karpenter's capacity were directly tied to the install of the Karpenter controller deployments. The Karpenter team recommends that, if you want to install Karpenter manifests alongside the Karpenter Helm chart, to do so by creating a separate chart for the manifests, creating a dependency on the controller chart.\n* The `aws.nodeNameConvention` setting is now removed from the [`karpenter-global-settings`]({{<ref \"../reference/settings#configmap\" >}}) ConfigMap. Because Karpenter is now driving its orchestration of capacity through Machines, it no longer needs to know the node name, making this setting obsolete. Karpenter ignores configuration that it doesn't recognize in the [`karpenter-global-settings`]({{<ref \"../reference/settings#configmap\" >}}) ConfigMap, so leaving the `aws.nodeNameConvention` in the ConfigMap will simply cause this setting to be ignored.\n* Karpenter now defines a set of \"restricted tags\" which can't be overridden with custom tagging in the AWSNodeTemplate or in the [`karpenter-global-settings`]({{<ref \"../reference/settings#configmap\" >}}) ConfigMap. If you are currently using any of these tag overrides when tagging your instances, webhook validation will now fail. These tags include:\n\n  * `karpenter.sh/managed-by`\n  * `karpenter.sh/provisioner-name`\n  * `kubernetes.io/cluster/${CLUSTER_NAME}`\n\n* The following metrics changed their meaning, based on the introduction of the Machine resource:\n  * `karpenter_nodes_terminated`: Use `karpenter_machines_terminated` if you are interested in the reason why a Karpenter machine was deleted. `karpenter_nodes_terminated` now only tracks the count of terminated nodes without any additional labels.\n  * `karpenter_nodes_created`: Use `karpenter_machines_created` if you are interested in the reason why a Karpenter machine was created. `karpenter_nodes_created` now only tracks the count of created nodes without any additional labels.\n  * `karpenter_deprovisioning_replacement_node_initialized_seconds`: This metric has been replaced in favor of `karpenter_deprovisioning_replacement_machine_initialized_seconds`.\n* `0.28.0` introduces the Machine CustomResource into the `karpenter.sh` API Group and requires this CustomResourceDefinition to run properly. Karpenter now orchestrates its CloudProvider capacity through these in-cluster Machine CustomResources. When performing a scheduling decision, Karpenter will create a Machine, resulting in launching CloudProvider capacity. The kubelet running on the new capacity will then register the node to the cluster shortly after launch.\n  * If you are using Helm to upgrade between versions of Karpenter, note that [Helm does not automate the process of upgrading or install the new CRDs into your cluster](https://helm.sh/docs/chart_best_practices/custom_resource_definitions/#some-caveats-and-explanations). To install or upgrade the existing CRDs, follow the guidance under the [Custom Resource Definition (CRD) Upgrades]({{< relref \"#custom-resource-definition-crd-upgrades\" >}}) section of the upgrade guide.\n  * Karpenter will hydrate Machines on startup for existing capacity managed by Karpenter into the cluster. Existing capacity launched by an older version of Karpenter is discovered by finding CloudProvider capacity with the `karpenter.sh/provisioner-name` tag or the `karpenter.sh/provisioner-name` label on nodes.\n* The metrics port for the Karpenter deployment was changed from 8080 to 8000. Users who scrape the pod directly for metrics rather than the service will need to adjust the commands they use to reference port 8000. Any users who scrape metrics from the service should be unaffected.\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter creates a mapping between CloudProvider machines and CustomResources in the cluster for capacity tracking. To ensure this mapping is consistent, Karpenter utilizes the following tag keys:\n\n* `karpenter.sh/managed-by`\n* `karpenter.sh/provisioner-name`\n* `kubernetes.io/cluster/${CLUSTER_NAME}`\n\nBecause Karpenter takes this dependency, any user that has the ability to Create/Delete these tags on CloudProvider machines will have the ability to orchestrate Karpenter to Create/Delete CloudProvider machines as a side effect. Check the [Threat Model]({{<ref \"../reference/threat-model.md#threat-using-ec2-createtagdeletetag-permissions-to-orchestrate-machine-creationdeletion\" >}}) to see how this might affect you, and ways to mitigate this.\n{{% /alert %}}\n\n{{% alert title=\"Rolling Back\" color=\"warning\" %}}\nIf, after upgrading to `0.28.0`+, a rollback to an older version of Karpenter needs to be performed, Karpenter will continue to function normally, though you will still have the Machine CustomResources on your cluster. You will need to manually delete the Machines and patch out the finalizers to fully complete the rollback.\n\nKarpenter marks CloudProvider capacity as \"managed by\" a Machine using the `karpenter-sh/managed-by` tag on the CloudProvider machine. It uses this tag to ensure that the Machine CustomResources in the cluster match the CloudProvider capacity managed by Karpenter. If these states don't match, Karpenter will garbage collect the capacity. Because of this, if performing an upgrade, followed by a rollback, followed by another upgrade to `0.28.0`+, ensure you remove the `karpenter.sh/managed-by` tags from existing capacity; otherwise, Karpenter will deprovision the capacity without a Machine CR counterpart.\n{{% /alert %}}\n\n### Upgrading to `0.27.3`+\n\n* The `defaulting.webhook.karpenter.sh` mutating webhook was removed in `0.27.3`. If you are coming from an older version of Karpenter where this webhook existed and the webhook was not managed by Helm, you may need to delete the stale webhook.\n\n```bash\nkubectl delete mutatingwebhookconfigurations defaulting.webhook.karpenter.sh\n```\n\n### Upgrading to `0.27.0`+\n\n* The Karpenter controller pods now deploy with `kubernetes.io/hostname` self anti-affinity by default. If you are running Karpenter in HA (high-availability) mode and you do not have enough nodes to match the number of pod replicas you are deploying with, you will need to scale-out your nodes for Karpenter.\n* The following controller metrics changed and moved under the `controller_runtime` metrics namespace:\n  * `karpenter_metricscraper_...`\n  * `karpenter_deprovisioning_...`\n  * `karpenter_provisioner_...`\n  * `karpenter_interruption_...`\n* The following controller metric names changed, affecting the `controller` label value under `controller_runtime_...` metrics. These metrics include:\n  * `podmetrics` -> `pod_metrics`\n  * `provisionermetrics` -> `provisioner_metrics`\n  * `metricscraper` -> `metric_scraper`\n  * `provisioning` -> `provisioner_trigger`\n  * `node-state` -> `node_state`\n  * `pod-state` -> `pod_state`\n  * `provisioner-state` -> `provisioner_state`\n* The `karpenter_allocation_controller_scheduling_duration_seconds` metric name changed to `karpenter_provisioner_scheduling_duration_seconds`\n\n### Upgrading to `0.26.0`+\n\n* 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]({{<ref \"../concepts/disruption#disabling-deprovisioning\" >}}) for more details.\n* 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.\n* 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.\n\n### Upgrading to `0.25.0`+\n\n* 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.\n\n### Upgrading to `0.24.0`+\n\n* Settings are no longer updated dynamically while Karpenter is running. If you manually make a change to the [`karpenter-global-settings`]({{<ref \"../reference/settings#configmap\" >}}) ConfigMap, you will need to reload the containers by restarting the deployment with `kubectl rollout restart -n karpenter deploy/karpenter`\n* 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]({{<ref \"../concepts/scheduling#selecting-nodes\" >}}). 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.\n* `aws.tags` in [`karpenter-global-settings`]({{<ref \"../reference/settings#configmap\" >}}) 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.<key>: value` in the ConfigMap.\n\n### Upgrading to `0.22.0`+\n\n* 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.\n\n### Upgrading to `0.20.0`+\n\n* Prior to `0.20.0`, Karpenter would prioritize certain instance type categories absent of any requirements in the Provisioner. `0.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.\n\n### Upgrading to `0.19.0`+\n\n* 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.\n* 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/disruption/#interruption\" >}}).\n* 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.\n* Karpenter CRD raw YAML URLs have migrated from `https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.19.3/charts/karpenter/crds/...` to `https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.19.3/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.\n* 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.\n* The following CLI options/environment variables are now removed and replaced in favor of pulling settings dynamically from the [`karpenter-global-settings`]({{<ref \"../reference/settings#configmap\" >}}) ConfigMap. See the [Settings docs]({{<ref \"../reference/settings/#environment-variables--cli-flags\" >}}) for more details on configuring the new values in the ConfigMap.\n\n  * `CLUSTER_NAME` -> `settings.aws.clusterName`\n  * `CLUSTER_ENDPOINT` -> `settings.aws.clusterEndpoint`\n  * `AWS_DEFAULT_INSTANCE_PROFILE` -> `settings.aws.defaultInstanceProfile`\n  * `AWS_ENABLE_POD_ENI` -> `settings.aws.enablePodENI`\n  * `AWS_ENI_LIMITED_POD_DENSITY` -> `settings.aws.enableENILimitedPodDensity`\n  * `AWS_ISOLATED_VPC` -> `settings.aws.isolatedVPC`\n  * `AWS_NODE_NAME_CONVENTION` -> `settings.aws.nodeNameConvention`\n  * `VM_MEMORY_OVERHEAD` -> `settings.aws.vmMemoryOverheadPercent`\n\n### Upgrading to `0.18.0`+\n\n* `0.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]({{<ref \"../reference/metrics\" >}}).\n\n### Upgrading to `0.17.0`+\n\nKarpenter'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/).\nWith 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-karpenter/#install-karpenter-helm-chart\" >}}).\n\nUsers who have scripted the installation or upgrading of Karpenter need to adjust their scripts with the following changes:\n1. There is no longer a need to add the Karpenter Helm repo with `helm repo add`\n2. The full URL of the Helm chart needs to be present when using the `helm` CLI\n3. 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  (i.e `v0.17.0`).\n\n### Upgrading to `0.16.2`+\n\n* `0.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:\n```bash\nkubectl replace -f https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.16.2/charts/karpenter/crds/karpenter.sh_provisioners.yaml\n```\n\n### Upgrading to `0.16.0`+\n\n* `0.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:\n```bash\nkubectl replace -f https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.16.0/charts/karpenter/crds/karpenter.sh_provisioners.yaml\n```\n\n### Upgrading to `0.15.0`+\n\n* `0.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:\n```bash\nkubectl replace -f https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.15.0/charts/karpenter/crds/karpenter.sh_provisioners.yaml\n```\n\n### Upgrading to `0.14.0`+\n\n* `0.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:\n\n```bash\nkubectl replace -f https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.14.0/charts/karpenter/crds/karpenter.sh_provisioners.yaml\n\nkubectl replace -f https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.14.0/charts/karpenter/crds/karpenter.k8s.aws_awsnodetemplates.yaml\n```\n\n* `0.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:\n\n```bash\n## Find launch templates that match the naming pattern and you do not want to keep\naws ec2 describe-launch-templates --filters=\"Name=launch-template-name,Values=Karpenter-${CLUSTER_NAME}-*\"\n\n## Delete launch template(s) that match the name but do not have the \"karpenter.k8s.aws/cluster\" tag\naws ec2 delete-launch-template --launch-template-id <LAUNCH_TEMPLATE_ID>\n```\n\n* `0.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.\n```yaml\n  - key: node.kubernetes.io/instance-type\n    operator: Exists\n```\n\n* `0.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]({{<ref \"../concepts/nodepools#spec-amiselector\" >}}) to get started\n* `0.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`.\n\n* `0.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.\n\n### Upgrading to `0.13.0`+\n\n* `0.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. `0.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.\n\n  If you are upgrading from `0.10.1` - `0.11.1`, a new CRD `awsnodetemplate` was added. In `0.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:\n  1. Make sure any `awsnodetemplate` manifests are saved somewhere so that they can be reapplied to the cluster.\n  2. `kubectl delete crd awsnodetemplate`\n  3. `kubectl apply -f https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.13.2/charts/karpenter/crds/karpenter.k8s.aws_awsnodetemplates.yaml`\n  4. Perform the Karpenter upgrade to `0.13.0`+, which will install the new `awsnodetemplates` CRD.\n  5. Reapply the `awsnodetemplate` manifests you saved from step 1, if applicable.\n* `0.13.0` also adds EC2/spot price fetching to Karpenter to allow making more accurate decisions regarding node deployments.  Our [getting started guide]({{< ref \"../getting-started/getting-started-with-karpenter\" >}}) 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.\n\n### Upgrading to `0.12.0`+\n\n* `0.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.\n* If you are upgrading from `0.10.1` - `0.11.1`, a new CRD `awsnodetemplate` was added. In `0.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:\n  1. Make sure any `awsnodetemplate` manifests are saved somewhere so that they can be reapplied to the cluster.\n  2. `kubectl delete crd awsnodetemplate`\n  3. `kubectl apply -f https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.12.1/charts/karpenter/crds/karpenter.k8s.aws_awsnodetemplates.yaml`\n  4. Perform the Karpenter upgrade to `0.12.0`+, which will install the new `awsnodetemplates` CRD.\n  5. Reapply the `awsnodetemplate` manifests you saved from step 1, if applicable.\n\n### Upgrading to `0.11.0`+\n\n`0.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`.\n\nOther 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.\n\n`0.11.0` adds a `providerRef` field in the Provisioner CRD. To use this new field you will need to replace the Provisioner CRD manually:\n\n```shell\nkubectl replace -f https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.11.0/charts/karpenter/crds/karpenter.sh_provisioners.yaml\n```\n\n### Upgrading to `0.10.0`+\n\n`0.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:\n\n```shell\nkubectl replace -f https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.10.0/charts/karpenter/crds/karpenter.sh_provisioners.yaml\n```\n\n📝 If you don't perform this manual CRD update, Karpenter will work correctly except for rejecting the creation/update of provisioners that use `startupTaints`.\n\n### Upgrading to `0.6.2`+\n\nIf using Helm, the variable names have changed for the cluster's name and endpoint. You may need to update any configuration\nthat sets the old variable names.\n\n- `controller.clusterName` is now `clusterName`\n- `controller.clusterEndpoint` is now `clusterEndpoint`\n"
  },
  {
    "path": "website/content/en/v1.0/upgrading/v1-migration.md",
    "content": "---\ntitle: \"v1 Migration\"\nlinkTitle: \"v1 Migration\"\nweight: 30\ndescription: >\n  Migrating to Karpenter `v1.0`\n---\n\nThis migration guide is designed to help you migrate to Karpenter `v1.0.x` from `v0.33.x` through `v0.37.x`.\nUse this document as a reference to the changes that were introduced in this release and as a guide to how you need to update the manifests and other Karpenter objects you created in previous Karpenter releases.\n\nBefore continuing with this guide, you should know that Karpenter `v1.0.x` only supports Karpenter `v1` and `v1beta1` APIs.\nEarlier `Provisioner`, `AWSNodeTemplate`, and `Machine` APIs are not supported.\nDo not upgrade to `v1.0.x` without first [upgrading to `v0.32.x`]({{<ref \"upgrade-guide#upgrading-to-0320\" >}}) and then upgrading to `v0.33+`.\n\nAdditionaly, validate that you are running at least Kubernetes `1.25`.\nUse the [compatibility matrix]({{<ref \"compatibility#compatibility-matrix\">}}) to confirm you are on a supported Kubernetes version.\n\n## Before You Start\n\nKarpenter `v1.0` is a major release and contains a number of breaking changes.\nThe following section will highlight some of the major breaking changes, but you should review the full [changelog]({{<ref \"#changelog\">}}) before proceeding with the upgrade.\n\n#### Forceful Expiration\n\nPreviously, Karpenter would only begin draining an expired node after ensuring graceful disruption was possible and replacement capacity was provisioned. Now, NodeClaim expiration is forceful. Once a NodeClaim expires, Karpenter will immediately begin draining the corresponding Node without first provisioning a replacement Node. This forceful approach means that all expired NodeClaims that were previously blocked from disruption (due to Pod Disruption Budgets (PDBs), do-not-disrupt pods, or other constraints) will be expired. The scheduler will then attempt to provision new Nodes for the disrupted workloads as they are draining. This behavior may lead to an increased number of pods in the \"Pending\" state while replacement capacity is being provisioned. Before upgrading, users should check for expired NodeClaims and resolve any disruption blockers to ensure a smooth upgrade process.\n\n#### Deprecated Annotations, Labels, and Tags Removed\n\nThe following annotations, labels, and tags have been removed in `v1.0.0`:\n\n|Key|Type|\n|-|-|\n|`karpenter.sh/do-not-consolidate`|annotation|\n|`karpenter.sh/do-not-evict`|annotation|\n|`karpenter.sh/managed-by`|tag|\n\nBoth the `karpenter.sh/do-not-consolidate` and the `karpenter.sh/do-not-evict` annotations were [deprecated in `v0.32.0`]({{<ref \"../../v1.0/upgrading/v1beta1-migration/#annotations-labels-and-status-conditions\">}}).\nThey have now been dropped in-favor of their replacement, `karpenter.sh/do-not-disrupt`.\n\nThe `karpenter.sh/managed-by`, which currently stores the cluster name in its value, is replaced by `eks:eks-cluster-name`, to allow\nfor [EKS Pod Identity ABAC policies](https://docs.aws.amazon.com/eks/latest/userguide/pod-id-abac.html).\n\n#### Zap Logging Config Removed\n\nSupport for setting the Zap logging config was [deprecated in `v0.32.0`]({{<ref \"../../v1.0/upgrading/v1beta1-migration#logging-configuration-is-no-longer-dynamic\" >}}) and has been been removed in `v1.0.0`.\nThe following environment variables are now available to configure logging:\n\n* `LOG_LEVEL`\n* `LOG_OUTPUT_PATHS`\n* `LOG_ERROR_OUTPUT_PATHS`.\n\nRefer to [Settings]({{<ref \"../reference/settings.md\">}}) for more details.\n\n#### New MetadataOptions Defaults\n\nThe default value for `httpPutResponseHopLimit` has been reduced from `2` to `1`.\nThis prevents pods that are not using `hostNetworking` from accessing IMDS by default.\nIf you have pods which rely on access to IMDS, and are not using `hostNetworking`, you will need to either update the pod's networking config or configure `httpPutResponseHopLimit` on your `EC2NodeClass`.\nThis change aligns Karpenter's defaults with [EKS' Best Practices](https://aws.github.io/aws-eks-best-practices/security/docs/iam/#restrict-access-to-the-instance-profile-assigned-to-the-worker-node).\n\n#### Ubuntu AMIFamily Removed\n\nSupport for automatic AMI selection and UserData generation for Ubuntu has been dropped in Karpenter `v1.0.0`.\nTo continue using Ubuntu AMIs you will need to specify an AMI using [`amiSelectorTerms`]({{<ref \"../concepts/nodeclasses#specamiselectorterms\">}}).\n\nUserData generation can be achieved using `amiFamily: AL2`, which has an identical UserData format.\nHowever, compatibility is not guaranteed long-term and changes to either AL2 or Ubuntu's UserData format may introduce incompatibilities.\nIf this occurs, `amiFamily: Custom` should be used for Ubuntu AMIs and UserData will need to be entirely maintained by the user.\n\nIf you are upgrading to `v1.0.x` and already have `v1beta1` Ubuntu `EC2NodeClasses`, all you need to do is specify `amiSelectorTerms` and Karpenter will translate your `EC2NodeClasses` to the `v1` equivalent (as shown below).\nFailure to specify `amiSelectorTerms` will result in the `EC2NodeClass` and all referencing `NodePools` to become `NotReady`.\nThese `NodePools` and `EC2NodeClasses` would then be ignored for provisioning and drift.\n\n```yaml\n# Original v1beta1 EC2NodeClass\nversion: karpenter.k8s.aws/v1beta1\nkind: EC2NodeClass\nspec:\n amiFamily: Ubuntu\n amiSelectorTerms:\n - id: ami-foo\n---\n# Conversion Webhook Output\nversion: karpenter.k8s.aws/v1\nkind: EC2NodeClass\nmetadata:\n annotations:\n   compatibility.karpenter.k8s.aws/v1beta1-ubuntu: amiFamily,blockDeviceMappings\nspec:\n amiFamily: AL2\n amiSelectorTerms:\n - id: ami-foo\n blockDeviceMappings:\n - deviceName: '/dev/sda1'\n   rootVolume: true\n   ebs:\n     encrypted: true\n     volumeType: gp3\n     volumeSize: 20Gi\n```\n\n#### New Registration Taint\n\n`EC2NodeClasses` using `amiFamily: Custom` must configure the kubelet to register with the `karpenter.sh/unregistered:NoExecute` taint.\nFor example, to achieve this with an AL2023 AMI you would use the following UserData:\n\n```yaml\nversion: karpenter.k8s.aws/v1beta1\nkind: EC2NodeClass\nspec:\n  amiFamily: Custom\n  amiSelectorTerms:\n    - id: ami-custom-al2023-ami\n  userData: |\n    apiVersion: node.eks.aws/v1alpha1\n    kind: NodeConfig\n    spec:\n      # ...\n      kubelet:\n        config:\n          # ...\n          registerWithTaints:\n            - key: karpenter.sh/unregistered\n              effect: NoExecute\n```\n\nIf you are using one of Karpenter's managed AMI families, this will be handled for you by Karpenter's [generated UserData]({{<ref \"../concepts/nodeclasses.md#specuserdata\">}}).\n\n## Upgrading\n\nBefore proceeding with the upgrade, be sure to review the [changelog]({{<ref \"#changelog\">}}) and review the [upgrade procedure]({{<ref \"#upgrade-procedure\">}}) in its entirety.\nThe procedure can be split into two sections:\n\n* Steps 1 through 6 will upgrade you to the latest patch release on your current minor version.\n* Steps 7 through 11 will then upgrade you to the latest `v1.0` release.\n\nWhile it is possible to upgrade directly from any patch version on versions `v0.33` through `v0.37`, rollback from `v1.0.x` is only supported on the latest patch releases.\nUpgrading directly may leave you unable to rollback.\nFor more information on the rollback procedure, refer to the [downgrading section]({{<ref \"#downgrading\">}}).\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nThe examples provided in the [upgrade procedure]({{<ref \"#upgrade-procedure\">}}) assume you've installed Karpenter following the [getting started guide]({{<ref \"../getting-started/getting-started-with-karpenter/_index.md\">}}).\nIf you are using IaC / GitOps, you may need to adapt the procedure to fit your specific infrastructure solution.\nYou should still review the upgrade procedure; the sequence of operations remains the same regardless of the solution used to roll out the changes.\n{{% /alert %}}\n\n\n#### Upgrade Procedure\n\n1. Configure environment variables for the cluster you're upgrading:\n\n    ```bash\n    export AWS_PARTITION=\"aws\" # if you are not using standard partitions, you may need to configure to aws-cn / aws-us-gov\n    export CLUSTER_NAME=\"${USER}-karpenter-demo\"\n    export AWS_REGION=\"us-west-2\"\n    export AWS_ACCOUNT_ID=\"$(aws sts get-caller-identity --query Account --output text)\"\n    export KARPENTER_NAMESPACE=kube-system\n    export KARPENTER_IAM_ROLE_ARN=\"arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/${CLUSTER_NAME}-karpenter\"\n    ```\n\n2. Determine your current Karpenter version:\n   ```bash\n   kubectl get deployment -A -l app.kubernetes.io/name=karpenter -ojsonpath=\"{.items[0].metadata.labels['app\\.kubernetes\\.io/version']}{'\\n'}\"\n   ```\n\n   To upgrade to v1, you must be running a Karpenter version between `v0.33` and `v0.37`.\n   If you are on an older version, you must upgrade before continuing with this guide.\n\n3. Before upgrading to v1, we're going to upgrade to a patch release that supports rollback.\n   Set the `KARPENTER_VERSION` environment variable to the latest patch release for your current minor version.\n   The following releases are the current latest:\n\n   * `0.37.7`\n   * `0.36.9`\n   * `0.35.12`\n   * `v0.34.13`\n   * `v0.33.12`\n\n   ```bash\n   # Note: v0.33.x and v0.34.x include the v prefix, omit it for versions v0.35+\n   export KARPENTER_VERSION=\"0.37.7\" # Replace with your minor version\n   ```\n\n4. Upgrade Karpenter to the latest patch release for your current minor version.\n   Note that webhooks must be enabled.\n\n    ```bash\n    # Service account annotation can be dropped when using pod identity\n    helm upgrade --install karpenter oci://public.ecr.aws/karpenter/karpenter --version ${KARPENTER_VERSION} --namespace \"${KARPENTER_NAMESPACE}\" --create-namespace \\\n      --set serviceAccount.annotations.\"eks\\.amazonaws\\.com/role-arn\"=${KARPENTER_IAM_ROLE_ARN} \\\n      --set settings.clusterName=${CLUSTER_NAME} \\\n      --set settings.interruptionQueue=${CLUSTER_NAME} \\\n      --set controller.resources.requests.cpu=1 \\\n      --set controller.resources.requests.memory=1Gi \\\n      --set controller.resources.limits.cpu=1 \\\n      --set controller.resources.limits.memory=1Gi \\\n      --set webhook.enabled=true \\\n      --set webhook.port=8443 \\\n      --wait\n    ```\n\n5. Apply the latest patch version of your current minor version's Custom Resource Definitions (CRDs).\n   Applying this version of the CRDs will enable the use of both the `v1` and `v1beta1` APIs on this version via the conversion webhooks.\n   Note that this is only for rollback purposes, and new features available with the `v1` APIs will not work on your minor version.\n\n   ```bash\n   helm upgrade --install karpenter-crd oci://public.ecr.aws/karpenter/karpenter-crd --version \"${KARPENTER_VERSION}\" --namespace \"${KARPENTER_NAMESPACE}\" --create-namespace \\\n       --set webhook.enabled=true \\\n       --set webhook.serviceName=\"karpenter\" \\\n       --set webhook.port=8443\n   ```\n   {{% alert title=\"Note\" color=\"primary\" %}}\n   To properly template the `conversion` field in the CRD, the `karpenter-crd` chart must be used.\n   If you're using a GitOps solution to manage your Karpenter installation, you should use this chart to manage your CRDs.\n   You should set `skipCrds` to true for the main `karpenter` chart (e.g. [Argo CD](https://argo-cd.readthedocs.io/en/latest/user-guide/helm/#helm-skip-crds)).\n\n   Alternatively, you can install the CRDs with the main chart and apply the following patches. However, we strongly recommend using the dedicated CRD chart.\n\n   ```bash\n   SERVICE_NAME=\"karpenter\"\n   SERVICE_NAMESPACE=\"kube-system\"\n   SERVICE_PORT=\"8443\"\n   CRDS=(\"nodepools.karpenter.sh\" \"nodeclaims.karpenter.sh\" \"ec2nodeclasses.karpenter.k8s.aws\")\n   for crd in ${CRDS[@]}; do\n       kubectl patch customresourcedefinitions ${crd} --patch-file=/dev/stdin <<-EOF\n   spec:\n     conversion:\n       webhook:\n         clientConfig:\n           service:\n             name: \"${SERVICE_NAME}\"\n             namespace: \"${SERVICE_NAMESPACE}\"\n             port: ${SERVICE_PORT}\n   EOF\n   done\n   ```\n   {{% /alert %}}\n\n   {{% alert title=\"Note\" color=\"primary\" %}}\n   Helm uses annotations on resources it provisions to track ownership.\n   Switching to the new chart may result in Helm failing to install the chart due to `invalid ownership metadata`.\n   If you encounter errors at this step, consult this [troubleshooting entry]({{<ref \"../troubleshooting/#helm-error-when-installing-the-karpenter-crd-chart\" >}}) to resolve.\n   {{% /alert %}}\n\n\n6. Validate that Karpenter is operating as expected on this patch release.\n   If you need to rollback after upgrading to `v1`, this is the version you will need to rollback to.\n\n   {{% alert title=\"Note\" color=\"primary\" %}}\n   The conversion webhooks must be able to communicate with the API server to operate correctly.\n   If you see errors related to the conversion webhooks, ensure that your security groups and network policies allow traffic between the webhooks and the API server.\n   {{% /alert %}}\n\n7. We're now ready to begin the upgrade to `v1`. Set the `KARPENTER_VERSION` environment variable to the latest `v1.0.x` release.\n\n    ```bash\n    export KARPENTER_VERSION=\"1.0.11\"\n    ```\n\n8. Attach the v1 policy to your existing NodeRole.\n   Notable Changes to the IAM Policy include additional tag-scoping for the `eks:eks-cluster-name` tag for instances and instance profiles.\n   We will remove this additional policy later once the controller has been migrated to v1 and we've updated the Karpenter cloudformation stack.\n\n   ```bash\n   POLICY_DOCUMENT=$(mktemp)\n   curl -fsSL https://raw.githubusercontent.com/aws/karpenter-provider-aws/13d6fc014ea59019b1c3b1953184efc41809df11/website/content/en/v1.0/upgrading/get-controller-policy.sh | sh | envsubst > ${POLICY_DOCUMENT}\n   POLICY_NAME=\"KarpenterControllerPolicy-${CLUSTER_NAME}-v1\"\n   ROLE_NAME=\"${CLUSTER_NAME}-karpenter\"\n   POLICY_ARN=\"$(aws iam create-policy --policy-name \"${POLICY_NAME}\" --policy-document \"file://${POLICY_DOCUMENT}\" | jq -r .Policy.Arn)\"\n   aws iam attach-role-policy --role-name \"${ROLE_NAME}\" --policy-arn \"${POLICY_ARN}\"\n   ```\n\n9. Apply the `v1` Custom Resource Definitions (CRDs):\n\n    ```bash\n    helm upgrade --install karpenter-crd oci://public.ecr.aws/karpenter/karpenter-crd --version \"${KARPENTER_VERSION}\" --namespace \"${KARPENTER_NAMESPACE}\" --create-namespace \\\n        --set webhook.enabled=true \\\n        --set webhook.serviceName=\"karpenter\" \\\n        --set webhook.port=8443\n    ```\n\n10. Upgrade Karpenter to the latest `v1.0.x` release.\n\n    ```bash\n    # Service account annotion can be dropped when using pod identity\n    helm upgrade --install karpenter oci://public.ecr.aws/karpenter/karpenter --version ${KARPENTER_VERSION} --namespace \"${KARPENTER_NAMESPACE}\" --create-namespace \\\n      --set serviceAccount.annotations.\"eks\\.amazonaws\\.com/role-arn\"=${KARPENTER_IAM_ROLE_ARN} \\\n      --set settings.clusterName=${CLUSTER_NAME} \\\n      --set settings.interruptionQueue=${CLUSTER_NAME} \\\n      --set controller.resources.requests.cpu=1 \\\n      --set controller.resources.requests.memory=1Gi \\\n      --set controller.resources.limits.cpu=1 \\\n      --set controller.resources.limits.memory=1Gi \\\n      --wait\n    ```\n    {{% alert title=\"Note\" color=\"primary\" %}}\n<!-- Note: don't indent this line to match the indenting of the alert box. Hugo will create a code block. -->\nKarpenter has deprecated and moved a number of Helm values as part of the v1 release. Ensure that you upgrade to the newer version of these helm values during your migration to v1. You can find detail for all the settings that were moved in the [v1 Upgrade Reference]({{<ref \"#helm-values\" >}}).\n    {{% /alert %}}\n\n    {{% alert title=\"Note\" color=\"primary\" %}}\n<!-- Note: don't indent this line to match the indenting of the alert box. Hugo will create a code block. -->\nKarpenter versions 0.32.x through 0.37.x have  a number of mutating webhooks and validating webhooks that are not present\nin 1.0.x; if you are only using `helm` to generate manifests and are not using it to deploy them, you must clean up\nthese webhook configurations by hand: specifically, you will need to remove the following resources:\n\n* `defaulting.webhook.karpenter.k8s.aws`\n* `validation.webhook.karpenter.sh`\n* `validation.webhook.config.karpenter.sh`\n* `validation.webhook.karpenter.k8s.aws`\n    {{% /alert %}}\n\n11. Upgrade your cloudformation stack and remove the temporary `v1` controller policy.\n\n    ```bash\n    TEMPOUT=$(mktemp)\n    curl -fsSL https://raw.githubusercontent.com/aws/karpenter-provider-aws/v\"${KARPENTER_VERSION}\"/website/content/en/preview/getting-started/getting-started-with-karpenter/cloudformation.yaml > \"${TEMPOUT}\"\n    aws cloudformation deploy \\\n      --stack-name \"Karpenter-${CLUSTER_NAME}\" \\\n      --template-file \"${TEMPOUT}\" \\\n      --capabilities CAPABILITY_NAMED_IAM \\\n      --parameter-overrides \"ClusterName=${CLUSTER_NAME}\"\n\n    ROLE_NAME=\"${CLUSTER_NAME}-karpenter\"\n    POLICY_NAME=\"KarpenterControllerPolicy-${CLUSTER_NAME}-v1\"\n    POLICY_ARN=$(aws iam list-policies --query \"Policies[?PolicyName=='${POLICY_NAME}'].Arn\" --output text)\n    aws iam detach-role-policy --role-name \"${ROLE_NAME}\" --policy-arn \"${POLICY_ARN}\"\n    aws iam delete-policy --policy-arn \"${POLICY_ARN}\"\n    ```\n\n## Downgrading\n\nOnce you upgrade to Karpenter `v1.0.x`, both `v1` and `v1beta1` resources may be stored in ETCD.\nDue to this, you may only rollback to a version of Karpenter with the conversion webhooks.\nThe following releases should be used as rollback targets:\n\n* `v0.37.7`\n* `v0.36.9`\n* `v0.35.12`\n* `v0.34.13`\n* `v0.33.12`\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nWhen rolling back from `v1`, Karpenter will not retain data that was only valid in the `v1` APIs.\nFor instance, if you upgraded from `v0.33.5` to `v1.0.x`, updated the `NodePool.Spec.Disruption.Budgets` field, and then rolled back to `v0.33.12`, Karpenter would not retain the `NodePool.Spec.Disruption.Budgets` field, as that was introduced in `v0.34.0`.\n\nIf you have configured the `kubelet` field on your `EC2NodeClass` and have removed the `compatibility.karpenter.sh/v1beta1-kubelet-conversion` annotation from your `NodePools`, you must re-add the annotation before downgrading.\nFor more information, refer to [kubelet configuration migration]({{<ref \"#kubelet-configuration-migration\">}}).\n{{% /alert %}}\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nSince both `v1beta1` and `v1` will be served, `kubectl` will default to returning the `v1` version of your CRs.\nTo interact with the v1beta1 version of your CRs, you'll need to add the full resource path (including api version) into `kubectl` calls.\nFor example: `kubectl get nodepool.v1beta1.karpenter.sh`.\n{{% /alert %}}\n\n#### Downgrade Procedure\n\n1. Configure environment variables for the cluster you're downgrading:\n\n   ```bash\n   export AWS_PARTITION=\"aws\" # if you are not using standard partitions, you may need to configure to aws-cn / aws-us-gov\n   export CLUSTER_NAME=\"${USER}-karpenter-demo\"\n   export AWS_REGION=\"us-west-2\"\n   export AWS_ACCOUNT_ID=\"$(aws sts get-caller-identity --query Account --output text)\"\n   export KARPENTER_NAMESPACE=kube-system\n   export KARPENTER_IAM_ROLE_ARN=\"arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/${CLUSTER_NAME}-karpenter\"\n   ```\n\n2. Configure your target Karpenter version. You should select one of the following versions:\n   * `0.37.7`\n   * `0.36.9`\n   * `0.35.12`\n   * `v0.34.13`\n   * `v0.33.12`\n\n   ```bash\n   # Note: v0.33.x and v0.34.x include the v prefix, omit it for versions v0.35+\n   export KARPENTER_VERSION=\"0.37.7\" # Replace with your minor version\n   ```\n\n3. Attach the `v1beta1` policy from your target version to your existing NodeRole.\n\n   ```bash\n   POLICY_DOCUMENT=$(mktemp)\n   curl -fsSL https://raw.githubusercontent.com/aws/karpenter-provider-aws/website/docs/v1.0/upgrading/get-controller-policy.sh | sh | envsubst > ${POLICY_DOCUMENT}\n   POLICY_NAME=\"KarpenterControllerPolicy-${CLUSTER_NAME}-${KARPENTER_VERSION}\"\n   ROLE_NAME=\"${CLUSTER_NAME}-karpenter\"\n   POLICY_ARN=\"$(aws iam create-policy --policy-name \"${POLICY_NAME}\" --policy-document \"file://${POLICY_DOCUMENT}\" | jq -r .Policy.Arn)\"\n   aws iam attach-role-policy --role-name \"${ROLE_NAME}\" --policy-arn \"${POLICY_ARN}\"\n   ```\n\n4. Rollback the Karpenter Controller:\n   Note that webhooks must be **enabled** to rollback.\n   Without enabling the webhooks, Karpenter will be unable to correctly operate on `v1` versions of the resources already stored in ETCD.\n\n   ```bash\n   # Service account annotation can be dropped when using pod identity\n   helm upgrade --install karpenter oci://public.ecr.aws/karpenter/karpenter --version ${KARPENTER_VERSION} --namespace \"${KARPENTER_NAMESPACE}\" --create-namespace \\\n     --set serviceAccount.annotations.\"eks\\.amazonaws\\.com/role-arn\"=${KARPENTER_IAM_ROLE_ARN} \\\n     --set settings.clusterName=${CLUSTER_NAME} \\\n     --set settings.interruptionQueue=${CLUSTER_NAME} \\\n     --set controller.resources.requests.cpu=1 \\\n     --set controller.resources.requests.memory=1Gi \\\n     --set controller.resources.limits.cpu=1 \\\n     --set controller.resources.limits.memory=1Gi \\\n     --set webhook.enabled=true \\\n     --set webhook.port=8443 \\\n     --wait\n   ```\n\n5. Rollback the CRDs.\n\n   ```bash\n   helm upgrade --install karpenter-crd oci://public.ecr.aws/karpenter/karpenter-crd --version \"${KARPENTER_VERSION}\" --namespace \"${KARPENTER_NAMESPACE}\" --create-namespace \\\n     --set webhook.enabled=true \\\n     --set webhook.serviceName=karpenter \\\n     --set webhook.port=8443\n   ```\n\n6. Rollback your cloudformation stack and remove the temporary `v1beta1` controller policy.\n\n   ```bash\n   TEMPOUT=$(mktemp)\n   VERSION_TAG=$([[ ${KARPENTER_VERSION} == v* ]] && echo \"${KARPENTER_VERSION}\" || echo \"v${KARPENTER_VERSION}\")\n   curl -fsSL https://raw.githubusercontent.com/aws/karpenter-provider-aws/${VERSION_TAG}/website/content/en/preview/getting-started/getting-started-with-karpenter/cloudformation.yaml > \"${TEMPOUT}\"\n   aws cloudformation deploy \\\n     --stack-name \"Karpenter-${CLUSTER_NAME}\" \\\n     --template-file \"${TEMPOUT}\" \\\n     --capabilities CAPABILITY_NAMED_IAM \\\n     --parameter-overrides \"ClusterName=${CLUSTER_NAME}\"\n\n   ROLE_NAME=\"${CLUSTER_NAME}-karpenter\"\n   POLICY_NAME=\"KarpenterControllerPolicy-${CLUSTER_NAME}-${KARPENTER_VERSION}\"\n   POLICY_ARN=$(aws iam list-policies --query \"Policies[?PolicyName=='${POLICY_NAME}'].Arn\" --output text)\n   aws iam detach-role-policy --role-name \"${ROLE_NAME}\" --policy-arn \"${POLICY_ARN}\"\n   aws iam delete-policy --policy-arn \"${POLICY_ARN}\"\n   ```\n\n## Before Upgrading to `v1.1.0`\n\nYou've successfully upgraded to `v1.0`, but more than likely your manifests are still `v1beta1`.\nYou can continue to apply these `v1beta1` manifests on `v1.0`, but support will be dropped in `v1.1`.\nBefore upgrading to `v1.1+`, you will need to migrate your manifests over to `v1`.\n\n#### Manifest Migration\n\nYou can manually migrate your manifests by referring to the [changelog]({{<ref \"#changelog\">}}) and the updated API docs ([NodePool]({{<ref \"../concepts/nodepools.md\">}}), [EC2NodeClass]({{<ref \"../concepts/nodeclasses.md\">}})).\nAlternatively, you can take advantage of the conversion webhooks.\nPerforming a `get` using `kubectl` will return the `v1` version of the resource, even if it was applied with a `v1beta1` manifest.\n\nFor example, applying the following `v1beta1` manifest and performing a `get` will return the `v1` equivalent:\n```bash\ncat <<EOF | kubectl apply -f -\napiVersion: karpenter.sh/v1beta1\nkind: NodePool\nmetadata:\n  name: default\nspec:\n  template:\n    spec:\n      requirements:\n        - key: kubernetes.io/arch\n          operator: In\n          values: [\"amd64\"]\n        - key: kubernetes.io/os\n          operator: In\n          values: [\"linux\"]\n        - key: karpenter.sh/capacity-type\n          operator: In\n          values: [\"on-demand\"]\n        - key: karpenter.k8s.aws/instance-category\n          operator: In\n          values: [\"c\", \"m\", \"r\"]\n        - key: karpenter.k8s.aws/instance-generation\n          operator: Gt\n          values: [\"2\"]\n      nodeClassRef:\n        apiVersion: karpenter.k8s.aws/v1beta1\n        kind: EC2NodeClass\n        name: default\n  limits:\n    cpu: 1000\n  disruption:\n    consolidationPolicy: WhenUnderutilized\n    expireAfter: 720h # 30 * 24h = 720h\nEOF\nkubectl get nodepools default -o yaml > v1-nodepool.yaml\n```\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nDue to the many-to-one relation between `NodePools` and `EC2NodeClasses`, the `kubelet` field is **not** automtatically migrated by the conversion webhooks.\nWhen updating your manifests, make sure you are migrating the `kubelet` field from your `NodePools` to your `EC2NodeClasses`.\nFor more information, refer to [kubelet configuration migration]({{<ref \"#kubelet-configuration-migration\">}}).\n{{% /alert %}}\n\n#### Kubelet Configuration Migration\n\nOne of the changes made to the `NodePool` and `EC2NodeClass` schemas for `v1` was the migration of the `kubelet` field from the `NodePool` to the `EC2NodeClass`.\nThis change is difficult to properly handle with conversion webhooks due to the many-to-one relation between `NodePools` and `EC2NodeClasses`.\nTo facilitate this, Karpenter adds the `compatibility.karpenter.sh/v1beta1-kubelet-conversion` annotation to converted `NodePools`.\nIf this annotation is present, it will take precedence over the `kubelet` field in the `EC2NodeClass`.\n\nThis annotation is only meant to support migration, and support will be dropped in `v1.1`.\nBefore upgrading to `v1.1+`, you must migrate your kubelet configuration to your `EC2NodeClasses`, and remove the compatibility annotation from your `NodePools`.\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nDo not remove the compatibility annotation until you have updated your `EC2NodeClass` with the matching `kubelet` field.\nOnce the annotations is removed, the `EC2NodeClass` will be used as the source of truth for your kubelet configuration.\nIf the field doesn't match, this will result in Nodes drifting.\n\nIf you need to rollback to a pre-`v1.0` version after removing the compatibility annotation, you must re-add it before rolling back.\n{{% /alert %}}\n\nIf you have multiple `NodePools` that refer to the same `EC2NodeClass`, but have varying kubelet configurations, you will need to create a separate `EC2NodeClass` for unique set of kubelet configurations.\n\nFor example, consider the following `v1beta1` manifests:\n```yaml\napiVersion: karpenter.sh/v1beta1\nkind: NodePool\nmetadata:\n  name: nodepool-a\nspec:\n  template:\n    spec:\n      kubelet:\n        maxPods: 10\n      nodeClassRef:\n        apiVersion: karpenter.k8s.aws/v1beta1\n        kind: EC2NodeClass\n        name: nodeclass\n---\napiVersion: karpenter.sh/v1beta1\nkind: NodePool\nmetadata:\n  name: nodepool-b\nspec:\n  template:\n    spec:\n      kubelet:\n        maxPods: 20\n      nodeClassRef:\n        apiVersion: karpenter.k8s.aws/v1beta1\n        kind: EC2NodeClass\n        name: nodeclass\n---\napiVersion: karpenter.k8s.aws/v1beta1\nkind: EC2NodeClass\nmetadata:\n  name: nodeclass\n```\n\nIn this example, we have two `NodePools` with different `kubelet` values, but they refer to the same `EC2NodeClass`.\nThe conversion webhook will annotate the `NodePools` with the `compatibility.karpenter.sh/v1beta1-kubelet-conversion` annotation.\nThis is the result of that conversion:\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: nodepool-a\n  annotations:\n    compatibility.karpenter.sh/v1beta1-kubelet-conversion: \"{\\\"maxPods\\\": 10}\"\nspec:\n  template:\n    spec:\n      nodeClassRef:\n        group: karpenter.k8s.aws\n        kind: EC2NodeClass\n        name: nodeclass\n---\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: nodepool-b\n  annotations:\n    compatibility.karpenter.sh/v1beta1-kubelet-conversion: \"{\\\"maxPods\\\": 20}\"\nspec:\n  template:\n    spec:\n      nodeClassRef:\n        group: karpenter.k8s.aws\n        kind: EC2NodeClass\n        name: nodeclass\n---\napiVersion: karpenter.k8s.aws/v1\nkind: EC2NodeClass\nmetadata:\n  name: nodeclass\n```\n\nBefore upgrading to `v1.1`, you must update your `NodePools` to refer to separate `EC2NodeClasses` to retain this behavior.\nNote that this will drift the Nodes associated with these NodePools due to the updated `nodeClassRef`.\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: nodepool-a\nspec:\n  template:\n    spec:\n      nodeClassRef:\n        group: karpenter.k8s.aws\n        kind: EC2NodeClass\n        name: nodeclass-a\n---\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: nodepool-b\nspec:\n  template:\n    spec:\n      nodeClassRef:\n        group: karpenter.k8s.aws\n        kind: EC2NodeClass\n        name: nodeclass-b\n---\napiVersion: karpenter.k8s.aws/v1\nkind: EC2NodeClass\nmetadata:\n  name: nodeclass-a\nspec:\n  kubelet:\n    maxPods: 10\n---\napiVersion: karpenter.k8s.aws/v1\nkind: EC2NodeClass\nmetadata:\n  name: nodeclass-b\nspec:\n  kubelet:\n    maxPods: 20\n```\n\n#### NodeClassRef Requirements\n\nStarting with Karpenter `v1.1.0`, `nodeClassRef.group` and `nodeClassRef.kind` are strictly required on both NodePools and NodeClaims.\nEnsure these values are set for all resources **before** upgrading Karpenter.\nFailing to do so will result in Karpenter being unable to operate against those resources.\nFor the AWS provider, the group will always be `karpenter.k8s.aws` and the kind will always be `EC2NodeClass`.\n\n#### Stored Version Migration\n\nOnce you have upgraded all of your manifests, you need to ensure that all existing resources are stored as `v1` in ETCD.\nKarpenter `v1.0.6`+ includes a controller to automatically migrate all stored resources to `v1`.\nTo validate that the migration was successful, you should check the stored versions for Karpenter's CRDs:\n\n```bash\nfor crd in \"nodepools.karpenter.sh\" \"nodeclaims.karpenter.sh\" \"ec2nodeclasses.karpenter.k8s.aws\"; do\n    kubectl get crd ${crd} -ojsonpath=\"{.status.storedVersions}{'\\n'}\"\ndone\n```\n\nFor more details on this migration process, refer to the [kubernetes docs](https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definition-versioning/#upgrade-existing-objects-to-a-new-stored-version).\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nIf the `v1beta1` stored version persists, ensure that you are on Karpenter `v1.0.6+`.\nAdditionally, ensure that the storage version on the CRD in question is set to `v1`.\n\n```bash\nkubectl get crd ${crd} -ojsonpath=\"{.spec.versions[?(.storage==true)].name}{'\\n'}\"\n```\n\nIf it is not, this indicates an issue upgrading the CRD when upgrading Karpenter to `v1.0.x`.\nRevisit step 9 of the [upgrade procedure]({{< ref \"#upgrading\" >}}) and ensure the CRD was updated correctly.\n{{% /alert %}}\n\n## Changelog\n\n* Features:\n  * AMI Selector Terms has a new Alias field which can only be set by itself in `EC2NodeClass.Spec.AMISelectorTerms`\n  * Disruption Budgets by Reason was added to `NodePool.Spec.Disruption.Budgets`\n  * TerminationGracePeriod was added to `NodePool.Spec.Template.Spec`.\n  * `LOG_OUTPUT_PATHS` and `LOG_ERROR_OUTPUT_PATHS` environment variables added\n* API Rename: NodePool’s ConsolidationPolicy `WhenUnderutilized` is now renamed to `WhenEmptyOrUnderutilized`\n* Behavior Changes:\n  * Expiration is now forceful and begins draining as soon as it’s expired. Karpenter does not wait for replacement capacity to be available before draining, but will start provisioning a replacement as soon as the node is expired and begins draining.\n  * Karpenter's generated NodeConfig now takes precedence when generating UserData with the AL2023 `amiFamily`. If you're setting any values managed by Karpenter in your AL2023 UserData, configure these through Karpenter natively (e.g. kubelet configuration fields).\n  * Karpenter now adds a `karpenter.sh/unregistered:NoExecute` taint to nodes in injected UserData when using alias in AMISelectorTerms or non-Custom AMIFamily. When using `amiFamily: Custom`, users will need to add this taint into their UserData, where Karpenter will automatically remove it when provisioning nodes.\n  * Discovered standard AL2023 AMIs will no longer be considered compatible with GPU / accelerator workloads. If you're using an AL2023 EC2NodeClass (without AMISelectorTerms) for these workloads, you will need to select your AMI via AMISelectorTerms (non-alias).\n  * Karpenter now waits for underlying instances to be completely terminated before removing the associated nodes. This means it may take longer for nodes to be deleted and for nodeclaims to get cleaned up.\n  * NodePools now have [status conditions]({{< relref \"../concepts/nodepools/#statusconditions\" >}}) that indicate if they are ready. If not, then they will not be considered during scheduling.\n  * NodeClasses now have [status conditions]({{< relref \"../concepts/nodeclasses/#statusconditions\" >}}) that indicate if they are ready. If they are not ready, NodePools that reference them through their `nodeClassRef` will not be considered during scheduling.\n  * Karpenter will no longer set `associatePublicIPAddress` to false in private subnets by default. Users with IAM policies / SCPs that require this field to be set explicitly should configure this through their `EC2NodeClass` ([ref]({{<ref \"../concepts/nodeclasses/#specassociatepublicipaddress\">}})).\n* API Moves:\n  * ExpireAfter has moved from the `NodePool.Spec.Disruption` block to `NodePool.Spec.Template.Spec`, and is now a drift-able field.\n  * `Kubelet` was moved to the EC2NodeClass from the NodePool.\n* RBAC changes: added `delete pods` | added `get, patch crds` | added `update nodes` | removed `create nodes`\n* Breaking API (Manual Migration Needed):\n  * Ubuntu is dropped as a first class supported AMI Family\n  * `karpenter.sh/do-not-consolidate` (annotation), `karpenter.sh/do-not-evict` (annotation), and `karpenter.sh/managed-by` (tag) are all removed. `karpenter.sh/managed-by`, which currently stores the cluster name in its value, will be replaced by eks:eks-cluster-name. `karpenter.sh/do-not-consolidate` and `karpenter.sh/do-not-evict` are both replaced by `karpenter.sh/do-not-disrupt`.\n  * The taint used to mark nodes for disruption and termination changed from `karpenter.sh/disruption=disrupting:NoSchedule` to `karpenter.sh/disrupted:NoSchedule`. It is not recommended to tolerate this taint, however, if you were tolerating it in your applications, you'll need to adjust your taints to reflect this.\n* Environment Variable Changes:\n  * Environment Variable Changes\n  * `LOGGING_CONFIG, `ASSUME_ROLE_ARN`, `ASSUME_ROLE_DURATION` Dropped\n  * `LEADER_ELECT` renamed to `DISABLE_LEADER_ELECTION`\n  * `FEATURE_GATES.DRIFT=true` was dropped and promoted to Stable, and cannot be disabled.\n      * Users currently opting out of drift, disabling the drift feature flag will no longer be able to do so.\n* Defaults changed:\n  * API: Karpenter will drop support for IMDS access from containers by default on new EC2NodeClasses by updating the default of `httpPutResponseHopLimit` from 2 to 1.\n  * API: ConsolidateAfter is required. Users couldn’t set this before with ConsolidationPolicy: WhenUnderutilized, where this is now required. Users can set it to 0 to have the same behavior as in v1beta1.\n  * API: All `NodeClassRef` fields are now all required, and apiVersion has been renamed to group\n  * API: AMISelectorTerms are required. Setting an Alias cannot be done with any other type of term, and must match the AMI Family that's set or be Custom.\n  * Helm: Deployment spec TopologySpreadConstraint to have required zonal spread over preferred. Users who had one node running their Karpenter deployments need to either:\n    * Have two nodes in different zones to ensure both Karpenter replicas schedule\n    * Scale down their Karpenter replicas from 2 to 1 in the helm chart\n    * Edit and relax the topology spread constraint in their helm chart from DoNotSchedule to ScheduleAnyway\n  * Helm/Binary: `controller.METRICS_PORT` default changed back to 8080\n\n### Updated metrics\n\nThe following changes have been made to Karpenter's metrics in `v1.0.0`.\n\n#### Renamed Metrics\n\n| Type | Original Name | New Name |\n|--|--|--|\n| Node | karpenter_nodes_termination_time_seconds | karpenter_nodes_termination_duration_seconds |\n| Node | karpenter_nodes_terminated | karpenter_nodes_terminated_total |\n| Node | karpenter_nodes_leases_deleted | karpenter_nodes_leases_deleted_total |\n| Node | karpenter_nodes_created | karpenter_nodes_created_total |\n| Pod | karpenter_pods_startup_time_seconds | karpenter_pods_startup_duration_seconds |\n| Disruption | karpenter_disruption_replacement_nodeclaim_failures_total | karpenter_voluntary_disruption_queue_failures_total |\n| Disruption | karpenter_disruption_evaluation_duration_seconds | karpenter_voluntary_disruption_decision_evaluation_duration_seconds |\n| Disruption | karpenter_disruption_eligible_nodes | karpenter_voluntary_disruption_eligible_nodes |\n| Disruption | karpenter_disruption_consolidation_timeouts_total | karpenter_voluntary_disruption_consolidation_timeouts_total |\n| Disruption | karpenter_disruption_budgets_allowed_disruptions | karpenter_nodepools_allowed_disruptions |\n| Disruption | karpenter_disruption_actions_performed_total | karpenter_voluntary_disruption_decisions_total |\n| Provisioner | karpenter_provisioner_scheduling_simulation_duration_seconds | karpenter_scheduler_scheduling_duration_seconds |\n| Provisioner | karpenter_provisioner_scheduling_queue_depth | karpenter_scheduler_queue_depth |\n| Interruption | karpenter_interruption_received_messages | karpenter_interruption_received_messages_total |\n| Interruption | karpenter_interruption_deleted_messages | karpenter_interruption_deleted_messages_total |\n| Interruption | karpenter_interruption_message_latency_time_seconds | karpenter_interruption_message_queue_duration_seconds |\n| NodePool     | karpenter_nodepool_usage | karpenter_nodepools_usage |\n| NodePool     | karpenter_nodepool_limit | karpenter_nodepools_limit |\n| NodeClaim    | karpenter_nodeclaims_terminated | karpenter_nodeclaims_terminated_total |\n| NodeClaim    | karpenter_nodeclaims_disrupted | karpenter_nodeclaims_disrupted_total |\n| NodeClaim    | karpenter_nodeclaims_created | karpenter_nodeclaims_created_total |\n\n#### Dropped Metrics\n\n| Type | Name |\n|--|--|\n| Disruption  | karpenter_disruption_replacement_nodeclaim_initialized_seconds |\n| Disruption  | karpenter_disruption_queue_depth |\n| Disruption  | karpenter_disruption_pods_disrupted_total |\n|             | karpenter_consistency_errors |\n| NodeClaim   | karpenter_nodeclaims_registered |\n| NodeClaim   | karpenter_nodeclaims_launched |\n| NodeClaim   | karpenter_nodeclaims_initialized |\n| NodeClaim   | karpenter_nodeclaims_drifted |\n| Provisioner | karpenter_provisioner_scheduling_duration_seconds |\n| Interruption | karpenter_interruption_actions_performed |\n\n{{% alert title=\"Note\" color=\"warning\" %}}\nKarpenter now waits for the underlying instance to be completely terminated before deleting a node and orchestrates this by emitting `NodeClaimNotFoundError`.\nWith this change we expect to see an increase in the `NodeClaimNotFoundError`.\nCustomers can filter out this error by label in order to get accurate values for `karpenter_cloudprovider_errors_total` metric.\nUse this Prometheus filter expression - `({controller!=\"node.termination\"} or {controller!=\"nodeclaim.termination\"}) and {error!=\"NodeClaimNotFoundError\"}`.\n{{% /alert %}}\n"
  },
  {
    "path": "website/content/en/v1.0/upgrading/v1beta1-controller-policy.json",
    "content": "{\n  \"Version\": \"2012-10-17\",\n  \"Statement\": [\n    {\n      \"Sid\": \"AllowScopedEC2InstanceActions\",\n      \"Effect\": \"Allow\",\n      \"Resource\": [\n        \"arn:${AWS_PARTITION}:ec2:${AWS_REGION}::image/*\",\n        \"arn:${AWS_PARTITION}:ec2:${AWS_REGION}::snapshot/*\",\n        \"arn:${AWS_PARTITION}:ec2:${AWS_REGION}:*:spot-instances-request/*\",\n        \"arn:${AWS_PARTITION}:ec2:${AWS_REGION}:*:security-group/*\",\n        \"arn:${AWS_PARTITION}:ec2:${AWS_REGION}:*:subnet/*\",\n        \"arn:${AWS_PARTITION}:ec2:${AWS_REGION}:*:launch-template/*\"\n      ],\n      \"Action\": [\n        \"ec2:RunInstances\",\n        \"ec2:CreateFleet\"\n      ]\n    },\n    {\n      \"Sid\": \"AllowScopedEC2InstanceActionsWithTags\",\n      \"Effect\": \"Allow\",\n      \"Resource\": [\n        \"arn:${AWS_PARTITION}:ec2:${AWS_REGION}:*:fleet/*\",\n        \"arn:${AWS_PARTITION}:ec2:${AWS_REGION}:*:instance/*\",\n        \"arn:${AWS_PARTITION}:ec2:${AWS_REGION}:*:volume/*\",\n        \"arn:${AWS_PARTITION}:ec2:${AWS_REGION}:*:network-interface/*\",\n        \"arn:${AWS_PARTITION}:ec2:${AWS_REGION}:*:launch-template/*\"\n      ],\n      \"Action\": [\n        \"ec2:RunInstances\",\n        \"ec2:CreateFleet\",\n        \"ec2:CreateLaunchTemplate\"\n      ],\n      \"Condition\": {\n        \"StringEquals\": {\n          \"aws:RequestTag/kubernetes.io/cluster/${CLUSTER_NAME}\": \"owned\"\n        },\n        \"StringLike\": {\n          \"aws:RequestTag/karpenter.sh/nodepool\": \"*\"\n        }\n      }\n    },\n    {\n      \"Sid\": \"AllowScopedResourceCreationTagging\",\n      \"Effect\": \"Allow\",\n      \"Resource\": [\n        \"arn:${AWS_PARTITION}:ec2:${AWS_REGION}:*:fleet/*\",\n        \"arn:${AWS_PARTITION}:ec2:${AWS_REGION}:*:instance/*\",\n        \"arn:${AWS_PARTITION}:ec2:${AWS_REGION}:*:volume/*\",\n        \"arn:${AWS_PARTITION}:ec2:${AWS_REGION}:*:network-interface/*\",\n        \"arn:${AWS_PARTITION}:ec2:${AWS_REGION}:*:launch-template/*\"\n      ],\n      \"Action\": \"ec2:CreateTags\",\n      \"Condition\": {\n        \"StringEquals\": {\n          \"aws:RequestTag/kubernetes.io/cluster/${CLUSTER_NAME}\": \"owned\",\n          \"ec2:CreateAction\": [\n            \"RunInstances\",\n            \"CreateFleet\",\n            \"CreateLaunchTemplate\"\n          ]\n        },\n        \"StringLike\": {\n          \"aws:RequestTag/karpenter.sh/nodepool\": \"*\"\n        }\n      }\n    },\n    {\n      \"Sid\": \"AllowScopedResourceTagging\",\n      \"Effect\": \"Allow\",\n      \"Resource\": \"arn:${AWS_PARTITION}:ec2:${AWS_REGION}:*:instance/*\",\n      \"Action\": \"ec2:CreateTags\",\n      \"Condition\": {\n        \"StringEquals\": {\n          \"aws:ResourceTag/kubernetes.io/cluster/${CLUSTER_NAME}\": \"owned\"\n        },\n        \"StringLike\": {\n          \"aws:ResourceTag/karpenter.sh/nodepool\": \"*\"\n        },\n        \"ForAllValues:StringEquals\": {\n          \"aws:TagKeys\": [\n            \"karpenter.sh/nodeclaim\",\n            \"Name\"\n          ]\n        }\n      }\n    },\n    {\n      \"Sid\": \"AllowScopedDeletion\",\n      \"Effect\": \"Allow\",\n      \"Resource\": [\n        \"arn:${AWS_PARTITION}:ec2:${AWS_REGION}:*:instance/*\",\n        \"arn:${AWS_PARTITION}:ec2:${AWS_REGION}:*:launch-template/*\"\n      ],\n      \"Action\": [\n        \"ec2:TerminateInstances\",\n        \"ec2:DeleteLaunchTemplate\"\n      ],\n      \"Condition\": {\n        \"StringEquals\": {\n          \"aws:ResourceTag/kubernetes.io/cluster/${CLUSTER_NAME}\": \"owned\"\n        },\n        \"StringLike\": {\n          \"aws:ResourceTag/karpenter.sh/nodepool\": \"*\"\n        }\n      }\n    },\n    {\n      \"Sid\": \"AllowRegionalReadActions\",\n      \"Effect\": \"Allow\",\n      \"Resource\": \"*\",\n      \"Action\": [\n        \"ec2:DescribeAvailabilityZones\",\n        \"ec2:DescribeImages\",\n        \"ec2:DescribeInstances\",\n        \"ec2:DescribeInstanceTypeOfferings\",\n        \"ec2:DescribeInstanceTypes\",\n        \"ec2:DescribeLaunchTemplates\",\n        \"ec2:DescribeSecurityGroups\",\n        \"ec2:DescribeSpotPriceHistory\",\n        \"ec2:DescribeSubnets\"\n      ],\n      \"Condition\": {\n        \"StringEquals\": {\n          \"aws:RequestedRegion\": \"${AWS_REGION}\"\n        }\n      }\n    },\n    {\n      \"Sid\": \"AllowSSMReadActions\",\n      \"Effect\": \"Allow\",\n      \"Resource\": \"arn:${AWS_PARTITION}:ssm:${AWS_REGION}::parameter/aws/service/*\",\n      \"Action\": \"ssm:GetParameter\"\n    },\n    {\n      \"Sid\": \"AllowPricingReadActions\",\n      \"Effect\": \"Allow\",\n      \"Resource\": \"*\",\n      \"Action\": \"pricing:GetProducts\"\n    },\n    {\n      \"Sid\": \"AllowInterruptionQueueActions\",\n      \"Effect\": \"Allow\",\n      \"Resource\": \"arn:${AWS_PARTITION}:sqs:${AWS_REGION}:${AWS_ACCOUNT_ID}:${CLUSTER_NAME}\",\n      \"Action\": [\n        \"sqs:DeleteMessage\",\n        \"sqs:GetQueueUrl\",\n        \"sqs:ReceiveMessage\"\n      ]\n    },\n    {\n      \"Sid\": \"AllowPassingInstanceRole\",\n      \"Effect\": \"Allow\",\n      \"Resource\": \"arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/KarpenterNodeRole-${CLUSTER_NAME}\",\n      \"Action\": \"iam:PassRole\",\n      \"Condition\": {\n        \"StringEquals\": {\n          \"iam:PassedToService\": \"ec2.amazonaws.com\"\n        }\n      }\n    },\n    {\n      \"Sid\": \"AllowScopedInstanceProfileCreationActions\",\n      \"Effect\": \"Allow\",\n      \"Resource\": \"*\",\n      \"Action\": \"iam:CreateInstanceProfile\",\n      \"Condition\": {\n        \"StringEquals\": {\n          \"aws:RequestTag/kubernetes.io/cluster/${CLUSTER_NAME}\": \"owned\",\n          \"aws:RequestTag/topology.kubernetes.io/region\": \"${AWS_REGION}\"\n        },\n        \"StringLike\": {\n          \"aws:RequestTag/karpenter.k8s.aws/ec2nodeclass\": \"*\"\n        }\n      }\n    },\n    {\n      \"Sid\": \"AllowScopedInstanceProfileTagActions\",\n      \"Effect\": \"Allow\",\n      \"Resource\": \"*\",\n      \"Action\": \"iam:TagInstanceProfile\",\n      \"Condition\": {\n        \"StringEquals\": {\n          \"aws:ResourceTag/kubernetes.io/cluster/${CLUSTER_NAME}\": \"owned\",\n          \"aws:ResourceTag/topology.kubernetes.io/region\": \"${AWS_REGION}\",\n          \"aws:RequestTag/kubernetes.io/cluster/${CLUSTER_NAME}\": \"owned\",\n          \"aws:RequestTag/topology.kubernetes.io/region\": \"${AWS_REGION}\"\n        },\n        \"StringLike\": {\n          \"aws:ResourceTag/karpenter.k8s.aws/ec2nodeclass\": \"*\",\n          \"aws:RequestTag/karpenter.k8s.aws/ec2nodeclass\": \"*\"\n        }\n      }\n    },\n    {\n      \"Sid\": \"AllowScopedInstanceProfileActions\",\n      \"Effect\": \"Allow\",\n      \"Resource\": \"*\",\n      \"Action\": [\n        \"iam:AddRoleToInstanceProfile\",\n        \"iam:RemoveRoleFromInstanceProfile\",\n        \"iam:DeleteInstanceProfile\"\n      ],\n      \"Condition\": {\n        \"StringEquals\": {\n          \"aws:ResourceTag/kubernetes.io/cluster/${CLUSTER_NAME}\": \"owned\",\n          \"aws:ResourceTag/topology.kubernetes.io/region\": \"${AWS_REGION}\"\n        },\n        \"StringLike\": {\n          \"aws:ResourceTag/karpenter.k8s.aws/ec2nodeclass\": \"*\"\n        }\n      }\n    },\n    {\n      \"Sid\": \"AllowInstanceProfileReadActions\",\n      \"Effect\": \"Allow\",\n      \"Resource\": \"*\",\n      \"Action\": \"iam:GetInstanceProfile\"\n    },\n    {\n      \"Sid\": \"AllowAPIServerEndpointDiscovery\",\n      \"Effect\": \"Allow\",\n      \"Resource\": \"arn:${AWS_PARTITION}:eks:${AWS_REGION}:${AWS_ACCOUNT_ID}:cluster/${CLUSTER_NAME}\",\n      \"Action\": \"eks:DescribeCluster\"\n    }\n  ]\n}\n"
  },
  {
    "path": "website/content/en/v1.0/upgrading/v1beta1-migration.md",
    "content": "---\ntitle: \"v1beta1 Migration\"\nlinkTitle: \"v1beta1 Migration\"\nweight: 30\ndescription: >\n  Upgrade information for migrating to v1beta1\n---\n\nSignificant changes to the Karpenter APIs have been introduced in Karpenter v0.32.x.\nIn this release, Karpenter APIs have advanced to v1beta1, in preparation for Karpenter v1 in the near future.\nThe v1beta1 changes are meant to simplify and improve ease of use of those APIs, as well as solidify the APIs for the v1 release.\nUse this document as a reference to the changes that were introduced in the current release and as a guide to how you need to update the manifests and other Karpenter objects you created in previous Karpenter releases.\n\nHere is some information you should know about upgrading the Karpenter controller to v0.32.x:\n\n* **Towards a v1 release**: The latest version of Karpenter sets the stage for Karpenter v1. Karpenter v0.32.x implements the Karpenter v1beta1 API spec. The intention is to have v1beta1 be used as the v1 spec, with only minimal changes needed.\n* **Path to upgrading**: This procedure assumes that you are upgrading from Karpenter v0.31.x to v0.32.x. If you are on an earlier version of Karpenter, review the [Release Upgrade Notes]({{< relref \"#release-upgrade-notes\" >}}) for earlier versions' breaking changes.\n* **Enhancing and renaming components**: For v1beta1, APIs have been enhanced to improve and solidify Karpenter APIs. Part of these enhancements includes renaming the Kinds for all Karpenter CustomResources. The following name changes have been made:\n  * Provisioner -> NodePool\n  * Machine -> NodeClaim\n  * AWSNodeTemplate -> EC2NodeClass\n* **Running v1alpha1 alongside v1beta1**: Having different Kind names for v1alpha5 and v1beta1 allows them to coexist for the same Karpenter controller for v0.32.x. This gives you time to transition to the new v1beta1 APIs while existing Provisioners and other objects stay in place. Keep in mind that there is no guarantee that the two versions will be able to coexist in future Karpenter versions.\n\n## Upgrade Procedure\n\nThis procedure assumes you are running the Karpenter controller on cluster and want to upgrade that cluster to v0.32.x.\n\n**NOTE**: Please read through the entire procedure before beginning the upgrade. There are major changes in this upgrade, so you should carefully evaluate your cluster and workloads before proceeding.\n\n1. Determine the current cluster version: Run the following to make sure that your Karpenter version is v0.31.x:\n   ```bash\n   kubectl get pod -A | grep karpenter\n   kubectl describe pod -n karpenter karpenter-xxxxxxxxxx-xxxxx | grep Image: | grep v0.....\n   ```\n   Sample output:\n   ```bash\n   Image: public.ecr.aws/karpenter/controller:v0.31.0@sha256:d29767fa9c5c0511a3812397c932f5735234f03a7a875575422b712d15e54a77\n   ```\n\n   {{% alert title=\"Warning\" color=\"warning\" %}}\n   v0.31.2 introduces minor changes to Karpenter so that rollback from v0.32.0 is supported. If you are coming from some other patch version of minor version v0.31.x, note that __only__ versions v0.31.4+ support rollback for v1beta1.\n   {{% /alert %}}\n\n2. Review for breaking changes: If you are already running Karpenter v0.31.x, you can skip this step. If you are running an earlier Karpenter version, you need to review the upgrade notes for each minor release.\n\n3. Set environment variables for your cluster:\n\n    ```bash\n    export KARPENTER_NAMESPACE=karpenter\n    export KARPENTER_VERSION=v0.32.10\n    export AWS_PARTITION=\"aws\" # if you are not using standard partitions, you may need to configure to aws-cn / aws-us-gov\n    export CLUSTER_NAME=\"${USER}-karpenter-demo\"\n    export AWS_REGION=\"us-west-2\"\n    export AWS_ACCOUNT_ID=\"$(aws sts get-caller-identity --query Account --output text)\"\n    export KARPENTER_IAM_ROLE_ARN=\"arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/${CLUSTER_NAME}-karpenter\"\n    export CLUSTER_ENDPOINT=\"$(aws eks describe-cluster --name ${CLUSTER_NAME} --query \"cluster.endpoint\" --output text)\"\n    ```\n\n4. Apply the new Karpenter policy and assign it to the existing Karpenter role:\n\n    ```bash\n    TEMPOUT=$(mktemp)\n    curl -fsSL https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.32.10/website/content/en/preview/upgrading/v1beta1-controller-policy.json > ${TEMPOUT}\n\n    AWS_REGION=${AWS_REGION:=$AWS_DEFAULT_REGION} # use the default region if AWS_REGION isn't defined\n    POLICY_DOCUMENT=$(envsubst < ${TEMPOUT})\n    POLICY_NAME=\"KarpenterControllerPolicy-${CLUSTER_NAME}-v1beta1\"\n    ROLE_NAME=\"${CLUSTER_NAME}-karpenter\"\n\n    POLICY_ARN=$(aws iam create-policy --policy-name \"${POLICY_NAME}\" --policy-document \"${POLICY_DOCUMENT}\" | jq -r .Policy.Arn)\n    aws iam attach-role-policy --role-name \"${ROLE_NAME}\" --policy-arn \"${POLICY_ARN}\"\n    ```\n\n5. Apply the v0.32.10 Custom Resource Definitions (CRDs):\n\n   ```bash\n    kubectl apply -f https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.32.10/pkg/apis/crds/karpenter.sh_provisioners.yaml\n    kubectl apply -f https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.32.10/pkg/apis/crds/karpenter.sh_machines.yaml\n    kubectl apply -f https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.32.10/pkg/apis/crds/karpenter.k8s.aws_awsnodetemplates.yaml\n    kubectl apply -f https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.32.10/pkg/apis/crds/karpenter.sh_nodepools.yaml\n    kubectl apply -f https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.32.10/pkg/apis/crds/karpenter.sh_nodeclaims.yaml\n    kubectl apply -f https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.32.10/pkg/apis/crds/karpenter.k8s.aws_ec2nodeclasses.yaml\n    ```\n\n6. Upgrade Karpenter to the new version:\n\n    ```bash\n    helm registry logout public.ecr.aws\n\n    helm upgrade --install karpenter oci://public.ecr.aws/karpenter/karpenter --version ${KARPENTER_VERSION} --namespace karpenter --create-namespace \\\n      --set serviceAccount.annotations.\"eks\\.amazonaws\\.com/role-arn\"=${KARPENTER_IAM_ROLE_ARN} \\\n      --set settings.aws.defaultInstanceProfile=KarpenterNodeInstanceProfile-${CLUSTER_NAME} \\\n      --set settings.clusterName=${CLUSTER_NAME} \\\n      --set settings.interruptionQueue=${CLUSTER_NAME} \\\n      --set controller.resources.requests.cpu=1 \\\n      --set controller.resources.requests.memory=1Gi \\\n      --set controller.resources.limits.cpu=1 \\\n      --set controller.resources.limits.memory=1Gi \\\n      --wait\n    ```\n\n   {{% alert title=\"Note\" color=\"warning\" %}}\n   Karpenter has deprecated and moved a number of Helm values as part of the v1beta1 release. Ensure that you upgrade to the newer version of these helm values during your migration to v1beta1. You can find detail for all the settings that were moved in the [v1beta1 Upgrade Reference]({{<ref \"v1beta1-migration#helm-values\" >}}).\n   {{% /alert %}}\n\n7. Install the `karpenter-convert` tool to help convert the alpha Karpenter manifests to beta manifests:\n\n    ```bash\n    go install github.com/aws/karpenter/tools/karpenter-convert/cmd/karpenter-convert@release-v0.32.x\n    ```\n\n8. Convert each AWSNodeTemplate to an EC2NodeClass. To convert your v1alpha Karpenter manifests to v1beta1, you can either manually apply changes to API components or use the [`karpenter-convert`](https://github.com/aws/karpenter/tree/release-v0.32.x/tools/karpenter-convert) CLI tool. See the [AWSNodeTemplate to EC2NodeClass]({{< relref \"v1beta1-migration#awsnodetemplate---ec2nodeclass\" >}}) section of the Karpenter Upgrade Reference for details on how to update to Karpenter AWSNodeTemplate objects.\n\n   For each EC2NodeClass, specify the `$KARPENTER_NODE_ROLE` you will use for nodes launched with this node class. Karpenter v1beta1 [drops the need for managing your own instance profile and uses node roles directly]({{< ref \"v1beta1-migration#instanceprofile\" >}}). The example below shows how to migrate your AWSNodeTemplate to an EC2NodeClass if your node role is the same role that was used when creating your cluster with the [Getting Started Guide]({{< ref \"../getting-started/getting-started-with-karpenter\" >}}).\n\n    ```bash\n    export KARPENTER_NODE_ROLE=\"KarpenterNodeRole-${CLUSTER_NAME}\"\n    karpenter-convert -f awsnodetemplate.yaml | envsubst > ec2nodeclass.yaml\n    ```\n\n9. When you are satisfied with your EC2NodeClass file, apply it as follows:\n\n    ```bash\n    kubectl apply -f ec2nodeclass.yaml\n    ```\n\n10. Convert each Provisioner to a NodePool. Again, either manually update your Provisioner manifests or use the [`karpenter-convert`](https://github.com/aws/karpenter/tree/release-v0.32.x/tools/karpenter-convert) CLI tool:\n\n    ```bash\n    karpenter-convert -f provisioner.yaml > nodepool.yaml\n    ```\n\n11. When you are satisfied with your NodePool file, apply it as follows:\n\n    ```bash\n    kubectl apply -f nodepool.yaml\n    ```\n\n{{% alert title=\"Note\" color=\"warning\" %}}\nThe [`karpenter-convert`](https://github.com/aws/karpenter/tree/release-v0.32.x/tools/karpenter-convert) CLI tool will auto-inject the previous requirement defaulting logic that was orchestrated by webhooks in alpha. This defaulting logic set things like the `karpenter.sh/capacity-type`, `karpenter.k8s.aws/instance-generation`, `karpenter.k8s.aws/instance-category`, etc. These defaults are no longer set by the webhooks and need to be explicitly defined by the user in the NodePool.\n{{% /alert %}}\n\n12. Roll over nodes: With the new NodePool yaml in hand, there are several ways you can begin to roll over your nodes to use the new NodePool:\n\n    1. Periodic Rolling with [Expiration]({{< relref \"../concepts/disruption#automated-methods\" >}}):\n       - Add the following taint to the old Provisioner: `karpenter.sh/legacy=true:NoSchedule`\n       - Set the Expiration in your Provisioner to a small value like `ttlSecondsUntilExpired: 300` to mark all nodes older than 5 minutes as expired. *Please note that in beta APIs, this is the same as `disruption.expireAfter`*\n       - Watch as replacement nodes are launched from the new NodePool resource.\n\n       Because Karpenter will only roll one node at a time, it may take some time for Karpenter to completely roll all nodes under a Provisioner.\n\n    2. Forced Deletion: For each Provisioner in your cluster:\n\n       - Delete the old Provisioner with: `kubectl delete provisioner <provisioner-name> --cascade=foreground`\n       - Wait as Karpenter deletes all the Provisioner's nodes. All nodes will drain simultaneously. New nodes are launched after the old ones have been drained.\n\n    3. Manual Rolling: For each Provisioner in your cluster:\n       - Add the following taint to the old Provisioner: `karpenter.sh/legacy=true:NoSchedule`\n       - For all the nodes owned by the Provisioner, delete one at a time as follows: `kubectl delete node <node-name>`\n\n13. Update workload labels: Old alpha labels (`karpenter.sh/do-not-consolidate` and `karpenter.sh/do-not-evict`) [are deprecated]({{< ref \"v1beta1-migration#annotations-labels-and-status-conditions\" >}}), but will not be dropped until Karpenter v1. However, you can begin updating those labels at any time with `karpenter.sh/do-not-disrupt`.\n\n    Any pods that specified a `karpenter.sh/provisioner-name:DoesNotExist` requirement also need to add a `karpenter.sh/nodepool:DoesNotExist` requirement to ensure that the pods continue to not schedule to nodes unmanaged by Karpenter while migrating to v1beta1.\n\n14. Ensure that there are no more Machine resources on your cluster. You should see `No resources found` when running the following command:\n\n    ```bash\n     kubectl get machines\n    ```\n\n15. Once there are no more Machines on your cluster, it is safe to delete the other Karpenter configuration resources. You can do so by running the following commands:\n\n    ```bash\n    kubectl delete provisioners --all\n    kubectl delete awsnodetemplates --all\n    ```\n\n16. Remove the alpha instance profile(s). If you were just using the InstanceProfile deployed through the [Getting Started Guide]({{< ref \"../getting-started/getting-started-with-karpenter\" >}}), delete the `KarpenterNodeInstanceProfile` section from the CloudFormation. Alternatively, if you want to remove the instance profile manually, you can run the following command\n\n    ```bash\n    ROLE_NAME=\"KarpenterNodeRole-${CLUSTER_NAME}\"\n    INSTANCE_PROFILE_NAME=\"KarpenterNodeInstanceProfile-${CLUSTER_NAME}\"\n    aws iam remove-role-from-instance-profile --instance-profile-name \"${INSTANCE_PROFILE_NAME}\" --role-name \"${ROLE_NAME}\"\n    aws iam delete-instance-profile --instance-profile-name \"${INSTANCE_PROFILE_NAME}\"\n    ```\n\n17. Finally, remove the alpha policy from the controller role: This will remove any remaining permissions from the alpha APIs. You can orchestrate the removal of this policy with the following command:\n\n    ```bash\n    ROLE_NAME=\"${CLUSTER_NAME}-karpenter\"\n    POLICY_NAME=\"KarpenterControllerPolicy-${CLUSTER_NAME}\"\n    POLICY_ARN=$(aws iam list-policies --query \"Policies[?PolicyName=='${POLICY_NAME}'].Arn\" --output text)\n    aws iam detach-role-policy --role-name \"${ROLE_NAME}\" --policy-arn \"${POLICY_ARN}\"\n    ```\n\n{{% alert title=\"Note\" color=\"warning\" %}}\nIf you are using some IaC for managing your policy documents attached to the controller role, you may want to attach this new beta policy to the same CloudFormation stack. You can do this by removing the old alpha policy, ensuring that the Karpenter controller continues to work with just the beta policy, and then updating the stack to contain the new beta policy rather than having that policy managed separately.\n{{% /alert %}}\n\n## Changelog\n\n### Provisioner -> NodePool\n\nKarpenter v1beta1 moves almost all top-level fields under the `NodePool` template field. Similar to Deployments (which template Pods that are orchestrated by the deployment controller), Karpenter NodePool templates NodeClaims (that are orchestrated by the Karpenter controller). Here is an example of a `Provisioner` (v1alpha5) migrated to a `NodePool` (v1beta1):\n\nNote that:\n* The `Limits` and `Weight` fields sit outside of the template section. The `Labels` and `Annotations` fields from the Provisioner are now under the `spec.template.metadata` section. All other fields including requirements, taints, kubelet, and so on, are specified under the `spec.template.spec` section.\n* Support for `spec.template.spec.kubelet.containerRuntime` has been dropped. If you are using EKS 1.23 you should upgrade to containerd before using Karpenter v0.32.0, as this field in the kubelet block of the NodePool is not supported. EKS 1.24+ only supports containerd as a supported runtime.\n\n**Provisioner example (v1alpha)**\n\n```yaml\napiVersion: karpenter.sh/v1alpha5\nkind: Provisioner\n ...\nspec:\n  providerRef:\n    name: default\n  annotations:\n    custom-annotation: custom-value\n  labels:\n    team: team-a\n    custom-label: custom-value\n  requirements:\n  - key: karpenter.k8s.aws/instance-generation\n    operator: Gt\n    values: [\"3\"]\n  - key: karpenter.k8s.aws/instance-category\n    operator: In\n    values: [\"c\", \"m\", \"r\"]\n  - key: karpenter.sh/capacity-type\n    operator: In\n    values: [\"spot\"]\n  taints:\n  - key: example.com/special-taint\n    value: \"true\"\n    effect: NoSchedule\n  startupTaints:\n  - key: example.com/another-taint\n    value: \"true\"\n    effect: NoSchedule\n  kubelet:\n    systemReserved:\n      cpu: 100m\n      memory: 100Mi\n      ephemeral-storage: 1Gi\n    maxPods: 20\n  limits:\n    resources:\n      cpu: 1000\n      memory: 1000Gi\n  weight: 50\n```\n\n**NodePool example (v1beta1)**\n\n```yaml\napiVersion: karpenter.sh/v1beta1\nkind: NodePool\n...\nspec:\n  template:\n    metadata:\n      annotations:\n        custom-annotation: custom-value\n      labels:\n        team: team-a\n        custom-label: custom-value\n    spec:\n      requirements:\n      - key: karpenter.k8s.aws/instance-generation\n        operator: Gt\n        values: [\"3\"]\n      - key: karpenter.k8s.aws/instance-category\n        operator: In\n        values: [\"c\", \"m\", \"r\"]\n      - key: karpenter.sh/capacity-type\n        operator: In\n        values: [\"spot\"]\n      taints:\n      - key: example.com/special-taint\n        value: \"true\"\n        effect: NoSchedule\n      startupTaints:\n      - key: example.com/another-taint\n        value: \"true\"\n        effect: NoSchedule\n      kubelet:\n        systemReserved:\n          cpu: 100m\n          memory: 100Mi\n          ephemeral-storage: 1Gi\n        maxPods: 20\n  limits:\n    cpu: 1000\n    memory: 1000Gi\n  weight: 50\n```\n\n#### Provider\n\nThe Karpenter `spec.provider` field has been deprecated since version v0.7.0 and is now removed in the new `NodePool` resource. Any of the fields that you could specify within the `spec.provider` field are now available in the separate `NodeClass` resource.\n\n**Provider example (v1alpha)**\n\n```yaml\napiVersion: karpenter.sh/v1alpha5\nkind: Provisioner\n...\nspec:\n  provider:\n    amiFamily: Bottlerocket\n    tags:\n      test-tag: test-value\n```\n\n**Nodepool example (v1beta1)**\n\n```yaml\napiVersion: karpenter.sh/v1beta1\nkind: NodePool\n...\nnodeClassRef:\n  apiVersion: karpenter.k8s.aws/v1beta1\n  kind: EC2NodeClass\n  name: default\n```\n\n**EC2NodeClass example (v1beta1)**\n\n```yaml\napiVersion: karpenter.k8s.aws/v1beta1\nkind: EC2NodeClass\nmetadata:\n  name: default\nspec:\n  amiFamily: Bottlerocket\n  tags:\n    test-tag: test-value\n```\n\n#### TTLSecondsAfterEmpty\n\nThe Karpenter `spec.ttlSecondsAfterEmpty` field has been removed in favor of a `consolidationPolicy` and `consolidateAfter` field.\n\nAs part of the v1beta1 migration, Karpenter has chosen to collapse the concepts of emptiness and underutilization into a single concept: `consolidation`.\nYou can now define the types of consolidation that you want to support in your `consolidationPolicy` field.\nThe current values for this field are `WhenEmpty` or `WhenUnderutilized` (defaulting to `WhenUnderutilized` if not specified).\nIf specifying `WhenEmpty`, you can define how long you wish to wait for consolidation to act on your empty nodes by tuning the `consolidateAfter` parameter.\nThis field works the same as the `ttlSecondsAfterEmpty` field except this field now accepts either of the following values:\n\n* `Never`: This disables empty consolidation.\n* Duration String (e.g. “10m”, “1s”): This enables empty consolidation for the time specified.\n\n**ttlSecondsAfterEmpty example (v1alpha)**\n\n```yaml\napiVersion: karpenter.sh/v1alpha5\nkind: Provisioner\n...\nspec:\n  ttlSecondsAfterEmpty: 120\n```\n\n**consolidationPolicy and consolidateAfter examples (v1beta1)**\n\n```yaml\napiVersion: karpenter.sh/v1beta1\nkind: NodePool\n...\nspec:\n  disruption:\n    consolidationPolicy: WhenEmpty\n    consolidateAfter: 2m\n\n```\n\n#### Consolidation\n\nThe Karpenter `spec.consolidation` block has also been shifted under `consolidationPolicy`. If you were previously enabling Karpenter’s consolidation feature for underutilized nodes using the `consolidation.enabled` flag, you now enable consolidation through the `consolidationPolicy`.\n\n**consolidation enabled example (v1alpha)**\n\n```yaml\napiVersion: karpenter.sh/v1alpha5\nkind: Provisioner\n...\nspec:\n  consolidation:\n    enabled: true\n```\n\n**consolidationPolicy WhenUnderutilized example (v1beta1)**\n\n```yaml\napiVersion: karpenter.sh/v1beta1\nkind: NodePool\n...\nspec:\n  disruption:\n    consolidationPolicy: WhenUnderutilized\n```\n\n> Note: You currently can’t set the `consolidateAfter` field when specifying `consolidationPolicy: WhenUnderutilized`. Karpenter will use a 15s `consolidateAfter` runtime default.\n\n#### TTLSecondsUntilExpired\n\nThe Karpenter `spec.ttlSecondsUntilExpired` field has been removed in favor of the `expireAfter` field inside of the `disruption` block. This field works the same as it did before except this field now accepts either of the following values:\n\n* `Never`: This disables expiration.\n* Duration String (e.g. “10m”, “1s”): This enables expiration for the time specified.\n\n**consolidation ttlSecondsUntilExpired example (v1alpha)**\n\n```yaml\napiVersion: karpenter.sh/v1alpha5\nkind: Provisioner\n...\nspec:\n  ttlSecondsUntilExpired: 2592000 # 30 Days = 60 * 60 * 24 * 30 Seconds\n```\n\n**consolidationPolicy WhenUnderutilized example (v1beta1)**\n\n```yaml\napiVersion: karpenter.sh/v1beta1\nkind: NodePool\n...\nspec:\n  disruption:\n    expireAfter: 720h # 30 days = 30 * 24 Hours\n\n```\n\n#### Defaults\n\nKarpenter now statically defaults some fields in the v1beta1 if they are not specified when applying the `NodePool` configuration. The following fields are defaulted if unspecified.\n\n| Field                                | Default                                                          |\n|--------------------------------------|------------------------------------------------------------------|\n| spec.disruption                      | {\"consolidationPolicy: WhenUnderutilized\", expireAfter: \"720h\"}  |\n| spec.disruption.consolidationPolicy  | WhenUnderutilized                                                |\n| spec.disruption.expireAfter          | 720h                                                             |\n\n\n#### spec.template.spec.requirements Defaults Dropped\n\nKarpenter v1beta1 drops the defaulting logic for the node requirements that were shipped by default with Provisioners in v1alpha5. Previously, Karpenter would create dynamic defaulting in the following cases. If multiple of these cases were satisfied, those default requirements would be combined:\n\n* If you didn't specify any instance type requirement:\n\n   ```yaml\n   spec:\n     requirements:\n     - key: karpenter.k8s.aws/instance-category\n       operator: In\n       values: [\"c\", \"m\", \"r\"]\n     - key: karpenter.k8s.aws/instance-generation\n       operator: In\n       values: [\"2\"]\n   ```\n\n* If you didn’t specify any capacity type requirement (`karpenter.sh/capacity-type`):\n\n   ```yaml\n   spec:\n     requirements:\n     - key: karpenter.sh/capacity-type\n       operator: In\n       values: [\"on-demand\"]\n   ```\n\n* If you didn’t specify any OS requirement (`kubernetes.io/os`):\n   ```yaml\n   spec:\n     requirements:\n     - key: kubernetes.io/os\n       operator: In\n       values: [\"linux\"]\n   ```\n\n* If you didn’t specify any architecture requirement (`kubernetes.io/arch`):\n   ```yaml\n   spec:\n     requirements:\n     - key: kubernetes.io/arch\n       operator: In\n       values: [\"amd64\"]\n   ```\n\nIf you were previously relying on this defaulting logic, you will now need to explicitly specify these requirements in your `NodePool`.\n\n### AWSNodeTemplate -> EC2NodeClass\n\nTo configure AWS-specific settings, AWSNodeTemplate (v1alpha) is being changed to EC2NodeClass (v1beta1). Below are ways in which you can update your manifests for the new version.\n\n{{% alert title=\"Note\" color=\"warning\" %}}\nTag-based [AMI Selection](https://karpenter.sh/v0.31/concepts/node-templates/#ami-selection) is no longer supported for the new v1beta1 `EC2NodeClass` API. That feature allowed users to tag their AMIs using EC2 tags to express “In” requirements on selected. We recommend using different NodePools with different EC2NodeClasses with your various AMI requirement constraints to appropriately constrain your AMIs based on the instance types you’ve selected for a given NodePool.\n{{% /alert %}}\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nKarpenter will now tag EC2 instances with their node name instead of with `karpenter.sh/provisioner-name: $PROVISIONER_NAME`. This makes it easier to map nodes to instances if you are not currently using [resource-based naming](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-naming.html).\n{{% /alert %}}\n\n\n#### InstanceProfile\n\nThe Karpenter `spec.instanceProfile` field has been removed from the EC2NodeClass in favor of the `spec.role` field. Karpenter is also removing support for the `defaultInstanceProfile` specified globally in the karpenter-global-settings, making the `spec.role` field required for all EC2NodeClasses.\n\nKarpenter will now auto-generate the instance profile in your EC2NodeClass, given the role that you specify. To find the role, type:\n\n```bash\nexport INSTANCE_PROFILE_NAME=KarpenterNodeInstanceProfile-bob-karpenter-demo\naws iam get-instance-profile --instance-profile-name $INSTANCE_PROFILE_NAME --query \"InstanceProfile.Roles[0].RoleName\"\nKarpenterNodeRole-bob-karpenter-demo\n```\n\n**instanceProfile example (v1alpha)**\n\n```yaml\napiVersion: karpenter.k8s.aws/v1alpha1\nkind: AWSNodeTemplate\n...\nspec:\n  instanceProfile: KarpenterNodeInstanceProfile-karpenter-demo\n```\n\n**role example (v1beta1)**\n\n```yaml\napiVersion: karpenter.k8s.aws/v1beta1\nkind: EC2NodeClass\n...\nspec:\n  role: KarpenterNodeRole-karpenter-demo\n```\n\n#### SubnetSelector, SecurityGroupSelector, and AMISelector\n\nKarpenter’s `spec.subnetSelector`, `spec.securityGroupSelector`, and `spec.amiSelector` fields have been modified to support multiple terms and to first-class keys like id and name. If using comma-delimited strings in your `tag`, `id`, or `name` values, you may need to create separate terms for the new fields.\n\n\n**subnetSelector example (v1alpha)**\n\n```yaml\napiVersion: karpenter.k8s.aws/v1alpha1\nkind: AWSNodeTemplate\n...\nspec:\n  subnetSelector:\n    karpenter.sh/discovery: karpenter-demo\n```\n\n**SubnetSelectorTerms.tags example (v1beta1)**\n\n```yaml\napiVersion: karpenter.k8s.aws/v1beta1\nkind: EC2NodeClass\n...\nspec:\n  subnetSelectorTerms:\n  - tags:\n      karpenter.sh/discovery: karpenter-demo\n```\n\n**subnetSelector example (v1alpha)**\n\n```yaml\napiVersion: karpenter.k8s.aws/v1alpha1\nkind: AWSNodeTemplate\n...\nspec:\n  subnetSelector:\n    aws::ids: subnet-123,subnet-456\n```\n\n**subnetSelectorTerms.id example (v1beta1)**\n\n```yaml\napiVersion: karpenter.k8s.aws/v1beta1\nkind: EC2NodeClass\n...\nspec:\n  subnetSelectorTerms:\n  - id: subnet-123\n  - id: subnet-456\n```\n\n**securityGroupSelector example (v1alpha)**\n\n```yaml\napiVersion: karpenter.k8s.aws/v1alpha1\nkind: AWSNodeTemplate\n...\nspec:\n  securityGroupSelector:\n    karpenter.sh/discovery: karpenter-demo\n```\n\n**securityGroupSelectorTerms.tags example (v1beta1)**\n\n```yaml\napiVersion: compute.k8s.aws/v1beta1\nkind: EC2NodeClass\n...\nspec:\n  securityGroupSelectorTerms:\n  - tags:\n      karpenter.sh/discovery: karpenter-demo\n```\n\n**securityGroupSelector example (v1alpha)**\n\n```yaml\napiVersion: karpenter.k8s.aws/v1alpha1\nkind: AWSNodeTemplate\n...\nspec:\n  securityGroupSelector:\n    aws::ids: sg-123, sg-456\n```\n\n\n**securityGroupSelectorTerms.id example (v1beta1)**\n\n```yaml\napiVersion: compute.k8s.aws/v1beta1\nkind: EC2NodeClass\n...\nspec:\n  securityGroupSelectorTerms:\n  - id: sg-123\n  - id: sg-456\n```\n\n\n**amiSelector example (v1alpha)**\n\n```yaml\napiVersion: karpenter.k8s.aws/v1alpha1\nkind: AWSNodeTemplate\n...\nspec:\n  amiSelector:\n    karpenter.sh/discovery: karpenter-demo\n```\n\n\n**amiSelectorTerms.tags example (v1beta1)**\n\n```yaml\napiVersion: compute.k8s.aws/v1beta1\nkind: EC2NodeClass\n...\nspec:\n  amiSelectorTerms:\n  - tags:\n      karpenter.sh/discovery: karpenter-demo\n```\n\n**amiSelector example (v1alpha)**\n\n```yaml\napiVersion: karpenter.k8s.aws/v1alpha1\nkind: AWSNodeTemplate\n...\nspec:\n  amiSelector:\n    aws::ids: ami-123,ami-456\n```\n\n**amiSelectorTerms example (v1beta1)**\n\n```yaml\napiVersion: compute.k8s.aws/v1beta1\nkind: EC2NodeClass\n...\nspec:\n  amiSelectorTerms:\n  - id: ami-123\n  - id: ami-456\n```\n\n\n**amiSelector example (v1alpha)**\n\n```yaml\napiVersion: karpenter.k8s.aws/v1alpha1\nkind: AWSNodeTemplate\n...\nspec:\n  amiSelector:\n    aws::name: my-name1,my-name2\n    aws::owners: 123456789,amazon\n```\n\n**amiSelectorTerms.name example (v1beta1)**\n\n```yaml\napiVersion: compute.k8s.aws/v1beta1\nkind: EC2NodeClass\n...\nspec:\n  amiSelectorTerms:\n  - name: my-name1\n    owner: \"123456789\"\n  - name: my-name2\n    owner: \"123456789\"\n  - name: my-name1\n    owner: amazon\n  - name: my-name2\n    owner: amazon\n```\n\n#### LaunchTemplateName\n\nThe `spec.launchTemplateName` field for referencing unmanaged launch templates within Karpenter has been removed.\nFind a discussion of the decision to remove `spec.launchTemplateName`, see [RFC: Unmanaged LaunchTemplate Removal](https://github.com/aws/karpenter/blob/main/designs/unmanaged-launch-template-removal.md).\n\n#### AMIFamily\n\nThe AMIFamily field is now required. If you were previously not specifying the AMIFamily field, having Karpenter default the AMIFamily to AL2, you will now have to specify AL2 explicitly.\n\n### Annotations, Labels, and Status Conditions\n\nKarpenter v1beta1 introduces changes to some common labels, annotations, and status conditions that are present in the project. The tables below lists the v1alpha5 values and their v1beta1 equivalent.\n\n| Karpenter Labels                |                       |\n|---------------------------------|-----------------------|\n| **v1alpha5**                    | **v1beta1**           |\n| karpenter.sh/provisioner-name   | karpenter.sh/nodepool |\n| karpenter.k8s.aws/instance-pods | **Dropped**           |\n\n> **Note**: Previously, you could use the `karpenter.sh/provisioner-name:DoesNotExist` requirement on pods to specify that pods should schedule to nodes unmanaged by Karpenter. With the addition of the `karpenter.sh/nodepool` label key, you now need to specify the `karpenter.sh/nodepool:DoesNotExist` requirement on these pods as well to ensure they don't schedule to nodes provisioned by the new NodePool resources.\n\n\n| Karpenter Annotations               |                                     |\n|-------------------------------------|-------------------------------------|\n| **v1alpha5**                        | **v1beta1**                         |\n| karpenter.sh/provisioner-hash       | karpenter.sh/nodepool-hash          |\n| karpenter.k8s.aws/nodetemplate-hash | karpenter.k8s.aws/ec2nodeclass-hash |\n| karpenter.sh/do-not-consolidate     | karpenter.sh/do-not-disrupt         |\n| karpenter.sh/do-not-evict           | karpenter.sh/do-not-disrupt         |\n\n> **Note**: Karpenter dropped the `karpenter.sh/do-not-consolidate` annotation in favor of the `karpenter.sh/do-not-disrupt` annotation on nodes. This annotation specifies that no voluntary disruption should be performed by Karpenter against this node.\n\n| StatusCondition Types           |                |\n|---------------------------------|----------------|\n| **v1alpha5**                    | **v1beta1**    |\n| MachineLaunched                 | Launched       |\n| MachineRegistered               | Registered     |\n| MachineInitialized              | Initialized    |\n| MachineEmpty                    | Empty          |\n| MachineExpired                  | Expired        |\n| MachineDrifted                  | Drifted        |\n\n### IAM Controller Permissions\n\nv1beta1 introduces changes to the IAM permissions assigned to the Karpenter controller policy used when deploying Karpenter to your cluster with [IRSA](https://docs.aws.amazon.com/emr/latest/EMR-on-EKS-DevelopmentGuide/setting-up-enable-IAM.html) or [EKS Pod Identity](https://docs.aws.amazon.com/eks/latest/userguide/pod-identities.html).\n\nYou can see a full example of the v1beta1 required controller permissions by viewing the [v1beta1 Controller Policy](https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.32.10/website/content/en/preview/upgrading/v1beta1-controller-policy.json).\n\nAdditionally, read more detail about the full set of permissions assigned to the Karpenter controller policy in the [CloudFormation Reference Guide]({{< ref \"../reference/cloudformation\" >}}).\n\n#### Updating Tag-Based Permissions\n\nSince Karpenter v1beta1 introduces changes to custom resource, label, and annotation naming, this also changes the tag keys that Karpenter uses to tag instances, volumes launch templates, and any other resources that Karpenter deploys and manages.\n\nBy default, when using the [Karpenter Getting Started Guide]({{< ref \"../getting-started/getting-started-with-karpenter\" >}}) to setup Karpenter on your cluster, you will deploy an IAM policy that scopes Karpenter's permissions based on tag keys and values using [ABAC](https://aws.amazon.com/identity/attribute-based-access-control/). Any part of the Karpenter alpha controller policy which previously referenced `aws:RequestTag:karpenter.sh/provisioner-name`  or `aws:ResourceTag:karpenter.sh/provisioner-name` is now updated in v1beta1 to be `aws:RequestTag:karpenter.sh/nodepool` and `aws:ResourceTag:karpenter.sh/nodepool`.\n\n{{% alert title=\"Note\" color=\"warning\" %}}\nWhile migrating between alpha and beta, you will need to maintain the old tag permissions as well as the new permissions. You can remove the old tag key permissions from the controller policy when you have fully migrated to beta resources. This process for maintaining both sets of permissions while migrating is also mentioned in greater detail in the [Upgrade Procedure]({{< ref \"#upgrade-procedure\" >}}) shown above.\n{{% /alert %}}\n\n#### Updating IAM Instance Profile Permissions\n\nAdditionally, starting in v1beta1, Karpenter removes the need for you to manage your own instance profiles used to launch EC2 instances, allowing you to only specify the role that you want assigned to your instances in the `spec.role` of the `EC2NodeClass`. When you do this, Karpenter will generate and manage an instance profile on your behalf.\n\nTo enable this functionality, you need to add `iam:` permissions that give Karpenter permission to generate and managed instance profiles. These permissions include `iam:CreateInstanceProfile`, `iam:TagInstanceProfile`, `iam:AddRoleToInstanceProfile`, `iam:RemoveRoleFromInstanceProfile`, `iam:DeleteInstanceProfile`, and `iam:GetInstanceProfile`. Each of these permissions is scoped down to only operate on instance profiles generated from a single Karpenter instance on a single Karpenter cluster using [ABAC](https://aws.amazon.com/identity/attribute-based-access-control/).\n\n{{% alert title=\"Note\" color=\"warning\" %}}\nThese `iam:` permissions are not required if you do not intend to use the `spec.role` field to enable the managed instance profile feature. Instead, you can use the `spec.instanceProfile` field to tell Karpenter to use an unmanaged instance profile explicitly. Note that this means that you have to manually provision and manage the instance profile yourself as you did in alpha.\n{{% /alert %}}\n\n### Metrics\n\nThe following table shows v1alpha5 metrics and the v1beta1 version of each metric. All metrics on this table will exist simultaneously, while both v1alpha5 and v1beta1 are supported within the same version.\n\n| **v1alpha5 Metric Name**                                              | **v1beta1 Metric Name**                                         |\n|-----------------------------------------------------------------------|-----------------------------------------------------------------|\n| karpenter_machines_created                                            | karpenter_nodeclaims_created                                    |\n| karpenter_machines_disrupted                                          | karpenter_nodeclaims_disrupted                                  |\n| karpenter_machines_drifted                                            | karpenter_nodeclaims_drifted                                    |\n| karpenter_machines_initialized                                        | karpenter_nodeclaims_initialized                                |\n| karpenter_machines_launched                                           | karpenter_nodeclaims_launched                                   |\n| karpenter_machines_registered                                         | karpenter_nodeclaims_registered                                 |\n| karpenter_machines_terminated                                         | karpenter_nodeclaims_terminated                                 |\n| karpenter_provisioners_limit                                          | karpenter_nodepools_limit                                       |\n| karpenter_provisioners_usage                                          | karpenter_nodepools_usage                                       |\n| karpenter_deprovisioning_evaluation_duration_seconds                  | karpenter_disruption_evaluation_duration_seconds                |\n| karpenter_deprovisioning_eligible_machines                            | karpenter_disruption_eligible_nodeclaims                        |\n| karpenter_deprovisioning_replacement_machine_initialized_seconds      | karpenter_disruption_replacement_nodeclaims_initialized_seconds |\n| karpenter_deprovisioning_replacement_machine_launch_failure_counter   | karpenter_disruption_replacement_nodeclaims_launch_failed_total |\n| karpenter_deprovisioning_actions_performed                            | karpenter_disruption_actions_performed_total                    |\n| karpenter_deprovisioning_consolidation_timeouts                       | karpenter_disruption_consolidation_timeouts_total               |\n| karpenter_nodes_leases_deleted                                        | karpenter_leases_deleted                                        |\n| karpenter_provisioners_usage_pct                                      | **Dropped**                                                     |\n\nIn addition to these metrics, the MachineNotFound error returned by the `karpenter_cloudprovider_errors_total` values in the error label has been changed to `NodeClaimNotFound`. This is agnostic to the version of the API (Machine or NodeClaim) that actually owns the instance.\n\n### Global Settings\n\nThe v1beta1 specification removes the `karpenter-global-settings` ConfigMap in favor of setting all Karpenter configuration using environment variables. Along, with this change, Karpenter has chosen to remove certain global variables that can be configured with more specificity in the EC2NodeClass . These values are marked as removed below.\n\n\n| **`karpenter-global-settings` ConfigMap Key** | **Environment Variable**   | **CLI Argument**             |\n|-----------------------------------------------|----------------------------|------------------------------|\n| batchMaxDuration                              | BATCH_MAX_DURATION         | --batch-max-duration         |\n| batchIdleDuration                             | BATCH_IDLE_DURATION        | --batch-idle-duration        |\n| aws.assumeRoleARN                             | ASSUME_ROLE_ARN            | --assume-role-arn            |\n| aws.assumeRoleDuration                        | ASSUME_ROLE_DURATION       | --assume-role-duration       |\n| aws.clusterCABundle                           | CLUSTER_CA_BUNDLE          | --cluster-ca-bundle          |\n| aws.clusterName                               | CLUSTER_NAME               | --cluster-name               |\n| aws.clusterEndpoint                           | CLUSTER_ENDPOINT           | --cluster-endpoint           |\n| aws.isolatedVPC                               | ISOLATED_VPC               | --isolated-vpc               |\n| aws.vmMemoryOverheadPercent                   | VM_MEMORY_OVERHEAD_PERCENT | --vm-memory-overhead-percent |\n| aws.interruptionQueueName                     | INTERRUPTION_QUEUE         | --interruption-queue         |\n| aws.reservedENIs                              | RESERVED_ENIS              | --reserved-enis              |\n| featureGates.driftEnabled                     | FEATURE_GATE=\"Drift=true\"  | --feature-gates Drift=true   |\n| aws.defaultInstanceProfile                    | **Dropped**                | **Dropped**                  |\n| aws.enablePodENI                              | **Dropped**                | **Dropped**                  |\n| aws.enableENILimitedPodDensity                | **Dropped**                | **Dropped**                  |\n\n> NOTE: The `aws.defaultInstanceProfile` was dropped because Karpenter no longer utilizes instance profiles but creates a managed version of an instance profile based on an EC2NodeClass role. The `aws.enablePodENI` was dropped since Karpenter will now _always_ assume that `vpc.amazonaws.com/pod-eni` resource exists. The `aws.enableENILimitedPodDensity` was dropped since you can now override the `--max-pods` value for kubelet in the `spec.kubelet.maxPods` for NodeClaims or NodeClaimTemplates.\n\n### Helm Values\n\nThe v1beta1 helm chart comes with a number of changes to the values that were previously used in v0.31.x. Your older helm values will continue to work throughout v0.32.x but any values no longer specified in the chart will no longer be supported starting in v0.33.0.\n\n| < v0.32.x Key                           | >= v0.32.x Key                   |\n|-----------------------------------------|----------------------------------|\n| controller.outputPaths                  | logConfig.outputPaths            |\n| controller.errorOutputPaths             | logConfig.errorOutputPaths       |\n| controller.logLevel                     | logConfig.logLevel.controller    |\n| webhook.logLevel                        | logConfig.logLevel.webhook       |\n| logEncoding                             | logConfig.logEncoding            |\n| settings.aws.assumeRoleARN              | settings.assumeRoleARN           |\n| settings.aws.assumeRoleDuration         | settings.assumeRoleDuration      |\n| settings.aws.clusterCABundle            | settings.clusterCABundle         |\n| settings.aws.clusterName                | settings.clusterName             |\n| settings.aws.clusterEndpoint            | settings.clusterEndpoint         |\n| settings.aws.isolatedVPC                | settings.isolatedVPC             |\n| settings.aws.vmMemoryOverheadPercent    | settings.vmMemoryOverheadPercent |\n| settings.aws.interruptionQueueName      | settings.interruptionQueue       |\n| settings.aws.reservedENIs               | settings.reservedENIs            |\n| settings.featureGates.driftEnabled      | settings.featureGates.drift      |\n| settings.aws.defaultInstanceProfile     | **Dropped**                      |\n| settings.aws.enablePodENI               | **Dropped**                      |\n| settings.aws.enableENILimitedPodDensity | **Dropped**                      |\n| settings.aws.tags                       | **Dropped**                      |\n\n### Drift Enabled by Default\n\nThe drift feature will now be enabled by default starting from v0.33.0. If you don’t specify the Drift featureGate, the feature will be assumed to be enabled. You can disable the drift feature by specifying --feature-gates Drift=false. This feature gate is expected to be dropped when core APIs (NodePool, NodeClaim) are bumped to v1.\n\n### Logging Configuration is No Longer Dynamic\n\nAs part of this deprecation, Karpenter will no longer call out to the APIServer to discover the ConfigMap. Instead, Karpenter will expect the ConfigMap to be mounted on the filesystem at `/etc/karpenter/logging/zap-logger-config`. You can also still choose to override the individual log level of components of the system (webhook and controller) at the paths `/etc/karpenter/logging/loglevel.webhook` and `/etc/karpenter/logging/loglevel.controller`.\n\nWhat you do to upgrade this feature depends on how you install Karpenter:\n\n* If you are using the helm chart to install Karpenter, you won’t need to make any changes for Karpenter to begin using this new mechanism for loading the config.\n\n* If you are manually configuring the deployment for Karpenter, you will need to add the following sections to your deployment:\n\n   ```yaml\n   apiVersion: apps/v1\n   kind: Deployment\n   spec:\n     template:\n       spec:\n       ...\n         containers:\n         - name: controller\n           volumeMounts:\n           - name: config-logging\n             mountPath: /etc/karpenter/logging\n         volumes:\n         - name: config-logging\n           configMap:\n             name: config-logging\n   ```\n\nKarpenter will drop support for ConfigMap discovery through the APIServer starting in v0.33.0, meaning that you will need to ensure that you are mounting the config file on the expected filepath by that version.\n\n### Webhook Support Deprecated in Favor of CEL\n\nKarpenter v1beta1 APIs now support Common Expression Language (CEL) for validaiton directly through the APIServer. This change means that Karpenter’s validating webhooks are no longer needed to ensure that Karpenter’s NodePools and EC2NodeClasses are configured correctly.\n\nAs a result, Karpenter will now disable webhooks by default by setting the `DISABLE_WEBHOOK` environment variable to `true` starting in v0.33.0. If you are currently on a version of Kubernetes < less than 1.25, CEL validation for Custom Resources is not enabled. We recommend that you enable the webhooks on these versions with `DISABLE_WEBHOOK=false` to get proper validation support for any Karpenter configuration.\n"
  },
  {
    "path": "website/content/en/v1.7/_index.md",
    "content": "---\ntitle: \"Documentation\"\nlinkTitle: \"Docs\"\nweight: 20\ncascade:\n  type: docs\n  tags:\n    - preview\n---\nKarpenter is an open-source node lifecycle management project built for Kubernetes.\nAdding Karpenter to a Kubernetes cluster can dramatically improve the efficiency and cost of running workloads on that cluster.\nKarpenter works by:\n\n* **Watching** for pods that the Kubernetes scheduler has marked as unschedulable\n* **Evaluating** scheduling constraints (resource requests, nodeselectors, affinities, tolerations, and topology spread constraints) requested by the pods\n* **Provisioning** nodes that meet the requirements of the pods\n* **Disrupting** the nodes when the nodes are no longer needed\n\nAs someone using Karpenter, once your Kubernetes cluster and the Karpenter controller are up and running (see [Getting Started]({{<ref \"./getting-started\" >}})), you can:\n\n* **Set up NodePools**: By applying a NodePool to Karpenter, you can configure constraints on node provisioning and set values for node expiry, node consolidation, or Kubelet configuration values.\n  NodePool-level constraints related to Kubernetes and your cloud provider (AWS, for example) include:\n\n  - 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.\n  - Labels (`labels`): Apply arbitrary key-value pairs to nodes that can be matched by pods.\n  - Requirements (`requirements`): Set acceptable (`In`) and unacceptable (`NotIn`) Kubernetes and Karpenter values for node provisioning based on [Well-Known Labels](https://kubernetes.io/docs/reference/labels-annotations-taints/) and [cloud-specific settings]({{<ref \"./concepts/nodeclasses\" >}}). 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]({{<ref \"./concepts/nodepools/#capacity-type\" >}}) (such as AWS spot or on-demand).\n  - 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.\n\n* **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:\n\n  - 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.\n  - 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.\n  - 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.\n  - 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.\n  - 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.\n  - 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.\n  - 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.\n\nLearn more about Karpenter and how to get started below.\n"
  },
  {
    "path": "website/content/en/v1.7/concepts/_index.md",
    "content": "---\ntitle: \"Concepts\"\nlinkTitle: \"Concepts\"\nweight: 20\ndescription: >\n  Understand key concepts of Karpenter\n---\n\nUsers fall under two basic roles: [Kubernetes cluster administrators]({{<ref \"#cluster-administrator\" >}}) and [application developers]({{<ref \"#application-developer\" >}}). This document describes Karpenter concepts through the lens of those two types of users.\n\n## Cluster Administrator\n\nAs a Kubernetes cluster administrator, you can engage with Karpenter to:\n\n* Install Karpenter\n* Configure NodePools to set constraints and other features for managing nodes\n* Disrupting nodes\n\nConcepts associated with this role are described below.\n\n\n### Installing Karpenter\n\nKarpenter 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.\n\n[Getting Started with Karpenter]({{<ref \"../getting-started/getting-started-with-karpenter\" >}}) describes the process of installing Karpenter. 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.\n\nOnce privileges are in place, Karpenter is deployed with a Helm chart.\n\n### Configuring NodePools\n\nKarpenter'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 [NodePools]({{<ref \"nodepools\" >}}) that define how Karpenter manages unschedulable pods and configures nodes. You will also define behaviors for your NodePools, capturing details like how Karpenter handles disruption of nodes and setting limits and weights for each NodePool.\n\nHere are some things to know about Karpenter's NodePools:\n\n* **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.\n\n* [**Defining Constraints**]({{<ref \"nodepools\" >}}): Karpenter defines a Custom Resource called a NodePool to specify configuration. Each NodePool manages a distinct set of nodes, but pods can be scheduled to any NodePool that supports its scheduling constraints. A NodePool defines constraints that determine which nodes can be provisioned and specifies the attributes these nodes will have. See the [NodePools Documentation]({{<ref \"nodepools\" >}}) docs for a description of configuration and NodePool examples.\n\n* [**Defining Disruption**]({{<ref \"disruption\" >}}): A NodePool can also include values to indicate when nodes should be disrupted. This includes configuration around concepts like [Consolidation]({{<ref \"disruption#consolidation\" >}}), [Drift]({{<ref \"disruption#drift\" >}}), and [Expiration]({{<ref \"disruption#automated-methods\" >}}).\n\n* **Well-known labels**: The NodePool 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.\n\n* **Multiple NodePools**: Multiple NodePools 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.\n\nAlthough most use cases are addressed with a single NodePool for multiple teams, multiple NodePools are useful to isolate nodes for billing, use different node constraints (such as no GPUs for a team), or use different disruption settings.\n\n### Disrupting nodes\n\nKarpenter deletes nodes when they are no longer needed.\n\n* [**Finalizer**]({{<ref \"disruption#manual-methods\" >}}): Karpenter places a finalizer bit on each node it creates.\nWhen 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.\nKarpenter handles all clean-up work needed to properly delete the node.\n* [**Expiration**]({{<ref \"disruption\" >}}): Karpenter will mark nodes as expired and disrupt them after they have lived a set number of seconds, based on the NodePool's `spec.template.spec.expireAfter` value. You can use node expiry to periodically recycle nodes due to security concerns.\n* [**Consolidation**]({{<ref \"disruption#consolidation\" >}}): Karpenter works to actively reduce cluster cost by identifying when:\n  * Nodes can be removed because the node is empty\n  * Nodes can be removed as their workloads will run on other nodes in the cluster.\n  * Nodes can be replaced with cheaper variants due to a change in the workloads.\n* [**Drift**]({{<ref \"disruption#drift\" >}}): Karpenter will mark nodes as drifted and disrupt nodes that have drifted from their desired specification. See [Drift]({{<ref \"#drift\" >}}) to see which fields are considered.\n* [**Interruption**]({{<ref \"disruption#interruption\" >}}): Karpenter will watch for upcoming 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.\n\nFor more details on how Karpenter deletes nodes, see the [Disruption Documentation]({{<ref \"disruption\" >}}).\n\n### Scheduling\n\nKarpenter 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.\n\nOnce Karpenter brings up a node, that node is available for the Kubernetes scheduler to schedule pods on it as well.\n\n#### Constraints\n\nThe concept of layered constraints is key to using Karpenter. With no constraints defined in NodePools 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.\n\nAn application developer can tighten the constraints defined in a NodePool 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.\n\n### Cloud Provider\n\nKarpenter 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.\n\nWhile using Kubernetes well-known labels, the NodePool can set some values that are specific to the cloud provider. 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`).\n\n### Kubernetes Cluster Autoscaler\n\nLike 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:\n\n* **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.\n\n* **Quick 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.\n\n## Application Developer\n\nAs 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).\n\nLayered *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).\nThe 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.\n\nThe 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.\n\nAs long as the requests are not outside the NodePool'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.\n\nSo, what constraints can you use as an application developer deploying pods that could be managed by Karpenter?\n\nKubernetes features that Karpenter supports for scheduling pods include nodeAffinity and [nodeSelector](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#nodeselector).\nIt 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).\n\nFrom 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:\n\n* **kubernetes.io/arch**: For example, kubernetes.io/arch=amd64\n* **node.kubernetes.io/instance-type**: For example, node.kubernetes.io/instance-type=m3.medium\n* **topology.kubernetes.io/zone**: For example, topology.kubernetes.io/zone=us-east-1c\n\nFor more on how, as a developer, you can add constraints to your pod deployment, see [Scheduling](./scheduling/) for details.\n"
  },
  {
    "path": "website/content/en/v1.7/concepts/disruption.md",
    "content": "---\ntitle: \"Disruption\"\nlinkTitle: \"Disruption\"\nweight: 50\ndescription: >\n  Understand different ways Karpenter disrupts nodes\n---\n\n## Control Flow\n\nKarpenter sets a Kubernetes [finalizer](https://kubernetes.io/docs/concepts/overview/working-with-objects/finalizers/) on each node and node claim it provisions.\nThe finalizer blocks deletion of the node object while the Termination Controller taints and drains the node, before removing the underlying NodeClaim. Disruption is triggered by the Disruption Controller, by the user through manual disruption, or through an external system that sends a delete request to the node object.\n\n### Disruption Controller\n\nKarpenter automatically discovers disruptable nodes and spins up replacements when needed. Karpenter disrupts nodes by executing one [automated method](#automated-graceful-methods) at a time, first doing Drift then Consolidation. Each method varies slightly, but they all follow the standard disruption process. Karpenter uses [disruption budgets]({{<ref \"#nodepool-disruption-budgets\" >}}) to control the speed at which these disruptions begin.\n1. Identify a list of prioritized candidates for the disruption method.\n   * If there are [pods that cannot be evicted](#pod-level-controls) on the node, Karpenter will ignore the node and try disrupting it later.\n   * If there are no disruptable nodes, continue to the next disruption method.\n2. For each disruptable node:\n   1. Check if disrupting it would violate its NodePool's disruption budget.\n   2. Execute a scheduling simulation with the pods on the node to find if any replacement nodes are needed.\n3. Add the `karpenter.sh/disrupted:NoSchedule` taint to the node(s) to prevent pods from scheduling to it.\n4. Pre-spin any replacement nodes needed as calculated in Step (2), and wait for them to become ready.\n   * If a replacement node fails to initialize, un-taint the node(s), and restart from Step (1), starting at the first disruption method again.\n5. Delete the node(s) and wait for the Termination Controller to gracefully shutdown the node(s).\n6. Once the Termination Controller terminates the node, go back to Step (1), starting at the first disruption method again.\n\n### Termination Controller\n\nWhen a Karpenter node is deleted, the Karpenter finalizer will block deletion and the APIServer will set the `DeletionTimestamp` on the node, allowing Karpenter to gracefully shutdown the node, modeled after [Kubernetes Graceful Node Shutdown](https://kubernetes.io/docs/concepts/cluster-administration/node-shutdown/#graceful-node-shutdown). Karpenter's graceful shutdown process will:\n1. Add the `karpenter.sh/disrupted:NoSchedule` taint to the node to prevent pods from scheduling to it.\n2. Begin evicting the pods on the node with the [Kubernetes Eviction API](https://kubernetes.io/docs/concepts/scheduling-eviction/api-eviction/) to respect PDBs, while ignoring all [static pods](https://kubernetes.io/docs/tasks/configure-pod-container/static-pod/), pods tolerating the `karpenter.sh/disrupted:NoSchedule` taint, and succeeded/failed pods. Wait for the node to be fully drained before proceeding to Step (3).\n   * While waiting, if the underlying NodeClaim for the node no longer exists, remove the finalizer to allow the APIServer to delete the node, completing termination.\n3. Verify that all [VolumeAttachment](https://kubernetes.io/docs/reference/kubernetes-api/config-and-storage-resources/volume-attachment-v1/) resources for drain-able pods are deleted.\n4. Terminate the NodeClaim in the Cloud Provider.\n5. Remove the finalizer from the node to allow the APIServer to delete the node, completing termination.\n\n## Manual Methods\n* **Node Deletion**: You can use `kubectl` to manually remove a single Karpenter node or nodeclaim. Since each Karpenter node is owned by a NodeClaim, deleting either the node or the nodeclaim will cause cascade deletion of the other:\n\n    ```bash\n    # Delete a specific nodeclaim\n    kubectl delete nodeclaim $NODECLAIM_NAME\n\n    # Delete a specific node\n    kubectl delete node $NODE_NAME\n\n    # Delete all nodeclaims\n    kubectl delete nodeclaims --all\n\n    # Delete all nodes owned by any nodepool\n    kubectl delete nodes -l karpenter.sh/nodepool\n\n    # Delete all nodeclaims owned by a specific nodepoolXS\n    kubectl delete nodeclaims -l karpenter.sh/nodepool=$NODEPOOL_NAME\n    ```\n* **NodePool Deletion**: NodeClaims are owned by the NodePool through an [owner reference](https://kubernetes.io/docs/concepts/overview/working-with-objects/owners-dependents/#owner-references-in-object-specifications) that launched them. Karpenter will gracefully terminate nodes through cascading deletion when the owning NodePool is deleted.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nBy adding the finalizer, Karpenter improves the default Kubernetes process of node deletion.\nWhen 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.\n{{% /alert %}}\n\n## Automated Graceful Methods\n\nAutomated graceful methods, can be rate limited through [NodePool Disruption Budgets]({{<ref \"#nodepool-disruption-budgets\" >}})\n\n* [**Consolidation**]({{<ref \"#consolidation\" >}}): Karpenter works to actively reduce cluster cost by identifying when:\n  * Nodes can be removed because the node is empty\n  * Nodes can be removed as their workloads will run on other nodes in the cluster.\n  * Nodes can be replaced with lower priced variants due to a change in the workloads.\n* [**Drift**]({{<ref \"#drift\" >}}): Karpenter will mark nodes as drifted and disrupt nodes that have drifted from their desired specification. See [Drift]({{<ref \"#drift\" >}}) to see which fields are considered.\n\n{{% alert title=\"Defaults\" color=\"secondary\" %}}\nDisruption is configured through the NodePool's disruption block by the `consolidationPolicy`, and `consolidateAfter` fields. Karpenter will configure these fields with the following values by default if they are not set:\n\n```yaml\nspec:\n  disruption:\n    consolidationPolicy: WhenEmptyOrUnderutilized\n    consolidateAfter: 0s\n```\n{{% /alert %}}\n\n### Consolidation\n\nConsolidation is configured by `consolidationPolicy` and `consolidateAfter`. `consolidationPolicy` determines the pre-conditions for nodes to be considered consolidatable, and are `WhenEmpty` or `WhenEmptyOrUnderutilized`. If a node has no running non-daemon pods, it is considered empty.  `consolidateAfter` can be set to indicate how long Karpenter should wait after a pod schedules or is removed from the node before considering the node consolidatable. With `WhenEmptyOrUnderutilized`, Karpenter will consider a node consolidatable when its `consolidateAfter` has been reached, empty or not.\n\nKarpenter has two mechanisms for cluster consolidation:\n1. **Deletion** - A node is eligible for deletion if all of its pods can run on free capacity of other nodes in the cluster.\n2. **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 lower price replacement node.\n\nConsolidation has three mechanisms that are performed in order to attempt to identify a consolidation action:\n1. **Empty Node Consolidation** - Delete any entirely empty nodes in parallel\n2. **Multi Node Consolidation** - Try to delete two or more nodes in parallel, possibly launching a single replacement whose price is lower than that of all nodes being removed\n3. **Single Node Consolidation** - Try to delete any single node, possibly launching a single replacement whose price is lower than that of the node being removed\n\nIt'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.\n\nWhen there are multiple nodes that could be potentially deleted or replaced, Karpenter chooses to consolidate the node that overall disrupts your workloads the least by preferring to terminate:\n\n* Nodes running fewer pods\n* Nodes that will expire soon\n* Nodes with lower priority pods\n\nIf 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.\n\n```bash\nEvents:\n  Type     Reason                   Age                From             Message\n  ----     ------                   ----               ----             -------\n  Normal   Unconsolidatable         66s                karpenter        pdb default/inflate-pdb prevents pod evictions\n  Normal   Unconsolidatable         33s (x3 over 30m)  karpenter        can't replace with a lower-priced node\n```\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nUsing 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 disrupt 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`).\n{{% /alert %}}\n\n#### Spot consolidation\nFor spot nodes, Karpenter has deletion consolidation enabled by default. If you would like to enable replacement with spot consolidation, you need to enable the feature through the [`SpotToSpotConsolidation` feature flag]({{<ref \"../reference/settings#features-gates\" >}}).\n\nLower priced spot instance types are selected with the [`price-capacity-optimized` strategy](https://aws.amazon.com/blogs/compute/introducing-price-capacity-optimized-allocation-strategy-for-ec2-spot-instances/). Sometimes, the lowest priced spot instance type is not launched due to the likelihood of interruption. As a result, Karpenter uses the number of available instance type options with a price lower than the currently launched spot instance as a heuristic for evaluating whether it should launch a replacement for the current spot node.\n\nWe refer to the number of instances that Karpenter has within its launch decision as a launch's \"instance type flexibility.\" When Karpenter is considering performing a spot-to-spot consolidation replacement, it will check whether replacing the instance type will lead to enough instance type flexibility in the subsequent launch request. As a result, we get the following properties when evaluating for consolidation:\n1) We shouldn't continually consolidate down to the lowest priced spot instance which might have very high rates of interruption.\n2) We launch with enough instance types that there’s high likelihood that our replacement instance has comparable availability to our current one.\n\nKarpenter requires a minimum instance type flexibility of 15 instance types when performing single node spot-to-spot consolidations (1 node to 1 node). It does not have the same instance type flexibility requirement for multi-node spot-to-spot consolidations (many nodes to 1 node) since doing so without requiring flexibility won't lead to \"race to the bottom\" scenarios.\n\n\n### Drift\nDrift handles changes to the NodePool/EC2NodeClass. For Drift, values in the NodePool/EC2NodeClass are reflected in the NodeClaimTemplateSpec/EC2NodeClassSpec in the same way that they’re set. A NodeClaim will be detected as drifted if the values in its owning NodePool/EC2NodeClass do not match the values in the NodeClaim. Similar to the upstream `deployment.spec.template` relationship to pods, Karpenter will annotate the owning NodePool and EC2NodeClass with a hash of the NodeClaimTemplateSpec to check for drift. Some special cases will be discovered either from Karpenter or through the CloudProvider interface, triggered by NodeClaim/Instance/NodePool/EC2NodeClass changes.\n\n#### Special Cases on Drift\nIn special cases, drift can correspond to multiple values and must be handled differently. Drift on resolved fields can create cases where drift occurs without changes to CRDs, or where CRD changes do not result in drift. For example, if a NodeClaim has `node.kubernetes.io/instance-type: m5.large`, and requirements change from `node.kubernetes.io/instance-type In [m5.large]` to `node.kubernetes.io/instance-type In [m5.large, m5.2xlarge]`, the NodeClaim will not be drifted because its value is still compatible with the new requirements. Conversely, if a NodeClaim is using a NodeClaim image `ami: ami-abc`, but a new image is published, Karpenter's `EC2NodeClass.spec.amiSelectorTerms` will discover that the new correct value is `ami: ami-xyz`, and detect the NodeClaim as drifted.\n\n##### NodePool\n| Fields         |\n|----------------|\n| spec.template.spec.requirements   |\n\n##### EC2NodeClass\n| Fields                        |\n|-------------------------------|\n| spec.subnetSelectorTerms      |\n| spec.securityGroupSelectorTerms  |\n| spec.amiSelectorTerms  |\n\n#### Behavioral Fields\nBehavioral Fields are treated as over-arching settings on the NodePool to dictate how Karpenter behaves. These fields don’t correspond to settings on the NodeClaim or instance. They’re set by the user to control Karpenter’s Provisioning and disruption logic. Since these don’t map to a desired state of NodeClaims, __behavioral fields are not considered for Drift__.\n\n##### NodePool\n| Fields              |\n|---------------------|\n| spec.weight         |\n| spec.limits         |\n| spec.disruption.*   |\n\nRead the [Drift Design](https://github.com/aws/karpenter-core/blob/main/designs/drift.md) for more.\n\n\nKarpenter will add the `Drifted` status condition on NodeClaims if the NodeClaim is drifted from its owning NodePool. Karpenter will also remove the `Drifted` status condition if either:\n1. The `Drift` feature gate is not enabled but the NodeClaim is drifted, Karpenter will remove the status condition.\n2. The NodeClaim isn't drifted, but has the status condition, Karpenter will remove it.\n\n## Automated Forceful Methods\n\nAutomated forceful methods will begin draining nodes as soon as the condition is met.\nUnlike the graceful methods mentioned above, these methods can not be rate-limited using [NodePool Disruption Budgets](#nodepool-disruption-budgets), and do not wait for a pre-spin replacement node to be healthy for the pods to reschedule.\nPod disruption budgets may be used to rate-limit application disruption.\n\n### Expiration\n\nExpiration is a forceful disruption method that begins draining a node immediately once its lifetime exceeds the duration set on the owning NodeClaim's `spec.expireAfter` field.\nChanges to `spec.template.spec.expireAfter` on the owning NodePool will not update the field for existing NodeClaims - it will induce NodeClaim drift and the replacements will have the updated value.\nExpiration can be used, in conjunction with [`terminationGracePeriod`](#terminationgraceperiod), to enforce a maximum Node lifetime.\nBy default, `expireAfter` is set to `720h` (30 days).\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nThe `expireAfter` field defines the **maximum** node lifetime (upper bound), not a guaranteed minimum.\nNodes can be disrupted earlier than the `expireAfter` duration by other disruption methods such as [Drift]({{<ref \"#drift\" >}}), [Consolidation]({{<ref \"#consolidation\" >}}), or [Emptiness]({{<ref \"#consolidation\" >}}) if their [disruption budgets]({{<ref \"#nodepool-disruption-budgets\" >}}) allow.\nFor example, a NodePool with `expireAfter: 720h` (30 days) can still have nodes terminated earlier if the node becomes drifted due to an AMI update and the disruption budget permits drift-based disruptions.\n\nTo enforce a true maximum node lifetime that cannot be shortened by other disruption methods, use `expireAfter` in combination with carefully configured disruption budgets that limit or prevent other disruption reasons.\n{{% /alert %}}\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nMisconfigured PDBs and pods with the `karpenter.sh/do-not-disrupt` annotation may block draining indefinitely.\nFor this reason, it is not recommended to set `expireAfter` without also setting `terminationGracePeriod` **if** your cluster has pods with the `karpenter.sh/do-not-disrupt` annotation.\nDoing so can result in partially drained nodes stuck in the cluster, driving up cluster cost and potentially requiring manual intervention to resolve.\n{{% /alert %}}\n\n### Interruption\n\nIf interruption-handling is enabled, Karpenter will watch for upcoming involuntary interruption events that would cause disruption to your workloads. These interruption events include:\n\n* Spot Interruption Warnings\n* Scheduled Change Health Events (Maintenance Events)\n* Instance Terminating Events\n* Instance Stopping Events\n\nWhen Karpenter detects one of these events will occur to your nodes, it automatically taints, 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.\n\nFor Spot interruptions, the NodePool will start a new node as soon as it sees the Spot interruption warning. Spot interruptions have a __2 minute notice__ before Amazon EC2 reclaims the instance. Once Karpenter has received this warning it will begin draining the node while in parallel provisioning a new node. Karpenter's average node startup time means that, generally, there is sufficient time for the new node to become ready before EC2 initiates termination for the spot instance.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nKarpenter publishes Kubernetes events to the node for all events listed above in addition to [__Spot Rebalance Recommendations__](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/rebalance-recommendations.html). Karpenter does not currently support taint, drain, and terminate logic for Spot Rebalance Recommendations.\n\nIf you require handling for Spot Rebalance Recommendations, you can use the [AWS Node Termination Handler (NTH)](https://github.com/aws/aws-node-termination-handler) alongside Karpenter; however, note that the AWS Node Termination Handler cordons and drains nodes on rebalance recommendations, potentially causing more node churn in the cluster than with interruptions alone. Further information can be found in the [Troubleshooting Guide]({{< ref \"../troubleshooting#aws-node-termination-handler-nth-interactions\" >}}).\n{{% /alert %}}\n\nKarpenter 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-karpenter/#create-the-karpenter-infrastructure-and-iam-roles).\n\nTo enable interruption handling, configure the `--interruption-queue` CLI argument with the name of the interruption queue provisioned to handle interruption events.\n\n### Node Auto Repair\n\n<i class=\"fa-solid fa-circle-info\"></i> <b>Feature State: </b> Karpenter v1.1.0 [alpha]({{<ref \"../reference/settings#feature-gates\" >}})\n\nNode Auto Repair is a feature that automatically identifies and replaces unhealthy nodes in your cluster, helping to maintain overall cluster health. Nodes can experience various types of failures affecting their hardware, file systems, or container environments. These failures may be surfaced through node conditions such as network unavailability, disk pressure, memory pressure, or other conditions reported by node diagnostic agents. When Karpenter detects these unhealthy conditions, it automatically replaces the affected nodes based on cloud provider-defined repair policies. Once a node has been in an unhealthy state beyond its configured toleration duration, Karpenter will forcefully terminate the node and its corresponding NodeClaim, bypassing the standard drain and grace period procedures to ensure swift replacement of problematic nodes. To prevent cascading failures, Karpenter includes safety mechanisms: it will not perform repairs if more than 20% of nodes in a NodePool are unhealthy, and for standalone NodeClaims, it evaluates this threshold against all nodes in the cluster. This ensures your cluster remains in a healthy state with minimal manual intervention, even in scenarios where normal node termination procedures might be impacted by the node's unhealthy state.\n\nTo enable Node Auto Repair:\n  1.  Ensure you have a [Node Monitoring Agent](https://docs.aws.amazon.com/en_us/eks/latest/userguide/node-health.html) deployed or any agent that will add status conditions to nodes that are supported (e.g., Node Problem Detector)\n  2.  Enable the feature flag: `NodeRepair=true`\n  3. Node AutoRepair will automatically terminate nodes when they have unhealthy status conditions based on your cloud provider's repair policies\n\n\nKarpenter monitors nodes for the following node status conditions when initiating repair actions:\n\n\n#### Kubelet Node Conditions\n\n|   Type  |    Status     | Toleration Duration |\n| ------  | ------------- | ------------------- |\n|  Ready  |     False     |     30 minutes      |\n|  Ready  |     Unknown   |     30 minutes      |\n\n#### Node Monitoring Agent Conditions\n\n|            Type            |    Status     | Toleration Duration |\n| ------------------------   | ------------| --------------------- |\n|  AcceleratedHardwareReady  |     False   |     10 minutes        |\n|  StorageReady              |     False   |     30 minutes        |\n|  NetworkingReady           |     False   |     30 minutes        |\n|  KernelReady               |     False   |     30 minutes        |\n|  ContainerRuntimeReady     |     False   |     30 minutes        |\n\nTo enable the NodeRepair feature flag, refer to the [Feature Gates]({{<ref \"../reference/settings#feature-gates\" >}}).\n\n## Controls\n\n### TerminationGracePeriod\n\nTo configure a maximum termination duration, `terminationGracePeriod` should be used.\nIt is configured through a NodePool's [`spec.template.spec.terminationGracePeriod`]({{<ref \"../concepts/nodepools/#spectemplatespecterminationgraceperiod\" >}}) field, and is persisted to created NodeClaims (`spec.terminationGracePeriod`).\nChanges to the [`spec.template.spec.terminationGracePeriod`]({{<ref \"../concepts/nodepools/#spectemplatespecterminationgraceperiod\" >}}) field on the NodePool will not result in a change for existing NodeClaims - it will induce NodeClaim drift and the replacements will have the updated `terminationGracePeriod`.\n\nOnce a node is disrupted, via either a [graceful](#automated-graceful-methods) or [forceful](#automated-forceful-methods) disruption method, Karpenter will begin draining the node.\nAt this point, the countdown for `terminationGracePeriod` begins.\nOnce the `terminationGracePeriod` elapses, remaining pods will be forcibly deleted and the underlying instance will be terminated.\nA node may be terminated before the `terminationGracePeriod` has elapsed if all disruptable pods have been drained.\n\nIn conjunction with `expireAfter`, `terminationGracePeriod` can be used to enforce an absolute maximum node lifetime.\nThe node will begin to drain once its `expireAfter` has elapsed, and it will be forcibly terminated once its `terminationGracePeriod` has elapsed, making the maximum node lifetime the sum of the two fields.\n\nAdditionally, configuring `terminationGracePeriod` changes the eligibility criteria for disruption via `Drift`.\nWhen configured, a node may be disrupted via drift even if there are pods with blocking PDBs or the `karpenter.sh/do-not-disrupt` annotation scheduled to it.\nThis enables cluster administrators to ensure crucial updates (e.g. AMI updates addressing CVEs) can't be blocked by misconfigured applications.\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nTo ensure that the `terminationGracePeriodSeconds` value for draining pods is respected, pods will be preemptively deleted before the Node's `terminationGracePeriod` has elapsed.\nThis includes pods with blocking [pod disruption budgets](https://kubernetes.io/docs/tasks/run-application/configure-pdb/) or the [`karpenter.sh/do-not-disrupt` annotation]({{<ref \"#pod-level-controls\" >}}).\n\nConsider the following example: a Node with a 1 hour `terminationGracePeriod` has been disrupted and begins to drain.\nA pod with the `karpenter.sh/do-not-disrupt` annotation and a 300 second (5 minute) `terminationGracePeriodsSeconds` is scheduled to it.\nIf the pod is still running 55 minutes after the Node begins to drain, the pod will be deleted to ensure its `terminationGracePeriodSeconds` value is respected.\n\nIf a pod's `terminationGracePeriodSeconds` value exceeds that of the Node it is scheduled to, Karpenter will prioritize the Node's `terminationGracePeriod`.\nThe pod will be deleted as soon as the Node begins to drain, and it will not receive it's full `terminationGracePeriodSeconds`.\n{{% /alert %}}\n\n### NodePool Disruption Budgets\n\nYou can rate limit Karpenter's disruption through the NodePool's `spec.disruption.budgets`. If undefined, Karpenter will default to one budget with `nodes: 10%`. Budgets will consider nodes that are actively being deleted for any reason, and will only block Karpenter from disrupting nodes voluntarily through drift, emptiness, and consolidation. Note that NodePool Disruption Budgets do not prevent Karpenter from terminating expired nodes.\n\n#### Reasons\nKarpenter allows specifying if a budget applies to any of `Drifted`, `Underutilized`, or `Empty`. When a budget has no reasons, it's assumed that it applies to all reasons. When calculating allowed disruptions for a given reason, Karpenter will take the minimum of the budgets that have listed the reason or have left reasons undefined.\n\n#### Nodes\nWhen calculating if a budget will block nodes from disruption, Karpenter lists the total number of nodes owned by a NodePool, subtracting out the nodes owned by that NodePool that are currently being deleted and nodes that are NotReady. If the number of nodes being deleted by Karpenter or any other processes is greater than the number of allowed disruptions, disruption for this node will not proceed.\n\nIf the budget is configured with a percentage value, such as `20%`, Karpenter will calculate the number of allowed disruptions as `allowed_disruptions = roundup(total * percentage) - total_deleting - total_notready`. If otherwise defined as a non-percentage value, Karpenter will simply use that number as a static ceiling `non_percentage_value - total_deleting - total_notready`. For multiple budgets in a NodePool, Karpenter will take the minimum value (most restrictive) of each of the budgets.\n\nFor example, the following NodePool with three budgets defines the following requirements:\n- The first budget will only allow 20% of nodes owned by that NodePool to be disrupted if it's empty or drifted. For instance, if there were 19 nodes owned by the NodePool, 4 empty or drifted nodes could be disrupted, rounding up from `19 * .2 = 3.8`.\n- The second budget acts as a ceiling to the previous budget, only allowing 5 disruptions when there are more than 25 nodes.\n- The last budget only blocks disruptions during the first 10 minutes of the day, where 0 disruptions are allowed, only applying to underutilized nodes.\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\nspec:\n  disruption:\n    consolidationPolicy: WhenEmptyOrUnderutilized\n    budgets:\n    - nodes: \"20%\"\n      reasons:\n      - \"Empty\"\n      - \"Drifted\"\n    - nodes: \"5\"\n    - nodes: \"0\"\n      schedule: \"@daily\"\n      duration: 10m\n      reasons:\n      - \"Underutilized\"\n```\n\n#### Schedule\nSchedule is a cronjob schedule. Generally, the cron syntax is five space-delimited values with options below, with additional special macros like `@yearly`, `@monthly`, `@weekly`, `@daily`, `@hourly`.\nFollow the [Kubernetes documentation](https://kubernetes.io/docs/concepts/workloads/controllers/cron-jobs/#writing-a-cronjob-spec) for more information on how to follow the cron syntax. Timezones are not currently supported. Schedules are always in UTC.\n\n```bash\n# ┌───────────── minute (0 - 59)\n# │ ┌───────────── hour (0 - 23)\n# │ │ ┌───────────── day of the month (1 - 31)\n# │ │ │ ┌───────────── month (1 - 12)\n# │ │ │ │ ┌───────────── day of the week (0 - 6) (Sunday to Saturday;\n# │ │ │ │ │                                   7 is also Sunday on some systems)\n# │ │ │ │ │                                   OR sun, mon, tue, wed, thu, fri, sat\n# │ │ │ │ │\n# * * * * *\n```\n\n#### Duration\nDuration allows compound durations with minutes and hours values such as `10h5m` or `30m` or `160h`. Since cron syntax does not accept denominations smaller than minutes, users can only define minutes or hours.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nDuration and Schedule must be defined together. When omitted, the budget is always active. When defined, the schedule determines a starting point where the budget will begin being enforced, and the duration determines how long from that starting point the budget will be enforced.\n{{% /alert %}}\n\n### Pod-Level Controls\n\nPods with blocking PDBs will not be evicted by the [Termination Controller]({{<ref \"#termination-controller\">}}) or be considered for voluntary disruption actions. When multiple pods on a node have different PDBs, none of the PDBs may be blocking for Karpenter to voluntary disrupt a node. This can create complex eviction scenarios:\n  - If a pod matches multiple PDBs (via label selectors), ALL of these PDBs must allow for disruption\n  - When different pods on the same node belong to different PDBs, ALL PDBs must simultaneously permit eviction\n  - A single blocking PDB can prevent the entire node from being voluntary disrupted\n\nFor example, consider a node with these pods and PDBs:\n- Pod A: Matches PDB-1 (maxUnavailable: 0) and PDB-2 (maxUnavailable: 1)\n- Pod B: Matches PDB-3 (minAvailable: 100%)\n- Pod C: No PDB\n\nIn this scenario, Karpenter cannot voluntary disrupt the node because:\n1. Pod A is blocked by PDB-1 even though PDB-2 would allow disruption\n2. Pod B is blocked by PDB-3's requirement for 100% availability\n\nAs seen in this example, the more PDBs there are affecting a Node, the more difficult it will be for Karpenter to find an opportunity to perform voluntary disruption actions.\n\nSecondly, you can block Karpenter from voluntarily disrupting and draining pods by adding the `karpenter.sh/do-not-disrupt: \"true\"` annotation to the pod.\nYou can treat this annotation as a single-pod, permanently blocking PDB.\nThis has the following consequences:\n- Nodes with `karpenter.sh/do-not-disrupt` pods will be excluded from [Consolidation]({{<ref \"#consolidation\" >}}), and conditionally excluded from [Drift]({{<ref \"#drift\" >}}).\n  - If the Node's owning NodeClaim has a [`terminationGracePeriod`]({{<ref \"#terminationgraceperiod\" >}}) configured, it will still be eligible for disruption via drift.\n- Like pods with a blocking PDB, pods with the `karpenter.sh/do-not-disrupt` annotation will **not** be gracefully evicted by the [Termination Controller]({{<ref \"#termination-controller\">}}).\n  Karpenter will not be able to complete termination of the node until one of the following conditions is met:\n  - All pods with the `karpenter.sh/do-not-disrupt` annotation are removed.\n  - All pods with the `karpenter.sh/do-not-disrupt` annotation have entered a [terminal phase](https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#pod-phase) (`Succeeded` or `Failed`).\n  - The owning NodeClaim's [`terminationGracePeriod`]({{<ref \"#terminationgraceperiod\" >}}) has elapsed.\n\nThis is useful for pods that you want to run from start to finish without disruption.\nExamples of pods that you might want to opt-out of disruption include an 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.\n\n```yaml\napiVersion: apps/v1\nkind: Deployment\nspec:\n  template:\n    metadata:\n      annotations:\n        karpenter.sh/do-not-disrupt: \"true\"\n```\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nThe `karpenter.sh/do-not-disrupt` annotation does **not** exclude nodes from the forceful disruption methods: [Expiration]({{<ref \"#expiration\" >}}), [Interruption]({{<ref \"#interruption\" >}}), [Node Repair](<ref \"#node-repair\" >), and manual deletion (e.g. `kubectl delete node ...`).\nWhile both interruption and node repair have implicit upper-bounds on termination time, expiration and manual termination do not.\nManual intervention may be required to unblock node termination, by removing pods with the `karpenter.sh/do-not-disrupt` annotation.\nFor this reason, it is not recommended to use the `karpenter.sh/do-not-disrupt` annotation with `expireAfter` **if** you have not also configured `terminationGracePeriod`.\n{{% /alert %}}\n\n### Node-Level Controls\n\nYou can block Karpenter from voluntarily choosing to disrupt certain nodes by setting the `karpenter.sh/do-not-disrupt: \"true\"` annotation on the node.\nThis will prevent voluntary disruption actions against the node.\n\n```yaml\napiVersion: v1\nkind: Node\nmetadata:\n  annotations:\n    karpenter.sh/do-not-disrupt: \"true\"\n```\n\n#### Example: Disable Disruption on a NodePool\n\nTo disable disruption for all nodes launched by a NodePool, you can configure its `.spec.disruption.budgets`. Setting a budget of zero nodes will prevent any of those nodes from being considered for voluntary disruption.\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\nspec:\n  disruption:\n    budgets:\n      - nodes: \"0\"\n```\n"
  },
  {
    "path": "website/content/en/v1.7/concepts/nodeclaims.md",
    "content": "---\ntitle: \"NodeClaims\"\nlinkTitle: \"NodeClaims\"\nweight: 30\ndescription: >\n  Understand NodeClaims\n---\n\nKarpenter uses NodeClaims to manage the lifecycle of Kubernetes Nodes with the underlying cloud provider.\nKarpenter will create and delete NodeClaims in response to the demands of Pods in the cluster.\nIt does this by evaluating the requirements of pending pods, finding a compatible [NodePool]({{< ref \"./nodepools\" >}}) and [NodeClass]({{< ref \"./nodeclasses\" >}}) pair, and creating a NodeClaim which meets both sets of requirements.\nAlthough NodeClaims are immutable resources managed by Karpenter, you can monitor NodeClaims to keep track of the status of your Nodes.\n\nIn addition to tracking the lifecycle of Nodes, NodeClaims serve as requests for capacity.\nKarpenter creates NodeClaims in response to provisioning and disruption needs (pre-spin). Whenever Karpenter\ncreates a NodeClaim, it asks the cloud provider to create the instance (launch), register and link the created node\nwith the NodeClaim (registration), and wait for the node and its resources to be ready (initialization).\n\nThis page describes how NodeClaims integrate throughout Karpenter and the cloud provider implementation.\n\nIf you want to learn more about the nodes being managed by Karpenter, you can either look directly at the NodeClaim or at the nodes they are associated with:\n\n* Checking NodeClaims:\nIf something goes wrong in the process of creating a node, you can look at the NodeClaim\nto see where the node creation process might have failed. `kubectl get nodeclaims` will show you the NodeClaims\nfor the cluster, and its linked node. Using `kubectl describe nodeclaim <nodeclaim>` will show the status of a particular NodeClaim.\nFor example, if the node is NotReady, you might see statuses indicating that the NodeClaim failed to launch, register, or initialize.\nThere will be logs emitted by the Karpenter controller to indicate this too.\n\n* Checking nodes:\nUse commands such as `kubectl get node` and  `kubectl describe node <nodename>` to see the actual resources,\nlabels, and other attributes associated with a particular node.\n\n## NodeClaim roles in node creation\n\nNodeClaims provide a critical role in the Karpenter workflow for provisioning capacity, and in node disruptions.\n\nThe following diagram illustrates how NodeClaims interact with other components during Karpenter-driven node creation.\n\n![nodeclaim-node-creation](/nodeclaims.png)\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nConfigure the `KARPENTER_NAMESPACE` environment variable to the namespace where you've installed Karpenter (`kube-system` is the default). Follow along with the Karpenter logs in your cluster and do the following:\n\n```bash\nexport KARPENTER_NAMESPACE=\"kube-system\"\nkubectl logs -f -n \"${KARPENTER_NAMESPACE}\" \\\n   -l app.kubernetes.io/name=karpenter\n```\nIn a separate terminal, start some pods that would require Karpenter to create nodes to handle those pods.\nFor example, start up some inflate pods as described in [Scale up deployment]({{< ref \"../getting-started/getting-started-with-karpenter/#6-scale-up-deployment\" >}}).\n{{% /alert %}}\n\nAs illustrated in the previous diagram, Karpenter interacts with NodeClaims and related components when creating a node:\n\n1. Watches for pods and monitors NodePools and NodeClasses:\n    * Checks the pod scheduling constraints and resource requests.\n    * Cross-references the requirements with the existing NodePools and NodeClasses, (e.g. zones, arch, os)\n\n   **Example log:**\n   ```json\n   {\n       \"level\": \"INFO\",\n       \"time\": \"2024-06-22T02:24:16.114Z\",\n       \"message\": \"found provisionable pod(s)\",\n       \"commit\": \"490ef94\",\n       \"Pods\": \"default/inflate-66fb68585c-xvs86, default/inflate-66fb68585c-hpcdz, default/inflate-66fb68585c-8xztf,01234567adb205c7e default/inflate-66fb68585c-t29d8, default/inflate-66fb68585c-nxflz\",\n       \"duration\": \"100.761702ms\"\n   }\n   ```\n\n2. Computes the shape and size of a NodeClaim (or NodeClaims) to create in the cluster to fit the set of pods from step 1.\n\n   **Example log:**\n   ```json\n   {\n       \"level\": \"INFO\",\n       \"time\": \"2024-06-22T02:24:16.114Z\",\n       \"message\": \"computed new nodeclaim(s) to fit pod(s)\",\n       \"controller\": \"provisioner\",\n       \"nodeclaims\": 1,\n       \"pods\": 5\n   }\n   ```\n\n3. Creates the NodeClaim object in the cluster.\n\n   **Example log:**\n   ```json\n   {\n       \"level\": \"INFO\",\n       \"time\": \"2024-06-22T02:24:16.128Z\",\n       \"message\": \"created nodeclaim\",\n       \"controller\": \"provisioner\",\n       \"NodePool\": {\n           \"name\":\"default\"\n       },\n       \"NodeClaim\": {\n           \"name\":\"default-sfpsl\"\n       },\n       \"requests\": {\n           \"cpu\":\"5150m\",\n           \"pods\":\"8\"\n       },\n       \"instance-types\": \"c3.2xlarge, c4.2xlarge, c4.4xlarge, c5.2xlarge, c5.4xlarge and 55 other(s)\"\n   }\n   ```\n\n4. Finds the new NodeClaim and translates it into an API call to create a cloud provider instance, logging\n   the response of the API call.\n\n   If the API response is an unrecoverable error, such as an Insufficient Capacity Error, Karpenter will delete the NodeClaim, mark that instance type as temporarily unavailable, and create another NodeClaim if necessary.\n\n   **Example log:**\n   ```json\n   {\n       \"level\": \"INFO\",\n       \"time\": \"2024-06-22T02:24:19.028Z\",\n       \"message\": \"launched nodeclaim\",\n       \"controller\": \"nodeclaim.lifecycle\",\n       \"NodeClaim\": {\n           \"name\": \"default-sfpsl\"\n       },\n       \"provider-id\": \"aws:///us-west-2b/i-01234567adb205c7e\",\n       \"instance-type\": \"c3.2xlarge\",\n       \"zone\": \"us-west-2b\",\n       \"capacity-type\": \"spot\",\n       \"allocatable\": {\n         \"cpu\": \"7910m\",\n         \"ephemeral-storage\": \"17Gi\",\n         \"memory\": \"13215Mi\",\n         \"pods\": \"58\"\n       }\n   }\n   ```\n\n5. Karpenter watches for the instance to register itself with the cluster as a node, and updates the node's\n   labels, annotations, taints, owner refs, and finalizer to match what was defined in the NodePool and NodeClaim. Once this step is\n   completed, Karpenter will remove the `karpenter.sh/unregistered` taint from the Node.\n\n   If this fails to succeed within 15 minutes, Karpenter will remove the NodeClaim from the cluster and delete\n   the underlying instance, creating another NodeClaim if necessary.\n\n   **Example log:**\n   ```json\n   {\n     \"level\": \"INFO\",\n     \"time\": \"2024-06-22T02:26:19.028Z\",\n     \"message\": \"registered nodeclaim\",\n     \"controller\": \"nodeclaim.lifecycle\",\n     \"NodeClaim\": {\n       \"name\": \"default-sfpsl\"\n     },\n     \"provider-id\": \"aws:///us-west-2b/i-01234567adb205c7e\",\n     \"Node\": {\n       \"name\": \"ip-xxx-xxx-xx-xxx.us-west-2.compute.internal\"\n     }\n   }\n   ```\n\n6. Karpenter continues to watch the node, waiting until the node becomes ready, has all its startup taints removed,\n   and has all requested resources registered on the node.\n\n   **Example log:**\n   ```json\n   {\n     \"level\": \"INFO\",\n     \"time\": \"2024-06-22T02:24:52.642Z\",\n     \"message\": \"initialized nodeclaim\",\n     \"controller\": \"nodeclaim.lifecycle\",\n     \"NodeClaim\": {\n       \"name\": \"default-sfpsl\"\n     },\n     \"provider-id\": \"aws:///us-west-2b/i-01234567adb205c7e\",\n     \"Node\": {\n       \"name\": \"ip-xxx-xxx-xx-xxx.us-west-2.compute.internal\"\n     },\n     \"allocatable\": {\n       \"cpu\": \"7910m\",\n       \"ephemeral-storage\": \"18242267924\",\n       \"hugepages-2Mi\": \"0\",\n       \"memory\": \"14320468Ki\",\n       \"pods\": \"58\"\n     }\n   }\n   ```\n\n## NodeClaim example\nThe following is an example of a NodeClaim. Keep in mind that you cannot modify a NodeClaim.\nTo see the contents of a NodeClaim, get the name of your NodeClaim, then run `kubectl describe` to see its contents:\n\n```\nkubectl get nodeclaim\nNAME            TYPE               ZONE         NODE                                           READY   AGE\ndefault-m6pzn   c7i-flex.2xlarge   us-west-1a   ip-xxx-xxx-xx-xxx.us-west-1.compute.internal   True    7m50s\n\nkubectl describe nodeclaim default-m6pzn\n```\nStarting at the bottom of this example, here are some highlights of what the NodeClaim contains:\n\n* The Node Name (ip-xxx-xxx-xx-xxx.us-west-1.compute.internal) and Provider ID (aws:///us-west-1a/i-xxxxxxxxxxxxxxxxx) identify the instance that is fulfilling this NodeClaim.\n* Image ID (ami-0ccbbed159cce4e37) represents the operating system image running on the node.\n* Status shows the resources that are available on the node (CPU, memory, and so on) as well as the conditions associated with the node. The conditions show the status of the node, including whether the node is launched, registered, and initialized. This is particularly useful if Pods are not deploying to the node and you want to determine the cause.\n* Spec contains the metadata required for Karpenter to launch and manage an instance. This includes any scheduling requirements, resource requirements, the NodeClass reference, taints, and immutable disruption fields (expireAfter and terminationGracePeriod).\n* Additional information includes annotations and labels which should be synced to the Node, creation metadata, the termination finalizer, and the owner reference.\n\n```\nName:         default-x9wxq\nNamespace:\nLabels:       karpenter.k8s.aws/instance-category=c\n              karpenter.k8s.aws/instance-cpu=8\n              karpenter.k8s.aws/instance-cpu-manufacturer=amd\n              karpenter.k8s.aws/instance-ebs-bandwidth=3170\n              karpenter.k8s.aws/instance-encryption-in-transit-supported=true\n              karpenter.k8s.aws/instance-family=c5a\n              karpenter.k8s.aws/instance-generation=5\n              karpenter.k8s.aws/instance-hypervisor=nitro\n              karpenter.k8s.aws/instance-memory=16384\n              karpenter.k8s.aws/instance-network-bandwidth=2500\n              karpenter.k8s.aws/instance-size=2xlarge\n              karpenter.sh/capacity-type=spot\n              karpenter.sh/nodepool=default\n              kubernetes.io/arch=amd64\n              kubernetes.io/os=linux\n              node.kubernetes.io/instance-type=c5a.2xlarge\n              topology.k8s.aws/zone-id=usw2-az3\n              topology.kubernetes.io/region=us-west-2\n              topology.kubernetes.io/zone=us-west-2c\nAnnotations:  compatibility.karpenter.k8s.aws/cluster-name-tagged: true\n              compatibility.karpenter.k8s.aws/kubelet-drift-hash: 15379597991425564585\n              karpenter.k8s.aws/ec2nodeclass-hash: 5763643673275251833\n              karpenter.k8s.aws/ec2nodeclass-hash-version: v3\n              karpenter.k8s.aws/tagged: true\n              karpenter.sh/nodepool-hash: 377058807571762610\n              karpenter.sh/nodepool-hash-version: v3\nAPI Version:  karpenter.sh/v1\nKind:         NodeClaim\nMetadata:\n  Creation Timestamp:  2024-08-07T05:37:30Z\n  Finalizers:\n    karpenter.sh/termination\n  Generate Name:  default-\n  Generation:     1\n  Owner References:\n    API Version:           karpenter.sh/v1\n    Block Owner Deletion:  true\n    Kind:                  NodePool\n    Name:                  default\n    UID:                   6b9c6781-ac05-4a4c-ad6a-7551a07b2ce7\n  Resource Version:        19600526\n  UID:                     98a2ba32-232d-45c4-b7c0-b183cfb13d93\nSpec:\n  Expire After:  720h0m0s\n  Node Class Ref:\n    Group:\n    Kind:   EC2NodeClass\n    Name:   default\n  Requirements:\n    Key:       kubernetes.io/arch\n    Operator:  In\n    Values:\n      amd64\n    Key:       kubernetes.io/os\n    Operator:  In\n    Values:\n      linux\n    Key:       karpenter.sh/capacity-type\n    Operator:  In\n    Values:\n      spot\n    Key:       karpenter.k8s.aws/instance-category\n    Operator:  In\n    Values:\n      c\n      m\n      r\n    Key:       karpenter.k8s.aws/instance-generation\n    Operator:  Gt\n    Values:\n      2\n    Key:       karpenter.sh/nodepool\n    Operator:  In\n    Values:\n      default\n    Key:       node.kubernetes.io/instance-type\n    Operator:  In\n    Values:\n      c3.xlarge\n      c4.xlarge\n      c5.2xlarge\n      c5.xlarge\n      c5a.xlarge\n      c5ad.2xlarge\n      c5ad.xlarge\n      c5d.2xlarge\n  Resources:\n    Requests:\n      Cpu:   3150m\n      Pods:  6\n  Startup Taints:\n    Effect:  NoSchedule\n    Key:     app.dev/example-startup\n  Taints:\n    Effect:                  NoSchedule\n    Key:                     app.dev/example\n  Termination Grace Period:  1h0m0s\nStatus:\n  Allocatable:\n    Cpu:                        7910m\n    Ephemeral - Storage:        17Gi\n    Memory:                     14162Mi\n    Pods:                       58\n    vpc.amazonaws.com/pod-eni:  38\n  Capacity:\n    Cpu:                        8\n    Ephemeral - Storage:        20Gi\n    Memory:                     15155Mi\n    Pods:                       58\n    vpc.amazonaws.com/pod-eni:  38\n  Conditions:\n    Last Transition Time:  2024-08-07T05:38:08Z\n    Message:\n    Reason:                Consolidatable\n    Status:                True\n    Type:                  Consolidatable\n    Last Transition Time:  2024-08-07T05:38:07Z\n    Message:\n    Reason:                Initialized\n    Status:                True\n    Type:                  Initialized\n    Last Transition Time:  2024-08-07T05:37:33Z\n    Message:\n    Reason:                Launched\n    Status:                True\n    Type:                  Launched\n    Last Transition Time:  2024-08-07T05:38:07Z\n    Message:\n    Reason:                Ready\n    Status:                True\n    Type:                  Ready\n    Last Transition Time:  2024-08-07T05:37:55Z\n    Message:\n    Reason:                Registered\n    Status:                True\n    Type:                  Registered\n  Image ID:                ami-08946d4d49fc3f27b\n  Node Name:               ip-xxx-xxx-xxx-xxx.us-west-2.compute.internal\n  Provider ID:             aws:///us-west-2c/i-01234567890123\nEvents:\n  Type    Reason             Age   From       Message\n  ----    ------             ----  ----       -------\n  Normal  Launched           70s   karpenter  Status condition transitioned, Type: Launched, Status: Unknown -> True, Reason: Launched\n  Normal  DisruptionBlocked  70s   karpenter  Cannot disrupt NodeClaim: state node doesn't contain both a node and a nodeclaim\n  Normal  Registered         48s   karpenter  Status condition transitioned, Type: Registered, Status: Unknown -> True, Reason: Registered\n  Normal  Initialized        36s   karpenter  Status condition transitioned, Type: Initialized, Status: Unknown -> True, Reason: Initialized\n  Normal  Ready              36s   karpenter  Status condition transitioned, Type: Ready, Status: Unknown -> True, Reason: Ready\n```\n"
  },
  {
    "path": "website/content/en/v1.7/concepts/nodeclasses.md",
    "content": "---\ntitle: \"NodeClasses\"\nlinkTitle: \"NodeClasses\"\nweight: 2\ndescription: >\n  Configure AWS-specific settings with EC2NodeClasses\n---\n\nNode Classes enable configuration of AWS specific settings.\nEach NodePool must reference an EC2NodeClass using `spec.template.spec.nodeClassRef`.\nMultiple NodePools may point to the same EC2NodeClass.\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\nspec:\n  template:\n    spec:\n      nodeClassRef:\n        group: karpenter.k8s.aws\n        kind: EC2NodeClass\n        name: default\n---\napiVersion: karpenter.k8s.aws/v1\nkind: EC2NodeClass\nmetadata:\n  name: default\nspec:\n  kubelet:\n    podsPerCore: 2\n    maxPods: 20\n    systemReserved:\n      cpu: 100m\n      memory: 100Mi\n      ephemeral-storage: 1Gi\n    kubeReserved:\n      cpu: 200m\n      memory: 100Mi\n      ephemeral-storage: 3Gi\n    evictionHard:\n      memory.available: 5%\n      nodefs.available: 10%\n      nodefs.inodesFree: 10%\n    evictionSoft:\n      memory.available: 500Mi\n      nodefs.available: 15%\n      nodefs.inodesFree: 15%\n    evictionSoftGracePeriod:\n      memory.available: 1m\n      nodefs.available: 1m30s\n      nodefs.inodesFree: 2m\n    evictionMaxPodGracePeriod: 60\n    imageGCHighThresholdPercent: 85\n    imageGCLowThresholdPercent: 80\n    cpuCFSQuota: true\n    clusterDNS: [\"10.0.1.100\"]\n  # Optional, dictates UserData generation and default block device mappings.\n  # May be ommited when using an `alias` amiSelectorTerm, otherwise required.\n  amiFamily: AL2\n\n  # Required, discovers subnets to attach to instances\n  # Each term in the array of subnetSelectorTerms is ORed together\n  # Within a single term, all conditions are ANDed\n  subnetSelectorTerms:\n    # Select on any subnet that has the \"karpenter.sh/discovery: ${CLUSTER_NAME}\"\n    # AND the \"environment: test\" tag OR any subnet with ID \"subnet-09fa4a0a8f233a921\"\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\"\n        environment: test\n    - id: subnet-09fa4a0a8f233a921\n\n  # Required, discovers security groups to attach to instances\n  # Each term in the array of securityGroupSelectorTerms is ORed together\n  # Within a single term, all conditions are ANDed\n  securityGroupSelectorTerms:\n    # Select on any security group that has both the \"karpenter.sh/discovery: ${CLUSTER_NAME}\" tag\n    # AND the \"environment: test\" tag OR any security group with the \"my-security-group\" name\n    # OR any security group with ID \"sg-063d7acfb4b06c82c\"\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\"\n        environment: test\n    - name: my-security-group\n    - id: sg-063d7acfb4b06c82c\n\n  # Optional, IAM role to use for the node identity.\n  # Must specify one of \"role\" or \"instanceProfile\" for Karpenter to launch nodes\n  role: \"KarpenterNodeRole-${CLUSTER_NAME}\"\n\n  # Optional, IAM instance profile to use for the node identity.\n  # Must specify one of \"role\" or \"instanceProfile\" for Karpenter to launch nodes\n  instanceProfile: \"KarpenterNodeInstanceProfile-${CLUSTER_NAME}\"\n\n  # Each term in the array of amiSelectorTerms is ORed together\n  # Within a single term, all conditions are ANDed\n  amiSelectorTerms:\n    # Select on any AMI that has both the `karpenter.sh/discovery: ${CLUSTER_NAME}`\n    # AND `environment: test` tags OR any AMI with the name `my-ami` OR an AMI with\n    # ID `ami-123` OR an AMI with ID matching the value of my-custom-parameter\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\"\n        environment: test\n    - name: my-ami\n    - id: ami-123\n    - ssmParameter: my-custom-parameter # ssm parameter name or ARN\n    # Select EKS optimized AL2023 AMIs with version `v20240703`. This term is mutually\n    # exclusive and can't be specified with other terms.\n    # - alias: al2023@v20240703\n\n  # Optional, each term in the array of capacityReservationSelectorTerms is ORed together.\n  capacityReservationSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: ${CLUSTER_NAME}\n    - id: cr-123\n\n  # Optional, propagates tags to underlying EC2 resources\n  tags:\n    team: team-a\n    app: team-a-app\n\n  # Optional, configures IMDS for the instance\n  metadataOptions:\n    httpEndpoint: enabled\n    httpProtocolIPv6: disabled\n    httpPutResponseHopLimit: 1 # This is changed to disable IMDS access from containers not on the host network\n    httpTokens: required\n\n  # Optional, configures storage devices for the instance\n  blockDeviceMappings:\n    - deviceName: /dev/xvda\n      ebs:\n        volumeSize: 100Gi\n        volumeType: gp3\n        iops: 10000\n        encrypted: true\n        kmsKeyID: \"1234abcd-12ab-34cd-56ef-1234567890ab\"\n        deleteOnTermination: true\n        throughput: 125\n        snapshotID: snap-0123456789\n        volumeInitializationRate: 100\n\n  # Optional, use instance-store volumes for node ephemeral-storage\n  instanceStorePolicy: RAID0\n\n  # Optional, overrides autogenerated userdata with a merge semantic\n  userData: |\n    echo \"Hello world\"\n\n  # Optional, configures detailed monitoring for the instance\n  detailedMonitoring: true\n\n  # Optional, configures if the instance should be launched with an associated public IP address.\n  # If not specified, the default value depends on the subnet's public IP auto-assign setting.\n  associatePublicIPAddress: true\nstatus:\n  # Resolved subnets\n  subnets:\n    - id: subnet-0a462d98193ff9fac\n      zone: us-east-2b\n    - id: subnet-0322dfafd76a609b6\n      zone: us-east-2c\n    - id: subnet-0727ef01daf4ac9fe\n      zone: us-east-2b\n    - id: subnet-00c99aeafe2a70304\n      zone: us-east-2a\n    - id: subnet-023b232fd5eb0028e\n      zone: us-east-2c\n    - id: subnet-03941e7ad6afeaa72\n      zone: us-east-2a\n\n  # Resolved security groups\n  securityGroups:\n    - id: sg-041513b454818610b\n      name: ClusterSharedNodeSecurityGroup\n    - id: sg-0286715698b894bca\n      name: ControlPlaneSecurityGroup-1AQ073TSAAPW\n\n  # Resolved AMIs\n  amis:\n    - id: ami-01234567890123456\n      name: custom-ami-amd64\n      requirements:\n        - key: kubernetes.io/arch\n          operator: In\n          values:\n            - amd64\n    - id: ami-01234567890123456\n      name: custom-ami-arm64\n      requirements:\n        - key: kubernetes.io/arch\n          operator: In\n          values:\n            - arm64\n\n  # Capacity Reservations\n  capacityReservations:\n    - availabilityZone: us-west-2a\n      id: cr-01234567890123456\n      instanceMatchCriteria: targeted\n      instanceType: g6.48xlarge\n      ownerID: \"012345678901\"\n      reservationType: capacity-block\n      state: expiring\n    - availabilityZone: us-west-2c\n      id: cr-12345678901234567\n      instanceMatchCriteria: open\n      instanceType: g6.48xlarge\n      ownerID: \"98765432109\"\n      reservationType: default\n      state: active\n\n  # Generated instance profile name from \"role\"\n  instanceProfile: \"${CLUSTER_NAME}-0123456778901234567789\"\n  conditions:\n    - lastTransitionTime: \"2024-02-02T19:54:34Z\"\n      status: \"True\"\n      type: InstanceProfileReady\n    - lastTransitionTime: \"2024-02-02T19:54:34Z\"\n      status: \"True\"\n      type: SubnetsReady\n    - lastTransitionTime: \"2024-02-02T19:54:34Z\"\n      status: \"True\"\n      type: SecurityGroupsReady\n    - lastTransitionTime: \"2024-02-02T19:54:34Z\"\n      status: \"True\"\n      type: AMIsReady\n    - lastTransitionTime: \"2024-02-02T19:54:34Z\"\n      status: \"True\"\n      type: Ready\n```\nRefer to the [NodePool docs]({{<ref \"./nodepools\" >}}) for settings applicable to all providers. To explore various `EC2NodeClass` configurations, refer to the examples provided [in the Karpenter Github repository](https://github.com/aws/karpenter/blob/main/examples/v1/).\n\n\n## spec.kubelet\n\nKarpenter provides the ability to specify a few additional Kubelet arguments.\nThese are all optional and provide support for additional customization and use cases.\nAdjust these only if you know you need to do so.\nFor more details on kubelet settings, see the [KubeletConfiguration reference](https://kubernetes.io/docs/reference/config-api/kubelet-config.v1/).\nThe implemented fields are a subset of the full list of upstream kubelet configuration arguments.\n\n```yaml\nkubelet:\n  podsPerCore: 2\n  maxPods: 20\n  systemReserved:\n    cpu: 100m\n    memory: 100Mi\n    ephemeral-storage: 1Gi\n  kubeReserved:\n    cpu: 200m\n    memory: 100Mi\n    ephemeral-storage: 3Gi\n  evictionHard:\n    memory.available: 5%\n    nodefs.available: 10%\n    nodefs.inodesFree: 10%\n  evictionSoft:\n    memory.available: 500Mi\n    nodefs.available: 15%\n    nodefs.inodesFree: 15%\n  evictionSoftGracePeriod:\n    memory.available: 1m\n    nodefs.available: 1m30s\n    nodefs.inodesFree: 2m\n  evictionMaxPodGracePeriod: 60\n  imageGCHighThresholdPercent: 85\n  imageGCLowThresholdPercent: 80\n  cpuCFSQuota: true\n  clusterDNS: [\"10.0.1.100\"]\n```\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nIf you need to specify a field that isn't present in `spec.kubelet`, you can set it via custom [UserData]({{< ref \"#specuserdata\" >}}).\nFor example, if you wanted to configure `maxPods` and `registryPullQPS` you would set the former through `spec.kubelet` and the latter through UserData.\nThe following example achieves this with AL2023:\n\n```yaml\napiVersion: karpenter.k8s.aws/v1\nkind: EC2NodeClass\nspec:\n  amiSelectorTerms:\n    - alias: al2023@v20240807\n  kubelet:\n    maxPods: 42\n  userData: |\n    apiVersion: node.eks.aws/v1alpha1\n    kind: NodeConfig\n    spec:\n      kubelet:\n        config:\n          # Configured through UserData since unavailable in `spec.kubelet`\n          registryPullQPS: 10\n```\n\nNote that when using the `Custom` AMIFamily you will need to specify fields **both** in `spec.kubelet` and `spec.userData`.\n{{% /alert %}}\n\n#### Pods Per Core\n\nAn alternative way to dynamically set the maximum density of pods on a node is to use the `.spec.kubelet.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.\n\nThe 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.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\n`maxPods` may not be set in the `kubelet` of an EC2NodeClass, 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 EC2NodeClass will not cause unexpected behavior by exceeding the `maxPods` value.\n{{% /alert %}}\n\n#### Max Pods\n\nFor 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.kubelet.maxPods`. This value will be used during Karpenter pod scheduling and passed through to `--max-pods` on kubelet startup.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nWhen 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.\n{{% /alert %}}\n\n{{% alert title=\"Windows Support Notice\" color=\"warning\" %}}\nPresently, Windows worker nodes do not support using more than one ENI.\nAs a consequence, the number of IP addresses, and subsequently, the number of pods that a Windows worker node can support is limited by the number of IPv4 addresses available on the primary ENI.\nCurrently, Karpenter will only consider individual secondary IP addresses when calculating the pod density limit.\n{{% /alert %}}\n\n### Reserved Resources\n\nKarpenter 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.kubelet.systemReserved` values and the `--kube-reserved` configuration defaults with the `.spec.kubelet.kubeReserved` values.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nKarpenter considers these reserved resources when computing the allocatable ephemeral storage on a given instance type.\nIf `kubeReserved` is not specified, Karpenter will compute the default reserved [CPU](https://github.com/awslabs/amazon-eks-ami/blob/db28da15d2b696bc08ac3aacc9675694f4a69933/files/bootstrap.sh#L251) and [memory](https://github.com/awslabs/amazon-eks-ami/blob/db28da15d2b696bc08ac3aacc9675694f4a69933/files/bootstrap.sh#L235) resources for the purpose of ephemeral storage computation.\nThese defaults are based on the defaults on Karpenter's supported AMI families, which are not the same as the kubelet defaults.\nYou should be aware of the CPU and memory default calculation when using Custom AMI Families. If they don't align, there may be a difference in Karpenter's computed allocatable ephemeral storage and the actually ephemeral storage available on the node.\n{{% /alert %}}\n\n### Eviction Thresholds\n\nThe 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.\n\nKubelet 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.\n\nKarpenter supports [hard evictions](https://kubernetes.io/docs/concepts/scheduling-eviction/node-pressure-eviction/#hard-eviction-thresholds) through the `.spec.kubelet.evictionHard` field and [soft evictions](https://kubernetes.io/docs/concepts/scheduling-eviction/node-pressure-eviction/#soft-eviction-thresholds) through the `.spec.kubelet.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.\n\n```yaml\nkubelet:\n  evictionHard:\n    memory.available: 500Mi\n    nodefs.available: 10%\n    nodefs.inodesFree: 10%\n    imagefs.available: 5%\n    imagefs.inodesFree: 5%\n    pid.available: 7%\n  evictionSoft:\n    memory.available: 1Gi\n    nodefs.available: 15%\n    nodefs.inodesFree: 15%\n    imagefs.available: 10%\n    imagefs.inodesFree: 10%\n    pid.available: 10%\n```\n\n#### Supported Eviction Signals\n\n| Eviction Signal    | Description                                                                     |\n|--------------------|---------------------------------------------------------------------------------|\n| memory.available   | memory.available := node.status.capacity[memory] - node.stats.memory.workingSet |\n| nodefs.available   | nodefs.available := node.stats.fs.available                                     |\n| nodefs.inodesFree  | nodefs.inodesFree := node.stats.fs.inodesFree                                   |\n| imagefs.available  | imagefs.available := node.stats.runtime.imagefs.available                       |\n| imagefs.inodesFree | imagefs.inodesFree := node.stats.runtime.imagefs.inodesFree                     |\n| pid.available      | pid.available := node.stats.rlimit.maxpid - node.stats.rlimit.curproc           |\n\nFor 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.\n\n#### Soft Eviction Grace Periods\n\nSoft 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.\n\nOptionally, 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.\n\n```yaml\nkubelet:\n  evictionSoftGracePeriod:\n    memory.available: 1m\n    nodefs.available: 1m30s\n    nodefs.inodesFree: 2m\n    imagefs.available: 1m30s\n    imagefs.inodesFree: 2m\n    pid.available: 2m\n  evictionMaxPodGracePeriod: 60\n```\n\n### Pod Density\n\nBy 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.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nBy default, the VPC CNI allocates IPs for a node and pods from the same subnet. With [VPC CNI Custom Networking](https://aws.github.io/aws-eks-best-practices/networking/custom-networking), the pods will receive IP addresses from another subnet dedicated to pod IPs. This approach makes it easier to manage IP addresses and allows for separate Network Access Control Lists (NACLs) applied to your pods. VPC CNI Custom Networking reduces the pod density of a node since one of the ENI attachments will be used for the node and cannot share the allocated IPs on the interface to pods. Karpenter supports VPC CNI Custom Networking and similar CNI setups where the primary node interface is separated from the pods interfaces through a global environment variable RESERVED_ENIS, see [Settings]({{<ref \"../reference/settings\" >}}). In the common case, RESERVED_ENIS should be set to \"1\" if using Custom Networking. {{% /alert %}}\n\n{{% alert title=\"Windows Support Notice\" color=\"warning\" %}}\nIt's currently not possible to specify custom networking with Windows nodes.\n{{% /alert %}}\n\n## spec.amiFamily\n\nAMIFamily dictates the default bootstrapping logic for nodes provisioned through this `EC2NodeClass`.\nAn `amiFamily` is only required if you don't specify a `spec.amiSelectorTerms.alias` object.\nFor example, if you specify `alias: al2023@v20240807`, the `amiFamily` is implicitly `AL2023`.\n\nAMIFamily does not impact which AMI is discovered, only the UserData generation and default BlockDeviceMappings. To automatically discover EKS optimized AMIs, use the new [`alias` field in amiSelectorTerms]({{< ref \"#specamiselectorterms\" >}}).\n\n{{% alert title=\"Ubuntu Support Dropped at v1\" color=\"warning\" %}}\n\nSupport for the Ubuntu AMIFamily has been dropped at Karpenter `v1.0.0`.\nThis means Karpenter no longer supports automatic AMI discovery and UserData generation for Ubuntu.\nTo continue using Ubuntu AMIs, you will need to select Ubuntu AMIs using `amiSelectorTerms`.\n\nAdditionally, you will need to either maintain UserData yourself using the `Custom` AMIFamily, or you can use the `AL2` AMIFamily and custom `blockDeviceMappings` (as shown below).\nThe `AL2` family has an identical UserData format, but this compatibility isn't guaranteed long term.\nChanges to AL2's or Ubuntu's UserData format could result in incompatibility, at which point the `Custom` AMIFamily must be used.\n\n**Ubuntu NodeClass Example:**\n```yaml\napiVersion: karpenter.k8s.aws/v1\nkind: EC2NodeClass\nspec:\n  amiFamily: AL2\n  amiSelectorTerms:\n    - id: ami-placeholder\n  blockDeviceMappings:\n  - deviceName: '/dev/sda1'\n    rootVolume: true\n    ebs:\n      encrypted: true\n      volumeType: gp3\n      volumeSize: 20Gi\n```\n\n{{% /alert %}}\n\n\n### AL2\n\n{{% alert title=\"AL2 support dropped at Kubernetes 1.33\" color=\"warning\" %}}\nKubernetes version 1.32 is the last version for which Amazon EKS will release Amazon Linux 2 (AL2) AMIs.\n{{% /alert %}}\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nNote that Karpenter will automatically generate a call to the `/etc/eks/bootstrap.sh` script as part of its generated UserData. When using `amiFamily: AL2` you should not call this script yourself in `.spec.userData`. If you need to, use the [Custom AMI family]({{< ref \"./nodeclasses/#custom\" >}}) instead.\n{{% /alert %}}\n\n```bash\nMIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"//\"\n\n--//\nContent-Type: text/x-shellscript; charset=\"us-ascii\"\n\n#!/bin/bash -xe\nexec > >(tee /var/log/user-data.log|logger -t user-data -s 2>/dev/console) 2>&1\n/etc/eks/bootstrap.sh 'test-cluster' --apiserver-endpoint 'https://test-cluster' --b64-cluster-ca 'ca-bundle' \\\n--dns-cluster-ip '10.100.0.10' \\\n--use-max-pods false \\\n--kubelet-extra-args '--node-labels=karpenter.sh/capacity-type=on-demand,karpenter.sh/nodepool=test  --max-pods=110'\n--//--\n```\n\n### AL2023\n\n```text\nMIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"//\"\n\n--//\nContent-Type: application/node.eks.aws\n\n# Karpenter Generated NodeConfig\napiVersion: node.eks.aws/v1alpha1\nkind: NodeConfig\nspec:\n  cluster:\n    name: test-cluster\n    apiServerEndpoint: https://example.com\n    certificateAuthority: ca-bundle\n    cidr: 10.100.0.0/16\n  kubelet:\n    config:\n      maxPods: 110\n    flags:\n      - --node-labels=karpenter.sh/capacity-type=on-demand,karpenter.sh/nodepool=test\n\n--//--\n\n```\n\n### Bottlerocket\n\n```toml\n[settings]\n[settings.kubernetes]\napi-server = 'https://test-cluster'\ncluster-certificate = 'ca-bundle'\ncluster-name = 'test-cluster'\ncluster-dns-ip = '10.100.0.10'\nmax-pods = 110\n\n[settings.kubernetes.node-labels]\n'karpenter.sh/capacity-type' = 'on-demand'\n'karpenter.sh/nodepool' = 'test'\n```\n\n### Windows2019\n\n```powershell\n<powershell>\n[string]$EKSBootstrapScriptFile = \"$env:ProgramFiles\\Amazon\\EKS\\Start-EKSBootstrap.ps1\"\n& $EKSBootstrapScriptFile -EKSClusterName 'test-cluster' -APIServerEndpoint 'https://test-cluster' -Base64ClusterCA 'ca-bundle' -KubeletExtraArgs '--node-labels=\"karpenter.sh/capacity-type=on-demand,karpenter.sh/nodepool=test\" --max-pods=110' -DNSClusterIP '10.100.0.10'\n</powershell>\n```\n\n### Windows2022\n\n```powershell\n<powershell>\n[string]$EKSBootstrapScriptFile = \"$env:ProgramFiles\\Amazon\\EKS\\Start-EKSBootstrap.ps1\"\n& $EKSBootstrapScriptFile -EKSClusterName 'test-cluster' -APIServerEndpoint 'https://test-cluster' -Base64ClusterCA 'ca-bundle' -KubeletExtraArgs '--node-labels=\"karpenter.sh/capacity-type=on-demand,karpenter.sh/nodepool=test\" --max-pods=110' -DNSClusterIP '10.100.0.10'\n</powershell>\n```\n\n### Custom\n\nThe `Custom` AMIFamily ships without any default userData to allow you to configure custom bootstrapping for control planes or images that don't support the default methods from the other families. For this AMIFamily, kubelet must add the taint `karpenter.sh/unregistered:NoExecute` via the `--register-with-taints` flag ([flags](https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet/#options)) or the KubeletConfiguration spec ([options](https://kubernetes.io/docs/reference/config-api/kubelet-config.v1/#kubelet-config-k8s-io-v1-CredentialProviderConfig) and [docs](https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/)). Karpenter will fail to register nodes that do not have this taint.\n\n## spec.subnetSelectorTerms\n\nSubnet Selector Terms allow you to specify selection logic for a set of subnet options that Karpenter can choose from when launching an instance from the `EC2NodeClass`. Karpenter discovers subnets through the `EC2NodeClass` using ids or [tags](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html). 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.\n\nThis selection logic is modeled as terms, where each term contains multiple conditions that must all be satisfied for the selector to match. Effectively, all requirements within a single term are ANDed together. It's possible that you may want to select on two different subnets that have unrelated requirements. In this case, you can specify multiple terms which will be ORed together to form your selection logic. The example below shows how this selection logic is fulfilled.\n\n```yaml\nsubnetSelectorTerms:\n  # Select on any subnet that has the \"karpenter.sh/discovery: ${CLUSTER_NAME}\"\n  # AND the \"environment: test\" tag OR any subnet with ID \"subnet-09fa4a0a8f233a921\"\n  - tags:\n      karpenter.sh/discovery: \"${CLUSTER_NAME}\"\n      environment: test\n  - id: subnet-09fa4a0a8f233a921\n```\n\n{{% alert title=\"Tip\" color=\"secondary\" %}}\nSubnets may be specified by any tag, including `Name`. Selecting tag values using wildcards (`*`) is supported.\n{{% /alert %}}\n\n#### Examples\n\nSelect all with a specified tag key:\n```yaml\nspec:\n  subnetSelectorTerms:\n    - tags:\n        karpenter.sh/discovery/MyClusterName: '*'\n```\n\nSelect by name and tag (all criteria must match):\n```yaml\nspec:\n  subnetSelectorTerms:\n    - tags:\n        Name: my-subnet\n        MyTag: '' # matches all resources with the tag\n```\n\nSelect using multiple tag terms:\n```yaml\nspec:\n  subnetSelectorTerms:\n    - tags:\n        Name: \"my-subnet-1\"\n    - tags:\n        Name: \"my-subnet-2\"\n```\n\nSelect using wildcards:\n```yaml\nspec:\n  subnetSelectorTerms:\n    - tags:\n        Name: \"*Public*\"\n\n```\n\nSelect using ids:\n```yaml\nspec:\n  subnetSelectorTerms:\n    - id: \"subnet-09fa4a0a8f233a921\"\n    - id: \"subnet-0471ca205b8a129ae\"\n```\n\n\n## spec.securityGroupSelectorTerms\n\nSecurity Group Selector Terms allow you to specify selection logic for all security groups that will be attached to an instance launched from the `EC2NodeClass`. The security group of an instance is comparable to a set of firewall rules.\n[EKS creates at least two security groups by default](https://docs.aws.amazon.com/eks/latest/userguide/sec-group-reqs.html).\n\nThis selection logic is modeled as terms, where each term contains multiple conditions that must all be satisfied for the selector to match. Effectively, all requirements within a single term are ANDed together. It's possible that you may want to select on two different security groups that have unrelated requirements. In this case, you can specify multiple terms which will be ORed together to form your selection logic. The example below shows how this selection logic is fulfilled.\n\n```yaml\nsecurityGroupSelectorTerms:\n  # Select on any security group that has both the \"karpenter.sh/discovery: ${CLUSTER_NAME}\" tag\n  # AND the \"environment: test\" tag OR any security group with the \"my-security-group\" name\n  # OR any security group with ID \"sg-063d7acfb4b06c82c\"\n  - tags:\n      karpenter.sh/discovery: \"${CLUSTER_NAME}\"\n      environment: test\n  - name: my-security-group\n  - id: sg-063d7acfb4b06c82c\n```\n\n{{% alert title=\"Tip\" color=\"secondary\" %}}\nSecurity groups may be specified by any tag, including \"Name\". Selecting tags using wildcards (`*`) is supported.\n{{% /alert %}}\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nWhen launching nodes, Karpenter uses all the security groups that match the selector. If you choose to use the `kubernetes.io/cluster/$CLUSTER_NAME` tag for discovery, note that 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.\n\nTo verify if this restriction affects you, run the following commands.\n```bash\nCLUSTER_VPC_ID=\"$(aws eks describe-cluster --name $CLUSTER_NAME --query cluster.resourcesVpcConfig.vpcId --output text)\"\n\naws ec2 describe-security-groups --filters Name=vpc-id,Values=$CLUSTER_VPC_ID Name=tag-key,Values=kubernetes.io/cluster/$CLUSTER_NAME --query 'SecurityGroups[].[GroupName]' --output text\n```\n\nIf multiple securityGroups are printed, you will need more specific securityGroupSelectorTerms. We generally recommend that you use the `karpenter.sh/discovery: $CLUSTER_NAME` tag selector instead.\n{{% /alert %}}\n\n#### Examples\n\nSelect all assigned to a cluster:\n```yaml\nspec:\n  securityGroupSelectorTerms:\n    - tags:\n        kubernetes.io/cluster/$CLUSTER_NAME: \"owned\"\n```\n\nSelect all with a specified tag key:\n```yaml\nspec:\n  securityGroupSelectorTerms:\n    - tags:\n        MyTag: '*'\n```\n\nSelect by name and tag (all criteria must match):\n```yaml\nspec:\n  securityGroupSelectorTerms:\n    - name: my-security-group\n      tags:\n        MyTag: '*' # matches all resources with the tag\n```\n\nSelect using multiple tag terms:\n```yaml\nspec:\n  securityGroupSelectorTerms:\n    - tags:\n        Name: \"my-security-group-1\"\n    - tags:\n        Name: \"my-security-group-2\"\n```\n\nSelect by name using a wildcard:\n```yaml\nspec:\n  securityGroupSelectorTerms:\n    - name: \"*Public*\"\n```\n\nSelect using ids:\n```yaml\nspec:\n securityGroupSelectorTerms:\n    - id: \"sg-063d7acfb4b06c82c\"\n    - id: \"sg-06e0cf9c198874591\"\n```\n\n## spec.role\n\n`Role` is an optional field and tells Karpenter which IAM identity nodes should assume. You must specify one of `role` or `instanceProfile` when creating a Karpenter `EC2NodeClass`. If using the [Karpenter Getting Started Guide]({{<ref \"../getting-started/getting-started-with-karpenter\" >}}) to deploy Karpenter, you can use the `KarpenterNodeRole-$CLUSTER_NAME` role provisioned by that process.\n\n```yaml\nspec:\n  role: \"KarpenterNodeRole-$CLUSTER_NAME\"\n```\n\n## spec.instanceProfile\n\n`InstanceProfile` is an optional field and tells Karpenter which IAM identity nodes should assume. You must specify one of `role` or `instanceProfile` when creating a Karpenter `EC2NodeClass`. If you use the `instanceProfile` field instead of `role`, Karpenter will not manage the InstanceProfile on your behalf; instead, it expects that you have pre-provisioned an IAM instance profile and assigned it a role.\n\nYou can provision and assign a role to an IAM instance profile using [CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-instanceprofile.html) or by using the [`aws iam create-instance-profile`](https://docs.aws.amazon.com/cli/latest/reference/iam/create-instance-profile.html) and [`aws iam add-role-to-instance-profile`](https://docs.aws.amazon.com/cli/latest/reference/iam/add-role-to-instance-profile.html) commands in the CLI.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\n\nFor [private clusters](https://docs.aws.amazon.com/eks/latest/userguide/private-clusters.html) that do not have access to the public internet, using `spec.instanceProfile` is required. `spec.role` cannot be used since Karpenter needs to access IAM endpoints to manage a generated instance profile. IAM [doesn't support private endpoints](https://docs.aws.amazon.com/vpc/latest/privatelink/aws-services-privatelink-support.html) to enable accessing the service without going to the public internet.\n\n{{% /alert %}}\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nWhen using `spec.instanceProfile`, ensure you are using pre-provisioned instance profiles that you manage yourself.\n{{% /alert %}}\n\n## spec.amiSelectorTerms\n\nAMI Selector Terms are __required__ and are used to configure AMIs for Karpenter to use. AMIs are discovered through alias, id, owner, name, and [tags](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html).\n\nThis selection logic is modeled as terms, where each term contains multiple conditions that must all be satisfied for the selector to match.\nEffectively, all requirements within a single term are ANDed together.\nIt's possible that you may want to select on two different AMIs that have unrelated requirements.\nIn this case, you can specify multiple terms which will be ORed together to form your selection logic.\nThe example below shows how this selection logic is fulfilled.\n\n```yaml\namiSelectorTerms:\n  # Select on any AMI that has both the `karpenter.sh/discovery: ${CLUSTER_NAME}`\n  # AND `environment: test` tags OR any AMI with the name `my-ami` OR an AMI with\n  # ID `ami-123` OR an AMI with ID matching the value of my-custom-parameter\n  - tags:\n      karpenter.sh/discovery: \"${CLUSTER_NAME}\"\n      environment: test\n  - name: my-ami\n  - id: ami-123\n  - ssmParameter: my-custom-parameter # ssm parameter name or ARN\n  # Select EKS optimized AL2023 AMIs with version `v20240807`. This term is mutually\n  # exclusive and can't be specified with other terms.\n  # - alias: al2023@v20240807\n```\n\nAn `alias` term can be used to select EKS-optimized AMIs. An `alias` is formatted as `family@version`. Family can be one of the following values:\n\n* `al2`\n* `al2023`\n* `bottlerocket`\n* `windows2019`\n* `windows2022`\n\nThe version string can be set to `latest`, or pinned to a specific AMI using the format of that AMI's GitHub release tags.\nFor example, AL2 and AL2023 use dates for their release, so they can be pinned as follows:\n```yaml\nalias: al2023@v20240703\n```\nBottlerocket uses a semantic version for their releases. You can pin bottlerocket as follows:\n```yaml\nalias: bottlerocket@v1.20.4\n```\nThe Windows family does not support pinning, so only `latest` is supported.\n\nThe following commands can be used to determine the versions availble for an alias in your region:\n\n{{< tabpane text=true right=false >}}\n  {{% tab \"AL2023\" %}}\n  ```bash\n  export K8S_VERSION=\"1.33\"\n  aws ssm get-parameters-by-path --path \"/aws/service/eks/optimized-ami/$K8S_VERSION/amazon-linux-2023/\" --recursive | jq -cr '.Parameters[].Name' | grep -v \"recommended\" | awk -F '/' '{print $10}' | sed -r 's/.*(v[[:digit:]]+)$/\\1/' | sort | uniq\n  ```\n  {{% /tab %}}\n  {{% tab \"AL2\" %}}\n  ```bash\n  export K8S_VERSION=\"1.33\"\n  aws ssm get-parameters-by-path --path \"/aws/service/eks/optimized-ami/$K8S_VERSION/amazon-linux-2/\" --recursive | jq -cr '.Parameters[].Name' | grep -v \"recommended\" | awk -F '/' '{print $8}' | sed -r 's/.*(v[[:digit:]]+)$/\\1/' | sort | uniq\n  ```\n  {{% /tab %}}\n  {{% tab \"Bottlerocket\" %}}\n  ```bash\n  export K8S_VERSION=\"1.33\"\n  aws ssm get-parameters-by-path --path \"/aws/service/bottlerocket/aws-k8s-$K8S_VERSION\" --recursive | jq -cr '.Parameters[].Name' | grep -v \"latest\" | awk -F '/' '{print $7}' | sort | uniq\n  ```\n  {{% /tab %}}\n{{< /tabpane >}}\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter supports automatic AMI selection and upgrades using the `latest` version pin, but this is **not** recommended for production environments.\nWhen using `latest`, a new AMI release will cause Karpenter to drift all out-of-date nodes in the cluster, replacing them with nodes running the new AMI.\nWe strongly recommend evaluating new AMIs in a lower environment before rolling them out into a production environment.\nMore details on Karpenter's recommendations for managing AMIs can be found [here]({{< ref \"../tasks/managing-amis\" >}}).\n{{% /alert %}}\n\nTo select an AMI by name, use the `name` field in the selector term. To select an AMI by id, use the `id` field in the selector term. To select AMIs that are not owned by `amazon` or the account that Karpenter is running in, use the `owner` field - you can use a combination of account aliases (e.g. `self` `amazon`, `your-aws-account-name`) and account IDs.\n\nIf owner is not set for `name`, it defaults to `self,amazon`, preventing Karpenter from inadvertently selecting an AMI that is owned by a different account. Tags don't require an owner as tags can only be discovered by the user who created them.\n\n{{% alert title=\"Tip\" color=\"secondary\" %}}\nAMIs may be specified by any AWS tag, including `Name`. Selecting by tag or by name using wildcards (`*`) is supported.\n{{% /alert %}}\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nIf `amiSelectorTerms` match more than one AMI, Karpenter will automatically determine which AMI best fits the workloads on the launched worker node under the following constraints:\n\n* When launching nodes, Karpenter automatically determines which architecture a custom AMI is compatible with and will use images that match an instanceType's requirements.\n    * Unless using an alias, Karpenter **cannot** detect requirements other than architecture. If you need to specify different AMIs for different kind of nodes (e.g. accelerated GPU AMIs), you should use a separate `EC2NodeClass`.\n* If multiple AMIs are found that can be used, Karpenter will choose the latest one.\n* If no AMIs are found that can be used, then no nodes will be provisioned.\n{{% /alert %}}\n\n#### Examples\n\nSelect by AMI family and version:\n```yaml\n  amiSelectorTerms:\n    - alias: al2023@v20240807\n```\n\nSelect all with a specified tag:\n\n```yaml\n  amiSelectorTerms:\n    - tags:\n        karpenter.sh/discovery/MyClusterName: '*'\n```\n\nSelect by name:\n```yaml\n  amiSelectorTerms:\n    - name: my-ami\n```\n\nSelect by `Name` tag:\n```yaml\n  amiSelectorTerms:\n    - tags:\n        Name: my-ami\n```\n\nSelect by name and owner:\n```yaml\n  amiSelectorTerms:\n    - name: my-ami\n      owner: self\n    - name: my-ami\n      owner: \"0123456789\"\n```\n\nSelect by name using a wildcard:\n```yaml\nspec:\n  amiSelectorTerms:\n    - name: \"*EKS*\"\n```\n\nSelect by all under an owner:\n```yaml\nspec:\n  amiSelectorTerms:\n    - name: \"*\"\n      owner: self\n```\n\nSpecify using ids:\n```yaml\n  amiSelectorTerms:\n    - id: \"ami-123\"\n    - id: \"ami-456\"\n```\n\nSpecify using custom ssm parameter name or ARN:\n```yaml\n  amiSelectorTerms:\n    - ssmParameter: \"my-custom-parameter\"\n```\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nWhen using a custom SSM parameter, you'll need to expand the `ssm:GetParameter` permissions on the Karpenter IAM role to include your custom parameter, as the default policy only allows access to the AWS public parameters.\n{{% /alert %}}\n\n## spec.capacityReservationSelectorTerms\n\n<i class=\"fa-solid fa-circle-info\"></i> <b>Feature State: </b> [Beta]({{<ref \"../reference/settings#feature-gates\" >}})\n\nCapacity Reservation Selector Terms allow you to select [on-demand capacity reservations](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-capacity-reservations.html) (ODCRs), which will be made available to NodePools which select the given EC2NodeClass.\nKarpenter will prioritize utilizing the capacity in these reservations before falling back to on-demand and spot.\nCapacity reservations can be discovered using ids or tags.\n\nThis selection logic is modeled as terms.\nA term can specify an ID or a set of tags to select against.\nWhen specifying tags, it will select all capacity reservations accessible from the account with matching tags.\nThis can be further restricted by specifying an owner ID.\n\nFor more information on utilizing ODCRs with Karpenter, refer to the [Utilizing ODCRs Task]({{< relref \"../tasks/odcrs\" >}}).\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nNote that the IAM role Karpenter assumes should have a permissions policy associated with it that grants it permissions to use the [ec2:DescribeCapacityReservations](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonec2.html#amazonec2-DescribeCapacityReservations) action to discover capacity reservations and the [ec2:RunInstances](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonec2.html#amazonec2-RunInstances) action to run instances in those capacity reservations.\n{{% /alert %}}\n\n#### Examples\n\nSelect the reservations with the given IDs:\n\n```yaml\nspec:\n  capacityReservationSelectorTerms:\n  - id: cr-123\n  - id: cr-456\n```\n\nSelect the reservations by tags:\n\n```yaml\nspec:\n  capacityReservationSelectorTerms:\n  # Select all capacity reservations which have both matching tags\n  - tags:\n      key1: foo\n      key2: bar\n  # Additionally, select all capacity reservations with the following matching tag\n  - tags:\n      key3: foobar\n```\n\nSelect by tags and owner ID:\n\n```yaml\nspec:\n  # Select all capacity reservations with the matching tags which are also owned by\n  # the specified account.\n  capacityReservationSelectorTerms:\n  - tags:\n      key: foo\n    ownerID: 012345678901\n```\n\n## spec.tags\n\nKarpenter adds tags to all resources it creates, including EC2 Instances, EBS volumes, and Launch Templates. The default set of tags are listed below.\n\n```yaml\nName: <node-name>\nkarpenter.sh/nodeclaim: <nodeclaim-name>\nkarpenter.sh/nodepool: <nodepool-name>\nkarpenter.k8s.aws/ec2nodeclass: <ec2nodeclass-name>\nkubernetes.io/cluster/<cluster-name>: owned\neks:eks-cluster-name: <cluster-name>\n```\n\nAdditional tags can be added in the tags section, which will be merged with the default tags specified above.\n```yaml\nspec:\n  tags:\n    InternalAccountingTag: 1234\n    dev.corp.net/app: Calculator\n    dev.corp.net/team: MyTeam\n```\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nKarpenter allows overrides of the default \"Name\" tag but does not allow overrides to restricted domains (such as \"karpenter.sh\", \"karpenter.k8s.aws\", and \"kubernetes.io/cluster\"). This ensures that Karpenter is able to correctly auto-discover nodes that it owns.\n{{% /alert %}}\n\n## spec.metadataOptions\n\nControl the exposure of [Instance Metadata Service](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html) on EC2 Instances launched by this EC2NodeClass using a generated launch template.\n\nRefer 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.\n\nIf metadataOptions are omitted from this EC2NodeClass, the following default settings are applied:\n\n```yaml\nspec:\n  metadataOptions:\n    httpEndpoint: enabled\n    httpProtocolIPv6: disabled\n    httpPutResponseHopLimit: 1\n    httpTokens: required\n```\n\n## spec.blockDeviceMappings\n\nThe `blockDeviceMappings` field in an `EC2NodeClass` can be used to control the [Elastic Block Storage (EBS) volumes](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/block-device-mapping-concepts.html#instance-block-device-mapping) that Karpenter attaches to provisioned nodes. Karpenter uses default block device mappings for the AMIFamily 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.\n\n```yaml\nspec:\n  blockDeviceMappings:\n    - deviceName: /dev/xvda\n      ebs:\n        volumeSize: 100Gi\n        volumeType: gp3\n        iops: 10000\n        encrypted: true\n        kmsKeyID: \"1234abcd-12ab-34cd-56ef-1234567890ab\"\n        deleteOnTermination: true\n        throughput: 125\n        snapshotID: snap-0123456789\n        volumeInitializationRate: 100\n```\n\nThe following blockDeviceMapping defaults are used for each `AMIFamily` if no `blockDeviceMapping` overrides are specified in the `EC2NodeClass`\n\n### AL2\n```yaml\nspec:\n  blockDeviceMappings:\n    - deviceName: /dev/xvda\n      ebs:\n        volumeSize: 20Gi\n        volumeType: gp3\n        encrypted: true\n```\n\n### AL2023\n```yaml\nspec:\n  blockDeviceMappings:\n    - deviceName: /dev/xvda\n      ebs:\n        volumeSize: 20Gi\n        volumeType: gp3\n        encrypted: true\n```\n\n### Bottlerocket\n```yaml\nspec:\n  blockDeviceMappings:\n    # Root device\n    - deviceName: /dev/xvda\n      ebs:\n        volumeSize: 4Gi\n        volumeType: gp3\n        encrypted: true\n    # Data device: Container resources such as images and logs\n    - deviceName: /dev/xvdb\n      ebs:\n        volumeSize: 20Gi\n        volumeType: gp3\n        encrypted: true\n```\n\n### Windows2019/Windows2022\n```yaml\nspec:\n  blockDeviceMappings:\n    - deviceName: /dev/sda1\n      ebs:\n        volumeSize: 50Gi\n        volumeType: gp3\n        encrypted: true\n```\n\n### Custom\n\nThe `Custom` AMIFamily ships without any default `blockDeviceMappings`.\n\n## spec.instanceStorePolicy\n\nThe `instanceStorePolicy` field controls how [instance-store](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/InstanceStorage.html) volumes are handled. By default, Karpenter and Kubernetes will simply ignore them.\n\n### RAID0\n\nIf you intend to use these volumes for faster node ephemeral-storage, set `instanceStorePolicy` to `RAID0`:\n\n```yaml\nspec:\n  instanceStorePolicy: RAID0\n```\n\nThis will set the allocatable ephemeral-storage of each node to the total size of the instance-store volume(s). This configuration is likely to be useful for workloads that leverage dense storage instance types or require the low latency from instance-stores that are nvme ssd based.\n\nThe disks must be formatted & mounted in a RAID0 and be the underlying filesystem for the Kubelet & Containerd. Even if you already configure your volumes with RAID0, Karpenter won't recognize this by default unless you set the `instanceStorePolicy` to `RAID0`. Without this, scheduling workloads that depend on ephemeral-storage from the instance-stores may result in a deadlock due to insufficient storage.\n\nInstructions for each AMI family are listed below:\n\n#### AL2\n\nOn AL2, Karpenter automatically configures the disks through an additional boostrap argument (`--local-disks raid0`). The device name is `/dev/md/0` and its mount point is `/mnt/k8s-disks/0`. You should ensure any additional disk setup does not interfere with these.\n\n#### AL2023\n\nOn AL2023, Karpenter automatically configures the disks via the generated `NodeConfig` object. Like AL2, the device name is `/dev/md/0` and its mount point is `/mnt/k8s-disks/0`. You should ensure any additional disk setup does not interfere with these.\n\n#### Bottlerocket\n\nOn Bottlerocket, Karpenter automatically configures the disks by adding the required bootstrap commands to the settings. The ephemeral storage configuration is handled automatically, so you should not manually configure ephemeral storage settings in your userData.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nThis automatic disk configuration is only available on Bottlerocket v1.22.0 and later.\n{{% /alert %}}\n\n#### Others\n\nFor all other AMI families, you must configure the disks yourself. Check out the [`setup-local-disks`](https://github.com/awslabs/amazon-eks-ami/blob/main/templates/shared/runtime/bin/setup-local-disks) script in [amazon-eks-ami](https://github.com/awslabs/amazon-eks-ami) to see how this is done for AL2.\n\n{{% alert title=\"Tip\" color=\"secondary\" %}}\nSince the Kubelet & Containerd will be using the instance-store filesystem, you may consider using a more minimal root volume size.\n{{% /alert %}}\n\n## spec.userData\n\nYou can control the UserData that is applied to your worker nodes via this field. This allows you to run custom scripts or pass-through custom configuration to Karpenter instances on start-up.\n\n```yaml\napiVersion: karpenter.k8s.aws/v1\nkind: EC2NodeClass\nmetadata:\n  name: bottlerocket-example\nspec:\n  ...\n  amiFamily: Bottlerocket\n  userData:  |\n    [settings.kubernetes]\n    \"kube-api-qps\" = 30\n    \"shutdown-grace-period\" = \"30s\"\n    \"shutdown-grace-period-for-critical-pods\" = \"30s\"\n    [settings.kubernetes.eviction-hard]\n    \"memory.available\" = \"20%\"\n```\n\nThis example adds SSH keys to allow remote login to the node (replace *my-authorized_keys* with your public key file):\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nInstead 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.\nSee [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.\n\nAlso, **my-authorized_key** key is the public key. See [Retrieve the public key material](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/describe-keys.html#retrieving-the-public-key).\n{{% /alert %}}\n\n```yaml\napiVersion: karpenter.k8s.aws/v1\nkind: EC2NodeClass\nmetadata:\n  name: al2-example\nspec:\n  ...\n  amiFamily: AL2\n  userData: |\n    #!/bin/bash\n    mkdir -p ~ec2-user/.ssh/\n    touch ~ec2-user/.ssh/authorized_keys\n    cat >> ~ec2-user/.ssh/authorized_keys <<EOF\n    {{ insertFile \"../my-authorized_keys\" | indent 4  }}\n    EOF\n    chmod -R go-w ~ec2-user/.ssh/authorized_keys\n    chown -R ec2-user ~ec2-user/.ssh\n```\n\nAlternatively, you can save the [key in your SSM Parameter Store](https://docs.aws.amazon.com/systems-manager/latest/userguide/parameter-create-console.html) and use the get-parameter command mentioned below to retrieve the key for authorized_keys.\n\n```\naws ssm get-parameter --name \"<parameter-name>\" --region <region> --with-decryption --query \"Parameter.Value\" --output text > /home/ec2-user/.ssh/authorized_keys\n```\n\nFor more examples on configuring fields for different AMI families, see the [examples here](https://github.com/aws/karpenter/blob/main/examples/v1).\n\nKarpenter will merge the userData you specify with the default userData for that AMIFamily. See the [AMIFamily]({{< ref \"#specamifamily\" >}}) section for more details on these defaults. View the sections below to understand the different merge strategies for each AMIFamily.\n\n### AL2\n\n* Your UserData can be in the [MIME multi part archive](https://cloudinit.readthedocs.io/en/latest/topics/format.html#mime-multi-part-archive) format.\n* Karpenter will transform your custom user-data as a MIME part, if necessary, and then merge a final MIME part to the end of your UserData parts which will bootstrap the worker node. Karpenter will have full control over all the parameters being passed to the bootstrap script.\n  * Karpenter will continue to set MaxPods, ClusterDNS and all other parameters defined in `spec.kubeletConfiguration` as before.\n\nConsider the following example to understand how your custom UserData will be merged -\n\n#### Passed-in UserData (bash)\n\n```bash\n#!/bin/bash\necho \"Running custom user data script (bash)\"\n```\n\n#### Merged UserData (bash)\n\n```bash\nMIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"//\"\n\n--//\nContent-Type: text/x-shellscript; charset=\"us-ascii\"\n\n#!/bin/bash\necho \"Running custom user data script (bash)\"\n\n--//\nContent-Type: text/x-shellscript; charset=\"us-ascii\"\n\n#!/bin/bash -xe\nexec > >(tee /var/log/user-data.log|logger -t user-data -s 2>/dev/console) 2>&1\n/etc/eks/bootstrap.sh 'test-cluster' --apiserver-endpoint 'https://test-cluster' --b64-cluster-ca 'ca-bundle' \\\n--use-max-pods false \\\n--kubelet-extra-args '--node-labels=karpenter.sh/capacity-type=on-demand,karpenter.sh/nodepool=test  --max-pods=110'\n--//--\n```\n\n#### Passed-in UserData (MIME)\n\n```bash\nMIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"BOUNDARY\"\n\n--BOUNDARY\nContent-Type: text/x-shellscript; charset=\"us-ascii\"\n\n#!/bin/bash\necho \"Running custom user data script (mime)\"\n\n--BOUNDARY--\n```\n\n#### Merged UserData (MIME)\n\n```bash\nMIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"//\"\n\n--//\nContent-Type: text/x-shellscript; charset=\"us-ascii\"\n\n#!/bin/bash\necho \"Running custom user data script (mime)\"\n\n--//\nContent-Type: text/x-shellscript; charset=\"us-ascii\"\n\n#!/bin/bash -xe\nexec > >(tee /var/log/user-data.log|logger -t user-data -s 2>/dev/console) 2>&1\n/etc/eks/bootstrap.sh 'test-cluster' --apiserver-endpoint 'https://test-cluster' --b64-cluster-ca 'ca-bundle' \\\n--use-max-pods false \\\n--kubelet-extra-args '--node-labels=karpenter.sh/capacity-type=on-demand,karpenter.sh/nodepool=test  --max-pods=110'\n--//--\n```\n\n{{% alert title=\"Tip\" color=\"secondary\" %}}\nYou can set additional kubelet configuration properties, unavailable through `spec.kubelet`, by updating the `kubelet-config.json` file:\n\n```yaml\napiVersion: karpenter.k8s.aws/v1\nkind: EC2NodeClass\nmetadata:\n  name: kubelet-config-example\nspec:\n  amiFamily: AL2\n  userData: |\n    #!/bin/bash\n    echo \"$(jq '.kubeAPIQPS=50' /etc/kubernetes/kubelet/kubelet-config.json)\" > /etc/kubernetes/kubelet/kubelet-config.json\n```\n{{% /alert %}}\n\n### AL2023\n\n* Your UserData may be in one of three formats: a [MIME multi part archive](https://cloudinit.readthedocs.io/en/latest/topics/format.html#mime-multi-part-archive), a NodeConfig YAML / JSON string, or a shell script.\n* Karpenter will transform your custom UserData into a MIME part, if necessary, and then create a MIME multi-part archive. This archive will consist of a generated NodeConfig, containing Karpenter's default values, followed by the transformed custom UserData. For more information on the NodeConfig spec, refer to the [AL2023 EKS Optimized AMI docs](https://awslabs.github.io/amazon-eks-ami/nodeadm/doc/examples/).\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nAny values configured by the Karpenter generated NodeConfig object will take precedent over values specifed in `spec.userData`.\nThis includes cluster name, cluster CIDR, cluster endpoint, certificate authority, taints, labels, and any value in [spec.kubelet]({{< ref \"#speckubelet\" >}}).\nThese fields must be configured natively through Karpenter rather than through UserData.\n{{% /alert %}}\n\n#### Passed-in UserData (NodeConfig)\n\n```yaml\napiVersion: node.eks.aws/v1alpha1\nkind: NodeConfig\nspec:\n  kubelet:\n    config:\n      maxPods: 42\n```\n\n#### Merged UserData (NodeConfig)\n\n```text\nMIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"//\"\n\n--//\nContent-Type: application/node.eks.aws\n\napiVersion: node.eks.aws/v1alpha1\nkind: NodeConfig\nspec:\n  kubelet:\n    config:\n      maxPods: 42\n\n--//\nContent-Type: application/node.eks.aws\n\n# Karpenter Generated NodeConfig\napiVersion: node.eks.aws/v1alpha1\nkind: NodeConfig\nspec:\n  cluster:\n    apiServerEndpoint: https://test-cluster\n    certificateAuthority: cluster-ca\n    cidr: 10.100.0.0/16\n    name: test-cluster\n  kubelet:\n    config:\n      clusterDNS:\n      - 10.100.0.10\n      maxPods: 118\n    flags:\n    - --node-labels=\"karpenter.sh/capacity-type=on-demand,karpenter.sh/nodepool=default\"\n\n--//--\n```\n\n#### Passed-in UserData (bash)\n\n```shell\n#!/bin/bash\necho \"Hello, AL2023!\"\n```\n\n#### Merged UserData (bash)\n\n```text\nMIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"//\"\n\n--//\nContent-Type: text/x-shellscript; charset=\"us-ascii\"\n\n#!/bin/bash\necho \"Hello, AL2023!\"\n\n--//\nContent-Type: application/node.eks.aws\n\n# Karpenter Generated NodeConfig\napiVersion: node.eks.aws/v1alpha1\nkind: NodeConfig\nspec:\n  cluster:\n    apiServerEndpoint: https://test-cluster\n    certificateAuthority: cluster-ca\n    cidr: 10.100.0.0/16\n    name: test-cluster\n  kubelet:\n    config:\n      clusterDNS:\n      - 10.100.0.10\n      maxPods: 118\n    flags:\n    - --node-labels=\"karpenter.sh/capacity-type=on-demand,karpenter.sh/nodepool=default\"\n\n--//--\n```\n\n#### Passed-in UserData (MIME)\n\n```text\nMIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"//\"\n\n--//\nContent-Type: text/x-shellscript; charset=\"us-ascii\"\n\n#!/bin/bash\necho \"Hello, AL2023!\"\n\n--//\nContent-Type: application/node.eks.aws\n\napiVersion: node.eks.aws/v1alpha1\nkind: NodeConfig\nspec:\n  kubelet:\n    config:\n      maxPods: 42\n--//\n```\n\n#### Merged UserData (MIME)\n\n```text\nMIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"//\"\n\n--//\nContent-Type: application/node.eks.aws\n\napiVersion: node.eks.aws/v1alpha1\nkind: NodeConfig\nspec:\n  kubelet:\n    config:\n      maxPods: 42\n--//\nContent-Type: text/x-shellscript; charset=\"us-ascii\"\n\n#!/bin/bash\necho \"Hello, AL2023!\"\n\n--//\nContent-Type: application/node.eks.aws\n\n# Karpenter Generated NodeConfig\napiVersion: node.eks.aws/v1alpha1\nkind: NodeConfig\nspec:\n  cluster:\n    apiServerEndpoint: https://test-cluster\n    certificateAuthority: cluster-ca\n    cidr: 10.100.0.0/16\n    name: test-cluster\n  kubelet:\n    config:\n      clusterDNS:\n      - 10.100.0.10\n      maxPods: 118\n    flags:\n    - --node-labels=\"karpenter.sh/capacity-type=on-demand,karpenter.sh/nodepool=default\"\n\n--//--\n```\n\n### Bottlerocket\n\n* Your UserData must be valid TOML.\n* Unknown TOML fields will be ignored when the final merged UserData is generated by Karpenter.\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nAny values configured by Karpenter will take precedent over values specifed in `spec.userData`.\nThis includes cluster name, cluster endpoint, cluster certificate, taints, labels, and any value in [spec.kubelet]({{< ref \"#speckubelet\" >}}).\nThese fields must be configured natively through Karpenter rather than through UserData.\n{{% /alert %}}\n\nConsider the following example to understand how your custom UserData settings will be merged in.\n\n#### Passed-in UserData\n\n```toml\n[settings.kubernetes.eviction-hard]\n\"memory.available\" = \"12%\"\n[settings.kubernetes]\n\"unknown-setting\" = \"unknown\"\n[settings.kubernetes.node-labels]\n'field.controlled.by/karpenter' = 'will-be-overridden'\n```\n\n#### Merged UserData\n\n```toml\n[settings]\n[settings.kubernetes]\napi-server = 'https://cluster'\ncluster-certificate = 'ca-bundle'\ncluster-name = 'cluster'\n\n[settings.kubernetes.node-labels]\n'karpenter.sh/capacity-type' = 'on-demand'\n'karpenter.sh/nodepool' = 'default'\n\n[settings.kubernetes.node-taints]\n\n[settings.kubernetes.eviction-hard]\n'memory.available' = '12%%'\n```\n\n#### Device ownership in Bottlerocket\n\nBottlerocket `v1.30.0+` supports device ownership using the [security context](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/) provided in the Kubernetes specfile. To enable this, you will need the following user-data configurations:\n\n```toml\n[settings]\n[settings.kubernetes]\ndevice-ownership-from-security-context = true\n```\n\nThis allows the container to take ownership of devices allocated to the pod via device-plugins based on the `runAsUser` and `runAsGroup` values provided in the spec. For more details on this, see the [Kubernetes documentation](https://kubernetes.io/blog/2021/11/09/non-root-containers-and-devices/)\n\nThis setting helps you enable Neuron workloads on Bottlerocket instances. See [Accelerators/GPU Resources]({{< ref \"./scheduling#acceleratorsgpu-resources\" >}}) for more details.\n\n### Windows2019/Windows2022\n\n* Your UserData must be specified as PowerShell commands.\n* The UserData specified will be prepended to a Karpenter managed section that will bootstrap the kubelet.\n* Karpenter will continue to set ClusterDNS and all other parameters defined in spec.kubeletConfiguration as before.\n\nConsider the following example to understand how your custom UserData settings will be merged in.\n\n#### Passed-in UserData\n\n```powershell\nWrite-Host \"Running custom user data script\"\n```\n\n#### Merged UserData\n\n```powershell\n<powershell>\nWrite-Host \"Running custom user data script\"\n[string]$EKSBootstrapScriptFile = \"$env:ProgramFiles\\Amazon\\EKS\\Start-EKSBootstrap.ps1\"\n& $EKSBootstrapScriptFile -EKSClusterName 'test-cluster' -APIServerEndpoint 'https://test-cluster' -Base64ClusterCA 'ca-bundle' -KubeletExtraArgs '--node-labels=\"karpenter.sh/capacity-type=spot,karpenter.sh/nodepool=windows2022\" --max-pods=110' -DNSClusterIP '10.0.100.10'\n</powershell>\n```\n\n{{% alert title=\"Windows Support Notice\" color=\"warning\" %}}\nCurrently, Karpenter does not specify `-ServiceCIDR` to [EKS Windows AMI Bootstrap script](https://docs.aws.amazon.com/eks/latest/userguide/eks-optimized-windows-ami.html#bootstrap-script-configuration-parameters).\nWindows worker nodes will use `172.20.0.0/16` or `10.100.0.0/16` for Kubernetes service IP address ranges based on the IP address of the primary interface.\nThe effective ServiceCIDR can be verified at `$env:ProgramData\\Amazon\\EKS\\cni\\config\\vpc-bridge.conf` on the worker node.\n\nSupport for the Windows ServiceCIDR argument can be tracked in a [Karpenter Github Issue](https://github.com/aws/karpenter/issues/4088). Currently, if the effective ServiceCIDR is incorrect for your windows worker nodes, you can add the following userData as a workaround.\n\n```yaml\nspec:\n  userData: |\n    $global:EKSCluster = Get-EKSCluster -Name my-cluster\n```\n{{% /alert %}}\n\n### Custom\n\n* No merging is performed, your UserData must perform all setup required of the node to allow it to join the cluster.\n* Custom UserData must meet the following requirements to work correctly with Karpenter:\n  * It must ensure the node is registered with the `karpenter.sh/unregistered:NoExecute` taint (via kubelet configuration field `registerWithTaints`)\n  * It must set kubelet config options to match those configured in `spec.kubelet`\n\n## spec.detailedMonitoring\n\nEnabling detailed monitoring controls the [EC2 detailed monitoring](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-cloudwatch-new.html) feature. If you enable this option, the Amazon EC2 console displays monitoring graphs with a 1-minute period for the instances that Karpenter launches.\n\n```yaml\nspec:\n  detailedMonitoring: true\n```\n\n## spec.associatePublicIPAddress\n\nYou can explicitly set `AssociatePublicIPAddress: false` when you are only launching into private subnets.\nPreviously, Karpenter auto-set `associatePublicIPAddress` on the primary ENI to false if a user’s subnet options were all private subnets.\nThis value is a boolean field that controls whether instances created by Karpenter for this EC2NodeClass will have an associated public IP address. This overrides the `MapPublicIpOnLaunch` setting applied to the subnet the node is launched in. If this field is not set, the `MapPublicIpOnLaunch` field will be respected.\n\n\n{{% alert title=\"Note\" color=\"warning\" %}}\nIf a `NodeClaim` requests `vpc.amazonaws.com/efa` resources, `spec.associatePublicIPAddress` is respected. However, if this `NodeClaim` requests **multiple** EFA resources and the value for `spec.associatePublicIPAddress` is true, the instance will fail to launch. This is due to an EC2 restriction which\nrequires that the field is only set to true when configuring an instance with a single ENI at launch. When using this field, it is advised that users segregate their EFA workload to use a separate `NodePool` / `EC2NodeClass` pair.\n{{% /alert %}}\n\n## status.subnets\n[`status.subnets`]({{< ref \"#statussubnets\" >}}) contains the resolved `id` and `zone` of the subnets that were selected by the [`spec.subnetSelectorTerms`]({{< ref \"#specsubnetselectorterms\" >}}) for the node class. The subnets will be sorted by the available IP address count in decreasing order.\n\n#### Examples\n\n```yaml\nspec:\n  subnetSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\"\nstatus:\n  subnets:\n  - id: subnet-0a462d98193ff9fac\n    zone: us-east-2b\n  - id: subnet-0322dfafd76a609b6\n    zone: us-east-2c\n  - id: subnet-0727ef01daf4ac9fe\n    zone: us-east-2b\n  - id: subnet-00c99aeafe2a70304\n    zone: us-east-2a\n  - id: subnet-023b232fd5eb0028e\n    zone: us-east-2c\n  - id: subnet-03941e7ad6afeaa72\n    zone: us-east-2a\n```\n\n## status.securityGroups\n\n[`status.securityGroups`]({{< ref \"#statussecuritygroups\" >}}) contains the resolved `id` and `name` of the security groups that were selected by the [`spec.securityGroupSelectorTerms`]({{< ref \"#specsecuritygroupselectorterms\" >}}) for the node class. The subnets will be sorted by the available IP address count in decreasing order.\n\n#### Examples\n\n```yaml\nspec:\n  securityGroupSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\"\nstatus:\n  securityGroups:\n  - id: sg-041513b454818610b\n    name: ClusterSharedNodeSecurityGroup\n  - id: sg-0286715698b894bca\n    name: ControlPlaneSecurityGroup-1AQ073TSAAPW\n```\n\n## status.amis\n\n[`status.amis`]({{< ref \"#statusamis\" >}}) contains the resolved `id`, `name`, `requirements`, and the `deprecated` status of either the default AMIs for the [`spec.amiFamily`]({{< ref \"#specamifamily\" >}}) or the AMIs selected by the [`spec.amiSelectorTerms`]({{< ref \"#specamiselectorterms\" >}}) if this field is specified. The `deprecated` status will be shown for resolved AMIs that are deprecated.\n\n#### Examples\n\nAMIs resolved with an AL2 alias:\n\n```yaml\nspec:\n  amiSelectorTerms:\n    - alias: al2@v20240807\nstatus:\n  amis:\n  - id: ami-03c3a3dcda64f5b75\n    name: amazon-linux-2-gpu\n    requirements:\n    - key: kubernetes.io/arch\n      operator: In\n      values:\n      - amd64\n    - key: karpenter.k8s.aws/instance-gpu-count\n      operator: Exists\n  - id: ami-03c3a3dcda64f5b75\n    name: amazon-linux-2-gpu\n    requirements:\n    - key: kubernetes.io/arch\n      operator: In\n      values:\n      - amd64\n    - key: karpenter.k8s.aws/instance-accelerator-count\n      operator: Exists\n  - id: ami-06afb2d101cc4b8bd\n    name: amazon-linux-2-arm64\n    requirements:\n    - key: kubernetes.io/arch\n      operator: In\n      values:\n      - arm64\n    - key: karpenter.k8s.aws/instance-gpu-count\n      operator: DoesNotExist\n    - key: karpenter.k8s.aws/instance-accelerator-count\n      operator: DoesNotExist\n  - id: ami-0e28b76d768af234e\n    name: amazon-linux-2\n    requirements:\n    - key: kubernetes.io/arch\n      operator: In\n      values:\n      - amd64\n    - key: karpenter.k8s.aws/instance-gpu-count\n      operator: DoesNotExist\n    - key: karpenter.k8s.aws/instance-accelerator-count\n      operator: DoesNotExist\n```\n\nAMIs resolved from tags:\n\n```yaml\nspec:\n  amiSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\"\nstatus:\n  amis:\n  - id: ami-01234567890123456\n    name: custom-ami-amd64\n    deprecated: true\n    requirements:\n    - key: kubernetes.io/arch\n      operator: In\n      values:\n      - amd64\n  - id: ami-01234567890123456\n    name: custom-ami-arm64\n    requirements:\n    - key: kubernetes.io/arch\n      operator: In\n      values:\n      - arm64\n```\n\n## status.capacityReservations\n\n[`status.capacityReservations`]({{< ref \"#statuscapacityreservations\" >}}) contains the following information for each resolved capacity reservation:\n\n| Field                   | Example                | Description                                                                          |\n| ----------------------- | ---------------------- | ------------------------------------------------------------------------------------ |\n| `availabilityZone`      | `us-east-1a`           | The availability zone the capacity reservation is available in                       |\n| `id`                    | `cr-56fac701cc1951b03` | The ID of the capacity reservation                                                   |\n| `instanceMatchCriteria` | `open`                 | The instanceMatchCriteria for the capacity reservation. Can be `open` or `targeted`. |\n| `instanceType`          | `m5.large`             | The EC2 instance type of the capacity reservation                                    |\n| `ownerID`               | `459763720645`         | The account ID that owns the capacity reservation                                    |\n| `reservationType`       | `default`              | The type of the capacity reservation. Can be `default` or `capacity-block`.          |\n| `state`                 | `active`               | The state of the capacity reservation. Can be `active` or `expiring`.                |\n\n#### Examples\n\n```yaml\nstatus:\n  capacityReservations:\n  - availabilityZone: us-west-2a\n    id: cr-01234567890123456\n    instanceMatchCriteria: targeted\n    instanceType: g6.48xlarge\n    ownerID: \"012345678901\"\n    reservationType: capacity-block\n    state: expiring\n  - availabilityZone: us-west-2c\n    id: cr-12345678901234567\n    instanceMatchCriteria: open\n    instanceType: g6.48xlarge\n    ownerID: \"98765432109\"\n    reservationType: default\n    state: active\n```\n\n## status.instanceProfile\n\n[`status.instanceProfile`]({{< ref \"#statusinstanceprofile\" >}}) contains the resolved instance profile generated by Karpenter from the [`spec.role`]({{< ref \"#specrole\" >}})\n\n```yaml\nspec:\n  role: \"KarpenterNodeRole-${CLUSTER_NAME}\"\nstatus:\n  instanceProfile: \"${CLUSTER_NAME}-0123456778901234567789\"\n```\n\n## status.conditions\n\n[`status.conditions`]({{< ref \"#statusconditions\" >}}) indicates EC2NodeClass readiness. This will be `Ready` when Karpenter successfully discovers AMIs, Instance Profile, Subnets, Cluster CIDR (AL2023 only) and SecurityGroups for the EC2NodeClass.\n\nNodeClasses have the following status conditions:\n\n| Condition Type       | Description                                                                                                                                                                                                                       |\n|----------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| SubnetsReady         | Subnets are discovered.                                                                                                                                                                                                           |\n| SecurityGroupsReady  | Security Groups are discovered.                                                                                                                                                                                                   |\n| InstanceProfileReady | Instance Profile is discovered.                                                                                                                                                                                                   |\n| AMIsReady            | AMIs are discovered.                                                |\n| Ready                | Top level condition that indicates if the nodeClass is ready. If any of the underlying conditions is `False` then this condition is set to `False` and `Message` on the condition indicates the dependency that was not resolved. |\n\nIf a NodeClass is not ready, NodePools that reference it through their `nodeClassRef` will not be considered for scheduling.\n"
  },
  {
    "path": "website/content/en/v1.7/concepts/nodeoverlays.md",
    "content": "---\ntitle: \"NodeOverlays\"\nlinkTitle: \"NodeOverlays\"\nweight: 40\ndescription: >\n  Understand NodeOverlays and how they enable fine-tuning of Karpenter's scheduling simulation for advanced use cases.\n---\n\n<i class=\"fa-solid fa-circle-info\"></i> <b>Feature State: </b> [Alpha]({{<ref \"../reference/settings#feature-gates\" >}})\n\n\nKarpenter uses NodeOverlays to inject alternative instance type information into the scheduling simulation for more accurate scheduling decisions.\nNodeOverlays enable users to fine-tune instance pricing and add extended resources to instance types that should be considered during Karpenter's decision-making process.\nThey provide a flexible way to account for real-world factors like savings plans, licensing costs, and custom hardware resources that aren't captured in the base instance data from cloud providers.\n\nNodeOverlays work by modifying the instance type information that Karpenter uses during its scheduling simulation.\nWhen Karpenter evaluates which instance types can satisfy pending pod requirements, it applies any matching NodeOverlays to adjust pricing information or add extended resources before making provisioning decisions.\n\n## NodeOverlay Configuration\n\n```yaml\napiVersion: karpenter.sh/v1alpha1\nkind: NodeOverlay\nmetadata:\n  name: example-overlay\nspec:\n  # Optional weight for conflict resolution (higher weight wins)\n  weight: 10\n  \n  # Requirements determine which instance types this overlay applies to\n  requirements:\n    - key: node.kubernetes.io/instance-type\n      operator: In\n      values: [\"m5.large\", \"m5.xlarge\"]\n    - key: karpenter.sh/capacity-type  \n      operator: In\n      values: [\"spot\"]\n    - key: karpenter.k8s.aws/instance-cpu \n      operator: Gt\n      values: [\"32\"]\n  \n  # Price and priceAdjustment are mutually exclusive\n  # Price override (sets absolute price)\n  price: \"5.00\"\n  \n  # Price adjustment (modifies existing price)\n  priceAdjustment: \"+10%\"  # or \"-0.50\" for absolute adjustment\n  \n  # Extended resources to add to matching instance types\n  capacity:\n    hugepages-2Mi: 100Mi\n    hugepages-1Gi: 2Gi\n    custom-device/gpu-slice: 4\n```\n\n## spec.weight\nOptional integer that determines precedence when multiple NodeOverlays match the same instance type. Higher weights take precedence over lower weights. When weights are equal, alphabetical ordering by name is used for conflict resolution. If not specified, the default weight is 0. If there is a conflict between NodeOverlays with the same weight, it will be indicated in the status and the NodeOverlay will not be applied.\n\n## spec.requirements\nArray of requirements that determine which instance types this overlay applies to. Uses the same format as NodePool requirements and supports all standard Kubernetes label selectors. An empty requirements array applies the overlay to all instance types. Kubernetes defines the following [Well-Known Labels](https://kubernetes.io/docs/reference/labels-annotations-taints/), and cloud providers (e.g., AWS) implement them.\n\nCurrently, requirements sets are defined based on the well-known labels that are discovered for instance types. 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).\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nThere is currently a limit of 100 on the total number of requirements on both the NodeOverlay.\n{{% /alert %}}\n\n## spec.price\nAbsolute price override as a string representing the price in your currency. This completely replaces the original instance price reported by the cloud provider. Karpenter is currency-agnostic, so this works with any currency unit.\n\n## spec.priceAdjustment\nPrice modification that can be specified as:\n- **Absolute adjustment**: `\"+5.00\"` (increase by 5.00) or `\"-2.50\"` (decrease by 2.50)\n- **Percentage adjustment**: `\"+15%\"` (increase by 15%) or `\"-10%\"` (decrease by 10%)\n\n## spec.capacity\nMap of extended resources to add to matching instance types. These resources are added to the existing standard capacity and do not replace or modify well-known resources. Only extended resources should be specified here.\n\n```yaml\napiVersion: karpenter.sh/v1alpha1\nkind: NodeOverlay\nmetadata:\n  name: custom-devices\nspec:\n  requirements:\n    - key: node.kubernetes.io/instance-type\n      operator: In\n      values: [\"m5.large\", \"m5.xlarge\", \"m5.2xlarge\"]\n  capacity:\n    smarter-devices/fuse: 1\n    custom-hardware/accelerator: 2\n```\n\n## Conflict Resolution\n\nWhen multiple NodeOverlays match the same instance type, conflicts are resolved using the following rules:\n\n1. **Weight-based precedence**: Higher weight values take precedence over lower weights\n2. **Alphabetical ordering**: When weights are equal, overlays are applied in alphabetical order by name\n3. **Field-level merging**: Higher-weight overlays override specific fields from lower-weight overlays, but capacity fields from different overlays are merged together\n\n### Example Conflict Resolution\n\n```yaml\napiVersion: karpenter.sh/v1alpha1\nkind: NodeOverlay\nmetadata:\n  name: overlay-a\nspec:\n  weight: 5\n  requirements:\n    - key: node.kubernetes.io/instance-type\n      operator: In\n      values: [\"m5.large\"]\n  priceAdjustment: \"-10%\"\n  capacity:\n    hugepages-2Mi: 50Mi\n---\napiVersion: karpenter.sh/v1alpha1\nkind: NodeOverlay\nmetadata:\n  name: overlay-b\nspec:\n  weight: 10  # Higher weight\n  requirements:\n    - key: node.kubernetes.io/instance-type\n      operator: In\n      values: [\"m5.large\"]\n  priceAdjustment: \"-20%\"  # This overrides overlay-a's adjustment\n  capacity:\n    custom-device/gpu: 1   # This is merged with hugepages-2Mi from overlay-a\n```\n\n**Result for m5.large instances:**\n- Price adjustment: `-20%` (from overlay-b, overrides overlay-a)\n- Capacity: `hugepages-2Mi: 50Mi` (from overlay-a) + `custom-device/gpu: 1` (from overlay-b)\n\n## Integration with Consolidation\n\nNodeOverlay modifications are automatically integrated into Karpenter's consolidation process:\n\n* **Price adjustments** affect consolidation decisions by changing the cost calculations used to determine optimal instance selections during replacement operations\n* **Capacity additions** are considered during consolidation when evaluating whether workloads can be moved between nodes\n* Changes take effect through normal consolidation cycles without requiring additional drift detection or forced node replacement\n\nWhen NodeOverlay configurations change, Karpenter incorporates these changes into its next consolidation evaluation, potentially triggering node replacements if the new configurations significantly change the optimal instance selection for existing workloads.\n\n## Status and Observability\n\nNodeOverlays include status conditions to help you understand their current state and troubleshoot configuration issues.\n\n### Common Status Conditions\n\n* **Ready=True**: The overlay is successfully applied to matching instance types\n* **Ready=False**: Configuration conflicts, requirement mismatches, or other errors prevent the overlay from being applied\n\n### Status Messages\n\nWhen `Ready=False`, the status message provides specific information about the issue:\n\n```yaml\nstatus:\n  conditions:\n  - type: ValidationSucceeded\n    status: \"False\"\n    lastTransitionTime: \"2024-07-24T18:30:00Z\"\n    reason: \"Conflict\"\n    message: \"conflict with another overlay\"\n```\n\n## Limitations and Considerations\n\n* **Resource Scope**: NodeOverlays can only add extended resources; they cannot modify or remove standard resources (CPU, memory, storage)\n* **Actual vs. Simulated**: Capacity modifications only affect Karpenter's scheduling simulation; actual node resources must be configured through other means\n* **Pricing vs. Billing**: Price adjustments influence Karpenter's scheduling decisions but don't affect actual cloud provider billing\n* **Alpha Status**: NodeOverlays are currently in alpha (v1alpha1) and the API may change in future versions"
  },
  {
    "path": "website/content/en/v1.7/concepts/nodepools.md",
    "content": "---\ntitle: \"NodePools\"\nlinkTitle: \"NodePools\"\nweight: 10\ndescription: >\n  Configure Karpenter with NodePools\n---\n\nWhen you first installed Karpenter, you set up a default NodePool. The NodePool sets constraints on the nodes that can be created by Karpenter and the pods that can run on those nodes. The NodePool can be set to do things like:\n\n* Define taints to limit the pods that can run on nodes Karpenter creates\n* Define any startup taints to inform Karpenter that it should taint the node initially, but that the taint is temporary.\n* Limit node creation to certain zones, instance types, and computer architectures\n* Set defaults for node expiration\n\nYou can change your NodePool or add other NodePools to Karpenter.\nHere are things you should know about NodePools:\n\n* Karpenter won't do anything if there is not at least one NodePool configured.\n* Each NodePool that is configured is looped through by Karpenter.\n* If Karpenter encounters a taint in the NodePool that is not tolerated by a Pod, Karpenter won't use that NodePool to provision the pod.\n* If Karpenter encounters a startup taint in the NodePool 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.\n* It is recommended to create NodePools that are mutually exclusive. So no Pod should match multiple NodePools. If multiple NodePools are matched, Karpenter will use the NodePool with the highest [weight](#specweight).\n\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nObjects for setting Kubelet features have been moved from the NodePool spec to the EC2NodeClasses spec, to not require other Karpenter providers to support those features.\n{{% /alert %}}\n\nFor some example `NodePool` configurations, see the [examples in the Karpenter GitHub repository](https://github.com/aws/karpenter/blob/main/examples/v1/).\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\nspec:\n  # Template section that describes how to template out NodeClaim resources that Karpenter will provision\n  # Karpenter will consider this template to be the minimum requirements needed to provision a Node using this NodePool\n  # It will overlay this NodePool with Pods that need to schedule to further constrain the NodeClaims\n  # Karpenter will provision to launch new Nodes for the cluster\n  template:\n    metadata:\n      # Labels are arbitrary key-values that are applied to all nodes\n      labels:\n        billing-team: my-team\n\n      # Annotations are arbitrary key-values that are applied to all nodes\n      annotations:\n        example.com/owner: \"my-team\"\n    spec:\n      # References the Cloud Provider's NodeClass resource, see your cloud provider specific documentation\n      nodeClassRef:\n        group: karpenter.k8s.aws  # Updated since only a single version will be served\n        kind: EC2NodeClass\n        name: default\n\n      # Provisioned nodes will have these taints\n      # Taints may prevent pods from scheduling if they are not tolerated by the pod.\n      taints:\n        - key: example.com/special-taint\n          effect: NoSchedule\n\n      # Provisioned nodes will have these taints, but pods do not need to tolerate these taints to be provisioned by this\n      # NodePool. These taints are expected to be temporary and some other entity (e.g. a DaemonSet) is responsible for\n      # removing the taint after it has finished initializing the node.\n      startupTaints:\n        - key: example.com/another-taint\n          effect: NoSchedule\n\n      # The amount of time a Node can live on the cluster before being removed\n      # Avoiding long-running Nodes helps to reduce security vulnerabilities as well as to reduce the chance of issues that can plague Nodes with long uptimes such as file fragmentation or memory leaks from system processes\n      # You can choose to disable expiration entirely by setting the string value 'Never' here\n\n      # Note: changing this value in the nodepool will drift the nodeclaims.\n      expireAfter: 720h | Never\n\n      # The amount of time that a node can be draining before it's forcibly deleted. A node begins draining when a delete call is made against it, starting\n      # its finalization flow. Pods with TerminationGracePeriodSeconds will be deleted preemptively before this terminationGracePeriod ends to give as much time to cleanup as possible.\n      # If your pod's terminationGracePeriodSeconds is larger than this terminationGracePeriod, Karpenter may forcibly delete the pod\n      # before it has its full terminationGracePeriod to cleanup.\n\n      # Note: changing this value in the nodepool will drift the nodeclaims.\n      terminationGracePeriod: 48h\n\n      # Requirements that constrain the parameters of provisioned nodes.\n      # These requirements are combined with pod.spec.topologySpreadConstraints, pod.spec.affinity.nodeAffinity, pod.spec.affinity.podAffinity, and pod.spec.nodeSelector rules.\n      # Operators { In, NotIn, Exists, DoesNotExist, Gt, and Lt } are supported.\n      # https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#operators\n      requirements:\n        - key: \"karpenter.k8s.aws/instance-category\"\n          operator: In\n          values: [\"c\", \"m\", \"r\"]\n          # minValues here enforces the scheduler to consider at least that number of unique instance-category to schedule the pods.\n          # This field is ALPHA and can be dropped or replaced at any time\n          minValues: 2\n        - key: \"karpenter.k8s.aws/instance-family\"\n          operator: In\n          values: [\"m5\",\"m5d\",\"c5\",\"c5d\",\"c4\",\"r4\"]\n          minValues: 5\n        - key: \"karpenter.k8s.aws/instance-cpu\"\n          operator: In\n          values: [\"4\", \"8\", \"16\", \"32\"]\n        - key: \"karpenter.k8s.aws/instance-hypervisor\"\n          operator: In\n          values: [\"nitro\"]\n        - key: \"karpenter.k8s.aws/instance-generation\"\n          operator: Gt\n          values: [\"2\"]\n        - key: \"topology.kubernetes.io/zone\"\n          operator: In\n          values: [\"us-west-2a\", \"us-west-2b\"]\n        - key: \"kubernetes.io/arch\"\n          operator: In\n          values: [\"arm64\", \"amd64\"]\n        - key: \"karpenter.sh/capacity-type\"\n          operator: In\n          values: [\"spot\", \"on-demand\", \"reserved\"]\n\n  # Disruption section which describes the ways in which Karpenter can disrupt and replace Nodes\n  # Configuration in this section constrains how aggressive Karpenter can be with performing operations\n  # like rolling Nodes due to them hitting their maximum lifetime (expiry) or scaling down nodes to reduce cluster cost\n  disruption:\n    # Describes which types of Nodes Karpenter should consider for consolidation\n    # If using 'WhenEmptyOrUnderutilized', Karpenter will consider all nodes for consolidation and attempt to remove or replace Nodes when it discovers that the Node is empty or underutilized and could be changed to reduce cost\n    # If using `WhenEmpty`, Karpenter will only consider nodes for consolidation that contain no workload pods\n    consolidationPolicy: WhenEmptyOrUnderutilized | WhenEmpty\n\n    # The amount of time Karpenter should wait to consolidate a node after a pod has been added or removed from the node.\n    # You can choose to disable consolidation entirely by setting the string value 'Never' here\n    consolidateAfter: 1m | Never # Added to allow additional control over consolidation aggressiveness\n\n    # Budgets control the speed Karpenter can scale down nodes.\n    # Karpenter will respect the minimum of the currently active budgets, and will round up\n    # when considering percentages. Duration and Schedule must be set together.\n    budgets:\n    - nodes: 10%\n    # On Weekdays during business hours, don't do any deprovisioning.\n    - schedule: \"0 9 * * mon-fri\"\n      duration: 8h\n      nodes: \"0\"\n\n  # Resource limits constrain the total size of the pool.\n  # Limits prevent Karpenter from creating new instances once the limit is exceeded.\n  limits:\n    cpu: \"1000\"\n    memory: 1000Gi\n\n  # Priority given to the NodePool when the scheduler considers which NodePool\n  # to select. Higher weights indicate higher priority when comparing NodePools.\n  # Specifying no weight is equivalent to specifying a weight of 0.\n  weight: 10\nstatus:\n  conditions:\n    - type: Initialized\n      status: \"False\"\n      observedGeneration: 1\n      lastTransitionTime: \"2024-02-02T19:54:34Z\"\n      reason: NodeClaimNotLaunched\n      message: \"NodeClaim hasn't succeeded launch\"\n  resources:\n    cpu: \"20\"\n    memory: \"8192Mi\"\n    ephemeral-storage: \"100Gi\"\n```\n## metadata.name\nThe name of the NodePool.\n\n## spec.template.metadata.labels\nArbitrary key/value pairs to apply to all nodes.\n\n## spec.template.metadata.annotations\nArbitrary key/value pairs to apply to all nodes.\n\n## spec.template.spec.nodeClassRef\n\nThis field points to the Cloud Provider NodeClass resource. See [EC2NodeClasses]({{<ref \"nodeclasses\" >}}) for details.\n\n## spec.template.spec.taints\n\nTaints to add to provisioned nodes. Pods that don't tolerate those taints could be prevented from scheduling.\nSee [Taints and Tolerations](https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/) for details.\n\n## spec.template.spec.startupTaints\n\nTaints that are added to nodes to indicate that a certain condition must be met, such as starting an agent or setting up networking, before the node is can be initialized.\nThese taints must be cleared before pods can be deployed to a node.\n\n## spec.template.spec.expireAfter\n\nThe amount of time a Node can live on the cluster before being deleted by Karpenter. Nodes will begin draining once it's expiration has been hit.\n\n## spec.template.spec.terminationGracePeriod\n\nThe amount of time a Node can be draining before Karpenter forcibly cleans up the node. Pods blocking eviction like PDBs and do-not-disrupt will be respected during draining until the `terminationGracePeriod` is reached, where those pods will be forcibly deleted.\n\n## spec.template.spec.requirements\n\nKubernetes 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 NodePool API.\n\nIn 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).\n\nThese well-known labels may be specified at the NodePool level, or in a workload definition (e.g., nodeSelector on a pod.spec). Nodes are chosen using both the NodePool'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 NodePool's requirements. If a requirement is not defined for a well known label, any value available to the cloud provider may be chosen.\n\nFor example, an instance type may be specified using a nodeSelector in a pod spec. If the instance type requested is not included in the NodePool list and the NodePool has instance type requirements, Karpenter will not create a node or schedule the pod.\n\n### Well-Known Labels\n\n#### Instance Types\n\n- key: `node.kubernetes.io/instance-type`\n- key: `karpenter.k8s.aws/instance-family`\n- key: `karpenter.k8s.aws/instance-category`\n- key: `karpenter.k8s.aws/instance-generation`\n- key: `karpenter.k8s.aws/instance-capability-flex`\n\nGenerally, 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.\n\nReview [AWS instance types](../../reference/instance-types). Most instance types are supported with the exclusion of [non-HVM](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/virtualization_types.html).\n\n#### Availability Zones\n\n- key: `topology.kubernetes.io/zone`\n- value example: `us-east-1c`\n- value list: `aws ec2 describe-availability-zones --region <region-name>`\n\nKarpenter 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.\n\n[Learn more about Availability Zone\nIDs.](https://docs.aws.amazon.com/ram/latest/userguide/working-with-az-ids.html)\n\n#### Architecture\n\n- key: `kubernetes.io/arch`\n- values\n  - `amd64`\n  - `arm64`\n\nKarpenter supports `amd64` nodes, and `arm64` nodes.\n\n#### Operating System\n - key: `kubernetes.io/os`\n - values\n   - `linux`\n   - `windows`\n\nKarpenter supports `linux` and `windows` operating systems.\n\n#### Capacity Type\n\n- key: `karpenter.sh/capacity-type`\n- values\n  - `spot`\n  - `on-demand`\n  - `reserved`\n\nKarpenter supports specifying capacity type, which is analogous to [EC2 purchase options](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-purchasing-options.html). Note that the `reserved` capacity type refers to [capacity reservations](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/capacity-reservation-overview.html) (on-demand capacity reservations and capacity blocks) not [reserved instances](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-reserved-instances.html) (RIs).\n\nIf a NodePool is compatible with multiple capacity types, Karpenter will prioritize `reserved` capacity, followed by `spot`, then finally `on-demand`.\nIf the provider API (e.g. EC2 Fleet's API) indicates capacity is unavailable, Karpenter caches that result across all attempts to provision EC2 capacity for that instance type and zone for the next 3 minutes.\nIf there are no other possible offerings available for a higher priority capacity type, Karpenter will attempt to fallback to a lower priority capacity type, generally within milliseconds.\n\nKarpenter also allows `karpenter.sh/capacity-type` to be used as a topology key for enforcing topology-spread.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nThere is currently a limit of 100 on the total number of requirements on both the NodePool and the NodeClaim. It's important to note that `spec.template.metadata.labels` are also propagated as requirements on the NodeClaim when it's created, meaning that you can't have more than 100 requirements and labels combined set on your NodePool.\n{{% /alert %}}\n\n### Min Values\n\nAlong with the combination of [key,operator,values] in the requirements, Karpenter also supports `minValues` in the NodePool requirements block, allowing the scheduler to be aware of user-specified flexibility minimums while scheduling pods to a cluster. Depending on the policy configured via the flag `--min-values-policy` or environment variable `MIN_VALUES_POLICY`, if Karpenter cannot meet this minimum flexibility for each key when scheduling a pod, it will either fail the scheduling loop for that NodePool, either falling back to another NodePool which meets the pod requirements or failing scheduling the pod altogether (when policy is set to `Strict`) or relax `minValues` until they can be met (when policy is set to `BestEffort`).\n\nFor example, the below spec will use spot instance type for all provisioned instances and enforces `minValues` to various keys where it is defined\ni.e at least 2 unique instance families from [c,m,r], 5 unique instance families [eg: \"m5\",\"m5d\",\"r4\",\"c5\",\"c5d\",\"c4\" etc], 10 unique instance types [eg: \"c5.2xlarge\",\"c4.xlarge\" etc] is required for scheduling the pods.\n\n```yaml\nspec:\n  template:\n    spec:\n      requirements:\n        - key: kubernetes.io/arch\n          operator: In\n          values: [\"amd64\"]\n        - key: kubernetes.io/os\n          operator: In\n          values: [\"linux\"]\n        - key: karpenter.k8s.aws/instance-category\n          operator: In\n          values: [\"c\", \"m\", \"r\"]\n          minValues: 2\n        - key: karpenter.k8s.aws/instance-family\n          operator: Exists\n          minValues: 5\n        - key: node.kubernetes.io/instance-type\n          operator: Exists\n          minValues: 10\n        - key: karpenter.k8s.aws/instance-generation\n          operator: Gt\n          values: [\"2\"]\n```\n\nNote that `minValues` can be used with multiple operators and multiple requirements. And if the `minValues` are defined with multiple operators for the same requirement key, scheduler considers the max of all the `minValues` for that requirement. For example, the below spec requires scheduler to consider at least 5 instance-family to schedule the pods.\n\n```yaml\nspec:\n  template:\n    spec:\n      requirements:\n        - key: kubernetes.io/arch\n          operator: In\n          values: [\"amd64\"]\n        - key: kubernetes.io/os\n          operator: In\n          values: [\"linux\"]\n        - key: karpenter.k8s.aws/instance-category\n          operator: In\n          values: [\"c\", \"m\", \"r\"]\n          minValues: 2\n        - key: karpenter.k8s.aws/instance-family\n          operator: Exists\n          minValues: 5\n        - key: karpenter.k8s.aws/instance-family\n          operator: In\n          values: [\"m5\",\"m5d\",\"c5\",\"c5d\",\"c4\",\"r4\"]\n          minValues: 3\n        - key: node.kubernetes.io/instance-type\n          operator: Exists\n          minValues: 10\n        - key: karpenter.k8s.aws/instance-generation\n          operator: Gt\n          values: [\"2\"]\n```\n\n{{% alert title=\"Recommended\" color=\"primary\" %}}\nKarpenter allows you to be extremely flexible with your NodePools by only constraining your instance types in ways that are absolutely necessary for your cluster. By default, Karpenter will enforce that you specify the `spec.template.spec.requirements` field, but will not enforce that you specify any requirements within the field. If you choose to specify `requirements: []`, this means that you will completely flexible to _all_ instance types that your cloud provider supports.\n\nThough Karpenter doesn't enforce these defaults, for most use-cases, we recommend that you specify _some_ requirements to avoid odd behavior or exotic instance types. Below, is a high-level recommendation for requirements that should fit the majority of use-cases for generic workloads\n\n```yaml\nspec:\n  template:\n    spec:\n      requirements:\n        - key: kubernetes.io/arch\n          operator: In\n          values: [\"amd64\"]\n        - key: kubernetes.io/os\n          operator: In\n          values: [\"linux\"]\n        - key: karpenter.sh/capacity-type\n          operator: In\n          values: [\"on-demand\"]\n        - key: karpenter.k8s.aws/instance-category\n          operator: In\n          values: [\"c\", \"m\", \"r\"]\n        - key: karpenter.k8s.aws/instance-generation\n          operator: Gt\n          values: [\"2\"]\n```\n\n{{% /alert %}}\n\n\n## spec.disruption\n\nYou can configure Karpenter to disrupt Nodes through your NodePool in multiple ways. You can use `spec.disruption.consolidationPolicy`, `spec.disruption.consolidateAfter`, or `spec.template.spec.expireAfter`.\nYou can also rate limit Karpenter's disruption through the NodePool's `spec.disruption.budgets`.\nRead [Disruption]({{<ref \"disruption\" >}}) for more.\n\n## spec.limits\n\nThe NodePool spec includes a limits section (`spec.limits`), which constrains the maximum amount of resources that the NodePool can consume.\n\nIf the `NodePool.spec.limits` section is unspecified, it means that there is no default limitation on resource allocation. In this case, the maximum resource consumption is governed by the quotas set by your cloud provider. If a limit has been exceeded, nodes provisioning is prevented until some nodes have been terminated.\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\nspec:\n  template:\n    spec:\n      requirements:\n        - key: karpenter.sh/capacity-type\n          operator: In\n          values: [\"spot\"]\n  limits:\n    cpu: 1000\n    memory: 1000Gi\n    nvidia.com/gpu: 2\n```\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nKarpenter provisioning is highly parallel. Because of this, limit checking is eventually consistent, which can result in overrun during rapid scale outs.\n{{% /alert %}}\n\nCPU 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.\n\nMemory limits are described with a [`BinarySI` value, such as 1000Gi.](https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/#meaning-of-memory)\n\nYou can view the current consumption of cpu and memory on your cluster by running:\n```\nkubectl get nodepool -o=jsonpath='{.items[0].status}'\n```\n\nReview 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`.\n\n## spec.weight\n\nKarpenter allows you to describe NodePool 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).\n\nFor more information on weighting NodePools, see the [Weighted NodePools section]({{<ref \"scheduling#weighted-nodepools\" >}}) in the scheduling docs.\n\n## status.conditions\n[Conditions](https://github.com/kubernetes/apimachinery/blob/f14778da5523847e4c07346e3161a4b4f6c9186e/pkg/apis/meta/v1/types.go#L1523) objects add observability features to Karpenter.\n* The `status.conditions.type` object reflects node status, such as `Initialized` or `Available`.\n* The status of the condition, `status.conditions.status`, indicates if the condition is `True` or `False`.\n* The `status.conditions.observedGeneration` indicates  if the instance is out of date with the current state of `.metadata.generation`.\n* The `status.conditions.lastTransitionTime` object contains a programatic identifier that indicates the time of the condition's previous transition.\n* The `status.conditions.reason` object indicates the reason for the condition's previous transition.\n* The `status.conditions.message` object provides human-readable details about the condition's previous transition.\n\nNodePools have the following status conditions:\n\n| Condition Type      | Description                                                                                                                                       |\n|---------------------|---------------------------------------------------------------------------------------------------------------------------------------------------|\n| NodeClassReady      | Underlying nodeClass is ready                                                                                                                     |\n| ValidationSucceeded | NodePool CRD validation succeeded                                                                                                                 |\n| Ready               | Top level condition that indicates if the nodePool is ready. This condition will not be true until all the other conditions on nodePool are true. |\n\nIf a NodePool is not ready, it will not be considered for scheduling.\n\n## status.resources\nObjects under `status.resources` provide information about the status of resources such as `cpu`, `memory`, and `ephemeral-storage`.\n\n## Examples\n\n### Isolating Expensive Hardware\n\nA NodePool can be set up to only provision nodes on particular processor types.\nThe following example sets a taint that only allows pods with tolerations for Nvidia GPUs to be scheduled:\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: gpu\nspec:\n  disruption:\n    consolidationPolicy: WhenEmptyOrUnderutilized\n  template:\n    spec:\n      requirements:\n      - key: node.kubernetes.io/instance-type\n        operator: In\n        values: [\"p3.8xlarge\", \"p3.16xlarge\"]\n      taints:\n      - key: nvidia.com/gpu\n        value: \"true\"\n        effect: NoSchedule\n```\nIn order for a pod to run on a node defined in this NodePool, it must tolerate `nvidia.com/gpu` in its pod spec.\n\n### Cilium Startup Taint\n\nPer the Cilium [docs](https://docs.cilium.io/en/stable/installation/taints/#taint-effects), 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.\n\nFailure to provide accurate `startupTaints` can result in Karpenter continually provisioning new nodes. When the new node joins and the startup taint that Karpenter is unaware of is added, Karpenter now considers the pending pod to be unschedulable to this node. Karpenter will attempt to provision yet another new node to schedule the pending pod.\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: cilium-startup\nspec:\n  disruption:\n    consolidationPolicy: WhenEmptyOrUnderutilized\n  template:\n    spec:\n      startupTaints:\n      - key: node.cilium.io/agent-not-ready\n        value: \"true\"\n        effect: NoExecute\n```\n"
  },
  {
    "path": "website/content/en/v1.7/concepts/scheduling.md",
    "content": "---\ntitle: \"Scheduling\"\nlinkTitle: \"Scheduling\"\nweight: 40\ndescription: >\n  Learn about scheduling workloads with Karpenter\n---\n\nIf 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.\nHowever, 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.\nReasons for constraining where your pods run could include:\n\n* Needing to run in zones where dependent applications or storage are available\n* Requiring certain kinds of processors or other hardware\n* Wanting to use techniques like topology spread to help ensure high availability\n\nYour Cloud Provider defines the first layer of constraints, including all instance types, architectures, zones, and purchase types available to its cloud.\nThe cluster administrator adds the next layer of constraints by creating one or more NodePools.\nThe final layer comes from you adding specifications to your Kubernetes pod deployments.\nPod scheduling constraints must fall within a NodePool's constraints or the pods will not deploy.\nFor example, if the NodePool sets limits that allow only a particular zone to be used, and a pod asks for a different zone, it will not be scheduled.\n\nConstraints you can request include:\n\n* **Resource requests**: Request that certain amount of memory or CPU be available.\n* **Node selection**: Choose to run on a node that is has a particular label (`nodeSelector`).\n* **Node affinity**: Draws a pod to run on nodes with particular attributes (affinity).\n* **Topology spread**: Use topology spread to help ensure availability of the application.\n* **Pod affinity/anti-affinity**: Draws pods towards or away from topology domains based on the scheduling of other pods.\n\nKarpenter supports standard Kubernetes scheduling constraints.\nThis allows you to define a single set of rules that apply to both existing and provisioned capacity.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nKarpenter supports specific [Well-Known Labels, Annotations and Taints](https://kubernetes.io/docs/reference/labels-annotations-taints/) that are useful for scheduling.\n{{% /alert %}}\n\n## Resource requests\n\nWithin a Pod spec, you can both make requests and set limits on resources a pod needs, such as CPU and memory.\nFor example:\n\n```yaml\napiVersion: v1\nkind: Pod\nmetadata:\n  name: myapp\nspec:\n  containers:\n  - name: app\n    image: myimage\n    resources:\n      requests:\n        memory: \"128Mi\"\n        cpu: \"500m\"\n      limits:\n        memory: \"256Mi\"\n        cpu: \"1000m\"\n```\nIn this example, the container is requesting 128MiB of memory and .5 CPU.\nIts limits are set to 256MiB of memory and 1 CPU.\nInstance type selection math only uses `requests`, but `limits` may be configured to enable resource oversubscription.\n\n\nSee [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 [NodePools]({{<ref \"./nodepools\" >}}) for a list of supported resources.\n\n### Accelerators/GPU Resources\n\nAccelerator (e.g., GPU) values include\n- `nvidia.com/gpu`\n- `amd.com/gpu`\n- `aws.amazon.com/neuron`\n- `aws.amazon.com/neuroncore`\n- `habana.ai/gaudi`\n\nKarpenter supports accelerators, such as GPUs.\n\nAdditionally, include a resource requirement in the workload manifest. This will cause the GPU dependent pod to be scheduled onto the appropriate node.\n\nHere is an example of an accelerator resource in a workload manifest (e.g., pod):\n\n```yaml\nspec:\n  template:\n    spec:\n      containers:\n      - resources:\n          limits:\n            nvidia.com/gpu: \"1\"\n```\n{{% alert title=\"Note\" color=\"primary\" %}}\nIf you are provisioning nodes that will utilize accelerators/GPUs, you need to deploy the appropriate device plugin daemonset.\nWithout the respective device plugin daemonset, Karpenter will not see those nodes as initialized.\nRefer 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:\n* `nvidia.com/gpu`: [NVIDIA device plugin for Kubernetes](https://github.com/NVIDIA/k8s-device-plugin)\n* `amd.com/gpu`: [AMD GPU device plugin for Kubernetes](https://github.com/RadeonOpenCompute/k8s-device-plugin)\n* `aws.amazon.com/neuron`/`aws.amazon.com/neuroncore`: [AWS Neuron device plugin for Kubernetes](https://awsdocs-neuron.readthedocs-hosted.com/en/latest/containers/kubernetes-getting-started.html#neuron-device-plugin)\n* `habana.ai/gaudi`: [Habana device plugin for Kubernetes](https://github.com/HabanaAI/habanalabs-k8s-device-plugin)\n  {{% /alert %}}\n\n#### AWS Neuron Resources\n\nThe [Neuron scheduler extension](https://awsdocs-neuron.readthedocs-hosted.com/en/latest/containers/kubernetes-getting-started.html#neuron-scheduler-extension) is required for pods that require more than one Neuron core (`aws.amazon.com/neuroncore`) or device (`aws.amazon.com/neuron`) resource, but less than all available Neuron cores or devices on a node. From the AWS Neuron documentation:\n\n> The Neuron scheduler extension finds sets of directly connected devices with minimal communication latency when scheduling containers. On Inf1 and Inf2 instance types where Neuron devices are connected through a ring topology, the scheduler finds sets of contiguous devices. For example, for a container requesting 3 Neuron devices the scheduler might assign Neuron devices 0,1,2 to the container if they are available but never devices 0,2,4 because those devices are not directly connected. On Trn1.32xlarge and Trn1n.32xlarge instance types where devices are connected through a 2D torus topology, the Neuron scheduler enforces additional constraints that containers request 1, 4, 8, or all 16 devices. If your container requires a different number of devices, such as 2 or 5, we recommend that you use an Inf2 instance instead of Trn1 to benefit from more advanced topology.\n\nHowever, Karpenter is not aware of the decisions made by the Neuron scheduler extension which precludes it from making any optimizations to consolidate and bin pack pods requiring Neuron resources. To ensure Karpenter's bin-packing is consistent with the decisions made by the scheduler extension, containers must have like-sized, power of 2 requests (e.g. 1, 2, 4, etc). Failing to do so may result in permanently pending pods.\n\n### Pod ENI Resources (Security Groups for Pods)\n[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.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nYou 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.\n{{% /alert %}}\n{{% alert title=\"Note\" color=\"primary\" %}}\nIf you've enabled [Security Groups per Pod](https://aws.github.io/aws-eks-best-practices/networking/sgpp/), one of the instance's ENIs is reserved. To avoid discrepancies between the `maxPods` value and the node's supported pod density, you need to set [RESERVED_ENIS]({{<ref \"../reference/settings\" >}})=1.\n{{% /alert %}}\n\nHere is an example of a pod-eni resource defined in a deployment manifest:\n```\nspec:\n  template:\n    spec:\n      containers:\n      - resources:\n          limits:\n            vpc.amazonaws.com/pod-eni: \"1\"\n```\n\n{{% alert title=\"Windows Support Notice\" color=\"warning\" %}}\nSecurity groups for pods are [currently unsupported for Windows nodes](https://docs.aws.amazon.com/eks/latest/userguide/security-groups-for-pods.html)\n{{% /alert %}}\n\n## Selecting nodes\n\nWith `nodeSelector` you can ask for a node that matches selected key-value pairs.\nThis can include well-known labels or custom labels you create yourself.\n\nYou 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.\n\n### Labels\nWell-known labels may be specified as NodePool requirements or pod scheduling constraints. You can also define your own custom labels by specifying `requirements` or `labels` on your NodePool and select them using `nodeAffinity` or `nodeSelectors` on your Pods.\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nTake 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.\n{{% /alert %}}\n\n#### Well-Known Labels\n\n| Label                                                          | Example              | Description                                                                                                                                                                                                                               |\n| -------------------------------------------------------------- |----------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| 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))                                                                                               |\n| node.kubernetes.io/instance-type                               | g4dn.8xlarge         | Instance types are defined by your cloud provider ([aws](https://aws.amazon.com/ec2/instance-types/))                                                                                                                                     |\n| node.kubernetes.io/windows-build                               | 10.0.17763           | Windows OS build in the format \"MajorVersion.MinorVersion.BuildNumber\". Can be `10.0.17763` for WS2019, or `10.0.20348` for WS2022. ([k8s](https://kubernetes.io/docs/reference/labels-annotations-taints/#nodekubernetesiowindows-build)) |\n| kubernetes.io/os                                               | linux                | Operating systems are defined by [GOOS values](https://github.com/golang/go/blob/master/src/internal/syslist/syslist.go) (`KnownOS`) on the instance                                                                                      |\n| kubernetes.io/arch                                             | amd64                | Architectures are defined by [GOARCH values](https://github.com/golang/go/blob/master/src/internal/syslist/syslist.go) (`KnownArch`) on the instance                                                                                      |\n| karpenter.sh/capacity-type                                     | spot                 | Capacity types include `reserved`, `spot`, and `on-demand`                                                                                                                                                                                |\n| karpenter.sh/nodepool                                          | default              | The name of the nodepool used to provision the node.                                                                                                                                                                                      |\n| karpenter.k8s.aws/capacity-reservation-id                      | cr-56fac701cc1951b03 | [AWS Specific] The capacity reservation ID. Only present on reserved nodes.                                                                                                                                                               |\n| karpenter.k8s.aws/capacity-reservation-type                    | default              | [AWS Specific] The capacity reservation type. Can be `default` or `capacity-block`. Only present on reserved nodes.                                                                                                                       |\n| karpenter.k8s.aws/ec2nodeclass                                 | default              | [AWS Specific] The name of the ec2 nodeclass used to provision the node                                                                                                                                                                   |\n| karpenter.k8s.aws/instance-hypervisor                          | nitro                | [AWS Specific] Instance types that use a specific hypervisor                                                                                                                                                                              |\n| karpenter.k8s.aws/instance-encryption-in-transit-supported     | true                 | [AWS Specific] Instance types that support (or not) in-transit encryption                                                                                                                                                                 |\n| karpenter.k8s.aws/instance-category                            | g                    | [AWS Specific] Instance types of the same category, usually the string before the generation number                                                                                                                                       |\n| karpenter.k8s.aws/instance-generation                          | 4                    | [AWS Specific] Instance type generation number within an instance category                                                                                                                                                                |\n| karpenter.k8s.aws/instance-family                              | g4dn                 | [AWS Specific] Instance types of similar properties but different resource quantities                                                                                                                                                     |\n| karpenter.k8s.aws/instance-size                                | 8xlarge              | [AWS Specific] Instance types of similar resource quantities but different properties                                                                                                                                                     |\n| karpenter.k8s.aws/instance-cpu                                 | 32                   | [AWS Specific] Number of CPUs on the instance                                                                                                                                                                                             |\n| karpenter.k8s.aws/instance-cpu-manufacturer                    | aws                  | [AWS Specific] Name of the CPU manufacturer                                                                                                                                                                                               |\n| karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz       | 3600                 | [AWS Specific] The CPU clock speed, in MHz                                                                                                                                                                                                |\n| karpenter.k8s.aws/instance-memory                              | 131072               | [AWS Specific] Number of mebibytes of memory on the instance                                                                                                                                                                              |\n| karpenter.k8s.aws/instance-ebs-bandwidth                       | 9500                 | [AWS Specific] Number of [maximum megabits](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-optimized.html#ebs-optimization-performance) of EBS available on the instance                                                         |\n| 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                                                                           |\n| karpenter.k8s.aws/instance-pods                                | 110                  | [AWS Specific] Number of pods the instance supports                                                                                                                                                                                       |\n| karpenter.k8s.aws/instance-gpu-name                            | t4                   | [AWS Specific] Name of the GPU on the instance, if available                                                                                                                                                                              |\n| karpenter.k8s.aws/instance-gpu-manufacturer                    | nvidia               | [AWS Specific] Name of the GPU manufacturer                                                                                                                                                                                               |\n| karpenter.k8s.aws/instance-gpu-count                           | 1                    | [AWS Specific] Number of GPUs on the instance                                                                                                                                                                                             |\n| karpenter.k8s.aws/instance-gpu-memory                          | 16384                | [AWS Specific] Number of mebibytes of memory on the GPU                                                                                                                                                                                   |\n| karpenter.k8s.aws/instance-local-nvme                          | 900                  | [AWS Specific] Number of gibibytes of local nvme storage on the instance                                                                                                                                                                  |\n| karpenter.k8s.aws/instance-capability-flex                     | true                 | [AWS Specific] Instance with capacity flex                                                                                                                                                                                                |\n| topology.k8s.aws/zone-id                                      | use1-az1             | [AWS Specific] Globally consistent [zone id](https://docs.aws.amazon.com/global-infrastructure/latest/regions/az-ids.html)                                                                                                                |\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nKarpenter translates the following deprecated labels to their stable equivalents: `failure-domain.beta.kubernetes.io/zone`, `failure-domain.beta.kubernetes.io/region`, `beta.kubernetes.io/arch`, `beta.kubernetes.io/os`, and `beta.kubernetes.io/instance-type`.\n{{% /alert %}}\n\n#### User-Defined Labels\n\nKarpenter 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 NodePool requirements with the `Exists` operator:\n\n```yaml\nrequirements:\n  - key: user.defined.label/type\n    operator: Exists\n```\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nThere is currently a limit of 100 on the total number of requirements on both the NodePool and the NodeClaim. It's important to note that `spec.template.metadata.labels` are also propagated as requirements on the NodeClaim when it's created, meaning that you can't have more than 100 requirements and labels combined set on your NodePool.\n{{% /alert %}}\n\n#### Node selectors\n\nHere is an example of a `nodeSelector` for selecting nodes:\n\n```yaml\nnodeSelector:\n  topology.kubernetes.io/zone: us-west-2a\n  karpenter.sh/capacity-type: spot\n```\nThis example features a well-known label (`topology.kubernetes.io/zone`) and a label that is well known to Karpenter (`karpenter.sh/capacity-type`).\n\nIf you want to create a custom label, you should do that at the NodePool level.\nThen the pod can declare that custom label.\n\n\nSee [nodeSelector](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#nodeselector) in the Kubernetes documentation for details.\n\n## Preferences\n\nKarpenter is aware of preferences (node affinity, pod affinity, pod anti-affinity, and pod topology) and treats them as requirements in most circumstances. Karpenter uses these preferences when determining if a pod can schedule on a node (absent topology requirements), or when determining if a pod can be shifted to a new node.\n\nKarpenter starts by treating preferred affinities as required affinities when constructing requirements for a pod. When these requirements cannot be met, the pod's preferences are relaxed one-at-a-time by ascending weight (lowest weight is relaxed first), and the remaining requirements are tried again.\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter does not interpret preferred affinities as required when constructing topology requirements for scheduling to a node. If these preferences are necessary, required affinities should be used [as documented in Node Affinity](#node-affinity).\n{{% /alert %}}\n\n### Node affinity\n\nExamples below illustrate how to use Node affinity to include (`In`) and exclude (`NotIn`) objects.\nSee [Node affinity](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#node-affinity) for details.\nWhen setting rules, the following Node affinity types define how hard or soft each rule is:\n\n* **requiredDuringSchedulingIgnoredDuringExecution**: This is a hard rule that must be met.\n* **preferredDuringSchedulingIgnoredDuringExecution**: This is a preference, but the pod can run on a node where it is not guaranteed.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nPreferred affinities on pods can result in more nodes being created than expected because Karpenter will prefer to create new nodes to satisfy preferences, [see the preferences documentation](#preferences) for details.\n{{% /alert %}}\n\nThe `IgnoredDuringExecution` part of each tells the pod to keep running, even if conditions change on the node so the rules no longer matched.\nYou can think of these concepts as `required` and `preferred`, since Kubernetes never implemented other variants of these rules.\n\nAll examples below assume that the NodePool 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.\n\n```yaml\n affinity:\n   nodeAffinity:\n     requiredDuringSchedulingIgnoredDuringExecution:\n       nodeSelectorTerms:\n         - matchExpressions:\n           - key: \"topology.kubernetes.io/zone\"\n             operator: \"In\"\n             values: [\"us-west-2a\", \"us-west-2b\"]\n           - key: \"topology.kubernetes.io/zone\"\n             operator: \"In\"\n             values: [\"us-west-2b\"]\n```\n\nChanging the second operator to `NotIn` would allow the pod to run in `us-west-2a` only:\n\n```yaml\n           - key: \"topology.kubernetes.io/zone\"\n             operator: \"In\"\n             values: [\"us-west-2a\", \"us-west-2b\"]\n           - key: \"topology.kubernetes.io/zone\"\n             operator: \"NotIn\"\n             values: [\"us-west-2b\"]\n```\n\nContinuing to add to the example, `nodeAffinity` lets you define terms so if one term doesn't work it goes to the next one.\nHere, if `us-west-2a` is not available, the second term will cause the pod to run on a spot instance in `us-west-2d`.\n\n\n```yaml\n affinity:\n   nodeAffinity:\n     requiredDuringSchedulingIgnoredDuringExecution:\n       nodeSelectorTerms:\n         - matchExpressions: # OR\n           - key: \"topology.kubernetes.io/zone\" # AND\n             operator: \"In\"\n             values: [\"us-west-2a\", \"us-west-2b\"]\n           - key: \"topology.kubernetes.io/zone\" # AND\n             operator: \"NotIn\"\n             values: [\"us-west-2b\"]\n         - matchExpressions: # OR\n           - key: \"karpenter.sh/capacity-type\" # AND\n             operator: \"In\"\n             values: [\"spot\"]\n           - key: \"topology.kubernetes.io/zone\" # AND\n             operator: \"In\"\n             values: [\"us-west-2d\"]\n```\nIn general, Karpenter will go through each of the `nodeSelectorTerms` in order and take the first one that works.\nHowever, if Karpenter fails to provision on the first `nodeSelectorTerms`, it will try again using the second one.\nIf they all fail, Karpenter will fail to provision the pod.\nKarpenter will backoff and retry over time.\nSo if capacity becomes available, it will schedule the pod without user intervention.\n\n### Taints and tolerations\n\nTaints are the opposite of affinity.\nSetting 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 NodePool that was set up with a taint for only running pods that require a GPU, such as the following:\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: gpu\nspec:\n  template:\n    spec:\n      requirements:\n      - key: karpenter.k8s.aws/instance-family\n        operator: In\n        values:\n          - p3\n      taints:\n      - key: nvidia.com/gpu\n        value: \"true\"\n        effect: \"NoSchedule\"\n```\n\nFor a pod to request to run on a node that has this NodePool, it could set a toleration as follows:\n\n```yaml\napiVersion: v1\nkind: Pod\nmetadata:\n  name: mygpupod\nspec:\n  containers:\n  - name: gpuapp\n    resources:\n      requests:\n        nvidia.com/gpu: 1\n      limits:\n        nvidia.com/gpu: 1\n    image: mygpucontainer\n  tolerations:\n  - key: \"nvidia.com/gpu\"\n    operator: \"Exists\"\n    effect: \"NoSchedule\"\n```\nSee [Taints and Tolerations](https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/) in the Kubernetes documentation for details.\n\n### Topology Spread\n\nBy using the Kubernetes `topologySpreadConstraints` you can ask the NodePool 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.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nPreferred topology spread (`ScheduleAnyway`) can result in more nodes being created than expected because Karpenter will prefer to create new nodes to satisfy spread constraints, [see the preferences documentation](#preferences) for details.\n{{% /alert %}}\n\nFor example:\n\n```yaml\nspec:\n  topologySpreadConstraints:\n    - maxSkew: 1\n      topologyKey: \"topology.kubernetes.io/zone\"\n      whenUnsatisfiable: ScheduleAnyway\n      labelSelector:\n        matchLabels:\n          dev: jjones\n    - maxSkew: 1\n      topologyKey: \"kubernetes.io/hostname\"\n      whenUnsatisfiable: ScheduleAnyway\n      labelSelector:\n        matchLabels:\n          dev: jjones\n    - maxSkew: 1\n      topologyKey: \"karpenter.sh/capacity-type\"\n      whenUnsatisfiable: ScheduleAnyway\n      labelSelector:\n        matchLabels:\n          dev: jjones\n\n```\nAdding this to your podspec would result in:\n\n* Pods being spread across zones, hosts, and capacity-type (`topologyKey`).\n* 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.\n* No more than one pod difference in the number of pods on each host (`maxSkew`).\nFor example, if there were three nodes and five pods the pods could be spread 1, 2, 2 or 2, 1, 2 and so on.\nIf instead the maxSkew were 5, pods could be spread 5, 0, 0 or 3, 2, 0, or 2, 1, 2 and so on.\n\nThe three supported `topologyKey` values that Karpenter supports are:\n- `topology.kubernetes.io/zone`\n- `kubernetes.io/hostname`\n- `karpenter.sh/capacity-type`\n\nSee [Pod Topology Spread Constraints](https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/) for details.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nNodePools do not attempt to balance or rebalance the availability zones for their nodes. Availability zone balancing may be achieved by defining zonal Topology Spread Constraints for Pods that require multi-zone durability, and NodePools will respect these constraints while optimizing for compute costs.\n{{% /alert %}}\n\n### Pod affinity/anti-affinity\n\nBy using the `podAffinity` and `podAntiAffinity` configuration on a pod spec, you can inform the Karpenter scheduler of your desire for pods to schedule together or apart with respect to different topology domains.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nPreferred affinities on pods can result in more nodes being created than expected because Karpenter will prefer to create new nodes to satisfy preferences, [see the preferences documentation](#preferences) for details.\n{{% /alert %}}\n\nFor example:\n\n```yaml\nspec:\n  affinity:\n    podAffinity:\n      requiredDuringSchedulingIgnoredDuringExecution:\n      - labelSelector:\n          matchExpressions:\n          - key: system\n            operator: In\n            values:\n            - backend\n        topologyKey: topology.kubernetes.io/zone\n    podAntiAffinity:\n      requiredDuringSchedulingIgnoredDuringExecution:\n      - labelSelector:\n          matchLabels:\n            app: inflate\n        topologyKey: kubernetes.io/hostname\n```\n\nThe above pod affinity rule would cause the pod to only schedule in zones where a pod with the label `system=backend` is already running.\n\nThe 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.\n\nSee [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.\n\n### Persistent Volume Topology\n\nKarpenter automatically detects storage scheduling requirements and includes them in node launch decisions.\n\nIn 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).\nWhen 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`.\nIt randomly selects `us-west-2a`, provisions a node in that zone, and waits for kube-scheduler to bind the pod to the node.\nThe CSI driver creates a `PersistentVolume` according to the `PersistentVolumeClaim` and gives it a node affinity rule for `us-west-2a`.\n\nLater 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.\n\n```yaml\napiVersion: v1\nkind: Pod\nmetadata:\n  name: app\nspec:\n  containers: ...\n  volumes:\n    - name: storage\n      persistentVolumeClaim:\n        claimName: ebs-claim\n---\nkind: StorageClass\napiVersion: storage.k8s.io/v1\nmetadata:\n  name: ebs\nprovisioner: ebs.csi.aws.com\nvolumeBindingMode: WaitForFirstConsumer\nallowedTopologies:\n- matchLabelExpressions:\n  - key: topology.ebs.csi.aws.com/zone\n    values: [\"us-west-2a\", \"us-west-2b\"]\n---\napiVersion: v1\nkind: PersistentVolumeClaim\nmetadata:\n  name: ebs-claim\nspec:\n  accessModes:\n    - ReadWriteOnce\n  storageClassName: ebs\n  resources:\n    requests:\n      storage: 4Gi\n```\n\n{{% alert title=\"Note\" color=\"primary\" %}}\n☁️ AWS Specific\n\nThe 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`.\n{{% /alert %}}\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nThe 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)\n{{% /alert %}}\n\n## Weighted NodePools\n\nKarpenter allows you to order your NodePools using the `.spec.weight` field so that the Karpenter scheduler will attempt to schedule one NodePool before another.\n\n### Savings Plans and Reserved Instances\n\nIf 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.\n\nTo 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` field on the NodePool to limit the capacity that can be launched by this NodePool. Combined with the `.spec.weight` value, we can tell Karpenter to pull from instance types in the reserved NodePool before defaulting to generic instance types.\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: reserved-instance\nspec:\n  weight: 50\n  limits:\n    cpu: 100\n  template:\n    spec:\n      requirements:\n      - key: \"node.kubernetes.io/instance-type\"\n        operator: In\n        values: [\"c4.large\"]\n---\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\nspec:\n  template:\n    spec:\n      requirements:\n      - key: karpenter.sh/capacity-type\n        operator: In\n        values: [\"spot\", \"on-demand\"]\n      - key: kubernetes.io/arch\n        operator: In\n        values: [\"amd64\"]\n```\n\n### Fallback\n\nPods 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.\n\nBy assigning a higher `.spec.weight` value and restricting a NodePool 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.\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\nspec:\n  weight: 50\n  template:\n    spec:\n      requirements:\n      - key: karpenter.sh/capacity-type\n        operator: In\n        values: [\"spot\", \"on-demand\"]\n      - key: kubernetes.io/arch\n        operator: In\n        values: [\"amd64\"]\n---\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: arm64-specific\nspec:\n  template:\n    spec:\n      requirements:\n      - key: karpenter.sh/capacity-type\n        operator: In\n        values: [\"spot\", \"on-demand\"]\n      - key: kubernetes.io/arch\n        operator: In\n        values: [\"arm64\"]\n      - key: node.kubernetes.io/instance-type\n        operator: In\n        values: [\"a1.large\", \"a1.xlarge\"]\n```\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nBased on the way that Karpenter performs pod batching and bin packing, it is not guaranteed that Karpenter will always choose the highest priority NodePool given specific requirements. For example, if a pod can't be scheduled with the highest priority NodePool, it will force creation of a node using a lower priority NodePool, allowing 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.\n{{% /alert %}}\n\n## Advanced Scheduling Techniques\n\n### Scheduling based on Node Resources\n\nYou may want pods to be able to request resources of nodes that Kubernetes natively does not provide as a schedulable resource or that are aspects of certain nodes like\nHigh Performance Networking or NVME Local Storage. You can use Karpenter's Well-Known Labels to accomplish this.\n\nThese can further be applied at the NodePool or Workload level using Requirements, NodeSelectors or Affinities\n\nPod example of requiring any NVME disk:\n```yaml\n...\n affinity:\n   nodeAffinity:\n     requiredDuringSchedulingIgnoredDuringExecution:\n       nodeSelectorTerms:\n         - matchExpressions:\n           - key: \"karpenter.k8s.aws/instance-local-nvme\"\n             operator: \"Exists\"\n...\n```\n\nNodePool Example:\n```yaml\n...\nrequirement:\n  - key: \"karpenter.k8s.aws/instance-local-nvme\"\n    operator: \"Exists\"\n...\n```\n\nPod example of requiring at least 100GB of NVME disk:\n```yaml\n...\n affinity:\n   nodeAffinity:\n     requiredDuringSchedulingIgnoredDuringExecution:\n       nodeSelectorTerms:\n         - matchExpressions:\n            - key: \"karpenter.k8s.aws/instance-local-nvme\"\n              operator: Gt\n              values: [\"99\"]\n...\n```\n\nNodePool Example:\n```yaml\n...\nrequirement:\n  - key: \"karpenter.k8s.aws/instance-local-nvme\"\n    operator: Gt\n    values: [\"99\"]\n...\n```\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nKarpenter cannot yet take into account ephemeral-storage requests while scheduling pods, we're purely requesting attributes of nodes and getting X amount of resources\nas a side effect. You may need to tweak schedulable resources like CPU or Memory to achieve desired fit, especially if Consolidation is enabled.\n\nYour NodeClass will also need to support automatically formatting and mounting NVME Instance Storage if available.\n{{% /alert %}}\n\nPod example of requiring at least 50 Gbps of network bandwidth:\n```yaml\n...\n affinity:\n   nodeAffinity:\n     requiredDuringSchedulingIgnoredDuringExecution:\n       nodeSelectorTerms:\n         - matchExpressions:\n            - key: \"karpenter.k8s.aws/instance-network-bandwidth\"\n              operator: Gt\n              values: [\"49999\"]\n...\n```\n\nNodePool Example:\n```yaml\n...\nrequirement:\n  - key: \"karpenter.k8s.aws/instance-network-bandwidth\"\n    operator: Gt\n    values: [\"49999\"]\n...\n```\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nIf using Gt/Lt operators, make sure to use values under the actual label values of the desired resource.\n{{% /alert %}}\n\n### `Exists` Operator\n\nThe `Exists` operator can be used on a NodePool to provide workload segregation across nodes.\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nspec:\n  template:\n    spec:\n      requirements:\n        - key: company.com/team\n          operator: Exists\n...\n```\n\nWith this requirement on the NodePool, workloads can specify the same key (e.g. `company.com/team`) with custom values (e.g. `team-a`, `team-b`, etc.) as a required `nodeAffinity` or `nodeSelector`. Karpenter will then apply the key/value pair to nodes it launches dynamically based on the pod's node requirements.\n\nIf each set of pods that can schedule with this NodePool specifies this key in its `nodeAffinity` or `nodeSelector`, you can isolate pods onto different nodes based on their values. This provides a way to more dynamically isolate workloads without requiring a unique NodePool for each workload subset.\n\nFor example, providing the following `nodeSelectors` would isolate the pods for each of these deployments on different nodes.\n\n#### Team A Deployment\n\n```yaml\napiVersion: v1\nkind: Deployment\nmetadata:\n  name: team-a-deployment\nspec:\n  replicas: 5\n  template:\n    spec:\n      nodeSelector:\n        company.com/team: team-a\n```\n\n#### Team A Node\n\n```yaml\napiVersion: v1\nkind: Node\nmetadata:\n  labels:\n    company.com/team: team-a\n```\n\n#### Team B Deployment\n\n```yaml\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: team-b-deployment\nspec:\n  replicas: 5\n  template:\n    spec:\n      nodeSelector:\n        company.com/team: team-b\n```\n\n#### Team B Node\n\n```yaml\napiVersion: v1\nkind: Node\nmetadata:\n  labels:\n    company.com/team: team-b\n```\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nIf a workload matches the NodePool but doesn't specify a label, Karpenter will generate a random label for the node.\n{{% /alert %}}\n\n### On-Demand/Spot Ratio Split\n\nTaking 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.\n\nTo do this, we create one NodePool 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 NodePool and one value for the on-demand NodePool.  When we spread across our new label evenly, we'll end up with a ratio of 4:1 spot to on-demand nodes.\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nThis 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.\n{{% /alert %}}\n\n#### NodePools\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: spot\nspec:\n  template:\n    spec:\n      requirements:\n      - key: \"karpenter.sh/capacity-type\"\n        operator: In\n        values: [\"spot\"]\n      - key: capacity-spread\n        operator: In\n        values:\n        - \"2\"\n        - \"3\"\n        - \"4\"\n        - \"5\"\n---\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: on-demand\nspec:\n  template:\n    spec:\n      requirements:\n      - key: \"karpenter.sh/capacity-type\"\n        operator: In\n        values: [\"on-demand\"]\n      - key: capacity-spread\n        operator: In\n        values:\n        - \"1\"\n```\n\n#### Workload Topology Spread Constraint\n\n```yaml\ntopologySpreadConstraints:\n- maxSkew: 1\n  topologyKey: capacity-spread\n  whenUnsatisfiable: DoNotSchedule\n  labelSelector:\n    ...\n```\n"
  },
  {
    "path": "website/content/en/v1.7/contributing/_index.md",
    "content": "---\ntitle: \"Contributing\"\nlinkTitle: \"Contributing\"\nweight: 40\ndescription: >\n  Learn about how to contribute to Karpenter\n---\n"
  },
  {
    "path": "website/content/en/v1.7/contributing/community-meetings.md",
    "content": "---\ntitle: \"Community Meetings\"\nlinkTitle: \"Community Meetings\"\nweight: 10\ndescription: >\n  Join the Karpenter Community Meetings\n---\n\nKarpenter hosts two types of regular community meetings to foster collaboration and maintain project health:\n\nThe **Working Group** meetings focus on project direction, technical discussions, and feature development. These bi-weekly sessions bring together contributors, users, and maintainers to review designs, plan releases, and address architectural decisions that shape Karpenter's future.\n\nThe **Issue Triage** meetings, held weekly, are dedicated to maintaining project health through focused issue management across our repositories. These sessions ensure proper prioritization, assignment coordination, and timely response to community contributions.\n\nMeeting times alternate to accommodate our global community. All interested participants are welcome to join, contribute, and learn more about Karpenter.\n\n### Working Group Meetings\n\nThe Karpenter Working Group meetings serve as a collaborative forum for project development, technical discussions, and community engagement. These sessions bring together contributors, users, and maintainers to shape the project's direction and ensure its continued success. Through these meetings, we align on architectural decisions, review critical features, and address community needs.\n\nKey focus areas include:\n- Review and discussion of design proposals and technical implementations\n- Planning of upcoming releases and feature roadmaps\n- Coordination between contributors and cross-team collaboration\n- Technical deep-dives on specific components and challenges\n- Discussion of user feedback and community requirements\n\nThe working group provides a platform for both synchronous decision-making and asynchronous follow-ups, ensuring the project maintains its technical excellence while growing its community impact.\n\nWorking group meetings will be held every other Thursday, alternating between a 3:00 PM PST (Americas-friendly) and 9:00 AM PST (Europe-friendly) start time.\nPlease refer to our [calendar](https://calendar.google.com/calendar/u/0?cid=N3FmZGVvZjVoZWJkZjZpMnJrMmplZzVqYmtAZ3JvdXAuY2FsZW5kYXIuZ29vZ2xlLmNvbQ) for an up-to-date schedule.\n\n### Issue Triage Meetings\n\nKarpenter is expanding our community meetings to include dedicated Issue Triage sessions alongside our regular Working Group meetings. This addition aims to improve issue management across both kubernetes-sigs/karpenter and karpenter-provider-aws repositories.\n\nThese weekly meetings rotate between repositories and time zones to accommodate our global community. These dedicated triage sessions focus on:\n- Issue prioritization\n- Assignment coordination\n- Discussion of complex issues\n- Maintaining repository health\n\nAn issue triage meeting for each repository will be held monthly, alternating between a 3:00 PM PST (Americas-friendly) and 9:00 AM PST (Europe-friendly) start time.\nPlease refer to our [calendar](https://calendar.google.com/calendar/u/0?cid=N3FmZGVvZjVoZWJkZjZpMnJrMmplZzVqYmtAZ3JvdXAuY2FsZW5kYXIuZ29vZ2xlLmNvbQ) for an up-to-date schedule.\n\n### Getting Involved\nAll community members are welcome to join these meetings. Meeting links and calendar invites are shared through our usual communication channels.\n\n- All invites are managed through our [Calendar](https://calendar.google.com/calendar/u/0?cid=N3FmZGVvZjVoZWJkZjZpMnJrMmplZzVqYmtAZ3JvdXAuY2FsZW5kYXIuZ29vZ2xlLmNvbQ).\n- 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.\n\n{{% alert title=\"Meeting Access\" %}}\nJoin our meetings using the following credentials:\n\n🔗 **Zoom**: [https://zoom.us/j/95618088729](https://zoom.us/j/95618088729)\n🆔 **Meeting ID**: 956 1808 8729\n🔑 **Passcode**: 77777\n\nNeed help? Contact the maintainers on Slack.\n{{% /alert %}}\n\nAdd future questions or read past discussions in our [Working Group Log](https://docs.google.com/document/d/18BT0AIMugpNpiSPJNlcAL2rv69yAE6Z06gUVj7v_clg).\n"
  },
  {
    "path": "website/content/en/v1.7/contributing/design-guide.md",
    "content": "---\ntitle: \"Design Guide\"\nlinkTitle: \"Design Guide\"\nweight: 20\ndescription: >\n  Read this before making large changes to Karpenter\n---\n\nTechnical 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.\n\nDesigns don’t have to be long or formal, and should match the scope of the problem they’re trying to solve.\n\n* Are there multiple potential solutions?\n* Will users need to be aware of the changes?\n* Would it be painful to discard a rejected implementation?\n* When in doubt, write a 1 pager.\n\n## Tell a Story\n\nA 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.\n\nYour story should include,\n\n* [Context] Include some technical background that helps readers think about your idea in context\n* [Problem] Clearly identify the problem to be solved and some guiding principles to help think about the solutions\n* [Solutions] Talk through different potential solutions and their tradeoffs. Include diagrams to clarify concepts\n* [Recommendation] Make a recommendation, but don’t be overly invested in it\n\nThe 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.\n\n## Gather Broad Feedback\n\nThe 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).\n\nThe 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.\n\nIt 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.\n\n## Simple Solutions to Complex Problems\n\nThe 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.\n\n## Common Gotchas\n\n### Does your change introduce new APIs?\n\nAPIs 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.\n\nThink 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.\n\nBuild minimal and maintainable APIs by:\n\n* Push back on requirements that introduces concepts for all users to solve problems for a few.\n* Identify an opinionated default that solves the majority of use cases.\n* Delay introducing a parameter into your API surface until users demand it; you can always add it later.\n* 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.\n* Take advantage of opportunities to refine APIs while the impact of backwards incompatibility is small\n\n### Does your change behave differently with different cloud providers?\n\nKubernetes 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.\n\nAchieving 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.\n\n### Does your change expose details users may rely on?\n\nKubernetes 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?\n\nBe 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.\n\n### Does your change have a risk of breaking an undocumented invariant?\n\nSystems 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.\n\n* Identify the fundamental reason the existing mechanism is insufficient and be able to explain it in plain terms.\n* Separate the new mechanism from the new feature that relies on it.\n* Clean up after yourself and avoid getting stuck halfway between old and new mechanisms.\n\n### Does your change impact performance?\n\nUsers 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.\n\n* Beware code that scales linearly with pods or nodes. Milliseconds in testing turn into seconds at scale.\n* Cloud provider read APIs can have surprisingly high latency and low limits, use caching to minimize calls.\n* Increases to memory and CPU usage increase capex cost for operators. Profile and optimize your implementations.\n"
  },
  {
    "path": "website/content/en/v1.7/contributing/development-guide.md",
    "content": "---\ntitle: \"Development Guide\"\nlinkTitle: \"Development Guide\"\nweight: 80\ndescription: >\n  Set up a Karpenter development environment\n---\n\n## Dependencies\n\nThe following tools are required for contributing to the Karpenter project.\n\n| Package                                                            | Version  | Install                                        |\n| ------------------------------------------------------------------ | -------- | ---------------------------------------------- |\n| [go](https://golang.org/dl/)                                       | v1.19+   | [Instructions](https://golang.org/doc/install) |\n| [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) |          | `brew install kubectl`                         |\n| [helm](https://helm.sh/docs/intro/install/)                        |          | `brew install helm`                            |\n| Other tools                                                        |          | `make toolchain`                               |\n\n## Developing\n\n### Setup / Teardown\n\nBased 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/).\n\n#### Locally\n\nOnce 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`\n\n```bash\nmake run\n```\n\n#### Inside a Kubernetes Cluster\n\nOnce you have your environment set up, to install Karpenter in the Kubernetes cluster specified in your `~/.kube/config`  run the following commands.\n\n```bash\nmake apply # Install Karpenter\nmake delete # Uninstall Karpenter\n```\n\n### Developer Loop\n\n* Make sure dependencies are installed\n    * Run `make codegen` to make sure yaml manifests are generated (requires a working set of AWS credentials, see [Specifying Credentials](https://docs.aws.amazon.com/sdk-for-go/v1/developer-guide/configuring-sdk.html#specifying-credentials))\n    * Run `make toolchain` to install cli tools for building and testing the project\n* You will need a personal development image repository (e.g. ECR)\n    * Make sure you have valid credentials to your development repository.\n    * `$KO_DOCKER_REPO` must point to your development repository\n    * Your cluster must have permissions to read from the repository\n\n### Build and Deploy\n\n*Note: these commands do not rely on each other and may be executed independently*\n\n```bash\nmake apply # quickly deploy changes to your cluster\nmake presubmit # run codegen, lint, and tests\n```\n\nIf you are only interested in building the Karpenter images and not deploying the updated release to your cluster immediately with Helm, you can run the following:\n\n```bash\nmake image # build and push the karpenter images\n```\n\n*Note: that this will produce a build with the version of https://github.com/kubernetes-sigs/karpenter in your local filesystem.\n\nYou can test out changes made in https://github.com/kubernetes-sigs/karpenter by replacing the dependency of https://github.com/aws/karpenter-provider-aws/.\nFor local changes, replace `$PATH_TO_KUBERNETES_SIGS_KARPENTER` with the relative or absolute path and run:\n\n```bash\ngo mod edit -replace sigs.k8s.io/karpenter=$PATH_TO_KUBERNETES_SIGS_KARPENTER\n```\n\nThen you can build your image using the previous steps.\n\n### Publishing Images Only\n\nIf you only need to build and publish an image to a container registry, run the following:\n\n```bash\nmake image # build and push the karpenter images\n```\nYou can test out changes made in https://github.com/kubernetes-sigs/karpenter by replacing the dependency of https://github.com/aws/karpenter-provider-aws/.\nFor local changes, replace `$PATH_TO_KUBERNETES_SIGS_KARPENTER` with the relative or absolute path and run:\n\n```bash\ngo mod edit -replace sigs.k8s.io/karpenter=$PATH_TO_KUBERNETES_SIGS_KARPENTER\n```\n\nThen you can build your image using the previous steps.\n\n*Note: you need to commit the go.mod changes before running `make image` for the changes to be picked up.\n\n### Testing\n\n```bash\nmake test       # E2E correctness tests\n```\n\n### Change Log Level\n\nBy default, `make apply` will set the log level to debug. You can change the log level by setting the log level in your Helm values.\n\n```bash\n--set logLevel=debug\n```\n\n### Debugging Metrics\n\nOSX:\n\n```bash\nopen http://localhost:8080/metrics && kubectl port-forward service/karpenter -n kube-system 8080\n```\n\nLinux:\n\n```bash\ngio open http://localhost:8080/metrics && kubectl port-forward service/karpenter -n karpenter 8080\n```\n\n### Tailing Logs\n\nWhile 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):\n\n```bash\nstern -n karpenter -l app.kubernetes.io/name=karpenter\n```\n\n## Environment specific setup\n\n### AWS\n\nFor local development on Karpenter you will need a Docker repo which can manage your images for Karpenter components.\nYou can use the following command to provision an ECR repository. We recommend using a single \"dev\" repository for \ndevelopment across multiple projects, and to use specific image hashes instead of image tags. \n\n```bash\naws ecr create-repository \\\n    --repository-name dev \\\n    --image-scanning-configuration scanOnPush=true \\\n    --region \"${AWS_DEFAULT_REGION}\"\n```\n\nOnce you have your ECR repository provisioned, configure your Docker daemon to authenticate with your newly created repository.\n\n```bash\nexport KO_DOCKER_REPO=\"${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_DEFAULT_REGION}.amazonaws.com/dev\"\naws ecr get-login-password --region \"${AWS_DEFAULT_REGION}\" | docker login --username AWS --password-stdin \"${KO_DOCKER_REPO}\"\n```\n\n## Profiling\nKarpenter exposes a pprof endpoint on its metrics port when [profiling]({{< relref \"../reference/settings\" >}}) is enabled.\n\nLearn about profiling with pprof: https://jvns.ca/blog/2017/09/24/profiling-go-with-pprof/\n\n### Prerequisites\n```\nbrew install graphviz\ngo install github.com/google/pprof@latest\n```\n\n### Get a profile\n```\n# Connect to the metrics endpoint\nkubectl port-forward service/karpenter -n karpenter 8080\nopen http://localhost:8080/debug/pprof/\n# Visualize the memory\ngo tool pprof -http 0.0.0.0:9000 localhost:8080/debug/pprof/heap\n# Visualize CPU\ngo tool pprof -http 0.0.0.0:9000 \"localhost:8080/debug/pprof/profile?seconds=60\"\n```\n"
  },
  {
    "path": "website/content/en/v1.7/contributing/documentation-updates.md",
    "content": "---\ntitle: \"Documentation Updates\"\nlinkTitle: \"Documentation Updates\"\nweight: 50\ndescription: >\n  Information helpful for contributing simple documentation updates.\n---\n\n- Documentation for https://karpenter.sh/docs/ is built under website/content/en/preview/.\n- Documentation updates should be made to the \"preview\" directory. Your changes will be promoted to website/content/en/docs/ by an automated process after the change has been merged.\n- Previews for your changes are built and available a few minutes after you push. Look for the \"Amplify Preview URL\" link in a comment in your PR.\n- If your update applies to more than just the current version of Karpenter, please backport your changes into all of the versions under website/content/en/ *besides* the /docs/ folder\n"
  },
  {
    "path": "website/content/en/v1.7/faq.md",
    "content": "---\ntitle: \"FAQs\"\nlinkTitle: \"FAQs\"\nweight: 60\ndescription: >\n  Review Karpenter Frequently Asked Questions\n---\n## General\n\n### Is Karpenter safe for production use?\nKarpenter v1 is the first stable Karpenter API. Any future incompatible API changes will require a v2 version.\n\n### How does a NodePool decide to manage a particular node?\nSee [Configuring NodePools]({{< ref \"./concepts/#configuring-nodepools\" >}}) for information on how Karpenter configures and manages nodes.\n\n### What cloud providers are supported?\nAWS is the first cloud provider supported by Karpenter, although it is designed to be used with other cloud providers as well.\n\n### Can I write my own cloud provider for Karpenter?\nYes, but there is no documentation yet for it. Start with Karpenter's GitHub [cloudprovider](https://github.com/aws/karpenter-provider-aws/tree/v1.7.4/pkg/cloudprovider) documentation to see how the AWS provider is built, but there are other sections of the code that will require changes too.\n\n### What operating system nodes does Karpenter deploy?\nKarpenter uses the OS defined by the [AMI Family in your EC2NodeClass]({{< ref \"./concepts/nodeclasses#specamifamily\" >}}).\n\n### Can I provide my own custom operating system images?\nKarpenter has multiple mechanisms for configuring the [operating system]({{< ref \"./concepts/nodeclasses/#specamiselectorterms\" >}}) for your nodes.\n\n### Can Karpenter deal with workloads for mixed architecture cluster (arm vs. amd)?\nKarpenter is flexible to multi-architecture configurations using [well known labels]({{< ref \"./concepts/scheduling/#supported-labels\">}}).\n\n### What RBAC access is required?\nAll the required RBAC rules can be found in the Helm chart template. See [clusterrole-core.yaml](https://github.com/aws/karpenter/blob/v1.7.4/charts/karpenter/templates/clusterrole-core.yaml), [clusterrole.yaml](https://github.com/aws/karpenter/blob/v1.7.4/charts/karpenter/templates/clusterrole.yaml), [rolebinding.yaml](https://github.com/aws/karpenter/blob/v1.7.4/charts/karpenter/templates/rolebinding.yaml), and [role.yaml](https://github.com/aws/karpenter/blob/v1.7.4/charts/karpenter/templates/role.yaml) files for details.\n\n### Can I run Karpenter outside of a Kubernetes cluster?\nYes, as long as the controller has network and IAM/RBAC access to the Kubernetes API and your provider API.\n\n### What do I do if I encounter a security issue with Karpenter?\nRefer to [Reporting Security Issues](https://github.com/aws/karpenter/security/policy) for information on how to report Karpenter security issues. Do not create a public GitHub issue.\n\n## Compatibility\n\n### Which versions of Kubernetes does Karpenter support?\nSee the [Compatibility Matrix in the Upgrade Section]({{< ref \"./upgrading/compatibility#compatibility-matrix\" >}}) to view the supported Kubernetes versions per Karpenter released version.\n\n### What Kubernetes distributions are supported?\nKarpenter documents integration with a fresh or existing installation of the latest AWS Elastic Kubernetes Service (EKS). Other Kubernetes distributions (KOPs, etc.) can be used, but setting up cloud provider permissions for those distributions has not been documented.\n\n### How does Karpenter interact with AWS node group features?\nNodePools 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 NodePools, 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 NodePool-managed in the long term.\n\n\n### How does Karpenter interact with Kubernetes features?\n* Kubernetes Cluster Autoscaler: Karpenter can work alongside Cluster Autoscaler. See [Kubernetes Cluster Autoscaler]({{< ref \"./concepts/#kubernetes-cluster-autoscaler\" >}}) for details.\n* 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.\n\n## Provisioning\n\n### What features does the Karpenter NodePool support?\nSee the [NodePool API docs]({{< ref \"./concepts/nodepools\" >}}) for NodePool examples and descriptions of features.\n\n### Can I create multiple (team-based) NodePools on a cluster?\nYes, NodePools can identify multiple teams based on labels. See the [NodePool API docs]({{< ref \"./concepts/nodepools\" >}}) for details.\n\n### If multiple NodePools are defined, which will my pod use?\n\nPending pods will be handled by any NodePools that matches the requirements of the pod. There is no ordering guarantee if multiple NodePools match pod requirements. We recommend that NodePools are set-up to be mutually exclusive. To select a specific NodePool, use the node selector `karpenter.sh/nodepool: my-nodepool`.\n\n### How can I configure Karpenter to only provision pods for a particular namespace?\n\nThere 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` using the same mechanisms 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.\n\nWe 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/).\n\n### Can I add SSH keys to a NodePool?\n\nKarpenter does not offer a way to add SSH keys via NodePools or secrets to the nodes it manages.\nHowever, 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.\n\nThough not recommended, if you need to access Karpenter-managed nodes without AWS credentials, you can add SSH keys using EC2NodeClass User Data. See the [User Data section in the EC2NodeClass documentation]({{< ref \"./concepts/nodeclasses/#specuserdata\" >}}) for details.\n\n### Can I set limits of CPU and memory for a NodePool?\nYes. View the [NodePool API docs]({{< ref \"./concepts/nodepools#speclimits\" >}}) for NodePool examples and descriptions of how to configure limits.\n\n### Can I mix spot and on-demand EC2 run types?\nYes, see the [NodePool API docs]({{< ref \"./concepts/nodepools#examples\" >}}) for an example.\n\n### Can I restrict EC2 instance types?\n\n* Attribute-based requests are currently not possible.\n* You can select instances with special hardware, such as gpu.\n\n### Can I use Bare Metal instance types?\n\nYes, Karpenter supports provisioning metal instance types when a NodePool'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.\n\n### How does Karpenter dynamically select instance types?\n\nKarpenter 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. Karpenter [recommends the use of C, M, and R >= Gen 3 instance types]({{< ref \"./concepts/nodepools#spectemplatespecrequirements\" >}}) for most generic workloads, but it can be constrained in the NodePool spec with the [instance-type](https://kubernetes.io/docs/reference/labels-annotations-taints/#nodekubernetesioinstance-type) well-known label in the requirements section.\n\nAfter 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.\n\n\nThe EC2 fleet API attempts to provision the instance type based on the [Price Capacity Optimized allocation strategy](https://aws.amazon.com/blogs/compute/introducing-price-capacity-optimized-allocation-strategy-for-ec2-spot-instances/). For the on-demand capacity type, this is effectively equivalent to the `lowest-price` allocation strategy. For the spot capacity type, Fleet will determine an instance type that has both the lowest price combined with the lowest chance of being interrupted. Note that this may not give you the instance type with the strictly lowest price for spot.\n\n### How does Karpenter calculate the resource usage of Daemonsets when simulating scheduling?\n\nKarpenter currently calculates the applicable daemonsets at the NodePool level with label selectors/taints, etc. It does not look to see if there are requirements on the daemonsets that would exclude it from running on particular instances that the NodePool could or couldn't launch.\nThe recommendation for now is to use multiple NodePools with taints/tolerations or label selectors to limit daemonsets to only nodes launched from specific NodePoools.\n\n### What if there is no Spot capacity?\n\nThe best defense against running out of Spot capacity is to allow Karpenter to provision as many distinct 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.\n\nAllowing 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 instance type diversity will also increase the chances that you’ll be able to continue to launch On-Demand capacity for your workloads.\n\nKarpenter has a concept of an “offering” for each instance type, which is a combination of zone and capacity type. Whenever the Fleet API returns an insufficient capacity error for Spot instances, those particular offerings are temporarily removed from consideration (across the entire NodePool) so that Karpenter can make forward progress with different options.\n\n### Does Karpenter support IPv6?\n\nYes! 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 NodePool to only allow Nitro instance types:\n\n```\napiVersion: karpenter.sh/v1\nkind: NodePool\n...\nspec:\n  template:\n    spec:\n      requirements:\n        - key: karpenter.k8s.aws/instance-hypervisor\n          operator: In\n          values:\n            - nitro\n```\n\nFor more documentation on enabling IPv6 with the Amazon VPC CNI, see the [docs](https://docs.aws.amazon.com/eks/latest/userguide/cni-ipv6.html).\n\n{{% alert title=\"Windows Support Notice\" color=\"warning\" %}}\nWindows nodes do not support IPv6.\n{{% /alert %}}\n\n### Why do I see extra nodes get launched to schedule pending pods that remain empty and are later removed?\n\nYou might have a daemonset, userData configuration, or some other workload that applies a taint after a node is provisioned. After the taint is applied, Karpenter will detect that the pod cannot be scheduled to this new node due to the added taint. As a result, Karpenter will provision yet another node. Typically, the original node has the taint removed and the pod schedules to it, leaving the extra new node unused and reaped by emptiness/consolidation. If the taint is not removed quickly enough, Karpenter may remove the original node before the pod can be scheduled via emptiness consolidation. This could result in an infinite loop of nodes being provisioned and consolidated without the pending pod ever scheduling.\n\nThe solution is to configure [startupTaints]({{<ref \"./concepts/nodepools/#cilium-startup-taint\" >}}) to make Karpenter aware of any temporary taints that are needed to ensure that pods do not schedule on nodes that are not yet ready to receive them.\n\nHere's an example for Cilium's startup taint.\n```\napiVersion: karpenter.sh/v1\nkind: NodePool\n...\nspec:\n  template:\n    spec:\n      startupTaints:\n        - key: node.cilium.io/agent-not-ready\n          effect: NoSchedule\n```\n\n## Scheduling\n\n### When using preferred scheduling constraints, Karpenter launches the correct number of nodes at first.  Why do they then sometimes get consolidated immediately?\n\n`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.\n\nAs 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 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.\n\n### When deploying an additional DaemonSet to my cluster, why does Karpenter not scale-up my nodes to support the extra DaemonSet?\n\nKarpenter will not scale-up more capacity for an additional DaemonSet on its own. This is due to the fact that the only pod that would schedule to that new node would be the DaemonSet pod, which is consuming additional capacity with no benefit. Therefore, Karpenter only considers DaemonSets when doing overhead calculations for scale-ups to workload pods.\n\nTo avoid new DaemonSets failing to schedule to existing Nodes, you should [set a high priority on your DaemonSet pods with a `preemptionPolicy: PreemptLowerPriority`](https://kubernetes.io/docs/concepts/scheduling-eviction/pod-priority-preemption/#example-priorityclass) so that DaemonSet pods will be guaranteed to schedule on all existing and new Nodes. For existing Nodes, this will cause some pods with lower priority to get [preempted](https://kubernetes.io/docs/concepts/scheduling-eviction/pod-priority-preemption/#preemption), replaced by the DaemonSet and re-scheduled onto new capacity that Karpenter will launch in response to the new pending pods.\n\nThe Karpenter maintainer team is also discussing a consolidation mechanism [in this Github issue](https://github.com/aws/karpenter/issues/3256) that would allow existing capacity to be rolled when a new DaemonSet is deployed without having to set [priority or preemption](https://kubernetes.io/docs/concepts/scheduling-eviction/pod-priority-preemption/) on the pods.\n\n\n### Why aren’t my Topology Spread Constraints spreading pods across zones?\n\nKarpenter will provision nodes according to `topologySpreadConstraints`. However, the Kubernetes scheduler may schedule pods to nodes that do not fulfill zonal spread constraints if the `minDomains` field is not set. If Karpenter launches nodes that can handle more than the required number of pods, and the newly launched nodes initialize at different times, then the Kubernetes scheduler may place more than the desired number of pods on the first node that is Ready.\n\nThe preferred solution is to use the [`minDomains` field in `topologySpreadConstraints`](https://kubernetes.io/docs/concepts/scheduling-eviction/topology-spread-constraints/#topologyspreadconstraints-field), which is enabled by default starting in Kubernetes 1.27.\n\nBefore `minDomains` was available, another workaround has been to launch a lower [Priority](https://kubernetes.io/docs/concepts/scheduling-eviction/pod-priority-preemption/) pause container to each zone before launching the pods that you want to spread across the zones. The lower Priority on these pause pods would mean that they would be preempted when your desired pods are scheduled.\n\n## Workloads\n\n### How can someone deploying pods take advantage of Karpenter?\n\nSee [Application developer]({{< ref \"./concepts/#application-developer\" >}}) for descriptions of how Karpenter matches nodes with pod requests.\n\n### Can I use Karpenter with EBS disks per availability zone?\nYes.  See [Persistent Volume Topology]({{< ref \"./concepts/scheduling#persistent-volume-topology\" >}}) for details.\n\n### Can I set `--max-pods` on my nodes?\nYes, see the [KubeletConfiguration Section in the NodePool docs]({{<ref \"./concepts/nodepools#spectemplatespeckubelet\" >}}) to learn more.\n\n### Why do the Windows2019 and Windows2022 AMI families only support Windows Server Core?\nThe difference between the Core and Full variants is that Core is a minimal OS with less components and no graphic user interface (GUI) or desktop experience.\n`Windows2019` and `Windows2022` AMI families use the Windows Server Core option for simplicity, but if required, you can specify a custom AMI to run Windows Server Full.\n\nYou can specify the [Amazon EKS optimized AMI](https://docs.aws.amazon.com/eks/latest/userguide/eks-optimized-windows-ami.html) with Windows Server 2022 Full for Kubernetes 1.33 by configuring an `amiSelector` that references the AMI name.\n```yaml\namiSelectorTerms:\n    - name: Windows_Server-2022-English-Full-EKS_Optimized-1.33*\n```\n\n### Can I use Karpenter to scale my workload's pods?\nKarpenter is a node autoscaler which will create new nodes in response to unschedulable pods. Scaling the pods themselves is outside of its scope.\nThis is the realm of pod autoscalers such as the [Vertical Pod Autoscaler](https://github.com/kubernetes/autoscaler/tree/master/vertical-pod-autoscaler) (for scaling an individual pod's resources) or the [Horizontal Pod Autoscaler](https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/) (for scaling replicas).\nWe also recommend taking a look at [Keda](https://keda.sh/) if you're looking for more advanced autoscaling capabilities for pods.\n\n## Deprovisioning\n### How does Karpenter deprovision nodes?\nSee [Deprovisioning nodes]({{< ref \"./concepts/disruption\" >}}) for information on how Karpenter deprovisions nodes.\n\n## Upgrading Karpenter\n\n### How do I upgrade Karpenter?\nKarpenter is a controller that runs in your cluster, but it is not tied to a specific Kubernetes version, as the Cluster Autoscaler is.\nUse your existing upgrade mechanisms to upgrade your core add-ons in Kubernetes and keep Karpenter up to date on bug fixes and new features.\n\nKarpenter requires proper permissions in the `KarpenterNode IAM Role` and the `KarpenterController IAM Role`.\nTo 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-karpenter/cloudformation.yaml`.\nNext, locate `KarpenterController IAM Role` ARN (i.e., ARN of the resource created in [Create the KarpenterController IAM Role](../getting-started/getting-started-with-karpenter/#create-the-karpentercontroller-iam-role)) and pass them to the Helm upgrade command.\n{{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step08-apply-helm-chart.sh\" language=\"bash\"%}}\n\nFor information on upgrading Karpenter, see the [Upgrade Guide]({{< ref \"./upgrading/upgrade-guide/\" >}}).\n\n## Upgrading Kubernetes Cluster\n\n### How do I upgrade an EKS Cluster with Karpenter?\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nKarpenter recommends that you always validate AMIs in your lower environments before using them in production environments. Read [Managing AMIs]({{<ref \"./tasks/managing-amis\" >}}) to understand best practices about upgrading your AMIs.\n\nIf using a custom AMI, you will need to trigger the rollout of new worker node images through the publication of a new AMI with tags matching the [`amiSelector`]({{<ref \"./concepts/nodeclasses#specamiselectorterms\" >}}), or a change to the [`amiSelector`]({{<ref \"./concepts/nodeclasses#specamiselectorterms\" >}}) field.\n{{% /alert %}}\n\nKarpenter's default behavior will upgrade your nodes when you've upgraded your Amazon EKS Cluster. Karpenter will [drift]({{<ref \"./concepts/disruption#drift\" >}}) nodes to stay in-sync with the EKS control plane version. Drift is enabled by default starting in `v0.33`. This means that as soon as your cluster is upgraded, Karpenter will auto-discover the new AMIs for that version.\n\nStart by [upgrading the EKS Cluster control plane](https://docs.aws.amazon.com/eks/latest/userguide/update-cluster.html). After the EKS Cluster upgrade completes, Karpenter will Drift and disrupt the Karpenter-provisioned nodes using EKS Optimized AMIs for the previous cluster version by first spinning up replacement nodes. Karpenter respects [Pod Disruption Budgets](https://kubernetes.io/docs/concepts/workloads/pods/disruptions/) (PDB), and automatically [replaces, cordons, and drains those nodes]({{<ref \"./concepts/disruption#control-flow\" >}}). To best support pods moving to new nodes, follow Kubernetes best practices by setting appropriate pod [Resource Quotas](https://kubernetes.io/docs/concepts/policy/resource-quotas/) and using PDBs.\n\n## Interruption Handling\n\n### Should I use Karpenter interruption handling alongside Node Termination Handler?\nNo. We recommend against using Node Termination Handler alongside Karpenter due to conflicts that could occur from the two components handling the same events.\n\n### Why should I migrate from Node Termination Handler?\nKarpenter's native interruption handling offers two main benefits over the standalone Node Termination Handler component:\n1. You don't have to manage and maintain a separate component to exclusively handle interruption events.\n2. Karpenter's native interruption handling coordinates with other deprovisioning so that consolidation, expiration, etc. can be aware of interruption events and vice-versa.\n\n### Why am I receiving QueueNotFound errors when I set `--interruption-queue`?\nKarpenter requires a queue to exist that receives event messages from EC2 and health services in order to handle interruption messages properly for nodes.\n\nDetails on the types of events that Karpenter handles can be found in the [Interruption Handling Docs]({{< ref \"./concepts/disruption/#interruption\" >}}).\n\nDetails on provisioning the SQS queue and EventBridge rules can be found in the [Getting Started Guide]({{< ref \"./getting-started/getting-started-with-karpenter/#create-the-karpenter-infrastructure-and-iam-roles\" >}}).\n\n## Consolidation\n\n### Why do I sometimes see an extra node get launched when updating a deployment that remains empty and is later removed?\n\nConsolidation 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.\n\n## Logging\n\n### How do I customize or configure the log output?\n\nKarpenter uses [uber-go/zap](https://github.com/uber-go/zap) for logging. You can customize or configure the log messages by editing the [configmap-logging.yaml](https://github.com/aws/karpenter/blob/main/charts/karpenter/templates/configmap-logging.yaml)\n`ConfigMap`'s [data.zap-logger-config](https://github.com/aws/karpenter/blob/main/charts/karpenter/templates/configmap-logging.yaml#L26) field.\nThe available configuration options are specified in the [zap.Config godocs](https://pkg.go.dev/go.uber.org/zap#Config).\n"
  },
  {
    "path": "website/content/en/v1.7/getting-started/_index.md",
    "content": "---\ntitle: \"Getting Started\"\nlinkTitle: \"Getting Started\"\nweight: 10\ndescription: >\n  Choose from different methods to get started with Karpenter\n---\n\n\nTo get started with Karpenter, the [Getting Started with Karpenter]({{< relref \"getting-started-with-karpenter\" >}}) guide provides an end-to-end procedure for creating a cluster (with `eksctl`) and adding Karpenter.\n\nSee the [AKS Node autoprovisioning article](https://learn.microsoft.com/azure/aks/node-autoprovision) on how to use Karpenter on Azure's AKS or go to the [Karpenter provider for Azure open source repository](https://github.com/Azure/karpenter-provider-azure) for self-hosting on Azure and additional information.\n\nSee the [Deploy Karpenter on Alibabacloud's ACK](https://docs.cloudpilot.ai/karpenter/alibabacloud/preview/getting-started/set-up-a-cluster-and-add-karpenter/) to know how to use Karpenter on Alibabacloud's ACK. Or you can go to the [Karpenter-provider-alibabacloud](https://github.com/cloudpilot-ai/karpenter-provider-alibabacloud) for more details.\n\nIf you prefer, the following instructions use Terraform to create a cluster and add Karpenter:\n\n* [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/getting-started/) guide and also add modules and add-ons. This includes a [Karpenter](https://aws-ia.github.io/terraform-aws-eks-blueprints/patterns/karpenter/) add-on that lets you bypass the instructions in this guide for setting up Karpenter.\n\nAlthough not supported, you could also try Karpenter on other Kubernetes distributions running on AWS. For example:\n\n* [kOps](https://kops.sigs.k8s.io/operations/karpenter/): These instructions describe how to create a kOps Kubernetes cluster in AWS that includes Karpenter.\n\nLearn more about Karpenter and how to get started below.\n\n* [Karpenter EKS Best Practices](https://aws.github.io/aws-eks-best-practices/karpenter/) guide\n* [EC2 Spot Workshop for Karpenter](https://ec2spotworkshops.com/karpenter.html)\n* [EKS Karpenter Workshop](https://www.eksworkshop.com/docs/autoscaling/compute/karpenter/)\n* [Advanced EKS Immersion Karpenter Workshop](https://catalog.us-east-1.prod.workshops.aws/workshops/76a5dd80-3249-4101-8726-9be3eeee09b2/en-US/autoscaling/karpenter)\n* [Karpenter Blueprints](https://github.com/aws-samples/karpenter-blueprints)\n* [Tutorial: Run Kubernetes Clusters for Less with Amazon EC2 Spot and Karpenter](https://community.aws/tutorials/run-kubernetes-clusters-for-less-with-amazon-ec2-spot-and-karpenter#step-6-optional-simulate-spot-interruption)\n"
  },
  {
    "path": "website/content/en/v1.7/getting-started/getting-started-with-karpenter/_index.md",
    "content": "\n---\ntitle: \"Getting Started with Karpenter\"\nlinkTitle: \"Getting Started with Karpenter\"\nweight: 10\ndescription: >\n  Set up a cluster and add Karpenter\n---\n\nKarpenter 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.\n\nThis guide shows how to get started with Karpenter by creating a Kubernetes cluster and installing Karpenter.\nTo use Karpenter, you must be running a supported Kubernetes cluster on a supported cloud provider.\n\nThe guide below explains how to utilize the [Karpenter provider for AWS](https://github.com/aws/karpenter-provider-aws) with EKS.\n\nSee the [AKS Node autoprovisioning article](https://learn.microsoft.com/azure/aks/node-autoprovision) on how to use Karpenter on Azure's AKS or go to the [Karpenter provider for Azure open source repository](https://github.com/Azure/karpenter-provider-azure) for self-hosting on Azure and additional information.\n\n## Create a cluster and add Karpenter\n\nThis guide uses `eksctl` to create the cluster.\nIt should take less than 1 hour to complete, and cost less than $0.25.\nFollow the clean-up instructions to reduce any charges.\n\n### 1. Install utilities\n\nKarpenter is installed in clusters with a Helm chart.\n\nKarpenter requires cloud provider permissions to provision nodes, for AWS IAM\nRoles for Service Accounts (IRSA) should be used. IRSA permits Karpenter\n(within the cluster) to make privileged requests to AWS (as the cloud provider)\nvia a ServiceAccount.\n\nInstall these tools before proceeding:\n\n1. [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2-linux.html)\n2. `kubectl` - [the Kubernetes CLI](https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/)\n3. `eksctl` (>= v0.202.0) - [the CLI for AWS EKS](https://eksctl.io/installation)\n4. `helm` - [the package manager for Kubernetes](https://helm.sh/docs/intro/install/)\n\n[Configure the AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html)\nwith a user that has sufficient privileges to create an EKS cluster. Verify that the CLI can\nauthenticate properly by running `aws sts get-caller-identity`.\n\n### 2. Set environment variables\n\nAfter setting up the tools, set the Karpenter and Kubernetes version:\n\n```bash\nexport KARPENTER_NAMESPACE=\"kube-system\"\nexport KARPENTER_VERSION=\"1.7.4\"\nexport K8S_VERSION=\"1.33\"\n```\n\nThen set the following environment variable:\n\n{{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step01-config.sh\" language=\"bash\"%}}\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nIf you open a new shell to run steps in this procedure, you need to set some or all of the environment variables again.\nTo remind yourself of these values, type:\n\n```bash\necho \"${KARPENTER_NAMESPACE}\" \"${KARPENTER_VERSION}\" \"${K8S_VERSION}\" \"${CLUSTER_NAME}\" \"${AWS_DEFAULT_REGION}\" \"${AWS_ACCOUNT_ID}\" \"${TEMPOUT}\" \"${ALIAS_VERSION}\"\n```\n\n{{% /alert %}}\n\n\n### 3. Create a Cluster\n\nCreate a basic cluster with `eksctl`.\nThe following cluster configuration will:\n\n* Use CloudFormation to set up the infrastructure needed by the EKS cluster. See [CloudFormation]({{< relref \"../../reference/cloudformation/\" >}}) for a complete description of what `cloudformation.yaml` does for Karpenter.\n* Create a Kubernetes service account and AWS IAM Role, and associate them using IRSA to let Karpenter launch instances.\n* Add the Karpenter node role to the aws-auth configmap to allow nodes to connect.\n* 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.\n* Set KARPENTER_IAM_ROLE_ARN variables.\n* Create a role to allow spot instances.\n* Run Helm to install Karpenter\n\n{{< tabpane text=true right=false >}}\n  {{% tab header=\"**Create cluster command**:\" disabled=true /%}}\n  {{% tab header=\"Managed NodeGroups\" %}}\n  {{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step02-create-cluster.sh\" language=\"bash\"%}}\n  {{% /tab %}}\n  {{% tab header=\"Fargate\" %}}\n  {{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step02-create-cluster-fargate.sh\" language=\"bash\"%}}\n  {{% /tab %}}\n{{< /tabpane >}}\n\nUnless your AWS account has already onboarded to EC2 Spot, you will need to create the service linked role to\navoid the [`ServiceLinkedRoleCreationNotPermitted` error]({{<ref \"../../troubleshooting/#missing-service-linked-role\" >}}).\n\n{{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step06-add-spot-role.sh\" language=\"bash\"%}}\n\n{{% alert title=\"Windows Support Notice\" color=\"warning\" %}}\nIn order to run Windows workloads, Windows support should be enabled in your EKS Cluster.\nSee [Enabling Windows support](https://docs.aws.amazon.com/eks/latest/userguide/windows-support.html#enable-windows-support) to learn more.\n{{% /alert %}}\n\n### 4. Install Karpenter\n\n{{< tabpane text=true right=false >}}\n  {{% tab header=\"**Karpenter installation command**:\" disabled=true /%}}\n  {{% tab header=\"Managed NodeGroups\" %}}\n  {{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step08-apply-helm-chart.sh\" language=\"bash\"%}}\n  {{% /tab %}}\n  {{% tab header=\"Fargate\" %}}\n  {{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step08-apply-helm-chart-fargate.sh\" language=\"bash\"%}}\n  {{% /tab %}}\n{{< /tabpane >}}\n\nAs the OCI Helm chart is signed by [Cosign](https://github.com/sigstore/cosign) as part of the release process you can verify the chart before installing it by running the following command.\n\n```bash\ncosign verify public.ecr.aws/karpenter/karpenter:1.7.4 \\\n  --certificate-oidc-issuer=https://token.actions.githubusercontent.com \\\n  --certificate-identity-regexp='https://github\\.com/aws/karpenter-provider-aws/\\.github/workflows/release\\.yaml@.+' \\\n  --certificate-github-workflow-repository=aws/karpenter-provider-aws \\\n  --certificate-github-workflow-name=Release \\\n  --certificate-github-workflow-ref=refs/tags/v1.7.4 \\\n  --annotations version=1.7.4\n```\n\n{{% alert title=\"DNS Policy Notice\" color=\"warning\" %}}\nKarpenter uses the `ClusterFirst` pod DNS policy by default. This is the Kubernetes cluster default and this ensures that Karpenter can reach-out to internal Kubernetes services during its lifetime. There may be cases where you do not have the DNS service that you are using on your cluster up-and-running before Karpenter starts up. The most common case of this is you want Karpenter to manage the node capacity where your DNS service pods are running.\n\nIf you need Karpenter to manage the DNS service pods' capacity, this means that DNS won't be running when Karpenter starts-up. In this case, you will need to set the pod DNS policy to `Default` with `--set dnsPolicy=Default`. This will tell Karpenter to use the host's DNS resolution instead of the internal DNS resolution, ensuring that you don't have a dependency on the DNS service pods to run. More details on this issue can be found in the following Github issues: [#2186](https://github.com/aws/karpenter-provider-aws/issues/2186) and [#4947](https://github.com/aws/karpenter-provider-aws/issues/4947).\n{{% /alert %}}\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter creates a mapping between CloudProvider machines and CustomResources in the cluster for capacity tracking. To ensure this mapping is consistent, Karpenter utilizes the following tag keys:\n\n* `karpenter.sh/managed-by`\n* `karpenter.sh/nodepool`\n* `kubernetes.io/cluster/${CLUSTER_NAME}`\n\nBecause Karpenter takes this dependency, any user that has the ability to Create/Delete these tags on CloudProvider machines will have the ability to orchestrate Karpenter to Create/Delete CloudProvider machines as a side effect. We recommend that you [enforce tag-based IAM policies](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html) on these tags against any EC2 instance resource (`i-*`) for any users that might have [CreateTags](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTags.html)/[DeleteTags](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DeleteTags.html) permissions but should not have [RunInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html)/[TerminateInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_TerminateInstances.html) permissions.\n{{% /alert %}}\n\n### 5. Create NodePool\n\nA single Karpenter NodePool 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.\n\nCreate a default NodePool using the command below. This NodePool uses `securityGroupSelectorTerms` and `subnetSelectorTerms` to discover resources used to launch nodes. We applied the tag `karpenter.sh/discovery` in the `eksctl` command above. Depending on how these resources are shared between clusters, you may need to use different tagging schemes.\n\nThe `consolidationPolicy` set to `WhenEmptyOrUnderutilized` in the `disruption` block configures Karpenter to reduce cluster cost by removing and replacing nodes. As a result, consolidation will terminate any empty nodes on the cluster. This behavior can be disabled by setting `consolidateAfter` to `Never`, telling Karpenter that it should never consolidate nodes. Review the [NodePool API docs]({{<ref \"../../concepts/nodepools\" >}}) for more information.\n\nNote: This NodePool will create capacity as long as the sum of all created capacity is less than the specified limit.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step12-add-nodepool.sh\" language=\"bash\"%}}\n\nKarpenter is now active and ready to begin provisioning nodes.\n\n### 6. Scale up deployment\n\nThis deployment uses the [pause image](https://www.ianlewis.org/en/almighty-pause-container) and starts with zero replicas.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step13-automatic-node-provisioning.sh\" language=\"bash\"%}}\n\n### 7. Scale down deployment\n\nNow, delete the deployment. After a short amount of time, Karpenter should terminate the empty nodes due to consolidation.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step14-deprovisioning.sh\" language=\"bash\"%}}\n\n### 8. Delete Karpenter nodes manually\n\nIf you delete a node with kubectl, Karpenter will gracefully cordon, drain,\nand shutdown the corresponding instance. Under the hood, Karpenter adds a\nfinalizer to the node object, which blocks deletion until all pods are\ndrained and the instance is terminated. Keep in mind, this only works for\nnodes provisioned by Karpenter.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step16-delete-node.sh\" language=\"bash\"%}}\n\n### 9. Delete the cluster\nTo avoid additional charges, remove the demo infrastructure from your AWS account.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step17-cleanup.sh\" language=\"bash\"%}}\n\n## Monitoring with Grafana (optional)\n\nThis section describes optional ways to configure Karpenter to enhance its capabilities.\nIn 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.\nThis deployment includes two Karpenter dashboards that are automatically onboarded to Grafana. They provide a variety of visualization examples on Karpenter metrics.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step09-add-prometheus-grafana.sh\" language=\"bash\"%}}\n\nThe Grafana instance may be accessed using port forwarding.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step10-add-grafana-port-forward.sh\" language=\"bash\"%}}\n\nThe new stack has only one user, `admin`, and the password is stored in a secret. The following command will retrieve the password.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step11-grafana-get-password.sh\" language=\"bash\"%}}\n\n## Advanced Installation\n\nThe section below covers advanced installation techniques for installing Karpenter. This includes things such as running Karpenter on a cluster without public internet access or ensuring that Karpenter avoids getting throttled by other components in your cluster.\n\n### Private Clusters\n\nYou can optionally install Karpenter on a [private cluster](https://docs.aws.amazon.com/eks/latest/userguide/private-clusters.html#private-cluster-requirements) using the `eksctl` installation by setting `privateCluster.enabled` to true in your [ClusterConfig](https://eksctl.io/usage/eks-private-cluster/#eks-fully-private-cluster) and by setting `--set settings.isolatedVPC=true` when installing the `karpenter` Helm chart.\n\n```bash\nprivateCluster:\n  enabled: true\n```\n\nPrivate clusters have no outbound access to the internet. This means that in order for Karpenter to reach out to the services that it needs to access, you need to enable specific VPC private endpoints. Below shows the endpoints that you need to enable to successfully run Karpenter in a private cluster:\n\n```text\ncom.amazonaws.<region>.ec2\ncom.amazonaws.<region>.ecr.api\ncom.amazonaws.<region>.ecr.dkr\ncom.amazonaws.<region>.s3 – For pulling container images\ncom.amazonaws.<region>.sts – For IAM roles for service accounts\ncom.amazonaws.<region>.ssm - For resolving default AMIs\ncom.amazonaws.<region>.sqs - For accessing SQS if using interruption handling\ncom.amazonaws.<region>.eks - For Karpenter to discover the cluster endpoint\n```\n\nIf you do not currently have these endpoints surfaced in your VPC, you can add the endpoints by running\n\n```bash\naws ec2 create-vpc-endpoint --vpc-id ${VPC_ID} --service-name ${SERVICE_NAME} --vpc-endpoint-type Interface --subnet-ids ${SUBNET_IDS} --security-group-ids ${SECURITY_GROUP_IDS}\n```\n\n{{% alert title=\"Note\" color=\"primary\" %}}\n\nKarpenter (controller and webhook deployment) container images must be in or copied to Amazon ECR private or to another private registry accessible from inside the VPC. If these are not available from within the VPC, or from networks peered with the VPC, you will get Image pull errors when Kubernetes tries to pull these images from ECR public.\n\n{{% /alert %}}\n\n{{% alert title=\"Note\" color=\"primary\" %}}\n\nThere is currently no VPC private endpoint for the [IAM API](https://docs.aws.amazon.com/IAM/latest/APIReference/welcome.html). As a result, you cannot use the default `spec.role` field in your `EC2NodeClass`. Instead, you need to provision and manage an instance profile manually and then specify Karpenter to use this instance profile through the `spec.instanceProfile` field.\n\nYou can provision an instance profile manually and assign a Node role to it by calling the following command\n\n```bash\naws iam create-instance-profile --instance-profile-name \"KarpenterNodeInstanceProfile-${CLUSTER_NAME}\"\naws iam add-role-to-instance-profile --instance-profile-name \"KarpenterNodeInstanceProfile-${CLUSTER_NAME}\" --role-name \"KarpenterNodeRole-${CLUSTER_NAME}\"\n```\n\n{{% /alert %}}\n\n{{% alert title=\"Note\" color=\"primary\" %}}\n\nThere is currently no VPC private endpoint for the [Price List Query API](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/using-price-list-query-api.html). As a result, pricing data can go stale over time. By default, Karpenter ships a static price list that is updated when each binary is released.\n\nFailed requests for pricing data will result in the following error messages\n\n```bash\nERROR   controller.aws.pricing  updating on-demand pricing, RequestError: send request failed\ncaused by: Post \"https://api.pricing.us-east-1.amazonaws.com/\": dial tcp 52.94.231.236:443: i/o timeout; RequestError: send request failed\ncaused 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\"}\n```\n\n{{% /alert %}}\n\n### Preventing APIServer Request Throttling\n\nKubernetes uses [FlowSchemas](https://kubernetes.io/docs/concepts/cluster-administration/flow-control/#flowschema) and [PriorityLevelConfigurations](https://kubernetes.io/docs/concepts/cluster-administration/flow-control/#prioritylevelconfiguration) to map calls to the API server into buckets which determine each user agent's throttling limits.\n\nBy default, Karpenter is installed into the `kube-system` namespace, which leverages the `system-leader-election` and `kube-system-service-accounts` [FlowSchemas](https://kubernetes.io/docs/concepts/cluster-administration/flow-control/#flowschema) to map calls from the `kube-system` namespace to the `leader-election` and `workload-high` PriorityLevelConfigurations respectively. By putting Karpenter in these PriorityLevelConfigurations, we ensure that Karpenter and other critical cluster components are able to run even if other components on the cluster are throttled in other PriorityLevelConfigurations.\n\nIf you install Karpenter in a different namespace than the default `kube-system` namespace, Karpenter will not be put into these higher-priority FlowSchemas by default. Instead, you will need to create custom FlowSchemas for the namespace and service account where Karpenter is installed to ensure that requests are put into this higher PriorityLevelConfiguration.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step15-apply-flowschemas.sh\" language=\"bash\"%}}\n"
  },
  {
    "path": "website/content/en/v1.7/getting-started/getting-started-with-karpenter/cloudformation.yaml",
    "content": "AWSTemplateFormatVersion: \"2010-09-09\"\nDescription: Resources used by https://github.com/aws/karpenter\nParameters:\n  ClusterName:\n    Type: String\n    Description: \"EKS cluster name\"\nResources:\n  KarpenterNodeRole:\n    Type: \"AWS::IAM::Role\"\n    Properties:\n      RoleName: !Sub \"KarpenterNodeRole-${ClusterName}\"\n      Path: /\n      AssumeRolePolicyDocument:\n        Version: \"2012-10-17\"\n        Statement:\n          - Effect: Allow\n            Principal:\n              Service:\n                !Sub \"ec2.${AWS::URLSuffix}\"\n            Action:\n              - \"sts:AssumeRole\"\n      ManagedPolicyArns:\n        - !Sub \"arn:${AWS::Partition}:iam::aws:policy/AmazonEKS_CNI_Policy\"\n        - !Sub \"arn:${AWS::Partition}:iam::aws:policy/AmazonEKSWorkerNodePolicy\"\n        - !Sub \"arn:${AWS::Partition}:iam::aws:policy/AmazonEC2ContainerRegistryPullOnly\"\n        - !Sub \"arn:${AWS::Partition}:iam::aws:policy/AmazonSSMManagedInstanceCore\"\n  KarpenterControllerPolicy:\n    Type: AWS::IAM::ManagedPolicy\n    Properties:\n      ManagedPolicyName: !Sub \"KarpenterControllerPolicy-${ClusterName}\"\n      # The PolicyDocument must be in JSON string format because we use a StringEquals condition that uses an interpolated\n      # value in one of its key parameters which isn't natively supported by CloudFormation\n      PolicyDocument: !Sub |\n        {\n          \"Version\": \"2012-10-17\",\n          \"Statement\": [\n            {\n              \"Sid\": \"AllowScopedEC2InstanceAccessActions\",\n              \"Effect\": \"Allow\",\n              \"Resource\": [\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}::image/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}::snapshot/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:security-group/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:subnet/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:capacity-reservation/*\"\n              ],\n              \"Action\": [\n                \"ec2:RunInstances\",\n                \"ec2:CreateFleet\"\n              ]\n            },\n            {\n              \"Sid\": \"AllowScopedEC2LaunchTemplateAccessActions\",\n              \"Effect\": \"Allow\",\n              \"Resource\": \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:launch-template/*\",\n              \"Action\": [\n                \"ec2:RunInstances\",\n                \"ec2:CreateFleet\"\n              ],\n              \"Condition\": {\n                \"StringEquals\": {\n                  \"aws:ResourceTag/kubernetes.io/cluster/${ClusterName}\": \"owned\"\n                },\n                \"StringLike\": {\n                  \"aws:ResourceTag/karpenter.sh/nodepool\": \"*\"\n                }\n              }\n            },\n            {\n              \"Sid\": \"AllowScopedEC2InstanceActionsWithTags\",\n              \"Effect\": \"Allow\",\n              \"Resource\": [\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:fleet/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:instance/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:volume/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:network-interface/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:launch-template/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:spot-instances-request/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:capacity-reservation/*\"\n              ],\n              \"Action\": [\n                \"ec2:RunInstances\",\n                \"ec2:CreateFleet\",\n                \"ec2:CreateLaunchTemplate\"\n              ],\n              \"Condition\": {\n                \"StringEquals\": {\n                  \"aws:RequestTag/kubernetes.io/cluster/${ClusterName}\": \"owned\",\n                  \"aws:RequestTag/eks:eks-cluster-name\": \"${ClusterName}\"\n                },\n                \"StringLike\": {\n                  \"aws:RequestTag/karpenter.sh/nodepool\": \"*\"\n                }\n              }\n            },\n            {\n              \"Sid\": \"AllowScopedResourceCreationTagging\",\n              \"Effect\": \"Allow\",\n              \"Resource\": [\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:fleet/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:instance/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:volume/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:network-interface/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:launch-template/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:spot-instances-request/*\"\n              ],\n              \"Action\": \"ec2:CreateTags\",\n              \"Condition\": {\n                \"StringEquals\": {\n                  \"aws:RequestTag/kubernetes.io/cluster/${ClusterName}\": \"owned\",\n                  \"aws:RequestTag/eks:eks-cluster-name\": \"${ClusterName}\",\n                  \"ec2:CreateAction\": [\n                    \"RunInstances\",\n                    \"CreateFleet\",\n                    \"CreateLaunchTemplate\"\n                  ]\n                },\n                \"StringLike\": {\n                  \"aws:RequestTag/karpenter.sh/nodepool\": \"*\"\n                }\n              }\n            },\n            {\n              \"Sid\": \"AllowScopedResourceTagging\",\n              \"Effect\": \"Allow\",\n              \"Resource\": \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:instance/*\",\n              \"Action\": \"ec2:CreateTags\",\n              \"Condition\": {\n                \"StringEquals\": {\n                  \"aws:ResourceTag/kubernetes.io/cluster/${ClusterName}\": \"owned\"\n                },\n                \"StringLike\": {\n                  \"aws:ResourceTag/karpenter.sh/nodepool\": \"*\"\n                },\n                \"StringEqualsIfExists\": {\n                  \"aws:RequestTag/eks:eks-cluster-name\": \"${ClusterName}\"\n                },\n                \"ForAllValues:StringEquals\": {\n                  \"aws:TagKeys\": [\n                    \"eks:eks-cluster-name\",\n                    \"karpenter.sh/nodeclaim\",\n                    \"Name\"\n                  ]\n                }\n              }\n            },\n            {\n              \"Sid\": \"AllowScopedDeletion\",\n              \"Effect\": \"Allow\",\n              \"Resource\": [\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:instance/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:launch-template/*\"\n              ],\n              \"Action\": [\n                \"ec2:TerminateInstances\",\n                \"ec2:DeleteLaunchTemplate\"\n              ],\n              \"Condition\": {\n                \"StringEquals\": {\n                  \"aws:ResourceTag/kubernetes.io/cluster/${ClusterName}\": \"owned\"\n                },\n                \"StringLike\": {\n                  \"aws:ResourceTag/karpenter.sh/nodepool\": \"*\"\n                }\n              }\n            },\n            {\n              \"Sid\": \"AllowRegionalReadActions\",\n              \"Effect\": \"Allow\",\n              \"Resource\": \"*\",\n              \"Action\": [\n                \"ec2:DescribeCapacityReservations\",\n                \"ec2:DescribeImages\",\n                \"ec2:DescribeInstances\",\n                \"ec2:DescribeInstanceTypeOfferings\",\n                \"ec2:DescribeInstanceTypes\",\n                \"ec2:DescribeLaunchTemplates\",\n                \"ec2:DescribeSecurityGroups\",\n                \"ec2:DescribeSpotPriceHistory\",\n                \"ec2:DescribeSubnets\"\n              ],\n              \"Condition\": {\n                \"StringEquals\": {\n                  \"aws:RequestedRegion\": \"${AWS::Region}\"\n                }\n              }\n            },\n            {\n              \"Sid\": \"AllowSSMReadActions\",\n              \"Effect\": \"Allow\",\n              \"Resource\": \"arn:${AWS::Partition}:ssm:${AWS::Region}::parameter/aws/service/*\",\n              \"Action\": \"ssm:GetParameter\"\n            },\n            {\n              \"Sid\": \"AllowPricingReadActions\",\n              \"Effect\": \"Allow\",\n              \"Resource\": \"*\",\n              \"Action\": \"pricing:GetProducts\"\n            },\n            {\n              \"Sid\": \"AllowInterruptionQueueActions\",\n              \"Effect\": \"Allow\",\n              \"Resource\": \"${KarpenterInterruptionQueue.Arn}\",\n              \"Action\": [\n                \"sqs:DeleteMessage\",\n                \"sqs:GetQueueUrl\",\n                \"sqs:ReceiveMessage\"\n              ]\n            },\n            {\n              \"Sid\": \"AllowPassingInstanceRole\",\n              \"Effect\": \"Allow\",\n              \"Resource\": \"${KarpenterNodeRole.Arn}\",\n              \"Action\": \"iam:PassRole\",\n              \"Condition\": {\n                \"StringEquals\": {\n                  \"iam:PassedToService\": [\n                    \"ec2.amazonaws.com\",\n                    \"ec2.amazonaws.com.cn\"\n                  ]\n                }\n              }\n            },\n            {\n              \"Sid\": \"AllowScopedInstanceProfileCreationActions\",\n              \"Effect\": \"Allow\",\n              \"Resource\": \"arn:${AWS::Partition}:iam::${AWS::AccountId}:instance-profile/*\",\n              \"Action\": [\n                \"iam:CreateInstanceProfile\"\n              ],\n              \"Condition\": {\n                \"StringEquals\": {\n                  \"aws:RequestTag/kubernetes.io/cluster/${ClusterName}\": \"owned\",\n                  \"aws:RequestTag/eks:eks-cluster-name\": \"${ClusterName}\",\n                  \"aws:RequestTag/topology.kubernetes.io/region\": \"${AWS::Region}\"\n                },\n                \"StringLike\": {\n                  \"aws:RequestTag/karpenter.k8s.aws/ec2nodeclass\": \"*\"\n                }\n              }\n            },\n            {\n              \"Sid\": \"AllowScopedInstanceProfileTagActions\",\n              \"Effect\": \"Allow\",\n              \"Resource\": \"arn:${AWS::Partition}:iam::${AWS::AccountId}:instance-profile/*\",\n              \"Action\": [\n                \"iam:TagInstanceProfile\"\n              ],\n              \"Condition\": {\n                \"StringEquals\": {\n                  \"aws:ResourceTag/kubernetes.io/cluster/${ClusterName}\": \"owned\",\n                  \"aws:ResourceTag/topology.kubernetes.io/region\": \"${AWS::Region}\",\n                  \"aws:RequestTag/kubernetes.io/cluster/${ClusterName}\": \"owned\",\n                  \"aws:RequestTag/eks:eks-cluster-name\": \"${ClusterName}\",\n                  \"aws:RequestTag/topology.kubernetes.io/region\": \"${AWS::Region}\"\n                },\n                \"StringLike\": {\n                  \"aws:ResourceTag/karpenter.k8s.aws/ec2nodeclass\": \"*\",\n                  \"aws:RequestTag/karpenter.k8s.aws/ec2nodeclass\": \"*\"\n                }\n              }\n            },\n            {\n              \"Sid\": \"AllowScopedInstanceProfileActions\",\n              \"Effect\": \"Allow\",\n              \"Resource\": \"arn:${AWS::Partition}:iam::${AWS::AccountId}:instance-profile/*\",\n              \"Action\": [\n                \"iam:AddRoleToInstanceProfile\",\n                \"iam:RemoveRoleFromInstanceProfile\",\n                \"iam:DeleteInstanceProfile\"\n              ],\n              \"Condition\": {\n                \"StringEquals\": {\n                  \"aws:ResourceTag/kubernetes.io/cluster/${ClusterName}\": \"owned\",\n                  \"aws:ResourceTag/topology.kubernetes.io/region\": \"${AWS::Region}\"\n                },\n                \"StringLike\": {\n                  \"aws:ResourceTag/karpenter.k8s.aws/ec2nodeclass\": \"*\"\n                }\n              }\n            },\n            {\n              \"Sid\": \"AllowInstanceProfileReadActions\",\n              \"Effect\": \"Allow\",\n              \"Resource\": \"arn:${AWS::Partition}:iam::${AWS::AccountId}:instance-profile/*\",\n              \"Action\": \"iam:GetInstanceProfile\"\n            },\n            {\n              \"Sid\": \"AllowUnscopedInstanceProfileListAction\",\n              \"Effect\": \"Allow\",\n              \"Resource\": \"*\",\n              \"Action\": \"iam:ListInstanceProfiles\"\n            },\n            {\n              \"Sid\": \"AllowAPIServerEndpointDiscovery\",\n              \"Effect\": \"Allow\",\n              \"Resource\": \"arn:${AWS::Partition}:eks:${AWS::Region}:${AWS::AccountId}:cluster/${ClusterName}\",\n              \"Action\": \"eks:DescribeCluster\"\n            }\n          ]\n        }\n  KarpenterInterruptionQueue:\n    Type: AWS::SQS::Queue\n    Properties:\n      QueueName: !Sub \"${ClusterName}\"\n      MessageRetentionPeriod: 300\n      SqsManagedSseEnabled: true\n  KarpenterInterruptionQueuePolicy:\n    Type: AWS::SQS::QueuePolicy\n    Properties:\n      Queues:\n        - !Ref KarpenterInterruptionQueue\n      PolicyDocument:\n        Id: EC2InterruptionPolicy\n        Statement:\n          - Effect: Allow\n            Principal:\n              Service:\n                - events.amazonaws.com\n                - sqs.amazonaws.com\n            Action: sqs:SendMessage\n            Resource: !GetAtt KarpenterInterruptionQueue.Arn\n          - Sid: DenyHTTP\n            Effect: Deny\n            Action: sqs:*\n            Resource: !GetAtt KarpenterInterruptionQueue.Arn\n            Condition:\n              Bool:\n                aws:SecureTransport: false\n            Principal: \"*\"\n  ScheduledChangeRule:\n    Type: 'AWS::Events::Rule'\n    Properties:\n      EventPattern:\n        source:\n          - aws.health\n        detail-type:\n          - AWS Health Event\n      Targets:\n        - Id: KarpenterInterruptionQueueTarget\n          Arn: !GetAtt KarpenterInterruptionQueue.Arn\n  SpotInterruptionRule:\n    Type: 'AWS::Events::Rule'\n    Properties:\n      EventPattern:\n        source:\n          - aws.ec2\n        detail-type:\n          - EC2 Spot Instance Interruption Warning\n      Targets:\n        - Id: KarpenterInterruptionQueueTarget\n          Arn: !GetAtt KarpenterInterruptionQueue.Arn\n  RebalanceRule:\n    Type: 'AWS::Events::Rule'\n    Properties:\n      EventPattern:\n        source:\n          - aws.ec2\n        detail-type:\n          - EC2 Instance Rebalance Recommendation\n      Targets:\n        - Id: KarpenterInterruptionQueueTarget\n          Arn: !GetAtt KarpenterInterruptionQueue.Arn\n  InstanceStateChangeRule:\n    Type: 'AWS::Events::Rule'\n    Properties:\n      EventPattern:\n        source:\n          - aws.ec2\n        detail-type:\n          - EC2 Instance State-change Notification\n      Targets:\n        - Id: KarpenterInterruptionQueueTarget\n          Arn: !GetAtt KarpenterInterruptionQueue.Arn\n"
  },
  {
    "path": "website/content/en/v1.7/getting-started/getting-started-with-karpenter/grafana-values.yaml",
    "content": "datasources:\n  datasources.yaml:\n    apiVersion: 1\n    datasources:\n    - name: Prometheus\n      type: prometheus\n      version: 1\n      url: http://prometheus-server:80\n      access: proxy\ndashboardProviders:\n  dashboardproviders.yaml:\n    apiVersion: 1\n    providers:\n    - name: 'default'\n      orgId: 1\n      folder: ''\n      type: file\n      disableDeletion: false\n      editable: true\n      options:\n        path: /var/lib/grafana/dashboards/default\ndashboards:\n  default:\n    capacity-dashboard:\n      url: https://karpenter.sh/v1.7/getting-started/getting-started-with-karpenter/karpenter-capacity-dashboard.json\n    performance-dashboard:\n      url: https://karpenter.sh/v1.7/getting-started/getting-started-with-karpenter/karpenter-performance-dashboard.json\n"
  },
  {
    "path": "website/content/en/v1.7/getting-started/getting-started-with-karpenter/karpenter-capacity-dashboard.json",
    "content": "{\n    \"annotations\": {\n      \"list\": [\n        {\n          \"builtIn\": 1,\n          \"datasource\": \"-- Grafana --\",\n          \"enable\": true,\n          \"hide\": true,\n          \"iconColor\": \"rgba(0, 211, 255, 1)\",\n          \"name\": \"Annotations & Alerts\",\n          \"target\": {\n            \"limit\": 100,\n            \"matchAny\": false,\n            \"tags\": [],\n            \"type\": \"dashboard\"\n          },\n          \"type\": \"dashboard\"\n        }\n      ]\n    },\n    \"editable\": true,\n    \"fiscalYearStartMonth\": 0,\n    \"graphTooltip\": 0,\n    \"id\": 32,\n    \"links\": [],\n    \"liveNow\": true,\n    \"panels\": [\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"description\": \"\",\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisBorderShow\": false,\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"Nodes rate\",\n              \"axisPlacement\": \"auto\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 10,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"insertNulls\": false,\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"auto\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"none\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"min\": 0,\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            },\n            \"unit\": \"none\"\n          },\n          \"overrides\": [\n            {\n              \"matcher\": {\n                \"id\": \"byFrameRefID\",\n                \"options\": \"B\"\n              },\n              \"properties\": [\n                {\n                  \"id\": \"custom.axisPlacement\",\n                  \"value\": \"right\"\n                },\n                {\n                  \"id\": \"custom.axisLabel\",\n                  \"value\": \"Nodes total\"\n                }\n              ]\n            }\n          ]\n        },\n        \"gridPos\": {\n          \"h\": 5,\n          \"w\": 24,\n          \"x\": 0,\n          \"y\": 0\n        },\n        \"id\": 14,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [\n              \"lastNotNull\"\n            ],\n            \"displayMode\": \"table\",\n            \"placement\": \"right\",\n            \"showLegend\": true\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"sum(rate(karpenter_nodes_created_total{nodepool=~\\\"$nodepool\\\"}[$__rate_interval])) by(cluster,nodepool)\",\n            \"format\": \"time_series\",\n            \"legendFormat\": \"{{cluster}}\",\n            \"range\": true,\n            \"refId\": \"A\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"sum by(cluster,nodepool) (karpenter_nodes_created_total{nodepool=~\\\"$nodepool\\\"})\",\n            \"hide\": false,\n            \"instant\": false,\n            \"legendFormat\": \"__auto\",\n            \"range\": true,\n            \"refId\": \"B\"\n          }\n        ],\n        \"title\": \"Nodes Created by nodepool\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"description\": \"\",\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisBorderShow\": false,\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"Nodes rate\",\n              \"axisPlacement\": \"auto\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 10,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"insertNulls\": false,\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"auto\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"none\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"min\": 0,\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            },\n            \"unit\": \"none\"\n          },\n          \"overrides\": [\n            {\n              \"matcher\": {\n                \"id\": \"byFrameRefID\",\n                \"options\": \"B\"\n              },\n              \"properties\": [\n                {\n                  \"id\": \"custom.axisPlacement\",\n                  \"value\": \"right\"\n                },\n                {\n                  \"id\": \"custom.axisLabel\",\n                  \"value\": \"Nodes total\"\n                }\n              ]\n            }\n          ]\n        },\n        \"gridPos\": {\n          \"h\": 5,\n          \"w\": 24,\n          \"x\": 0,\n          \"y\": 5\n        },\n        \"id\": 15,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [\n              \"lastNotNull\"\n            ],\n            \"displayMode\": \"table\",\n            \"placement\": \"right\",\n            \"showLegend\": true\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"sum(rate(karpenter_nodes_terminated_total{nodepool=~\\\"$nodepool\\\"}[$__rate_interval])) by(cluster,nodepool)\",\n            \"format\": \"time_series\",\n            \"legendFormat\": \"__auto\",\n            \"range\": true,\n            \"refId\": \"A\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"sum by(cluster,nodepool) (karpenter_nodes_terminated_total{nodepool=~\\\"$nodepool\\\"})\",\n            \"hide\": false,\n            \"instant\": false,\n            \"legendFormat\": \"__auto\",\n            \"range\": true,\n            \"refId\": \"B\"\n          }\n        ],\n        \"title\": \"Nodes Terminated by nodepool\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisBorderShow\": false,\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"\",\n              \"axisPlacement\": \"auto\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 10,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"insertNulls\": false,\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"auto\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"none\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            }\n          },\n          \"overrides\": []\n        },\n        \"gridPos\": {\n          \"h\": 6,\n          \"w\": 24,\n          \"x\": 0,\n          \"y\": 10\n        },\n        \"id\": 12,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [\n              \"last\"\n            ],\n            \"displayMode\": \"table\",\n            \"placement\": \"right\",\n            \"showLegend\": true\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"exemplar\": false,\n            \"expr\": \"sum by(reason)(karpenter_voluntary_disruption_eligible_nodes)\",\n            \"legendFormat\": \"reason={{reason}}\",\n            \"range\": true,\n            \"refId\": \"A\"\n          }\n        ],\n        \"title\": \"Nodes Eligible for Disruptions by \\\"reason\\\"\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"description\": \"\",\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisBorderShow\": false,\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"Disruptions rate\",\n              \"axisPlacement\": \"auto\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 10,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"insertNulls\": false,\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"auto\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"normal\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            }\n          },\n          \"overrides\": [\n            {\n              \"matcher\": {\n                \"id\": \"byFrameRefID\",\n                \"options\": \"B\"\n              },\n              \"properties\": [\n                {\n                  \"id\": \"custom.axisPlacement\",\n                  \"value\": \"right\"\n                },\n                {\n                  \"id\": \"custom.axisLabel\",\n                  \"value\": \"Disruptions total\"\n                }\n              ]\n            }\n          ]\n        },\n        \"gridPos\": {\n          \"h\": 6,\n          \"w\": 24,\n          \"x\": 0,\n          \"y\": 16\n        },\n        \"id\": 17,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [\n              \"last\"\n            ],\n            \"displayMode\": \"table\",\n            \"placement\": \"right\",\n            \"showLegend\": true\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"exemplar\": false,\n            \"expr\": \"sum(rate(karpenter_nodeclaims_disrupted_total{nodepool=~\\\"$nodepool\\\"}[$__rate_interval])) by(cluster,nodepool)\",\n            \"legendFormat\": \"{{label_name}}\",\n            \"range\": true,\n            \"refId\": \"A\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"sum by(cluster,nodepool)(karpenter_nodeclaims_disrupted_total{nodepool=~\\\"$nodepool\\\"})\",\n            \"hide\": false,\n            \"instant\": false,\n            \"legendFormat\": \"{{label_name}}\",\n            \"range\": true,\n            \"refId\": \"B\"\n          }\n        ],\n        \"title\": \"Node Disruptions by \\\"$distribution_filter\\\"\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisBorderShow\": false,\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"Disruptions rate\",\n              \"axisPlacement\": \"left\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 10,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"insertNulls\": false,\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"auto\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"normal\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            }\n          },\n          \"overrides\": [\n            {\n              \"matcher\": {\n                \"id\": \"byFrameRefID\",\n                \"options\": \"B\"\n              },\n              \"properties\": [\n                {\n                  \"id\": \"custom.axisPlacement\",\n                  \"value\": \"right\"\n                },\n                {\n                  \"id\": \"custom.axisLabel\",\n                  \"value\": \"Disruptions total\"\n                }\n              ]\n            }\n          ]\n        },\n        \"gridPos\": {\n          \"h\": 6,\n          \"w\": 24,\n          \"x\": 0,\n          \"y\": 22\n        },\n        \"id\": 19,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [\n              \"last\"\n            ],\n            \"displayMode\": \"table\",\n            \"placement\": \"right\",\n            \"showLegend\": true\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"exemplar\": true,\n            \"expr\": \"sum(rate(karpenter_voluntary_disruption_decisions_total[$__rate_interval])) by(cluster,nodepool,consolidation_type,decision)\",\n            \"hide\": false,\n            \"legendFormat\": \"type={{consolidation_type}}, decision={{decision}}\",\n            \"range\": true,\n            \"refId\": \"A\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"sum by(consolidation_type,decision)(karpenter_voluntary_disruption_decisions_total)\",\n            \"hide\": true,\n            \"instant\": false,\n            \"legendFormat\": \"{{label_name}}\",\n            \"range\": true,\n            \"refId\": \"B\"\n          }\n        ],\n        \"title\": \"Disruption Actions performed by \\\"type\\\" and \\\"decision\\\"\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisBorderShow\": false,\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"\",\n              \"axisPlacement\": \"auto\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 10,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"insertNulls\": false,\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"auto\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"normal\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            }\n          },\n          \"overrides\": []\n        },\n        \"gridPos\": {\n          \"h\": 8,\n          \"w\": 24,\n          \"x\": 0,\n          \"y\": 28\n        },\n        \"id\": 6,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [],\n            \"displayMode\": \"table\",\n            \"placement\": \"right\",\n            \"showLegend\": true\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"sum by ($distribution_filter)(\\n    karpenter_pods_state{arch=~\\\"$arch\\\", capacity_type=~\\\"$capacity_type\\\", instance_type=~\\\"$instance_type\\\", nodepool=~\\\"$nodepool\\\"}\\n)\",\n            \"legendFormat\": \"{{label_name}}\",\n            \"range\": true,\n            \"refId\": \"A\"\n          }\n        ],\n        \"title\": \"Pod Distribution by \\\"$distribution_filter\\\"\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisBorderShow\": false,\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"\",\n              \"axisPlacement\": \"auto\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 10,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"insertNulls\": false,\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"auto\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"normal\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            }\n          },\n          \"overrides\": []\n        },\n        \"gridPos\": {\n          \"h\": 6,\n          \"w\": 24,\n          \"x\": 0,\n          \"y\": 36\n        },\n        \"id\": 20,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [\n              \"last\"\n            ],\n            \"displayMode\": \"table\",\n            \"placement\": \"right\",\n            \"showLegend\": true\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"sum by(phase)(karpenter_pods_state)\",\n            \"legendFormat\": \"{{label_name}}\",\n            \"range\": true,\n            \"refId\": \"A\"\n          }\n        ],\n        \"title\": \"Pod Phase\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"continuous-RdYlGr\"\n            },\n            \"custom\": {\n              \"align\": \"left\",\n              \"cellOptions\": {\n                \"type\": \"auto\"\n              },\n              \"inspect\": false\n            },\n            \"mappings\": [],\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            }\n          },\n          \"overrides\": [\n            {\n              \"matcher\": {\n                \"id\": \"byRegexp\",\n                \"options\": \".*Utilization$\"\n              },\n              \"properties\": [\n                {\n                  \"id\": \"custom.cellOptions\",\n                  \"value\": {\n                    \"mode\": \"gradient\",\n                    \"type\": \"gauge\"\n                  }\n                },\n                {\n                  \"id\": \"min\",\n                  \"value\": 0\n                },\n                {\n                  \"id\": \"max\",\n                  \"value\": 1\n                },\n                {\n                  \"id\": \"unit\",\n                  \"value\": \"percentunit\"\n                }\n              ]\n            },\n            {\n              \"matcher\": {\n                \"id\": \"byName\",\n                \"options\": \"Memory Provisioned\"\n              },\n              \"properties\": [\n                {\n                  \"id\": \"unit\",\n                  \"value\": \"bytes\"\n                }\n              ]\n            }\n          ]\n        },\n        \"gridPos\": {\n          \"h\": 11,\n          \"w\": 18,\n          \"x\": 0,\n          \"y\": 42\n        },\n        \"id\": 10,\n        \"options\": {\n          \"cellHeight\": \"sm\",\n          \"footer\": {\n            \"countRows\": false,\n            \"fields\": \"\",\n            \"reducer\": [\n              \"sum\"\n            ],\n            \"show\": false\n          },\n          \"showHeader\": true\n        },\n        \"pluginVersion\": \"11.1.0\",\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"exemplar\": false,\n            \"expr\": \"karpenter_nodepools_usage{resource_type=\\\"cpu\\\"} / karpenter_nodepools_limit{resource_type=\\\"cpu\\\"}\",\n            \"format\": \"table\",\n            \"instant\": true,\n            \"legendFormat\": \"CPU Limit Utilization\",\n            \"range\": false,\n            \"refId\": \"CPU Limit Utilization\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"exemplar\": false,\n            \"expr\": \"count by (nodepool)(karpenter_nodes_allocatable{nodepool!=\\\"N/A\\\",resource_type=\\\"cpu\\\"}) # Selects a single resource type to get node count\",\n            \"format\": \"table\",\n            \"hide\": false,\n            \"instant\": true,\n            \"range\": false,\n            \"refId\": \"Node Count\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"exemplar\": false,\n            \"expr\": \"karpenter_nodepools_usage{resource_type=\\\"memory\\\"} / karpenter_nodepools_limit{resource_type=\\\"memory\\\"}\",\n            \"format\": \"table\",\n            \"hide\": false,\n            \"instant\": true,\n            \"legendFormat\": \"Memory Limit Utilization\",\n            \"range\": false,\n            \"refId\": \"Memory Limit Utilization\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"exemplar\": false,\n            \"expr\": \"sum by (nodepool)(karpenter_nodes_allocatable{nodepool!=\\\"N/A\\\",resource_type=\\\"cpu\\\"})\",\n            \"format\": \"table\",\n            \"hide\": false,\n            \"instant\": true,\n            \"range\": false,\n            \"refId\": \"CPU Capacity\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"exemplar\": false,\n            \"expr\": \"sum by (nodepool)(karpenter_nodes_allocatable{nodepool!=\\\"N/A\\\",resource_type=\\\"memory\\\"})\",\n            \"format\": \"table\",\n            \"hide\": false,\n            \"instant\": true,\n            \"range\": false,\n            \"refId\": \"Memory Capacity\"\n          }\n        ],\n        \"title\": \"Nodepool Summary\",\n        \"transformations\": [\n          {\n            \"id\": \"seriesToColumns\",\n            \"options\": {\n              \"byField\": \"nodepool\"\n            }\n          },\n          {\n            \"id\": \"organize\",\n            \"options\": {\n              \"excludeByName\": {\n                \"Time\": true,\n                \"Time 1\": true,\n                \"Time 2\": true,\n                \"Time 3\": true,\n                \"Time 4\": true,\n                \"Time 5\": true,\n                \"__name__\": true,\n                \"instance\": true,\n                \"instance 1\": true,\n                \"instance 2\": true,\n                \"job\": true,\n                \"job 1\": true,\n                \"job 2\": true,\n                \"resource_type\": true,\n                \"resource_type 1\": true,\n                \"resource_type 2\": true\n              },\n              \"indexByName\": {\n                \"Time 1\": 6,\n                \"Time 2\": 7,\n                \"Time 3\": 11,\n                \"Time 4\": 15,\n                \"Time 5\": 16,\n                \"Value #CPU Capacity\": 2,\n                \"Value #CPU Limit Utilization\": 3,\n                \"Value #Memory Capacity\": 4,\n                \"Value #Memory Limit Utilization\": 5,\n                \"Value #Node Count\": 1,\n                \"instance 1\": 8,\n                \"instance 2\": 12,\n                \"job 1\": 9,\n                \"job 2\": 13,\n                \"nodepool\": 0,\n                \"resource_type 1\": 10,\n                \"resource_type 2\": 14\n              },\n              \"renameByName\": {\n                \"Time 1\": \"\",\n                \"Value\": \"CPU Utilization\",\n                \"Value #CPU Capacity\": \"CPU Provisioned\",\n                \"Value #CPU Limit Utilization\": \"CPU Limit Utilization\",\n                \"Value #CPU Utilization\": \"CPU Limit Utilization\",\n                \"Value #Memory Capacity\": \"Memory Provisioned\",\n                \"Value #Memory Limit Utilization\": \"Memory Limit Utilization\",\n                \"Value #Memory Utilization\": \"Memory Utilization\",\n                \"Value #Node Count\": \"Node Count\",\n                \"instance\": \"\",\n                \"instance 1\": \"\",\n                \"job\": \"\",\n                \"nodepool\": \"Nodepool\"\n              }\n            }\n          }\n        ],\n        \"type\": \"table\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisBorderShow\": false,\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"\",\n              \"axisPlacement\": \"auto\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 0,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"insertNulls\": false,\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"auto\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"none\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"max\": 1,\n            \"min\": 0,\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            },\n            \"unit\": \"percentunit\"\n          },\n          \"overrides\": []\n        },\n        \"gridPos\": {\n          \"h\": 11,\n          \"w\": 6,\n          \"x\": 18,\n          \"y\": 42\n        },\n        \"id\": 8,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [],\n            \"displayMode\": \"list\",\n            \"placement\": \"bottom\",\n            \"showLegend\": false\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"(count(karpenter_nodes_allocatable{arch=~\\\"$arch\\\",capacity_type=\\\"spot\\\",instance_type=~\\\"$instance_type\\\",nodepool=~\\\"$nodepool\\\",zone=~\\\"$zone\\\"}) or vector(0)) / count(karpenter_nodes_allocatable{arch=~\\\"$arch\\\",instance_type=~\\\"$instance_type\\\",nodepool=~\\\"$nodepool\\\",zone=~\\\"$zone\\\"})\",\n            \"legendFormat\": \"Percentage\",\n            \"range\": true,\n            \"refId\": \"A\"\n          }\n        ],\n        \"title\": \"Spot Node Percentage\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"continuous-RdYlGr\"\n            },\n            \"custom\": {\n              \"align\": \"left\",\n              \"cellOptions\": {\n                \"type\": \"auto\"\n              },\n              \"inspect\": false\n            },\n            \"mappings\": [],\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            }\n          },\n          \"overrides\": [\n            {\n              \"matcher\": {\n                \"id\": \"byName\",\n                \"options\": \"node_name\"\n              },\n              \"properties\": [\n                {\n                  \"id\": \"custom.width\",\n                  \"value\": 333\n                }\n              ]\n            },\n            {\n              \"matcher\": {\n                \"id\": \"byRegexp\",\n                \"options\": \".*Utilization\"\n              },\n              \"properties\": [\n                {\n                  \"id\": \"custom.cellOptions\",\n                  \"value\": {\n                    \"mode\": \"gradient\",\n                    \"type\": \"gauge\"\n                  }\n                },\n                {\n                  \"id\": \"unit\",\n                  \"value\": \"percentunit\"\n                },\n                {\n                  \"id\": \"min\",\n                  \"value\": 0\n                },\n                {\n                  \"id\": \"thresholds\",\n                  \"value\": {\n                    \"mode\": \"percentage\",\n                    \"steps\": [\n                      {\n                        \"color\": \"green\",\n                        \"value\": null\n                      },\n                      {\n                        \"color\": \"red\",\n                        \"value\": 75\n                      }\n                    ]\n                  }\n                },\n                {\n                  \"id\": \"max\",\n                  \"value\": 1\n                }\n              ]\n            },\n            {\n              \"matcher\": {\n                \"id\": \"byName\",\n                \"options\": \"Uptime\"\n              },\n              \"properties\": [\n                {\n                  \"id\": \"unit\",\n                  \"value\": \"s\"\n                },\n                {\n                  \"id\": \"decimals\",\n                  \"value\": 0\n                }\n              ]\n            }\n          ]\n        },\n        \"gridPos\": {\n          \"h\": 9,\n          \"w\": 24,\n          \"x\": 0,\n          \"y\": 53\n        },\n        \"id\": 4,\n        \"options\": {\n          \"cellHeight\": \"sm\",\n          \"footer\": {\n            \"countRows\": false,\n            \"fields\": \"\",\n            \"reducer\": [\n              \"sum\"\n            ],\n            \"show\": false\n          },\n          \"showHeader\": true,\n          \"sortBy\": [\n            {\n              \"desc\": true,\n              \"displayName\": \"Uptime\"\n            }\n          ]\n        },\n        \"pluginVersion\": \"11.1.0\",\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"exemplar\": false,\n            \"expr\": \"((karpenter_nodes_total_daemon_requests{resource_type=\\\"cpu\\\",arch=~\\\"$arch\\\",capacity_type=~\\\"$capacity_type\\\",instance_type=~\\\"$instance_type\\\",nodepool=~\\\"$nodepool\\\",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\\\",nodepool=~\\\"$nodepool\\\",zone=~\\\"$zone\\\"} or karpenter_nodes_allocatable*0)) / \\nkarpenter_nodes_allocatable{resource_type=\\\"cpu\\\",arch=~\\\"$arch\\\",capacity_type=~\\\"$capacity_type\\\",instance_type=~\\\"$instance_type\\\",nodepool=~\\\"$nodepool\\\",zone=~\\\"$zone\\\"}\",\n            \"format\": \"table\",\n            \"hide\": false,\n            \"instant\": true,\n            \"legendFormat\": \"CPU Utilization\",\n            \"range\": false,\n            \"refId\": \"CPU Utilization\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"exemplar\": false,\n            \"expr\": \"((karpenter_nodes_total_daemon_requests{resource_type=\\\"memory\\\",arch=~\\\"$arch\\\",capacity_type=~\\\"$capacity_type\\\",instance_type=~\\\"$instance_type\\\",nodepool=~\\\"$nodepool\\\",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\\\",nodepool=~\\\"$nodepool\\\",zone=~\\\"$zone\\\"} or karpenter_nodes_allocatable*0)) / \\nkarpenter_nodes_allocatable{resource_type=\\\"memory\\\",arch=~\\\"$arch\\\",capacity_type=~\\\"$capacity_type\\\",instance_type=~\\\"$instance_type\\\",nodepool=~\\\"$nodepool\\\",zone=~\\\"$zone\\\"}\",\n            \"format\": \"table\",\n            \"hide\": false,\n            \"instant\": true,\n            \"legendFormat\": \"Memory Utilization\",\n            \"range\": false,\n            \"refId\": \"Memory Utilization\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"exemplar\": false,\n            \"expr\": \"karpenter_nodes_total_daemon_requests{resource_type=\\\"pods\\\",arch=~\\\"$arch\\\",capacity_type=~\\\"$capacity_type\\\",instance_type=~\\\"$instance_type\\\",nodepool=~\\\"$nodepool\\\",zone=~\\\"$zone\\\"} + \\nkarpenter_nodes_total_pod_requests{resource_type=\\\"pods\\\",arch=~\\\"$arch\\\",capacity_type=~\\\"$capacity_type\\\",instance_type=~\\\"$instance_type\\\",nodepool=~\\\"$nodepool\\\",zone=~\\\"$zone\\\"}\",\n            \"format\": \"table\",\n            \"hide\": false,\n            \"instant\": true,\n            \"legendFormat\": \"Memory Utilization\",\n            \"range\": false,\n            \"refId\": \"Pod Count\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"exemplar\": false,\n            \"expr\": \"label_replace(\\n    sum by (node)(node_time_seconds) - sum by (node)(node_boot_time_seconds),\\n    \\\"node_name\\\", \\\"$1\\\", \\\"node\\\", \\\"(.+)\\\"\\n)\",\n            \"format\": \"table\",\n            \"hide\": false,\n            \"instant\": true,\n            \"legendFormat\": \"Uptime\",\n            \"range\": false,\n            \"refId\": \"Uptime\"\n          }\n        ],\n        \"title\": \"Node Summary\",\n        \"transformations\": [\n          {\n            \"id\": \"seriesToColumns\",\n            \"options\": {\n              \"byField\": \"node_name\"\n            }\n          },\n          {\n            \"id\": \"organize\",\n            \"options\": {\n              \"excludeByName\": {\n                \"Time\": true,\n                \"Time 1\": true,\n                \"Time 2\": true,\n                \"Time 3\": true,\n                \"Time 4\": true,\n                \"Value\": false,\n                \"Value #Pod Count\": false,\n                \"__name__\": true,\n                \"arch\": true,\n                \"arch 1\": true,\n                \"arch 2\": true,\n                \"arch 3\": true,\n                \"capacity_type 2\": true,\n                \"capacity_type 3\": true,\n                \"instance\": true,\n                \"instance 1\": true,\n                \"instance 2\": true,\n                \"instance 3\": true,\n                \"instance_category 1\": true,\n                \"instance_category 2\": true,\n                \"instance_category 3\": true,\n                \"instance_cpu\": true,\n                \"instance_cpu 1\": true,\n                \"instance_cpu 2\": true,\n                \"instance_cpu 3\": true,\n                \"instance_family\": true,\n                \"instance_family 1\": true,\n                \"instance_family 2\": true,\n                \"instance_family 3\": true,\n                \"instance_generation 1\": true,\n                \"instance_generation 2\": true,\n                \"instance_generation 3\": true,\n                \"instance_gpu_count\": true,\n                \"instance_gpu_count 1\": true,\n                \"instance_gpu_count 2\": true,\n                \"instance_gpu_count 3\": true,\n                \"instance_gpu_manufacturer\": true,\n                \"instance_gpu_manufacturer 1\": true,\n                \"instance_gpu_manufacturer 2\": true,\n                \"instance_gpu_manufacturer 3\": true,\n                \"instance_gpu_memory\": true,\n                \"instance_gpu_memory 1\": true,\n                \"instance_gpu_memory 2\": true,\n                \"instance_gpu_memory 3\": true,\n                \"instance_gpu_name\": true,\n                \"instance_gpu_name 1\": true,\n                \"instance_gpu_name 2\": true,\n                \"instance_gpu_name 3\": true,\n                \"instance_hypervisor\": true,\n                \"instance_hypervisor 1\": true,\n                \"instance_hypervisor 2\": true,\n                \"instance_hypervisor 3\": true,\n                \"instance_local_nvme 1\": true,\n                \"instance_local_nvme 2\": true,\n                \"instance_local_nvme 3\": true,\n                \"instance_memory\": true,\n                \"instance_memory 1\": true,\n                \"instance_memory 2\": true,\n                \"instance_memory 3\": true,\n                \"instance_pods\": true,\n                \"instance_pods 1\": true,\n                \"instance_pods 2\": true,\n                \"instance_pods 3\": true,\n                \"instance_size\": true,\n                \"instance_size 1\": true,\n                \"instance_size 2\": true,\n                \"instance_size 3\": true,\n                \"instance_type 1\": false,\n                \"instance_type 2\": true,\n                \"instance_type 3\": true,\n                \"job\": true,\n                \"job 1\": true,\n                \"job 2\": true,\n                \"job 3\": true,\n                \"node\": true,\n                \"nodepool 1\": false,\n                \"nodepool 2\": true,\n                \"nodepool 3\": true,\n                \"os\": true,\n                \"os 1\": true,\n                \"os 2\": true,\n                \"os 3\": true,\n                \"resource_type\": true,\n                \"resource_type 1\": true,\n                \"resource_type 2\": true,\n                \"resource_type 3\": true,\n                \"zone 1\": false,\n                \"zone 2\": true,\n                \"zone 3\": true\n              },\n              \"indexByName\": {\n                \"Time 1\": 1,\n                \"Time 2\": 25,\n                \"Time 3\": 45,\n                \"Time 4\": 65,\n                \"Value #CPU Utilization\": 10,\n                \"Value #Memory Utilization\": 11,\n                \"Value #Pod Count\": 9,\n                \"Value #Uptime\": 8,\n                \"arch 1\": 5,\n                \"arch 2\": 26,\n                \"arch 3\": 46,\n                \"capacity_type 1\": 6,\n                \"capacity_type 2\": 27,\n                \"capacity_type 3\": 47,\n                \"instance 1\": 4,\n                \"instance 2\": 28,\n                \"instance 3\": 48,\n                \"instance_cpu 1\": 12,\n                \"instance_cpu 2\": 29,\n                \"instance_cpu 3\": 49,\n                \"instance_family 1\": 13,\n                \"instance_family 2\": 30,\n                \"instance_family 3\": 50,\n                \"instance_gpu_count 1\": 14,\n                \"instance_gpu_count 2\": 31,\n                \"instance_gpu_count 3\": 51,\n                \"instance_gpu_manufacturer 1\": 15,\n                \"instance_gpu_manufacturer 2\": 32,\n                \"instance_gpu_manufacturer 3\": 52,\n                \"instance_gpu_memory 1\": 16,\n                \"instance_gpu_memory 2\": 33,\n                \"instance_gpu_memory 3\": 53,\n                \"instance_gpu_name 1\": 17,\n                \"instance_gpu_name 2\": 34,\n                \"instance_gpu_name 3\": 54,\n                \"instance_hypervisor 1\": 18,\n                \"instance_hypervisor 2\": 35,\n                \"instance_hypervisor 3\": 55,\n                \"instance_memory 1\": 19,\n                \"instance_memory 2\": 36,\n                \"instance_memory 3\": 56,\n                \"instance_pods 1\": 20,\n                \"instance_pods 2\": 37,\n                \"instance_pods 3\": 57,\n                \"instance_size 1\": 21,\n                \"instance_size 2\": 38,\n                \"instance_size 3\": 58,\n                \"instance_type 1\": 3,\n                \"instance_type 2\": 39,\n                \"instance_type 3\": 59,\n                \"job 1\": 22,\n                \"job 2\": 40,\n                \"job 3\": 60,\n                \"node\": 66,\n                \"node_name\": 0,\n                \"nodepool 1\": 2,\n                \"nodepool 2\": 42,\n                \"nodepool 3\": 62,\n                \"os 1\": 23,\n                \"os 2\": 41,\n                \"os 3\": 61,\n                \"resource_type 1\": 24,\n                \"resource_type 2\": 43,\n                \"resource_type 3\": 63,\n                \"zone 1\": 7,\n                \"zone 2\": 44,\n                \"zone 3\": 64\n              },\n              \"renameByName\": {\n                \"Time\": \"\",\n                \"Time 1\": \"\",\n                \"Value\": \"CPU Utilization\",\n                \"Value #Allocatable\": \"\",\n                \"Value #CPU Utilization\": \"CPU Utilization\",\n                \"Value #Memory Utilization\": \"Memory Utilization\",\n                \"Value #Pod CPU\": \"\",\n                \"Value #Pod Count\": \"Pods\",\n                \"Value #Uptime\": \"Uptime\",\n                \"arch\": \"Architecture\",\n                \"arch 1\": \"Arch\",\n                \"capacity_type\": \"Capacity Type\",\n                \"capacity_type 1\": \"Capacity Type\",\n                \"instance 1\": \"Instance\",\n                \"instance_cpu 1\": \"vCPU\",\n                \"instance_type\": \"Instance Type\",\n                \"instance_type 1\": \"Instance Type\",\n                \"node_name\": \"Node Name\",\n                \"nodepool 1\": \"Nodepool\",\n                \"zone 1\": \"Zone\"\n              }\n            }\n          }\n        ],\n        \"type\": \"table\"\n      }\n    ],\n    \"refresh\": \"10s\",\n    \"schemaVersion\": 39,\n    \"tags\": [],\n    \"templating\": {\n      \"list\": [\n        {\n          \"current\": {\n            \"selected\": false,\n            \"text\": \"Prometheus\",\n            \"value\": \"prometheus\"\n          },\n          \"hide\": 0,\n          \"includeAll\": false,\n          \"label\": \"Data Source\",\n          \"multi\": false,\n          \"name\": \"datasource\",\n          \"options\": [],\n          \"query\": \"prometheus\",\n          \"refresh\": 1,\n          \"regex\": \"\",\n          \"skipUrlSync\": false,\n          \"type\": \"datasource\"\n        },\n        {\n          \"current\": {\n            \"selected\": true,\n            \"text\": [\n              \"All\"\n            ],\n            \"value\": [\n              \"$__all\"\n            ]\n          },\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"definition\": \"label_values(karpenter_nodes_allocatable, nodepool)\",\n          \"hide\": 0,\n          \"includeAll\": true,\n          \"multi\": true,\n          \"name\": \"nodepool\",\n          \"options\": [],\n          \"query\": {\n            \"query\": \"label_values(karpenter_nodes_allocatable, nodepool)\",\n            \"refId\": \"StandardVariableQuery\"\n          },\n          \"refresh\": 2,\n          \"regex\": \"\",\n          \"skipUrlSync\": false,\n          \"sort\": 1,\n          \"type\": \"query\"\n        },\n        {\n          \"current\": {\n            \"selected\": true,\n            \"text\": [\n              \"All\"\n            ],\n            \"value\": [\n              \"$__all\"\n            ]\n          },\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"definition\": \"label_values(karpenter_nodes_allocatable, zone)\",\n          \"hide\": 0,\n          \"includeAll\": true,\n          \"multi\": true,\n          \"name\": \"zone\",\n          \"options\": [],\n          \"query\": {\n            \"query\": \"label_values(karpenter_nodes_allocatable, zone)\",\n            \"refId\": \"StandardVariableQuery\"\n          },\n          \"refresh\": 2,\n          \"regex\": \"\",\n          \"skipUrlSync\": false,\n          \"sort\": 1,\n          \"type\": \"query\"\n        },\n        {\n          \"current\": {\n            \"selected\": true,\n            \"text\": [\n              \"All\"\n            ],\n            \"value\": [\n              \"$__all\"\n            ]\n          },\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"definition\": \"label_values(karpenter_nodes_allocatable, arch)\",\n          \"hide\": 0,\n          \"includeAll\": true,\n          \"multi\": true,\n          \"name\": \"arch\",\n          \"options\": [],\n          \"query\": {\n            \"query\": \"label_values(karpenter_nodes_allocatable, arch)\",\n            \"refId\": \"StandardVariableQuery\"\n          },\n          \"refresh\": 2,\n          \"regex\": \"\",\n          \"skipUrlSync\": false,\n          \"sort\": 1,\n          \"type\": \"query\"\n        },\n        {\n          \"current\": {\n            \"selected\": true,\n            \"text\": [\n              \"All\"\n            ],\n            \"value\": [\n              \"$__all\"\n            ]\n          },\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"definition\": \"label_values(karpenter_nodes_allocatable, capacity_type)\",\n          \"hide\": 0,\n          \"includeAll\": true,\n          \"multi\": true,\n          \"name\": \"capacity_type\",\n          \"options\": [],\n          \"query\": {\n            \"query\": \"label_values(karpenter_nodes_allocatable, capacity_type)\",\n            \"refId\": \"StandardVariableQuery\"\n          },\n          \"refresh\": 2,\n          \"regex\": \"\",\n          \"skipUrlSync\": false,\n          \"sort\": 1,\n          \"type\": \"query\"\n        },\n        {\n          \"current\": {\n            \"selected\": true,\n            \"text\": [\n              \"All\"\n            ],\n            \"value\": [\n              \"$__all\"\n            ]\n          },\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"definition\": \"label_values(karpenter_nodes_allocatable, instance_type)\",\n          \"hide\": 0,\n          \"includeAll\": true,\n          \"multi\": true,\n          \"name\": \"instance_type\",\n          \"options\": [],\n          \"query\": {\n            \"query\": \"label_values(karpenter_nodes_allocatable, instance_type)\",\n            \"refId\": \"StandardVariableQuery\"\n          },\n          \"refresh\": 2,\n          \"regex\": \"\",\n          \"skipUrlSync\": false,\n          \"sort\": 1,\n          \"type\": \"query\"\n        },\n        {\n          \"current\": {\n            \"selected\": true,\n            \"text\": \"nodepool\",\n            \"value\": \"nodepool\"\n          },\n          \"hide\": 0,\n          \"includeAll\": false,\n          \"multi\": false,\n          \"name\": \"distribution_filter\",\n          \"options\": [\n            {\n              \"selected\": false,\n              \"text\": \"arch\",\n              \"value\": \"arch\"\n            },\n            {\n              \"selected\": false,\n              \"text\": \"capacity_type\",\n              \"value\": \"capacity_type\"\n            },\n            {\n              \"selected\": false,\n              \"text\": \"instance_type\",\n              \"value\": \"instance_type\"\n            },\n            {\n              \"selected\": false,\n              \"text\": \"namespace\",\n              \"value\": \"namespace\"\n            },\n            {\n              \"selected\": false,\n              \"text\": \"node\",\n              \"value\": \"node\"\n            },\n            {\n              \"selected\": true,\n              \"text\": \"nodepool\",\n              \"value\": \"nodepool\"\n            },\n            {\n              \"selected\": false,\n              \"text\": \"zone\",\n              \"value\": \"zone\"\n            }\n          ],\n          \"query\": \"arch,capacity_type,instance_type,namespace,node,nodepool,zone\",\n          \"queryValue\": \"\",\n          \"skipUrlSync\": false,\n          \"type\": \"custom\"\n        }\n      ]\n    },\n    \"time\": {\n      \"from\": \"now-3h\",\n      \"to\": \"now\"\n    },\n    \"timepicker\": {},\n    \"timezone\": \"\",\n    \"title\": \"Karpenter Capacity v1\",\n    \"uid\": \"ta8I9Q67Z\",\n    \"version\": 7,\n    \"weekStart\": \"\"\n  }\n"
  },
  {
    "path": "website/content/en/v1.7/getting-started/getting-started-with-karpenter/karpenter-controllers-allocation.json",
    "content": "{\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": {\n          \"type\": \"datasource\",\n          \"uid\": \"grafana\"\n        },\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"target\": {\n          \"limit\": 100,\n          \"matchAny\": false,\n          \"tags\": [],\n          \"type\": \"dashboard\"\n        },\n        \"type\": \"dashboard\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"gnetId\": null,\n  \"graphTooltip\": 0,\n  \"id\": null,\n  \"iteration\": 1636732403925,\n  \"links\": [],\n  \"panels\": [\n    {\n      \"datasource\": null,\n      \"gridPos\": {\n        \"h\": 4,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"id\": 5,\n      \"options\": {\n        \"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).\",\n        \"mode\": \"markdown\"\n      },\n      \"pluginVersion\": \"8.1.6\",\n      \"targets\": [\n        {\n          \"datasource\": {},\n          \"queryType\": \"randomWalk\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"timeFrom\": null,\n      \"timeShift\": null,\n      \"title\": \"About this dashboard\",\n      \"type\": \"text\"\n    },\n    {\n      \"cards\": {\n        \"cardPadding\": null,\n        \"cardRound\": null\n      },\n      \"color\": {\n        \"cardColor\": \"#b4ff00\",\n        \"colorScale\": \"sqrt\",\n        \"colorScheme\": \"interpolateMagma\",\n        \"exponent\": 0.5,\n        \"min\": null,\n        \"mode\": \"spectrum\"\n      },\n      \"dataFormat\": \"tsbuckets\",\n      \"datasource\": {\n        \"uid\": \"${datasource}\"\n      },\n      \"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.\",\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 4\n      },\n      \"heatmap\": {},\n      \"hideZeroBuckets\": false,\n      \"highlightCards\": true,\n      \"id\": 2,\n      \"legend\": {\n        \"show\": true\n      },\n      \"maxDataPoints\": 25,\n      \"pluginVersion\": \"7.5.0\",\n      \"reverseYBuckets\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"uid\": \"${datasource}\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"sum(increase(karpenter_allocation_controller_bind_duration_seconds_bucket[$__interval])) by (le)\",\n          \"format\": \"heatmap\",\n          \"instant\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{le}}\",\n          \"queryType\": \"randomWalk\",\n          \"refId\": \"All Binds\"\n        }\n      ],\n      \"title\": \"Bind duration\",\n      \"tooltip\": {\n        \"show\": true,\n        \"showHistogram\": false\n      },\n      \"type\": \"heatmap\",\n      \"xAxis\": {\n        \"show\": true\n      },\n      \"xBucketNumber\": null,\n      \"xBucketSize\": null,\n      \"yAxis\": {\n        \"decimals\": 0,\n        \"format\": \"s\",\n        \"logBase\": 1,\n        \"max\": null,\n        \"min\": \"0\",\n        \"show\": true,\n        \"splitFactor\": null\n      },\n      \"yBucketBound\": \"auto\",\n      \"yBucketNumber\": null,\n      \"yBucketSize\": null\n    },\n    {\n      \"cards\": {\n        \"cardPadding\": null,\n        \"cardRound\": null\n      },\n      \"color\": {\n        \"cardColor\": \"#b4ff00\",\n        \"colorScale\": \"sqrt\",\n        \"colorScheme\": \"interpolateMagma\",\n        \"exponent\": 0.5,\n        \"mode\": \"spectrum\"\n      },\n      \"dataFormat\": \"tsbuckets\",\n      \"datasource\": {\n        \"uid\": \"${datasource}\"\n      },\n      \"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.\",\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 12\n      },\n      \"heatmap\": {},\n      \"hideZeroBuckets\": false,\n      \"highlightCards\": true,\n      \"id\": 7,\n      \"legend\": {\n        \"show\": true\n      },\n      \"maxDataPoints\": 25,\n      \"pluginVersion\": \"7.5.0\",\n      \"reverseYBuckets\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"uid\": \"${datasource}\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"sum(increase(karpenter_allocation_controller_binpacking_duration_seconds_bucket[$__interval])) by (le)\",\n          \"format\": \"heatmap\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{le}}\",\n          \"queryType\": \"randomWalk\",\n          \"refId\": \"Binpacking Duration\"\n        }\n      ],\n      \"title\": \"Binpack duration\",\n      \"tooltip\": {\n        \"show\": true,\n        \"showHistogram\": false\n      },\n      \"type\": \"heatmap\",\n      \"xAxis\": {\n        \"show\": true\n      },\n      \"xBucketNumber\": null,\n      \"xBucketSize\": null,\n      \"yAxis\": {\n        \"decimals\": 0,\n        \"format\": \"s\",\n        \"logBase\": 1,\n        \"max\": null,\n        \"min\": \"0\",\n        \"show\": true,\n        \"splitFactor\": null\n      },\n      \"yBucketBound\": \"auto\",\n      \"yBucketNumber\": null,\n      \"yBucketSize\": null\n    },\n    {\n      \"cards\": {\n        \"cardPadding\": null,\n        \"cardRound\": null\n      },\n      \"color\": {\n        \"cardColor\": \"#b4ff00\",\n        \"colorScale\": \"sqrt\",\n        \"colorScheme\": \"interpolateInferno\",\n        \"exponent\": 0.5,\n        \"mode\": \"spectrum\"\n      },\n      \"dataFormat\": \"tsbuckets\",\n      \"datasource\": {\n        \"uid\": \"${datasource}\"\n      },\n      \"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.\",\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 20\n      },\n      \"heatmap\": {},\n      \"hideZeroBuckets\": false,\n      \"highlightCards\": true,\n      \"id\": 9,\n      \"legend\": {\n        \"show\": true\n      },\n      \"maxDataPoints\": 25,\n      \"pluginVersion\": \"7.5.0\",\n      \"reverseYBuckets\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"uid\": \"${datasource}\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"sum(increase(karpenter_allocation_controller_scheduling_duration_seconds_bucket{provisioner=\\\"$provisioner\\\"}[$__interval])) by (le)\",\n          \"format\": \"heatmap\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{le}}\",\n          \"queryType\": \"randomWalk\",\n          \"refId\": \"Scheduling Duration\"\n        }\n      ],\n      \"title\": \"Scheduling duration\",\n      \"tooltip\": {\n        \"show\": true,\n        \"showHistogram\": false\n      },\n      \"type\": \"heatmap\",\n      \"xAxis\": {\n        \"show\": true\n      },\n      \"xBucketNumber\": null,\n      \"xBucketSize\": null,\n      \"yAxis\": {\n        \"decimals\": 0,\n        \"format\": \"s\",\n        \"logBase\": 1,\n        \"max\": null,\n        \"min\": null,\n        \"show\": true,\n        \"splitFactor\": null\n      },\n      \"yBucketBound\": \"auto\",\n      \"yBucketNumber\": null,\n      \"yBucketSize\": null\n    }\n  ],\n  \"refresh\": \"1m\",\n  \"schemaVersion\": 30,\n  \"style\": \"dark\",\n  \"tags\": [],\n  \"templating\": {\n    \"list\": [\n      {\n        \"current\": {\n          \"selected\": false,\n          \"text\": \"Prometheus\",\n          \"value\": \"Prometheus\"\n        },\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Data Source\",\n        \"multi\": false,\n        \"name\": \"datasource\",\n        \"options\": [],\n        \"query\": \"prometheus\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"type\": \"datasource\"\n      },\n      {\n        \"allValue\": null,\n        \"current\": {},\n        \"datasource\": {\n          \"uid\": \"${datasource}\"\n        },\n        \"definition\": \"label_values(karpenter_allocation_controller_scheduling_duration_seconds_bucket, provisioner)\",\n        \"description\": \"Karpenter provisioner\",\n        \"error\": null,\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Provisioner\",\n        \"multi\": false,\n        \"name\": \"provisioner\",\n        \"options\": [],\n        \"query\": {\n          \"query\": \"label_values(karpenter_allocation_controller_scheduling_duration_seconds_bucket, provisioner)\",\n          \"refId\": \"StandardVariableQuery\"\n        },\n        \"refresh\": 2,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"sort\": 1,\n        \"type\": \"query\"\n      }\n    ]\n  },\n  \"time\": {\n    \"from\": \"now-3h\",\n    \"to\": \"now\"\n  },\n  \"timepicker\": {},\n  \"timezone\": \"\",\n  \"title\": \"Controllers / Allocation\",\n  \"uid\": \"fs47R-Dnz\",\n  \"version\": 9\n}\n"
  },
  {
    "path": "website/content/en/v1.7/getting-started/getting-started-with-karpenter/karpenter-controllers.json",
    "content": "{\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": {\n          \"type\": \"datasource\",\n          \"uid\": \"grafana\"\n        },\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"target\": {\n          \"limit\": 100,\n          \"matchAny\": false,\n          \"tags\": [],\n          \"type\": \"dashboard\"\n        },\n        \"type\": \"dashboard\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"gnetId\": null,\n  \"graphTooltip\": 0,\n  \"id\": null,\n  \"iteration\": 1636733515850,\n  \"links\": [],\n  \"panels\": [\n    {\n      \"datasource\": null,\n      \"description\": \"\",\n      \"gridPos\": {\n        \"h\": 4,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"id\": 99,\n      \"options\": {\n        \"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).\",\n        \"mode\": \"markdown\"\n      },\n      \"pluginVersion\": \"8.1.6\",\n      \"title\": \"About this dashboard\",\n      \"type\": \"text\"\n    },\n    {\n      \"aliasColors\": {\n        \"items\": \"light-blue\"\n      },\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": {\n        \"uid\": \"${datasource}\"\n      },\n      \"description\": \"\",\n      \"fill\": 1,\n      \"fillGradient\": 2,\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 8,\n        \"x\": 0,\n        \"y\": 4\n      },\n      \"hiddenSeries\": false,\n      \"id\": 14,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": true,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"options\": {\n        \"alertThreshold\": true\n      },\n      \"percentage\": false,\n      \"pluginVersion\": \"8.1.6\",\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"uid\": \"${datasource}\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"workqueue_depth{name=\\\"$controller\\\"}\",\n          \"interval\": \"\",\n          \"legendFormat\": \"items\",\n          \"queryType\": \"randomWalk\",\n          \"refId\": \"Work Queue Depth\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeFrom\": null,\n      \"timeRegions\": [],\n      \"timeShift\": null,\n      \"title\": \"Items in Work Queue\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"graph\",\n      \"xaxis\": {\n        \"buckets\": null,\n        \"mode\": \"time\",\n        \"name\": null,\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"decimals\": 0,\n          \"format\": \"short\",\n          \"label\": \"\",\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"label\": null,\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": null,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false,\n        \"alignLevel\": null\n      }\n    },\n    {\n      \"aliasColors\": {\n        \"error\": \"red\",\n        \"requeue\": \"orange\",\n        \"requeue_after\": \"semi-dark-purple\",\n        \"success\": \"green\"\n      },\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": {\n        \"uid\": \"${datasource}\"\n      },\n      \"description\": \"The rate of completed reconciliations per minute broken out by result status.\",\n      \"fill\": 1,\n      \"fillGradient\": 1,\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 8,\n        \"x\": 8,\n        \"y\": 4\n      },\n      \"hiddenSeries\": false,\n      \"id\": 76,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": true,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"options\": {\n        \"alertThreshold\": true\n      },\n      \"percentage\": false,\n      \"pluginVersion\": \"8.1.6\",\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"uid\": \"${datasource}\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"rate(controller_runtime_reconcile_total{controller=\\\"$controller\\\"}[$trailing]) * 60\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{result}}\",\n          \"queryType\": \"randomWalk\",\n          \"refId\": \"Reconciliations per minute\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeFrom\": null,\n      \"timeRegions\": [],\n      \"timeShift\": null,\n      \"title\": \"Reconciliations per minute\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"graph\",\n      \"xaxis\": {\n        \"buckets\": null,\n        \"mode\": \"time\",\n        \"name\": null,\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"$$hashKey\": \"object:566\",\n          \"format\": \"short\",\n          \"label\": null,\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": true\n        },\n        {\n          \"$$hashKey\": \"object:567\",\n          \"format\": \"short\",\n          \"label\": null,\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": null,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false,\n        \"alignLevel\": null\n      }\n    },\n    {\n      \"cards\": {\n        \"cardPadding\": null,\n        \"cardRound\": null\n      },\n      \"color\": {\n        \"cardColor\": \"#b4ff00\",\n        \"colorScale\": \"sqrt\",\n        \"colorScheme\": \"interpolateMagma\",\n        \"exponent\": 0.5,\n        \"mode\": \"spectrum\"\n      },\n      \"dataFormat\": \"tsbuckets\",\n      \"datasource\": {\n        \"uid\": \"${datasource}\"\n      },\n      \"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.\",\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 8,\n        \"x\": 16,\n        \"y\": 4\n      },\n      \"heatmap\": {},\n      \"hideZeroBuckets\": false,\n      \"highlightCards\": true,\n      \"id\": 126,\n      \"legend\": {\n        \"show\": true\n      },\n      \"maxDataPoints\": 25,\n      \"pluginVersion\": \"8.1.6\",\n      \"reverseYBuckets\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"uid\": \"${datasource}\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"sum(increase(controller_runtime_reconcile_time_seconds_bucket{controller=\\\"$controller\\\"}[$__interval])) by (le)\",\n          \"format\": \"heatmap\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{le}}\",\n          \"queryType\": \"randomWalk\",\n          \"refId\": \"p100\"\n        }\n      ],\n      \"timeFrom\": null,\n      \"timeShift\": null,\n      \"title\": \"Reconciliation duration\",\n      \"tooltip\": {\n        \"show\": true,\n        \"showHistogram\": false\n      },\n      \"type\": \"heatmap\",\n      \"xAxis\": {\n        \"show\": true\n      },\n      \"xBucketNumber\": null,\n      \"xBucketSize\": null,\n      \"yAxis\": {\n        \"decimals\": 0,\n        \"format\": \"s\",\n        \"logBase\": 1,\n        \"max\": null,\n        \"min\": \"0\",\n        \"show\": true,\n        \"splitFactor\": null\n      },\n      \"yBucketBound\": \"auto\",\n      \"yBucketNumber\": null,\n      \"yBucketSize\": null\n    }\n  ],\n  \"refresh\": \"1m\",\n  \"schemaVersion\": 31,\n  \"style\": \"dark\",\n  \"tags\": [],\n  \"templating\": {\n    \"list\": [\n      {\n        \"current\": {},\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Data Source\",\n        \"multi\": false,\n        \"name\": \"datasource\",\n        \"options\": [],\n        \"query\": \"prometheus\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"type\": \"datasource\"\n      },\n      {\n        \"allValue\": \"\",\n        \"current\": {},\n        \"datasource\": {\n          \"uid\": \"${datasource}\"\n        },\n        \"definition\": \"label_values(controller_runtime_reconcile_errors_total, controller)\",\n        \"description\": \"Kubernetes controller\",\n        \"error\": null,\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Controller\",\n        \"multi\": false,\n        \"name\": \"controller\",\n        \"options\": [],\n        \"query\": {\n          \"query\": \"label_values(controller_runtime_reconcile_errors_total, controller)\",\n          \"refId\": \"StandardVariableQuery\"\n        },\n        \"refresh\": 2,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"selected\": true,\n          \"text\": \"10m\",\n          \"value\": \"10m\"\n        },\n        \"description\": \"Trailing aggregation window\",\n        \"error\": null,\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Trailing\",\n        \"multi\": false,\n        \"name\": \"trailing\",\n        \"options\": [\n          {\n            \"selected\": false,\n            \"text\": \"30s\",\n            \"value\": \"30s\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"1m\",\n            \"value\": \"1m\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"5m\",\n            \"value\": \"5m\"\n          },\n          {\n            \"selected\": true,\n            \"text\": \"10m\",\n            \"value\": \"10m\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"30m\",\n            \"value\": \"30m\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"1h\",\n            \"value\": \"1h\"\n          }\n        ],\n        \"query\": \"30s,1m,5m,10m,30m,1h\",\n        \"queryValue\": \"\",\n        \"skipUrlSync\": false,\n        \"type\": \"custom\"\n      }\n    ]\n  },\n  \"time\": {\n    \"from\": \"now-1h\",\n    \"to\": \"now\"\n  },\n  \"timepicker\": {},\n  \"timezone\": \"\",\n  \"title\": \"Controllers\",\n  \"uid\": \"-Yw9ShDnz\",\n  \"version\": 15\n}\n"
  },
  {
    "path": "website/content/en/v1.7/getting-started/getting-started-with-karpenter/karpenter-performance-dashboard.json",
    "content": "{\n    \"annotations\": {\n      \"list\": [\n        {\n          \"builtIn\": 1,\n          \"datasource\": \"-- Grafana --\",\n          \"enable\": true,\n          \"hide\": true,\n          \"iconColor\": \"rgba(0, 211, 255, 1)\",\n          \"name\": \"Annotations & Alerts\",\n          \"target\": {\n            \"limit\": 100,\n            \"matchAny\": false,\n            \"tags\": [],\n            \"type\": \"dashboard\"\n          },\n          \"type\": \"dashboard\"\n        }\n      ]\n    },\n    \"editable\": true,\n    \"fiscalYearStartMonth\": 0,\n    \"graphTooltip\": 0,\n    \"id\": 33,\n    \"links\": [],\n    \"liveNow\": true,\n    \"panels\": [\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisBorderShow\": false,\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"\",\n              \"axisPlacement\": \"auto\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 0,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"insertNulls\": false,\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"never\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"none\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            },\n            \"unit\": \"s\"\n          },\n          \"overrides\": []\n        },\n        \"gridPos\": {\n          \"h\": 9,\n          \"w\": 24,\n          \"x\": 0,\n          \"y\": 0\n        },\n        \"id\": 4,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [\n              \"max\"\n            ],\n            \"displayMode\": \"table\",\n            \"placement\": \"right\",\n            \"showLegend\": true\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"max(karpenter_nodes_termination_duration_seconds{quantile=\\\"0\\\"})\",\n            \"legendFormat\": \"Min\",\n            \"range\": true,\n            \"refId\": \"A\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"max(karpenter_nodes_termination_duration_seconds{quantile=\\\"0.5\\\"})\",\n            \"hide\": false,\n            \"legendFormat\": \"P50\",\n            \"range\": true,\n            \"refId\": \"B\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"max(karpenter_nodes_termination_duration_seconds{quantile=\\\"0.9\\\"})\",\n            \"hide\": false,\n            \"legendFormat\": \"P90\",\n            \"range\": true,\n            \"refId\": \"C\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"max(karpenter_nodes_termination_duration_seconds{quantile=\\\"0.99\\\"})\",\n            \"hide\": false,\n            \"legendFormat\": \"P99\",\n            \"range\": true,\n            \"refId\": \"D\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"max(karpenter_nodes_termination_duration_seconds{quantile=\\\"1\\\"})\",\n            \"hide\": false,\n            \"legendFormat\": \"Max\",\n            \"range\": true,\n            \"refId\": \"E\"\n          }\n        ],\n        \"title\": \"Node Termination Latency\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisBorderShow\": false,\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"\",\n              \"axisPlacement\": \"auto\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 10,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"insertNulls\": false,\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"never\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"none\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"min\": 0,\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            },\n            \"unit\": \"s\"\n          },\n          \"overrides\": []\n        },\n        \"gridPos\": {\n          \"h\": 8,\n          \"w\": 24,\n          \"x\": 0,\n          \"y\": 9\n        },\n        \"id\": 2,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [\n              \"max\"\n            ],\n            \"displayMode\": \"table\",\n            \"placement\": \"right\",\n            \"showLegend\": true\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"max(karpenter_pods_startup_duration_seconds{quantile=\\\"0\\\"})\",\n            \"format\": \"time_series\",\n            \"legendFormat\": \"Min\",\n            \"range\": true,\n            \"refId\": \"Minimum\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"max(karpenter_pods_startup_duration_seconds{quantile=\\\"0.5\\\"})\",\n            \"hide\": false,\n            \"legendFormat\": \"P50\",\n            \"range\": true,\n            \"refId\": \"Median\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"max(karpenter_pods_startup_duration_seconds{quantile=\\\"0.9\\\"})\",\n            \"hide\": false,\n            \"legendFormat\": \"P90\",\n            \"range\": true,\n            \"refId\": \"P90\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"max(karpenter_pods_startup_duration_seconds{quantile=\\\"0.99\\\"})\",\n            \"hide\": false,\n            \"legendFormat\": \"P99\",\n            \"range\": true,\n            \"refId\": \"P99\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"max(karpenter_pods_startup_duration_seconds{quantile=\\\"1\\\"})\",\n            \"hide\": false,\n            \"legendFormat\": \"Max\",\n            \"range\": true,\n            \"refId\": \"Maximum\"\n          }\n        ],\n        \"title\": \"Pod Startup Latency\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisBorderShow\": false,\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"\",\n              \"axisPlacement\": \"auto\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 10,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"insertNulls\": false,\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"never\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"none\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            },\n            \"unit\": \"s\"\n          },\n          \"overrides\": []\n        },\n        \"gridPos\": {\n          \"h\": 8,\n          \"w\": 13,\n          \"x\": 0,\n          \"y\": 17\n        },\n        \"id\": 6,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [],\n            \"displayMode\": \"list\",\n            \"placement\": \"bottom\",\n            \"showLegend\": true\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"histogram_quantile(0, rate(controller_runtime_reconcile_time_seconds_bucket{controller=\\\"$controller\\\"}[10m]))\",\n            \"hide\": false,\n            \"legendFormat\": \"Min\",\n            \"range\": true,\n            \"refId\": \"Minimum\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"histogram_quantile(0.5, rate(controller_runtime_reconcile_time_seconds_bucket{controller=\\\"$controller\\\"}[10m]))\",\n            \"legendFormat\": \"P50\",\n            \"range\": true,\n            \"refId\": \"Median\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"histogram_quantile(0.9, rate(controller_runtime_reconcile_time_seconds_bucket{controller=\\\"$controller\\\"}[10m]))\",\n            \"hide\": false,\n            \"legendFormat\": \"P90\",\n            \"range\": true,\n            \"refId\": \"P90\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"histogram_quantile(0.99, rate(controller_runtime_reconcile_time_seconds_bucket{controller=\\\"$controller\\\"}[10m]))\",\n            \"hide\": false,\n            \"legendFormat\": \"P99\",\n            \"range\": true,\n            \"refId\": \"P99\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"histogram_quantile(1, rate(controller_runtime_reconcile_time_seconds_bucket{controller=\\\"$controller\\\"}[10m]))\",\n            \"hide\": false,\n            \"legendFormat\": \"Max\",\n            \"range\": true,\n            \"refId\": \"Maximum\"\n          }\n        ],\n        \"title\": \"Controller Reconciliation Latency [$controller]\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"thresholds\"\n            },\n            \"mappings\": [],\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            },\n            \"unit\": \"reqps\"\n          },\n          \"overrides\": []\n        },\n        \"gridPos\": {\n          \"h\": 8,\n          \"w\": 11,\n          \"x\": 13,\n          \"y\": 17\n        },\n        \"id\": 8,\n        \"options\": {\n          \"displayMode\": \"gradient\",\n          \"maxVizHeight\": 300,\n          \"minVizHeight\": 10,\n          \"minVizWidth\": 0,\n          \"namePlacement\": \"auto\",\n          \"orientation\": \"horizontal\",\n          \"reduceOptions\": {\n            \"calcs\": [\n              \"lastNotNull\"\n            ],\n            \"fields\": \"\",\n            \"values\": false\n          },\n          \"showUnfilled\": true,\n          \"sizing\": \"auto\",\n          \"valueMode\": \"color\"\n        },\n        \"pluginVersion\": \"11.1.0\",\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"sum(rate(controller_runtime_reconcile_total{job=\\\"karpenter\\\"}[10m])) by (controller)\",\n            \"legendFormat\": \"{{controller}}\",\n            \"range\": true,\n            \"refId\": \"A\"\n          }\n        ],\n        \"title\": \"Controller Reconciliation Rate\",\n        \"type\": \"bargauge\"\n      }\n    ],\n    \"refresh\": \"5s\",\n    \"schemaVersion\": 39,\n    \"tags\": [],\n    \"templating\": {\n      \"list\": [\n        {\n          \"current\": {\n            \"selected\": false,\n            \"text\": \"Prometheus\",\n            \"value\": \"prometheus\"\n          },\n          \"hide\": 0,\n          \"includeAll\": false,\n          \"label\": \"Data Source\",\n          \"multi\": false,\n          \"name\": \"datasource\",\n          \"options\": [],\n          \"query\": \"prometheus\",\n          \"refresh\": 1,\n          \"regex\": \"\",\n          \"skipUrlSync\": false,\n          \"type\": \"datasource\"\n        },\n        {\n          \"current\": {\n            \"selected\": false,\n            \"text\": \"disruption\",\n            \"value\": \"disruption\"\n          },\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"definition\": \"label_values(controller_runtime_reconcile_time_seconds_count{job=\\\"karpenter\\\"}, controller)\",\n          \"hide\": 0,\n          \"includeAll\": false,\n          \"multi\": false,\n          \"name\": \"controller\",\n          \"options\": [],\n          \"query\": {\n            \"query\": \"label_values(controller_runtime_reconcile_time_seconds_count{job=\\\"karpenter\\\"}, controller)\",\n            \"refId\": \"StandardVariableQuery\"\n          },\n          \"refresh\": 2,\n          \"regex\": \"\",\n          \"skipUrlSync\": false,\n          \"sort\": 0,\n          \"type\": \"query\"\n        }\n      ]\n    },\n    \"time\": {\n      \"from\": \"now-3h\",\n      \"to\": \"now\"\n    },\n    \"timepicker\": {},\n    \"timezone\": \"\",\n    \"title\": \"Karpenter Performance v1\",\n    \"uid\": \"fdusq1f2alerke\",\n    \"version\": 3,\n    \"weekStart\": \"\"\n  }\n"
  },
  {
    "path": "website/content/en/v1.7/getting-started/getting-started-with-karpenter/prometheus-values.yaml",
    "content": "alertmanager:\n  persistentVolume:\n    enabled: false\n\nserver:\n  fullnameOverride: prometheus-server\n  persistentVolume:\n    enabled: false\n\nextraScrapeConfigs: |\n    - job_name: karpenter\n      kubernetes_sd_configs:\n      - role: endpoints\n        namespaces:\n          names:\n          - $KARPENTER_NAMESPACE\n      relabel_configs:\n      - source_labels:\n        - __meta_kubernetes_endpoints_name\n        - __meta_kubernetes_endpoint_port_name\n        action: keep\n        regex: karpenter;http-metrics\n"
  },
  {
    "path": "website/content/en/v1.7/getting-started/getting-started-with-karpenter/scripts/step01-config.sh",
    "content": "export AWS_PARTITION=\"aws\" # if you are not using standard partitions, you may need to configure to aws-cn / aws-us-gov\nexport CLUSTER_NAME=\"${USER}-karpenter-demo\"\nexport AWS_DEFAULT_REGION=\"us-west-2\"\nexport AWS_ACCOUNT_ID=\"$(aws sts get-caller-identity --query Account --output text)\"\nexport TEMPOUT=\"$(mktemp)\"\nexport ALIAS_VERSION=\"$(aws ssm get-parameter --name \"/aws/service/eks/optimized-ami/${K8S_VERSION}/amazon-linux-2023/x86_64/standard/recommended/image_id\" --query Parameter.Value | xargs aws ec2 describe-images --query 'Images[0].Name' --image-ids | sed -r 's/^.*(v[[:digit:]]+).*$/\\1/')\"\n"
  },
  {
    "path": "website/content/en/v1.7/getting-started/getting-started-with-karpenter/scripts/step02-create-cluster-fargate.sh",
    "content": "curl -fsSL https://raw.githubusercontent.com/aws/karpenter-provider-aws/v\"${KARPENTER_VERSION}\"/website/content/en/preview/getting-started/getting-started-with-karpenter/cloudformation.yaml  > $TEMPOUT \\\n&& aws cloudformation deploy \\\n  --stack-name \"Karpenter-${CLUSTER_NAME}\" \\\n  --template-file \"${TEMPOUT}\" \\\n  --capabilities CAPABILITY_NAMED_IAM \\\n  --parameter-overrides \"ClusterName=${CLUSTER_NAME}\"\n\neksctl create cluster -f - <<EOF\n---\napiVersion: eksctl.io/v1alpha5\nkind: ClusterConfig\nmetadata:\n  name: ${CLUSTER_NAME}\n  region: ${AWS_DEFAULT_REGION}\n  version: \"${K8S_VERSION}\"\n  tags:\n    karpenter.sh/discovery: ${CLUSTER_NAME}\n\niam:\n  withOIDC: true\n  serviceAccounts:\n  - metadata:\n      name: karpenter\n      namespace: \"${KARPENTER_NAMESPACE}\"\n    roleName: ${CLUSTER_NAME}-karpenter\n    attachPolicyARNs:\n    - arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:policy/KarpenterControllerPolicy-${CLUSTER_NAME}\n    roleOnly: true\n\niamIdentityMappings:\n- arn: \"arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/KarpenterNodeRole-${CLUSTER_NAME}\"\n  username: system:node:{{EC2PrivateDNSName}}\n  groups:\n  - system:bootstrappers\n  - system:nodes\n  ## If you intend to run Windows workloads, the kube-proxy group should be specified.\n  # For more information, see https://github.com/aws/karpenter/issues/5099.\n  # - eks:kube-proxy-windows\n\nfargateProfiles:\n- name: karpenter\n  selectors:\n  - namespace: \"${KARPENTER_NAMESPACE}\"\nEOF\n\nexport CLUSTER_ENDPOINT=\"$(aws eks describe-cluster --name ${CLUSTER_NAME} --query \"cluster.endpoint\" --output text)\"\nexport KARPENTER_IAM_ROLE_ARN=\"arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/${CLUSTER_NAME}-karpenter\"\n\necho $CLUSTER_ENDPOINT $KARPENTER_IAM_ROLE_ARN\n"
  },
  {
    "path": "website/content/en/v1.7/getting-started/getting-started-with-karpenter/scripts/step02-create-cluster.sh",
    "content": "curl -fsSL https://raw.githubusercontent.com/aws/karpenter-provider-aws/v\"${KARPENTER_VERSION}\"/website/content/en/preview/getting-started/getting-started-with-karpenter/cloudformation.yaml  > \"${TEMPOUT}\" \\\n&& aws cloudformation deploy \\\n  --stack-name \"Karpenter-${CLUSTER_NAME}\" \\\n  --template-file \"${TEMPOUT}\" \\\n  --capabilities CAPABILITY_NAMED_IAM \\\n  --parameter-overrides \"ClusterName=${CLUSTER_NAME}\"\n\neksctl create cluster -f - <<EOF\n---\napiVersion: eksctl.io/v1alpha5\nkind: ClusterConfig\nmetadata:\n  name: ${CLUSTER_NAME}\n  region: ${AWS_DEFAULT_REGION}\n  version: \"${K8S_VERSION}\"\n  tags:\n    karpenter.sh/discovery: ${CLUSTER_NAME}\n\niam:\n  withOIDC: true\n  podIdentityAssociations:\n  - namespace: \"${KARPENTER_NAMESPACE}\"\n    serviceAccountName: karpenter\n    roleName: ${CLUSTER_NAME}-karpenter\n    permissionPolicyARNs:\n    - arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:policy/KarpenterControllerPolicy-${CLUSTER_NAME}\n\niamIdentityMappings:\n- arn: \"arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/KarpenterNodeRole-${CLUSTER_NAME}\"\n  username: system:node:{{EC2PrivateDNSName}}\n  groups:\n  - system:bootstrappers\n  - system:nodes\n  ## If you intend to run Windows workloads, the kube-proxy group should be specified.\n  # For more information, see https://github.com/aws/karpenter/issues/5099.\n  # - eks:kube-proxy-windows\n\nmanagedNodeGroups:\n- instanceType: m5.large\n  amiFamily: AmazonLinux2023\n  name: ${CLUSTER_NAME}-ng\n  desiredCapacity: 2\n  minSize: 1\n  maxSize: 10\n\naddons:\n- name: eks-pod-identity-agent\nEOF\n\nexport CLUSTER_ENDPOINT=\"$(aws eks describe-cluster --name \"${CLUSTER_NAME}\" --query \"cluster.endpoint\" --output text)\"\nexport KARPENTER_IAM_ROLE_ARN=\"arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/${CLUSTER_NAME}-karpenter\"\n\necho \"${CLUSTER_ENDPOINT} ${KARPENTER_IAM_ROLE_ARN}\"\n"
  },
  {
    "path": "website/content/en/v1.7/getting-started/getting-started-with-karpenter/scripts/step03-iam-cloud-formation.sh",
    "content": "TEMPOUT=\"$(mktemp)\"\n\ncurl -fsSL https://raw.githubusercontent.com/aws/karpenter-provider-aws/v\"${KARPENTER_VERSION}\"/website/content/en/preview/getting-started/getting-started-with-karpenter/cloudformation.yaml  > \"${TEMPOUT}\" \\\n&& aws cloudformation deploy \\\n  --stack-name \"Karpenter-${CLUSTER_NAME}\" \\\n  --template-file \"${TEMPOUT}\" \\\n  --capabilities CAPABILITY_NAMED_IAM \\\n  --parameter-overrides \"ClusterName=${CLUSTER_NAME}\"\n"
  },
  {
    "path": "website/content/en/v1.7/getting-started/getting-started-with-karpenter/scripts/step04-grant-access.sh",
    "content": "eksctl create iamidentitymapping \\\n  --username system:node:{{EC2PrivateDNSName}} \\\n  --cluster \"${CLUSTER_NAME}\" \\\n  --arn \"arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/KarpenterNodeRole-${CLUSTER_NAME}\" \\\n  --group system:bootstrappers \\\n  --group system:nodes\n"
  },
  {
    "path": "website/content/en/v1.7/getting-started/getting-started-with-karpenter/scripts/step05-controller-iam.sh",
    "content": "eksctl create iamserviceaccount \\\n  --cluster \"${CLUSTER_NAME}\" --name karpenter --namespace \"${KARPENTER_NAMESPACE}\" \\\n  --role-name \"${CLUSTER_NAME}-karpenter\" \\\n  --attach-policy-arn \"arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:policy/KarpenterControllerPolicy-${CLUSTER_NAME}\" \\\n  --role-only \\\n  --approve\n\nexport KARPENTER_IAM_ROLE_ARN=\"arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/${CLUSTER_NAME}-karpenter\"\n"
  },
  {
    "path": "website/content/en/v1.7/getting-started/getting-started-with-karpenter/scripts/step06-add-spot-role.sh",
    "content": "aws iam create-service-linked-role --aws-service-name spot.amazonaws.com || true\n# If the role has already been successfully created, you will see:\n# An error occurred (InvalidInput) when calling the CreateServiceLinkedRole operation: Service role name AWSServiceRoleForEC2Spot has been taken in this account, please try a different suffix.\n"
  },
  {
    "path": "website/content/en/v1.7/getting-started/getting-started-with-karpenter/scripts/step08-apply-helm-chart-fargate.sh",
    "content": "# Logout of helm registry to perform an unauthenticated pull against the public ECR\nhelm registry logout public.ecr.aws\n\nhelm upgrade --install karpenter oci://public.ecr.aws/karpenter/karpenter --version \"${KARPENTER_VERSION}\" --namespace \"${KARPENTER_NAMESPACE}\" --create-namespace \\\n  --set \"settings.clusterName=${CLUSTER_NAME}\" \\\n  --set \"settings.interruptionQueue=${CLUSTER_NAME}\" \\\n  --set controller.resources.requests.cpu=1 \\\n  --set controller.resources.requests.memory=1Gi \\\n  --set controller.resources.limits.cpu=1 \\\n  --set controller.resources.limits.memory=1Gi \\\n  --set serviceAccount.annotations.\"eks\\.amazonaws\\.com/role-arn\"=\"arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/${CLUSTER_NAME}-karpenter\" \\\n  --wait\n"
  },
  {
    "path": "website/content/en/v1.7/getting-started/getting-started-with-karpenter/scripts/step08-apply-helm-chart.sh",
    "content": "# Logout of helm registry to perform an unauthenticated pull against the public ECR\nhelm registry logout public.ecr.aws\n\nhelm upgrade --install karpenter oci://public.ecr.aws/karpenter/karpenter --version \"${KARPENTER_VERSION}\" --namespace \"${KARPENTER_NAMESPACE}\" --create-namespace \\\n  --set \"settings.clusterName=${CLUSTER_NAME}\" \\\n  --set \"settings.interruptionQueue=${CLUSTER_NAME}\" \\\n  --set controller.resources.requests.cpu=1 \\\n  --set controller.resources.requests.memory=1Gi \\\n  --set controller.resources.limits.cpu=1 \\\n  --set controller.resources.limits.memory=1Gi \\\n  --wait\n"
  },
  {
    "path": "website/content/en/v1.7/getting-started/getting-started-with-karpenter/scripts/step09-add-prometheus-grafana.sh",
    "content": "helm repo add grafana-charts https://grafana.github.io/helm-charts\nhelm repo add prometheus-community https://prometheus-community.github.io/helm-charts\nhelm repo update\n\nkubectl create namespace monitoring\n\ncurl -fsSL https://raw.githubusercontent.com/aws/karpenter-provider-aws/v\"${KARPENTER_VERSION}\"/website/content/en/preview/getting-started/getting-started-with-karpenter/prometheus-values.yaml | envsubst | tee prometheus-values.yaml\nhelm install --namespace monitoring prometheus prometheus-community/prometheus --values prometheus-values.yaml\n\ncurl -fsSL https://raw.githubusercontent.com/aws/karpenter-provider-aws/v\"${KARPENTER_VERSION}\"/website/content/en/preview/getting-started/getting-started-with-karpenter/grafana-values.yaml | tee grafana-values.yaml\nhelm install --namespace monitoring grafana grafana-charts/grafana --values grafana-values.yaml\n"
  },
  {
    "path": "website/content/en/v1.7/getting-started/getting-started-with-karpenter/scripts/step10-add-grafana-port-forward.sh",
    "content": "kubectl port-forward --namespace monitoring svc/grafana 3000:80\n"
  },
  {
    "path": "website/content/en/v1.7/getting-started/getting-started-with-karpenter/scripts/step11-grafana-get-password.sh",
    "content": "kubectl get secret --namespace monitoring grafana -o jsonpath=\"{.data.admin-password}\" | base64 --decode\n"
  },
  {
    "path": "website/content/en/v1.7/getting-started/getting-started-with-karpenter/scripts/step12-add-nodepool.sh",
    "content": "cat <<EOF | envsubst | kubectl apply -f -\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\nspec:\n  template:\n    spec:\n      requirements:\n        - key: kubernetes.io/arch\n          operator: In\n          values: [\"amd64\"]\n        - key: kubernetes.io/os\n          operator: In\n          values: [\"linux\"]\n        - key: karpenter.sh/capacity-type\n          operator: In\n          values: [\"on-demand\"]\n        - key: karpenter.k8s.aws/instance-category\n          operator: In\n          values: [\"c\", \"m\", \"r\"]\n        - key: karpenter.k8s.aws/instance-generation\n          operator: Gt\n          values: [\"2\"]\n      nodeClassRef:\n        group: karpenter.k8s.aws\n        kind: EC2NodeClass\n        name: default\n      expireAfter: 720h # 30 * 24h = 720h\n  limits:\n    cpu: 1000\n  disruption:\n    consolidationPolicy: WhenEmptyOrUnderutilized\n    consolidateAfter: 1m\n---\napiVersion: karpenter.k8s.aws/v1\nkind: EC2NodeClass\nmetadata:\n  name: default\nspec:\n  role: \"KarpenterNodeRole-${CLUSTER_NAME}\" # replace with your cluster name\n  amiSelectorTerms:\n    - alias: \"al2023@${ALIAS_VERSION}\"\n  subnetSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\" # replace with your cluster name\n  securityGroupSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\" # replace with your cluster name\nEOF\n"
  },
  {
    "path": "website/content/en/v1.7/getting-started/getting-started-with-karpenter/scripts/step13-automatic-node-provisioning.sh",
    "content": "cat <<EOF | kubectl apply -f -\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: inflate\nspec:\n  replicas: 0\n  selector:\n    matchLabels:\n      app: inflate\n  template:\n    metadata:\n      labels:\n        app: inflate\n    spec:\n      terminationGracePeriodSeconds: 0\n      securityContext:\n        runAsUser: 1000\n        runAsGroup: 3000\n        fsGroup: 2000\n      containers:\n      - name: inflate\n        image: public.ecr.aws/eks-distro/kubernetes/pause:3.7\n        resources:\n          requests:\n            cpu: 1\n        securityContext:\n          allowPrivilegeEscalation: false\nEOF\n\nkubectl scale deployment inflate --replicas 5\nkubectl logs -f -n \"${KARPENTER_NAMESPACE}\" -l app.kubernetes.io/name=karpenter -c controller\n"
  },
  {
    "path": "website/content/en/v1.7/getting-started/getting-started-with-karpenter/scripts/step14-deprovisioning.sh",
    "content": "kubectl delete deployment inflate\nkubectl logs -f -n \"${KARPENTER_NAMESPACE}\" -l app.kubernetes.io/name=karpenter -c controller\n"
  },
  {
    "path": "website/content/en/v1.7/getting-started/getting-started-with-karpenter/scripts/step15-apply-flowschemas.sh",
    "content": "cat <<EOF | envsubst | kubectl apply -f -\n---\napiVersion: flowcontrol.apiserver.k8s.io/v1\nkind: FlowSchema\nmetadata:\n  name: karpenter-leader-election\nspec:\n  distinguisherMethod:\n    type: ByUser\n  matchingPrecedence: 200\n  priorityLevelConfiguration:\n    name: leader-election\n  rules:\n  - resourceRules:\n    - apiGroups:\n      - coordination.k8s.io\n      namespaces:\n      - '*'\n      resources:\n      - leases\n      verbs:\n      - get\n      - create\n      - update\n    subjects:\n    - kind: ServiceAccount\n      serviceAccount:\n        name: karpenter\n        namespace: \"${KARPENTER_NAMESPACE}\"\n\n---\napiVersion: flowcontrol.apiserver.k8s.io/v1\nkind: FlowSchema\nmetadata:\n  name: karpenter-workload\nspec:\n  distinguisherMethod:\n    type: ByUser\n  matchingPrecedence: 1000\n  priorityLevelConfiguration:\n    name: workload-high\n  rules:\n  - nonResourceRules:\n    - nonResourceURLs:\n      - '*'\n      verbs:\n      - '*'\n    resourceRules:\n    - apiGroups:\n      - '*'\n      clusterScope: true\n      namespaces:\n      - '*'\n      resources:\n      - '*'\n      verbs:\n      - '*'\n    subjects:\n    - kind: ServiceAccount\n      serviceAccount:\n        name: karpenter\n        namespace: \"${KARPENTER_NAMESPACE}\"\nEOF\n"
  },
  {
    "path": "website/content/en/v1.7/getting-started/getting-started-with-karpenter/scripts/step16-delete-node.sh",
    "content": "kubectl delete node \"${NODE_NAME}\"\n"
  },
  {
    "path": "website/content/en/v1.7/getting-started/getting-started-with-karpenter/scripts/step17-cleanup.sh",
    "content": "helm uninstall karpenter --namespace \"${KARPENTER_NAMESPACE}\"\naws cloudformation delete-stack --stack-name \"Karpenter-${CLUSTER_NAME}\"\naws ec2 describe-launch-templates --filters \"Name=tag:karpenter.k8s.aws/cluster,Values=${CLUSTER_NAME}\" |\n    jq -r \".LaunchTemplates[].LaunchTemplateName\" |\n    xargs -I{} aws ec2 delete-launch-template --launch-template-name {}\neksctl delete cluster --name \"${CLUSTER_NAME}\"\n"
  },
  {
    "path": "website/content/en/v1.7/getting-started/migrating-from-cas/_index.md",
    "content": "---\ntitle: \"Migrating from Cluster Autoscaler\"\nlinkTitle: \"Migrating from Cluster Autoscaler\"\nweight: 10\ndescription: >\n  Migrate to Karpenter from Cluster Autoscaler\n---\n\nThis guide will show you how to switch from the [Kubernetes Cluster Autoscaler](https://github.com/kubernetes/autoscaler) to Karpenter for automatic node provisioning.\nWe will make the following assumptions in this guide\n\n* You will use an existing EKS cluster\n* You will use existing VPC and subnets\n* You will use existing security groups\n* Your nodes are part of one or more node groups\n* Your workloads have pod disruption budgets that adhere to [EKS best practices](https://aws.github.io/aws-eks-best-practices/karpenter/)\n* Your cluster has an [OIDC provider](https://docs.aws.amazon.com/eks/latest/userguide/enable-iam-roles-for-service-accounts.html) for service accounts\n\nThis guide will also assume you have the `aws` CLI installed.\nYou can also perform many of these steps in the console, but we will use the command line for simplicity.\n\nSet a variable for your cluster name.\n\n```bash\nKARPENTER_NAMESPACE=kube-system\nCLUSTER_NAME=<your cluster name>\n```\n\nSet other variables from your cluster configuration.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step01-env.sh\" language=\"bash\" %}}\n\nUse that information to create our IAM roles, inline policy, and trust relationship.\n\n## Create IAM roles\n\nTo get started with our migration we first need to create two new IAM roles for nodes provisioned with Karpenter and the Karpenter controller.\n\nTo create the Karpenter node role we will use the following policy and commands.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step02-node-iam.sh\" language=\"bash\" %}}\n\nNow attach the required policies to the role\n\n{{% script file=\"./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step03-node-policies.sh\" language=\"bash\" %}}\n\nNow we need to create an IAM role that the Karpenter controller will use to provision new instances.\nThe 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.\n\nIf you have another option for using IAM credentials with workloads (e.g. [kube2iam](https://github.com/jtblin/kube2iam)) your steps will be different.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step04-controller-iam.sh\" language=\"bash\" %}}\n\n## Add tags to subnets and security groups\n\nWe need to add tags to our nodegroup subnets so Karpenter will know which subnets to use.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step05-tag-subnets.sh\" language=\"bash\" %}}\n\nAdd tags to our security groups.\nThis command only tags the security groups for the first nodegroup in the cluster.\nIf you have multiple nodegroups or multiple security groups you will need to decide which one Karpenter should use.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step06-tag-security-groups.sh\" language=\"bash\" %}}\n\n## Update aws-auth ConfigMap\n\nWe need to allow nodes that are using the node IAM role we just created to join the cluster.\nTo do that we have to modify the `aws-auth` ConfigMap in the cluster.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step07-edit-aws-auth.sh\" language=\"bash\" %}}\n\nYou will need to add a section to the mapRoles that looks something like this.\nReplace the `${AWS_PARTITION}` variable with the account partition, `${AWS_ACCOUNT_ID}` variable with your account ID, and `${CLUSTER_NAME}` variable with the cluster name, but do not replace the `{{EC2PrivateDNSName}}`.\n\n```yaml\n- groups:\n  - system:bootstrappers\n  - system:nodes\n  ## If you intend to run Windows workloads, the kube-proxy group should be specified.\n  # For more information, see https://github.com/aws/karpenter/issues/5099.\n  # - eks:kube-proxy-windows\n  rolearn: arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/KarpenterNodeRole-${CLUSTER_NAME}\n  username: system:node:{{EC2PrivateDNSName}}\n```\n\nThe full aws-auth configmap should have two groups.\nOne for your Karpenter node role and one for your existing node group.\n\n## Deploy Karpenter\n\nFirst set the Karpenter release you want to deploy.\n\n```bash\nexport KARPENTER_VERSION=\"1.7.4\"\n```\n\nWe can now generate a full Karpenter deployment yaml from the Helm chart.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step08-generate-chart.sh\" language=\"bash\" %}}\n\nModify the following lines in the karpenter.yaml file.\n\n### Set node affinity\n\nEdit the karpenter.yaml file and find the karpenter deployment affinity rules.\nModify the affinity so karpenter will run on one of the existing node group nodes.\n\nThe rules should look something like this.\nModify the value to match your `$NODEGROUP`, one node group per line.\n\n```yaml\naffinity:\n  nodeAffinity:\n    requiredDuringSchedulingIgnoredDuringExecution:\n      nodeSelectorTerms:\n      - matchExpressions:\n        - key: karpenter.sh/nodepool\n          operator: DoesNotExist\n        - key: eks.amazonaws.com/nodegroup\n          operator: In\n          values:\n          - ${NODEGROUP}\n  podAntiAffinity:\n    requiredDuringSchedulingIgnoredDuringExecution:\n      - topologyKey: \"kubernetes.io/hostname\"\n```\n\nNow that our deployment is ready we can create the karpenter namespace, create the NodePool CRD, and then deploy the rest of the karpenter resources.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step09-deploy.sh\" language=\"bash\" %}}\n\n## Create default NodePool\n\nWe need to create a default NodePool so Karpenter knows what types of nodes we want for unscheduled workloads. You can refer to some of the [example NodePool](https://github.com/aws/karpenter/tree/v1.7.4/examples/v1) for specific needs.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step10-create-nodepool.sh\" language=\"bash\" %}}\n\n## Set nodeAffinity for critical workloads (optional)\n\nYou may also want to set a nodeAffinity for other critical cluster workloads.\n\nSome examples are\n\n* coredns\n* metric-server\n\nYou can edit them with `kubectl edit deploy ...` and you should add node affinity for your static node group instances.\nModify the value to match your `$NODEGROUP`, one node group per line.\n\n```yaml\naffinity:\n  nodeAffinity:\n    requiredDuringSchedulingIgnoredDuringExecution:\n      nodeSelectorTerms:\n      - matchExpressions:\n        - key: eks.amazonaws.com/nodegroup\n          operator: In\n          values:\n          - ${NODEGROUP}\n```\n\n## Remove CAS\n\nNow that karpenter is running we can disable the cluster autoscaler.\nTo do that we will scale the number of replicas to zero.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step11-scale-cas.sh\" language=\"bash\" %}}\n\nTo 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.\n\n> 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.**\n\nIf you have a single multi-AZ node group, we suggest a minimum of 2 instances.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step12-scale-single-ng.sh\" language=\"bash\" %}}\n\nOr, if you have multiple single-AZ node groups, we suggest a minimum of 1 instance each.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step12-scale-multiple-ng.sh\" language=\"bash\" %}}\n\n{{% alert title=\"Note\" color=\"warning\" %}}\nIf 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.\n{{% /alert %}}\n\n## Verify Karpenter\n\nAs nodegroup nodes are drained you can verify that Karpenter is creating nodes for your workloads.\n\n```bash\nkubectl logs -f -n \"${KARPENTER_NAMESPACE}\" -l app.kubernetes.io/name=karpenter -c controller\n```\n\nYou should also see new nodes created in your cluster as the old nodes are removed\n\n```bash\nkubectl get nodes\n```\n"
  },
  {
    "path": "website/content/en/v1.7/getting-started/migrating-from-cas/scripts/step01-env.sh",
    "content": "AWS_PARTITION=\"aws\" # if you are not using standard partitions, you may need to configure to aws-cn / aws-us-gov\nAWS_REGION=\"$(aws configure list | grep region | tr -s \" \" | cut -d\" \" -f3)\"\nOIDC_ENDPOINT=\"$(aws eks describe-cluster --name \"${CLUSTER_NAME}\" \\\n    --query \"cluster.identity.oidc.issuer\" --output text)\"\nAWS_ACCOUNT_ID=$(aws sts get-caller-identity --query 'Account' \\\n    --output text)\nK8S_VERSION=$(aws eks describe-cluster --name \"${CLUSTER_NAME}\" --query \"cluster.version\" --output text)\nALIAS_VERSION=\"$(aws ssm get-parameter --name \"/aws/service/eks/optimized-ami/${K8S_VERSION}/amazon-linux-2023/x86_64/standard/recommended/image_id\" --query Parameter.Value | xargs aws ec2 describe-images --query 'Images[0].Name' --image-ids | sed -r 's/^.*(v[[:digit:]]+).*$/\\1/')\"\n"
  },
  {
    "path": "website/content/en/v1.7/getting-started/migrating-from-cas/scripts/step02-node-iam.sh",
    "content": "echo '{\n    \"Version\": \"2012-10-17\",\n    \"Statement\": [\n        {\n            \"Effect\": \"Allow\",\n            \"Principal\": {\n                \"Service\": \"ec2.amazonaws.com\"\n            },\n            \"Action\": \"sts:AssumeRole\"\n        }\n    ]\n}' > node-trust-policy.json\n\naws iam create-role --role-name \"KarpenterNodeRole-${CLUSTER_NAME}\" \\\n    --assume-role-policy-document file://node-trust-policy.json\n"
  },
  {
    "path": "website/content/en/v1.7/getting-started/migrating-from-cas/scripts/step03-node-policies.sh",
    "content": "aws iam attach-role-policy --role-name \"KarpenterNodeRole-${CLUSTER_NAME}\" \\\n    --policy-arn \"arn:${AWS_PARTITION}:iam::aws:policy/AmazonEKSWorkerNodePolicy\"\n\naws iam attach-role-policy --role-name \"KarpenterNodeRole-${CLUSTER_NAME}\" \\\n    --policy-arn \"arn:${AWS_PARTITION}:iam::aws:policy/AmazonEKS_CNI_Policy\"\n\naws iam attach-role-policy --role-name \"KarpenterNodeRole-${CLUSTER_NAME}\" \\\n    --policy-arn \"arn:${AWS_PARTITION}:iam::aws:policy/AmazonEC2ContainerRegistryPullOnly\"\n\naws iam attach-role-policy --role-name \"KarpenterNodeRole-${CLUSTER_NAME}\" \\\n    --policy-arn \"arn:${AWS_PARTITION}:iam::aws:policy/AmazonSSMManagedInstanceCore\"\n"
  },
  {
    "path": "website/content/en/v1.7/getting-started/migrating-from-cas/scripts/step04-controller-iam.sh",
    "content": "cat << EOF > controller-trust-policy.json\n{\n    \"Version\": \"2012-10-17\",\n    \"Statement\": [\n        {\n            \"Effect\": \"Allow\",\n            \"Principal\": {\n                \"Federated\": \"arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:oidc-provider/${OIDC_ENDPOINT#*//}\"\n            },\n            \"Action\": \"sts:AssumeRoleWithWebIdentity\",\n            \"Condition\": {\n                \"StringEquals\": {\n                    \"${OIDC_ENDPOINT#*//}:aud\": \"sts.amazonaws.com\",\n                    \"${OIDC_ENDPOINT#*//}:sub\": \"system:serviceaccount:${KARPENTER_NAMESPACE}:karpenter\"\n                }\n            }\n        }\n    ]\n}\nEOF\n\naws iam create-role --role-name \"KarpenterControllerRole-${CLUSTER_NAME}\" \\\n    --assume-role-policy-document file://controller-trust-policy.json\n\ncat << EOF > controller-policy.json\n{\n    \"Statement\": [\n        {\n            \"Action\": [\n                \"ssm:GetParameter\",\n                \"ec2:DescribeImages\",\n                \"ec2:RunInstances\",\n                \"ec2:DescribeSubnets\",\n                \"ec2:DescribeSecurityGroups\",\n                \"ec2:DescribeLaunchTemplates\",\n                \"ec2:DescribeInstances\",\n                \"ec2:DescribeInstanceTypes\",\n                \"ec2:DescribeInstanceTypeOfferings\",\n                \"ec2:DeleteLaunchTemplate\",\n                \"ec2:CreateTags\",\n                \"ec2:CreateLaunchTemplate\",\n                \"ec2:CreateFleet\",\n                \"ec2:DescribeSpotPriceHistory\",\n                \"pricing:GetProducts\"\n            ],\n            \"Effect\": \"Allow\",\n            \"Resource\": \"*\",\n            \"Sid\": \"Karpenter\"\n        },\n        {\n            \"Action\": \"ec2:TerminateInstances\",\n            \"Condition\": {\n                \"StringLike\": {\n                    \"ec2:ResourceTag/karpenter.sh/nodepool\": \"*\"\n                }\n            },\n            \"Effect\": \"Allow\",\n            \"Resource\": \"*\",\n            \"Sid\": \"ConditionalEC2Termination\"\n        },\n        {\n            \"Effect\": \"Allow\",\n            \"Action\": \"iam:PassRole\",\n            \"Resource\": \"arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/KarpenterNodeRole-${CLUSTER_NAME}\",\n            \"Sid\": \"PassNodeIAMRole\"\n        },\n        {\n            \"Effect\": \"Allow\",\n            \"Action\": \"eks:DescribeCluster\",\n            \"Resource\": \"arn:${AWS_PARTITION}:eks:${AWS_REGION}:${AWS_ACCOUNT_ID}:cluster/${CLUSTER_NAME}\",\n            \"Sid\": \"EKSClusterEndpointLookup\"\n        },\n        {\n            \"Sid\": \"AllowScopedInstanceProfileCreationActions\",\n            \"Effect\": \"Allow\",\n            \"Resource\": \"*\",\n            \"Action\": [\n                \"iam:CreateInstanceProfile\"\n            ],\n            \"Condition\": {\n                \"StringEquals\": {\n                    \"aws:RequestTag/kubernetes.io/cluster/${CLUSTER_NAME}\": \"owned\",\n                    \"aws:RequestTag/topology.kubernetes.io/region\": \"${AWS_REGION}\"\n                },\n                \"StringLike\": {\n                    \"aws:RequestTag/karpenter.k8s.aws/ec2nodeclass\": \"*\"\n                }\n            }\n        },\n        {\n            \"Sid\": \"AllowScopedInstanceProfileTagActions\",\n            \"Effect\": \"Allow\",\n            \"Resource\": \"*\",\n            \"Action\": [\n                \"iam:TagInstanceProfile\"\n            ],\n            \"Condition\": {\n                \"StringEquals\": {\n                    \"aws:ResourceTag/kubernetes.io/cluster/${CLUSTER_NAME}\": \"owned\",\n                    \"aws:ResourceTag/topology.kubernetes.io/region\": \"${AWS_REGION}\",\n                    \"aws:RequestTag/kubernetes.io/cluster/${CLUSTER_NAME}\": \"owned\",\n                    \"aws:RequestTag/topology.kubernetes.io/region\": \"${AWS_REGION}\"\n                },\n                \"StringLike\": {\n                    \"aws:ResourceTag/karpenter.k8s.aws/ec2nodeclass\": \"*\",\n                    \"aws:RequestTag/karpenter.k8s.aws/ec2nodeclass\": \"*\"\n                }\n            }\n        },\n        {\n            \"Sid\": \"AllowScopedInstanceProfileActions\",\n            \"Effect\": \"Allow\",\n            \"Resource\": \"*\",\n            \"Action\": [\n                \"iam:AddRoleToInstanceProfile\",\n                \"iam:RemoveRoleFromInstanceProfile\",\n                \"iam:DeleteInstanceProfile\"\n            ],\n            \"Condition\": {\n                \"StringEquals\": {\n                    \"aws:ResourceTag/kubernetes.io/cluster/${CLUSTER_NAME}\": \"owned\",\n                    \"aws:ResourceTag/topology.kubernetes.io/region\": \"${AWS_REGION}\"\n                },\n                \"StringLike\": {\n                    \"aws:ResourceTag/karpenter.k8s.aws/ec2nodeclass\": \"*\"\n                }\n            }\n        },\n        {\n            \"Sid\": \"AllowInstanceProfileReadActions\",\n            \"Effect\": \"Allow\",\n            \"Resource\": \"*\",\n            \"Action\": \"iam:GetInstanceProfile\"\n        },\n        {\n            \"Sid\": \"AllowUnscopedInstanceProfileListAction\",\n            \"Effect\": \"Allow\",\n            \"Resource\": \"*\",\n            \"Action\": \"iam:ListInstanceProfiles\"\n        }\n    ],\n    \"Version\": \"2012-10-17\"\n}\nEOF\n\naws iam put-role-policy --role-name \"KarpenterControllerRole-${CLUSTER_NAME}\" \\\n    --policy-name \"KarpenterControllerPolicy-${CLUSTER_NAME}\" \\\n    --policy-document file://controller-policy.json\n"
  },
  {
    "path": "website/content/en/v1.7/getting-started/migrating-from-cas/scripts/step05-tag-subnets.sh",
    "content": "for NODEGROUP in $(aws eks list-nodegroups --cluster-name \"${CLUSTER_NAME}\" --query 'nodegroups' --output text); do\n    aws ec2 create-tags \\\n        --tags \"Key=karpenter.sh/discovery,Value=${CLUSTER_NAME}\" \\\n        --resources $(aws eks describe-nodegroup --cluster-name \"${CLUSTER_NAME}\" \\\n        --nodegroup-name \"${NODEGROUP}\" --query 'nodegroup.subnets' --output text )\ndone\n"
  },
  {
    "path": "website/content/en/v1.7/getting-started/migrating-from-cas/scripts/step06-tag-security-groups.sh",
    "content": "NODEGROUP=$(aws eks list-nodegroups --cluster-name \"${CLUSTER_NAME}\" \\\n    --query 'nodegroups[0]' --output text)\n\nLAUNCH_TEMPLATE=$(aws eks describe-nodegroup --cluster-name \"${CLUSTER_NAME}\" \\\n    --nodegroup-name \"${NODEGROUP}\" --query 'nodegroup.launchTemplate.{id:id,version:version}' \\\n    --output text | tr -s \"\\t\" \",\")\n\n# If your EKS setup is configured to use only Cluster security group, then please execute -\n\nSECURITY_GROUPS=$(aws eks describe-cluster \\\n    --name \"${CLUSTER_NAME}\" --query \"cluster.resourcesVpcConfig.clusterSecurityGroupId\" --output text)\n\n# If your setup uses the security groups in the Launch template of a managed node group, then :\n\nSECURITY_GROUPS=\"$(aws ec2 describe-launch-template-versions \\\n    --launch-template-id \"${LAUNCH_TEMPLATE%,*}\" --versions \"${LAUNCH_TEMPLATE#*,}\" \\\n    --query 'LaunchTemplateVersions[0].LaunchTemplateData.[NetworkInterfaces[0].Groups||SecurityGroupIds]' \\\n    --output text)\"\n\naws ec2 create-tags \\\n    --tags \"Key=karpenter.sh/discovery,Value=${CLUSTER_NAME}\" \\\n    --resources \"${SECURITY_GROUPS}\"\n"
  },
  {
    "path": "website/content/en/v1.7/getting-started/migrating-from-cas/scripts/step07-edit-aws-auth.sh",
    "content": "kubectl edit configmap aws-auth -n kube-system\n"
  },
  {
    "path": "website/content/en/v1.7/getting-started/migrating-from-cas/scripts/step08-generate-chart.sh",
    "content": "helm template karpenter oci://public.ecr.aws/karpenter/karpenter --version \"${KARPENTER_VERSION}\" --namespace \"${KARPENTER_NAMESPACE}\" \\\n    --set \"settings.clusterName=${CLUSTER_NAME}\" \\\n    --set \"settings.interruptionQueue=${CLUSTER_NAME}\" \\\n    --set \"serviceAccount.annotations.eks\\.amazonaws\\.com/role-arn=arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/KarpenterControllerRole-${CLUSTER_NAME}\" \\\n    --set controller.resources.requests.cpu=1 \\\n    --set controller.resources.requests.memory=1Gi \\\n    --set controller.resources.limits.cpu=1 \\\n    --set controller.resources.limits.memory=1Gi > karpenter.yaml\n"
  },
  {
    "path": "website/content/en/v1.7/getting-started/migrating-from-cas/scripts/step09-deploy.sh",
    "content": "kubectl create namespace \"${KARPENTER_NAMESPACE}\" || true\nkubectl create -f \\\n    \"https://raw.githubusercontent.com/aws/karpenter-provider-aws/v${KARPENTER_VERSION}/pkg/apis/crds/karpenter.sh_nodepools.yaml\"\nkubectl create -f \\\n    \"https://raw.githubusercontent.com/aws/karpenter-provider-aws/v${KARPENTER_VERSION}/pkg/apis/crds/karpenter.k8s.aws_ec2nodeclasses.yaml\"\nkubectl create -f \\\n    \"https://raw.githubusercontent.com/aws/karpenter-provider-aws/v${KARPENTER_VERSION}/pkg/apis/crds/karpenter.sh_nodeclaims.yaml\"\nkubectl apply -f karpenter.yaml\n"
  },
  {
    "path": "website/content/en/v1.7/getting-started/migrating-from-cas/scripts/step10-create-nodepool.sh",
    "content": "cat <<EOF | envsubst | kubectl apply -f -\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\nspec:\n  template:\n    spec:\n      requirements:\n        - key: kubernetes.io/arch\n          operator: In\n          values: [\"amd64\"]\n        - key: kubernetes.io/os\n          operator: In\n          values: [\"linux\"]\n        - key: karpenter.sh/capacity-type\n          operator: In\n          values: [\"spot\"]\n        - key: karpenter.k8s.aws/instance-category\n          operator: In\n          values: [\"c\", \"m\", \"r\"]\n        - key: karpenter.k8s.aws/instance-generation\n          operator: Gt\n          values: [\"2\"]\n      nodeClassRef:\n        group: karpenter.k8s.aws\n        kind: EC2NodeClass\n        name: default\n      expireAfter: 720h # 30 * 24h = 720h\n  limits:\n    cpu: 1000\n  disruption:\n    consolidationPolicy: WhenEmptyOrUnderutilized\n    consolidateAfter: 1m\n---\napiVersion: karpenter.k8s.aws/v1\nkind: EC2NodeClass\nmetadata:\n  name: default\nspec:\n  role: \"KarpenterNodeRole-${CLUSTER_NAME}\" # replace with your cluster name\n  amiSelectorTerms:\n    - alias: \"al2023@${ALIAS_VERSION}\"\n  subnetSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\" # replace with your cluster name\n  securityGroupSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\" # replace with your cluster name\nEOF\n"
  },
  {
    "path": "website/content/en/v1.7/getting-started/migrating-from-cas/scripts/step11-scale-cas.sh",
    "content": "kubectl scale deploy/cluster-autoscaler -n kube-system --replicas=0\n"
  },
  {
    "path": "website/content/en/v1.7/getting-started/migrating-from-cas/scripts/step12-scale-multiple-ng.sh",
    "content": "for NODEGROUP in $(aws eks list-nodegroups --cluster-name \"${CLUSTER_NAME}\" \\\n    --query 'nodegroups' --output text); do aws eks update-nodegroup-config --cluster-name \"${CLUSTER_NAME}\" \\\n    --nodegroup-name \"${NODEGROUP}\" \\\n    --scaling-config \"minSize=1,maxSize=1,desiredSize=1\"\ndone\n"
  },
  {
    "path": "website/content/en/v1.7/getting-started/migrating-from-cas/scripts/step12-scale-single-ng.sh",
    "content": "aws eks update-nodegroup-config --cluster-name \"${CLUSTER_NAME}\" \\\n    --nodegroup-name \"${NODEGROUP}\" \\\n    --scaling-config \"minSize=2,maxSize=2,desiredSize=2\"\n"
  },
  {
    "path": "website/content/en/v1.7/reference/_index.md",
    "content": "---\ntitle: \"Reference\"\nlinkTitle: \"Reference\"\nweight: 50\ndescription: >\n  Reference documentation for Karpenter\n---"
  },
  {
    "path": "website/content/en/v1.7/reference/cloudformation.md",
    "content": "---\ntitle: \"CloudFormation\"\nlinkTitle: \"CloudFormation\"\nweight: 5\ndescription: >\n  A description of the Getting Started CloudFormation file and permissions\n---\nThe [Getting Started with Karpenter]({{< relref \"../getting-started/getting-started-with-karpenter\" >}}) guide uses CloudFormation to bootstrap the cluster to enable Karpenter to create and manage nodes, as well as to allow Karpenter to respond to interruption events.\nThis document describes the `cloudformation.yaml` file used in that guide.\nThese descriptions should allow you to understand:\n\n* What Karpenter is authorized to do with your EKS cluster and AWS resources when using the `cloudformation.yaml` file\n* What permissions you need to set up if you are adding Karpenter to an existing cluster\n\n## Overview\n\nTo download a particular version of `cloudformation.yaml`, set the version and use `curl` to pull the file to your local system:\n\n```bash\nexport KARPENTER_VERSION=\"1.7.4\"\ncurl https://raw.githubusercontent.com/aws/karpenter-provider-aws/v\"${KARPENTER_VERSION}\"/website/content/en/preview/getting-started/getting-started-with-karpenter/cloudformation.yaml > cloudformation.yaml\n```\n\nFollowing some header information, the rest of the `cloudformation.yaml` file describes the resources that CloudFormation deploys.\nThe sections of that file can be grouped together under the following general headings:\n\n* [**Node Authorization**]({{< relref \"#node-authorization\" >}}): Creates a NodeInstanceProfile, attaches a NodeRole to it, and connects it to an IAM Identity Mapping used to authorize nodes to the cluster. This defines the permissions each node managed by Karpenter has to access EC2 and other AWS resources. This doesn't actually create the IAM Identity Mapping. That part is orchestrated by `eksctl` in the Getting Started guide.\n* [**Controller Authorization**]({{< relref \"#controller-authorization\" >}}):  Creates the `KarpenterControllerPolicy` that is attached to the service account.\nAgain, the actual service account creation (`karpenter`), that is combined with the `KarpenterControllerPolicy`, is orchestrated by `eksctl` in the Getting Started guide.\n* [**Interruption Handling**]({{< relref \"#interruption-handling\" >}}): Allows the Karpenter controller to see and respond to interruptions that occur with the nodes that Karpenter is managing. See the [Interruption]({{< relref \"../concepts/disruption#interruption\" >}}) section of the Disruption page for details.\n\nA lot of the object naming that is done by `cloudformation.yaml` is based on the following:\n\n* Cluster name: With a username of `bob` the Getting Started Guide would name your cluster `bob-karpenter-demo`\nThat name would then be appended to any name below where `${ClusterName}` is included.\n\n* Partition: Any time an ARN is used, it includes the [partition name](https://docs.aws.amazon.com/whitepapers/latest/aws-fault-isolation-boundaries/partitions.html) to identify where the object is found. In most cases, that partition name is `aws`. However, it could also be `aws-cn` (for China Regions) or `aws-us-gov` (for AWS GovCloud US Regions).\n\n## Node Authorization\n\nThe following sections of the `cloudformation.yaml` file set up IAM permissions for Kubernetes nodes created by Karpenter.\nIn particular, this involves setting up a node role that can be attached and passed to instance profiles that Karpenter generates at runtime:\n\n* KarpenterNodeRole\n\n### KarpenterNodeRole\n\nThis section of the template defines the IAM role attached to generated instance profiles.\nGiven a cluster name of `bob-karpenter-demo`, this role would end up being named `\"KarpenterNodeRole-bob-karpenter-demo`.\n\n```yaml\nKarpenterNodeRole:\n  Type: \"AWS::IAM::Role\"\n  Properties:\n    RoleName: !Sub \"KarpenterNodeRole-${ClusterName}\"\n    Path: /\n    AssumeRolePolicyDocument:\n      Version: \"2012-10-17\"\n      Statement:\n        - Effect: Allow\n          Principal:\n            Service:\n              !Sub \"ec2.${AWS::URLSuffix}\"\n          Action:\n            - \"sts:AssumeRole\"\n    ManagedPolicyArns:\n      - !Sub \"arn:${AWS::Partition}:iam::aws:policy/AmazonEKS_CNI_Policy\"\n      - !Sub \"arn:${AWS::Partition}:iam::aws:policy/AmazonEKSWorkerNodePolicy\"\n      - !Sub \"arn:${AWS::Partition}:iam::aws:policy/AmazonEC2ContainerRegistryPullOnly\"\n      - !Sub \"arn:${AWS::Partition}:iam::aws:policy/AmazonSSMManagedInstanceCore\"\n```\n\nThe role created here includes several AWS managed policies, which are designed to provide permissions for specific uses needed by the nodes to work with EC2 and other AWS resources. These include:\n\n* [AmazonEKS_CNI_Policy](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonEKS_CNI_Policy.html): Provides the permissions that the Amazon VPC CNI Plugin needs to configure EKS worker nodes.\n* [AmazonEKSWorkerNodePolicy](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonEKSWorkerNodePolicy.html): Lets Amazon EKS worker nodes connect to EKS Clusters.\n* [AmazonEC2ContainerRegistryPullOnly](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonEC2ContainerRegistryPullOnly.html): Allows pulling images from repositories in the Amazon EC2 Container Registry.\n* [AmazonSSMManagedInstanceCore](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonSSMManagedInstanceCore.html): Adds AWS Systems Manager service core functions for Amazon EC2.\n\nIf you were to use a node role from an existing cluster, you could skip this provisioning step and pass this node role to any EC2NodeClasses that you create. Additionally, you would ensure that the [Controller Policy]({{< relref \"#controllerpolicy\" >}}) has `iam:PassRole` permission to the role attached to the generated instance profiles.\n\n## Controller Authorization\n\nThis section sets the AWS permissions for the Karpenter Controller. When used in the Getting Started guide, `eksctl` uses these permissions to create a service account (karpenter) that is combined with the KarpenterControllerPolicy.\n\nThe resources defined in this section are associated with:\n\n* KarpenterControllerPolicy\n\nBecause the scope of the KarpenterControllerPolicy is an AWS region, the cluster's AWS region is included in the `AllowScopedEC2InstanceAccessActions`.\n\n### KarpenterControllerPolicy\n\nA `KarpenterControllerPolicy` object sets the name of the policy, then defines a set of resources and actions allowed for those resources.\nFor our example, the KarpenterControllerPolicy would be named: `KarpenterControllerPolicy-bob-karpenter-demo`\n\n```yaml\nKarpenterControllerPolicy:\n  Type: AWS::IAM::ManagedPolicy\n  Properties:\n    ManagedPolicyName: !Sub \"KarpenterControllerPolicy-${ClusterName}\"\n    # The PolicyDocument must be in JSON string format because we use a StringEquals condition that uses an interpolated\n    # value in one of its key parameters which isn't natively supported by CloudFormation\n    PolicyDocument: !Sub |\n      {\n        \"Version\": \"2012-10-17\",\n        \"Statement\": [\n```\n\nSomeone wanting to add Karpenter to an existing cluster, instead of using `cloudformation.yaml`, would need to create the IAM policy directly and assign that policy to the role leveraged by the service account using IRSA.\n\n#### AllowScopedEC2InstanceAccessActions\n\nThe AllowScopedEC2InstanceAccessActions statement ID (Sid) identifies a set of EC2 resources that are allowed to be accessed with\n[RunInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html) and [CreateFleet](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet.html) actions.\nFor `RunInstances` and `CreateFleet` actions, the Karpenter controller can read (but not create) `image`, `snapshot`, `security-group`, `subnet` and `capacity-reservation` EC2 resources, scoped for the particular AWS partition and region.\n\n```json\n{\n  \"Sid\": \"AllowScopedEC2InstanceAccessActions\",\n  \"Effect\": \"Allow\",\n  \"Resource\": [\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}::image/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}::snapshot/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:security-group/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:subnet/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:capacity-reservation/*\"\n  ],\n  \"Action\": [\n    \"ec2:RunInstances\",\n    \"ec2:CreateFleet\"\n  ]\n}\n```\n\n#### AllowScopedEC2LaunchTemplateAccessActions\n\nThe AllowScopedEC2InstanceAccessActions statement ID (Sid) identifies launch templates that are allowed to be accessed with\n[RunInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html) and [CreateFleet](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet.html) actions.\nFor `RunInstances` and `CreateFleet` actions, the Karpenter controller can read (but not create) `launch-template` EC2 resources that have the `kubernetes.io/cluster/${ClusterName}` tag be set to `owned` and a `karpenter.sh/nodepool` tag, scoped for the particular AWS partition and region. This ensures that an instance launch can't access launch templates that weren't provisioned by Karpenter.\n\n```json\n{\n  \"Sid\": \"AllowScopedEC2LaunchTemplateAccessActions\",\n  \"Effect\": \"Allow\",\n  \"Resource\": \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:launch-template/*\",\n  \"Action\": [\n    \"ec2:RunInstances\",\n    \"ec2:CreateFleet\"\n  ],\n  \"Condition\": {\n    \"StringEquals\": {\n      \"aws:ResourceTag/kubernetes.io/cluster/${ClusterName}\": \"owned\"\n    },\n    \"StringLike\": {\n      \"aws:ResourceTag/karpenter.sh/nodepool\": \"*\"\n    }\n  }\n}\n```\n\n#### AllowScopedEC2InstanceActionsWithTags\n\nThe AllowScopedEC2InstanceActionsWithTags Sid allows the\n[RunInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html), [CreateFleet](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet.html), and [CreateLaunchTemplate](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateLaunchTemplate.html)\nactions requested by the Karpenter controller to create all `fleet`, `instance`, `volume`, `network-interface`, `launch-template` or `spot-instances-request` EC2 resources (for the partition and region). It also requires that the `kubernetes.io/cluster/${ClusterName}` tag be set to `owned`, `aws:RequestTag/eks:eks-cluster-name` be set to `\"${ClusterName}`, and a `karpenter.sh/nodepool` tag be set to any value. This ensures that Karpenter is only allowed to create instances for a single EKS cluster.\n\n```json\n{\n  \"Sid\": \"AllowScopedEC2InstanceActionsWithTags\",\n  \"Effect\": \"Allow\",\n  \"Resource\": [\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:fleet/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:instance/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:volume/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:network-interface/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:launch-template/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:spot-instances-request/*\"\n  ],\n  \"Action\": [\n    \"ec2:RunInstances\",\n    \"ec2:CreateFleet\",\n    \"ec2:CreateLaunchTemplate\"\n  ],\n  \"Condition\": {\n    \"StringEquals\": {\n      \"aws:RequestTag/kubernetes.io/cluster/${ClusterName}\": \"owned\"\n      \"aws:RequestTag/eks:eks-cluster-name\": \"${ClusterName}\"\n    },\n    \"StringLike\": {\n      \"aws:RequestTag/karpenter.sh/nodepool\": \"*\"\n    }\n  }\n}\n```\n\n#### AllowScopedResourceCreationTagging\n\nThe AllowScopedResourceCreationTagging Sid allows EC2 [CreateTags](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTags.html)\nactions on `fleet`, `instance`, `volume`, `network-interface`, `launch-template` and `spot-instances-request` resources, While making `RunInstance`, `CreateFleet`, or `CreateLaunchTemplate` calls. Additionally, this ensures that resources can't be tagged arbitrarily by Karpenter after they are created.\nConditions that must be met include that `aws:RequestTag/kubernetes.io/cluster/${ClusterName}` be set to `owned` and `aws:RequestTag/eks:eks-cluster-name` be set to `${ClusterName}`.\n\n```json\n{\n  \"Sid\": \"AllowScopedResourceCreationTagging\",\n  \"Effect\": \"Allow\",\n  \"Resource\": [\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:fleet/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:instance/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:volume/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:network-interface/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:launch-template/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:spot-instances-request/*\"\n  ],\n  \"Action\": \"ec2:CreateTags\",\n  \"Condition\": {\n    \"StringEquals\": {\n      \"aws:RequestTag/kubernetes.io/cluster/${ClusterName}\": \"owned\",\n      \"aws:RequestTag/eks:eks-cluster-name\": \"${ClusterName}\"\n      \"ec2:CreateAction\": [\n        \"RunInstances\",\n        \"CreateFleet\",\n        \"CreateLaunchTemplate\"\n      ]\n    },\n    \"StringLike\": {\n      \"aws:RequestTag/karpenter.sh/nodepool\": \"*\"\n    }\n  }\n}\n```\n\n#### AllowScopedResourceTagging\n\nThe AllowScopedResourceTagging Sid allows EC2 [CreateTags](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTags.html) actions on all instances created by Karpenter after their creation. It enforces that Karpenter is only able to update the tags on cluster instances it is operating on through the `kubernetes.io/cluster/${ClusterName}`\" and `karpenter.sh/nodepool` tags.\nLikewise, `RequestTag/eks:eks-cluster-name` must be set to `${ClusterName}`, if it exists, and `TagKeys` must equal `eks:eks-cluster-name`, `karpenter.sh/nodeclaim`, and `Name`, for all values.\n```json\n{\n  \"Sid\": \"AllowScopedResourceTagging\",\n  \"Effect\": \"Allow\",\n  \"Resource\": \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:instance/*\",\n  \"Action\": \"ec2:CreateTags\",\n  \"Condition\": {\n    \"StringEquals\": {\n      \"aws:ResourceTag/kubernetes.io/cluster/${ClusterName}\": \"owned\"\n    },\n    \"StringLike\": {\n      \"aws:ResourceTag/karpenter.sh/nodepool\": \"*\"\n    },\n    \"StringEqualsIfExists\": {\n      \"aws:RequestTag/eks:eks-cluster-name\": \"${ClusterName}\"\n    },\n    \"ForAllValues:StringEquals\": {\n      \"aws:TagKeys\": [\n        \"eks:eks-cluster-name\",\n        \"karpenter.sh/nodeclaim\",\n        \"Name\"\n      ]\n    }\n  }\n}\n```\n\n#### AllowScopedDeletion\n\nThe AllowScopedDeletion Sid allows [TerminateInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_TerminateInstances.html) and [DeleteLaunchTemplate](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DeleteLaunchTemplate.html) actions to delete instance and launch-template resources, provided that `karpenter.sh/nodepool` and `kubernetes.io/cluster/${ClusterName}` tags are set. These tags must be present on all resources that Karpenter is going to delete. This ensures that Karpenter can only delete instances and launch templates that are associated with it.\n\n```json\n{\n  \"Sid\": \"AllowScopedDeletion\",\n  \"Effect\": \"Allow\",\n  \"Resource\": [\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:instance/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:launch-template/*\"\n  ],\n  \"Action\": [\n    \"ec2:TerminateInstances\",\n    \"ec2:DeleteLaunchTemplate\"\n  ],\n  \"Condition\": {\n    \"StringEquals\": {\n      \"aws:ResourceTag/kubernetes.io/cluster/${ClusterName}\": \"owned\"\n    },\n    \"StringLike\": {\n      \"aws:ResourceTag/karpenter.sh/nodepool\": \"*\"\n    }\n  }\n}\n```\n\n#### AllowRegionalReadActions\n\nThe AllowRegionalReadActions Sid allows [DescribeAvailabilityZones](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeAvailabilityZones.html), [DescribeImages](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeImages.html), [DescribeInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeInstances.html), [DescribeInstanceTypeOfferings](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeInstanceTypeOfferings.html), [DescribeInstanceTypes](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeInstanceTypes.html), [DescribeLaunchTemplates](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeLaunchTemplates.html), [DescribeSecurityGroups](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeSecurityGroups.html), [DescribeSpotPriceHistory](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeSpotPriceHistory.html), and [DescribeSubnets](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeSubnets.html) actions for the current AWS region.\nThis allows the Karpenter controller to do any of those read-only actions across all related resources for that AWS region.\n\n```json\n{\n  \"Sid\": \"AllowRegionalReadActions\",\n  \"Effect\": \"Allow\",\n  \"Resource\": \"*\",\n  \"Action\": [\n    \"ec2:DescribeCapacityReservations\",\n    \"ec2:DescribeImages\",\n    \"ec2:DescribeInstances\",\n    \"ec2:DescribeInstanceTypeOfferings\",\n    \"ec2:DescribeInstanceTypes\",\n    \"ec2:DescribeLaunchTemplates\",\n    \"ec2:DescribeSecurityGroups\",\n    \"ec2:DescribeSpotPriceHistory\",\n    \"ec2:DescribeSubnets\"\n  ],\n  \"Condition\": {\n    \"StringEquals\": {\n      \"aws:RequestedRegion\": \"${AWS::Region}\"\n    }\n  }\n}\n```\n\n#### AllowSSMReadActions\n\nThe AllowSSMReadActions Sid allows the Karpenter controller to get SSM parameters (`ssm:GetParameter`) from the current region for SSM parameters generated by AWS services.\n\n**NOTE**: If potentially sensitive information is stored in SSM parameters, you could consider restricting access to these messages further.\n\n```json\n{\n  \"Sid\": \"AllowSSMReadActions\",\n  \"Effect\": \"Allow\",\n  \"Resource\": \"arn:${AWS::Partition}:ssm:${AWS::Region}::parameter/aws/service/*\",\n  \"Action\": \"ssm:GetParameter\"\n}\n```\n\n#### AllowPricingReadActions\n\nBecause pricing information does not exist in every region at the moment, the AllowPricingReadActions Sid allows the Karpenter controller to get product pricing information (`pricing:GetProducts`) for all related resources across all regions.\n\n```json\n{\n  \"Sid\": \"AllowPricingReadActions\",\n  \"Effect\": \"Allow\",\n  \"Resource\": \"*\",\n  \"Action\": \"pricing:GetProducts\"\n}\n```\n\n#### AllowInterruptionQueueActions\n\nKarpenter supports interruption queues, that you can create as described in the [Interruption]({{< relref \"../concepts/disruption#interruption\" >}}) section of the Disruption page.\nThis section of the cloudformation.yaml template can give Karpenter permission to access those queues by specifying the resource ARN.\nFor the interruption queue you created (`${KarpenterInterruptionQueue.Arn}`), the AllowInterruptionQueueActions Sid lets the Karpenter controller have permission to delete messages ([DeleteMessage](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_DeleteMessage.html)), get queue URL ([GetQueueUrl](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_GetQueueUrl.html)), and receive messages ([ReceiveMessage](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ReceiveMessage.html)).\n\n```json\n{\n  \"Sid\": \"AllowInterruptionQueueActions\",\n  \"Effect\": \"Allow\",\n  \"Resource\": \"${KarpenterInterruptionQueue.Arn}\",\n  \"Action\": [\n    \"sqs:DeleteMessage\",\n    \"sqs:GetQueueUrl\",\n    \"sqs:ReceiveMessage\"\n  ]\n}\n```\n\n#### AllowPassingInstanceRole\n\nThe AllowPassingInstanceRole Sid gives the Karpenter controller permission to pass (`iam:PassRole`) the node role (`KarpenterNodeRole-${ClusterName}`) to generated instance profiles.\nThis gives EC2 permission explicit permission to use the `KarpenterNodeRole-${ClusterName}` when assigning permissions to generated instance profiles while launching nodes.\n\n```json\n{\n  \"Sid\": \"AllowPassingInstanceRole\",\n  \"Effect\": \"Allow\",\n  \"Resource\": \"${KarpenterNodeRole.Arn}\",\n  \"Action\": \"iam:PassRole\",\n  \"Condition\": {\n    \"StringEquals\": {\n      \"iam:PassedToService\": [\n        \"ec2.amazonaws.com\",\n        \"ec2.amazonaws.com.cn\"\n      ]\n    }\n  }\n}\n```\n\n#### AllowScopedInstanceProfileCreationActions\n\nThe AllowScopedInstanceProfileCreationActions Sid gives the Karpenter controller permission to create a new instance profile with [`iam:CreateInstanceProfile`](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateInstanceProfile.html),\nprovided that the request is made to a cluster with `RequestTag` `kubernetes.io/cluster/${ClusterName}` set to `owned`, the `eks:eks-cluster-name` set to `${ClusterName}`, and `topology.kubernetes.io/region` set to the current region.\nAlso, `karpenter.k8s.aws/ec2nodeclass` must be set to some value. This ensures that Karpenter can generate instance profiles on your behalf based on roles specified in your `EC2NodeClasses` that you use to configure Karpenter.\n\n```json\n{\n  \"Sid\": \"AllowScopedInstanceProfileCreationActions\",\n  \"Effect\": \"Allow\",\n  \"Resource\": \"arn:${AWS::Partition}:iam::${AWS::AccountId}:instance-profile/*\",\n  \"Action\": [\n    \"iam:CreateInstanceProfile\"\n  ],\n  \"Condition\": {\n    \"StringEquals\": {\n      \"aws:RequestTag/kubernetes.io/cluster/${ClusterName}\": \"owned\",\n      \"aws:RequestTag/eks:eks-cluster-name\": \"${ClusterName}\",\n      \"aws:RequestTag/topology.kubernetes.io/region\": \"${AWS::Region}\"\n    },\n    \"StringLike\": {\n      \"aws:RequestTag/karpenter.k8s.aws/ec2nodeclass\": \"*\"\n    }\n  }\n}\n```\n\n#### AllowScopedInstanceProfileTagActions\n\nThe AllowScopedInstanceProfileTagActions Sid gives the Karpenter controller permission to tag an instance profile with [`iam:TagInstanceProfile`](https://docs.aws.amazon.com/IAM/latest/APIReference/API_TagInstanceProfile.html), provided that `ResourceTag` attributes `kubernetes.io/cluster/${ClusterName}` is set to `owned` and `topology.kubernetes.io/region` is set to the current region and `RequestTag` attributes `kubernetes.io/cluster/${ClusterName}` is set to `owned`, `eks:eks-cluster-name` is set to `${ClusterName}`, and `topology.kubernetes.io/region` is set to the current region.\nAlso, `ResourceTag/karpenter.k8s.aws/ec2nodeclass` and `RequestTag/karpenter.k8s.aws/ec2nodeclass` must be set to some value. This ensures that Karpenter is only able to act on instance profiles that it provisions for this cluster.\n\n```json\n{\n  \"Sid\": \"AllowScopedInstanceProfileTagActions\",\n  \"Effect\": \"Allow\",\n  \"Resource\": \"arn:${AWS::Partition}:iam::${AWS::AccountId}:instance-profile/*\",\n  \"Action\": [\n    \"iam:TagInstanceProfile\"\n  ],\n  \"Condition\": {\n    \"StringEquals\": {\n      \"aws:ResourceTag/kubernetes.io/cluster/${ClusterName}\": \"owned\",\n      \"aws:ResourceTag/topology.kubernetes.io/region\": \"${AWS::Region}\",\n      \"aws:RequestTag/kubernetes.io/cluster/${ClusterName}\": \"owned\",\n      \"aws:RequestTag/eks:eks-cluster-name\": \"${ClusterName}\",\n      \"aws:RequestTag/topology.kubernetes.io/region\": \"${AWS::Region}\"\n    },\n    \"StringLike\": {\n      \"aws:ResourceTag/karpenter.k8s.aws/ec2nodeclass\": \"*\",\n      \"aws:RequestTag/karpenter.k8s.aws/ec2nodeclass\": \"*\"\n    }\n  }\n}\n```\n\n\n#### AllowScopedInstanceProfileActions\n\nThe AllowScopedInstanceProfileActions Sid gives the Karpenter controller permission to perform [`iam:AddRoleToInstanceProfile`](https://docs.aws.amazon.com/IAM/latest/APIReference/API_AddRoleToInstanceProfile.html), [`iam:RemoveRoleFromInstanceProfile`](https://docs.aws.amazon.com/IAM/latest/APIReference/API_RemoveRoleFromInstanceProfile.html), and [`iam:DeleteInstanceProfile`](https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeleteInstanceProfile.html) actions,\nprovided that the request is made to a cluster with `kubernetes.io/cluster/${ClusterName}` set to owned and is made in the current region.\nAlso, `karpenter.k8s.aws/ec2nodeclass` must be set to some value. This permission is further enforced by the `iam:PassRole` permission. If Karpenter attempts to add a role to an instance profile that it doesn't have `iam:PassRole` permission on, that call will fail. Therefore, if you configure Karpenter to use a new role through the `EC2NodeClass`, ensure that you also specify that role within your `iam:PassRole` permission.\n\n```json\n{\n  \"Sid\": \"AllowScopedInstanceProfileActions\",\n  \"Effect\": \"Allow\",\n  \"Resource\": \"arn:${AWS::Partition}:iam::${AWS::AccountId}:instance-profile/*\",\n  \"Action\": [\n    \"iam:AddRoleToInstanceProfile\",\n    \"iam:RemoveRoleFromInstanceProfile\",\n    \"iam:DeleteInstanceProfile\"\n  ],\n  \"Condition\": {\n    \"StringEquals\": {\n      \"aws:ResourceTag/kubernetes.io/cluster/${ClusterName}\": \"owned\",\n      \"aws:ResourceTag/topology.kubernetes.io/region\": \"${AWS::Region}\"\n    },\n    \"StringLike\": {\n      \"aws:ResourceTag/karpenter.k8s.aws/ec2nodeclass\": \"*\"\n    }\n  }\n}\n```\n\n#### AllowInstanceProfileReadActions\n\nThe AllowInstanceProfileReadActions Sid gives the Karpenter controller permission to perform [`iam:GetInstanceProfile`](https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetInstanceProfile.html) actions to retrieve information about a specified instance profile, including understanding if an instance profile has been provisioned for an `EC2NodeClass` or needs to be re-provisioned.\n\n```json\n{\n  \"Sid\": \"AllowInstanceProfileReadActions\",\n  \"Effect\": \"Allow\",\n  \"Resource\": \"arn:${AWS::Partition}:iam::${AWS::AccountId}:instance-profile/*\",\n  \"Action\": \"iam:GetInstanceProfile\"\n}\n```\n\n#### AllowUnscopedInstanceProfileListAction\n\nThe AllowUnscopedInstanceProfileListAction Sid gives the Karpenter controller permission to perform [`iam:ListInstanceProfiles`](https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListInstanceProfiles.html) action to list instance profiles.\n\n```json\n{\n  \"Sid\": \"AllowUnscopedInstanceProfileListAction\",\n  \"Effect\": \"Allow\",\n  \"Resource\": \"*\",\n  \"Action\": \"iam:ListInstanceProfiles\"\n}\n```\n\n#### AllowAPIServerEndpointDiscovery\n\nYou can optionally allow the Karpenter controller to discover the Kubernetes cluster's external API endpoint to enable EC2 nodes to successfully join the EKS cluster.\n\n> **Note**: If you are not using an EKS control plane, you will have to specify this endpoint explicitly. See the description of the `aws.clusterEndpoint` setting in the [ConfigMap](.settings/#configmap) documentation for details.\n\nThe AllowAPIServerEndpointDiscovery Sid allows the Karpenter controller to get that information (`eks:DescribeCluster`) for the cluster (`cluster/${ClusterName}`).\n```json\n{\n  \"Sid\": \"AllowAPIServerEndpointDiscovery\",\n  \"Effect\": \"Allow\",\n  \"Resource\": \"arn:${AWS::Partition}:eks:${AWS::Region}:${AWS::AccountId}:cluster/${ClusterName}\",\n  \"Action\": \"eks:DescribeCluster\"\n}\n```\n\n## Interruption Handling\n\nSettings in this section allow the Karpenter controller to stand-up an interruption queue to receive notification messages from other AWS services about the health and status of instances. For example, this interruption queue allows Karpenter to be aware of spot instance interruptions that are sent 2 minutes before spot instances are reclaimed by EC2. Adding this queue allows Karpenter to be proactive in migrating workloads to new nodes.\nSee the [Interruption]({{< relref \"../concepts/disruption#interruption\" >}}) section of the Disruption page for details.\n\nDefining the `KarpenterInterruptionQueuePolicy` allows Karpenter to see and respond to the following:\n\n* AWS health events\n* Spot interruptions\n* Spot rebalance recommendations\n* Instance state changes\n\nThe resources defined in this section include:\n\n* KarpenterInterruptionQueue\n* KarpenterInterruptionQueuePolicy\n* ScheduledChangeRule\n* SpotInterruptionRule\n* RebalanceRule\n* InstanceStateChangeRule\n\n### KarpenterInterruptionQueue\n\nThe [AWS::SQS::Queue](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sqs-queue.html) resource is used to create an Amazon SQS standard queue.\nProperties of that resource set the `QueueName` to the name of your cluster, the time for which SQS retains each message (`MessageRetentionPeriod`) to 300 seconds, and enabling serverside-side encryption using SQS owned encryption keys (`SqsManagedSseEnabled`) to `true`.\nSee [SetQueueAttributes](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SetQueueAttributes.html) for descriptions of some of these attributes.\n\n```yaml\nKarpenterInterruptionQueue:\n  Type: AWS::SQS::Queue\n  Properties:\n    QueueName: !Sub \"${ClusterName}\"\n    MessageRetentionPeriod: 300\n    SqsManagedSseEnabled: true\n```\n\n### KarpenterInterruptionQueuePolicy\n\nThe Karpenter interruption queue policy is created to allow AWS services that we want to receive instance notifications from to push notification messages to the queue.\nThe [AWS::SQS::QueuePolicy](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sqs-queuepolicy.html) resource here applies `EC2InterruptionPolicy` to the `KarpenterInterruptionQueue`. The policy allows [sqs:SendMessage](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html) actions to `events.amazonaws.com` and `sqs.amazonaws.com` services. It also allows the `GetAtt` function to get attributes from `KarpenterInterruptionQueue.Arn`.\nAdditionally, it only allows access to the queue using encrypted connections over HTTPS (TLS) to adhere to [Amazon SQS Security Best Practices](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-security-best-practices.html#enforce-encryption-data-in-transit).\n\n```yaml\nKarpenterInterruptionQueuePolicy:\n  Type: AWS::SQS::QueuePolicy\n  Properties:\n    Queues:\n      - !Ref KarpenterInterruptionQueue\n    PolicyDocument:\n      Id: EC2InterruptionPolicy\n      Statement:\n        - Effect: Allow\n          Principal:\n            Service:\n              - events.amazonaws.com\n              - sqs.amazonaws.com\n          Action: sqs:SendMessage\n          Resource: !GetAtt KarpenterInterruptionQueue.Arn\n        - Sid: DenyHTTP\n          Effect: Deny\n          Action: sqs:*\n          Resource: !GetAtt KarpenterInterruptionQueue.Arn\n          Condition:\n            Bool:\n              aws:SecureTransport: false\n          Principal: \"*\"\n```\n\n### Rules\n\nThis section allows Karpenter to gather [AWS Health Events](https://docs.aws.amazon.com/health/latest/ug/cloudwatch-events-health.html#about-public-events) and direct them to a queue where they can be consumed by Karpenter.\nThese rules include:\n\n* ScheduledChangeRule: The [AWS::Events::Rule](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-events-rule.html) creates a rule where the [EventPattern](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-patterns.html) is set to send events from the `aws.health` source to `KarpenterInterruptionQueue`.\n\n  ```yaml\n  ScheduledChangeRule:\n    Type: 'AWS::Events::Rule'\n    Properties:\n     EventPattern:\n       source:\n         - aws.health\n       detail-type:\n         - AWS Health Event\n     Targets:\n       - Id: KarpenterInterruptionQueueTarget\n         Arn: !GetAtt KarpenterInterruptionQueue.Arn\n  ```\n\n* SpotInterruptionRule: An EC2 Spot Instance Interruption warning tells you that AWS is about to reclaim a Spot instance you are using. This rule allows Karpenter to gather [EC2 Spot Instance Interruption Warning](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-interruptions.html) events and direct them to a queue where they can be consumed by Karpenter. In particular, the [AWS::Events::Rule](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-events-rule.html) here creates a rule where the [EventPattern](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-patterns.html) is set to send events from the `aws.ec2` source to `KarpenterInterruptionQueue`.\n\n  ```yaml\n  SpotInterruptionRule:\n    Type: 'AWS::Events::Rule'\n    Properties:\n      EventPattern:\n        source:\n          - aws.ec2\n        detail-type:\n          - EC2 Spot Instance Interruption Warning\n      Targets:\n        - Id: KarpenterInterruptionQueueTarget\n          Arn: !GetAtt KarpenterInterruptionQueue.Arn\n  ```\n\n* RebalanceRule: An EC2 Instance Rebalance Recommendation signal tells you that a Spot instance is at a heightened risk of being interrupted, allowing Karpenter to get new instances or simply rebalance workloads.  This rule allows Karpenter to gather [EC2 Instance Rebalance Recommendation](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/rebalance-recommendations.html) signals and direct them to a queue where they can be consumed by Karpenter. In particular, the [AWS::Events::Rule](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-events-rule.html) here creates a rule where the [EventPattern](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-patterns.html) is set to send events from the `aws.ec2` source to `KarpenterInterruptionQueue`.\n\n  ```yaml\n  RebalanceRule:\n   Type: 'AWS::Events::Rule'\n   Properties:\n     EventPattern:\n       source:\n         - aws.ec2\n       detail-type:\n         - EC2 Instance Rebalance Recommendation\n     Targets:\n       - Id: KarpenterInterruptionQueueTarget\n         Arn: !GetAtt KarpenterInterruptionQueue.Arn\n  ```\n\n* InstanceStateChangeRule: An EC2 Instance State-change Notification signal tells you that the state of an instance has changed to one of the following states: pending, running, stopping, stopped, shutting-down, or terminated. This rule allows Karpenter to gather [EC2 Instance State-change](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/monitoring-instance-state-changes.html) signals and direct them to a queue where they can be consumed by Karpenter. In particular, the [AWS::Events::Rule](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-events-rule.html) here creates a rule where the [EventPattern](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-patterns.html) is set to send events from the `aws.ec2` source to `KarpenterInterruptionQueue`.\n\n  ```yaml\n  InstanceStateChangeRule:\n   Type: 'AWS::Events::Rule'\n   Properties:\n     EventPattern:\n       source:\n         - aws.ec2\n       detail-type:\n         - EC2 Instance State-change Notification\n     Targets:\n       - Id: KarpenterInterruptionQueueTarget\n         Arn: !GetAtt KarpenterInterruptionQueue.Arn\n  ```\n"
  },
  {
    "path": "website/content/en/v1.7/reference/instance-types.md",
    "content": "---\ntitle: \"Instance Types\"\nlinkTitle: \"Instance Types\"\nweight: 100\n\ndescription: >\n  Evaluate Instance Type Resources\n---\n<!-- this document is generated from hack/docs/instancetypes_gen_docs.go -->\nAWS instance types offer varying resources and can be selected by labels. The values provided\nbelow are the resources available with some assumptions and after the instance overhead has been subtracted:\n- `blockDeviceMappings` are not configured\n- `amiFamily` is set to `AL2023`\n## a1 Family\n### `a1.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|a|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|a1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|500|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|a1.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|1392Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|10|\n### `a1.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|a|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|a1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|a1.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3055Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `a1.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|a|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|a1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|a1.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6525Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `a1.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|a|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|a1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|a1.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `a1.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|a|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|a1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|a1.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27322Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `a1.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|a|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|a1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|a1.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27322Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n## c1 Family\n### `c1.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|0|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|1740|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c1.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|1122Mi|\n |pods|12|\n### `c1.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|0|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|7168|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c1.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|5637Mi|\n |pods|58|\n## c3 Family\n### `c3.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|3840|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c3.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|2878Mi|\n |pods|29|\n### `c3.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|7680|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c3.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6111Mi|\n |pods|58|\n### `c3.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|15360|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c3.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|13215Mi|\n |pods|58|\n### `c3.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|30720|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c3.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|25487Mi|\n |pods|234|\n### `c3.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|61440|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c3.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|53903Mi|\n |pods|234|\n## c4 Family\n### `c4.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|3840|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c4.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|2878Mi|\n |pods|29|\n### `c4.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|7680|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c4.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6111Mi|\n |pods|58|\n### `c4.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|1000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|15360|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c4.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|13215Mi|\n |pods|58|\n### `c4.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|30720|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c4.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|25487Mi|\n |pods|234|\n### `c4.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|36|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|61440|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c4.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|35840m|\n |ephemeral-storage|17Gi|\n |memory|53903Mi|\n |pods|234|\n## c5 Family\n### `c5.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3114Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c5.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6584Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c5.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c5.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27381Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5.9xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|36|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|73728|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|9xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5.9xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|35840m|\n |ephemeral-storage|17Gi|\n |memory|65269Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|88002Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5.18xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|72|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|147456|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|18xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5.18xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|71750m|\n |ephemeral-storage|17Gi|\n |memory|127934Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c5.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c5.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## c5a Family\n### `c5a.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5a.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3114Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c5a.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5a.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6584Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c5a.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5a.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c5a.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5a.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27381Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5a.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5a.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5a.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5a.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|88002Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5a.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6300|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5a.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112779Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c5a.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5a.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## c5ad Family\n### `c5ad.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|75|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5ad.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3114Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c5ad.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|150|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5ad.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6584Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c5ad.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|300|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5ad.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c5ad.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|600|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5ad.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27381Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5ad.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1200|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5ad.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5ad.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1800|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5ad.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|88002Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5ad.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6300|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2400|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5ad.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112779Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c5ad.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5ad.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## c5d Family\n### `c5d.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|50|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5d.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3114Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c5d.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|100|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5d.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6584Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c5d.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|200|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5d.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c5d.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|400|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5d.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27381Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5d.9xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|36|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|900|\n |karpenter.k8s.aws/instance-memory|73728|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|9xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5d.9xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|35840m|\n |ephemeral-storage|17Gi|\n |memory|65269Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5d.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1800|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5d.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|88002Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5d.18xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|72|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1800|\n |karpenter.k8s.aws/instance-memory|147456|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|18xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5d.18xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|71750m|\n |ephemeral-storage|17Gi|\n |memory|127934Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c5d.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3600|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5d.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c5d.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3600|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5d.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## c5n Family\n### `c5n.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|5376|\n |karpenter.k8s.aws/instance-network-bandwidth|3000|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5n.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|4298Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c5n.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|10752|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5n.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|8952Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c5n.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|21504|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5n.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|18898Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c5n.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|43008|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5n.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|36853Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5n.9xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|36|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|9xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5n.9xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|35840m|\n |ephemeral-storage|17Gi|\n |memory|88002Mi|\n |pods|234|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5n.18xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|72|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|18xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5n.18xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|71750m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c5n.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|72|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5n.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|71750m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## c6a Family\n### `c6a.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6a.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3114Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c6a.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6a.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6584Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c6a.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6a.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c6a.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6a.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27381Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c6a.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6a.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `c6a.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6a.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|88002Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `c6a.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6a.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112779Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6a.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6a.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6a.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6a.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6a.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6a.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6a.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6a.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## c6g Family\n### `c6g.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|500|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6g.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|1392Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `c6g.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6g.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3055Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c6g.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6g.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6525Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c6g.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6g.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c6g.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6g.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27322Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c6g.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6g.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c6g.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14250|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6g.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|87943Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c6g.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6g.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6g.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6g.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## c6gd Family\n### `c6gd.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|59|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|500|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gd.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|1392Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `c6gd.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gd.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3055Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c6gd.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gd.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6525Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c6gd.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gd.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c6gd.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gd.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27322Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c6gd.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gd.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c6gd.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14250|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gd.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|87943Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c6gd.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gd.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6gd.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gd.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## c6gn Family\n### `c6gn.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6gn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|1600|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gn.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|1392Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `c6gn.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6gn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|3000|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gn.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3055Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c6gn.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6gn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|6300|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gn.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6525Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c6gn.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6gn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gn.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c6gn.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6gn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gn.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27322Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c6gn.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6gn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gn.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c6gn.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|28500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6gn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gn.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|87943Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c6gn.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|38000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6gn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gn.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## c6i Family\n### `c6i.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6i.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3114Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c6i.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6i.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6584Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c6i.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6i.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c6i.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6i.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27381Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c6i.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6i.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `c6i.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6i.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|88002Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `c6i.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6i.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112779Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6i.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6i.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6i.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6i.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6i.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6i.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## c6id Family\n### `c6id.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6id.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3114Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c6id.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6id.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6584Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c6id.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6id.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c6id.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6id.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27381Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c6id.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6id.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `c6id.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6id.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|88002Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `c6id.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6id.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112779Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6id.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|5700|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6id.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6id.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6id.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6id.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6id.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## c6in Family\n### `c6in.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6in.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3114Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c6in.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6in.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6584Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c6in.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6in.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c6in.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6in.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27381Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c6in.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6in.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `c6in.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|37500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6in.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|88002Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `c6in.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|50000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6in.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112779Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6in.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|75000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|150000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6in.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6in.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6in.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|237794Mi|\n |pods|394|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|106|\n### `c6in.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6in.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|237794Mi|\n |pods|394|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|106|\n## c7a Family\n### `c7a.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|390|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7a.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|1451Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `c7a.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7a.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3114Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c7a.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7a.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6584Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c7a.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7a.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c7a.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7a.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27381Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c7a.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7a.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `c7a.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7a.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|88002Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `c7a.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7a.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112779Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c7a.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7a.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c7a.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7a.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c7a.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7a.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c7a.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7a.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## c7g Family\n### `c7g.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|520|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7g.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|1392Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `c7g.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7g.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3055Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c7g.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1876|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7g.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6525Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c7g.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7g.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c7g.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7g.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27322Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c7g.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7g.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c7g.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7g.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|87943Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c7g.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7g.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c7g.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7g.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## c7gd Family\n### `c7gd.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|59|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|520|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gd.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|1392Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `c7gd.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gd.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3055Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c7gd.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1876|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gd.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6525Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c7gd.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gd.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c7gd.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gd.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27322Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c7gd.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gd.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c7gd.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gd.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|87943Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c7gd.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gd.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c7gd.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gd.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## c7gn Family\n### `c7gn.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gn|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gn.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|1392Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `c7gn.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gn|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gn.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3055Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c7gn.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gn|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gn.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6525Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c7gn.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gn|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gn.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c7gn.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gn|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gn.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27322Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c7gn.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gn|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gn.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c7gn.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gn|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|150000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gn.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|87943Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c7gn.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gn|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gn.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c7gn.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gn|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gn.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## c7i Family\n### `c7i.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3114Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c7i.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6584Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c7i.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c7i.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27381Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c7i.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `c7i.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|88002Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `c7i.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112779Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c7i.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c7i.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c7i.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c7i.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## c7i-flex Family\n### `c7i-flex.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i-flex|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|390|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i-flex.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3114Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|3|\n### `c7i-flex.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i-flex|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i-flex.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6584Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|8|\n### `c7i-flex.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i-flex|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i-flex.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c7i-flex.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i-flex|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i-flex.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27381Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|34|\n### `c7i-flex.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i-flex|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i-flex.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c7i-flex.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i-flex|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|9375|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i-flex.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|88002Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `c7i-flex.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i-flex|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i-flex.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112779Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## c8g Family\n### `c8g.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|520|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8g.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|1392Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `c8g.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8g.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3055Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c8g.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8g.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6525Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c8g.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8g.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c8g.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8g.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27322Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c8g.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8g.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c8g.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8g.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|87943Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c8g.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8g.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c8g.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8g.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173341Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c8g.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8g.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173341Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c8g.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8g.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|355203Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c8g.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8g.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|355203Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## c8gd Family\n### `c8gd.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|59|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|520|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gd.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|1392Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `c8gd.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gd.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3055Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c8gd.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gd.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6525Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c8gd.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gd.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c8gd.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gd.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27322Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c8gd.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gd.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c8gd.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gd.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|87943Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c8gd.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gd.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c8gd.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|5700|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gd.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173341Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c8gd.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|5700|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gd.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173341Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c8gd.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|11400|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gd.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|355203Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c8gd.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|11400|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gd.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|355203Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## c8gn Family\n### `c8gn.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gn.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|1392Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `c8gn.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gn.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3055Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c8gn.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gn.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6525Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c8gn.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gn.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c8gn.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gn.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27322Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c8gn.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gn.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|56994Mi|\n |pods|292|\n |vpc.amazonaws.com/pod-eni|52|\n### `c8gn.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|150000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gn.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|86667Mi|\n |pods|350|\n |vpc.amazonaws.com/pod-eni|50|\n### `c8gn.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gn.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112181Mi|\n |pods|786|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|106|\n### `c8gn.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|300000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gn.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|168490Mi|\n |pods|1178|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n### `c8gn.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|300000|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gn.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|168490Mi|\n |pods|1178|\n |vpc.amazonaws.com/efa|1|\n### `c8gn.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|600000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gn.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|356820Mi|\n |pods|590|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|98|\n### `c8gn.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|600000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gn.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|356820Mi|\n |pods|590|\n |vpc.amazonaws.com/efa|2|\n## d2 Family\n### `d2.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|d2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|31232|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d2.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|27896Mi|\n |pods|58|\n### `d2.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|1000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|d2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|62464|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d2.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|56786Mi|\n |pods|58|\n### `d2.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|d2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|124928|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d2.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|112629Mi|\n |pods|234|\n### `d2.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|36|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|d2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|249856|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d2.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|35840m|\n |ephemeral-storage|17Gi|\n |memory|228187Mi|\n |pods|234|\n## d3 Family\n### `d3.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|d3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|5940|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|3000|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d3.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29845Mi|\n |pods|10|\n |vpc.amazonaws.com/pod-eni|42|\n### `d3.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|d3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|11880|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|6000|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d3.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|60067Mi|\n |pods|18|\n |vpc.amazonaws.com/pod-eni|92|\n### `d3.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|d3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|23760|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d3.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|120468Mi|\n |pods|38|\n |vpc.amazonaws.com/pod-eni|118|\n### `d3.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|5000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|d3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|47520|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d3.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|241479Mi|\n |pods|59|\n |vpc.amazonaws.com/pod-eni|119|\n## d3en Family\n### `d3en.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|d3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|27960|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|6000|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d3en.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14690Mi|\n |pods|10|\n |vpc.amazonaws.com/pod-eni|24|\n### `d3en.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|d3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|55920|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d3en.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29757Mi|\n |pods|18|\n |vpc.amazonaws.com/pod-eni|58|\n### `d3en.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|d3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|111840|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d3en.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|59847Mi|\n |pods|38|\n |vpc.amazonaws.com/pod-eni|118|\n### `d3en.6xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|24|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|d3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|167760|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|6xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d3en.6xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|23870m|\n |ephemeral-storage|17Gi|\n |memory|89938Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|118|\n### `d3en.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|5000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|d3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|223680|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d3en.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|120028Mi|\n |pods|78|\n |vpc.amazonaws.com/pod-eni|118|\n### `d3en.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|7000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|d3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|335520|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d3en.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|180528Mi|\n |pods|89|\n |vpc.amazonaws.com/pod-eni|119|\n## dl1 Family\n### `dl1.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|dl|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|dl1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-gpu-count|8|\n |karpenter.k8s.aws/instance-gpu-manufacturer|habana|\n |karpenter.k8s.aws/instance-gpu-memory|32768|\n |karpenter.k8s.aws/instance-gpu-name|gaudi-hl-205|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|4000|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|400000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|dl1.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |habana.ai/gaudi|8|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|4|\n |vpc.amazonaws.com/pod-eni|62|\n## dl2q Family\n### `dl2q.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-accelerator-count|8|\n |karpenter.k8s.aws/instance-accelerator-manufacturer|qualcomm|\n |karpenter.k8s.aws/instance-accelerator-name|qualcomm-ai100|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|dl|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|dl2q|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|dl2q.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## f1 Family\n### `f1.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|f|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|1700|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|f1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-local-nvme|470|\n |karpenter.k8s.aws/instance-memory|124928|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|f1.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|114565Mi|\n |pods|58|\n### `f1.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|f|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|f1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-local-nvme|940|\n |karpenter.k8s.aws/instance-memory|249856|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|f1.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|228187Mi|\n |pods|234|\n### `f1.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|f|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|f1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-local-nvme|3760|\n |karpenter.k8s.aws/instance-memory|999424|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|f1.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|919778Mi|\n |pods|394|\n## f2 Family\n### `f2.6xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|f|\n |karpenter.k8s.aws/instance-cpu|24|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|7500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|f2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|940|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|6xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|f2.6xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|23870m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `f2.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|f|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|f2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1880|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|f2.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|482037Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `f2.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|f|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|f2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7520|\n |karpenter.k8s.aws/instance-memory|2097152|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|f2.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1931403Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## g4ad Family\n### `g4ad.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g4ad|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-gpu-memory|8192|\n |karpenter.k8s.aws/instance-gpu-name|radeon-pro-v520|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|150|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2000|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g4ad.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |amd.com/gpu|1|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14712Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|12|\n### `g4ad.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g4ad|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-gpu-memory|8192|\n |karpenter.k8s.aws/instance-gpu-name|radeon-pro-v520|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|300|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|4167|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g4ad.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |amd.com/gpu|1|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29867Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|12|\n### `g4ad.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g4ad|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-gpu-memory|8192|\n |karpenter.k8s.aws/instance-gpu-name|radeon-pro-v520|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|600|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|8333|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g4ad.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |amd.com/gpu|1|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|59946Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|11|\n### `g4ad.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g4ad|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-gpu-count|2|\n |karpenter.k8s.aws/instance-gpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-gpu-memory|8192|\n |karpenter.k8s.aws/instance-gpu-name|radeon-pro-v520|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1200|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g4ad.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |amd.com/gpu|2|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|120248Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|10|\n### `g4ad.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6300|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g4ad|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-gpu-count|4|\n |karpenter.k8s.aws/instance-gpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-gpu-memory|8192|\n |karpenter.k8s.aws/instance-gpu-name|radeon-pro-v520|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2400|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g4ad.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |amd.com/gpu|4|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|6|\n## g4dn Family\n### `g4dn.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g4dn|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|t4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|125|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g4dn.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |nvidia.com/gpu|1|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|39|\n### `g4dn.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g4dn|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|t4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|225|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g4dn.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29636Mi|\n |nvidia.com/gpu|1|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|39|\n### `g4dn.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g4dn|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|t4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|225|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g4dn.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|59946Mi|\n |nvidia.com/gpu|1|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|59|\n### `g4dn.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g4dn|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|t4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|900|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g4dn.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|120248Mi|\n |nvidia.com/gpu|1|\n |pods|58|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|58|\n### `g4dn.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g4dn|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-gpu-count|4|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|t4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|900|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g4dn.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |nvidia.com/gpu|4|\n |pods|234|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|54|\n### `g4dn.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g4dn|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|t4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|900|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g4dn.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|241490Mi|\n |nvidia.com/gpu|1|\n |pods|58|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|118|\n### `g4dn.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g4dn|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-gpu-count|8|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|t4|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|1800|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g4dn.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |nvidia.com/gpu|8|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## g5 Family\n### `g5.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|a10g|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|250|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |nvidia.com/gpu|1|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|4|\n### `g5.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|a10g|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|450|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |nvidia.com/gpu|1|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|17|\n### `g5.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|a10g|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|600|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |nvidia.com/gpu|1|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|34|\n### `g5.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|16000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|a10g|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|900|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |nvidia.com/gpu|1|\n |pods|234|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|84|\n### `g5.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|16000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|4|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|a10g|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |nvidia.com/gpu|4|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `g5.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|16000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|a10g|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |nvidia.com/gpu|1|\n |pods|234|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|114|\n### `g5.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|4|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|a10g|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |nvidia.com/gpu|4|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `g5.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|8|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|a10g|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|723299Mi|\n |nvidia.com/gpu|8|\n |pods|345|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|115|\n## g5g Family\n### `g5g.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|g5g|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|t4g|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5g.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6525Mi|\n |nvidia.com/gpu|1|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `g5g.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|g5g|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|t4g|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5g.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |nvidia.com/gpu|1|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `g5g.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|g5g|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|t4g|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5g.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27322Mi|\n |nvidia.com/gpu|1|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `g5g.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|g5g|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|t4g|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5g.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |nvidia.com/gpu|1|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `g5g.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|g5g|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|2|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|t4g|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5g.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |nvidia.com/gpu|2|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `g5g.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|g5g|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|2|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|t4g|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5g.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |nvidia.com/gpu|2|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## g6 Family\n### `g6.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|5000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|250|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |nvidia.com/gpu|1|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `g6.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|5000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|450|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |nvidia.com/gpu|1|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `g6.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|8000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|600|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |nvidia.com/gpu|1|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `g6.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|16000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|900|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |nvidia.com/gpu|1|\n |pods|234|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|84|\n### `g6.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|4|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3760|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |nvidia.com/gpu|4|\n |pods|234|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|114|\n### `g6.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1880|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |nvidia.com/gpu|1|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `g6.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|4|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3760|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |nvidia.com/gpu|4|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `g6.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|8|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7520|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |nvidia.com/gpu|8|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## g6e Family\n### `g6e.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|5000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6e|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|45776|\n |karpenter.k8s.aws/instance-gpu-name|l40s|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|250|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6e.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |nvidia.com/gpu|1|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `g6e.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|5000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6e|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|45776|\n |karpenter.k8s.aws/instance-gpu-name|l40s|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|450|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6e.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |nvidia.com/gpu|1|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `g6e.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|8000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6e|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|45776|\n |karpenter.k8s.aws/instance-gpu-name|l40s|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|600|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6e.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |nvidia.com/gpu|1|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `g6e.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|16000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6e|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|45776|\n |karpenter.k8s.aws/instance-gpu-name|l40s|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|900|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6e.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |nvidia.com/gpu|1|\n |pods|234|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|84|\n### `g6e.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6e|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|4|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|45776|\n |karpenter.k8s.aws/instance-gpu-name|l40s|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6e.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360157Mi|\n |nvidia.com/gpu|4|\n |pods|292|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|112|\n### `g6e.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6e|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|45776|\n |karpenter.k8s.aws/instance-gpu-name|l40s|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|35000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6e.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |nvidia.com/gpu|1|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `g6e.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6e|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|4|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|45776|\n |karpenter.k8s.aws/instance-gpu-name|l40s|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6e.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|721682Mi|\n |nvidia.com/gpu|4|\n |pods|492|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|102|\n### `g6e.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6e|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|8|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|45776|\n |karpenter.k8s.aws/instance-gpu-name|l40s|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|400000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6e.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1449132Mi|\n |nvidia.com/gpu|8|\n |pods|492|\n |vpc.amazonaws.com/efa|4|\n |vpc.amazonaws.com/pod-eni|82|\n## g6f Family\n### `g6f.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|5000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6f|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|0|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|2861|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|100|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1500|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6f.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|7002Mi|\n |pods|20|\n |vpc.amazonaws.com/pod-eni|10|\n### `g6f.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|5000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6f|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|0|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|2861|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|100|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6f.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `g6f.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|5000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6f|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|0|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|5722|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|200|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6f.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `g6f.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6f|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|0|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|11444|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|450|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6f.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n## gr6 Family\n### `gr6.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|gr|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|8000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|gr6|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|600|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|gr6.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |nvidia.com/gpu|1|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `gr6.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|gr|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|16000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|gr6|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|900|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|gr6.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |nvidia.com/gpu|1|\n |pods|234|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|84|\n## gr6f Family\n### `gr6f.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|gr|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|8000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|gr6f|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|0|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|11444|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|450|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|gr6f.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n## h1 Family\n### `h1.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|h|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|1750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|h1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|h1.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n### `h1.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|h|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|h1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|h1.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n### `h1.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|h|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|7000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|h1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|h1.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n### `h1.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|h|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|h1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|h1.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|237794Mi|\n |pods|394|\n## hpc6a Family\n### `hpc6a.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|hpc|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|hpc6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|hpc6a.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|362269Mi|\n |pods|100|\n |vpc.amazonaws.com/efa|1|\n## hpc6id Family\n### `hpc6id.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|hpc|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|hpc6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|15200|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|hpc6id.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|969016Mi|\n |pods|51|\n |vpc.amazonaws.com/efa|2|\n## hpc7a Family\n### `hpc7a.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|hpc|\n |karpenter.k8s.aws/instance-cpu|24|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|hpc7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|300000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|hpc7a.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|23870m|\n |ephemeral-storage|17Gi|\n |memory|725994Mi|\n |pods|100|\n |vpc.amazonaws.com/efa|2|\n### `hpc7a.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|hpc|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|hpc7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|300000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|hpc7a.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|725994Mi|\n |pods|100|\n |vpc.amazonaws.com/efa|2|\n### `hpc7a.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|hpc|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|hpc7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|300000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|hpc7a.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|725994Mi|\n |pods|100|\n |vpc.amazonaws.com/efa|2|\n### `hpc7a.96xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|hpc|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|hpc7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|300000|\n |karpenter.k8s.aws/instance-size|96xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|hpc7a.96xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|725994Mi|\n |pods|100|\n |vpc.amazonaws.com/efa|2|\n## hpc7g Family\n### `hpc7g.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|hpc|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|hpc7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|hpc7g.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118649Mi|\n |pods|198|\n |vpc.amazonaws.com/efa|1|\n### `hpc7g.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|hpc|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|hpc7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|hpc7g.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118649Mi|\n |pods|198|\n |vpc.amazonaws.com/efa|1|\n### `hpc7g.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|hpc|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|hpc7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|hpc7g.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|118649Mi|\n |pods|198|\n |vpc.amazonaws.com/efa|1|\n## i2 Family\n### `i2.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|i2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|31232|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i2.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|27896Mi|\n |pods|58|\n### `i2.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|i2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|62464|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i2.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|56786Mi|\n |pods|58|\n### `i2.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|i2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|124928|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i2.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|112629Mi|\n |pods|234|\n### `i2.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|i2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|249856|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i2.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|228187Mi|\n |pods|234|\n## i3 Family\n### `i3.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|425|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|i3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-local-nvme|475|\n |karpenter.k8s.aws/instance-memory|15616|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|13770Mi|\n |pods|29|\n### `i3.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|850|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|i3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|31232|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|27896Mi|\n |pods|58|\n### `i3.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|1700|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|i3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|62464|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|56786Mi|\n |pods|58|\n### `i3.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|i3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|124928|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|112629Mi|\n |pods|234|\n### `i3.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|7000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|i3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|249856|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|228187Mi|\n |pods|234|\n### `i3.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|i3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-local-nvme|15200|\n |karpenter.k8s.aws/instance-memory|499712|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|453771Mi|\n |pods|737|\n## i3en Family\n### `i3en.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1250|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2100|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3en.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|5|\n### `i3en.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2500|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|4200|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3en.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|12|\n### `i3en.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|5000|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|8400|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3en.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|28|\n### `i3en.3xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|12|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7500|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|3xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3en.3xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|11900m|\n |ephemeral-storage|17Gi|\n |memory|89938Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `i3en.6xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|24|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|15000|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|6xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3en.6xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|23870m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `i3en.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|30000|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3en.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|54|\n### `i3en.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|60000|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3en.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `i3en.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|60000|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3en.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## i4g Family\n### `i4g.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4g|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|468|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4g.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14422Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `i4g.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4g|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|937|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4g.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `i4g.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4g|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1875|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|4687|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4g.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59568Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `i4g.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4g|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3750|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|9375|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4g.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `i4g.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4g|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7500|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4g.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239495Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `i4g.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4g|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|15000|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4g.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476445Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## i4i Family\n### `i4i.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4i|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|468|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4i.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n### `i4i.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4i|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|937|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4i.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|6|\n### `i4i.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4i|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1875|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|4687|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4i.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|26|\n### `i4i.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4i|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3750|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|9375|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4i.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|52|\n### `i4i.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4i|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7500|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4i.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|112|\n### `i4i.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4i|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|11250|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|28120|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4i.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|112|\n### `i4i.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4i|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|15000|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4i.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|120|\n### `i4i.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4i|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|22500|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|56250|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4i.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|722287Mi|\n |pods|437|\n |vpc.amazonaws.com/pod-eni|105|\n### `i4i.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4i|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|30000|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4i.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|961470Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|120|\n### `i4i.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4i|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|30000|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4i.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|961470Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|120|\n## i7i Family\n### `i7i.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|468|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1171|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7i.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `i7i.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|937|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|2343|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7i.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `i7i.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1875|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|4687|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7i.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `i7i.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3750|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|9375|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7i.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `i7i.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7500|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7i.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `i7i.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|11250|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|14063|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7i.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `i7i.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|15000|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7i.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `i7i.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|22500|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|28125|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7i.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `i7i.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|22500|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|28125|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7i.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `i7i.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|45000|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|56250|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7i.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446437Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `i7i.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|45000|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|56250|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7i.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446437Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## i7ie Family\n### `i7ie.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7ie|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1250|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2083|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7ie.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|19|\n### `i7ie.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7ie|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2500|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|4166|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7ie.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|27|\n### `i7ie.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7ie|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|5000|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|8333|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7ie.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|27|\n### `i7ie.3xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|12|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7ie|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7500|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|3xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7ie.3xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|11900m|\n |ephemeral-storage|17Gi|\n |memory|89938Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|27|\n### `i7ie.6xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|24|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7ie|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|15000|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|6xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7ie.6xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|23870m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `i7ie.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7ie|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|30000|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7ie.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|359035Mi|\n |pods|394|\n |vpc.amazonaws.com/pod-eni|54|\n### `i7ie.18xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|72|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|22500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7ie|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|45000|\n |karpenter.k8s.aws/instance-memory|589824|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|18xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7ie.18xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|71750m|\n |ephemeral-storage|17Gi|\n |memory|537125Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `i7ie.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7ie|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|60000|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7ie.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `i7ie.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7ie|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|60000|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7ie.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `i7ie.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7ie|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|120000|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7ie.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446437Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `i7ie.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7ie|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|120000|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7ie.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446437Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## i8g Family\n### `i8g.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|468|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1172|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8g.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14422Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `i8g.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|937|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|2344|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8g.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `i8g.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1875|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|4688|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8g.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59568Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `i8g.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3750|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|9375|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8g.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `i8g.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7500|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8g.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239495Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `i8g.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|11250|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|14063|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8g.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360736Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `i8g.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|15000|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8g.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476445Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `i8g.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|22500|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|28125|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8g.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718928Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `i8g.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|22500|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|28125|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8g.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718928Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `i8g.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|45000|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|56250|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8g.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446378Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## i8ge Family\n### `i8ge.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8ge|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1250|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2100|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8ge.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14422Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|19|\n### `i8ge.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8ge|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2500|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|4200|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8ge.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|27|\n### `i8ge.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8ge|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|5000|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|8400|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8ge.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59568Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|27|\n### `i8ge.3xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|12|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8ge|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7500|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|3xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8ge.3xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|11900m|\n |ephemeral-storage|17Gi|\n |memory|88581Mi|\n |pods|176|\n |vpc.amazonaws.com/pod-eni|25|\n### `i8ge.6xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|24|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8ge|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|15000|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|6xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8ge.6xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|23870m|\n |ephemeral-storage|17Gi|\n |memory|178236Mi|\n |pods|292|\n |vpc.amazonaws.com/pod-eni|52|\n### `i8ge.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8ge|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|30000|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8ge.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|359460Mi|\n |pods|350|\n |vpc.amazonaws.com/pod-eni|50|\n### `i8ge.18xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|72|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|22500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8ge|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|45000|\n |karpenter.k8s.aws/instance-memory|589824|\n |karpenter.k8s.aws/instance-network-bandwidth|112500|\n |karpenter.k8s.aws/instance-size|18xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8ge.18xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|71750m|\n |ephemeral-storage|17Gi|\n |memory|536527Mi|\n |pods|786|\n |vpc.amazonaws.com/pod-eni|106|\n### `i8ge.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8ge|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|60000|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|150000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8ge.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718389Mi|\n |pods|786|\n |vpc.amazonaws.com/pod-eni|106|\n### `i8ge.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8ge|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|60000|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|150000|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8ge.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718389Mi|\n |pods|786|\n |vpc.amazonaws.com/pod-eni|106|\n### `i8ge.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8ge|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|120000|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|300000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8ge.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1441527Mi|\n |pods|1178|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n### `i8ge.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8ge|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|120000|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|300000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8ge.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1441527Mi|\n |pods|1178|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n## im4gn Family\n### `im4gn.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|im|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|im4gn|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|937|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|im4gn.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6844Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `im4gn.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|im|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|im4gn|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1875|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|im4gn.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `im4gn.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|im|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|im4gn|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3750|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|im4gn.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `im4gn.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|im|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|im4gn|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7500|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|im4gn.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `im4gn.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|im|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|im4gn|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|15000|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|im4gn.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `im4gn.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|im|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|im4gn|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|30000|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|im4gn.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|233962Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## inf1 Family\n### `inf1.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-accelerator-count|1|\n |karpenter.k8s.aws/instance-accelerator-manufacturer|aws|\n |karpenter.k8s.aws/instance-accelerator-name|inferentia|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|inf|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|inf1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|inf1.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |aws.amazon.com/neuron|1|\n |aws.amazon.com/neuroncore|4|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6804Mi|\n |pods|38|\n |vpc.amazonaws.com/pod-eni|38|\n### `inf1.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-accelerator-count|1|\n |karpenter.k8s.aws/instance-accelerator-manufacturer|aws|\n |karpenter.k8s.aws/instance-accelerator-name|inferentia|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|inf|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|inf1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|inf1.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |aws.amazon.com/neuron|1|\n |aws.amazon.com/neuroncore|4|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14382Mi|\n |pods|38|\n |vpc.amazonaws.com/pod-eni|38|\n### `inf1.6xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-accelerator-count|4|\n |karpenter.k8s.aws/instance-accelerator-manufacturer|aws|\n |karpenter.k8s.aws/instance-accelerator-name|inferentia|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|inf|\n |karpenter.k8s.aws/instance-cpu|24|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|inf1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|49152|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|6xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|inf1.6xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |aws.amazon.com/neuron|4|\n |aws.amazon.com/neuroncore|16|\n |cpu|23870m|\n |ephemeral-storage|17Gi|\n |memory|42536Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `inf1.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-accelerator-count|16|\n |karpenter.k8s.aws/instance-accelerator-manufacturer|aws|\n |karpenter.k8s.aws/instance-accelerator-name|inferentia|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|inf|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|inf1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|inf1.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |aws.amazon.com/neuron|16|\n |aws.amazon.com/neuroncore|64|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|177976Mi|\n |pods|321|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|111|\n## inf2 Family\n### `inf2.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-accelerator-count|1|\n |karpenter.k8s.aws/instance-accelerator-manufacturer|aws|\n |karpenter.k8s.aws/instance-accelerator-name|inferentia2|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|inf|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|inf2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2083|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|inf2.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |aws.amazon.com/neuron|1|\n |aws.amazon.com/neuroncore|2|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `inf2.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-accelerator-count|1|\n |karpenter.k8s.aws/instance-accelerator-manufacturer|aws|\n |karpenter.k8s.aws/instance-accelerator-name|inferentia2|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|inf|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|inf2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|16667|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|inf2.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |aws.amazon.com/neuron|1|\n |aws.amazon.com/neuroncore|2|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `inf2.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-accelerator-count|6|\n |karpenter.k8s.aws/instance-accelerator-manufacturer|aws|\n |karpenter.k8s.aws/instance-accelerator-name|inferentia2|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|inf|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|inf2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|inf2.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |aws.amazon.com/neuron|6|\n |aws.amazon.com/neuroncore|12|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `inf2.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-accelerator-count|12|\n |karpenter.k8s.aws/instance-accelerator-manufacturer|aws|\n |karpenter.k8s.aws/instance-accelerator-name|inferentia2|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|inf|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|inf2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|inf2.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |aws.amazon.com/neuron|12|\n |aws.amazon.com/neuroncore|24|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## is4gen Family\n### `is4gen.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|is|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|is4gen|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|937|\n |karpenter.k8s.aws/instance-memory|6144|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|is4gen.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|5181Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `is4gen.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|is|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|is4gen|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1875|\n |karpenter.k8s.aws/instance-memory|12288|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|is4gen.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|10633Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `is4gen.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|is|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|is4gen|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3750|\n |karpenter.k8s.aws/instance-memory|24576|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|is4gen.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|21680Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `is4gen.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|is|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|is4gen|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7500|\n |karpenter.k8s.aws/instance-memory|49152|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|is4gen.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|44413Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `is4gen.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|is|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|is4gen|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|15000|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|is4gen.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|87943Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `is4gen.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|is|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|is4gen|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|30000|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|is4gen.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|178874Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n## m1 Family\n### `m1.small`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|0|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|1740|\n |karpenter.k8s.aws/instance-size|small|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m1.small|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|1166Mi|\n |pods|8|\n### `m1.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|0|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|3788|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m1.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|3016Mi|\n |pods|12|\n### `m1.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|0|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|7680|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m1.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6430Mi|\n |pods|29|\n### `m1.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|0|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|15360|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m1.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|13215Mi|\n |pods|58|\n## m2 Family\n### `m2.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|0|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|17510|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m2.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|15203Mi|\n |pods|58|\n### `m2.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|0|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|35020|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m2.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|30740Mi|\n |pods|118|\n### `m2.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|0|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|70041|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m2.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|61858Mi|\n |pods|234|\n## m3 Family\n### `m3.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|3840|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m3.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|3065Mi|\n |pods|12|\n### `m3.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|7680|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m3.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6430Mi|\n |pods|29|\n### `m3.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|15360|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m3.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|13215Mi|\n |pods|58|\n### `m3.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|30720|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m3.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|26763Mi|\n |pods|118|\n## m4 Family\n### `m4.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|450|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m4.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|7002Mi|\n |pods|20|\n### `m4.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m4.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n### `m4.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|1000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m4.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n### `m4.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m4.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n### `m4.10xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|40|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|163840|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|10xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m4.10xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|39830m|\n |ephemeral-storage|17Gi|\n |memory|148623Mi|\n |pods|234|\n### `m4.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m4.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n## m5 Family\n### `m5.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m5.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m5.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m5.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|13600|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m5.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m5.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|120|\n## m5a Family\n### `m5a.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5a.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m5a.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5a.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m5a.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5a.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m5a.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5a.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5a.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5a.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5a.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6780|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5a.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5a.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5a.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m5a.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|13750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5a.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## m5ad Family\n### `m5ad.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|75|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5ad.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m5ad.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|150|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5ad.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m5ad.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|300|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5ad.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m5ad.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|600|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5ad.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5ad.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1200|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5ad.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5ad.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6780|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1800|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5ad.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5ad.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2400|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5ad.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m5ad.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|13750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3600|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5ad.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## m5d Family\n### `m5d.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|75|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5d.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m5d.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|150|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5d.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m5d.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|300|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5d.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m5d.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|600|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5d.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5d.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1200|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5d.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5d.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1800|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5d.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5d.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|13600|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2400|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5d.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m5d.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3600|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5d.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m5d.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3600|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5d.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## m5dn Family\n### `m5dn.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|75|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|2100|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5dn.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m5dn.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|150|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|4100|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5dn.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m5dn.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|300|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|8125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5dn.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m5dn.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|600|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|16250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5dn.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5dn.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1200|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5dn.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5dn.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1800|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5dn.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5dn.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|13600|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2400|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5dn.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m5dn.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3600|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5dn.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m5dn.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3600|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5dn.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## m5n Family\n### `m5n.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|2100|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5n.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m5n.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|4100|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5n.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m5n.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|8125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5n.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m5n.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|16250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5n.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5n.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5n.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5n.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5n.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5n.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|13600|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5n.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m5n.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5n.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m5n.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5n.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## m5zn Family\n### `m5zn.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5zn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|3000|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5zn.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|13|\n### `m5zn.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5zn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5zn.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|29|\n### `m5zn.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5zn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5zn.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|62|\n### `m5zn.3xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|12|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5zn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|49152|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|3xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5zn.3xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|11900m|\n |ephemeral-storage|17Gi|\n |memory|42536Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|92|\n### `m5zn.6xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|24|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5zn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|6xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5zn.6xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|23870m|\n |ephemeral-storage|17Gi|\n |memory|88002Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `m5zn.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5zn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5zn.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m5zn.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5zn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5zn.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## m6a Family\n### `m6a.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6a.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m6a.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6a.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m6a.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6a.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m6a.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6a.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m6a.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6a.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `m6a.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6a.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `m6a.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6a.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6a.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6a.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6a.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6a.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6a.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6a.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6a.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6a.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## m6g Family\n### `m6g.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|500|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6g.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|3286Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `m6g.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6g.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6844Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m6g.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6g.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m6g.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6g.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m6g.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6g.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m6g.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6g.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m6g.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14250|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6g.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178874Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m6g.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6g.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|233962Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6g.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6g.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|233962Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## m6gd Family\n### `m6gd.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|59|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|500|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6gd.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|3286Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `m6gd.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6gd.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6844Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m6gd.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6gd.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m6gd.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6gd.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m6gd.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6gd.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m6gd.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6gd.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m6gd.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14250|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6gd.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178874Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m6gd.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6gd.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|233962Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6gd.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6gd.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|233962Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## m6i Family\n### `m6i.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6i.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m6i.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6i.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m6i.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6i.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m6i.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6i.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m6i.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6i.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `m6i.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6i.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `m6i.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6i.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6i.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6i.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6i.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6i.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6i.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6i.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## m6id Family\n### `m6id.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6id.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m6id.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6id.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m6id.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6id.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m6id.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6id.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m6id.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6id.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `m6id.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6id.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `m6id.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6id.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6id.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|5700|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6id.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6id.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6id.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6id.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6id.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## m6idn Family\n### `m6idn.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6idn.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m6idn.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6idn.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m6idn.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6idn.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m6idn.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6idn.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m6idn.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6idn.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `m6idn.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|37500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6idn.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `m6idn.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|50000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6idn.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6idn.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|75000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|5700|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|150000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6idn.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6idn.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6idn.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|480277Mi|\n |pods|394|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|106|\n### `m6idn.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6idn.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|480277Mi|\n |pods|394|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|106|\n## m6in Family\n### `m6in.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6in.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m6in.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6in.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m6in.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6in.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m6in.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6in.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m6in.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6in.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `m6in.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|37500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6in.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `m6in.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|50000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6in.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6in.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|75000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|150000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6in.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6in.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6in.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|480277Mi|\n |pods|394|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|106|\n### `m6in.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6in.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|480277Mi|\n |pods|394|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|106|\n## m7a Family\n### `m7a.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|390|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7a.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|3345Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `m7a.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7a.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m7a.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7a.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m7a.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7a.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m7a.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7a.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m7a.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7a.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `m7a.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7a.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `m7a.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7a.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m7a.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7a.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m7a.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7a.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m7a.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7a.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m7a.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7a.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## m7g Family\n### `m7g.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|520|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7g.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|3286Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `m7g.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7g.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6844Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m7g.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1876|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7g.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m7g.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7g.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m7g.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7g.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m7g.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7g.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m7g.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7g.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178874Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m7g.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7g.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|233962Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m7g.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7g.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|233962Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## m7gd Family\n### `m7gd.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|59|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|520|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7gd.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|3286Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `m7gd.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7gd.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6844Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m7gd.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1876|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7gd.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m7gd.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7gd.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m7gd.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7gd.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m7gd.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7gd.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m7gd.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7gd.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178874Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m7gd.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7gd.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|233962Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m7gd.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7gd.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|233962Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## m7i Family\n### `m7i.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m7i.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m7i.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m7i.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m7i.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `m7i.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `m7i.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m7i.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m7i.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m7i.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m7i.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## m7i-flex Family\n### `m7i-flex.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i-flex|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|390|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i-flex.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|3|\n### `m7i-flex.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i-flex|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i-flex.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|8|\n### `m7i-flex.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i-flex|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i-flex.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m7i-flex.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i-flex|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i-flex.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|34|\n### `m7i-flex.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i-flex|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i-flex.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m7i-flex.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i-flex|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|9375|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i-flex.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `m7i-flex.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i-flex|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i-flex.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## m8g Family\n### `m8g.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|520|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8g.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|3286Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `m8g.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8g.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6844Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m8g.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8g.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m8g.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8g.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m8g.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8g.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m8g.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8g.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m8g.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8g.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178874Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m8g.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8g.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|233962Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m8g.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8g.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355203Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m8g.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8g.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355203Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m8g.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8g.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|718928Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m8g.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8g.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|718928Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## m8gd Family\n### `m8gd.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|59|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|520|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gd.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|3286Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `m8gd.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gd.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6844Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m8gd.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gd.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m8gd.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gd.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m8gd.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gd.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m8gd.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gd.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m8gd.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gd.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178874Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m8gd.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gd.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|233962Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m8gd.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|5700|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gd.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355203Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m8gd.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|5700|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gd.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355203Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m8gd.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|11400|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gd.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|718928Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m8gd.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|11400|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gd.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|718928Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## m8i Family\n### `m8i.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6573Mi|\n |pods|59|\n |vpc.amazonaws.com/pod-eni|9|\n### `m8i.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|13502Mi|\n |pods|118|\n |vpc.amazonaws.com/pod-eni|18|\n### `m8i.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|28657Mi|\n |pods|118|\n |vpc.amazonaws.com/pod-eni|38|\n### `m8i.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|55931Mi|\n |pods|394|\n |vpc.amazonaws.com/pod-eni|54|\n### `m8i.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|115474Mi|\n |pods|492|\n |vpc.amazonaws.com/pod-eni|82|\n### `m8i.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|175017Mi|\n |pods|590|\n |vpc.amazonaws.com/pod-eni|110|\n### `m8i.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|231018Mi|\n |pods|1010|\n |vpc.amazonaws.com/pod-eni|106|\n### `m8i.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|352259Mi|\n |pods|1010|\n |vpc.amazonaws.com/pod-eni|106|\n### `m8i.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|467957Mi|\n |pods|1514|\n |vpc.amazonaws.com/pod-eni|98|\n### `m8i.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|710440Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n### `m8i.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|710440Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n### `m8i.96xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|384|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|96xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i.96xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|382970m|\n |ephemeral-storage|17Gi|\n |memory|1437890Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n### `m8i.metal-96xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|384|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal-96xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i.metal-96xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|382970m|\n |ephemeral-storage|17Gi|\n |memory|1437890Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n## m8i-flex Family\n### `m8i-flex.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|468|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i-flex.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6573Mi|\n |pods|59|\n |vpc.amazonaws.com/pod-eni|3|\n### `m8i-flex.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i-flex.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|13502Mi|\n |pods|118|\n |vpc.amazonaws.com/pod-eni|8|\n### `m8i-flex.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i-flex.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|28657Mi|\n |pods|118|\n |vpc.amazonaws.com/pod-eni|18|\n### `m8i-flex.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i-flex.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|55931Mi|\n |pods|394|\n |vpc.amazonaws.com/pod-eni|34|\n### `m8i-flex.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i-flex.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|115474Mi|\n |pods|492|\n |vpc.amazonaws.com/pod-eni|52|\n### `m8i-flex.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|11250|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i-flex.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|175017Mi|\n |pods|590|\n |vpc.amazonaws.com/pod-eni|110|\n### `m8i-flex.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i-flex.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|231018Mi|\n |pods|1010|\n |vpc.amazonaws.com/pod-eni|106|\n## p3 Family\n### `p3.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|p|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|1750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|p3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|v100|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|62464|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|p3.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|56786Mi|\n |nvidia.com/gpu|1|\n |pods|58|\n### `p3.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|p|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|7000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|p3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-gpu-count|4|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|v100|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|249856|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|p3.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|228187Mi|\n |nvidia.com/gpu|4|\n |pods|234|\n### `p3.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|p|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|p3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-gpu-count|8|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|v100|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|499712|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|p3.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|459304Mi|\n |nvidia.com/gpu|8|\n |pods|234|\n## p3dn Family\n### `p3dn.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|p|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|p3dn|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-gpu-count|8|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|32768|\n |karpenter.k8s.aws/instance-gpu-name|v100|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1800|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|p3dn.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |nvidia.com/gpu|8|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## p4d Family\n### `p4d.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|p|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|p4d|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-gpu-count|8|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|40960|\n |karpenter.k8s.aws/instance-gpu-name|a100|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|8000|\n |karpenter.k8s.aws/instance-memory|1179648|\n |karpenter.k8s.aws/instance-network-bandwidth|400000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|p4d.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|1082712Mi|\n |nvidia.com/gpu|8|\n |pods|737|\n |vpc.amazonaws.com/efa|4|\n |vpc.amazonaws.com/pod-eni|62|\n## p4de Family\n### `p4de.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|p|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|p4de|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-gpu-count|8|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|81920|\n |karpenter.k8s.aws/instance-gpu-name|a100|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|8000|\n |karpenter.k8s.aws/instance-memory|1179648|\n |karpenter.k8s.aws/instance-network-bandwidth|400000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|p4de.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|1082712Mi|\n |nvidia.com/gpu|8|\n |pods|737|\n |vpc.amazonaws.com/efa|4|\n |vpc.amazonaws.com/pod-eni|62|\n## p5 Family\n### `p5.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|p|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|p5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|81920|\n |karpenter.k8s.aws/instance-gpu-name|h100|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|p5.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|240830Mi|\n |nvidia.com/gpu|1|\n |pods|118|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|58|\n### `p5.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|p|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|p5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|8|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|81920|\n |karpenter.k8s.aws/instance-gpu-name|h100|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|30400|\n |karpenter.k8s.aws/instance-memory|2097152|\n |karpenter.k8s.aws/instance-network-bandwidth|3200000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|p5.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1938410Mi|\n |nvidia.com/gpu|8|\n |pods|100|\n |vpc.amazonaws.com/efa|32|\n |vpc.amazonaws.com/pod-eni|120|\n## p5e Family\n### `p5e.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|p|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|p5e|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|8|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|144384|\n |karpenter.k8s.aws/instance-gpu-name|h200|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|30400|\n |karpenter.k8s.aws/instance-memory|2097152|\n |karpenter.k8s.aws/instance-network-bandwidth|3200000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|p5e.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1938410Mi|\n |nvidia.com/gpu|8|\n |pods|100|\n |vpc.amazonaws.com/efa|32|\n |vpc.amazonaws.com/pod-eni|120|\n## p5en Family\n### `p5en.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|p|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|p5en|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|8|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|144384|\n |karpenter.k8s.aws/instance-gpu-name|h200|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|30400|\n |karpenter.k8s.aws/instance-memory|2097152|\n |karpenter.k8s.aws/instance-network-bandwidth|3200000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|p5en.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1937332Mi|\n |nvidia.com/gpu|8|\n |pods|198|\n |vpc.amazonaws.com/efa|16|\n |vpc.amazonaws.com/pod-eni|120|\n## p6-b200 Family\n### `p6-b200.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|p|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|p6-b200|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|8|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|183359|\n |karpenter.k8s.aws/instance-gpu-name|b200|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|30400|\n |karpenter.k8s.aws/instance-memory|2097152|\n |karpenter.k8s.aws/instance-network-bandwidth|3200000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|p6-b200.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1937332Mi|\n |nvidia.com/gpu|8|\n |pods|198|\n |vpc.amazonaws.com/efa|8|\n |vpc.amazonaws.com/pod-eni|120|\n## r3 Family\n### `r3.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|15360|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r3.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|13534Mi|\n |pods|29|\n### `r3.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|31232|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r3.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|27896Mi|\n |pods|58|\n### `r3.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|62464|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r3.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|56786Mi|\n |pods|58|\n### `r3.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|124928|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r3.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|112629Mi|\n |pods|234|\n### `r3.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|249856|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r3.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|228187Mi|\n |pods|234|\n## r4 Family\n### `r4.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|425|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|15616|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r4.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|13770Mi|\n |pods|29|\n### `r4.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|850|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|31232|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r4.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|27896Mi|\n |pods|58|\n### `r4.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|1700|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|62464|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r4.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|56786Mi|\n |pods|58|\n### `r4.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|124928|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r4.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|112629Mi|\n |pods|234|\n### `r4.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|7000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|249856|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r4.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|228187Mi|\n |pods|234|\n### `r4.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|499712|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r4.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|453771Mi|\n |pods|737|\n## r5 Family\n### `r5.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r5.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r5.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r5.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|13600|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r5.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r5.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|120|\n## r5a Family\n### `r5a.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5a.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r5a.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5a.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r5a.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5a.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r5a.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5a.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5a.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5a.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5a.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6780|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5a.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5a.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5a.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r5a.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|13570|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5a.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## r5ad Family\n### `r5ad.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|75|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5ad.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r5ad.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|150|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5ad.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r5ad.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|300|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5ad.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r5ad.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|600|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5ad.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5ad.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1200|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5ad.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5ad.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6780|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1800|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5ad.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5ad.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2400|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5ad.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r5ad.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|13570|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3600|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5ad.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## r5b Family\n### `r5b.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5b|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5b.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r5b.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5b|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5b.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r5b.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5b|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5b.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r5b.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5b|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5b.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5b.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5b|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5b.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5b.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5b|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5b.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5b.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5b|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5b.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r5b.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5b|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5b.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r5b.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5b|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5b.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## r5d Family\n### `r5d.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|75|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5d.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r5d.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|150|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5d.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r5d.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|300|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5d.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r5d.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|600|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5d.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5d.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1200|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5d.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5d.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1800|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5d.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5d.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|13600|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2400|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5d.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r5d.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3600|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5d.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r5d.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3600|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5d.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## r5dn Family\n### `r5dn.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|75|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2100|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5dn.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r5dn.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|150|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|4100|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5dn.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r5dn.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|300|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|8125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5dn.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r5dn.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|600|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|16250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5dn.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5dn.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1200|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5dn.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5dn.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1800|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5dn.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5dn.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|13600|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2400|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5dn.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r5dn.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3600|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5dn.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r5dn.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3600|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5dn.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## r5n Family\n### `r5n.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2100|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5n.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r5n.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|4100|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5n.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r5n.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|8125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5n.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r5n.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|16250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5n.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5n.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5n.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5n.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5n.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5n.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|13600|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5n.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r5n.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5n.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r5n.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5n.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## r6a Family\n### `r6a.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6a.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r6a.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6a.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r6a.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6a.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r6a.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6a.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r6a.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6a.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `r6a.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6a.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `r6a.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6a.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6a.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6a.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6a.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6a.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|961470Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6a.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6a.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446437Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6a.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6a.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446437Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## r6g Family\n### `r6g.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|500|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6g.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|7075Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `r6g.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6g.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14422Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r6g.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6g.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r6g.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6g.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59568Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r6g.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6g.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r6g.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6g.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239495Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r6g.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14250|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6g.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360736Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r6g.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6g.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476445Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6g.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6g.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476445Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## r6gd Family\n### `r6gd.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|59|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|500|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6gd.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|7075Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `r6gd.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6gd.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14422Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r6gd.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6gd.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r6gd.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6gd.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59568Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r6gd.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6gd.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r6gd.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6gd.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239495Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r6gd.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14250|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6gd.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360736Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r6gd.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6gd.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476445Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6gd.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6gd.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476445Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## r6i Family\n### `r6i.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6i.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r6i.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6i.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r6i.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6i.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r6i.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6i.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r6i.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6i.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `r6i.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6i.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `r6i.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6i.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6i.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6i.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6i.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6i.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|961470Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6i.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6i.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|961470Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## r6id Family\n### `r6id.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6id.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r6id.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6id.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r6id.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6id.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r6id.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6id.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r6id.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6id.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `r6id.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6id.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `r6id.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6id.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6id.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|5700|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6id.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6id.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6id.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|961470Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6id.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6id.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|961470Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## r6idn Family\n### `r6idn.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6idn.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r6idn.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6idn.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r6idn.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6idn.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r6idn.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6idn.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r6idn.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6idn.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `r6idn.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|37500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6idn.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `r6idn.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|50000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6idn.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6idn.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|75000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|5700|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|150000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6idn.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6idn.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6idn.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|965243Mi|\n |pods|394|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|106|\n### `r6idn.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6idn.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|965243Mi|\n |pods|394|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|106|\n## r6in Family\n### `r6in.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6in.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r6in.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6in.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r6in.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6in.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r6in.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6in.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r6in.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6in.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `r6in.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|37500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6in.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `r6in.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|50000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6in.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6in.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|75000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|150000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6in.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6in.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6in.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|965243Mi|\n |pods|394|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|106|\n### `r6in.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6in.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|965243Mi|\n |pods|394|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|106|\n## r7a Family\n### `r7a.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|390|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7a.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|7134Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `r7a.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7a.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r7a.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7a.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r7a.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7a.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r7a.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7a.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r7a.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7a.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `r7a.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7a.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `r7a.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7a.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r7a.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7a.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r7a.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7a.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|961470Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r7a.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7a.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446437Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r7a.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7a.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446437Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## r7g Family\n### `r7g.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|520|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7g.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|7075Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `r7g.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7g.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14422Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r7g.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1876|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7g.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r7g.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7g.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59568Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r7g.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7g.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r7g.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7g.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239495Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r7g.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7g.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360736Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r7g.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7g.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476445Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r7g.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7g.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476445Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## r7gd Family\n### `r7gd.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|59|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|520|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7gd.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|7075Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `r7gd.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7gd.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14422Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r7gd.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1876|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7gd.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r7gd.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7gd.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59568Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r7gd.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7gd.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r7gd.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7gd.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239495Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r7gd.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7gd.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360736Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r7gd.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7gd.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476445Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r7gd.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7gd.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476445Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## r7i Family\n### `r7i.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7i.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r7i.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7i.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r7i.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7i.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r7i.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7i.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r7i.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7i.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `r7i.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7i.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `r7i.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7i.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r7i.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7i.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r7i.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7i.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r7i.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7i.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446437Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r7i.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7i.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446437Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## r7iz Family\n### `r7iz.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7iz|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7iz.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r7iz.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7iz|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7iz.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r7iz.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7iz|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7iz.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r7iz.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7iz|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7iz.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r7iz.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7iz|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7iz.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `r7iz.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7iz|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7iz.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `r7iz.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7iz|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7iz.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r7iz.metal-16xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7iz|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal-16xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7iz.metal-16xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r7iz.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7iz|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7iz.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|961470Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r7iz.metal-32xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7iz|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal-32xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7iz.metal-32xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|961470Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## r8g Family\n### `r8g.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|520|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8g.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|7075Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `r8g.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8g.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14422Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r8g.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8g.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r8g.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8g.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59568Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r8g.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8g.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r8g.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8g.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239495Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r8g.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8g.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360736Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r8g.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8g.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476445Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r8g.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8g.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718928Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r8g.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8g.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718928Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r8g.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8g.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446378Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r8g.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8g.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446378Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## r8gd Family\n### `r8gd.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|59|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|520|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gd.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|7075Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `r8gd.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gd.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14422Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r8gd.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gd.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r8gd.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gd.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59568Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r8gd.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gd.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r8gd.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gd.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239495Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r8gd.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gd.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360736Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r8gd.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gd.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476445Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r8gd.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|5700|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gd.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718928Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r8gd.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|5700|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gd.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718928Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r8gd.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|11400|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gd.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446378Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r8gd.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|11400|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gd.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446378Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## r8gn Family\n### `r8gn.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gn.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|7075Mi|\n |pods|8|\n### `r8gn.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gn.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14422Mi|\n |pods|29|\n### `r8gn.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gn.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n### `r8gn.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gn.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59568Mi|\n |pods|58|\n### `r8gn.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gn.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n### `r8gn.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gn.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|238857Mi|\n |pods|292|\n### `r8gn.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gn.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|359460Mi|\n |pods|350|\n### `r8gn.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gn.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|475906Mi|\n |pods|786|\n |vpc.amazonaws.com/efa|1|\n### `r8gn.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gn.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|714077Mi|\n |pods|1178|\n |vpc.amazonaws.com/efa|1|\n### `r8gn.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gn.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|714077Mi|\n |pods|1178|\n |vpc.amazonaws.com/efa|1|\n### `r8gn.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gn.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1447995Mi|\n |pods|590|\n |vpc.amazonaws.com/efa|2|\n### `r8gn.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gn.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1447995Mi|\n |pods|590|\n |vpc.amazonaws.com/efa|2|\n## r8i Family\n### `r8i.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14151Mi|\n |pods|59|\n |vpc.amazonaws.com/pod-eni|9|\n### `r8i.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|28657Mi|\n |pods|118|\n |vpc.amazonaws.com/pod-eni|18|\n### `r8i.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|58967Mi|\n |pods|118|\n |vpc.amazonaws.com/pod-eni|38|\n### `r8i.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|116552Mi|\n |pods|394|\n |vpc.amazonaws.com/pod-eni|54|\n### `r8i.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|236716Mi|\n |pods|492|\n |vpc.amazonaws.com/pod-eni|82|\n### `r8i.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|356879Mi|\n |pods|590|\n |vpc.amazonaws.com/pod-eni|110|\n### `r8i.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|473501Mi|\n |pods|1010|\n |vpc.amazonaws.com/pod-eni|106|\n### `r8i.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|715984Mi|\n |pods|1010|\n |vpc.amazonaws.com/pod-eni|106|\n### `r8i.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|952923Mi|\n |pods|1514|\n |vpc.amazonaws.com/pod-eni|98|\n### `r8i.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1437890Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n### `r8i.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1437890Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n### `r8i.96xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|384|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|3145728|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|96xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i.96xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|382970m|\n |ephemeral-storage|17Gi|\n |memory|2892789Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n### `r8i.metal-96xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|384|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|3145728|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal-96xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i.metal-96xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|382970m|\n |ephemeral-storage|17Gi|\n |memory|2892789Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n## r8i-flex Family\n### `r8i-flex.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|468|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i-flex.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14151Mi|\n |pods|59|\n |vpc.amazonaws.com/pod-eni|3|\n### `r8i-flex.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i-flex.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|28657Mi|\n |pods|118|\n |vpc.amazonaws.com/pod-eni|8|\n### `r8i-flex.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i-flex.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|58967Mi|\n |pods|118|\n |vpc.amazonaws.com/pod-eni|18|\n### `r8i-flex.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i-flex.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|116552Mi|\n |pods|394|\n |vpc.amazonaws.com/pod-eni|34|\n### `r8i-flex.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i-flex.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|236716Mi|\n |pods|492|\n |vpc.amazonaws.com/pod-eni|52|\n### `r8i-flex.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|11250|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i-flex.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|356879Mi|\n |pods|590|\n |vpc.amazonaws.com/pod-eni|110|\n### `r8i-flex.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i-flex.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|473501Mi|\n |pods|1010|\n |vpc.amazonaws.com/pod-eni|106|\n## t1 Family\n### `t1.micro`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|0|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|627|\n |karpenter.k8s.aws/instance-size|micro|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t1.micro|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|180Mi|\n |pods|4|\n## t2 Family\n### `t2.nano`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|512|\n |karpenter.k8s.aws/instance-size|nano|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t2.nano|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|74Mi|\n |pods|4|\n### `t2.micro`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|1024|\n |karpenter.k8s.aws/instance-size|micro|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t2.micro|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|548Mi|\n |pods|4|\n### `t2.small`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-size|small|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t2.small|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|1418Mi|\n |pods|11|\n### `t2.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t2.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3246Mi|\n |pods|17|\n### `t2.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t2.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6837Mi|\n |pods|35|\n### `t2.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t2.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14316Mi|\n |pods|44|\n### `t2.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t2.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29471Mi|\n |pods|44|\n## t3 Family\n### `t3.nano`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|512|\n |karpenter.k8s.aws/instance-network-bandwidth|32|\n |karpenter.k8s.aws/instance-size|nano|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3.nano|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|74Mi|\n |pods|4|\n### `t3.micro`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1024|\n |karpenter.k8s.aws/instance-network-bandwidth|64|\n |karpenter.k8s.aws/instance-size|micro|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3.micro|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|548Mi|\n |pods|4|\n### `t3.small`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|128|\n |karpenter.k8s.aws/instance-size|small|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3.small|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|1418Mi|\n |pods|11|\n### `t3.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|256|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3246Mi|\n |pods|17|\n### `t3.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2780|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|512|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6837Mi|\n |pods|35|\n### `t3.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2780|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1024|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n### `t3.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2780|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|2048|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n## t3a Family\n### `t3a.nano`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3a|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|512|\n |karpenter.k8s.aws/instance-network-bandwidth|32|\n |karpenter.k8s.aws/instance-size|nano|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3a.nano|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|74Mi|\n |pods|4|\n### `t3a.micro`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3a|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1024|\n |karpenter.k8s.aws/instance-network-bandwidth|64|\n |karpenter.k8s.aws/instance-size|micro|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3a.micro|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|548Mi|\n |pods|4|\n### `t3a.small`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3a|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|128|\n |karpenter.k8s.aws/instance-size|small|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3a.small|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|1451Mi|\n |pods|8|\n### `t3a.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3a|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|256|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3a.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3246Mi|\n |pods|17|\n### `t3a.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2780|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3a|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|512|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3a.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6837Mi|\n |pods|35|\n### `t3a.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2780|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3a|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1024|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3a.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n### `t3a.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2780|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3a|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|2048|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3a.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n## t4g Family\n### `t4g.nano`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t4g|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|512|\n |karpenter.k8s.aws/instance-network-bandwidth|32|\n |karpenter.k8s.aws/instance-size|nano|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t4g.nano|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|15Mi|\n |pods|4|\n### `t4g.micro`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t4g|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1024|\n |karpenter.k8s.aws/instance-network-bandwidth|64|\n |karpenter.k8s.aws/instance-size|micro|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t4g.micro|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|489Mi|\n |pods|4|\n### `t4g.small`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t4g|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|128|\n |karpenter.k8s.aws/instance-size|small|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t4g.small|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|1359Mi|\n |pods|11|\n### `t4g.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t4g|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|256|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t4g.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3187Mi|\n |pods|17|\n### `t4g.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2780|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t4g|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|512|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t4g.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6778Mi|\n |pods|35|\n### `t4g.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2780|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t4g|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1024|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t4g.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n### `t4g.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2780|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t4g|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|2048|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t4g.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n## trn1 Family\n### `trn1.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-accelerator-count|1|\n |karpenter.k8s.aws/instance-accelerator-manufacturer|aws|\n |karpenter.k8s.aws/instance-accelerator-name|trainium|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|trn|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|trn1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|trn1.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |aws.amazon.com/neuron|1|\n |aws.amazon.com/neuroncore|2|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|17|\n### `trn1.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-accelerator-count|16|\n |karpenter.k8s.aws/instance-accelerator-manufacturer|aws|\n |karpenter.k8s.aws/instance-accelerator-name|trainium|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|trn|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|trn1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|800000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|trn1.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |aws.amazon.com/neuron|16|\n |aws.amazon.com/neuroncore|32|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|481894Mi|\n |pods|247|\n |vpc.amazonaws.com/efa|8|\n |vpc.amazonaws.com/pod-eni|82|\n## trn1n Family\n### `trn1n.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-accelerator-count|16|\n |karpenter.k8s.aws/instance-accelerator-manufacturer|aws|\n |karpenter.k8s.aws/instance-accelerator-name|trainium|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|trn|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|trn1n|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|1600000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|trn1n.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |aws.amazon.com/neuron|16|\n |aws.amazon.com/neuroncore|32|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|481894Mi|\n |pods|247|\n |vpc.amazonaws.com/efa|16|\n |vpc.amazonaws.com/pod-eni|120|\n## trn2 Family\n### `trn2.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-accelerator-count|16|\n |karpenter.k8s.aws/instance-accelerator-manufacturer|aws|\n |karpenter.k8s.aws/instance-accelerator-name|trainium2|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|trn|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|trn2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|2097152|\n |karpenter.k8s.aws/instance-network-bandwidth|3200000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|trn2.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |aws.amazon.com/neuron|16|\n |aws.amazon.com/neuroncore|128|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1938410Mi|\n |pods|100|\n |vpc.amazonaws.com/efa|16|\n## u-3tb1 Family\n### `u-3tb1.56xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|u|\n |karpenter.k8s.aws/instance-cpu|224|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|u-3tb1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|3145728|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|56xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|u-3tb1.56xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|223370m|\n |ephemeral-storage|17Gi|\n |memory|2906869Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|6|\n## u-6tb1 Family\n### `u-6tb1.56xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|u|\n |karpenter.k8s.aws/instance-cpu|224|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|38000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|u-6tb1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|6291456|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|56xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|u-6tb1.56xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|223370m|\n |ephemeral-storage|17Gi|\n |memory|5811134Mi|\n |pods|737|\n### `u-6tb1.112xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|u|\n |karpenter.k8s.aws/instance-cpu|448|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|38000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|u-6tb1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|6291456|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|112xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|u-6tb1.112xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|446810m|\n |ephemeral-storage|17Gi|\n |memory|5811134Mi|\n |pods|737|\n## u7i-12tb Family\n### `u7i-12tb.224xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|u|\n |karpenter.k8s.aws/instance-cpu|896|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|1900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|u7i-12tb|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|12582912|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|224xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|u7i-12tb.224xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|893690m|\n |ephemeral-storage|17Gi|\n |memory|11630731Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## u7i-6tb Family\n### `u7i-6tb.112xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|u|\n |karpenter.k8s.aws/instance-cpu|448|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|1900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|u7i-6tb|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|6291456|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|112xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|u7i-6tb.112xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|446810m|\n |ephemeral-storage|17Gi|\n |memory|5811134Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## u7i-8tb Family\n### `u7i-8tb.112xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|u|\n |karpenter.k8s.aws/instance-cpu|448|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|1900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|u7i-8tb|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8388608|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|112xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|u7i-8tb.112xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|446810m|\n |ephemeral-storage|17Gi|\n |memory|7751000Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## u7in-16tb Family\n### `u7in-16tb.224xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|u|\n |karpenter.k8s.aws/instance-cpu|896|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|1900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|u7in-16tb|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16777216|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|224xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|u7in-16tb.224xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|893690m|\n |ephemeral-storage|17Gi|\n |memory|15514235Mi|\n |pods|394|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|106|\n## u7in-24tb Family\n### `u7in-24tb.224xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|u|\n |karpenter.k8s.aws/instance-cpu|896|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|1900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|u7in-24tb|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|25165824|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|224xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|u7in-24tb.224xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|893690m|\n |ephemeral-storage|17Gi|\n |memory|23273698Mi|\n |pods|394|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|106|\n## u7in-32tb Family\n### `u7in-32tb.224xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|u|\n |karpenter.k8s.aws/instance-cpu|896|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|1900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|u7in-32tb|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|33554432|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|224xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|u7in-32tb.224xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|893690m|\n |ephemeral-storage|17Gi|\n |memory|31033160Mi|\n |pods|394|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|106|\n## vt1 Family\n### `vt1.3xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|vt|\n |karpenter.k8s.aws/instance-cpu|12|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|vt1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|24576|\n |karpenter.k8s.aws/instance-network-bandwidth|3120|\n |karpenter.k8s.aws/instance-size|3xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|vt1.3xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|11900m|\n |ephemeral-storage|17Gi|\n |memory|21739Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `vt1.6xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|vt|\n |karpenter.k8s.aws/instance-cpu|24|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|vt1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|49152|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|6xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|vt1.6xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|23870m|\n |ephemeral-storage|17Gi|\n |memory|42536Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `vt1.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|vt|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|vt1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|vt1.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## x1 Family\n### `x1.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|7000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|999424|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x1.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|921538Mi|\n |pods|234|\n### `x1.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|1998848|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x1.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|1846005Mi|\n |pods|234|\n## x1e Family\n### `x1e.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x1e|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|124928|\n |karpenter.k8s.aws/instance-network-bandwidth|625|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x1e.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|114884Mi|\n |pods|29|\n### `x1e.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|1000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x1e|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|249856|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x1e.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|230123Mi|\n |pods|58|\n### `x1e.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|1750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x1e|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|499712|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x1e.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|461240Mi|\n |pods|58|\n### `x1e.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x1e|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|999424|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x1e.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|923474Mi|\n |pods|58|\n### `x1e.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|7000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x1e|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|1998848|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x1e.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|1846005Mi|\n |pods|234|\n### `x1e.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x1e|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|3997696|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x1e.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|3694939Mi|\n |pods|234|\n## x2gd Family\n### `x2gd.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x2gd|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|59|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|500|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2gd.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|14653Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|10|\n### `x2gd.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x2gd|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2gd.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|29577Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `x2gd.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x2gd|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2gd.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|59568Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `x2gd.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x2gd|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|475|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2gd.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|120189Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `x2gd.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x2gd|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2gd.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|239495Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `x2gd.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x2gd|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2gd.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|481978Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `x2gd.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14250|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x2gd|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2gd.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|724461Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `x2gd.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x2gd|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2gd.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|961411Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `x2gd.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x2gd|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2gd.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|961411Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## x2idn Family\n### `x2idn.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2idn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2idn.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|961470Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `x2idn.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2idn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2idn.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|1446437Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `x2idn.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2idn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|2097152|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2idn.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|1931403Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `x2idn.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2idn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|2097152|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2idn.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|1931403Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## x2iedn Family\n### `x2iedn.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iedn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iedn.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|120248Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|11|\n### `x2iedn.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iedn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iedn.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|241490Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|27|\n### `x2iedn.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iedn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|475|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iedn.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|482037Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `x2iedn.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iedn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iedn.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|967003Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `x2iedn.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iedn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|2097152|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iedn.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|1931403Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `x2iedn.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iedn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|3145728|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iedn.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|2901336Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `x2iedn.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iedn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|4194304|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iedn.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|3871269Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `x2iedn.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iedn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|4194304|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iedn.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|3871269Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## x2iezn Family\n### `x2iezn.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iezn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iezn.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|241490Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|62|\n### `x2iezn.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iezn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iezn.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|482037Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `x2iezn.6xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|24|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iezn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|6xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iezn.6xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|23870m|\n |ephemeral-storage|17Gi|\n |memory|724520Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `x2iezn.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|12000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iezn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iezn.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|967003Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `x2iezn.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iezn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iezn.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|1446437Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `x2iezn.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iezn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iezn.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|1446437Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## x8g Family\n### `x8g.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|520|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8g.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|14653Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `x8g.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8g.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|29577Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `x8g.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8g.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|59568Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `x8g.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8g.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|120189Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `x8g.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8g.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|239495Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `x8g.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8g.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|481978Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `x8g.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8g.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|724461Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `x8g.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8g.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|961411Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `x8g.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8g.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|1446378Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `x8g.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8g.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|1446378Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `x8g.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|3145728|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8g.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|2901277Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `x8g.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|3145728|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8g.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|2901277Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## z1d Family\n### `z1d.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|z|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|z1d|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|75|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|z1d.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|13|\n### `z1d.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|z|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|z1d|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|150|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|z1d.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|28|\n### `z1d.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|z|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|z1d|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|300|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|z1d.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|58|\n### `z1d.3xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|z|\n |karpenter.k8s.aws/instance-cpu|12|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|z1d|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|450|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|3xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|z1d.3xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|11900m|\n |ephemeral-storage|17Gi|\n |memory|88002Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `z1d.6xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|z|\n |karpenter.k8s.aws/instance-cpu|24|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|z1d|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|900|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|6xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|z1d.6xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|23870m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `z1d.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|z|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|z1d|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1800|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|z1d.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `z1d.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|z|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|z1d|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|1800|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|z1d.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n"
  },
  {
    "path": "website/content/en/v1.7/reference/metrics.md",
    "content": "---\ntitle: \"Metrics\"\nlinkTitle: \"Metrics\"\nweight: 7\n\ndescription: >\n  Inspect Karpenter Metrics\n---\n<!-- this document is generated from hack/docs/metrics_gen_docs.go -->\nKarpenter makes several metrics available in Prometheus format to allow monitoring cluster provisioning status. These metrics are available by default at `karpenter.kube-system.svc.cluster.local:8080/metrics` configurable via the `METRICS_PORT` environment variable documented [here](../settings)\n\n### `karpenter_ignored_pod_count`\nNumber of pods ignored during scheduling by Karpenter\n- Stability Level: ALPHA\n\n### `karpenter_build_info`\nA metric with a constant '1' value labeled by version from which karpenter was built.\n- Stability Level: STABLE\n\n## Nodeclaims Metrics\n\n### `karpenter_nodeclaims_termination_duration_seconds`\nDuration of NodeClaim termination in seconds.\n- Stability Level: BETA\n\n### `karpenter_nodeclaims_terminated_total`\nNumber of nodeclaims terminated in total by Karpenter. Labeled by the owning nodepool.\n- Stability Level: STABLE\n\n### `karpenter_nodeclaims_instance_termination_duration_seconds`\nDuration of CloudProvider Instance termination in seconds.\n- Stability Level: BETA\n\n### `karpenter_nodeclaims_disrupted_total`\nNumber of nodeclaims disrupted in total by Karpenter. Labeled by reason the nodeclaim was disrupted and the owning nodepool.\n- Stability Level: ALPHA\n\n### `karpenter_nodeclaims_created_total`\nNumber of nodeclaims created in total by Karpenter. Labeled by reason the nodeclaim was created and the owning nodepool.\n- Stability Level: STABLE\n\n### `operator_nodeclaim_status_condition_transitions_total`\nThe count of transitions of a nodeclaim, type and status. Labeled by the type, reason, and status.\n- Stability Level: BETA\n\n### `operator_nodeclaim_status_condition_transition_seconds`\nThe amount of time a condition was in a given state before transitioning. Labeled by the name of the nodeclaim, and the namespace.\n- Stability Level: BETA\n\n### `operator_nodeclaim_status_condition_current_status_seconds`\nThe current amount of time in seconds that a status condition has been in a specific state. Labeled by the name of the nodelcaim, namespace, type, status, and reason.\n- Stability Level: BETA\n\n### `operator_nodeclaim_status_condition_count`\nThe number of a condition for a nodeclaim, type and status. Labeled by the name, namespace, type, status, and reason.\n- Stability Level: BETA\n\n### `operator_nodeclaim_termination_current_time_seconds`\nThe current amount of time in seconds that a nodeclaim has been in terminating state. Labeled by name, and namespace.\n- Stability Level: BETA\n\n### `operator_nodeclaim_termination_duration_seconds`\nThe amount of time taken by a nodeclaim to terminate completely.\n- Stability Level: BETA\n\n## Nodes Metrics\n\n### `karpenter_nodes_total_pod_requests`\nNode total pod requests are the resources requested by pods bound to nodes, including the DaemonSet pods.\n- Stability Level: BETA\n\n### `karpenter_nodes_total_pod_limits`\nNode total pod limits are the resources specified by pod limits, including the DaemonSet pods.\n- Stability Level: BETA\n\n### `karpenter_nodes_total_daemon_requests`\nNode total daemon requests are the resource requested by DaemonSet pods bound to nodes.\n- Stability Level: BETA\n\n### `karpenter_nodes_total_daemon_limits`\nNode total daemon limits are the resources specified by DaemonSet pod limits.\n- Stability Level: BETA\n\n### `karpenter_nodes_termination_duration_seconds`\nThe time taken between a node's deletion request and the removal of its finalizer\n- Stability Level: BETA\n\n### `karpenter_nodes_terminated_total`\nNumber of nodes terminated in total by Karpenter. Labeled by owning nodepool.\n- Stability Level: STABLE\n\n### `karpenter_nodes_system_overhead`\nNode 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.\n- Stability Level: BETA\n\n### `karpenter_nodes_lifetime_duration_seconds`\nThe lifetime duration of the nodes since creation.\n- Stability Level: ALPHA\n\n### `karpenter_nodes_eviction_requests_total`\nThe total number of eviction requests made by Karpenter\n- Stability Level: ALPHA\n\n### `karpenter_nodes_drained_total`\nThe total number of nodes drained by Karpenter\n- Stability Level: ALPHA\n\n### `karpenter_nodes_current_lifetime_seconds`\nNode age in seconds\n- Stability Level: ALPHA\n\n### `karpenter_nodes_created_total`\nNumber of nodes created in total by Karpenter. Labeled by owning nodepool.\n- Stability Level: STABLE\n\n### `karpenter_nodes_allocatable`\nNode allocatable are the resources allocatable by nodes.\n- Stability Level: BETA\n\n### `operator_node_status_condition_transitions_total`\nThe count of transitions of a node, type and status.\n- Stability Level: BETA\n\n### `operator_node_status_condition_transition_seconds`\nThe amount of time a condition was in a given state before transitioning. Labeled by the name of the nodeclaim, and the namespace.\n- Stability Level: BETA\n\n### `operator_node_status_condition_current_status_seconds`\nThe current amount of time in seconds that a status condition has been in a specific state. Labeled by the name of the nodelcaim, namespace, type, status, and reason.\n- Stability Level: BETA\n\n### `operator_node_status_condition_count`\nThe number of a condition for a node, type and status. Labeled by the name, namespace, type, status, and reason.\n- Stability Level: BETA\n\n### `operator_node_termination_current_time_seconds`\nThe current amount of time in seconds that a node has been in terminating state. Labeled by name, and namespace.\n- Stability Level: BETA\n\n### `operator_node_termination_duration_seconds`\nThe amount of time taken by a node to terminate completely.\n- Stability Level: BETA\n\n### `operator_node_event_count`\nThe number of a events for a node.\n- Stability Level: BETA\n\n## Pods Metrics\n\n### `karpenter_pods_state`\nPod 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, nodepool name, zone, architecture, capacity type, instance type and pod phase.\n- Stability Level: BETA\n\n### `karpenter_pods_startup_duration_seconds`\nThe time from pod creation until the pod is running.\n- Stability Level: STABLE\n\n## Termination Metrics\n\n### `operator_termination_duration_seconds`\nThe amount of time taken by an object to terminate completely.\n- Stability Level: DEPRECATED\n\n### `operator_termination_current_time_seconds`\nThe current amount of time in seconds that an object has been in terminating state.\n- Stability Level: DEPRECATED\n\n## Voluntary Disruption Metrics\n\n### `karpenter_voluntary_disruption_queue_failures_total`\nThe number of times that an enqueued disruption decision failed. Labeled by disruption method.\n- Stability Level: BETA\n\n### `karpenter_voluntary_disruption_eligible_nodes`\nNumber of nodes eligible for disruption by Karpenter. Labeled by disruption reason.\n- Stability Level: BETA\n\n### `karpenter_voluntary_disruption_decisions_total`\nNumber of disruption decisions performed. Labeled by disruption decision, reason, and consolidation type.\n- Stability Level: STABLE\n\n### `karpenter_voluntary_disruption_decision_evaluation_duration_seconds`\nDuration of the disruption decision evaluation process in seconds. Labeled by method and consolidation type.\n- Stability Level: BETA\n\n### `karpenter_voluntary_disruption_consolidation_timeouts_total`\nNumber of times the Consolidation algorithm has reached a timeout. Labeled by consolidation type.\n- Stability Level: BETA\n\n## Scheduler Metrics\n\n### `karpenter_scheduler_scheduling_duration_seconds`\nDuration of scheduling simulations used for deprovisioning and provisioning in seconds.\n- Stability Level: STABLE\n\n### `karpenter_scheduler_queue_depth`\nThe number of pods currently waiting to be scheduled.\n- Stability Level: BETA\n\n## Nodepools Metrics\n\n### `karpenter_nodepools_usage`\nThe amount of resources that have been provisioned for a nodepool. Labeled by nodepool name and resource type.\n- Stability Level: ALPHA\n\n### `karpenter_nodepools_limit`\nLimits specified on the nodepool that restrict the quantity of resources provisioned. Labeled by nodepool name and resource type.\n- Stability Level: ALPHA\n\n### `karpenter_nodepools_allowed_disruptions`\nThe number of nodes for a given NodePool that can be concurrently disrupting at a point in time. Labeled by NodePool. Note that allowed disruptions can change very rapidly, as new nodes may be created and others may be deleted at any point.\n- Stability Level: ALPHA\n\n### `operator_nodepool_status_condition_transitions_total`\nThe count of transitions of a nodepool, type and status. Labeled by the type, reason, and status.\n- Stability Level: BETA\n\n### `operator_nodepool_status_condition_transition_seconds`\nThe amount of time a condition was in a given state before transitioning. Labeled by the name of the nodeclaim, and the namespace.\n- Stability Level: BETA\n\n### `operator_nodepool_status_condition_current_status_seconds`\nThe current amount of time in seconds that a status condition has been in a specific state. Labeled by the name of the nodelcaim, namespace, type, status, and reason.\n- Stability Level: BETA\n\n### `operator_nodepool_status_condition_count`\nThe number of an condition for a nodepool, type and status. Labeled by the name, namespace, type, status, and reason.\n- Stability Level: BETA\n\n### `operator_nodepool_termination_current_time_seconds`\nThe current amount of time in seconds that a nodepool has been in terminating state. Labeled by name, and namespace.\n- Stability Level: BETA\n\n### `operator_nodepool_termination_duration_seconds`\nDuration of NodePool termination in seconds.\n- Stability Level: BETA\n\n## EC2NodeClass Metrics\n\n### `operator_ec2nodeclass_status_condition_transitions_total`\nThe count of transitions of a ec2nodeclass, type and status. Labeled by the type, reason, and status.\n- Stability Level: BETA\n\n### `operator_ec2nodeclass_status_condition_transition_seconds`\nThe amount of time a condition was in a given state before transitioning. Labeled by the name of the nodeclaim, and the namespace.\n- Stability Level: BETA\n\n### `operator_ec2nodeclass_status_condition_current_status_seconds`\nThe current amount of time in seconds that a status condition has been in a specific state. Labeled by the name of the nodelcaim, namespace, type, status, and reason.\n- Stability Level: BETA\n\n### `operator_ec2nodeclass_status_condition_count`\nThe number of an condition for an ec2nodeclass, type and status. Labeled by the name, namespace, type, status, and reason.\n- Stability Level: BETA\n\n### `operator_ec2nodeclass_termination_current_time_seconds`\nThe current amount of time in seconds that an ec2nodeclass has been in terminating state. Labeled by name, and namespace.\n- Stability Level: BETA\n\n### `operator_ec2nodeclass_termination_duration_seconds`\nDuration of ec2nodeclass termination in seconds.\n- Stability Level: BETA\n\n## Interruption Metrics\n\n### `karpenter_interruption_received_messages_total`\nCount of messages received from the SQS queue. Broken down by message type and whether the message was actionable.\n- Stability Level: STABLE\n\n### `karpenter_interruption_message_queue_duration_seconds`\nAmount of time an interruption message is on the queue before it is processed by karpenter.\n- Stability Level: STABLE\n\n### `karpenter_interruption_deleted_messages_total`\nCount of messages deleted from the SQS queue.\n- Stability Level: STABLE\n\n## Cluster Metrics\n\n### `karpenter_cluster_utilization_percent`\nUtilization of allocatable resources by pod requests\n- Stability Level: ALPHA\n\n## Cluster State Metrics\n\n### `karpenter_cluster_state_unsynced_time_seconds`\nThe time for which cluster state is not synced\n- Stability Level: ALPHA\n\n### `karpenter_cluster_state_synced`\nReturns 1 if cluster state is synced and 0 otherwise. Synced checks that nodeclaims and nodes that are stored in the APIServer have the same representation as Karpenter's cluster state\n- Stability Level: STABLE\n\n### `karpenter_cluster_state_node_count`\nCurrent count of nodes in cluster state\n- Stability Level: STABLE\n\n## Cloudprovider Metrics\n\n### `karpenter_cloudprovider_instance_type_offering_price_estimate`\nInstance type offering estimated hourly price used when making informed decisions on node cost calculation, based on instance type, capacity type, and zone.\n- Stability Level: BETA\n\n### `karpenter_cloudprovider_instance_type_offering_available`\nInstance type offering availability, based on instance type, capacity type, and zone\n- Stability Level: BETA\n\n### `karpenter_cloudprovider_instance_type_memory_bytes`\nMemory, in bytes, for a given instance type.\n- Stability Level: BETA\n\n### `karpenter_cloudprovider_instance_type_cpu_cores`\nVCPUs cores for a given instance type.\n- Stability Level: BETA\n\n### `karpenter_cloudprovider_errors_total`\nTotal number of errors returned from CloudProvider calls.\n- Stability Level: BETA\n\n### `karpenter_cloudprovider_duration_seconds`\nDuration of cloud provider method calls. Labeled by the controller, method name and provider.\n- Stability Level: BETA\n\n## Cloudprovider Batcher Metrics\n\n### `karpenter_cloudprovider_batcher_batch_time_seconds`\nDuration of the batching window per batcher\n- Stability Level: BETA\n\n### `karpenter_cloudprovider_batcher_batch_size`\nSize of the request batch per batcher\n- Stability Level: BETA\n\n## Controller Runtime Metrics\n\n### `controller_runtime_terminal_reconcile_errors_total`\nTotal number of terminal reconciliation errors per controller\n- Stability Level: STABLE\n\n### `controller_runtime_reconcile_total`\nTotal number of reconciliations per controller\n- Stability Level: STABLE\n\n### `controller_runtime_reconcile_time_seconds`\nLength of time per reconciliation per controller\n- Stability Level: STABLE\n\n### `controller_runtime_reconcile_panics_total`\nTotal number of reconciliation panics per controller\n- Stability Level: STABLE\n\n### `controller_runtime_reconcile_errors_total`\nTotal number of reconciliation errors per controller\n- Stability Level: STABLE\n\n### `controller_runtime_max_concurrent_reconciles`\nMaximum number of concurrent reconciles per controller\n- Stability Level: STABLE\n\n### `controller_runtime_active_workers`\nNumber of currently used workers per controller\n- Stability Level: STABLE\n\n## Workqueue Metrics\n\n### `workqueue_work_duration_seconds`\nHow long in seconds processing an item from workqueue takes.\n- Stability Level: STABLE\n\n### `workqueue_unfinished_work_seconds`\nHow many seconds of work has been done that is in progress and hasn't been observed by work_duration. Large values indicate stuck threads. One can deduce the number of stuck threads by observing the rate at which this increases.\n- Stability Level: STABLE\n\n### `workqueue_retries_total`\nTotal number of retries handled by workqueue\n- Stability Level: STABLE\n\n### `workqueue_queue_duration_seconds`\nHow long in seconds an item stays in workqueue before being requested\n- Stability Level: STABLE\n\n### `workqueue_longest_running_processor_seconds`\nHow many seconds has the longest running processor for workqueue been running.\n- Stability Level: STABLE\n\n### `workqueue_depth`\nCurrent depth of workqueue by workqueue and priority\n- Stability Level: STABLE\n\n### `workqueue_adds_total`\nTotal number of adds handled by workqueue\n- Stability Level: STABLE\n\n## Status Condition Metrics\n\n### `operator_status_condition_transitions_total`\nThe count of transitions of a given object, type and status.\n- Stability Level: DEPRECATED\n\n### `operator_status_condition_transition_seconds`\nThe amount of time a condition was in a given state before transitioning. e.g. Alarm := P99(Updated=False) > 5 minutes\n- Stability Level: DEPRECATED\n\n### `operator_status_condition_current_status_seconds`\nThe current amount of time in seconds that a status condition has been in a specific state. Alarm := P99(Updated=Unknown) > 5 minutes\n- Stability Level: DEPRECATED\n\n### `operator_status_condition_count`\nThe number of an condition for a given object, type and status. e.g. Alarm := Available=False > 0\n- Stability Level: DEPRECATED\n\n## Client Go Metrics\n\n### `client_go_request_total`\nNumber of HTTP requests, partitioned by status code and method.\n- Stability Level: STABLE\n\n### `client_go_request_duration_seconds`\nRequest latency in seconds. Broken down by verb, group, version, kind, and subresource.\n- Stability Level: STABLE\n\n## AWS SDK Go Metrics\n\n### `aws_sdk_go_request_total`\nThe total number of AWS SDK Go requests\n- Stability Level: STABLE\n\n### `aws_sdk_go_request_retry_count`\nThe total number of AWS SDK Go retry attempts per request\n- Stability Level: STABLE\n\n### `aws_sdk_go_request_duration_seconds`\nLatency of AWS SDK Go requests\n- Stability Level: STABLE\n\n### `aws_sdk_go_request_attempt_total`\nThe total number of AWS SDK Go request attempts\n- Stability Level: STABLE\n\n### `aws_sdk_go_request_attempt_duration_seconds`\nLatency of AWS SDK Go request attempts\n- Stability Level: STABLE\n\n## Leader Election Metrics\n\n### `leader_election_slowpath_total`\nTotal number of slow path exercised in renewing leader leases. 'name' is the string used to identify the lease. Please make sure to group by name.\n- Stability Level: STABLE\n\n### `leader_election_master_status`\nGauge of if the reporting system is master of the relevant lease, 0 indicates backup, 1 indicates master. 'name' is the string used to identify the lease. Please make sure to group by name.\n- Stability Level: STABLE\n"
  },
  {
    "path": "website/content/en/v1.7/reference/settings.md",
    "content": "---\ntitle: \"Settings\"\nlinkTitle: \"Settings\"\nweight: 5\ndescription: >\n  Configure Karpenter\n---\n\nKarpenter surfaces environment variables and CLI parameters to allow you to configure certain global settings on the controllers. These settings are described below.\n\n[comment]: <> (the content below is generated from hack/docs/configuration_gen_docs.go)\n\n| Environment Variable | CLI Flag | Description |\n|--|--|--|\n| BATCH_IDLE_DURATION | \\-\\-batch-idle-duration | The maximum amount of time with no new pending 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. (default = 1s)|\n| BATCH_MAX_DURATION | \\-\\-batch-max-duration | 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. (default = 10s)|\n| CLUSTER_CA_BUNDLE | \\-\\-cluster-ca-bundle | Cluster CA bundle for nodes to use for TLS connections with the API server. If not set, this is taken from the controller's TLS configuration.|\n| CLUSTER_ENDPOINT | \\-\\-cluster-endpoint | The external kubernetes cluster endpoint for new nodes to connect with. If not specified, will discover the cluster endpoint using DescribeCluster API.|\n| CLUSTER_NAME | \\-\\-cluster-name | [REQUIRED] The kubernetes cluster name for resource discovery.|\n| CPU_REQUESTS | \\-\\-cpu-requests | CPU requests in millicores on the container running the controller. (default = 1000)|\n| DISABLE_CLUSTER_STATE_OBSERVABILITY | \\-\\-disable-cluster-state-observability | Disable cluster state metrics and events|\n| DISABLE_DRY_RUN | \\-\\-disable-dry-run | If true, then disable dry run validation for EC2NodeClasses.|\n| DISABLE_LEADER_ELECTION | \\-\\-disable-leader-election | Disable the leader election client before executing the main loop. Disable when running replicated components for high availability is not desired.|\n| EKS_CONTROL_PLANE | \\-\\-eks-control-plane | Marking this true means that your cluster is running with an EKS control plane and Karpenter should attempt to discover cluster details from the DescribeCluster API |\n| ENABLE_PROFILING | \\-\\-enable-profiling | Enable the profiling on the metric endpoint|\n| FEATURE_GATES | \\-\\-feature-gates | Optional features can be enabled / disabled using feature gates. Current options are: NodeRepair, ReservedCapacity, SpotToSpotConsolidation, NodeOverlay, and StaticCapacity. (default = NodeRepair=false,ReservedCapacity=true,SpotToSpotConsolidation=false,NodeOverlay=false,StaticCapacity=false)|\n| HEALTH_PROBE_PORT | \\-\\-health-probe-port | The port the health probe endpoint binds to for reporting controller health (default = 8081)|\n| IGNORE_DRA_REQUESTS | \\-\\-ignore-dra-requests | When set, Karpenter will ignore pods' DRA requests during scheduling simulations. NOTE: This flag will be removed once formal DRA support is GA in Karpenter.|\n| INTERRUPTION_QUEUE | \\-\\-interruption-queue | Interruption queue is the name of the SQS queue used for processing interruption events from EC2. Interruption handling is disabled if not specified. Enabling interruption handling may require additional permissions on the controller service account. Additional permissions are outlined in the docs.|\n| ISOLATED_VPC | \\-\\-isolated-vpc | 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 on-demand pricing endpoint.|\n| KARPENTER_SERVICE | \\-\\-karpenter-service | The Karpenter Service name for the dynamic webhook certificate|\n| KUBE_CLIENT_BURST | \\-\\-kube-client-burst | The maximum allowed burst of queries to the kube-apiserver (default = 300)|\n| KUBE_CLIENT_QPS | \\-\\-kube-client-qps | The smoothed rate of qps to kube-apiserver (default = 200)|\n| LEADER_ELECTION_NAME | \\-\\-leader-election-name | Leader election name to create and monitor the lease if running outside the cluster (default = karpenter-leader-election)|\n| LEADER_ELECTION_NAMESPACE | \\-\\-leader-election-namespace | Leader election namespace to create and monitor the lease if running outside the cluster|\n| LOG_ERROR_OUTPUT_PATHS | \\-\\-log-error-output-paths | Optional comma separated paths for logging error output (default = stderr)|\n| LOG_LEVEL | \\-\\-log-level | Log verbosity level. Can be one of 'debug', 'info', or 'error' (default = info)|\n| LOG_OUTPUT_PATHS | \\-\\-log-output-paths | Optional comma separated paths for directing log output (default = stdout)|\n| 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)|\n| METRICS_PORT | \\-\\-metrics-port | The port the metric endpoint binds to for operating metrics about the controller itself (default = 8080)|\n| MIN_VALUES_POLICY | \\-\\-min-values-policy | Min values policy for scheduling. Options include 'Strict' for existing behavior where min values are strictly enforced or 'BestEffort' where Karpenter relaxes min values when it isn't satisfied. (default = Strict)|\n| PREFERENCE_POLICY | \\-\\-preference-policy | How the Karpenter scheduler should treat preferences. Preferences include preferredDuringSchedulingIgnoreDuringExecution node and pod affinities/anti-affinities and ScheduleAnyways topologySpreadConstraints. Can be one of 'Ignore' and 'Respect' (default = Respect)|\n| RESERVED_ENIS | \\-\\-reserved-enis | Reserved ENIs are not included in the calculations for max-pods or kube-reserved. This is most often used in the VPC CNI custom networking setup https://docs.aws.amazon.com/eks/latest/userguide/cni-custom-network.html. (default = 0)|\n| VM_MEMORY_OVERHEAD_PERCENT | \\-\\-vm-memory-overhead-percent | The VM memory overhead as a percent that will be subtracted from the total memory for all instance types when cached information is unavailable. (default = 0.075)|\n\n[comment]: <> (end docs generated content from hack/docs/configuration_gen_docs.go)\n\n### Feature Gates\n\nKarpenter uses [feature gates](https://kubernetes.io/docs/reference/command-line-tools-reference/feature-gates/#feature-gates-for-alpha-or-beta-features) You can enable the feature gates through the `--feature-gates` CLI environment variable or the `FEATURE_GATES` environment variable in the Karpenter deployment. For example, you can configure drift, spotToSpotConsolidation by setting the CLI argument: `--feature-gates Drift=true,SpotToSpotConsolidation=true,ReservedCapacity=true`.\n\n| Feature                 | Default | Stage  | Since   | Until   |\n|-------------------------|---------|--------|---------|---------|\n| Drift                   | false   | Alpha  | v0.21.x | v0.32.x |\n| Drift                   | true    | Beta   | v0.33.x | v0.37.x |\n| SpotToSpotConsolidation | false   | Alpha  | v0.34.x |         |\n| NodeRepair              | false   | Alpha  | v1.1.x  |         |\n| ReservedCapacity        | false   | Alpha  | v1.3.x  | v1.5.x  |\n| ReservedCapacity        | true    | Beta   | v1.6.x  |         |\n| NodeOverlay             | false   | Alpha  | v1.7.x  |         |\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nIn v1, drift has been promoted to stable and the feature gate removed. Users can continue to control drift by using disruption budgets by reason.\nExample:\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\nspec:\n…\n  disruption:\n    budgets:\n    - nodes: 10%\n    # On Weekdays during business hours, don't do any deprovisioning regarding drift.\n    - nodes: \"0\"\n      schedule: \"0 9 * * mon-fri\"\n      duration: 8h\n      reasons:\n      -\tDrifted\n    # during non-business hours do drift for up to 10% of nodes\n    - nodes: \"10%\"\n      reasons:\n      -\tDrifted\n```\n{{% /alert %}}\n\n### Batching Parameters\n\nThe 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.\n\nFor 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.\n\n#### Batch Idle Duration\n\nThe batch idle duration duration 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.\n\nThis 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`.\n\n#### Batch Max Duration\n\nThe batch max duration 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.\n\nThis 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`.\n"
  },
  {
    "path": "website/content/en/v1.7/reference/threat-model.md",
    "content": "---\ntitle: \"Threat Model\"\nlinkTitle: \"Threat Model\"\nweight: 999\n---\n\nKarpenter observes Kubernetes pods and launches nodes in response to those pods’ scheduling constraints. Karpenter does not perform the actual scheduling and instead waits for [kube-scheduler](https://kubernetes.io/docs/concepts/scheduling-eviction/kube-scheduler/) to schedule the pods.\n\nWhen running in AWS, Karpenter is typically installed onto EC2 instances that run in EKS Clusters. Karpenter relies on public facing AWS APIs and standard IAM Permissions. Karpenter uses AWS-SDK-Go v1, and AWS advises that credentials are provided using [IAM Roles for Service Accounts](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html).\n\n\n## Architecture & Actors\n\n1. **Cluster Operator**: An identity that installs and configures Karpenter in a Kubernetes cluster, and configures Karpenter's cloud identity and permissions.\n2. **Cluster Developer**: An identity that can create pods, typically through Deployments, DaemonSets, or other pod-controller types.\n3. **Karpenter Controller:** The Karpenter application pod that operates inside a cluster.\n\n![threat-model](/threat-model.png)\n\n## Capabilities\n\n### Cluster Operator\n\nThe Cluster Operator has full control to install and configure Karpenter including all [`NodePools`]({{<ref \"../concepts/nodepools\" >}}) and [`EC2NodeClasses`]({{<ref \"../concepts/nodeclasses\" >}}). The Cluster Operator has privileges to manage the cloud identities and permissions for Nodes, and the cloud identity and permissions for Karpenter.\n\n### Cluster Developer\n\nA Cluster Developer has the ability to create pods via `Deployments`, `ReplicaSets`, `StatefulSets`, `Jobs`, etc. This assumes that the Cluster Developer cannot modify the Karpenter pod or launch pods using Karpenter’s service account and gain access to Karpenter’s IAM role.\n\n### Karpenter Controller\n\nKarpenter has permissions to create and manage cloud instances. Karpenter has Kubernetes API permissions to create, update, and remove nodes, as well as evict pods. For a full list of the permissions, see the RBAC rules in the helm chart template. Karpenter also has AWS IAM permissions to create instances with IAM roles.\n\n* [aggregate-clusterrole.yaml](https://github.com/aws/karpenter/blob/v1.7.4/charts/karpenter/templates/aggregate-clusterrole.yaml)\n* [clusterrole-core.yaml](https://github.com/aws/karpenter/blob/v1.7.4/charts/karpenter/templates/clusterrole-core.yaml)\n* [clusterrole.yaml](https://github.com/aws/karpenter/blob/v1.7.4/charts/karpenter/templates/clusterrole.yaml)\n* [rolebinding.yaml](https://github.com/aws/karpenter/blob/v1.7.4/charts/karpenter/templates/rolebinding.yaml)\n* [role.yaml](https://github.com/aws/karpenter/blob/v1.7.4/charts/karpenter/templates/role.yaml)\n\n## Assumptions\n\n| Category\t     | Assumption\t                                                                                                                                                                                                            | Comment\t                                                                                                                                                                                                                          |\n|---------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| Generic\t      | The Karpenter pod is operated on a node in the cluster, and uses a Service Account for authentication to the Kubernetes API\t                                                                                           | Cluster Operators may want to isolate the node running the Karpenter pod to a system-pool of nodes to mitigate the possibility of container breakout with Karpenter’s permissions. \t                                              |\n| Generic\t      | Cluster Developer does not have any Kubernetes permissions to manage Karpenter running in the cluster (The deployment, pods, clusterrole, etc)\t                                                                        | \t                                                                                                                                                                                                                                 |\n| Generic\t      | Restrictions on the fields of pods a Cluster Developer can create are out of scope. \t                                                                                                                                  | Cluster Operators can use policy frameworks to enforce restrictions on Pod capabilities\t                                                                                                                                          |\n| Generic\t      | No sensitive data is included in non-Secret resources in the Kubernetes API. The Karpenter controller has the ability to list all pods, nodes, deployments, and many other pod-controller and storage resource types.\t | Karpenter does not have permission to list/watch cluster-wide ConfigMaps or Secrets\t                                                                                                                                              |\n| Generic\t      | Karpenter has permissions to create, modify, and delete nodes from the cluster, and evict any pod. \t                                                                                                                   | Cluster Operators running applications with varying security profiles in the same cluster may want to configure dedicated nodes and scheduling rules for Karpenter to mitigate potential container escapes from other containers\t |\n| AWS-Specific\t | The Karpenter IAM policy is encoded in the GitHub repo. Any additional permissions possibly granted to that role by the administrator are out of scope\t                                                                | \t                                                                                                                                                                                                                                 |\n| AWS-Specific\t | The Karpenter pod uses IRSA for AWS credentials \t                                                                                                                                                                      | Setup of IRSA is out of scope for this document \t                                                                                                                                                                                 |\n\n## Generic Threats and Mitigations\n\n### Threat: Cluster Developer can influence creation of an arbitrary number of nodes\n\n**Background**: Karpenter creates new instances based on the count of pending pods.\n\n**Threat**: A Cluster Developer attempts to have Karpenter create more instances than intended by creating a large number of pods or by using anti-affinity to schedule one pod per node.\n\n**Mitigation**: In addition to [Kubernetes resource limits](https://kubernetes.io/docs/concepts/policy/resource-quotas/#object-count-quota), Cluster Operators can [configure limits on a NodePool]({{< ref \"../concepts/nodepools#spec-limits\" >}}) to limit the total amount of memory, CPU, or other resources provisioned across all nodes.\n\n## Threats\n\n### Threat: Using EC2 CreateTag/DeleteTag Permissions to Orchestrate Instance Creation/Deletion\n\n**Background**: As of `0.28.0`, Karpenter creates a mapping between CloudProvider instances and CustomResources in the cluster for capacity tracking. To ensure this mapping is consistent, Karpenter utilizes the following tag keys:\n\n* `karpenter.sh/managed-by`\n* `karpenter.sh/nodepool`\n* `kubernetes.io/cluster/${CLUSTER_NAME}`\n* `karpenter.sh/provisioner-name` (prior to `0.32.0`)\n\nAny user that has the ability to Create/Delete tags on CloudProvider instances will have the ability to orchestrate Karpenter to Create/Delete CloudProvider instances as a side effect.\n\nIn addition, as of `0.29.0`, Karpenter will Drift on Security Groups and Subnets. If a user has the Create/Delete tags permission for either of resources, they can orchestrate Karpenter to Create/Delete CloudProvider instances as a side effect.\n\n**Threat:** A Cluster Operator attempts to create or delete a tag on a resource discovered by Karpenter. If it has the ability to create a tag it can effectively create or delete CloudProvider instances associated with the tagged resources.\n\n**Mitigation** Cluster Operators should [enforce tag-based IAM policies](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html) on these tags against any EC2 instance resource (`i-*`) for any users that might have [CreateTags](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTags.html)/[DeleteTags](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DeleteTags.html) permissions but should not have [RunInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html)/[TerminateInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_TerminateInstances.html) permissions.\n\n### Threat: Launching EC2 instances with IAM roles not intended for Karpenter nodes\n\n**Background**: Many IAM roles in an AWS account may trust the EC2 service principal. IAM administrators must grant the `iam:PassRole` permission to IAM principals to allow those principals in the account to launch instances with specific roles.\n\n**Threat:** A Cluster Operator attempts to create an `EC2NodeClass` with an IAM role not intended for Karpenter\n\n**Mitigation**: Cluster Operators must enumerate the roles in the resource section of the IAM policy granted to the Karpenter role for the `iam:PassRole` action. Karpenter will fail to generate an instance profile if role that is specified in the `spec.role` section of the `EC2NodeClass` is not enumerated in the `iam:PassRole` permission.\n\n### Threat: Karpenter can orchestrate the creation/deletion of IAM Instance Profiles it doesn't own\n\n**Background**: Karpenter has permission to create/update/delete instance profiles as part of its controller permissions to ensure that it can auto-generate instance profiles when EC2NodeClasses are created.\n\n**Threat**: An actor who obtains control of the Karpenter pod’s IAM role may delete instance profiles not owned by Karpenter, causing workload disruption to other instances using the profile in the account.\n\n**Mitigation**: Karpenter's controller permissions enforce that it creates instance profiles with tags which provide ownership information. These tags include:\n\n* `karpenter.sh/managed-by`\n* `kubernetes.io/cluster/${CLUSTER_NAME}`\n* `karpenter.k8s.aws/ec2nodeclass`\n* `topology.kubernetes.io/region`\n\nThese tags ensure that instance profiles created by Karpenter in the account are unique to that cluster. Karpenter's controller permissions _only_ allow it to act on instance profiles that contain these tags which match the cluster information.\n\n### Threat: Karpenter can be used to create or terminate EC2 instances outside the cluster\n\n**Background**: EC2 instances can exist in an AWS account outside of the Kubernetes cluster.\n\n**Threat**: An actor who obtains control of the Karpenter pod’s IAM role may be able to create or terminate EC2 instances not part of the Kubernetes cluster managed by Karpenter.\n\n**Mitigation**: Karpenter creates instances with tags, several of which are enforced in the IAM policy granted to the Karpenter IAM role that restrict the instances Karpenter can terminate. One tag requires that the instance was provisioned by a Karpenter controller (`karpenter.sh/nodepool`), another tag can include a cluster name to mitigate any termination between two clusters with Karpenter in the same account (`kubernetes.io/cluster/${CLUSTER_NAME}`. Cluster Operators also can restrict the region to prevent two clusters in the same account with the same name in different regions.\n\nAdditionally, Karpenter does not allow tags to be modified on instances unowned by Karpenter after creation, except for the `Name` and `karpenter.sh/nodeclaim` tags. Though these tags can be changed after instance creation, `aws:ResourceTag` conditions enforce that the Karpenter controller is only able to change these tags on instances that it already owns, enforced through the `karpenter.sh/nodepool` and `kubernetes.io/cluster/${CLUSTER_NAME}` tags.\n\n### Threat: Karpenter launches an EC2 instance using an unintended AMI\n\n**Background**: Cluster Developers can create Node Templates that refer to an AMI by metadata, such as a name rather than an AMI resource ID.\n\n**Threat:** A threat actor creates a public AMI with the same name as a customer’s AMI in an attempt to get Karpenter to select the threat actor’s AMI instead of the intended AMI.\n\n**Mitigation**: When selecting AMIs by name or tags, Karpenter defaults to adding an ownership filter of `self,amazon` so AMI images external to the account are not used.\n"
  },
  {
    "path": "website/content/en/v1.7/tasks/_index.md",
    "content": "---\ntitle: \"Tasks\"\nlinkTitle: \"Tasks\"\nweight: 25\ndescription: >\n  Tasks to run with Karpenter\ncascade:\n  type: docs\n---\n\n"
  },
  {
    "path": "website/content/en/v1.7/tasks/managing-amis.md",
    "content": "---\ntitle: \"Managing AMIs\"\nlinkTitle: \"Managing AMIs\"\ndescription: >\n  Task for managing AMIs in Karpenter\n---\n\n{{% alert title=\"Important\" color=\"warning\" %}}\nKarpenter __heavily recommends against__ opting-in to use an `amiSelectorTerm` with `@latest` unless you are doing this in a pre-production environment or are willing to accept the risk that a faulty AMI may cause downtime in your production clusters. In general, if using a publicly released version of a well-known AMI type (like AL2, AL2023, or Bottlerocket), we recommend that you pin to a version of that AMI and deploy newer versions of that AMI type in a staged approach when newer patch versions are available.\n\n```yaml\namiSelectorTerms:\n  - alias: al2023@v20240807\n```\n\nMore details are described in [Controlling AMI Replacement]({{< relref \"#controlling-ami-replacement\" >}}) below.\n{{% /alert %}}\n\nUnderstanding how Karpenter assigns AMIs to nodes can help ensure that your workloads will run successfully on those nodes and continue to run if the nodes are upgraded to newer AMIs.\nBelow we describe how Karpenter assigns AMIs to nodes when they are first deployed and how newer AMIs are assigned later when nodes are spun up to replace old ones.\nLater, it describes the options you have to assert control over how AMIs are used by Karpenter for your clusters.\n\nFeatures for managing AMIs described here should be considered as part of the larger upgrade policies that you have for your clusters.\nSee [How do I upgrade an EKS Cluster with Karpenter]({{< relref \"../faq/#how-do-i-upgrade-an-eks-cluster-with-karpenter\" >}}) for details on this process.\n\n## How Karpenter assigns AMIs to nodes\n\nHere is how Karpenter assigns AMIs nodes:\n\n* When you create an `EC2NodeClass`, you are required to specify [`amiSelectorTerms`]({{< relref \"../concepts/nodeclasses/#specamiselectorterms\" >}}). [`amiSelectorTerms`]({{< relref \"../concepts/nodeclasses/#specamiselectorterms\" >}}) allow you to select on AMIs that can be spun-up by this EC2NodeClass based on tags, id, name, or an alias. Multiple AMIs may be specified, and Karpenter will choose the newest compatible AMI when spinning up new nodes.\n* Some `amiSelectorTerm` types are static and always resolve to the same AMI (e.g. `id`). However, some are dynamic and may resolve to different AMIs over time. Examples of dynamic types include `alias`, `tags`, and `name` (when using a wildcard). For example, if you specify an `amiSelectorTerm` with an `alias` set to `@latest` (e.g. `al2023@latest`, `al2@latest`, or `bottlerocket@latest`), Karpenter will use the _latest_ release for that AMI type when spinning up a new node.\n* When a node is replaced, Karpenter checks to see if a newer AMI is available based on your `amiSelectorTerms`. If a newer AMI is available, Karpenter will automatically use the new AMI to spin up the new node. __In particular, if you are using a dynamic `amiSelectorTerm` type, you may get a new AMI deployed to your environment without having properly tested it.__\n\nWhenever a node is replaced, the replacement node will be launched using the newest AMI based on your `amiSelectorTerms`. Nodes may be replaced due to manual deletion, or any of Karpenter's automated methods:\n- [**Expiration**]({{< relref \"../concepts/disruption/#expiration\" >}}): Automatically initiates replacement at a certain time after the node is created.\n-  [**Consolidation**]({{< relref \"../concepts/disruption/#consolidation\" >}}): If Karpenter detects that a cheaper node can be used to run the same workloads, Karpenter may replace the current node automatically.\n- [**Drift**]({{< relref \"../concepts/disruption/#drift\" >}}): If a node's state no longer matches the desired state dictated by the `NodePool` or `EC2NodeClass`, it will be replaced, including if the node's AMI no longer matches the latest AMI selected by the `amiSelectorTerms`.\n- [**Interruption**]({{< relref \"../concepts/disruption/#interruption\" >}}): Nodes are sometimes involuntarily disrupted by things like Spot interruption, health changes, and instance events, requiring new nodes to be deployed.\n\nSee [**Automated Methods**]({{< relref \"../concepts/disruption/#automated-methods\" >}}) for details on how Karpenter uses these automated actions to replace nodes.\n\nThe most relevant automated disruption method is [**Drift**]({{< relref \"../concepts/disruption/#drift\" >}}), since it is initiated when a new AMI is selected-on by your `amiSelectorTerms`. This could be due to a manual update (e.g. a new `id` term was added), or due to a new AMI being resolved by a dynamic term.\n\nIf you're using an `alias` with the `latest` pin (e.g. `al2023@latest`), Karpenter periodically checks for new AMI releases. Since AMI releases are outside your control, this could result in new AMIs being deployed before they have been properly tested in a lower environment. This is why we **strongly recommend** using version pins in production environments when using an alias (e.g. `al2023@v20240807`).\n\n{{% alert title=\"Important\" color=\"warning\" %}}\nIf you are new to Karpenter, you should know that the behavior described here is different than you get with Managed Node Groups (MNG). MNG will always use the assigned AMI when it creates a new node and will never automatically upgrade to a new AMI when a new node is required. See [Updating a Managed Node Group](https://docs.aws.amazon.com/eks/latest/userguide/update-managed-node-group.html) to see how you would manually update MNG to use new AMIs.\n{{% /alert %}}\n\n## Controlling AMI Replacement\n\nKarpenter's automated node replacement functionality in tandem with the `EC2NodeClass` gives you a lot of flexibility to control the desired state of nodes on your cluster. For example, you can opt-in to AMI auto-upgrades using `alias` set to `@latest`; however, this has to be weighed heavily against the risk of newer versions of an AMI breaking existing applications on your cluster. Alternatively, you can choose to pin your AMIs in your production clusters to avoid the risk of breaking changes; however, this has to be weighed against the management cost of testing new AMIs in pre-production and keeping up with the latest AMI versions.\n\nKarpenter offers you various controls to ensure you don't take on too much risk as you rollout new versions of AMIs to your production clusters. Below shows how you can use these controls:\n\n* [Pinning AMIs]({{< relref \"#pinning-amis\" >}}): If workloads require a particluar AMI, this control ensures that it is the only AMI used by Karpenter. This can be used in combination with [Testing AMIs]({{< relref \"#testing-amis\" >}}) where you lock down the AMI in production, but allow the newest AMIs in a test cluster while you test your workloads before upgrading production.\n* [Testing AMIs]({{< relref \"#testing-amis\" >}}): The safest way for ensuring that a new AMI doesn't break your workloads is to test it before putting it into production. This takes the most effort on your part, but most effectively models how your workloads will run in production, allowing you to catch issues ahead of time. Note that you can sometimes get different results from your test environment when you roll a new AMI into production, since issues like scale and other factors can elevate problems you might not see in test. Combining this with other controls like [Using Disruption Budgets]({{< relref \"#using-disruption-budgets\" >}}) can allow you to catch problems before they impact your whole cluster.\n* [Using Disruption Budgets]({{< relref \"#using-disruption-budgets\" >}}): This option can be used as a way of mitigating the scope of impact if a new AMI causes problems with your workloads. With Disruption budgets you can slow the pace of upgrades to nodes with new AMIs or make sure that upgrades only happen during selected dates and times (using `schedule`). This doesn't prevent a bad AMI from being deployed, but it allows you to control when nodes are upgraded, and gives you more time to respond to rollout issues.\n\n### Pinning AMIs\n\nWhen you configure the [**EC2NodeClass**]({{< relref \"../concepts/nodeclasses\" >}}), you are required to configure which AMIs you want Karpenter to select on using the `amiSelectorTerms` field. When pinning to a specific `id`, `name`, `tags` or an `alias` that contains a fixed version, Karpenter will only select on a single AMI and won't automatically upgrade your nodes to a new version of an AMI. This prevents a new and potentially untested AMI from replacing existing nodes when those nodes are terminated.\n).\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nPinning an AMI to an `alias` type with a fixed version _will_ pin the AMI so long as your K8s control plane version doesn't change. Unlike `id` and `name` types, specifying a version `alias` in your `amiSelectorTerms` will cause Karpenter to consider the K8s control plane version of your cluster when choosing the AMI. If you upgrade your Kubernetes cluster while using this alias type, Karpenter _will_ automatically drift your nodes to a new AMI that still matches the AMI version but also matches your new K8s control plane version.\n{{% /alert %}}\n\nThese examples show three different ways to identify the same AMI:\n\n```yaml\n# Using alias\n# Pinning to this fixed version alias will pull this version of the AMI,\n# matching the K8s control plane version of your cluster\namiSelectorTerms:\n- alias: al2023@v20240219\n```\n\n```yaml\n# Using name\n# This will only ever select the AMI that contains this exact name\namiSelectorTerms:\n- name: al2023-ami-2023.3.20240219.0-kernel-6.1-x86_64\n```\n\n```yaml\n# Using id\n# This will only ever select this specific AMI id\namiSelectorTerms:\n- id: ami-052c9ea013e6e3567\n```\n\n```yaml\n# Using tags\n# You can use a CI/CD system to test newer versions of an AMI\n# and automatically tag them as you validate that they are safe to upgrade to\namiSelectorTerms:\n- tags:\n    karpenter.sh/discovery: \"${CLUSTER_NAME}\"\n    environment: prod\n```\n\nSee the [**spec.amiSelectorTerms**]({{< relref \"../concepts/nodeclasses/#specamiselectorterms\" >}}) section of the NodeClasses page for details.\nKeep in mind, that this could prevent you from getting critical security patches when new AMIs are available, but it does give you control over exactly which AMI is running.\n\n### Testing AMIs\n\nInstead of avoiding AMI upgrades, you can set up test clusters where you can try out new AMI releases before they are put into production. For example, you could have:\n\n* **Test clusters**: On lower environment clusters, you can run the latest AMIs e.g. `al2023@latest`, `al2@latest`, `bottlerocket@latest`, for your workloads in a safe environment. This ensures that you get the latest patches for AMIs where downtime to applications isn't as critical and allows you to validate patches to AMIs before they are deployed to production.\n\n* **Production clusters**: After you've confirmed that the AMI works in your lower environments, you can pin the latest AMIs to be deployed in your production clusters to roll out the AMI. Refer to [Pinning AMIs]({{< relref \"#pinning-amis\" >}}) for how to choose a particular AMI by `alias`, `name` or `id`. Remember that it is still best practice to gradually roll new AMIs into your cluster, even if they have been tested. So consider implementing that for your production clusters as described in [Using Disruption Budgets]({{< relref \"#using-disruption-budgets\" >}}).\n\n### Using Disruption Budgets\n\nTo reduce the risk of entire workloads being immediately degraded when a new AMI is deployed, you can enable Karpenter's [**Node Disruption Budgets**]({{< relref \"#node-disruption-budgets \" >}}) as well as ensure that you have [**Pod Disruption Budgets**]({{< relref \"#pod-disruption-budgets \" >}}) configured for applications on your cluster. Below provides more details on how to configure each.\n\n#### Node Disruption Budgets\n\n[Disruption Budgets]({{< relref \"../concepts/disruption/#disruption-budgets \" >}}) limit when and to what extent nodes can be disrupted. You can prevent disruption based on nodes (a percentage or number of nodes that can be disrupted at a time) and schedule (excluding certain times from disrupting nodes).\nYou can set Disruption Budgets in a `NodePool` spec. Here is an example:\n\n```yaml\ndisruption:\n  budgets:\n  - nodes: 15%\n  - nodes: \"3\"\n  - nodes: \"0\"\n    schedule: \"0 9 * * sat,sun\"\n    duration: 24h\n  - nodes: \"0\"\n    schedule: \"0 17 * * mon-fri\"\n    duration: 16h\n    reasons:\n      - Drifted\n```\n\nSettings for budgets in the above example include the following:\n\n* **Percentage of nodes**: From the first `nodes` setting, only `15%` of the NodePool’s nodes can be disrupted at a time.\n* **Number of nodes**: The second `nodes` setting limits the number of nodes that can be disrupted at a time to `3`.\n* **Schedule**: The third `nodes` setting uses schedule to say that zero disruptions (`0`) are allowed starting at 9am on Saturday and Sunday and continues for 24 (fully blocking disruptions all day).\nThe format of the schedule follows the `crontab` format for identifying dates and times.\nSee the [crontab](https://man7.org/linux/man-pages/man5/crontab.5.html) page for information on the supported values for these fields.\n* **Reasons**: The fourth `nodes` setting uses `reasons` which implies that this budget only applies to the `Drifted` disruption condition. This setting uses schedule to say that zero disruptions (`0`) are allowed starting at 5pm on Monday, Tuesday, Wednesday, Thursday, and Friday and continues for 16h (effectively blocking rolling nodes due to drift outside of working hours).\n\nAs with all disruption settings, keep in mind that avoiding updated AMIs for your nodes can result in not getting fixes for known security risks and bugs.\nYou need to balance that with your desire to not risk breaking the workloads on your cluster.\n\n#### Pod Disruption Budgets\n\n[Pod Disruption Budgets](https://kubernetes.io/docs/tasks/run-application/configure-pdb/#specifying-a-poddisruptionbudget) allow you to describe how much disruption an application can tolerate before it begins to become unhealthy. This is critical to configure for Karpenter, since Karpenter uses this information to determine if it can continue to replace nodes. Specifically, if replacing a node would cause a Pod Disruption Budget to be breached (for graceful forms of disruption e.g. Drift or Consolidation), Karpenter will not replace the node.\n\nIn a scenario where a faulty AMI is rolling out and begins causing downtime to your applications, configuring Pod Disruption Budgets is critical since this will tell Karpenter that it must stop replacing nodes until your applications become healthy again. This prevents Karpenter from deploying the faulty AMI throughout your cluster, reduces the imact the AMI has on your production applications, and gives you manually intervene in the cluster to remediate the issue.\n\n## Follow-up\n\nThe Karpenter project continues to add features to give you greater control over AMI upgrades on your clusters.\nIf you have opinions about features you would like to see to manage AMIs with Karpenter, feel free to enter a Karpenter [New Issue](https://github.com/aws/karpenter-provider-aws/issues/new/choose).\n"
  },
  {
    "path": "website/content/en/v1.7/tasks/odcrs.md",
    "content": "---\ntitle: \"Utilizing On-Demand Capacity Reservations and Capacity Blocks\"\nlinkTitle: \"Utilizing ODCRs and Capacity Blocks\"\n---\n\n<i class=\"fa-solid fa-circle-info\"></i> <b>Feature State: </b> [Beta]({{<ref \"../reference/settings#feature-gates\" >}})\n\nKarpenter introduced native support for [EC2 On-Demand Capacity Reservations](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-capacity-reservations.html)  (ODCRs) in [v1.3](https://github.com/aws/karpenter-provider-aws/releases/tag/v1.3.0), enabling users to select upon and prioritize specific capacity reservations.\nIn [v1.6](https://github.com/aws/karpenter-provider-aws/releases/tag/v1.6.0), this support was expanded to include [EC2 Capacity Blocks for ML](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-capacity-blocks.html).\nTo enable native ODCR support, ensure the [`ReservedCapacity` feature gate]({{< relref \"../reference/settings#feature-gates\" >}}) is enabled.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nIf you were previously utilizing `open` ODCRs using Karpenter, review the [migration section]({{< relref \"#migrating-from-previous-versions\" >}}) of this task before enabling this feature.\n{{% /alert %}}\n\n## Selecting Capacity Reservations\n\nTo configure native ODCR support, you will need to make updates to both your EC2NodeClass and NodePool.\nFirst, you should configure `capacityReservationSelectorTerms` on your EC2NodeClass.\nSimilar to `amiSelectorTerms`, you can specify a number of terms which are ANDed together to select ODCRs in your AWS account.\nThe following example demonstrates how to select all capacity reservations tagged with `application: foobar` in addition to `cr-56fac701cc1951b03`:\n\n```yaml\ncapacityReservationSelectorTerms:\n- tags:\n    application: foobar\n- id: cr-56fac701cc1951b03\n```\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nCapacity blocks are modeled as on-demand capacity reservations in EC2.\nTo select capacity blocks, specify them in your `capacityReservationSelectorTerms` in the same way you would for a default ODCR.\n{{% /alert %}}\n\nFor more information on configuring `capacityReservationSelectorTerms`, see the [NodeClass docs]({{< relref \"../concepts/nodeclasses#speccapacityreservationselectorterms\" >}}).\n\nAdditionally, you will need to update your NodePool to be compatible with ODCRs.\nKarpenter doesn't model ODCRs as standard on-demand capacity, and instead uses a dedicated capacity type: `reserved`.\nFor a NodePool to utilize ODCRs, it must be compatible with `karpenter.sh/capacity-type: reserved`.\nThe following example demonstrates how to configure a NodePool to prioritize ODCRs and fallback to on-demand capacity:\n\n```yaml\nrequirements:\n- key: karpenter.sh/capacity-type\n  operator: In\n  values: ['reserved', 'on-demand']\n```\n\nAdditionaly, Karpenter supports the following scheduling labels:\n\n| Label                                         | Example                       | Description                      |\n| --------------------------------------------- | ----------------------------- | -------------------------------- |\n| `karpenter.k8s.aws/capacity-reservation-id`   | `cr-56fac701cc1951b03`        | The capacity reservation's ID    |\n| `karpenter.k8s.aws/capacity-reservation-type` | `default` or `capacity-block` | The type of capacity reservation |\n\nThese labels will only be present on reserved nodes.\nThey are supported as NodePool requirements and as pod scheduling constaints (e.g. [node affinity](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#node-affinity)).\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter does **not** support open matching for ODCRs.\nThis means that all ODCRs you wish to utilize, even those with `open` instance eligibility, must be included in your NodeClass' `spec.capacityReservationSelectorTerms`.\n{{% /alert %}}\n\n## Prioritization Behavior\n\nNodePools are not limited to a single compatible capacity-type -- they can be compatible with any combination of the available capacity-types (`on-demand`, `spot`, and `reserved`).\nConsider the following NodePool requirements:\n\n```yaml\nrequirements:\n- key: karpenter.sh/capacity-type\n  operator: In\n  values: ['reserved', 'on-demand', 'spot']\n```\n\nIn this example, the NodePool is compatible with all capacity types.\nKarpenter will prioritize ODCRs, but if none are available or none are compatible with the pending workloads it will fallback to spot or on-demand.\nSimilarly, Karpenter will prioritize reserved capacity during consolidation.\nSince ODCRs are pre-paid, Karpenter will model them as free and consolidate spot / on-demand nodes when possible.\n\n## Expiration\n\nAn instance launched into an ODCR is not necessarily in that ODCR indefinitely.\nThe ODCR could expire, be cancelled, or the instance could be manually removed from the ODCR.\nIf any of these occur, and Karpenter detects that the instance no longer belongs to an ODCR, it will update the `karpenter.sh/capacity-type` label to `on-demand`.\n\n### Capacity Blocks\n\nUnlike default ODCRs, Capacity Blocks must have an end time.\nAdditionally, instances launched into a capacity block will be terminated by EC2 ahead of the end time, rather than becoming standard on-demand capacity.\n\nFrom the [AWS docs](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-capacity-blocks.html):\n\n> You can use all the instances you reserved until 30 minutes (for instance types) or 60 minutes (for UltraServer type) before the end time of the Capacity Block.\n> With 30 minutes (for instance types) or 60 minutes (for UltraServer types) left in your Capacity Block reservation, we begin terminating any instances that are running in the Capacity Block.\n> We use this time to clean up your instances before delivering the Capacity Block to the next customer.\n\nKarpenter will preemptively begin draining nodes launched for capacity blocks 10 minutes before EC2 begins termination, ensuring your workloads can gracefully terminate before reclaimation.\n\n## Migrating From Previous Versions\n\nAlthough it was not natively supported, it was possible to utilize ODCRs on previous versions of Karpenter.\nIf a NodeClaim's requirements happened to be compatible with an open ODCR in the target AWS account, it may have launched an instance into that open ODCR.\nThis could be ensured by constraining a NodePool such that it was only compatible with the desired open ODCR, and limits could be used to enable fallback to a different NodePool once the ODCR was exhausted.\nThis behavior is no longer supported when native on-demand capacity support is enabled.\n\nIf you were relying on this behavior, you should configure your `EC2NodeClasses` to select the desired ODCRs **before** enabling the feature gate.\nYou should also ensure any NodePools which you wish to use with ODCRs are compatible with `karpenter.sh/capacity-type: reserved`.\nPerforming these steps before enabling the feature gate will ensure that Karpenter can immediately continue utilizing your reservations, rather than falling back to on-demand.\n"
  },
  {
    "path": "website/content/en/v1.7/troubleshooting.md",
    "content": "---\ntitle: \"Troubleshooting\"\nlinkTitle: \"Troubleshooting\"\nweight: 70\ndescription: >\n  Troubleshoot Karpenter problems\n---\n\n## Controller\n\n### Enable debug logging\n\nThis can be done by updating the env variable `LOG_LEVEL` Karpenter deployment and then restarting the Karpenter deployment.\n\nYou can also enable debug logging during installation with Helm by setting the option `logLevel`.\n\n```\nhelm upgrade --install karpenter oci://public.ecr.aws/karpenter/karpenter \\\n  --set logLevel=debug \\\n  ...\n```\n\n## Installation\n\n### Missing Service Linked Role\n\nUnless your AWS account has already onboarded to EC2 Spot, you will need to create the service linked role to avoid `ServiceLinkedRoleCreationNotPermitted`.\n\n```\nAuthFailure.ServiceLinkedRoleCreationNotPermitted: The provided credentials do not have permission to create the service-linked role for EC2 Spot Instances\n```\n\nThis can be resolved by creating the [Service Linked Role](https://docs.aws.amazon.com/batch/latest/userguide/spot_fleet_IAM_role.html).\n\n```\naws iam create-service-linked-role --aws-service-name spot.amazonaws.com\n```\n\n### Failed Resolving STS Credentials with I/O Timeout\n\n```bash\nChecking EC2 API connectivity, WebIdentityErr: failed to retrieve credentials\\ncaused by: RequestError: send request failed\\ncaused by: Post \\\"https://sts.us-east-1.amazonaws.com/\\\": dial tcp: lookup sts.us-east-1.amazonaws.com: i/o timeout\n```\n\nIf you see the error above when you attempt to install Karpenter, this indicates that Karpenter is unable to reach out to the STS endpoint due to failed DNS resolution. This can happen when Karpenter is running with `dnsPolicy: ClusterFirst` and your in-cluster DNS service is not yet running.\n\nYou have two mitigations to resolve this error:\n1. Let Karpenter manage your in-cluster DNS service - You can let Karpenter manage your DNS application pods' capacity by changing Karpenter's `dnsPolicy` to be `Default` (run `--set dnsPolicy=Default` with a Helm installation). This ensures that Karpenter reaches out to the [VPC DNS service](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-dns.html) when running its controllers, allowing Karpenter to start-up without the DNS application pods running, enabling Karpenter to manage the capacity for these pods.\n2. Let MNG/Fargate manage your in-cluster DNS service - If running a cluster with MNG, ensure that your group has enough capacity to support the DNS application pods and ensure that the application has the correct tolerations to schedule against the capacity. If running a cluster with Fargate, ensure that you have a [fargate profile](https://docs.aws.amazon.com/eks/latest/userguide/fargate-profile.html) that selects against your DNS application pods.\n\n### Karpenter Role names exceeding 64-character limit\n\nIf 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).\n\nNode role names for Karpenter are created in the form `KarpenterNodeRole-${Cluster_Name}` in the [Create the KarpenterNode IAM Role]({{<ref \"./getting-started/getting-started-with-karpenter/#create-the-karpenternode-iam-role\" >}}) section of the getting started guide.\nIf a long cluster name causes the Karpenter node role name to exceed 64 characters, creating that object will fail.\n\nKeep in mind that `KarpenterNodeRole-` is just a recommendation from the getting started guide.\nInstead of using the eksctl role, you can shorten the name to anything you like, as long as it has the right permissions.\n\n### Unknown field in NodePool or EC2NodeClass spec\n\nIf 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:\n\n```\nError from server (BadRequest): error when creating \"STDIN\": NodePool in version \"v1\" cannot be handled as a NodePool: strict decoding error: unknown field \"spec.template.spec.nodeClassRef.foo\"\n```\n\nIf you see this error, you can solve the problem by following the [Custom Resource Definition Upgrade Guidance](../upgrade-guide/#custom-resource-definition-crd-upgrades).\n\nInfo 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)\n\n### Unable to schedule pod due to insufficient node group instances\n\n`0.16.0` changed the default replicas from 1 to 2.\n\nKarpenter won't launch capacity to run itself (log related to the `karpenter.sh/nodepool DoesNotExist requirement`)\nso it can't provision for the second Karpenter pod.\n\nTo 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 to run both pods.\n\nTo do so on AWS increase the `minimum` and `desired` parameters on the node group autoscaling group to launch at lease 2 instances.\n\n### Helm Error When Pulling the Chart\n\nIf Helm is showing an error when trying to install Karpenter Helm charts:\n\n- Ensure you are using a newer Helm version, Helm started supporting OCI images since `3.8.0`.\n- Helm does not have an `helm repo add` concept in OCI, so to install Karpenter you no longer need this.\n- If you get an error like `Error: public.ecr.aws/karpenter/karpenter:0.34.0: not found` make sure you're adding a `v` prefix for Karpenter versions between `0.17.0` & `0.34.x`.\n- Verify that the image you are trying to pull actually exists in [gallery.ecr.aws/karpenter](https://gallery.ecr.aws/karpenter/karpenter)\n- 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\n- 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).\n\n### Helm Error when installing the `karpenter-crd` chart\n\nKarpenter `0.26.1` introduced the `karpenter-crd` Helm chart. When installing this chart on your cluster, if you have previously added the Karpenter CRDs to your cluster through the `karpenter` controller chart or through `kubectl replace`, Helm will reject the install of the chart due to `invalid ownership metadata`.\n\n- In the case of `invalid ownership metadata; label validation error: missing key \"app.kubernetes.io/managed-by\": must be set to \"Helm\"` run:\n\n```shell\nkubectl label crd ec2nodeclasses.karpenter.k8s.aws nodepools.karpenter.sh nodeclaims.karpenter.sh app.kubernetes.io/managed-by=Helm --overwrite\n```\n\n- In the case of `annotation validation error: missing key \"meta.helm.sh/release-namespace\": must be set to \"karpenter\"` run:\n\n```shell\nKARPENTER_NAMESPACE=kube-system\nkubectl annotate crd ec2nodeclasses.karpenter.k8s.aws nodepools.karpenter.sh nodeclaims.karpenter.sh meta.helm.sh/release-name=karpenter-crd --overwrite\nkubectl annotate crd ec2nodeclasses.karpenter.k8s.aws nodepools.karpenter.sh nodeclaims.karpenter.sh meta.helm.sh/release-namespace=\"${KARPENTER_NAMESPACE}\" --overwrite\n```\n\n## Uninstallation\n\n### Unable to delete nodes after uninstalling Karpenter\n\nKarpenter 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.\n\nYou can fix this by patching the node objects:\n\n- `kubectl edit node <node_name>` and remove the line that says `karpenter.sh/termination` in the finalizers field.\n- Run the following script that gets all nodes with the finalizer and removes all the finalizers from those nodes.\n  - NOTE: this will remove ALL finalizers from nodes with the karpenter finalizer.\n\n```bash\nkubectl 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\"}]'\n```\n\n## Provisioning\n\n### Instances with swap volumes fail to register with control plane\n\nSome instance types (c1.medium and m1.small) are given limited amount of memory (see [Instance Store swap volumes](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-store-swap-volumes.html)). They are subsequently configured to use a swap volume, which will cause the kubelet to fail on launch. The following error can be seen in the systemd logs:\n\n```bash\n\"command failed\" err=\"failed to run Kubelet: running with swap on is not supported, please disable swap!...\"\n```\n\n##### Solutions\nDisabling swap will allow kubelet to join the cluster successfully, however users should be mindful of performance, and consider adjusting the NodePool requirements to use larger instance types.\n\n### DaemonSets can result in deployment failures\n\nFor Karpenter versions `0.5.3` and earlier, DaemonSets were not properly considered when provisioning nodes.\nThis sometimes caused nodes to be deployed that could not meet the needs of the requested DaemonSets and workloads.\nThis issue no longer occurs after Karpenter version `0.5.3` (see [PR #1155](https://github.com/aws/karpenter/pull/1155)).\n\nIf you are using a pre `0.5.3` version of Karpenter, one workaround is to set your NodePool to only use larger instance types that you know will be big enough for the DaemonSet and the workload.\nFor more information, see [Issue #1084](https://github.com/aws/karpenter/issues/1084).\nExamples of this behavior are included in [Issue #1180](https://github.com/aws/karpenter/issues/1180).\n\n### Unspecified resource requests cause scheduling/bin-pack failures\n\nNot 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.\nThis can cause issues as Karpenter bin-packs pods based on the resource requests.\n\nIf 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.\nThis behavior is not unique to Karpenter and can also occur with the standard `kube-scheduler` with pods that don't have accurate resource requests.\n\nTo prevent this, you can set LimitRanges on pod deployments on a per-namespace basis.\nSee 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.\n\n### Pods using Security Groups for Pods stuck in \"ContainerCreating\" state for up to 30 minutes before transitioning to \"Running\"\n\nWhen 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\".\nThis 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.\nMore info can be found in [issue #1252](https://github.com/aws/karpenter/issues/1252).\n\nTo workaround this problem, add the `vpc.amazonaws.com/has-trunk-attached: \"false\"` label in your Karpenter NodePool 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).\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\nspec:\n  template\n    metadata:\n      labels:\n        vpc.amazonaws.com/has-trunk-attached: \"false\"\n```\n\n### Pods using PVCs can hit volume limits and fail to scale-up\n\nWhen attempting to schedule a large number of pods with PersistentVolumes, it's possible that these pods will co-locate on the same node. Pods will report the following errors in their events using a `kubectl describe pod` call\n\n```bash\nWarning   FailedAttachVolume    pod/example-pod                      AttachVolume.Attach failed for volume \"***\" : rpc error: code = Internal desc = Could not attach volume \"***\" to node \"***\": attachment of disk \"***\" failed, expected device to be attached but was attaching\nWarning   FailedMount           pod/example-pod                      Unable to attach or mount volumes: unmounted volumes=[***], unattached volumes=[***]: timed out waiting for the condition\n```\n\nIn this case, Karpenter may fail to scale-up your nodes due to these pods due to one of the following reasons:\n\n#### Pods were not scheduled but Karpenter couldn't discover limits\n\nKarpenter does not support [in-tree storage plugins](https://kubernetes.io/blog/2021/12/10/storage-in-tree-to-csi-migration-status-update/) to provision PersistentVolumes, since nearly all of the in-tree plugins have been deprecated in upstream Kubernetes. This means that, if you are using a statically-provisioned PersistentVolume that references a volume source like `AWSElasticBlockStore` or a dynamically-provisioned PersistentVolume that references a StorageClass with a in-tree storage plugin provisioner like `kubernetes.io/aws-ebs`, Karpenter will fail to discover the maxiumum volume attachments for the node. Instead, Karpenter may think the node still has more schedulable space due to memory and cpu constraints when there is really no more schedulable space on the node due to volume limits. When Karpenter sees you are using an in-tree storage plugin on your pod volumes, it will print the following error message into the logs. If you see this message, upgrade your StorageClasses and statically-provisioned PersistentVolumes to use the latest CSI drivers for your cloud provider.\n\n```bash\n2023-04-05T23:56:53.363Z        ERROR   controller.node_state   PersistentVolume source 'AWSElasticBlockStore' uses an in-tree storage plugin which is unsupported by Karpenter and is deprecated by Kubernetes. Scale-ups may fail because Karpenter will not discover driver limits. Use a PersistentVolume that references the 'CSI' volume source for Karpenter auto-scaling support.       {\"commit\": \"b2af562\", \"node\": \"ip-192-168-36-137.us-west-2.compute.internal\", \"pod\": \"inflate0-6c4bdb8b75-7qmfd\", \"volume\": \"mypd\", \"persistent-volume\": \"pvc-11db7489-3c6e-46f3-a958-91f9d5009d41\"}\n2023-04-05T23:56:53.464Z        ERROR   controller.node_state   StorageClass .spec.provisioner uses an in-tree storage plugin which is unsupported by Karpenter and is deprecated by Kubernetes. Scale-ups may fail because Karpenter will not discover driver limits. Create a new StorageClass with a .spec.provisioner referencing the CSI driver plugin name 'ebs.csi.aws.com'.     {\"commit\": \"b2af562\", \"node\": \"ip-192-168-36-137.us-west-2.compute.internal\", \"pod\": \"inflate0-6c4bdb8b75-7qmfd\", \"volume\": \"mypd\", \"storage-class\": \"gp2\", \"provisioner\": \"kubernetes.io/aws-ebs\"}\n```\n\n#### Pods were scheduled due to a race condition in Kubernetes\n\nDue to [this race condition in Kubernetes](https://github.com/kubernetes/kubernetes/issues/95911), it's possible that the scheduler and the CSINode can race during node registration such that the scheduler assumes that a node can mount more volumes than the node attachments support. There is currently no universal solve for this problem other than enforcing `topologySpreadConstraints` and `podAntiAffinity` on your workloads that use PVCs such that you attempt to reduce the number of PVCs that schedule to a given node.\n\nThe following is a list of known CSI drivers which support a startupTaint to eliminate this issue:\n- [aws-ebs-csi-driver](https://github.com/kubernetes-sigs/aws-ebs-csi-driver/blob/master/docs/install.md#configure-node-startup-taint)\n- [aws-efs-csi-driver](https://github.com/kubernetes-sigs/aws-efs-csi-driver/tree/master/docs#configure-node-startup-taint)\n\nThese taints should be configured via `startupTaints` on your `NodePool`. For example, to enable this for EBS, add the following to your `NodePool`:\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nspec:\n  template:\n    spec:\n      startupTaints:\n        - key: ebs.csi.aws.com/agent-not-ready\n          effect: NoExecute\n```\n\n### CNI is unable to allocate IPs to pods\n\n_Note: This troubleshooting guidance is specific to the VPC CNI that is shipped by default with EKS clusters. If you are using a custom CNI, some of this guidance may not apply to your cluster._\n\nWhenever a new pod is assigned to a node, the CNI will assign an IP address to that pod (assuming it isn't using host networking), allowing it to communicate with other pods on the cluster. It's possible for this IP allocation and assignment process to fail for a number of reasons. If this process fails, you may see an error similar to the one below.\n\n```bash\ntime=2023-06-12T19:18:15Z type=Warning reason=FailedCreatePodSandBox from=kubelet message=Failed to create pod sandbox: rpc error: code = Unknown desc = failed to setup network for sandbox \"0f46f3f1289eed7afab81b6945c49336ef556861fe5bb09a902a00772848b7cc\": plugin type=\"aws-cni\" name=\"aws-cni\" failed (add): add cmd: failed to assign an IP address to container\n```\n\n#### `maxPods` is greater than the node's supported pod density\n\nBy 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.\n\nIf the max-pods (configured through your EC2NodeClass [`kubeletConfiguration`]({{<ref \"./concepts/nodeclasses/#speckubelet\" >}})) is greater than the number of supported IPs for a given instance type, the CNI will fail to assign an IP to the pod and your pod will be left in a `ContainerCreating` state.\n\nIf you've enabled [Security Groups per Pod](https://aws.github.io/aws-eks-best-practices/networking/sgpp/), one of the instance's ENIs is reserved as the trunk interface and uses branch interfaces off of that trunk interface to assign different security groups.\nIf you do not have any `SecurityGroupPolicies` configured for your pods, they will be unable to utilize branch interfaces attached to the trunk interface, and IPs will only be available from the non-trunk ENIs.\nThis effectively reduces the max-pods value by the number of IPs that would have been available from the trunk ENI.\nNote that Karpenter is not aware if [Security Groups per Pod](https://aws.github.io/aws-eks-best-practices/networking/sgpp/) is enabled, and will continue to compute max-pods assuming all ENIs on the instance can be utilized.\n\n##### Solutions\n\nTo avoid this discrepancy between `maxPods` and the supported pod density of the EC2 instance based on ENIs and allocatable IPs, you can perform one of the following actions on your cluster:\n\n1. Enable [Prefix Delegation](https://docs.aws.amazon.com/eks/latest/userguide/cni-increase-ip-addresses.html) to increase the number of allocatable IPs for the ENIs on each instance type\n2. Reduce your `maxPods` value to be under the maximum pod density for the instance types assigned to your NodePods\n3. Remove the `maxPods` value from your [`kubeletConfiguration`]({{<ref \"./concepts/nodeclasses#speckubeletconfiguration\" >}}) if you no longer need it and instead rely on the defaulted values from Karpenter and EKS AMIs.\n4. Set [RESERVED_ENIS]({{<ref \"./reference/settings\" >}})=1 in your Karpenter configuration to account for the reserved ENI when using Security Groups for Pods.\n\nFor more information on pod density, view the [Pod Density Section in the NodePools doc]({{<ref \"./concepts/nodeclasses#pod-density\" >}}).\n\n#### IP exhaustion in a subnet\n\nWhen a node is launched by Karpenter, it is assigned to a subnet within your VPC based on the [`subnetSelector`]({{<ref \"./concepts/nodeclasses#specsubnetselector\" >}}) value in your [`EC2NodeClass`]({{<ref \"./concepts/nodeclasses\" >}})). When a subnet becomes IP address constrained, EC2 may think that it can successfully launch an instance in the subnet; however, when the CNI tries to assign IPs to the pods, there are none remaining. In this case, your pod will stay in a `ContainerCreating` state until an IP address is freed in the subnet and the CNI can assign one to the pod.\n\n##### Solutions\n\n1. Use `topologySpreadConstraints` on `topology.kubernetes.io/zone` to spread your pods and nodes more evenly across zones\n2. Increase the IP address space (CIDR) for the subnets selected by your `EC2NodeClass`\n3. Use [custom networking](https://docs.aws.amazon.com/eks/latest/userguide/cni-custom-network.html) to assign separate IP address spaces to your pods and your nodes\n4. [Run your EKS cluster on IPv6](https://aws.github.io/aws-eks-best-practices/networking/ipv6/) (Note: IPv6 clusters have some known limitations which should be well-understood before choosing to use one)\n\nFor more troubleshooting information on why your pod may have a `FailedCreateSandbox` error, view the [EKS CreatePodSandbox Knowledge Center Post](https://repost.aws/knowledge-center/eks-failed-create-pod-sandbox).\n\n### Windows pods are failing with `FailedCreatedPodSandbox`\n\nThe following solution(s) may resolve your issue if you are seeing an error similar to the following when attempting to launch Windows pods. This error typically occurs if you have not enabled Windows support.\n\n```\nFailed to create pod sandbox: rpc error: code = Unknown desc = failed to setup network for sandbox \"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\": plugin type=\"vpc-bridge\" name=\"vpc\" failed (add): failed to parse Kubernetes args: pod does not have label vpc.amazonaws.com/PrivateIPv4Address\n```\n\n#### Solutions\n1. See [Enabling Windows support](https://docs.aws.amazon.com/eks/latest/userguide/windows-support.html#enable-windows-support) for instructions on how to enable Windows support.\n\n### Windows pods fail to launch with image pull error\n\nThe following solution(s) may resolve your issue if you are seeing an error similar to the following when attempting to launch Windows pods.\n\n```\nFailed to pull image \"mcr.microsoft.com/windows/servercore:xxx\": rpc error: code = NotFound desc = failed to pull and unpack image \"mcr.microsoft.com/windows/servercore:xxx\": no match for platform in manifest: not found\n```\n\nThis error typically occurs in a scenario whereby a pod with a given container OS version attempts to be scheduled on an incompatible Windows host OS version.\nWindows requires the host OS version to match the container OS version.\n\n#### Solutions\n\n1. Define your pod's `nodeSelector` to ensure that your containers are scheduled on a compatible OS host version. To learn more, see [Windows container version compatibility](https://learn.microsoft.com/en-us/virtualization/windowscontainers/deploy-containers/version-compatibility).\n\n### Windows pods unable to resolve DNS\nCauses for DNS resolution failure may vary, but in the case where DNS resolution is working for Linux pods but not for Windows pods,\nthen the following solution(s) may resolve your issue.\n\n#### Solution(s)\n1. Verify that the instance role of the Windows node includes the RBAC permission group `eks:kube-proxy-windows` as shown below.\n   This group is required for Windows nodes because in Windows, `kube-proxy` runs as a process on the node, and as such, the node requires the necessary RBAC cluster permissions to allow access to the resources required by `kube-proxy`.\n   For more information, see https://docs.aws.amazon.com/eks/latest/userguide/windows-support.html.\n```yaml\n...\n  username: system:node:{{EC2PrivateDNSName}}\n  groups:\n    - system:bootstrappers\n    - system:nodes\n    - eks:kube-proxy-windows # This is required for Windows DNS resolution to work\n...\n```\n\n### Karpenter incorrectly computes available resources for a node\n\nWhen creating nodes, the allocatable resources Karpenter computed (as seen in logs and `nodeClaim.status.allocatable`) do not always match the allocatable resources on the created node (`node.status.allocatable`) due to some amount of memory being reserved for the hypervisor and underlying OS.\nKarpenter uses the results from `ec2:DescribeInstanceTypes` along with a cache for tracking observed memory capacity to determine the resources available on a node launched with a given instance type.\nThe following computation is used to determine allocatable CPU, memory, and ephemeral storage based on the results returned from `ec2:DescribeInstanceTypes`.\n\n```\n### cpu\nnodeClaim.allocatable.cpu = instance.cpu - kubeReserved.cpu - systemReserved.cpu\n\n### memory\n# If first time launching this instance-type + AMI pair\nnodeClaim.allocatable.memory = (instance.memory  * (1.0 - VM_MEMORY_OVERHEAD_PERCENT)) - kubeReserved.memory - systemReserved.memory - max(evictionSoft.memory.available, evictionHard.memory.available)\n# For subsequent nodes where cached instance-type capacity is available\nnodeClaim.allocatable.memory = ( cached.instance.memory - kubeReserved.memory - systemReserved.memory - max(evictionSoft.memory.available, evictionHard.memory.available)\n\n### ephemeral-storage\nnodeClaim.allocatable.ephemeralStorage = instance.storage - kubeReserved.ephemeralStorage - systemReserved.ephemeralStorage - max(evictionSoft.nodefs.available, evictionHard.nodefs.available)\n```\n\nMost of these factors directly model user configuration (i.e. the KubeletConfiguration options).\nOn the other hand, `VM_MEMORY_OVERHEAD_PERCENT` models an implicit reduction of available memory that varies by instance type and AMI.\nHowever, once a node is created, the actual memory capacity on that node (node.status.capacity.memory) is checked by the controller. The controller caches the observed memory for any subsequent nodes launched with the same AMI and instance type pair, improving accuracy for future nodes.\nFor new combinations of AMI and instance type (i.e., when this pair is launched for the first time), Karpenter will still use the VM_MEMORY_OVERHEAD_PERCENT value as a fallback for estimating allocatable memory.\nThis fallback is necessary because Karpenter can't compute the exact value being modeled ahead of time, so `VM_MEMORY_OVERHEAD_PERCENT` is a [global setting]({{< ref \"./reference/settings.md\" >}}) used across all instance type and AMI combinations.\nThe default value (`7.5%`) has been tuned to closely match reality for the majority of instance types while not overestimating.\nAs a result, Karpenter will typically underestimate the memory available on a node for a given instance type.\nIf you know the real `VM_MEMORY_OVERHEAD_PERCENT` for the specific instances you're provisioning in your cluster, you can tune this value to tighten the bound.\nHowever, this should be done with caution.\nA `VM_MEMORY_OVERHEAD_PERCENT` which results in Karpenter overestimating the memory available on a node can result in Karpenter launching nodes which are too small for your workload.\n\nTo detect instances of Karpenter overestimating resource availability, the following status condition can be monitored:\n\n```bash\n$ kg nodeclaim $NODECLAIM_NAME -o jsonpath='{.status.conditions[?(@.type==\"ConsistentStateFound\")]}'\n```\n\n```json\n{\n    \"type\": \"ConsistentStateFound\",\n    \"status\": \"False\",\n    \"reason\": \"ConsistencyCheckFailed\",\n    \"message\": \"Consistency Check Failed\",\n    \"lastTransitionTime\": \"2024-08-19T20:02:16Z\"\n}\n```\n\nThis can be spot checked like shown above, or monitored via the following metric:\n\n```\noperator_status_condition_count{type=\"ConsistentStateFound\",kind=\"NodeClaim\",status=\"False\"}\n```\n\n### Karpenter Is Unable to Satisfy Topology Spread Constraint\n\nWhen scheduling pods with TopologySpreadConstraints, Karpenter will attempt to spread the pods across all eligible domains.\nEligible domains are determined based on the pod's requirements, e.g. node affinity terms.\nHowever, pod's do not inherit the requirements of compatible NodePools.\n\nFor example, consider the following NodePool and Deployment specs:\n\n```yaml\nappVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\nspec:\n  template:\n    spec:\n      requirements:\n      - key: topology.kubernetes.io/zone\n        operator: Exists\n---\nappVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: np-zonal-constraint\n  labels:\n    project: zone-specific-project\nspec:\n  template:\n    spec:\n      requirements:\n      - key: topology.kubernetes.io/zone\n        operator: In\n        values: ['us-east-1a', 'us-east-1b']\n      # ...\n---\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: inflate\nspec:\n  replicas: 3\n  selector:\n    matchLabels:\n      app: inflate\n  template:\n    metadata:\n      labels:\n        app: inflate\n    spec:\n      nodeSelector:\n        project: zone-specific-project\n      topologySpreadConstraints:\n        - maxSkew: 1\n          topologyKey: topology.kubernetes.io/zone\n          whenUnsatisfiable: DoNotSchedule\n          labelSelector:\n            matchLabels:\n              app: inflate\n```\n\nThis cluster has subnets in three availability zones: `us-east-1a`, `us-east-1b`, and `us-east-1c`.\nNodePool `default` can launch instance types in all three zones, but `np-zonal-constraint` is constrained to two.\nSince Karpenter uses the pod's requirements to derive eligible domains, and the pod does not have any zonal constraints, all three availability zones are considered eligible domains.\nHowever, the only NodePool compatible with the pod's requirements is `np-zonal-constraints`, which can only create instances in two of the three eligible domains.\nKarpenter will succeed to launch the first two instances, for the first two replicas, but will fail to provision capacity for subsequent replicas since it can't provision capacity in the third domain.\n\nIn order to prevent these scenarios, you should ensure that all eligible domains for a pod can be provisioned by compatible NodePools, or constrain the pod such that it's eligble domains match those of the NodePools.\nTo resolve this specific issue, zonal constraints should be added to the pod spec to match the requirements of `np-zonal-constraint`:\n```yaml\nnodeAffinity:\n  requiredDuringSchedulingIgnoredDuringExecution:\n    nodeSelectorTerms:\n      - matchExpressions:\n          - key: topology.kubernetes.io/zone\n            operator: In\n            values: ['us-east-1a', 'us-east-1b']\n```\n\n### Log message of `no instance type met the scheduling requirements or had a required offering` is reported\n\nThis error suggests that there is no instance type available that meets the pod's scheduling requirements. A pod may have resource requests that necessitate a minimum instance size. If the pod is confined to a Node Pool with a specific instance family and size, it might not find an instance type that aligns with its resource needs. Additionally, resource requests from daemonsets are considered when determining if an instance type is compatible with the pod.\n\n\nThe phrase `had a required offering` pertains to the availability of an instance type in a specific location, such as an availability zone. This error can occur if a pod is restricted to a particular availability zone. For instance, consider a pod in a stateful set that previously had an EBS volume attached. If the subnet where the pod is scheduled changes, the pod might end up in a different availability zone than the EBS volume it needs to attach to. This mismatch in availability zones can lead to an error related to the required offering.\n\n## Deprovisioning\n\n### Nodes not deprovisioned\n\nThere 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.\n\n#### Initialization\n\nKarpenter 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]({{<ref \"#nodes-not-initialized\" >}}).\n\n#### Disruption budgets\n\nKarpenter 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.\nKubernetes PDBs let you specify how much of a Deployment, ReplicationController, ReplicaSet, or StatefulSet must be protected from disruptions when pod eviction requests are made.\n\nPDBs can be used to strike a balance by protecting the application's availability while still allowing a cluster administrator to manage the cluster.\nHere 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.\n\n```yaml\napiVersion: policy/v1\nkind: PodDisruptionBudget\nmetadata:\n  name: myapp-pdb\nspec:\n  minAvailable: 4\n  selector:\n    matchLabels:\n      app: myapp\n```\n\nYou can set `minAvailable` or `maxUnavailable` as integers or as a percentage.\nReview 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/).\n\n#### `karpenter.sh/do-not-disrupt` Annotation\n\nIf a pod exists with the annotation `karpenter.sh/do-not-disrupt: 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-disrupt` 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.\n\nIf you want to terminate a node with a `do-not-disrupt` pod, you can simply remove the annotation and the deprovisioning process will continue.\n\n#### Scheduling Constraints (Consolidation Only)\n\nConsolidation 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.\n\n## Node Launch/Readiness\n\n### Node not created\n\nIn some circumstances, Karpenter controller can fail to start up a node.\nFor 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:\n\n```bash\n2022-01-19T18:22:23.366Z ERROR controller.provisioning Could not launch node, launching instances, with fleet error(s), InvalidBlockDeviceMapping: Invalid device name /dev/xvda; ...\n```\n\nYou can see errors like this by viewing Karpenter controller logs:\n\n```bash\nkubectl get pods -A | grep karpenter\n```\n\n```bash\nkarpenter     karpenter-XXXX   2/2     Running   2          21d\n```\n\n```bash\nkubectl logs karpenter-XXXX -c controller -n karpenter | less\n```\n\n### Nodes not initialized\n\nKarpenter 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.\n\nKarpenter determines node initialization using three factors:\n\n1. Node readiness\n2. Expected resources are registered\n3. NodePool startup taints are removed\n\n#### Node Readiness\n\nKarpenter checks the `Ready` condition type and expects it to be `True`.\n\nTo see troubleshooting around what might be preventing nodes from becoming ready, see [Node NotReady]({{<ref \"#node-notready\" >}})\n\n#### Expected resources are registered\n\nKarpenter 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`.\n\nCommon resources that don't register and leave nodes in a non-initialized state:\n\n1. `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\n2. `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.\n\n#### NodePool startup taints are removed\n\nKarpenter expects all startup taints specified in `.spec.template.spec.startupTaints` of the NodePool to be completely removed from node `.spec.taints` before it will consider the node initialized.\n\n### Node NotReady\n\nThere are cases where the node starts, but fails to join the cluster and is marked \"Node NotReady\".\nReasons that a node can fail to join the cluster include:\n\n- Permissions\n- Security Groups\n- Networking\n\nThe easiest way to start debugging is to connect to the instance and get the Kubelet logs.  For an AL2 based node:\n\n```bash\n# List the nodes managed by Karpenter\nkubectl get node -l karpenter.sh/nodepool\n# Extract the instance ID (replace <node-name> with a node name from the above listing)\nINSTANCE_ID=$(kubectl get node <node-name> -ojson | jq -r \".spec.providerID\" | cut -d \\/ -f5)\n# Connect to the instance\naws ssm start-session --target $INSTANCE_ID\n# Check Kubelet logs\nsudo journalctl -u kubelet\n```\n\nFor Bottlerocket, you'll need to get access to the root filesystem:\n\n```bash\n# List the nodes managed by Karpenter\nkubectl get node -l karpenter.sh/nodepool\n# Extract the instance ID (replace <node-name> with a node name from the above listing)\nINSTANCE_ID=$(kubectl get node <node-name> -ojson | jq -r \".spec.providerID\" | cut -d \\/ -f5)\n# Connect to the instance\naws ssm start-session --target $INSTANCE_ID\n# Enter the admin container\nenter-admin-container\n# Check Kubelet logs\njournalctl -D /.bottlerocket/rootfs/var/log/journal -u kubelet.service\n```\n\nHere are examples of errors from Node NotReady issues that you might see from `journalctl`:\n\n- The runtime network not being ready can reflect a problem with IAM role permissions:\n\n  ```\n  KubeletNotReady runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:Network plugin returns error: cni plugin not initialized\n    ```\n\n  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:\n\n  ```bash\n  kubectl get pods -n kube-system | grep aws-node\n  ```\n\n  ```\n  aws-node-?????             1/1     Running   2          20d\n  ```\n\n  ```bash\n  kubectl logs aws-node-????? -n kube-system\n  ```\n\n- Not being able to register the node with the Kubernetes API server indicates an error condition like the following:\n\n  ```\n  Attempting to register node\" node=\"ip-192-168-67-130.ec2.internal\"\n  Unable to register node with API server\" err=\"Unauthorized\" node=\"ip-192-168-67-130.ec2.internal\"\n  Error getting node\" err=\"node \\\"ip-192-168-67-130.ec2.internal\\\" not found\n  Failed to contact API server when waiting for CSINode publishing: Unauthorized\n  ```\n\n  Check the ConfigMap to check whether or not the correct node role is there. For example:\n\n  ```bash\n  kubectl get configmaps -n kube-system aws-auth -o yaml\n  ```\n\n  ```yaml\n  apiVersion: v1\n  data:\n  mapRoles: |\n     - groups:\n        - system:bootstrappers\n        - system:nodes\n        rolearn: arn:aws:iam::973227887653:role/eksctl-johnw-karpenter-demo-NodeInstanceRole-72CV61KQNOYS\n        username: system:node:{{EC2PrivateDNSName}}\n     - groups:\n        - system:bootstrappers\n        - system:nodes\n        rolearn: arn:aws:iam::973227887653:role/KarpenterNodeRole-johnw-karpenter-demo\n        username: system:node:{{EC2PrivateDNSName}}\n  mapUsers: |\n      []\n  kind: ConfigMap\n  ...\n    ```\n\nIf 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:\n\n- Your UserData (in `/var_log/cloud-init-output.log` and `/var_log/cloud-init.log`)\n- Your kubelets (`/kubelet/kubelet.log`)\n- Your networking pod logs (`/var_log/aws-node`)\n\nReach 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.\n\n### Nodes stuck in pending and not running the kubelet due to outdated CNI\n\nIf 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`:\n\n> No entry for c6i.xlarge in /etc/eks/eni-max-pods.txt\n\nThis 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).\n\n### Node terminates before ready on failed encrypted EBS volume\n\nIf 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.\nThis issue also applies to [Block Device Mappings]({{<ref \"./concepts/nodeclasses/#block-device-mappings\" >}}) specified in the EC2NodeClass.\nIn either case, this results in the node terminating almost immediately upon creation.\n\nKeep in mind that it is possible that EBS Encryption can be enabled without your knowledge.\nEBS encryption could have been enabled by an account administrator or by default on a per region basis.\nSee [Encryption by default](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html#encryption-by-default) for details.\n\nTo 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:\n\n```json\n[\n    {\n        \"Sid\": \"Allow access through EBS for all principals in the account that are authorized to use EBS\",\n        \"Effect\": \"Allow\",\n        \"Principal\": {\n            \"AWS\": \"*\"\n        },\n        \"Action\": [\n            \"kms:Encrypt\",\n            \"kms:Decrypt\",\n            \"kms:ReEncrypt*\",\n            \"kms:GenerateDataKey*\",\n            \"kms:CreateGrant\",\n            \"kms:DescribeKey\"\n        ],\n        \"Resource\": \"*\",\n        \"Condition\": {\n            \"StringEquals\": {\n            \"kms:ViaService\": \"ec2.${AWS_REGION}.amazonaws.com\",\n            \"kms:CallerAccount\": \"${AWS_ACCOUNT_ID}\"\n            }\n        }\n    },\n    {\n        \"Sid\": \"Allow direct access to key metadata to the account\",\n        \"Effect\": \"Allow\",\n        \"Principal\": {\n            \"AWS\": \"arn:aws:iam::${AWS_ACCOUNT_ID}:root\"\n        },\n        \"Action\": [\n            \"kms:Describe*\",\n            \"kms:Get*\",\n            \"kms:List*\",\n            \"kms:RevokeGrant\"\n        ],\n        \"Resource\": \"*\"\n    }\n]\n```\n\n### Node is not deleted, even though `ttlSecondsUntilExpired` is set or the node is empty\n\nThis 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.\n\n### Log message of `inflight check failed for node, Expected resource \"vpc.amazonaws.com/pod-eni\" didn't register on the node` is reported\n\nThis error indicates that the `vpc.amazonaws.com/pod-eni` resource was never reported on the node. 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.\n\n### AWS Node Termination Handler (NTH) interactions\nKarpenter [doesn't currently support draining and terminating on spot rebalance recommendations]({{< ref \"concepts/disruption#interruption\" >}}). Users who want support for both drain and terminate on spot interruption as well as drain and termination on spot rebalance recommendations may install Node Termination Handler (NTH) on their clusters to support this behavior.\n\nThese two components do not share information between each other, meaning if you have drain and terminate functionality enabled on NTH, NTH may remove a node for a spot rebalance recommendation. Karpenter will replace the node to fulfill the pod capacity that was being fulfilled by the old node; however, Karpenter won't be aware of the reason that that node was terminated. This means that Karpenter may launch the same instance type that was just deprovisioned, causing a spot rebalance recommendation to be sent again. This can result in very short-lived instances where NTH continually removes nodes and Karpeneter re-launches the same instance type over and over again.\n\nKarpenter doesn't recommend reacting to spot rebalance recommendations when running Karpenter with spot nodes; however, if you absolutely require this functionality, note that the above scenario is possible.\nSpot instances are time limited and, therefore, interruptible. When a signal is sent by AWS, it triggers actions from NTH and Karpenter, where the former signals a shutdown and the later provisions, creating a recursive situation.\nThis can be mitigated by either completely removing NTH or by setting the following values:\n\n* enableSpotInterruptionDraining: If false, do not drain nodes when the spot interruption termination notice is received. Only used in IMDS mode.\nenableSpotInterruptionDraining: false\n\n* enableRebalanceDrainin: If true, drain nodes when the rebalance recommendation notice is received. Only used in IMDS mode.\nenableRebalanceDraining: false\n\n## EC2NodeClass Validation\n\n### Force Validation Refresh\n\nIf you believe that Karpenter's EC2NodeClass validation cache is stale (e.g., after updating IAM permissions), you can force Karpenter to refresh the cache by adding any annotation on the EC2NodeClass.\n\n## Pricing\n\n### Stale pricing data on isolated subnet\n\nThe following pricing-related error occurs if you are running Karpenter in an isolated private subnet (no Internet egress via IGW or NAT gateways):\n\n```text\nERROR   controller.aws.pricing  updating on-demand pricing, RequestError: send request failed\ncaused by: Post \"https://api.pricing.us-east-1.amazonaws.com/\": dial tcp 52.94.231.236:443: i/o timeout; RequestError: send request failed\ncaused 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\"}\n```\n\nThis 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).\nTo 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.\nTo disable pricing lookups and avoid the error messages, set the `AWS_ISOLATED_VPC` environment variable (or the `--aws-isolated-vpc` option) to true.\nSee [Environment Variables / CLI Flags]({{<ref \"./reference/settings#environment-variables--cli-flags\" >}}) for details.\n"
  },
  {
    "path": "website/content/en/v1.7/upgrading/_index.md",
    "content": "---\ntitle: \"Upgrading\"\nlinkTitle: \"Upgrading\"\nweight: 30\ndescription: >\n  Upgrading Karpenter guide and reference\ncascade:\n  type: docs\n---\n\n"
  },
  {
    "path": "website/content/en/v1.7/upgrading/compatibility.md",
    "content": "---\ntitle: \"Compatibility\"\nlinkTitle: \"Compatibility\"\nweight: 20\ndescription: >\n  Compatibility issues for Karpenter\n---\n\n# Compatibility\n\nTo make upgrading easier we aim to minimize the introduction of breaking changes.\nBefore you begin upgrading Karpenter, consider Karpenter compatibility issues related to Kubernetes and the NodePool API (previously Provisioner).\n\n## Compatibility Matrix\n\n[comment]: <> (the content below is generated from hack/docs/compataiblitymetrix_gen_docs.go)\n\n| KUBERNETES |   1.27   |   1.28   |   1.29   |   1.30   |   1.31    |  1.32   |  1.33   |  1.34   |\n|------------|----------|----------|----------|----------|-----------|---------|---------|---------|\n| karpenter  | \\>= 0.28 | \\>= 0.31 | \\>= 0.34 | \\>= 0.37 | \\>= 1.0.5 | \\>= 1.2 | \\>= 1.5 | \\>= 1.6 |\n\n[comment]: <> (end docs generated content from hack/docs/compataiblitymetrix_gen_docs.go)\n\n## Compatibility issues\n\nWhen we introduce a breaking change, we do so only as described in this document.\n\nKarpenter follows [Semantic Versioning 2.0.0](https://semver.org/) in its stable release versions, while in\nmajor version zero (`0.y.z`) [anything may change at any time](https://semver.org/#spec-item-4).\nHowever, to further protect users during this phase we will only introduce breaking changes in minor releases (releases that increment y in x.y.z).\nNote this does not mean every minor upgrade has a breaking change as we will also increment the\nminor version when we release a new feature.\n\nUsers should therefore check to see if there is a breaking change every time they are upgrading to a new minor version.\n\n### How Do We Break Incompatibility?\n\nWhen there is a breaking change we will:\n\n* Increment the minor version when in major version 0\n* Add a permanent separate section named `upgrading to x.y.z+` under [release upgrade notes](#release-upgrade-notes)\n  clearly explaining the breaking change and what needs to be done on the user side to ensure a safe upgrade\n* 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\n\n### How Do We Find Incompatibilities?\n\nBesides the peer review process for all changes to the code base we also do the followings in order to find\nincompatibilities:\n* (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\n* (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\n\n### Security Patches\n\nWhile we are in major version 0 we will not release security patches to older versions.\nRather we provide the patches in the latest versions.\nWhen at major version 1 we will have an EOL (end of life) policy where we provide security patches\nfor a subset of older versions and deprecate the others.\n\n## Release Types\n\nKarpenter offers three types of releases. This section explains the purpose of each release type and how the images for each release type are tagged in our [public image repository](https://gallery.ecr.aws/karpenter).\n\n### Stable Releases\n\nStable releases are the only recommended versions for production environments. Stable releases are tagged with a semantic version (e.g. `0.35.0`). Note that stable releases prior to `0.35.0` are prefixed with a `v` (e.g. `v0.34.0`).\n\n### Release Candidates\n\nWe consider having release candidates for major and important minor versions. Our release candidates are tagged like `x.y.z-rc.0`, `x.y.z-rc.1`. The release candidate will then graduate to `x.y.z` as a stable release.\nBy 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.\nNote that, like the stable releases, release candidates prior to `0.35.0` are prefixed with a `v`.\n\n### Snapshot Releases\n\nWe release a snapshot release for every commit that gets merged into [`aws/karpenter-provider-aws`](https://www.github.com/aws/karpenter-provider-aws). This enables users to immediately try a new feature or fix right after it's merged rather than waiting days or weeks for release.\n\nSnapshot releases are not made available in the same public ECR repository as other release types, they are instead published to a separate private ECR repository.\nHelm charts are published to `oci://{{< param \"snapshot_repo.account_id\" >}}.dkr.ecr.{{< param \"snapshot_repo.region\" >}}.amazonaws.com/karpenter/snapshot/karpenter` and are tagged with the git commit hash prefixed by the Karpenter major version (e.g. `0-fc17bfc89ebb30a3b102a86012b3e3992ec08adf`).\nAnyone with an AWS account can pull from this repository, but must first authenticate:\n\n```bash\naws ecr get-login-password --region {{< param \"snapshot_repo.region\" >}} | docker login --username AWS --password-stdin {{< param \"snapshot_repo.account_id\" >}}.dkr.ecr.{{< param \"snapshot_repo.region\" >}}.amazonaws.com\n```\n\n{{% alert title=\"Note\" color=\"warning\" %}}\nSnapshot releases are suitable for testing, and troubleshooting but they should not be used in production environments. Snapshot releases are ephemeral and will be removed 90 days after they were published.\n{{% /alert %}}\n"
  },
  {
    "path": "website/content/en/v1.7/upgrading/upgrade-guide.md",
    "content": "---\ntitle: \"Upgrade Guide\"\nlinkTitle: \"Upgrade Guide\"\nweight: 10\ndescription: >\n  Learn about upgrading Karpenter\n---\n\nKarpenter is a controller that runs in your cluster, but it is not tied to a specific Kubernetes version, as the Cluster Autoscaler is.\nUse your existing upgrade mechanisms to upgrade your core add-ons in Kubernetes and keep Karpenter up to date on bug fixes and new features.\nThis guide contains information needed to upgrade to the latest release of Karpenter, along with compatibility issues you need to be aware of when upgrading from earlier Karpenter versions.\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nWith the release of Karpenter v1.0.0, the Karpenter team has dropped support for karpenter versions v0.36 and below. We recommend upgrading to the latest version of Karpenter and keeping Karpenter up-to-date for bug fixes and new features.\n{{% /alert %}}\n\nWhen upgrading Karpenter in production environments, implementing a robust CI/CD pipeline approach is crucial. Improper upgrades can lead to significant disruptions including failed node provisioning, orphaned nodes, interrupted workloads, and potential cost implications from unmanaged scaling. Given Karpenter's critical role in cluster scaling and workload management, untested upgrades could result in production outages or resource allocation issues that directly impact application availability and performance. Therefore, we recommend following these structured steps:\n\n#### Pre-upgrade Validation\n\n- Validate all required IAM permissions (node role, controller role)\n- Check webhook configurations\n- Back up existing NodePool and NodeClass configurations\n- Document current version and settings\n\n#### Staging Environment Setup\n\n- Create or verify staging environment\n- Update version tags in Helm values or manifests\n- Configure automated validation tests\n\n#### Staging Deployment\n\n- Deploy to staging environment\n- Run comprehensive tests including node provisioning\n- Verify controller health\n- Test NodePool and NodeClass functionality\n- Monitor system behavior\n\n#### Production Approval and Deployment\n\n- Require manual approval/review\n- Schedule maintenance window if needed\n- Execute production deployment\n- Monitor deployment progress\n- Verify all components are functioning\n\n#### Post-Deployment\n\n- Monitor system health\n- Verify node provisioning\n- Keep rollback configurations accessible\n- Update documentation\n\nHere are few recommended CI/CD Pipeline Options:\n\n- GitHub Actions - Excellent for GitHub-hosted repositories with built-in Kubernetes support\n- GitLab CI - Strong container-native pipeline with integrated Kubernetes functionality\n- ArgoCD - Specialized for GitOps workflows with Kubernetes\n- AWS CodePipeline - Native integration with EKS and AWS services\n- Flux - Open-source GitOps tool for Kubernetes with automatic deployment capabilities\n\nEach pipeline tool can be configured to handle the Karpenter upgrade workflow, but choose based on your existing infrastructure, team expertise, and specific requirements for automation and integration.\n\n\n### CRD Upgrades\n\nKarpenter ships with a few Custom Resource Definitions (CRDs). These CRDs are published:\n* 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:\n  ```bash\n  KARPENTER_NAMESPACE=kube-system\n  helm upgrade --install karpenter-crd oci://public.ecr.aws/karpenter/karpenter-crd --version x.y.z --namespace \"${KARPENTER_NAMESPACE}\" --create-namespace\n  ```\n* As part of the helm chart [karpenter](https://gallery.ecr.aws/karpenter/karpenter) ([source](https://github.com/aws/karpenter/blob/main/charts/karpenter/crds)).\n  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.\n  Subsequent chart upgrades will not add or remove CRDs, even if the CRDs have changed.\n\nCRDs are coupled to the version of Karpenter, and should be updated along with Karpenter.\nFor this reason, we recommend using the independent `karpenter-crd` chart to manage CRDs.\n\n{{% alert title=\"Note\" color=\"warning\" %}}\nIf you get the error `invalid ownership metadata; label validation error:` while installing the `karpenter-crd` chart from an older version of Karpenter, follow the [Troubleshooting Guide]({{<ref \"../troubleshooting/#helm-error-when-installing-the-karpenter-crd-chart\" >}}) for details on how to resolve these errors.\n{{% /alert %}}\n\n<!--\nWHEN CREATING A NEW SECTION OF THE UPGRADE GUIDANCE FOR NEWER VERSIONS, ENSURE THAT YOU COPY THE BETA API ALERT SECTION FROM THE LAST RELEASE TO PROPERLY WARN USERS OF THE RISK OF UPGRADING WITHOUT GOING TO 0.32.x FIRST\n-->\n\n### Upgrading to `1.7.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter `1.1.0` drops the support for `v1beta1` APIs.\n**Do not** upgrade to `1.1.0`+ without following the [Migration Guide]({{<ref \"../../v1.0/upgrading/v1-migration.md#before-upgrading-to-v110\">}}).\n{{% /alert %}}\n\n* Instance profile path changes:\n  - Karpenter now creates instance profiles with a specific path structure `/karpenter/{region}/{cluster-name}/{nodeclass-uid}/` instead of the generic root path `/`\n  - This change helps with better organization and management of instance profiles\n  - No action is required for existing instance profiles, but new ones will use this path structure\n  - Additional IAM permissions required:\n    - The following new IAM permissions are required for the Karpenter controller role:\n      - `iam:ListInstanceProfiles`: Required for managing instance profiles\n* The `karpenter_pods_pods_drained_total` metric has been renamed to `karpenter_pods_drained_total`\n* The `karpenter_nodeclaims_disrupted_total` metric reason `liveness` has been renamed to `registration_timeout`\n* Pods with `ResourceClaim` requests are explicitly ignored. Older revisions of Karpenter are not aware of the field and would ignore those requests. DRA is not currently supported by Karpenter.\n\nFull Changelog:\n* https://github.com/aws/karpenter-provider-aws/releases/tag/v1.7.0\n* https://github.com/kubernetes-sigs/karpenter/releases/tag/v1.7.0\n\n### Upgrading to `1.6.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter `1.1.0` drops the support for `v1beta1` APIs.\n**Do not** upgrade to `1.1.0`+ without following the [Migration Guide]({{<ref \"../../v1.0/upgrading/v1-migration.md#before-upgrading-to-v110\">}}).\n{{% /alert %}}\n\n* Native ODCR support has graduated to beta and is enabled by default.\n  If you were previously using open ODCRs with Karpenter and have not already migrated to native ODCR support, review the [native ODCR support guide]({{< relref \"../tasks/odcrs\" >}}) before upgrading.\n* Support a new configuration option `MinValuesPolicy` which controls how the Karpenter scheduler treats min values. Options include 'Strict' (fails scheduling when min values can't be met) and 'BestEffort' (relaxes min values when they can't be met). Default is 'Strict' to preserve existing behavior.\n* Support a new configuration option `DisableDryRun` which disables the dry run calls made during EC2NodeClass validation (1.6.2+).\n\nFull Changelog:\n* https://github.com/aws/karpenter-provider-aws/releases/tag/v1.6.0\n* https://github.com/kubernetes-sigs/karpenter/releases/tag/v1.6.0\n\n### Upgrading to `1.5.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter `1.1.0` drops the support for `v1beta1` APIs.\n**Do not** upgrade to `1.1.0`+ without following the [Migration Guide]({{<ref \"../../v1.0/upgrading/v1-migration.md#before-upgrading-to-v110\">}}).\n{{% /alert %}}\n\n* No breaking changes 🎉\n\nFull Changelog:\n* https://github.com/aws/karpenter-provider-aws/releases/tag/v1.5.0\n* https://github.com/kubernetes-sigs/karpenter/releases/tag/v1.5.0\n\n### Upgrading to `1.4.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter `1.1.0` drops the support for `v1beta1` APIs.\n**Do not** upgrade to `1.1.0`+ without following the [Migration Guide]({{<ref \"../../v1.0/upgrading/v1-migration.md#before-upgrading-to-v110\">}}).\n{{% /alert %}}\n\n* No breaking changes 🎉\n\nFull Changelog:\n* https://github.com/aws/karpenter-provider-aws/releases/tag/v1.4.0\n* https://github.com/kubernetes-sigs/karpenter/releases/tag/v1.4.0\n\n### Upgrading to `1.3.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter `1.1.0` drops the support for `v1beta1` APIs.\n**Do not** upgrade to `1.1.0`+ without following the [Migration Guide]({{<ref \"../../v1.0/upgrading/v1-migration.md#before-upgrading-to-v110\">}}).\n{{% /alert %}}\n\n* `karpenter_ignored_pod_count` alpha metric had its name changed to `karpenter_scheduler_ignored_pod_count`\n* With the `ReservedCapacity` feature flag, Karpenter introduces a new `karpenter.sh/capacity-type` value (`reserved`). This means any applications that explicitly select on `on-demand` with a `nodeSelector` and want to utilize ODCR capacity may need to update their requirements to use `nodeAffinity` to opt-in to using both `reserved` and `on-demand` capacity.\n\n### Upgrading to `1.2.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter `1.1.0` drops the support for `v1beta1` APIs.\n**Do not** upgrade to `1.1.0`+ without following the [Migration Guide]({{<ref \"../../v1.0/upgrading/v1-migration.md#before-upgrading-to-v110\">}}).\n{{% /alert %}}\n\n* We have recently updated our labels on `karpenter_voluntary_disruption_queue_failures_total` and `karpenter_nodeclaims_disrupted_total` reason label from camille case to snake case. Therefore these reason labels values on those metrics have now been update as such:\n  - Drifted -> drifted\n  - Empty -> empty\n  - Expired -> expired\n  - Underutilized -> underutilized\n* Nodeclass status and termination controllers have been merged into a single `nodeclass` controller. If you are relying on logs or metrics for `nodeclass.termination` or `nodeclass.status` controllers, please make sure that you update them to reference the new `nodeclass` controller.\n\n### Upgrading to `1.1.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter `1.1.0` drops the support for `v1beta1` APIs.\n**Do not** upgrade to `1.1.0`+ without following the [Migration Guide]({{<ref \"../../v1.0/upgrading/v1-migration.md#before-upgrading-to-v110\">}}).\n{{% /alert %}}\n\n* Support for the `v1beta1` compatiblity annotations have been dropped. Ensure you have completed migration before upgrading to `v1.1.0`. Refer to the [migration guide]({{<ref \"../../v1.0/upgrading/v1-migration.md#kubelet-configuration-migration\">}}) for more details.\n* `nodeClassRef.group` and `nodeClassRef.kind` are strictly required. Ensure these values are set for all `NodePools` / `NodeClaims` before upgrading.\n* Bottlerocket AMIFamily now supports `instanceStorePolicy: RAID0`. This means that Karpenter will auto-generate userData to RAID0 your instance store volumes (similar to AL2 and AL2023) when specifying this value.\n  * Note: This userData configuration is _only_ valid on Bottlerocket v1.22.0+. If you are using an earlier version of a Bottlerocket image (< v1.22.0) with `amiFamily: Bottlerocket` and `instanceStorePolicy: RAID0`, nodes will fail to join the cluster.\n* The AWS Neuron accelerator well known name label (`karpenter.k8s.aws/instance-accelerator-name`) values now reflect their correct names of `trainium`, `inferentia`, and `inferentia2`. Previously, all Neuron accelerators were assigned the label name of `inferentia`.\n* Karpenter drops the internal `karpenter.k8s.aws/cluster` tag used for launch template management in favor of `eks:eks-cluster-name` and consistency with other Karpenter-provisioned resources\n* Generic operator metrics have been have been deprecated and replaced by resource-specific metrics.\n\n### Upgrading to `1.0.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter `1.0.0` introduces the `v1` APIs and uses [conversion webhooks](https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definition-versioning/#webhook-conversion) to support existing `v1beta1` APIs.\n**Do not** upgrade to `1.0.0`+ without following the [`v1` Migration Guide]({{<ref \"../../v1.0/upgrading/v1-migration.md\">}}).\n{{% /alert %}}\n\nRefer to the `v1` Migration Guide for the [full changelog]({{<ref \"../../v1.0/upgrading/v1-migration.md#changelog\">}}).\n\n### Upgrading to `0.37.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\n`0.33.0`+ _only_ supports Karpenter v1beta1 APIs and will not work with existing Provisioner, AWSNodeTemplate or Machine alpha APIs. Do not upgrade to `0.37.0`+ without first [upgrading to `0.32.x`]({{<ref \"#upgrading-to-0320\" >}}). This version supports both the alpha and beta APIs, allowing you to migrate all of your existing APIs to beta APIs without experiencing downtime.\n{{% /alert %}}\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nWebhooks have been re-enabled by default starting in `0.37.3` to faciliate migration to `v1.0`.\nIf your cluster has network policies that block Ingress then ports `8000`, `8001`, `8081`, `8443` will need to be allowlisted.\nYou may still choose to disable webhooks through the helm chart.\n{{% /alert %}}\n\n\n* Karpenter now adds a readiness status condition to the EC2NodeClass. Make sure to upgrade your Custom Resource Definitions before proceeding with the upgrade. Failure to do so will result in Karpenter being unable to provision new nodes.\n* Karpenter no longer updates the logger name when creating controller loggers. We now adhere to the controller-runtime standard, where the logger name will be set as `\"logger\": \"controller\"` always and the controller name will be stored in the structured value `\"controller\"`\n* Karpenter updated the NodeClass controller naming in the following way: `nodeclass` -> `nodeclass.status`, `nodeclass.hash`, `nodeclass.termination`\n* Karpenter's NodeClaim status conditions no longer include the `severity` field\n\n### Upgrading to `0.36.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\n`0.33.0`+ _only_ supports Karpenter v1beta1 APIs and will not work with existing Provisioner, AWSNodeTemplate or Machine alpha APIs. Do not upgrade to `0.36.0`+ without first [upgrading to `0.32.x`]({{<ref \"#upgrading-to-0320\" >}}). This version supports both the alpha and beta APIs, allowing you to migrate all of your existing APIs to beta APIs without experiencing downtime.\n{{% /alert %}}\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nv0.36.x introduces update to drift that restricts rollback. When rolling back from >=v0.36.0, note that v0.32.9+, v0.33.4+, v0.34.5+, v0.35.4+ are the patch versions that support rollback. If Karpenter is rolled back to an older patch version, Karpenter can potentially drift all the nodes in the cluster.\n{{% /alert %}}\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nWebhooks have been re-enabled by default starting in `0.36.5` to faciliate migration to `v1.0`.\nIf your cluster has network policies that block Ingress then ports `8000`, `8001`, `8081`, `8443` will need to be allowlisted.\nYou may still choose to disable webhooks through the helm chart.\n{{% /alert %}}\n\n* Karpenter changed the name of the `karpenter_cloudprovider_instance_type_price_estimate` metric to `karpenter_cloudprovider_instance_type_offering_price_estimate` to align with the new `karpenter_cloudprovider_instance_type_offering_available` metric. The `region` label was also dropped from the metric, since this can be inferred from the environment that Karpenter is running in.\n\n### Upgrading to `0.35.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\n`0.33.0`+ _only_ supports Karpenter v1beta1 APIs and will not work with existing Provisioner, AWSNodeTemplate or Machine alpha APIs. Do not upgrade to `0.35.0`+ without first [upgrading to `0.32.x`]({{<ref \"#upgrading-to-0320\" >}}). This version supports both the alpha and beta APIs, allowing you to migrate all of your existing APIs to beta APIs without experiencing downtime.\n{{% /alert %}}\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nWebhooks have been re-enabled by default starting in `0.35.8` to faciliate migration to `v1.0`.\nIf your cluster has network policies that block Ingress then ports `8000`, `8001`, `8081`, `8443` will need to be allowlisted.\nYou may still choose to disable webhooks through the helm chart.\n{{% /alert %}}\n\n* Karpenter OCI tags and Helm chart version are now valid semantic versions, meaning that the `v` prefix from the git tag has been removed and they now follow the `x.y.z` pattern.\n\n### Upgrading to `0.34.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\n`0.33.0`+ _only_ supports Karpenter v1beta1 APIs and will not work with existing Provisioner, AWSNodeTemplate or Machine alpha APIs. Do not upgrade to `0.34.0`+ without first [upgrading to `0.32.x`]({{<ref \"#upgrading-to-0320\" >}}). This version supports both the alpha and beta APIs, allowing you to migrate all of your existing APIs to beta APIs without experiencing downtime.\n{{% /alert %}}\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nThe Ubuntu EKS optimized AMI has moved from 20.04 to 22.04 for Kubernetes 1.29+. This new AMI version is __not currently__ supported for users relying on AMI auto-discovery with the Ubuntu AMI family. More details can be found in this [GitHub issue](https://github.com/aws/karpenter-provider-aws/issues/5572). Please review this issue before upgrading to Kubernetes 1.29 if you are using the Ubuntu AMI family. Upgrading to 1.29 without making any changes to your EC2NodeClass will result in Karpenter being unable to create new nodes.\n{{% /alert %}}\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nWebhooks have been re-enabled by default starting in `0.34.9` to faciliate migration to `v1.0`.\nIf your cluster has network policies that block Ingress then ports `8000`, `8001`, `8081`, `8443` will need to be allowlisted.\nYou may still choose to disable webhooks through the helm chart.\n{{% /alert %}}\n\n* Karpenter now supports `nodepool.spec.disruption.budgets`, which allows users to control the speed of disruption in the cluster. Since this requires an update to the Custom Resource, before upgrading, you should re-apply the new updates to the CRDs. Check out [Disruption Budgets]({{<ref \"../concepts/disruption#disruption-budgets\" >}}) for more.\n* With Disruption Budgets, Karpenter will disrupt multiple batches of nodes simultaneously, which can result in overall quicker scale-down of your cluster. Before `0.34.0`, Karpenter had a hard-coded parallelism limit for each type of disruption. In `0.34.0`+, Karpenter will now disrupt at most 10% of nodes for a given NodePool. There is no setting that will be perfectly equivalent with the behavior prior to `0.34.0`. When considering how to configure your budgets, please refer to the following limits for versions prior to `0.34.0`:\n  * `Empty Expiration / Empty Drift / Empty Consolidation`: infinite parallelism\n  * `Non-Empty Expiration / Non-Empty Drift / Single-Node Consolidation`: one node at a time\n  * `Multi-Node Consolidation`: max 100 nodes\n* To support Disruption Budgets, `0.34.0`+ includes critical changes to Karpenter's core controllers, which allows Karpenter to consider multiple batches of disrupting nodes simultaneously. This increases Karpenter's performance with the potential downside of higher CPU and memory utilization from the Karpenter pod. While the magnitude of this difference varies on a case-by-case basis, when upgrading to Karpenter `0.34.0`+, please note that you may need to increase the resources allocated to the Karpenter controller pods.\n* Karpenter now adds a default `podSecurityContext` that configures the `fsgroup: 65536` of volumes in the pod. If you are using sidecar containers, you should review if this configuration is compatible for them. You can disable this default `podSecurityContext` through helm by performing `--set podSecurityContext=null` when installing/upgrading the chart.\n* The `dnsPolicy` for the Karpenter controller pod has been changed back to the Kubernetes cluster default of `ClusterFirst`. Setting our `dnsPolicy` to `Default` (confusingly, this is not the Kubernetes cluster default) caused more confusion for any users running IPv6 clusters with dual-stack nodes or anyone running Karpenter with dependencies on cluster services (like clusters running service meshes). This change may be breaking for any users on Fargate or MNG who were allowing Karpenter to manage their in-cluster DNS service (`core-dns` on most clusters). If you still want the old behavior here, you can change the `dnsPolicy` to point to use `Default` by setting the helm value on install/upgrade with `--set dnsPolicy=Default`. More details on this issue can be found in the following Github issues: [#2186](https://github.com/aws/karpenter-provider-aws/issues/2186) and [#4947](https://github.com/aws/karpenter-provider-aws/issues/4947).\n* Karpenter now disallows `nodepool.spec.template.spec.resources` to be set. The webhook validation never allowed `nodepool.spec.template.spec.resources`. We are now ensuring that CEL validation also disallows `nodepool.spec.template.spec.resources` to be set. If you were previously setting the resources field on your NodePool, ensure that you remove this field before upgrading to the newest version of Karpenter or else updates to the resource may fail on the new version.\n\n### Upgrading to `0.33.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\n`0.33.0`+ _only_ supports Karpenter v1beta1 APIs and will not work with existing Provisioner, AWSNodeTemplate or Machine alpha APIs. **Do not** upgrade to `0.33.0`+ without first [upgrading to `0.32.x`]({{<ref \"#upgrading-to-0320\" >}}). This version supports both the alpha and beta APIs, allowing you to migrate all of your existing APIs to beta APIs without experiencing downtime.\n{{% /alert %}}\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nWebhooks have been re-enabled by default starting in `0.33.8` to faciliate migration to `v1.0`.\nIf your cluster has network policies that block Ingress then ports `8000`, `8001`, `8081`, `8443` will need to be allowlisted.\nYou may still choose to disable webhooks through the helm chart.\n{{% /alert %}}\n\n* Karpenter no longer supports using the `karpenter.sh/provisioner-name` label in NodePool labels and requirements or in application node selectors, affinities, or topologySpreadConstraints. If you were previously using this label to target applications to specific Provisioners, you should update your applications to use the `karpenter.sh/nodepool` label instead before upgrading. If you upgrade without changing these labels, you may begin to see pod scheduling failures for these applications.\n* Karpenter now tags `spot-instances-request` with the same tags that it tags instances, volumes, and primary ENIs. This means that you will now need to add `ec2:CreateTags` permission for `spot-instances-request`. You can also further scope your controller policy for the `ec2:RunInstances` action to require that it launches the `spot-instances-request` with these specific tags. You can view an example of scoping these actions in the [Getting Started Guide's default CloudFormation controller policy](https://github.com/aws/karpenter/blob/v0.33.0/website/content/en/preview/getting-started/getting-started-with-karpenter/cloudformation.yaml#L61).\n* We now recommend that you set the installation namespace for your Karpenter controllers to `kube-system` to denote Karpenter as a critical cluster component. This ensures that requests from the Karpenter controllers are treated with higher priority by assigning them to a different [PriorityLevelConfiguration](https://kubernetes.io/docs/concepts/cluster-administration/flow-control/#prioritylevelconfiguration) than generic requests from other namespaces. For more details on API Priority and Fairness, read the [Kubernetes API Priority and Fairness Conceptual Docs](https://kubernetes.io/docs/concepts/cluster-administration/flow-control/). Note: Changing the namespace for your Karpenter release will cause the service account namespace to change. If you are using IRSA for authentication with AWS, you will need to change scoping set in the controller's trust policy from `karpenter:karpenter` to `kube-system:karpenter`.\n* ~~`0.33.0` disables mutating and validating webhooks by default in favor of using [Common Expression Language for CRD validation](https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/#validation). The Common Expression Language Validation Feature [is enabled by default on EKS 1.25](https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/#validation-rules). If you are using Kubernetes version >= 1.25, no further action is required. If you are using a Kubernetes version below 1.25, you now need to set `DISABLE_WEBHOOK=false` in your container environment variables or `--set webhook.enabled=true` if using Helm. View the [Webhook Support Deprecated in Favor of CEL Section of the v1beta1 Migration Guide]({{<ref \"../../v1.0/upgrading/v1beta1-migration#webhook-support-deprecated-in-favor-of-cel\" >}}).~~\n* `0.33.0` drops support for passing settings through the `karpenter-global-settings` ConfigMap. You should pass settings through the container environment variables in the Karpenter deployment manifest. View the [Global Settings Section of the v1beta1 Migration Guide]({{<ref \"../../v1.0/upgrading/v1beta1-migration#global-settings\" >}}) for more details.\n* `0.33.0` enables `Drift=true` by default in the `FEATURE_GATES`. If you previously didn't enable the feature gate, Karpenter will now check if there is a difference between the desired state of your nodes declared in your NodePool and the actual state of your nodes. View the [Drift Section of Disruption Conceptual Docs]({{<ref \"../concepts/disruption#drift\" >}}) for more details.\n* `0.33.0` drops looking up the `zap-logger-config` through ConfigMap discovery. Instead, Karpenter now expects the logging config to be mounted on the filesystem if you are using this to configure Zap logging. This is not enabled by default, but can be enabled through `--set logConfig.enabled=true` in the Helm values. If you are setting any values in the `logConfig` from the `0.32.x` upgrade, such as `logConfig.logEncoding`, note that you will have to explicitly set `logConfig.enabled=true` alongside it. Also, note that setting the Zap logging config is a deprecated feature in beta and is planned to be dropped at v1. View the [Logging Configuration Section of the v1beta1 Migration Guide]({{<ref \"../../v1.0/upgrading/v1beta1-migration#logging-configuration-is-no-longer-dynamic\" >}}) for more details.\n* `0.33.0` change the default `LOG_LEVEL` from `debug` to `info` by default. If you are still enabling logging configuration through the `zap-logger-config`, no action is required.\n* `0.33.0` drops support for comma delimited lists on tags for `SubnetSelectorTerm`, `SecurityGroupsSelectorTerm`, and `AMISelectorTerm`. Karpenter now supports multiple terms for each of the selectors which means that we can specify a more explicit OR-based constraint through separate terms rather than a comma-delimited list of values.\n\n### Upgrading to `0.32.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter `0.32.0` introduces v1beta1 APIs, including _significant_ changes to the API and installation procedures for the Karpenter controllers. **Do not** upgrade to `0.32.0`+ without referencing the [v1beta1 Migration Upgrade Procedure]({{<ref \"../../v1.0/upgrading/v1beta1-migration#upgrade-procedure\" >}}).\n\nThis version includes **dual support** for both alpha and beta APIs to ensure that you can slowly migrate your existing Provisioner, AWSNodeTemplate, and Machine alpha APIs to the newer NodePool, EC2NodeClass, and NodeClaim beta APIs.\n\nNote that if you are rolling back after upgrading to `0.32.0`, note that __only__ versions `0.31.4` support handling rollback after you have deployed the v1beta1 APIs to your cluster.\n{{% /alert %}}\n\n* Karpenter now uses `settings.InterruptionQueue` instead of `settings.aws.InterruptionQueueName` in its helm chart. The CLI argument also changed to `--interruption-queue`.\n* Karpenter now serves the webhook prometheus metrics server on port `8001`. If this port is already in-use on the pod or you are running in `hostNetworking` mode, you may need to change this port value. You can configure this port value through the `WEBHOOK_METRICS_PORT` environment variable or the `webhook.metrics.port` value if installing via Helm.\n* Karpenter now exposes the ability to disable webhooks through the `webhook.enabled=false` value. This value will disable the webhook server and will prevent any permissions, mutating or validating webhook configurations from being deployed to the cluster.\n* Karpenter now moves all logging configuration for the Zap logger into the `logConfig` values block. Configuring Karpenter logging with this mechanism _is_ deprecated and will be dropped at v1. Karpenter now only surfaces logLevel through the `logLevel` helm value. If you need more advanced configuration due to log parsing constraints, we recommend configuring your log parser to handle Karpenter's Zap JSON logging.\n* The default log encoding changed from `console` to `json`. If you were previously not setting the type of log encoding, this default will change with the Helm chart. If you were setting the value through `logEncoding`, this value will continue to work until `0.33.x` but it is deprecated in favor of `logConfig.logEncoding`\n* Karpenter now uses the `karpenter.sh/disruption:NoSchedule=disrupting` taint instead of the upstream `node.kubernetes.io/unschedulable` taint for nodes spawned with a NodePool to prevent pods from scheduling to nodes being disrupted. Pods that previously tolerated the `node.kubernetes.io/unschedulable` taint that previously weren't evicted during termination will now be evicted. This most notably affects DaemonSets, which have the `node.kubernetes.io/unschedulable` toleration by default, where Karpenter will now remove these pods during termination. If you want your specific pods to not be evicted when nodes are scaled down, you should add a toleration to the pods with the following: `Key=karpenter.sh/disruption, Effect=NoSchedule, Operator=Equals, Values=disrupting`.\n  * Note: Karpenter will continue to use the old `node.kubernetes.io/unschedulable` taint for nodes spawned with a Provisioner.\n\n### Upgrading to `0.31.0`+\n\n* Karpenter moved its `securityContext` constraints from pod-wide to only applying to the Karpenter container exclusively. If you were previously relying on the pod-wide `securityContext` for your sidecar containers, you will now need to set these values explicitly in your sidecar container configuration.\n\n### Upgrading to `0.30.0`+\n\n* Karpenter will now [statically drift]({{<ref \"../concepts/disruption#drift\" >}}) on both Provisioner and AWSNodeTemplate Fields. For Provisioner Static Drift, the `karpenter.sh/provisioner-hash` annotation must be present on both the Provisioner and Machine. For AWSNodeTemplate drift, the `karpenter.k8s.aws/nodetemplate-hash` annotation must be present on the AWSNodeTemplate and Machine. Karpenter will not add these annotations to pre-existing nodes, so each of these nodes will need to be recycled one time for the annotations to be added.\n* Karpenter will now fail validation on AWSNodeTemplates and Provisioner `spec.provider` that have `amiSelectors`, `subnetSelectors`, or `securityGroupSelectors` set with a combination of id selectors (`aws-ids`, `aws::ids`) and other selectors.\n* Karpenter now statically sets the `securityContext` at both the pod and container-levels and doesn't allow override values to be passed through the Helm chart. This change was made to adhere to [Restricted Pod Security Standard](https://kubernetes.io/docs/concepts/security/pod-security-standards/#restricted), which follows pod hardening best practices.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nIf you have sidecar containers configured to run alongside Karpenter that cannot tolerate the [pod-wide `securityContext` constraints](https://github.com/aws/karpenter/blob/v0.30.0/charts/karpenter/templates/deployment.yaml#L40), you will need to specify overrides to the sidecar `securityContext` in your deployment.\n{{% /alert %}}\n\n### Upgrading to `0.29.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter `0.29.1` contains a [file descriptor and memory leak bug](https://github.com/aws/karpenter/issues/4296) that leads to Karpenter getting OOMKilled and restarting at the point that it hits its memory or file descriptor limit. Karpenter `0.29.2`+ fixes this leak.\n{{% /alert %}}\n\n* Karpenter has changed the default metrics service port from 8080 to 8000 and the default webhook service port from 443 to 8443. In `0.28.0`, the Karpenter pod port was changed to 8000, but referenced the service by name, allowing users to scrape the service at port 8080 for metrics. `0.29.0` aligns the two ports so that service and pod metrics ports are the same. These ports are set by the `controller.metrics.port` and `webhook.port` Helm chart values, so if you have previously set these to non-default values, you may need to update your Prometheus scraper to match these new values.\n\n* Karpenter will now reconcile nodes that are drifted due to their Security Groups or their Subnets. If your AWSNodeTemplate's Security Groups differ from the Security Groups used for an instance, Karpenter will consider it drifted. If the Subnet used by an instance is not contained in the allowed list of Subnets for an AWSNodeTemplate, Karpenter will also consider it drifted.\n  * Since Karpenter uses tags for discovery of Subnets and SecurityGroups, check the [Threat Model]({{<ref \"../reference/threat-model.md#threat-using-ec2-createtagdeletetag-permissions-to-orchestrate-machine-creationdeletion\" >}}) to see how to manage this IAM Permission.\n\n### Upgrading to `0.28.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter `0.28.0` is incompatible with Kubernetes version 1.26+, which can result in additional node scale outs when using `--cloudprovider=external`, which is the default for the EKS Optimized AMI. See: https://github.com/aws/karpenter-core/pull/375. Karpenter `0.28.1`+ fixes this issue and is compatible with Kubernetes version 1.26+.\n{{% /alert %}}\n\n* The `extraObjects` value is now removed from the Helm chart. Having this value in the chart proved to not work in the majority of Karpenter installs and often led to anti-patterns, where the Karpenter resources installed to manage Karpenter's capacity were directly tied to the install of the Karpenter controller deployments. The Karpenter team recommends that, if you want to install Karpenter manifests alongside the Karpenter Helm chart, to do so by creating a separate chart for the manifests, creating a dependency on the controller chart.\n* The `aws.nodeNameConvention` setting is now removed from the [`karpenter-global-settings`]({{<ref \"../reference/settings#configmap\" >}}) ConfigMap. Because Karpenter is now driving its orchestration of capacity through Machines, it no longer needs to know the node name, making this setting obsolete. Karpenter ignores configuration that it doesn't recognize in the [`karpenter-global-settings`]({{<ref \"../reference/settings#configmap\" >}}) ConfigMap, so leaving the `aws.nodeNameConvention` in the ConfigMap will simply cause this setting to be ignored.\n* Karpenter now defines a set of \"restricted tags\" which can't be overridden with custom tagging in the AWSNodeTemplate or in the [`karpenter-global-settings`]({{<ref \"../reference/settings#configmap\" >}}) ConfigMap. If you are currently using any of these tag overrides when tagging your instances, webhook validation will now fail. These tags include:\n\n  * `karpenter.sh/managed-by`\n  * `karpenter.sh/provisioner-name`\n  * `kubernetes.io/cluster/${CLUSTER_NAME}`\n\n* The following metrics changed their meaning, based on the introduction of the Machine resource:\n  * `karpenter_nodes_terminated`: Use `karpenter_machines_terminated` if you are interested in the reason why a Karpenter machine was deleted. `karpenter_nodes_terminated` now only tracks the count of terminated nodes without any additional labels.\n  * `karpenter_nodes_created`: Use `karpenter_machines_created` if you are interested in the reason why a Karpenter machine was created. `karpenter_nodes_created` now only tracks the count of created nodes without any additional labels.\n  * `karpenter_deprovisioning_replacement_node_initialized_seconds`: This metric has been replaced in favor of `karpenter_deprovisioning_replacement_machine_initialized_seconds`.\n* `0.28.0` introduces the Machine CustomResource into the `karpenter.sh` API Group and requires this CustomResourceDefinition to run properly. Karpenter now orchestrates its CloudProvider capacity through these in-cluster Machine CustomResources. When performing a scheduling decision, Karpenter will create a Machine, resulting in launching CloudProvider capacity. The kubelet running on the new capacity will then register the node to the cluster shortly after launch.\n  * If you are using Helm to upgrade between versions of Karpenter, note that [Helm does not automate the process of upgrading or install the new CRDs into your cluster](https://helm.sh/docs/chart_best_practices/custom_resource_definitions/#some-caveats-and-explanations). To install or upgrade the existing CRDs, follow the guidance under the [Custom Resource Definition (CRD) Upgrades]({{< relref \"#custom-resource-definition-crd-upgrades\" >}}) section of the upgrade guide.\n  * Karpenter will hydrate Machines on startup for existing capacity managed by Karpenter into the cluster. Existing capacity launched by an older version of Karpenter is discovered by finding CloudProvider capacity with the `karpenter.sh/provisioner-name` tag or the `karpenter.sh/provisioner-name` label on nodes.\n* The metrics port for the Karpenter deployment was changed from 8080 to 8000. Users who scrape the pod directly for metrics rather than the service will need to adjust the commands they use to reference port 8000. Any users who scrape metrics from the service should be unaffected.\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter creates a mapping between CloudProvider machines and CustomResources in the cluster for capacity tracking. To ensure this mapping is consistent, Karpenter utilizes the following tag keys:\n\n* `karpenter.sh/managed-by`\n* `karpenter.sh/provisioner-name`\n* `kubernetes.io/cluster/${CLUSTER_NAME}`\n\nBecause Karpenter takes this dependency, any user that has the ability to Create/Delete these tags on CloudProvider machines will have the ability to orchestrate Karpenter to Create/Delete CloudProvider machines as a side effect. Check the [Threat Model]({{<ref \"../reference/threat-model.md#threat-using-ec2-createtagdeletetag-permissions-to-orchestrate-machine-creationdeletion\" >}}) to see how this might affect you, and ways to mitigate this.\n{{% /alert %}}\n\n{{% alert title=\"Rolling Back\" color=\"warning\" %}}\nIf, after upgrading to `0.28.0`+, a rollback to an older version of Karpenter needs to be performed, Karpenter will continue to function normally, though you will still have the Machine CustomResources on your cluster. You will need to manually delete the Machines and patch out the finalizers to fully complete the rollback.\n\nKarpenter marks CloudProvider capacity as \"managed by\" a Machine using the `karpenter-sh/managed-by` tag on the CloudProvider machine. It uses this tag to ensure that the Machine CustomResources in the cluster match the CloudProvider capacity managed by Karpenter. If these states don't match, Karpenter will garbage collect the capacity. Because of this, if performing an upgrade, followed by a rollback, followed by another upgrade to `0.28.0`+, ensure you remove the `karpenter.sh/managed-by` tags from existing capacity; otherwise, Karpenter will deprovision the capacity without a Machine CR counterpart.\n{{% /alert %}}\n\n### Upgrading to `0.27.3`+\n\n* The `defaulting.webhook.karpenter.sh` mutating webhook was removed in `0.27.3`. If you are coming from an older version of Karpenter where this webhook existed and the webhook was not managed by Helm, you may need to delete the stale webhook.\n\n```bash\nkubectl delete mutatingwebhookconfigurations defaulting.webhook.karpenter.sh\n```\n\n### Upgrading to `0.27.0`+\n\n* The Karpenter controller pods now deploy with `kubernetes.io/hostname` self anti-affinity by default. If you are running Karpenter in HA (high-availability) mode and you do not have enough nodes to match the number of pod replicas you are deploying with, you will need to scale-out your nodes for Karpenter.\n* The following controller metrics changed and moved under the `controller_runtime` metrics namespace:\n  * `karpenter_metricscraper_...`\n  * `karpenter_deprovisioning_...`\n  * `karpenter_provisioner_...`\n  * `karpenter_interruption_...`\n* The following controller metric names changed, affecting the `controller` label value under `controller_runtime_...` metrics. These metrics include:\n  * `podmetrics` -> `pod_metrics`\n  * `provisionermetrics` -> `provisioner_metrics`\n  * `metricscraper` -> `metric_scraper`\n  * `provisioning` -> `provisioner_trigger`\n  * `node-state` -> `node_state`\n  * `pod-state` -> `pod_state`\n  * `provisioner-state` -> `provisioner_state`\n* The `karpenter_allocation_controller_scheduling_duration_seconds` metric name changed to `karpenter_provisioner_scheduling_duration_seconds`\n\n### Upgrading to `0.26.0`+\n\n* 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]({{<ref \"../concepts/disruption#disabling-deprovisioning\" >}}) for more details.\n* 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.\n* 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.\n\n### Upgrading to `0.25.0`+\n\n* 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.\n\n### Upgrading to `0.24.0`+\n\n* Settings are no longer updated dynamically while Karpenter is running. If you manually make a change to the [`karpenter-global-settings`]({{<ref \"../reference/settings#configmap\" >}}) ConfigMap, you will need to reload the containers by restarting the deployment with `kubectl rollout restart -n karpenter deploy/karpenter`\n* 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]({{<ref \"../concepts/scheduling#selecting-nodes\" >}}). 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.\n* `aws.tags` in [`karpenter-global-settings`]({{<ref \"../reference/settings#configmap\" >}}) 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.<key>: value` in the ConfigMap.\n\n### Upgrading to `0.22.0`+\n\n* 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.\n\n### Upgrading to `0.20.0`+\n\n* Prior to `0.20.0`, Karpenter would prioritize certain instance type categories absent of any requirements in the Provisioner. `0.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.\n\n### Upgrading to `0.19.0`+\n\n* 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.\n* 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/disruption/#interruption\" >}}).\n* 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.\n* Karpenter CRD raw YAML URLs have migrated from `https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.19.3/charts/karpenter/crds/...` to `https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.19.3/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.\n* 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.\n* The following CLI options/environment variables are now removed and replaced in favor of pulling settings dynamically from the [`karpenter-global-settings`]({{<ref \"../reference/settings#configmap\" >}}) ConfigMap. See the [Settings docs]({{<ref \"../reference/settings/#environment-variables--cli-flags\" >}}) for more details on configuring the new values in the ConfigMap.\n\n  * `CLUSTER_NAME` -> `settings.aws.clusterName`\n  * `CLUSTER_ENDPOINT` -> `settings.aws.clusterEndpoint`\n  * `AWS_DEFAULT_INSTANCE_PROFILE` -> `settings.aws.defaultInstanceProfile`\n  * `AWS_ENABLE_POD_ENI` -> `settings.aws.enablePodENI`\n  * `AWS_ENI_LIMITED_POD_DENSITY` -> `settings.aws.enableENILimitedPodDensity`\n  * `AWS_ISOLATED_VPC` -> `settings.aws.isolatedVPC`\n  * `AWS_NODE_NAME_CONVENTION` -> `settings.aws.nodeNameConvention`\n  * `VM_MEMORY_OVERHEAD` -> `settings.aws.vmMemoryOverheadPercent`\n\n### Upgrading to `0.18.0`+\n\n* `0.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]({{<ref \"../reference/metrics\" >}}).\n\n### Upgrading to `0.17.0`+\n\nKarpenter'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/).\nWith 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-karpenter/#install-karpenter-helm-chart\" >}}).\n\nUsers who have scripted the installation or upgrading of Karpenter need to adjust their scripts with the following changes:\n1. There is no longer a need to add the Karpenter Helm repo with `helm repo add`\n2. The full URL of the Helm chart needs to be present when using the `helm` CLI\n3. 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  (i.e `v0.17.0`).\n\n### Upgrading to `0.16.2`+\n\n* `0.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:\n```bash\nkubectl replace -f https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.16.2/charts/karpenter/crds/karpenter.sh_provisioners.yaml\n```\n\n### Upgrading to `0.16.0`+\n\n* `0.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:\n```bash\nkubectl replace -f https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.16.0/charts/karpenter/crds/karpenter.sh_provisioners.yaml\n```\n\n### Upgrading to `0.15.0`+\n\n* `0.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:\n```bash\nkubectl replace -f https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.15.0/charts/karpenter/crds/karpenter.sh_provisioners.yaml\n```\n\n### Upgrading to `0.14.0`+\n\n* `0.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:\n\n```bash\nkubectl replace -f https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.14.0/charts/karpenter/crds/karpenter.sh_provisioners.yaml\n\nkubectl replace -f https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.14.0/charts/karpenter/crds/karpenter.k8s.aws_awsnodetemplates.yaml\n```\n\n* `0.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:\n\n```bash\n## Find launch templates that match the naming pattern and you do not want to keep\naws ec2 describe-launch-templates --filters=\"Name=launch-template-name,Values=Karpenter-${CLUSTER_NAME}-*\"\n\n## Delete launch template(s) that match the name but do not have the \"karpenter.k8s.aws/cluster\" tag\naws ec2 delete-launch-template --launch-template-id <LAUNCH_TEMPLATE_ID>\n```\n\n* `0.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.\n```yaml\n  - key: node.kubernetes.io/instance-type\n    operator: Exists\n```\n\n* `0.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]({{<ref \"../concepts/nodepools#spec-amiselector\" >}}) to get started\n* `0.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`.\n\n* `0.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.\n\n### Upgrading to `0.13.0`+\n\n* `0.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. `0.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.\n\n  If you are upgrading from `0.10.1` - `0.11.1`, a new CRD `awsnodetemplate` was added. In `0.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:\n  1. Make sure any `awsnodetemplate` manifests are saved somewhere so that they can be reapplied to the cluster.\n  2. `kubectl delete crd awsnodetemplate`\n  3. `kubectl apply -f https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.13.2/charts/karpenter/crds/karpenter.k8s.aws_awsnodetemplates.yaml`\n  4. Perform the Karpenter upgrade to `0.13.0`+, which will install the new `awsnodetemplates` CRD.\n  5. Reapply the `awsnodetemplate` manifests you saved from step 1, if applicable.\n* `0.13.0` also adds EC2/spot price fetching to Karpenter to allow making more accurate decisions regarding node deployments.  Our [getting started guide]({{< ref \"../getting-started/getting-started-with-karpenter\" >}}) 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.\n\n### Upgrading to `0.12.0`+\n\n* `0.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.\n* If you are upgrading from `0.10.1` - `0.11.1`, a new CRD `awsnodetemplate` was added. In `0.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:\n  1. Make sure any `awsnodetemplate` manifests are saved somewhere so that they can be reapplied to the cluster.\n  2. `kubectl delete crd awsnodetemplate`\n  3. `kubectl apply -f https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.12.1/charts/karpenter/crds/karpenter.k8s.aws_awsnodetemplates.yaml`\n  4. Perform the Karpenter upgrade to `0.12.0`+, which will install the new `awsnodetemplates` CRD.\n  5. Reapply the `awsnodetemplate` manifests you saved from step 1, if applicable.\n\n### Upgrading to `0.11.0`+\n\n`0.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`.\n\nOther 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.\n\n`0.11.0` adds a `providerRef` field in the Provisioner CRD. To use this new field you will need to replace the Provisioner CRD manually:\n\n```shell\nkubectl replace -f https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.11.0/charts/karpenter/crds/karpenter.sh_provisioners.yaml\n```\n\n### Upgrading to `0.10.0`+\n\n`0.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:\n\n```shell\nkubectl replace -f https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.10.0/charts/karpenter/crds/karpenter.sh_provisioners.yaml\n```\n\n📝 If you don't perform this manual CRD update, Karpenter will work correctly except for rejecting the creation/update of provisioners that use `startupTaints`.\n\n### Upgrading to `0.6.2`+\n\nIf using Helm, the variable names have changed for the cluster's name and endpoint. You may need to update any configuration\nthat sets the old variable names.\n\n- `controller.clusterName` is now `clusterName`\n- `controller.clusterEndpoint` is now `clusterEndpoint`\n"
  },
  {
    "path": "website/content/en/v1.8/_index.md",
    "content": "---\ntitle: \"Documentation\"\nlinkTitle: \"Docs\"\nweight: 20\ncascade:\n  type: docs\n  tags:\n    - preview\n---\nKarpenter is an open-source node lifecycle management project built for Kubernetes.\nAdding Karpenter to a Kubernetes cluster can dramatically improve the efficiency and cost of running workloads on that cluster.\nKarpenter works by:\n\n* **Watching** for pods that the Kubernetes scheduler has marked as unschedulable\n* **Evaluating** scheduling constraints (resource requests, nodeselectors, affinities, tolerations, and topology spread constraints) requested by the pods\n* **Provisioning** nodes that meet the requirements of the pods\n* **Disrupting** the nodes when the nodes are no longer needed\n\nAs someone using Karpenter, once your Kubernetes cluster and the Karpenter controller are up and running (see [Getting Started]({{<ref \"./getting-started\" >}})), you can:\n\n* **Set up NodePools**: By applying a NodePool to Karpenter, you can configure constraints on node provisioning and set values for node expiry, node consolidation, or Kubelet configuration values.\n  NodePool-level constraints related to Kubernetes and your cloud provider (AWS, for example) include:\n\n  - 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.\n  - Labels (`labels`): Apply arbitrary key-value pairs to nodes that can be matched by pods.\n  - Requirements (`requirements`): Set acceptable (`In`) and unacceptable (`NotIn`) Kubernetes and Karpenter values for node provisioning based on [Well-Known Labels](https://kubernetes.io/docs/reference/labels-annotations-taints/) and [cloud-specific settings]({{<ref \"./concepts/nodeclasses\" >}}). 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]({{<ref \"./concepts/nodepools/#capacity-type\" >}}) (such as AWS spot or on-demand).\n  - 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.\n\n* **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:\n\n  - 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.\n  - 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.\n  - 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.\n  - 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.\n  - 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.\n  - 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.\n  - 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.\n\nLearn more about Karpenter and how to get started below.\n"
  },
  {
    "path": "website/content/en/v1.8/concepts/_index.md",
    "content": "---\ntitle: \"Concepts\"\nlinkTitle: \"Concepts\"\nweight: 20\ndescription: >\n  Understand key concepts of Karpenter\n---\n\nUsers fall under two basic roles: [Kubernetes cluster administrators]({{<ref \"#cluster-administrator\" >}}) and [application developers]({{<ref \"#application-developer\" >}}). This document describes Karpenter concepts through the lens of those two types of users.\n\n## Cluster Administrator\n\nAs a Kubernetes cluster administrator, you can engage with Karpenter to:\n\n* Install Karpenter\n* Configure NodePools to set constraints and other features for managing nodes\n* Disrupting nodes\n\nConcepts associated with this role are described below.\n\n\n### Installing Karpenter\n\nKarpenter 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.\n\n[Getting Started with Karpenter]({{<ref \"../getting-started/getting-started-with-karpenter\" >}}) describes the process of installing Karpenter. 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.\n\nOnce privileges are in place, Karpenter is deployed with a Helm chart.\n\n### Configuring NodePools\n\nKarpenter'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 [NodePools]({{<ref \"nodepools\" >}}) that define how Karpenter manages unschedulable pods and configures nodes. You will also define behaviors for your NodePools, capturing details like how Karpenter handles disruption of nodes and setting limits and weights for each NodePool.\n\nHere are some things to know about Karpenter's NodePools:\n\n* **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.\n\n* [**Defining Constraints**]({{<ref \"nodepools\" >}}): Karpenter defines a Custom Resource called a NodePool to specify configuration. Each NodePool manages a distinct set of nodes, but pods can be scheduled to any NodePool that supports its scheduling constraints. A NodePool defines constraints that determine which nodes can be provisioned and specifies the attributes these nodes will have. See the [NodePools Documentation]({{<ref \"nodepools\" >}}) docs for a description of configuration and NodePool examples.\n\n* [**Defining Disruption**]({{<ref \"disruption\" >}}): A NodePool can also include values to indicate when nodes should be disrupted. This includes configuration around concepts like [Consolidation]({{<ref \"disruption#consolidation\" >}}), [Drift]({{<ref \"disruption#drift\" >}}), and [Expiration]({{<ref \"disruption#automated-methods\" >}}).\n\n* **Well-known labels**: The NodePool 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.\n\n* **Multiple NodePools**: Multiple NodePools 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.\n\nAlthough most use cases are addressed with a single NodePool for multiple teams, multiple NodePools are useful to isolate nodes for billing, use different node constraints (such as no GPUs for a team), or use different disruption settings.\n\n### Disrupting nodes\n\nKarpenter deletes nodes when they are no longer needed.\n\n* [**Finalizer**]({{<ref \"disruption#manual-methods\" >}}): Karpenter places a finalizer bit on each node it creates.\nWhen 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.\nKarpenter handles all clean-up work needed to properly delete the node.\n* [**Expiration**]({{<ref \"disruption\" >}}): Karpenter will mark nodes as expired and disrupt them after they have lived a set number of seconds, based on the NodePool's `spec.template.spec.expireAfter` value. You can use node expiry to periodically recycle nodes due to security concerns.\n* [**Consolidation**]({{<ref \"disruption#consolidation\" >}}): Karpenter works to actively reduce cluster cost by identifying when:\n  * Nodes can be removed because the node is empty\n  * Nodes can be removed as their workloads will run on other nodes in the cluster.\n  * Nodes can be replaced with cheaper variants due to a change in the workloads.\n* [**Drift**]({{<ref \"disruption#drift\" >}}): Karpenter will mark nodes as drifted and disrupt nodes that have drifted from their desired specification. See [Drift]({{<ref \"#drift\" >}}) to see which fields are considered.\n* [**Interruption**]({{<ref \"disruption#interruption\" >}}): Karpenter will watch for upcoming 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.\n\nFor more details on how Karpenter deletes nodes, see the [Disruption Documentation]({{<ref \"disruption\" >}}).\n\n### Scheduling\n\nKarpenter 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.\n\nOnce Karpenter brings up a node, that node is available for the Kubernetes scheduler to schedule pods on it as well.\n\n#### Constraints\n\nThe concept of layered constraints is key to using Karpenter. With no constraints defined in NodePools 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.\n\nAn application developer can tighten the constraints defined in a NodePool 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.\n\n### Cloud Provider\n\nKarpenter 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.\n\nWhile using Kubernetes well-known labels, the NodePool can set some values that are specific to the cloud provider. 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`).\n\n### Kubernetes Cluster Autoscaler\n\nLike 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:\n\n* **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.\n\n* **Quick 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.\n\n## Application Developer\n\nAs 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).\n\nLayered *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).\nThe 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.\n\nThe 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.\n\nAs long as the requests are not outside the NodePool'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.\n\nSo, what constraints can you use as an application developer deploying pods that could be managed by Karpenter?\n\nKubernetes features that Karpenter supports for scheduling pods include nodeAffinity and [nodeSelector](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#nodeselector).\nIt 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).\n\nFrom 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:\n\n* **kubernetes.io/arch**: For example, kubernetes.io/arch=amd64\n* **node.kubernetes.io/instance-type**: For example, node.kubernetes.io/instance-type=m3.medium\n* **topology.kubernetes.io/zone**: For example, topology.kubernetes.io/zone=us-east-1c\n\nFor more on how, as a developer, you can add constraints to your pod deployment, see [Scheduling](./scheduling/) for details.\n"
  },
  {
    "path": "website/content/en/v1.8/concepts/disruption.md",
    "content": "---\ntitle: \"Disruption\"\nlinkTitle: \"Disruption\"\nweight: 50\ndescription: >\n  Understand different ways Karpenter disrupts nodes\n---\n\n## Control Flow\n\nKarpenter sets a Kubernetes [finalizer](https://kubernetes.io/docs/concepts/overview/working-with-objects/finalizers/) on each node and node claim it provisions.\nThe finalizer blocks deletion of the node object while the Termination Controller taints and drains the node, before removing the underlying NodeClaim. Disruption is triggered by the Disruption Controller, by the user through manual disruption, or through an external system that sends a delete request to the node object.\n\n### Disruption Controller\n\nKarpenter automatically discovers disruptable nodes and spins up replacements when needed. Karpenter disrupts nodes by executing one [automated method](#automated-graceful-methods) at a time, first doing Drift then Consolidation. Each method varies slightly, but they all follow the standard disruption process. Karpenter uses [disruption budgets]({{<ref \"#nodepool-disruption-budgets\" >}}) to control the speed at which these disruptions begin.\n1. Identify a list of prioritized candidates for the disruption method.\n   * If there are [pods that cannot be evicted](#pod-level-controls) on the node, Karpenter will ignore the node and try disrupting it later.\n   * If there are no disruptable nodes, continue to the next disruption method.\n2. For each disruptable node:\n   1. Check if disrupting it would violate its NodePool's disruption budget.\n   2. Execute a scheduling simulation with the pods on the node to find if any replacement nodes are needed.\n3. Add the `karpenter.sh/disrupted:NoSchedule` taint to the node(s) to prevent pods from scheduling to it.\n4. Pre-spin any replacement nodes needed as calculated in Step (2), and wait for them to become ready.\n   * If a replacement node fails to initialize, un-taint the node(s), and restart from Step (1), starting at the first disruption method again.\n5. Delete the node(s) and wait for the Termination Controller to gracefully shutdown the node(s).\n6. Once the Termination Controller terminates the node, go back to Step (1), starting at the first disruption method again.\n\n### Termination Controller\n\nWhen a Karpenter node is deleted, the Karpenter finalizer will block deletion and the APIServer will set the `DeletionTimestamp` on the node, allowing Karpenter to gracefully shutdown the node, modeled after [Kubernetes Graceful Node Shutdown](https://kubernetes.io/docs/concepts/cluster-administration/node-shutdown/#graceful-node-shutdown). Karpenter's graceful shutdown process will:\n1. Add the `karpenter.sh/disrupted:NoSchedule` taint to the node to prevent pods from scheduling to it.\n2. Begin evicting the pods on the node with the [Kubernetes Eviction API](https://kubernetes.io/docs/concepts/scheduling-eviction/api-eviction/) to respect PDBs, while ignoring all [static pods](https://kubernetes.io/docs/tasks/configure-pod-container/static-pod/), pods tolerating the `karpenter.sh/disrupted:NoSchedule` taint, and succeeded/failed pods. Wait for the node to be fully drained before proceeding to Step (3).\n   * While waiting, if the underlying NodeClaim for the node no longer exists, remove the finalizer to allow the APIServer to delete the node, completing termination.\n3. Verify that all [VolumeAttachment](https://kubernetes.io/docs/reference/kubernetes-api/config-and-storage-resources/volume-attachment-v1/) resources for drain-able pods are deleted.\n4. Terminate the NodeClaim in the Cloud Provider.\n5. Remove the finalizer from the node to allow the APIServer to delete the node, completing termination.\n\n## Manual Methods\n* **Node Deletion**: You can use `kubectl` to manually remove a single Karpenter node or nodeclaim. Since each Karpenter node is owned by a NodeClaim, deleting either the node or the nodeclaim will cause cascade deletion of the other:\n\n    ```bash\n    # Delete a specific nodeclaim\n    kubectl delete nodeclaim $NODECLAIM_NAME\n\n    # Delete a specific node\n    kubectl delete node $NODE_NAME\n\n    # Delete all nodeclaims\n    kubectl delete nodeclaims --all\n\n    # Delete all nodes owned by any nodepool\n    kubectl delete nodes -l karpenter.sh/nodepool\n\n    # Delete all nodeclaims owned by a specific nodepoolXS\n    kubectl delete nodeclaims -l karpenter.sh/nodepool=$NODEPOOL_NAME\n    ```\n* **NodePool Deletion**: NodeClaims are owned by the NodePool through an [owner reference](https://kubernetes.io/docs/concepts/overview/working-with-objects/owners-dependents/#owner-references-in-object-specifications) that launched them. Karpenter will gracefully terminate nodes through cascading deletion when the owning NodePool is deleted.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nBy adding the finalizer, Karpenter improves the default Kubernetes process of node deletion.\nWhen 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.\n{{% /alert %}}\n\n## Automated Graceful Methods\n\nAutomated graceful methods, can be rate limited through [NodePool Disruption Budgets]({{<ref \"#nodepool-disruption-budgets\" >}})\n\n* [**Consolidation**]({{<ref \"#consolidation\" >}}): Karpenter works to actively reduce cluster cost by identifying when:\n  * Nodes can be removed because the node is empty\n  * Nodes can be removed as their workloads will run on other nodes in the cluster.\n  * Nodes can be replaced with lower priced variants due to a change in the workloads.\n* [**Drift**]({{<ref \"#drift\" >}}): Karpenter will mark nodes as drifted and disrupt nodes that have drifted from their desired specification. See [Drift]({{<ref \"#drift\" >}}) to see which fields are considered.\n\n{{% alert title=\"Defaults\" color=\"secondary\" %}}\nDisruption is configured through the NodePool's disruption block by the `consolidationPolicy`, and `consolidateAfter` fields. Karpenter will configure these fields with the following values by default if they are not set:\n\n```yaml\nspec:\n  disruption:\n    consolidationPolicy: WhenEmptyOrUnderutilized\n    consolidateAfter: 0s\n```\n{{% /alert %}}\n\n### Consolidation\n\nConsolidation is configured by `consolidationPolicy` and `consolidateAfter`. `consolidationPolicy` determines the pre-conditions for nodes to be considered consolidatable, and are `WhenEmpty` or `WhenEmptyOrUnderutilized`. If a node has no running non-daemon pods, it is considered empty.  `consolidateAfter` can be set to indicate how long Karpenter should wait after a pod schedules or is removed from the node before considering the node consolidatable. With `WhenEmptyOrUnderutilized`, Karpenter will consider a node consolidatable when its `consolidateAfter` has been reached, empty or not.\n\nKarpenter has two mechanisms for cluster consolidation:\n1. **Deletion** - A node is eligible for deletion if all of its pods can run on free capacity of other nodes in the cluster.\n2. **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 lower price replacement node.\n\nConsolidation has three mechanisms that are performed in order to attempt to identify a consolidation action:\n1. **Empty Node Consolidation** - Delete any entirely empty nodes in parallel\n2. **Multi Node Consolidation** - Try to delete two or more nodes in parallel, possibly launching a single replacement whose price is lower than that of all nodes being removed\n3. **Single Node Consolidation** - Try to delete any single node, possibly launching a single replacement whose price is lower than that of the node being removed\n\nIt'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.\n\nWhen there are multiple nodes that could be potentially deleted or replaced, Karpenter chooses to consolidate the node that overall disrupts your workloads the least by preferring to terminate:\n\n* Nodes running fewer pods\n* Nodes that will expire soon\n* Nodes with lower priority pods\n\nIf 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.\n\n```bash\nEvents:\n  Type     Reason                   Age                From             Message\n  ----     ------                   ----               ----             -------\n  Normal   Unconsolidatable         66s                karpenter        pdb default/inflate-pdb prevents pod evictions\n  Normal   Unconsolidatable         33s (x3 over 30m)  karpenter        can't replace with a lower-priced node\n```\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nUsing 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 disrupt 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`).\n{{% /alert %}}\n\n#### Spot consolidation\nFor spot nodes, Karpenter has deletion consolidation enabled by default. If you would like to enable replacement with spot consolidation, you need to enable the feature through the [`SpotToSpotConsolidation` feature flag]({{<ref \"../reference/settings#features-gates\" >}}).\n\nLower priced spot instance types are selected with the [`price-capacity-optimized` strategy](https://aws.amazon.com/blogs/compute/introducing-price-capacity-optimized-allocation-strategy-for-ec2-spot-instances/). Sometimes, the lowest priced spot instance type is not launched due to the likelihood of interruption. As a result, Karpenter uses the number of available instance type options with a price lower than the currently launched spot instance as a heuristic for evaluating whether it should launch a replacement for the current spot node.\n\nWe refer to the number of instances that Karpenter has within its launch decision as a launch's \"instance type flexibility.\" When Karpenter is considering performing a spot-to-spot consolidation replacement, it will check whether replacing the instance type will lead to enough instance type flexibility in the subsequent launch request. As a result, we get the following properties when evaluating for consolidation:\n1) We shouldn't continually consolidate down to the lowest priced spot instance which might have very high rates of interruption.\n2) We launch with enough instance types that there’s high likelihood that our replacement instance has comparable availability to our current one.\n\nKarpenter requires a minimum instance type flexibility of 15 instance types when performing single node spot-to-spot consolidations (1 node to 1 node). It does not have the same instance type flexibility requirement for multi-node spot-to-spot consolidations (many nodes to 1 node) since doing so without requiring flexibility won't lead to \"race to the bottom\" scenarios.\n\n\n### Drift\nDrift handles changes to the NodePool/EC2NodeClass. For Drift, values in the NodePool/EC2NodeClass are reflected in the NodeClaimTemplateSpec/EC2NodeClassSpec in the same way that they’re set. A NodeClaim will be detected as drifted if the values in its owning NodePool/EC2NodeClass do not match the values in the NodeClaim. Similar to the upstream `deployment.spec.template` relationship to pods, Karpenter will annotate the owning NodePool and EC2NodeClass with a hash of the NodeClaimTemplateSpec to check for drift. Some special cases will be discovered either from Karpenter or through the CloudProvider interface, triggered by NodeClaim/Instance/NodePool/EC2NodeClass changes.\n\n#### Special Cases on Drift\nIn special cases, drift can correspond to multiple values and must be handled differently. Drift on resolved fields can create cases where drift occurs without changes to CRDs, or where CRD changes do not result in drift. For example, if a NodeClaim has `node.kubernetes.io/instance-type: m5.large`, and requirements change from `node.kubernetes.io/instance-type In [m5.large]` to `node.kubernetes.io/instance-type In [m5.large, m5.2xlarge]`, the NodeClaim will not be drifted because its value is still compatible with the new requirements. Conversely, if a NodeClaim is using a NodeClaim image `ami: ami-abc`, but a new image is published, Karpenter's `EC2NodeClass.spec.amiSelectorTerms` will discover that the new correct value is `ami: ami-xyz`, and detect the NodeClaim as drifted.\n\n##### NodePool\n| Fields         |\n|----------------|\n| spec.template.spec.requirements   |\n\n##### EC2NodeClass\n| Fields                        |\n|-------------------------------|\n| spec.subnetSelectorTerms      |\n| spec.securityGroupSelectorTerms  |\n| spec.amiSelectorTerms  |\n\n#### Behavioral Fields\nBehavioral Fields are treated as over-arching settings on the NodePool to dictate how Karpenter behaves. These fields don’t correspond to settings on the NodeClaim or instance. They’re set by the user to control Karpenter’s Provisioning and disruption logic. Since these don’t map to a desired state of NodeClaims, __behavioral fields are not considered for Drift__.\n\n##### NodePool\n| Fields              |\n|---------------------|\n| spec.weight         |\n| spec.limits         |\n| spec.disruption.*   |\n\nRead the [Drift Design](https://github.com/aws/karpenter-core/blob/main/designs/drift.md) for more.\n\n\nKarpenter will add the `Drifted` status condition on NodeClaims if the NodeClaim is drifted from its owning NodePool. Karpenter will also remove the `Drifted` status condition if either:\n1. The `Drift` feature gate is not enabled but the NodeClaim is drifted, Karpenter will remove the status condition.\n2. The NodeClaim isn't drifted, but has the status condition, Karpenter will remove it.\n\n## Automated Forceful Methods\n\nAutomated forceful methods will begin draining nodes as soon as the condition is met.\nUnlike the graceful methods mentioned above, these methods can not be rate-limited using [NodePool Disruption Budgets](#nodepool-disruption-budgets), and do not wait for a pre-spin replacement node to be healthy for the pods to reschedule.\nPod disruption budgets may be used to rate-limit application disruption.\n\n### Expiration\n\nExpiration is a forceful disruption method that begins draining a node immediately once its lifetime exceeds the duration set on the owning NodeClaim's `spec.expireAfter` field.\nChanges to `spec.template.spec.expireAfter` on the owning NodePool will not update the field for existing NodeClaims - it will induce NodeClaim drift and the replacements will have the updated value.\nExpiration can be used, in conjunction with [`terminationGracePeriod`](#terminationgraceperiod), to enforce a maximum Node lifetime.\nBy default, `expireAfter` is set to `720h` (30 days).\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nThe `expireAfter` field defines the **maximum** node lifetime (upper bound), not a guaranteed minimum.\nNodes can be disrupted earlier than the `expireAfter` duration by other disruption methods such as [Drift]({{<ref \"#drift\" >}}), [Consolidation]({{<ref \"#consolidation\" >}}), or [Emptiness]({{<ref \"#consolidation\" >}}) if their [disruption budgets]({{<ref \"#nodepool-disruption-budgets\" >}}) allow.\nFor example, a NodePool with `expireAfter: 720h` (30 days) can still have nodes terminated earlier if the node becomes drifted due to an AMI update and the disruption budget permits drift-based disruptions.\n\nTo enforce a true maximum node lifetime that cannot be shortened by other disruption methods, use `expireAfter` in combination with carefully configured disruption budgets that limit or prevent other disruption reasons.\n{{% /alert %}}\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nMisconfigured PDBs and pods with the `karpenter.sh/do-not-disrupt` annotation may block draining indefinitely.\nFor this reason, it is not recommended to set `expireAfter` without also setting `terminationGracePeriod` **if** your cluster has pods with the `karpenter.sh/do-not-disrupt` annotation.\nDoing so can result in partially drained nodes stuck in the cluster, driving up cluster cost and potentially requiring manual intervention to resolve.\n{{% /alert %}}\n\n### Interruption\n\nIf interruption-handling is enabled, Karpenter will watch for upcoming involuntary interruption events that would cause disruption to your workloads. These interruption events include:\n\n* Spot Interruption Warnings\n* Scheduled Change Health Events (Maintenance Events)\n* Instance Terminating Events\n* Instance Stopping Events\n\nWhen Karpenter detects one of these events will occur to your nodes, it automatically taints, 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.\n\nFor Spot interruptions, the NodePool will start a new node as soon as it sees the Spot interruption warning. Spot interruptions have a __2 minute notice__ before Amazon EC2 reclaims the instance. Once Karpenter has received this warning it will begin draining the node while in parallel provisioning a new node. Karpenter's average node startup time means that, generally, there is sufficient time for the new node to become ready before EC2 initiates termination for the spot instance.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nKarpenter publishes Kubernetes events to the node for all events listed above in addition to [__Spot Rebalance Recommendations__](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/rebalance-recommendations.html). Karpenter does not currently support taint, drain, and terminate logic for Spot Rebalance Recommendations.\n\nIf you require handling for Spot Rebalance Recommendations, you can use the [AWS Node Termination Handler (NTH)](https://github.com/aws/aws-node-termination-handler) alongside Karpenter; however, note that the AWS Node Termination Handler cordons and drains nodes on rebalance recommendations, potentially causing more node churn in the cluster than with interruptions alone. Further information can be found in the [Troubleshooting Guide]({{< ref \"../troubleshooting#aws-node-termination-handler-nth-interactions\" >}}).\n{{% /alert %}}\n\nKarpenter 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-karpenter/#create-the-karpenter-infrastructure-and-iam-roles).\n\nTo enable interruption handling, configure the `--interruption-queue` CLI argument with the name of the interruption queue provisioned to handle interruption events.\n\n### Node Auto Repair\n\n<i class=\"fa-solid fa-circle-info\"></i> <b>Feature State: </b> Karpenter v1.1.0 [alpha]({{<ref \"../reference/settings#feature-gates\" >}})\n\nNode Auto Repair is a feature that automatically identifies and replaces unhealthy nodes in your cluster, helping to maintain overall cluster health. Nodes can experience various types of failures affecting their hardware, file systems, or container environments. These failures may be surfaced through node conditions such as network unavailability, disk pressure, memory pressure, or other conditions reported by node diagnostic agents. When Karpenter detects these unhealthy conditions, it automatically replaces the affected nodes based on cloud provider-defined repair policies. Once a node has been in an unhealthy state beyond its configured toleration duration, Karpenter will forcefully terminate the node and its corresponding NodeClaim, bypassing the standard drain and grace period procedures to ensure swift replacement of problematic nodes. To prevent cascading failures, Karpenter includes safety mechanisms: it will not perform repairs if more than 20% of nodes in a NodePool are unhealthy, and for standalone NodeClaims, it evaluates this threshold against all nodes in the cluster. This ensures your cluster remains in a healthy state with minimal manual intervention, even in scenarios where normal node termination procedures might be impacted by the node's unhealthy state.\n\nTo enable Node Auto Repair:\n  1.  Ensure you have a [Node Monitoring Agent](https://docs.aws.amazon.com/en_us/eks/latest/userguide/node-health.html) deployed or any agent that will add status conditions to nodes that are supported (e.g., Node Problem Detector)\n  2.  Enable the feature flag: `NodeRepair=true`\n  3. Node AutoRepair will automatically terminate nodes when they have unhealthy status conditions based on your cloud provider's repair policies\n\n\nKarpenter monitors nodes for the following node status conditions when initiating repair actions:\n\n\n#### Kubelet Node Conditions\n\n|   Type  |    Status     | Toleration Duration |\n| ------  | ------------- | ------------------- |\n|  Ready  |     False     |     30 minutes      |\n|  Ready  |     Unknown   |     30 minutes      |\n\n#### Node Monitoring Agent Conditions\n\n|            Type            |    Status     | Toleration Duration |\n| ------------------------   | ------------| --------------------- |\n|  AcceleratedHardwareReady  |     False   |     10 minutes        |\n|  StorageReady              |     False   |     30 minutes        |\n|  NetworkingReady           |     False   |     30 minutes        |\n|  KernelReady               |     False   |     30 minutes        |\n|  ContainerRuntimeReady     |     False   |     30 minutes        |\n\nTo enable the NodeRepair feature flag, refer to the [Feature Gates]({{<ref \"../reference/settings#feature-gates\" >}}).\n\n## Controls\n\n### TerminationGracePeriod\n\nTo configure a maximum termination duration, `terminationGracePeriod` should be used.\nIt is configured through a NodePool's [`spec.template.spec.terminationGracePeriod`]({{<ref \"../concepts/nodepools/#spectemplatespecterminationgraceperiod\" >}}) field, and is persisted to created NodeClaims (`spec.terminationGracePeriod`).\nChanges to the [`spec.template.spec.terminationGracePeriod`]({{<ref \"../concepts/nodepools/#spectemplatespecterminationgraceperiod\" >}}) field on the NodePool will not result in a change for existing NodeClaims - it will induce NodeClaim drift and the replacements will have the updated `terminationGracePeriod`.\n\nOnce a node is disrupted, via either a [graceful](#automated-graceful-methods) or [forceful](#automated-forceful-methods) disruption method, Karpenter will begin draining the node.\nAt this point, the countdown for `terminationGracePeriod` begins.\nOnce the `terminationGracePeriod` elapses, remaining pods will be forcibly deleted and the underlying instance will be terminated.\nA node may be terminated before the `terminationGracePeriod` has elapsed if all disruptable pods have been drained.\n\nIn conjunction with `expireAfter`, `terminationGracePeriod` can be used to enforce an absolute maximum node lifetime.\nThe node will begin to drain once its `expireAfter` has elapsed, and it will be forcibly terminated once its `terminationGracePeriod` has elapsed, making the maximum node lifetime the sum of the two fields.\n\nAdditionally, configuring `terminationGracePeriod` changes the eligibility criteria for disruption via `Drift`.\nWhen configured, a node may be disrupted via drift even if there are pods with blocking PDBs or the `karpenter.sh/do-not-disrupt` annotation scheduled to it.\nThis enables cluster administrators to ensure crucial updates (e.g. AMI updates addressing CVEs) can't be blocked by misconfigured applications.\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nTo ensure that the `terminationGracePeriodSeconds` value for draining pods is respected, pods will be preemptively deleted before the Node's `terminationGracePeriod` has elapsed.\nThis includes pods with blocking [pod disruption budgets](https://kubernetes.io/docs/tasks/run-application/configure-pdb/) or the [`karpenter.sh/do-not-disrupt` annotation]({{<ref \"#pod-level-controls\" >}}).\n\nConsider the following example: a Node with a 1 hour `terminationGracePeriod` has been disrupted and begins to drain.\nA pod with the `karpenter.sh/do-not-disrupt` annotation and a 300 second (5 minute) `terminationGracePeriodsSeconds` is scheduled to it.\nIf the pod is still running 55 minutes after the Node begins to drain, the pod will be deleted to ensure its `terminationGracePeriodSeconds` value is respected.\n\nIf a pod's `terminationGracePeriodSeconds` value exceeds that of the Node it is scheduled to, Karpenter will prioritize the Node's `terminationGracePeriod`.\nThe pod will be deleted as soon as the Node begins to drain, and it will not receive it's full `terminationGracePeriodSeconds`.\n{{% /alert %}}\n\n### NodePool Disruption Budgets\n\nYou can rate limit Karpenter's disruption through the NodePool's `spec.disruption.budgets`. If undefined, Karpenter will default to one budget with `nodes: 10%`. Budgets will consider nodes that are actively being deleted for any reason, and will only block Karpenter from disrupting nodes voluntarily through drift, emptiness, and consolidation. Note that NodePool Disruption Budgets do not prevent Karpenter from terminating expired nodes.\n\n#### Reasons\nKarpenter allows specifying if a budget applies to any of `Drifted`, `Underutilized`, or `Empty`. When a budget has no reasons, it's assumed that it applies to all reasons. When calculating allowed disruptions for a given reason, Karpenter will take the minimum of the budgets that have listed the reason or have left reasons undefined.\n\n#### Nodes\nWhen calculating if a budget will block nodes from disruption, Karpenter lists the total number of nodes owned by a NodePool, subtracting out the nodes owned by that NodePool that are currently being deleted and nodes that are NotReady. If the number of nodes being deleted by Karpenter or any other processes is greater than the number of allowed disruptions, disruption for this node will not proceed.\n\nIf the budget is configured with a percentage value, such as `20%`, Karpenter will calculate the number of allowed disruptions as `allowed_disruptions = roundup(total * percentage) - total_deleting - total_notready`. If otherwise defined as a non-percentage value, Karpenter will simply use that number as a static ceiling `non_percentage_value - total_deleting - total_notready`. For multiple budgets in a NodePool, Karpenter will take the minimum value (most restrictive) of each of the budgets.\n\nFor example, the following NodePool with three budgets defines the following requirements:\n- The first budget will only allow 20% of nodes owned by that NodePool to be disrupted if it's empty or drifted. For instance, if there were 19 nodes owned by the NodePool, 4 empty or drifted nodes could be disrupted, rounding up from `19 * .2 = 3.8`.\n- The second budget acts as a ceiling to the previous budget, only allowing 5 disruptions when there are more than 25 nodes.\n- The last budget only blocks disruptions during the first 10 minutes of the day, where 0 disruptions are allowed, only applying to underutilized nodes.\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\nspec:\n  disruption:\n    consolidationPolicy: WhenEmptyOrUnderutilized\n    budgets:\n    - nodes: \"20%\"\n      reasons:\n      - \"Empty\"\n      - \"Drifted\"\n    - nodes: \"5\"\n    - nodes: \"0\"\n      schedule: \"@daily\"\n      duration: 10m\n      reasons:\n      - \"Underutilized\"\n```\n\n#### Schedule\nSchedule is a cronjob schedule. Generally, the cron syntax is five space-delimited values with options below, with additional special macros like `@yearly`, `@monthly`, `@weekly`, `@daily`, `@hourly`.\nFollow the [Kubernetes documentation](https://kubernetes.io/docs/concepts/workloads/controllers/cron-jobs/#writing-a-cronjob-spec) for more information on how to follow the cron syntax. Timezones are not currently supported. Schedules are always in UTC.\n\n```bash\n# ┌───────────── minute (0 - 59)\n# │ ┌───────────── hour (0 - 23)\n# │ │ ┌───────────── day of the month (1 - 31)\n# │ │ │ ┌───────────── month (1 - 12)\n# │ │ │ │ ┌───────────── day of the week (0 - 6) (Sunday to Saturday;\n# │ │ │ │ │                                   7 is also Sunday on some systems)\n# │ │ │ │ │                                   OR sun, mon, tue, wed, thu, fri, sat\n# │ │ │ │ │\n# * * * * *\n```\n\n#### Duration\nDuration allows compound durations with minutes and hours values such as `10h5m` or `30m` or `160h`. Since cron syntax does not accept denominations smaller than minutes, users can only define minutes or hours.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nDuration and Schedule must be defined together. When omitted, the budget is always active. When defined, the schedule determines a starting point where the budget will begin being enforced, and the duration determines how long from that starting point the budget will be enforced.\n{{% /alert %}}\n\n### Pod-Level Controls\n\nPods with blocking PDBs will not be evicted by the [Termination Controller]({{<ref \"#termination-controller\">}}) or be considered for voluntary disruption actions. When multiple pods on a node have different PDBs, none of the PDBs may be blocking for Karpenter to voluntary disrupt a node. This can create complex eviction scenarios:\n  - If a pod matches multiple PDBs (via label selectors), ALL of these PDBs must allow for disruption\n  - When different pods on the same node belong to different PDBs, ALL PDBs must simultaneously permit eviction\n  - A single blocking PDB can prevent the entire node from being voluntary disrupted\n\nFor example, consider a node with these pods and PDBs:\n- Pod A: Matches PDB-1 (maxUnavailable: 0) and PDB-2 (maxUnavailable: 1)\n- Pod B: Matches PDB-3 (minAvailable: 100%)\n- Pod C: No PDB\n\nIn this scenario, Karpenter cannot voluntary disrupt the node because:\n1. Pod A is blocked by PDB-1 even though PDB-2 would allow disruption\n2. Pod B is blocked by PDB-3's requirement for 100% availability\n\nAs seen in this example, the more PDBs there are affecting a Node, the more difficult it will be for Karpenter to find an opportunity to perform voluntary disruption actions.\n\nSecondly, you can block Karpenter from voluntarily disrupting and draining pods by adding the `karpenter.sh/do-not-disrupt: \"true\"` annotation to the pod.\nYou can treat this annotation as a single-pod, permanently blocking PDB.\nThis has the following consequences:\n- Nodes with `karpenter.sh/do-not-disrupt` pods will be excluded from [Consolidation]({{<ref \"#consolidation\" >}}), and conditionally excluded from [Drift]({{<ref \"#drift\" >}}).\n  - If the Node's owning NodeClaim has a [`terminationGracePeriod`]({{<ref \"#terminationgraceperiod\" >}}) configured, it will still be eligible for disruption via drift.\n- Like pods with a blocking PDB, pods with the `karpenter.sh/do-not-disrupt` annotation will **not** be gracefully evicted by the [Termination Controller]({{<ref \"#termination-controller\">}}).\n  Karpenter will not be able to complete termination of the node until one of the following conditions is met:\n  - All pods with the `karpenter.sh/do-not-disrupt` annotation are removed.\n  - All pods with the `karpenter.sh/do-not-disrupt` annotation have entered a [terminal phase](https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#pod-phase) (`Succeeded` or `Failed`).\n  - The owning NodeClaim's [`terminationGracePeriod`]({{<ref \"#terminationgraceperiod\" >}}) has elapsed.\n\nThis is useful for pods that you want to run from start to finish without disruption.\nExamples of pods that you might want to opt-out of disruption include an 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.\n\n```yaml\napiVersion: apps/v1\nkind: Deployment\nspec:\n  template:\n    metadata:\n      annotations:\n        karpenter.sh/do-not-disrupt: \"true\"\n```\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nThe `karpenter.sh/do-not-disrupt` annotation does **not** exclude nodes from the forceful disruption methods: [Expiration]({{<ref \"#expiration\" >}}), [Interruption]({{<ref \"#interruption\" >}}), [Node Repair](<ref \"#node-repair\" >), and manual deletion (e.g. `kubectl delete node ...`).\nWhile both interruption and node repair have implicit upper-bounds on termination time, expiration and manual termination do not.\nManual intervention may be required to unblock node termination, by removing pods with the `karpenter.sh/do-not-disrupt` annotation.\nFor this reason, it is not recommended to use the `karpenter.sh/do-not-disrupt` annotation with `expireAfter` **if** you have not also configured `terminationGracePeriod`.\n{{% /alert %}}\n\n### Node-Level Controls\n\nYou can block Karpenter from voluntarily choosing to disrupt certain nodes by setting the `karpenter.sh/do-not-disrupt: \"true\"` annotation on the node.\nThis will prevent voluntary disruption actions against the node.\n\n```yaml\napiVersion: v1\nkind: Node\nmetadata:\n  annotations:\n    karpenter.sh/do-not-disrupt: \"true\"\n```\n\n#### Example: Disable Disruption on a NodePool\n\nTo disable disruption for all nodes launched by a NodePool, you can configure its `.spec.disruption.budgets`. Setting a budget of zero nodes will prevent any of those nodes from being considered for voluntary disruption.\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\nspec:\n  disruption:\n    budgets:\n      - nodes: \"0\"\n```\n"
  },
  {
    "path": "website/content/en/v1.8/concepts/nodeclaims.md",
    "content": "---\ntitle: \"NodeClaims\"\nlinkTitle: \"NodeClaims\"\nweight: 30\ndescription: >\n  Understand NodeClaims\n---\n\nKarpenter uses NodeClaims to manage the lifecycle of Kubernetes Nodes with the underlying cloud provider.\nKarpenter will create and delete NodeClaims in response to the demands of Pods in the cluster.\nIt does this by evaluating the requirements of pending pods, finding a compatible [NodePool]({{< ref \"./nodepools\" >}}) and [NodeClass]({{< ref \"./nodeclasses\" >}}) pair, and creating a NodeClaim which meets both sets of requirements.\nAlthough NodeClaims are immutable resources managed by Karpenter, you can monitor NodeClaims to keep track of the status of your Nodes.\n\nIn addition to tracking the lifecycle of Nodes, NodeClaims serve as requests for capacity.\nKarpenter creates NodeClaims in response to provisioning and disruption needs (pre-spin). Whenever Karpenter\ncreates a NodeClaim, it asks the cloud provider to create the instance (launch), register and link the created node\nwith the NodeClaim (registration), and wait for the node and its resources to be ready (initialization).\n\nThis page describes how NodeClaims integrate throughout Karpenter and the cloud provider implementation.\n\nIf you want to learn more about the nodes being managed by Karpenter, you can either look directly at the NodeClaim or at the nodes they are associated with:\n\n* Checking NodeClaims:\nIf something goes wrong in the process of creating a node, you can look at the NodeClaim\nto see where the node creation process might have failed. `kubectl get nodeclaims` will show you the NodeClaims\nfor the cluster, and its linked node. Using `kubectl describe nodeclaim <nodeclaim>` will show the status of a particular NodeClaim.\nFor example, if the node is NotReady, you might see statuses indicating that the NodeClaim failed to launch, register, or initialize.\nThere will be logs emitted by the Karpenter controller to indicate this too.\n\n* Checking nodes:\nUse commands such as `kubectl get node` and  `kubectl describe node <nodename>` to see the actual resources,\nlabels, and other attributes associated with a particular node.\n\n## NodeClaim roles in node creation\n\nNodeClaims provide a critical role in the Karpenter workflow for provisioning capacity, and in node disruptions.\n\nThe following diagram illustrates how NodeClaims interact with other components during Karpenter-driven node creation.\n\n![nodeclaim-node-creation](/nodeclaims.png)\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nConfigure the `KARPENTER_NAMESPACE` environment variable to the namespace where you've installed Karpenter (`kube-system` is the default). Follow along with the Karpenter logs in your cluster and do the following:\n\n```bash\nexport KARPENTER_NAMESPACE=\"kube-system\"\nkubectl logs -f -n \"${KARPENTER_NAMESPACE}\" \\\n   -l app.kubernetes.io/name=karpenter\n```\nIn a separate terminal, start some pods that would require Karpenter to create nodes to handle those pods.\nFor example, start up some inflate pods as described in [Scale up deployment]({{< ref \"../getting-started/getting-started-with-karpenter/#6-scale-up-deployment\" >}}).\n{{% /alert %}}\n\nAs illustrated in the previous diagram, Karpenter interacts with NodeClaims and related components when creating a node:\n\n1. Watches for pods and monitors NodePools and NodeClasses:\n    * Checks the pod scheduling constraints and resource requests.\n    * Cross-references the requirements with the existing NodePools and NodeClasses, (e.g. zones, arch, os)\n\n   **Example log:**\n   ```json\n   {\n       \"level\": \"INFO\",\n       \"time\": \"2024-06-22T02:24:16.114Z\",\n       \"message\": \"found provisionable pod(s)\",\n       \"commit\": \"490ef94\",\n       \"Pods\": \"default/inflate-66fb68585c-xvs86, default/inflate-66fb68585c-hpcdz, default/inflate-66fb68585c-8xztf,01234567adb205c7e default/inflate-66fb68585c-t29d8, default/inflate-66fb68585c-nxflz\",\n       \"duration\": \"100.761702ms\"\n   }\n   ```\n\n2. Computes the shape and size of a NodeClaim (or NodeClaims) to create in the cluster to fit the set of pods from step 1.\n\n   **Example log:**\n   ```json\n   {\n       \"level\": \"INFO\",\n       \"time\": \"2024-06-22T02:24:16.114Z\",\n       \"message\": \"computed new nodeclaim(s) to fit pod(s)\",\n       \"controller\": \"provisioner\",\n       \"nodeclaims\": 1,\n       \"pods\": 5\n   }\n   ```\n\n3. Creates the NodeClaim object in the cluster.\n\n   **Example log:**\n   ```json\n   {\n       \"level\": \"INFO\",\n       \"time\": \"2024-06-22T02:24:16.128Z\",\n       \"message\": \"created nodeclaim\",\n       \"controller\": \"provisioner\",\n       \"NodePool\": {\n           \"name\":\"default\"\n       },\n       \"NodeClaim\": {\n           \"name\":\"default-sfpsl\"\n       },\n       \"requests\": {\n           \"cpu\":\"5150m\",\n           \"pods\":\"8\"\n       },\n       \"instance-types\": \"c3.2xlarge, c4.2xlarge, c4.4xlarge, c5.2xlarge, c5.4xlarge and 55 other(s)\"\n   }\n   ```\n\n4. Finds the new NodeClaim and translates it into an API call to create a cloud provider instance, logging\n   the response of the API call.\n\n   If the API response is an unrecoverable error, such as an Insufficient Capacity Error, Karpenter will delete the NodeClaim, mark that instance type as temporarily unavailable, and create another NodeClaim if necessary.\n\n   **Example log:**\n   ```json\n   {\n       \"level\": \"INFO\",\n       \"time\": \"2024-06-22T02:24:19.028Z\",\n       \"message\": \"launched nodeclaim\",\n       \"controller\": \"nodeclaim.lifecycle\",\n       \"NodeClaim\": {\n           \"name\": \"default-sfpsl\"\n       },\n       \"provider-id\": \"aws:///us-west-2b/i-01234567adb205c7e\",\n       \"instance-type\": \"c3.2xlarge\",\n       \"zone\": \"us-west-2b\",\n       \"capacity-type\": \"spot\",\n       \"allocatable\": {\n         \"cpu\": \"7910m\",\n         \"ephemeral-storage\": \"17Gi\",\n         \"memory\": \"13215Mi\",\n         \"pods\": \"58\"\n       }\n   }\n   ```\n\n5. Karpenter watches for the instance to register itself with the cluster as a node, and updates the node's\n   labels, annotations, taints, owner refs, and finalizer to match what was defined in the NodePool and NodeClaim. Once this step is\n   completed, Karpenter will remove the `karpenter.sh/unregistered` taint from the Node.\n\n   If this fails to succeed within 15 minutes, Karpenter will remove the NodeClaim from the cluster and delete\n   the underlying instance, creating another NodeClaim if necessary.\n\n   **Example log:**\n   ```json\n   {\n     \"level\": \"INFO\",\n     \"time\": \"2024-06-22T02:26:19.028Z\",\n     \"message\": \"registered nodeclaim\",\n     \"controller\": \"nodeclaim.lifecycle\",\n     \"NodeClaim\": {\n       \"name\": \"default-sfpsl\"\n     },\n     \"provider-id\": \"aws:///us-west-2b/i-01234567adb205c7e\",\n     \"Node\": {\n       \"name\": \"ip-xxx-xxx-xx-xxx.us-west-2.compute.internal\"\n     }\n   }\n   ```\n\n6. Karpenter continues to watch the node, waiting until the node becomes ready, has all its startup taints removed,\n   and has all requested resources registered on the node.\n\n   **Example log:**\n   ```json\n   {\n     \"level\": \"INFO\",\n     \"time\": \"2024-06-22T02:24:52.642Z\",\n     \"message\": \"initialized nodeclaim\",\n     \"controller\": \"nodeclaim.lifecycle\",\n     \"NodeClaim\": {\n       \"name\": \"default-sfpsl\"\n     },\n     \"provider-id\": \"aws:///us-west-2b/i-01234567adb205c7e\",\n     \"Node\": {\n       \"name\": \"ip-xxx-xxx-xx-xxx.us-west-2.compute.internal\"\n     },\n     \"allocatable\": {\n       \"cpu\": \"7910m\",\n       \"ephemeral-storage\": \"18242267924\",\n       \"hugepages-2Mi\": \"0\",\n       \"memory\": \"14320468Ki\",\n       \"pods\": \"58\"\n     }\n   }\n   ```\n\n## NodeClaim example\nThe following is an example of a NodeClaim. Keep in mind that you cannot modify a NodeClaim.\nTo see the contents of a NodeClaim, get the name of your NodeClaim, then run `kubectl describe` to see its contents:\n\n```\nkubectl get nodeclaim\nNAME            TYPE               ZONE         NODE                                           READY   AGE\ndefault-m6pzn   c7i-flex.2xlarge   us-west-1a   ip-xxx-xxx-xx-xxx.us-west-1.compute.internal   True    7m50s\n\nkubectl describe nodeclaim default-m6pzn\n```\nStarting at the bottom of this example, here are some highlights of what the NodeClaim contains:\n\n* The Node Name (ip-xxx-xxx-xx-xxx.us-west-1.compute.internal) and Provider ID (aws:///us-west-1a/i-xxxxxxxxxxxxxxxxx) identify the instance that is fulfilling this NodeClaim.\n* Image ID (ami-0ccbbed159cce4e37) represents the operating system image running on the node.\n* Status shows the resources that are available on the node (CPU, memory, and so on) as well as the conditions associated with the node. The conditions show the status of the node, including whether the node is launched, registered, and initialized. This is particularly useful if Pods are not deploying to the node and you want to determine the cause.\n* Spec contains the metadata required for Karpenter to launch and manage an instance. This includes any scheduling requirements, resource requirements, the NodeClass reference, taints, and immutable disruption fields (expireAfter and terminationGracePeriod).\n* Additional information includes annotations and labels which should be synced to the Node, creation metadata, the termination finalizer, and the owner reference.\n\n```\nName:         default-x9wxq\nNamespace:\nLabels:       karpenter.k8s.aws/instance-category=c\n              karpenter.k8s.aws/instance-cpu=8\n              karpenter.k8s.aws/instance-cpu-manufacturer=amd\n              karpenter.k8s.aws/instance-ebs-bandwidth=3170\n              karpenter.k8s.aws/instance-encryption-in-transit-supported=true\n              karpenter.k8s.aws/instance-family=c5a\n              karpenter.k8s.aws/instance-generation=5\n              karpenter.k8s.aws/instance-hypervisor=nitro\n              karpenter.k8s.aws/instance-memory=16384\n              karpenter.k8s.aws/instance-network-bandwidth=2500\n              karpenter.k8s.aws/instance-size=2xlarge\n              karpenter.sh/capacity-type=spot\n              karpenter.sh/nodepool=default\n              kubernetes.io/arch=amd64\n              kubernetes.io/os=linux\n              node.kubernetes.io/instance-type=c5a.2xlarge\n              topology.k8s.aws/zone-id=usw2-az3\n              topology.kubernetes.io/region=us-west-2\n              topology.kubernetes.io/zone=us-west-2c\nAnnotations:  compatibility.karpenter.k8s.aws/cluster-name-tagged: true\n              compatibility.karpenter.k8s.aws/kubelet-drift-hash: 15379597991425564585\n              karpenter.k8s.aws/ec2nodeclass-hash: 5763643673275251833\n              karpenter.k8s.aws/ec2nodeclass-hash-version: v3\n              karpenter.k8s.aws/tagged: true\n              karpenter.sh/nodepool-hash: 377058807571762610\n              karpenter.sh/nodepool-hash-version: v3\nAPI Version:  karpenter.sh/v1\nKind:         NodeClaim\nMetadata:\n  Creation Timestamp:  2024-08-07T05:37:30Z\n  Finalizers:\n    karpenter.sh/termination\n  Generate Name:  default-\n  Generation:     1\n  Owner References:\n    API Version:           karpenter.sh/v1\n    Block Owner Deletion:  true\n    Kind:                  NodePool\n    Name:                  default\n    UID:                   6b9c6781-ac05-4a4c-ad6a-7551a07b2ce7\n  Resource Version:        19600526\n  UID:                     98a2ba32-232d-45c4-b7c0-b183cfb13d93\nSpec:\n  Expire After:  720h0m0s\n  Node Class Ref:\n    Group:\n    Kind:   EC2NodeClass\n    Name:   default\n  Requirements:\n    Key:       kubernetes.io/arch\n    Operator:  In\n    Values:\n      amd64\n    Key:       kubernetes.io/os\n    Operator:  In\n    Values:\n      linux\n    Key:       karpenter.sh/capacity-type\n    Operator:  In\n    Values:\n      spot\n    Key:       karpenter.k8s.aws/instance-category\n    Operator:  In\n    Values:\n      c\n      m\n      r\n    Key:       karpenter.k8s.aws/instance-generation\n    Operator:  Gt\n    Values:\n      2\n    Key:       karpenter.sh/nodepool\n    Operator:  In\n    Values:\n      default\n    Key:       node.kubernetes.io/instance-type\n    Operator:  In\n    Values:\n      c3.xlarge\n      c4.xlarge\n      c5.2xlarge\n      c5.xlarge\n      c5a.xlarge\n      c5ad.2xlarge\n      c5ad.xlarge\n      c5d.2xlarge\n  Resources:\n    Requests:\n      Cpu:   3150m\n      Pods:  6\n  Startup Taints:\n    Effect:  NoSchedule\n    Key:     app.dev/example-startup\n  Taints:\n    Effect:                  NoSchedule\n    Key:                     app.dev/example\n  Termination Grace Period:  1h0m0s\nStatus:\n  Allocatable:\n    Cpu:                        7910m\n    Ephemeral - Storage:        17Gi\n    Memory:                     14162Mi\n    Pods:                       58\n    vpc.amazonaws.com/pod-eni:  38\n  Capacity:\n    Cpu:                        8\n    Ephemeral - Storage:        20Gi\n    Memory:                     15155Mi\n    Pods:                       58\n    vpc.amazonaws.com/pod-eni:  38\n  Conditions:\n    Last Transition Time:  2024-08-07T05:38:08Z\n    Message:\n    Reason:                Consolidatable\n    Status:                True\n    Type:                  Consolidatable\n    Last Transition Time:  2024-08-07T05:38:07Z\n    Message:\n    Reason:                Initialized\n    Status:                True\n    Type:                  Initialized\n    Last Transition Time:  2024-08-07T05:37:33Z\n    Message:\n    Reason:                Launched\n    Status:                True\n    Type:                  Launched\n    Last Transition Time:  2024-08-07T05:38:07Z\n    Message:\n    Reason:                Ready\n    Status:                True\n    Type:                  Ready\n    Last Transition Time:  2024-08-07T05:37:55Z\n    Message:\n    Reason:                Registered\n    Status:                True\n    Type:                  Registered\n  Image ID:                ami-08946d4d49fc3f27b\n  Node Name:               ip-xxx-xxx-xxx-xxx.us-west-2.compute.internal\n  Provider ID:             aws:///us-west-2c/i-01234567890123\nEvents:\n  Type    Reason             Age   From       Message\n  ----    ------             ----  ----       -------\n  Normal  Launched           70s   karpenter  Status condition transitioned, Type: Launched, Status: Unknown -> True, Reason: Launched\n  Normal  DisruptionBlocked  70s   karpenter  Cannot disrupt NodeClaim: state node doesn't contain both a node and a nodeclaim\n  Normal  Registered         48s   karpenter  Status condition transitioned, Type: Registered, Status: Unknown -> True, Reason: Registered\n  Normal  Initialized        36s   karpenter  Status condition transitioned, Type: Initialized, Status: Unknown -> True, Reason: Initialized\n  Normal  Ready              36s   karpenter  Status condition transitioned, Type: Ready, Status: Unknown -> True, Reason: Ready\n```\n"
  },
  {
    "path": "website/content/en/v1.8/concepts/nodeclasses.md",
    "content": "---\ntitle: \"NodeClasses\"\nlinkTitle: \"NodeClasses\"\nweight: 2\ndescription: >\n  Configure AWS-specific settings with EC2NodeClasses\n---\n\nNode Classes enable configuration of AWS specific settings.\nEach NodePool must reference an EC2NodeClass using `spec.template.spec.nodeClassRef`.\nMultiple NodePools may point to the same EC2NodeClass.\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\nspec:\n  template:\n    spec:\n      nodeClassRef:\n        group: karpenter.k8s.aws\n        kind: EC2NodeClass\n        name: default\n---\napiVersion: karpenter.k8s.aws/v1\nkind: EC2NodeClass\nmetadata:\n  name: default\nspec:\n  kubelet:\n    podsPerCore: 2\n    maxPods: 20\n    systemReserved:\n      cpu: 100m\n      memory: 100Mi\n      ephemeral-storage: 1Gi\n    kubeReserved:\n      cpu: 200m\n      memory: 100Mi\n      ephemeral-storage: 3Gi\n    evictionHard:\n      memory.available: 5%\n      nodefs.available: 10%\n      nodefs.inodesFree: 10%\n    evictionSoft:\n      memory.available: 500Mi\n      nodefs.available: 15%\n      nodefs.inodesFree: 15%\n    evictionSoftGracePeriod:\n      memory.available: 1m\n      nodefs.available: 1m30s\n      nodefs.inodesFree: 2m\n    evictionMaxPodGracePeriod: 60\n    imageGCHighThresholdPercent: 85\n    imageGCLowThresholdPercent: 80\n    cpuCFSQuota: true\n    clusterDNS: [\"10.0.1.100\"]\n  # Optional, dictates UserData generation and default block device mappings.\n  # May be ommited when using an `alias` amiSelectorTerm, otherwise required.\n  amiFamily: AL2\n\n  # Required, discovers subnets to attach to instances\n  # Each term in the array of subnetSelectorTerms is ORed together\n  # Within a single term, all conditions are ANDed\n  subnetSelectorTerms:\n    # Select on any subnet that has the \"karpenter.sh/discovery: ${CLUSTER_NAME}\"\n    # AND the \"environment: test\" tag OR any subnet with ID \"subnet-09fa4a0a8f233a921\"\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\"\n        environment: test\n    - id: subnet-09fa4a0a8f233a921\n\n  # Required, discovers security groups to attach to instances\n  # Each term in the array of securityGroupSelectorTerms is ORed together\n  # Within a single term, all conditions are ANDed\n  securityGroupSelectorTerms:\n    # Select on any security group that has both the \"karpenter.sh/discovery: ${CLUSTER_NAME}\" tag\n    # AND the \"environment: test\" tag OR any security group with the \"my-security-group\" name\n    # OR any security group with ID \"sg-063d7acfb4b06c82c\"\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\"\n        environment: test\n    - name: my-security-group\n    - id: sg-063d7acfb4b06c82c\n\n  # Optional, IAM role to use for the node identity.\n  # Must specify one of \"role\" or \"instanceProfile\" for Karpenter to launch nodes\n  role: \"KarpenterNodeRole-${CLUSTER_NAME}\"\n\n  # Optional, IAM instance profile to use for the node identity.\n  # Must specify one of \"role\" or \"instanceProfile\" for Karpenter to launch nodes\n  instanceProfile: \"KarpenterNodeInstanceProfile-${CLUSTER_NAME}\"\n\n  # Each term in the array of amiSelectorTerms is ORed together\n  # Within a single term, all conditions are ANDed\n  amiSelectorTerms:\n    # Select on any AMI that has both the `karpenter.sh/discovery: ${CLUSTER_NAME}`\n    # AND `environment: test` tags OR any AMI with the name `my-ami` OR an AMI with\n    # ID `ami-123` OR an AMI with ID matching the value of my-custom-parameter\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\"\n        environment: test\n    - name: my-ami\n    - id: ami-123\n    - ssmParameter: my-custom-parameter # ssm parameter name or ARN\n    # Select EKS optimized AL2023 AMIs with version `v20240703`. This term is mutually\n    # exclusive and can't be specified with other terms.\n    # - alias: al2023@v20240703\n\n  # Optional, each term in the array of capacityReservationSelectorTerms is ORed together.\n  capacityReservationSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: ${CLUSTER_NAME}\n    - id: cr-123\n    - instanceMatchCriteria: open\n\n  # Optional, propagates tags to underlying EC2 resources\n  tags:\n    team: team-a\n    app: team-a-app\n\n  # Optional, configures IMDS for the instance\n  metadataOptions:\n    httpEndpoint: enabled\n    httpProtocolIPv6: disabled\n    httpPutResponseHopLimit: 1 # This is changed to disable IMDS access from containers not on the host network\n    httpTokens: required\n\n  # Optional, configures storage devices for the instance\n  blockDeviceMappings:\n    - deviceName: /dev/xvda\n      ebs:\n        volumeSize: 100Gi\n        volumeType: gp3\n        iops: 10000\n        encrypted: true\n        kmsKeyID: \"1234abcd-12ab-34cd-56ef-1234567890ab\"\n        deleteOnTermination: true\n        throughput: 125\n        snapshotID: snap-0123456789\n        volumeInitializationRate: 100\n\n  # Optional, use instance-store volumes for node ephemeral-storage\n  instanceStorePolicy: RAID0\n\n  # Optional, overrides autogenerated userdata with a merge semantic\n  userData: |\n    echo \"Hello world\"\n\n  # Optional, configures detailed monitoring for the instance\n  detailedMonitoring: true\n\n  # Optional, configures if the instance should be launched with an associated public IP address.\n  # If not specified, the default value depends on the subnet's public IP auto-assign setting.\n  associatePublicIPAddress: true\nstatus:\n  # Resolved subnets\n  subnets:\n    - id: subnet-0a462d98193ff9fac\n      zone: us-east-2b\n    - id: subnet-0322dfafd76a609b6\n      zone: us-east-2c\n    - id: subnet-0727ef01daf4ac9fe\n      zone: us-east-2b\n    - id: subnet-00c99aeafe2a70304\n      zone: us-east-2a\n    - id: subnet-023b232fd5eb0028e\n      zone: us-east-2c\n    - id: subnet-03941e7ad6afeaa72\n      zone: us-east-2a\n\n  # Resolved security groups\n  securityGroups:\n    - id: sg-041513b454818610b\n      name: ClusterSharedNodeSecurityGroup\n    - id: sg-0286715698b894bca\n      name: ControlPlaneSecurityGroup-1AQ073TSAAPW\n\n  # Resolved AMIs\n  amis:\n    - id: ami-01234567890123456\n      name: custom-ami-amd64\n      requirements:\n        - key: kubernetes.io/arch\n          operator: In\n          values:\n            - amd64\n    - id: ami-01234567890123456\n      name: custom-ami-arm64\n      requirements:\n        - key: kubernetes.io/arch\n          operator: In\n          values:\n            - arm64\n\n  # Capacity Reservations\n  capacityReservations:\n    - availabilityZone: us-west-2a\n      id: cr-01234567890123456\n      instanceMatchCriteria: targeted\n      instanceType: g6.48xlarge\n      ownerID: \"012345678901\"\n      reservationType: capacity-block\n      state: expiring\n    - availabilityZone: us-west-2c\n      id: cr-12345678901234567\n      instanceMatchCriteria: open\n      instanceType: g6.48xlarge\n      ownerID: \"98765432109\"\n      reservationType: default\n      state: active\n\n  # Generated instance profile name from \"role\"\n  instanceProfile: \"${CLUSTER_NAME}-0123456778901234567789\"\n  conditions:\n    - lastTransitionTime: \"2024-02-02T19:54:34Z\"\n      status: \"True\"\n      type: InstanceProfileReady\n    - lastTransitionTime: \"2024-02-02T19:54:34Z\"\n      status: \"True\"\n      type: SubnetsReady\n    - lastTransitionTime: \"2024-02-02T19:54:34Z\"\n      status: \"True\"\n      type: SecurityGroupsReady\n    - lastTransitionTime: \"2024-02-02T19:54:34Z\"\n      status: \"True\"\n      type: AMIsReady\n    - lastTransitionTime: \"2024-02-02T19:54:34Z\"\n      status: \"True\"\n      type: Ready\n```\nRefer to the [NodePool docs]({{<ref \"./nodepools\" >}}) for settings applicable to all providers. To explore various `EC2NodeClass` configurations, refer to the examples provided [in the Karpenter Github repository](https://github.com/aws/karpenter/blob/main/examples/v1/).\n\n\n## spec.kubelet\n\nKarpenter provides the ability to specify a few additional Kubelet arguments.\nThese are all optional and provide support for additional customization and use cases.\nAdjust these only if you know you need to do so.\nFor more details on kubelet settings, see the [KubeletConfiguration reference](https://kubernetes.io/docs/reference/config-api/kubelet-config.v1/).\nThe implemented fields are a subset of the full list of upstream kubelet configuration arguments.\n\n```yaml\nkubelet:\n  podsPerCore: 2\n  maxPods: 20\n  systemReserved:\n    cpu: 100m\n    memory: 100Mi\n    ephemeral-storage: 1Gi\n  kubeReserved:\n    cpu: 200m\n    memory: 100Mi\n    ephemeral-storage: 3Gi\n  evictionHard:\n    memory.available: 5%\n    nodefs.available: 10%\n    nodefs.inodesFree: 10%\n  evictionSoft:\n    memory.available: 500Mi\n    nodefs.available: 15%\n    nodefs.inodesFree: 15%\n  evictionSoftGracePeriod:\n    memory.available: 1m\n    nodefs.available: 1m30s\n    nodefs.inodesFree: 2m\n  evictionMaxPodGracePeriod: 60\n  imageGCHighThresholdPercent: 85\n  imageGCLowThresholdPercent: 80\n  cpuCFSQuota: true\n  clusterDNS: [\"10.0.1.100\"]\n```\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nIf you need to specify a field that isn't present in `spec.kubelet`, you can set it via custom [UserData]({{< ref \"#specuserdata\" >}}).\nFor example, if you wanted to configure `maxPods` and `registryPullQPS` you would set the former through `spec.kubelet` and the latter through UserData.\nThe following example achieves this with AL2023:\n\n```yaml\napiVersion: karpenter.k8s.aws/v1\nkind: EC2NodeClass\nspec:\n  amiSelectorTerms:\n    - alias: al2023@v20240807\n  kubelet:\n    maxPods: 42\n  userData: |\n    apiVersion: node.eks.aws/v1alpha1\n    kind: NodeConfig\n    spec:\n      kubelet:\n        config:\n          # Configured through UserData since unavailable in `spec.kubelet`\n          registryPullQPS: 10\n```\n\nNote that when using the `Custom` AMIFamily you will need to specify fields **both** in `spec.kubelet` and `spec.userData`.\n{{% /alert %}}\n\n#### Pods Per Core\n\nAn alternative way to dynamically set the maximum density of pods on a node is to use the `.spec.kubelet.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.\n\nThe 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.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\n`maxPods` may not be set in the `kubelet` of an EC2NodeClass, 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 EC2NodeClass will not cause unexpected behavior by exceeding the `maxPods` value.\n{{% /alert %}}\n\n#### Max Pods\n\nFor 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.kubelet.maxPods`. This value will be used during Karpenter pod scheduling and passed through to `--max-pods` on kubelet startup.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nWhen 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.\n{{% /alert %}}\n\n{{% alert title=\"Windows Support Notice\" color=\"warning\" %}}\nPresently, Windows worker nodes do not support using more than one ENI.\nAs a consequence, the number of IP addresses, and subsequently, the number of pods that a Windows worker node can support is limited by the number of IPv4 addresses available on the primary ENI.\nCurrently, Karpenter will only consider individual secondary IP addresses when calculating the pod density limit.\n{{% /alert %}}\n\n### Reserved Resources\n\nKarpenter 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.kubelet.systemReserved` values and the `--kube-reserved` configuration defaults with the `.spec.kubelet.kubeReserved` values.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nKarpenter considers these reserved resources when computing the allocatable ephemeral storage on a given instance type.\nIf `kubeReserved` is not specified, Karpenter will compute the default reserved [CPU](https://github.com/awslabs/amazon-eks-ami/blob/db28da15d2b696bc08ac3aacc9675694f4a69933/files/bootstrap.sh#L251) and [memory](https://github.com/awslabs/amazon-eks-ami/blob/db28da15d2b696bc08ac3aacc9675694f4a69933/files/bootstrap.sh#L235) resources for the purpose of ephemeral storage computation.\nThese defaults are based on the defaults on Karpenter's supported AMI families, which are not the same as the kubelet defaults.\nYou should be aware of the CPU and memory default calculation when using Custom AMI Families. If they don't align, there may be a difference in Karpenter's computed allocatable ephemeral storage and the actually ephemeral storage available on the node.\n{{% /alert %}}\n\n### Eviction Thresholds\n\nThe 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.\n\nKubelet 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.\n\nKarpenter supports [hard evictions](https://kubernetes.io/docs/concepts/scheduling-eviction/node-pressure-eviction/#hard-eviction-thresholds) through the `.spec.kubelet.evictionHard` field and [soft evictions](https://kubernetes.io/docs/concepts/scheduling-eviction/node-pressure-eviction/#soft-eviction-thresholds) through the `.spec.kubelet.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.\n\n```yaml\nkubelet:\n  evictionHard:\n    memory.available: 500Mi\n    nodefs.available: 10%\n    nodefs.inodesFree: 10%\n    imagefs.available: 5%\n    imagefs.inodesFree: 5%\n    pid.available: 7%\n  evictionSoft:\n    memory.available: 1Gi\n    nodefs.available: 15%\n    nodefs.inodesFree: 15%\n    imagefs.available: 10%\n    imagefs.inodesFree: 10%\n    pid.available: 10%\n```\n\n#### Supported Eviction Signals\n\n| Eviction Signal    | Description                                                                     |\n|--------------------|---------------------------------------------------------------------------------|\n| memory.available   | memory.available := node.status.capacity[memory] - node.stats.memory.workingSet |\n| nodefs.available   | nodefs.available := node.stats.fs.available                                     |\n| nodefs.inodesFree  | nodefs.inodesFree := node.stats.fs.inodesFree                                   |\n| imagefs.available  | imagefs.available := node.stats.runtime.imagefs.available                       |\n| imagefs.inodesFree | imagefs.inodesFree := node.stats.runtime.imagefs.inodesFree                     |\n| pid.available      | pid.available := node.stats.rlimit.maxpid - node.stats.rlimit.curproc           |\n\nFor 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.\n\n#### Soft Eviction Grace Periods\n\nSoft 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.\n\nOptionally, 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.\n\n```yaml\nkubelet:\n  evictionSoftGracePeriod:\n    memory.available: 1m\n    nodefs.available: 1m30s\n    nodefs.inodesFree: 2m\n    imagefs.available: 1m30s\n    imagefs.inodesFree: 2m\n    pid.available: 2m\n  evictionMaxPodGracePeriod: 60\n```\n\n### Pod Density\n\nBy 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.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nBy default, the VPC CNI allocates IPs for a node and pods from the same subnet. With [VPC CNI Custom Networking](https://aws.github.io/aws-eks-best-practices/networking/custom-networking), the pods will receive IP addresses from another subnet dedicated to pod IPs. This approach makes it easier to manage IP addresses and allows for separate Network Access Control Lists (NACLs) applied to your pods. VPC CNI Custom Networking reduces the pod density of a node since one of the ENI attachments will be used for the node and cannot share the allocated IPs on the interface to pods. Karpenter supports VPC CNI Custom Networking and similar CNI setups where the primary node interface is separated from the pods interfaces through a global environment variable RESERVED_ENIS, see [Settings]({{<ref \"../reference/settings\" >}}). In the common case, RESERVED_ENIS should be set to \"1\" if using Custom Networking. {{% /alert %}}\n\n{{% alert title=\"Windows Support Notice\" color=\"warning\" %}}\nIt's currently not possible to specify custom networking with Windows nodes.\n{{% /alert %}}\n\n## spec.amiFamily\n\nAMIFamily dictates the default bootstrapping logic for nodes provisioned through this `EC2NodeClass`.\nAn `amiFamily` is only required if you don't specify a `spec.amiSelectorTerms.alias` object.\nFor example, if you specify `alias: al2023@v20240807`, the `amiFamily` is implicitly `AL2023`.\n\nAMIFamily does not impact which AMI is discovered, only the UserData generation and default BlockDeviceMappings. To automatically discover EKS optimized AMIs, use the new [`alias` field in amiSelectorTerms]({{< ref \"#specamiselectorterms\" >}}).\n\n{{% alert title=\"Ubuntu Support Dropped at v1\" color=\"warning\" %}}\n\nSupport for the Ubuntu AMIFamily has been dropped at Karpenter `v1.0.0`.\nThis means Karpenter no longer supports automatic AMI discovery and UserData generation for Ubuntu.\nTo continue using Ubuntu AMIs, you will need to select Ubuntu AMIs using `amiSelectorTerms`.\n\nAdditionally, you will need to either maintain UserData yourself using the `Custom` AMIFamily, or you can use the `AL2` AMIFamily and custom `blockDeviceMappings` (as shown below).\nThe `AL2` family has an identical UserData format, but this compatibility isn't guaranteed long term.\nChanges to AL2's or Ubuntu's UserData format could result in incompatibility, at which point the `Custom` AMIFamily must be used.\n\n**Ubuntu NodeClass Example:**\n```yaml\napiVersion: karpenter.k8s.aws/v1\nkind: EC2NodeClass\nspec:\n  amiFamily: AL2\n  amiSelectorTerms:\n    - id: ami-placeholder\n  blockDeviceMappings:\n  - deviceName: '/dev/sda1'\n    rootVolume: true\n    ebs:\n      encrypted: true\n      volumeType: gp3\n      volumeSize: 20Gi\n```\n\n{{% /alert %}}\n\n\n### AL2\n\n{{% alert title=\"AL2 support dropped at Kubernetes 1.33\" color=\"warning\" %}}\nKubernetes version 1.32 is the last version for which Amazon EKS will release Amazon Linux 2 (AL2) AMIs.\n{{% /alert %}}\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nNote that Karpenter will automatically generate a call to the `/etc/eks/bootstrap.sh` script as part of its generated UserData. When using `amiFamily: AL2` you should not call this script yourself in `.spec.userData`. If you need to, use the [Custom AMI family]({{< ref \"./nodeclasses/#custom\" >}}) instead.\n{{% /alert %}}\n\n```bash\nMIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"//\"\n\n--//\nContent-Type: text/x-shellscript; charset=\"us-ascii\"\n\n#!/bin/bash -xe\nexec > >(tee /var/log/user-data.log|logger -t user-data -s 2>/dev/console) 2>&1\n/etc/eks/bootstrap.sh 'test-cluster' --apiserver-endpoint 'https://test-cluster' --b64-cluster-ca 'ca-bundle' \\\n--dns-cluster-ip '10.100.0.10' \\\n--use-max-pods false \\\n--kubelet-extra-args '--node-labels=karpenter.sh/capacity-type=on-demand,karpenter.sh/nodepool=test  --max-pods=110'\n--//--\n```\n\n### AL2023\n\n```text\nMIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"//\"\n\n--//\nContent-Type: application/node.eks.aws\n\n# Karpenter Generated NodeConfig\napiVersion: node.eks.aws/v1alpha1\nkind: NodeConfig\nspec:\n  cluster:\n    name: test-cluster\n    apiServerEndpoint: https://example.com\n    certificateAuthority: ca-bundle\n    cidr: 10.100.0.0/16\n  kubelet:\n    config:\n      maxPods: 110\n    flags:\n      - --node-labels=karpenter.sh/capacity-type=on-demand,karpenter.sh/nodepool=test\n\n--//--\n\n```\n\n### Bottlerocket\n\n```toml\n[settings]\n[settings.kubernetes]\napi-server = 'https://test-cluster'\ncluster-certificate = 'ca-bundle'\ncluster-name = 'test-cluster'\ncluster-dns-ip = '10.100.0.10'\nmax-pods = 110\n\n[settings.kubernetes.node-labels]\n'karpenter.sh/capacity-type' = 'on-demand'\n'karpenter.sh/nodepool' = 'test'\n```\n\n### Windows2019\n\n```powershell\n<powershell>\n[string]$EKSBootstrapScriptFile = \"$env:ProgramFiles\\Amazon\\EKS\\Start-EKSBootstrap.ps1\"\n& $EKSBootstrapScriptFile -EKSClusterName 'test-cluster' -APIServerEndpoint 'https://test-cluster' -Base64ClusterCA 'ca-bundle' -KubeletExtraArgs '--node-labels=\"karpenter.sh/capacity-type=on-demand,karpenter.sh/nodepool=test\" --max-pods=110' -DNSClusterIP '10.100.0.10'\n</powershell>\n```\n\n### Windows2022\n\n```powershell\n<powershell>\n[string]$EKSBootstrapScriptFile = \"$env:ProgramFiles\\Amazon\\EKS\\Start-EKSBootstrap.ps1\"\n& $EKSBootstrapScriptFile -EKSClusterName 'test-cluster' -APIServerEndpoint 'https://test-cluster' -Base64ClusterCA 'ca-bundle' -KubeletExtraArgs '--node-labels=\"karpenter.sh/capacity-type=on-demand,karpenter.sh/nodepool=test\" --max-pods=110' -DNSClusterIP '10.100.0.10'\n</powershell>\n```\n\n### Custom\n\nThe `Custom` AMIFamily ships without any default userData to allow you to configure custom bootstrapping for control planes or images that don't support the default methods from the other families. For this AMIFamily, kubelet must add the taint `karpenter.sh/unregistered:NoExecute` via the `--register-with-taints` flag ([flags](https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet/#options)) or the KubeletConfiguration spec ([options](https://kubernetes.io/docs/reference/config-api/kubelet-config.v1/#kubelet-config-k8s-io-v1-CredentialProviderConfig) and [docs](https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/)). Karpenter will fail to register nodes that do not have this taint.\n\n## spec.subnetSelectorTerms\n\nSubnet Selector Terms allow you to specify selection logic for a set of subnet options that Karpenter can choose from when launching an instance from the `EC2NodeClass`. Karpenter discovers subnets through the `EC2NodeClass` using ids or [tags](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html). 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.\n\nThis selection logic is modeled as terms, where each term contains multiple conditions that must all be satisfied for the selector to match. Effectively, all requirements within a single term are ANDed together. It's possible that you may want to select on two different subnets that have unrelated requirements. In this case, you can specify multiple terms which will be ORed together to form your selection logic. The example below shows how this selection logic is fulfilled.\n\n```yaml\nsubnetSelectorTerms:\n  # Select on any subnet that has the \"karpenter.sh/discovery: ${CLUSTER_NAME}\"\n  # AND the \"environment: test\" tag OR any subnet with ID \"subnet-09fa4a0a8f233a921\"\n  - tags:\n      karpenter.sh/discovery: \"${CLUSTER_NAME}\"\n      environment: test\n  - id: subnet-09fa4a0a8f233a921\n```\n\n{{% alert title=\"Tip\" color=\"secondary\" %}}\nSubnets may be specified by any tag, including `Name`. Selecting tag values using wildcards (`*`) is supported.\n{{% /alert %}}\n\n#### Examples\n\nSelect all with a specified tag key:\n```yaml\nspec:\n  subnetSelectorTerms:\n    - tags:\n        karpenter.sh/discovery/MyClusterName: '*'\n```\n\nSelect by name and tag (all criteria must match):\n```yaml\nspec:\n  subnetSelectorTerms:\n    - tags:\n        Name: my-subnet\n        MyTag: '' # matches all resources with the tag\n```\n\nSelect using multiple tag terms:\n```yaml\nspec:\n  subnetSelectorTerms:\n    - tags:\n        Name: \"my-subnet-1\"\n    - tags:\n        Name: \"my-subnet-2\"\n```\n\nSelect using wildcards:\n```yaml\nspec:\n  subnetSelectorTerms:\n    - tags:\n        Name: \"*Public*\"\n\n```\n\nSelect using ids:\n```yaml\nspec:\n  subnetSelectorTerms:\n    - id: \"subnet-09fa4a0a8f233a921\"\n    - id: \"subnet-0471ca205b8a129ae\"\n```\n\n\n## spec.securityGroupSelectorTerms\n\nSecurity Group Selector Terms allow you to specify selection logic for all security groups that will be attached to an instance launched from the `EC2NodeClass`. The security group of an instance is comparable to a set of firewall rules.\n[EKS creates at least two security groups by default](https://docs.aws.amazon.com/eks/latest/userguide/sec-group-reqs.html).\n\nThis selection logic is modeled as terms, where each term contains multiple conditions that must all be satisfied for the selector to match. Effectively, all requirements within a single term are ANDed together. It's possible that you may want to select on two different security groups that have unrelated requirements. In this case, you can specify multiple terms which will be ORed together to form your selection logic. The example below shows how this selection logic is fulfilled.\n\n```yaml\nsecurityGroupSelectorTerms:\n  # Select on any security group that has both the \"karpenter.sh/discovery: ${CLUSTER_NAME}\" tag\n  # AND the \"environment: test\" tag OR any security group with the \"my-security-group\" name\n  # OR any security group with ID \"sg-063d7acfb4b06c82c\"\n  - tags:\n      karpenter.sh/discovery: \"${CLUSTER_NAME}\"\n      environment: test\n  - name: my-security-group\n  - id: sg-063d7acfb4b06c82c\n```\n\n{{% alert title=\"Tip\" color=\"secondary\" %}}\nSecurity groups may be specified by any tag, including \"Name\". Selecting tags using wildcards (`*`) is supported.\n{{% /alert %}}\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nWhen launching nodes, Karpenter uses all the security groups that match the selector. If you choose to use the `kubernetes.io/cluster/$CLUSTER_NAME` tag for discovery, note that 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.\n\nTo verify if this restriction affects you, run the following commands.\n```bash\nCLUSTER_VPC_ID=\"$(aws eks describe-cluster --name $CLUSTER_NAME --query cluster.resourcesVpcConfig.vpcId --output text)\"\n\naws ec2 describe-security-groups --filters Name=vpc-id,Values=$CLUSTER_VPC_ID Name=tag-key,Values=kubernetes.io/cluster/$CLUSTER_NAME --query 'SecurityGroups[].[GroupName]' --output text\n```\n\nIf multiple securityGroups are printed, you will need more specific securityGroupSelectorTerms. We generally recommend that you use the `karpenter.sh/discovery: $CLUSTER_NAME` tag selector instead.\n{{% /alert %}}\n\n#### Examples\n\nSelect all assigned to a cluster:\n```yaml\nspec:\n  securityGroupSelectorTerms:\n    - tags:\n        kubernetes.io/cluster/$CLUSTER_NAME: \"owned\"\n```\n\nSelect all with a specified tag key:\n```yaml\nspec:\n  securityGroupSelectorTerms:\n    - tags:\n        MyTag: '*'\n```\n\nSelect by name and tag (all criteria must match):\n```yaml\nspec:\n  securityGroupSelectorTerms:\n    - name: my-security-group\n      tags:\n        MyTag: '*' # matches all resources with the tag\n```\n\nSelect using multiple tag terms:\n```yaml\nspec:\n  securityGroupSelectorTerms:\n    - tags:\n        Name: \"my-security-group-1\"\n    - tags:\n        Name: \"my-security-group-2\"\n```\n\nSelect by name using a wildcard:\n```yaml\nspec:\n  securityGroupSelectorTerms:\n    - name: \"*Public*\"\n```\n\nSelect using ids:\n```yaml\nspec:\n securityGroupSelectorTerms:\n    - id: \"sg-063d7acfb4b06c82c\"\n    - id: \"sg-06e0cf9c198874591\"\n```\n\n## spec.role\n\n`Role` is an optional field and tells Karpenter which IAM identity nodes should assume. You must specify one of `role` or `instanceProfile` when creating a Karpenter `EC2NodeClass`. If using the [Karpenter Getting Started Guide]({{<ref \"../getting-started/getting-started-with-karpenter\" >}}) to deploy Karpenter, you can use the `KarpenterNodeRole-$CLUSTER_NAME` role provisioned by that process.\n\n```yaml\nspec:\n  role: \"KarpenterNodeRole-$CLUSTER_NAME\"\n```\n\n## spec.instanceProfile\n\n`InstanceProfile` is an optional field and tells Karpenter which IAM identity nodes should assume. You must specify one of `role` or `instanceProfile` when creating a Karpenter `EC2NodeClass`. If you use the `instanceProfile` field instead of `role`, Karpenter will not manage the InstanceProfile on your behalf; instead, it expects that you have pre-provisioned an IAM instance profile and assigned it a role.\n\nYou can provision and assign a role to an IAM instance profile using [CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-instanceprofile.html) or by using the [`aws iam create-instance-profile`](https://docs.aws.amazon.com/cli/latest/reference/iam/create-instance-profile.html) and [`aws iam add-role-to-instance-profile`](https://docs.aws.amazon.com/cli/latest/reference/iam/add-role-to-instance-profile.html) commands in the CLI.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\n\nFor [private clusters](https://docs.aws.amazon.com/eks/latest/userguide/private-clusters.html) that do not have access to the public internet, using `spec.instanceProfile` is required. `spec.role` cannot be used since Karpenter needs to access IAM endpoints to manage a generated instance profile. IAM [doesn't support private endpoints](https://docs.aws.amazon.com/vpc/latest/privatelink/aws-services-privatelink-support.html) to enable accessing the service without going to the public internet.\n\n{{% /alert %}}\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nWhen using `spec.instanceProfile`, ensure you are using pre-provisioned instance profiles that you manage yourself.\n{{% /alert %}}\n\n## spec.amiSelectorTerms\n\nAMI Selector Terms are __required__ and are used to configure AMIs for Karpenter to use. AMIs are discovered through alias, id, owner, name, and [tags](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html).\n\nThis selection logic is modeled as terms, where each term contains multiple conditions that must all be satisfied for the selector to match.\nEffectively, all requirements within a single term are ANDed together.\nIt's possible that you may want to select on two different AMIs that have unrelated requirements.\nIn this case, you can specify multiple terms which will be ORed together to form your selection logic.\nThe example below shows how this selection logic is fulfilled.\n\n```yaml\namiSelectorTerms:\n  # Select on any AMI that has both the `karpenter.sh/discovery: ${CLUSTER_NAME}`\n  # AND `environment: test` tags OR any AMI with the name `my-ami` OR an AMI with\n  # ID `ami-123` OR an AMI with ID matching the value of my-custom-parameter\n  - tags:\n      karpenter.sh/discovery: \"${CLUSTER_NAME}\"\n      environment: test\n  - name: my-ami\n  - id: ami-123\n  - ssmParameter: my-custom-parameter # ssm parameter name or ARN\n  # Select EKS optimized AL2023 AMIs with version `v20240807`. This term is mutually\n  # exclusive and can't be specified with other terms.\n  # - alias: al2023@v20240807\n```\n\nAn `alias` term can be used to select EKS-optimized AMIs. An `alias` is formatted as `family@version`. Family can be one of the following values:\n\n* `al2`\n* `al2023`\n* `bottlerocket`\n* `windows2019`\n* `windows2022`\n\nThe version string can be set to `latest`, or pinned to a specific AMI using the format of that AMI's GitHub release tags.\nFor example, AL2 and AL2023 use dates for their release, so they can be pinned as follows:\n```yaml\nalias: al2023@v20240703\n```\nBottlerocket uses a semantic version for their releases. You can pin bottlerocket as follows:\n```yaml\nalias: bottlerocket@v1.20.4\n```\nThe Windows family does not support pinning, so only `latest` is supported.\n\nThe following commands can be used to determine the versions availble for an alias in your region:\n\n{{< tabpane text=true right=false >}}\n  {{% tab \"AL2023\" %}}\n  ```bash\n  export K8S_VERSION=\"1.34\"\n  aws ssm get-parameters-by-path --path \"/aws/service/eks/optimized-ami/$K8S_VERSION/amazon-linux-2023/\" --recursive | jq -cr '.Parameters[].Name' | grep -v \"recommended\" | awk -F '/' '{print $10}' | sed -r 's/.*(v[[:digit:]]+)$/\\1/' | sort | uniq\n  ```\n  {{% /tab %}}\n  {{% tab \"AL2\" %}}\n  ```bash\n  export K8S_VERSION=\"1.34\"\n  aws ssm get-parameters-by-path --path \"/aws/service/eks/optimized-ami/$K8S_VERSION/amazon-linux-2/\" --recursive | jq -cr '.Parameters[].Name' | grep -v \"recommended\" | awk -F '/' '{print $8}' | sed -r 's/.*(v[[:digit:]]+)$/\\1/' | sort | uniq\n  ```\n  {{% /tab %}}\n  {{% tab \"Bottlerocket\" %}}\n  ```bash\n  export K8S_VERSION=\"1.34\"\n  aws ssm get-parameters-by-path --path \"/aws/service/bottlerocket/aws-k8s-$K8S_VERSION\" --recursive | jq -cr '.Parameters[].Name' | grep -v \"latest\" | awk -F '/' '{print $7}' | sort | uniq\n  ```\n  {{% /tab %}}\n{{< /tabpane >}}\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter supports automatic AMI selection and upgrades using the `latest` version pin, but this is **not** recommended for production environments.\nWhen using `latest`, a new AMI release will cause Karpenter to drift all out-of-date nodes in the cluster, replacing them with nodes running the new AMI.\nWe strongly recommend evaluating new AMIs in a lower environment before rolling them out into a production environment.\nMore details on Karpenter's recommendations for managing AMIs can be found [here]({{< ref \"../tasks/managing-amis\" >}}).\n{{% /alert %}}\n\nTo select an AMI by name, use the `name` field in the selector term. To select an AMI by id, use the `id` field in the selector term. To select AMIs that are not owned by `amazon` or the account that Karpenter is running in, use the `owner` field - you can use a combination of account aliases (e.g. `self` `amazon`, `your-aws-account-name`) and account IDs.\n\nIf owner is not set for `name`, it defaults to `self,amazon`, preventing Karpenter from inadvertently selecting an AMI that is owned by a different account. Tags don't require an owner as tags can only be discovered by the user who created them.\n\n{{% alert title=\"Tip\" color=\"secondary\" %}}\nAMIs may be specified by any AWS tag, including `Name`. Selecting by tag or by name using wildcards (`*`) is supported.\n{{% /alert %}}\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nIf `amiSelectorTerms` match more than one AMI, Karpenter will automatically determine which AMI best fits the workloads on the launched worker node under the following constraints:\n\n* When launching nodes, Karpenter automatically determines which architecture a custom AMI is compatible with and will use images that match an instanceType's requirements.\n    * Unless using an alias, Karpenter **cannot** detect requirements other than architecture. If you need to specify different AMIs for different kind of nodes (e.g. accelerated GPU AMIs), you should use a separate `EC2NodeClass`.\n* If multiple AMIs are found that can be used, Karpenter will choose the latest one.\n* If no AMIs are found that can be used, then no nodes will be provisioned.\n{{% /alert %}}\n\n#### Examples\n\nSelect by AMI family and version:\n```yaml\n  amiSelectorTerms:\n    - alias: al2023@v20240807\n```\n\nSelect all with a specified tag:\n\n```yaml\n  amiSelectorTerms:\n    - tags:\n        karpenter.sh/discovery/MyClusterName: '*'\n```\n\nSelect by name:\n```yaml\n  amiSelectorTerms:\n    - name: my-ami\n```\n\nSelect by `Name` tag:\n```yaml\n  amiSelectorTerms:\n    - tags:\n        Name: my-ami\n```\n\nSelect by name and owner:\n```yaml\n  amiSelectorTerms:\n    - name: my-ami\n      owner: self\n    - name: my-ami\n      owner: \"0123456789\"\n```\n\nSelect by name using a wildcard:\n```yaml\nspec:\n  amiSelectorTerms:\n    - name: \"*EKS*\"\n```\n\nSelect by all under an owner:\n```yaml\nspec:\n  amiSelectorTerms:\n    - name: \"*\"\n      owner: self\n```\n\nSpecify using ids:\n```yaml\n  amiSelectorTerms:\n    - id: \"ami-123\"\n    - id: \"ami-456\"\n```\n\nSpecify using custom ssm parameter name or ARN:\n```yaml\n  amiSelectorTerms:\n    - ssmParameter: \"my-custom-parameter\"\n```\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nWhen using a custom SSM parameter, you'll need to expand the `ssm:GetParameter` permissions on the Karpenter IAM role to include your custom parameter, as the default policy only allows access to the AWS public parameters.\n{{% /alert %}}\n\n## spec.capacityReservationSelectorTerms\n\n<i class=\"fa-solid fa-circle-info\"></i> <b>Feature State: </b> [Beta]({{<ref \"../reference/settings#feature-gates\" >}})\n\nCapacity Reservation Selector Terms allow you to select [on-demand capacity reservations](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-capacity-reservations.html) (ODCRs), which will be made available to NodePools which select the given EC2NodeClass.\nKarpenter will prioritize utilizing the capacity in these reservations before falling back to on-demand and spot.\nCapacity reservations can be discovered using ids, tags, or instance match criteria.\n\nThis selection logic is modeled as terms.\nA term can specify an ID, a set of tags, or instance match criteria to select against.\nWhen specifying tags, it will select all capacity reservations accessible from the account with matching tags.\nWhen specifying instance match criteria, it selects reservations by their matching behavior: `open` (matches all compatible instances) or `targeted` (matches only explicitly targeted instances).\nThis can be further restricted by specifying an owner ID.\n\nFor more information on utilizing ODCRs with Karpenter, refer to the [Utilizing ODCRs Task]({{< relref \"../tasks/odcrs\" >}}).\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nNote that the IAM role Karpenter assumes should have a permissions policy associated with it that grants it permissions to use the [ec2:DescribeCapacityReservations](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonec2.html#amazonec2-DescribeCapacityReservations) action to discover capacity reservations and the [ec2:RunInstances](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonec2.html#amazonec2-RunInstances) action to run instances in those capacity reservations.\n{{% /alert %}}\n\n#### Examples\n\nSelect the reservations with the given IDs:\n\n```yaml\nspec:\n  capacityReservationSelectorTerms:\n  - id: cr-123\n  - id: cr-456\n```\n\nSelect the reservations by tags:\n\n```yaml\nspec:\n  capacityReservationSelectorTerms:\n  # Select all capacity reservations which have both matching tags\n  - tags:\n      key1: foo\n      key2: bar\n  # Additionally, select all capacity reservations with the following matching tag\n  - tags:\n      key3: foobar\n```\n\nSelect by tags and owner ID:\n\n```yaml\nspec:\n  # Select all capacity reservations with the matching tags which are also owned by\n  # the specified account.\n  capacityReservationSelectorTerms:\n  - tags:\n      key: foo\n    ownerID: 012345678901\n```\n\nSelect by instance match criteria:\n\n```yaml\nspec:\n  capacityReservationSelectorTerms:\n  # Select all open capacity reservations\n  - instanceMatchCriteria: open\n```\n\nSelect by instance match criteria and tags:\n\n```yaml\nspec:\n  capacityReservationSelectorTerms:\n  # Select targeted capacity reservations with matching tags\n  - instanceMatchCriteria: targeted\n    tags:\n      key: foo\n```\n\n## spec.tags\n\nKarpenter adds tags to all resources it creates, including EC2 Instances, EBS volumes, and Launch Templates. The default set of tags are listed below.\n\n```yaml\nName: <node-name>\nkarpenter.sh/nodeclaim: <nodeclaim-name>\nkarpenter.sh/nodepool: <nodepool-name>\nkarpenter.k8s.aws/ec2nodeclass: <ec2nodeclass-name>\nkubernetes.io/cluster/<cluster-name>: owned\neks:eks-cluster-name: <cluster-name>\n```\n\nAdditional tags can be added in the tags section, which will be merged with the default tags specified above.\n```yaml\nspec:\n  tags:\n    InternalAccountingTag: 1234\n    dev.corp.net/app: Calculator\n    dev.corp.net/team: MyTeam\n```\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nKarpenter allows overrides of the default \"Name\" tag but does not allow overrides to restricted domains (such as \"karpenter.sh\", \"karpenter.k8s.aws\", and \"kubernetes.io/cluster\"). This ensures that Karpenter is able to correctly auto-discover nodes that it owns.\n{{% /alert %}}\n\n## spec.metadataOptions\n\nControl the exposure of [Instance Metadata Service](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html) on EC2 Instances launched by this EC2NodeClass using a generated launch template.\n\nRefer 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.\n\nIf metadataOptions are omitted from this EC2NodeClass, the following default settings are applied:\n\n```yaml\nspec:\n  metadataOptions:\n    httpEndpoint: enabled\n    httpProtocolIPv6: disabled\n    httpPutResponseHopLimit: 1\n    httpTokens: required\n```\n\n## spec.blockDeviceMappings\n\nThe `blockDeviceMappings` field in an `EC2NodeClass` can be used to control the [Elastic Block Storage (EBS) volumes](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/block-device-mapping-concepts.html#instance-block-device-mapping) that Karpenter attaches to provisioned nodes. Karpenter uses default block device mappings for the AMIFamily 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.\n\n```yaml\nspec:\n  blockDeviceMappings:\n    - deviceName: /dev/xvda\n      ebs:\n        volumeSize: 100Gi\n        volumeType: gp3\n        iops: 10000\n        encrypted: true\n        kmsKeyID: \"1234abcd-12ab-34cd-56ef-1234567890ab\"\n        deleteOnTermination: true\n        throughput: 125\n        snapshotID: snap-0123456789\n        volumeInitializationRate: 100\n```\n\nThe following blockDeviceMapping defaults are used for each `AMIFamily` if no `blockDeviceMapping` overrides are specified in the `EC2NodeClass`\n\n### AL2\n```yaml\nspec:\n  blockDeviceMappings:\n    - deviceName: /dev/xvda\n      ebs:\n        volumeSize: 20Gi\n        volumeType: gp3\n        encrypted: true\n```\n\n### AL2023\n```yaml\nspec:\n  blockDeviceMappings:\n    - deviceName: /dev/xvda\n      ebs:\n        volumeSize: 20Gi\n        volumeType: gp3\n        encrypted: true\n```\n\n### Bottlerocket\n```yaml\nspec:\n  blockDeviceMappings:\n    # Root device\n    - deviceName: /dev/xvda\n      ebs:\n        volumeSize: 4Gi\n        volumeType: gp3\n        encrypted: true\n    # Data device: Container resources such as images and logs\n    - deviceName: /dev/xvdb\n      ebs:\n        volumeSize: 20Gi\n        volumeType: gp3\n        encrypted: true\n```\n\n### Windows2019/Windows2022\n```yaml\nspec:\n  blockDeviceMappings:\n    - deviceName: /dev/sda1\n      ebs:\n        volumeSize: 50Gi\n        volumeType: gp3\n        encrypted: true\n```\n\n### Custom\n\nThe `Custom` AMIFamily ships without any default `blockDeviceMappings`.\n\n## spec.instanceStorePolicy\n\nThe `instanceStorePolicy` field controls how [instance-store](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/InstanceStorage.html) volumes are handled. By default, Karpenter and Kubernetes will simply ignore them.\n\n### RAID0\n\nIf you intend to use these volumes for faster node ephemeral-storage, set `instanceStorePolicy` to `RAID0`:\n\n```yaml\nspec:\n  instanceStorePolicy: RAID0\n```\n\nThis will set the allocatable ephemeral-storage of each node to the total size of the instance-store volume(s). This configuration is likely to be useful for workloads that leverage dense storage instance types or require the low latency from instance-stores that are nvme ssd based.\n\nThe disks must be formatted & mounted in a RAID0 and be the underlying filesystem for the Kubelet & Containerd. Even if you already configure your volumes with RAID0, Karpenter won't recognize this by default unless you set the `instanceStorePolicy` to `RAID0`. Without this, scheduling workloads that depend on ephemeral-storage from the instance-stores may result in a deadlock due to insufficient storage.\n\nInstructions for each AMI family are listed below:\n\n#### AL2\n\nOn AL2, Karpenter automatically configures the disks through an additional boostrap argument (`--local-disks raid0`). The device name is `/dev/md/0` and its mount point is `/mnt/k8s-disks/0`. You should ensure any additional disk setup does not interfere with these.\n\n#### AL2023\n\nOn AL2023, Karpenter automatically configures the disks via the generated `NodeConfig` object. Like AL2, the device name is `/dev/md/0` and its mount point is `/mnt/k8s-disks/0`. You should ensure any additional disk setup does not interfere with these.\n\n#### Bottlerocket\n\nOn Bottlerocket, Karpenter automatically configures the disks by adding the required bootstrap commands to the settings. The ephemeral storage configuration is handled automatically, so you should not manually configure ephemeral storage settings in your userData.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nThis automatic disk configuration is only available on Bottlerocket v1.22.0 and later.\n{{% /alert %}}\n\n#### Others\n\nFor all other AMI families, you must configure the disks yourself. Check out the [`setup-local-disks`](https://github.com/awslabs/amazon-eks-ami/blob/main/templates/shared/runtime/bin/setup-local-disks) script in [amazon-eks-ami](https://github.com/awslabs/amazon-eks-ami) to see how this is done for AL2.\n\n{{% alert title=\"Tip\" color=\"secondary\" %}}\nSince the Kubelet & Containerd will be using the instance-store filesystem, you may consider using a more minimal root volume size.\n{{% /alert %}}\n\n## spec.userData\n\nYou can control the UserData that is applied to your worker nodes via this field. This allows you to run custom scripts or pass-through custom configuration to Karpenter instances on start-up.\n\n```yaml\napiVersion: karpenter.k8s.aws/v1\nkind: EC2NodeClass\nmetadata:\n  name: bottlerocket-example\nspec:\n  ...\n  amiFamily: Bottlerocket\n  userData:  |\n    [settings.kubernetes]\n    \"kube-api-qps\" = 30\n    \"shutdown-grace-period\" = \"30s\"\n    \"shutdown-grace-period-for-critical-pods\" = \"30s\"\n    [settings.kubernetes.eviction-hard]\n    \"memory.available\" = \"20%\"\n```\n\nThis example adds SSH keys to allow remote login to the node (replace *my-authorized_keys* with your public key file):\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nInstead 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.\nSee [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.\n\nAlso, **my-authorized_key** key is the public key. See [Retrieve the public key material](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/describe-keys.html#retrieving-the-public-key).\n{{% /alert %}}\n\n```yaml\napiVersion: karpenter.k8s.aws/v1\nkind: EC2NodeClass\nmetadata:\n  name: al2-example\nspec:\n  ...\n  amiFamily: AL2\n  userData: |\n    #!/bin/bash\n    mkdir -p ~ec2-user/.ssh/\n    touch ~ec2-user/.ssh/authorized_keys\n    cat >> ~ec2-user/.ssh/authorized_keys <<EOF\n    {{ insertFile \"../my-authorized_keys\" | indent 4  }}\n    EOF\n    chmod -R go-w ~ec2-user/.ssh/authorized_keys\n    chown -R ec2-user ~ec2-user/.ssh\n```\n\nAlternatively, you can save the [key in your SSM Parameter Store](https://docs.aws.amazon.com/systems-manager/latest/userguide/parameter-create-console.html) and use the get-parameter command mentioned below to retrieve the key for authorized_keys.\n\n```\naws ssm get-parameter --name \"<parameter-name>\" --region <region> --with-decryption --query \"Parameter.Value\" --output text > /home/ec2-user/.ssh/authorized_keys\n```\n\nFor more examples on configuring fields for different AMI families, see the [examples here](https://github.com/aws/karpenter/blob/main/examples/v1).\n\nKarpenter will merge the userData you specify with the default userData for that AMIFamily. See the [AMIFamily]({{< ref \"#specamifamily\" >}}) section for more details on these defaults. View the sections below to understand the different merge strategies for each AMIFamily.\n\n### AL2\n\n* Your UserData can be in the [MIME multi part archive](https://cloudinit.readthedocs.io/en/latest/topics/format.html#mime-multi-part-archive) format.\n* Karpenter will transform your custom user-data as a MIME part, if necessary, and then merge a final MIME part to the end of your UserData parts which will bootstrap the worker node. Karpenter will have full control over all the parameters being passed to the bootstrap script.\n  * Karpenter will continue to set MaxPods, ClusterDNS and all other parameters defined in `spec.kubeletConfiguration` as before.\n\nConsider the following example to understand how your custom UserData will be merged -\n\n#### Passed-in UserData (bash)\n\n```bash\n#!/bin/bash\necho \"Running custom user data script (bash)\"\n```\n\n#### Merged UserData (bash)\n\n```bash\nMIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"//\"\n\n--//\nContent-Type: text/x-shellscript; charset=\"us-ascii\"\n\n#!/bin/bash\necho \"Running custom user data script (bash)\"\n\n--//\nContent-Type: text/x-shellscript; charset=\"us-ascii\"\n\n#!/bin/bash -xe\nexec > >(tee /var/log/user-data.log|logger -t user-data -s 2>/dev/console) 2>&1\n/etc/eks/bootstrap.sh 'test-cluster' --apiserver-endpoint 'https://test-cluster' --b64-cluster-ca 'ca-bundle' \\\n--use-max-pods false \\\n--kubelet-extra-args '--node-labels=karpenter.sh/capacity-type=on-demand,karpenter.sh/nodepool=test  --max-pods=110'\n--//--\n```\n\n#### Passed-in UserData (MIME)\n\n```bash\nMIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"BOUNDARY\"\n\n--BOUNDARY\nContent-Type: text/x-shellscript; charset=\"us-ascii\"\n\n#!/bin/bash\necho \"Running custom user data script (mime)\"\n\n--BOUNDARY--\n```\n\n#### Merged UserData (MIME)\n\n```bash\nMIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"//\"\n\n--//\nContent-Type: text/x-shellscript; charset=\"us-ascii\"\n\n#!/bin/bash\necho \"Running custom user data script (mime)\"\n\n--//\nContent-Type: text/x-shellscript; charset=\"us-ascii\"\n\n#!/bin/bash -xe\nexec > >(tee /var/log/user-data.log|logger -t user-data -s 2>/dev/console) 2>&1\n/etc/eks/bootstrap.sh 'test-cluster' --apiserver-endpoint 'https://test-cluster' --b64-cluster-ca 'ca-bundle' \\\n--use-max-pods false \\\n--kubelet-extra-args '--node-labels=karpenter.sh/capacity-type=on-demand,karpenter.sh/nodepool=test  --max-pods=110'\n--//--\n```\n\n{{% alert title=\"Tip\" color=\"secondary\" %}}\nYou can set additional kubelet configuration properties, unavailable through `spec.kubelet`, by updating the `kubelet-config.json` file:\n\n```yaml\napiVersion: karpenter.k8s.aws/v1\nkind: EC2NodeClass\nmetadata:\n  name: kubelet-config-example\nspec:\n  amiFamily: AL2\n  userData: |\n    #!/bin/bash\n    echo \"$(jq '.kubeAPIQPS=50' /etc/kubernetes/kubelet/kubelet-config.json)\" > /etc/kubernetes/kubelet/kubelet-config.json\n```\n{{% /alert %}}\n\n### AL2023\n\n* Your UserData may be in one of three formats: a [MIME multi part archive](https://cloudinit.readthedocs.io/en/latest/topics/format.html#mime-multi-part-archive), a NodeConfig YAML / JSON string, or a shell script.\n* Karpenter will transform your custom UserData into a MIME part, if necessary, and then create a MIME multi-part archive. This archive will consist of a generated NodeConfig, containing Karpenter's default values, followed by the transformed custom UserData. For more information on the NodeConfig spec, refer to the [AL2023 EKS Optimized AMI docs](https://awslabs.github.io/amazon-eks-ami/nodeadm/doc/examples/).\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nAny values configured by the Karpenter generated NodeConfig object will take precedent over values specifed in `spec.userData`.\nThis includes cluster name, cluster CIDR, cluster endpoint, certificate authority, taints, labels, and any value in [spec.kubelet]({{< ref \"#speckubelet\" >}}).\nThese fields must be configured natively through Karpenter rather than through UserData.\n{{% /alert %}}\n\n#### Passed-in UserData (NodeConfig)\n\n```yaml\napiVersion: node.eks.aws/v1alpha1\nkind: NodeConfig\nspec:\n  kubelet:\n    config:\n      maxPods: 42\n```\n\n#### Merged UserData (NodeConfig)\n\n```text\nMIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"//\"\n\n--//\nContent-Type: application/node.eks.aws\n\napiVersion: node.eks.aws/v1alpha1\nkind: NodeConfig\nspec:\n  kubelet:\n    config:\n      maxPods: 42\n\n--//\nContent-Type: application/node.eks.aws\n\n# Karpenter Generated NodeConfig\napiVersion: node.eks.aws/v1alpha1\nkind: NodeConfig\nspec:\n  cluster:\n    apiServerEndpoint: https://test-cluster\n    certificateAuthority: cluster-ca\n    cidr: 10.100.0.0/16\n    name: test-cluster\n  kubelet:\n    config:\n      clusterDNS:\n      - 10.100.0.10\n      maxPods: 118\n    flags:\n    - --node-labels=\"karpenter.sh/capacity-type=on-demand,karpenter.sh/nodepool=default\"\n\n--//--\n```\n\n#### Passed-in UserData (bash)\n\n```shell\n#!/bin/bash\necho \"Hello, AL2023!\"\n```\n\n#### Merged UserData (bash)\n\n```text\nMIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"//\"\n\n--//\nContent-Type: text/x-shellscript; charset=\"us-ascii\"\n\n#!/bin/bash\necho \"Hello, AL2023!\"\n\n--//\nContent-Type: application/node.eks.aws\n\n# Karpenter Generated NodeConfig\napiVersion: node.eks.aws/v1alpha1\nkind: NodeConfig\nspec:\n  cluster:\n    apiServerEndpoint: https://test-cluster\n    certificateAuthority: cluster-ca\n    cidr: 10.100.0.0/16\n    name: test-cluster\n  kubelet:\n    config:\n      clusterDNS:\n      - 10.100.0.10\n      maxPods: 118\n    flags:\n    - --node-labels=\"karpenter.sh/capacity-type=on-demand,karpenter.sh/nodepool=default\"\n\n--//--\n```\n\n#### Passed-in UserData (MIME)\n\n```text\nMIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"//\"\n\n--//\nContent-Type: text/x-shellscript; charset=\"us-ascii\"\n\n#!/bin/bash\necho \"Hello, AL2023!\"\n\n--//\nContent-Type: application/node.eks.aws\n\napiVersion: node.eks.aws/v1alpha1\nkind: NodeConfig\nspec:\n  kubelet:\n    config:\n      maxPods: 42\n--//\n```\n\n#### Merged UserData (MIME)\n\n```text\nMIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"//\"\n\n--//\nContent-Type: application/node.eks.aws\n\napiVersion: node.eks.aws/v1alpha1\nkind: NodeConfig\nspec:\n  kubelet:\n    config:\n      maxPods: 42\n--//\nContent-Type: text/x-shellscript; charset=\"us-ascii\"\n\n#!/bin/bash\necho \"Hello, AL2023!\"\n\n--//\nContent-Type: application/node.eks.aws\n\n# Karpenter Generated NodeConfig\napiVersion: node.eks.aws/v1alpha1\nkind: NodeConfig\nspec:\n  cluster:\n    apiServerEndpoint: https://test-cluster\n    certificateAuthority: cluster-ca\n    cidr: 10.100.0.0/16\n    name: test-cluster\n  kubelet:\n    config:\n      clusterDNS:\n      - 10.100.0.10\n      maxPods: 118\n    flags:\n    - --node-labels=\"karpenter.sh/capacity-type=on-demand,karpenter.sh/nodepool=default\"\n\n--//--\n```\n\n### Bottlerocket\n\n* Your UserData must be valid TOML.\n* Unknown TOML fields will be ignored when the final merged UserData is generated by Karpenter.\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nAny values configured by Karpenter will take precedent over values specifed in `spec.userData`.\nThis includes cluster name, cluster endpoint, cluster certificate, taints, labels, and any value in [spec.kubelet]({{< ref \"#speckubelet\" >}}).\nThese fields must be configured natively through Karpenter rather than through UserData.\n{{% /alert %}}\n\nConsider the following example to understand how your custom UserData settings will be merged in.\n\n#### Passed-in UserData\n\n```toml\n[settings.kubernetes.eviction-hard]\n\"memory.available\" = \"12%\"\n[settings.kubernetes]\n\"unknown-setting\" = \"unknown\"\n[settings.kubernetes.node-labels]\n'field.controlled.by/karpenter' = 'will-be-overridden'\n```\n\n#### Merged UserData\n\n```toml\n[settings]\n[settings.kubernetes]\napi-server = 'https://cluster'\ncluster-certificate = 'ca-bundle'\ncluster-name = 'cluster'\n\n[settings.kubernetes.node-labels]\n'karpenter.sh/capacity-type' = 'on-demand'\n'karpenter.sh/nodepool' = 'default'\n\n[settings.kubernetes.node-taints]\n\n[settings.kubernetes.eviction-hard]\n'memory.available' = '12%%'\n```\n\n#### Device ownership in Bottlerocket\n\nBottlerocket `v1.30.0+` supports device ownership using the [security context](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/) provided in the Kubernetes specfile. To enable this, you will need the following user-data configurations:\n\n```toml\n[settings]\n[settings.kubernetes]\ndevice-ownership-from-security-context = true\n```\n\nThis allows the container to take ownership of devices allocated to the pod via device-plugins based on the `runAsUser` and `runAsGroup` values provided in the spec. For more details on this, see the [Kubernetes documentation](https://kubernetes.io/blog/2021/11/09/non-root-containers-and-devices/)\n\nThis setting helps you enable Neuron workloads on Bottlerocket instances. See [Accelerators/GPU Resources]({{< ref \"./scheduling#acceleratorsgpu-resources\" >}}) for more details.\n\n### Windows2019/Windows2022\n\n* Your UserData must be specified as PowerShell commands.\n* The UserData specified will be prepended to a Karpenter managed section that will bootstrap the kubelet.\n* Karpenter will continue to set ClusterDNS and all other parameters defined in spec.kubeletConfiguration as before.\n\nConsider the following example to understand how your custom UserData settings will be merged in.\n\n#### Passed-in UserData\n\n```powershell\nWrite-Host \"Running custom user data script\"\n```\n\n#### Merged UserData\n\n```powershell\n<powershell>\nWrite-Host \"Running custom user data script\"\n[string]$EKSBootstrapScriptFile = \"$env:ProgramFiles\\Amazon\\EKS\\Start-EKSBootstrap.ps1\"\n& $EKSBootstrapScriptFile -EKSClusterName 'test-cluster' -APIServerEndpoint 'https://test-cluster' -Base64ClusterCA 'ca-bundle' -KubeletExtraArgs '--node-labels=\"karpenter.sh/capacity-type=spot,karpenter.sh/nodepool=windows2022\" --max-pods=110' -DNSClusterIP '10.0.100.10'\n</powershell>\n```\n\n{{% alert title=\"Windows Support Notice\" color=\"warning\" %}}\nCurrently, Karpenter does not specify `-ServiceCIDR` to [EKS Windows AMI Bootstrap script](https://docs.aws.amazon.com/eks/latest/userguide/eks-optimized-windows-ami.html#bootstrap-script-configuration-parameters).\nWindows worker nodes will use `172.20.0.0/16` or `10.100.0.0/16` for Kubernetes service IP address ranges based on the IP address of the primary interface.\nThe effective ServiceCIDR can be verified at `$env:ProgramData\\Amazon\\EKS\\cni\\config\\vpc-bridge.conf` on the worker node.\n\nSupport for the Windows ServiceCIDR argument can be tracked in a [Karpenter Github Issue](https://github.com/aws/karpenter/issues/4088). Currently, if the effective ServiceCIDR is incorrect for your windows worker nodes, you can add the following userData as a workaround.\n\n```yaml\nspec:\n  userData: |\n    $global:EKSCluster = Get-EKSCluster -Name my-cluster\n```\n{{% /alert %}}\n\n### Custom\n\n* No merging is performed, your UserData must perform all setup required of the node to allow it to join the cluster.\n* Custom UserData must meet the following requirements to work correctly with Karpenter:\n  * It must ensure the node is registered with the `karpenter.sh/unregistered:NoExecute` taint (via kubelet configuration field `registerWithTaints`)\n  * It must set kubelet config options to match those configured in `spec.kubelet`\n\n## spec.detailedMonitoring\n\nEnabling detailed monitoring controls the [EC2 detailed monitoring](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-cloudwatch-new.html) feature. If you enable this option, the Amazon EC2 console displays monitoring graphs with a 1-minute period for the instances that Karpenter launches.\n\n```yaml\nspec:\n  detailedMonitoring: true\n```\n\n## spec.associatePublicIPAddress\n\nYou can explicitly set `AssociatePublicIPAddress: false` when you are only launching into private subnets.\nPreviously, Karpenter auto-set `associatePublicIPAddress` on the primary ENI to false if a user’s subnet options were all private subnets.\nThis value is a boolean field that controls whether instances created by Karpenter for this EC2NodeClass will have an associated public IP address. This overrides the `MapPublicIpOnLaunch` setting applied to the subnet the node is launched in. If this field is not set, the `MapPublicIpOnLaunch` field will be respected.\n\n\n{{% alert title=\"Note\" color=\"warning\" %}}\nIf a `NodeClaim` requests `vpc.amazonaws.com/efa` resources, `spec.associatePublicIPAddress` is respected. However, if this `NodeClaim` requests **multiple** EFA resources and the value for `spec.associatePublicIPAddress` is true, the instance will fail to launch. This is due to an EC2 restriction which\nrequires that the field is only set to true when configuring an instance with a single ENI at launch. When using this field, it is advised that users segregate their EFA workload to use a separate `NodePool` / `EC2NodeClass` pair.\n{{% /alert %}}\n\n## spec.ipPrefixCount\n\nThis value is a integer field that controls how many ip prefixes will be assigned to `NodeClaim`. See the [EC2 Launch Template Network Interface Spec](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-properties-ec2-launchtemplate-networkinterface.html) for more information. Sets ipv4PrefixCount if you are using an IPv4 Cluster, or ipv6PrefixCount if you are using IPv6.\n\n## status.subnets\n[`status.subnets`]({{< ref \"#statussubnets\" >}}) contains the resolved `id` and `zone` of the subnets that were selected by the [`spec.subnetSelectorTerms`]({{< ref \"#specsubnetselectorterms\" >}}) for the node class. The subnets will be sorted by the available IP address count in decreasing order.\n\n#### Examples\n\n```yaml\nspec:\n  subnetSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\"\nstatus:\n  subnets:\n  - id: subnet-0a462d98193ff9fac\n    zone: us-east-2b\n  - id: subnet-0322dfafd76a609b6\n    zone: us-east-2c\n  - id: subnet-0727ef01daf4ac9fe\n    zone: us-east-2b\n  - id: subnet-00c99aeafe2a70304\n    zone: us-east-2a\n  - id: subnet-023b232fd5eb0028e\n    zone: us-east-2c\n  - id: subnet-03941e7ad6afeaa72\n    zone: us-east-2a\n```\n\n## status.securityGroups\n\n[`status.securityGroups`]({{< ref \"#statussecuritygroups\" >}}) contains the resolved `id` and `name` of the security groups that were selected by the [`spec.securityGroupSelectorTerms`]({{< ref \"#specsecuritygroupselectorterms\" >}}) for the node class. The subnets will be sorted by the available IP address count in decreasing order.\n\n#### Examples\n\n```yaml\nspec:\n  securityGroupSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\"\nstatus:\n  securityGroups:\n  - id: sg-041513b454818610b\n    name: ClusterSharedNodeSecurityGroup\n  - id: sg-0286715698b894bca\n    name: ControlPlaneSecurityGroup-1AQ073TSAAPW\n```\n\n## status.amis\n\n[`status.amis`]({{< ref \"#statusamis\" >}}) contains the resolved `id`, `name`, `requirements`, and the `deprecated` status of either the default AMIs for the [`spec.amiFamily`]({{< ref \"#specamifamily\" >}}) or the AMIs selected by the [`spec.amiSelectorTerms`]({{< ref \"#specamiselectorterms\" >}}) if this field is specified. The `deprecated` status will be shown for resolved AMIs that are deprecated.\n\n#### Examples\n\nAMIs resolved with an AL2 alias:\n\n```yaml\nspec:\n  amiSelectorTerms:\n    - alias: al2@v20240807\nstatus:\n  amis:\n  - id: ami-03c3a3dcda64f5b75\n    name: amazon-linux-2-gpu\n    requirements:\n    - key: kubernetes.io/arch\n      operator: In\n      values:\n      - amd64\n    - key: karpenter.k8s.aws/instance-gpu-count\n      operator: Exists\n  - id: ami-03c3a3dcda64f5b75\n    name: amazon-linux-2-gpu\n    requirements:\n    - key: kubernetes.io/arch\n      operator: In\n      values:\n      - amd64\n    - key: karpenter.k8s.aws/instance-accelerator-count\n      operator: Exists\n  - id: ami-06afb2d101cc4b8bd\n    name: amazon-linux-2-arm64\n    requirements:\n    - key: kubernetes.io/arch\n      operator: In\n      values:\n      - arm64\n    - key: karpenter.k8s.aws/instance-gpu-count\n      operator: DoesNotExist\n    - key: karpenter.k8s.aws/instance-accelerator-count\n      operator: DoesNotExist\n  - id: ami-0e28b76d768af234e\n    name: amazon-linux-2\n    requirements:\n    - key: kubernetes.io/arch\n      operator: In\n      values:\n      - amd64\n    - key: karpenter.k8s.aws/instance-gpu-count\n      operator: DoesNotExist\n    - key: karpenter.k8s.aws/instance-accelerator-count\n      operator: DoesNotExist\n```\n\nAMIs resolved from tags:\n\n```yaml\nspec:\n  amiSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\"\nstatus:\n  amis:\n  - id: ami-01234567890123456\n    name: custom-ami-amd64\n    deprecated: true\n    requirements:\n    - key: kubernetes.io/arch\n      operator: In\n      values:\n      - amd64\n  - id: ami-01234567890123456\n    name: custom-ami-arm64\n    requirements:\n    - key: kubernetes.io/arch\n      operator: In\n      values:\n      - arm64\n```\n\n## status.capacityReservations\n\n[`status.capacityReservations`]({{< ref \"#statuscapacityreservations\" >}}) contains the following information for each resolved capacity reservation:\n\n| Field                   | Example                | Description                                                                          |\n| ----------------------- | ---------------------- | ------------------------------------------------------------------------------------ |\n| `availabilityZone`      | `us-east-1a`           | The availability zone the capacity reservation is available in                       |\n| `id`                    | `cr-56fac701cc1951b03` | The ID of the capacity reservation                                                   |\n| `instanceMatchCriteria` | `open`                 | The instanceMatchCriteria for the capacity reservation. Can be `open` or `targeted`. |\n| `instanceType`          | `m5.large`             | The EC2 instance type of the capacity reservation                                    |\n| `ownerID`               | `459763720645`         | The account ID that owns the capacity reservation                                    |\n| `reservationType`       | `default`              | The type of the capacity reservation. Can be `default` or `capacity-block`.          |\n| `state`                 | `active`               | The state of the capacity reservation. Can be `active` or `expiring`.                |\n\n#### Examples\n\n```yaml\nstatus:\n  capacityReservations:\n  - availabilityZone: us-west-2a\n    id: cr-01234567890123456\n    instanceMatchCriteria: targeted\n    instanceType: g6.48xlarge\n    ownerID: \"012345678901\"\n    reservationType: capacity-block\n    state: expiring\n  - availabilityZone: us-west-2c\n    id: cr-12345678901234567\n    instanceMatchCriteria: open\n    instanceType: g6.48xlarge\n    ownerID: \"98765432109\"\n    reservationType: default\n    state: active\n```\n\n## status.instanceProfile\n\n[`status.instanceProfile`]({{< ref \"#statusinstanceprofile\" >}}) contains the resolved instance profile generated by Karpenter from the [`spec.role`]({{< ref \"#specrole\" >}})\n\n```yaml\nspec:\n  role: \"KarpenterNodeRole-${CLUSTER_NAME}\"\nstatus:\n  instanceProfile: \"${CLUSTER_NAME}-0123456778901234567789\"\n```\n\n## status.conditions\n\n[`status.conditions`]({{< ref \"#statusconditions\" >}}) indicates EC2NodeClass readiness. This will be `Ready` when Karpenter successfully discovers AMIs, Instance Profile, Subnets, Cluster CIDR (AL2023 only) and SecurityGroups for the EC2NodeClass.\n\nNodeClasses have the following status conditions:\n\n| Condition Type       | Description                                                                                                                                                                                                                       |\n|----------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| SubnetsReady         | Subnets are discovered.                                                                                                                                                                                                           |\n| SecurityGroupsReady  | Security Groups are discovered.                                                                                                                                                                                                   |\n| InstanceProfileReady | Instance Profile is discovered.                                                                                                                                                                                                   |\n| AMIsReady            | AMIs are discovered.                                                |\n| Ready                | Top level condition that indicates if the nodeClass is ready. If any of the underlying conditions is `False` then this condition is set to `False` and `Message` on the condition indicates the dependency that was not resolved. |\n\nIf a NodeClass is not ready, NodePools that reference it through their `nodeClassRef` will not be considered for scheduling.\n"
  },
  {
    "path": "website/content/en/v1.8/concepts/nodeoverlays.md",
    "content": "---\ntitle: \"NodeOverlays\"\nlinkTitle: \"NodeOverlays\"\nweight: 40\ndescription: >\n  Understand NodeOverlays and how they enable fine-tuning of Karpenter's scheduling simulation for advanced use cases.\n---\n\n<i class=\"fa-solid fa-circle-info\"></i> <b>Feature State: </b> [Alpha]({{<ref \"../reference/settings#feature-gates\" >}})\n\n\nKarpenter uses NodeOverlays to inject alternative instance type information into the scheduling simulation for more accurate scheduling decisions.\nNodeOverlays enable users to fine-tune instance pricing and add extended resources to instance types that should be considered during Karpenter's decision-making process.\nThey provide a flexible way to account for real-world factors like savings plans, licensing costs, and custom hardware resources that aren't captured in the base instance data from cloud providers.\n\nNodeOverlays work by modifying the instance type information that Karpenter uses during its scheduling simulation.\nWhen Karpenter evaluates which instance types can satisfy pending pod requirements, it applies any matching NodeOverlays to adjust pricing information or add extended resources before making provisioning decisions.\n\n## NodeOverlay Configuration\n\n```yaml\napiVersion: karpenter.sh/v1alpha1\nkind: NodeOverlay\nmetadata:\n  name: example-overlay\nspec:\n  # Optional weight for conflict resolution (higher weight wins)\n  weight: 10\n  \n  # Requirements determine which instance types this overlay applies to\n  requirements:\n    - key: node.kubernetes.io/instance-type\n      operator: In\n      values: [\"m5.large\", \"m5.xlarge\"]\n    - key: karpenter.sh/capacity-type  \n      operator: In\n      values: [\"spot\"]\n    - key: karpenter.k8s.aws/instance-cpu \n      operator: Gt\n      values: [\"32\"]\n  \n  # Price and priceAdjustment are mutually exclusive\n  # Price override (sets absolute price)\n  price: \"5.00\"\n  \n  # Price adjustment (modifies existing price)\n  priceAdjustment: \"+10%\"  # or \"-0.50\" for absolute adjustment\n  \n  # Extended resources to add to matching instance types\n  capacity:\n    hugepages-2Mi: 100Mi\n    hugepages-1Gi: 2Gi\n    custom-device/gpu-slice: 4\n```\n\n## spec.weight\nOptional integer that determines precedence when multiple NodeOverlays match the same instance type. Higher weights take precedence over lower weights. When weights are equal, alphabetical ordering by name is used for conflict resolution. If not specified, the default weight is 0. If there is a conflict between NodeOverlays with the same weight, it will be indicated in the status and the NodeOverlay will not be applied.\n\n## spec.requirements\nArray of requirements that determine which instance types this overlay applies to. Uses the same format as NodePool requirements and supports all standard Kubernetes label selectors. An empty requirements array applies the overlay to all instance types. Kubernetes defines the following [Well-Known Labels](https://kubernetes.io/docs/reference/labels-annotations-taints/), and cloud providers (e.g., AWS) implement them.\n\nCurrently, requirements sets are defined based on the well-known labels that are discovered for instance types. 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).\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nThere is currently a limit of 100 on the total number of requirements on both the NodeOverlay.\n{{% /alert %}}\n\n## spec.price\nAbsolute price override as a string representing the price in your currency. This completely replaces the original instance price reported by the cloud provider. Karpenter is currency-agnostic, so this works with any currency unit.\n\n## spec.priceAdjustment\nPrice modification that can be specified as:\n- **Absolute adjustment**: `\"+5.00\"` (increase by 5.00) or `\"-2.50\"` (decrease by 2.50)\n- **Percentage adjustment**: `\"+15%\"` (increase by 15%) or `\"-10%\"` (decrease by 10%)\n\n## spec.capacity\nMap of extended resources to add to matching instance types. These resources are added to the existing standard capacity and do not replace or modify well-known resources. Only extended resources should be specified here.\n\n```yaml\napiVersion: karpenter.sh/v1alpha1\nkind: NodeOverlay\nmetadata:\n  name: custom-devices\nspec:\n  requirements:\n    - key: node.kubernetes.io/instance-type\n      operator: In\n      values: [\"m5.large\", \"m5.xlarge\", \"m5.2xlarge\"]\n  capacity:\n    smarter-devices/fuse: 1\n    custom-hardware/accelerator: 2\n```\n\n## Conflict Resolution\n\nWhen multiple NodeOverlays match the same instance type, conflicts are resolved using the following rules:\n\n1. **Weight-based precedence**: Higher weight values take precedence over lower weights\n2. **Alphabetical ordering**: When weights are equal, overlays are applied in alphabetical order by name\n3. **Field-level merging**: Higher-weight overlays override specific fields from lower-weight overlays, but capacity fields from different overlays are merged together\n\n### Example Conflict Resolution\n\n```yaml\napiVersion: karpenter.sh/v1alpha1\nkind: NodeOverlay\nmetadata:\n  name: overlay-a\nspec:\n  weight: 5\n  requirements:\n    - key: node.kubernetes.io/instance-type\n      operator: In\n      values: [\"m5.large\"]\n  priceAdjustment: \"-10%\"\n  capacity:\n    hugepages-2Mi: 50Mi\n---\napiVersion: karpenter.sh/v1alpha1\nkind: NodeOverlay\nmetadata:\n  name: overlay-b\nspec:\n  weight: 10  # Higher weight\n  requirements:\n    - key: node.kubernetes.io/instance-type\n      operator: In\n      values: [\"m5.large\"]\n  priceAdjustment: \"-20%\"  # This overrides overlay-a's adjustment\n  capacity:\n    custom-device/gpu: 1   # This is merged with hugepages-2Mi from overlay-a\n```\n\n**Result for m5.large instances:**\n- Price adjustment: `-20%` (from overlay-b, overrides overlay-a)\n- Capacity: `hugepages-2Mi: 50Mi` (from overlay-a) + `custom-device/gpu: 1` (from overlay-b)\n\n## Integration with Consolidation\n\nNodeOverlay modifications are automatically integrated into Karpenter's consolidation process:\n\n* **Price adjustments** affect consolidation decisions by changing the cost calculations used to determine optimal instance selections during replacement operations\n* **Capacity additions** are considered during consolidation when evaluating whether workloads can be moved between nodes\n* Changes take effect through normal consolidation cycles without requiring additional drift detection or forced node replacement\n\nWhen NodeOverlay configurations change, Karpenter incorporates these changes into its next consolidation evaluation, potentially triggering node replacements if the new configurations significantly change the optimal instance selection for existing workloads.\n\n## Status and Observability\n\nNodeOverlays include status conditions to help you understand their current state and troubleshoot configuration issues.\n\n### Common Status Conditions\n\n* **Ready=True**: The overlay is successfully applied to matching instance types\n* **Ready=False**: Configuration conflicts, requirement mismatches, or other errors prevent the overlay from being applied\n\n### Status Messages\n\nWhen `Ready=False`, the status message provides specific information about the issue:\n\n```yaml\nstatus:\n  conditions:\n  - type: ValidationSucceeded\n    status: \"False\"\n    lastTransitionTime: \"2024-07-24T18:30:00Z\"\n    reason: \"Conflict\"\n    message: \"conflict with another overlay\"\n```\n\n## Limitations and Considerations\n\n* **Resource Scope**: NodeOverlays can only add extended resources; they cannot modify or remove standard resources (CPU, memory, storage)\n* **Actual vs. Simulated**: Capacity modifications only affect Karpenter's scheduling simulation; actual node resources must be configured through other means\n* **Pricing vs. Billing**: Price adjustments influence Karpenter's scheduling decisions but don't affect actual cloud provider billing\n* **Alpha Status**: NodeOverlays are currently in alpha (v1alpha1) and the API may change in future versions"
  },
  {
    "path": "website/content/en/v1.8/concepts/nodepools.md",
    "content": "---\ntitle: \"NodePools\"\nlinkTitle: \"NodePools\"\nweight: 10\ndescription: >\n  Configure Karpenter with NodePools\n---\n\nWhen you first installed Karpenter, you set up a default NodePool. The NodePool sets constraints on the nodes that can be created by Karpenter and the pods that can run on those nodes. The NodePool can be set to do things like:\n\n* Define taints to limit the pods that can run on nodes Karpenter creates\n* Define any startup taints to inform Karpenter that it should taint the node initially, but that the taint is temporary.\n* Limit node creation to certain zones, instance types, and computer architectures\n* Set defaults for node expiration\n\nYou can change your NodePool or add other NodePools to Karpenter.\nHere are things you should know about NodePools:\n\n* Karpenter won't do anything if there is not at least one NodePool configured.\n* Each NodePool that is configured is looped through by Karpenter.\n* If Karpenter encounters a taint in the NodePool that is not tolerated by a Pod, Karpenter won't use that NodePool to provision the pod.\n* If Karpenter encounters a startup taint in the NodePool 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.\n* It is recommended to create NodePools that are mutually exclusive. So no Pod should match multiple NodePools. If multiple NodePools are matched, Karpenter will use the NodePool with the highest [weight](#specweight).\n\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nObjects for setting Kubelet features have been moved from the NodePool spec to the EC2NodeClasses spec, to not require other Karpenter providers to support those features.\n{{% /alert %}}\n\nFor some example `NodePool` configurations, see the [examples in the Karpenter GitHub repository](https://github.com/aws/karpenter/blob/main/examples/v1/).\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\nspec:\n  # Template section that describes how to template out NodeClaim resources that Karpenter will provision\n  # Karpenter will consider this template to be the minimum requirements needed to provision a Node using this NodePool\n  # It will overlay this NodePool with Pods that need to schedule to further constrain the NodeClaims\n  # Karpenter will provision to launch new Nodes for the cluster\n  template:\n    metadata:\n      # Labels are arbitrary key-values that are applied to all nodes\n      labels:\n        billing-team: my-team\n\n      # Annotations are arbitrary key-values that are applied to all nodes\n      annotations:\n        example.com/owner: \"my-team\"\n    spec:\n      # References the Cloud Provider's NodeClass resource, see your cloud provider specific documentation\n      nodeClassRef:\n        group: karpenter.k8s.aws  # Updated since only a single version will be served\n        kind: EC2NodeClass\n        name: default\n\n      # Provisioned nodes will have these taints\n      # Taints may prevent pods from scheduling if they are not tolerated by the pod.\n      taints:\n        - key: example.com/special-taint\n          effect: NoSchedule\n\n      # Provisioned nodes will have these taints, but pods do not need to tolerate these taints to be provisioned by this\n      # NodePool. These taints are expected to be temporary and some other entity (e.g. a DaemonSet) is responsible for\n      # removing the taint after it has finished initializing the node.\n      startupTaints:\n        - key: example.com/another-taint\n          effect: NoSchedule\n\n      # The amount of time a Node can live on the cluster before being removed\n      # Avoiding long-running Nodes helps to reduce security vulnerabilities as well as to reduce the chance of issues that can plague Nodes with long uptimes such as file fragmentation or memory leaks from system processes\n      # You can choose to disable expiration entirely by setting the string value 'Never' here\n\n      # Note: changing this value in the nodepool will drift the nodeclaims.\n      expireAfter: 720h | Never\n\n      # The amount of time that a node can be draining before it's forcibly deleted. A node begins draining when a delete call is made against it, starting\n      # its finalization flow. Pods with TerminationGracePeriodSeconds will be deleted preemptively before this terminationGracePeriod ends to give as much time to cleanup as possible.\n      # If your pod's terminationGracePeriodSeconds is larger than this terminationGracePeriod, Karpenter may forcibly delete the pod\n      # before it has its full terminationGracePeriod to cleanup.\n\n      # Note: changing this value in the nodepool will drift the nodeclaims.\n      terminationGracePeriod: 48h\n\n      # Requirements that constrain the parameters of provisioned nodes.\n      # These requirements are combined with pod.spec.topologySpreadConstraints, pod.spec.affinity.nodeAffinity, pod.spec.affinity.podAffinity, and pod.spec.nodeSelector rules.\n      # Operators { In, NotIn, Exists, DoesNotExist, Gt, and Lt } are supported.\n      # https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#operators\n      requirements:\n        - key: \"karpenter.k8s.aws/instance-category\"\n          operator: In\n          values: [\"c\", \"m\", \"r\"]\n          # minValues here enforces the scheduler to consider at least that number of unique instance-category to schedule the pods.\n          # This field is ALPHA and can be dropped or replaced at any time\n          minValues: 2\n        - key: \"karpenter.k8s.aws/instance-family\"\n          operator: In\n          values: [\"m5\",\"m5d\",\"c5\",\"c5d\",\"c4\",\"r4\"]\n          minValues: 5\n        - key: \"karpenter.k8s.aws/instance-cpu\"\n          operator: In\n          values: [\"4\", \"8\", \"16\", \"32\"]\n        - key: \"karpenter.k8s.aws/instance-hypervisor\"\n          operator: In\n          values: [\"nitro\"]\n        - key: \"karpenter.k8s.aws/instance-generation\"\n          operator: Gt\n          values: [\"2\"]\n        - key: \"topology.kubernetes.io/zone\"\n          operator: In\n          values: [\"us-west-2a\", \"us-west-2b\"]\n        - key: \"kubernetes.io/arch\"\n          operator: In\n          values: [\"arm64\", \"amd64\"]\n        - key: \"karpenter.sh/capacity-type\"\n          operator: In\n          values: [\"spot\", \"on-demand\", \"reserved\"]\n\n  # Disruption section which describes the ways in which Karpenter can disrupt and replace Nodes\n  # Configuration in this section constrains how aggressive Karpenter can be with performing operations\n  # like rolling Nodes due to them hitting their maximum lifetime (expiry) or scaling down nodes to reduce cluster cost\n  disruption:\n    # Describes which types of Nodes Karpenter should consider for consolidation\n    # If using 'WhenEmptyOrUnderutilized', Karpenter will consider all nodes for consolidation and attempt to remove or replace Nodes when it discovers that the Node is empty or underutilized and could be changed to reduce cost\n    # If using `WhenEmpty`, Karpenter will only consider nodes for consolidation that contain no workload pods\n    consolidationPolicy: WhenEmptyOrUnderutilized | WhenEmpty\n\n    # The amount of time Karpenter should wait to consolidate a node after a pod has been added or removed from the node.\n    # You can choose to disable consolidation entirely by setting the string value 'Never' here\n    consolidateAfter: 1m | Never # Added to allow additional control over consolidation aggressiveness\n\n    # Budgets control the speed Karpenter can scale down nodes.\n    # Karpenter will respect the minimum of the currently active budgets, and will round up\n    # when considering percentages. Duration and Schedule must be set together.\n    budgets:\n    - nodes: 10%\n    # On Weekdays during business hours, don't do any deprovisioning.\n    - schedule: \"0 9 * * mon-fri\"\n      duration: 8h\n      nodes: \"0\"\n\n  # Resource limits constrain the total size of the pool.\n  # Limits prevent Karpenter from creating new instances once the limit is exceeded.\n  limits:\n    cpu: \"1000\"\n    memory: 1000Gi\n\n  # Priority given to the NodePool when the scheduler considers which NodePool\n  # to select. Higher weights indicate higher priority when comparing NodePools.\n  # Specifying no weight is equivalent to specifying a weight of 0.\n  weight: 10\nstatus:\n  conditions:\n    - type: Initialized\n      status: \"False\"\n      observedGeneration: 1\n      lastTransitionTime: \"2024-02-02T19:54:34Z\"\n      reason: NodeClaimNotLaunched\n      message: \"NodeClaim hasn't succeeded launch\"\n  resources:\n    cpu: \"20\"\n    memory: \"8192Mi\"\n    ephemeral-storage: \"100Gi\"\n```\n## metadata.name\nThe name of the NodePool.\n\n## spec.template.metadata.labels\nArbitrary key/value pairs to apply to all nodes.\n\n## spec.template.metadata.annotations\nArbitrary key/value pairs to apply to all nodes.\n\n## spec.template.spec.nodeClassRef\n\nThis field points to the Cloud Provider NodeClass resource. See [EC2NodeClasses]({{<ref \"nodeclasses\" >}}) for details.\n\n## spec.template.spec.taints\n\nTaints to add to provisioned nodes. Pods that don't tolerate those taints could be prevented from scheduling.\nSee [Taints and Tolerations](https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/) for details.\n\n## spec.template.spec.startupTaints\n\nTaints that are added to nodes to indicate that a certain condition must be met, such as starting an agent or setting up networking, before the node is can be initialized.\nThese taints must be cleared before pods can be deployed to a node.\n\n## spec.template.spec.expireAfter\n\nThe amount of time a Node can live on the cluster before being deleted by Karpenter. Nodes will begin draining once it's expiration has been hit.\n\n## spec.template.spec.terminationGracePeriod\n\nThe amount of time a Node can be draining before Karpenter forcibly cleans up the node. Pods blocking eviction like PDBs and do-not-disrupt will be respected during draining until the `terminationGracePeriod` is reached, where those pods will be forcibly deleted.\n\n## spec.template.spec.requirements\n\nKubernetes 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 NodePool API.\n\nIn 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).\n\nThese well-known labels may be specified at the NodePool level, or in a workload definition (e.g., nodeSelector on a pod.spec). Nodes are chosen using both the NodePool'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 NodePool's requirements. If a requirement is not defined for a well known label, any value available to the cloud provider may be chosen.\n\nFor example, an instance type may be specified using a nodeSelector in a pod spec. If the instance type requested is not included in the NodePool list and the NodePool has instance type requirements, Karpenter will not create a node or schedule the pod.\n\n### Well-Known Labels\n\n#### Instance Types\n\n- key: `node.kubernetes.io/instance-type`\n- key: `karpenter.k8s.aws/instance-family`\n- key: `karpenter.k8s.aws/instance-category`\n- key: `karpenter.k8s.aws/instance-generation`\n- key: `karpenter.k8s.aws/instance-capability-flex`\n\nGenerally, 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.\n\nReview [AWS instance types](../../reference/instance-types). Most instance types are supported with the exclusion of [non-HVM](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/virtualization_types.html).\n\n#### Availability Zones\n\n- key: `topology.kubernetes.io/zone`\n- value example: `us-east-1c`\n- value list: `aws ec2 describe-availability-zones --region <region-name>`\n\nKarpenter 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.\n\n[Learn more about Availability Zone\nIDs.](https://docs.aws.amazon.com/ram/latest/userguide/working-with-az-ids.html)\n\n#### Architecture\n\n- key: `kubernetes.io/arch`\n- values\n  - `amd64`\n  - `arm64`\n\nKarpenter supports `amd64` nodes, and `arm64` nodes.\n\n#### Operating System\n - key: `kubernetes.io/os`\n - values\n   - `linux`\n   - `windows`\n\nKarpenter supports `linux` and `windows` operating systems.\n\n#### Capacity Type\n\n- key: `karpenter.sh/capacity-type`\n- values\n  - `spot`\n  - `on-demand`\n  - `reserved`\n\nKarpenter supports specifying capacity type, which is analogous to [EC2 purchase options](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-purchasing-options.html). Note that the `reserved` capacity type refers to [capacity reservations](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/capacity-reservation-overview.html) (on-demand capacity reservations and capacity blocks) not [reserved instances](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-reserved-instances.html) (RIs).\n\nIf a NodePool is compatible with multiple capacity types, Karpenter will prioritize `reserved` capacity, followed by `spot`, then finally `on-demand`.\nIf the provider API (e.g. EC2 Fleet's API) indicates capacity is unavailable, Karpenter caches that result across all attempts to provision EC2 capacity for that instance type and zone for the next 3 minutes.\nIf there are no other possible offerings available for a higher priority capacity type, Karpenter will attempt to fallback to a lower priority capacity type, generally within milliseconds.\n\nKarpenter also allows `karpenter.sh/capacity-type` to be used as a topology key for enforcing topology-spread.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nThere is currently a limit of 100 on the total number of requirements on both the NodePool and the NodeClaim. It's important to note that `spec.template.metadata.labels` are also propagated as requirements on the NodeClaim when it's created, meaning that you can't have more than 100 requirements and labels combined set on your NodePool.\n{{% /alert %}}\n\n### Min Values\n\nAlong with the combination of [key,operator,values] in the requirements, Karpenter also supports `minValues` in the NodePool requirements block, allowing the scheduler to be aware of user-specified flexibility minimums while scheduling pods to a cluster. Depending on the policy configured via the flag `--min-values-policy` or environment variable `MIN_VALUES_POLICY`, if Karpenter cannot meet this minimum flexibility for each key when scheduling a pod, it will either fail the scheduling loop for that NodePool, either falling back to another NodePool which meets the pod requirements or failing scheduling the pod altogether (when policy is set to `Strict`) or relax `minValues` until they can be met (when policy is set to `BestEffort`).\n\nFor example, the below spec will use spot instance type for all provisioned instances and enforces `minValues` to various keys where it is defined\ni.e at least 2 unique instance families from [c,m,r], 5 unique instance families [eg: \"m5\",\"m5d\",\"r4\",\"c5\",\"c5d\",\"c4\" etc], 10 unique instance types [eg: \"c5.2xlarge\",\"c4.xlarge\" etc] is required for scheduling the pods.\n\n```yaml\nspec:\n  template:\n    spec:\n      requirements:\n        - key: kubernetes.io/arch\n          operator: In\n          values: [\"amd64\"]\n        - key: kubernetes.io/os\n          operator: In\n          values: [\"linux\"]\n        - key: karpenter.k8s.aws/instance-category\n          operator: In\n          values: [\"c\", \"m\", \"r\"]\n          minValues: 2\n        - key: karpenter.k8s.aws/instance-family\n          operator: Exists\n          minValues: 5\n        - key: node.kubernetes.io/instance-type\n          operator: Exists\n          minValues: 10\n        - key: karpenter.k8s.aws/instance-generation\n          operator: Gt\n          values: [\"2\"]\n```\n\nNote that `minValues` can be used with multiple operators and multiple requirements. And if the `minValues` are defined with multiple operators for the same requirement key, scheduler considers the max of all the `minValues` for that requirement. For example, the below spec requires scheduler to consider at least 5 instance-family to schedule the pods.\n\n```yaml\nspec:\n  template:\n    spec:\n      requirements:\n        - key: kubernetes.io/arch\n          operator: In\n          values: [\"amd64\"]\n        - key: kubernetes.io/os\n          operator: In\n          values: [\"linux\"]\n        - key: karpenter.k8s.aws/instance-category\n          operator: In\n          values: [\"c\", \"m\", \"r\"]\n          minValues: 2\n        - key: karpenter.k8s.aws/instance-family\n          operator: Exists\n          minValues: 5\n        - key: karpenter.k8s.aws/instance-family\n          operator: In\n          values: [\"m5\",\"m5d\",\"c5\",\"c5d\",\"c4\",\"r4\"]\n          minValues: 3\n        - key: node.kubernetes.io/instance-type\n          operator: Exists\n          minValues: 10\n        - key: karpenter.k8s.aws/instance-generation\n          operator: Gt\n          values: [\"2\"]\n```\n\n{{% alert title=\"Recommended\" color=\"primary\" %}}\nKarpenter allows you to be extremely flexible with your NodePools by only constraining your instance types in ways that are absolutely necessary for your cluster. By default, Karpenter will enforce that you specify the `spec.template.spec.requirements` field, but will not enforce that you specify any requirements within the field. If you choose to specify `requirements: []`, this means that you will completely flexible to _all_ instance types that your cloud provider supports.\n\nThough Karpenter doesn't enforce these defaults, for most use-cases, we recommend that you specify _some_ requirements to avoid odd behavior or exotic instance types. Below, is a high-level recommendation for requirements that should fit the majority of use-cases for generic workloads\n\n```yaml\nspec:\n  template:\n    spec:\n      requirements:\n        - key: kubernetes.io/arch\n          operator: In\n          values: [\"amd64\"]\n        - key: kubernetes.io/os\n          operator: In\n          values: [\"linux\"]\n        - key: karpenter.sh/capacity-type\n          operator: In\n          values: [\"on-demand\"]\n        - key: karpenter.k8s.aws/instance-category\n          operator: In\n          values: [\"c\", \"m\", \"r\"]\n        - key: karpenter.k8s.aws/instance-generation\n          operator: Gt\n          values: [\"2\"]\n```\n\n{{% /alert %}}\n\n\n## spec.disruption\n\nYou can configure Karpenter to disrupt Nodes through your NodePool in multiple ways. You can use `spec.disruption.consolidationPolicy`, `spec.disruption.consolidateAfter`, or `spec.template.spec.expireAfter`.\nYou can also rate limit Karpenter's disruption through the NodePool's `spec.disruption.budgets`.\nRead [Disruption]({{<ref \"disruption\" >}}) for more.\n\n## spec.limits\n\nThe NodePool spec includes a limits section (`spec.limits`), which constrains the maximum amount of resources that the NodePool can consume.\n\nIf the `NodePool.spec.limits` section is unspecified, it means that there is no default limitation on resource allocation. In this case, the maximum resource consumption is governed by the quotas set by your cloud provider. If a limit has been exceeded, nodes provisioning is prevented until some nodes have been terminated.\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\nspec:\n  template:\n    spec:\n      requirements:\n        - key: karpenter.sh/capacity-type\n          operator: In\n          values: [\"spot\"]\n  limits:\n    cpu: 1000\n    memory: 1000Gi\n    nvidia.com/gpu: 2\n```\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nKarpenter provisioning is highly parallel. Because of this, limit checking is eventually consistent, which can result in overrun during rapid scale outs.\n{{% /alert %}}\n\nCPU 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.\n\nMemory limits are described with a [`BinarySI` value, such as 1000Gi.](https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/#meaning-of-memory)\n\nYou can view the current consumption of cpu and memory on your cluster by running:\n```\nkubectl get nodepool -o=jsonpath='{.items[0].status}'\n```\n\nReview 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`.\n\n## spec.weight\n\nKarpenter allows you to describe NodePool 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).\n\nFor more information on weighting NodePools, see the [Weighted NodePools section]({{<ref \"scheduling#weighted-nodepools\" >}}) in the scheduling docs.\n\n## status.conditions\n[Conditions](https://github.com/kubernetes/apimachinery/blob/f14778da5523847e4c07346e3161a4b4f6c9186e/pkg/apis/meta/v1/types.go#L1523) objects add observability features to Karpenter.\n* The `status.conditions.type` object reflects node status, such as `Initialized` or `Available`.\n* The status of the condition, `status.conditions.status`, indicates if the condition is `True` or `False`.\n* The `status.conditions.observedGeneration` indicates  if the instance is out of date with the current state of `.metadata.generation`.\n* The `status.conditions.lastTransitionTime` object contains a programatic identifier that indicates the time of the condition's previous transition.\n* The `status.conditions.reason` object indicates the reason for the condition's previous transition.\n* The `status.conditions.message` object provides human-readable details about the condition's previous transition.\n\nNodePools have the following status conditions:\n\n| Condition Type      | Description                                                                                                                                       |\n|---------------------|---------------------------------------------------------------------------------------------------------------------------------------------------|\n| NodeClassReady      | Underlying nodeClass is ready                                                                                                                     |\n| ValidationSucceeded | NodePool CRD validation succeeded                                                                                                                 |\n| Ready               | Top level condition that indicates if the nodePool is ready. This condition will not be true until all the other conditions on nodePool are true. |\n\nIf a NodePool is not ready, it will not be considered for scheduling.\n\n## status.resources\nObjects under `status.resources` provide information about the status of resources such as `cpu`, `memory`, and `ephemeral-storage`.\n\n## Examples\n\n### Isolating Expensive Hardware\n\nA NodePool can be set up to only provision nodes on particular processor types.\nThe following example sets a taint that only allows pods with tolerations for Nvidia GPUs to be scheduled:\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: gpu\nspec:\n  disruption:\n    consolidationPolicy: WhenEmptyOrUnderutilized\n  template:\n    spec:\n      requirements:\n      - key: node.kubernetes.io/instance-type\n        operator: In\n        values: [\"p3.8xlarge\", \"p3.16xlarge\"]\n      taints:\n      - key: nvidia.com/gpu\n        value: \"true\"\n        effect: NoSchedule\n```\nIn order for a pod to run on a node defined in this NodePool, it must tolerate `nvidia.com/gpu` in its pod spec.\n\n### Cilium Startup Taint\n\nPer the Cilium [docs](https://docs.cilium.io/en/stable/installation/taints/#taint-effects), 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.\n\nFailure to provide accurate `startupTaints` can result in Karpenter continually provisioning new nodes. When the new node joins and the startup taint that Karpenter is unaware of is added, Karpenter now considers the pending pod to be unschedulable to this node. Karpenter will attempt to provision yet another new node to schedule the pending pod.\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: cilium-startup\nspec:\n  disruption:\n    consolidationPolicy: WhenEmptyOrUnderutilized\n  template:\n    spec:\n      startupTaints:\n      - key: node.cilium.io/agent-not-ready\n        value: \"true\"\n        effect: NoExecute\n```\n"
  },
  {
    "path": "website/content/en/v1.8/concepts/scheduling.md",
    "content": "---\ntitle: \"Scheduling\"\nlinkTitle: \"Scheduling\"\nweight: 40\ndescription: >\n  Learn about scheduling workloads with Karpenter\n---\n\nIf 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.\nHowever, 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.\nReasons for constraining where your pods run could include:\n\n* Needing to run in zones where dependent applications or storage are available\n* Requiring certain kinds of processors or other hardware\n* Wanting to use techniques like topology spread to help ensure high availability\n\nYour Cloud Provider defines the first layer of constraints, including all instance types, architectures, zones, and purchase types available to its cloud.\nThe cluster administrator adds the next layer of constraints by creating one or more NodePools.\nThe final layer comes from you adding specifications to your Kubernetes pod deployments.\nPod scheduling constraints must fall within a NodePool's constraints or the pods will not deploy.\nFor example, if the NodePool sets limits that allow only a particular zone to be used, and a pod asks for a different zone, it will not be scheduled.\n\nConstraints you can request include:\n\n* **Resource requests**: Request that certain amount of memory or CPU be available.\n* **Node selection**: Choose to run on a node that is has a particular label (`nodeSelector`).\n* **Node affinity**: Draws a pod to run on nodes with particular attributes (affinity).\n* **Topology spread**: Use topology spread to help ensure availability of the application.\n* **Pod affinity/anti-affinity**: Draws pods towards or away from topology domains based on the scheduling of other pods.\n\nKarpenter supports standard Kubernetes scheduling constraints.\nThis allows you to define a single set of rules that apply to both existing and provisioned capacity.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nKarpenter supports specific [Well-Known Labels, Annotations and Taints](https://kubernetes.io/docs/reference/labels-annotations-taints/) that are useful for scheduling.\n{{% /alert %}}\n\n## Resource requests\n\nWithin a Pod spec, you can both make requests and set limits on resources a pod needs, such as CPU and memory.\nFor example:\n\n```yaml\napiVersion: v1\nkind: Pod\nmetadata:\n  name: myapp\nspec:\n  containers:\n  - name: app\n    image: myimage\n    resources:\n      requests:\n        memory: \"128Mi\"\n        cpu: \"500m\"\n      limits:\n        memory: \"256Mi\"\n        cpu: \"1000m\"\n```\nIn this example, the container is requesting 128MiB of memory and .5 CPU.\nIts limits are set to 256MiB of memory and 1 CPU.\nInstance type selection math only uses `requests`, but `limits` may be configured to enable resource oversubscription.\n\n\nSee [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 [NodePools]({{<ref \"./nodepools\" >}}) for a list of supported resources.\n\n### Accelerators/GPU Resources\n\nAccelerator (e.g., GPU) values include\n- `nvidia.com/gpu`\n- `amd.com/gpu`\n- `aws.amazon.com/neuron`\n- `aws.amazon.com/neuroncore`\n- `habana.ai/gaudi`\n\nKarpenter supports accelerators, such as GPUs.\n\nAdditionally, include a resource requirement in the workload manifest. This will cause the GPU dependent pod to be scheduled onto the appropriate node.\n\nHere is an example of an accelerator resource in a workload manifest (e.g., pod):\n\n```yaml\nspec:\n  template:\n    spec:\n      containers:\n      - resources:\n          limits:\n            nvidia.com/gpu: \"1\"\n```\n{{% alert title=\"Note\" color=\"primary\" %}}\nIf you are provisioning nodes that will utilize accelerators/GPUs, you need to deploy the appropriate device plugin daemonset.\nWithout the respective device plugin daemonset, Karpenter will not see those nodes as initialized.\nRefer 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:\n* `nvidia.com/gpu`: [NVIDIA device plugin for Kubernetes](https://github.com/NVIDIA/k8s-device-plugin)\n* `amd.com/gpu`: [AMD GPU device plugin for Kubernetes](https://github.com/RadeonOpenCompute/k8s-device-plugin)\n* `aws.amazon.com/neuron`/`aws.amazon.com/neuroncore`: [AWS Neuron device plugin for Kubernetes](https://awsdocs-neuron.readthedocs-hosted.com/en/latest/containers/kubernetes-getting-started.html#neuron-device-plugin)\n* `habana.ai/gaudi`: [Habana device plugin for Kubernetes](https://github.com/HabanaAI/habanalabs-k8s-device-plugin)\n  {{% /alert %}}\n\n#### AWS Neuron Resources\n\nThe [Neuron scheduler extension](https://awsdocs-neuron.readthedocs-hosted.com/en/latest/containers/kubernetes-getting-started.html#neuron-scheduler-extension) is required for pods that require more than one Neuron core (`aws.amazon.com/neuroncore`) or device (`aws.amazon.com/neuron`) resource, but less than all available Neuron cores or devices on a node. From the AWS Neuron documentation:\n\n> The Neuron scheduler extension finds sets of directly connected devices with minimal communication latency when scheduling containers. On Inf1 and Inf2 instance types where Neuron devices are connected through a ring topology, the scheduler finds sets of contiguous devices. For example, for a container requesting 3 Neuron devices the scheduler might assign Neuron devices 0,1,2 to the container if they are available but never devices 0,2,4 because those devices are not directly connected. On Trn1.32xlarge and Trn1n.32xlarge instance types where devices are connected through a 2D torus topology, the Neuron scheduler enforces additional constraints that containers request 1, 4, 8, or all 16 devices. If your container requires a different number of devices, such as 2 or 5, we recommend that you use an Inf2 instance instead of Trn1 to benefit from more advanced topology.\n\nHowever, Karpenter is not aware of the decisions made by the Neuron scheduler extension which precludes it from making any optimizations to consolidate and bin pack pods requiring Neuron resources. To ensure Karpenter's bin-packing is consistent with the decisions made by the scheduler extension, containers must have like-sized, power of 2 requests (e.g. 1, 2, 4, etc). Failing to do so may result in permanently pending pods.\n\n### Pod ENI Resources (Security Groups for Pods)\n[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.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nYou 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.\n{{% /alert %}}\n{{% alert title=\"Note\" color=\"primary\" %}}\nIf you've enabled [Security Groups per Pod](https://aws.github.io/aws-eks-best-practices/networking/sgpp/), one of the instance's ENIs is reserved. To avoid discrepancies between the `maxPods` value and the node's supported pod density, you need to set [RESERVED_ENIS]({{<ref \"../reference/settings\" >}})=1.\n{{% /alert %}}\n\nHere is an example of a pod-eni resource defined in a deployment manifest:\n```\nspec:\n  template:\n    spec:\n      containers:\n      - resources:\n          limits:\n            vpc.amazonaws.com/pod-eni: \"1\"\n```\n\n{{% alert title=\"Windows Support Notice\" color=\"warning\" %}}\nSecurity groups for pods are [currently unsupported for Windows nodes](https://docs.aws.amazon.com/eks/latest/userguide/security-groups-for-pods.html)\n{{% /alert %}}\n\n## Selecting nodes\n\nWith `nodeSelector` you can ask for a node that matches selected key-value pairs.\nThis can include well-known labels or custom labels you create yourself.\n\nYou 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.\n\n### Labels\nWell-known labels may be specified as NodePool requirements or pod scheduling constraints. You can also define your own custom labels by specifying `requirements` or `labels` on your NodePool and select them using `nodeAffinity` or `nodeSelectors` on your Pods.\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nTake 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.\n{{% /alert %}}\n\n#### Well-Known Labels\n\n| Label                                                          | Example              | Description                                                                                                                                                                                                                               |\n| -------------------------------------------------------------- |----------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| 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))                                                                                               |\n| node.kubernetes.io/instance-type                               | g4dn.8xlarge         | Instance types are defined by your cloud provider ([aws](https://aws.amazon.com/ec2/instance-types/))                                                                                                                                     |\n| node.kubernetes.io/windows-build                               | 10.0.17763           | Windows OS build in the format \"MajorVersion.MinorVersion.BuildNumber\". Can be `10.0.17763` for WS2019, or `10.0.20348` for WS2022. ([k8s](https://kubernetes.io/docs/reference/labels-annotations-taints/#nodekubernetesiowindows-build)) |\n| kubernetes.io/os                                               | linux                | Operating systems are defined by [GOOS values](https://github.com/golang/go/blob/master/src/internal/syslist/syslist.go) (`KnownOS`) on the instance                                                                                      |\n| kubernetes.io/arch                                             | amd64                | Architectures are defined by [GOARCH values](https://github.com/golang/go/blob/master/src/internal/syslist/syslist.go) (`KnownArch`) on the instance                                                                                      |\n| karpenter.sh/capacity-type                                     | spot                 | Capacity types include `reserved`, `spot`, and `on-demand`                                                                                                                                                                                |\n| karpenter.sh/nodepool                                          | default              | The name of the nodepool used to provision the node.                                                                                                                                                                                      |\n| karpenter.k8s.aws/capacity-reservation-id                      | cr-56fac701cc1951b03 | [AWS Specific] The capacity reservation ID. Only present on reserved nodes.                                                                                                                                                               |\n| karpenter.k8s.aws/capacity-reservation-type                    | default              | [AWS Specific] The capacity reservation type. Can be `default` or `capacity-block`. Only present on reserved nodes.                                                                                                                       |\n| karpenter.k8s.aws/ec2nodeclass                                 | default              | [AWS Specific] The name of the ec2 nodeclass used to provision the node                                                                                                                                                                   |\n| karpenter.k8s.aws/instance-hypervisor                          | nitro                | [AWS Specific] Instance types that use a specific hypervisor                                                                                                                                                                              |\n| karpenter.k8s.aws/instance-encryption-in-transit-supported     | true                 | [AWS Specific] Instance types that support (or not) in-transit encryption                                                                                                                                                                 |\n| karpenter.k8s.aws/instance-category                            | g                    | [AWS Specific] Instance types of the same category, usually the string before the generation number                                                                                                                                       |\n| karpenter.k8s.aws/instance-generation                          | 4                    | [AWS Specific] Instance type generation number within an instance category                                                                                                                                                                |\n| karpenter.k8s.aws/instance-family                              | g4dn                 | [AWS Specific] Instance types of similar properties but different resource quantities                                                                                                                                                     |\n| karpenter.k8s.aws/instance-size                                | 8xlarge              | [AWS Specific] Instance types of similar resource quantities but different properties                                                                                                                                                     |\n| karpenter.k8s.aws/instance-cpu                                 | 32                   | [AWS Specific] Number of CPUs on the instance                                                                                                                                                                                             |\n| karpenter.k8s.aws/instance-cpu-manufacturer                    | aws                  | [AWS Specific] Name of the CPU manufacturer                                                                                                                                                                                               |\n| karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz       | 3600                 | [AWS Specific] The CPU clock speed, in MHz                                                                                                                                                                                                |\n| karpenter.k8s.aws/instance-memory                              | 131072               | [AWS Specific] Number of mebibytes of memory on the instance                                                                                                                                                                              |\n| karpenter.k8s.aws/instance-ebs-bandwidth                       | 9500                 | [AWS Specific] Number of [maximum megabits](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-optimized.html#ebs-optimization-performance) of EBS available on the instance                                                         |\n| 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                                                                           |\n| karpenter.k8s.aws/instance-pods                                | 110                  | [AWS Specific] Number of pods the instance supports                                                                                                                                                                                       |\n| karpenter.k8s.aws/instance-gpu-name                            | t4                   | [AWS Specific] Name of the GPU on the instance, if available                                                                                                                                                                              |\n| karpenter.k8s.aws/instance-gpu-manufacturer                    | nvidia               | [AWS Specific] Name of the GPU manufacturer                                                                                                                                                                                               |\n| karpenter.k8s.aws/instance-gpu-count                           | 1                    | [AWS Specific] Number of GPUs on the instance                                                                                                                                                                                             |\n| karpenter.k8s.aws/instance-gpu-memory                          | 16384                | [AWS Specific] Number of mebibytes of memory on the GPU                                                                                                                                                                                   |\n| karpenter.k8s.aws/instance-local-nvme                          | 900                  | [AWS Specific] Number of gibibytes of local nvme storage on the instance                                                                                                                                                                  |\n| karpenter.k8s.aws/instance-capability-flex                     | true                 | [AWS Specific] Instance with capacity flex                                                                                                                                                                                                |\n| topology.k8s.aws/zone-id                                       | use1-az1             | [AWS Specific] Globally consistent [zone id](https://docs.aws.amazon.com/global-infrastructure/latest/regions/az-ids.html)                                                                                                                |\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nKarpenter translates the following deprecated labels to their stable equivalents: `failure-domain.beta.kubernetes.io/zone`, `failure-domain.beta.kubernetes.io/region`, `beta.kubernetes.io/arch`, `beta.kubernetes.io/os`, and `beta.kubernetes.io/instance-type`.\n{{% /alert %}}\n\n#### User-Defined Labels\n\nKarpenter 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 NodePool requirements with the `Exists` operator:\n\n```yaml\nrequirements:\n  - key: user.defined.label/type\n    operator: Exists\n```\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nThere is currently a limit of 100 on the total number of requirements on both the NodePool and the NodeClaim. It's important to note that `spec.template.metadata.labels` are also propagated as requirements on the NodeClaim when it's created, meaning that you can't have more than 100 requirements and labels combined set on your NodePool.\n{{% /alert %}}\n\n#### Node selectors\n\nHere is an example of a `nodeSelector` for selecting nodes:\n\n```yaml\nnodeSelector:\n  topology.kubernetes.io/zone: us-west-2a\n  karpenter.sh/capacity-type: spot\n```\nThis example features a well-known label (`topology.kubernetes.io/zone`) and a label that is well known to Karpenter (`karpenter.sh/capacity-type`).\n\nIf you want to create a custom label, you should do that at the NodePool level.\nThen the pod can declare that custom label.\n\n\nSee [nodeSelector](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#nodeselector) in the Kubernetes documentation for details.\n\n## Preferences\n\nKarpenter is aware of preferences (node affinity, pod affinity, pod anti-affinity, and pod topology) and treats them as requirements in most circumstances. Karpenter uses these preferences when determining if a pod can schedule on a node (absent topology requirements), or when determining if a pod can be shifted to a new node.\n\nKarpenter starts by treating preferred affinities as required affinities when constructing requirements for a pod. When these requirements cannot be met, the pod's preferences are relaxed one-at-a-time by ascending weight (lowest weight is relaxed first), and the remaining requirements are tried again.\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter does not interpret preferred affinities as required when constructing topology requirements for scheduling to a node. If these preferences are necessary, required affinities should be used [as documented in Node Affinity](#node-affinity).\n{{% /alert %}}\n\n### Node affinity\n\nExamples below illustrate how to use Node affinity to include (`In`) and exclude (`NotIn`) objects.\nSee [Node affinity](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#node-affinity) for details.\nWhen setting rules, the following Node affinity types define how hard or soft each rule is:\n\n* **requiredDuringSchedulingIgnoredDuringExecution**: This is a hard rule that must be met.\n* **preferredDuringSchedulingIgnoredDuringExecution**: This is a preference, but the pod can run on a node where it is not guaranteed.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nPreferred affinities on pods can result in more nodes being created than expected because Karpenter will prefer to create new nodes to satisfy preferences, [see the preferences documentation](#preferences) for details.\n{{% /alert %}}\n\nThe `IgnoredDuringExecution` part of each tells the pod to keep running, even if conditions change on the node so the rules no longer matched.\nYou can think of these concepts as `required` and `preferred`, since Kubernetes never implemented other variants of these rules.\n\nAll examples below assume that the NodePool 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.\n\n```yaml\n affinity:\n   nodeAffinity:\n     requiredDuringSchedulingIgnoredDuringExecution:\n       nodeSelectorTerms:\n         - matchExpressions:\n           - key: \"topology.kubernetes.io/zone\"\n             operator: \"In\"\n             values: [\"us-west-2a\", \"us-west-2b\"]\n           - key: \"topology.kubernetes.io/zone\"\n             operator: \"In\"\n             values: [\"us-west-2b\"]\n```\n\nChanging the second operator to `NotIn` would allow the pod to run in `us-west-2a` only:\n\n```yaml\n           - key: \"topology.kubernetes.io/zone\"\n             operator: \"In\"\n             values: [\"us-west-2a\", \"us-west-2b\"]\n           - key: \"topology.kubernetes.io/zone\"\n             operator: \"NotIn\"\n             values: [\"us-west-2b\"]\n```\n\nContinuing to add to the example, `nodeAffinity` lets you define terms so if one term doesn't work it goes to the next one.\nHere, if `us-west-2a` is not available, the second term will cause the pod to run on a spot instance in `us-west-2d`.\n\n\n```yaml\n affinity:\n   nodeAffinity:\n     requiredDuringSchedulingIgnoredDuringExecution:\n       nodeSelectorTerms:\n         - matchExpressions: # OR\n           - key: \"topology.kubernetes.io/zone\" # AND\n             operator: \"In\"\n             values: [\"us-west-2a\", \"us-west-2b\"]\n           - key: \"topology.kubernetes.io/zone\" # AND\n             operator: \"NotIn\"\n             values: [\"us-west-2b\"]\n         - matchExpressions: # OR\n           - key: \"karpenter.sh/capacity-type\" # AND\n             operator: \"In\"\n             values: [\"spot\"]\n           - key: \"topology.kubernetes.io/zone\" # AND\n             operator: \"In\"\n             values: [\"us-west-2d\"]\n```\nIn general, Karpenter will go through each of the `nodeSelectorTerms` in order and take the first one that works.\nHowever, if Karpenter fails to provision on the first `nodeSelectorTerms`, it will try again using the second one.\nIf they all fail, Karpenter will fail to provision the pod.\nKarpenter will backoff and retry over time.\nSo if capacity becomes available, it will schedule the pod without user intervention.\n\n### Taints and tolerations\n\nTaints are the opposite of affinity.\nSetting 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 NodePool that was set up with a taint for only running pods that require a GPU, such as the following:\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: gpu\nspec:\n  template:\n    spec:\n      requirements:\n      - key: karpenter.k8s.aws/instance-family\n        operator: In\n        values:\n          - p3\n      taints:\n      - key: nvidia.com/gpu\n        value: \"true\"\n        effect: \"NoSchedule\"\n```\n\nFor a pod to request to run on a node that has this NodePool, it could set a toleration as follows:\n\n```yaml\napiVersion: v1\nkind: Pod\nmetadata:\n  name: mygpupod\nspec:\n  containers:\n  - name: gpuapp\n    resources:\n      requests:\n        nvidia.com/gpu: 1\n      limits:\n        nvidia.com/gpu: 1\n    image: mygpucontainer\n  tolerations:\n  - key: \"nvidia.com/gpu\"\n    operator: \"Exists\"\n    effect: \"NoSchedule\"\n```\nSee [Taints and Tolerations](https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/) in the Kubernetes documentation for details.\n\n### Topology Spread\n\nBy using the Kubernetes `topologySpreadConstraints` you can ask the NodePool 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.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nPreferred topology spread (`ScheduleAnyway`) can result in more nodes being created than expected because Karpenter will prefer to create new nodes to satisfy spread constraints, [see the preferences documentation](#preferences) for details.\n{{% /alert %}}\n\nFor example:\n\n```yaml\nspec:\n  topologySpreadConstraints:\n    - maxSkew: 1\n      topologyKey: \"topology.kubernetes.io/zone\"\n      whenUnsatisfiable: ScheduleAnyway\n      labelSelector:\n        matchLabels:\n          dev: jjones\n    - maxSkew: 1\n      topologyKey: \"kubernetes.io/hostname\"\n      whenUnsatisfiable: ScheduleAnyway\n      labelSelector:\n        matchLabels:\n          dev: jjones\n    - maxSkew: 1\n      topologyKey: \"karpenter.sh/capacity-type\"\n      whenUnsatisfiable: ScheduleAnyway\n      labelSelector:\n        matchLabels:\n          dev: jjones\n\n```\nAdding this to your podspec would result in:\n\n* Pods being spread across zones, hosts, and capacity-type (`topologyKey`).\n* 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.\n* No more than one pod difference in the number of pods on each host (`maxSkew`).\nFor example, if there were three nodes and five pods the pods could be spread 1, 2, 2 or 2, 1, 2 and so on.\nIf instead the maxSkew were 5, pods could be spread 5, 0, 0 or 3, 2, 0, or 2, 1, 2 and so on.\n\nThe three supported `topologyKey` values that Karpenter supports are:\n- `topology.kubernetes.io/zone`\n- `kubernetes.io/hostname`\n- `karpenter.sh/capacity-type`\n\nSee [Pod Topology Spread Constraints](https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/) for details.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nNodePools do not attempt to balance or rebalance the availability zones for their nodes. Availability zone balancing may be achieved by defining zonal Topology Spread Constraints for Pods that require multi-zone durability, and NodePools will respect these constraints while optimizing for compute costs.\n{{% /alert %}}\n\n### Pod affinity/anti-affinity\n\nBy using the `podAffinity` and `podAntiAffinity` configuration on a pod spec, you can inform the Karpenter scheduler of your desire for pods to schedule together or apart with respect to different topology domains.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nPreferred affinities on pods can result in more nodes being created than expected because Karpenter will prefer to create new nodes to satisfy preferences, [see the preferences documentation](#preferences) for details.\n{{% /alert %}}\n\nFor example:\n\n```yaml\nspec:\n  affinity:\n    podAffinity:\n      requiredDuringSchedulingIgnoredDuringExecution:\n      - labelSelector:\n          matchExpressions:\n          - key: system\n            operator: In\n            values:\n            - backend\n        topologyKey: topology.kubernetes.io/zone\n    podAntiAffinity:\n      requiredDuringSchedulingIgnoredDuringExecution:\n      - labelSelector:\n          matchLabels:\n            app: inflate\n        topologyKey: kubernetes.io/hostname\n```\n\nThe above pod affinity rule would cause the pod to only schedule in zones where a pod with the label `system=backend` is already running.\n\nThe 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.\n\nSee [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.\n\n### Persistent Volume Topology\n\nKarpenter automatically detects storage scheduling requirements and includes them in node launch decisions.\n\nIn 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).\nWhen 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`.\nIt randomly selects `us-west-2a`, provisions a node in that zone, and waits for kube-scheduler to bind the pod to the node.\nThe CSI driver creates a `PersistentVolume` according to the `PersistentVolumeClaim` and gives it a node affinity rule for `us-west-2a`.\n\nLater 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.\n\n```yaml\napiVersion: v1\nkind: Pod\nmetadata:\n  name: app\nspec:\n  containers: ...\n  volumes:\n    - name: storage\n      persistentVolumeClaim:\n        claimName: ebs-claim\n---\nkind: StorageClass\napiVersion: storage.k8s.io/v1\nmetadata:\n  name: ebs\nprovisioner: ebs.csi.aws.com\nvolumeBindingMode: WaitForFirstConsumer\nallowedTopologies:\n- matchLabelExpressions:\n  - key: topology.ebs.csi.aws.com/zone\n    values: [\"us-west-2a\", \"us-west-2b\"]\n---\napiVersion: v1\nkind: PersistentVolumeClaim\nmetadata:\n  name: ebs-claim\nspec:\n  accessModes:\n    - ReadWriteOnce\n  storageClassName: ebs\n  resources:\n    requests:\n      storage: 4Gi\n```\n\n{{% alert title=\"Note\" color=\"primary\" %}}\n☁️ AWS Specific\n\nThe 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`.\n{{% /alert %}}\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nThe 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)\n{{% /alert %}}\n\n## Weighted NodePools\n\nKarpenter allows you to order your NodePools using the `.spec.weight` field so that the Karpenter scheduler will attempt to schedule one NodePool before another.\n\n### Savings Plans and Reserved Instances\n\nIf 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.\n\nTo 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` field on the NodePool to limit the capacity that can be launched by this NodePool. Combined with the `.spec.weight` value, we can tell Karpenter to pull from instance types in the reserved NodePool before defaulting to generic instance types.\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: reserved-instance\nspec:\n  weight: 50\n  limits:\n    cpu: 100\n  template:\n    spec:\n      requirements:\n      - key: \"node.kubernetes.io/instance-type\"\n        operator: In\n        values: [\"c4.large\"]\n---\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\nspec:\n  template:\n    spec:\n      requirements:\n      - key: karpenter.sh/capacity-type\n        operator: In\n        values: [\"spot\", \"on-demand\"]\n      - key: kubernetes.io/arch\n        operator: In\n        values: [\"amd64\"]\n```\n\n### Fallback\n\nPods 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.\n\nBy assigning a higher `.spec.weight` value and restricting a NodePool 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.\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\nspec:\n  weight: 50\n  template:\n    spec:\n      requirements:\n      - key: karpenter.sh/capacity-type\n        operator: In\n        values: [\"spot\", \"on-demand\"]\n      - key: kubernetes.io/arch\n        operator: In\n        values: [\"amd64\"]\n---\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: arm64-specific\nspec:\n  template:\n    spec:\n      requirements:\n      - key: karpenter.sh/capacity-type\n        operator: In\n        values: [\"spot\", \"on-demand\"]\n      - key: kubernetes.io/arch\n        operator: In\n        values: [\"arm64\"]\n      - key: node.kubernetes.io/instance-type\n        operator: In\n        values: [\"a1.large\", \"a1.xlarge\"]\n```\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nBased on the way that Karpenter performs pod batching and bin packing, it is not guaranteed that Karpenter will always choose the highest priority NodePool given specific requirements. For example, if a pod can't be scheduled with the highest priority NodePool, it will force creation of a node using a lower priority NodePool, allowing 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.\n{{% /alert %}}\n\n## Advanced Scheduling Techniques\n\n### Scheduling based on Node Resources\n\nYou may want pods to be able to request resources of nodes that Kubernetes natively does not provide as a schedulable resource or that are aspects of certain nodes like\nHigh Performance Networking or NVME Local Storage. You can use Karpenter's Well-Known Labels to accomplish this.\n\nThese can further be applied at the NodePool or Workload level using Requirements, NodeSelectors or Affinities\n\nPod example of requiring any NVME disk:\n```yaml\n...\n affinity:\n   nodeAffinity:\n     requiredDuringSchedulingIgnoredDuringExecution:\n       nodeSelectorTerms:\n         - matchExpressions:\n           - key: \"karpenter.k8s.aws/instance-local-nvme\"\n             operator: \"Exists\"\n...\n```\n\nNodePool Example:\n```yaml\n...\nrequirement:\n  - key: \"karpenter.k8s.aws/instance-local-nvme\"\n    operator: \"Exists\"\n...\n```\n\nPod example of requiring at least 100GB of NVME disk:\n```yaml\n...\n affinity:\n   nodeAffinity:\n     requiredDuringSchedulingIgnoredDuringExecution:\n       nodeSelectorTerms:\n         - matchExpressions:\n            - key: \"karpenter.k8s.aws/instance-local-nvme\"\n              operator: Gt\n              values: [\"99\"]\n...\n```\n\nNodePool Example:\n```yaml\n...\nrequirement:\n  - key: \"karpenter.k8s.aws/instance-local-nvme\"\n    operator: Gt\n    values: [\"99\"]\n...\n```\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nKarpenter cannot yet take into account ephemeral-storage requests while scheduling pods, we're purely requesting attributes of nodes and getting X amount of resources\nas a side effect. You may need to tweak schedulable resources like CPU or Memory to achieve desired fit, especially if Consolidation is enabled.\n\nYour NodeClass will also need to support automatically formatting and mounting NVME Instance Storage if available.\n{{% /alert %}}\n\nPod example of requiring at least 50 Gbps of network bandwidth:\n```yaml\n...\n affinity:\n   nodeAffinity:\n     requiredDuringSchedulingIgnoredDuringExecution:\n       nodeSelectorTerms:\n         - matchExpressions:\n            - key: \"karpenter.k8s.aws/instance-network-bandwidth\"\n              operator: Gt\n              values: [\"49999\"]\n...\n```\n\nNodePool Example:\n```yaml\n...\nrequirement:\n  - key: \"karpenter.k8s.aws/instance-network-bandwidth\"\n    operator: Gt\n    values: [\"49999\"]\n...\n```\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nIf using Gt/Lt operators, make sure to use values under the actual label values of the desired resource.\n{{% /alert %}}\n\n### `Exists` Operator\n\nThe `Exists` operator can be used on a NodePool to provide workload segregation across nodes.\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nspec:\n  template:\n    spec:\n      requirements:\n        - key: company.com/team\n          operator: Exists\n...\n```\n\nWith this requirement on the NodePool, workloads can specify the same key (e.g. `company.com/team`) with custom values (e.g. `team-a`, `team-b`, etc.) as a required `nodeAffinity` or `nodeSelector`. Karpenter will then apply the key/value pair to nodes it launches dynamically based on the pod's node requirements.\n\nIf each set of pods that can schedule with this NodePool specifies this key in its `nodeAffinity` or `nodeSelector`, you can isolate pods onto different nodes based on their values. This provides a way to more dynamically isolate workloads without requiring a unique NodePool for each workload subset.\n\nFor example, providing the following `nodeSelectors` would isolate the pods for each of these deployments on different nodes.\n\n#### Team A Deployment\n\n```yaml\napiVersion: v1\nkind: Deployment\nmetadata:\n  name: team-a-deployment\nspec:\n  replicas: 5\n  template:\n    spec:\n      nodeSelector:\n        company.com/team: team-a\n```\n\n#### Team A Node\n\n```yaml\napiVersion: v1\nkind: Node\nmetadata:\n  labels:\n    company.com/team: team-a\n```\n\n#### Team B Deployment\n\n```yaml\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: team-b-deployment\nspec:\n  replicas: 5\n  template:\n    spec:\n      nodeSelector:\n        company.com/team: team-b\n```\n\n#### Team B Node\n\n```yaml\napiVersion: v1\nkind: Node\nmetadata:\n  labels:\n    company.com/team: team-b\n```\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nIf a workload matches the NodePool but doesn't specify a label, Karpenter will generate a random label for the node.\n{{% /alert %}}\n\n### On-Demand/Spot Ratio Split\n\nTaking 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.\n\nTo do this, we create one NodePool 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 NodePool and one value for the on-demand NodePool.  When we spread across our new label evenly, we'll end up with a ratio of 4:1 spot to on-demand nodes.\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nThis 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.\n{{% /alert %}}\n\n#### NodePools\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: spot\nspec:\n  template:\n    spec:\n      requirements:\n      - key: \"karpenter.sh/capacity-type\"\n        operator: In\n        values: [\"spot\"]\n      - key: capacity-spread\n        operator: In\n        values:\n        - \"2\"\n        - \"3\"\n        - \"4\"\n        - \"5\"\n---\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: on-demand\nspec:\n  template:\n    spec:\n      requirements:\n      - key: \"karpenter.sh/capacity-type\"\n        operator: In\n        values: [\"on-demand\"]\n      - key: capacity-spread\n        operator: In\n        values:\n        - \"1\"\n```\n\n#### Workload Topology Spread Constraint\n\n```yaml\ntopologySpreadConstraints:\n- maxSkew: 1\n  topologyKey: capacity-spread\n  whenUnsatisfiable: DoNotSchedule\n  labelSelector:\n    ...\n```\n"
  },
  {
    "path": "website/content/en/v1.8/contributing/_index.md",
    "content": "---\ntitle: \"Contributing\"\nlinkTitle: \"Contributing\"\nweight: 40\ndescription: >\n  Learn about how to contribute to Karpenter\n---\n"
  },
  {
    "path": "website/content/en/v1.8/contributing/community-meetings.md",
    "content": "---\ntitle: \"Community Meetings\"\nlinkTitle: \"Community Meetings\"\nweight: 10\ndescription: >\n  Join the Karpenter Community Meetings\n---\n\nKarpenter hosts two types of regular community meetings to foster collaboration and maintain project health:\n\nThe **Working Group** meetings focus on project direction, technical discussions, and feature development. These bi-weekly sessions bring together contributors, users, and maintainers to review designs, plan releases, and address architectural decisions that shape Karpenter's future.\n\nThe **Issue Triage** meetings, held weekly, are dedicated to maintaining project health through focused issue management across our repositories. These sessions ensure proper prioritization, assignment coordination, and timely response to community contributions.\n\nMeeting times alternate to accommodate our global community. All interested participants are welcome to join, contribute, and learn more about Karpenter.\n\n### Working Group Meetings\n\nThe Karpenter Working Group meetings serve as a collaborative forum for project development, technical discussions, and community engagement. These sessions bring together contributors, users, and maintainers to shape the project's direction and ensure its continued success. Through these meetings, we align on architectural decisions, review critical features, and address community needs.\n\nKey focus areas include:\n- Review and discussion of design proposals and technical implementations\n- Planning of upcoming releases and feature roadmaps\n- Coordination between contributors and cross-team collaboration\n- Technical deep-dives on specific components and challenges\n- Discussion of user feedback and community requirements\n\nThe working group provides a platform for both synchronous decision-making and asynchronous follow-ups, ensuring the project maintains its technical excellence while growing its community impact.\n\nWorking group meetings will be held every other Thursday, alternating between a 3:00 PM PST (Americas-friendly) and 9:00 AM PST (Europe-friendly) start time.\nPlease refer to our [calendar](https://calendar.google.com/calendar/u/0?cid=N3FmZGVvZjVoZWJkZjZpMnJrMmplZzVqYmtAZ3JvdXAuY2FsZW5kYXIuZ29vZ2xlLmNvbQ) for an up-to-date schedule.\n\n### Issue Triage Meetings\n\nKarpenter is expanding our community meetings to include dedicated Issue Triage sessions alongside our regular Working Group meetings. This addition aims to improve issue management across both kubernetes-sigs/karpenter and karpenter-provider-aws repositories.\n\nThese weekly meetings rotate between repositories and time zones to accommodate our global community. These dedicated triage sessions focus on:\n- Issue prioritization\n- Assignment coordination\n- Discussion of complex issues\n- Maintaining repository health\n\nAn issue triage meeting for each repository will be held monthly, alternating between a 3:00 PM PST (Americas-friendly) and 9:00 AM PST (Europe-friendly) start time.\nPlease refer to our [calendar](https://calendar.google.com/calendar/u/0?cid=N3FmZGVvZjVoZWJkZjZpMnJrMmplZzVqYmtAZ3JvdXAuY2FsZW5kYXIuZ29vZ2xlLmNvbQ) for an up-to-date schedule.\n\n### Getting Involved\nAll community members are welcome to join these meetings. Meeting links and calendar invites are shared through our usual communication channels.\n\n- All invites are managed through our [Calendar](https://calendar.google.com/calendar/u/0?cid=N3FmZGVvZjVoZWJkZjZpMnJrMmplZzVqYmtAZ3JvdXAuY2FsZW5kYXIuZ29vZ2xlLmNvbQ).\n- 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.\n\n{{% alert title=\"Meeting Access\" %}}\nJoin our meetings using the following credentials:\n\n🔗 **Zoom**: [https://zoom.us/j/95618088729](https://zoom.us/j/95618088729)\n🆔 **Meeting ID**: 956 1808 8729\n🔑 **Passcode**: 77777\n\nNeed help? Contact the maintainers on Slack.\n{{% /alert %}}\n\nAdd future questions or read past discussions in our [Working Group Log](https://docs.google.com/document/d/18BT0AIMugpNpiSPJNlcAL2rv69yAE6Z06gUVj7v_clg).\n"
  },
  {
    "path": "website/content/en/v1.8/contributing/design-guide.md",
    "content": "---\ntitle: \"Design Guide\"\nlinkTitle: \"Design Guide\"\nweight: 20\ndescription: >\n  Read this before making large changes to Karpenter\n---\n\nTechnical 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.\n\nDesigns don’t have to be long or formal, and should match the scope of the problem they’re trying to solve.\n\n* Are there multiple potential solutions?\n* Will users need to be aware of the changes?\n* Would it be painful to discard a rejected implementation?\n* When in doubt, write a 1 pager.\n\n## Tell a Story\n\nA 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.\n\nYour story should include,\n\n* [Context] Include some technical background that helps readers think about your idea in context\n* [Problem] Clearly identify the problem to be solved and some guiding principles to help think about the solutions\n* [Solutions] Talk through different potential solutions and their tradeoffs. Include diagrams to clarify concepts\n* [Recommendation] Make a recommendation, but don’t be overly invested in it\n\nThe 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.\n\n## Gather Broad Feedback\n\nThe 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).\n\nThe 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.\n\nIt 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.\n\n## Simple Solutions to Complex Problems\n\nThe 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.\n\n## Common Gotchas\n\n### Does your change introduce new APIs?\n\nAPIs 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.\n\nThink 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.\n\nBuild minimal and maintainable APIs by:\n\n* Push back on requirements that introduces concepts for all users to solve problems for a few.\n* Identify an opinionated default that solves the majority of use cases.\n* Delay introducing a parameter into your API surface until users demand it; you can always add it later.\n* 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.\n* Take advantage of opportunities to refine APIs while the impact of backwards incompatibility is small\n\n### Does your change behave differently with different cloud providers?\n\nKubernetes 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.\n\nAchieving 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.\n\n### Does your change expose details users may rely on?\n\nKubernetes 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?\n\nBe 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.\n\n### Does your change have a risk of breaking an undocumented invariant?\n\nSystems 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.\n\n* Identify the fundamental reason the existing mechanism is insufficient and be able to explain it in plain terms.\n* Separate the new mechanism from the new feature that relies on it.\n* Clean up after yourself and avoid getting stuck halfway between old and new mechanisms.\n\n### Does your change impact performance?\n\nUsers 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.\n\n* Beware code that scales linearly with pods or nodes. Milliseconds in testing turn into seconds at scale.\n* Cloud provider read APIs can have surprisingly high latency and low limits, use caching to minimize calls.\n* Increases to memory and CPU usage increase capex cost for operators. Profile and optimize your implementations.\n"
  },
  {
    "path": "website/content/en/v1.8/contributing/development-guide.md",
    "content": "---\ntitle: \"Development Guide\"\nlinkTitle: \"Development Guide\"\nweight: 80\ndescription: >\n  Set up a Karpenter development environment\n---\n\n## Dependencies\n\nThe following tools are required for contributing to the Karpenter project.\n\n| Package                                                            | Version  | Install                                        |\n| ------------------------------------------------------------------ | -------- | ---------------------------------------------- |\n| [go](https://golang.org/dl/)                                       | v1.19+   | [Instructions](https://golang.org/doc/install) |\n| [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) |          | `brew install kubectl`                         |\n| [helm](https://helm.sh/docs/intro/install/)                        |          | `brew install helm`                            |\n| Other tools                                                        |          | `make toolchain`                               |\n\n## Developing\n\n### Setup / Teardown\n\nBased 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/).\n\n#### Locally\n\nOnce 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`\n\n```bash\nmake run\n```\n\n#### Inside a Kubernetes Cluster\n\nOnce you have your environment set up, to install Karpenter in the Kubernetes cluster specified in your `~/.kube/config`  run the following commands.\n\n```bash\nmake apply # Install Karpenter\nmake delete # Uninstall Karpenter\n```\n\n### Developer Loop\n\n* Make sure dependencies are installed\n    * Run `make codegen` to make sure yaml manifests are generated (requires a working set of AWS credentials, see [Specifying Credentials](https://docs.aws.amazon.com/sdk-for-go/v1/developer-guide/configuring-sdk.html#specifying-credentials))\n    * Run `make toolchain` to install cli tools for building and testing the project\n* You will need a personal development image repository (e.g. ECR)\n    * Make sure you have valid credentials to your development repository.\n    * `$KO_DOCKER_REPO` must point to your development repository\n    * Your cluster must have permissions to read from the repository\n\n### Build and Deploy\n\n*Note: these commands do not rely on each other and may be executed independently*\n\n```bash\nmake apply # quickly deploy changes to your cluster\nmake presubmit # run codegen, lint, and tests\n```\n\nIf you are only interested in building the Karpenter images and not deploying the updated release to your cluster immediately with Helm, you can run the following:\n\n```bash\nmake image # build and push the karpenter images\n```\n\n*Note: that this will produce a build with the version of https://github.com/kubernetes-sigs/karpenter in your local filesystem.\n\nYou can test out changes made in https://github.com/kubernetes-sigs/karpenter by replacing the dependency of https://github.com/aws/karpenter-provider-aws/.\nFor local changes, replace `$PATH_TO_KUBERNETES_SIGS_KARPENTER` with the relative or absolute path and run:\n\n```bash\ngo mod edit -replace sigs.k8s.io/karpenter=$PATH_TO_KUBERNETES_SIGS_KARPENTER\n```\n\nThen you can build your image using the previous steps.\n\n### Publishing Images Only\n\nIf you only need to build and publish an image to a container registry, run the following:\n\n```bash\nmake image # build and push the karpenter images\n```\nYou can test out changes made in https://github.com/kubernetes-sigs/karpenter by replacing the dependency of https://github.com/aws/karpenter-provider-aws/.\nFor local changes, replace `$PATH_TO_KUBERNETES_SIGS_KARPENTER` with the relative or absolute path and run:\n\n```bash\ngo mod edit -replace sigs.k8s.io/karpenter=$PATH_TO_KUBERNETES_SIGS_KARPENTER\n```\n\nThen you can build your image using the previous steps.\n\n*Note: you need to commit the go.mod changes before running `make image` for the changes to be picked up.\n\n### Testing\n\n```bash\nmake test       # E2E correctness tests\n```\n\n### Change Log Level\n\nBy default, `make apply` will set the log level to debug. You can change the log level by setting the log level in your Helm values.\n\n```bash\n--set logLevel=debug\n```\n\n### Debugging Metrics\n\nOSX:\n\n```bash\nopen http://localhost:8080/metrics && kubectl port-forward service/karpenter -n kube-system 8080\n```\n\nLinux:\n\n```bash\ngio open http://localhost:8080/metrics && kubectl port-forward service/karpenter -n karpenter 8080\n```\n\n### Tailing Logs\n\nWhile 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):\n\n```bash\nstern -n karpenter -l app.kubernetes.io/name=karpenter\n```\n\n## Environment specific setup\n\n### AWS\n\nFor local development on Karpenter you will need a Docker repo which can manage your images for Karpenter components.\nYou can use the following command to provision an ECR repository. We recommend using a single \"dev\" repository for \ndevelopment across multiple projects, and to use specific image hashes instead of image tags. \n\n```bash\naws ecr create-repository \\\n    --repository-name dev \\\n    --image-scanning-configuration scanOnPush=true \\\n    --region \"${AWS_DEFAULT_REGION}\"\n```\n\nOnce you have your ECR repository provisioned, configure your Docker daemon to authenticate with your newly created repository.\n\n```bash\nexport KO_DOCKER_REPO=\"${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_DEFAULT_REGION}.amazonaws.com/dev\"\naws ecr get-login-password --region \"${AWS_DEFAULT_REGION}\" | docker login --username AWS --password-stdin \"${KO_DOCKER_REPO}\"\n```\n\n## Profiling\nKarpenter exposes a pprof endpoint on its metrics port when [profiling]({{< relref \"../reference/settings\" >}}) is enabled.\n\nLearn about profiling with pprof: https://jvns.ca/blog/2017/09/24/profiling-go-with-pprof/\n\n### Prerequisites\n```\nbrew install graphviz\ngo install github.com/google/pprof@latest\n```\n\n### Get a profile\n```\n# Connect to the metrics endpoint\nkubectl port-forward service/karpenter -n karpenter 8080\nopen http://localhost:8080/debug/pprof/\n# Visualize the memory\ngo tool pprof -http 0.0.0.0:9000 localhost:8080/debug/pprof/heap\n# Visualize CPU\ngo tool pprof -http 0.0.0.0:9000 \"localhost:8080/debug/pprof/profile?seconds=60\"\n```\n"
  },
  {
    "path": "website/content/en/v1.8/contributing/documentation-updates.md",
    "content": "---\ntitle: \"Documentation Updates\"\nlinkTitle: \"Documentation Updates\"\nweight: 50\ndescription: >\n  Information helpful for contributing simple documentation updates.\n---\n\n- Documentation for https://karpenter.sh/docs/ is built under website/content/en/preview/.\n- Documentation updates should be made to the \"preview\" directory. Your changes will be promoted to website/content/en/docs/ by an automated process after the change has been merged.\n- Previews for your changes are built and available a few minutes after you push. Look for the \"Amplify Preview URL\" link in a comment in your PR.\n- If your update applies to more than just the current version of Karpenter, please backport your changes into all of the versions under website/content/en/ *besides* the /docs/ folder"
  },
  {
    "path": "website/content/en/v1.8/faq.md",
    "content": "---\ntitle: \"FAQs\"\nlinkTitle: \"FAQs\"\nweight: 60\ndescription: >\n  Review Karpenter Frequently Asked Questions\n---\n## General\n\n### Is Karpenter safe for production use?\nKarpenter v1 is the first stable Karpenter API. Any future incompatible API changes will require a v2 version.\n\n### How does a NodePool decide to manage a particular node?\nSee [Configuring NodePools]({{< ref \"./concepts/#configuring-nodepools\" >}}) for information on how Karpenter configures and manages nodes.\n\n### What cloud providers are supported?\nAWS is the first cloud provider supported by Karpenter, although it is designed to be used with other cloud providers as well.\n\n### Can I write my own cloud provider for Karpenter?\nYes, but there is no documentation yet for it. Start with Karpenter's GitHub [cloudprovider](https://github.com/aws/karpenter-provider-aws/tree/v1.8.6/pkg/cloudprovider) documentation to see how the AWS provider is built, but there are other sections of the code that will require changes too.\n\n### What operating system nodes does Karpenter deploy?\nKarpenter uses the OS defined by the [AMI Family in your EC2NodeClass]({{< ref \"./concepts/nodeclasses#specamifamily\" >}}).\n\n### Can I provide my own custom operating system images?\nKarpenter has multiple mechanisms for configuring the [operating system]({{< ref \"./concepts/nodeclasses/#specamiselectorterms\" >}}) for your nodes.\n\n### Can Karpenter deal with workloads for mixed architecture cluster (arm vs. amd)?\nKarpenter is flexible to multi-architecture configurations using [well known labels]({{< ref \"./concepts/scheduling/#supported-labels\">}}).\n\n### What RBAC access is required?\nAll the required RBAC rules can be found in the Helm chart template. See [clusterrole-core.yaml](https://github.com/aws/karpenter/blob/v1.8.6/charts/karpenter/templates/clusterrole-core.yaml), [clusterrole.yaml](https://github.com/aws/karpenter/blob/v1.8.6/charts/karpenter/templates/clusterrole.yaml), [rolebinding.yaml](https://github.com/aws/karpenter/blob/v1.8.6/charts/karpenter/templates/rolebinding.yaml), and [role.yaml](https://github.com/aws/karpenter/blob/v1.8.6/charts/karpenter/templates/role.yaml) files for details.\n\n### Can I run Karpenter outside of a Kubernetes cluster?\nYes, as long as the controller has network and IAM/RBAC access to the Kubernetes API and your provider API.\n\n### What do I do if I encounter a security issue with Karpenter?\nRefer to [Reporting Security Issues](https://github.com/aws/karpenter/security/policy) for information on how to report Karpenter security issues. Do not create a public GitHub issue.\n\n## Compatibility\n\n### Which versions of Kubernetes does Karpenter support?\nSee the [Compatibility Matrix in the Upgrade Section]({{< ref \"./upgrading/compatibility#compatibility-matrix\" >}}) to view the supported Kubernetes versions per Karpenter released version.\n\n### What Kubernetes distributions are supported?\nKarpenter documents integration with a fresh or existing installation of the latest AWS Elastic Kubernetes Service (EKS). Other Kubernetes distributions (KOPs, etc.) can be used, but setting up cloud provider permissions for those distributions has not been documented.\n\n### How does Karpenter interact with AWS node group features?\nNodePools 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 NodePools, 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 NodePool-managed in the long term.\n\n\n### How does Karpenter interact with Kubernetes features?\n* Kubernetes Cluster Autoscaler: Karpenter can work alongside Cluster Autoscaler. See [Kubernetes Cluster Autoscaler]({{< ref \"./concepts/#kubernetes-cluster-autoscaler\" >}}) for details.\n* 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.\n\n## Provisioning\n\n### What features does the Karpenter NodePool support?\nSee the [NodePool API docs]({{< ref \"./concepts/nodepools\" >}}) for NodePool examples and descriptions of features.\n\n### Can I create multiple (team-based) NodePools on a cluster?\nYes, NodePools can identify multiple teams based on labels. See the [NodePool API docs]({{< ref \"./concepts/nodepools\" >}}) for details.\n\n### If multiple NodePools are defined, which will my pod use?\n\nPending pods will be handled by any NodePools that matches the requirements of the pod. There is no ordering guarantee if multiple NodePools match pod requirements. We recommend that NodePools are set-up to be mutually exclusive. To select a specific NodePool, use the node selector `karpenter.sh/nodepool: my-nodepool`.\n\n### How can I configure Karpenter to only provision pods for a particular namespace?\n\nThere 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` using the same mechanisms 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.\n\nWe 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/).\n\n### Can I add SSH keys to a NodePool?\n\nKarpenter does not offer a way to add SSH keys via NodePools or secrets to the nodes it manages.\nHowever, 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.\n\nThough not recommended, if you need to access Karpenter-managed nodes without AWS credentials, you can add SSH keys using EC2NodeClass User Data. See the [User Data section in the EC2NodeClass documentation]({{< ref \"./concepts/nodeclasses/#specuserdata\" >}}) for details.\n\n### Can I set limits of CPU and memory for a NodePool?\nYes. View the [NodePool API docs]({{< ref \"./concepts/nodepools#speclimits\" >}}) for NodePool examples and descriptions of how to configure limits.\n\n### Can I mix spot and on-demand EC2 run types?\nYes, see the [NodePool API docs]({{< ref \"./concepts/nodepools#examples\" >}}) for an example.\n\n### Can I restrict EC2 instance types?\n\n* Attribute-based requests are currently not possible.\n* You can select instances with special hardware, such as gpu.\n\n### Can I use Bare Metal instance types?\n\nYes, Karpenter supports provisioning metal instance types when a NodePool'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.\n\n### How does Karpenter dynamically select instance types?\n\nKarpenter 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. Karpenter [recommends the use of C, M, and R >= Gen 3 instance types]({{< ref \"./concepts/nodepools#spectemplatespecrequirements\" >}}) for most generic workloads, but it can be constrained in the NodePool spec with the [instance-type](https://kubernetes.io/docs/reference/labels-annotations-taints/#nodekubernetesioinstance-type) well-known label in the requirements section.\n\nAfter 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.\n\n\nThe EC2 fleet API attempts to provision the instance type based on the [Price Capacity Optimized allocation strategy](https://aws.amazon.com/blogs/compute/introducing-price-capacity-optimized-allocation-strategy-for-ec2-spot-instances/). For the on-demand capacity type, this is effectively equivalent to the `lowest-price` allocation strategy. For the spot capacity type, Fleet will determine an instance type that has both the lowest price combined with the lowest chance of being interrupted. Note that this may not give you the instance type with the strictly lowest price for spot.\n\n### How does Karpenter calculate the resource usage of Daemonsets when simulating scheduling?\n\nKarpenter currently calculates the applicable daemonsets at the NodePool level with label selectors/taints, etc. It does not look to see if there are requirements on the daemonsets that would exclude it from running on particular instances that the NodePool could or couldn't launch.\nThe recommendation for now is to use multiple NodePools with taints/tolerations or label selectors to limit daemonsets to only nodes launched from specific NodePoools.\n\n### What if there is no Spot capacity?\n\nThe best defense against running out of Spot capacity is to allow Karpenter to provision as many distinct 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.\n\nAllowing 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 instance type diversity will also increase the chances that you’ll be able to continue to launch On-Demand capacity for your workloads.\n\nKarpenter has a concept of an “offering” for each instance type, which is a combination of zone and capacity type. Whenever the Fleet API returns an insufficient capacity error for Spot instances, those particular offerings are temporarily removed from consideration (across the entire NodePool) so that Karpenter can make forward progress with different options.\n\n### Does Karpenter support IPv6?\n\nYes! 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 NodePool to only allow Nitro instance types:\n\n```\napiVersion: karpenter.sh/v1\nkind: NodePool\n...\nspec:\n  template:\n    spec:\n      requirements:\n        - key: karpenter.k8s.aws/instance-hypervisor\n          operator: In\n          values:\n            - nitro\n```\n\nFor more documentation on enabling IPv6 with the Amazon VPC CNI, see the [docs](https://docs.aws.amazon.com/eks/latest/userguide/cni-ipv6.html).\n\n{{% alert title=\"Windows Support Notice\" color=\"warning\" %}}\nWindows nodes do not support IPv6.\n{{% /alert %}}\n\n### Why do I see extra nodes get launched to schedule pending pods that remain empty and are later removed?\n\nYou might have a daemonset, userData configuration, or some other workload that applies a taint after a node is provisioned. After the taint is applied, Karpenter will detect that the pod cannot be scheduled to this new node due to the added taint. As a result, Karpenter will provision yet another node. Typically, the original node has the taint removed and the pod schedules to it, leaving the extra new node unused and reaped by emptiness/consolidation. If the taint is not removed quickly enough, Karpenter may remove the original node before the pod can be scheduled via emptiness consolidation. This could result in an infinite loop of nodes being provisioned and consolidated without the pending pod ever scheduling.\n\nThe solution is to configure [startupTaints]({{<ref \"./concepts/nodepools/#cilium-startup-taint\" >}}) to make Karpenter aware of any temporary taints that are needed to ensure that pods do not schedule on nodes that are not yet ready to receive them.\n\nHere's an example for Cilium's startup taint.\n```\napiVersion: karpenter.sh/v1\nkind: NodePool\n...\nspec:\n  template:\n    spec:\n      startupTaints:\n        - key: node.cilium.io/agent-not-ready\n          effect: NoSchedule\n```\n\n## Scheduling\n\n### When using preferred scheduling constraints, Karpenter launches the correct number of nodes at first.  Why do they then sometimes get consolidated immediately?\n\n`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.\n\nAs 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 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.\n\n### When deploying an additional DaemonSet to my cluster, why does Karpenter not scale-up my nodes to support the extra DaemonSet?\n\nKarpenter will not scale-up more capacity for an additional DaemonSet on its own. This is due to the fact that the only pod that would schedule to that new node would be the DaemonSet pod, which is consuming additional capacity with no benefit. Therefore, Karpenter only considers DaemonSets when doing overhead calculations for scale-ups to workload pods.\n\nTo avoid new DaemonSets failing to schedule to existing Nodes, you should [set a high priority on your DaemonSet pods with a `preemptionPolicy: PreemptLowerPriority`](https://kubernetes.io/docs/concepts/scheduling-eviction/pod-priority-preemption/#example-priorityclass) so that DaemonSet pods will be guaranteed to schedule on all existing and new Nodes. For existing Nodes, this will cause some pods with lower priority to get [preempted](https://kubernetes.io/docs/concepts/scheduling-eviction/pod-priority-preemption/#preemption), replaced by the DaemonSet and re-scheduled onto new capacity that Karpenter will launch in response to the new pending pods.\n\nThe Karpenter maintainer team is also discussing a consolidation mechanism [in this Github issue](https://github.com/aws/karpenter/issues/3256) that would allow existing capacity to be rolled when a new DaemonSet is deployed without having to set [priority or preemption](https://kubernetes.io/docs/concepts/scheduling-eviction/pod-priority-preemption/) on the pods.\n\n\n### Why aren’t my Topology Spread Constraints spreading pods across zones?\n\nKarpenter will provision nodes according to `topologySpreadConstraints`. However, the Kubernetes scheduler may schedule pods to nodes that do not fulfill zonal spread constraints if the `minDomains` field is not set. If Karpenter launches nodes that can handle more than the required number of pods, and the newly launched nodes initialize at different times, then the Kubernetes scheduler may place more than the desired number of pods on the first node that is Ready.\n\nThe preferred solution is to use the [`minDomains` field in `topologySpreadConstraints`](https://kubernetes.io/docs/concepts/scheduling-eviction/topology-spread-constraints/#topologyspreadconstraints-field), which is enabled by default starting in Kubernetes 1.27.\n\nBefore `minDomains` was available, another workaround has been to launch a lower [Priority](https://kubernetes.io/docs/concepts/scheduling-eviction/pod-priority-preemption/) pause container to each zone before launching the pods that you want to spread across the zones. The lower Priority on these pause pods would mean that they would be preempted when your desired pods are scheduled.\n\n## Workloads\n\n### How can someone deploying pods take advantage of Karpenter?\n\nSee [Application developer]({{< ref \"./concepts/#application-developer\" >}}) for descriptions of how Karpenter matches nodes with pod requests.\n\n### Can I use Karpenter with EBS disks per availability zone?\nYes.  See [Persistent Volume Topology]({{< ref \"./concepts/scheduling#persistent-volume-topology\" >}}) for details.\n\n### Can I set `--max-pods` on my nodes?\nYes, see the [KubeletConfiguration Section in the NodePool docs]({{<ref \"./concepts/nodepools#spectemplatespeckubelet\" >}}) to learn more.\n\n### Why do the Windows2019 and Windows2022 AMI families only support Windows Server Core?\nThe difference between the Core and Full variants is that Core is a minimal OS with less components and no graphic user interface (GUI) or desktop experience.\n`Windows2019` and `Windows2022` AMI families use the Windows Server Core option for simplicity, but if required, you can specify a custom AMI to run Windows Server Full.\n\nYou can specify the [Amazon EKS optimized AMI](https://docs.aws.amazon.com/eks/latest/userguide/eks-optimized-windows-ami.html) with Windows Server 2022 Full for Kubernetes 1.34 by configuring an `amiSelector` that references the AMI name.\n```yaml\namiSelectorTerms:\n    - name: Windows_Server-2022-English-Full-EKS_Optimized-1.34*\n```\n\n### Can I use Karpenter to scale my workload's pods?\nKarpenter is a node autoscaler which will create new nodes in response to unschedulable pods. Scaling the pods themselves is outside of its scope.\nThis is the realm of pod autoscalers such as the [Vertical Pod Autoscaler](https://github.com/kubernetes/autoscaler/tree/master/vertical-pod-autoscaler) (for scaling an individual pod's resources) or the [Horizontal Pod Autoscaler](https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/) (for scaling replicas).\nWe also recommend taking a look at [Keda](https://keda.sh/) if you're looking for more advanced autoscaling capabilities for pods.\n\n## Deprovisioning\n### How does Karpenter deprovision nodes?\nSee [Deprovisioning nodes]({{< ref \"./concepts/disruption\" >}}) for information on how Karpenter deprovisions nodes.\n\n## Upgrading Karpenter\n\n### How do I upgrade Karpenter?\nKarpenter is a controller that runs in your cluster, but it is not tied to a specific Kubernetes version, as the Cluster Autoscaler is.\nUse your existing upgrade mechanisms to upgrade your core add-ons in Kubernetes and keep Karpenter up to date on bug fixes and new features.\n\nKarpenter requires proper permissions in the `KarpenterNode IAM Role` and the `KarpenterController IAM Role`.\nTo 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-karpenter/cloudformation.yaml`.\nNext, locate `KarpenterController IAM Role` ARN (i.e., ARN of the resource created in [Create the KarpenterController IAM Role](../getting-started/getting-started-with-karpenter/#create-the-karpentercontroller-iam-role)) and pass them to the Helm upgrade command.\n{{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step08-apply-helm-chart.sh\" language=\"bash\"%}}\n\nFor information on upgrading Karpenter, see the [Upgrade Guide]({{< ref \"./upgrading/upgrade-guide/\" >}}).\n\n## Upgrading Kubernetes Cluster\n\n### How do I upgrade an EKS Cluster with Karpenter?\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nKarpenter recommends that you always validate AMIs in your lower environments before using them in production environments. Read [Managing AMIs]({{<ref \"./tasks/managing-amis\" >}}) to understand best practices about upgrading your AMIs.\n\nIf using a custom AMI, you will need to trigger the rollout of new worker node images through the publication of a new AMI with tags matching the [`amiSelector`]({{<ref \"./concepts/nodeclasses#specamiselectorterms\" >}}), or a change to the [`amiSelector`]({{<ref \"./concepts/nodeclasses#specamiselectorterms\" >}}) field.\n{{% /alert %}}\n\nKarpenter's default behavior will upgrade your nodes when you've upgraded your Amazon EKS Cluster. Karpenter will [drift]({{<ref \"./concepts/disruption#drift\" >}}) nodes to stay in-sync with the EKS control plane version. Drift is enabled by default starting in `v0.33`. This means that as soon as your cluster is upgraded, Karpenter will auto-discover the new AMIs for that version.\n\nStart by [upgrading the EKS Cluster control plane](https://docs.aws.amazon.com/eks/latest/userguide/update-cluster.html). After the EKS Cluster upgrade completes, Karpenter will Drift and disrupt the Karpenter-provisioned nodes using EKS Optimized AMIs for the previous cluster version by first spinning up replacement nodes. Karpenter respects [Pod Disruption Budgets](https://kubernetes.io/docs/concepts/workloads/pods/disruptions/) (PDB), and automatically [replaces, cordons, and drains those nodes]({{<ref \"./concepts/disruption#control-flow\" >}}). To best support pods moving to new nodes, follow Kubernetes best practices by setting appropriate pod [Resource Quotas](https://kubernetes.io/docs/concepts/policy/resource-quotas/) and using PDBs.\n\n## Interruption Handling\n\n### Should I use Karpenter interruption handling alongside Node Termination Handler?\nNo. We recommend against using Node Termination Handler alongside Karpenter due to conflicts that could occur from the two components handling the same events.\n\n### Why should I migrate from Node Termination Handler?\nKarpenter's native interruption handling offers two main benefits over the standalone Node Termination Handler component:\n1. You don't have to manage and maintain a separate component to exclusively handle interruption events.\n2. Karpenter's native interruption handling coordinates with other deprovisioning so that consolidation, expiration, etc. can be aware of interruption events and vice-versa.\n\n### Why am I receiving QueueNotFound errors when I set `--interruption-queue`?\nKarpenter requires a queue to exist that receives event messages from EC2 and health services in order to handle interruption messages properly for nodes.\n\nDetails on the types of events that Karpenter handles can be found in the [Interruption Handling Docs]({{< ref \"./concepts/disruption/#interruption\" >}}).\n\nDetails on provisioning the SQS queue and EventBridge rules can be found in the [Getting Started Guide]({{< ref \"./getting-started/getting-started-with-karpenter/#create-the-karpenter-infrastructure-and-iam-roles\" >}}).\n\n## Consolidation\n\n### Why do I sometimes see an extra node get launched when updating a deployment that remains empty and is later removed?\n\nConsolidation 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.\n\n## Logging\n\n### How do I customize or configure the log output?\n\nKarpenter uses [uber-go/zap](https://github.com/uber-go/zap) for logging. You can customize or configure the log messages by editing the [configmap-logging.yaml](https://github.com/aws/karpenter/blob/main/charts/karpenter/templates/configmap-logging.yaml)\n`ConfigMap`'s [data.zap-logger-config](https://github.com/aws/karpenter/blob/main/charts/karpenter/templates/configmap-logging.yaml#L26) field.\nThe available configuration options are specified in the [zap.Config godocs](https://pkg.go.dev/go.uber.org/zap#Config).\n"
  },
  {
    "path": "website/content/en/v1.8/getting-started/_index.md",
    "content": "---\ntitle: \"Getting Started\"\nlinkTitle: \"Getting Started\"\nweight: 10\ndescription: >\n  Choose from different methods to get started with Karpenter\n---\n\n\nTo get started with Karpenter, the [Getting Started with Karpenter]({{< relref \"getting-started-with-karpenter\" >}}) guide provides an end-to-end procedure for creating a cluster (with `eksctl`) and adding Karpenter.\n\nSee the [AKS Node autoprovisioning article](https://learn.microsoft.com/azure/aks/node-autoprovision) on how to use Karpenter on Azure's AKS or go to the [Karpenter provider for Azure open source repository](https://github.com/Azure/karpenter-provider-azure) for self-hosting on Azure and additional information.\n\nSee the [Deploy Karpenter on Alibabacloud's ACK](https://docs.cloudpilot.ai/karpenter/alibabacloud/preview/getting-started/set-up-a-cluster-and-add-karpenter/) to know how to use Karpenter on Alibabacloud's ACK. Or you can go to the [Karpenter-provider-alibabacloud](https://github.com/cloudpilot-ai/karpenter-provider-alibabacloud) for more details.\n\nIf you prefer, the following instructions use Terraform to create a cluster and add Karpenter:\n\n* [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/getting-started/) guide and also add modules and add-ons. This includes a [Karpenter](https://aws-ia.github.io/terraform-aws-eks-blueprints/patterns/karpenter/) add-on that lets you bypass the instructions in this guide for setting up Karpenter.\n\nAlthough not supported, you could also try Karpenter on other Kubernetes distributions running on AWS. For example:\n\n* [kOps](https://kops.sigs.k8s.io/operations/karpenter/): These instructions describe how to create a kOps Kubernetes cluster in AWS that includes Karpenter.\n\nLearn more about Karpenter and how to get started below.\n\n* [Karpenter EKS Best Practices](https://aws.github.io/aws-eks-best-practices/karpenter/) guide\n* [EC2 Spot Workshop for Karpenter](https://ec2spotworkshops.com/karpenter.html)\n* [EKS Karpenter Workshop](https://www.eksworkshop.com/docs/autoscaling/compute/karpenter/)\n* [Advanced EKS Immersion Karpenter Workshop](https://catalog.us-east-1.prod.workshops.aws/workshops/76a5dd80-3249-4101-8726-9be3eeee09b2/en-US/autoscaling/karpenter)\n* [Karpenter Blueprints](https://github.com/aws-samples/karpenter-blueprints)\n* [Tutorial: Run Kubernetes Clusters for Less with Amazon EC2 Spot and Karpenter](https://community.aws/tutorials/run-kubernetes-clusters-for-less-with-amazon-ec2-spot-and-karpenter#step-6-optional-simulate-spot-interruption)\n"
  },
  {
    "path": "website/content/en/v1.8/getting-started/getting-started-with-karpenter/_index.md",
    "content": "\n---\ntitle: \"Getting Started with Karpenter\"\nlinkTitle: \"Getting Started with Karpenter\"\nweight: 10\ndescription: >\n  Set up a cluster and add Karpenter\n---\n\nKarpenter 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.\n\nThis guide shows how to get started with Karpenter by creating a Kubernetes cluster and installing Karpenter.\nTo use Karpenter, you must be running a supported Kubernetes cluster on a supported cloud provider.\n\nThe guide below explains how to utilize the [Karpenter provider for AWS](https://github.com/aws/karpenter-provider-aws) with EKS.\n\nSee the [AKS Node autoprovisioning article](https://learn.microsoft.com/azure/aks/node-autoprovision) on how to use Karpenter on Azure's AKS or go to the [Karpenter provider for Azure open source repository](https://github.com/Azure/karpenter-provider-azure) for self-hosting on Azure and additional information.\n\n## Create a cluster and add Karpenter\n\nThis guide uses `eksctl` to create the cluster.\nIt should take less than 1 hour to complete, and cost less than $0.25.\nFollow the clean-up instructions to reduce any charges.\n\n### 1. Install utilities\n\nKarpenter is installed in clusters with a Helm chart.\n\nKarpenter requires cloud provider permissions to provision nodes, for AWS IAM\nRoles for Service Accounts (IRSA) should be used. IRSA permits Karpenter\n(within the cluster) to make privileged requests to AWS (as the cloud provider)\nvia a ServiceAccount.\n\nInstall these tools before proceeding:\n\n1. [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2-linux.html)\n2. `kubectl` - [the Kubernetes CLI](https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/)\n3. `eksctl` (>= v0.202.0) - [the CLI for AWS EKS](https://eksctl.io/installation)\n4. `helm` - [the package manager for Kubernetes](https://helm.sh/docs/intro/install/)\n\n[Configure the AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html)\nwith a user that has sufficient privileges to create an EKS cluster. Verify that the CLI can\nauthenticate properly by running `aws sts get-caller-identity`.\n\n### 2. Set environment variables\n\nAfter setting up the tools, set the Karpenter and Kubernetes version:\n\n```bash\nexport KARPENTER_NAMESPACE=\"kube-system\"\nexport KARPENTER_VERSION=\"1.8.6\"\nexport K8S_VERSION=\"1.34\"\n```\n\nThen set the following environment variable:\n\n{{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step01-config.sh\" language=\"bash\"%}}\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nIf you open a new shell to run steps in this procedure, you need to set some or all of the environment variables again.\nTo remind yourself of these values, type:\n\n```bash\necho \"${KARPENTER_NAMESPACE}\" \"${KARPENTER_VERSION}\" \"${K8S_VERSION}\" \"${CLUSTER_NAME}\" \"${AWS_DEFAULT_REGION}\" \"${AWS_ACCOUNT_ID}\" \"${TEMPOUT}\" \"${ALIAS_VERSION}\"\n```\n\n{{% /alert %}}\n\n\n### 3. Create a Cluster\n\nCreate a basic cluster with `eksctl`.\nThe following cluster configuration will:\n\n* Use CloudFormation to set up the infrastructure needed by the EKS cluster. See [CloudFormation]({{< relref \"../../reference/cloudformation/\" >}}) for a complete description of what `cloudformation.yaml` does for Karpenter.\n* Create a Kubernetes service account and AWS IAM Role, and associate them using IRSA to let Karpenter launch instances.\n* Add the Karpenter node role to the aws-auth configmap to allow nodes to connect.\n* 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.\n* Set KARPENTER_IAM_ROLE_ARN variables.\n* Create a role to allow spot instances.\n* Run Helm to install Karpenter\n\n{{< tabpane text=true right=false >}}\n  {{% tab header=\"**Create cluster command**:\" disabled=true /%}}\n  {{% tab header=\"Managed NodeGroups\" %}}\n  {{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step02-create-cluster.sh\" language=\"bash\"%}}\n  {{% /tab %}}\n  {{% tab header=\"Fargate\" %}}\n  {{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step02-create-cluster-fargate.sh\" language=\"bash\"%}}\n  {{% /tab %}}\n{{< /tabpane >}}\n\nUnless your AWS account has already onboarded to EC2 Spot, you will need to create the service linked role to\navoid the [`ServiceLinkedRoleCreationNotPermitted` error]({{<ref \"../../troubleshooting/#missing-service-linked-role\" >}}).\n\n{{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step06-add-spot-role.sh\" language=\"bash\"%}}\n\n{{% alert title=\"Windows Support Notice\" color=\"warning\" %}}\nIn order to run Windows workloads, Windows support should be enabled in your EKS Cluster.\nSee [Enabling Windows support](https://docs.aws.amazon.com/eks/latest/userguide/windows-support.html#enable-windows-support) to learn more.\n{{% /alert %}}\n\n### 4. Install Karpenter\n\n{{< tabpane text=true right=false >}}\n  {{% tab header=\"**Karpenter installation command**:\" disabled=true /%}}\n  {{% tab header=\"Managed NodeGroups\" %}}\n  {{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step08-apply-helm-chart.sh\" language=\"bash\"%}}\n  {{% /tab %}}\n  {{% tab header=\"Fargate\" %}}\n  {{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step08-apply-helm-chart-fargate.sh\" language=\"bash\"%}}\n  {{% /tab %}}\n{{< /tabpane >}}\n\nAs the OCI Helm chart is signed by [Cosign](https://github.com/sigstore/cosign) as part of the release process you can verify the chart before installing it by running the following command.\n\n```bash\ncosign verify public.ecr.aws/karpenter/karpenter:1.8.6 \\\n  --certificate-oidc-issuer=https://token.actions.githubusercontent.com \\\n  --certificate-identity-regexp='https://github\\.com/aws/karpenter-provider-aws/\\.github/workflows/release\\.yaml@.+' \\\n  --certificate-github-workflow-repository=aws/karpenter-provider-aws \\\n  --certificate-github-workflow-name=Release \\\n  --certificate-github-workflow-ref=refs/tags/v1.8.6 \\\n  --annotations version=1.8.6\n```\n\n{{% alert title=\"DNS Policy Notice\" color=\"warning\" %}}\nKarpenter uses the `ClusterFirst` pod DNS policy by default. This is the Kubernetes cluster default and this ensures that Karpenter can reach-out to internal Kubernetes services during its lifetime. There may be cases where you do not have the DNS service that you are using on your cluster up-and-running before Karpenter starts up. The most common case of this is you want Karpenter to manage the node capacity where your DNS service pods are running.\n\nIf you need Karpenter to manage the DNS service pods' capacity, this means that DNS won't be running when Karpenter starts-up. In this case, you will need to set the pod DNS policy to `Default` with `--set dnsPolicy=Default`. This will tell Karpenter to use the host's DNS resolution instead of the internal DNS resolution, ensuring that you don't have a dependency on the DNS service pods to run. More details on this issue can be found in the following Github issues: [#2186](https://github.com/aws/karpenter-provider-aws/issues/2186) and [#4947](https://github.com/aws/karpenter-provider-aws/issues/4947).\n{{% /alert %}}\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter creates a mapping between CloudProvider machines and CustomResources in the cluster for capacity tracking. To ensure this mapping is consistent, Karpenter utilizes the following tag keys:\n\n* `karpenter.sh/managed-by`\n* `karpenter.sh/nodepool`\n* `kubernetes.io/cluster/${CLUSTER_NAME}`\n\nBecause Karpenter takes this dependency, any user that has the ability to Create/Delete these tags on CloudProvider machines will have the ability to orchestrate Karpenter to Create/Delete CloudProvider machines as a side effect. We recommend that you [enforce tag-based IAM policies](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html) on these tags against any EC2 instance resource (`i-*`) for any users that might have [CreateTags](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTags.html)/[DeleteTags](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DeleteTags.html) permissions but should not have [RunInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html)/[TerminateInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_TerminateInstances.html) permissions.\n{{% /alert %}}\n\n### 5. Create NodePool\n\nA single Karpenter NodePool 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.\n\nCreate a default NodePool using the command below. This NodePool uses `securityGroupSelectorTerms` and `subnetSelectorTerms` to discover resources used to launch nodes. We applied the tag `karpenter.sh/discovery` in the `eksctl` command above. Depending on how these resources are shared between clusters, you may need to use different tagging schemes.\n\nThe `consolidationPolicy` set to `WhenEmptyOrUnderutilized` in the `disruption` block configures Karpenter to reduce cluster cost by removing and replacing nodes. As a result, consolidation will terminate any empty nodes on the cluster. This behavior can be disabled by setting `consolidateAfter` to `Never`, telling Karpenter that it should never consolidate nodes. Review the [NodePool API docs]({{<ref \"../../concepts/nodepools\" >}}) for more information.\n\nNote: This NodePool will create capacity as long as the sum of all created capacity is less than the specified limit.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step12-add-nodepool.sh\" language=\"bash\"%}}\n\nKarpenter is now active and ready to begin provisioning nodes.\n\n### 6. Scale up deployment\n\nThis deployment uses the [pause image](https://www.ianlewis.org/en/almighty-pause-container) and starts with zero replicas.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step13-automatic-node-provisioning.sh\" language=\"bash\"%}}\n\n### 7. Scale down deployment\n\nNow, delete the deployment. After a short amount of time, Karpenter should terminate the empty nodes due to consolidation.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step14-deprovisioning.sh\" language=\"bash\"%}}\n\n### 8. Delete Karpenter nodes manually\n\nIf you delete a node with kubectl, Karpenter will gracefully cordon, drain,\nand shutdown the corresponding instance. Under the hood, Karpenter adds a\nfinalizer to the node object, which blocks deletion until all pods are\ndrained and the instance is terminated. Keep in mind, this only works for\nnodes provisioned by Karpenter.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step16-delete-node.sh\" language=\"bash\"%}}\n\n### 9. Delete the cluster\nTo avoid additional charges, remove the demo infrastructure from your AWS account.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step17-cleanup.sh\" language=\"bash\"%}}\n\n## Monitoring with Grafana (optional)\n\nThis section describes optional ways to configure Karpenter to enhance its capabilities.\nIn 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.\nThis deployment includes two Karpenter dashboards that are automatically onboarded to Grafana. They provide a variety of visualization examples on Karpenter metrics.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step09-add-prometheus-grafana.sh\" language=\"bash\"%}}\n\nThe Grafana instance may be accessed using port forwarding.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step10-add-grafana-port-forward.sh\" language=\"bash\"%}}\n\nThe new stack has only one user, `admin`, and the password is stored in a secret. The following command will retrieve the password.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step11-grafana-get-password.sh\" language=\"bash\"%}}\n\n## Advanced Installation\n\nThe section below covers advanced installation techniques for installing Karpenter. This includes things such as running Karpenter on a cluster without public internet access or ensuring that Karpenter avoids getting throttled by other components in your cluster.\n\n### Private Clusters\n\nYou can optionally install Karpenter on a [private cluster](https://docs.aws.amazon.com/eks/latest/userguide/private-clusters.html#private-cluster-requirements) using the `eksctl` installation by setting `privateCluster.enabled` to true in your [ClusterConfig](https://eksctl.io/usage/eks-private-cluster/#eks-fully-private-cluster) and by setting `--set settings.isolatedVPC=true` when installing the `karpenter` Helm chart.\n\n```bash\nprivateCluster:\n  enabled: true\n```\n\nPrivate clusters have no outbound access to the internet. This means that in order for Karpenter to reach out to the services that it needs to access, you need to enable specific VPC private endpoints. Below shows the endpoints that you need to enable to successfully run Karpenter in a private cluster:\n\n```text\ncom.amazonaws.<region>.ec2\ncom.amazonaws.<region>.ecr.api\ncom.amazonaws.<region>.ecr.dkr\ncom.amazonaws.<region>.s3 – For pulling container images\ncom.amazonaws.<region>.sts – For IAM roles for service accounts\ncom.amazonaws.<region>.ssm - For resolving default AMIs\ncom.amazonaws.<region>.sqs - For accessing SQS if using interruption handling\ncom.amazonaws.<region>.eks - For Karpenter to discover the cluster endpoint\n```\n\nIf you do not currently have these endpoints surfaced in your VPC, you can add the endpoints by running\n\n```bash\naws ec2 create-vpc-endpoint --vpc-id ${VPC_ID} --service-name ${SERVICE_NAME} --vpc-endpoint-type Interface --subnet-ids ${SUBNET_IDS} --security-group-ids ${SECURITY_GROUP_IDS}\n```\n\n{{% alert title=\"Note\" color=\"primary\" %}}\n\nKarpenter (controller and webhook deployment) container images must be in or copied to Amazon ECR private or to another private registry accessible from inside the VPC. If these are not available from within the VPC, or from networks peered with the VPC, you will get Image pull errors when Kubernetes tries to pull these images from ECR public.\n\n{{% /alert %}}\n\n{{% alert title=\"Note\" color=\"primary\" %}}\n\nThere is currently no VPC private endpoint for the [IAM API](https://docs.aws.amazon.com/IAM/latest/APIReference/welcome.html). As a result, you cannot use the default `spec.role` field in your `EC2NodeClass`. Instead, you need to provision and manage an instance profile manually and then specify Karpenter to use this instance profile through the `spec.instanceProfile` field.\n\nYou can provision an instance profile manually and assign a Node role to it by calling the following command\n\n```bash\naws iam create-instance-profile --instance-profile-name \"KarpenterNodeInstanceProfile-${CLUSTER_NAME}\"\naws iam add-role-to-instance-profile --instance-profile-name \"KarpenterNodeInstanceProfile-${CLUSTER_NAME}\" --role-name \"KarpenterNodeRole-${CLUSTER_NAME}\"\n```\n\n{{% /alert %}}\n\n{{% alert title=\"Note\" color=\"primary\" %}}\n\nThere is currently no VPC private endpoint for the [Price List Query API](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/using-price-list-query-api.html). As a result, pricing data can go stale over time. By default, Karpenter ships a static price list that is updated when each binary is released.\n\nFailed requests for pricing data will result in the following error messages\n\n```bash\nERROR   controller.aws.pricing  updating on-demand pricing, RequestError: send request failed\ncaused by: Post \"https://api.pricing.us-east-1.amazonaws.com/\": dial tcp 52.94.231.236:443: i/o timeout; RequestError: send request failed\ncaused 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\"}\n```\n\n{{% /alert %}}\n\n### Preventing APIServer Request Throttling\n\nKubernetes uses [FlowSchemas](https://kubernetes.io/docs/concepts/cluster-administration/flow-control/#flowschema) and [PriorityLevelConfigurations](https://kubernetes.io/docs/concepts/cluster-administration/flow-control/#prioritylevelconfiguration) to map calls to the API server into buckets which determine each user agent's throttling limits.\n\nBy default, Karpenter is installed into the `kube-system` namespace, which leverages the `system-leader-election` and `kube-system-service-accounts` [FlowSchemas](https://kubernetes.io/docs/concepts/cluster-administration/flow-control/#flowschema) to map calls from the `kube-system` namespace to the `leader-election` and `workload-high` PriorityLevelConfigurations respectively. By putting Karpenter in these PriorityLevelConfigurations, we ensure that Karpenter and other critical cluster components are able to run even if other components on the cluster are throttled in other PriorityLevelConfigurations.\n\nIf you install Karpenter in a different namespace than the default `kube-system` namespace, Karpenter will not be put into these higher-priority FlowSchemas by default. Instead, you will need to create custom FlowSchemas for the namespace and service account where Karpenter is installed to ensure that requests are put into this higher PriorityLevelConfiguration.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step15-apply-flowschemas.sh\" language=\"bash\"%}}\n"
  },
  {
    "path": "website/content/en/v1.8/getting-started/getting-started-with-karpenter/cloudformation.yaml",
    "content": "AWSTemplateFormatVersion: \"2010-09-09\"\nDescription: Resources used by https://github.com/aws/karpenter\nParameters:\n  ClusterName:\n    Type: String\n    Description: \"EKS cluster name\"\nResources:\n  KarpenterNodeRole:\n    Type: \"AWS::IAM::Role\"\n    Properties:\n      RoleName: !Sub \"KarpenterNodeRole-${ClusterName}\"\n      Path: /\n      AssumeRolePolicyDocument:\n        Version: \"2012-10-17\"\n        Statement:\n          - Effect: Allow\n            Principal:\n              Service:\n                !Sub \"ec2.${AWS::URLSuffix}\"\n            Action:\n              - \"sts:AssumeRole\"\n      ManagedPolicyArns:\n        - !Sub \"arn:${AWS::Partition}:iam::aws:policy/AmazonEKS_CNI_Policy\"\n        - !Sub \"arn:${AWS::Partition}:iam::aws:policy/AmazonEKSWorkerNodePolicy\"\n        - !Sub \"arn:${AWS::Partition}:iam::aws:policy/AmazonEC2ContainerRegistryPullOnly\"\n        - !Sub \"arn:${AWS::Partition}:iam::aws:policy/AmazonSSMManagedInstanceCore\"\n  KarpenterControllerPolicy:\n    Type: AWS::IAM::ManagedPolicy\n    Properties:\n      ManagedPolicyName: !Sub \"KarpenterControllerPolicy-${ClusterName}\"\n      # The PolicyDocument must be in JSON string format because we use a StringEquals condition that uses an interpolated\n      # value in one of its key parameters which isn't natively supported by CloudFormation\n      PolicyDocument: !Sub |\n        {\n          \"Version\": \"2012-10-17\",\n          \"Statement\": [\n            {\n              \"Sid\": \"AllowScopedEC2InstanceAccessActions\",\n              \"Effect\": \"Allow\",\n              \"Resource\": [\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}::image/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}::snapshot/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:security-group/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:subnet/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:capacity-reservation/*\"\n              ],\n              \"Action\": [\n                \"ec2:RunInstances\",\n                \"ec2:CreateFleet\"\n              ]\n            },\n            {\n              \"Sid\": \"AllowScopedEC2LaunchTemplateAccessActions\",\n              \"Effect\": \"Allow\",\n              \"Resource\": \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:launch-template/*\",\n              \"Action\": [\n                \"ec2:RunInstances\",\n                \"ec2:CreateFleet\"\n              ],\n              \"Condition\": {\n                \"StringEquals\": {\n                  \"aws:ResourceTag/kubernetes.io/cluster/${ClusterName}\": \"owned\"\n                },\n                \"StringLike\": {\n                  \"aws:ResourceTag/karpenter.sh/nodepool\": \"*\"\n                }\n              }\n            },\n            {\n              \"Sid\": \"AllowScopedEC2InstanceActionsWithTags\",\n              \"Effect\": \"Allow\",\n              \"Resource\": [\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:fleet/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:instance/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:volume/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:network-interface/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:launch-template/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:spot-instances-request/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:capacity-reservation/*\"\n              ],\n              \"Action\": [\n                \"ec2:RunInstances\",\n                \"ec2:CreateFleet\",\n                \"ec2:CreateLaunchTemplate\"\n              ],\n              \"Condition\": {\n                \"StringEquals\": {\n                  \"aws:RequestTag/kubernetes.io/cluster/${ClusterName}\": \"owned\",\n                  \"aws:RequestTag/eks:eks-cluster-name\": \"${ClusterName}\"\n                },\n                \"StringLike\": {\n                  \"aws:RequestTag/karpenter.sh/nodepool\": \"*\"\n                }\n              }\n            },\n            {\n              \"Sid\": \"AllowScopedResourceCreationTagging\",\n              \"Effect\": \"Allow\",\n              \"Resource\": [\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:fleet/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:instance/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:volume/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:network-interface/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:launch-template/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:spot-instances-request/*\"\n              ],\n              \"Action\": \"ec2:CreateTags\",\n              \"Condition\": {\n                \"StringEquals\": {\n                  \"aws:RequestTag/kubernetes.io/cluster/${ClusterName}\": \"owned\",\n                  \"aws:RequestTag/eks:eks-cluster-name\": \"${ClusterName}\",\n                  \"ec2:CreateAction\": [\n                    \"RunInstances\",\n                    \"CreateFleet\",\n                    \"CreateLaunchTemplate\"\n                  ]\n                },\n                \"StringLike\": {\n                  \"aws:RequestTag/karpenter.sh/nodepool\": \"*\"\n                }\n              }\n            },\n            {\n              \"Sid\": \"AllowScopedResourceTagging\",\n              \"Effect\": \"Allow\",\n              \"Resource\": \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:instance/*\",\n              \"Action\": \"ec2:CreateTags\",\n              \"Condition\": {\n                \"StringEquals\": {\n                  \"aws:ResourceTag/kubernetes.io/cluster/${ClusterName}\": \"owned\"\n                },\n                \"StringLike\": {\n                  \"aws:ResourceTag/karpenter.sh/nodepool\": \"*\"\n                },\n                \"StringEqualsIfExists\": {\n                  \"aws:RequestTag/eks:eks-cluster-name\": \"${ClusterName}\"\n                },\n                \"ForAllValues:StringEquals\": {\n                  \"aws:TagKeys\": [\n                    \"eks:eks-cluster-name\",\n                    \"karpenter.sh/nodeclaim\",\n                    \"Name\"\n                  ]\n                }\n              }\n            },\n            {\n              \"Sid\": \"AllowScopedDeletion\",\n              \"Effect\": \"Allow\",\n              \"Resource\": [\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:instance/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:launch-template/*\"\n              ],\n              \"Action\": [\n                \"ec2:TerminateInstances\",\n                \"ec2:DeleteLaunchTemplate\"\n              ],\n              \"Condition\": {\n                \"StringEquals\": {\n                  \"aws:ResourceTag/kubernetes.io/cluster/${ClusterName}\": \"owned\"\n                },\n                \"StringLike\": {\n                  \"aws:ResourceTag/karpenter.sh/nodepool\": \"*\"\n                }\n              }\n            },\n            {\n              \"Sid\": \"AllowRegionalReadActions\",\n              \"Effect\": \"Allow\",\n              \"Resource\": \"*\",\n              \"Action\": [\n                \"ec2:DescribeCapacityReservations\",\n                \"ec2:DescribeImages\",\n                \"ec2:DescribeInstances\",\n                \"ec2:DescribeInstanceTypeOfferings\",\n                \"ec2:DescribeInstanceTypes\",\n                \"ec2:DescribeLaunchTemplates\",\n                \"ec2:DescribeSecurityGroups\",\n                \"ec2:DescribeSpotPriceHistory\",\n                \"ec2:DescribeSubnets\"\n              ],\n              \"Condition\": {\n                \"StringEquals\": {\n                  \"aws:RequestedRegion\": \"${AWS::Region}\"\n                }\n              }\n            },\n            {\n              \"Sid\": \"AllowSSMReadActions\",\n              \"Effect\": \"Allow\",\n              \"Resource\": \"arn:${AWS::Partition}:ssm:${AWS::Region}::parameter/aws/service/*\",\n              \"Action\": \"ssm:GetParameter\"\n            },\n            {\n              \"Sid\": \"AllowPricingReadActions\",\n              \"Effect\": \"Allow\",\n              \"Resource\": \"*\",\n              \"Action\": \"pricing:GetProducts\"\n            },\n            {\n              \"Sid\": \"AllowInterruptionQueueActions\",\n              \"Effect\": \"Allow\",\n              \"Resource\": \"${KarpenterInterruptionQueue.Arn}\",\n              \"Action\": [\n                \"sqs:DeleteMessage\",\n                \"sqs:GetQueueUrl\",\n                \"sqs:ReceiveMessage\"\n              ]\n            },\n            {\n              \"Sid\": \"AllowPassingInstanceRole\",\n              \"Effect\": \"Allow\",\n              \"Resource\": \"${KarpenterNodeRole.Arn}\",\n              \"Action\": \"iam:PassRole\",\n              \"Condition\": {\n                \"StringEquals\": {\n                  \"iam:PassedToService\": [\n                    \"ec2.amazonaws.com\",\n                    \"ec2.amazonaws.com.cn\"\n                  ]\n                }\n              }\n            },\n            {\n              \"Sid\": \"AllowScopedInstanceProfileCreationActions\",\n              \"Effect\": \"Allow\",\n              \"Resource\": \"arn:${AWS::Partition}:iam::${AWS::AccountId}:instance-profile/*\",\n              \"Action\": [\n                \"iam:CreateInstanceProfile\"\n              ],\n              \"Condition\": {\n                \"StringEquals\": {\n                  \"aws:RequestTag/kubernetes.io/cluster/${ClusterName}\": \"owned\",\n                  \"aws:RequestTag/eks:eks-cluster-name\": \"${ClusterName}\",\n                  \"aws:RequestTag/topology.kubernetes.io/region\": \"${AWS::Region}\"\n                },\n                \"StringLike\": {\n                  \"aws:RequestTag/karpenter.k8s.aws/ec2nodeclass\": \"*\"\n                }\n              }\n            },\n            {\n              \"Sid\": \"AllowScopedInstanceProfileTagActions\",\n              \"Effect\": \"Allow\",\n              \"Resource\": \"arn:${AWS::Partition}:iam::${AWS::AccountId}:instance-profile/*\",\n              \"Action\": [\n                \"iam:TagInstanceProfile\"\n              ],\n              \"Condition\": {\n                \"StringEquals\": {\n                  \"aws:ResourceTag/kubernetes.io/cluster/${ClusterName}\": \"owned\",\n                  \"aws:ResourceTag/topology.kubernetes.io/region\": \"${AWS::Region}\",\n                  \"aws:RequestTag/kubernetes.io/cluster/${ClusterName}\": \"owned\",\n                  \"aws:RequestTag/eks:eks-cluster-name\": \"${ClusterName}\",\n                  \"aws:RequestTag/topology.kubernetes.io/region\": \"${AWS::Region}\"\n                },\n                \"StringLike\": {\n                  \"aws:ResourceTag/karpenter.k8s.aws/ec2nodeclass\": \"*\",\n                  \"aws:RequestTag/karpenter.k8s.aws/ec2nodeclass\": \"*\"\n                }\n              }\n            },\n            {\n              \"Sid\": \"AllowScopedInstanceProfileActions\",\n              \"Effect\": \"Allow\",\n              \"Resource\": \"arn:${AWS::Partition}:iam::${AWS::AccountId}:instance-profile/*\",\n              \"Action\": [\n                \"iam:AddRoleToInstanceProfile\",\n                \"iam:RemoveRoleFromInstanceProfile\",\n                \"iam:DeleteInstanceProfile\"\n              ],\n              \"Condition\": {\n                \"StringEquals\": {\n                  \"aws:ResourceTag/kubernetes.io/cluster/${ClusterName}\": \"owned\",\n                  \"aws:ResourceTag/topology.kubernetes.io/region\": \"${AWS::Region}\"\n                },\n                \"StringLike\": {\n                  \"aws:ResourceTag/karpenter.k8s.aws/ec2nodeclass\": \"*\"\n                }\n              }\n            },\n            {\n              \"Sid\": \"AllowInstanceProfileReadActions\",\n              \"Effect\": \"Allow\",\n              \"Resource\": \"arn:${AWS::Partition}:iam::${AWS::AccountId}:instance-profile/*\",\n              \"Action\": \"iam:GetInstanceProfile\"\n            },\n            {\n              \"Sid\": \"AllowUnscopedInstanceProfileListAction\",\n              \"Effect\": \"Allow\",\n              \"Resource\": \"*\",\n              \"Action\": \"iam:ListInstanceProfiles\"\n            },\n            {\n              \"Sid\": \"AllowAPIServerEndpointDiscovery\",\n              \"Effect\": \"Allow\",\n              \"Resource\": \"arn:${AWS::Partition}:eks:${AWS::Region}:${AWS::AccountId}:cluster/${ClusterName}\",\n              \"Action\": \"eks:DescribeCluster\"\n            }\n          ]\n        }\n  KarpenterInterruptionQueue:\n    Type: AWS::SQS::Queue\n    Properties:\n      QueueName: !Sub \"${ClusterName}\"\n      MessageRetentionPeriod: 300\n      SqsManagedSseEnabled: true\n  KarpenterInterruptionQueuePolicy:\n    Type: AWS::SQS::QueuePolicy\n    Properties:\n      Queues:\n        - !Ref KarpenterInterruptionQueue\n      PolicyDocument:\n        Id: EC2InterruptionPolicy\n        Statement:\n          - Effect: Allow\n            Principal:\n              Service:\n                - events.amazonaws.com\n                - sqs.amazonaws.com\n            Action: sqs:SendMessage\n            Resource: !GetAtt KarpenterInterruptionQueue.Arn\n          - Sid: DenyHTTP\n            Effect: Deny\n            Action: sqs:*\n            Resource: !GetAtt KarpenterInterruptionQueue.Arn\n            Condition:\n              Bool:\n                aws:SecureTransport: false\n            Principal: \"*\"\n  ScheduledChangeRule:\n    Type: 'AWS::Events::Rule'\n    Properties:\n      EventPattern:\n        source:\n          - aws.health\n        detail-type:\n          - AWS Health Event\n      Targets:\n        - Id: KarpenterInterruptionQueueTarget\n          Arn: !GetAtt KarpenterInterruptionQueue.Arn\n  SpotInterruptionRule:\n    Type: 'AWS::Events::Rule'\n    Properties:\n      EventPattern:\n        source:\n          - aws.ec2\n        detail-type:\n          - EC2 Spot Instance Interruption Warning\n      Targets:\n        - Id: KarpenterInterruptionQueueTarget\n          Arn: !GetAtt KarpenterInterruptionQueue.Arn\n  RebalanceRule:\n    Type: 'AWS::Events::Rule'\n    Properties:\n      EventPattern:\n        source:\n          - aws.ec2\n        detail-type:\n          - EC2 Instance Rebalance Recommendation\n      Targets:\n        - Id: KarpenterInterruptionQueueTarget\n          Arn: !GetAtt KarpenterInterruptionQueue.Arn\n  InstanceStateChangeRule:\n    Type: 'AWS::Events::Rule'\n    Properties:\n      EventPattern:\n        source:\n          - aws.ec2\n        detail-type:\n          - EC2 Instance State-change Notification\n      Targets:\n        - Id: KarpenterInterruptionQueueTarget\n          Arn: !GetAtt KarpenterInterruptionQueue.Arn\n"
  },
  {
    "path": "website/content/en/v1.8/getting-started/getting-started-with-karpenter/grafana-values.yaml",
    "content": "datasources:\n  datasources.yaml:\n    apiVersion: 1\n    datasources:\n    - name: Prometheus\n      type: prometheus\n      version: 1\n      url: http://prometheus-server:80\n      access: proxy\ndashboardProviders:\n  dashboardproviders.yaml:\n    apiVersion: 1\n    providers:\n    - name: 'default'\n      orgId: 1\n      folder: ''\n      type: file\n      disableDeletion: false\n      editable: true\n      options:\n        path: /var/lib/grafana/dashboards/default\ndashboards:\n  default:\n    capacity-dashboard:\n      url: https://karpenter.sh/v1.8/getting-started/getting-started-with-karpenter/karpenter-capacity-dashboard.json\n    performance-dashboard:\n      url: https://karpenter.sh/v1.8/getting-started/getting-started-with-karpenter/karpenter-performance-dashboard.json\n"
  },
  {
    "path": "website/content/en/v1.8/getting-started/getting-started-with-karpenter/karpenter-capacity-dashboard.json",
    "content": "{\n    \"annotations\": {\n      \"list\": [\n        {\n          \"builtIn\": 1,\n          \"datasource\": \"-- Grafana --\",\n          \"enable\": true,\n          \"hide\": true,\n          \"iconColor\": \"rgba(0, 211, 255, 1)\",\n          \"name\": \"Annotations & Alerts\",\n          \"target\": {\n            \"limit\": 100,\n            \"matchAny\": false,\n            \"tags\": [],\n            \"type\": \"dashboard\"\n          },\n          \"type\": \"dashboard\"\n        }\n      ]\n    },\n    \"editable\": true,\n    \"fiscalYearStartMonth\": 0,\n    \"graphTooltip\": 0,\n    \"id\": 32,\n    \"links\": [],\n    \"liveNow\": true,\n    \"panels\": [\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"description\": \"\",\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisBorderShow\": false,\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"Nodes rate\",\n              \"axisPlacement\": \"auto\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 10,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"insertNulls\": false,\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"auto\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"none\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"min\": 0,\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            },\n            \"unit\": \"none\"\n          },\n          \"overrides\": [\n            {\n              \"matcher\": {\n                \"id\": \"byFrameRefID\",\n                \"options\": \"B\"\n              },\n              \"properties\": [\n                {\n                  \"id\": \"custom.axisPlacement\",\n                  \"value\": \"right\"\n                },\n                {\n                  \"id\": \"custom.axisLabel\",\n                  \"value\": \"Nodes total\"\n                }\n              ]\n            }\n          ]\n        },\n        \"gridPos\": {\n          \"h\": 5,\n          \"w\": 24,\n          \"x\": 0,\n          \"y\": 0\n        },\n        \"id\": 14,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [\n              \"lastNotNull\"\n            ],\n            \"displayMode\": \"table\",\n            \"placement\": \"right\",\n            \"showLegend\": true\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"sum(rate(karpenter_nodes_created_total{nodepool=~\\\"$nodepool\\\"}[$__rate_interval])) by(cluster,nodepool)\",\n            \"format\": \"time_series\",\n            \"legendFormat\": \"{{cluster}}\",\n            \"range\": true,\n            \"refId\": \"A\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"sum by(cluster,nodepool) (karpenter_nodes_created_total{nodepool=~\\\"$nodepool\\\"})\",\n            \"hide\": false,\n            \"instant\": false,\n            \"legendFormat\": \"__auto\",\n            \"range\": true,\n            \"refId\": \"B\"\n          }\n        ],\n        \"title\": \"Nodes Created by nodepool\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"description\": \"\",\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisBorderShow\": false,\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"Nodes rate\",\n              \"axisPlacement\": \"auto\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 10,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"insertNulls\": false,\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"auto\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"none\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"min\": 0,\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            },\n            \"unit\": \"none\"\n          },\n          \"overrides\": [\n            {\n              \"matcher\": {\n                \"id\": \"byFrameRefID\",\n                \"options\": \"B\"\n              },\n              \"properties\": [\n                {\n                  \"id\": \"custom.axisPlacement\",\n                  \"value\": \"right\"\n                },\n                {\n                  \"id\": \"custom.axisLabel\",\n                  \"value\": \"Nodes total\"\n                }\n              ]\n            }\n          ]\n        },\n        \"gridPos\": {\n          \"h\": 5,\n          \"w\": 24,\n          \"x\": 0,\n          \"y\": 5\n        },\n        \"id\": 15,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [\n              \"lastNotNull\"\n            ],\n            \"displayMode\": \"table\",\n            \"placement\": \"right\",\n            \"showLegend\": true\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"sum(rate(karpenter_nodes_terminated_total{nodepool=~\\\"$nodepool\\\"}[$__rate_interval])) by(cluster,nodepool)\",\n            \"format\": \"time_series\",\n            \"legendFormat\": \"__auto\",\n            \"range\": true,\n            \"refId\": \"A\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"sum by(cluster,nodepool) (karpenter_nodes_terminated_total{nodepool=~\\\"$nodepool\\\"})\",\n            \"hide\": false,\n            \"instant\": false,\n            \"legendFormat\": \"__auto\",\n            \"range\": true,\n            \"refId\": \"B\"\n          }\n        ],\n        \"title\": \"Nodes Terminated by nodepool\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisBorderShow\": false,\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"\",\n              \"axisPlacement\": \"auto\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 10,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"insertNulls\": false,\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"auto\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"none\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            }\n          },\n          \"overrides\": []\n        },\n        \"gridPos\": {\n          \"h\": 6,\n          \"w\": 24,\n          \"x\": 0,\n          \"y\": 10\n        },\n        \"id\": 12,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [\n              \"last\"\n            ],\n            \"displayMode\": \"table\",\n            \"placement\": \"right\",\n            \"showLegend\": true\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"exemplar\": false,\n            \"expr\": \"sum by(reason)(karpenter_voluntary_disruption_eligible_nodes)\",\n            \"legendFormat\": \"reason={{reason}}\",\n            \"range\": true,\n            \"refId\": \"A\"\n          }\n        ],\n        \"title\": \"Nodes Eligible for Disruptions by \\\"reason\\\"\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"description\": \"\",\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisBorderShow\": false,\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"Disruptions rate\",\n              \"axisPlacement\": \"auto\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 10,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"insertNulls\": false,\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"auto\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"normal\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            }\n          },\n          \"overrides\": [\n            {\n              \"matcher\": {\n                \"id\": \"byFrameRefID\",\n                \"options\": \"B\"\n              },\n              \"properties\": [\n                {\n                  \"id\": \"custom.axisPlacement\",\n                  \"value\": \"right\"\n                },\n                {\n                  \"id\": \"custom.axisLabel\",\n                  \"value\": \"Disruptions total\"\n                }\n              ]\n            }\n          ]\n        },\n        \"gridPos\": {\n          \"h\": 6,\n          \"w\": 24,\n          \"x\": 0,\n          \"y\": 16\n        },\n        \"id\": 17,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [\n              \"last\"\n            ],\n            \"displayMode\": \"table\",\n            \"placement\": \"right\",\n            \"showLegend\": true\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"exemplar\": false,\n            \"expr\": \"sum(rate(karpenter_nodeclaims_disrupted_total{nodepool=~\\\"$nodepool\\\"}[$__rate_interval])) by(cluster,nodepool)\",\n            \"legendFormat\": \"{{label_name}}\",\n            \"range\": true,\n            \"refId\": \"A\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"sum by(cluster,nodepool)(karpenter_nodeclaims_disrupted_total{nodepool=~\\\"$nodepool\\\"})\",\n            \"hide\": false,\n            \"instant\": false,\n            \"legendFormat\": \"{{label_name}}\",\n            \"range\": true,\n            \"refId\": \"B\"\n          }\n        ],\n        \"title\": \"Node Disruptions by \\\"$distribution_filter\\\"\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisBorderShow\": false,\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"Disruptions rate\",\n              \"axisPlacement\": \"left\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 10,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"insertNulls\": false,\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"auto\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"normal\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            }\n          },\n          \"overrides\": [\n            {\n              \"matcher\": {\n                \"id\": \"byFrameRefID\",\n                \"options\": \"B\"\n              },\n              \"properties\": [\n                {\n                  \"id\": \"custom.axisPlacement\",\n                  \"value\": \"right\"\n                },\n                {\n                  \"id\": \"custom.axisLabel\",\n                  \"value\": \"Disruptions total\"\n                }\n              ]\n            }\n          ]\n        },\n        \"gridPos\": {\n          \"h\": 6,\n          \"w\": 24,\n          \"x\": 0,\n          \"y\": 22\n        },\n        \"id\": 19,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [\n              \"last\"\n            ],\n            \"displayMode\": \"table\",\n            \"placement\": \"right\",\n            \"showLegend\": true\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"exemplar\": true,\n            \"expr\": \"sum(rate(karpenter_voluntary_disruption_decisions_total[$__rate_interval])) by(cluster,nodepool,consolidation_type,decision)\",\n            \"hide\": false,\n            \"legendFormat\": \"type={{consolidation_type}}, decision={{decision}}\",\n            \"range\": true,\n            \"refId\": \"A\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"sum by(consolidation_type,decision)(karpenter_voluntary_disruption_decisions_total)\",\n            \"hide\": true,\n            \"instant\": false,\n            \"legendFormat\": \"{{label_name}}\",\n            \"range\": true,\n            \"refId\": \"B\"\n          }\n        ],\n        \"title\": \"Disruption Actions performed by \\\"type\\\" and \\\"decision\\\"\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisBorderShow\": false,\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"\",\n              \"axisPlacement\": \"auto\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 10,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"insertNulls\": false,\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"auto\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"normal\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            }\n          },\n          \"overrides\": []\n        },\n        \"gridPos\": {\n          \"h\": 8,\n          \"w\": 24,\n          \"x\": 0,\n          \"y\": 28\n        },\n        \"id\": 6,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [],\n            \"displayMode\": \"table\",\n            \"placement\": \"right\",\n            \"showLegend\": true\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"sum by ($distribution_filter)(\\n    karpenter_pods_state{arch=~\\\"$arch\\\", capacity_type=~\\\"$capacity_type\\\", instance_type=~\\\"$instance_type\\\", nodepool=~\\\"$nodepool\\\"}\\n)\",\n            \"legendFormat\": \"{{label_name}}\",\n            \"range\": true,\n            \"refId\": \"A\"\n          }\n        ],\n        \"title\": \"Pod Distribution by \\\"$distribution_filter\\\"\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisBorderShow\": false,\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"\",\n              \"axisPlacement\": \"auto\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 10,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"insertNulls\": false,\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"auto\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"normal\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            }\n          },\n          \"overrides\": []\n        },\n        \"gridPos\": {\n          \"h\": 6,\n          \"w\": 24,\n          \"x\": 0,\n          \"y\": 36\n        },\n        \"id\": 20,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [\n              \"last\"\n            ],\n            \"displayMode\": \"table\",\n            \"placement\": \"right\",\n            \"showLegend\": true\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"sum by(phase)(karpenter_pods_state)\",\n            \"legendFormat\": \"{{label_name}}\",\n            \"range\": true,\n            \"refId\": \"A\"\n          }\n        ],\n        \"title\": \"Pod Phase\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"continuous-RdYlGr\"\n            },\n            \"custom\": {\n              \"align\": \"left\",\n              \"cellOptions\": {\n                \"type\": \"auto\"\n              },\n              \"inspect\": false\n            },\n            \"mappings\": [],\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            }\n          },\n          \"overrides\": [\n            {\n              \"matcher\": {\n                \"id\": \"byRegexp\",\n                \"options\": \".*Utilization$\"\n              },\n              \"properties\": [\n                {\n                  \"id\": \"custom.cellOptions\",\n                  \"value\": {\n                    \"mode\": \"gradient\",\n                    \"type\": \"gauge\"\n                  }\n                },\n                {\n                  \"id\": \"min\",\n                  \"value\": 0\n                },\n                {\n                  \"id\": \"max\",\n                  \"value\": 1\n                },\n                {\n                  \"id\": \"unit\",\n                  \"value\": \"percentunit\"\n                }\n              ]\n            },\n            {\n              \"matcher\": {\n                \"id\": \"byName\",\n                \"options\": \"Memory Provisioned\"\n              },\n              \"properties\": [\n                {\n                  \"id\": \"unit\",\n                  \"value\": \"bytes\"\n                }\n              ]\n            }\n          ]\n        },\n        \"gridPos\": {\n          \"h\": 11,\n          \"w\": 18,\n          \"x\": 0,\n          \"y\": 42\n        },\n        \"id\": 10,\n        \"options\": {\n          \"cellHeight\": \"sm\",\n          \"footer\": {\n            \"countRows\": false,\n            \"fields\": \"\",\n            \"reducer\": [\n              \"sum\"\n            ],\n            \"show\": false\n          },\n          \"showHeader\": true\n        },\n        \"pluginVersion\": \"11.1.0\",\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"exemplar\": false,\n            \"expr\": \"karpenter_nodepools_usage{resource_type=\\\"cpu\\\"} / karpenter_nodepools_limit{resource_type=\\\"cpu\\\"}\",\n            \"format\": \"table\",\n            \"instant\": true,\n            \"legendFormat\": \"CPU Limit Utilization\",\n            \"range\": false,\n            \"refId\": \"CPU Limit Utilization\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"exemplar\": false,\n            \"expr\": \"count by (nodepool)(karpenter_nodes_allocatable{nodepool!=\\\"N/A\\\",resource_type=\\\"cpu\\\"}) # Selects a single resource type to get node count\",\n            \"format\": \"table\",\n            \"hide\": false,\n            \"instant\": true,\n            \"range\": false,\n            \"refId\": \"Node Count\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"exemplar\": false,\n            \"expr\": \"karpenter_nodepools_usage{resource_type=\\\"memory\\\"} / karpenter_nodepools_limit{resource_type=\\\"memory\\\"}\",\n            \"format\": \"table\",\n            \"hide\": false,\n            \"instant\": true,\n            \"legendFormat\": \"Memory Limit Utilization\",\n            \"range\": false,\n            \"refId\": \"Memory Limit Utilization\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"exemplar\": false,\n            \"expr\": \"sum by (nodepool)(karpenter_nodes_allocatable{nodepool!=\\\"N/A\\\",resource_type=\\\"cpu\\\"})\",\n            \"format\": \"table\",\n            \"hide\": false,\n            \"instant\": true,\n            \"range\": false,\n            \"refId\": \"CPU Capacity\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"exemplar\": false,\n            \"expr\": \"sum by (nodepool)(karpenter_nodes_allocatable{nodepool!=\\\"N/A\\\",resource_type=\\\"memory\\\"})\",\n            \"format\": \"table\",\n            \"hide\": false,\n            \"instant\": true,\n            \"range\": false,\n            \"refId\": \"Memory Capacity\"\n          }\n        ],\n        \"title\": \"Nodepool Summary\",\n        \"transformations\": [\n          {\n            \"id\": \"seriesToColumns\",\n            \"options\": {\n              \"byField\": \"nodepool\"\n            }\n          },\n          {\n            \"id\": \"organize\",\n            \"options\": {\n              \"excludeByName\": {\n                \"Time\": true,\n                \"Time 1\": true,\n                \"Time 2\": true,\n                \"Time 3\": true,\n                \"Time 4\": true,\n                \"Time 5\": true,\n                \"__name__\": true,\n                \"instance\": true,\n                \"instance 1\": true,\n                \"instance 2\": true,\n                \"job\": true,\n                \"job 1\": true,\n                \"job 2\": true,\n                \"resource_type\": true,\n                \"resource_type 1\": true,\n                \"resource_type 2\": true\n              },\n              \"indexByName\": {\n                \"Time 1\": 6,\n                \"Time 2\": 7,\n                \"Time 3\": 11,\n                \"Time 4\": 15,\n                \"Time 5\": 16,\n                \"Value #CPU Capacity\": 2,\n                \"Value #CPU Limit Utilization\": 3,\n                \"Value #Memory Capacity\": 4,\n                \"Value #Memory Limit Utilization\": 5,\n                \"Value #Node Count\": 1,\n                \"instance 1\": 8,\n                \"instance 2\": 12,\n                \"job 1\": 9,\n                \"job 2\": 13,\n                \"nodepool\": 0,\n                \"resource_type 1\": 10,\n                \"resource_type 2\": 14\n              },\n              \"renameByName\": {\n                \"Time 1\": \"\",\n                \"Value\": \"CPU Utilization\",\n                \"Value #CPU Capacity\": \"CPU Provisioned\",\n                \"Value #CPU Limit Utilization\": \"CPU Limit Utilization\",\n                \"Value #CPU Utilization\": \"CPU Limit Utilization\",\n                \"Value #Memory Capacity\": \"Memory Provisioned\",\n                \"Value #Memory Limit Utilization\": \"Memory Limit Utilization\",\n                \"Value #Memory Utilization\": \"Memory Utilization\",\n                \"Value #Node Count\": \"Node Count\",\n                \"instance\": \"\",\n                \"instance 1\": \"\",\n                \"job\": \"\",\n                \"nodepool\": \"Nodepool\"\n              }\n            }\n          }\n        ],\n        \"type\": \"table\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisBorderShow\": false,\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"\",\n              \"axisPlacement\": \"auto\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 0,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"insertNulls\": false,\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"auto\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"none\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"max\": 1,\n            \"min\": 0,\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            },\n            \"unit\": \"percentunit\"\n          },\n          \"overrides\": []\n        },\n        \"gridPos\": {\n          \"h\": 11,\n          \"w\": 6,\n          \"x\": 18,\n          \"y\": 42\n        },\n        \"id\": 8,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [],\n            \"displayMode\": \"list\",\n            \"placement\": \"bottom\",\n            \"showLegend\": false\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"(count(karpenter_nodes_allocatable{arch=~\\\"$arch\\\",capacity_type=\\\"spot\\\",instance_type=~\\\"$instance_type\\\",nodepool=~\\\"$nodepool\\\",zone=~\\\"$zone\\\"}) or vector(0)) / count(karpenter_nodes_allocatable{arch=~\\\"$arch\\\",instance_type=~\\\"$instance_type\\\",nodepool=~\\\"$nodepool\\\",zone=~\\\"$zone\\\"})\",\n            \"legendFormat\": \"Percentage\",\n            \"range\": true,\n            \"refId\": \"A\"\n          }\n        ],\n        \"title\": \"Spot Node Percentage\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"continuous-RdYlGr\"\n            },\n            \"custom\": {\n              \"align\": \"left\",\n              \"cellOptions\": {\n                \"type\": \"auto\"\n              },\n              \"inspect\": false\n            },\n            \"mappings\": [],\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            }\n          },\n          \"overrides\": [\n            {\n              \"matcher\": {\n                \"id\": \"byName\",\n                \"options\": \"node_name\"\n              },\n              \"properties\": [\n                {\n                  \"id\": \"custom.width\",\n                  \"value\": 333\n                }\n              ]\n            },\n            {\n              \"matcher\": {\n                \"id\": \"byRegexp\",\n                \"options\": \".*Utilization\"\n              },\n              \"properties\": [\n                {\n                  \"id\": \"custom.cellOptions\",\n                  \"value\": {\n                    \"mode\": \"gradient\",\n                    \"type\": \"gauge\"\n                  }\n                },\n                {\n                  \"id\": \"unit\",\n                  \"value\": \"percentunit\"\n                },\n                {\n                  \"id\": \"min\",\n                  \"value\": 0\n                },\n                {\n                  \"id\": \"thresholds\",\n                  \"value\": {\n                    \"mode\": \"percentage\",\n                    \"steps\": [\n                      {\n                        \"color\": \"green\",\n                        \"value\": null\n                      },\n                      {\n                        \"color\": \"red\",\n                        \"value\": 75\n                      }\n                    ]\n                  }\n                },\n                {\n                  \"id\": \"max\",\n                  \"value\": 1\n                }\n              ]\n            },\n            {\n              \"matcher\": {\n                \"id\": \"byName\",\n                \"options\": \"Uptime\"\n              },\n              \"properties\": [\n                {\n                  \"id\": \"unit\",\n                  \"value\": \"s\"\n                },\n                {\n                  \"id\": \"decimals\",\n                  \"value\": 0\n                }\n              ]\n            }\n          ]\n        },\n        \"gridPos\": {\n          \"h\": 9,\n          \"w\": 24,\n          \"x\": 0,\n          \"y\": 53\n        },\n        \"id\": 4,\n        \"options\": {\n          \"cellHeight\": \"sm\",\n          \"footer\": {\n            \"countRows\": false,\n            \"fields\": \"\",\n            \"reducer\": [\n              \"sum\"\n            ],\n            \"show\": false\n          },\n          \"showHeader\": true,\n          \"sortBy\": [\n            {\n              \"desc\": true,\n              \"displayName\": \"Uptime\"\n            }\n          ]\n        },\n        \"pluginVersion\": \"11.1.0\",\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"exemplar\": false,\n            \"expr\": \"((karpenter_nodes_total_daemon_requests{resource_type=\\\"cpu\\\",arch=~\\\"$arch\\\",capacity_type=~\\\"$capacity_type\\\",instance_type=~\\\"$instance_type\\\",nodepool=~\\\"$nodepool\\\",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\\\",nodepool=~\\\"$nodepool\\\",zone=~\\\"$zone\\\"} or karpenter_nodes_allocatable*0)) / \\nkarpenter_nodes_allocatable{resource_type=\\\"cpu\\\",arch=~\\\"$arch\\\",capacity_type=~\\\"$capacity_type\\\",instance_type=~\\\"$instance_type\\\",nodepool=~\\\"$nodepool\\\",zone=~\\\"$zone\\\"}\",\n            \"format\": \"table\",\n            \"hide\": false,\n            \"instant\": true,\n            \"legendFormat\": \"CPU Utilization\",\n            \"range\": false,\n            \"refId\": \"CPU Utilization\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"exemplar\": false,\n            \"expr\": \"((karpenter_nodes_total_daemon_requests{resource_type=\\\"memory\\\",arch=~\\\"$arch\\\",capacity_type=~\\\"$capacity_type\\\",instance_type=~\\\"$instance_type\\\",nodepool=~\\\"$nodepool\\\",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\\\",nodepool=~\\\"$nodepool\\\",zone=~\\\"$zone\\\"} or karpenter_nodes_allocatable*0)) / \\nkarpenter_nodes_allocatable{resource_type=\\\"memory\\\",arch=~\\\"$arch\\\",capacity_type=~\\\"$capacity_type\\\",instance_type=~\\\"$instance_type\\\",nodepool=~\\\"$nodepool\\\",zone=~\\\"$zone\\\"}\",\n            \"format\": \"table\",\n            \"hide\": false,\n            \"instant\": true,\n            \"legendFormat\": \"Memory Utilization\",\n            \"range\": false,\n            \"refId\": \"Memory Utilization\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"exemplar\": false,\n            \"expr\": \"karpenter_nodes_total_daemon_requests{resource_type=\\\"pods\\\",arch=~\\\"$arch\\\",capacity_type=~\\\"$capacity_type\\\",instance_type=~\\\"$instance_type\\\",nodepool=~\\\"$nodepool\\\",zone=~\\\"$zone\\\"} + \\nkarpenter_nodes_total_pod_requests{resource_type=\\\"pods\\\",arch=~\\\"$arch\\\",capacity_type=~\\\"$capacity_type\\\",instance_type=~\\\"$instance_type\\\",nodepool=~\\\"$nodepool\\\",zone=~\\\"$zone\\\"}\",\n            \"format\": \"table\",\n            \"hide\": false,\n            \"instant\": true,\n            \"legendFormat\": \"Memory Utilization\",\n            \"range\": false,\n            \"refId\": \"Pod Count\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"exemplar\": false,\n            \"expr\": \"label_replace(\\n    sum by (node)(node_time_seconds) - sum by (node)(node_boot_time_seconds),\\n    \\\"node_name\\\", \\\"$1\\\", \\\"node\\\", \\\"(.+)\\\"\\n)\",\n            \"format\": \"table\",\n            \"hide\": false,\n            \"instant\": true,\n            \"legendFormat\": \"Uptime\",\n            \"range\": false,\n            \"refId\": \"Uptime\"\n          }\n        ],\n        \"title\": \"Node Summary\",\n        \"transformations\": [\n          {\n            \"id\": \"seriesToColumns\",\n            \"options\": {\n              \"byField\": \"node_name\"\n            }\n          },\n          {\n            \"id\": \"organize\",\n            \"options\": {\n              \"excludeByName\": {\n                \"Time\": true,\n                \"Time 1\": true,\n                \"Time 2\": true,\n                \"Time 3\": true,\n                \"Time 4\": true,\n                \"Value\": false,\n                \"Value #Pod Count\": false,\n                \"__name__\": true,\n                \"arch\": true,\n                \"arch 1\": true,\n                \"arch 2\": true,\n                \"arch 3\": true,\n                \"capacity_type 2\": true,\n                \"capacity_type 3\": true,\n                \"instance\": true,\n                \"instance 1\": true,\n                \"instance 2\": true,\n                \"instance 3\": true,\n                \"instance_category 1\": true,\n                \"instance_category 2\": true,\n                \"instance_category 3\": true,\n                \"instance_cpu\": true,\n                \"instance_cpu 1\": true,\n                \"instance_cpu 2\": true,\n                \"instance_cpu 3\": true,\n                \"instance_family\": true,\n                \"instance_family 1\": true,\n                \"instance_family 2\": true,\n                \"instance_family 3\": true,\n                \"instance_generation 1\": true,\n                \"instance_generation 2\": true,\n                \"instance_generation 3\": true,\n                \"instance_gpu_count\": true,\n                \"instance_gpu_count 1\": true,\n                \"instance_gpu_count 2\": true,\n                \"instance_gpu_count 3\": true,\n                \"instance_gpu_manufacturer\": true,\n                \"instance_gpu_manufacturer 1\": true,\n                \"instance_gpu_manufacturer 2\": true,\n                \"instance_gpu_manufacturer 3\": true,\n                \"instance_gpu_memory\": true,\n                \"instance_gpu_memory 1\": true,\n                \"instance_gpu_memory 2\": true,\n                \"instance_gpu_memory 3\": true,\n                \"instance_gpu_name\": true,\n                \"instance_gpu_name 1\": true,\n                \"instance_gpu_name 2\": true,\n                \"instance_gpu_name 3\": true,\n                \"instance_hypervisor\": true,\n                \"instance_hypervisor 1\": true,\n                \"instance_hypervisor 2\": true,\n                \"instance_hypervisor 3\": true,\n                \"instance_local_nvme 1\": true,\n                \"instance_local_nvme 2\": true,\n                \"instance_local_nvme 3\": true,\n                \"instance_memory\": true,\n                \"instance_memory 1\": true,\n                \"instance_memory 2\": true,\n                \"instance_memory 3\": true,\n                \"instance_pods\": true,\n                \"instance_pods 1\": true,\n                \"instance_pods 2\": true,\n                \"instance_pods 3\": true,\n                \"instance_size\": true,\n                \"instance_size 1\": true,\n                \"instance_size 2\": true,\n                \"instance_size 3\": true,\n                \"instance_type 1\": false,\n                \"instance_type 2\": true,\n                \"instance_type 3\": true,\n                \"job\": true,\n                \"job 1\": true,\n                \"job 2\": true,\n                \"job 3\": true,\n                \"node\": true,\n                \"nodepool 1\": false,\n                \"nodepool 2\": true,\n                \"nodepool 3\": true,\n                \"os\": true,\n                \"os 1\": true,\n                \"os 2\": true,\n                \"os 3\": true,\n                \"resource_type\": true,\n                \"resource_type 1\": true,\n                \"resource_type 2\": true,\n                \"resource_type 3\": true,\n                \"zone 1\": false,\n                \"zone 2\": true,\n                \"zone 3\": true\n              },\n              \"indexByName\": {\n                \"Time 1\": 1,\n                \"Time 2\": 25,\n                \"Time 3\": 45,\n                \"Time 4\": 65,\n                \"Value #CPU Utilization\": 10,\n                \"Value #Memory Utilization\": 11,\n                \"Value #Pod Count\": 9,\n                \"Value #Uptime\": 8,\n                \"arch 1\": 5,\n                \"arch 2\": 26,\n                \"arch 3\": 46,\n                \"capacity_type 1\": 6,\n                \"capacity_type 2\": 27,\n                \"capacity_type 3\": 47,\n                \"instance 1\": 4,\n                \"instance 2\": 28,\n                \"instance 3\": 48,\n                \"instance_cpu 1\": 12,\n                \"instance_cpu 2\": 29,\n                \"instance_cpu 3\": 49,\n                \"instance_family 1\": 13,\n                \"instance_family 2\": 30,\n                \"instance_family 3\": 50,\n                \"instance_gpu_count 1\": 14,\n                \"instance_gpu_count 2\": 31,\n                \"instance_gpu_count 3\": 51,\n                \"instance_gpu_manufacturer 1\": 15,\n                \"instance_gpu_manufacturer 2\": 32,\n                \"instance_gpu_manufacturer 3\": 52,\n                \"instance_gpu_memory 1\": 16,\n                \"instance_gpu_memory 2\": 33,\n                \"instance_gpu_memory 3\": 53,\n                \"instance_gpu_name 1\": 17,\n                \"instance_gpu_name 2\": 34,\n                \"instance_gpu_name 3\": 54,\n                \"instance_hypervisor 1\": 18,\n                \"instance_hypervisor 2\": 35,\n                \"instance_hypervisor 3\": 55,\n                \"instance_memory 1\": 19,\n                \"instance_memory 2\": 36,\n                \"instance_memory 3\": 56,\n                \"instance_pods 1\": 20,\n                \"instance_pods 2\": 37,\n                \"instance_pods 3\": 57,\n                \"instance_size 1\": 21,\n                \"instance_size 2\": 38,\n                \"instance_size 3\": 58,\n                \"instance_type 1\": 3,\n                \"instance_type 2\": 39,\n                \"instance_type 3\": 59,\n                \"job 1\": 22,\n                \"job 2\": 40,\n                \"job 3\": 60,\n                \"node\": 66,\n                \"node_name\": 0,\n                \"nodepool 1\": 2,\n                \"nodepool 2\": 42,\n                \"nodepool 3\": 62,\n                \"os 1\": 23,\n                \"os 2\": 41,\n                \"os 3\": 61,\n                \"resource_type 1\": 24,\n                \"resource_type 2\": 43,\n                \"resource_type 3\": 63,\n                \"zone 1\": 7,\n                \"zone 2\": 44,\n                \"zone 3\": 64\n              },\n              \"renameByName\": {\n                \"Time\": \"\",\n                \"Time 1\": \"\",\n                \"Value\": \"CPU Utilization\",\n                \"Value #Allocatable\": \"\",\n                \"Value #CPU Utilization\": \"CPU Utilization\",\n                \"Value #Memory Utilization\": \"Memory Utilization\",\n                \"Value #Pod CPU\": \"\",\n                \"Value #Pod Count\": \"Pods\",\n                \"Value #Uptime\": \"Uptime\",\n                \"arch\": \"Architecture\",\n                \"arch 1\": \"Arch\",\n                \"capacity_type\": \"Capacity Type\",\n                \"capacity_type 1\": \"Capacity Type\",\n                \"instance 1\": \"Instance\",\n                \"instance_cpu 1\": \"vCPU\",\n                \"instance_type\": \"Instance Type\",\n                \"instance_type 1\": \"Instance Type\",\n                \"node_name\": \"Node Name\",\n                \"nodepool 1\": \"Nodepool\",\n                \"zone 1\": \"Zone\"\n              }\n            }\n          }\n        ],\n        \"type\": \"table\"\n      }\n    ],\n    \"refresh\": \"10s\",\n    \"schemaVersion\": 39,\n    \"tags\": [],\n    \"templating\": {\n      \"list\": [\n        {\n          \"current\": {\n            \"selected\": false,\n            \"text\": \"Prometheus\",\n            \"value\": \"prometheus\"\n          },\n          \"hide\": 0,\n          \"includeAll\": false,\n          \"label\": \"Data Source\",\n          \"multi\": false,\n          \"name\": \"datasource\",\n          \"options\": [],\n          \"query\": \"prometheus\",\n          \"refresh\": 1,\n          \"regex\": \"\",\n          \"skipUrlSync\": false,\n          \"type\": \"datasource\"\n        },\n        {\n          \"current\": {\n            \"selected\": true,\n            \"text\": [\n              \"All\"\n            ],\n            \"value\": [\n              \"$__all\"\n            ]\n          },\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"definition\": \"label_values(karpenter_nodes_allocatable, nodepool)\",\n          \"hide\": 0,\n          \"includeAll\": true,\n          \"multi\": true,\n          \"name\": \"nodepool\",\n          \"options\": [],\n          \"query\": {\n            \"query\": \"label_values(karpenter_nodes_allocatable, nodepool)\",\n            \"refId\": \"StandardVariableQuery\"\n          },\n          \"refresh\": 2,\n          \"regex\": \"\",\n          \"skipUrlSync\": false,\n          \"sort\": 1,\n          \"type\": \"query\"\n        },\n        {\n          \"current\": {\n            \"selected\": true,\n            \"text\": [\n              \"All\"\n            ],\n            \"value\": [\n              \"$__all\"\n            ]\n          },\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"definition\": \"label_values(karpenter_nodes_allocatable, zone)\",\n          \"hide\": 0,\n          \"includeAll\": true,\n          \"multi\": true,\n          \"name\": \"zone\",\n          \"options\": [],\n          \"query\": {\n            \"query\": \"label_values(karpenter_nodes_allocatable, zone)\",\n            \"refId\": \"StandardVariableQuery\"\n          },\n          \"refresh\": 2,\n          \"regex\": \"\",\n          \"skipUrlSync\": false,\n          \"sort\": 1,\n          \"type\": \"query\"\n        },\n        {\n          \"current\": {\n            \"selected\": true,\n            \"text\": [\n              \"All\"\n            ],\n            \"value\": [\n              \"$__all\"\n            ]\n          },\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"definition\": \"label_values(karpenter_nodes_allocatable, arch)\",\n          \"hide\": 0,\n          \"includeAll\": true,\n          \"multi\": true,\n          \"name\": \"arch\",\n          \"options\": [],\n          \"query\": {\n            \"query\": \"label_values(karpenter_nodes_allocatable, arch)\",\n            \"refId\": \"StandardVariableQuery\"\n          },\n          \"refresh\": 2,\n          \"regex\": \"\",\n          \"skipUrlSync\": false,\n          \"sort\": 1,\n          \"type\": \"query\"\n        },\n        {\n          \"current\": {\n            \"selected\": true,\n            \"text\": [\n              \"All\"\n            ],\n            \"value\": [\n              \"$__all\"\n            ]\n          },\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"definition\": \"label_values(karpenter_nodes_allocatable, capacity_type)\",\n          \"hide\": 0,\n          \"includeAll\": true,\n          \"multi\": true,\n          \"name\": \"capacity_type\",\n          \"options\": [],\n          \"query\": {\n            \"query\": \"label_values(karpenter_nodes_allocatable, capacity_type)\",\n            \"refId\": \"StandardVariableQuery\"\n          },\n          \"refresh\": 2,\n          \"regex\": \"\",\n          \"skipUrlSync\": false,\n          \"sort\": 1,\n          \"type\": \"query\"\n        },\n        {\n          \"current\": {\n            \"selected\": true,\n            \"text\": [\n              \"All\"\n            ],\n            \"value\": [\n              \"$__all\"\n            ]\n          },\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"definition\": \"label_values(karpenter_nodes_allocatable, instance_type)\",\n          \"hide\": 0,\n          \"includeAll\": true,\n          \"multi\": true,\n          \"name\": \"instance_type\",\n          \"options\": [],\n          \"query\": {\n            \"query\": \"label_values(karpenter_nodes_allocatable, instance_type)\",\n            \"refId\": \"StandardVariableQuery\"\n          },\n          \"refresh\": 2,\n          \"regex\": \"\",\n          \"skipUrlSync\": false,\n          \"sort\": 1,\n          \"type\": \"query\"\n        },\n        {\n          \"current\": {\n            \"selected\": true,\n            \"text\": \"nodepool\",\n            \"value\": \"nodepool\"\n          },\n          \"hide\": 0,\n          \"includeAll\": false,\n          \"multi\": false,\n          \"name\": \"distribution_filter\",\n          \"options\": [\n            {\n              \"selected\": false,\n              \"text\": \"arch\",\n              \"value\": \"arch\"\n            },\n            {\n              \"selected\": false,\n              \"text\": \"capacity_type\",\n              \"value\": \"capacity_type\"\n            },\n            {\n              \"selected\": false,\n              \"text\": \"instance_type\",\n              \"value\": \"instance_type\"\n            },\n            {\n              \"selected\": false,\n              \"text\": \"namespace\",\n              \"value\": \"namespace\"\n            },\n            {\n              \"selected\": false,\n              \"text\": \"node\",\n              \"value\": \"node\"\n            },\n            {\n              \"selected\": true,\n              \"text\": \"nodepool\",\n              \"value\": \"nodepool\"\n            },\n            {\n              \"selected\": false,\n              \"text\": \"zone\",\n              \"value\": \"zone\"\n            }\n          ],\n          \"query\": \"arch,capacity_type,instance_type,namespace,node,nodepool,zone\",\n          \"queryValue\": \"\",\n          \"skipUrlSync\": false,\n          \"type\": \"custom\"\n        }\n      ]\n    },\n    \"time\": {\n      \"from\": \"now-3h\",\n      \"to\": \"now\"\n    },\n    \"timepicker\": {},\n    \"timezone\": \"\",\n    \"title\": \"Karpenter Capacity v1\",\n    \"uid\": \"ta8I9Q67Z\",\n    \"version\": 7,\n    \"weekStart\": \"\"\n  }\n"
  },
  {
    "path": "website/content/en/v1.8/getting-started/getting-started-with-karpenter/karpenter-controllers-allocation.json",
    "content": "{\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": {\n          \"type\": \"datasource\",\n          \"uid\": \"grafana\"\n        },\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"target\": {\n          \"limit\": 100,\n          \"matchAny\": false,\n          \"tags\": [],\n          \"type\": \"dashboard\"\n        },\n        \"type\": \"dashboard\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"gnetId\": null,\n  \"graphTooltip\": 0,\n  \"id\": null,\n  \"iteration\": 1636732403925,\n  \"links\": [],\n  \"panels\": [\n    {\n      \"datasource\": null,\n      \"gridPos\": {\n        \"h\": 4,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"id\": 5,\n      \"options\": {\n        \"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).\",\n        \"mode\": \"markdown\"\n      },\n      \"pluginVersion\": \"8.1.6\",\n      \"targets\": [\n        {\n          \"datasource\": {},\n          \"queryType\": \"randomWalk\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"timeFrom\": null,\n      \"timeShift\": null,\n      \"title\": \"About this dashboard\",\n      \"type\": \"text\"\n    },\n    {\n      \"cards\": {\n        \"cardPadding\": null,\n        \"cardRound\": null\n      },\n      \"color\": {\n        \"cardColor\": \"#b4ff00\",\n        \"colorScale\": \"sqrt\",\n        \"colorScheme\": \"interpolateMagma\",\n        \"exponent\": 0.5,\n        \"min\": null,\n        \"mode\": \"spectrum\"\n      },\n      \"dataFormat\": \"tsbuckets\",\n      \"datasource\": {\n        \"uid\": \"${datasource}\"\n      },\n      \"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.\",\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 4\n      },\n      \"heatmap\": {},\n      \"hideZeroBuckets\": false,\n      \"highlightCards\": true,\n      \"id\": 2,\n      \"legend\": {\n        \"show\": true\n      },\n      \"maxDataPoints\": 25,\n      \"pluginVersion\": \"7.5.0\",\n      \"reverseYBuckets\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"uid\": \"${datasource}\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"sum(increase(karpenter_allocation_controller_bind_duration_seconds_bucket[$__interval])) by (le)\",\n          \"format\": \"heatmap\",\n          \"instant\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{le}}\",\n          \"queryType\": \"randomWalk\",\n          \"refId\": \"All Binds\"\n        }\n      ],\n      \"title\": \"Bind duration\",\n      \"tooltip\": {\n        \"show\": true,\n        \"showHistogram\": false\n      },\n      \"type\": \"heatmap\",\n      \"xAxis\": {\n        \"show\": true\n      },\n      \"xBucketNumber\": null,\n      \"xBucketSize\": null,\n      \"yAxis\": {\n        \"decimals\": 0,\n        \"format\": \"s\",\n        \"logBase\": 1,\n        \"max\": null,\n        \"min\": \"0\",\n        \"show\": true,\n        \"splitFactor\": null\n      },\n      \"yBucketBound\": \"auto\",\n      \"yBucketNumber\": null,\n      \"yBucketSize\": null\n    },\n    {\n      \"cards\": {\n        \"cardPadding\": null,\n        \"cardRound\": null\n      },\n      \"color\": {\n        \"cardColor\": \"#b4ff00\",\n        \"colorScale\": \"sqrt\",\n        \"colorScheme\": \"interpolateMagma\",\n        \"exponent\": 0.5,\n        \"mode\": \"spectrum\"\n      },\n      \"dataFormat\": \"tsbuckets\",\n      \"datasource\": {\n        \"uid\": \"${datasource}\"\n      },\n      \"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.\",\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 12\n      },\n      \"heatmap\": {},\n      \"hideZeroBuckets\": false,\n      \"highlightCards\": true,\n      \"id\": 7,\n      \"legend\": {\n        \"show\": true\n      },\n      \"maxDataPoints\": 25,\n      \"pluginVersion\": \"7.5.0\",\n      \"reverseYBuckets\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"uid\": \"${datasource}\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"sum(increase(karpenter_allocation_controller_binpacking_duration_seconds_bucket[$__interval])) by (le)\",\n          \"format\": \"heatmap\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{le}}\",\n          \"queryType\": \"randomWalk\",\n          \"refId\": \"Binpacking Duration\"\n        }\n      ],\n      \"title\": \"Binpack duration\",\n      \"tooltip\": {\n        \"show\": true,\n        \"showHistogram\": false\n      },\n      \"type\": \"heatmap\",\n      \"xAxis\": {\n        \"show\": true\n      },\n      \"xBucketNumber\": null,\n      \"xBucketSize\": null,\n      \"yAxis\": {\n        \"decimals\": 0,\n        \"format\": \"s\",\n        \"logBase\": 1,\n        \"max\": null,\n        \"min\": \"0\",\n        \"show\": true,\n        \"splitFactor\": null\n      },\n      \"yBucketBound\": \"auto\",\n      \"yBucketNumber\": null,\n      \"yBucketSize\": null\n    },\n    {\n      \"cards\": {\n        \"cardPadding\": null,\n        \"cardRound\": null\n      },\n      \"color\": {\n        \"cardColor\": \"#b4ff00\",\n        \"colorScale\": \"sqrt\",\n        \"colorScheme\": \"interpolateInferno\",\n        \"exponent\": 0.5,\n        \"mode\": \"spectrum\"\n      },\n      \"dataFormat\": \"tsbuckets\",\n      \"datasource\": {\n        \"uid\": \"${datasource}\"\n      },\n      \"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.\",\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 20\n      },\n      \"heatmap\": {},\n      \"hideZeroBuckets\": false,\n      \"highlightCards\": true,\n      \"id\": 9,\n      \"legend\": {\n        \"show\": true\n      },\n      \"maxDataPoints\": 25,\n      \"pluginVersion\": \"7.5.0\",\n      \"reverseYBuckets\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"uid\": \"${datasource}\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"sum(increase(karpenter_allocation_controller_scheduling_duration_seconds_bucket{provisioner=\\\"$provisioner\\\"}[$__interval])) by (le)\",\n          \"format\": \"heatmap\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{le}}\",\n          \"queryType\": \"randomWalk\",\n          \"refId\": \"Scheduling Duration\"\n        }\n      ],\n      \"title\": \"Scheduling duration\",\n      \"tooltip\": {\n        \"show\": true,\n        \"showHistogram\": false\n      },\n      \"type\": \"heatmap\",\n      \"xAxis\": {\n        \"show\": true\n      },\n      \"xBucketNumber\": null,\n      \"xBucketSize\": null,\n      \"yAxis\": {\n        \"decimals\": 0,\n        \"format\": \"s\",\n        \"logBase\": 1,\n        \"max\": null,\n        \"min\": null,\n        \"show\": true,\n        \"splitFactor\": null\n      },\n      \"yBucketBound\": \"auto\",\n      \"yBucketNumber\": null,\n      \"yBucketSize\": null\n    }\n  ],\n  \"refresh\": \"1m\",\n  \"schemaVersion\": 30,\n  \"style\": \"dark\",\n  \"tags\": [],\n  \"templating\": {\n    \"list\": [\n      {\n        \"current\": {\n          \"selected\": false,\n          \"text\": \"Prometheus\",\n          \"value\": \"Prometheus\"\n        },\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Data Source\",\n        \"multi\": false,\n        \"name\": \"datasource\",\n        \"options\": [],\n        \"query\": \"prometheus\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"type\": \"datasource\"\n      },\n      {\n        \"allValue\": null,\n        \"current\": {},\n        \"datasource\": {\n          \"uid\": \"${datasource}\"\n        },\n        \"definition\": \"label_values(karpenter_allocation_controller_scheduling_duration_seconds_bucket, provisioner)\",\n        \"description\": \"Karpenter provisioner\",\n        \"error\": null,\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Provisioner\",\n        \"multi\": false,\n        \"name\": \"provisioner\",\n        \"options\": [],\n        \"query\": {\n          \"query\": \"label_values(karpenter_allocation_controller_scheduling_duration_seconds_bucket, provisioner)\",\n          \"refId\": \"StandardVariableQuery\"\n        },\n        \"refresh\": 2,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"sort\": 1,\n        \"type\": \"query\"\n      }\n    ]\n  },\n  \"time\": {\n    \"from\": \"now-3h\",\n    \"to\": \"now\"\n  },\n  \"timepicker\": {},\n  \"timezone\": \"\",\n  \"title\": \"Controllers / Allocation\",\n  \"uid\": \"fs47R-Dnz\",\n  \"version\": 9\n}\n"
  },
  {
    "path": "website/content/en/v1.8/getting-started/getting-started-with-karpenter/karpenter-controllers.json",
    "content": "{\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": {\n          \"type\": \"datasource\",\n          \"uid\": \"grafana\"\n        },\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"target\": {\n          \"limit\": 100,\n          \"matchAny\": false,\n          \"tags\": [],\n          \"type\": \"dashboard\"\n        },\n        \"type\": \"dashboard\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"gnetId\": null,\n  \"graphTooltip\": 0,\n  \"id\": null,\n  \"iteration\": 1636733515850,\n  \"links\": [],\n  \"panels\": [\n    {\n      \"datasource\": null,\n      \"description\": \"\",\n      \"gridPos\": {\n        \"h\": 4,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"id\": 99,\n      \"options\": {\n        \"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).\",\n        \"mode\": \"markdown\"\n      },\n      \"pluginVersion\": \"8.1.6\",\n      \"title\": \"About this dashboard\",\n      \"type\": \"text\"\n    },\n    {\n      \"aliasColors\": {\n        \"items\": \"light-blue\"\n      },\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": {\n        \"uid\": \"${datasource}\"\n      },\n      \"description\": \"\",\n      \"fill\": 1,\n      \"fillGradient\": 2,\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 8,\n        \"x\": 0,\n        \"y\": 4\n      },\n      \"hiddenSeries\": false,\n      \"id\": 14,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": true,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"options\": {\n        \"alertThreshold\": true\n      },\n      \"percentage\": false,\n      \"pluginVersion\": \"8.1.6\",\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"uid\": \"${datasource}\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"workqueue_depth{name=\\\"$controller\\\"}\",\n          \"interval\": \"\",\n          \"legendFormat\": \"items\",\n          \"queryType\": \"randomWalk\",\n          \"refId\": \"Work Queue Depth\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeFrom\": null,\n      \"timeRegions\": [],\n      \"timeShift\": null,\n      \"title\": \"Items in Work Queue\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"graph\",\n      \"xaxis\": {\n        \"buckets\": null,\n        \"mode\": \"time\",\n        \"name\": null,\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"decimals\": 0,\n          \"format\": \"short\",\n          \"label\": \"\",\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"label\": null,\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": null,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false,\n        \"alignLevel\": null\n      }\n    },\n    {\n      \"aliasColors\": {\n        \"error\": \"red\",\n        \"requeue\": \"orange\",\n        \"requeue_after\": \"semi-dark-purple\",\n        \"success\": \"green\"\n      },\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": {\n        \"uid\": \"${datasource}\"\n      },\n      \"description\": \"The rate of completed reconciliations per minute broken out by result status.\",\n      \"fill\": 1,\n      \"fillGradient\": 1,\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 8,\n        \"x\": 8,\n        \"y\": 4\n      },\n      \"hiddenSeries\": false,\n      \"id\": 76,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": true,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"options\": {\n        \"alertThreshold\": true\n      },\n      \"percentage\": false,\n      \"pluginVersion\": \"8.1.6\",\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"uid\": \"${datasource}\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"rate(controller_runtime_reconcile_total{controller=\\\"$controller\\\"}[$trailing]) * 60\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{result}}\",\n          \"queryType\": \"randomWalk\",\n          \"refId\": \"Reconciliations per minute\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeFrom\": null,\n      \"timeRegions\": [],\n      \"timeShift\": null,\n      \"title\": \"Reconciliations per minute\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"graph\",\n      \"xaxis\": {\n        \"buckets\": null,\n        \"mode\": \"time\",\n        \"name\": null,\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"$$hashKey\": \"object:566\",\n          \"format\": \"short\",\n          \"label\": null,\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": true\n        },\n        {\n          \"$$hashKey\": \"object:567\",\n          \"format\": \"short\",\n          \"label\": null,\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": null,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false,\n        \"alignLevel\": null\n      }\n    },\n    {\n      \"cards\": {\n        \"cardPadding\": null,\n        \"cardRound\": null\n      },\n      \"color\": {\n        \"cardColor\": \"#b4ff00\",\n        \"colorScale\": \"sqrt\",\n        \"colorScheme\": \"interpolateMagma\",\n        \"exponent\": 0.5,\n        \"mode\": \"spectrum\"\n      },\n      \"dataFormat\": \"tsbuckets\",\n      \"datasource\": {\n        \"uid\": \"${datasource}\"\n      },\n      \"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.\",\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 8,\n        \"x\": 16,\n        \"y\": 4\n      },\n      \"heatmap\": {},\n      \"hideZeroBuckets\": false,\n      \"highlightCards\": true,\n      \"id\": 126,\n      \"legend\": {\n        \"show\": true\n      },\n      \"maxDataPoints\": 25,\n      \"pluginVersion\": \"8.1.6\",\n      \"reverseYBuckets\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"uid\": \"${datasource}\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"sum(increase(controller_runtime_reconcile_time_seconds_bucket{controller=\\\"$controller\\\"}[$__interval])) by (le)\",\n          \"format\": \"heatmap\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{le}}\",\n          \"queryType\": \"randomWalk\",\n          \"refId\": \"p100\"\n        }\n      ],\n      \"timeFrom\": null,\n      \"timeShift\": null,\n      \"title\": \"Reconciliation duration\",\n      \"tooltip\": {\n        \"show\": true,\n        \"showHistogram\": false\n      },\n      \"type\": \"heatmap\",\n      \"xAxis\": {\n        \"show\": true\n      },\n      \"xBucketNumber\": null,\n      \"xBucketSize\": null,\n      \"yAxis\": {\n        \"decimals\": 0,\n        \"format\": \"s\",\n        \"logBase\": 1,\n        \"max\": null,\n        \"min\": \"0\",\n        \"show\": true,\n        \"splitFactor\": null\n      },\n      \"yBucketBound\": \"auto\",\n      \"yBucketNumber\": null,\n      \"yBucketSize\": null\n    }\n  ],\n  \"refresh\": \"1m\",\n  \"schemaVersion\": 31,\n  \"style\": \"dark\",\n  \"tags\": [],\n  \"templating\": {\n    \"list\": [\n      {\n        \"current\": {},\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Data Source\",\n        \"multi\": false,\n        \"name\": \"datasource\",\n        \"options\": [],\n        \"query\": \"prometheus\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"type\": \"datasource\"\n      },\n      {\n        \"allValue\": \"\",\n        \"current\": {},\n        \"datasource\": {\n          \"uid\": \"${datasource}\"\n        },\n        \"definition\": \"label_values(controller_runtime_reconcile_errors_total, controller)\",\n        \"description\": \"Kubernetes controller\",\n        \"error\": null,\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Controller\",\n        \"multi\": false,\n        \"name\": \"controller\",\n        \"options\": [],\n        \"query\": {\n          \"query\": \"label_values(controller_runtime_reconcile_errors_total, controller)\",\n          \"refId\": \"StandardVariableQuery\"\n        },\n        \"refresh\": 2,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"selected\": true,\n          \"text\": \"10m\",\n          \"value\": \"10m\"\n        },\n        \"description\": \"Trailing aggregation window\",\n        \"error\": null,\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Trailing\",\n        \"multi\": false,\n        \"name\": \"trailing\",\n        \"options\": [\n          {\n            \"selected\": false,\n            \"text\": \"30s\",\n            \"value\": \"30s\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"1m\",\n            \"value\": \"1m\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"5m\",\n            \"value\": \"5m\"\n          },\n          {\n            \"selected\": true,\n            \"text\": \"10m\",\n            \"value\": \"10m\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"30m\",\n            \"value\": \"30m\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"1h\",\n            \"value\": \"1h\"\n          }\n        ],\n        \"query\": \"30s,1m,5m,10m,30m,1h\",\n        \"queryValue\": \"\",\n        \"skipUrlSync\": false,\n        \"type\": \"custom\"\n      }\n    ]\n  },\n  \"time\": {\n    \"from\": \"now-1h\",\n    \"to\": \"now\"\n  },\n  \"timepicker\": {},\n  \"timezone\": \"\",\n  \"title\": \"Controllers\",\n  \"uid\": \"-Yw9ShDnz\",\n  \"version\": 15\n}\n"
  },
  {
    "path": "website/content/en/v1.8/getting-started/getting-started-with-karpenter/karpenter-performance-dashboard.json",
    "content": "{\n    \"annotations\": {\n      \"list\": [\n        {\n          \"builtIn\": 1,\n          \"datasource\": \"-- Grafana --\",\n          \"enable\": true,\n          \"hide\": true,\n          \"iconColor\": \"rgba(0, 211, 255, 1)\",\n          \"name\": \"Annotations & Alerts\",\n          \"target\": {\n            \"limit\": 100,\n            \"matchAny\": false,\n            \"tags\": [],\n            \"type\": \"dashboard\"\n          },\n          \"type\": \"dashboard\"\n        }\n      ]\n    },\n    \"editable\": true,\n    \"fiscalYearStartMonth\": 0,\n    \"graphTooltip\": 0,\n    \"id\": 33,\n    \"links\": [],\n    \"liveNow\": true,\n    \"panels\": [\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisBorderShow\": false,\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"\",\n              \"axisPlacement\": \"auto\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 0,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"insertNulls\": false,\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"never\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"none\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            },\n            \"unit\": \"s\"\n          },\n          \"overrides\": []\n        },\n        \"gridPos\": {\n          \"h\": 9,\n          \"w\": 24,\n          \"x\": 0,\n          \"y\": 0\n        },\n        \"id\": 4,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [\n              \"max\"\n            ],\n            \"displayMode\": \"table\",\n            \"placement\": \"right\",\n            \"showLegend\": true\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"max(karpenter_nodes_termination_duration_seconds{quantile=\\\"0\\\"})\",\n            \"legendFormat\": \"Min\",\n            \"range\": true,\n            \"refId\": \"A\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"max(karpenter_nodes_termination_duration_seconds{quantile=\\\"0.5\\\"})\",\n            \"hide\": false,\n            \"legendFormat\": \"P50\",\n            \"range\": true,\n            \"refId\": \"B\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"max(karpenter_nodes_termination_duration_seconds{quantile=\\\"0.9\\\"})\",\n            \"hide\": false,\n            \"legendFormat\": \"P90\",\n            \"range\": true,\n            \"refId\": \"C\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"max(karpenter_nodes_termination_duration_seconds{quantile=\\\"0.99\\\"})\",\n            \"hide\": false,\n            \"legendFormat\": \"P99\",\n            \"range\": true,\n            \"refId\": \"D\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"max(karpenter_nodes_termination_duration_seconds{quantile=\\\"1\\\"})\",\n            \"hide\": false,\n            \"legendFormat\": \"Max\",\n            \"range\": true,\n            \"refId\": \"E\"\n          }\n        ],\n        \"title\": \"Node Termination Latency\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisBorderShow\": false,\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"\",\n              \"axisPlacement\": \"auto\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 10,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"insertNulls\": false,\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"never\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"none\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"min\": 0,\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            },\n            \"unit\": \"s\"\n          },\n          \"overrides\": []\n        },\n        \"gridPos\": {\n          \"h\": 8,\n          \"w\": 24,\n          \"x\": 0,\n          \"y\": 9\n        },\n        \"id\": 2,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [\n              \"max\"\n            ],\n            \"displayMode\": \"table\",\n            \"placement\": \"right\",\n            \"showLegend\": true\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"max(karpenter_pods_startup_duration_seconds{quantile=\\\"0\\\"})\",\n            \"format\": \"time_series\",\n            \"legendFormat\": \"Min\",\n            \"range\": true,\n            \"refId\": \"Minimum\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"max(karpenter_pods_startup_duration_seconds{quantile=\\\"0.5\\\"})\",\n            \"hide\": false,\n            \"legendFormat\": \"P50\",\n            \"range\": true,\n            \"refId\": \"Median\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"max(karpenter_pods_startup_duration_seconds{quantile=\\\"0.9\\\"})\",\n            \"hide\": false,\n            \"legendFormat\": \"P90\",\n            \"range\": true,\n            \"refId\": \"P90\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"max(karpenter_pods_startup_duration_seconds{quantile=\\\"0.99\\\"})\",\n            \"hide\": false,\n            \"legendFormat\": \"P99\",\n            \"range\": true,\n            \"refId\": \"P99\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"max(karpenter_pods_startup_duration_seconds{quantile=\\\"1\\\"})\",\n            \"hide\": false,\n            \"legendFormat\": \"Max\",\n            \"range\": true,\n            \"refId\": \"Maximum\"\n          }\n        ],\n        \"title\": \"Pod Startup Latency\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisBorderShow\": false,\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"\",\n              \"axisPlacement\": \"auto\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 10,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"insertNulls\": false,\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"never\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"none\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            },\n            \"unit\": \"s\"\n          },\n          \"overrides\": []\n        },\n        \"gridPos\": {\n          \"h\": 8,\n          \"w\": 13,\n          \"x\": 0,\n          \"y\": 17\n        },\n        \"id\": 6,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [],\n            \"displayMode\": \"list\",\n            \"placement\": \"bottom\",\n            \"showLegend\": true\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"histogram_quantile(0, rate(controller_runtime_reconcile_time_seconds_bucket{controller=\\\"$controller\\\"}[10m]))\",\n            \"hide\": false,\n            \"legendFormat\": \"Min\",\n            \"range\": true,\n            \"refId\": \"Minimum\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"histogram_quantile(0.5, rate(controller_runtime_reconcile_time_seconds_bucket{controller=\\\"$controller\\\"}[10m]))\",\n            \"legendFormat\": \"P50\",\n            \"range\": true,\n            \"refId\": \"Median\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"histogram_quantile(0.9, rate(controller_runtime_reconcile_time_seconds_bucket{controller=\\\"$controller\\\"}[10m]))\",\n            \"hide\": false,\n            \"legendFormat\": \"P90\",\n            \"range\": true,\n            \"refId\": \"P90\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"histogram_quantile(0.99, rate(controller_runtime_reconcile_time_seconds_bucket{controller=\\\"$controller\\\"}[10m]))\",\n            \"hide\": false,\n            \"legendFormat\": \"P99\",\n            \"range\": true,\n            \"refId\": \"P99\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"histogram_quantile(1, rate(controller_runtime_reconcile_time_seconds_bucket{controller=\\\"$controller\\\"}[10m]))\",\n            \"hide\": false,\n            \"legendFormat\": \"Max\",\n            \"range\": true,\n            \"refId\": \"Maximum\"\n          }\n        ],\n        \"title\": \"Controller Reconciliation Latency [$controller]\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"thresholds\"\n            },\n            \"mappings\": [],\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            },\n            \"unit\": \"reqps\"\n          },\n          \"overrides\": []\n        },\n        \"gridPos\": {\n          \"h\": 8,\n          \"w\": 11,\n          \"x\": 13,\n          \"y\": 17\n        },\n        \"id\": 8,\n        \"options\": {\n          \"displayMode\": \"gradient\",\n          \"maxVizHeight\": 300,\n          \"minVizHeight\": 10,\n          \"minVizWidth\": 0,\n          \"namePlacement\": \"auto\",\n          \"orientation\": \"horizontal\",\n          \"reduceOptions\": {\n            \"calcs\": [\n              \"lastNotNull\"\n            ],\n            \"fields\": \"\",\n            \"values\": false\n          },\n          \"showUnfilled\": true,\n          \"sizing\": \"auto\",\n          \"valueMode\": \"color\"\n        },\n        \"pluginVersion\": \"11.1.0\",\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"sum(rate(controller_runtime_reconcile_total{job=\\\"karpenter\\\"}[10m])) by (controller)\",\n            \"legendFormat\": \"{{controller}}\",\n            \"range\": true,\n            \"refId\": \"A\"\n          }\n        ],\n        \"title\": \"Controller Reconciliation Rate\",\n        \"type\": \"bargauge\"\n      }\n    ],\n    \"refresh\": \"5s\",\n    \"schemaVersion\": 39,\n    \"tags\": [],\n    \"templating\": {\n      \"list\": [\n        {\n          \"current\": {\n            \"selected\": false,\n            \"text\": \"Prometheus\",\n            \"value\": \"prometheus\"\n          },\n          \"hide\": 0,\n          \"includeAll\": false,\n          \"label\": \"Data Source\",\n          \"multi\": false,\n          \"name\": \"datasource\",\n          \"options\": [],\n          \"query\": \"prometheus\",\n          \"refresh\": 1,\n          \"regex\": \"\",\n          \"skipUrlSync\": false,\n          \"type\": \"datasource\"\n        },\n        {\n          \"current\": {\n            \"selected\": false,\n            \"text\": \"disruption\",\n            \"value\": \"disruption\"\n          },\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"definition\": \"label_values(controller_runtime_reconcile_time_seconds_count{job=\\\"karpenter\\\"}, controller)\",\n          \"hide\": 0,\n          \"includeAll\": false,\n          \"multi\": false,\n          \"name\": \"controller\",\n          \"options\": [],\n          \"query\": {\n            \"query\": \"label_values(controller_runtime_reconcile_time_seconds_count{job=\\\"karpenter\\\"}, controller)\",\n            \"refId\": \"StandardVariableQuery\"\n          },\n          \"refresh\": 2,\n          \"regex\": \"\",\n          \"skipUrlSync\": false,\n          \"sort\": 0,\n          \"type\": \"query\"\n        }\n      ]\n    },\n    \"time\": {\n      \"from\": \"now-3h\",\n      \"to\": \"now\"\n    },\n    \"timepicker\": {},\n    \"timezone\": \"\",\n    \"title\": \"Karpenter Performance v1\",\n    \"uid\": \"fdusq1f2alerke\",\n    \"version\": 3,\n    \"weekStart\": \"\"\n  }\n"
  },
  {
    "path": "website/content/en/v1.8/getting-started/getting-started-with-karpenter/prometheus-values.yaml",
    "content": "alertmanager:\n  persistentVolume:\n    enabled: false\n\nserver:\n  fullnameOverride: prometheus-server\n  persistentVolume:\n    enabled: false\n\nextraScrapeConfigs: |\n    - job_name: karpenter\n      kubernetes_sd_configs:\n      - role: endpoints\n        namespaces:\n          names:\n          - $KARPENTER_NAMESPACE\n      relabel_configs:\n      - source_labels:\n        - __meta_kubernetes_endpoints_name\n        - __meta_kubernetes_endpoint_port_name\n        action: keep\n        regex: karpenter;http-metrics\n"
  },
  {
    "path": "website/content/en/v1.8/getting-started/getting-started-with-karpenter/scripts/step01-config.sh",
    "content": "export AWS_PARTITION=\"aws\" # if you are not using standard partitions, you may need to configure to aws-cn / aws-us-gov\nexport CLUSTER_NAME=\"${USER}-karpenter-demo\"\nexport AWS_DEFAULT_REGION=\"us-west-2\"\nexport AWS_ACCOUNT_ID=\"$(aws sts get-caller-identity --query Account --output text)\"\nexport TEMPOUT=\"$(mktemp)\"\nexport ALIAS_VERSION=\"$(aws ssm get-parameter --name \"/aws/service/eks/optimized-ami/${K8S_VERSION}/amazon-linux-2023/x86_64/standard/recommended/image_id\" --query Parameter.Value | xargs aws ec2 describe-images --query 'Images[0].Name' --image-ids | sed -r 's/^.*(v[[:digit:]]+).*$/\\1/')\"\n"
  },
  {
    "path": "website/content/en/v1.8/getting-started/getting-started-with-karpenter/scripts/step02-create-cluster-fargate.sh",
    "content": "curl -fsSL https://raw.githubusercontent.com/aws/karpenter-provider-aws/v\"${KARPENTER_VERSION}\"/website/content/en/preview/getting-started/getting-started-with-karpenter/cloudformation.yaml  > $TEMPOUT \\\n&& aws cloudformation deploy \\\n  --stack-name \"Karpenter-${CLUSTER_NAME}\" \\\n  --template-file \"${TEMPOUT}\" \\\n  --capabilities CAPABILITY_NAMED_IAM \\\n  --parameter-overrides \"ClusterName=${CLUSTER_NAME}\"\n\neksctl create cluster -f - <<EOF\n---\napiVersion: eksctl.io/v1alpha5\nkind: ClusterConfig\nmetadata:\n  name: ${CLUSTER_NAME}\n  region: ${AWS_DEFAULT_REGION}\n  version: \"${K8S_VERSION}\"\n  tags:\n    karpenter.sh/discovery: ${CLUSTER_NAME}\n\niam:\n  withOIDC: true\n  serviceAccounts:\n  - metadata:\n      name: karpenter\n      namespace: \"${KARPENTER_NAMESPACE}\"\n    roleName: ${CLUSTER_NAME}-karpenter\n    attachPolicyARNs:\n    - arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:policy/KarpenterControllerPolicy-${CLUSTER_NAME}\n    roleOnly: true\n\niamIdentityMappings:\n- arn: \"arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/KarpenterNodeRole-${CLUSTER_NAME}\"\n  username: system:node:{{EC2PrivateDNSName}}\n  groups:\n  - system:bootstrappers\n  - system:nodes\n  ## If you intend to run Windows workloads, the kube-proxy group should be specified.\n  # For more information, see https://github.com/aws/karpenter/issues/5099.\n  # - eks:kube-proxy-windows\n\nfargateProfiles:\n- name: karpenter\n  selectors:\n  - namespace: \"${KARPENTER_NAMESPACE}\"\nEOF\n\nexport CLUSTER_ENDPOINT=\"$(aws eks describe-cluster --name ${CLUSTER_NAME} --query \"cluster.endpoint\" --output text)\"\nexport KARPENTER_IAM_ROLE_ARN=\"arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/${CLUSTER_NAME}-karpenter\"\n\necho $CLUSTER_ENDPOINT $KARPENTER_IAM_ROLE_ARN\n"
  },
  {
    "path": "website/content/en/v1.8/getting-started/getting-started-with-karpenter/scripts/step02-create-cluster.sh",
    "content": "curl -fsSL https://raw.githubusercontent.com/aws/karpenter-provider-aws/v\"${KARPENTER_VERSION}\"/website/content/en/preview/getting-started/getting-started-with-karpenter/cloudformation.yaml  > \"${TEMPOUT}\" \\\n&& aws cloudformation deploy \\\n  --stack-name \"Karpenter-${CLUSTER_NAME}\" \\\n  --template-file \"${TEMPOUT}\" \\\n  --capabilities CAPABILITY_NAMED_IAM \\\n  --parameter-overrides \"ClusterName=${CLUSTER_NAME}\"\n\neksctl create cluster -f - <<EOF\n---\napiVersion: eksctl.io/v1alpha5\nkind: ClusterConfig\nmetadata:\n  name: ${CLUSTER_NAME}\n  region: ${AWS_DEFAULT_REGION}\n  version: \"${K8S_VERSION}\"\n  tags:\n    karpenter.sh/discovery: ${CLUSTER_NAME}\n\niam:\n  withOIDC: true\n  podIdentityAssociations:\n  - namespace: \"${KARPENTER_NAMESPACE}\"\n    serviceAccountName: karpenter\n    roleName: ${CLUSTER_NAME}-karpenter\n    permissionPolicyARNs:\n    - arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:policy/KarpenterControllerPolicy-${CLUSTER_NAME}\n\niamIdentityMappings:\n- arn: \"arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/KarpenterNodeRole-${CLUSTER_NAME}\"\n  username: system:node:{{EC2PrivateDNSName}}\n  groups:\n  - system:bootstrappers\n  - system:nodes\n  ## If you intend to run Windows workloads, the kube-proxy group should be specified.\n  # For more information, see https://github.com/aws/karpenter/issues/5099.\n  # - eks:kube-proxy-windows\n\nmanagedNodeGroups:\n- instanceType: m5.large\n  amiFamily: AmazonLinux2023\n  name: ${CLUSTER_NAME}-ng\n  desiredCapacity: 2\n  minSize: 1\n  maxSize: 10\n\naddons:\n- name: eks-pod-identity-agent\nEOF\n\nexport CLUSTER_ENDPOINT=\"$(aws eks describe-cluster --name \"${CLUSTER_NAME}\" --query \"cluster.endpoint\" --output text)\"\nexport KARPENTER_IAM_ROLE_ARN=\"arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/${CLUSTER_NAME}-karpenter\"\n\necho \"${CLUSTER_ENDPOINT} ${KARPENTER_IAM_ROLE_ARN}\"\n"
  },
  {
    "path": "website/content/en/v1.8/getting-started/getting-started-with-karpenter/scripts/step03-iam-cloud-formation.sh",
    "content": "TEMPOUT=\"$(mktemp)\"\n\ncurl -fsSL https://raw.githubusercontent.com/aws/karpenter-provider-aws/v\"${KARPENTER_VERSION}\"/website/content/en/preview/getting-started/getting-started-with-karpenter/cloudformation.yaml  > \"${TEMPOUT}\" \\\n&& aws cloudformation deploy \\\n  --stack-name \"Karpenter-${CLUSTER_NAME}\" \\\n  --template-file \"${TEMPOUT}\" \\\n  --capabilities CAPABILITY_NAMED_IAM \\\n  --parameter-overrides \"ClusterName=${CLUSTER_NAME}\"\n"
  },
  {
    "path": "website/content/en/v1.8/getting-started/getting-started-with-karpenter/scripts/step04-grant-access.sh",
    "content": "eksctl create iamidentitymapping \\\n  --username system:node:{{EC2PrivateDNSName}} \\\n  --cluster \"${CLUSTER_NAME}\" \\\n  --arn \"arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/KarpenterNodeRole-${CLUSTER_NAME}\" \\\n  --group system:bootstrappers \\\n  --group system:nodes\n"
  },
  {
    "path": "website/content/en/v1.8/getting-started/getting-started-with-karpenter/scripts/step05-controller-iam.sh",
    "content": "eksctl create iamserviceaccount \\\n  --cluster \"${CLUSTER_NAME}\" --name karpenter --namespace \"${KARPENTER_NAMESPACE}\" \\\n  --role-name \"${CLUSTER_NAME}-karpenter\" \\\n  --attach-policy-arn \"arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:policy/KarpenterControllerPolicy-${CLUSTER_NAME}\" \\\n  --role-only \\\n  --approve\n\nexport KARPENTER_IAM_ROLE_ARN=\"arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/${CLUSTER_NAME}-karpenter\"\n"
  },
  {
    "path": "website/content/en/v1.8/getting-started/getting-started-with-karpenter/scripts/step06-add-spot-role.sh",
    "content": "aws iam create-service-linked-role --aws-service-name spot.amazonaws.com || true\n# If the role has already been successfully created, you will see:\n# An error occurred (InvalidInput) when calling the CreateServiceLinkedRole operation: Service role name AWSServiceRoleForEC2Spot has been taken in this account, please try a different suffix.\n"
  },
  {
    "path": "website/content/en/v1.8/getting-started/getting-started-with-karpenter/scripts/step08-apply-helm-chart-fargate.sh",
    "content": "# Logout of helm registry to perform an unauthenticated pull against the public ECR\nhelm registry logout public.ecr.aws\n\nhelm upgrade --install karpenter oci://public.ecr.aws/karpenter/karpenter --version \"${KARPENTER_VERSION}\" --namespace \"${KARPENTER_NAMESPACE}\" --create-namespace \\\n  --set \"settings.clusterName=${CLUSTER_NAME}\" \\\n  --set \"settings.interruptionQueue=${CLUSTER_NAME}\" \\\n  --set controller.resources.requests.cpu=1 \\\n  --set controller.resources.requests.memory=1Gi \\\n  --set controller.resources.limits.cpu=1 \\\n  --set controller.resources.limits.memory=1Gi \\\n  --set serviceAccount.annotations.\"eks\\.amazonaws\\.com/role-arn\"=\"arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/${CLUSTER_NAME}-karpenter\" \\\n  --wait\n"
  },
  {
    "path": "website/content/en/v1.8/getting-started/getting-started-with-karpenter/scripts/step08-apply-helm-chart.sh",
    "content": "# Logout of helm registry to perform an unauthenticated pull against the public ECR\nhelm registry logout public.ecr.aws\n\nhelm upgrade --install karpenter oci://public.ecr.aws/karpenter/karpenter --version \"${KARPENTER_VERSION}\" --namespace \"${KARPENTER_NAMESPACE}\" --create-namespace \\\n  --set \"settings.clusterName=${CLUSTER_NAME}\" \\\n  --set \"settings.interruptionQueue=${CLUSTER_NAME}\" \\\n  --set controller.resources.requests.cpu=1 \\\n  --set controller.resources.requests.memory=1Gi \\\n  --set controller.resources.limits.cpu=1 \\\n  --set controller.resources.limits.memory=1Gi \\\n  --wait\n"
  },
  {
    "path": "website/content/en/v1.8/getting-started/getting-started-with-karpenter/scripts/step09-add-prometheus-grafana.sh",
    "content": "helm repo add grafana-charts https://grafana.github.io/helm-charts\nhelm repo add prometheus-community https://prometheus-community.github.io/helm-charts\nhelm repo update\n\nkubectl create namespace monitoring\n\ncurl -fsSL https://raw.githubusercontent.com/aws/karpenter-provider-aws/v\"${KARPENTER_VERSION}\"/website/content/en/preview/getting-started/getting-started-with-karpenter/prometheus-values.yaml | envsubst | tee prometheus-values.yaml\nhelm install --namespace monitoring prometheus prometheus-community/prometheus --values prometheus-values.yaml\n\ncurl -fsSL https://raw.githubusercontent.com/aws/karpenter-provider-aws/v\"${KARPENTER_VERSION}\"/website/content/en/preview/getting-started/getting-started-with-karpenter/grafana-values.yaml | tee grafana-values.yaml\nhelm install --namespace monitoring grafana grafana-charts/grafana --values grafana-values.yaml\n"
  },
  {
    "path": "website/content/en/v1.8/getting-started/getting-started-with-karpenter/scripts/step10-add-grafana-port-forward.sh",
    "content": "kubectl port-forward --namespace monitoring svc/grafana 3000:80\n"
  },
  {
    "path": "website/content/en/v1.8/getting-started/getting-started-with-karpenter/scripts/step11-grafana-get-password.sh",
    "content": "kubectl get secret --namespace monitoring grafana -o jsonpath=\"{.data.admin-password}\" | base64 --decode\n"
  },
  {
    "path": "website/content/en/v1.8/getting-started/getting-started-with-karpenter/scripts/step12-add-nodepool.sh",
    "content": "cat <<EOF | envsubst | kubectl apply -f -\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\nspec:\n  template:\n    spec:\n      requirements:\n        - key: kubernetes.io/arch\n          operator: In\n          values: [\"amd64\"]\n        - key: kubernetes.io/os\n          operator: In\n          values: [\"linux\"]\n        - key: karpenter.sh/capacity-type\n          operator: In\n          values: [\"on-demand\"]\n        - key: karpenter.k8s.aws/instance-category\n          operator: In\n          values: [\"c\", \"m\", \"r\"]\n        - key: karpenter.k8s.aws/instance-generation\n          operator: Gt\n          values: [\"2\"]\n      nodeClassRef:\n        group: karpenter.k8s.aws\n        kind: EC2NodeClass\n        name: default\n      expireAfter: 720h # 30 * 24h = 720h\n  limits:\n    cpu: 1000\n  disruption:\n    consolidationPolicy: WhenEmptyOrUnderutilized\n    consolidateAfter: 1m\n---\napiVersion: karpenter.k8s.aws/v1\nkind: EC2NodeClass\nmetadata:\n  name: default\nspec:\n  role: \"KarpenterNodeRole-${CLUSTER_NAME}\" # replace with your cluster name\n  amiSelectorTerms:\n    - alias: \"al2023@${ALIAS_VERSION}\"\n  subnetSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\" # replace with your cluster name\n  securityGroupSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\" # replace with your cluster name\nEOF\n"
  },
  {
    "path": "website/content/en/v1.8/getting-started/getting-started-with-karpenter/scripts/step13-automatic-node-provisioning.sh",
    "content": "cat <<EOF | kubectl apply -f -\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: inflate\nspec:\n  replicas: 0\n  selector:\n    matchLabels:\n      app: inflate\n  template:\n    metadata:\n      labels:\n        app: inflate\n    spec:\n      terminationGracePeriodSeconds: 0\n      securityContext:\n        runAsUser: 1000\n        runAsGroup: 3000\n        fsGroup: 2000\n      containers:\n      - name: inflate\n        image: public.ecr.aws/eks-distro/kubernetes/pause:3.7\n        resources:\n          requests:\n            cpu: 1\n        securityContext:\n          allowPrivilegeEscalation: false\nEOF\n\nkubectl scale deployment inflate --replicas 5\nkubectl logs -f -n \"${KARPENTER_NAMESPACE}\" -l app.kubernetes.io/name=karpenter -c controller\n"
  },
  {
    "path": "website/content/en/v1.8/getting-started/getting-started-with-karpenter/scripts/step14-deprovisioning.sh",
    "content": "kubectl delete deployment inflate\nkubectl logs -f -n \"${KARPENTER_NAMESPACE}\" -l app.kubernetes.io/name=karpenter -c controller\n"
  },
  {
    "path": "website/content/en/v1.8/getting-started/getting-started-with-karpenter/scripts/step15-apply-flowschemas.sh",
    "content": "cat <<EOF | envsubst | kubectl apply -f -\n---\napiVersion: flowcontrol.apiserver.k8s.io/v1\nkind: FlowSchema\nmetadata:\n  name: karpenter-leader-election\nspec:\n  distinguisherMethod:\n    type: ByUser\n  matchingPrecedence: 200\n  priorityLevelConfiguration:\n    name: leader-election\n  rules:\n  - resourceRules:\n    - apiGroups:\n      - coordination.k8s.io\n      namespaces:\n      - '*'\n      resources:\n      - leases\n      verbs:\n      - get\n      - create\n      - update\n    subjects:\n    - kind: ServiceAccount\n      serviceAccount:\n        name: karpenter\n        namespace: \"${KARPENTER_NAMESPACE}\"\n\n---\napiVersion: flowcontrol.apiserver.k8s.io/v1\nkind: FlowSchema\nmetadata:\n  name: karpenter-workload\nspec:\n  distinguisherMethod:\n    type: ByUser\n  matchingPrecedence: 1000\n  priorityLevelConfiguration:\n    name: workload-high\n  rules:\n  - nonResourceRules:\n    - nonResourceURLs:\n      - '*'\n      verbs:\n      - '*'\n    resourceRules:\n    - apiGroups:\n      - '*'\n      clusterScope: true\n      namespaces:\n      - '*'\n      resources:\n      - '*'\n      verbs:\n      - '*'\n    subjects:\n    - kind: ServiceAccount\n      serviceAccount:\n        name: karpenter\n        namespace: \"${KARPENTER_NAMESPACE}\"\nEOF\n"
  },
  {
    "path": "website/content/en/v1.8/getting-started/getting-started-with-karpenter/scripts/step16-delete-node.sh",
    "content": "kubectl delete node \"${NODE_NAME}\"\n"
  },
  {
    "path": "website/content/en/v1.8/getting-started/getting-started-with-karpenter/scripts/step17-cleanup.sh",
    "content": "helm uninstall karpenter --namespace \"${KARPENTER_NAMESPACE}\"\naws cloudformation delete-stack --stack-name \"Karpenter-${CLUSTER_NAME}\"\naws ec2 describe-launch-templates --filters \"Name=tag:karpenter.k8s.aws/cluster,Values=${CLUSTER_NAME}\" |\n    jq -r \".LaunchTemplates[].LaunchTemplateName\" |\n    xargs -I{} aws ec2 delete-launch-template --launch-template-name {}\neksctl delete cluster --name \"${CLUSTER_NAME}\"\n"
  },
  {
    "path": "website/content/en/v1.8/getting-started/migrating-from-cas/_index.md",
    "content": "---\ntitle: \"Migrating from Cluster Autoscaler\"\nlinkTitle: \"Migrating from Cluster Autoscaler\"\nweight: 10\ndescription: >\n  Migrate to Karpenter from Cluster Autoscaler\n---\n\nThis guide will show you how to switch from the [Kubernetes Cluster Autoscaler](https://github.com/kubernetes/autoscaler) to Karpenter for automatic node provisioning.\nWe will make the following assumptions in this guide\n\n* You will use an existing EKS cluster\n* You will use existing VPC and subnets\n* You will use existing security groups\n* Your nodes are part of one or more node groups\n* Your workloads have pod disruption budgets that adhere to [EKS best practices](https://aws.github.io/aws-eks-best-practices/karpenter/)\n* Your cluster has an [OIDC provider](https://docs.aws.amazon.com/eks/latest/userguide/enable-iam-roles-for-service-accounts.html) for service accounts\n\nThis guide will also assume you have the `aws` CLI installed.\nYou can also perform many of these steps in the console, but we will use the command line for simplicity.\n\nSet a variable for your cluster name.\n\n```bash\nKARPENTER_NAMESPACE=kube-system\nCLUSTER_NAME=<your cluster name>\n```\n\nSet other variables from your cluster configuration.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step01-env.sh\" language=\"bash\" %}}\n\nUse that information to create our IAM roles, inline policy, and trust relationship.\n\n## Create IAM roles\n\nTo get started with our migration we first need to create two new IAM roles for nodes provisioned with Karpenter and the Karpenter controller.\n\nTo create the Karpenter node role we will use the following policy and commands.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step02-node-iam.sh\" language=\"bash\" %}}\n\nNow attach the required policies to the role\n\n{{% script file=\"./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step03-node-policies.sh\" language=\"bash\" %}}\n\nNow we need to create an IAM role that the Karpenter controller will use to provision new instances.\nThe 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.\n\nIf you have another option for using IAM credentials with workloads (e.g. [kube2iam](https://github.com/jtblin/kube2iam)) your steps will be different.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step04-controller-iam.sh\" language=\"bash\" %}}\n\n## Add tags to subnets and security groups\n\nWe need to add tags to our nodegroup subnets so Karpenter will know which subnets to use.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step05-tag-subnets.sh\" language=\"bash\" %}}\n\nAdd tags to our security groups.\nThis command only tags the security groups for the first nodegroup in the cluster.\nIf you have multiple nodegroups or multiple security groups you will need to decide which one Karpenter should use.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step06-tag-security-groups.sh\" language=\"bash\" %}}\n\n## Update aws-auth ConfigMap\n\nWe need to allow nodes that are using the node IAM role we just created to join the cluster.\nTo do that we have to modify the `aws-auth` ConfigMap in the cluster.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step07-edit-aws-auth.sh\" language=\"bash\" %}}\n\nYou will need to add a section to the mapRoles that looks something like this.\nReplace the `${AWS_PARTITION}` variable with the account partition, `${AWS_ACCOUNT_ID}` variable with your account ID, and `${CLUSTER_NAME}` variable with the cluster name, but do not replace the `{{EC2PrivateDNSName}}`.\n\n```yaml\n- groups:\n  - system:bootstrappers\n  - system:nodes\n  ## If you intend to run Windows workloads, the kube-proxy group should be specified.\n  # For more information, see https://github.com/aws/karpenter/issues/5099.\n  # - eks:kube-proxy-windows\n  rolearn: arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/KarpenterNodeRole-${CLUSTER_NAME}\n  username: system:node:{{EC2PrivateDNSName}}\n```\n\nThe full aws-auth configmap should have two groups.\nOne for your Karpenter node role and one for your existing node group.\n\n## Deploy Karpenter\n\nFirst set the Karpenter release you want to deploy.\n\n```bash\nexport KARPENTER_VERSION=\"1.8.6\"\n```\n\nWe can now generate a full Karpenter deployment yaml from the Helm chart.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step08-generate-chart.sh\" language=\"bash\" %}}\n\nModify the following lines in the karpenter.yaml file.\n\n### Set node affinity\n\nEdit the karpenter.yaml file and find the karpenter deployment affinity rules.\nModify the affinity so karpenter will run on one of the existing node group nodes.\n\nThe rules should look something like this.\nModify the value to match your `$NODEGROUP`, one node group per line.\n\n```yaml\naffinity:\n  nodeAffinity:\n    requiredDuringSchedulingIgnoredDuringExecution:\n      nodeSelectorTerms:\n      - matchExpressions:\n        - key: karpenter.sh/nodepool\n          operator: DoesNotExist\n        - key: eks.amazonaws.com/nodegroup\n          operator: In\n          values:\n          - ${NODEGROUP}\n  podAntiAffinity:\n    requiredDuringSchedulingIgnoredDuringExecution:\n      - topologyKey: \"kubernetes.io/hostname\"\n```\n\nNow that our deployment is ready we can create the karpenter namespace, create the NodePool CRD, and then deploy the rest of the karpenter resources.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step09-deploy.sh\" language=\"bash\" %}}\n\n## Create default NodePool\n\nWe need to create a default NodePool so Karpenter knows what types of nodes we want for unscheduled workloads. You can refer to some of the [example NodePool](https://github.com/aws/karpenter/tree/v1.8.6/examples/v1) for specific needs.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step10-create-nodepool.sh\" language=\"bash\" %}}\n\n## Set nodeAffinity for critical workloads (optional)\n\nYou may also want to set a nodeAffinity for other critical cluster workloads.\n\nSome examples are\n\n* coredns\n* metric-server\n\nYou can edit them with `kubectl edit deploy ...` and you should add node affinity for your static node group instances.\nModify the value to match your `$NODEGROUP`, one node group per line.\n\n```yaml\naffinity:\n  nodeAffinity:\n    requiredDuringSchedulingIgnoredDuringExecution:\n      nodeSelectorTerms:\n      - matchExpressions:\n        - key: eks.amazonaws.com/nodegroup\n          operator: In\n          values:\n          - ${NODEGROUP}\n```\n\n## Remove CAS\n\nNow that karpenter is running we can disable the cluster autoscaler.\nTo do that we will scale the number of replicas to zero.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step11-scale-cas.sh\" language=\"bash\" %}}\n\nTo 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.\n\n> 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.**\n\nIf you have a single multi-AZ node group, we suggest a minimum of 2 instances.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step12-scale-single-ng.sh\" language=\"bash\" %}}\n\nOr, if you have multiple single-AZ node groups, we suggest a minimum of 1 instance each.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step12-scale-multiple-ng.sh\" language=\"bash\" %}}\n\n{{% alert title=\"Note\" color=\"warning\" %}}\nIf 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.\n{{% /alert %}}\n\n## Verify Karpenter\n\nAs nodegroup nodes are drained you can verify that Karpenter is creating nodes for your workloads.\n\n```bash\nkubectl logs -f -n \"${KARPENTER_NAMESPACE}\" -l app.kubernetes.io/name=karpenter -c controller\n```\n\nYou should also see new nodes created in your cluster as the old nodes are removed\n\n```bash\nkubectl get nodes\n```\n"
  },
  {
    "path": "website/content/en/v1.8/getting-started/migrating-from-cas/scripts/step01-env.sh",
    "content": "AWS_PARTITION=\"aws\" # if you are not using standard partitions, you may need to configure to aws-cn / aws-us-gov\nAWS_REGION=\"$(aws configure list | grep region | tr -s \" \" | cut -d\" \" -f3)\"\nOIDC_ENDPOINT=\"$(aws eks describe-cluster --name \"${CLUSTER_NAME}\" \\\n    --query \"cluster.identity.oidc.issuer\" --output text)\"\nAWS_ACCOUNT_ID=$(aws sts get-caller-identity --query 'Account' \\\n    --output text)\nK8S_VERSION=$(aws eks describe-cluster --name \"${CLUSTER_NAME}\" --query \"cluster.version\" --output text)\nALIAS_VERSION=\"$(aws ssm get-parameter --name \"/aws/service/eks/optimized-ami/${K8S_VERSION}/amazon-linux-2023/x86_64/standard/recommended/image_id\" --query Parameter.Value | xargs aws ec2 describe-images --query 'Images[0].Name' --image-ids | sed -r 's/^.*(v[[:digit:]]+).*$/\\1/')\"\n"
  },
  {
    "path": "website/content/en/v1.8/getting-started/migrating-from-cas/scripts/step02-node-iam.sh",
    "content": "echo '{\n    \"Version\": \"2012-10-17\",\n    \"Statement\": [\n        {\n            \"Effect\": \"Allow\",\n            \"Principal\": {\n                \"Service\": \"ec2.amazonaws.com\"\n            },\n            \"Action\": \"sts:AssumeRole\"\n        }\n    ]\n}' > node-trust-policy.json\n\naws iam create-role --role-name \"KarpenterNodeRole-${CLUSTER_NAME}\" \\\n    --assume-role-policy-document file://node-trust-policy.json\n"
  },
  {
    "path": "website/content/en/v1.8/getting-started/migrating-from-cas/scripts/step03-node-policies.sh",
    "content": "aws iam attach-role-policy --role-name \"KarpenterNodeRole-${CLUSTER_NAME}\" \\\n    --policy-arn \"arn:${AWS_PARTITION}:iam::aws:policy/AmazonEKSWorkerNodePolicy\"\n\naws iam attach-role-policy --role-name \"KarpenterNodeRole-${CLUSTER_NAME}\" \\\n    --policy-arn \"arn:${AWS_PARTITION}:iam::aws:policy/AmazonEKS_CNI_Policy\"\n\naws iam attach-role-policy --role-name \"KarpenterNodeRole-${CLUSTER_NAME}\" \\\n    --policy-arn \"arn:${AWS_PARTITION}:iam::aws:policy/AmazonEC2ContainerRegistryPullOnly\"\n\naws iam attach-role-policy --role-name \"KarpenterNodeRole-${CLUSTER_NAME}\" \\\n    --policy-arn \"arn:${AWS_PARTITION}:iam::aws:policy/AmazonSSMManagedInstanceCore\"\n"
  },
  {
    "path": "website/content/en/v1.8/getting-started/migrating-from-cas/scripts/step04-controller-iam.sh",
    "content": "cat << EOF > controller-trust-policy.json\n{\n    \"Version\": \"2012-10-17\",\n    \"Statement\": [\n        {\n            \"Effect\": \"Allow\",\n            \"Principal\": {\n                \"Federated\": \"arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:oidc-provider/${OIDC_ENDPOINT#*//}\"\n            },\n            \"Action\": \"sts:AssumeRoleWithWebIdentity\",\n            \"Condition\": {\n                \"StringEquals\": {\n                    \"${OIDC_ENDPOINT#*//}:aud\": \"sts.amazonaws.com\",\n                    \"${OIDC_ENDPOINT#*//}:sub\": \"system:serviceaccount:${KARPENTER_NAMESPACE}:karpenter\"\n                }\n            }\n        }\n    ]\n}\nEOF\n\naws iam create-role --role-name \"KarpenterControllerRole-${CLUSTER_NAME}\" \\\n    --assume-role-policy-document file://controller-trust-policy.json\n\ncat << EOF > controller-policy.json\n{\n    \"Statement\": [\n        {\n            \"Action\": [\n                \"ssm:GetParameter\",\n                \"ec2:DescribeImages\",\n                \"ec2:RunInstances\",\n                \"ec2:DescribeSubnets\",\n                \"ec2:DescribeSecurityGroups\",\n                \"ec2:DescribeLaunchTemplates\",\n                \"ec2:DescribeInstances\",\n                \"ec2:DescribeInstanceTypes\",\n                \"ec2:DescribeInstanceTypeOfferings\",\n                \"ec2:DeleteLaunchTemplate\",\n                \"ec2:CreateTags\",\n                \"ec2:CreateLaunchTemplate\",\n                \"ec2:CreateFleet\",\n                \"ec2:DescribeSpotPriceHistory\",\n                \"pricing:GetProducts\"\n            ],\n            \"Effect\": \"Allow\",\n            \"Resource\": \"*\",\n            \"Sid\": \"Karpenter\"\n        },\n        {\n            \"Action\": \"ec2:TerminateInstances\",\n            \"Condition\": {\n                \"StringLike\": {\n                    \"ec2:ResourceTag/karpenter.sh/nodepool\": \"*\"\n                }\n            },\n            \"Effect\": \"Allow\",\n            \"Resource\": \"*\",\n            \"Sid\": \"ConditionalEC2Termination\"\n        },\n        {\n            \"Effect\": \"Allow\",\n            \"Action\": \"iam:PassRole\",\n            \"Resource\": \"arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/KarpenterNodeRole-${CLUSTER_NAME}\",\n            \"Sid\": \"PassNodeIAMRole\"\n        },\n        {\n            \"Effect\": \"Allow\",\n            \"Action\": \"eks:DescribeCluster\",\n            \"Resource\": \"arn:${AWS_PARTITION}:eks:${AWS_REGION}:${AWS_ACCOUNT_ID}:cluster/${CLUSTER_NAME}\",\n            \"Sid\": \"EKSClusterEndpointLookup\"\n        },\n        {\n            \"Sid\": \"AllowScopedInstanceProfileCreationActions\",\n            \"Effect\": \"Allow\",\n            \"Resource\": \"*\",\n            \"Action\": [\n                \"iam:CreateInstanceProfile\"\n            ],\n            \"Condition\": {\n                \"StringEquals\": {\n                    \"aws:RequestTag/kubernetes.io/cluster/${CLUSTER_NAME}\": \"owned\",\n                    \"aws:RequestTag/topology.kubernetes.io/region\": \"${AWS_REGION}\"\n                },\n                \"StringLike\": {\n                    \"aws:RequestTag/karpenter.k8s.aws/ec2nodeclass\": \"*\"\n                }\n            }\n        },\n        {\n            \"Sid\": \"AllowScopedInstanceProfileTagActions\",\n            \"Effect\": \"Allow\",\n            \"Resource\": \"*\",\n            \"Action\": [\n                \"iam:TagInstanceProfile\"\n            ],\n            \"Condition\": {\n                \"StringEquals\": {\n                    \"aws:ResourceTag/kubernetes.io/cluster/${CLUSTER_NAME}\": \"owned\",\n                    \"aws:ResourceTag/topology.kubernetes.io/region\": \"${AWS_REGION}\",\n                    \"aws:RequestTag/kubernetes.io/cluster/${CLUSTER_NAME}\": \"owned\",\n                    \"aws:RequestTag/topology.kubernetes.io/region\": \"${AWS_REGION}\"\n                },\n                \"StringLike\": {\n                    \"aws:ResourceTag/karpenter.k8s.aws/ec2nodeclass\": \"*\",\n                    \"aws:RequestTag/karpenter.k8s.aws/ec2nodeclass\": \"*\"\n                }\n            }\n        },\n        {\n            \"Sid\": \"AllowScopedInstanceProfileActions\",\n            \"Effect\": \"Allow\",\n            \"Resource\": \"*\",\n            \"Action\": [\n                \"iam:AddRoleToInstanceProfile\",\n                \"iam:RemoveRoleFromInstanceProfile\",\n                \"iam:DeleteInstanceProfile\"\n            ],\n            \"Condition\": {\n                \"StringEquals\": {\n                    \"aws:ResourceTag/kubernetes.io/cluster/${CLUSTER_NAME}\": \"owned\",\n                    \"aws:ResourceTag/topology.kubernetes.io/region\": \"${AWS_REGION}\"\n                },\n                \"StringLike\": {\n                    \"aws:ResourceTag/karpenter.k8s.aws/ec2nodeclass\": \"*\"\n                }\n            }\n        },\n        {\n            \"Sid\": \"AllowInstanceProfileReadActions\",\n            \"Effect\": \"Allow\",\n            \"Resource\": \"*\",\n            \"Action\": \"iam:GetInstanceProfile\"\n        },\n        {\n            \"Sid\": \"AllowUnscopedInstanceProfileListAction\",\n            \"Effect\": \"Allow\",\n            \"Resource\": \"*\",\n            \"Action\": \"iam:ListInstanceProfiles\"\n        }\n    ],\n    \"Version\": \"2012-10-17\"\n}\nEOF\n\naws iam put-role-policy --role-name \"KarpenterControllerRole-${CLUSTER_NAME}\" \\\n    --policy-name \"KarpenterControllerPolicy-${CLUSTER_NAME}\" \\\n    --policy-document file://controller-policy.json\n"
  },
  {
    "path": "website/content/en/v1.8/getting-started/migrating-from-cas/scripts/step05-tag-subnets.sh",
    "content": "for NODEGROUP in $(aws eks list-nodegroups --cluster-name \"${CLUSTER_NAME}\" --query 'nodegroups' --output text); do\n    aws ec2 create-tags \\\n        --tags \"Key=karpenter.sh/discovery,Value=${CLUSTER_NAME}\" \\\n        --resources $(aws eks describe-nodegroup --cluster-name \"${CLUSTER_NAME}\" \\\n        --nodegroup-name \"${NODEGROUP}\" --query 'nodegroup.subnets' --output text )\ndone\n"
  },
  {
    "path": "website/content/en/v1.8/getting-started/migrating-from-cas/scripts/step06-tag-security-groups.sh",
    "content": "NODEGROUP=$(aws eks list-nodegroups --cluster-name \"${CLUSTER_NAME}\" \\\n    --query 'nodegroups[0]' --output text)\n\nLAUNCH_TEMPLATE=$(aws eks describe-nodegroup --cluster-name \"${CLUSTER_NAME}\" \\\n    --nodegroup-name \"${NODEGROUP}\" --query 'nodegroup.launchTemplate.{id:id,version:version}' \\\n    --output text | tr -s \"\\t\" \",\")\n\n# If your EKS setup is configured to use only Cluster security group, then please execute -\n\nSECURITY_GROUPS=$(aws eks describe-cluster \\\n    --name \"${CLUSTER_NAME}\" --query \"cluster.resourcesVpcConfig.clusterSecurityGroupId\" --output text)\n\n# If your setup uses the security groups in the Launch template of a managed node group, then :\n\nSECURITY_GROUPS=\"$(aws ec2 describe-launch-template-versions \\\n    --launch-template-id \"${LAUNCH_TEMPLATE%,*}\" --versions \"${LAUNCH_TEMPLATE#*,}\" \\\n    --query 'LaunchTemplateVersions[0].LaunchTemplateData.[NetworkInterfaces[0].Groups||SecurityGroupIds]' \\\n    --output text)\"\n\naws ec2 create-tags \\\n    --tags \"Key=karpenter.sh/discovery,Value=${CLUSTER_NAME}\" \\\n    --resources \"${SECURITY_GROUPS}\"\n"
  },
  {
    "path": "website/content/en/v1.8/getting-started/migrating-from-cas/scripts/step07-edit-aws-auth.sh",
    "content": "kubectl edit configmap aws-auth -n kube-system\n"
  },
  {
    "path": "website/content/en/v1.8/getting-started/migrating-from-cas/scripts/step08-generate-chart.sh",
    "content": "helm template karpenter oci://public.ecr.aws/karpenter/karpenter --version \"${KARPENTER_VERSION}\" --namespace \"${KARPENTER_NAMESPACE}\" \\\n    --set \"settings.clusterName=${CLUSTER_NAME}\" \\\n    --set \"settings.interruptionQueue=${CLUSTER_NAME}\" \\\n    --set \"serviceAccount.annotations.eks\\.amazonaws\\.com/role-arn=arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/KarpenterControllerRole-${CLUSTER_NAME}\" \\\n    --set controller.resources.requests.cpu=1 \\\n    --set controller.resources.requests.memory=1Gi \\\n    --set controller.resources.limits.cpu=1 \\\n    --set controller.resources.limits.memory=1Gi > karpenter.yaml\n"
  },
  {
    "path": "website/content/en/v1.8/getting-started/migrating-from-cas/scripts/step09-deploy.sh",
    "content": "kubectl create namespace \"${KARPENTER_NAMESPACE}\" || true\nkubectl create -f \\\n    \"https://raw.githubusercontent.com/aws/karpenter-provider-aws/v${KARPENTER_VERSION}/pkg/apis/crds/karpenter.sh_nodepools.yaml\"\nkubectl create -f \\\n    \"https://raw.githubusercontent.com/aws/karpenter-provider-aws/v${KARPENTER_VERSION}/pkg/apis/crds/karpenter.k8s.aws_ec2nodeclasses.yaml\"\nkubectl create -f \\\n    \"https://raw.githubusercontent.com/aws/karpenter-provider-aws/v${KARPENTER_VERSION}/pkg/apis/crds/karpenter.sh_nodeclaims.yaml\"\nkubectl apply -f karpenter.yaml\n"
  },
  {
    "path": "website/content/en/v1.8/getting-started/migrating-from-cas/scripts/step10-create-nodepool.sh",
    "content": "cat <<EOF | envsubst | kubectl apply -f -\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\nspec:\n  template:\n    spec:\n      requirements:\n        - key: kubernetes.io/arch\n          operator: In\n          values: [\"amd64\"]\n        - key: kubernetes.io/os\n          operator: In\n          values: [\"linux\"]\n        - key: karpenter.sh/capacity-type\n          operator: In\n          values: [\"spot\"]\n        - key: karpenter.k8s.aws/instance-category\n          operator: In\n          values: [\"c\", \"m\", \"r\"]\n        - key: karpenter.k8s.aws/instance-generation\n          operator: Gt\n          values: [\"2\"]\n      nodeClassRef:\n        group: karpenter.k8s.aws\n        kind: EC2NodeClass\n        name: default\n      expireAfter: 720h # 30 * 24h = 720h\n  limits:\n    cpu: 1000\n  disruption:\n    consolidationPolicy: WhenEmptyOrUnderutilized\n    consolidateAfter: 1m\n---\napiVersion: karpenter.k8s.aws/v1\nkind: EC2NodeClass\nmetadata:\n  name: default\nspec:\n  role: \"KarpenterNodeRole-${CLUSTER_NAME}\" # replace with your cluster name\n  amiSelectorTerms:\n    - alias: \"al2023@${ALIAS_VERSION}\"\n  subnetSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\" # replace with your cluster name\n  securityGroupSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\" # replace with your cluster name\nEOF\n"
  },
  {
    "path": "website/content/en/v1.8/getting-started/migrating-from-cas/scripts/step11-scale-cas.sh",
    "content": "kubectl scale deploy/cluster-autoscaler -n kube-system --replicas=0\n"
  },
  {
    "path": "website/content/en/v1.8/getting-started/migrating-from-cas/scripts/step12-scale-multiple-ng.sh",
    "content": "for NODEGROUP in $(aws eks list-nodegroups --cluster-name \"${CLUSTER_NAME}\" \\\n    --query 'nodegroups' --output text); do aws eks update-nodegroup-config --cluster-name \"${CLUSTER_NAME}\" \\\n    --nodegroup-name \"${NODEGROUP}\" \\\n    --scaling-config \"minSize=1,maxSize=1,desiredSize=1\"\ndone\n"
  },
  {
    "path": "website/content/en/v1.8/getting-started/migrating-from-cas/scripts/step12-scale-single-ng.sh",
    "content": "aws eks update-nodegroup-config --cluster-name \"${CLUSTER_NAME}\" \\\n    --nodegroup-name \"${NODEGROUP}\" \\\n    --scaling-config \"minSize=2,maxSize=2,desiredSize=2\"\n"
  },
  {
    "path": "website/content/en/v1.8/reference/_index.md",
    "content": "---\ntitle: \"Reference\"\nlinkTitle: \"Reference\"\nweight: 50\ndescription: >\n  Reference documentation for Karpenter\n---"
  },
  {
    "path": "website/content/en/v1.8/reference/cloudformation.md",
    "content": "---\ntitle: \"CloudFormation\"\nlinkTitle: \"CloudFormation\"\nweight: 5\ndescription: >\n  A description of the Getting Started CloudFormation file and permissions\n---\nThe [Getting Started with Karpenter]({{< relref \"../getting-started/getting-started-with-karpenter\" >}}) guide uses CloudFormation to bootstrap the cluster to enable Karpenter to create and manage nodes, as well as to allow Karpenter to respond to interruption events.\nThis document describes the `cloudformation.yaml` file used in that guide.\nThese descriptions should allow you to understand:\n\n* What Karpenter is authorized to do with your EKS cluster and AWS resources when using the `cloudformation.yaml` file\n* What permissions you need to set up if you are adding Karpenter to an existing cluster\n\n## Overview\n\nTo download a particular version of `cloudformation.yaml`, set the version and use `curl` to pull the file to your local system:\n\n```bash\nexport KARPENTER_VERSION=\"1.8.6\"\ncurl https://raw.githubusercontent.com/aws/karpenter-provider-aws/v\"${KARPENTER_VERSION}\"/website/content/en/preview/getting-started/getting-started-with-karpenter/cloudformation.yaml > cloudformation.yaml\n```\n\nFollowing some header information, the rest of the `cloudformation.yaml` file describes the resources that CloudFormation deploys.\nThe sections of that file can be grouped together under the following general headings:\n\n* [**Node Authorization**]({{< relref \"#node-authorization\" >}}): Creates a NodeInstanceProfile, attaches a NodeRole to it, and connects it to an IAM Identity Mapping used to authorize nodes to the cluster. This defines the permissions each node managed by Karpenter has to access EC2 and other AWS resources. This doesn't actually create the IAM Identity Mapping. That part is orchestrated by `eksctl` in the Getting Started guide.\n* [**Controller Authorization**]({{< relref \"#controller-authorization\" >}}):  Creates the `KarpenterControllerPolicy` that is attached to the service account.\nAgain, the actual service account creation (`karpenter`), that is combined with the `KarpenterControllerPolicy`, is orchestrated by `eksctl` in the Getting Started guide.\n* [**Interruption Handling**]({{< relref \"#interruption-handling\" >}}): Allows the Karpenter controller to see and respond to interruptions that occur with the nodes that Karpenter is managing. See the [Interruption]({{< relref \"../concepts/disruption#interruption\" >}}) section of the Disruption page for details.\n\nA lot of the object naming that is done by `cloudformation.yaml` is based on the following:\n\n* Cluster name: With a username of `bob` the Getting Started Guide would name your cluster `bob-karpenter-demo`\nThat name would then be appended to any name below where `${ClusterName}` is included.\n\n* Partition: Any time an ARN is used, it includes the [partition name](https://docs.aws.amazon.com/whitepapers/latest/aws-fault-isolation-boundaries/partitions.html) to identify where the object is found. In most cases, that partition name is `aws`. However, it could also be `aws-cn` (for China Regions) or `aws-us-gov` (for AWS GovCloud US Regions).\n\n## Node Authorization\n\nThe following sections of the `cloudformation.yaml` file set up IAM permissions for Kubernetes nodes created by Karpenter.\nIn particular, this involves setting up a node role that can be attached and passed to instance profiles that Karpenter generates at runtime:\n\n* KarpenterNodeRole\n\n### KarpenterNodeRole\n\nThis section of the template defines the IAM role attached to generated instance profiles.\nGiven a cluster name of `bob-karpenter-demo`, this role would end up being named `\"KarpenterNodeRole-bob-karpenter-demo`.\n\n```yaml\nKarpenterNodeRole:\n  Type: \"AWS::IAM::Role\"\n  Properties:\n    RoleName: !Sub \"KarpenterNodeRole-${ClusterName}\"\n    Path: /\n    AssumeRolePolicyDocument:\n      Version: \"2012-10-17\"\n      Statement:\n        - Effect: Allow\n          Principal:\n            Service:\n              !Sub \"ec2.${AWS::URLSuffix}\"\n          Action:\n            - \"sts:AssumeRole\"\n    ManagedPolicyArns:\n      - !Sub \"arn:${AWS::Partition}:iam::aws:policy/AmazonEKS_CNI_Policy\"\n      - !Sub \"arn:${AWS::Partition}:iam::aws:policy/AmazonEKSWorkerNodePolicy\"\n      - !Sub \"arn:${AWS::Partition}:iam::aws:policy/AmazonEC2ContainerRegistryPullOnly\"\n      - !Sub \"arn:${AWS::Partition}:iam::aws:policy/AmazonSSMManagedInstanceCore\"\n```\n\nThe role created here includes several AWS managed policies, which are designed to provide permissions for specific uses needed by the nodes to work with EC2 and other AWS resources. These include:\n\n* [AmazonEKS_CNI_Policy](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonEKS_CNI_Policy.html): Provides the permissions that the Amazon VPC CNI Plugin needs to configure EKS worker nodes.\n* [AmazonEKSWorkerNodePolicy](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonEKSWorkerNodePolicy.html): Lets Amazon EKS worker nodes connect to EKS Clusters.\n* [AmazonEC2ContainerRegistryPullOnly](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonEC2ContainerRegistryPullOnly.html): Allows pulling images from repositories in the Amazon EC2 Container Registry.\n* [AmazonSSMManagedInstanceCore](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonSSMManagedInstanceCore.html): Adds AWS Systems Manager service core functions for Amazon EC2.\n\nIf you were to use a node role from an existing cluster, you could skip this provisioning step and pass this node role to any EC2NodeClasses that you create. Additionally, you would ensure that the [Controller Policy]({{< relref \"#controllerpolicy\" >}}) has `iam:PassRole` permission to the role attached to the generated instance profiles.\n\n## Controller Authorization\n\nThis section sets the AWS permissions for the Karpenter Controller. When used in the Getting Started guide, `eksctl` uses these permissions to create a service account (karpenter) that is combined with the KarpenterControllerPolicy.\n\nThe resources defined in this section are associated with:\n\n* KarpenterControllerPolicy\n\nBecause the scope of the KarpenterControllerPolicy is an AWS region, the cluster's AWS region is included in the `AllowScopedEC2InstanceAccessActions`.\n\n### KarpenterControllerPolicy\n\nA `KarpenterControllerPolicy` object sets the name of the policy, then defines a set of resources and actions allowed for those resources.\nFor our example, the KarpenterControllerPolicy would be named: `KarpenterControllerPolicy-bob-karpenter-demo`\n\n```yaml\nKarpenterControllerPolicy:\n  Type: AWS::IAM::ManagedPolicy\n  Properties:\n    ManagedPolicyName: !Sub \"KarpenterControllerPolicy-${ClusterName}\"\n    # The PolicyDocument must be in JSON string format because we use a StringEquals condition that uses an interpolated\n    # value in one of its key parameters which isn't natively supported by CloudFormation\n    PolicyDocument: !Sub |\n      {\n        \"Version\": \"2012-10-17\",\n        \"Statement\": [\n```\n\nSomeone wanting to add Karpenter to an existing cluster, instead of using `cloudformation.yaml`, would need to create the IAM policy directly and assign that policy to the role leveraged by the service account using IRSA.\n\n#### AllowScopedEC2InstanceAccessActions\n\nThe AllowScopedEC2InstanceAccessActions statement ID (Sid) identifies a set of EC2 resources that are allowed to be accessed with\n[RunInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html) and [CreateFleet](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet.html) actions.\nFor `RunInstances` and `CreateFleet` actions, the Karpenter controller can read (but not create) `image`, `snapshot`, `security-group`, `subnet` and `capacity-reservation` EC2 resources, scoped for the particular AWS partition and region.\n\n```json\n{\n  \"Sid\": \"AllowScopedEC2InstanceAccessActions\",\n  \"Effect\": \"Allow\",\n  \"Resource\": [\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}::image/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}::snapshot/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:security-group/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:subnet/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:capacity-reservation/*\"\n  ],\n  \"Action\": [\n    \"ec2:RunInstances\",\n    \"ec2:CreateFleet\"\n  ]\n}\n```\n\n#### AllowScopedEC2LaunchTemplateAccessActions\n\nThe AllowScopedEC2InstanceAccessActions statement ID (Sid) identifies launch templates that are allowed to be accessed with\n[RunInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html) and [CreateFleet](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet.html) actions.\nFor `RunInstances` and `CreateFleet` actions, the Karpenter controller can read (but not create) `launch-template` EC2 resources that have the `kubernetes.io/cluster/${ClusterName}` tag be set to `owned` and a `karpenter.sh/nodepool` tag, scoped for the particular AWS partition and region. This ensures that an instance launch can't access launch templates that weren't provisioned by Karpenter.\n\n```json\n{\n  \"Sid\": \"AllowScopedEC2LaunchTemplateAccessActions\",\n  \"Effect\": \"Allow\",\n  \"Resource\": \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:launch-template/*\",\n  \"Action\": [\n    \"ec2:RunInstances\",\n    \"ec2:CreateFleet\"\n  ],\n  \"Condition\": {\n    \"StringEquals\": {\n      \"aws:ResourceTag/kubernetes.io/cluster/${ClusterName}\": \"owned\"\n    },\n    \"StringLike\": {\n      \"aws:ResourceTag/karpenter.sh/nodepool\": \"*\"\n    }\n  }\n}\n```\n\n#### AllowScopedEC2InstanceActionsWithTags\n\nThe AllowScopedEC2InstanceActionsWithTags Sid allows the\n[RunInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html), [CreateFleet](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet.html), and [CreateLaunchTemplate](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateLaunchTemplate.html)\nactions requested by the Karpenter controller to create all `fleet`, `instance`, `volume`, `network-interface`, `launch-template` or `spot-instances-request` EC2 resources (for the partition and region). It also requires that the `kubernetes.io/cluster/${ClusterName}` tag be set to `owned`, `aws:RequestTag/eks:eks-cluster-name` be set to `\"${ClusterName}`, and a `karpenter.sh/nodepool` tag be set to any value. This ensures that Karpenter is only allowed to create instances for a single EKS cluster.\n\n```json\n{\n  \"Sid\": \"AllowScopedEC2InstanceActionsWithTags\",\n  \"Effect\": \"Allow\",\n  \"Resource\": [\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:fleet/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:instance/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:volume/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:network-interface/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:launch-template/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:spot-instances-request/*\"\n  ],\n  \"Action\": [\n    \"ec2:RunInstances\",\n    \"ec2:CreateFleet\",\n    \"ec2:CreateLaunchTemplate\"\n  ],\n  \"Condition\": {\n    \"StringEquals\": {\n      \"aws:RequestTag/kubernetes.io/cluster/${ClusterName}\": \"owned\"\n      \"aws:RequestTag/eks:eks-cluster-name\": \"${ClusterName}\"\n    },\n    \"StringLike\": {\n      \"aws:RequestTag/karpenter.sh/nodepool\": \"*\"\n    }\n  }\n}\n```\n\n#### AllowScopedResourceCreationTagging\n\nThe AllowScopedResourceCreationTagging Sid allows EC2 [CreateTags](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTags.html)\nactions on `fleet`, `instance`, `volume`, `network-interface`, `launch-template` and `spot-instances-request` resources, While making `RunInstance`, `CreateFleet`, or `CreateLaunchTemplate` calls. Additionally, this ensures that resources can't be tagged arbitrarily by Karpenter after they are created.\nConditions that must be met include that `aws:RequestTag/kubernetes.io/cluster/${ClusterName}` be set to `owned` and `aws:RequestTag/eks:eks-cluster-name` be set to `${ClusterName}`.\n\n```json\n{\n  \"Sid\": \"AllowScopedResourceCreationTagging\",\n  \"Effect\": \"Allow\",\n  \"Resource\": [\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:fleet/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:instance/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:volume/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:network-interface/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:launch-template/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:spot-instances-request/*\"\n  ],\n  \"Action\": \"ec2:CreateTags\",\n  \"Condition\": {\n    \"StringEquals\": {\n      \"aws:RequestTag/kubernetes.io/cluster/${ClusterName}\": \"owned\",\n      \"aws:RequestTag/eks:eks-cluster-name\": \"${ClusterName}\"\n      \"ec2:CreateAction\": [\n        \"RunInstances\",\n        \"CreateFleet\",\n        \"CreateLaunchTemplate\"\n      ]\n    },\n    \"StringLike\": {\n      \"aws:RequestTag/karpenter.sh/nodepool\": \"*\"\n    }\n  }\n}\n```\n\n#### AllowScopedResourceTagging\n\nThe AllowScopedResourceTagging Sid allows EC2 [CreateTags](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTags.html) actions on all instances created by Karpenter after their creation. It enforces that Karpenter is only able to update the tags on cluster instances it is operating on through the `kubernetes.io/cluster/${ClusterName}`\" and `karpenter.sh/nodepool` tags.\nLikewise, `RequestTag/eks:eks-cluster-name` must be set to `${ClusterName}`, if it exists, and `TagKeys` must equal `eks:eks-cluster-name`, `karpenter.sh/nodeclaim`, and `Name`, for all values.\n```json\n{\n  \"Sid\": \"AllowScopedResourceTagging\",\n  \"Effect\": \"Allow\",\n  \"Resource\": \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:instance/*\",\n  \"Action\": \"ec2:CreateTags\",\n  \"Condition\": {\n    \"StringEquals\": {\n      \"aws:ResourceTag/kubernetes.io/cluster/${ClusterName}\": \"owned\"\n    },\n    \"StringLike\": {\n      \"aws:ResourceTag/karpenter.sh/nodepool\": \"*\"\n    },\n    \"StringEqualsIfExists\": {\n      \"aws:RequestTag/eks:eks-cluster-name\": \"${ClusterName}\"\n    },\n    \"ForAllValues:StringEquals\": {\n      \"aws:TagKeys\": [\n        \"eks:eks-cluster-name\",\n        \"karpenter.sh/nodeclaim\",\n        \"Name\"\n      ]\n    }\n  }\n}\n```\n\n#### AllowScopedDeletion\n\nThe AllowScopedDeletion Sid allows [TerminateInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_TerminateInstances.html) and [DeleteLaunchTemplate](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DeleteLaunchTemplate.html) actions to delete instance and launch-template resources, provided that `karpenter.sh/nodepool` and `kubernetes.io/cluster/${ClusterName}` tags are set. These tags must be present on all resources that Karpenter is going to delete. This ensures that Karpenter can only delete instances and launch templates that are associated with it.\n\n```json\n{\n  \"Sid\": \"AllowScopedDeletion\",\n  \"Effect\": \"Allow\",\n  \"Resource\": [\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:instance/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:launch-template/*\"\n  ],\n  \"Action\": [\n    \"ec2:TerminateInstances\",\n    \"ec2:DeleteLaunchTemplate\"\n  ],\n  \"Condition\": {\n    \"StringEquals\": {\n      \"aws:ResourceTag/kubernetes.io/cluster/${ClusterName}\": \"owned\"\n    },\n    \"StringLike\": {\n      \"aws:ResourceTag/karpenter.sh/nodepool\": \"*\"\n    }\n  }\n}\n```\n\n#### AllowRegionalReadActions\n\nThe AllowRegionalReadActions Sid allows [DescribeAvailabilityZones](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeAvailabilityZones.html), [DescribeImages](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeImages.html), [DescribeInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeInstances.html), [DescribeInstanceTypeOfferings](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeInstanceTypeOfferings.html), [DescribeInstanceTypes](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeInstanceTypes.html), [DescribeLaunchTemplates](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeLaunchTemplates.html), [DescribeSecurityGroups](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeSecurityGroups.html), [DescribeSpotPriceHistory](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeSpotPriceHistory.html), and [DescribeSubnets](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeSubnets.html) actions for the current AWS region.\nThis allows the Karpenter controller to do any of those read-only actions across all related resources for that AWS region.\n\n```json\n{\n  \"Sid\": \"AllowRegionalReadActions\",\n  \"Effect\": \"Allow\",\n  \"Resource\": \"*\",\n  \"Action\": [\n    \"ec2:DescribeCapacityReservations\",\n    \"ec2:DescribeImages\",\n    \"ec2:DescribeInstances\",\n    \"ec2:DescribeInstanceTypeOfferings\",\n    \"ec2:DescribeInstanceTypes\",\n    \"ec2:DescribeLaunchTemplates\",\n    \"ec2:DescribeSecurityGroups\",\n    \"ec2:DescribeSpotPriceHistory\",\n    \"ec2:DescribeSubnets\"\n  ],\n  \"Condition\": {\n    \"StringEquals\": {\n      \"aws:RequestedRegion\": \"${AWS::Region}\"\n    }\n  }\n}\n```\n\n#### AllowSSMReadActions\n\nThe AllowSSMReadActions Sid allows the Karpenter controller to get SSM parameters (`ssm:GetParameter`) from the current region for SSM parameters generated by AWS services.\n\n**NOTE**: If potentially sensitive information is stored in SSM parameters, you could consider restricting access to these messages further.\n```json\n{\n  \"Sid\": \"AllowSSMReadActions\",\n  \"Effect\": \"Allow\",\n  \"Resource\": \"arn:${AWS::Partition}:ssm:${AWS::Region}::parameter/aws/service/*\",\n  \"Action\": \"ssm:GetParameter\"\n}\n```\n\n#### AllowPricingReadActions\n\nBecause pricing information does not exist in every region at the moment, the AllowPricingReadActions Sid allows the Karpenter controller to get product pricing information (`pricing:GetProducts`) for all related resources across all regions.\n\n```json\n{\n  \"Sid\": \"AllowPricingReadActions\",\n  \"Effect\": \"Allow\",\n  \"Resource\": \"*\",\n  \"Action\": \"pricing:GetProducts\"\n}\n```\n\n#### AllowInterruptionQueueActions\n\nKarpenter supports interruption queues, that you can create as described in the [Interruption]({{< relref \"../concepts/disruption#interruption\" >}}) section of the Disruption page.\nThis section of the cloudformation.yaml template can give Karpenter permission to access those queues by specifying the resource ARN.\nFor the interruption queue you created (`${KarpenterInterruptionQueue.Arn}`), the AllowInterruptionQueueActions Sid lets the Karpenter controller have permission to delete messages ([DeleteMessage](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_DeleteMessage.html)), get queue URL ([GetQueueUrl](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_GetQueueUrl.html)), and receive messages ([ReceiveMessage](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ReceiveMessage.html)).\n\n```json\n{\n  \"Sid\": \"AllowInterruptionQueueActions\",\n  \"Effect\": \"Allow\",\n  \"Resource\": \"${KarpenterInterruptionQueue.Arn}\",\n  \"Action\": [\n    \"sqs:DeleteMessage\",\n    \"sqs:GetQueueUrl\",\n    \"sqs:ReceiveMessage\"\n  ]\n}\n```\n\n#### AllowPassingInstanceRole\n\nThe AllowPassingInstanceRole Sid gives the Karpenter controller permission to pass (`iam:PassRole`) the node role (`KarpenterNodeRole-${ClusterName}`) to generated instance profiles.\nThis gives EC2 permission explicit permission to use the `KarpenterNodeRole-${ClusterName}` when assigning permissions to generated instance profiles while launching nodes.\n\n```json\n{\n  \"Sid\": \"AllowPassingInstanceRole\",\n  \"Effect\": \"Allow\",\n  \"Resource\": \"${KarpenterNodeRole.Arn}\",\n  \"Action\": \"iam:PassRole\",\n  \"Condition\": {\n    \"StringEquals\": {\n      \"iam:PassedToService\": [\n        \"ec2.amazonaws.com\",\n        \"ec2.amazonaws.com.cn\"\n      ]\n    }\n  }\n}\n```\n\n#### AllowScopedInstanceProfileCreationActions\n\nThe AllowScopedInstanceProfileCreationActions Sid gives the Karpenter controller permission to create a new instance profile with [`iam:CreateInstanceProfile`](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateInstanceProfile.html),\nprovided that the request is made to a cluster with `RequestTag` `kubernetes.io/cluster/${ClusterName}` set to `owned`, the `eks:eks-cluster-name` set to `${ClusterName}`, and `topology.kubernetes.io/region` set to the current region.\nAlso, `karpenter.k8s.aws/ec2nodeclass` must be set to some value. This ensures that Karpenter can generate instance profiles on your behalf based on roles specified in your `EC2NodeClasses` that you use to configure Karpenter.\n\n```json\n{\n  \"Sid\": \"AllowScopedInstanceProfileCreationActions\",\n  \"Effect\": \"Allow\",\n  \"Resource\": \"arn:${AWS::Partition}:iam::${AWS::AccountId}:instance-profile/*\",\n  \"Action\": [\n    \"iam:CreateInstanceProfile\"\n  ],\n  \"Condition\": {\n    \"StringEquals\": {\n      \"aws:RequestTag/kubernetes.io/cluster/${ClusterName}\": \"owned\",\n      \"aws:RequestTag/eks:eks-cluster-name\": \"${ClusterName}\",\n      \"aws:RequestTag/topology.kubernetes.io/region\": \"${AWS::Region}\"\n    },\n    \"StringLike\": {\n      \"aws:RequestTag/karpenter.k8s.aws/ec2nodeclass\": \"*\"\n    }\n  }\n}\n```\n\n#### AllowScopedInstanceProfileTagActions\n\nThe AllowScopedInstanceProfileTagActions Sid gives the Karpenter controller permission to tag an instance profile with [`iam:TagInstanceProfile`](https://docs.aws.amazon.com/IAM/latest/APIReference/API_TagInstanceProfile.html), provided that `ResourceTag` attributes `kubernetes.io/cluster/${ClusterName}` is set to `owned` and `topology.kubernetes.io/region` is set to the current region and `RequestTag` attributes `kubernetes.io/cluster/${ClusterName}` is set to `owned`, `eks:eks-cluster-name` is set to `${ClusterName}`, and `topology.kubernetes.io/region` is set to the current region.\nAlso, `ResourceTag/karpenter.k8s.aws/ec2nodeclass` and `RequestTag/karpenter.k8s.aws/ec2nodeclass` must be set to some value. This ensures that Karpenter is only able to act on instance profiles that it provisions for this cluster.\n\n```json\n{\n  \"Sid\": \"AllowScopedInstanceProfileTagActions\",\n  \"Effect\": \"Allow\",\n  \"Resource\": \"arn:${AWS::Partition}:iam::${AWS::AccountId}:instance-profile/*\",\n  \"Action\": [\n    \"iam:TagInstanceProfile\"\n  ],\n  \"Condition\": {\n    \"StringEquals\": {\n      \"aws:ResourceTag/kubernetes.io/cluster/${ClusterName}\": \"owned\",\n      \"aws:ResourceTag/topology.kubernetes.io/region\": \"${AWS::Region}\",\n      \"aws:RequestTag/kubernetes.io/cluster/${ClusterName}\": \"owned\",\n      \"aws:RequestTag/eks:eks-cluster-name\": \"${ClusterName}\",\n      \"aws:RequestTag/topology.kubernetes.io/region\": \"${AWS::Region}\"\n    },\n    \"StringLike\": {\n      \"aws:ResourceTag/karpenter.k8s.aws/ec2nodeclass\": \"*\",\n      \"aws:RequestTag/karpenter.k8s.aws/ec2nodeclass\": \"*\"\n    }\n  }\n}\n```\n\n\n#### AllowScopedInstanceProfileActions\n\nThe AllowScopedInstanceProfileActions Sid gives the Karpenter controller permission to perform [`iam:AddRoleToInstanceProfile`](https://docs.aws.amazon.com/IAM/latest/APIReference/API_AddRoleToInstanceProfile.html), [`iam:RemoveRoleFromInstanceProfile`](https://docs.aws.amazon.com/IAM/latest/APIReference/API_RemoveRoleFromInstanceProfile.html), and [`iam:DeleteInstanceProfile`](https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeleteInstanceProfile.html) actions,\nprovided that the request is made to a cluster with `kubernetes.io/cluster/${ClusterName}` set to owned and is made in the current region.\nAlso, `karpenter.k8s.aws/ec2nodeclass` must be set to some value. This permission is further enforced by the `iam:PassRole` permission. If Karpenter attempts to add a role to an instance profile that it doesn't have `iam:PassRole` permission on, that call will fail. Therefore, if you configure Karpenter to use a new role through the `EC2NodeClass`, ensure that you also specify that role within your `iam:PassRole` permission.\n\n```json\n{\n  \"Sid\": \"AllowScopedInstanceProfileActions\",\n  \"Effect\": \"Allow\",\n  \"Resource\": \"arn:${AWS::Partition}:iam::${AWS::AccountId}:instance-profile/*\",\n  \"Action\": [\n    \"iam:AddRoleToInstanceProfile\",\n    \"iam:RemoveRoleFromInstanceProfile\",\n    \"iam:DeleteInstanceProfile\"\n  ],\n  \"Condition\": {\n    \"StringEquals\": {\n      \"aws:ResourceTag/kubernetes.io/cluster/${ClusterName}\": \"owned\",\n      \"aws:ResourceTag/topology.kubernetes.io/region\": \"${AWS::Region}\"\n    },\n    \"StringLike\": {\n      \"aws:ResourceTag/karpenter.k8s.aws/ec2nodeclass\": \"*\"\n    }\n  }\n}\n```\n\n#### AllowInstanceProfileReadActions\n\nThe AllowInstanceProfileReadActions Sid gives the Karpenter controller permission to perform [`iam:GetInstanceProfile`](https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetInstanceProfile.html) actions to retrieve information about a specified instance profile, including understanding if an instance profile has been provisioned for an `EC2NodeClass` or needs to be re-provisioned.\n\n```json\n{\n  \"Sid\": \"AllowInstanceProfileReadActions\",\n  \"Effect\": \"Allow\",\n  \"Resource\": \"arn:${AWS::Partition}:iam::${AWS::AccountId}:instance-profile/*\",\n  \"Action\": \"iam:GetInstanceProfile\"\n}\n```\n\n#### AllowUnscopedInstanceProfileListAction\n\nThe AllowUnscopedInstanceProfileListAction Sid gives the Karpenter controller permission to perform [`iam:ListInstanceProfiles`](https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListInstanceProfiles.html) action to list instance profiles.\n\n```json\n{\n  \"Sid\": \"AllowUnscopedInstanceProfileListAction\",\n  \"Effect\": \"Allow\",\n  \"Resource\": \"*\",\n  \"Action\": \"iam:ListInstanceProfiles\"\n}\n```\n\n#### AllowAPIServerEndpointDiscovery\n\nYou can optionally allow the Karpenter controller to discover the Kubernetes cluster's external API endpoint to enable EC2 nodes to successfully join the EKS cluster.\n\n> **Note**: If you are not using an EKS control plane, you will have to specify this endpoint explicitly. See the description of the `aws.clusterEndpoint` setting in the [ConfigMap](.settings/#configmap) documentation for details.\n\nThe AllowAPIServerEndpointDiscovery Sid allows the Karpenter controller to get that information (`eks:DescribeCluster`) for the cluster (`cluster/${ClusterName}`).\n\n```json\n{\n  \"Sid\": \"AllowAPIServerEndpointDiscovery\",\n  \"Effect\": \"Allow\",\n  \"Resource\": \"arn:${AWS::Partition}:eks:${AWS::Region}:${AWS::AccountId}:cluster/${ClusterName}\",\n  \"Action\": \"eks:DescribeCluster\"\n}\n```\n\n## Interruption Handling\n\nSettings in this section allow the Karpenter controller to stand-up an interruption queue to receive notification messages from other AWS services about the health and status of instances. For example, this interruption queue allows Karpenter to be aware of spot instance interruptions that are sent 2 minutes before spot instances are reclaimed by EC2. Adding this queue allows Karpenter to be proactive in migrating workloads to new nodes.\nSee the [Interruption]({{< relref \"../concepts/disruption#interruption\" >}}) section of the Disruption page for details.\n\nDefining the `KarpenterInterruptionQueuePolicy` allows Karpenter to see and respond to the following:\n\n* AWS health events\n* Spot interruptions\n* Spot rebalance recommendations\n* Instance state changes\n\nThe resources defined in this section include:\n\n* KarpenterInterruptionQueue\n* KarpenterInterruptionQueuePolicy\n* ScheduledChangeRule\n* SpotInterruptionRule\n* RebalanceRule\n* InstanceStateChangeRule\n\n### KarpenterInterruptionQueue\n\nThe [AWS::SQS::Queue](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sqs-queue.html) resource is used to create an Amazon SQS standard queue.\nProperties of that resource set the `QueueName` to the name of your cluster, the time for which SQS retains each message (`MessageRetentionPeriod`) to 300 seconds, and enabling serverside-side encryption using SQS owned encryption keys (`SqsManagedSseEnabled`) to `true`.\nSee [SetQueueAttributes](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SetQueueAttributes.html) for descriptions of some of these attributes.\n\n```yaml\nKarpenterInterruptionQueue:\n  Type: AWS::SQS::Queue\n  Properties:\n    QueueName: !Sub \"${ClusterName}\"\n    MessageRetentionPeriod: 300\n    SqsManagedSseEnabled: true\n```\n\n### KarpenterInterruptionQueuePolicy\n\nThe Karpenter interruption queue policy is created to allow AWS services that we want to receive instance notifications from to push notification messages to the queue.\nThe [AWS::SQS::QueuePolicy](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sqs-queuepolicy.html) resource here applies `EC2InterruptionPolicy` to the `KarpenterInterruptionQueue`. The policy allows [sqs:SendMessage](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html) actions to `events.amazonaws.com` and `sqs.amazonaws.com` services. It also allows the `GetAtt` function to get attributes from `KarpenterInterruptionQueue.Arn`.\nAdditionally, it only allows access to the queue using encrypted connections over HTTPS (TLS) to adhere to [Amazon SQS Security Best Practices](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-security-best-practices.html#enforce-encryption-data-in-transit).\n\n```yaml\nKarpenterInterruptionQueuePolicy:\n  Type: AWS::SQS::QueuePolicy\n  Properties:\n    Queues:\n      - !Ref KarpenterInterruptionQueue\n    PolicyDocument:\n      Id: EC2InterruptionPolicy\n      Statement:\n        - Effect: Allow\n          Principal:\n            Service:\n              - events.amazonaws.com\n              - sqs.amazonaws.com\n          Action: sqs:SendMessage\n          Resource: !GetAtt KarpenterInterruptionQueue.Arn\n        - Sid: DenyHTTP\n          Effect: Deny\n          Action: sqs:*\n          Resource: !GetAtt KarpenterInterruptionQueue.Arn\n          Condition:\n            Bool:\n              aws:SecureTransport: false\n          Principal: \"*\"\n```\n\n### Rules\n\nThis section allows Karpenter to gather [AWS Health Events](https://docs.aws.amazon.com/health/latest/ug/cloudwatch-events-health.html#about-public-events) and direct them to a queue where they can be consumed by Karpenter.\nThese rules include:\n\n* ScheduledChangeRule: The [AWS::Events::Rule](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-events-rule.html) creates a rule where the [EventPattern](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-patterns.html) is set to send events from the `aws.health` source to `KarpenterInterruptionQueue`.\n\n  ```yaml\n  ScheduledChangeRule:\n    Type: 'AWS::Events::Rule'\n    Properties:\n     EventPattern:\n       source:\n         - aws.health\n       detail-type:\n         - AWS Health Event\n     Targets:\n       - Id: KarpenterInterruptionQueueTarget\n         Arn: !GetAtt KarpenterInterruptionQueue.Arn\n  ```\n\n* SpotInterruptionRule: An EC2 Spot Instance Interruption warning tells you that AWS is about to reclaim a Spot instance you are using. This rule allows Karpenter to gather [EC2 Spot Instance Interruption Warning](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-interruptions.html) events and direct them to a queue where they can be consumed by Karpenter. In particular, the [AWS::Events::Rule](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-events-rule.html) here creates a rule where the [EventPattern](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-patterns.html) is set to send events from the `aws.ec2` source to `KarpenterInterruptionQueue`.\n\n  ```yaml\n  SpotInterruptionRule:\n    Type: 'AWS::Events::Rule'\n    Properties:\n      EventPattern:\n        source:\n          - aws.ec2\n        detail-type:\n          - EC2 Spot Instance Interruption Warning\n      Targets:\n        - Id: KarpenterInterruptionQueueTarget\n          Arn: !GetAtt KarpenterInterruptionQueue.Arn\n  ```\n\n* RebalanceRule: An EC2 Instance Rebalance Recommendation signal tells you that a Spot instance is at a heightened risk of being interrupted, allowing Karpenter to get new instances or simply rebalance workloads.  This rule allows Karpenter to gather [EC2 Instance Rebalance Recommendation](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/rebalance-recommendations.html) signals and direct them to a queue where they can be consumed by Karpenter. In particular, the [AWS::Events::Rule](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-events-rule.html) here creates a rule where the [EventPattern](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-patterns.html) is set to send events from the `aws.ec2` source to `KarpenterInterruptionQueue`.\n\n  ```yaml\n  RebalanceRule:\n   Type: 'AWS::Events::Rule'\n   Properties:\n     EventPattern:\n       source:\n         - aws.ec2\n       detail-type:\n         - EC2 Instance Rebalance Recommendation\n     Targets:\n       - Id: KarpenterInterruptionQueueTarget\n         Arn: !GetAtt KarpenterInterruptionQueue.Arn\n  ```\n\n* InstanceStateChangeRule: An EC2 Instance State-change Notification signal tells you that the state of an instance has changed to one of the following states: pending, running, stopping, stopped, shutting-down, or terminated. This rule allows Karpenter to gather [EC2 Instance State-change](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/monitoring-instance-state-changes.html) signals and direct them to a queue where they can be consumed by Karpenter. In particular, the [AWS::Events::Rule](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-events-rule.html) here creates a rule where the [EventPattern](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-patterns.html) is set to send events from the `aws.ec2` source to `KarpenterInterruptionQueue`.\n\n  ```yaml\n  InstanceStateChangeRule:\n   Type: 'AWS::Events::Rule'\n   Properties:\n     EventPattern:\n       source:\n         - aws.ec2\n       detail-type:\n         - EC2 Instance State-change Notification\n     Targets:\n       - Id: KarpenterInterruptionQueueTarget\n         Arn: !GetAtt KarpenterInterruptionQueue.Arn\n  ```\n"
  },
  {
    "path": "website/content/en/v1.8/reference/instance-types.md",
    "content": "---\ntitle: \"Instance Types\"\nlinkTitle: \"Instance Types\"\nweight: 100\n\ndescription: >\n  Evaluate Instance Type Resources\n---\n<!-- this document is generated from hack/docs/instancetypes_gen_docs.go -->\nAWS instance types offer varying resources and can be selected by labels. The values provided\nbelow are the resources available with some assumptions and after the instance overhead has been subtracted:\n- `blockDeviceMappings` are not configured\n- `amiFamily` is set to `AL2023`\n## a1 Family\n### `a1.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|a|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|a1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|500|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|a1.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|1392Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|10|\n### `a1.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|a|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|a1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|a1.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3055Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `a1.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|a|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|a1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|a1.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6525Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `a1.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|a|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|a1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|a1.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `a1.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|a|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|a1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|a1.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27322Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `a1.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|a|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|a1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|a1.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27322Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n## c1 Family\n### `c1.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|0|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|1740|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c1.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|1122Mi|\n |pods|12|\n### `c1.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|0|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|7168|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c1.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|5637Mi|\n |pods|58|\n## c3 Family\n### `c3.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|3840|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c3.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|2878Mi|\n |pods|29|\n### `c3.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|7680|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c3.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6111Mi|\n |pods|58|\n### `c3.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|15360|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c3.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|13215Mi|\n |pods|58|\n### `c3.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|30720|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c3.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|25487Mi|\n |pods|234|\n### `c3.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|61440|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c3.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|53903Mi|\n |pods|234|\n## c4 Family\n### `c4.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|3840|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c4.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|2878Mi|\n |pods|29|\n### `c4.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|7680|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c4.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6111Mi|\n |pods|58|\n### `c4.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|1000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|15360|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c4.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|13215Mi|\n |pods|58|\n### `c4.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|30720|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c4.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|25487Mi|\n |pods|234|\n### `c4.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|36|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|61440|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c4.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|35840m|\n |ephemeral-storage|17Gi|\n |memory|53903Mi|\n |pods|234|\n## c5 Family\n### `c5.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3114Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c5.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6584Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c5.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c5.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27381Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5.9xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|36|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|73728|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|9xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5.9xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|35840m|\n |ephemeral-storage|17Gi|\n |memory|65269Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|88002Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5.18xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|72|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|147456|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|18xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5.18xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|71750m|\n |ephemeral-storage|17Gi|\n |memory|127934Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c5.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c5.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## c5a Family\n### `c5a.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5a.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3114Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c5a.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5a.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6584Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c5a.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5a.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c5a.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5a.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27381Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5a.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5a.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5a.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5a.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|88002Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5a.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6300|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5a.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112779Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c5a.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5a.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## c5ad Family\n### `c5ad.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|75|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5ad.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3114Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c5ad.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|150|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5ad.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6584Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c5ad.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|300|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5ad.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c5ad.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|600|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5ad.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27381Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5ad.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1200|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5ad.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5ad.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1800|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5ad.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|88002Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5ad.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6300|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2400|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5ad.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112779Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c5ad.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5ad.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## c5d Family\n### `c5d.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|50|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5d.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3114Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c5d.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|100|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5d.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6584Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c5d.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|200|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5d.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c5d.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|400|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5d.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27381Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5d.9xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|36|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|900|\n |karpenter.k8s.aws/instance-memory|73728|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|9xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5d.9xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|35840m|\n |ephemeral-storage|17Gi|\n |memory|65269Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5d.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1800|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5d.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|88002Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5d.18xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|72|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1800|\n |karpenter.k8s.aws/instance-memory|147456|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|18xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5d.18xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|71750m|\n |ephemeral-storage|17Gi|\n |memory|127934Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c5d.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3600|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5d.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c5d.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3600|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5d.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## c5n Family\n### `c5n.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|5376|\n |karpenter.k8s.aws/instance-network-bandwidth|3000|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5n.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|4298Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c5n.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|10752|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5n.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|8952Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c5n.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|21504|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5n.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|18898Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c5n.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|43008|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5n.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|36853Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5n.9xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|36|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|9xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5n.9xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|35840m|\n |ephemeral-storage|17Gi|\n |memory|88002Mi|\n |pods|234|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5n.18xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|72|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|18xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5n.18xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|71750m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c5n.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|72|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5n.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|71750m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## c6a Family\n### `c6a.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6a.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3114Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c6a.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6a.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6584Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c6a.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6a.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c6a.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6a.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27381Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c6a.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6a.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `c6a.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6a.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|88002Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `c6a.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6a.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112779Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6a.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6a.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6a.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6a.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6a.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6a.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6a.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6a.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## c6g Family\n### `c6g.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|500|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6g.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|1392Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `c6g.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6g.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3055Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c6g.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6g.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6525Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c6g.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6g.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c6g.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6g.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27322Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c6g.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6g.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c6g.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14250|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6g.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|87943Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c6g.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6g.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6g.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6g.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## c6gd Family\n### `c6gd.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|59|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|500|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gd.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|1392Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `c6gd.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gd.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3055Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c6gd.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gd.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6525Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c6gd.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gd.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c6gd.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gd.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27322Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c6gd.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gd.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c6gd.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14250|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gd.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|87943Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c6gd.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gd.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6gd.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gd.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## c6gn Family\n### `c6gn.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6gn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|1600|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gn.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|1392Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `c6gn.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6gn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|3000|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gn.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3055Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c6gn.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6gn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|6300|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gn.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6525Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c6gn.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6gn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gn.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c6gn.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6gn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gn.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27322Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c6gn.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6gn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gn.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c6gn.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|28500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6gn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gn.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|87943Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c6gn.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|38000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6gn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gn.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## c6i Family\n### `c6i.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6i.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3114Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c6i.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6i.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6584Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c6i.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6i.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c6i.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6i.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27381Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c6i.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6i.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `c6i.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6i.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|88002Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `c6i.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6i.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112779Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6i.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6i.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6i.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6i.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6i.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6i.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## c6id Family\n### `c6id.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6id.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3114Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c6id.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6id.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6584Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c6id.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6id.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c6id.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6id.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27381Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c6id.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6id.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `c6id.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6id.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|88002Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `c6id.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6id.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112779Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6id.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|5700|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6id.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6id.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6id.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6id.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6id.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## c6in Family\n### `c6in.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6in.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3114Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c6in.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6in.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6584Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c6in.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6in.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c6in.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6in.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27381Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c6in.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6in.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `c6in.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|37500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6in.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|88002Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `c6in.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|50000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6in.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112779Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6in.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|75000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|150000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6in.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6in.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6in.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|237794Mi|\n |pods|394|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|106|\n### `c6in.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6in.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|237794Mi|\n |pods|394|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|106|\n## c7a Family\n### `c7a.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|390|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7a.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|1451Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `c7a.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7a.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3114Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c7a.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7a.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6584Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c7a.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7a.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c7a.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7a.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27381Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c7a.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7a.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `c7a.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7a.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|88002Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `c7a.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7a.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112779Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c7a.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7a.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c7a.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7a.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c7a.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7a.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c7a.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7a.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## c7g Family\n### `c7g.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|520|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7g.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|1392Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `c7g.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7g.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3055Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c7g.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1876|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7g.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6525Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c7g.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7g.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c7g.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7g.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27322Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c7g.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7g.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c7g.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7g.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|87943Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c7g.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7g.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c7g.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7g.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## c7gd Family\n### `c7gd.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|59|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|520|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gd.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|1392Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `c7gd.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gd.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3055Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c7gd.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1876|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gd.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6525Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c7gd.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gd.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c7gd.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gd.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27322Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c7gd.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gd.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c7gd.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gd.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|87943Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c7gd.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gd.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c7gd.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gd.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## c7gn Family\n### `c7gn.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gn|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gn.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|1392Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `c7gn.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gn|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gn.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3055Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c7gn.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gn|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gn.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6525Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c7gn.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gn|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gn.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c7gn.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gn|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gn.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27322Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c7gn.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gn|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gn.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c7gn.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gn|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|150000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gn.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|87943Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c7gn.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gn|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gn.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c7gn.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gn|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gn.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## c7i Family\n### `c7i.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3114Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c7i.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6584Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c7i.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c7i.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27381Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c7i.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `c7i.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|88002Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `c7i.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112779Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c7i.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c7i.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c7i.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c7i.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## c7i-flex Family\n### `c7i-flex.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i-flex|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|390|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i-flex.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3114Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|3|\n### `c7i-flex.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i-flex|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i-flex.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6584Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|8|\n### `c7i-flex.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i-flex|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i-flex.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c7i-flex.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i-flex|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i-flex.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27381Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|34|\n### `c7i-flex.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i-flex|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i-flex.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c7i-flex.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i-flex|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|9375|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i-flex.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|88002Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `c7i-flex.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i-flex|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i-flex.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112779Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## c8g Family\n### `c8g.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|520|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8g.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|1392Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `c8g.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8g.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3055Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c8g.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8g.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6525Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c8g.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8g.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c8g.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8g.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27322Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c8g.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8g.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c8g.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8g.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|87943Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c8g.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8g.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c8g.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8g.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173341Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c8g.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8g.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173341Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c8g.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8g.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|355203Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c8g.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8g.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|355203Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## c8gd Family\n### `c8gd.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|59|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|520|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gd.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|1392Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `c8gd.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gd.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3055Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c8gd.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gd.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6525Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c8gd.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gd.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c8gd.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gd.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27322Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c8gd.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gd.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c8gd.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gd.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|87943Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c8gd.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gd.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c8gd.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|5700|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gd.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173341Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c8gd.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|5700|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gd.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173341Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c8gd.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|11400|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gd.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|355203Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c8gd.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|11400|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gd.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|355203Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## c8gn Family\n### `c8gn.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gn.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|1392Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `c8gn.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gn.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3055Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c8gn.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gn.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6525Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c8gn.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gn.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c8gn.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gn.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27322Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c8gn.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gn.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|56994Mi|\n |pods|292|\n |vpc.amazonaws.com/pod-eni|52|\n### `c8gn.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|150000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gn.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|86667Mi|\n |pods|350|\n |vpc.amazonaws.com/pod-eni|50|\n### `c8gn.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gn.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112181Mi|\n |pods|786|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|106|\n### `c8gn.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|300000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gn.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|168490Mi|\n |pods|1178|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n### `c8gn.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|300000|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gn.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|168490Mi|\n |pods|1178|\n |vpc.amazonaws.com/efa|1|\n### `c8gn.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|600000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gn.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|356820Mi|\n |pods|590|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|98|\n### `c8gn.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|600000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gn.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|356820Mi|\n |pods|590|\n |vpc.amazonaws.com/efa|2|\n## c8i Family\n### `c8i.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8i.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|2784Mi|\n |pods|59|\n### `c8i.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8i.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|5924Mi|\n |pods|118|\n### `c8i.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8i.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|13502Mi|\n |pods|118|\n### `c8i.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8i.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|25621Mi|\n |pods|394|\n### `c8i.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8i.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|54853Mi|\n |pods|492|\n### `c8i.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8i.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|84086Mi|\n |pods|590|\n### `c8i.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8i.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|109776Mi|\n |pods|1010|\n### `c8i.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8i.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|170397Mi|\n |pods|1010|\n### `c8i.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8i.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|225474Mi|\n |pods|1514|\n### `c8i.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8i.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|346715Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n### `c8i.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8i.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|346715Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n### `c8i.96xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|384|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-size|96xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8i.96xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|382970m|\n |ephemeral-storage|17Gi|\n |memory|710440Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n### `c8i.metal-96xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|384|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-size|metal-96xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8i.metal-96xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|382970m|\n |ephemeral-storage|17Gi|\n |memory|710440Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n## c8i-flex Family\n### `c8i-flex.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8i-flex.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|2784Mi|\n |pods|59|\n### `c8i-flex.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8i-flex.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|5924Mi|\n |pods|118|\n### `c8i-flex.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8i-flex.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|13502Mi|\n |pods|118|\n### `c8i-flex.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8i-flex.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|25621Mi|\n |pods|394|\n### `c8i-flex.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8i-flex.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|54853Mi|\n |pods|492|\n### `c8i-flex.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8i-flex.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|84086Mi|\n |pods|590|\n### `c8i-flex.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8i-flex.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|109776Mi|\n |pods|1010|\n## d2 Family\n### `d2.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|d2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|31232|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d2.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|27896Mi|\n |pods|58|\n### `d2.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|1000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|d2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|62464|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d2.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|56786Mi|\n |pods|58|\n### `d2.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|d2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|124928|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d2.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|112629Mi|\n |pods|234|\n### `d2.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|36|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|d2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|249856|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d2.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|35840m|\n |ephemeral-storage|17Gi|\n |memory|228187Mi|\n |pods|234|\n## d3 Family\n### `d3.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|d3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|5940|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|3000|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d3.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29845Mi|\n |pods|10|\n |vpc.amazonaws.com/pod-eni|42|\n### `d3.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|d3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|11880|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|6000|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d3.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|60067Mi|\n |pods|18|\n |vpc.amazonaws.com/pod-eni|92|\n### `d3.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|d3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|23760|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d3.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|120468Mi|\n |pods|38|\n |vpc.amazonaws.com/pod-eni|118|\n### `d3.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|5000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|d3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|47520|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d3.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|241479Mi|\n |pods|59|\n |vpc.amazonaws.com/pod-eni|119|\n## d3en Family\n### `d3en.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|d3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|27960|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|6000|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d3en.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14690Mi|\n |pods|10|\n |vpc.amazonaws.com/pod-eni|24|\n### `d3en.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|d3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|55920|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d3en.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29757Mi|\n |pods|18|\n |vpc.amazonaws.com/pod-eni|58|\n### `d3en.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|d3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|111840|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d3en.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|59847Mi|\n |pods|38|\n |vpc.amazonaws.com/pod-eni|118|\n### `d3en.6xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|24|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|d3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|167760|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|6xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d3en.6xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|23870m|\n |ephemeral-storage|17Gi|\n |memory|89938Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|118|\n### `d3en.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|5000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|d3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|223680|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d3en.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|120028Mi|\n |pods|78|\n |vpc.amazonaws.com/pod-eni|118|\n### `d3en.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|7000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|d3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|335520|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d3en.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|180528Mi|\n |pods|89|\n |vpc.amazonaws.com/pod-eni|119|\n## dl1 Family\n### `dl1.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|dl|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|dl1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-gpu-count|8|\n |karpenter.k8s.aws/instance-gpu-manufacturer|habana|\n |karpenter.k8s.aws/instance-gpu-memory|32768|\n |karpenter.k8s.aws/instance-gpu-name|gaudi-hl-205|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|4000|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|400000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|dl1.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |habana.ai/gaudi|8|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|4|\n |vpc.amazonaws.com/pod-eni|62|\n## dl2q Family\n### `dl2q.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-accelerator-count|8|\n |karpenter.k8s.aws/instance-accelerator-manufacturer|qualcomm|\n |karpenter.k8s.aws/instance-accelerator-name|qualcomm-ai100|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|dl|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|dl2q|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|dl2q.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## f1 Family\n### `f1.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|f|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|1700|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|f1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-local-nvme|470|\n |karpenter.k8s.aws/instance-memory|124928|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|f1.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|114565Mi|\n |pods|58|\n### `f1.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|f|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|f1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-local-nvme|940|\n |karpenter.k8s.aws/instance-memory|249856|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|f1.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|228187Mi|\n |pods|234|\n### `f1.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|f|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|f1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-local-nvme|3760|\n |karpenter.k8s.aws/instance-memory|999424|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|f1.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|919778Mi|\n |pods|394|\n## f2 Family\n### `f2.6xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|f|\n |karpenter.k8s.aws/instance-cpu|24|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|7500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|f2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|940|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|6xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|f2.6xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|23870m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `f2.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|f|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|f2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1880|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|f2.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|482037Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `f2.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|f|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|f2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7520|\n |karpenter.k8s.aws/instance-memory|2097152|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|f2.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1931403Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## g4ad Family\n### `g4ad.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g4ad|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-gpu-memory|8192|\n |karpenter.k8s.aws/instance-gpu-name|radeon-pro-v520|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|150|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2000|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g4ad.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |amd.com/gpu|1|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14712Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|12|\n### `g4ad.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g4ad|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-gpu-memory|8192|\n |karpenter.k8s.aws/instance-gpu-name|radeon-pro-v520|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|300|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|4167|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g4ad.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |amd.com/gpu|1|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29867Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|12|\n### `g4ad.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g4ad|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-gpu-memory|8192|\n |karpenter.k8s.aws/instance-gpu-name|radeon-pro-v520|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|600|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|8333|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g4ad.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |amd.com/gpu|1|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|59946Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|11|\n### `g4ad.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g4ad|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-gpu-count|2|\n |karpenter.k8s.aws/instance-gpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-gpu-memory|8192|\n |karpenter.k8s.aws/instance-gpu-name|radeon-pro-v520|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1200|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g4ad.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |amd.com/gpu|2|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|120248Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|10|\n### `g4ad.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6300|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g4ad|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-gpu-count|4|\n |karpenter.k8s.aws/instance-gpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-gpu-memory|8192|\n |karpenter.k8s.aws/instance-gpu-name|radeon-pro-v520|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2400|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g4ad.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |amd.com/gpu|4|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|6|\n## g4dn Family\n### `g4dn.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g4dn|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|t4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|125|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g4dn.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |nvidia.com/gpu|1|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|39|\n### `g4dn.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g4dn|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|t4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|225|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g4dn.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29636Mi|\n |nvidia.com/gpu|1|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|39|\n### `g4dn.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g4dn|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|t4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|225|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g4dn.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|59946Mi|\n |nvidia.com/gpu|1|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|59|\n### `g4dn.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g4dn|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|t4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|900|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g4dn.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|120248Mi|\n |nvidia.com/gpu|1|\n |pods|58|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|58|\n### `g4dn.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g4dn|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-gpu-count|4|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|t4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|900|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g4dn.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |nvidia.com/gpu|4|\n |pods|234|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|54|\n### `g4dn.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g4dn|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|t4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|900|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g4dn.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|241490Mi|\n |nvidia.com/gpu|1|\n |pods|58|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|118|\n### `g4dn.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g4dn|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-gpu-count|8|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|t4|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|1800|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g4dn.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |nvidia.com/gpu|8|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## g5 Family\n### `g5.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|a10g|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|250|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |nvidia.com/gpu|1|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|4|\n### `g5.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|a10g|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|450|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |nvidia.com/gpu|1|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|17|\n### `g5.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|a10g|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|600|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |nvidia.com/gpu|1|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|34|\n### `g5.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|16000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|a10g|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|900|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |nvidia.com/gpu|1|\n |pods|234|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|84|\n### `g5.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|16000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|4|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|a10g|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |nvidia.com/gpu|4|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `g5.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|16000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|a10g|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |nvidia.com/gpu|1|\n |pods|234|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|114|\n### `g5.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|4|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|a10g|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |nvidia.com/gpu|4|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `g5.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|8|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|a10g|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|723299Mi|\n |nvidia.com/gpu|8|\n |pods|345|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|115|\n## g5g Family\n### `g5g.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|g5g|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|t4g|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5g.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6525Mi|\n |nvidia.com/gpu|1|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `g5g.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|g5g|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|t4g|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5g.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |nvidia.com/gpu|1|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `g5g.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|g5g|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|t4g|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5g.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27322Mi|\n |nvidia.com/gpu|1|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `g5g.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|g5g|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|t4g|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5g.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |nvidia.com/gpu|1|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `g5g.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|g5g|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|2|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|t4g|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5g.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |nvidia.com/gpu|2|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `g5g.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|g5g|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|2|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|t4g|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5g.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |nvidia.com/gpu|2|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## g6 Family\n### `g6.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|5000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|250|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |nvidia.com/gpu|1|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `g6.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|5000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|450|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |nvidia.com/gpu|1|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `g6.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|8000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|600|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |nvidia.com/gpu|1|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `g6.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|16000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|900|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |nvidia.com/gpu|1|\n |pods|234|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|84|\n### `g6.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|4|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3760|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |nvidia.com/gpu|4|\n |pods|234|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|114|\n### `g6.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1880|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |nvidia.com/gpu|1|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `g6.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|4|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3760|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |nvidia.com/gpu|4|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `g6.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|8|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7520|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |nvidia.com/gpu|8|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## g6e Family\n### `g6e.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|5000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6e|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|45776|\n |karpenter.k8s.aws/instance-gpu-name|l40s|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|250|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6e.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |nvidia.com/gpu|1|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `g6e.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|5000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6e|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|45776|\n |karpenter.k8s.aws/instance-gpu-name|l40s|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|450|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6e.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |nvidia.com/gpu|1|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `g6e.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|8000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6e|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|45776|\n |karpenter.k8s.aws/instance-gpu-name|l40s|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|600|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6e.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |nvidia.com/gpu|1|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `g6e.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|16000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6e|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|45776|\n |karpenter.k8s.aws/instance-gpu-name|l40s|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|900|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6e.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |nvidia.com/gpu|1|\n |pods|234|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|84|\n### `g6e.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6e|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|4|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|45776|\n |karpenter.k8s.aws/instance-gpu-name|l40s|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6e.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360157Mi|\n |nvidia.com/gpu|4|\n |pods|292|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|112|\n### `g6e.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6e|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|45776|\n |karpenter.k8s.aws/instance-gpu-name|l40s|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|35000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6e.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |nvidia.com/gpu|1|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `g6e.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6e|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|4|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|45776|\n |karpenter.k8s.aws/instance-gpu-name|l40s|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6e.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|721682Mi|\n |nvidia.com/gpu|4|\n |pods|492|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|102|\n### `g6e.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6e|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|8|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|45776|\n |karpenter.k8s.aws/instance-gpu-name|l40s|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|400000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6e.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1449132Mi|\n |nvidia.com/gpu|8|\n |pods|492|\n |vpc.amazonaws.com/efa|4|\n |vpc.amazonaws.com/pod-eni|82|\n## g6f Family\n### `g6f.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|5000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6f|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|0|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|2861|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|100|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1500|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6f.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|7002Mi|\n |pods|20|\n |vpc.amazonaws.com/pod-eni|10|\n### `g6f.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|5000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6f|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|0|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|2861|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|100|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6f.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `g6f.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|5000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6f|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|0|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|5722|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|200|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6f.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `g6f.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6f|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|0|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|11444|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|450|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6f.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n## gr6 Family\n### `gr6.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|gr|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|8000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|gr6|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|600|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|gr6.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |nvidia.com/gpu|1|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `gr6.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|gr|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|16000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|gr6|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|900|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|gr6.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |nvidia.com/gpu|1|\n |pods|234|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|84|\n## gr6f Family\n### `gr6f.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|gr|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|8000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|gr6f|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|0|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|11444|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|450|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|gr6f.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n## h1 Family\n### `h1.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|h|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|1750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|h1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|h1.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n### `h1.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|h|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|h1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|h1.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n### `h1.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|h|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|7000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|h1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|h1.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n### `h1.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|h|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|h1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|h1.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|237794Mi|\n |pods|394|\n## hpc6a Family\n### `hpc6a.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|hpc|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|hpc6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|hpc6a.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|362269Mi|\n |pods|100|\n |vpc.amazonaws.com/efa|1|\n## hpc6id Family\n### `hpc6id.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|hpc|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|hpc6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|15200|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|hpc6id.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|969016Mi|\n |pods|51|\n |vpc.amazonaws.com/efa|2|\n## hpc7a Family\n### `hpc7a.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|hpc|\n |karpenter.k8s.aws/instance-cpu|24|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|hpc7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|300000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|hpc7a.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|23870m|\n |ephemeral-storage|17Gi|\n |memory|725994Mi|\n |pods|100|\n |vpc.amazonaws.com/efa|2|\n### `hpc7a.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|hpc|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|hpc7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|300000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|hpc7a.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|725994Mi|\n |pods|100|\n |vpc.amazonaws.com/efa|2|\n### `hpc7a.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|hpc|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|hpc7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|300000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|hpc7a.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|725994Mi|\n |pods|100|\n |vpc.amazonaws.com/efa|2|\n### `hpc7a.96xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|hpc|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|hpc7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|300000|\n |karpenter.k8s.aws/instance-size|96xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|hpc7a.96xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|725994Mi|\n |pods|100|\n |vpc.amazonaws.com/efa|2|\n## hpc7g Family\n### `hpc7g.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|hpc|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|hpc7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|hpc7g.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118649Mi|\n |pods|198|\n |vpc.amazonaws.com/efa|1|\n### `hpc7g.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|hpc|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|hpc7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|hpc7g.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118649Mi|\n |pods|198|\n |vpc.amazonaws.com/efa|1|\n### `hpc7g.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|hpc|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|hpc7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|hpc7g.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|118649Mi|\n |pods|198|\n |vpc.amazonaws.com/efa|1|\n## i2 Family\n### `i2.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|i2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|31232|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i2.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|27896Mi|\n |pods|58|\n### `i2.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|i2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|62464|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i2.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|56786Mi|\n |pods|58|\n### `i2.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|i2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|124928|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i2.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|112629Mi|\n |pods|234|\n### `i2.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|i2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|249856|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i2.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|228187Mi|\n |pods|234|\n## i3 Family\n### `i3.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|425|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|i3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-local-nvme|475|\n |karpenter.k8s.aws/instance-memory|15616|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|13770Mi|\n |pods|29|\n### `i3.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|850|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|i3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|31232|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|27896Mi|\n |pods|58|\n### `i3.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|1700|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|i3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|62464|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|56786Mi|\n |pods|58|\n### `i3.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|i3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|124928|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|112629Mi|\n |pods|234|\n### `i3.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|7000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|i3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|249856|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|228187Mi|\n |pods|234|\n### `i3.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|i3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-local-nvme|15200|\n |karpenter.k8s.aws/instance-memory|499712|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|453771Mi|\n |pods|737|\n## i3en Family\n### `i3en.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1250|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2100|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3en.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|5|\n### `i3en.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2500|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|4200|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3en.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|12|\n### `i3en.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|5000|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|8400|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3en.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|28|\n### `i3en.3xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|12|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7500|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|3xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3en.3xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|11900m|\n |ephemeral-storage|17Gi|\n |memory|89938Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `i3en.6xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|24|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|15000|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|6xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3en.6xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|23870m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `i3en.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|30000|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3en.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|54|\n### `i3en.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|60000|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3en.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `i3en.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|60000|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3en.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## i4g Family\n### `i4g.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4g|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|468|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4g.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14422Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `i4g.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4g|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|937|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4g.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `i4g.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4g|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1875|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|4687|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4g.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59568Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `i4g.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4g|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3750|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|9375|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4g.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `i4g.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4g|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7500|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4g.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239495Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `i4g.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4g|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|15000|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4g.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476445Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## i4i Family\n### `i4i.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4i|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|468|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4i.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n### `i4i.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4i|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|937|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4i.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|6|\n### `i4i.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4i|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1875|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|4687|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4i.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|26|\n### `i4i.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4i|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3750|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|9375|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4i.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|52|\n### `i4i.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4i|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7500|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4i.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|112|\n### `i4i.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4i|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|11250|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|28120|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4i.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|112|\n### `i4i.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4i|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|15000|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4i.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|120|\n### `i4i.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4i|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|22500|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|56250|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4i.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|722287Mi|\n |pods|437|\n |vpc.amazonaws.com/pod-eni|105|\n### `i4i.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4i|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|30000|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4i.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|961470Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|120|\n### `i4i.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4i|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|30000|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4i.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|961470Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|120|\n## i7i Family\n### `i7i.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|468|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1171|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7i.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `i7i.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|937|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|2343|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7i.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `i7i.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1875|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|4687|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7i.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `i7i.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3750|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|9375|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7i.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `i7i.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7500|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7i.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `i7i.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|11250|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7i.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `i7i.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|15000|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7i.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `i7i.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|22500|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|45000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7i.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `i7i.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|22500|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|45000|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7i.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `i7i.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|45000|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|90000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7i.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446437Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `i7i.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|45000|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|90000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7i.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446437Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## i7ie Family\n### `i7ie.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7ie|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1250|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2083|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7ie.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|19|\n### `i7ie.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7ie|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2500|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|4166|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7ie.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|27|\n### `i7ie.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7ie|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|5000|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|8333|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7ie.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|27|\n### `i7ie.3xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|12|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7ie|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7500|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|3xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7ie.3xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|11900m|\n |ephemeral-storage|17Gi|\n |memory|89938Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|27|\n### `i7ie.6xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|24|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7ie|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|15000|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|6xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7ie.6xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|23870m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `i7ie.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7ie|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|30000|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7ie.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|359035Mi|\n |pods|394|\n |vpc.amazonaws.com/pod-eni|54|\n### `i7ie.18xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|72|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|22500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7ie|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|45000|\n |karpenter.k8s.aws/instance-memory|589824|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|18xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7ie.18xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|71750m|\n |ephemeral-storage|17Gi|\n |memory|537125Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `i7ie.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7ie|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|60000|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7ie.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `i7ie.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7ie|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|60000|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7ie.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `i7ie.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7ie|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|120000|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7ie.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446437Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `i7ie.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7ie|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|120000|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7ie.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446437Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## i8g Family\n### `i8g.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|468|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1172|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8g.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14422Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `i8g.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|937|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|2344|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8g.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `i8g.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1875|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|4688|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8g.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59568Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `i8g.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3750|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|9375|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8g.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `i8g.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7500|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8g.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239495Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `i8g.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|11250|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8g.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360736Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `i8g.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|15000|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8g.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476445Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `i8g.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|22500|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|45000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8g.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718928Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `i8g.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|22500|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|45000|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8g.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718928Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `i8g.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|45000|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|90000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8g.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446378Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## i8ge Family\n### `i8ge.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8ge|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1250|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2100|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8ge.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14422Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|19|\n### `i8ge.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8ge|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2500|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|4200|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8ge.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|27|\n### `i8ge.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8ge|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|5000|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|8400|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8ge.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59568Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|27|\n### `i8ge.3xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|12|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8ge|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7500|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|3xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8ge.3xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|11900m|\n |ephemeral-storage|17Gi|\n |memory|88581Mi|\n |pods|176|\n |vpc.amazonaws.com/pod-eni|25|\n### `i8ge.6xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|24|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8ge|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|15000|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|6xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8ge.6xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|23870m|\n |ephemeral-storage|17Gi|\n |memory|178236Mi|\n |pods|292|\n |vpc.amazonaws.com/pod-eni|52|\n### `i8ge.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8ge|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|30000|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8ge.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|359460Mi|\n |pods|350|\n |vpc.amazonaws.com/pod-eni|50|\n### `i8ge.18xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|72|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|22500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8ge|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|45000|\n |karpenter.k8s.aws/instance-memory|589824|\n |karpenter.k8s.aws/instance-network-bandwidth|112500|\n |karpenter.k8s.aws/instance-size|18xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8ge.18xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|71750m|\n |ephemeral-storage|17Gi|\n |memory|536527Mi|\n |pods|786|\n |vpc.amazonaws.com/pod-eni|106|\n### `i8ge.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8ge|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|60000|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|150000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8ge.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718389Mi|\n |pods|786|\n |vpc.amazonaws.com/pod-eni|106|\n### `i8ge.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8ge|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|60000|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|150000|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8ge.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718389Mi|\n |pods|786|\n |vpc.amazonaws.com/pod-eni|106|\n### `i8ge.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8ge|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|120000|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|300000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8ge.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1441527Mi|\n |pods|1178|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n### `i8ge.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8ge|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|120000|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|300000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8ge.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1441527Mi|\n |pods|1178|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n## im4gn Family\n### `im4gn.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|im|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|im4gn|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|937|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|im4gn.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6844Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `im4gn.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|im|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|im4gn|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1875|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|im4gn.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `im4gn.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|im|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|im4gn|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3750|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|im4gn.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `im4gn.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|im|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|im4gn|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7500|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|im4gn.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `im4gn.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|im|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|im4gn|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|15000|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|im4gn.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `im4gn.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|im|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|im4gn|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|30000|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|im4gn.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|233962Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## inf1 Family\n### `inf1.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-accelerator-count|1|\n |karpenter.k8s.aws/instance-accelerator-manufacturer|aws|\n |karpenter.k8s.aws/instance-accelerator-name|inferentia|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|inf|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|inf1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|inf1.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |aws.amazon.com/neuron|1|\n |aws.amazon.com/neuroncore|4|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6804Mi|\n |pods|38|\n |vpc.amazonaws.com/pod-eni|38|\n### `inf1.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-accelerator-count|1|\n |karpenter.k8s.aws/instance-accelerator-manufacturer|aws|\n |karpenter.k8s.aws/instance-accelerator-name|inferentia|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|inf|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|inf1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|inf1.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |aws.amazon.com/neuron|1|\n |aws.amazon.com/neuroncore|4|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14382Mi|\n |pods|38|\n |vpc.amazonaws.com/pod-eni|38|\n### `inf1.6xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-accelerator-count|4|\n |karpenter.k8s.aws/instance-accelerator-manufacturer|aws|\n |karpenter.k8s.aws/instance-accelerator-name|inferentia|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|inf|\n |karpenter.k8s.aws/instance-cpu|24|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|inf1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|49152|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|6xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|inf1.6xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |aws.amazon.com/neuron|4|\n |aws.amazon.com/neuroncore|16|\n |cpu|23870m|\n |ephemeral-storage|17Gi|\n |memory|42536Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `inf1.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-accelerator-count|16|\n |karpenter.k8s.aws/instance-accelerator-manufacturer|aws|\n |karpenter.k8s.aws/instance-accelerator-name|inferentia|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|inf|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|inf1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|inf1.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |aws.amazon.com/neuron|16|\n |aws.amazon.com/neuroncore|64|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|177976Mi|\n |pods|321|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|111|\n## inf2 Family\n### `inf2.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-accelerator-count|1|\n |karpenter.k8s.aws/instance-accelerator-manufacturer|aws|\n |karpenter.k8s.aws/instance-accelerator-name|inferentia2|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|inf|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|inf2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2083|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|inf2.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |aws.amazon.com/neuron|1|\n |aws.amazon.com/neuroncore|2|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `inf2.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-accelerator-count|1|\n |karpenter.k8s.aws/instance-accelerator-manufacturer|aws|\n |karpenter.k8s.aws/instance-accelerator-name|inferentia2|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|inf|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|inf2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|16667|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|inf2.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |aws.amazon.com/neuron|1|\n |aws.amazon.com/neuroncore|2|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `inf2.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-accelerator-count|6|\n |karpenter.k8s.aws/instance-accelerator-manufacturer|aws|\n |karpenter.k8s.aws/instance-accelerator-name|inferentia2|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|inf|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|inf2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|inf2.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |aws.amazon.com/neuron|6|\n |aws.amazon.com/neuroncore|12|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `inf2.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-accelerator-count|12|\n |karpenter.k8s.aws/instance-accelerator-manufacturer|aws|\n |karpenter.k8s.aws/instance-accelerator-name|inferentia2|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|inf|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|inf2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|inf2.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |aws.amazon.com/neuron|12|\n |aws.amazon.com/neuroncore|24|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## is4gen Family\n### `is4gen.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|is|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|is4gen|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|937|\n |karpenter.k8s.aws/instance-memory|6144|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|is4gen.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|5181Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `is4gen.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|is|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|is4gen|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1875|\n |karpenter.k8s.aws/instance-memory|12288|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|is4gen.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|10633Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `is4gen.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|is|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|is4gen|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3750|\n |karpenter.k8s.aws/instance-memory|24576|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|is4gen.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|21680Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `is4gen.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|is|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|is4gen|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7500|\n |karpenter.k8s.aws/instance-memory|49152|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|is4gen.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|44413Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `is4gen.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|is|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|is4gen|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|15000|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|is4gen.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|87943Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `is4gen.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|is|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|is4gen|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|30000|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|is4gen.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|178874Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n## m1 Family\n### `m1.small`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|0|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|1740|\n |karpenter.k8s.aws/instance-size|small|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m1.small|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|1166Mi|\n |pods|8|\n### `m1.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|0|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|3788|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m1.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|3016Mi|\n |pods|12|\n### `m1.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|0|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|7680|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m1.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6430Mi|\n |pods|29|\n### `m1.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|0|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|15360|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m1.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|13215Mi|\n |pods|58|\n## m2 Family\n### `m2.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|0|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|17510|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m2.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|15203Mi|\n |pods|58|\n### `m2.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|0|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|35020|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m2.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|30740Mi|\n |pods|118|\n### `m2.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|0|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|70041|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m2.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|61858Mi|\n |pods|234|\n## m3 Family\n### `m3.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|3840|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m3.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|3065Mi|\n |pods|12|\n### `m3.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|7680|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m3.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6430Mi|\n |pods|29|\n### `m3.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|15360|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m3.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|13215Mi|\n |pods|58|\n### `m3.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|30720|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m3.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|26763Mi|\n |pods|118|\n## m4 Family\n### `m4.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|450|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m4.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|7002Mi|\n |pods|20|\n### `m4.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m4.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n### `m4.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|1000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m4.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n### `m4.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m4.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n### `m4.10xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|40|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|163840|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|10xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m4.10xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|39830m|\n |ephemeral-storage|17Gi|\n |memory|148623Mi|\n |pods|234|\n### `m4.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m4.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n## m5 Family\n### `m5.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m5.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m5.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m5.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|13600|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m5.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m5.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|120|\n## m5a Family\n### `m5a.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5a.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m5a.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5a.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m5a.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5a.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m5a.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5a.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5a.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5a.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5a.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6780|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5a.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5a.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5a.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m5a.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|13750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5a.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## m5ad Family\n### `m5ad.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|75|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5ad.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m5ad.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|150|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5ad.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m5ad.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|300|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5ad.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m5ad.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|600|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5ad.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5ad.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1200|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5ad.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5ad.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6780|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1800|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5ad.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5ad.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2400|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5ad.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m5ad.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|13750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3600|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5ad.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## m5d Family\n### `m5d.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|75|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5d.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m5d.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|150|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5d.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m5d.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|300|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5d.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m5d.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|600|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5d.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5d.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1200|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5d.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5d.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1800|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5d.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5d.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|13600|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2400|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5d.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m5d.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3600|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5d.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m5d.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3600|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5d.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## m5dn Family\n### `m5dn.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|75|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|2100|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5dn.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m5dn.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|150|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|4100|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5dn.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m5dn.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|300|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|8125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5dn.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m5dn.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|600|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|16250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5dn.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5dn.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1200|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5dn.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5dn.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1800|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5dn.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5dn.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|13600|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2400|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5dn.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m5dn.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3600|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5dn.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m5dn.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3600|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5dn.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## m5n Family\n### `m5n.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|2100|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5n.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m5n.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|4100|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5n.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m5n.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|8125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5n.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m5n.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|16250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5n.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5n.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5n.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5n.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5n.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5n.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|13600|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5n.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m5n.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5n.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m5n.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5n.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## m5zn Family\n### `m5zn.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5zn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|3000|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5zn.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|13|\n### `m5zn.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5zn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5zn.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|29|\n### `m5zn.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5zn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5zn.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|62|\n### `m5zn.3xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|12|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5zn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|49152|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|3xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5zn.3xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|11900m|\n |ephemeral-storage|17Gi|\n |memory|42536Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|92|\n### `m5zn.6xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|24|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5zn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|6xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5zn.6xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|23870m|\n |ephemeral-storage|17Gi|\n |memory|88002Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `m5zn.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5zn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5zn.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m5zn.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5zn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5zn.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## m6a Family\n### `m6a.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6a.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m6a.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6a.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m6a.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6a.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m6a.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6a.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m6a.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6a.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `m6a.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6a.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `m6a.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6a.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6a.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6a.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6a.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6a.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6a.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6a.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6a.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6a.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## m6g Family\n### `m6g.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|500|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6g.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|3286Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `m6g.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6g.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6844Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m6g.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6g.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m6g.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6g.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m6g.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6g.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m6g.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6g.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m6g.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14250|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6g.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178874Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m6g.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6g.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|233962Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6g.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6g.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|233962Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## m6gd Family\n### `m6gd.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|59|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|500|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6gd.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|3286Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `m6gd.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6gd.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6844Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m6gd.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6gd.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m6gd.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6gd.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m6gd.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6gd.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m6gd.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6gd.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m6gd.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14250|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6gd.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178874Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m6gd.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6gd.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|233962Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6gd.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6gd.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|233962Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## m6i Family\n### `m6i.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6i.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m6i.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6i.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m6i.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6i.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m6i.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6i.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m6i.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6i.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `m6i.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6i.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `m6i.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6i.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6i.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6i.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6i.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6i.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6i.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6i.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## m6id Family\n### `m6id.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6id.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m6id.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6id.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m6id.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6id.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m6id.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6id.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m6id.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6id.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `m6id.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6id.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `m6id.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6id.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6id.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|5700|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6id.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6id.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6id.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6id.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6id.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## m6idn Family\n### `m6idn.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6idn.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m6idn.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6idn.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m6idn.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6idn.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m6idn.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6idn.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m6idn.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6idn.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `m6idn.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|37500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6idn.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `m6idn.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|50000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6idn.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6idn.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|75000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|5700|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|150000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6idn.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6idn.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6idn.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|480277Mi|\n |pods|394|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|106|\n### `m6idn.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6idn.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|480277Mi|\n |pods|394|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|106|\n## m6in Family\n### `m6in.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6in.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m6in.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6in.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m6in.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6in.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m6in.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6in.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m6in.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6in.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `m6in.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|37500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6in.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `m6in.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|50000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6in.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6in.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|75000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|150000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6in.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6in.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6in.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|480277Mi|\n |pods|394|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|106|\n### `m6in.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6in.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|480277Mi|\n |pods|394|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|106|\n## m7a Family\n### `m7a.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|390|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7a.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|3345Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `m7a.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7a.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m7a.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7a.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m7a.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7a.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m7a.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7a.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m7a.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7a.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `m7a.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7a.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `m7a.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7a.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m7a.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7a.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m7a.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7a.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m7a.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7a.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m7a.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7a.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## m7g Family\n### `m7g.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|520|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7g.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|3286Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `m7g.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7g.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6844Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m7g.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1876|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7g.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m7g.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7g.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m7g.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7g.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m7g.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7g.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m7g.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7g.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178874Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m7g.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7g.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|233962Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m7g.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7g.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|233962Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## m7gd Family\n### `m7gd.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|59|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|520|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7gd.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|3286Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `m7gd.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7gd.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6844Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m7gd.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1876|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7gd.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m7gd.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7gd.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m7gd.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7gd.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m7gd.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7gd.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m7gd.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7gd.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178874Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m7gd.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7gd.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|233962Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m7gd.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7gd.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|233962Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## m7i Family\n### `m7i.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m7i.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m7i.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m7i.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m7i.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `m7i.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `m7i.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m7i.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m7i.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m7i.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m7i.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## m7i-flex Family\n### `m7i-flex.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i-flex|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|390|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i-flex.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|3|\n### `m7i-flex.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i-flex|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i-flex.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|8|\n### `m7i-flex.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i-flex|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i-flex.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m7i-flex.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i-flex|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i-flex.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|34|\n### `m7i-flex.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i-flex|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i-flex.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m7i-flex.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i-flex|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|9375|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i-flex.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `m7i-flex.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i-flex|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i-flex.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## m8a Family\n### `m8a.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8a.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|3345Mi|\n |pods|8|\n### `m8a.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8a.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6573Mi|\n |pods|59|\n### `m8a.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8a.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|13942Mi|\n |pods|78|\n### `m8a.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8a.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|28217Mi|\n |pods|158|\n### `m8a.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8a.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|56811Mi|\n |pods|314|\n### `m8a.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8a.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|116574Mi|\n |pods|392|\n### `m8a.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8a.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|173169Mi|\n |pods|758|\n### `m8a.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8a.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|231018Mi|\n |pods|1010|\n### `m8a.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8a.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|352259Mi|\n |pods|1010|\n### `m8a.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8a.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|352259Mi|\n |pods|1010|\n### `m8a.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8a.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|710440Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n### `m8a.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8a.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|710440Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n## m8g Family\n### `m8g.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|520|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8g.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|3286Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `m8g.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8g.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6844Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m8g.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8g.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m8g.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8g.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m8g.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8g.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m8g.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8g.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m8g.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8g.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178874Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m8g.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8g.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|233962Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m8g.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8g.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355203Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m8g.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8g.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355203Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m8g.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8g.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|718928Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m8g.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8g.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|718928Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## m8gd Family\n### `m8gd.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|59|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|520|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gd.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|3286Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `m8gd.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gd.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6844Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m8gd.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gd.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m8gd.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gd.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m8gd.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gd.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m8gd.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gd.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m8gd.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gd.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178874Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m8gd.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gd.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|233962Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m8gd.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|5700|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gd.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355203Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m8gd.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|5700|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gd.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355203Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m8gd.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|11400|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gd.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|718928Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m8gd.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|11400|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gd.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|718928Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## m8i Family\n### `m8i.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6573Mi|\n |pods|59|\n |vpc.amazonaws.com/pod-eni|9|\n### `m8i.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|13502Mi|\n |pods|118|\n |vpc.amazonaws.com/pod-eni|18|\n### `m8i.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|28657Mi|\n |pods|118|\n |vpc.amazonaws.com/pod-eni|38|\n### `m8i.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|55931Mi|\n |pods|394|\n |vpc.amazonaws.com/pod-eni|54|\n### `m8i.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|115474Mi|\n |pods|492|\n |vpc.amazonaws.com/pod-eni|82|\n### `m8i.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|175017Mi|\n |pods|590|\n |vpc.amazonaws.com/pod-eni|110|\n### `m8i.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|231018Mi|\n |pods|1010|\n |vpc.amazonaws.com/pod-eni|106|\n### `m8i.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|352259Mi|\n |pods|1010|\n |vpc.amazonaws.com/pod-eni|106|\n### `m8i.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|467957Mi|\n |pods|1514|\n |vpc.amazonaws.com/pod-eni|98|\n### `m8i.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|710440Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n### `m8i.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|710440Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n### `m8i.96xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|384|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|96xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i.96xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|382970m|\n |ephemeral-storage|17Gi|\n |memory|1437890Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n### `m8i.metal-96xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|384|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal-96xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i.metal-96xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|382970m|\n |ephemeral-storage|17Gi|\n |memory|1437890Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n## m8i-flex Family\n### `m8i-flex.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|468|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i-flex.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6573Mi|\n |pods|59|\n |vpc.amazonaws.com/pod-eni|3|\n### `m8i-flex.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i-flex.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|13502Mi|\n |pods|118|\n |vpc.amazonaws.com/pod-eni|8|\n### `m8i-flex.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i-flex.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|28657Mi|\n |pods|118|\n |vpc.amazonaws.com/pod-eni|18|\n### `m8i-flex.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i-flex.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|55931Mi|\n |pods|394|\n |vpc.amazonaws.com/pod-eni|34|\n### `m8i-flex.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i-flex.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|115474Mi|\n |pods|492|\n |vpc.amazonaws.com/pod-eni|52|\n### `m8i-flex.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|11250|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i-flex.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|175017Mi|\n |pods|590|\n |vpc.amazonaws.com/pod-eni|110|\n### `m8i-flex.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i-flex.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|231018Mi|\n |pods|1010|\n |vpc.amazonaws.com/pod-eni|106|\n## p3 Family\n### `p3.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|p|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|1750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|p3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|v100|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|62464|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|p3.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|56786Mi|\n |nvidia.com/gpu|1|\n |pods|58|\n### `p3.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|p|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|7000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|p3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-gpu-count|4|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|v100|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|249856|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|p3.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|228187Mi|\n |nvidia.com/gpu|4|\n |pods|234|\n### `p3.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|p|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|p3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-gpu-count|8|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|v100|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|499712|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|p3.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|459304Mi|\n |nvidia.com/gpu|8|\n |pods|234|\n## p3dn Family\n### `p3dn.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|p|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|p3dn|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-gpu-count|8|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|32768|\n |karpenter.k8s.aws/instance-gpu-name|v100|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1800|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|p3dn.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |nvidia.com/gpu|8|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## p4d Family\n### `p4d.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|p|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|p4d|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-gpu-count|8|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|40960|\n |karpenter.k8s.aws/instance-gpu-name|a100|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|8000|\n |karpenter.k8s.aws/instance-memory|1179648|\n |karpenter.k8s.aws/instance-network-bandwidth|400000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|p4d.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|1082712Mi|\n |nvidia.com/gpu|8|\n |pods|737|\n |vpc.amazonaws.com/efa|4|\n |vpc.amazonaws.com/pod-eni|62|\n## p4de Family\n### `p4de.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|p|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|p4de|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-gpu-count|8|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|81920|\n |karpenter.k8s.aws/instance-gpu-name|a100|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|8000|\n |karpenter.k8s.aws/instance-memory|1179648|\n |karpenter.k8s.aws/instance-network-bandwidth|400000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|p4de.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|1082712Mi|\n |nvidia.com/gpu|8|\n |pods|737|\n |vpc.amazonaws.com/efa|4|\n |vpc.amazonaws.com/pod-eni|62|\n## p5 Family\n### `p5.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|p|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|p5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|81920|\n |karpenter.k8s.aws/instance-gpu-name|h100|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|p5.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|240830Mi|\n |nvidia.com/gpu|1|\n |pods|118|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|58|\n### `p5.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|p|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|p5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|8|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|81920|\n |karpenter.k8s.aws/instance-gpu-name|h100|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|30400|\n |karpenter.k8s.aws/instance-memory|2097152|\n |karpenter.k8s.aws/instance-network-bandwidth|3200000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|p5.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1938410Mi|\n |nvidia.com/gpu|8|\n |pods|100|\n |vpc.amazonaws.com/efa|32|\n |vpc.amazonaws.com/pod-eni|120|\n## p5e Family\n### `p5e.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|p|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|p5e|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|8|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|144384|\n |karpenter.k8s.aws/instance-gpu-name|h200|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|30400|\n |karpenter.k8s.aws/instance-memory|2097152|\n |karpenter.k8s.aws/instance-network-bandwidth|3200000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|p5e.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1938410Mi|\n |nvidia.com/gpu|8|\n |pods|100|\n |vpc.amazonaws.com/efa|32|\n |vpc.amazonaws.com/pod-eni|120|\n## p5en Family\n### `p5en.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|p|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|p5en|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|8|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|144384|\n |karpenter.k8s.aws/instance-gpu-name|h200|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|30400|\n |karpenter.k8s.aws/instance-memory|2097152|\n |karpenter.k8s.aws/instance-network-bandwidth|3200000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|p5en.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1937332Mi|\n |nvidia.com/gpu|8|\n |pods|198|\n |vpc.amazonaws.com/efa|16|\n |vpc.amazonaws.com/pod-eni|120|\n## p6-b200 Family\n### `p6-b200.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|p|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|p6-b200|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|8|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|183359|\n |karpenter.k8s.aws/instance-gpu-name|b200|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|30400|\n |karpenter.k8s.aws/instance-memory|2097152|\n |karpenter.k8s.aws/instance-network-bandwidth|3200000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|p6-b200.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1937332Mi|\n |nvidia.com/gpu|8|\n |pods|198|\n |vpc.amazonaws.com/efa|8|\n |vpc.amazonaws.com/pod-eni|120|\n## r3 Family\n### `r3.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|15360|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r3.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|13534Mi|\n |pods|29|\n### `r3.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|31232|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r3.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|27896Mi|\n |pods|58|\n### `r3.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|62464|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r3.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|56786Mi|\n |pods|58|\n### `r3.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|124928|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r3.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|112629Mi|\n |pods|234|\n### `r3.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|249856|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r3.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|228187Mi|\n |pods|234|\n## r4 Family\n### `r4.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|425|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|15616|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r4.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|13770Mi|\n |pods|29|\n### `r4.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|850|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|31232|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r4.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|27896Mi|\n |pods|58|\n### `r4.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|1700|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|62464|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r4.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|56786Mi|\n |pods|58|\n### `r4.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|124928|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r4.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|112629Mi|\n |pods|234|\n### `r4.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|7000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|249856|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r4.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|228187Mi|\n |pods|234|\n### `r4.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|499712|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r4.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|453771Mi|\n |pods|737|\n## r5 Family\n### `r5.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r5.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r5.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r5.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|13600|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r5.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r5.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|120|\n## r5a Family\n### `r5a.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5a.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r5a.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5a.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r5a.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5a.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r5a.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5a.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5a.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5a.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5a.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6780|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5a.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5a.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5a.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r5a.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|13570|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5a.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## r5ad Family\n### `r5ad.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|75|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5ad.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r5ad.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|150|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5ad.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r5ad.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|300|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5ad.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r5ad.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|600|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5ad.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5ad.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1200|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5ad.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5ad.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6780|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1800|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5ad.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5ad.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2400|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5ad.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r5ad.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|13570|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3600|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5ad.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## r5b Family\n### `r5b.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5b|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5b.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r5b.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5b|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5b.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r5b.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5b|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5b.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r5b.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5b|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5b.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5b.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5b|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5b.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5b.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5b|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5b.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5b.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5b|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5b.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r5b.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5b|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5b.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r5b.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5b|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5b.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## r5d Family\n### `r5d.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|75|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5d.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r5d.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|150|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5d.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r5d.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|300|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5d.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r5d.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|600|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5d.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5d.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1200|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5d.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5d.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1800|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5d.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5d.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|13600|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2400|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5d.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r5d.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3600|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5d.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r5d.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3600|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5d.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## r5dn Family\n### `r5dn.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|75|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2100|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5dn.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r5dn.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|150|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|4100|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5dn.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r5dn.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|300|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|8125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5dn.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r5dn.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|600|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|16250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5dn.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5dn.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1200|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5dn.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5dn.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1800|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5dn.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5dn.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|13600|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2400|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5dn.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r5dn.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3600|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5dn.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r5dn.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3600|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5dn.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## r5n Family\n### `r5n.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2100|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5n.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r5n.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|4100|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5n.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r5n.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|8125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5n.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r5n.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|16250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5n.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5n.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5n.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5n.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5n.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5n.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|13600|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5n.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r5n.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5n.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r5n.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5n.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## r6a Family\n### `r6a.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6a.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r6a.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6a.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r6a.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6a.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r6a.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6a.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r6a.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6a.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `r6a.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6a.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `r6a.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6a.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6a.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6a.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6a.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6a.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|961470Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6a.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6a.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446437Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6a.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6a.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446437Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## r6g Family\n### `r6g.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|500|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6g.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|7075Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `r6g.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6g.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14422Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r6g.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6g.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r6g.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6g.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59568Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r6g.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6g.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r6g.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6g.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239495Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r6g.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14250|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6g.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360736Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r6g.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6g.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476445Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6g.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6g.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476445Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## r6gd Family\n### `r6gd.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|59|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|500|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6gd.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|7075Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `r6gd.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6gd.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14422Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r6gd.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6gd.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r6gd.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6gd.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59568Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r6gd.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6gd.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r6gd.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6gd.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239495Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r6gd.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14250|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6gd.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360736Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r6gd.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6gd.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476445Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6gd.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6gd.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476445Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## r6i Family\n### `r6i.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6i.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r6i.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6i.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r6i.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6i.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r6i.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6i.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r6i.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6i.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `r6i.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6i.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `r6i.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6i.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6i.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6i.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6i.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6i.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|961470Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6i.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6i.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|961470Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## r6id Family\n### `r6id.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6id.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r6id.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6id.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r6id.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6id.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r6id.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6id.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r6id.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6id.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `r6id.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6id.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `r6id.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6id.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6id.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|5700|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6id.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6id.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6id.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|961470Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6id.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6id.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|961470Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## r6idn Family\n### `r6idn.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6idn.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r6idn.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6idn.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r6idn.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6idn.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r6idn.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6idn.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r6idn.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6idn.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `r6idn.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|37500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6idn.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `r6idn.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|50000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6idn.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6idn.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|75000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|5700|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|150000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6idn.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6idn.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6idn.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|965243Mi|\n |pods|394|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|106|\n### `r6idn.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6idn.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|965243Mi|\n |pods|394|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|106|\n## r6in Family\n### `r6in.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6in.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r6in.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6in.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r6in.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6in.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r6in.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6in.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r6in.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6in.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `r6in.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|37500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6in.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `r6in.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|50000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6in.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6in.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|75000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|150000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6in.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6in.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6in.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|965243Mi|\n |pods|394|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|106|\n### `r6in.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6in.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|965243Mi|\n |pods|394|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|106|\n## r7a Family\n### `r7a.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|390|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7a.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|7134Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `r7a.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7a.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r7a.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7a.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r7a.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7a.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r7a.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7a.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r7a.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7a.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `r7a.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7a.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `r7a.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7a.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r7a.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7a.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r7a.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7a.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|961470Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r7a.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7a.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446437Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r7a.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7a.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446437Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## r7g Family\n### `r7g.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|520|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7g.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|7075Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `r7g.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7g.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14422Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r7g.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1876|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7g.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r7g.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7g.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59568Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r7g.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7g.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r7g.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7g.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239495Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r7g.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7g.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360736Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r7g.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7g.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476445Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r7g.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7g.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476445Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## r7gd Family\n### `r7gd.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|59|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|520|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7gd.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|7075Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `r7gd.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7gd.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14422Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r7gd.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1876|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7gd.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r7gd.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7gd.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59568Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r7gd.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7gd.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r7gd.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7gd.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239495Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r7gd.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7gd.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360736Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r7gd.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7gd.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476445Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r7gd.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7gd.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476445Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## r7i Family\n### `r7i.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7i.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r7i.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7i.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r7i.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7i.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r7i.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7i.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r7i.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7i.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `r7i.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7i.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `r7i.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7i.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r7i.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7i.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r7i.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7i.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r7i.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7i.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446437Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r7i.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7i.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446437Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## r7iz Family\n### `r7iz.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7iz|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7iz.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r7iz.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7iz|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7iz.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r7iz.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7iz|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7iz.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r7iz.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7iz|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7iz.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r7iz.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7iz|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7iz.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `r7iz.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7iz|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7iz.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `r7iz.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7iz|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7iz.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r7iz.metal-16xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7iz|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal-16xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7iz.metal-16xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r7iz.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7iz|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7iz.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|961470Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r7iz.metal-32xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7iz|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal-32xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7iz.metal-32xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|961470Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## r8g Family\n### `r8g.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|520|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8g.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|7075Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `r8g.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8g.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14422Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r8g.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8g.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r8g.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8g.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59568Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r8g.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8g.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r8g.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8g.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239495Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r8g.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8g.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360736Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r8g.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8g.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476445Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r8g.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8g.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718928Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r8g.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8g.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718928Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r8g.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8g.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446378Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r8g.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8g.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446378Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## r8gb Family\n### `r8gb.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gb.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|7075Mi|\n |pods|8|\n### `r8gb.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gb.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14422Mi|\n |pods|29|\n### `r8gb.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gb.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n### `r8gb.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gb.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59568Mi|\n |pods|58|\n### `r8gb.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gb.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n### `r8gb.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|50000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gb.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|238857Mi|\n |pods|292|\n### `r8gb.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|75000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gb.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|359460Mi|\n |pods|350|\n### `r8gb.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gb.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|475906Mi|\n |pods|786|\n |vpc.amazonaws.com/efa|1|\n### `r8gb.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|150000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gb.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|714077Mi|\n |pods|1178|\n |vpc.amazonaws.com/efa|1|\n### `r8gb.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|150000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gb.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|714077Mi|\n |pods|1178|\n |vpc.amazonaws.com/efa|1|\n## r8gd Family\n### `r8gd.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|59|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|520|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gd.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|7075Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `r8gd.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gd.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14422Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r8gd.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gd.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r8gd.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gd.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59568Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r8gd.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gd.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r8gd.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gd.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239495Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r8gd.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gd.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360736Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r8gd.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gd.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476445Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r8gd.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|5700|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gd.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718928Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r8gd.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|5700|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gd.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718928Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r8gd.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|11400|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gd.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446378Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r8gd.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|11400|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gd.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446378Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## r8gn Family\n### `r8gn.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gn.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|7075Mi|\n |pods|8|\n### `r8gn.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gn.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14422Mi|\n |pods|29|\n### `r8gn.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gn.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n### `r8gn.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gn.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59568Mi|\n |pods|58|\n### `r8gn.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gn.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n### `r8gn.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gn.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|238857Mi|\n |pods|292|\n### `r8gn.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gn.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|359460Mi|\n |pods|350|\n### `r8gn.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gn.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|475906Mi|\n |pods|786|\n |vpc.amazonaws.com/efa|1|\n### `r8gn.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gn.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|714077Mi|\n |pods|1178|\n |vpc.amazonaws.com/efa|1|\n### `r8gn.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gn.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|714077Mi|\n |pods|1178|\n |vpc.amazonaws.com/efa|1|\n### `r8gn.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gn.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1447995Mi|\n |pods|590|\n |vpc.amazonaws.com/efa|2|\n### `r8gn.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gn.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1447995Mi|\n |pods|590|\n |vpc.amazonaws.com/efa|2|\n## r8i Family\n### `r8i.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14151Mi|\n |pods|59|\n |vpc.amazonaws.com/pod-eni|9|\n### `r8i.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|28657Mi|\n |pods|118|\n |vpc.amazonaws.com/pod-eni|18|\n### `r8i.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|58967Mi|\n |pods|118|\n |vpc.amazonaws.com/pod-eni|38|\n### `r8i.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|116552Mi|\n |pods|394|\n |vpc.amazonaws.com/pod-eni|54|\n### `r8i.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|236716Mi|\n |pods|492|\n |vpc.amazonaws.com/pod-eni|82|\n### `r8i.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|356879Mi|\n |pods|590|\n |vpc.amazonaws.com/pod-eni|110|\n### `r8i.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|473501Mi|\n |pods|1010|\n |vpc.amazonaws.com/pod-eni|106|\n### `r8i.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|715984Mi|\n |pods|1010|\n |vpc.amazonaws.com/pod-eni|106|\n### `r8i.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|952923Mi|\n |pods|1514|\n |vpc.amazonaws.com/pod-eni|98|\n### `r8i.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1437890Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n### `r8i.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1437890Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n### `r8i.96xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|384|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|3145728|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|96xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i.96xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|382970m|\n |ephemeral-storage|17Gi|\n |memory|2892789Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n### `r8i.metal-96xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|384|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|3145728|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal-96xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i.metal-96xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|382970m|\n |ephemeral-storage|17Gi|\n |memory|2892789Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n## r8i-flex Family\n### `r8i-flex.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|468|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i-flex.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14151Mi|\n |pods|59|\n |vpc.amazonaws.com/pod-eni|3|\n### `r8i-flex.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i-flex.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|28657Mi|\n |pods|118|\n |vpc.amazonaws.com/pod-eni|8|\n### `r8i-flex.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i-flex.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|58967Mi|\n |pods|118|\n |vpc.amazonaws.com/pod-eni|18|\n### `r8i-flex.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i-flex.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|116552Mi|\n |pods|394|\n |vpc.amazonaws.com/pod-eni|34|\n### `r8i-flex.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i-flex.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|236716Mi|\n |pods|492|\n |vpc.amazonaws.com/pod-eni|52|\n### `r8i-flex.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|11250|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i-flex.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|356879Mi|\n |pods|590|\n |vpc.amazonaws.com/pod-eni|110|\n### `r8i-flex.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i-flex.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|473501Mi|\n |pods|1010|\n |vpc.amazonaws.com/pod-eni|106|\n## t1 Family\n### `t1.micro`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|0|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|627|\n |karpenter.k8s.aws/instance-size|micro|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t1.micro|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|180Mi|\n |pods|4|\n## t2 Family\n### `t2.nano`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|512|\n |karpenter.k8s.aws/instance-size|nano|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t2.nano|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|74Mi|\n |pods|4|\n### `t2.micro`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|1024|\n |karpenter.k8s.aws/instance-size|micro|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t2.micro|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|548Mi|\n |pods|4|\n### `t2.small`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-size|small|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t2.small|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|1418Mi|\n |pods|11|\n### `t2.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t2.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3246Mi|\n |pods|17|\n### `t2.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t2.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6837Mi|\n |pods|35|\n### `t2.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t2.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14316Mi|\n |pods|44|\n### `t2.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t2.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29471Mi|\n |pods|44|\n## t3 Family\n### `t3.nano`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|512|\n |karpenter.k8s.aws/instance-network-bandwidth|32|\n |karpenter.k8s.aws/instance-size|nano|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3.nano|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|74Mi|\n |pods|4|\n### `t3.micro`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1024|\n |karpenter.k8s.aws/instance-network-bandwidth|64|\n |karpenter.k8s.aws/instance-size|micro|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3.micro|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|548Mi|\n |pods|4|\n### `t3.small`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|128|\n |karpenter.k8s.aws/instance-size|small|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3.small|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|1418Mi|\n |pods|11|\n### `t3.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|256|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3246Mi|\n |pods|17|\n### `t3.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2780|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|512|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6837Mi|\n |pods|35|\n### `t3.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2780|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1024|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n### `t3.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2780|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|2048|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n## t3a Family\n### `t3a.nano`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3a|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|512|\n |karpenter.k8s.aws/instance-network-bandwidth|32|\n |karpenter.k8s.aws/instance-size|nano|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3a.nano|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|74Mi|\n |pods|4|\n### `t3a.micro`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3a|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1024|\n |karpenter.k8s.aws/instance-network-bandwidth|64|\n |karpenter.k8s.aws/instance-size|micro|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3a.micro|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|548Mi|\n |pods|4|\n### `t3a.small`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3a|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|128|\n |karpenter.k8s.aws/instance-size|small|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3a.small|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|1451Mi|\n |pods|8|\n### `t3a.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3a|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|256|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3a.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3246Mi|\n |pods|17|\n### `t3a.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2780|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3a|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|512|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3a.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6837Mi|\n |pods|35|\n### `t3a.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2780|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3a|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1024|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3a.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n### `t3a.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2780|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3a|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|2048|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3a.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n## t4g Family\n### `t4g.nano`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t4g|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|512|\n |karpenter.k8s.aws/instance-network-bandwidth|32|\n |karpenter.k8s.aws/instance-size|nano|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t4g.nano|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|15Mi|\n |pods|4|\n### `t4g.micro`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t4g|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1024|\n |karpenter.k8s.aws/instance-network-bandwidth|64|\n |karpenter.k8s.aws/instance-size|micro|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t4g.micro|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|489Mi|\n |pods|4|\n### `t4g.small`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t4g|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|128|\n |karpenter.k8s.aws/instance-size|small|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t4g.small|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|1359Mi|\n |pods|11|\n### `t4g.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t4g|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|256|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t4g.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3187Mi|\n |pods|17|\n### `t4g.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2780|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t4g|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|512|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t4g.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6778Mi|\n |pods|35|\n### `t4g.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2780|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t4g|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1024|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t4g.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n### `t4g.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2780|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t4g|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|2048|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t4g.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n## trn1 Family\n### `trn1.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-accelerator-count|1|\n |karpenter.k8s.aws/instance-accelerator-manufacturer|aws|\n |karpenter.k8s.aws/instance-accelerator-name|trainium|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|trn|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|trn1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|trn1.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |aws.amazon.com/neuron|1|\n |aws.amazon.com/neuroncore|2|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|17|\n### `trn1.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-accelerator-count|16|\n |karpenter.k8s.aws/instance-accelerator-manufacturer|aws|\n |karpenter.k8s.aws/instance-accelerator-name|trainium|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|trn|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|trn1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|800000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|trn1.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |aws.amazon.com/neuron|16|\n |aws.amazon.com/neuroncore|32|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|481894Mi|\n |pods|247|\n |vpc.amazonaws.com/efa|8|\n |vpc.amazonaws.com/pod-eni|82|\n## trn1n Family\n### `trn1n.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-accelerator-count|16|\n |karpenter.k8s.aws/instance-accelerator-manufacturer|aws|\n |karpenter.k8s.aws/instance-accelerator-name|trainium|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|trn|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|trn1n|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|1600000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|trn1n.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |aws.amazon.com/neuron|16|\n |aws.amazon.com/neuroncore|32|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|481894Mi|\n |pods|247|\n |vpc.amazonaws.com/efa|16|\n |vpc.amazonaws.com/pod-eni|120|\n## trn2 Family\n### `trn2.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-accelerator-count|16|\n |karpenter.k8s.aws/instance-accelerator-manufacturer|aws|\n |karpenter.k8s.aws/instance-accelerator-name|trainium2|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|trn|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|trn2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|2097152|\n |karpenter.k8s.aws/instance-network-bandwidth|3200000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|trn2.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |aws.amazon.com/neuron|16|\n |aws.amazon.com/neuroncore|128|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1938410Mi|\n |pods|100|\n |vpc.amazonaws.com/efa|16|\n## u-3tb1 Family\n### `u-3tb1.56xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|u|\n |karpenter.k8s.aws/instance-cpu|224|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|u-3tb1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|3145728|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|56xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|u-3tb1.56xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|223370m|\n |ephemeral-storage|17Gi|\n |memory|2906869Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|6|\n## u-6tb1 Family\n### `u-6tb1.56xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|u|\n |karpenter.k8s.aws/instance-cpu|224|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|38000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|u-6tb1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|6291456|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|56xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|u-6tb1.56xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|223370m|\n |ephemeral-storage|17Gi|\n |memory|5811134Mi|\n |pods|737|\n### `u-6tb1.112xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|u|\n |karpenter.k8s.aws/instance-cpu|448|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|38000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|u-6tb1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|6291456|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|112xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|u-6tb1.112xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|446810m|\n |ephemeral-storage|17Gi|\n |memory|5811134Mi|\n |pods|737|\n## u7i-12tb Family\n### `u7i-12tb.224xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|u|\n |karpenter.k8s.aws/instance-cpu|896|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|1900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|u7i-12tb|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|12582912|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|224xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|u7i-12tb.224xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|893690m|\n |ephemeral-storage|17Gi|\n |memory|11630731Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## u7i-6tb Family\n### `u7i-6tb.112xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|u|\n |karpenter.k8s.aws/instance-cpu|448|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|1900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|u7i-6tb|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|6291456|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|112xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|u7i-6tb.112xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|446810m|\n |ephemeral-storage|17Gi|\n |memory|5811134Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## u7i-8tb Family\n### `u7i-8tb.112xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|u|\n |karpenter.k8s.aws/instance-cpu|448|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|1900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|u7i-8tb|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8388608|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|112xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|u7i-8tb.112xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|446810m|\n |ephemeral-storage|17Gi|\n |memory|7751000Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## u7in-16tb Family\n### `u7in-16tb.224xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|u|\n |karpenter.k8s.aws/instance-cpu|896|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|1900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|u7in-16tb|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16777216|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|224xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|u7in-16tb.224xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|893690m|\n |ephemeral-storage|17Gi|\n |memory|15514235Mi|\n |pods|394|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|106|\n## u7in-24tb Family\n### `u7in-24tb.224xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|u|\n |karpenter.k8s.aws/instance-cpu|896|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|1900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|u7in-24tb|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|25165824|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|224xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|u7in-24tb.224xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|893690m|\n |ephemeral-storage|17Gi|\n |memory|23273698Mi|\n |pods|394|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|106|\n## u7in-32tb Family\n### `u7in-32tb.224xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|u|\n |karpenter.k8s.aws/instance-cpu|896|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|1900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|u7in-32tb|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|33554432|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|224xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|u7in-32tb.224xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|893690m|\n |ephemeral-storage|17Gi|\n |memory|31033160Mi|\n |pods|394|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|106|\n## vt1 Family\n### `vt1.3xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|vt|\n |karpenter.k8s.aws/instance-cpu|12|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|vt1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|24576|\n |karpenter.k8s.aws/instance-network-bandwidth|3120|\n |karpenter.k8s.aws/instance-size|3xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|vt1.3xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|11900m|\n |ephemeral-storage|17Gi|\n |memory|21739Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `vt1.6xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|vt|\n |karpenter.k8s.aws/instance-cpu|24|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|vt1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|49152|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|6xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|vt1.6xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|23870m|\n |ephemeral-storage|17Gi|\n |memory|42536Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `vt1.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|vt|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|vt1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|vt1.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## x1 Family\n### `x1.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|7000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|999424|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x1.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|921538Mi|\n |pods|234|\n### `x1.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|1998848|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x1.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|1846005Mi|\n |pods|234|\n## x1e Family\n### `x1e.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x1e|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|124928|\n |karpenter.k8s.aws/instance-network-bandwidth|625|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x1e.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|114884Mi|\n |pods|29|\n### `x1e.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|1000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x1e|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|249856|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x1e.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|230123Mi|\n |pods|58|\n### `x1e.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|1750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x1e|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|499712|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x1e.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|461240Mi|\n |pods|58|\n### `x1e.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x1e|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|999424|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x1e.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|923474Mi|\n |pods|58|\n### `x1e.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|7000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x1e|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|1998848|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x1e.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|1846005Mi|\n |pods|234|\n### `x1e.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x1e|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|3997696|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x1e.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|3694939Mi|\n |pods|234|\n## x2gd Family\n### `x2gd.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x2gd|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|59|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|500|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2gd.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|14653Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|10|\n### `x2gd.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x2gd|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2gd.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|29577Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `x2gd.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x2gd|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2gd.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|59568Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `x2gd.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x2gd|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|475|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2gd.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|120189Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `x2gd.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x2gd|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2gd.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|239495Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `x2gd.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x2gd|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2gd.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|481978Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `x2gd.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14250|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x2gd|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2gd.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|724461Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `x2gd.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x2gd|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2gd.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|961411Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `x2gd.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x2gd|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2gd.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|961411Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## x2idn Family\n### `x2idn.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2idn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2idn.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|961470Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `x2idn.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2idn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2idn.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|1446437Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `x2idn.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2idn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|2097152|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2idn.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|1931403Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `x2idn.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2idn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|2097152|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2idn.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|1931403Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## x2iedn Family\n### `x2iedn.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iedn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iedn.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|120248Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|11|\n### `x2iedn.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iedn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iedn.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|241490Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|27|\n### `x2iedn.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iedn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|475|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iedn.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|482037Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `x2iedn.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iedn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iedn.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|967003Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `x2iedn.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iedn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|2097152|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iedn.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|1931403Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `x2iedn.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iedn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|3145728|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iedn.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|2901336Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `x2iedn.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iedn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|4194304|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iedn.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|3871269Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `x2iedn.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iedn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|4194304|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iedn.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|3871269Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## x2iezn Family\n### `x2iezn.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iezn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iezn.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|241490Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|62|\n### `x2iezn.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iezn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iezn.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|482037Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `x2iezn.6xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|24|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iezn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|6xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iezn.6xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|23870m|\n |ephemeral-storage|17Gi|\n |memory|724520Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `x2iezn.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|12000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iezn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iezn.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|967003Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `x2iezn.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iezn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iezn.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|1446437Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `x2iezn.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iezn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iezn.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|1446437Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## x8g Family\n### `x8g.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|520|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8g.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|14653Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `x8g.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8g.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|29577Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `x8g.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8g.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|59568Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `x8g.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8g.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|120189Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `x8g.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8g.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|239495Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `x8g.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8g.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|481978Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `x8g.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8g.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|724461Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `x8g.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8g.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|961411Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `x8g.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8g.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|1446378Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `x8g.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8g.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|1446378Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `x8g.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|3145728|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8g.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|2901277Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `x8g.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|3145728|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8g.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|2901277Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## z1d Family\n### `z1d.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|z|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|z1d|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|75|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|z1d.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|13|\n### `z1d.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|z|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|z1d|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|150|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|z1d.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|28|\n### `z1d.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|z|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|z1d|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|300|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|z1d.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|58|\n### `z1d.3xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|z|\n |karpenter.k8s.aws/instance-cpu|12|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|z1d|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|450|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|3xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|z1d.3xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|11900m|\n |ephemeral-storage|17Gi|\n |memory|88002Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `z1d.6xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|z|\n |karpenter.k8s.aws/instance-cpu|24|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|z1d|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|900|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|6xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|z1d.6xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|23870m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `z1d.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|z|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|z1d|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1800|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|z1d.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `z1d.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|z|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|z1d|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|1800|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|z1d.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n"
  },
  {
    "path": "website/content/en/v1.8/reference/metrics.md",
    "content": "---\ntitle: \"Metrics\"\nlinkTitle: \"Metrics\"\nweight: 7\n\ndescription: >\n  Inspect Karpenter Metrics\n---\n<!-- this document is generated from hack/docs/metrics_gen_docs.go -->\nKarpenter makes several metrics available in Prometheus format to allow monitoring cluster provisioning status. These metrics are available by default at `karpenter.kube-system.svc.cluster.local:8080/metrics` configurable via the `METRICS_PORT` environment variable documented [here](../settings)\n\n### `karpenter_ignored_pod_count`\nNumber of pods ignored during scheduling by Karpenter\n- Stability Level: ALPHA\n\n### `karpenter_build_info`\nA metric with a constant '1' value labeled by version from which karpenter was built.\n- Stability Level: STABLE\n\n## Nodeclaims Metrics\n\n### `karpenter_nodeclaims_termination_duration_seconds`\nDuration of NodeClaim termination in seconds.\n- Stability Level: BETA\n\n### `karpenter_nodeclaims_terminated_total`\nNumber of nodeclaims terminated in total by Karpenter. Labeled by the owning nodepool.\n- Stability Level: STABLE\n\n### `karpenter_nodeclaims_instance_termination_duration_seconds`\nDuration of CloudProvider Instance termination in seconds.\n- Stability Level: BETA\n\n### `karpenter_nodeclaims_disrupted_total`\nNumber of nodeclaims disrupted in total by Karpenter. Labeled by reason the nodeclaim was disrupted and the owning nodepool.\n- Stability Level: ALPHA\n\n### `karpenter_nodeclaims_created_total`\nNumber of nodeclaims created in total by Karpenter. Labeled by reason the nodeclaim was created and the owning nodepool.\n- Stability Level: STABLE\n\n### `operator_nodeclaim_status_condition_transitions_total`\nThe count of transitions of a nodeclaim, type and status. Labeled by the type, reason, and status.\n- Stability Level: BETA\n\n### `operator_nodeclaim_status_condition_transition_seconds`\nThe amount of time a condition was in a given state before transitioning. Labeled by the name of the nodeclaim, and the namespace.\n- Stability Level: BETA\n\n### `operator_nodeclaim_status_condition_current_status_seconds`\nThe current amount of time in seconds that a status condition has been in a specific state. Labeled by the name of the nodelcaim, namespace, type, status, and reason.\n- Stability Level: BETA\n\n### `operator_nodeclaim_status_condition_count`\nThe number of a condition for a nodeclaim, type and status. Labeled by the name, namespace, type, status, and reason.\n- Stability Level: BETA\n\n### `operator_nodeclaim_termination_current_time_seconds`\nThe current amount of time in seconds that a nodeclaim has been in terminating state. Labeled by name, and namespace.\n- Stability Level: BETA\n\n### `operator_nodeclaim_termination_duration_seconds`\nThe amount of time taken by a nodeclaim to terminate completely.\n- Stability Level: BETA\n\n## Nodes Metrics\n\n### `karpenter_nodes_total_pod_requests`\nNode total pod requests are the resources requested by pods bound to nodes, including the DaemonSet pods.\n- Stability Level: BETA\n\n### `karpenter_nodes_total_pod_limits`\nNode total pod limits are the resources specified by pod limits, including the DaemonSet pods.\n- Stability Level: BETA\n\n### `karpenter_nodes_total_daemon_requests`\nNode total daemon requests are the resource requested by DaemonSet pods bound to nodes.\n- Stability Level: BETA\n\n### `karpenter_nodes_total_daemon_limits`\nNode total daemon limits are the resources specified by DaemonSet pod limits.\n- Stability Level: BETA\n\n### `karpenter_nodes_termination_duration_seconds`\nThe time taken between a node's deletion request and the removal of its finalizer\n- Stability Level: BETA\n\n### `karpenter_nodes_terminated_total`\nNumber of nodes terminated in total by Karpenter. Labeled by owning nodepool.\n- Stability Level: STABLE\n\n### `karpenter_nodes_system_overhead`\nNode 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.\n- Stability Level: BETA\n\n### `karpenter_nodes_lifetime_duration_seconds`\nThe lifetime duration of the nodes since creation.\n- Stability Level: ALPHA\n\n### `karpenter_nodes_eviction_requests_total`\nThe total number of eviction requests made by Karpenter\n- Stability Level: ALPHA\n\n### `karpenter_nodes_drained_total`\nThe total number of nodes drained by Karpenter\n- Stability Level: ALPHA\n\n### `karpenter_nodes_current_lifetime_seconds`\nNode age in seconds\n- Stability Level: ALPHA\n\n### `karpenter_nodes_created_total`\nNumber of nodes created in total by Karpenter. Labeled by owning nodepool.\n- Stability Level: STABLE\n\n### `karpenter_nodes_allocatable`\nNode allocatable are the resources allocatable by nodes.\n- Stability Level: BETA\n\n### `operator_node_status_condition_transitions_total`\nThe count of transitions of a node, type and status.\n- Stability Level: BETA\n\n### `operator_node_status_condition_transition_seconds`\nThe amount of time a condition was in a given state before transitioning. Labeled by the name of the nodeclaim, and the namespace.\n- Stability Level: BETA\n\n### `operator_node_status_condition_current_status_seconds`\nThe current amount of time in seconds that a status condition has been in a specific state. Labeled by the name of the nodelcaim, namespace, type, status, and reason.\n- Stability Level: BETA\n\n### `operator_node_status_condition_count`\nThe number of a condition for a node, type and status. Labeled by the name, namespace, type, status, and reason.\n- Stability Level: BETA\n\n### `operator_node_termination_current_time_seconds`\nThe current amount of time in seconds that a node has been in terminating state. Labeled by name, and namespace.\n- Stability Level: BETA\n\n### `operator_node_termination_duration_seconds`\nThe amount of time taken by a node to terminate completely.\n- Stability Level: BETA\n\n### `operator_node_event_count`\nThe number of a events for a node.\n- Stability Level: BETA\n\n## Pods Metrics\n\n### `karpenter_pods_state`\nPod 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, nodepool name, zone, architecture, capacity type, instance type and pod phase.\n- Stability Level: BETA\n\n### `karpenter_pods_startup_duration_seconds`\nThe time from pod creation until the pod is running.\n- Stability Level: STABLE\n\n## Termination Metrics\n\n### `operator_termination_duration_seconds`\nThe amount of time taken by an object to terminate completely.\n- Stability Level: DEPRECATED\n\n### `operator_termination_current_time_seconds`\nThe current amount of time in seconds that an object has been in terminating state.\n- Stability Level: DEPRECATED\n\n## Voluntary Disruption Metrics\n\n### `karpenter_voluntary_disruption_queue_failures_total`\nThe number of times that an enqueued disruption decision failed. Labeled by disruption method.\n- Stability Level: BETA\n\n### `karpenter_voluntary_disruption_eligible_nodes`\nNumber of nodes eligible for disruption by Karpenter. Labeled by disruption reason.\n- Stability Level: BETA\n\n### `karpenter_voluntary_disruption_decisions_total`\nNumber of disruption decisions performed. Labeled by disruption decision, reason, and consolidation type.\n- Stability Level: STABLE\n\n### `karpenter_voluntary_disruption_decision_evaluation_duration_seconds`\nDuration of the disruption decision evaluation process in seconds. Labeled by method and consolidation type.\n- Stability Level: BETA\n\n### `karpenter_voluntary_disruption_consolidation_timeouts_total`\nNumber of times the Consolidation algorithm has reached a timeout. Labeled by consolidation type.\n- Stability Level: BETA\n\n## Scheduler Metrics\n\n### `karpenter_scheduler_scheduling_duration_seconds`\nDuration of scheduling simulations used for deprovisioning and provisioning in seconds.\n- Stability Level: STABLE\n\n### `karpenter_scheduler_queue_depth`\nThe number of pods currently waiting to be scheduled.\n- Stability Level: BETA\n\n## Nodepools Metrics\n\n### `karpenter_nodepools_usage`\nThe amount of resources that have been provisioned for a nodepool. Labeled by nodepool name and resource type.\n- Stability Level: ALPHA\n\n### `karpenter_nodepools_limit`\nLimits specified on the nodepool that restrict the quantity of resources provisioned. Labeled by nodepool name and resource type.\n- Stability Level: ALPHA\n\n### `karpenter_nodepools_allowed_disruptions`\nThe number of nodes for a given NodePool that can be concurrently disrupting at a point in time. Labeled by NodePool. Note that allowed disruptions can change very rapidly, as new nodes may be created and others may be deleted at any point.\n- Stability Level: ALPHA\n\n### `operator_nodepool_status_condition_transitions_total`\nThe count of transitions of a nodepool, type and status. Labeled by the type, reason, and status.\n- Stability Level: BETA\n\n### `operator_nodepool_status_condition_transition_seconds`\nThe amount of time a condition was in a given state before transitioning. Labeled by the name of the nodeclaim, and the namespace.\n- Stability Level: BETA\n\n### `operator_nodepool_status_condition_current_status_seconds`\nThe current amount of time in seconds that a status condition has been in a specific state. Labeled by the name of the nodelcaim, namespace, type, status, and reason.\n- Stability Level: BETA\n\n### `operator_nodepool_status_condition_count`\nThe number of an condition for a nodepool, type and status. Labeled by the name, namespace, type, status, and reason.\n- Stability Level: BETA\n\n### `operator_nodepool_termination_current_time_seconds`\nThe current amount of time in seconds that a nodepool has been in terminating state. Labeled by name, and namespace.\n- Stability Level: BETA\n\n### `operator_nodepool_termination_duration_seconds`\nDuration of NodePool termination in seconds.\n- Stability Level: BETA\n\n## EC2NodeClass Metrics\n\n### `operator_ec2nodeclass_status_condition_transitions_total`\nThe count of transitions of a ec2nodeclass, type and status. Labeled by the type, reason, and status.\n- Stability Level: BETA\n\n### `operator_ec2nodeclass_status_condition_transition_seconds`\nThe amount of time a condition was in a given state before transitioning. Labeled by the name of the nodeclaim, and the namespace.\n- Stability Level: BETA\n\n### `operator_ec2nodeclass_status_condition_current_status_seconds`\nThe current amount of time in seconds that a status condition has been in a specific state. Labeled by the name of the nodelcaim, namespace, type, status, and reason.\n- Stability Level: BETA\n\n### `operator_ec2nodeclass_status_condition_count`\nThe number of an condition for an ec2nodeclass, type and status. Labeled by the name, namespace, type, status, and reason.\n- Stability Level: BETA\n\n### `operator_ec2nodeclass_termination_current_time_seconds`\nThe current amount of time in seconds that an ec2nodeclass has been in terminating state. Labeled by name, and namespace.\n- Stability Level: BETA\n\n### `operator_ec2nodeclass_termination_duration_seconds`\nDuration of ec2nodeclass termination in seconds.\n- Stability Level: BETA\n\n## Interruption Metrics\n\n### `karpenter_interruption_received_messages_total`\nCount of messages received from the SQS queue. Broken down by message type and whether the message was actionable.\n- Stability Level: STABLE\n\n### `karpenter_interruption_message_queue_duration_seconds`\nAmount of time an interruption message is on the queue before it is processed by karpenter.\n- Stability Level: STABLE\n\n### `karpenter_interruption_deleted_messages_total`\nCount of messages deleted from the SQS queue.\n- Stability Level: STABLE\n\n## Cluster Metrics\n\n### `karpenter_cluster_utilization_percent`\nUtilization of allocatable resources by pod requests\n- Stability Level: ALPHA\n\n## Cluster State Metrics\n\n### `karpenter_cluster_state_unsynced_time_seconds`\nThe time for which cluster state is not synced\n- Stability Level: ALPHA\n\n### `karpenter_cluster_state_synced`\nReturns 1 if cluster state is synced and 0 otherwise. Synced checks that nodeclaims and nodes that are stored in the APIServer have the same representation as Karpenter's cluster state\n- Stability Level: STABLE\n\n### `karpenter_cluster_state_node_count`\nCurrent count of nodes in cluster state\n- Stability Level: STABLE\n\n## Cloudprovider Metrics\n\n### `karpenter_cloudprovider_instance_type_offering_price_estimate`\nInstance type offering estimated hourly price used when making informed decisions on node cost calculation, based on instance type, capacity type, and zone.\n- Stability Level: BETA\n\n### `karpenter_cloudprovider_instance_type_offering_available`\nInstance type offering availability, based on instance type, capacity type, and zone\n- Stability Level: BETA\n\n### `karpenter_cloudprovider_instance_type_memory_bytes`\nMemory, in bytes, for a given instance type.\n- Stability Level: BETA\n\n### `karpenter_cloudprovider_instance_type_cpu_cores`\nVCPUs cores for a given instance type.\n- Stability Level: BETA\n\n### `karpenter_cloudprovider_errors_total`\nTotal number of errors returned from CloudProvider calls.\n- Stability Level: BETA\n\n### `karpenter_cloudprovider_duration_seconds`\nDuration of cloud provider method calls. Labeled by the controller, method name and provider.\n- Stability Level: BETA\n\n## Cloudprovider Batcher Metrics\n\n### `karpenter_cloudprovider_batcher_batch_time_seconds`\nDuration of the batching window per batcher\n- Stability Level: BETA\n\n### `karpenter_cloudprovider_batcher_batch_size`\nSize of the request batch per batcher\n- Stability Level: BETA\n\n## Controller Runtime Metrics\n\n### `controller_runtime_terminal_reconcile_errors_total`\nTotal number of terminal reconciliation errors per controller\n- Stability Level: STABLE\n\n### `controller_runtime_reconcile_total`\nTotal number of reconciliations per controller\n- Stability Level: STABLE\n\n### `controller_runtime_reconcile_time_seconds`\nLength of time per reconciliation per controller\n- Stability Level: STABLE\n\n### `controller_runtime_reconcile_panics_total`\nTotal number of reconciliation panics per controller\n- Stability Level: STABLE\n\n### `controller_runtime_reconcile_errors_total`\nTotal number of reconciliation errors per controller\n- Stability Level: STABLE\n\n### `controller_runtime_max_concurrent_reconciles`\nMaximum number of concurrent reconciles per controller\n- Stability Level: STABLE\n\n### `controller_runtime_conversion_webhook_panics_total`\nTotal number of conversion webhook panics\n- Stability Level: STABLE\n\n### `controller_runtime_active_workers`\nNumber of currently used workers per controller\n- Stability Level: STABLE\n\n## Workqueue Metrics\n\n### `workqueue_work_duration_seconds`\nHow long in seconds processing an item from workqueue takes.\n- Stability Level: STABLE\n\n### `workqueue_unfinished_work_seconds`\nHow many seconds of work has been done that is in progress and hasn't been observed by work_duration. Large values indicate stuck threads. One can deduce the number of stuck threads by observing the rate at which this increases.\n- Stability Level: STABLE\n\n### `workqueue_retries_total`\nTotal number of retries handled by workqueue\n- Stability Level: STABLE\n\n### `workqueue_queue_duration_seconds`\nHow long in seconds an item stays in workqueue before being requested\n- Stability Level: STABLE\n\n### `workqueue_longest_running_processor_seconds`\nHow many seconds has the longest running processor for workqueue been running.\n- Stability Level: STABLE\n\n### `workqueue_depth`\nCurrent depth of workqueue by workqueue and priority\n- Stability Level: STABLE\n\n### `workqueue_adds_total`\nTotal number of adds handled by workqueue\n- Stability Level: STABLE\n\n## Status Condition Metrics\n\n### `operator_status_condition_transitions_total`\nThe count of transitions of a given object, type and status.\n- Stability Level: DEPRECATED\n\n### `operator_status_condition_transition_seconds`\nThe amount of time a condition was in a given state before transitioning. e.g. Alarm := P99(Updated=False) > 5 minutes\n- Stability Level: DEPRECATED\n\n### `operator_status_condition_current_status_seconds`\nThe current amount of time in seconds that a status condition has been in a specific state. Alarm := P99(Updated=Unknown) > 5 minutes\n- Stability Level: DEPRECATED\n\n### `operator_status_condition_count`\nThe number of an condition for a given object, type and status. e.g. Alarm := Available=False > 0\n- Stability Level: DEPRECATED\n\n## Client Go Metrics\n\n### `client_go_request_total`\nNumber of HTTP requests, partitioned by status code and method.\n- Stability Level: STABLE\n\n### `client_go_request_duration_seconds`\nRequest latency in seconds. Broken down by verb, group, version, kind, and subresource.\n- Stability Level: STABLE\n\n## AWS SDK Go Metrics\n\n### `aws_sdk_go_request_total`\nThe total number of AWS SDK Go requests\n- Stability Level: STABLE\n\n### `aws_sdk_go_request_retry_count`\nThe total number of AWS SDK Go retry attempts per request\n- Stability Level: STABLE\n\n### `aws_sdk_go_request_duration_seconds`\nLatency of AWS SDK Go requests\n- Stability Level: STABLE\n\n### `aws_sdk_go_request_attempt_total`\nThe total number of AWS SDK Go request attempts\n- Stability Level: STABLE\n\n### `aws_sdk_go_request_attempt_duration_seconds`\nLatency of AWS SDK Go request attempts\n- Stability Level: STABLE\n\n## Leader Election Metrics\n\n### `leader_election_slowpath_total`\nTotal number of slow path exercised in renewing leader leases. 'name' is the string used to identify the lease. Please make sure to group by name.\n- Stability Level: STABLE\n\n### `leader_election_master_status`\nGauge of if the reporting system is master of the relevant lease, 0 indicates backup, 1 indicates master. 'name' is the string used to identify the lease. Please make sure to group by name.\n- Stability Level: STABLE\n"
  },
  {
    "path": "website/content/en/v1.8/reference/settings.md",
    "content": "---\ntitle: \"Settings\"\nlinkTitle: \"Settings\"\nweight: 5\ndescription: >\n  Configure Karpenter\n---\n\nKarpenter surfaces environment variables and CLI parameters to allow you to configure certain global settings on the controllers. These settings are described below.\n\n[comment]: <> (the content below is generated from hack/docs/configuration_gen_docs.go)\n\n| Environment Variable | CLI Flag | Description |\n|--|--|--|\n| BATCH_IDLE_DURATION | \\-\\-batch-idle-duration | The maximum amount of time with no new pending 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. (default = 1s)|\n| BATCH_MAX_DURATION | \\-\\-batch-max-duration | 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. (default = 10s)|\n| CLUSTER_CA_BUNDLE | \\-\\-cluster-ca-bundle | Cluster CA bundle for nodes to use for TLS connections with the API server. If not set, this is taken from the controller's TLS configuration.|\n| CLUSTER_ENDPOINT | \\-\\-cluster-endpoint | The external kubernetes cluster endpoint for new nodes to connect with. If not specified, will discover the cluster endpoint using DescribeCluster API.|\n| CLUSTER_NAME | \\-\\-cluster-name | [REQUIRED] The kubernetes cluster name for resource discovery.|\n| CPU_REQUESTS | \\-\\-cpu-requests | CPU requests in millicores on the container running the controller. (default = 1000)|\n| DISABLE_CLUSTER_STATE_OBSERVABILITY | \\-\\-disable-cluster-state-observability | Disable cluster state metrics and events|\n| DISABLE_DRY_RUN | \\-\\-disable-dry-run | If true, then disable dry run validation for EC2NodeClasses.|\n| DISABLE_LEADER_ELECTION | \\-\\-disable-leader-election | Disable the leader election client before executing the main loop. Disable when running replicated components for high availability is not desired.|\n| EKS_CONTROL_PLANE | \\-\\-eks-control-plane | Marking this true means that your cluster is running with an EKS control plane and Karpenter should attempt to discover cluster details from the DescribeCluster API |\n| ENABLE_PROFILING | \\-\\-enable-profiling | Enable the profiling on the metric endpoint|\n| FEATURE_GATES | \\-\\-feature-gates | Optional features can be enabled / disabled using feature gates. Current options are: NodeRepair, ReservedCapacity, SpotToSpotConsolidation, NodeOverlay, and StaticCapacity. (default = NodeRepair=false,ReservedCapacity=true,SpotToSpotConsolidation=false,NodeOverlay=false,StaticCapacity=false)|\n| HEALTH_PROBE_PORT | \\-\\-health-probe-port | The port the health probe endpoint binds to for reporting controller health (default = 8081)|\n| IGNORE_DRA_REQUESTS | \\-\\-ignore-dra-requests | When set, Karpenter will ignore pods' DRA requests during scheduling simulations. NOTE: This flag will be removed once formal DRA support is GA in Karpenter.|\n| INTERRUPTION_QUEUE | \\-\\-interruption-queue | Interruption queue is the name of the SQS queue used for processing interruption events from EC2. Interruption handling is disabled if not specified. Enabling interruption handling may require additional permissions on the controller service account. Additional permissions are outlined in the docs.|\n| ISOLATED_VPC | \\-\\-isolated-vpc | 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 on-demand pricing endpoint.|\n| KARPENTER_SERVICE | \\-\\-karpenter-service | The Karpenter Service name for the dynamic webhook certificate|\n| KUBE_CLIENT_BURST | \\-\\-kube-client-burst | The maximum allowed burst of queries to the kube-apiserver (default = 300)|\n| KUBE_CLIENT_QPS | \\-\\-kube-client-qps | The smoothed rate of qps to kube-apiserver (default = 200)|\n| LEADER_ELECTION_NAME | \\-\\-leader-election-name | Leader election name to create and monitor the lease if running outside the cluster (default = karpenter-leader-election)|\n| LEADER_ELECTION_NAMESPACE | \\-\\-leader-election-namespace | Leader election namespace to create and monitor the lease if running outside the cluster|\n| LOG_ERROR_OUTPUT_PATHS | \\-\\-log-error-output-paths | Optional comma separated paths for logging error output (default = stderr)|\n| LOG_LEVEL | \\-\\-log-level | Log verbosity level. Can be one of 'debug', 'info', or 'error' (default = info)|\n| LOG_OUTPUT_PATHS | \\-\\-log-output-paths | Optional comma separated paths for directing log output (default = stdout)|\n| 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)|\n| METRICS_PORT | \\-\\-metrics-port | The port the metric endpoint binds to for operating metrics about the controller itself (default = 8080)|\n| MIN_VALUES_POLICY | \\-\\-min-values-policy | Min values policy for scheduling. Options include 'Strict' for existing behavior where min values are strictly enforced or 'BestEffort' where Karpenter relaxes min values when it isn't satisfied. (default = Strict)|\n| PREFERENCE_POLICY | \\-\\-preference-policy | How the Karpenter scheduler should treat preferences. Preferences include preferredDuringSchedulingIgnoreDuringExecution node and pod affinities/anti-affinities and ScheduleAnyways topologySpreadConstraints. Can be one of 'Ignore' and 'Respect' (default = Respect)|\n| RESERVED_ENIS | \\-\\-reserved-enis | Reserved ENIs are not included in the calculations for max-pods or kube-reserved. This is most often used in the VPC CNI custom networking setup https://docs.aws.amazon.com/eks/latest/userguide/cni-custom-network.html. (default = 0)|\n| VM_MEMORY_OVERHEAD_PERCENT | \\-\\-vm-memory-overhead-percent | The VM memory overhead as a percent that will be subtracted from the total memory for all instance types when cached information is unavailable. (default = 0.075)|\n\n[comment]: <> (end docs generated content from hack/docs/configuration_gen_docs.go)\n\n### Feature Gates\n\nKarpenter uses [feature gates](https://kubernetes.io/docs/reference/command-line-tools-reference/feature-gates/#feature-gates-for-alpha-or-beta-features) You can enable the feature gates through the `--feature-gates` CLI environment variable or the `FEATURE_GATES` environment variable in the Karpenter deployment. For example, you can configure drift, spotToSpotConsolidation by setting the CLI argument: `--feature-gates Drift=true,SpotToSpotConsolidation=true,ReservedCapacity=true`.\n\n| Feature                 | Default | Stage  | Since   | Until   |\n|-------------------------|---------|--------|---------|---------|\n| Drift                   | false   | Alpha  | v0.21.x | v0.32.x |\n| Drift                   | true    | Beta   | v0.33.x | v0.37.x |\n| SpotToSpotConsolidation | false   | Alpha  | v0.34.x |         |\n| NodeRepair              | false   | Alpha  | v1.1.x  |         |\n| ReservedCapacity        | false   | Alpha  | v1.3.x  | v1.5.x  |\n| ReservedCapacity        | true    | Beta   | v1.6.x  |         |\n| NodeOverlay             | false   | Alpha  | v1.7.x  |         |\n| StaticCapacity          | false   | Alpha  | v1.8.x  |         |\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nIn v1, drift has been promoted to stable and the feature gate removed. Users can continue to control drift by using disruption budgets by reason.\nExample:\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\nspec:\n…\n  disruption:\n    budgets:\n    - nodes: 10%\n    # On Weekdays during business hours, don't do any deprovisioning regarding drift.\n    - nodes: \"0\"\n      schedule: \"0 9 * * mon-fri\"\n      duration: 8h\n      reasons:\n      -\tDrifted\n    # during non-business hours do drift for up to 10% of nodes\n    - nodes: \"10%\"\n      reasons:\n      -\tDrifted\n```\n{{% /alert %}}\n\n### Batching Parameters\n\nThe 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.\n\nFor 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.\n\n#### Batch Idle Duration\n\nThe batch idle duration duration 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.\n\nThis 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`.\n\n#### Batch Max Duration\n\nThe batch max duration 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.\n\nThis 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`.\n"
  },
  {
    "path": "website/content/en/v1.8/reference/threat-model.md",
    "content": "---\ntitle: \"Threat Model\"\nlinkTitle: \"Threat Model\"\nweight: 999\n---\n\nKarpenter observes Kubernetes pods and launches nodes in response to those pods’ scheduling constraints. Karpenter does not perform the actual scheduling and instead waits for [kube-scheduler](https://kubernetes.io/docs/concepts/scheduling-eviction/kube-scheduler/) to schedule the pods.\n\nWhen running in AWS, Karpenter is typically installed onto EC2 instances that run in EKS Clusters. Karpenter relies on public facing AWS APIs and standard IAM Permissions. Karpenter uses AWS-SDK-Go v1, and AWS advises that credentials are provided using [IAM Roles for Service Accounts](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html).\n\n\n## Architecture & Actors\n\n1. **Cluster Operator**: An identity that installs and configures Karpenter in a Kubernetes cluster, and configures Karpenter's cloud identity and permissions.\n2. **Cluster Developer**: An identity that can create pods, typically through Deployments, DaemonSets, or other pod-controller types.\n3. **Karpenter Controller:** The Karpenter application pod that operates inside a cluster.\n\n![threat-model](/threat-model.png)\n\n## Capabilities\n\n### Cluster Operator\n\nThe Cluster Operator has full control to install and configure Karpenter including all [`NodePools`]({{<ref \"../concepts/nodepools\" >}}) and [`EC2NodeClasses`]({{<ref \"../concepts/nodeclasses\" >}}). The Cluster Operator has privileges to manage the cloud identities and permissions for Nodes, and the cloud identity and permissions for Karpenter.\n\n### Cluster Developer\n\nA Cluster Developer has the ability to create pods via `Deployments`, `ReplicaSets`, `StatefulSets`, `Jobs`, etc. This assumes that the Cluster Developer cannot modify the Karpenter pod or launch pods using Karpenter’s service account and gain access to Karpenter’s IAM role.\n\n### Karpenter Controller\n\nKarpenter has permissions to create and manage cloud instances. Karpenter has Kubernetes API permissions to create, update, and remove nodes, as well as evict pods. For a full list of the permissions, see the RBAC rules in the helm chart template. Karpenter also has AWS IAM permissions to create instances with IAM roles.\n\n* [aggregate-clusterrole.yaml](https://github.com/aws/karpenter/blob/v1.8.6/charts/karpenter/templates/aggregate-clusterrole.yaml)\n* [clusterrole-core.yaml](https://github.com/aws/karpenter/blob/v1.8.6/charts/karpenter/templates/clusterrole-core.yaml)\n* [clusterrole.yaml](https://github.com/aws/karpenter/blob/v1.8.6/charts/karpenter/templates/clusterrole.yaml)\n* [rolebinding.yaml](https://github.com/aws/karpenter/blob/v1.8.6/charts/karpenter/templates/rolebinding.yaml)\n* [role.yaml](https://github.com/aws/karpenter/blob/v1.8.6/charts/karpenter/templates/role.yaml)\n\n## Assumptions\n\n| Category\t     | Assumption\t                                                                                                                                                                                                            | Comment\t                                                                                                                                                                                                                          |\n|---------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| Generic\t      | The Karpenter pod is operated on a node in the cluster, and uses a Service Account for authentication to the Kubernetes API\t                                                                                           | Cluster Operators may want to isolate the node running the Karpenter pod to a system-pool of nodes to mitigate the possibility of container breakout with Karpenter’s permissions. \t                                              |\n| Generic\t      | Cluster Developer does not have any Kubernetes permissions to manage Karpenter running in the cluster (The deployment, pods, clusterrole, etc)\t                                                                        | \t                                                                                                                                                                                                                                 |\n| Generic\t      | Restrictions on the fields of pods a Cluster Developer can create are out of scope. \t                                                                                                                                  | Cluster Operators can use policy frameworks to enforce restrictions on Pod capabilities\t                                                                                                                                          |\n| Generic\t      | No sensitive data is included in non-Secret resources in the Kubernetes API. The Karpenter controller has the ability to list all pods, nodes, deployments, and many other pod-controller and storage resource types.\t | Karpenter does not have permission to list/watch cluster-wide ConfigMaps or Secrets\t                                                                                                                                              |\n| Generic\t      | Karpenter has permissions to create, modify, and delete nodes from the cluster, and evict any pod. \t                                                                                                                   | Cluster Operators running applications with varying security profiles in the same cluster may want to configure dedicated nodes and scheduling rules for Karpenter to mitigate potential container escapes from other containers\t |\n| AWS-Specific\t | The Karpenter IAM policy is encoded in the GitHub repo. Any additional permissions possibly granted to that role by the administrator are out of scope\t                                                                | \t                                                                                                                                                                                                                                 |\n| AWS-Specific\t | The Karpenter pod uses IRSA for AWS credentials \t                                                                                                                                                                      | Setup of IRSA is out of scope for this document \t                                                                                                                                                                                 |\n\n## Generic Threats and Mitigations\n\n### Threat: Cluster Developer can influence creation of an arbitrary number of nodes\n\n**Background**: Karpenter creates new instances based on the count of pending pods.\n\n**Threat**: A Cluster Developer attempts to have Karpenter create more instances than intended by creating a large number of pods or by using anti-affinity to schedule one pod per node.\n\n**Mitigation**: In addition to [Kubernetes resource limits](https://kubernetes.io/docs/concepts/policy/resource-quotas/#object-count-quota), Cluster Operators can [configure limits on a NodePool]({{< ref \"../concepts/nodepools#spec-limits\" >}}) to limit the total amount of memory, CPU, or other resources provisioned across all nodes.\n\n## Threats\n\n### Threat: Using EC2 CreateTag/DeleteTag Permissions to Orchestrate Instance Creation/Deletion\n\n**Background**: As of `0.28.0`, Karpenter creates a mapping between CloudProvider instances and CustomResources in the cluster for capacity tracking. To ensure this mapping is consistent, Karpenter utilizes the following tag keys:\n\n* `karpenter.sh/managed-by`\n* `karpenter.sh/nodepool`\n* `kubernetes.io/cluster/${CLUSTER_NAME}`\n* `karpenter.sh/provisioner-name` (prior to `0.32.0`)\n\nAny user that has the ability to Create/Delete tags on CloudProvider instances will have the ability to orchestrate Karpenter to Create/Delete CloudProvider instances as a side effect.\n\nIn addition, as of `0.29.0`, Karpenter will Drift on Security Groups and Subnets. If a user has the Create/Delete tags permission for either of resources, they can orchestrate Karpenter to Create/Delete CloudProvider instances as a side effect.\n\n**Threat:** A Cluster Operator attempts to create or delete a tag on a resource discovered by Karpenter. If it has the ability to create a tag it can effectively create or delete CloudProvider instances associated with the tagged resources.\n\n**Mitigation** Cluster Operators should [enforce tag-based IAM policies](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html) on these tags against any EC2 instance resource (`i-*`) for any users that might have [CreateTags](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTags.html)/[DeleteTags](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DeleteTags.html) permissions but should not have [RunInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html)/[TerminateInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_TerminateInstances.html) permissions.\n\n### Threat: Launching EC2 instances with IAM roles not intended for Karpenter nodes\n\n**Background**: Many IAM roles in an AWS account may trust the EC2 service principal. IAM administrators must grant the `iam:PassRole` permission to IAM principals to allow those principals in the account to launch instances with specific roles.\n\n**Threat:** A Cluster Operator attempts to create an `EC2NodeClass` with an IAM role not intended for Karpenter\n\n**Mitigation**: Cluster Operators must enumerate the roles in the resource section of the IAM policy granted to the Karpenter role for the `iam:PassRole` action. Karpenter will fail to generate an instance profile if role that is specified in the `spec.role` section of the `EC2NodeClass` is not enumerated in the `iam:PassRole` permission.\n\n### Threat: Karpenter can orchestrate the creation/deletion of IAM Instance Profiles it doesn't own\n\n**Background**: Karpenter has permission to create/update/delete instance profiles as part of its controller permissions to ensure that it can auto-generate instance profiles when EC2NodeClasses are created.\n\n**Threat**: An actor who obtains control of the Karpenter pod’s IAM role may delete instance profiles not owned by Karpenter, causing workload disruption to other instances using the profile in the account.\n\n**Mitigation**: Karpenter's controller permissions enforce that it creates instance profiles with tags which provide ownership information. These tags include:\n\n* `karpenter.sh/managed-by`\n* `kubernetes.io/cluster/${CLUSTER_NAME}`\n* `karpenter.k8s.aws/ec2nodeclass`\n* `topology.kubernetes.io/region`\n\nThese tags ensure that instance profiles created by Karpenter in the account are unique to that cluster. Karpenter's controller permissions _only_ allow it to act on instance profiles that contain these tags which match the cluster information.\n\n### Threat: Karpenter can be used to create or terminate EC2 instances outside the cluster\n\n**Background**: EC2 instances can exist in an AWS account outside of the Kubernetes cluster.\n\n**Threat**: An actor who obtains control of the Karpenter pod’s IAM role may be able to create or terminate EC2 instances not part of the Kubernetes cluster managed by Karpenter.\n\n**Mitigation**: Karpenter creates instances with tags, several of which are enforced in the IAM policy granted to the Karpenter IAM role that restrict the instances Karpenter can terminate. One tag requires that the instance was provisioned by a Karpenter controller (`karpenter.sh/nodepool`), another tag can include a cluster name to mitigate any termination between two clusters with Karpenter in the same account (`kubernetes.io/cluster/${CLUSTER_NAME}`. Cluster Operators also can restrict the region to prevent two clusters in the same account with the same name in different regions.\n\nAdditionally, Karpenter does not allow tags to be modified on instances unowned by Karpenter after creation, except for the `Name` and `karpenter.sh/nodeclaim` tags. Though these tags can be changed after instance creation, `aws:ResourceTag` conditions enforce that the Karpenter controller is only able to change these tags on instances that it already owns, enforced through the `karpenter.sh/nodepool` and `kubernetes.io/cluster/${CLUSTER_NAME}` tags.\n\n### Threat: Karpenter launches an EC2 instance using an unintended AMI\n\n**Background**: Cluster Developers can create Node Templates that refer to an AMI by metadata, such as a name rather than an AMI resource ID.\n\n**Threat:** A threat actor creates a public AMI with the same name as a customer’s AMI in an attempt to get Karpenter to select the threat actor’s AMI instead of the intended AMI.\n\n**Mitigation**: When selecting AMIs by name or tags, Karpenter defaults to adding an ownership filter of `self,amazon` so AMI images external to the account are not used.\n"
  },
  {
    "path": "website/content/en/v1.8/tasks/_index.md",
    "content": "---\ntitle: \"Tasks\"\nlinkTitle: \"Tasks\"\nweight: 25\ndescription: >\n  Tasks to run with Karpenter\ncascade:\n  type: docs\n---\n\n"
  },
  {
    "path": "website/content/en/v1.8/tasks/managing-amis.md",
    "content": "---\ntitle: \"Managing AMIs\"\nlinkTitle: \"Managing AMIs\"\ndescription: >\n  Task for managing AMIs in Karpenter\n---\n\n{{% alert title=\"Important\" color=\"warning\" %}}\nKarpenter __heavily recommends against__ opting-in to use an `amiSelectorTerm` with `@latest` unless you are doing this in a pre-production environment or are willing to accept the risk that a faulty AMI may cause downtime in your production clusters. In general, if using a publicly released version of a well-known AMI type (like AL2, AL2023, or Bottlerocket), we recommend that you pin to a version of that AMI and deploy newer versions of that AMI type in a staged approach when newer patch versions are available.\n\n```yaml\namiSelectorTerms:\n  - alias: al2023@v20240807\n```\n\nMore details are described in [Controlling AMI Replacement]({{< relref \"#controlling-ami-replacement\" >}}) below.\n{{% /alert %}}\n\nUnderstanding how Karpenter assigns AMIs to nodes can help ensure that your workloads will run successfully on those nodes and continue to run if the nodes are upgraded to newer AMIs.\nBelow we describe how Karpenter assigns AMIs to nodes when they are first deployed and how newer AMIs are assigned later when nodes are spun up to replace old ones.\nLater, it describes the options you have to assert control over how AMIs are used by Karpenter for your clusters.\n\nFeatures for managing AMIs described here should be considered as part of the larger upgrade policies that you have for your clusters.\nSee [How do I upgrade an EKS Cluster with Karpenter]({{< relref \"../faq/#how-do-i-upgrade-an-eks-cluster-with-karpenter\" >}}) for details on this process.\n\n## How Karpenter assigns AMIs to nodes\n\nHere is how Karpenter assigns AMIs nodes:\n\n* When you create an `EC2NodeClass`, you are required to specify [`amiSelectorTerms`]({{< relref \"../concepts/nodeclasses/#specamiselectorterms\" >}}). [`amiSelectorTerms`]({{< relref \"../concepts/nodeclasses/#specamiselectorterms\" >}}) allow you to select on AMIs that can be spun-up by this EC2NodeClass based on tags, id, name, or an alias. Multiple AMIs may be specified, and Karpenter will choose the newest compatible AMI when spinning up new nodes.\n* Some `amiSelectorTerm` types are static and always resolve to the same AMI (e.g. `id`). However, some are dynamic and may resolve to different AMIs over time. Examples of dynamic types include `alias`, `tags`, and `name` (when using a wildcard). For example, if you specify an `amiSelectorTerm` with an `alias` set to `@latest` (e.g. `al2023@latest`, `al2@latest`, or `bottlerocket@latest`), Karpenter will use the _latest_ release for that AMI type when spinning up a new node.\n* When a node is replaced, Karpenter checks to see if a newer AMI is available based on your `amiSelectorTerms`. If a newer AMI is available, Karpenter will automatically use the new AMI to spin up the new node. __In particular, if you are using a dynamic `amiSelectorTerm` type, you may get a new AMI deployed to your environment without having properly tested it.__\n\nWhenever a node is replaced, the replacement node will be launched using the newest AMI based on your `amiSelectorTerms`. Nodes may be replaced due to manual deletion, or any of Karpenter's automated methods:\n- [**Expiration**]({{< relref \"../concepts/disruption/#expiration\" >}}): Automatically initiates replacement at a certain time after the node is created.\n-  [**Consolidation**]({{< relref \"../concepts/disruption/#consolidation\" >}}): If Karpenter detects that a cheaper node can be used to run the same workloads, Karpenter may replace the current node automatically.\n- [**Drift**]({{< relref \"../concepts/disruption/#drift\" >}}): If a node's state no longer matches the desired state dictated by the `NodePool` or `EC2NodeClass`, it will be replaced, including if the node's AMI no longer matches the latest AMI selected by the `amiSelectorTerms`.\n- [**Interruption**]({{< relref \"../concepts/disruption/#interruption\" >}}): Nodes are sometimes involuntarily disrupted by things like Spot interruption, health changes, and instance events, requiring new nodes to be deployed.\n\nSee [**Automated Methods**]({{< relref \"../concepts/disruption/#automated-methods\" >}}) for details on how Karpenter uses these automated actions to replace nodes.\n\nThe most relevant automated disruption method is [**Drift**]({{< relref \"../concepts/disruption/#drift\" >}}), since it is initiated when a new AMI is selected-on by your `amiSelectorTerms`. This could be due to a manual update (e.g. a new `id` term was added), or due to a new AMI being resolved by a dynamic term.\n\nIf you're using an `alias` with the `latest` pin (e.g. `al2023@latest`), Karpenter periodically checks for new AMI releases. Since AMI releases are outside your control, this could result in new AMIs being deployed before they have been properly tested in a lower environment. This is why we **strongly recommend** using version pins in production environments when using an alias (e.g. `al2023@v20240807`).\n\n{{% alert title=\"Important\" color=\"warning\" %}}\nIf you are new to Karpenter, you should know that the behavior described here is different than you get with Managed Node Groups (MNG). MNG will always use the assigned AMI when it creates a new node and will never automatically upgrade to a new AMI when a new node is required. See [Updating a Managed Node Group](https://docs.aws.amazon.com/eks/latest/userguide/update-managed-node-group.html) to see how you would manually update MNG to use new AMIs.\n{{% /alert %}}\n\n## Controlling AMI Replacement\n\nKarpenter's automated node replacement functionality in tandem with the `EC2NodeClass` gives you a lot of flexibility to control the desired state of nodes on your cluster. For example, you can opt-in to AMI auto-upgrades using `alias` set to `@latest`; however, this has to be weighed heavily against the risk of newer versions of an AMI breaking existing applications on your cluster. Alternatively, you can choose to pin your AMIs in your production clusters to avoid the risk of breaking changes; however, this has to be weighed against the management cost of testing new AMIs in pre-production and keeping up with the latest AMI versions.\n\nKarpenter offers you various controls to ensure you don't take on too much risk as you rollout new versions of AMIs to your production clusters. Below shows how you can use these controls:\n\n* [Pinning AMIs]({{< relref \"#pinning-amis\" >}}): If workloads require a particluar AMI, this control ensures that it is the only AMI used by Karpenter. This can be used in combination with [Testing AMIs]({{< relref \"#testing-amis\" >}}) where you lock down the AMI in production, but allow the newest AMIs in a test cluster while you test your workloads before upgrading production.\n* [Testing AMIs]({{< relref \"#testing-amis\" >}}): The safest way for ensuring that a new AMI doesn't break your workloads is to test it before putting it into production. This takes the most effort on your part, but most effectively models how your workloads will run in production, allowing you to catch issues ahead of time. Note that you can sometimes get different results from your test environment when you roll a new AMI into production, since issues like scale and other factors can elevate problems you might not see in test. Combining this with other controls like [Using Disruption Budgets]({{< relref \"#using-disruption-budgets\" >}}) can allow you to catch problems before they impact your whole cluster.\n* [Using Disruption Budgets]({{< relref \"#using-disruption-budgets\" >}}): This option can be used as a way of mitigating the scope of impact if a new AMI causes problems with your workloads. With Disruption budgets you can slow the pace of upgrades to nodes with new AMIs or make sure that upgrades only happen during selected dates and times (using `schedule`). This doesn't prevent a bad AMI from being deployed, but it allows you to control when nodes are upgraded, and gives you more time to respond to rollout issues.\n\n### Pinning AMIs\n\nWhen you configure the [**EC2NodeClass**]({{< relref \"../concepts/nodeclasses\" >}}), you are required to configure which AMIs you want Karpenter to select on using the `amiSelectorTerms` field. When pinning to a specific `id`, `name`, `tags` or an `alias` that contains a fixed version, Karpenter will only select on a single AMI and won't automatically upgrade your nodes to a new version of an AMI. This prevents a new and potentially untested AMI from replacing existing nodes when those nodes are terminated.\n).\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nPinning an AMI to an `alias` type with a fixed version _will_ pin the AMI so long as your K8s control plane version doesn't change. Unlike `id` and `name` types, specifying a version `alias` in your `amiSelectorTerms` will cause Karpenter to consider the K8s control plane version of your cluster when choosing the AMI. If you upgrade your Kubernetes cluster while using this alias type, Karpenter _will_ automatically drift your nodes to a new AMI that still matches the AMI version but also matches your new K8s control plane version.\n{{% /alert %}}\n\nThese examples show three different ways to identify the same AMI:\n\n```yaml\n# Using alias\n# Pinning to this fixed version alias will pull this version of the AMI,\n# matching the K8s control plane version of your cluster\namiSelectorTerms:\n- alias: al2023@v20240219\n```\n\n```yaml\n# Using name\n# This will only ever select the AMI that contains this exact name\namiSelectorTerms:\n- name: al2023-ami-2023.3.20240219.0-kernel-6.1-x86_64\n```\n\n```yaml\n# Using id\n# This will only ever select this specific AMI id\namiSelectorTerms:\n- id: ami-052c9ea013e6e3567\n```\n\n```yaml\n# Using tags\n# You can use a CI/CD system to test newer versions of an AMI\n# and automatically tag them as you validate that they are safe to upgrade to\namiSelectorTerms:\n- tags:\n    karpenter.sh/discovery: \"${CLUSTER_NAME}\"\n    environment: prod\n```\n\nSee the [**spec.amiSelectorTerms**]({{< relref \"../concepts/nodeclasses/#specamiselectorterms\" >}}) section of the NodeClasses page for details.\nKeep in mind, that this could prevent you from getting critical security patches when new AMIs are available, but it does give you control over exactly which AMI is running.\n\n### Testing AMIs\n\nInstead of avoiding AMI upgrades, you can set up test clusters where you can try out new AMI releases before they are put into production. For example, you could have:\n\n* **Test clusters**: On lower environment clusters, you can run the latest AMIs e.g. `al2023@latest`, `al2@latest`, `bottlerocket@latest`, for your workloads in a safe environment. This ensures that you get the latest patches for AMIs where downtime to applications isn't as critical and allows you to validate patches to AMIs before they are deployed to production.\n\n* **Production clusters**: After you've confirmed that the AMI works in your lower environments, you can pin the latest AMIs to be deployed in your production clusters to roll out the AMI. Refer to [Pinning AMIs]({{< relref \"#pinning-amis\" >}}) for how to choose a particular AMI by `alias`, `name` or `id`. Remember that it is still best practice to gradually roll new AMIs into your cluster, even if they have been tested. So consider implementing that for your production clusters as described in [Using Disruption Budgets]({{< relref \"#using-disruption-budgets\" >}}).\n\n### Using Disruption Budgets\n\nTo reduce the risk of entire workloads being immediately degraded when a new AMI is deployed, you can enable Karpenter's [**Node Disruption Budgets**]({{< relref \"#node-disruption-budgets \" >}}) as well as ensure that you have [**Pod Disruption Budgets**]({{< relref \"#pod-disruption-budgets \" >}}) configured for applications on your cluster. Below provides more details on how to configure each.\n\n#### Node Disruption Budgets\n\n[Disruption Budgets]({{< relref \"../concepts/disruption/#disruption-budgets \" >}}) limit when and to what extent nodes can be disrupted. You can prevent disruption based on nodes (a percentage or number of nodes that can be disrupted at a time) and schedule (excluding certain times from disrupting nodes).\nYou can set Disruption Budgets in a `NodePool` spec. Here is an example:\n\n```yaml\ndisruption:\n  budgets:\n  - nodes: 15%\n  - nodes: \"3\"\n  - nodes: \"0\"\n    schedule: \"0 9 * * sat,sun\"\n    duration: 24h\n  - nodes: \"0\"\n    schedule: \"0 17 * * mon-fri\"\n    duration: 16h\n    reasons:\n      - Drifted\n```\n\nSettings for budgets in the above example include the following:\n\n* **Percentage of nodes**: From the first `nodes` setting, only `15%` of the NodePool’s nodes can be disrupted at a time.\n* **Number of nodes**: The second `nodes` setting limits the number of nodes that can be disrupted at a time to `3`.\n* **Schedule**: The third `nodes` setting uses schedule to say that zero disruptions (`0`) are allowed starting at 9am on Saturday and Sunday and continues for 24 (fully blocking disruptions all day).\nThe format of the schedule follows the `crontab` format for identifying dates and times.\nSee the [crontab](https://man7.org/linux/man-pages/man5/crontab.5.html) page for information on the supported values for these fields.\n* **Reasons**: The fourth `nodes` setting uses `reasons` which implies that this budget only applies to the `Drifted` disruption condition. This setting uses schedule to say that zero disruptions (`0`) are allowed starting at 5pm on Monday, Tuesday, Wednesday, Thursday, and Friday and continues for 16h (effectively blocking rolling nodes due to drift outside of working hours).\n\nAs with all disruption settings, keep in mind that avoiding updated AMIs for your nodes can result in not getting fixes for known security risks and bugs.\nYou need to balance that with your desire to not risk breaking the workloads on your cluster.\n\n#### Pod Disruption Budgets\n\n[Pod Disruption Budgets](https://kubernetes.io/docs/tasks/run-application/configure-pdb/#specifying-a-poddisruptionbudget) allow you to describe how much disruption an application can tolerate before it begins to become unhealthy. This is critical to configure for Karpenter, since Karpenter uses this information to determine if it can continue to replace nodes. Specifically, if replacing a node would cause a Pod Disruption Budget to be breached (for graceful forms of disruption e.g. Drift or Consolidation), Karpenter will not replace the node.\n\nIn a scenario where a faulty AMI is rolling out and begins causing downtime to your applications, configuring Pod Disruption Budgets is critical since this will tell Karpenter that it must stop replacing nodes until your applications become healthy again. This prevents Karpenter from deploying the faulty AMI throughout your cluster, reduces the imact the AMI has on your production applications, and gives you manually intervene in the cluster to remediate the issue.\n\n## Follow-up\n\nThe Karpenter project continues to add features to give you greater control over AMI upgrades on your clusters.\nIf you have opinions about features you would like to see to manage AMIs with Karpenter, feel free to enter a Karpenter [New Issue](https://github.com/aws/karpenter-provider-aws/issues/new/choose).\n"
  },
  {
    "path": "website/content/en/v1.8/tasks/odcrs.md",
    "content": "---\ntitle: \"Utilizing On-Demand Capacity Reservations and Capacity Blocks\"\nlinkTitle: \"Utilizing ODCRs and Capacity Blocks\"\n---\n\n<i class=\"fa-solid fa-circle-info\"></i> <b>Feature State: </b> [Beta]({{<ref \"../reference/settings#feature-gates\" >}})\n\nKarpenter introduced native support for [EC2 On-Demand Capacity Reservations](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-capacity-reservations.html)  (ODCRs) in [v1.3](https://github.com/aws/karpenter-provider-aws/releases/tag/v1.3.0), enabling users to select upon and prioritize specific capacity reservations.\nIn [v1.6](https://github.com/aws/karpenter-provider-aws/releases/tag/v1.6.0), this support was expanded to include [EC2 Capacity Blocks for ML](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-capacity-blocks.html).\nTo enable native ODCR support, ensure the [`ReservedCapacity` feature gate]({{< relref \"../reference/settings#feature-gates\" >}}) is enabled.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nIf you were previously utilizing `open` ODCRs using Karpenter, review the [migration section]({{< relref \"#migrating-from-previous-versions\" >}}) of this task before enabling this feature.\n{{% /alert %}}\n\n## Selecting Capacity Reservations\n\nTo configure native ODCR support, you will need to make updates to both your EC2NodeClass and NodePool.\nFirst, you should configure `capacityReservationSelectorTerms` on your EC2NodeClass.\nSimilar to `amiSelectorTerms`, you can specify a number of terms which are ANDed together to select ODCRs in your AWS account.\nThe following example demonstrates how to select all capacity reservations tagged with `application: foobar` in addition to `cr-56fac701cc1951b03`:\n\n```yaml\ncapacityReservationSelectorTerms:\n- tags:\n    application: foobar\n- id: cr-56fac701cc1951b03\n```\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nCapacity blocks are modeled as on-demand capacity reservations in EC2.\nTo select capacity blocks, specify them in your `capacityReservationSelectorTerms` in the same way you would for a default ODCR.\n{{% /alert %}}\n\nFor more information on configuring `capacityReservationSelectorTerms`, see the [NodeClass docs]({{< relref \"../concepts/nodeclasses#speccapacityreservationselectorterms\" >}}).\n\nAdditionally, you will need to update your NodePool to be compatible with ODCRs.\nKarpenter doesn't model ODCRs as standard on-demand capacity, and instead uses a dedicated capacity type: `reserved`.\nFor a NodePool to utilize ODCRs, it must be compatible with `karpenter.sh/capacity-type: reserved`.\nThe following example demonstrates how to configure a NodePool to prioritize ODCRs and fallback to on-demand capacity:\n\n```yaml\nrequirements:\n- key: karpenter.sh/capacity-type\n  operator: In\n  values: ['reserved', 'on-demand']\n```\n\nAdditionaly, Karpenter supports the following scheduling labels:\n\n| Label                                         | Example                       | Description                      |\n| --------------------------------------------- | ----------------------------- | -------------------------------- |\n| `karpenter.k8s.aws/capacity-reservation-id`   | `cr-56fac701cc1951b03`        | The capacity reservation's ID    |\n| `karpenter.k8s.aws/capacity-reservation-type` | `default` or `capacity-block` | The type of capacity reservation |\n\nThese labels will only be present on reserved nodes.\nThey are supported as NodePool requirements and as pod scheduling constaints (e.g. [node affinity](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#node-affinity)).\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter does **not** support open matching for ODCRs.\nThis means that all ODCRs you wish to utilize, even those with `open` instance eligibility, must be included in your NodeClass' `spec.capacityReservationSelectorTerms`.\n{{% /alert %}}\n\n## Prioritization Behavior\n\nNodePools are not limited to a single compatible capacity-type -- they can be compatible with any combination of the available capacity-types (`on-demand`, `spot`, and `reserved`).\nConsider the following NodePool requirements:\n\n```yaml\nrequirements:\n- key: karpenter.sh/capacity-type\n  operator: In\n  values: ['reserved', 'on-demand', 'spot']\n```\n\nIn this example, the NodePool is compatible with all capacity types.\nKarpenter will prioritize ODCRs, but if none are available or none are compatible with the pending workloads it will fallback to spot or on-demand.\nSimilarly, Karpenter will prioritize reserved capacity during consolidation.\nSince ODCRs are pre-paid, Karpenter will model them as free and consolidate spot / on-demand nodes when possible.\n\n## Expiration\n\nAn instance launched into an ODCR is not necessarily in that ODCR indefinitely.\nThe ODCR could expire, be cancelled, or the instance could be manually removed from the ODCR.\nIf any of these occur, and Karpenter detects that the instance no longer belongs to an ODCR, it will update the `karpenter.sh/capacity-type` label to `on-demand`.\n\n### Capacity Blocks\n\nUnlike default ODCRs, Capacity Blocks must have an end time.\nAdditionally, instances launched into a capacity block will be terminated by EC2 ahead of the end time, rather than becoming standard on-demand capacity.\n\nFrom the [AWS docs](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-capacity-blocks.html):\n\n> You can use all the instances you reserved until 30 minutes (for instance types) or 60 minutes (for UltraServer type) before the end time of the Capacity Block.\n> With 30 minutes (for instance types) or 60 minutes (for UltraServer types) left in your Capacity Block reservation, we begin terminating any instances that are running in the Capacity Block.\n> We use this time to clean up your instances before delivering the Capacity Block to the next customer.\n\nKarpenter will preemptively begin draining nodes launched for capacity blocks 10 minutes before EC2 begins termination, ensuring your workloads can gracefully terminate before reclaimation.\n\n## Migrating From Previous Versions\n\nAlthough it was not natively supported, it was possible to utilize ODCRs on previous versions of Karpenter.\nIf a NodeClaim's requirements happened to be compatible with an open ODCR in the target AWS account, it may have launched an instance into that open ODCR.\nThis could be ensured by constraining a NodePool such that it was only compatible with the desired open ODCR, and limits could be used to enable fallback to a different NodePool once the ODCR was exhausted.\nThis behavior is no longer supported when native on-demand capacity support is enabled.\n\nIf you were relying on this behavior, you should configure your `EC2NodeClasses` to select the desired ODCRs **before** enabling the feature gate.\nYou should also ensure any NodePools which you wish to use with ODCRs are compatible with `karpenter.sh/capacity-type: reserved`.\nPerforming these steps before enabling the feature gate will ensure that Karpenter can immediately continue utilizing your reservations, rather than falling back to on-demand.\n"
  },
  {
    "path": "website/content/en/v1.8/troubleshooting.md",
    "content": "---\ntitle: \"Troubleshooting\"\nlinkTitle: \"Troubleshooting\"\nweight: 70\ndescription: >\n  Troubleshoot Karpenter problems\n---\n\n## Controller\n\n### Enable debug logging\n\nThis can be done by updating the env variable `LOG_LEVEL` Karpenter deployment and then restarting the Karpenter deployment.\n\nYou can also enable debug logging during installation with Helm by setting the option `logLevel`.\n\n```\nhelm upgrade --install karpenter oci://public.ecr.aws/karpenter/karpenter \\\n  --set logLevel=debug \\\n  ...\n```\n\n## Installation\n\n### Missing Service Linked Role\n\nUnless your AWS account has already onboarded to EC2 Spot, you will need to create the service linked role to avoid `ServiceLinkedRoleCreationNotPermitted`.\n\n```\nAuthFailure.ServiceLinkedRoleCreationNotPermitted: The provided credentials do not have permission to create the service-linked role for EC2 Spot Instances\n```\n\nThis can be resolved by creating the [Service Linked Role](https://docs.aws.amazon.com/batch/latest/userguide/spot_fleet_IAM_role.html).\n\n```\naws iam create-service-linked-role --aws-service-name spot.amazonaws.com\n```\n\n### Failed Resolving STS Credentials with I/O Timeout\n\n```bash\nChecking EC2 API connectivity, WebIdentityErr: failed to retrieve credentials\\ncaused by: RequestError: send request failed\\ncaused by: Post \\\"https://sts.us-east-1.amazonaws.com/\\\": dial tcp: lookup sts.us-east-1.amazonaws.com: i/o timeout\n```\n\nIf you see the error above when you attempt to install Karpenter, this indicates that Karpenter is unable to reach out to the STS endpoint due to failed DNS resolution. This can happen when Karpenter is running with `dnsPolicy: ClusterFirst` and your in-cluster DNS service is not yet running.\n\nYou have two mitigations to resolve this error:\n1. Let Karpenter manage your in-cluster DNS service - You can let Karpenter manage your DNS application pods' capacity by changing Karpenter's `dnsPolicy` to be `Default` (run `--set dnsPolicy=Default` with a Helm installation). This ensures that Karpenter reaches out to the [VPC DNS service](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-dns.html) when running its controllers, allowing Karpenter to start-up without the DNS application pods running, enabling Karpenter to manage the capacity for these pods.\n2. Let MNG/Fargate manage your in-cluster DNS service - If running a cluster with MNG, ensure that your group has enough capacity to support the DNS application pods and ensure that the application has the correct tolerations to schedule against the capacity. If running a cluster with Fargate, ensure that you have a [fargate profile](https://docs.aws.amazon.com/eks/latest/userguide/fargate-profile.html) that selects against your DNS application pods.\n\n### Karpenter Role names exceeding 64-character limit\n\nIf 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).\n\nNode role names for Karpenter are created in the form `KarpenterNodeRole-${Cluster_Name}` in the [Create the KarpenterNode IAM Role]({{<ref \"./getting-started/getting-started-with-karpenter/#create-the-karpenternode-iam-role\" >}}) section of the getting started guide.\nIf a long cluster name causes the Karpenter node role name to exceed 64 characters, creating that object will fail.\n\nKeep in mind that `KarpenterNodeRole-` is just a recommendation from the getting started guide.\nInstead of using the eksctl role, you can shorten the name to anything you like, as long as it has the right permissions.\n\n### Unknown field in NodePool or EC2NodeClass spec\n\nIf 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:\n\n```\nError from server (BadRequest): error when creating \"STDIN\": NodePool in version \"v1\" cannot be handled as a NodePool: strict decoding error: unknown field \"spec.template.spec.nodeClassRef.foo\"\n```\n\nIf you see this error, you can solve the problem by following the [Custom Resource Definition Upgrade Guidance](../upgrade-guide/#custom-resource-definition-crd-upgrades).\n\nInfo 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)\n\n### Unable to schedule pod due to insufficient node group instances\n\n`0.16.0` changed the default replicas from 1 to 2.\n\nKarpenter won't launch capacity to run itself (log related to the `karpenter.sh/nodepool DoesNotExist requirement`)\nso it can't provision for the second Karpenter pod.\n\nTo 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 to run both pods.\n\nTo do so on AWS increase the `minimum` and `desired` parameters on the node group autoscaling group to launch at lease 2 instances.\n\n### Helm Error When Pulling the Chart\n\nIf Helm is showing an error when trying to install Karpenter Helm charts:\n\n- Ensure you are using a newer Helm version, Helm started supporting OCI images since `3.8.0`.\n- Helm does not have an `helm repo add` concept in OCI, so to install Karpenter you no longer need this.\n- If you get an error like `Error: public.ecr.aws/karpenter/karpenter:0.34.0: not found` make sure you're adding a `v` prefix for Karpenter versions between `0.17.0` & `0.34.x`.\n- Verify that the image you are trying to pull actually exists in [gallery.ecr.aws/karpenter](https://gallery.ecr.aws/karpenter/karpenter)\n- 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\n- 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).\n\n### Helm Error when installing the `karpenter-crd` chart\n\nKarpenter `0.26.1` introduced the `karpenter-crd` Helm chart. When installing this chart on your cluster, if you have previously added the Karpenter CRDs to your cluster through the `karpenter` controller chart or through `kubectl replace`, Helm will reject the install of the chart due to `invalid ownership metadata`.\n\n- In the case of `invalid ownership metadata; label validation error: missing key \"app.kubernetes.io/managed-by\": must be set to \"Helm\"` run:\n\n```shell\nkubectl label crd ec2nodeclasses.karpenter.k8s.aws nodepools.karpenter.sh nodeclaims.karpenter.sh app.kubernetes.io/managed-by=Helm --overwrite\n```\n\n- In the case of `annotation validation error: missing key \"meta.helm.sh/release-namespace\": must be set to \"karpenter\"` run:\n\n```shell\nKARPENTER_NAMESPACE=kube-system\nkubectl annotate crd ec2nodeclasses.karpenter.k8s.aws nodepools.karpenter.sh nodeclaims.karpenter.sh meta.helm.sh/release-name=karpenter-crd --overwrite\nkubectl annotate crd ec2nodeclasses.karpenter.k8s.aws nodepools.karpenter.sh nodeclaims.karpenter.sh meta.helm.sh/release-namespace=\"${KARPENTER_NAMESPACE}\" --overwrite\n```\n\n## Uninstallation\n\n### Unable to delete nodes after uninstalling Karpenter\n\nKarpenter 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.\n\nYou can fix this by patching the node objects:\n\n- `kubectl edit node <node_name>` and remove the line that says `karpenter.sh/termination` in the finalizers field.\n- Run the following script that gets all nodes with the finalizer and removes all the finalizers from those nodes.\n  - NOTE: this will remove ALL finalizers from nodes with the karpenter finalizer.\n\n```bash\nkubectl 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\"}]'\n```\n\n## Provisioning\n\n### Instances with swap volumes fail to register with control plane\n\nSome instance types (c1.medium and m1.small) are given limited amount of memory (see [Instance Store swap volumes](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-store-swap-volumes.html)). They are subsequently configured to use a swap volume, which will cause the kubelet to fail on launch. The following error can be seen in the systemd logs:\n\n```bash\n\"command failed\" err=\"failed to run Kubelet: running with swap on is not supported, please disable swap!...\"\n```\n\n##### Solutions\nDisabling swap will allow kubelet to join the cluster successfully, however users should be mindful of performance, and consider adjusting the NodePool requirements to use larger instance types.\n\n### DaemonSets can result in deployment failures\n\nFor Karpenter versions `0.5.3` and earlier, DaemonSets were not properly considered when provisioning nodes.\nThis sometimes caused nodes to be deployed that could not meet the needs of the requested DaemonSets and workloads.\nThis issue no longer occurs after Karpenter version `0.5.3` (see [PR #1155](https://github.com/aws/karpenter/pull/1155)).\n\nIf you are using a pre `0.5.3` version of Karpenter, one workaround is to set your NodePool to only use larger instance types that you know will be big enough for the DaemonSet and the workload.\nFor more information, see [Issue #1084](https://github.com/aws/karpenter/issues/1084).\nExamples of this behavior are included in [Issue #1180](https://github.com/aws/karpenter/issues/1180).\n\n### Unspecified resource requests cause scheduling/bin-pack failures\n\nNot 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.\nThis can cause issues as Karpenter bin-packs pods based on the resource requests.\n\nIf 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.\nThis behavior is not unique to Karpenter and can also occur with the standard `kube-scheduler` with pods that don't have accurate resource requests.\n\nTo prevent this, you can set LimitRanges on pod deployments on a per-namespace basis.\nSee 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.\n\n### Pods using Security Groups for Pods stuck in \"ContainerCreating\" state for up to 30 minutes before transitioning to \"Running\"\n\nWhen 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\".\nThis 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.\nMore info can be found in [issue #1252](https://github.com/aws/karpenter/issues/1252).\n\nTo workaround this problem, add the `vpc.amazonaws.com/has-trunk-attached: \"false\"` label in your Karpenter NodePool 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).\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\nspec:\n  template\n    metadata:\n      labels:\n        vpc.amazonaws.com/has-trunk-attached: \"false\"\n```\n\n### Pods using PVCs can hit volume limits and fail to scale-up\n\nWhen attempting to schedule a large number of pods with PersistentVolumes, it's possible that these pods will co-locate on the same node. Pods will report the following errors in their events using a `kubectl describe pod` call\n\n```bash\nWarning   FailedAttachVolume    pod/example-pod                      AttachVolume.Attach failed for volume \"***\" : rpc error: code = Internal desc = Could not attach volume \"***\" to node \"***\": attachment of disk \"***\" failed, expected device to be attached but was attaching\nWarning   FailedMount           pod/example-pod                      Unable to attach or mount volumes: unmounted volumes=[***], unattached volumes=[***]: timed out waiting for the condition\n```\n\nIn this case, Karpenter may fail to scale-up your nodes due to these pods due to one of the following reasons:\n\n#### Pods were not scheduled but Karpenter couldn't discover limits\n\nKarpenter does not support [in-tree storage plugins](https://kubernetes.io/blog/2021/12/10/storage-in-tree-to-csi-migration-status-update/) to provision PersistentVolumes, since nearly all of the in-tree plugins have been deprecated in upstream Kubernetes. This means that, if you are using a statically-provisioned PersistentVolume that references a volume source like `AWSElasticBlockStore` or a dynamically-provisioned PersistentVolume that references a StorageClass with a in-tree storage plugin provisioner like `kubernetes.io/aws-ebs`, Karpenter will fail to discover the maxiumum volume attachments for the node. Instead, Karpenter may think the node still has more schedulable space due to memory and cpu constraints when there is really no more schedulable space on the node due to volume limits. When Karpenter sees you are using an in-tree storage plugin on your pod volumes, it will print the following error message into the logs. If you see this message, upgrade your StorageClasses and statically-provisioned PersistentVolumes to use the latest CSI drivers for your cloud provider.\n\n```bash\n2023-04-05T23:56:53.363Z        ERROR   controller.node_state   PersistentVolume source 'AWSElasticBlockStore' uses an in-tree storage plugin which is unsupported by Karpenter and is deprecated by Kubernetes. Scale-ups may fail because Karpenter will not discover driver limits. Use a PersistentVolume that references the 'CSI' volume source for Karpenter auto-scaling support.       {\"commit\": \"b2af562\", \"node\": \"ip-192-168-36-137.us-west-2.compute.internal\", \"pod\": \"inflate0-6c4bdb8b75-7qmfd\", \"volume\": \"mypd\", \"persistent-volume\": \"pvc-11db7489-3c6e-46f3-a958-91f9d5009d41\"}\n2023-04-05T23:56:53.464Z        ERROR   controller.node_state   StorageClass .spec.provisioner uses an in-tree storage plugin which is unsupported by Karpenter and is deprecated by Kubernetes. Scale-ups may fail because Karpenter will not discover driver limits. Create a new StorageClass with a .spec.provisioner referencing the CSI driver plugin name 'ebs.csi.aws.com'.     {\"commit\": \"b2af562\", \"node\": \"ip-192-168-36-137.us-west-2.compute.internal\", \"pod\": \"inflate0-6c4bdb8b75-7qmfd\", \"volume\": \"mypd\", \"storage-class\": \"gp2\", \"provisioner\": \"kubernetes.io/aws-ebs\"}\n```\n\n#### Pods were scheduled due to a race condition in Kubernetes\n\nDue to [this race condition in Kubernetes](https://github.com/kubernetes/kubernetes/issues/95911), it's possible that the scheduler and the CSINode can race during node registration such that the scheduler assumes that a node can mount more volumes than the node attachments support. There is currently no universal solve for this problem other than enforcing `topologySpreadConstraints` and `podAntiAffinity` on your workloads that use PVCs such that you attempt to reduce the number of PVCs that schedule to a given node.\n\nThe following is a list of known CSI drivers which support a startupTaint to eliminate this issue:\n- [aws-ebs-csi-driver](https://github.com/kubernetes-sigs/aws-ebs-csi-driver/blob/master/docs/install.md#configure-node-startup-taint)\n- [aws-efs-csi-driver](https://github.com/kubernetes-sigs/aws-efs-csi-driver/tree/master/docs#configure-node-startup-taint)\n\nThese taints should be configured via `startupTaints` on your `NodePool`. For example, to enable this for EBS, add the following to your `NodePool`:\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nspec:\n  template:\n    spec:\n      startupTaints:\n        - key: ebs.csi.aws.com/agent-not-ready\n          effect: NoExecute\n```\n\n### CNI is unable to allocate IPs to pods\n\n_Note: This troubleshooting guidance is specific to the VPC CNI that is shipped by default with EKS clusters. If you are using a custom CNI, some of this guidance may not apply to your cluster._\n\nWhenever a new pod is assigned to a node, the CNI will assign an IP address to that pod (assuming it isn't using host networking), allowing it to communicate with other pods on the cluster. It's possible for this IP allocation and assignment process to fail for a number of reasons. If this process fails, you may see an error similar to the one below.\n\n```bash\ntime=2023-06-12T19:18:15Z type=Warning reason=FailedCreatePodSandBox from=kubelet message=Failed to create pod sandbox: rpc error: code = Unknown desc = failed to setup network for sandbox \"0f46f3f1289eed7afab81b6945c49336ef556861fe5bb09a902a00772848b7cc\": plugin type=\"aws-cni\" name=\"aws-cni\" failed (add): add cmd: failed to assign an IP address to container\n```\n\n#### `maxPods` is greater than the node's supported pod density\n\nBy 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.\n\nIf the max-pods (configured through your EC2NodeClass [`kubeletConfiguration`]({{<ref \"./concepts/nodeclasses/#speckubelet\" >}})) is greater than the number of supported IPs for a given instance type, the CNI will fail to assign an IP to the pod and your pod will be left in a `ContainerCreating` state.\n\nIf you've enabled [Security Groups per Pod](https://aws.github.io/aws-eks-best-practices/networking/sgpp/), one of the instance's ENIs is reserved as the trunk interface and uses branch interfaces off of that trunk interface to assign different security groups.\nIf you do not have any `SecurityGroupPolicies` configured for your pods, they will be unable to utilize branch interfaces attached to the trunk interface, and IPs will only be available from the non-trunk ENIs.\nThis effectively reduces the max-pods value by the number of IPs that would have been available from the trunk ENI.\nNote that Karpenter is not aware if [Security Groups per Pod](https://aws.github.io/aws-eks-best-practices/networking/sgpp/) is enabled, and will continue to compute max-pods assuming all ENIs on the instance can be utilized.\n\n##### Solutions\n\nTo avoid this discrepancy between `maxPods` and the supported pod density of the EC2 instance based on ENIs and allocatable IPs, you can perform one of the following actions on your cluster:\n\n1. Enable [Prefix Delegation](https://docs.aws.amazon.com/eks/latest/userguide/cni-increase-ip-addresses.html) to increase the number of allocatable IPs for the ENIs on each instance type\n2. Reduce your `maxPods` value to be under the maximum pod density for the instance types assigned to your NodePods\n3. Remove the `maxPods` value from your [`kubeletConfiguration`]({{<ref \"./concepts/nodeclasses#speckubeletconfiguration\" >}}) if you no longer need it and instead rely on the defaulted values from Karpenter and EKS AMIs.\n4. Set [RESERVED_ENIS]({{<ref \"./reference/settings\" >}})=1 in your Karpenter configuration to account for the reserved ENI when using Security Groups for Pods.\n\nFor more information on pod density, view the [Pod Density Section in the NodePools doc]({{<ref \"./concepts/nodeclasses#pod-density\" >}}).\n\n#### IP exhaustion in a subnet\n\nWhen a node is launched by Karpenter, it is assigned to a subnet within your VPC based on the [`subnetSelector`]({{<ref \"./concepts/nodeclasses#specsubnetselector\" >}}) value in your [`EC2NodeClass`]({{<ref \"./concepts/nodeclasses\" >}})). When a subnet becomes IP address constrained, EC2 may think that it can successfully launch an instance in the subnet; however, when the CNI tries to assign IPs to the pods, there are none remaining. In this case, your pod will stay in a `ContainerCreating` state until an IP address is freed in the subnet and the CNI can assign one to the pod.\n\n##### Solutions\n\n1. Use `topologySpreadConstraints` on `topology.kubernetes.io/zone` to spread your pods and nodes more evenly across zones\n2. Increase the IP address space (CIDR) for the subnets selected by your `EC2NodeClass`\n3. Use [custom networking](https://docs.aws.amazon.com/eks/latest/userguide/cni-custom-network.html) to assign separate IP address spaces to your pods and your nodes\n4. [Run your EKS cluster on IPv6](https://aws.github.io/aws-eks-best-practices/networking/ipv6/) (Note: IPv6 clusters have some known limitations which should be well-understood before choosing to use one)\n\nFor more troubleshooting information on why your pod may have a `FailedCreateSandbox` error, view the [EKS CreatePodSandbox Knowledge Center Post](https://repost.aws/knowledge-center/eks-failed-create-pod-sandbox).\n\n### Windows pods are failing with `FailedCreatedPodSandbox`\n\nThe following solution(s) may resolve your issue if you are seeing an error similar to the following when attempting to launch Windows pods. This error typically occurs if you have not enabled Windows support.\n\n```\nFailed to create pod sandbox: rpc error: code = Unknown desc = failed to setup network for sandbox \"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\": plugin type=\"vpc-bridge\" name=\"vpc\" failed (add): failed to parse Kubernetes args: pod does not have label vpc.amazonaws.com/PrivateIPv4Address\n```\n\n#### Solutions\n1. See [Enabling Windows support](https://docs.aws.amazon.com/eks/latest/userguide/windows-support.html#enable-windows-support) for instructions on how to enable Windows support.\n\n### Windows pods fail to launch with image pull error\n\nThe following solution(s) may resolve your issue if you are seeing an error similar to the following when attempting to launch Windows pods.\n\n```\nFailed to pull image \"mcr.microsoft.com/windows/servercore:xxx\": rpc error: code = NotFound desc = failed to pull and unpack image \"mcr.microsoft.com/windows/servercore:xxx\": no match for platform in manifest: not found\n```\n\nThis error typically occurs in a scenario whereby a pod with a given container OS version attempts to be scheduled on an incompatible Windows host OS version.\nWindows requires the host OS version to match the container OS version.\n\n#### Solutions\n\n1. Define your pod's `nodeSelector` to ensure that your containers are scheduled on a compatible OS host version. To learn more, see [Windows container version compatibility](https://learn.microsoft.com/en-us/virtualization/windowscontainers/deploy-containers/version-compatibility).\n\n### Windows pods unable to resolve DNS\nCauses for DNS resolution failure may vary, but in the case where DNS resolution is working for Linux pods but not for Windows pods,\nthen the following solution(s) may resolve your issue.\n\n#### Solution(s)\n1. Verify that the instance role of the Windows node includes the RBAC permission group `eks:kube-proxy-windows` as shown below.\n   This group is required for Windows nodes because in Windows, `kube-proxy` runs as a process on the node, and as such, the node requires the necessary RBAC cluster permissions to allow access to the resources required by `kube-proxy`.\n   For more information, see https://docs.aws.amazon.com/eks/latest/userguide/windows-support.html.\n```yaml\n...\n  username: system:node:{{EC2PrivateDNSName}}\n  groups:\n    - system:bootstrappers\n    - system:nodes\n    - eks:kube-proxy-windows # This is required for Windows DNS resolution to work\n...\n```\n\n### Karpenter incorrectly computes available resources for a node\n\nWhen creating nodes, the allocatable resources Karpenter computed (as seen in logs and `nodeClaim.status.allocatable`) do not always match the allocatable resources on the created node (`node.status.allocatable`) due to some amount of memory being reserved for the hypervisor and underlying OS.\nKarpenter uses the results from `ec2:DescribeInstanceTypes` along with a cache for tracking observed memory capacity to determine the resources available on a node launched with a given instance type.\nThe following computation is used to determine allocatable CPU, memory, and ephemeral storage based on the results returned from `ec2:DescribeInstanceTypes`.\n\n```\n### cpu\nnodeClaim.allocatable.cpu = instance.cpu - kubeReserved.cpu - systemReserved.cpu\n\n### memory\n# If first time launching this instance-type + AMI pair\nnodeClaim.allocatable.memory = (instance.memory  * (1.0 - VM_MEMORY_OVERHEAD_PERCENT)) - kubeReserved.memory - systemReserved.memory - max(evictionSoft.memory.available, evictionHard.memory.available)\n# For subsequent nodes where cached instance-type capacity is available\nnodeClaim.allocatable.memory = ( cached.instance.memory - kubeReserved.memory - systemReserved.memory - max(evictionSoft.memory.available, evictionHard.memory.available)\n\n### ephemeral-storage\nnodeClaim.allocatable.ephemeralStorage = instance.storage - kubeReserved.ephemeralStorage - systemReserved.ephemeralStorage - max(evictionSoft.nodefs.available, evictionHard.nodefs.available)\n```\n\nMost of these factors directly model user configuration (i.e. the KubeletConfiguration options).\nOn the other hand, `VM_MEMORY_OVERHEAD_PERCENT` models an implicit reduction of available memory that varies by instance type and AMI.\nHowever, once a node is created, the actual memory capacity on that node (node.status.capacity.memory) is checked by the controller. The controller caches the observed memory for any subsequent nodes launched with the same AMI and instance type pair, improving accuracy for future nodes.\nFor new combinations of AMI and instance type (i.e., when this pair is launched for the first time), Karpenter will still use the VM_MEMORY_OVERHEAD_PERCENT value as a fallback for estimating allocatable memory.\nThis fallback is necessary because Karpenter can't compute the exact value being modeled ahead of time, so `VM_MEMORY_OVERHEAD_PERCENT` is a [global setting]({{< ref \"./reference/settings.md\" >}}) used across all instance type and AMI combinations.\nThe default value (`7.5%`) has been tuned to closely match reality for the majority of instance types while not overestimating.\nAs a result, Karpenter will typically underestimate the memory available on a node for a given instance type.\nIf you know the real `VM_MEMORY_OVERHEAD_PERCENT` for the specific instances you're provisioning in your cluster, you can tune this value to tighten the bound.\nHowever, this should be done with caution.\nA `VM_MEMORY_OVERHEAD_PERCENT` which results in Karpenter overestimating the memory available on a node can result in Karpenter launching nodes which are too small for your workload.\n\nTo detect instances of Karpenter overestimating resource availability, the following status condition can be monitored:\n\n```bash\n$ kg nodeclaim $NODECLAIM_NAME -o jsonpath='{.status.conditions[?(@.type==\"ConsistentStateFound\")]}'\n```\n\n```json\n{\n    \"type\": \"ConsistentStateFound\",\n    \"status\": \"False\",\n    \"reason\": \"ConsistencyCheckFailed\",\n    \"message\": \"Consistency Check Failed\",\n    \"lastTransitionTime\": \"2024-08-19T20:02:16Z\"\n}\n```\n\nThis can be spot checked like shown above, or monitored via the following metric:\n\n```\noperator_status_condition_count{type=\"ConsistentStateFound\",kind=\"NodeClaim\",status=\"False\"}\n```\n\n### Karpenter Is Unable to Satisfy Topology Spread Constraint\n\nWhen scheduling pods with TopologySpreadConstraints, Karpenter will attempt to spread the pods across all eligible domains.\nEligible domains are determined based on the pod's requirements, e.g. node affinity terms.\nHowever, pod's do not inherit the requirements of compatible NodePools.\n\nFor example, consider the following NodePool and Deployment specs:\n\n```yaml\nappVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\nspec:\n  template:\n    spec:\n      requirements:\n      - key: topology.kubernetes.io/zone\n        operator: Exists\n---\nappVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: np-zonal-constraint\n  labels:\n    project: zone-specific-project\nspec:\n  template:\n    spec:\n      requirements:\n      - key: topology.kubernetes.io/zone\n        operator: In\n        values: ['us-east-1a', 'us-east-1b']\n      # ...\n---\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: inflate\nspec:\n  replicas: 3\n  selector:\n    matchLabels:\n      app: inflate\n  template:\n    metadata:\n      labels:\n        app: inflate\n    spec:\n      nodeSelector:\n        project: zone-specific-project\n      topologySpreadConstraints:\n        - maxSkew: 1\n          topologyKey: topology.kubernetes.io/zone\n          whenUnsatisfiable: DoNotSchedule\n          labelSelector:\n            matchLabels:\n              app: inflate\n```\n\nThis cluster has subnets in three availability zones: `us-east-1a`, `us-east-1b`, and `us-east-1c`.\nNodePool `default` can launch instance types in all three zones, but `np-zonal-constraint` is constrained to two.\nSince Karpenter uses the pod's requirements to derive eligible domains, and the pod does not have any zonal constraints, all three availability zones are considered eligible domains.\nHowever, the only NodePool compatible with the pod's requirements is `np-zonal-constraints`, which can only create instances in two of the three eligible domains.\nKarpenter will succeed to launch the first two instances, for the first two replicas, but will fail to provision capacity for subsequent replicas since it can't provision capacity in the third domain.\n\nIn order to prevent these scenarios, you should ensure that all eligible domains for a pod can be provisioned by compatible NodePools, or constrain the pod such that it's eligble domains match those of the NodePools.\nTo resolve this specific issue, zonal constraints should be added to the pod spec to match the requirements of `np-zonal-constraint`:\n```yaml\nnodeAffinity:\n  requiredDuringSchedulingIgnoredDuringExecution:\n    nodeSelectorTerms:\n      - matchExpressions:\n          - key: topology.kubernetes.io/zone\n            operator: In\n            values: ['us-east-1a', 'us-east-1b']\n```\n\n### Log message of `no instance type met the scheduling requirements or had a required offering` is reported\n\nThis error suggests that there is no instance type available that meets the pod's scheduling requirements. A pod may have resource requests that necessitate a minimum instance size. If the pod is confined to a Node Pool with a specific instance family and size, it might not find an instance type that aligns with its resource needs. Additionally, resource requests from daemonsets are considered when determining if an instance type is compatible with the pod.\n\n\nThe phrase `had a required offering` pertains to the availability of an instance type in a specific location, such as an availability zone. This error can occur if a pod is restricted to a particular availability zone. For instance, consider a pod in a stateful set that previously had an EBS volume attached. If the subnet where the pod is scheduled changes, the pod might end up in a different availability zone than the EBS volume it needs to attach to. This mismatch in availability zones can lead to an error related to the required offering.\n\n## Deprovisioning\n\n### Nodes not deprovisioned\n\nThere 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.\n\n#### Initialization\n\nKarpenter 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]({{<ref \"#nodes-not-initialized\" >}}).\n\n#### Disruption budgets\n\nKarpenter 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.\nKubernetes PDBs let you specify how much of a Deployment, ReplicationController, ReplicaSet, or StatefulSet must be protected from disruptions when pod eviction requests are made.\n\nPDBs can be used to strike a balance by protecting the application's availability while still allowing a cluster administrator to manage the cluster.\nHere 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.\n\n```yaml\napiVersion: policy/v1\nkind: PodDisruptionBudget\nmetadata:\n  name: myapp-pdb\nspec:\n  minAvailable: 4\n  selector:\n    matchLabels:\n      app: myapp\n```\n\nYou can set `minAvailable` or `maxUnavailable` as integers or as a percentage.\nReview 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/).\n\n#### `karpenter.sh/do-not-disrupt` Annotation\n\nIf a pod exists with the annotation `karpenter.sh/do-not-disrupt: 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-disrupt` 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.\n\nIf you want to terminate a node with a `do-not-disrupt` pod, you can simply remove the annotation and the deprovisioning process will continue.\n\n#### Scheduling Constraints (Consolidation Only)\n\nConsolidation 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.\n\n## Node Launch/Readiness\n\n### Node not created\n\nIn some circumstances, Karpenter controller can fail to start up a node.\nFor 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:\n\n```bash\n2022-01-19T18:22:23.366Z ERROR controller.provisioning Could not launch node, launching instances, with fleet error(s), InvalidBlockDeviceMapping: Invalid device name /dev/xvda; ...\n```\n\nYou can see errors like this by viewing Karpenter controller logs:\n\n```bash\nkubectl get pods -A | grep karpenter\n```\n\n```bash\nkarpenter     karpenter-XXXX   2/2     Running   2          21d\n```\n\n```bash\nkubectl logs karpenter-XXXX -c controller -n karpenter | less\n```\n\n### Nodes not initialized\n\nKarpenter 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.\n\nKarpenter determines node initialization using three factors:\n\n1. Node readiness\n2. Expected resources are registered\n3. NodePool startup taints are removed\n\n#### Node Readiness\n\nKarpenter checks the `Ready` condition type and expects it to be `True`.\n\nTo see troubleshooting around what might be preventing nodes from becoming ready, see [Node NotReady]({{<ref \"#node-notready\" >}})\n\n#### Expected resources are registered\n\nKarpenter 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`.\n\nCommon resources that don't register and leave nodes in a non-initialized state:\n\n1. `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\n2. `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.\n\n#### NodePool startup taints are removed\n\nKarpenter expects all startup taints specified in `.spec.template.spec.startupTaints` of the NodePool to be completely removed from node `.spec.taints` before it will consider the node initialized.\n\n### Node NotReady\n\nThere are cases where the node starts, but fails to join the cluster and is marked \"Node NotReady\".\nReasons that a node can fail to join the cluster include:\n\n- Permissions\n- Security Groups\n- Networking\n\nThe easiest way to start debugging is to connect to the instance and get the Kubelet logs.  For an AL2 based node:\n\n```bash\n# List the nodes managed by Karpenter\nkubectl get node -l karpenter.sh/nodepool\n# Extract the instance ID (replace <node-name> with a node name from the above listing)\nINSTANCE_ID=$(kubectl get node <node-name> -ojson | jq -r \".spec.providerID\" | cut -d \\/ -f5)\n# Connect to the instance\naws ssm start-session --target $INSTANCE_ID\n# Check Kubelet logs\nsudo journalctl -u kubelet\n```\n\nFor Bottlerocket, you'll need to get access to the root filesystem:\n\n```bash\n# List the nodes managed by Karpenter\nkubectl get node -l karpenter.sh/nodepool\n# Extract the instance ID (replace <node-name> with a node name from the above listing)\nINSTANCE_ID=$(kubectl get node <node-name> -ojson | jq -r \".spec.providerID\" | cut -d \\/ -f5)\n# Connect to the instance\naws ssm start-session --target $INSTANCE_ID\n# Enter the admin container\nenter-admin-container\n# Check Kubelet logs\njournalctl -D /.bottlerocket/rootfs/var/log/journal -u kubelet.service\n```\n\nHere are examples of errors from Node NotReady issues that you might see from `journalctl`:\n\n- The runtime network not being ready can reflect a problem with IAM role permissions:\n\n  ```\n  KubeletNotReady runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:Network plugin returns error: cni plugin not initialized\n    ```\n\n  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:\n\n  ```bash\n  kubectl get pods -n kube-system | grep aws-node\n  ```\n\n  ```\n  aws-node-?????             1/1     Running   2          20d\n  ```\n\n  ```bash\n  kubectl logs aws-node-????? -n kube-system\n  ```\n\n- Not being able to register the node with the Kubernetes API server indicates an error condition like the following:\n\n  ```\n  Attempting to register node\" node=\"ip-192-168-67-130.ec2.internal\"\n  Unable to register node with API server\" err=\"Unauthorized\" node=\"ip-192-168-67-130.ec2.internal\"\n  Error getting node\" err=\"node \\\"ip-192-168-67-130.ec2.internal\\\" not found\n  Failed to contact API server when waiting for CSINode publishing: Unauthorized\n  ```\n\n  Check the ConfigMap to check whether or not the correct node role is there. For example:\n\n  ```bash\n  kubectl get configmaps -n kube-system aws-auth -o yaml\n  ```\n\n  ```yaml\n  apiVersion: v1\n  data:\n  mapRoles: |\n     - groups:\n        - system:bootstrappers\n        - system:nodes\n        rolearn: arn:aws:iam::973227887653:role/eksctl-johnw-karpenter-demo-NodeInstanceRole-72CV61KQNOYS\n        username: system:node:{{EC2PrivateDNSName}}\n     - groups:\n        - system:bootstrappers\n        - system:nodes\n        rolearn: arn:aws:iam::973227887653:role/KarpenterNodeRole-johnw-karpenter-demo\n        username: system:node:{{EC2PrivateDNSName}}\n  mapUsers: |\n      []\n  kind: ConfigMap\n  ...\n    ```\n\nIf 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:\n\n- Your UserData (in `/var_log/cloud-init-output.log` and `/var_log/cloud-init.log`)\n- Your kubelets (`/kubelet/kubelet.log`)\n- Your networking pod logs (`/var_log/aws-node`)\n\nReach 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.\n\n### Nodes stuck in pending and not running the kubelet due to outdated CNI\n\nIf 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`:\n\n> No entry for c6i.xlarge in /etc/eks/eni-max-pods.txt\n\nThis 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).\n\n### Node terminates before ready on failed encrypted EBS volume\n\nIf 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.\nThis issue also applies to [Block Device Mappings]({{<ref \"./concepts/nodeclasses/#block-device-mappings\" >}}) specified in the EC2NodeClass.\nIn either case, this results in the node terminating almost immediately upon creation.\n\nKeep in mind that it is possible that EBS Encryption can be enabled without your knowledge.\nEBS encryption could have been enabled by an account administrator or by default on a per region basis.\nSee [Encryption by default](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html#encryption-by-default) for details.\n\nTo 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:\n\n```json\n[\n    {\n        \"Sid\": \"Allow access through EBS for all principals in the account that are authorized to use EBS\",\n        \"Effect\": \"Allow\",\n        \"Principal\": {\n            \"AWS\": \"*\"\n        },\n        \"Action\": [\n            \"kms:Encrypt\",\n            \"kms:Decrypt\",\n            \"kms:ReEncrypt*\",\n            \"kms:GenerateDataKey*\",\n            \"kms:CreateGrant\",\n            \"kms:DescribeKey\"\n        ],\n        \"Resource\": \"*\",\n        \"Condition\": {\n            \"StringEquals\": {\n            \"kms:ViaService\": \"ec2.${AWS_REGION}.amazonaws.com\",\n            \"kms:CallerAccount\": \"${AWS_ACCOUNT_ID}\"\n            }\n        }\n    },\n    {\n        \"Sid\": \"Allow direct access to key metadata to the account\",\n        \"Effect\": \"Allow\",\n        \"Principal\": {\n            \"AWS\": \"arn:aws:iam::${AWS_ACCOUNT_ID}:root\"\n        },\n        \"Action\": [\n            \"kms:Describe*\",\n            \"kms:Get*\",\n            \"kms:List*\",\n            \"kms:RevokeGrant\"\n        ],\n        \"Resource\": \"*\"\n    }\n]\n```\n\n### Node is not deleted, even though `ttlSecondsUntilExpired` is set or the node is empty\n\nThis 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.\n\n### Log message of `inflight check failed for node, Expected resource \"vpc.amazonaws.com/pod-eni\" didn't register on the node` is reported\n\nThis error indicates that the `vpc.amazonaws.com/pod-eni` resource was never reported on the node. 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.\n\n### AWS Node Termination Handler (NTH) interactions\nKarpenter [doesn't currently support draining and terminating on spot rebalance recommendations]({{< ref \"concepts/disruption#interruption\" >}}). Users who want support for both drain and terminate on spot interruption as well as drain and termination on spot rebalance recommendations may install Node Termination Handler (NTH) on their clusters to support this behavior.\n\nThese two components do not share information between each other, meaning if you have drain and terminate functionality enabled on NTH, NTH may remove a node for a spot rebalance recommendation. Karpenter will replace the node to fulfill the pod capacity that was being fulfilled by the old node; however, Karpenter won't be aware of the reason that that node was terminated. This means that Karpenter may launch the same instance type that was just deprovisioned, causing a spot rebalance recommendation to be sent again. This can result in very short-lived instances where NTH continually removes nodes and Karpeneter re-launches the same instance type over and over again.\n\nKarpenter doesn't recommend reacting to spot rebalance recommendations when running Karpenter with spot nodes; however, if you absolutely require this functionality, note that the above scenario is possible.\nSpot instances are time limited and, therefore, interruptible. When a signal is sent by AWS, it triggers actions from NTH and Karpenter, where the former signals a shutdown and the later provisions, creating a recursive situation.\nThis can be mitigated by either completely removing NTH or by setting the following values:\n\n* enableSpotInterruptionDraining: If false, do not drain nodes when the spot interruption termination notice is received. Only used in IMDS mode.\nenableSpotInterruptionDraining: false\n\n* enableRebalanceDrainin: If true, drain nodes when the rebalance recommendation notice is received. Only used in IMDS mode.\nenableRebalanceDraining: false\n\n## EC2NodeClass Validation\n\n### Force Validation Refresh\n\nIf you believe that Karpenter's EC2NodeClass validation cache is stale (e.g., after updating IAM permissions), you can force Karpenter to refresh the cache by adding any annotation on the EC2NodeClass.\n\n## Pricing\n\n### Stale pricing data on isolated subnet\n\nThe following pricing-related error occurs if you are running Karpenter in an isolated private subnet (no Internet egress via IGW or NAT gateways):\n\n```text\nERROR   controller.aws.pricing  updating on-demand pricing, RequestError: send request failed\ncaused by: Post \"https://api.pricing.us-east-1.amazonaws.com/\": dial tcp 52.94.231.236:443: i/o timeout; RequestError: send request failed\ncaused 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\"}\n```\n\nThis 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).\nTo 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.\nTo disable pricing lookups and avoid the error messages, set the `AWS_ISOLATED_VPC` environment variable (or the `--aws-isolated-vpc` option) to true.\nSee [Environment Variables / CLI Flags]({{<ref \"./reference/settings#environment-variables--cli-flags\" >}}) for details.\n"
  },
  {
    "path": "website/content/en/v1.8/upgrading/_index.md",
    "content": "---\ntitle: \"Upgrading\"\nlinkTitle: \"Upgrading\"\nweight: 30\ndescription: >\n  Upgrading Karpenter guide and reference\ncascade:\n  type: docs\n---\n\n"
  },
  {
    "path": "website/content/en/v1.8/upgrading/compatibility.md",
    "content": "---\ntitle: \"Compatibility\"\nlinkTitle: \"Compatibility\"\nweight: 20\ndescription: >\n  Compatibility issues for Karpenter\n---\n\n# Compatibility\n\nTo make upgrading easier we aim to minimize the introduction of breaking changes.\nBefore you begin upgrading Karpenter, consider Karpenter compatibility issues related to Kubernetes and the NodePool API (previously Provisioner).\n\n## Compatibility Matrix\n\n[comment]: <> (the content below is generated from hack/docs/compataiblitymetrix_gen_docs.go)\n\n| KUBERNETES |   1.28   |   1.29   |   1.30   |   1.31    |  1.32   |  1.33   |  1.34   |\n|------------|----------|----------|----------|-----------|---------|---------|---------|\n| karpenter  | \\>= 0.31 | \\>= 0.34 | \\>= 0.37 | \\>= 1.0.5 | \\>= 1.2 | \\>= 1.5 | \\>= 1.6 |\n\n[comment]: <> (end docs generated content from hack/docs/compataiblitymetrix_gen_docs.go)\n\n## Compatibility issues\n\nWhen we introduce a breaking change, we do so only as described in this document.\n\nKarpenter follows [Semantic Versioning 2.0.0](https://semver.org/) in its stable release versions, while in\nmajor version zero (`0.y.z`) [anything may change at any time](https://semver.org/#spec-item-4).\nHowever, to further protect users during this phase we will only introduce breaking changes in minor releases (releases that increment y in x.y.z).\nNote this does not mean every minor upgrade has a breaking change as we will also increment the\nminor version when we release a new feature.\n\nUsers should therefore check to see if there is a breaking change every time they are upgrading to a new minor version.\n\n### How Do We Break Incompatibility?\n\nWhen there is a breaking change we will:\n\n* Increment the minor version when in major version 0\n* Add a permanent separate section named `upgrading to x.y.z+` under [release upgrade notes](#release-upgrade-notes)\n  clearly explaining the breaking change and what needs to be done on the user side to ensure a safe upgrade\n* 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\n\n### How Do We Find Incompatibilities?\n\nBesides the peer review process for all changes to the code base we also do the followings in order to find\nincompatibilities:\n* (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\n* (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\n\n### Security Patches\n\nWhile we are in major version 0 we will not release security patches to older versions.\nRather we provide the patches in the latest versions.\nWhen at major version 1 we will have an EOL (end of life) policy where we provide security patches\nfor a subset of older versions and deprecate the others.\n\n## Release Types\n\nKarpenter offers three types of releases. This section explains the purpose of each release type and how the images for each release type are tagged in our [public image repository](https://gallery.ecr.aws/karpenter).\n\n### Stable Releases\n\nStable releases are the only recommended versions for production environments. Stable releases are tagged with a semantic version (e.g. `0.35.0`). Note that stable releases prior to `0.35.0` are prefixed with a `v` (e.g. `v0.34.0`).\n\n### Release Candidates\n\nWe consider having release candidates for major and important minor versions. Our release candidates are tagged like `x.y.z-rc.0`, `x.y.z-rc.1`. The release candidate will then graduate to `x.y.z` as a stable release.\nBy 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.\nNote that, like the stable releases, release candidates prior to `0.35.0` are prefixed with a `v`.\n\n### Snapshot Releases\n\nWe release a snapshot release for every commit that gets merged into [`aws/karpenter-provider-aws`](https://www.github.com/aws/karpenter-provider-aws). This enables users to immediately try a new feature or fix right after it's merged rather than waiting days or weeks for release.\n\nSnapshot releases are not made available in the same public ECR repository as other release types, they are instead published to a separate private ECR repository.\nHelm charts are published to `oci://{{< param \"snapshot_repo.account_id\" >}}.dkr.ecr.{{< param \"snapshot_repo.region\" >}}.amazonaws.com/karpenter/snapshot/karpenter` and are tagged with the git commit hash prefixed by the Karpenter major version (e.g. `0-fc17bfc89ebb30a3b102a86012b3e3992ec08adf`).\nAnyone with an AWS account can pull from this repository, but must first authenticate:\n\n```bash\naws ecr get-login-password --region {{< param \"snapshot_repo.region\" >}} | docker login --username AWS --password-stdin {{< param \"snapshot_repo.account_id\" >}}.dkr.ecr.{{< param \"snapshot_repo.region\" >}}.amazonaws.com\n```\n\n{{% alert title=\"Note\" color=\"warning\" %}}\nSnapshot releases are suitable for testing, and troubleshooting but they should not be used in production environments. Snapshot releases are ephemeral and will be removed 90 days after they were published.\n{{% /alert %}}\n"
  },
  {
    "path": "website/content/en/v1.8/upgrading/upgrade-guide.md",
    "content": "---\ntitle: \"Upgrade Guide\"\nlinkTitle: \"Upgrade Guide\"\nweight: 10\ndescription: >\n  Learn about upgrading Karpenter\n---\n\nKarpenter is a controller that runs in your cluster, but it is not tied to a specific Kubernetes version, as the Cluster Autoscaler is.\nUse your existing upgrade mechanisms to upgrade your core add-ons in Kubernetes and keep Karpenter up to date on bug fixes and new features.\nThis guide contains information needed to upgrade to the latest release of Karpenter, along with compatibility issues you need to be aware of when upgrading from earlier Karpenter versions.\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nWith the release of Karpenter v1.0.0, the Karpenter team has dropped support for karpenter versions v0.36 and below. We recommend upgrading to the latest version of Karpenter and keeping Karpenter up-to-date for bug fixes and new features.\n{{% /alert %}}\n\nWhen upgrading Karpenter in production environments, implementing a robust CI/CD pipeline approach is crucial. Improper upgrades can lead to significant disruptions including failed node provisioning, orphaned nodes, interrupted workloads, and potential cost implications from unmanaged scaling. Given Karpenter's critical role in cluster scaling and workload management, untested upgrades could result in production outages or resource allocation issues that directly impact application availability and performance. Therefore, we recommend following these structured steps:\n\n#### Pre-upgrade Validation\n\n- Validate all required IAM permissions (node role, controller role)\n- Check webhook configurations\n- Back up existing NodePool and NodeClass configurations\n- Document current version and settings\n\n#### Staging Environment Setup\n\n- Create or verify staging environment\n- Update version tags in Helm values or manifests\n- Configure automated validation tests\n\n#### Staging Deployment\n\n- Deploy to staging environment\n- Run comprehensive tests including node provisioning\n- Verify controller health\n- Test NodePool and NodeClass functionality\n- Monitor system behavior\n\n#### Production Approval and Deployment\n\n- Require manual approval/review\n- Schedule maintenance window if needed\n- Execute production deployment\n- Monitor deployment progress\n- Verify all components are functioning\n\n#### Post-Deployment\n\n- Monitor system health\n- Verify node provisioning\n- Keep rollback configurations accessible\n- Update documentation\n\nHere are few recommended CI/CD Pipeline Options:\n\n- GitHub Actions - Excellent for GitHub-hosted repositories with built-in Kubernetes support\n- GitLab CI - Strong container-native pipeline with integrated Kubernetes functionality\n- ArgoCD - Specialized for GitOps workflows with Kubernetes\n- AWS CodePipeline - Native integration with EKS and AWS services\n- Flux - Open-source GitOps tool for Kubernetes with automatic deployment capabilities\n\nEach pipeline tool can be configured to handle the Karpenter upgrade workflow, but choose based on your existing infrastructure, team expertise, and specific requirements for automation and integration.\n\n\n### CRD Upgrades\n\nKarpenter ships with a few Custom Resource Definitions (CRDs). These CRDs are published:\n* 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:\n  ```bash\n  KARPENTER_NAMESPACE=kube-system\n  helm upgrade --install karpenter-crd oci://public.ecr.aws/karpenter/karpenter-crd --version x.y.z --namespace \"${KARPENTER_NAMESPACE}\" --create-namespace\n  ```\n* As part of the helm chart [karpenter](https://gallery.ecr.aws/karpenter/karpenter) ([source](https://github.com/aws/karpenter/blob/main/charts/karpenter/crds)).\n  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.\n  Subsequent chart upgrades will not add or remove CRDs, even if the CRDs have changed.\n\nCRDs are coupled to the version of Karpenter, and should be updated along with Karpenter.\nFor this reason, we recommend using the independent `karpenter-crd` chart to manage CRDs.\n\n{{% alert title=\"Note\" color=\"warning\" %}}\nIf you get the error `invalid ownership metadata; label validation error:` while installing the `karpenter-crd` chart from an older version of Karpenter, follow the [Troubleshooting Guide]({{<ref \"../troubleshooting/#helm-error-when-installing-the-karpenter-crd-chart\" >}}) for details on how to resolve these errors.\n{{% /alert %}}\n\n<!--\nWHEN CREATING A NEW SECTION OF THE UPGRADE GUIDANCE FOR NEWER VERSIONS, ENSURE THAT YOU COPY THE BETA API ALERT SECTION FROM THE LAST RELEASE TO PROPERLY WARN USERS OF THE RISK OF UPGRADING WITHOUT GOING TO 0.32.x FIRST\n-->\n\n### Upgrading to `1.8.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter `1.1.0` drops the support for `v1beta1` APIs.\n**Do not** upgrade to `1.1.0`+ without following the [Migration Guide]({{<ref \"../../v1.0/upgrading/v1-migration.md#before-upgrading-to-v110\">}}).\n\nKarpenter `v1.8.4` release contains a regression which may prevent Karpenter from scheduling pods with specific TopologySpreadConstraint configurations. Please do not upgrade to this version. For more details, see the following issue: https://github.com/kubernetes-sigs/karpenter/issues/2785\n{{% /alert %}}\n\n* This version adds support for [Static Capacity](https://github.com/kubernetes-sigs/karpenter/pull/2521). Make sure to upgrade your karpenter CRDs to use this feature.\n\nFull Changelog:\n* https://github.com/aws/karpenter-provider-aws/releases/tag/v1.8.0\n* https://github.com/kubernetes-sigs/karpenter/releases/tag/v1.8.0\n\n### Upgrading to `1.7.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter `1.1.0` drops the support for `v1beta1` APIs.\n**Do not** upgrade to `1.1.0`+ without following the [Migration Guide]({{<ref \"../../v1.0/upgrading/v1-migration.md#before-upgrading-to-v110\">}}).\n{{% /alert %}}\n\n* Instance profile path changes:\n  - Karpenter now creates instance profiles with a specific path structure `/karpenter/{region}/{cluster-name}/{nodeclass-uid}/` instead of the generic root path `/`\n  - This change helps with better organization and management of instance profiles\n  - No action is required for existing instance profiles, but new ones will use this path structure\n  - Additional IAM permissions required:\n    - The following new IAM permissions are required for the Karpenter controller role:\n      - `iam:ListInstanceProfiles`: Required for managing instance profiles\n* The `karpenter_pods_pods_drained_total` metric has been renamed to `karpenter_pods_drained_total`\n* The `karpenter_nodeclaims_disrupted_total` metric reason `liveness` has been renamed to `registration_timeout`\n* Pods with `ResourceClaim` requests are explicitly ignored. Older revisions of Karpenter are not aware of the field and would ignore those requests. DRA is not currently supported by Karpenter.\n\nFull Changelog:\n* https://github.com/aws/karpenter-provider-aws/releases/tag/v1.7.0\n* https://github.com/kubernetes-sigs/karpenter/releases/tag/v1.7.0\n\n### Upgrading to `1.6.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter `1.1.0` drops the support for `v1beta1` APIs.\n**Do not** upgrade to `1.1.0`+ without following the [Migration Guide]({{<ref \"../../v1.0/upgrading/v1-migration.md#before-upgrading-to-v110\">}}).\n{{% /alert %}}\n\n* Native ODCR support has graduated to beta and is enabled by default.\n  If you were previously using open ODCRs with Karpenter and have not already migrated to native ODCR support, review the [native ODCR support guide]({{< relref \"../tasks/odcrs\" >}}) before upgrading.\n* Support a new configuration option `MinValuesPolicy` which controls how the Karpenter scheduler treats min values. Options include 'Strict' (fails scheduling when min values can't be met) and 'BestEffort' (relaxes min values when they can't be met). Default is 'Strict' to preserve existing behavior.\n* Support a new configuration option `DisableDryRun` which disables the dry run calls made during EC2NodeClass validation (1.6.2+).\n\nFull Changelog:\n* https://github.com/aws/karpenter-provider-aws/releases/tag/v1.6.0\n* https://github.com/kubernetes-sigs/karpenter/releases/tag/v1.6.0\n\n### Upgrading to `1.5.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter `1.1.0` drops the support for `v1beta1` APIs.\n**Do not** upgrade to `1.1.0`+ without following the [Migration Guide]({{<ref \"../../v1.0/upgrading/v1-migration.md#before-upgrading-to-v110\">}}).\n{{% /alert %}}\n\n* No breaking changes 🎉\n\nFull Changelog:\n* https://github.com/aws/karpenter-provider-aws/releases/tag/v1.5.0\n* https://github.com/kubernetes-sigs/karpenter/releases/tag/v1.5.0\n\n### Upgrading to `1.4.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter `1.1.0` drops the support for `v1beta1` APIs.\n**Do not** upgrade to `1.1.0`+ without following the [Migration Guide]({{<ref \"../../v1.0/upgrading/v1-migration.md#before-upgrading-to-v110\">}}).\n{{% /alert %}}\n\n* No breaking changes 🎉\n\nFull Changelog:\n* https://github.com/aws/karpenter-provider-aws/releases/tag/v1.4.0\n* https://github.com/kubernetes-sigs/karpenter/releases/tag/v1.4.0\n\n### Upgrading to `1.3.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter `1.1.0` drops the support for `v1beta1` APIs.\n**Do not** upgrade to `1.1.0`+ without following the [Migration Guide]({{<ref \"../../v1.0/upgrading/v1-migration.md#before-upgrading-to-v110\">}}).\n{{% /alert %}}\n\n* `karpenter_ignored_pod_count` alpha metric had its name changed to `karpenter_scheduler_ignored_pod_count`\n* With the `ReservedCapacity` feature flag, Karpenter introduces a new `karpenter.sh/capacity-type` value (`reserved`). This means any applications that explicitly select on `on-demand` with a `nodeSelector` and want to utilize ODCR capacity may need to update their requirements to use `nodeAffinity` to opt-in to using both `reserved` and `on-demand` capacity.\n\n### Upgrading to `1.2.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter `1.1.0` drops the support for `v1beta1` APIs.\n**Do not** upgrade to `1.1.0`+ without following the [Migration Guide]({{<ref \"../../v1.0/upgrading/v1-migration.md#before-upgrading-to-v110\">}}).\n{{% /alert %}}\n\n* We have recently updated our labels on `karpenter_voluntary_disruption_queue_failures_total` and `karpenter_nodeclaims_disrupted_total` reason label from camille case to snake case. Therefore these reason labels values on those metrics have now been update as such:\n  - Drifted -> drifted\n  - Empty -> empty\n  - Expired -> expired\n  - Underutilized -> underutilized\n* Nodeclass status and termination controllers have been merged into a single `nodeclass` controller. If you are relying on logs or metrics for `nodeclass.termination` or `nodeclass.status` controllers, please make sure that you update them to reference the new `nodeclass` controller.\n\n### Upgrading to `1.1.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter `1.1.0` drops the support for `v1beta1` APIs.\n**Do not** upgrade to `1.1.0`+ without following the [Migration Guide]({{<ref \"../../v1.0/upgrading/v1-migration.md#before-upgrading-to-v110\">}}).\n{{% /alert %}}\n\n* Support for the `v1beta1` compatiblity annotations have been dropped. Ensure you have completed migration before upgrading to `v1.1.0`. Refer to the [migration guide]({{<ref \"../../v1.0/upgrading/v1-migration.md#kubelet-configuration-migration\">}}) for more details.\n* `nodeClassRef.group` and `nodeClassRef.kind` are strictly required. Ensure these values are set for all `NodePools` / `NodeClaims` before upgrading.\n* Bottlerocket AMIFamily now supports `instanceStorePolicy: RAID0`. This means that Karpenter will auto-generate userData to RAID0 your instance store volumes (similar to AL2 and AL2023) when specifying this value.\n  * Note: This userData configuration is _only_ valid on Bottlerocket v1.22.0+. If you are using an earlier version of a Bottlerocket image (< v1.22.0) with `amiFamily: Bottlerocket` and `instanceStorePolicy: RAID0`, nodes will fail to join the cluster.\n* The AWS Neuron accelerator well known name label (`karpenter.k8s.aws/instance-accelerator-name`) values now reflect their correct names of `trainium`, `inferentia`, and `inferentia2`. Previously, all Neuron accelerators were assigned the label name of `inferentia`.\n* Karpenter drops the internal `karpenter.k8s.aws/cluster` tag used for launch template management in favor of `eks:eks-cluster-name` and consistency with other Karpenter-provisioned resources\n* Generic operator metrics have been have been deprecated and replaced by resource-specific metrics.\n\n### Upgrading to `1.0.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter `1.0.0` introduces the `v1` APIs and uses [conversion webhooks](https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definition-versioning/#webhook-conversion) to support existing `v1beta1` APIs.\n**Do not** upgrade to `1.0.0`+ without following the [`v1` Migration Guide]({{<ref \"../../v1.0/upgrading/v1-migration.md\">}}).\n{{% /alert %}}\n\nRefer to the `v1` Migration Guide for the [full changelog]({{<ref \"../../v1.0/upgrading/v1-migration.md#changelog\">}}).\n\n### Upgrading to `0.37.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\n`0.33.0`+ _only_ supports Karpenter v1beta1 APIs and will not work with existing Provisioner, AWSNodeTemplate or Machine alpha APIs. Do not upgrade to `0.37.0`+ without first [upgrading to `0.32.x`]({{<ref \"#upgrading-to-0320\" >}}). This version supports both the alpha and beta APIs, allowing you to migrate all of your existing APIs to beta APIs without experiencing downtime.\n{{% /alert %}}\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nWebhooks have been re-enabled by default starting in `0.37.3` to faciliate migration to `v1.0`.\nIf your cluster has network policies that block Ingress then ports `8000`, `8001`, `8081`, `8443` will need to be allowlisted.\nYou may still choose to disable webhooks through the helm chart.\n{{% /alert %}}\n\n\n* Karpenter now adds a readiness status condition to the EC2NodeClass. Make sure to upgrade your Custom Resource Definitions before proceeding with the upgrade. Failure to do so will result in Karpenter being unable to provision new nodes.\n* Karpenter no longer updates the logger name when creating controller loggers. We now adhere to the controller-runtime standard, where the logger name will be set as `\"logger\": \"controller\"` always and the controller name will be stored in the structured value `\"controller\"`\n* Karpenter updated the NodeClass controller naming in the following way: `nodeclass` -> `nodeclass.status`, `nodeclass.hash`, `nodeclass.termination`\n* Karpenter's NodeClaim status conditions no longer include the `severity` field\n\n### Upgrading to `0.36.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\n`0.33.0`+ _only_ supports Karpenter v1beta1 APIs and will not work with existing Provisioner, AWSNodeTemplate or Machine alpha APIs. Do not upgrade to `0.36.0`+ without first [upgrading to `0.32.x`]({{<ref \"#upgrading-to-0320\" >}}). This version supports both the alpha and beta APIs, allowing you to migrate all of your existing APIs to beta APIs without experiencing downtime.\n{{% /alert %}}\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nv0.36.x introduces update to drift that restricts rollback. When rolling back from >=v0.36.0, note that v0.32.9+, v0.33.4+, v0.34.5+, v0.35.4+ are the patch versions that support rollback. If Karpenter is rolled back to an older patch version, Karpenter can potentially drift all the nodes in the cluster.\n{{% /alert %}}\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nWebhooks have been re-enabled by default starting in `0.36.5` to faciliate migration to `v1.0`.\nIf your cluster has network policies that block Ingress then ports `8000`, `8001`, `8081`, `8443` will need to be allowlisted.\nYou may still choose to disable webhooks through the helm chart.\n{{% /alert %}}\n\n* Karpenter changed the name of the `karpenter_cloudprovider_instance_type_price_estimate` metric to `karpenter_cloudprovider_instance_type_offering_price_estimate` to align with the new `karpenter_cloudprovider_instance_type_offering_available` metric. The `region` label was also dropped from the metric, since this can be inferred from the environment that Karpenter is running in.\n\n### Upgrading to `0.35.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\n`0.33.0`+ _only_ supports Karpenter v1beta1 APIs and will not work with existing Provisioner, AWSNodeTemplate or Machine alpha APIs. Do not upgrade to `0.35.0`+ without first [upgrading to `0.32.x`]({{<ref \"#upgrading-to-0320\" >}}). This version supports both the alpha and beta APIs, allowing you to migrate all of your existing APIs to beta APIs without experiencing downtime.\n{{% /alert %}}\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nWebhooks have been re-enabled by default starting in `0.35.8` to faciliate migration to `v1.0`.\nIf your cluster has network policies that block Ingress then ports `8000`, `8001`, `8081`, `8443` will need to be allowlisted.\nYou may still choose to disable webhooks through the helm chart.\n{{% /alert %}}\n\n* Karpenter OCI tags and Helm chart version are now valid semantic versions, meaning that the `v` prefix from the git tag has been removed and they now follow the `x.y.z` pattern.\n\n### Upgrading to `0.34.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\n`0.33.0`+ _only_ supports Karpenter v1beta1 APIs and will not work with existing Provisioner, AWSNodeTemplate or Machine alpha APIs. Do not upgrade to `0.34.0`+ without first [upgrading to `0.32.x`]({{<ref \"#upgrading-to-0320\" >}}). This version supports both the alpha and beta APIs, allowing you to migrate all of your existing APIs to beta APIs without experiencing downtime.\n{{% /alert %}}\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nThe Ubuntu EKS optimized AMI has moved from 20.04 to 22.04 for Kubernetes 1.29+. This new AMI version is __not currently__ supported for users relying on AMI auto-discovery with the Ubuntu AMI family. More details can be found in this [GitHub issue](https://github.com/aws/karpenter-provider-aws/issues/5572). Please review this issue before upgrading to Kubernetes 1.29 if you are using the Ubuntu AMI family. Upgrading to 1.29 without making any changes to your EC2NodeClass will result in Karpenter being unable to create new nodes.\n{{% /alert %}}\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nWebhooks have been re-enabled by default starting in `0.34.9` to faciliate migration to `v1.0`.\nIf your cluster has network policies that block Ingress then ports `8000`, `8001`, `8081`, `8443` will need to be allowlisted.\nYou may still choose to disable webhooks through the helm chart.\n{{% /alert %}}\n\n* Karpenter now supports `nodepool.spec.disruption.budgets`, which allows users to control the speed of disruption in the cluster. Since this requires an update to the Custom Resource, before upgrading, you should re-apply the new updates to the CRDs. Check out [Disruption Budgets]({{<ref \"../concepts/disruption#disruption-budgets\" >}}) for more.\n* With Disruption Budgets, Karpenter will disrupt multiple batches of nodes simultaneously, which can result in overall quicker scale-down of your cluster. Before `0.34.0`, Karpenter had a hard-coded parallelism limit for each type of disruption. In `0.34.0`+, Karpenter will now disrupt at most 10% of nodes for a given NodePool. There is no setting that will be perfectly equivalent with the behavior prior to `0.34.0`. When considering how to configure your budgets, please refer to the following limits for versions prior to `0.34.0`:\n  * `Empty Expiration / Empty Drift / Empty Consolidation`: infinite parallelism\n  * `Non-Empty Expiration / Non-Empty Drift / Single-Node Consolidation`: one node at a time\n  * `Multi-Node Consolidation`: max 100 nodes\n* To support Disruption Budgets, `0.34.0`+ includes critical changes to Karpenter's core controllers, which allows Karpenter to consider multiple batches of disrupting nodes simultaneously. This increases Karpenter's performance with the potential downside of higher CPU and memory utilization from the Karpenter pod. While the magnitude of this difference varies on a case-by-case basis, when upgrading to Karpenter `0.34.0`+, please note that you may need to increase the resources allocated to the Karpenter controller pods.\n* Karpenter now adds a default `podSecurityContext` that configures the `fsgroup: 65536` of volumes in the pod. If you are using sidecar containers, you should review if this configuration is compatible for them. You can disable this default `podSecurityContext` through helm by performing `--set podSecurityContext=null` when installing/upgrading the chart.\n* The `dnsPolicy` for the Karpenter controller pod has been changed back to the Kubernetes cluster default of `ClusterFirst`. Setting our `dnsPolicy` to `Default` (confusingly, this is not the Kubernetes cluster default) caused more confusion for any users running IPv6 clusters with dual-stack nodes or anyone running Karpenter with dependencies on cluster services (like clusters running service meshes). This change may be breaking for any users on Fargate or MNG who were allowing Karpenter to manage their in-cluster DNS service (`core-dns` on most clusters). If you still want the old behavior here, you can change the `dnsPolicy` to point to use `Default` by setting the helm value on install/upgrade with `--set dnsPolicy=Default`. More details on this issue can be found in the following Github issues: [#2186](https://github.com/aws/karpenter-provider-aws/issues/2186) and [#4947](https://github.com/aws/karpenter-provider-aws/issues/4947).\n* Karpenter now disallows `nodepool.spec.template.spec.resources` to be set. The webhook validation never allowed `nodepool.spec.template.spec.resources`. We are now ensuring that CEL validation also disallows `nodepool.spec.template.spec.resources` to be set. If you were previously setting the resources field on your NodePool, ensure that you remove this field before upgrading to the newest version of Karpenter or else updates to the resource may fail on the new version.\n\n### Upgrading to `0.33.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\n`0.33.0`+ _only_ supports Karpenter v1beta1 APIs and will not work with existing Provisioner, AWSNodeTemplate or Machine alpha APIs. **Do not** upgrade to `0.33.0`+ without first [upgrading to `0.32.x`]({{<ref \"#upgrading-to-0320\" >}}). This version supports both the alpha and beta APIs, allowing you to migrate all of your existing APIs to beta APIs without experiencing downtime.\n{{% /alert %}}\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nWebhooks have been re-enabled by default starting in `0.33.8` to faciliate migration to `v1.0`.\nIf your cluster has network policies that block Ingress then ports `8000`, `8001`, `8081`, `8443` will need to be allowlisted.\nYou may still choose to disable webhooks through the helm chart.\n{{% /alert %}}\n\n* Karpenter no longer supports using the `karpenter.sh/provisioner-name` label in NodePool labels and requirements or in application node selectors, affinities, or topologySpreadConstraints. If you were previously using this label to target applications to specific Provisioners, you should update your applications to use the `karpenter.sh/nodepool` label instead before upgrading. If you upgrade without changing these labels, you may begin to see pod scheduling failures for these applications.\n* Karpenter now tags `spot-instances-request` with the same tags that it tags instances, volumes, and primary ENIs. This means that you will now need to add `ec2:CreateTags` permission for `spot-instances-request`. You can also further scope your controller policy for the `ec2:RunInstances` action to require that it launches the `spot-instances-request` with these specific tags. You can view an example of scoping these actions in the [Getting Started Guide's default CloudFormation controller policy](https://github.com/aws/karpenter/blob/v0.33.0/website/content/en/preview/getting-started/getting-started-with-karpenter/cloudformation.yaml#L61).\n* We now recommend that you set the installation namespace for your Karpenter controllers to `kube-system` to denote Karpenter as a critical cluster component. This ensures that requests from the Karpenter controllers are treated with higher priority by assigning them to a different [PriorityLevelConfiguration](https://kubernetes.io/docs/concepts/cluster-administration/flow-control/#prioritylevelconfiguration) than generic requests from other namespaces. For more details on API Priority and Fairness, read the [Kubernetes API Priority and Fairness Conceptual Docs](https://kubernetes.io/docs/concepts/cluster-administration/flow-control/). Note: Changing the namespace for your Karpenter release will cause the service account namespace to change. If you are using IRSA for authentication with AWS, you will need to change scoping set in the controller's trust policy from `karpenter:karpenter` to `kube-system:karpenter`.\n* ~~`0.33.0` disables mutating and validating webhooks by default in favor of using [Common Expression Language for CRD validation](https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/#validation). The Common Expression Language Validation Feature [is enabled by default on EKS 1.25](https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/#validation-rules). If you are using Kubernetes version >= 1.25, no further action is required. If you are using a Kubernetes version below 1.25, you now need to set `DISABLE_WEBHOOK=false` in your container environment variables or `--set webhook.enabled=true` if using Helm. View the [Webhook Support Deprecated in Favor of CEL Section of the v1beta1 Migration Guide]({{<ref \"../../v1.0/upgrading/v1beta1-migration#webhook-support-deprecated-in-favor-of-cel\" >}}).~~\n* `0.33.0` drops support for passing settings through the `karpenter-global-settings` ConfigMap. You should pass settings through the container environment variables in the Karpenter deployment manifest. View the [Global Settings Section of the v1beta1 Migration Guide]({{<ref \"../../v1.0/upgrading/v1beta1-migration#global-settings\" >}}) for more details.\n* `0.33.0` enables `Drift=true` by default in the `FEATURE_GATES`. If you previously didn't enable the feature gate, Karpenter will now check if there is a difference between the desired state of your nodes declared in your NodePool and the actual state of your nodes. View the [Drift Section of Disruption Conceptual Docs]({{<ref \"../concepts/disruption#drift\" >}}) for more details.\n* `0.33.0` drops looking up the `zap-logger-config` through ConfigMap discovery. Instead, Karpenter now expects the logging config to be mounted on the filesystem if you are using this to configure Zap logging. This is not enabled by default, but can be enabled through `--set logConfig.enabled=true` in the Helm values. If you are setting any values in the `logConfig` from the `0.32.x` upgrade, such as `logConfig.logEncoding`, note that you will have to explicitly set `logConfig.enabled=true` alongside it. Also, note that setting the Zap logging config is a deprecated feature in beta and is planned to be dropped at v1. View the [Logging Configuration Section of the v1beta1 Migration Guide]({{<ref \"../../v1.0/upgrading/v1beta1-migration#logging-configuration-is-no-longer-dynamic\" >}}) for more details.\n* `0.33.0` change the default `LOG_LEVEL` from `debug` to `info` by default. If you are still enabling logging configuration through the `zap-logger-config`, no action is required.\n* `0.33.0` drops support for comma delimited lists on tags for `SubnetSelectorTerm`, `SecurityGroupsSelectorTerm`, and `AMISelectorTerm`. Karpenter now supports multiple terms for each of the selectors which means that we can specify a more explicit OR-based constraint through separate terms rather than a comma-delimited list of values.\n\n### Upgrading to `0.32.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter `0.32.0` introduces v1beta1 APIs, including _significant_ changes to the API and installation procedures for the Karpenter controllers. **Do not** upgrade to `0.32.0`+ without referencing the [v1beta1 Migration Upgrade Procedure]({{<ref \"../../v1.0/upgrading/v1beta1-migration#upgrade-procedure\" >}}).\n\nThis version includes **dual support** for both alpha and beta APIs to ensure that you can slowly migrate your existing Provisioner, AWSNodeTemplate, and Machine alpha APIs to the newer NodePool, EC2NodeClass, and NodeClaim beta APIs.\n\nNote that if you are rolling back after upgrading to `0.32.0`, note that __only__ versions `0.31.4` support handling rollback after you have deployed the v1beta1 APIs to your cluster.\n{{% /alert %}}\n\n* Karpenter now uses `settings.InterruptionQueue` instead of `settings.aws.InterruptionQueueName` in its helm chart. The CLI argument also changed to `--interruption-queue`.\n* Karpenter now serves the webhook prometheus metrics server on port `8001`. If this port is already in-use on the pod or you are running in `hostNetworking` mode, you may need to change this port value. You can configure this port value through the `WEBHOOK_METRICS_PORT` environment variable or the `webhook.metrics.port` value if installing via Helm.\n* Karpenter now exposes the ability to disable webhooks through the `webhook.enabled=false` value. This value will disable the webhook server and will prevent any permissions, mutating or validating webhook configurations from being deployed to the cluster.\n* Karpenter now moves all logging configuration for the Zap logger into the `logConfig` values block. Configuring Karpenter logging with this mechanism _is_ deprecated and will be dropped at v1. Karpenter now only surfaces logLevel through the `logLevel` helm value. If you need more advanced configuration due to log parsing constraints, we recommend configuring your log parser to handle Karpenter's Zap JSON logging.\n* The default log encoding changed from `console` to `json`. If you were previously not setting the type of log encoding, this default will change with the Helm chart. If you were setting the value through `logEncoding`, this value will continue to work until `0.33.x` but it is deprecated in favor of `logConfig.logEncoding`\n* Karpenter now uses the `karpenter.sh/disruption:NoSchedule=disrupting` taint instead of the upstream `node.kubernetes.io/unschedulable` taint for nodes spawned with a NodePool to prevent pods from scheduling to nodes being disrupted. Pods that previously tolerated the `node.kubernetes.io/unschedulable` taint that previously weren't evicted during termination will now be evicted. This most notably affects DaemonSets, which have the `node.kubernetes.io/unschedulable` toleration by default, where Karpenter will now remove these pods during termination. If you want your specific pods to not be evicted when nodes are scaled down, you should add a toleration to the pods with the following: `Key=karpenter.sh/disruption, Effect=NoSchedule, Operator=Equals, Values=disrupting`.\n  * Note: Karpenter will continue to use the old `node.kubernetes.io/unschedulable` taint for nodes spawned with a Provisioner.\n\n### Upgrading to `0.31.0`+\n\n* Karpenter moved its `securityContext` constraints from pod-wide to only applying to the Karpenter container exclusively. If you were previously relying on the pod-wide `securityContext` for your sidecar containers, you will now need to set these values explicitly in your sidecar container configuration.\n\n### Upgrading to `0.30.0`+\n\n* Karpenter will now [statically drift]({{<ref \"../concepts/disruption#drift\" >}}) on both Provisioner and AWSNodeTemplate Fields. For Provisioner Static Drift, the `karpenter.sh/provisioner-hash` annotation must be present on both the Provisioner and Machine. For AWSNodeTemplate drift, the `karpenter.k8s.aws/nodetemplate-hash` annotation must be present on the AWSNodeTemplate and Machine. Karpenter will not add these annotations to pre-existing nodes, so each of these nodes will need to be recycled one time for the annotations to be added.\n* Karpenter will now fail validation on AWSNodeTemplates and Provisioner `spec.provider` that have `amiSelectors`, `subnetSelectors`, or `securityGroupSelectors` set with a combination of id selectors (`aws-ids`, `aws::ids`) and other selectors.\n* Karpenter now statically sets the `securityContext` at both the pod and container-levels and doesn't allow override values to be passed through the Helm chart. This change was made to adhere to [Restricted Pod Security Standard](https://kubernetes.io/docs/concepts/security/pod-security-standards/#restricted), which follows pod hardening best practices.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nIf you have sidecar containers configured to run alongside Karpenter that cannot tolerate the [pod-wide `securityContext` constraints](https://github.com/aws/karpenter/blob/v0.30.0/charts/karpenter/templates/deployment.yaml#L40), you will need to specify overrides to the sidecar `securityContext` in your deployment.\n{{% /alert %}}\n\n### Upgrading to `0.29.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter `0.29.1` contains a [file descriptor and memory leak bug](https://github.com/aws/karpenter/issues/4296) that leads to Karpenter getting OOMKilled and restarting at the point that it hits its memory or file descriptor limit. Karpenter `0.29.2`+ fixes this leak.\n{{% /alert %}}\n\n* Karpenter has changed the default metrics service port from 8080 to 8000 and the default webhook service port from 443 to 8443. In `0.28.0`, the Karpenter pod port was changed to 8000, but referenced the service by name, allowing users to scrape the service at port 8080 for metrics. `0.29.0` aligns the two ports so that service and pod metrics ports are the same. These ports are set by the `controller.metrics.port` and `webhook.port` Helm chart values, so if you have previously set these to non-default values, you may need to update your Prometheus scraper to match these new values.\n\n* Karpenter will now reconcile nodes that are drifted due to their Security Groups or their Subnets. If your AWSNodeTemplate's Security Groups differ from the Security Groups used for an instance, Karpenter will consider it drifted. If the Subnet used by an instance is not contained in the allowed list of Subnets for an AWSNodeTemplate, Karpenter will also consider it drifted.\n  * Since Karpenter uses tags for discovery of Subnets and SecurityGroups, check the [Threat Model]({{<ref \"../reference/threat-model.md#threat-using-ec2-createtagdeletetag-permissions-to-orchestrate-machine-creationdeletion\" >}}) to see how to manage this IAM Permission.\n\n### Upgrading to `0.28.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter `0.28.0` is incompatible with Kubernetes version 1.26+, which can result in additional node scale outs when using `--cloudprovider=external`, which is the default for the EKS Optimized AMI. See: https://github.com/aws/karpenter-core/pull/375. Karpenter `0.28.1`+ fixes this issue and is compatible with Kubernetes version 1.26+.\n{{% /alert %}}\n\n* The `extraObjects` value is now removed from the Helm chart. Having this value in the chart proved to not work in the majority of Karpenter installs and often led to anti-patterns, where the Karpenter resources installed to manage Karpenter's capacity were directly tied to the install of the Karpenter controller deployments. The Karpenter team recommends that, if you want to install Karpenter manifests alongside the Karpenter Helm chart, to do so by creating a separate chart for the manifests, creating a dependency on the controller chart.\n* The `aws.nodeNameConvention` setting is now removed from the [`karpenter-global-settings`]({{<ref \"../reference/settings#configmap\" >}}) ConfigMap. Because Karpenter is now driving its orchestration of capacity through Machines, it no longer needs to know the node name, making this setting obsolete. Karpenter ignores configuration that it doesn't recognize in the [`karpenter-global-settings`]({{<ref \"../reference/settings#configmap\" >}}) ConfigMap, so leaving the `aws.nodeNameConvention` in the ConfigMap will simply cause this setting to be ignored.\n* Karpenter now defines a set of \"restricted tags\" which can't be overridden with custom tagging in the AWSNodeTemplate or in the [`karpenter-global-settings`]({{<ref \"../reference/settings#configmap\" >}}) ConfigMap. If you are currently using any of these tag overrides when tagging your instances, webhook validation will now fail. These tags include:\n\n  * `karpenter.sh/managed-by`\n  * `karpenter.sh/provisioner-name`\n  * `kubernetes.io/cluster/${CLUSTER_NAME}`\n\n* The following metrics changed their meaning, based on the introduction of the Machine resource:\n  * `karpenter_nodes_terminated`: Use `karpenter_machines_terminated` if you are interested in the reason why a Karpenter machine was deleted. `karpenter_nodes_terminated` now only tracks the count of terminated nodes without any additional labels.\n  * `karpenter_nodes_created`: Use `karpenter_machines_created` if you are interested in the reason why a Karpenter machine was created. `karpenter_nodes_created` now only tracks the count of created nodes without any additional labels.\n  * `karpenter_deprovisioning_replacement_node_initialized_seconds`: This metric has been replaced in favor of `karpenter_deprovisioning_replacement_machine_initialized_seconds`.\n* `0.28.0` introduces the Machine CustomResource into the `karpenter.sh` API Group and requires this CustomResourceDefinition to run properly. Karpenter now orchestrates its CloudProvider capacity through these in-cluster Machine CustomResources. When performing a scheduling decision, Karpenter will create a Machine, resulting in launching CloudProvider capacity. The kubelet running on the new capacity will then register the node to the cluster shortly after launch.\n  * If you are using Helm to upgrade between versions of Karpenter, note that [Helm does not automate the process of upgrading or install the new CRDs into your cluster](https://helm.sh/docs/chart_best_practices/custom_resource_definitions/#some-caveats-and-explanations). To install or upgrade the existing CRDs, follow the guidance under the [Custom Resource Definition (CRD) Upgrades]({{< relref \"#custom-resource-definition-crd-upgrades\" >}}) section of the upgrade guide.\n  * Karpenter will hydrate Machines on startup for existing capacity managed by Karpenter into the cluster. Existing capacity launched by an older version of Karpenter is discovered by finding CloudProvider capacity with the `karpenter.sh/provisioner-name` tag or the `karpenter.sh/provisioner-name` label on nodes.\n* The metrics port for the Karpenter deployment was changed from 8080 to 8000. Users who scrape the pod directly for metrics rather than the service will need to adjust the commands they use to reference port 8000. Any users who scrape metrics from the service should be unaffected.\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter creates a mapping between CloudProvider machines and CustomResources in the cluster for capacity tracking. To ensure this mapping is consistent, Karpenter utilizes the following tag keys:\n\n* `karpenter.sh/managed-by`\n* `karpenter.sh/provisioner-name`\n* `kubernetes.io/cluster/${CLUSTER_NAME}`\n\nBecause Karpenter takes this dependency, any user that has the ability to Create/Delete these tags on CloudProvider machines will have the ability to orchestrate Karpenter to Create/Delete CloudProvider machines as a side effect. Check the [Threat Model]({{<ref \"../reference/threat-model.md#threat-using-ec2-createtagdeletetag-permissions-to-orchestrate-machine-creationdeletion\" >}}) to see how this might affect you, and ways to mitigate this.\n{{% /alert %}}\n\n{{% alert title=\"Rolling Back\" color=\"warning\" %}}\nIf, after upgrading to `0.28.0`+, a rollback to an older version of Karpenter needs to be performed, Karpenter will continue to function normally, though you will still have the Machine CustomResources on your cluster. You will need to manually delete the Machines and patch out the finalizers to fully complete the rollback.\n\nKarpenter marks CloudProvider capacity as \"managed by\" a Machine using the `karpenter-sh/managed-by` tag on the CloudProvider machine. It uses this tag to ensure that the Machine CustomResources in the cluster match the CloudProvider capacity managed by Karpenter. If these states don't match, Karpenter will garbage collect the capacity. Because of this, if performing an upgrade, followed by a rollback, followed by another upgrade to `0.28.0`+, ensure you remove the `karpenter.sh/managed-by` tags from existing capacity; otherwise, Karpenter will deprovision the capacity without a Machine CR counterpart.\n{{% /alert %}}\n\n### Upgrading to `0.27.3`+\n\n* The `defaulting.webhook.karpenter.sh` mutating webhook was removed in `0.27.3`. If you are coming from an older version of Karpenter where this webhook existed and the webhook was not managed by Helm, you may need to delete the stale webhook.\n\n```bash\nkubectl delete mutatingwebhookconfigurations defaulting.webhook.karpenter.sh\n```\n\n### Upgrading to `0.27.0`+\n\n* The Karpenter controller pods now deploy with `kubernetes.io/hostname` self anti-affinity by default. If you are running Karpenter in HA (high-availability) mode and you do not have enough nodes to match the number of pod replicas you are deploying with, you will need to scale-out your nodes for Karpenter.\n* The following controller metrics changed and moved under the `controller_runtime` metrics namespace:\n  * `karpenter_metricscraper_...`\n  * `karpenter_deprovisioning_...`\n  * `karpenter_provisioner_...`\n  * `karpenter_interruption_...`\n* The following controller metric names changed, affecting the `controller` label value under `controller_runtime_...` metrics. These metrics include:\n  * `podmetrics` -> `pod_metrics`\n  * `provisionermetrics` -> `provisioner_metrics`\n  * `metricscraper` -> `metric_scraper`\n  * `provisioning` -> `provisioner_trigger`\n  * `node-state` -> `node_state`\n  * `pod-state` -> `pod_state`\n  * `provisioner-state` -> `provisioner_state`\n* The `karpenter_allocation_controller_scheduling_duration_seconds` metric name changed to `karpenter_provisioner_scheduling_duration_seconds`\n\n### Upgrading to `0.26.0`+\n\n* 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]({{<ref \"../concepts/disruption#disabling-deprovisioning\" >}}) for more details.\n* 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.\n* 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.\n\n### Upgrading to `0.25.0`+\n\n* 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.\n\n### Upgrading to `0.24.0`+\n\n* Settings are no longer updated dynamically while Karpenter is running. If you manually make a change to the [`karpenter-global-settings`]({{<ref \"../reference/settings#configmap\" >}}) ConfigMap, you will need to reload the containers by restarting the deployment with `kubectl rollout restart -n karpenter deploy/karpenter`\n* 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]({{<ref \"../concepts/scheduling#selecting-nodes\" >}}). 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.\n* `aws.tags` in [`karpenter-global-settings`]({{<ref \"../reference/settings#configmap\" >}}) 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.<key>: value` in the ConfigMap.\n\n### Upgrading to `0.22.0`+\n\n* 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.\n\n### Upgrading to `0.20.0`+\n\n* Prior to `0.20.0`, Karpenter would prioritize certain instance type categories absent of any requirements in the Provisioner. `0.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.\n\n### Upgrading to `0.19.0`+\n\n* 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.\n* 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/disruption/#interruption\" >}}).\n* 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.\n* Karpenter CRD raw YAML URLs have migrated from `https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.19.3/charts/karpenter/crds/...` to `https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.19.3/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.\n* 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.\n* The following CLI options/environment variables are now removed and replaced in favor of pulling settings dynamically from the [`karpenter-global-settings`]({{<ref \"../reference/settings#configmap\" >}}) ConfigMap. See the [Settings docs]({{<ref \"../reference/settings/#environment-variables--cli-flags\" >}}) for more details on configuring the new values in the ConfigMap.\n\n  * `CLUSTER_NAME` -> `settings.aws.clusterName`\n  * `CLUSTER_ENDPOINT` -> `settings.aws.clusterEndpoint`\n  * `AWS_DEFAULT_INSTANCE_PROFILE` -> `settings.aws.defaultInstanceProfile`\n  * `AWS_ENABLE_POD_ENI` -> `settings.aws.enablePodENI`\n  * `AWS_ENI_LIMITED_POD_DENSITY` -> `settings.aws.enableENILimitedPodDensity`\n  * `AWS_ISOLATED_VPC` -> `settings.aws.isolatedVPC`\n  * `AWS_NODE_NAME_CONVENTION` -> `settings.aws.nodeNameConvention`\n  * `VM_MEMORY_OVERHEAD` -> `settings.aws.vmMemoryOverheadPercent`\n\n### Upgrading to `0.18.0`+\n\n* `0.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]({{<ref \"../reference/metrics\" >}}).\n\n### Upgrading to `0.17.0`+\n\nKarpenter'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/).\nWith 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-karpenter/#install-karpenter-helm-chart\" >}}).\n\nUsers who have scripted the installation or upgrading of Karpenter need to adjust their scripts with the following changes:\n1. There is no longer a need to add the Karpenter Helm repo with `helm repo add`\n2. The full URL of the Helm chart needs to be present when using the `helm` CLI\n3. 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  (i.e `v0.17.0`).\n\n### Upgrading to `0.16.2`+\n\n* `0.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:\n```bash\nkubectl replace -f https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.16.2/charts/karpenter/crds/karpenter.sh_provisioners.yaml\n```\n\n### Upgrading to `0.16.0`+\n\n* `0.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:\n```bash\nkubectl replace -f https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.16.0/charts/karpenter/crds/karpenter.sh_provisioners.yaml\n```\n\n### Upgrading to `0.15.0`+\n\n* `0.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:\n```bash\nkubectl replace -f https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.15.0/charts/karpenter/crds/karpenter.sh_provisioners.yaml\n```\n\n### Upgrading to `0.14.0`+\n\n* `0.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:\n\n```bash\nkubectl replace -f https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.14.0/charts/karpenter/crds/karpenter.sh_provisioners.yaml\n\nkubectl replace -f https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.14.0/charts/karpenter/crds/karpenter.k8s.aws_awsnodetemplates.yaml\n```\n\n* `0.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:\n\n```bash\n## Find launch templates that match the naming pattern and you do not want to keep\naws ec2 describe-launch-templates --filters=\"Name=launch-template-name,Values=Karpenter-${CLUSTER_NAME}-*\"\n\n## Delete launch template(s) that match the name but do not have the \"karpenter.k8s.aws/cluster\" tag\naws ec2 delete-launch-template --launch-template-id <LAUNCH_TEMPLATE_ID>\n```\n\n* `0.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.\n```yaml\n  - key: node.kubernetes.io/instance-type\n    operator: Exists\n```\n\n* `0.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]({{<ref \"../concepts/nodepools#spec-amiselector\" >}}) to get started\n* `0.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`.\n\n* `0.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.\n\n### Upgrading to `0.13.0`+\n\n* `0.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. `0.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.\n\n  If you are upgrading from `0.10.1` - `0.11.1`, a new CRD `awsnodetemplate` was added. In `0.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:\n  1. Make sure any `awsnodetemplate` manifests are saved somewhere so that they can be reapplied to the cluster.\n  2. `kubectl delete crd awsnodetemplate`\n  3. `kubectl apply -f https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.13.2/charts/karpenter/crds/karpenter.k8s.aws_awsnodetemplates.yaml`\n  4. Perform the Karpenter upgrade to `0.13.0`+, which will install the new `awsnodetemplates` CRD.\n  5. Reapply the `awsnodetemplate` manifests you saved from step 1, if applicable.\n* `0.13.0` also adds EC2/spot price fetching to Karpenter to allow making more accurate decisions regarding node deployments.  Our [getting started guide]({{< ref \"../getting-started/getting-started-with-karpenter\" >}}) 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.\n\n### Upgrading to `0.12.0`+\n\n* `0.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.\n* If you are upgrading from `0.10.1` - `0.11.1`, a new CRD `awsnodetemplate` was added. In `0.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:\n  1. Make sure any `awsnodetemplate` manifests are saved somewhere so that they can be reapplied to the cluster.\n  2. `kubectl delete crd awsnodetemplate`\n  3. `kubectl apply -f https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.12.1/charts/karpenter/crds/karpenter.k8s.aws_awsnodetemplates.yaml`\n  4. Perform the Karpenter upgrade to `0.12.0`+, which will install the new `awsnodetemplates` CRD.\n  5. Reapply the `awsnodetemplate` manifests you saved from step 1, if applicable.\n\n### Upgrading to `0.11.0`+\n\n`0.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`.\n\nOther 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.\n\n`0.11.0` adds a `providerRef` field in the Provisioner CRD. To use this new field you will need to replace the Provisioner CRD manually:\n\n```shell\nkubectl replace -f https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.11.0/charts/karpenter/crds/karpenter.sh_provisioners.yaml\n```\n\n### Upgrading to `0.10.0`+\n\n`0.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:\n\n```shell\nkubectl replace -f https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.10.0/charts/karpenter/crds/karpenter.sh_provisioners.yaml\n```\n\n📝 If you don't perform this manual CRD update, Karpenter will work correctly except for rejecting the creation/update of provisioners that use `startupTaints`.\n\n### Upgrading to `0.6.2`+\n\nIf using Helm, the variable names have changed for the cluster's name and endpoint. You may need to update any configuration\nthat sets the old variable names.\n\n- `controller.clusterName` is now `clusterName`\n- `controller.clusterEndpoint` is now `clusterEndpoint`\n"
  },
  {
    "path": "website/content/en/v1.9/_index.md",
    "content": "---\ntitle: \"Documentation\"\nlinkTitle: \"Docs\"\nweight: 20\ncascade:\n  type: docs\n  tags:\n    - preview\n---\nKarpenter is an open-source node lifecycle management project built for Kubernetes.\nAdding Karpenter to a Kubernetes cluster can dramatically improve the efficiency and cost of running workloads on that cluster.\nKarpenter works by:\n\n* **Watching** for pods that the Kubernetes scheduler has marked as unschedulable\n* **Evaluating** scheduling constraints (resource requests, nodeselectors, affinities, tolerations, and topology spread constraints) requested by the pods\n* **Provisioning** nodes that meet the requirements of the pods\n* **Disrupting** the nodes when the nodes are no longer needed\n\nAs someone using Karpenter, once your Kubernetes cluster and the Karpenter controller are up and running (see [Getting Started]({{<ref \"./getting-started\" >}})), you can:\n\n* **Set up NodePools**: By applying a NodePool to Karpenter, you can configure constraints on node provisioning and set values for node expiry, node consolidation, or Kubelet configuration values.\n  NodePool-level constraints related to Kubernetes and your cloud provider (AWS, for example) include:\n\n  - 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.\n  - Labels (`labels`): Apply arbitrary key-value pairs to nodes that can be matched by pods.\n  - Requirements (`requirements`): Set acceptable (`In`) and unacceptable (`NotIn`) Kubernetes and Karpenter values for node provisioning based on [Well-Known Labels](https://kubernetes.io/docs/reference/labels-annotations-taints/) and [cloud-specific settings]({{<ref \"./concepts/nodeclasses\" >}}). 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]({{<ref \"./concepts/nodepools/#capacity-type\" >}}) (such as AWS spot or on-demand).\n  - 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.\n\n* **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:\n\n  - 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.\n  - 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.\n  - 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.\n  - 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.\n  - 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.\n  - 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.\n  - 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.\n\nLearn more about Karpenter and how to get started below.\n"
  },
  {
    "path": "website/content/en/v1.9/concepts/_index.md",
    "content": "---\ntitle: \"Concepts\"\nlinkTitle: \"Concepts\"\nweight: 20\ndescription: >\n  Understand key concepts of Karpenter\n---\n\nUsers fall under two basic roles: [Kubernetes cluster administrators]({{<ref \"#cluster-administrator\" >}}) and [application developers]({{<ref \"#application-developer\" >}}). This document describes Karpenter concepts through the lens of those two types of users.\n\n## Cluster Administrator\n\nAs a Kubernetes cluster administrator, you can engage with Karpenter to:\n\n* Install Karpenter\n* Configure NodePools to set constraints and other features for managing nodes\n* Disrupting nodes\n\nConcepts associated with this role are described below.\n\n\n### Installing Karpenter\n\nKarpenter 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.\n\n[Getting Started with Karpenter]({{<ref \"../getting-started/getting-started-with-karpenter\" >}}) describes the process of installing Karpenter. 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.\n\nOnce privileges are in place, Karpenter is deployed with a Helm chart.\n\n### Configuring NodePools\n\nKarpenter'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 [NodePools]({{<ref \"nodepools\" >}}) that define how Karpenter manages unschedulable pods and configures nodes. You will also define behaviors for your NodePools, capturing details like how Karpenter handles disruption of nodes and setting limits and weights for each NodePool.\n\nHere are some things to know about Karpenter's NodePools:\n\n* **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.\n\n* [**Defining Constraints**]({{<ref \"nodepools\" >}}): Karpenter defines a Custom Resource called a NodePool to specify configuration. Each NodePool manages a distinct set of nodes, but pods can be scheduled to any NodePool that supports its scheduling constraints. A NodePool defines constraints that determine which nodes can be provisioned and specifies the attributes these nodes will have. See the [NodePools Documentation]({{<ref \"nodepools\" >}}) docs for a description of configuration and NodePool examples.\n\n* [**Defining Disruption**]({{<ref \"disruption\" >}}): A NodePool can also include values to indicate when nodes should be disrupted. This includes configuration around concepts like [Consolidation]({{<ref \"disruption#consolidation\" >}}), [Drift]({{<ref \"disruption#drift\" >}}), and [Expiration]({{<ref \"disruption#automated-methods\" >}}).\n\n* **Well-known labels**: The NodePool 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.\n\n* **Multiple NodePools**: Multiple NodePools 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.\n\nAlthough most use cases are addressed with a single NodePool for multiple teams, multiple NodePools are useful to isolate nodes for billing, use different node constraints (such as no GPUs for a team), or use different disruption settings.\n\n### Disrupting nodes\n\nKarpenter deletes nodes when they are no longer needed.\n\n* [**Finalizer**]({{<ref \"disruption#manual-methods\" >}}): Karpenter places a finalizer bit on each node it creates.\nWhen 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.\nKarpenter handles all clean-up work needed to properly delete the node.\n* [**Expiration**]({{<ref \"disruption\" >}}): Karpenter will mark nodes as expired and disrupt them after they have lived a set number of seconds, based on the NodePool's `spec.template.spec.expireAfter` value. You can use node expiry to periodically recycle nodes due to security concerns.\n* [**Consolidation**]({{<ref \"disruption#consolidation\" >}}): Karpenter works to actively reduce cluster cost by identifying when:\n  * Nodes can be removed because the node is empty\n  * Nodes can be removed as their workloads will run on other nodes in the cluster.\n  * Nodes can be replaced with cheaper variants due to a change in the workloads.\n* [**Drift**]({{<ref \"disruption#drift\" >}}): Karpenter will mark nodes as drifted and disrupt nodes that have drifted from their desired specification. See [Drift]({{<ref \"#drift\" >}}) to see which fields are considered.\n* [**Interruption**]({{<ref \"disruption#interruption\" >}}): Karpenter will watch for upcoming 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.\n\nFor more details on how Karpenter deletes nodes, see the [Disruption Documentation]({{<ref \"disruption\" >}}).\n\n### Scheduling\n\nKarpenter 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.\n\nOnce Karpenter brings up a node, that node is available for the Kubernetes scheduler to schedule pods on it as well.\n\n#### Constraints\n\nThe concept of layered constraints is key to using Karpenter. With no constraints defined in NodePools 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.\n\nAn application developer can tighten the constraints defined in a NodePool 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.\n\n### Cloud Provider\n\nKarpenter 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.\n\nWhile using Kubernetes well-known labels, the NodePool can set some values that are specific to the cloud provider. 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`).\n\n### Kubernetes Cluster Autoscaler\n\nLike 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:\n\n* **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.\n\n* **Quick 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.\n\n## Application Developer\n\nAs 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).\n\nLayered *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).\nThe 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.\n\nThe 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.\n\nAs long as the requests are not outside the NodePool'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.\n\nSo, what constraints can you use as an application developer deploying pods that could be managed by Karpenter?\n\nKubernetes features that Karpenter supports for scheduling pods include nodeAffinity and [nodeSelector](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#nodeselector).\nIt 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).\n\nFrom 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:\n\n* **kubernetes.io/arch**: For example, kubernetes.io/arch=amd64\n* **node.kubernetes.io/instance-type**: For example, node.kubernetes.io/instance-type=m3.medium\n* **topology.kubernetes.io/zone**: For example, topology.kubernetes.io/zone=us-east-1c\n\nFor more on how, as a developer, you can add constraints to your pod deployment, see [Scheduling](./scheduling/) for details.\n"
  },
  {
    "path": "website/content/en/v1.9/concepts/disruption.md",
    "content": "---\ntitle: \"Disruption\"\nlinkTitle: \"Disruption\"\nweight: 50\ndescription: >\n  Understand different ways Karpenter disrupts nodes\n---\n\n## Control Flow\n\nKarpenter sets a Kubernetes [finalizer](https://kubernetes.io/docs/concepts/overview/working-with-objects/finalizers/) on each node and node claim it provisions.\nThe finalizer blocks deletion of the node object while the Termination Controller taints and drains the node, before removing the underlying NodeClaim. Disruption is triggered by the Disruption Controller, by the user through manual disruption, or through an external system that sends a delete request to the node object.\n\n### Disruption Controller\n\nKarpenter automatically discovers disruptable nodes and spins up replacements when needed. Karpenter disrupts nodes by executing one [automated method](#automated-graceful-methods) at a time, first doing Drift then Consolidation. Each method varies slightly, but they all follow the standard disruption process. Karpenter uses [disruption budgets]({{<ref \"#nodepool-disruption-budgets\" >}}) to control the speed at which these disruptions begin.\n1. Identify a list of prioritized candidates for the disruption method.\n   * If there are [pods that cannot be evicted](#pod-level-controls) on the node, Karpenter will ignore the node and try disrupting it later.\n   * If there are no disruptable nodes, continue to the next disruption method.\n2. For each disruptable node:\n   1. Check if disrupting it would violate its NodePool's disruption budget.\n   2. Execute a scheduling simulation with the pods on the node to find if any replacement nodes are needed.\n3. Add the `karpenter.sh/disrupted:NoSchedule` taint to the node(s) to prevent pods from scheduling to it.\n4. Pre-spin any replacement nodes needed as calculated in Step (2), and wait for them to become ready.\n   * If a replacement node fails to initialize, un-taint the node(s), and restart from Step (1), starting at the first disruption method again.\n5. Delete the node(s) and wait for the Termination Controller to gracefully shutdown the node(s).\n6. Once the Termination Controller terminates the node, go back to Step (1), starting at the first disruption method again.\n\n### Termination Controller\n\nWhen a Karpenter node is deleted, the Karpenter finalizer will block deletion and the APIServer will set the `DeletionTimestamp` on the node, allowing Karpenter to gracefully shutdown the node, modeled after [Kubernetes Graceful Node Shutdown](https://kubernetes.io/docs/concepts/cluster-administration/node-shutdown/#graceful-node-shutdown). Karpenter's graceful shutdown process will:\n1. Add the `karpenter.sh/disrupted:NoSchedule` taint to the node to prevent pods from scheduling to it.\n2. Begin evicting the pods on the node with the [Kubernetes Eviction API](https://kubernetes.io/docs/concepts/scheduling-eviction/api-eviction/) to respect PDBs, while ignoring all [static pods](https://kubernetes.io/docs/tasks/configure-pod-container/static-pod/), pods tolerating the `karpenter.sh/disrupted:NoSchedule` taint, and succeeded/failed pods. Wait for the node to be fully drained before proceeding to Step (3).\n   * While waiting, if the underlying NodeClaim for the node no longer exists, remove the finalizer to allow the APIServer to delete the node, completing termination.\n3. Verify that all [VolumeAttachment](https://kubernetes.io/docs/reference/kubernetes-api/config-and-storage-resources/volume-attachment-v1/) resources for drain-able pods are deleted.\n4. Terminate the NodeClaim in the Cloud Provider.\n5. Remove the finalizer from the node to allow the APIServer to delete the node, completing termination.\n\n## Manual Methods\n* **Node Deletion**: You can use `kubectl` to manually remove a single Karpenter node or nodeclaim. Since each Karpenter node is owned by a NodeClaim, deleting either the node or the nodeclaim will cause cascade deletion of the other:\n\n    ```bash\n    # Delete a specific nodeclaim\n    kubectl delete nodeclaim $NODECLAIM_NAME\n\n    # Delete a specific node\n    kubectl delete node $NODE_NAME\n\n    # Delete all nodeclaims\n    kubectl delete nodeclaims --all\n\n    # Delete all nodes owned by any nodepool\n    kubectl delete nodes -l karpenter.sh/nodepool\n\n    # Delete all nodeclaims owned by a specific nodepoolXS\n    kubectl delete nodeclaims -l karpenter.sh/nodepool=$NODEPOOL_NAME\n    ```\n* **NodePool Deletion**: NodeClaims are owned by the NodePool through an [owner reference](https://kubernetes.io/docs/concepts/overview/working-with-objects/owners-dependents/#owner-references-in-object-specifications) that launched them. Karpenter will gracefully terminate nodes through cascading deletion when the owning NodePool is deleted.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nBy adding the finalizer, Karpenter improves the default Kubernetes process of node deletion.\nWhen 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.\n{{% /alert %}}\n\n## Automated Graceful Methods\n\nAutomated graceful methods, can be rate limited through [NodePool Disruption Budgets]({{<ref \"#nodepool-disruption-budgets\" >}})\n\n* [**Consolidation**]({{<ref \"#consolidation\" >}}): Karpenter works to actively reduce cluster cost by identifying when:\n  * Nodes can be removed because the node is empty\n  * Nodes can be removed as their workloads will run on other nodes in the cluster.\n  * Nodes can be replaced with lower priced variants due to a change in the workloads.\n* [**Drift**]({{<ref \"#drift\" >}}): Karpenter will mark nodes as drifted and disrupt nodes that have drifted from their desired specification. See [Drift]({{<ref \"#drift\" >}}) to see which fields are considered.\n\n{{% alert title=\"Defaults\" color=\"secondary\" %}}\nDisruption is configured through the NodePool's disruption block by the `consolidationPolicy`, and `consolidateAfter` fields. Karpenter will configure these fields with the following values by default if they are not set:\n\n```yaml\nspec:\n  disruption:\n    consolidationPolicy: WhenEmptyOrUnderutilized\n    consolidateAfter: 0s\n```\n{{% /alert %}}\n\n### Consolidation\n\nConsolidation is configured by `consolidationPolicy` and `consolidateAfter`. `consolidationPolicy` determines the pre-conditions for nodes to be considered consolidatable, and are `WhenEmpty` or `WhenEmptyOrUnderutilized`. If a node has no running non-daemon pods, it is considered empty.  `consolidateAfter` can be set to indicate how long Karpenter should wait after a pod schedules or is removed from the node before considering the node consolidatable. With `WhenEmptyOrUnderutilized`, Karpenter will consider a node consolidatable when its `consolidateAfter` has been reached, empty or not.\n\nKarpenter has two mechanisms for cluster consolidation:\n1. **Deletion** - A node is eligible for deletion if all of its pods can run on free capacity of other nodes in the cluster.\n2. **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 lower price replacement node.\n\nConsolidation has three mechanisms that are performed in order to attempt to identify a consolidation action:\n1. **Empty Node Consolidation** - Delete any entirely empty nodes in parallel\n2. **Multi Node Consolidation** - Try to delete two or more nodes in parallel, possibly launching a single replacement whose price is lower than that of all nodes being removed\n3. **Single Node Consolidation** - Try to delete any single node, possibly launching a single replacement whose price is lower than that of the node being removed\n\nIt'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.\n\nWhen there are multiple nodes that could be potentially deleted or replaced, Karpenter chooses to consolidate the node that overall disrupts your workloads the least by preferring to terminate:\n\n* Nodes running fewer pods\n* Nodes that will expire soon\n* Nodes with lower priority pods\n\nIf 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.\n\n```bash\nEvents:\n  Type     Reason                   Age                From             Message\n  ----     ------                   ----               ----             -------\n  Normal   Unconsolidatable         66s                karpenter        pdb default/inflate-pdb prevents pod evictions\n  Normal   Unconsolidatable         33s (x3 over 30m)  karpenter        can't replace with a lower-priced node\n```\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nUsing 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 disrupt 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`).\n{{% /alert %}}\n\n#### Spot consolidation\nFor spot nodes, Karpenter has deletion consolidation enabled by default. If you would like to enable replacement with spot consolidation, you need to enable the feature through the [`SpotToSpotConsolidation` feature flag]({{<ref \"../reference/settings#features-gates\" >}}).\n\nLower priced spot instance types are selected with the [`price-capacity-optimized` strategy](https://aws.amazon.com/blogs/compute/introducing-price-capacity-optimized-allocation-strategy-for-ec2-spot-instances/). Sometimes, the lowest priced spot instance type is not launched due to the likelihood of interruption. As a result, Karpenter uses the number of available instance type options with a price lower than the currently launched spot instance as a heuristic for evaluating whether it should launch a replacement for the current spot node.\n\nWe refer to the number of instances that Karpenter has within its launch decision as a launch's \"instance type flexibility.\" When Karpenter is considering performing a spot-to-spot consolidation replacement, it will check whether replacing the instance type will lead to enough instance type flexibility in the subsequent launch request. As a result, we get the following properties when evaluating for consolidation:\n1) We shouldn't continually consolidate down to the lowest priced spot instance which might have very high rates of interruption.\n2) We launch with enough instance types that there’s high likelihood that our replacement instance has comparable availability to our current one.\n\nKarpenter requires a minimum instance type flexibility of 15 instance types when performing single node spot-to-spot consolidations (1 node to 1 node). It does not have the same instance type flexibility requirement for multi-node spot-to-spot consolidations (many nodes to 1 node) since doing so without requiring flexibility won't lead to \"race to the bottom\" scenarios.\n\n\n### Drift\nDrift handles changes to the NodePool/EC2NodeClass. For Drift, values in the NodePool/EC2NodeClass are reflected in the NodeClaimTemplateSpec/EC2NodeClassSpec in the same way that they’re set. A NodeClaim will be detected as drifted if the values in its owning NodePool/EC2NodeClass do not match the values in the NodeClaim. Similar to the upstream `deployment.spec.template` relationship to pods, Karpenter will annotate the owning NodePool and EC2NodeClass with a hash of the NodeClaimTemplateSpec to check for drift. Some special cases will be discovered either from Karpenter or through the CloudProvider interface, triggered by NodeClaim/Instance/NodePool/EC2NodeClass changes.\n\n#### Special Cases on Drift\nIn special cases, drift can correspond to multiple values and must be handled differently. Drift on resolved fields can create cases where drift occurs without changes to CRDs, or where CRD changes do not result in drift. For example, if a NodeClaim has `node.kubernetes.io/instance-type: m5.large`, and requirements change from `node.kubernetes.io/instance-type In [m5.large]` to `node.kubernetes.io/instance-type In [m5.large, m5.2xlarge]`, the NodeClaim will not be drifted because its value is still compatible with the new requirements. Conversely, if a NodeClaim is using a NodeClaim image `ami: ami-abc`, but a new image is published, Karpenter's `EC2NodeClass.spec.amiSelectorTerms` will discover that the new correct value is `ami: ami-xyz`, and detect the NodeClaim as drifted.\n\n##### NodePool\n| Fields         |\n|----------------|\n| spec.template.spec.requirements   |\n\n##### EC2NodeClass\n| Fields                        |\n|-------------------------------|\n| spec.subnetSelectorTerms      |\n| spec.securityGroupSelectorTerms  |\n| spec.amiSelectorTerms  |\n\n#### Behavioral Fields\nBehavioral Fields are treated as over-arching settings on the NodePool to dictate how Karpenter behaves. These fields don’t correspond to settings on the NodeClaim or instance. They’re set by the user to control Karpenter’s Provisioning and disruption logic. Since these don’t map to a desired state of NodeClaims, __behavioral fields are not considered for Drift__.\n\n##### NodePool\n| Fields              |\n|---------------------|\n| spec.weight         |\n| spec.limits         |\n| spec.disruption.*   |\n\nRead the [Drift Design](https://github.com/aws/karpenter-core/blob/main/designs/drift.md) for more.\n\n\nKarpenter will add the `Drifted` status condition on NodeClaims if the NodeClaim is drifted from its owning NodePool. Karpenter will also remove the `Drifted` status condition if either:\n1. The `Drift` feature gate is not enabled but the NodeClaim is drifted, Karpenter will remove the status condition.\n2. The NodeClaim isn't drifted, but has the status condition, Karpenter will remove it.\n\n## Automated Forceful Methods\n\nAutomated forceful methods will begin draining nodes as soon as the condition is met.\nUnlike the graceful methods mentioned above, these methods can not be rate-limited using [NodePool Disruption Budgets](#nodepool-disruption-budgets), and do not wait for a pre-spin replacement node to be healthy for the pods to reschedule.\nPod disruption budgets may be used to rate-limit application disruption.\n\n### Expiration\n\nExpiration is a forceful disruption method that begins draining a node immediately once its lifetime exceeds the duration set on the owning NodeClaim's `spec.expireAfter` field.\nChanges to `spec.template.spec.expireAfter` on the owning NodePool will not update the field for existing NodeClaims - it will induce NodeClaim drift and the replacements will have the updated value.\nExpiration can be used, in conjunction with [`terminationGracePeriod`](#terminationgraceperiod), to enforce a maximum Node lifetime.\nBy default, `expireAfter` is set to `720h` (30 days).\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nThe `expireAfter` field defines the **maximum** node lifetime (upper bound), not a guaranteed minimum.\nNodes can be disrupted earlier than the `expireAfter` duration by other disruption methods such as [Drift]({{<ref \"#drift\" >}}), [Consolidation]({{<ref \"#consolidation\" >}}), or [Emptiness]({{<ref \"#consolidation\" >}}) if their [disruption budgets]({{<ref \"#nodepool-disruption-budgets\" >}}) allow.\nFor example, a NodePool with `expireAfter: 720h` (30 days) can still have nodes terminated earlier if the node becomes drifted due to an AMI update and the disruption budget permits drift-based disruptions.\n\nTo enforce a true maximum node lifetime that cannot be shortened by other disruption methods, use `expireAfter` in combination with carefully configured disruption budgets that limit or prevent other disruption reasons.\n{{% /alert %}}\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nMisconfigured PDBs and pods with the `karpenter.sh/do-not-disrupt` annotation may block draining indefinitely.\nFor this reason, it is not recommended to set `expireAfter` without also setting `terminationGracePeriod` **if** your cluster has pods with the `karpenter.sh/do-not-disrupt` annotation.\nDoing so can result in partially drained nodes stuck in the cluster, driving up cluster cost and potentially requiring manual intervention to resolve.\n{{% /alert %}}\n\n### Interruption\n\nIf interruption-handling is enabled, Karpenter will watch for upcoming involuntary interruption events that would cause disruption to your workloads. These interruption events include:\n\n* Spot Interruption Warnings\n* Scheduled Change Health Events (Maintenance Events)\n* Instance Terminating Events\n* Instance Stopping Events\n\nWhen Karpenter detects one of these events will occur to your nodes, it automatically taints, 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.\n\nFor Spot interruptions, the NodePool will start a new node as soon as it sees the Spot interruption warning. Spot interruptions have a __2 minute notice__ before Amazon EC2 reclaims the instance. Once Karpenter has received this warning it will begin draining the node while in parallel provisioning a new node. Karpenter's average node startup time means that, generally, there is sufficient time for the new node to become ready before EC2 initiates termination for the spot instance.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nKarpenter publishes Kubernetes events to the node for all events listed above in addition to [__Spot Rebalance Recommendations__](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/rebalance-recommendations.html). Karpenter does not currently support taint, drain, and terminate logic for Spot Rebalance Recommendations.\n\nIf you require handling for Spot Rebalance Recommendations, you can use the [AWS Node Termination Handler (NTH)](https://github.com/aws/aws-node-termination-handler) alongside Karpenter; however, note that the AWS Node Termination Handler cordons and drains nodes on rebalance recommendations, potentially causing more node churn in the cluster than with interruptions alone. Further information can be found in the [Troubleshooting Guide]({{< ref \"../troubleshooting#aws-node-termination-handler-nth-interactions\" >}}).\n{{% /alert %}}\n\nKarpenter 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-karpenter/#create-the-karpenter-infrastructure-and-iam-roles).\n\nTo enable interruption handling, configure the `--interruption-queue` CLI argument with the name of the interruption queue provisioned to handle interruption events.\n\n### Node Auto Repair\n\n<i class=\"fa-solid fa-circle-info\"></i> <b>Feature State: </b> Karpenter v1.1.0 [alpha]({{<ref \"../reference/settings#feature-gates\" >}})\n\nNode Auto Repair is a feature that automatically identifies and replaces unhealthy nodes in your cluster, helping to maintain overall cluster health. Nodes can experience various types of failures affecting their hardware, file systems, or container environments. These failures may be surfaced through node conditions such as network unavailability, disk pressure, memory pressure, or other conditions reported by node diagnostic agents. When Karpenter detects these unhealthy conditions, it automatically replaces the affected nodes based on cloud provider-defined repair policies. Once a node has been in an unhealthy state beyond its configured toleration duration, Karpenter will forcefully terminate the node and its corresponding NodeClaim, bypassing the standard drain and grace period procedures to ensure swift replacement of problematic nodes. To prevent cascading failures, Karpenter includes safety mechanisms: it will not perform repairs if more than 20% of nodes in a NodePool are unhealthy, and for standalone NodeClaims, it evaluates this threshold against all nodes in the cluster. This ensures your cluster remains in a healthy state with minimal manual intervention, even in scenarios where normal node termination procedures might be impacted by the node's unhealthy state.\n\nTo enable Node Auto Repair:\n  1.  Ensure you have a [Node Monitoring Agent](https://docs.aws.amazon.com/en_us/eks/latest/userguide/node-health.html) deployed or any agent that will add status conditions to nodes that are supported (e.g., Node Problem Detector)\n  2.  Enable the feature flag: `NodeRepair=true`\n  3. Node AutoRepair will automatically terminate nodes when they have unhealthy status conditions based on your cloud provider's repair policies\n\n\nKarpenter monitors nodes for the following node status conditions when initiating repair actions:\n\n\n#### Kubelet Node Conditions\n\n|   Type  |    Status     | Toleration Duration |\n| ------  | ------------- | ------------------- |\n|  Ready  |     False     |     30 minutes      |\n|  Ready  |     Unknown   |     30 minutes      |\n\n#### Node Monitoring Agent Conditions\n\n|            Type            |    Status     | Toleration Duration |\n| ------------------------   | ------------| --------------------- |\n|  AcceleratedHardwareReady  |     False   |     10 minutes        |\n|  StorageReady              |     False   |     30 minutes        |\n|  NetworkingReady           |     False   |     30 minutes        |\n|  KernelReady               |     False   |     30 minutes        |\n|  ContainerRuntimeReady     |     False   |     30 minutes        |\n\nTo enable the NodeRepair feature flag, refer to the [Feature Gates]({{<ref \"../reference/settings#feature-gates\" >}}).\n\n## Controls\n\n### TerminationGracePeriod\n\nTo configure a maximum termination duration, `terminationGracePeriod` should be used.\nIt is configured through a NodePool's [`spec.template.spec.terminationGracePeriod`]({{<ref \"../concepts/nodepools/#spectemplatespecterminationgraceperiod\" >}}) field, and is persisted to created NodeClaims (`spec.terminationGracePeriod`).\nChanges to the [`spec.template.spec.terminationGracePeriod`]({{<ref \"../concepts/nodepools/#spectemplatespecterminationgraceperiod\" >}}) field on the NodePool will not result in a change for existing NodeClaims - it will induce NodeClaim drift and the replacements will have the updated `terminationGracePeriod`.\n\nOnce a node is disrupted, via either a [graceful](#automated-graceful-methods) or [forceful](#automated-forceful-methods) disruption method, Karpenter will begin draining the node.\nAt this point, the countdown for `terminationGracePeriod` begins.\nOnce the `terminationGracePeriod` elapses, remaining pods will be forcibly deleted and the underlying instance will be terminated.\nA node may be terminated before the `terminationGracePeriod` has elapsed if all disruptable pods have been drained.\n\nIn conjunction with `expireAfter`, `terminationGracePeriod` can be used to enforce an absolute maximum node lifetime.\nThe node will begin to drain once its `expireAfter` has elapsed, and it will be forcibly terminated once its `terminationGracePeriod` has elapsed, making the maximum node lifetime the sum of the two fields.\n\nAdditionally, configuring `terminationGracePeriod` changes the eligibility criteria for disruption via `Drift`.\nWhen configured, a node may be disrupted via drift even if there are pods with blocking PDBs or the `karpenter.sh/do-not-disrupt` annotation scheduled to it.\nThis enables cluster administrators to ensure crucial updates (e.g. AMI updates addressing CVEs) can't be blocked by misconfigured applications.\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nTo ensure that the `terminationGracePeriodSeconds` value for draining pods is respected, pods will be preemptively deleted before the Node's `terminationGracePeriod` has elapsed.\nThis includes pods with blocking [pod disruption budgets](https://kubernetes.io/docs/tasks/run-application/configure-pdb/) or the [`karpenter.sh/do-not-disrupt` annotation]({{<ref \"#pod-level-controls\" >}}).\n\nConsider the following example: a Node with a 1 hour `terminationGracePeriod` has been disrupted and begins to drain.\nA pod with the `karpenter.sh/do-not-disrupt` annotation and a 300 second (5 minute) `terminationGracePeriodsSeconds` is scheduled to it.\nIf the pod is still running 55 minutes after the Node begins to drain, the pod will be deleted to ensure its `terminationGracePeriodSeconds` value is respected.\n\nIf a pod's `terminationGracePeriodSeconds` value exceeds that of the Node it is scheduled to, Karpenter will prioritize the Node's `terminationGracePeriod`.\nThe pod will be deleted as soon as the Node begins to drain, and it will not receive it's full `terminationGracePeriodSeconds`.\n{{% /alert %}}\n\n### NodePool Disruption Budgets\n\nYou can rate limit Karpenter's disruption through the NodePool's `spec.disruption.budgets`. If undefined, Karpenter will default to one budget with `nodes: 10%`. Budgets will consider nodes that are actively being deleted for any reason, and will only block Karpenter from disrupting nodes voluntarily through drift, emptiness, and consolidation. Note that NodePool Disruption Budgets do not prevent Karpenter from terminating expired nodes.\n\n#### Reasons\nKarpenter allows specifying if a budget applies to any of `Drifted`, `Underutilized`, or `Empty`. When a budget has no reasons, it's assumed that it applies to all reasons. When calculating allowed disruptions for a given reason, Karpenter will take the minimum of the budgets that have listed the reason or have left reasons undefined.\n\n#### Nodes\nWhen calculating if a budget will block nodes from disruption, Karpenter lists the total number of nodes owned by a NodePool, subtracting out the nodes owned by that NodePool that are currently being deleted and nodes that are NotReady. If the number of nodes being deleted by Karpenter or any other processes is greater than the number of allowed disruptions, disruption for this node will not proceed.\n\nIf the budget is configured with a percentage value, such as `20%`, Karpenter will calculate the number of allowed disruptions as `allowed_disruptions = roundup(total * percentage) - total_deleting - total_notready`. If otherwise defined as a non-percentage value, Karpenter will simply use that number as a static ceiling `non_percentage_value - total_deleting - total_notready`. For multiple budgets in a NodePool, Karpenter will take the minimum value (most restrictive) of each of the budgets.\n\nFor example, the following NodePool with three budgets defines the following requirements:\n- The first budget will only allow 20% of nodes owned by that NodePool to be disrupted if it's empty or drifted. For instance, if there were 19 nodes owned by the NodePool, 4 empty or drifted nodes could be disrupted, rounding up from `19 * .2 = 3.8`.\n- The second budget acts as a ceiling to the previous budget, only allowing 5 disruptions when there are more than 25 nodes.\n- The last budget only blocks disruptions during the first 10 minutes of the day, where 0 disruptions are allowed, only applying to underutilized nodes.\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\nspec:\n  disruption:\n    consolidationPolicy: WhenEmptyOrUnderutilized\n    budgets:\n    - nodes: \"20%\"\n      reasons:\n      - \"Empty\"\n      - \"Drifted\"\n    - nodes: \"5\"\n    - nodes: \"0\"\n      schedule: \"@daily\"\n      duration: 10m\n      reasons:\n      - \"Underutilized\"\n```\n\n#### Schedule\nSchedule is a cronjob schedule. Generally, the cron syntax is five space-delimited values with options below, with additional special macros like `@yearly`, `@monthly`, `@weekly`, `@daily`, `@hourly`.\nFollow the [Kubernetes documentation](https://kubernetes.io/docs/concepts/workloads/controllers/cron-jobs/#writing-a-cronjob-spec) for more information on how to follow the cron syntax. Timezones are not currently supported. Schedules are always in UTC.\n\n```bash\n# ┌───────────── minute (0 - 59)\n# │ ┌───────────── hour (0 - 23)\n# │ │ ┌───────────── day of the month (1 - 31)\n# │ │ │ ┌───────────── month (1 - 12)\n# │ │ │ │ ┌───────────── day of the week (0 - 6) (Sunday to Saturday;\n# │ │ │ │ │                                   7 is also Sunday on some systems)\n# │ │ │ │ │                                   OR sun, mon, tue, wed, thu, fri, sat\n# │ │ │ │ │\n# * * * * *\n```\n\n#### Duration\nDuration allows compound durations with minutes and hours values such as `10h5m` or `30m` or `160h`. Since cron syntax does not accept denominations smaller than minutes, users can only define minutes or hours.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nDuration and Schedule must be defined together. When omitted, the budget is always active. When defined, the schedule determines a starting point where the budget will begin being enforced, and the duration determines how long from that starting point the budget will be enforced.\n{{% /alert %}}\n\n### Pod-Level Controls\n\nPods with blocking PDBs will not be evicted by the [Termination Controller]({{<ref \"#termination-controller\">}}) or be considered for voluntary disruption actions. When multiple pods on a node have different PDBs, none of the PDBs may be blocking for Karpenter to voluntary disrupt a node. This can create complex eviction scenarios:\n  - If a pod matches multiple PDBs (via label selectors), ALL of these PDBs must allow for disruption\n  - When different pods on the same node belong to different PDBs, ALL PDBs must simultaneously permit eviction\n  - A single blocking PDB can prevent the entire node from being voluntary disrupted\n\nFor example, consider a node with these pods and PDBs:\n- Pod A: Matches PDB-1 (maxUnavailable: 0) and PDB-2 (maxUnavailable: 1)\n- Pod B: Matches PDB-3 (minAvailable: 100%)\n- Pod C: No PDB\n\nIn this scenario, Karpenter cannot voluntary disrupt the node because:\n1. Pod A is blocked by PDB-1 even though PDB-2 would allow disruption\n2. Pod B is blocked by PDB-3's requirement for 100% availability\n\nAs seen in this example, the more PDBs there are affecting a Node, the more difficult it will be for Karpenter to find an opportunity to perform voluntary disruption actions.\n\nSecondly, you can block Karpenter from voluntarily disrupting and draining pods by adding the `karpenter.sh/do-not-disrupt: \"true\"` annotation to the pod.\nYou can treat this annotation as a single-pod, permanently blocking PDB.\nThis has the following consequences:\n- Nodes with `karpenter.sh/do-not-disrupt` pods will be excluded from [Consolidation]({{<ref \"#consolidation\" >}}), and conditionally excluded from [Drift]({{<ref \"#drift\" >}}).\n  - If the Node's owning NodeClaim has a [`terminationGracePeriod`]({{<ref \"#terminationgraceperiod\" >}}) configured, it will still be eligible for disruption via drift.\n- Like pods with a blocking PDB, pods with the `karpenter.sh/do-not-disrupt` annotation will **not** be gracefully evicted by the [Termination Controller]({{<ref \"#termination-controller\">}}).\n  Karpenter will not be able to complete termination of the node until one of the following conditions is met:\n  - All pods with the `karpenter.sh/do-not-disrupt` annotation are removed.\n  - All pods with the `karpenter.sh/do-not-disrupt` annotation have entered a [terminal phase](https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#pod-phase) (`Succeeded` or `Failed`).\n  - The owning NodeClaim's [`terminationGracePeriod`]({{<ref \"#terminationgraceperiod\" >}}) has elapsed.\n\nThis is useful for pods that you want to run from start to finish without disruption.\nExamples of pods that you might want to opt-out of disruption include an 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.\n\n```yaml\napiVersion: apps/v1\nkind: Deployment\nspec:\n  template:\n    metadata:\n      annotations:\n        karpenter.sh/do-not-disrupt: \"true\"\n```\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nThe `karpenter.sh/do-not-disrupt` annotation does **not** exclude nodes from the forceful disruption methods: [Expiration]({{<ref \"#expiration\" >}}), [Interruption]({{<ref \"#interruption\" >}}), [Node Repair](<ref \"#node-repair\" >), and manual deletion (e.g. `kubectl delete node ...`).\nWhile both interruption and node repair have implicit upper-bounds on termination time, expiration and manual termination do not.\nManual intervention may be required to unblock node termination, by removing pods with the `karpenter.sh/do-not-disrupt` annotation.\nFor this reason, it is not recommended to use the `karpenter.sh/do-not-disrupt` annotation with `expireAfter` **if** you have not also configured `terminationGracePeriod`.\n{{% /alert %}}\n\n### Node-Level Controls\n\nYou can block Karpenter from voluntarily choosing to disrupt certain nodes by setting the `karpenter.sh/do-not-disrupt: \"true\"` annotation on the node.\nThis will prevent voluntary disruption actions against the node.\n\n```yaml\napiVersion: v1\nkind: Node\nmetadata:\n  annotations:\n    karpenter.sh/do-not-disrupt: \"true\"\n```\n\n#### Example: Disable Disruption on a NodePool\n\nTo disable disruption for all nodes launched by a NodePool, you can configure its `.spec.disruption.budgets`. Setting a budget of zero nodes will prevent any of those nodes from being considered for voluntary disruption.\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\nspec:\n  disruption:\n    budgets:\n      - nodes: \"0\"\n```\n"
  },
  {
    "path": "website/content/en/v1.9/concepts/nodeclaims.md",
    "content": "---\ntitle: \"NodeClaims\"\nlinkTitle: \"NodeClaims\"\nweight: 30\ndescription: >\n  Understand NodeClaims\n---\n\nKarpenter uses NodeClaims to manage the lifecycle of Kubernetes Nodes with the underlying cloud provider.\nKarpenter will create and delete NodeClaims in response to the demands of Pods in the cluster.\nIt does this by evaluating the requirements of pending pods, finding a compatible [NodePool]({{< ref \"./nodepools\" >}}) and [NodeClass]({{< ref \"./nodeclasses\" >}}) pair, and creating a NodeClaim which meets both sets of requirements.\nAlthough NodeClaims are immutable resources managed by Karpenter, you can monitor NodeClaims to keep track of the status of your Nodes.\n\nIn addition to tracking the lifecycle of Nodes, NodeClaims serve as requests for capacity.\nKarpenter creates NodeClaims in response to provisioning and disruption needs (pre-spin). Whenever Karpenter\ncreates a NodeClaim, it asks the cloud provider to create the instance (launch), register and link the created node\nwith the NodeClaim (registration), and wait for the node and its resources to be ready (initialization).\n\nThis page describes how NodeClaims integrate throughout Karpenter and the cloud provider implementation.\n\nIf you want to learn more about the nodes being managed by Karpenter, you can either look directly at the NodeClaim or at the nodes they are associated with:\n\n* Checking NodeClaims:\nIf something goes wrong in the process of creating a node, you can look at the NodeClaim\nto see where the node creation process might have failed. `kubectl get nodeclaims` will show you the NodeClaims\nfor the cluster, and its linked node. Using `kubectl describe nodeclaim <nodeclaim>` will show the status of a particular NodeClaim.\nFor example, if the node is NotReady, you might see statuses indicating that the NodeClaim failed to launch, register, or initialize.\nThere will be logs emitted by the Karpenter controller to indicate this too.\n\n* Checking nodes:\nUse commands such as `kubectl get node` and  `kubectl describe node <nodename>` to see the actual resources,\nlabels, and other attributes associated with a particular node.\n\n## NodeClaim roles in node creation\n\nNodeClaims provide a critical role in the Karpenter workflow for provisioning capacity, and in node disruptions.\n\nThe following diagram illustrates how NodeClaims interact with other components during Karpenter-driven node creation.\n\n![nodeclaim-node-creation](/nodeclaims.png)\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nConfigure the `KARPENTER_NAMESPACE` environment variable to the namespace where you've installed Karpenter (`kube-system` is the default). Follow along with the Karpenter logs in your cluster and do the following:\n\n```bash\nexport KARPENTER_NAMESPACE=\"kube-system\"\nkubectl logs -f -n \"${KARPENTER_NAMESPACE}\" \\\n   -l app.kubernetes.io/name=karpenter\n```\nIn a separate terminal, start some pods that would require Karpenter to create nodes to handle those pods.\nFor example, start up some inflate pods as described in [Scale up deployment]({{< ref \"../getting-started/getting-started-with-karpenter/#6-scale-up-deployment\" >}}).\n{{% /alert %}}\n\nAs illustrated in the previous diagram, Karpenter interacts with NodeClaims and related components when creating a node:\n\n1. Watches for pods and monitors NodePools and NodeClasses:\n    * Checks the pod scheduling constraints and resource requests.\n    * Cross-references the requirements with the existing NodePools and NodeClasses, (e.g. zones, arch, os)\n\n   **Example log:**\n   ```json\n   {\n       \"level\": \"INFO\",\n       \"time\": \"2024-06-22T02:24:16.114Z\",\n       \"message\": \"found provisionable pod(s)\",\n       \"commit\": \"490ef94\",\n       \"Pods\": \"default/inflate-66fb68585c-xvs86, default/inflate-66fb68585c-hpcdz, default/inflate-66fb68585c-8xztf,01234567adb205c7e default/inflate-66fb68585c-t29d8, default/inflate-66fb68585c-nxflz\",\n       \"duration\": \"100.761702ms\"\n   }\n   ```\n\n2. Computes the shape and size of a NodeClaim (or NodeClaims) to create in the cluster to fit the set of pods from step 1.\n\n   **Example log:**\n   ```json\n   {\n       \"level\": \"INFO\",\n       \"time\": \"2024-06-22T02:24:16.114Z\",\n       \"message\": \"computed new nodeclaim(s) to fit pod(s)\",\n       \"controller\": \"provisioner\",\n       \"nodeclaims\": 1,\n       \"pods\": 5\n   }\n   ```\n\n3. Creates the NodeClaim object in the cluster.\n\n   **Example log:**\n   ```json\n   {\n       \"level\": \"INFO\",\n       \"time\": \"2024-06-22T02:24:16.128Z\",\n       \"message\": \"created nodeclaim\",\n       \"controller\": \"provisioner\",\n       \"NodePool\": {\n           \"name\":\"default\"\n       },\n       \"NodeClaim\": {\n           \"name\":\"default-sfpsl\"\n       },\n       \"requests\": {\n           \"cpu\":\"5150m\",\n           \"pods\":\"8\"\n       },\n       \"instance-types\": \"c3.2xlarge, c4.2xlarge, c4.4xlarge, c5.2xlarge, c5.4xlarge and 55 other(s)\"\n   }\n   ```\n\n4. Finds the new NodeClaim and translates it into an API call to create a cloud provider instance, logging\n   the response of the API call.\n\n   If the API response is an unrecoverable error, such as an Insufficient Capacity Error, Karpenter will delete the NodeClaim, mark that instance type as temporarily unavailable, and create another NodeClaim if necessary.\n\n   **Example log:**\n   ```json\n   {\n       \"level\": \"INFO\",\n       \"time\": \"2024-06-22T02:24:19.028Z\",\n       \"message\": \"launched nodeclaim\",\n       \"controller\": \"nodeclaim.lifecycle\",\n       \"NodeClaim\": {\n           \"name\": \"default-sfpsl\"\n       },\n       \"provider-id\": \"aws:///us-west-2b/i-01234567adb205c7e\",\n       \"instance-type\": \"c3.2xlarge\",\n       \"zone\": \"us-west-2b\",\n       \"capacity-type\": \"spot\",\n       \"allocatable\": {\n         \"cpu\": \"7910m\",\n         \"ephemeral-storage\": \"17Gi\",\n         \"memory\": \"13215Mi\",\n         \"pods\": \"58\"\n       }\n   }\n   ```\n\n5. Karpenter watches for the instance to register itself with the cluster as a node, and updates the node's\n   labels, annotations, taints, owner refs, and finalizer to match what was defined in the NodePool and NodeClaim. Once this step is\n   completed, Karpenter will remove the `karpenter.sh/unregistered` taint from the Node.\n\n   If this fails to succeed within 15 minutes, Karpenter will remove the NodeClaim from the cluster and delete\n   the underlying instance, creating another NodeClaim if necessary.\n\n   **Example log:**\n   ```json\n   {\n     \"level\": \"INFO\",\n     \"time\": \"2024-06-22T02:26:19.028Z\",\n     \"message\": \"registered nodeclaim\",\n     \"controller\": \"nodeclaim.lifecycle\",\n     \"NodeClaim\": {\n       \"name\": \"default-sfpsl\"\n     },\n     \"provider-id\": \"aws:///us-west-2b/i-01234567adb205c7e\",\n     \"Node\": {\n       \"name\": \"ip-xxx-xxx-xx-xxx.us-west-2.compute.internal\"\n     }\n   }\n   ```\n\n6. Karpenter continues to watch the node, waiting until the node becomes ready, has all its startup taints removed,\n   and has all requested resources registered on the node.\n\n   **Example log:**\n   ```json\n   {\n     \"level\": \"INFO\",\n     \"time\": \"2024-06-22T02:24:52.642Z\",\n     \"message\": \"initialized nodeclaim\",\n     \"controller\": \"nodeclaim.lifecycle\",\n     \"NodeClaim\": {\n       \"name\": \"default-sfpsl\"\n     },\n     \"provider-id\": \"aws:///us-west-2b/i-01234567adb205c7e\",\n     \"Node\": {\n       \"name\": \"ip-xxx-xxx-xx-xxx.us-west-2.compute.internal\"\n     },\n     \"allocatable\": {\n       \"cpu\": \"7910m\",\n       \"ephemeral-storage\": \"18242267924\",\n       \"hugepages-2Mi\": \"0\",\n       \"memory\": \"14320468Ki\",\n       \"pods\": \"58\"\n     }\n   }\n   ```\n\n## NodeClaim example\nThe following is an example of a NodeClaim. Keep in mind that you cannot modify a NodeClaim.\nTo see the contents of a NodeClaim, get the name of your NodeClaim, then run `kubectl describe` to see its contents:\n\n```\nkubectl get nodeclaim\nNAME            TYPE               ZONE         NODE                                           READY   AGE\ndefault-m6pzn   c7i-flex.2xlarge   us-west-1a   ip-xxx-xxx-xx-xxx.us-west-1.compute.internal   True    7m50s\n\nkubectl describe nodeclaim default-m6pzn\n```\nStarting at the bottom of this example, here are some highlights of what the NodeClaim contains:\n\n* The Node Name (ip-xxx-xxx-xx-xxx.us-west-1.compute.internal) and Provider ID (aws:///us-west-1a/i-xxxxxxxxxxxxxxxxx) identify the instance that is fulfilling this NodeClaim.\n* Image ID (ami-0ccbbed159cce4e37) represents the operating system image running on the node.\n* Status shows the resources that are available on the node (CPU, memory, and so on) as well as the conditions associated with the node. The conditions show the status of the node, including whether the node is launched, registered, and initialized. This is particularly useful if Pods are not deploying to the node and you want to determine the cause.\n* Spec contains the metadata required for Karpenter to launch and manage an instance. This includes any scheduling requirements, resource requirements, the NodeClass reference, taints, and immutable disruption fields (expireAfter and terminationGracePeriod).\n* Additional information includes annotations and labels which should be synced to the Node, creation metadata, the termination finalizer, and the owner reference.\n\n```\nName:         default-x9wxq\nNamespace:\nLabels:       karpenter.k8s.aws/instance-category=c\n              karpenter.k8s.aws/instance-cpu=8\n              karpenter.k8s.aws/instance-cpu-manufacturer=amd\n              karpenter.k8s.aws/instance-ebs-bandwidth=3170\n              karpenter.k8s.aws/instance-encryption-in-transit-supported=true\n              karpenter.k8s.aws/instance-family=c5a\n              karpenter.k8s.aws/instance-generation=5\n              karpenter.k8s.aws/instance-hypervisor=nitro\n              karpenter.k8s.aws/instance-memory=16384\n              karpenter.k8s.aws/instance-network-bandwidth=2500\n              karpenter.k8s.aws/instance-size=2xlarge\n              karpenter.sh/capacity-type=spot\n              karpenter.sh/nodepool=default\n              kubernetes.io/arch=amd64\n              kubernetes.io/os=linux\n              node.kubernetes.io/instance-type=c5a.2xlarge\n              topology.k8s.aws/zone-id=usw2-az3\n              topology.kubernetes.io/region=us-west-2\n              topology.kubernetes.io/zone=us-west-2c\nAnnotations:  compatibility.karpenter.k8s.aws/cluster-name-tagged: true\n              compatibility.karpenter.k8s.aws/kubelet-drift-hash: 15379597991425564585\n              karpenter.k8s.aws/ec2nodeclass-hash: 5763643673275251833\n              karpenter.k8s.aws/ec2nodeclass-hash-version: v3\n              karpenter.k8s.aws/tagged: true\n              karpenter.sh/nodepool-hash: 377058807571762610\n              karpenter.sh/nodepool-hash-version: v3\nAPI Version:  karpenter.sh/v1\nKind:         NodeClaim\nMetadata:\n  Creation Timestamp:  2024-08-07T05:37:30Z\n  Finalizers:\n    karpenter.sh/termination\n  Generate Name:  default-\n  Generation:     1\n  Owner References:\n    API Version:           karpenter.sh/v1\n    Block Owner Deletion:  true\n    Kind:                  NodePool\n    Name:                  default\n    UID:                   6b9c6781-ac05-4a4c-ad6a-7551a07b2ce7\n  Resource Version:        19600526\n  UID:                     98a2ba32-232d-45c4-b7c0-b183cfb13d93\nSpec:\n  Expire After:  720h0m0s\n  Node Class Ref:\n    Group:\n    Kind:   EC2NodeClass\n    Name:   default\n  Requirements:\n    Key:       kubernetes.io/arch\n    Operator:  In\n    Values:\n      amd64\n    Key:       kubernetes.io/os\n    Operator:  In\n    Values:\n      linux\n    Key:       karpenter.sh/capacity-type\n    Operator:  In\n    Values:\n      spot\n    Key:       karpenter.k8s.aws/instance-category\n    Operator:  In\n    Values:\n      c\n      m\n      r\n    Key:       karpenter.k8s.aws/instance-generation\n    Operator:  Gt\n    Values:\n      2\n    Key:       karpenter.sh/nodepool\n    Operator:  In\n    Values:\n      default\n    Key:       node.kubernetes.io/instance-type\n    Operator:  In\n    Values:\n      c3.xlarge\n      c4.xlarge\n      c5.2xlarge\n      c5.xlarge\n      c5a.xlarge\n      c5ad.2xlarge\n      c5ad.xlarge\n      c5d.2xlarge\n  Resources:\n    Requests:\n      Cpu:   3150m\n      Pods:  6\n  Startup Taints:\n    Effect:  NoSchedule\n    Key:     app.dev/example-startup\n  Taints:\n    Effect:                  NoSchedule\n    Key:                     app.dev/example\n  Termination Grace Period:  1h0m0s\nStatus:\n  Allocatable:\n    Cpu:                        7910m\n    Ephemeral - Storage:        17Gi\n    Memory:                     14162Mi\n    Pods:                       58\n    vpc.amazonaws.com/pod-eni:  38\n  Capacity:\n    Cpu:                        8\n    Ephemeral - Storage:        20Gi\n    Memory:                     15155Mi\n    Pods:                       58\n    vpc.amazonaws.com/pod-eni:  38\n  Conditions:\n    Last Transition Time:  2024-08-07T05:38:08Z\n    Message:\n    Reason:                Consolidatable\n    Status:                True\n    Type:                  Consolidatable\n    Last Transition Time:  2024-08-07T05:38:07Z\n    Message:\n    Reason:                Initialized\n    Status:                True\n    Type:                  Initialized\n    Last Transition Time:  2024-08-07T05:37:33Z\n    Message:\n    Reason:                Launched\n    Status:                True\n    Type:                  Launched\n    Last Transition Time:  2024-08-07T05:38:07Z\n    Message:\n    Reason:                Ready\n    Status:                True\n    Type:                  Ready\n    Last Transition Time:  2024-08-07T05:37:55Z\n    Message:\n    Reason:                Registered\n    Status:                True\n    Type:                  Registered\n  Image ID:                ami-08946d4d49fc3f27b\n  Node Name:               ip-xxx-xxx-xxx-xxx.us-west-2.compute.internal\n  Provider ID:             aws:///us-west-2c/i-01234567890123\nEvents:\n  Type    Reason             Age   From       Message\n  ----    ------             ----  ----       -------\n  Normal  Launched           70s   karpenter  Status condition transitioned, Type: Launched, Status: Unknown -> True, Reason: Launched\n  Normal  DisruptionBlocked  70s   karpenter  Cannot disrupt NodeClaim: state node doesn't contain both a node and a nodeclaim\n  Normal  Registered         48s   karpenter  Status condition transitioned, Type: Registered, Status: Unknown -> True, Reason: Registered\n  Normal  Initialized        36s   karpenter  Status condition transitioned, Type: Initialized, Status: Unknown -> True, Reason: Initialized\n  Normal  Ready              36s   karpenter  Status condition transitioned, Type: Ready, Status: Unknown -> True, Reason: Ready\n```\n"
  },
  {
    "path": "website/content/en/v1.9/concepts/nodeclasses.md",
    "content": "---\ntitle: \"NodeClasses\"\nlinkTitle: \"NodeClasses\"\nweight: 2\ndescription: >\n  Configure AWS-specific settings with EC2NodeClasses\n---\n\nNode Classes enable configuration of AWS specific settings.\nEach NodePool must reference an EC2NodeClass using `spec.template.spec.nodeClassRef`.\nMultiple NodePools may point to the same EC2NodeClass.\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\nspec:\n  template:\n    spec:\n      nodeClassRef:\n        group: karpenter.k8s.aws\n        kind: EC2NodeClass\n        name: default\n---\napiVersion: karpenter.k8s.aws/v1\nkind: EC2NodeClass\nmetadata:\n  name: default\nspec:\n  kubelet:\n    podsPerCore: 2\n    maxPods: 20\n    systemReserved:\n      cpu: 100m\n      memory: 100Mi\n      ephemeral-storage: 1Gi\n    kubeReserved:\n      cpu: 200m\n      memory: 100Mi\n      ephemeral-storage: 3Gi\n    evictionHard:\n      memory.available: 5%\n      nodefs.available: 10%\n      nodefs.inodesFree: 10%\n    evictionSoft:\n      memory.available: 500Mi\n      nodefs.available: 15%\n      nodefs.inodesFree: 15%\n    evictionSoftGracePeriod:\n      memory.available: 1m\n      nodefs.available: 1m30s\n      nodefs.inodesFree: 2m\n    evictionMaxPodGracePeriod: 60\n    imageGCHighThresholdPercent: 85\n    imageGCLowThresholdPercent: 80\n    cpuCFSQuota: true\n    clusterDNS: [\"10.0.1.100\"]\n  # Optional, dictates UserData generation and default block device mappings.\n  # May be ommited when using an `alias` amiSelectorTerm, otherwise required.\n  amiFamily: AL2\n\n  # Required, discovers subnets to attach to instances\n  # Each term in the array of subnetSelectorTerms is ORed together\n  # Within a single term, all conditions are ANDed\n  subnetSelectorTerms:\n    # Select on any subnet that has the \"karpenter.sh/discovery: ${CLUSTER_NAME}\"\n    # AND the \"environment: test\" tag OR any subnet with ID \"subnet-09fa4a0a8f233a921\"\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\"\n        environment: test\n    - id: subnet-09fa4a0a8f233a921\n\n  # Required, discovers security groups to attach to instances\n  # Each term in the array of securityGroupSelectorTerms is ORed together\n  # Within a single term, all conditions are ANDed\n  securityGroupSelectorTerms:\n    # Select on any security group that has both the \"karpenter.sh/discovery: ${CLUSTER_NAME}\" tag\n    # AND the \"environment: test\" tag OR any security group with the \"my-security-group\" name\n    # OR any security group with ID \"sg-063d7acfb4b06c82c\"\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\"\n        environment: test\n    - name: my-security-group\n    - id: sg-063d7acfb4b06c82c\n\n  # Optional, IAM role to use for the node identity.\n  # Must specify one of \"role\" or \"instanceProfile\" for Karpenter to launch nodes\n  role: \"KarpenterNodeRole-${CLUSTER_NAME}\"\n\n  # Optional, IAM instance profile to use for the node identity.\n  # Must specify one of \"role\" or \"instanceProfile\" for Karpenter to launch nodes\n  instanceProfile: \"KarpenterNodeInstanceProfile-${CLUSTER_NAME}\"\n\n  # Each term in the array of amiSelectorTerms is ORed together\n  # Within a single term, all conditions are ANDed\n  amiSelectorTerms:\n    # Select on any AMI that has both the `karpenter.sh/discovery: ${CLUSTER_NAME}`\n    # AND `environment: test` tags OR any AMI with the name `my-ami` OR an AMI with\n    # ID `ami-123` OR an AMI with ID matching the value of my-custom-parameter\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\"\n        environment: test\n    - name: my-ami\n    - id: ami-123\n    - ssmParameter: my-custom-parameter # ssm parameter name or ARN\n    # Select EKS optimized AL2023 AMIs with version `v20240703`. This term is mutually\n    # exclusive and can't be specified with other terms.\n    # - alias: al2023@v20240703\n\n  # Optional, each term in the array of capacityReservationSelectorTerms is ORed together.\n  capacityReservationSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: ${CLUSTER_NAME}\n    - id: cr-123\n    - instanceMatchCriteria: open\n\n  # Optional, propagates tags to underlying EC2 resources\n  tags:\n    team: team-a\n    app: team-a-app\n\n  # Optional, configures IMDS for the instance\n  metadataOptions:\n    httpEndpoint: enabled\n    httpProtocolIPv6: disabled\n    httpPutResponseHopLimit: 1 # This is changed to disable IMDS access from containers not on the host network\n    httpTokens: required\n\n  # Optional, configures storage devices for the instance\n  blockDeviceMappings:\n    - deviceName: /dev/xvda\n      ebs:\n        volumeSize: 100Gi\n        volumeType: gp3\n        iops: 10000\n        encrypted: true\n        kmsKeyID: \"1234abcd-12ab-34cd-56ef-1234567890ab\"\n        deleteOnTermination: true\n        throughput: 125\n        snapshotID: snap-0123456789\n        volumeInitializationRate: 100\n\n  # Optional, use instance-store volumes for node ephemeral-storage\n  instanceStorePolicy: RAID0\n\n  # Optional, overrides autogenerated userdata with a merge semantic\n  userData: |\n    echo \"Hello world\"\n\n  # Optional, configures detailed monitoring for the instance\n  detailedMonitoring: true\n\n  # Optional, configures if the instance should be launched with an associated public IP address.\n  # If not specified, the default value depends on the subnet's public IP auto-assign setting.\n  associatePublicIPAddress: true\nstatus:\n  # Resolved subnets\n  subnets:\n    - id: subnet-0a462d98193ff9fac\n      zone: us-east-2b\n    - id: subnet-0322dfafd76a609b6\n      zone: us-east-2c\n    - id: subnet-0727ef01daf4ac9fe\n      zone: us-east-2b\n    - id: subnet-00c99aeafe2a70304\n      zone: us-east-2a\n    - id: subnet-023b232fd5eb0028e\n      zone: us-east-2c\n    - id: subnet-03941e7ad6afeaa72\n      zone: us-east-2a\n\n  # Resolved security groups\n  securityGroups:\n    - id: sg-041513b454818610b\n      name: ClusterSharedNodeSecurityGroup\n    - id: sg-0286715698b894bca\n      name: ControlPlaneSecurityGroup-1AQ073TSAAPW\n\n  # Resolved AMIs\n  amis:\n    - id: ami-01234567890123456\n      name: custom-ami-amd64\n      requirements:\n        - key: kubernetes.io/arch\n          operator: In\n          values:\n            - amd64\n    - id: ami-01234567890123456\n      name: custom-ami-arm64\n      requirements:\n        - key: kubernetes.io/arch\n          operator: In\n          values:\n            - arm64\n\n  # Capacity Reservations\n  capacityReservations:\n    - availabilityZone: us-west-2a\n      id: cr-01234567890123456\n      instanceMatchCriteria: targeted\n      instanceType: g6.48xlarge\n      ownerID: \"012345678901\"\n      reservationType: capacity-block\n      state: expiring\n    - availabilityZone: us-west-2c\n      id: cr-12345678901234567\n      instanceMatchCriteria: open\n      instanceType: g6.48xlarge\n      ownerID: \"98765432109\"\n      reservationType: default\n      state: active\n\n  # Generated instance profile name from \"role\"\n  instanceProfile: \"${CLUSTER_NAME}-0123456778901234567789\"\n  conditions:\n    - lastTransitionTime: \"2024-02-02T19:54:34Z\"\n      status: \"True\"\n      type: InstanceProfileReady\n    - lastTransitionTime: \"2024-02-02T19:54:34Z\"\n      status: \"True\"\n      type: SubnetsReady\n    - lastTransitionTime: \"2024-02-02T19:54:34Z\"\n      status: \"True\"\n      type: SecurityGroupsReady\n    - lastTransitionTime: \"2024-02-02T19:54:34Z\"\n      status: \"True\"\n      type: AMIsReady\n    - lastTransitionTime: \"2024-02-02T19:54:34Z\"\n      status: \"True\"\n      type: Ready\n```\nRefer to the [NodePool docs]({{<ref \"./nodepools\" >}}) for settings applicable to all providers. To explore various `EC2NodeClass` configurations, refer to the examples provided [in the Karpenter Github repository](https://github.com/aws/karpenter/blob/main/examples/v1/).\n\n\n## spec.kubelet\n\nKarpenter provides the ability to specify a few additional Kubelet arguments.\nThese are all optional and provide support for additional customization and use cases.\nAdjust these only if you know you need to do so.\nFor more details on kubelet settings, see the [KubeletConfiguration reference](https://kubernetes.io/docs/reference/config-api/kubelet-config.v1/).\nThe implemented fields are a subset of the full list of upstream kubelet configuration arguments.\n\n```yaml\nkubelet:\n  podsPerCore: 2\n  maxPods: 20\n  systemReserved:\n    cpu: 100m\n    memory: 100Mi\n    ephemeral-storage: 1Gi\n  kubeReserved:\n    cpu: 200m\n    memory: 100Mi\n    ephemeral-storage: 3Gi\n  evictionHard:\n    memory.available: 5%\n    nodefs.available: 10%\n    nodefs.inodesFree: 10%\n  evictionSoft:\n    memory.available: 500Mi\n    nodefs.available: 15%\n    nodefs.inodesFree: 15%\n  evictionSoftGracePeriod:\n    memory.available: 1m\n    nodefs.available: 1m30s\n    nodefs.inodesFree: 2m\n  evictionMaxPodGracePeriod: 60\n  imageGCHighThresholdPercent: 85\n  imageGCLowThresholdPercent: 80\n  cpuCFSQuota: true\n  clusterDNS: [\"10.0.1.100\"]\n```\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nIf you need to specify a field that isn't present in `spec.kubelet`, you can set it via custom [UserData]({{< ref \"#specuserdata\" >}}).\nFor example, if you wanted to configure `maxPods` and `registryPullQPS` you would set the former through `spec.kubelet` and the latter through UserData.\nThe following example achieves this with AL2023:\n\n```yaml\napiVersion: karpenter.k8s.aws/v1\nkind: EC2NodeClass\nspec:\n  amiSelectorTerms:\n    - alias: al2023@v20240807\n  kubelet:\n    maxPods: 42\n  userData: |\n    apiVersion: node.eks.aws/v1alpha1\n    kind: NodeConfig\n    spec:\n      kubelet:\n        config:\n          # Configured through UserData since unavailable in `spec.kubelet`\n          registryPullQPS: 10\n```\n\nNote that when using the `Custom` AMIFamily you will need to specify fields **both** in `spec.kubelet` and `spec.userData`.\n{{% /alert %}}\n\n#### Pods Per Core\n\nAn alternative way to dynamically set the maximum density of pods on a node is to use the `.spec.kubelet.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.\n\nThe 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.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\n`maxPods` may not be set in the `kubelet` of an EC2NodeClass, 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 EC2NodeClass will not cause unexpected behavior by exceeding the `maxPods` value.\n{{% /alert %}}\n\n#### Max Pods\n\nFor 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.kubelet.maxPods`. This value will be used during Karpenter pod scheduling and passed through to `--max-pods` on kubelet startup.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nWhen 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.\n{{% /alert %}}\n\n{{% alert title=\"Windows Support Notice\" color=\"warning\" %}}\nPresently, Windows worker nodes do not support using more than one ENI.\nAs a consequence, the number of IP addresses, and subsequently, the number of pods that a Windows worker node can support is limited by the number of IPv4 addresses available on the primary ENI.\nCurrently, Karpenter will only consider individual secondary IP addresses when calculating the pod density limit.\n{{% /alert %}}\n\n### Reserved Resources\n\nKarpenter 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.kubelet.systemReserved` values and the `--kube-reserved` configuration defaults with the `.spec.kubelet.kubeReserved` values.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nKarpenter considers these reserved resources when computing the allocatable ephemeral storage on a given instance type.\nIf `kubeReserved` is not specified, Karpenter will compute the default reserved [CPU](https://github.com/awslabs/amazon-eks-ami/blob/db28da15d2b696bc08ac3aacc9675694f4a69933/files/bootstrap.sh#L251) and [memory](https://github.com/awslabs/amazon-eks-ami/blob/db28da15d2b696bc08ac3aacc9675694f4a69933/files/bootstrap.sh#L235) resources for the purpose of ephemeral storage computation.\nThese defaults are based on the defaults on Karpenter's supported AMI families, which are not the same as the kubelet defaults.\nYou should be aware of the CPU and memory default calculation when using Custom AMI Families. If they don't align, there may be a difference in Karpenter's computed allocatable ephemeral storage and the actually ephemeral storage available on the node.\n{{% /alert %}}\n\n### Eviction Thresholds\n\nThe 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.\n\nKubelet 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.\n\nKarpenter supports [hard evictions](https://kubernetes.io/docs/concepts/scheduling-eviction/node-pressure-eviction/#hard-eviction-thresholds) through the `.spec.kubelet.evictionHard` field and [soft evictions](https://kubernetes.io/docs/concepts/scheduling-eviction/node-pressure-eviction/#soft-eviction-thresholds) through the `.spec.kubelet.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.\n\n```yaml\nkubelet:\n  evictionHard:\n    memory.available: 500Mi\n    nodefs.available: 10%\n    nodefs.inodesFree: 10%\n    imagefs.available: 5%\n    imagefs.inodesFree: 5%\n    pid.available: 7%\n  evictionSoft:\n    memory.available: 1Gi\n    nodefs.available: 15%\n    nodefs.inodesFree: 15%\n    imagefs.available: 10%\n    imagefs.inodesFree: 10%\n    pid.available: 10%\n```\n\n#### Supported Eviction Signals\n\n| Eviction Signal    | Description                                                                     |\n|--------------------|---------------------------------------------------------------------------------|\n| memory.available   | memory.available := node.status.capacity[memory] - node.stats.memory.workingSet |\n| nodefs.available   | nodefs.available := node.stats.fs.available                                     |\n| nodefs.inodesFree  | nodefs.inodesFree := node.stats.fs.inodesFree                                   |\n| imagefs.available  | imagefs.available := node.stats.runtime.imagefs.available                       |\n| imagefs.inodesFree | imagefs.inodesFree := node.stats.runtime.imagefs.inodesFree                     |\n| pid.available      | pid.available := node.stats.rlimit.maxpid - node.stats.rlimit.curproc           |\n\nFor 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.\n\n#### Soft Eviction Grace Periods\n\nSoft 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.\n\nOptionally, 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.\n\n```yaml\nkubelet:\n  evictionSoftGracePeriod:\n    memory.available: 1m\n    nodefs.available: 1m30s\n    nodefs.inodesFree: 2m\n    imagefs.available: 1m30s\n    imagefs.inodesFree: 2m\n    pid.available: 2m\n  evictionMaxPodGracePeriod: 60\n```\n\n### Pod Density\n\nBy 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.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nBy default, the VPC CNI allocates IPs for a node and pods from the same subnet. With [VPC CNI Custom Networking](https://aws.github.io/aws-eks-best-practices/networking/custom-networking), the pods will receive IP addresses from another subnet dedicated to pod IPs. This approach makes it easier to manage IP addresses and allows for separate Network Access Control Lists (NACLs) applied to your pods. VPC CNI Custom Networking reduces the pod density of a node since one of the ENI attachments will be used for the node and cannot share the allocated IPs on the interface to pods. Karpenter supports VPC CNI Custom Networking and similar CNI setups where the primary node interface is separated from the pods interfaces through a global environment variable RESERVED_ENIS, see [Settings]({{<ref \"../reference/settings\" >}}). In the common case, RESERVED_ENIS should be set to \"1\" if using Custom Networking. {{% /alert %}}\n\n{{% alert title=\"Windows Support Notice\" color=\"warning\" %}}\nIt's currently not possible to specify custom networking with Windows nodes.\n{{% /alert %}}\n\n## spec.amiFamily\n\nAMIFamily dictates the default bootstrapping logic for nodes provisioned through this `EC2NodeClass`.\nAn `amiFamily` is only required if you don't specify a `spec.amiSelectorTerms.alias` object.\nFor example, if you specify `alias: al2023@v20240807`, the `amiFamily` is implicitly `AL2023`.\n\nAMIFamily does not impact which AMI is discovered, only the UserData generation and default BlockDeviceMappings. To automatically discover EKS optimized AMIs, use the new [`alias` field in amiSelectorTerms]({{< ref \"#specamiselectorterms\" >}}).\n\n{{% alert title=\"Ubuntu Support Dropped at v1\" color=\"warning\" %}}\n\nSupport for the Ubuntu AMIFamily has been dropped at Karpenter `v1.0.0`.\nThis means Karpenter no longer supports automatic AMI discovery and UserData generation for Ubuntu.\nTo continue using Ubuntu AMIs, you will need to select Ubuntu AMIs using `amiSelectorTerms`.\n\nAdditionally, you will need to either maintain UserData yourself using the `Custom` AMIFamily, or you can use the `AL2` AMIFamily and custom `blockDeviceMappings` (as shown below).\nThe `AL2` family has an identical UserData format, but this compatibility isn't guaranteed long term.\nChanges to AL2's or Ubuntu's UserData format could result in incompatibility, at which point the `Custom` AMIFamily must be used.\n\n**Ubuntu NodeClass Example:**\n```yaml\napiVersion: karpenter.k8s.aws/v1\nkind: EC2NodeClass\nspec:\n  amiFamily: AL2\n  amiSelectorTerms:\n    - id: ami-placeholder\n  blockDeviceMappings:\n  - deviceName: '/dev/sda1'\n    rootVolume: true\n    ebs:\n      encrypted: true\n      volumeType: gp3\n      volumeSize: 20Gi\n```\n\n{{% /alert %}}\n\n\n### AL2\n\n{{% alert title=\"AL2 support dropped at Kubernetes 1.33\" color=\"warning\" %}}\nKubernetes version 1.32 is the last version for which Amazon EKS will release Amazon Linux 2 (AL2) AMIs.\n{{% /alert %}}\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nNote that Karpenter will automatically generate a call to the `/etc/eks/bootstrap.sh` script as part of its generated UserData. When using `amiFamily: AL2` you should not call this script yourself in `.spec.userData`. If you need to, use the [Custom AMI family]({{< ref \"./nodeclasses/#custom\" >}}) instead.\n{{% /alert %}}\n\n```bash\nMIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"//\"\n\n--//\nContent-Type: text/x-shellscript; charset=\"us-ascii\"\n\n#!/bin/bash -xe\nexec > >(tee /var/log/user-data.log|logger -t user-data -s 2>/dev/console) 2>&1\n/etc/eks/bootstrap.sh 'test-cluster' --apiserver-endpoint 'https://test-cluster' --b64-cluster-ca 'ca-bundle' \\\n--dns-cluster-ip '10.100.0.10' \\\n--use-max-pods false \\\n--kubelet-extra-args '--node-labels=karpenter.sh/capacity-type=on-demand,karpenter.sh/nodepool=test  --max-pods=110'\n--//--\n```\n\n### AL2023\n\n```text\nMIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"//\"\n\n--//\nContent-Type: application/node.eks.aws\n\n# Karpenter Generated NodeConfig\napiVersion: node.eks.aws/v1alpha1\nkind: NodeConfig\nspec:\n  cluster:\n    name: test-cluster\n    apiServerEndpoint: https://example.com\n    certificateAuthority: ca-bundle\n    cidr: 10.100.0.0/16\n  kubelet:\n    config:\n      maxPods: 110\n    flags:\n      - --node-labels=karpenter.sh/capacity-type=on-demand,karpenter.sh/nodepool=test\n\n--//--\n\n```\n\n### Bottlerocket\n\n```toml\n[settings]\n[settings.kubernetes]\napi-server = 'https://test-cluster'\ncluster-certificate = 'ca-bundle'\ncluster-name = 'test-cluster'\ncluster-dns-ip = '10.100.0.10'\nmax-pods = 110\n\n[settings.kubernetes.node-labels]\n'karpenter.sh/capacity-type' = 'on-demand'\n'karpenter.sh/nodepool' = 'test'\n```\n\n### Windows2019\n\n```powershell\n<powershell>\n[string]$EKSBootstrapScriptFile = \"$env:ProgramFiles\\Amazon\\EKS\\Start-EKSBootstrap.ps1\"\n& $EKSBootstrapScriptFile -EKSClusterName 'test-cluster' -APIServerEndpoint 'https://test-cluster' -Base64ClusterCA 'ca-bundle' -KubeletExtraArgs '--node-labels=\"karpenter.sh/capacity-type=on-demand,karpenter.sh/nodepool=test\" --max-pods=110' -DNSClusterIP '10.100.0.10'\n</powershell>\n```\n\n### Windows2022\n\n```powershell\n<powershell>\n[string]$EKSBootstrapScriptFile = \"$env:ProgramFiles\\Amazon\\EKS\\Start-EKSBootstrap.ps1\"\n& $EKSBootstrapScriptFile -EKSClusterName 'test-cluster' -APIServerEndpoint 'https://test-cluster' -Base64ClusterCA 'ca-bundle' -KubeletExtraArgs '--node-labels=\"karpenter.sh/capacity-type=on-demand,karpenter.sh/nodepool=test\" --max-pods=110' -DNSClusterIP '10.100.0.10'\n</powershell>\n```\n\n### Windows2025\n\n```powershell\n<powershell>\n[string]$EKSBootstrapScriptFile = \"$env:ProgramFiles\\Amazon\\EKS\\Start-EKSBootstrap.ps1\"\n& $EKSBootstrapScriptFile -EKSClusterName 'test-cluster' -APIServerEndpoint 'https://test-cluster' -Base64ClusterCA 'ca-bundle' -KubeletExtraArgs '--node-labels=\"karpenter.sh/capacity-type=on-demand,karpenter.sh/nodepool=test\" --max-pods=110' -DNSClusterIP '10.100.0.10'\n</powershell>\n```\n\n### Custom\n\nThe `Custom` AMIFamily ships without any default userData to allow you to configure custom bootstrapping for control planes or images that don't support the default methods from the other families. For this AMIFamily, kubelet must add the taint `karpenter.sh/unregistered:NoExecute` via the `--register-with-taints` flag ([flags](https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet/#options)) or the KubeletConfiguration spec ([options](https://kubernetes.io/docs/reference/config-api/kubelet-config.v1/#kubelet-config-k8s-io-v1-CredentialProviderConfig) and [docs](https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/)). Karpenter will fail to register nodes that do not have this taint.\n\n## spec.subnetSelectorTerms\n\nSubnet Selector Terms allow you to specify selection logic for a set of subnet options that Karpenter can choose from when launching an instance from the `EC2NodeClass`. Karpenter discovers subnets through the `EC2NodeClass` using ids or [tags](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html). 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.\n\nThis selection logic is modeled as terms, where each term contains multiple conditions that must all be satisfied for the selector to match. Effectively, all requirements within a single term are ANDed together. It's possible that you may want to select on two different subnets that have unrelated requirements. In this case, you can specify multiple terms which will be ORed together to form your selection logic. The example below shows how this selection logic is fulfilled.\n\n```yaml\nsubnetSelectorTerms:\n  # Select on any subnet that has the \"karpenter.sh/discovery: ${CLUSTER_NAME}\"\n  # AND the \"environment: test\" tag OR any subnet with ID \"subnet-09fa4a0a8f233a921\"\n  - tags:\n      karpenter.sh/discovery: \"${CLUSTER_NAME}\"\n      environment: test\n  - id: subnet-09fa4a0a8f233a921\n```\n\n{{% alert title=\"Tip\" color=\"secondary\" %}}\nSubnets may be specified by any tag, including `Name`. Selecting tag values using wildcards (`*`) is supported.\n{{% /alert %}}\n\n#### Examples\n\nSelect all with a specified tag key:\n```yaml\nspec:\n  subnetSelectorTerms:\n    - tags:\n        karpenter.sh/discovery/MyClusterName: '*'\n```\n\nSelect by name and tag (all criteria must match):\n```yaml\nspec:\n  subnetSelectorTerms:\n    - tags:\n        Name: my-subnet\n        MyTag: '' # matches all resources with the tag\n```\n\nSelect using multiple tag terms:\n```yaml\nspec:\n  subnetSelectorTerms:\n    - tags:\n        Name: \"my-subnet-1\"\n    - tags:\n        Name: \"my-subnet-2\"\n```\n\nSelect using wildcards:\n```yaml\nspec:\n  subnetSelectorTerms:\n    - tags:\n        Name: \"*Public*\"\n\n```\n\nSelect using ids:\n```yaml\nspec:\n  subnetSelectorTerms:\n    - id: \"subnet-09fa4a0a8f233a921\"\n    - id: \"subnet-0471ca205b8a129ae\"\n```\n\n\n## spec.securityGroupSelectorTerms\n\nSecurity Group Selector Terms allow you to specify selection logic for all security groups that will be attached to an instance launched from the `EC2NodeClass`. The security group of an instance is comparable to a set of firewall rules.\n[EKS creates at least two security groups by default](https://docs.aws.amazon.com/eks/latest/userguide/sec-group-reqs.html).\n\nThis selection logic is modeled as terms, where each term contains multiple conditions that must all be satisfied for the selector to match. Effectively, all requirements within a single term are ANDed together. It's possible that you may want to select on two different security groups that have unrelated requirements. In this case, you can specify multiple terms which will be ORed together to form your selection logic. The example below shows how this selection logic is fulfilled.\n\n```yaml\nsecurityGroupSelectorTerms:\n  # Select on any security group that has both the \"karpenter.sh/discovery: ${CLUSTER_NAME}\" tag\n  # AND the \"environment: test\" tag OR any security group with the \"my-security-group\" name\n  # OR any security group with ID \"sg-063d7acfb4b06c82c\"\n  - tags:\n      karpenter.sh/discovery: \"${CLUSTER_NAME}\"\n      environment: test\n  - name: my-security-group\n  - id: sg-063d7acfb4b06c82c\n```\n\n{{% alert title=\"Tip\" color=\"secondary\" %}}\nSecurity groups may be specified by any tag, including \"Name\". Selecting tags using wildcards (`*`) is supported.\n{{% /alert %}}\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nWhen launching nodes, Karpenter uses all the security groups that match the selector. If you choose to use the `kubernetes.io/cluster/$CLUSTER_NAME` tag for discovery, note that 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.\n\nTo verify if this restriction affects you, run the following commands.\n```bash\nCLUSTER_VPC_ID=\"$(aws eks describe-cluster --name $CLUSTER_NAME --query cluster.resourcesVpcConfig.vpcId --output text)\"\n\naws ec2 describe-security-groups --filters Name=vpc-id,Values=$CLUSTER_VPC_ID Name=tag-key,Values=kubernetes.io/cluster/$CLUSTER_NAME --query 'SecurityGroups[].[GroupName]' --output text\n```\n\nIf multiple securityGroups are printed, you will need more specific securityGroupSelectorTerms. We generally recommend that you use the `karpenter.sh/discovery: $CLUSTER_NAME` tag selector instead.\n{{% /alert %}}\n\n#### Examples\n\nSelect all assigned to a cluster:\n```yaml\nspec:\n  securityGroupSelectorTerms:\n    - tags:\n        kubernetes.io/cluster/$CLUSTER_NAME: \"owned\"\n```\n\nSelect all with a specified tag key:\n```yaml\nspec:\n  securityGroupSelectorTerms:\n    - tags:\n        MyTag: '*'\n```\n\nSelect by name and tag (all criteria must match):\n```yaml\nspec:\n  securityGroupSelectorTerms:\n    - name: my-security-group\n      tags:\n        MyTag: '*' # matches all resources with the tag\n```\n\nSelect using multiple tag terms:\n```yaml\nspec:\n  securityGroupSelectorTerms:\n    - tags:\n        Name: \"my-security-group-1\"\n    - tags:\n        Name: \"my-security-group-2\"\n```\n\nSelect by name using a wildcard:\n```yaml\nspec:\n  securityGroupSelectorTerms:\n    - name: \"*Public*\"\n```\n\nSelect using ids:\n```yaml\nspec:\n securityGroupSelectorTerms:\n    - id: \"sg-063d7acfb4b06c82c\"\n    - id: \"sg-06e0cf9c198874591\"\n```\n\n## spec.role\n\n`Role` is an optional field and tells Karpenter which IAM identity nodes should assume. You must specify one of `role` or `instanceProfile` when creating a Karpenter `EC2NodeClass`. If using the [Karpenter Getting Started Guide]({{<ref \"../getting-started/getting-started-with-karpenter\" >}}) to deploy Karpenter, you can use the `KarpenterNodeRole-$CLUSTER_NAME` role provisioned by that process.\n\n```yaml\nspec:\n  role: \"KarpenterNodeRole-$CLUSTER_NAME\"\n```\n\n## spec.instanceProfile\n\n`InstanceProfile` is an optional field and tells Karpenter which IAM identity nodes should assume. You must specify one of `role` or `instanceProfile` when creating a Karpenter `EC2NodeClass`. If you use the `instanceProfile` field instead of `role`, Karpenter will not manage the InstanceProfile on your behalf; instead, it expects that you have pre-provisioned an IAM instance profile and assigned it a role.\n\nYou can provision and assign a role to an IAM instance profile using [CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-instanceprofile.html) or by using the [`aws iam create-instance-profile`](https://docs.aws.amazon.com/cli/latest/reference/iam/create-instance-profile.html) and [`aws iam add-role-to-instance-profile`](https://docs.aws.amazon.com/cli/latest/reference/iam/add-role-to-instance-profile.html) commands in the CLI.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\n\nFor [private clusters](https://docs.aws.amazon.com/eks/latest/userguide/private-clusters.html) that do not have access to the public internet, using `spec.instanceProfile` is required. `spec.role` cannot be used since Karpenter needs to access IAM endpoints to manage a generated instance profile. IAM [doesn't support private endpoints](https://docs.aws.amazon.com/vpc/latest/privatelink/aws-services-privatelink-support.html) to enable accessing the service without going to the public internet.\n\n{{% /alert %}}\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nWhen using `spec.instanceProfile`, ensure you are using pre-provisioned instance profiles that you manage yourself.\n{{% /alert %}}\n\n## spec.amiSelectorTerms\n\nAMI Selector Terms are __required__ and are used to configure AMIs for Karpenter to use. AMIs are discovered through alias, id, owner, name, and [tags](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html).\n\nThis selection logic is modeled as terms, where each term contains multiple conditions that must all be satisfied for the selector to match.\nEffectively, all requirements within a single term are ANDed together.\nIt's possible that you may want to select on two different AMIs that have unrelated requirements.\nIn this case, you can specify multiple terms which will be ORed together to form your selection logic.\nThe example below shows how this selection logic is fulfilled.\n\n```yaml\namiSelectorTerms:\n  # Select on any AMI that has both the `karpenter.sh/discovery: ${CLUSTER_NAME}`\n  # AND `environment: test` tags OR any AMI with the name `my-ami` OR an AMI with\n  # ID `ami-123` OR an AMI with ID matching the value of my-custom-parameter\n  - tags:\n      karpenter.sh/discovery: \"${CLUSTER_NAME}\"\n      environment: test\n  - name: my-ami\n  - id: ami-123\n  - ssmParameter: my-custom-parameter # ssm parameter name or ARN\n  # Select EKS optimized AL2023 AMIs with version `v20240807`. This term is mutually\n  # exclusive and can't be specified with other terms.\n  # - alias: al2023@v20240807\n```\n\nAn `alias` term can be used to select EKS-optimized AMIs. An `alias` is formatted as `family@version`. Family can be one of the following values:\n\n* `al2`\n* `al2023`\n* `bottlerocket`\n* `windows2019`\n* `windows2022`\n* `windows2025`\n\nThe version string can be set to `latest`, or pinned to a specific AMI using the format of that AMI's GitHub release tags.\nFor example, AL2 and AL2023 use dates for their release, so they can be pinned as follows:\n```yaml\nalias: al2023@v20240703\n```\nBottlerocket uses a semantic version for their releases. You can pin bottlerocket as follows:\n```yaml\nalias: bottlerocket@v1.20.4\n```\nThe Windows family does not support pinning, so only `latest` is supported.\n\nThe following commands can be used to determine the versions availble for an alias in your region:\n\n{{< tabpane text=true right=false >}}\n  {{% tab \"AL2023\" %}}\n  ```bash\n  export K8S_VERSION=\"1.34\"\n  aws ssm get-parameters-by-path --path \"/aws/service/eks/optimized-ami/$K8S_VERSION/amazon-linux-2023/\" --recursive | jq -cr '.Parameters[].Name' | grep -v \"recommended\" | awk -F '/' '{print $10}' | sed -r 's/.*(v[[:digit:]]+)$/\\1/' | sort | uniq\n  ```\n  {{% /tab %}}\n  {{% tab \"AL2\" %}}\n  ```bash\n  export K8S_VERSION=\"1.34\"\n  aws ssm get-parameters-by-path --path \"/aws/service/eks/optimized-ami/$K8S_VERSION/amazon-linux-2/\" --recursive | jq -cr '.Parameters[].Name' | grep -v \"recommended\" | awk -F '/' '{print $8}' | sed -r 's/.*(v[[:digit:]]+)$/\\1/' | sort | uniq\n  ```\n  {{% /tab %}}\n  {{% tab \"Bottlerocket\" %}}\n  ```bash\n  export K8S_VERSION=\"1.34\"\n  aws ssm get-parameters-by-path --path \"/aws/service/bottlerocket/aws-k8s-$K8S_VERSION\" --recursive | jq -cr '.Parameters[].Name' | grep -v \"latest\" | awk -F '/' '{print $7}' | sort | uniq\n  ```\n  {{% /tab %}}\n{{< /tabpane >}}\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter supports automatic AMI selection and upgrades using the `latest` version pin, but this is **not** recommended for production environments.\nWhen using `latest`, a new AMI release will cause Karpenter to drift all out-of-date nodes in the cluster, replacing them with nodes running the new AMI.\nWe strongly recommend evaluating new AMIs in a lower environment before rolling them out into a production environment.\nMore details on Karpenter's recommendations for managing AMIs can be found [here]({{< ref \"../tasks/managing-amis\" >}}).\n{{% /alert %}}\n\nTo select an AMI by name, use the `name` field in the selector term. To select an AMI by id, use the `id` field in the selector term. To select AMIs that are not owned by `amazon` or the account that Karpenter is running in, use the `owner` field - you can use a combination of account aliases (e.g. `self` `amazon`, `your-aws-account-name`) and account IDs.\n\nIf owner is not set for `name`, it defaults to `self,amazon`, preventing Karpenter from inadvertently selecting an AMI that is owned by a different account. Tags don't require an owner as tags can only be discovered by the user who created them.\n\n{{% alert title=\"Tip\" color=\"secondary\" %}}\nAMIs may be specified by any AWS tag, including `Name`. Selecting by tag or by name using wildcards (`*`) is supported.\n{{% /alert %}}\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nIf `amiSelectorTerms` match more than one AMI, Karpenter will automatically determine which AMI best fits the workloads on the launched worker node under the following constraints:\n\n* When launching nodes, Karpenter automatically determines which architecture a custom AMI is compatible with and will use images that match an instanceType's requirements.\n    * Unless using an alias, Karpenter **cannot** detect requirements other than architecture. If you need to specify different AMIs for different kind of nodes (e.g. accelerated GPU AMIs), you should use a separate `EC2NodeClass`.\n* If multiple AMIs are found that can be used, Karpenter will choose the latest one.\n* If no AMIs are found that can be used, then no nodes will be provisioned.\n{{% /alert %}}\n\n#### Examples\n\nSelect by AMI family and version:\n```yaml\n  amiSelectorTerms:\n    - alias: al2023@v20240807\n```\n\nSelect all with a specified tag:\n\n```yaml\n  amiSelectorTerms:\n    - tags:\n        karpenter.sh/discovery/MyClusterName: '*'\n```\n\nSelect by name:\n```yaml\n  amiSelectorTerms:\n    - name: my-ami\n```\n\nSelect by `Name` tag:\n```yaml\n  amiSelectorTerms:\n    - tags:\n        Name: my-ami\n```\n\nSelect by name and owner:\n```yaml\n  amiSelectorTerms:\n    - name: my-ami\n      owner: self\n    - name: my-ami\n      owner: \"0123456789\"\n```\n\nSelect by name using a wildcard:\n```yaml\nspec:\n  amiSelectorTerms:\n    - name: \"*EKS*\"\n```\n\nSelect by all under an owner:\n```yaml\nspec:\n  amiSelectorTerms:\n    - name: \"*\"\n      owner: self\n```\n\nSpecify using ids:\n```yaml\n  amiSelectorTerms:\n    - id: \"ami-123\"\n    - id: \"ami-456\"\n```\n\nSpecify using custom ssm parameter name or ARN:\n```yaml\n  amiSelectorTerms:\n    - ssmParameter: \"my-custom-parameter\"\n```\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nWhen using a custom SSM parameter, you'll need to expand the `ssm:GetParameter` permissions on the Karpenter IAM role to include your custom parameter, as the default policy only allows access to the AWS public parameters.\n{{% /alert %}}\n\n## spec.capacityReservationSelectorTerms\n\n<i class=\"fa-solid fa-circle-info\"></i> <b>Feature State: </b> [Beta]({{<ref \"../reference/settings#feature-gates\" >}})\n\nCapacity Reservation Selector Terms allow you to select [on-demand capacity reservations](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-capacity-reservations.html) (ODCRs), which will be made available to NodePools which select the given EC2NodeClass.\nKarpenter will prioritize utilizing the capacity in these reservations before falling back to on-demand and spot.\nCapacity reservations can be discovered using ids, tags, or instance match criteria.\n\nThis selection logic is modeled as terms.\nA term can specify an ID, a set of tags, or instance match criteria to select against.\nWhen specifying tags, it will select all capacity reservations accessible from the account with matching tags.\nWhen specifying instance match criteria, it selects reservations by their matching behavior: `open` (matches all compatible instances) or `targeted` (matches only explicitly targeted instances).\nThis can be further restricted by specifying an owner ID.\n\nFor more information on utilizing ODCRs with Karpenter, refer to the [Utilizing ODCRs Task]({{< relref \"../tasks/odcrs\" >}}).\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nNote that the IAM role Karpenter assumes should have a permissions policy associated with it that grants it permissions to use the [ec2:DescribeCapacityReservations](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonec2.html#amazonec2-DescribeCapacityReservations) action to discover capacity reservations and the [ec2:RunInstances](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonec2.html#amazonec2-RunInstances) action to run instances in those capacity reservations.\n{{% /alert %}}\n\n#### Examples\n\nSelect the reservations with the given IDs:\n\n```yaml\nspec:\n  capacityReservationSelectorTerms:\n  - id: cr-123\n  - id: cr-456\n```\n\nSelect the reservations by tags:\n\n```yaml\nspec:\n  capacityReservationSelectorTerms:\n  # Select all capacity reservations which have both matching tags\n  - tags:\n      key1: foo\n      key2: bar\n  # Additionally, select all capacity reservations with the following matching tag\n  - tags:\n      key3: foobar\n```\n\nSelect by tags and owner ID:\n\n```yaml\nspec:\n  # Select all capacity reservations with the matching tags which are also owned by\n  # the specified account.\n  capacityReservationSelectorTerms:\n  - tags:\n      key: foo\n    ownerID: 012345678901\n```\n\nSelect by instance match criteria:\n\n```yaml\nspec:\n  capacityReservationSelectorTerms:\n  # Select all open capacity reservations\n  - instanceMatchCriteria: open\n```\n\nSelect by instance match criteria and tags:\n\n```yaml\nspec:\n  capacityReservationSelectorTerms:\n  # Select targeted capacity reservations with matching tags\n  - instanceMatchCriteria: targeted\n    tags:\n      key: foo\n```\n\n## spec.tags\n\nKarpenter adds tags to all resources it creates, including EC2 Instances, EBS volumes, and Launch Templates. The default set of tags are listed below.\n\n```yaml\nName: <node-name>\nkarpenter.sh/nodeclaim: <nodeclaim-name>\nkarpenter.sh/nodepool: <nodepool-name>\nkarpenter.k8s.aws/ec2nodeclass: <ec2nodeclass-name>\nkubernetes.io/cluster/<cluster-name>: owned\neks:eks-cluster-name: <cluster-name>\n```\n\nAdditional tags can be added in the tags section, which will be merged with the default tags specified above.\n```yaml\nspec:\n  tags:\n    InternalAccountingTag: 1234\n    dev.corp.net/app: Calculator\n    dev.corp.net/team: MyTeam\n```\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nKarpenter allows overrides of the default \"Name\" tag but does not allow overrides to restricted domains (such as \"karpenter.sh\", \"karpenter.k8s.aws\", and \"kubernetes.io/cluster\"). This ensures that Karpenter is able to correctly auto-discover nodes that it owns.\n{{% /alert %}}\n\n## spec.metadataOptions\n\nControl the exposure of [Instance Metadata Service](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html) on EC2 Instances launched by this EC2NodeClass using a generated launch template.\n\nRefer 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.\n\nIf metadataOptions are omitted from this EC2NodeClass, the following default settings are applied:\n\n```yaml\nspec:\n  metadataOptions:\n    httpEndpoint: enabled\n    httpProtocolIPv6: disabled\n    httpPutResponseHopLimit: 1\n    httpTokens: required\n```\n\n## spec.blockDeviceMappings\n\nThe `blockDeviceMappings` field in an `EC2NodeClass` can be used to control the [Elastic Block Storage (EBS) volumes](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/block-device-mapping-concepts.html#instance-block-device-mapping) that Karpenter attaches to provisioned nodes. Karpenter uses default block device mappings for the AMIFamily 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.\n\n```yaml\nspec:\n  blockDeviceMappings:\n    - deviceName: /dev/xvda\n      ebs:\n        volumeSize: 100Gi\n        volumeType: gp3\n        iops: 10000\n        encrypted: true\n        kmsKeyID: \"1234abcd-12ab-34cd-56ef-1234567890ab\"\n        deleteOnTermination: true\n        throughput: 125\n        snapshotID: snap-0123456789\n        volumeInitializationRate: 100\n```\n\nThe following blockDeviceMapping defaults are used for each `AMIFamily` if no `blockDeviceMapping` overrides are specified in the `EC2NodeClass`\n\n### AL2\n```yaml\nspec:\n  blockDeviceMappings:\n    - deviceName: /dev/xvda\n      ebs:\n        volumeSize: 20Gi\n        volumeType: gp3\n        encrypted: true\n```\n\n### AL2023\n```yaml\nspec:\n  blockDeviceMappings:\n    - deviceName: /dev/xvda\n      ebs:\n        volumeSize: 20Gi\n        volumeType: gp3\n        encrypted: true\n```\n\n### Bottlerocket\n```yaml\nspec:\n  blockDeviceMappings:\n    # Root device\n    - deviceName: /dev/xvda\n      ebs:\n        volumeSize: 4Gi\n        volumeType: gp3\n        encrypted: true\n    # Data device: Container resources such as images and logs\n    - deviceName: /dev/xvdb\n      ebs:\n        volumeSize: 20Gi\n        volumeType: gp3\n        encrypted: true\n```\n\n### Windows2019/Windows2022/Windows2025\n```yaml\nspec:\n  blockDeviceMappings:\n    - deviceName: /dev/sda1\n      ebs:\n        volumeSize: 50Gi\n        volumeType: gp3\n        encrypted: true\n```\n\n### Custom\n\nThe `Custom` AMIFamily ships without any default `blockDeviceMappings`.\n\n## spec.instanceStorePolicy\n\nThe `instanceStorePolicy` field controls how [instance-store](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/InstanceStorage.html) volumes are handled. By default, Karpenter and Kubernetes will simply ignore them.\n\n### RAID0\n\nIf you intend to use these volumes for faster node ephemeral-storage, set `instanceStorePolicy` to `RAID0`:\n\n```yaml\nspec:\n  instanceStorePolicy: RAID0\n```\n\nThis will set the allocatable ephemeral-storage of each node to the total size of the instance-store volume(s). This configuration is likely to be useful for workloads that leverage dense storage instance types or require the low latency from instance-stores that are nvme ssd based.\n\nThe disks must be formatted & mounted in a RAID0 and be the underlying filesystem for the Kubelet & Containerd. Even if you already configure your volumes with RAID0, Karpenter won't recognize this by default unless you set the `instanceStorePolicy` to `RAID0`. Without this, scheduling workloads that depend on ephemeral-storage from the instance-stores may result in a deadlock due to insufficient storage.\n\nInstructions for each AMI family are listed below:\n\n#### AL2\n\nOn AL2, Karpenter automatically configures the disks through an additional boostrap argument (`--local-disks raid0`). The device name is `/dev/md/0` and its mount point is `/mnt/k8s-disks/0`. You should ensure any additional disk setup does not interfere with these.\n\n#### AL2023\n\nOn AL2023, Karpenter automatically configures the disks via the generated `NodeConfig` object. Like AL2, the device name is `/dev/md/0` and its mount point is `/mnt/k8s-disks/0`. You should ensure any additional disk setup does not interfere with these.\n\n#### Bottlerocket\n\nOn Bottlerocket, Karpenter automatically configures the disks by adding the required bootstrap commands to the settings. The ephemeral storage configuration is handled automatically, so you should not manually configure ephemeral storage settings in your userData.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nThis automatic disk configuration is only available on Bottlerocket v1.22.0 and later.\n{{% /alert %}}\n\n#### Others\n\nFor all other AMI families, you must configure the disks yourself. Check out the [`setup-local-disks`](https://github.com/awslabs/amazon-eks-ami/blob/main/templates/shared/runtime/bin/setup-local-disks) script in [amazon-eks-ami](https://github.com/awslabs/amazon-eks-ami) to see how this is done for AL2.\n\n{{% alert title=\"Tip\" color=\"secondary\" %}}\nSince the Kubelet & Containerd will be using the instance-store filesystem, you may consider using a more minimal root volume size.\n{{% /alert %}}\n\n## spec.userData\n\nYou can control the UserData that is applied to your worker nodes via this field. This allows you to run custom scripts or pass-through custom configuration to Karpenter instances on start-up.\n\n```yaml\napiVersion: karpenter.k8s.aws/v1\nkind: EC2NodeClass\nmetadata:\n  name: bottlerocket-example\nspec:\n  ...\n  amiFamily: Bottlerocket\n  userData:  |\n    [settings.kubernetes]\n    \"kube-api-qps\" = 30\n    \"shutdown-grace-period\" = \"30s\"\n    \"shutdown-grace-period-for-critical-pods\" = \"30s\"\n    [settings.kubernetes.eviction-hard]\n    \"memory.available\" = \"20%\"\n```\n\nThis example adds SSH keys to allow remote login to the node (replace *my-authorized_keys* with your public key file):\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nInstead 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.\nSee [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.\n\nAlso, **my-authorized_key** key is the public key. See [Retrieve the public key material](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/describe-keys.html#retrieving-the-public-key).\n{{% /alert %}}\n\n```yaml\napiVersion: karpenter.k8s.aws/v1\nkind: EC2NodeClass\nmetadata:\n  name: al2-example\nspec:\n  ...\n  amiFamily: AL2\n  userData: |\n    #!/bin/bash\n    mkdir -p ~ec2-user/.ssh/\n    touch ~ec2-user/.ssh/authorized_keys\n    cat >> ~ec2-user/.ssh/authorized_keys <<EOF\n    {{ insertFile \"../my-authorized_keys\" | indent 4  }}\n    EOF\n    chmod -R go-w ~ec2-user/.ssh/authorized_keys\n    chown -R ec2-user ~ec2-user/.ssh\n```\n\nAlternatively, you can save the [key in your SSM Parameter Store](https://docs.aws.amazon.com/systems-manager/latest/userguide/parameter-create-console.html) and use the get-parameter command mentioned below to retrieve the key for authorized_keys.\n\n```\naws ssm get-parameter --name \"<parameter-name>\" --region <region> --with-decryption --query \"Parameter.Value\" --output text > /home/ec2-user/.ssh/authorized_keys\n```\n\nFor more examples on configuring fields for different AMI families, see the [examples here](https://github.com/aws/karpenter/blob/main/examples/v1).\n\nKarpenter will merge the userData you specify with the default userData for that AMIFamily. See the [AMIFamily]({{< ref \"#specamifamily\" >}}) section for more details on these defaults. View the sections below to understand the different merge strategies for each AMIFamily.\n\n### AL2\n\n* Your UserData can be in the [MIME multi part archive](https://cloudinit.readthedocs.io/en/latest/topics/format.html#mime-multi-part-archive) format.\n* Karpenter will transform your custom user-data as a MIME part, if necessary, and then merge a final MIME part to the end of your UserData parts which will bootstrap the worker node. Karpenter will have full control over all the parameters being passed to the bootstrap script.\n  * Karpenter will continue to set MaxPods, ClusterDNS and all other parameters defined in `spec.kubeletConfiguration` as before.\n\nConsider the following example to understand how your custom UserData will be merged -\n\n#### Passed-in UserData (bash)\n\n```bash\n#!/bin/bash\necho \"Running custom user data script (bash)\"\n```\n\n#### Merged UserData (bash)\n\n```bash\nMIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"//\"\n\n--//\nContent-Type: text/x-shellscript; charset=\"us-ascii\"\n\n#!/bin/bash\necho \"Running custom user data script (bash)\"\n\n--//\nContent-Type: text/x-shellscript; charset=\"us-ascii\"\n\n#!/bin/bash -xe\nexec > >(tee /var/log/user-data.log|logger -t user-data -s 2>/dev/console) 2>&1\n/etc/eks/bootstrap.sh 'test-cluster' --apiserver-endpoint 'https://test-cluster' --b64-cluster-ca 'ca-bundle' \\\n--use-max-pods false \\\n--kubelet-extra-args '--node-labels=karpenter.sh/capacity-type=on-demand,karpenter.sh/nodepool=test  --max-pods=110'\n--//--\n```\n\n#### Passed-in UserData (MIME)\n\n```bash\nMIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"BOUNDARY\"\n\n--BOUNDARY\nContent-Type: text/x-shellscript; charset=\"us-ascii\"\n\n#!/bin/bash\necho \"Running custom user data script (mime)\"\n\n--BOUNDARY--\n```\n\n#### Merged UserData (MIME)\n\n```bash\nMIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"//\"\n\n--//\nContent-Type: text/x-shellscript; charset=\"us-ascii\"\n\n#!/bin/bash\necho \"Running custom user data script (mime)\"\n\n--//\nContent-Type: text/x-shellscript; charset=\"us-ascii\"\n\n#!/bin/bash -xe\nexec > >(tee /var/log/user-data.log|logger -t user-data -s 2>/dev/console) 2>&1\n/etc/eks/bootstrap.sh 'test-cluster' --apiserver-endpoint 'https://test-cluster' --b64-cluster-ca 'ca-bundle' \\\n--use-max-pods false \\\n--kubelet-extra-args '--node-labels=karpenter.sh/capacity-type=on-demand,karpenter.sh/nodepool=test  --max-pods=110'\n--//--\n```\n\n{{% alert title=\"Tip\" color=\"secondary\" %}}\nYou can set additional kubelet configuration properties, unavailable through `spec.kubelet`, by updating the `kubelet-config.json` file:\n\n```yaml\napiVersion: karpenter.k8s.aws/v1\nkind: EC2NodeClass\nmetadata:\n  name: kubelet-config-example\nspec:\n  amiFamily: AL2\n  userData: |\n    #!/bin/bash\n    echo \"$(jq '.kubeAPIQPS=50' /etc/kubernetes/kubelet/kubelet-config.json)\" > /etc/kubernetes/kubelet/kubelet-config.json\n```\n{{% /alert %}}\n\n### AL2023\n\n* Your UserData may be in one of three formats: a [MIME multi part archive](https://cloudinit.readthedocs.io/en/latest/topics/format.html#mime-multi-part-archive), a NodeConfig YAML / JSON string, or a shell script.\n* Karpenter will transform your custom UserData into a MIME part, if necessary, and then create a MIME multi-part archive. This archive will consist of a generated NodeConfig, containing Karpenter's default values, followed by the transformed custom UserData. For more information on the NodeConfig spec, refer to the [AL2023 EKS Optimized AMI docs](https://awslabs.github.io/amazon-eks-ami/nodeadm/doc/examples/).\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nAny values configured by the Karpenter generated NodeConfig object will take precedent over values specifed in `spec.userData`.\nThis includes cluster name, cluster CIDR, cluster endpoint, certificate authority, taints, labels, and any value in [spec.kubelet]({{< ref \"#speckubelet\" >}}).\nThese fields must be configured natively through Karpenter rather than through UserData.\n{{% /alert %}}\n\n#### Passed-in UserData (NodeConfig)\n\n```yaml\napiVersion: node.eks.aws/v1alpha1\nkind: NodeConfig\nspec:\n  kubelet:\n    config:\n      maxPods: 42\n```\n\n#### Merged UserData (NodeConfig)\n\n```text\nMIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"//\"\n\n--//\nContent-Type: application/node.eks.aws\n\napiVersion: node.eks.aws/v1alpha1\nkind: NodeConfig\nspec:\n  kubelet:\n    config:\n      maxPods: 42\n\n--//\nContent-Type: application/node.eks.aws\n\n# Karpenter Generated NodeConfig\napiVersion: node.eks.aws/v1alpha1\nkind: NodeConfig\nspec:\n  cluster:\n    apiServerEndpoint: https://test-cluster\n    certificateAuthority: cluster-ca\n    cidr: 10.100.0.0/16\n    name: test-cluster\n  kubelet:\n    config:\n      clusterDNS:\n      - 10.100.0.10\n      maxPods: 118\n    flags:\n    - --node-labels=\"karpenter.sh/capacity-type=on-demand,karpenter.sh/nodepool=default\"\n\n--//--\n```\n\n#### Passed-in UserData (bash)\n\n```shell\n#!/bin/bash\necho \"Hello, AL2023!\"\n```\n\n#### Merged UserData (bash)\n\n```text\nMIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"//\"\n\n--//\nContent-Type: text/x-shellscript; charset=\"us-ascii\"\n\n#!/bin/bash\necho \"Hello, AL2023!\"\n\n--//\nContent-Type: application/node.eks.aws\n\n# Karpenter Generated NodeConfig\napiVersion: node.eks.aws/v1alpha1\nkind: NodeConfig\nspec:\n  cluster:\n    apiServerEndpoint: https://test-cluster\n    certificateAuthority: cluster-ca\n    cidr: 10.100.0.0/16\n    name: test-cluster\n  kubelet:\n    config:\n      clusterDNS:\n      - 10.100.0.10\n      maxPods: 118\n    flags:\n    - --node-labels=\"karpenter.sh/capacity-type=on-demand,karpenter.sh/nodepool=default\"\n\n--//--\n```\n\n#### Passed-in UserData (MIME)\n\n```text\nMIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"//\"\n\n--//\nContent-Type: text/x-shellscript; charset=\"us-ascii\"\n\n#!/bin/bash\necho \"Hello, AL2023!\"\n\n--//\nContent-Type: application/node.eks.aws\n\napiVersion: node.eks.aws/v1alpha1\nkind: NodeConfig\nspec:\n  kubelet:\n    config:\n      maxPods: 42\n--//\n```\n\n#### Merged UserData (MIME)\n\n```text\nMIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"//\"\n\n--//\nContent-Type: application/node.eks.aws\n\napiVersion: node.eks.aws/v1alpha1\nkind: NodeConfig\nspec:\n  kubelet:\n    config:\n      maxPods: 42\n--//\nContent-Type: text/x-shellscript; charset=\"us-ascii\"\n\n#!/bin/bash\necho \"Hello, AL2023!\"\n\n--//\nContent-Type: application/node.eks.aws\n\n# Karpenter Generated NodeConfig\napiVersion: node.eks.aws/v1alpha1\nkind: NodeConfig\nspec:\n  cluster:\n    apiServerEndpoint: https://test-cluster\n    certificateAuthority: cluster-ca\n    cidr: 10.100.0.0/16\n    name: test-cluster\n  kubelet:\n    config:\n      clusterDNS:\n      - 10.100.0.10\n      maxPods: 118\n    flags:\n    - --node-labels=\"karpenter.sh/capacity-type=on-demand,karpenter.sh/nodepool=default\"\n\n--//--\n```\n\n### Bottlerocket\n\n* Your UserData must be valid TOML.\n* Unknown TOML fields will be ignored when the final merged UserData is generated by Karpenter.\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nAny values configured by Karpenter will take precedent over values specifed in `spec.userData`.\nThis includes cluster name, cluster endpoint, cluster certificate, taints, labels, and any value in [spec.kubelet]({{< ref \"#speckubelet\" >}}).\nThese fields must be configured natively through Karpenter rather than through UserData.\n{{% /alert %}}\n\nConsider the following example to understand how your custom UserData settings will be merged in.\n\n#### Passed-in UserData\n\n```toml\n[settings.kubernetes.eviction-hard]\n\"memory.available\" = \"12%\"\n[settings.kubernetes]\n\"unknown-setting\" = \"unknown\"\n[settings.kubernetes.node-labels]\n'field.controlled.by/karpenter' = 'will-be-overridden'\n```\n\n#### Merged UserData\n\n```toml\n[settings]\n[settings.kubernetes]\napi-server = 'https://cluster'\ncluster-certificate = 'ca-bundle'\ncluster-name = 'cluster'\n\n[settings.kubernetes.node-labels]\n'karpenter.sh/capacity-type' = 'on-demand'\n'karpenter.sh/nodepool' = 'default'\n\n[settings.kubernetes.node-taints]\n\n[settings.kubernetes.eviction-hard]\n'memory.available' = '12%%'\n```\n\n#### Device ownership in Bottlerocket\n\nBottlerocket `v1.30.0+` supports device ownership using the [security context](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/) provided in the Kubernetes specfile. To enable this, you will need the following user-data configurations:\n\n```toml\n[settings]\n[settings.kubernetes]\ndevice-ownership-from-security-context = true\n```\n\nThis allows the container to take ownership of devices allocated to the pod via device-plugins based on the `runAsUser` and `runAsGroup` values provided in the spec. For more details on this, see the [Kubernetes documentation](https://kubernetes.io/blog/2021/11/09/non-root-containers-and-devices/)\n\nThis setting helps you enable Neuron workloads on Bottlerocket instances. See [Accelerators/GPU Resources]({{< ref \"./scheduling#acceleratorsgpu-resources\" >}}) for more details.\n\n### Windows2019/Windows2022/Windows2025\n\n* Your UserData must be specified as PowerShell commands.\n* The UserData specified will be prepended to a Karpenter managed section that will bootstrap the kubelet.\n* Karpenter will continue to set ClusterDNS and all other parameters defined in spec.kubeletConfiguration as before.\n\nConsider the following example to understand how your custom UserData settings will be merged in.\n\n#### Passed-in UserData\n\n```powershell\nWrite-Host \"Running custom user data script\"\n```\n\n#### Merged UserData\n\n```powershell\n<powershell>\nWrite-Host \"Running custom user data script\"\n[string]$EKSBootstrapScriptFile = \"$env:ProgramFiles\\Amazon\\EKS\\Start-EKSBootstrap.ps1\"\n& $EKSBootstrapScriptFile -EKSClusterName 'test-cluster' -APIServerEndpoint 'https://test-cluster' -Base64ClusterCA 'ca-bundle' -KubeletExtraArgs '--node-labels=\"karpenter.sh/capacity-type=spot,karpenter.sh/nodepool=windows2022\" --max-pods=110' -DNSClusterIP '10.0.100.10'\n</powershell>\n```\n\n{{% alert title=\"Windows Support Notice\" color=\"warning\" %}}\nCurrently, Karpenter does not specify `-ServiceCIDR` to [EKS Windows AMI Bootstrap script](https://docs.aws.amazon.com/eks/latest/userguide/eks-optimized-windows-ami.html#bootstrap-script-configuration-parameters).\nWindows worker nodes will use `172.20.0.0/16` or `10.100.0.0/16` for Kubernetes service IP address ranges based on the IP address of the primary interface.\nThe effective ServiceCIDR can be verified at `$env:ProgramData\\Amazon\\EKS\\cni\\config\\vpc-bridge.conf` on the worker node.\n\nSupport for the Windows ServiceCIDR argument can be tracked in a [Karpenter Github Issue](https://github.com/aws/karpenter/issues/4088). Currently, if the effective ServiceCIDR is incorrect for your windows worker nodes, you can add the following userData as a workaround.\n\n```yaml\nspec:\n  userData: |\n    $global:EKSCluster = Get-EKSCluster -Name my-cluster\n```\n{{% /alert %}}\n\n### Custom\n\n* No merging is performed, your UserData must perform all setup required of the node to allow it to join the cluster.\n* Custom UserData must meet the following requirements to work correctly with Karpenter:\n  * It must ensure the node is registered with the `karpenter.sh/unregistered:NoExecute` taint (via kubelet configuration field `registerWithTaints`)\n  * It must set kubelet config options to match those configured in `spec.kubelet`\n\n## spec.detailedMonitoring\n\nEnabling detailed monitoring controls the [EC2 detailed monitoring](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-cloudwatch-new.html) feature. If you enable this option, the Amazon EC2 console displays monitoring graphs with a 1-minute period for the instances that Karpenter launches.\n\n```yaml\nspec:\n  detailedMonitoring: true\n```\n\n## spec.associatePublicIPAddress\n\nYou can explicitly set `AssociatePublicIPAddress: false` when you are only launching into private subnets.\nPreviously, Karpenter auto-set `associatePublicIPAddress` on the primary ENI to false if a user’s subnet options were all private subnets.\nThis value is a boolean field that controls whether instances created by Karpenter for this EC2NodeClass will have an associated public IP address. This overrides the `MapPublicIpOnLaunch` setting applied to the subnet the node is launched in. If this field is not set, the `MapPublicIpOnLaunch` field will be respected.\n\n\n{{% alert title=\"Note\" color=\"warning\" %}}\nIf a `NodeClaim` requests `vpc.amazonaws.com/efa` resources, `spec.associatePublicIPAddress` is respected. However, if this `NodeClaim` requests **multiple** EFA resources and the value for `spec.associatePublicIPAddress` is true, the instance will fail to launch. This is due to an EC2 restriction which\nrequires that the field is only set to true when configuring an instance with a single ENI at launch. When using this field, it is advised that users segregate their EFA workload to use a separate `NodePool` / `EC2NodeClass` pair.\n{{% /alert %}}\n\n## spec.ipPrefixCount\n\nThis value is a integer field that controls how many ip prefixes will be assigned to `NodeClaim`. See the [EC2 Launch Template Network Interface Spec](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-properties-ec2-launchtemplate-networkinterface.html) for more information. Sets ipv4PrefixCount if you are using an IPv4 Cluster, or ipv6PrefixCount if you are using IPv6.\n\n## status.subnets\n[`status.subnets`]({{< ref \"#statussubnets\" >}}) contains the resolved `id` and `zone` of the subnets that were selected by the [`spec.subnetSelectorTerms`]({{< ref \"#specsubnetselectorterms\" >}}) for the node class. The subnets will be sorted by the available IP address count in decreasing order.\n\n#### Examples\n\n```yaml\nspec:\n  subnetSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\"\nstatus:\n  subnets:\n  - id: subnet-0a462d98193ff9fac\n    zone: us-east-2b\n  - id: subnet-0322dfafd76a609b6\n    zone: us-east-2c\n  - id: subnet-0727ef01daf4ac9fe\n    zone: us-east-2b\n  - id: subnet-00c99aeafe2a70304\n    zone: us-east-2a\n  - id: subnet-023b232fd5eb0028e\n    zone: us-east-2c\n  - id: subnet-03941e7ad6afeaa72\n    zone: us-east-2a\n```\n\n## status.securityGroups\n\n[`status.securityGroups`]({{< ref \"#statussecuritygroups\" >}}) contains the resolved `id` and `name` of the security groups that were selected by the [`spec.securityGroupSelectorTerms`]({{< ref \"#specsecuritygroupselectorterms\" >}}) for the node class. The subnets will be sorted by the available IP address count in decreasing order.\n\n#### Examples\n\n```yaml\nspec:\n  securityGroupSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\"\nstatus:\n  securityGroups:\n  - id: sg-041513b454818610b\n    name: ClusterSharedNodeSecurityGroup\n  - id: sg-0286715698b894bca\n    name: ControlPlaneSecurityGroup-1AQ073TSAAPW\n```\n\n## status.amis\n\n[`status.amis`]({{< ref \"#statusamis\" >}}) contains the resolved `id`, `name`, `requirements`, and the `deprecated` status of either the default AMIs for the [`spec.amiFamily`]({{< ref \"#specamifamily\" >}}) or the AMIs selected by the [`spec.amiSelectorTerms`]({{< ref \"#specamiselectorterms\" >}}) if this field is specified. The `deprecated` status will be shown for resolved AMIs that are deprecated.\n\n#### Examples\n\nAMIs resolved with an AL2 alias:\n\n```yaml\nspec:\n  amiSelectorTerms:\n    - alias: al2@v20240807\nstatus:\n  amis:\n  - id: ami-03c3a3dcda64f5b75\n    name: amazon-linux-2-gpu\n    requirements:\n    - key: kubernetes.io/arch\n      operator: In\n      values:\n      - amd64\n    - key: karpenter.k8s.aws/instance-gpu-count\n      operator: Exists\n  - id: ami-03c3a3dcda64f5b75\n    name: amazon-linux-2-gpu\n    requirements:\n    - key: kubernetes.io/arch\n      operator: In\n      values:\n      - amd64\n    - key: karpenter.k8s.aws/instance-accelerator-count\n      operator: Exists\n  - id: ami-06afb2d101cc4b8bd\n    name: amazon-linux-2-arm64\n    requirements:\n    - key: kubernetes.io/arch\n      operator: In\n      values:\n      - arm64\n    - key: karpenter.k8s.aws/instance-gpu-count\n      operator: DoesNotExist\n    - key: karpenter.k8s.aws/instance-accelerator-count\n      operator: DoesNotExist\n  - id: ami-0e28b76d768af234e\n    name: amazon-linux-2\n    requirements:\n    - key: kubernetes.io/arch\n      operator: In\n      values:\n      - amd64\n    - key: karpenter.k8s.aws/instance-gpu-count\n      operator: DoesNotExist\n    - key: karpenter.k8s.aws/instance-accelerator-count\n      operator: DoesNotExist\n```\n\nAMIs resolved from tags:\n\n```yaml\nspec:\n  amiSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\"\nstatus:\n  amis:\n  - id: ami-01234567890123456\n    name: custom-ami-amd64\n    deprecated: true\n    requirements:\n    - key: kubernetes.io/arch\n      operator: In\n      values:\n      - amd64\n  - id: ami-01234567890123456\n    name: custom-ami-arm64\n    requirements:\n    - key: kubernetes.io/arch\n      operator: In\n      values:\n      - arm64\n```\n\n## status.capacityReservations\n\n[`status.capacityReservations`]({{< ref \"#statuscapacityreservations\" >}}) contains the following information for each resolved capacity reservation:\n\n| Field                   | Example                | Description                                                                          |\n| ----------------------- | ---------------------- | ------------------------------------------------------------------------------------ |\n| `availabilityZone`      | `us-east-1a`           | The availability zone the capacity reservation is available in                       |\n| `id`                    | `cr-56fac701cc1951b03` | The ID of the capacity reservation                                                   |\n| `instanceMatchCriteria` | `open`                 | The instanceMatchCriteria for the capacity reservation. Can be `open` or `targeted`. |\n| `instanceType`          | `m5.large`             | The EC2 instance type of the capacity reservation                                    |\n| `ownerID`               | `459763720645`         | The account ID that owns the capacity reservation                                    |\n| `reservationType`       | `default`              | The type of the capacity reservation. Can be `default` or `capacity-block`.          |\n| `state`                 | `active`               | The state of the capacity reservation. Can be `active` or `expiring`.                |\n\n#### Examples\n\n```yaml\nstatus:\n  capacityReservations:\n  - availabilityZone: us-west-2a\n    id: cr-01234567890123456\n    instanceMatchCriteria: targeted\n    instanceType: g6.48xlarge\n    ownerID: \"012345678901\"\n    reservationType: capacity-block\n    state: expiring\n  - availabilityZone: us-west-2c\n    id: cr-12345678901234567\n    instanceMatchCriteria: open\n    instanceType: g6.48xlarge\n    ownerID: \"98765432109\"\n    reservationType: default\n    state: active\n```\n\n## status.instanceProfile\n\n[`status.instanceProfile`]({{< ref \"#statusinstanceprofile\" >}}) contains the resolved instance profile generated by Karpenter from the [`spec.role`]({{< ref \"#specrole\" >}})\n\n```yaml\nspec:\n  role: \"KarpenterNodeRole-${CLUSTER_NAME}\"\nstatus:\n  instanceProfile: \"${CLUSTER_NAME}-0123456778901234567789\"\n```\n\n## status.conditions\n\n[`status.conditions`]({{< ref \"#statusconditions\" >}}) indicates EC2NodeClass readiness. This will be `Ready` when Karpenter successfully discovers AMIs, Instance Profile, Subnets, Cluster CIDR (AL2023 only) and SecurityGroups for the EC2NodeClass.\n\nNodeClasses have the following status conditions:\n\n| Condition Type       | Description                                                                                                                                                                                                                       |\n|----------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| SubnetsReady         | Subnets are discovered.                                                                                                                                                                                                           |\n| SecurityGroupsReady  | Security Groups are discovered.                                                                                                                                                                                                   |\n| InstanceProfileReady | Instance Profile is discovered.                                                                                                                                                                                                   |\n| AMIsReady            | AMIs are discovered.                                                |\n| Ready                | Top level condition that indicates if the nodeClass is ready. If any of the underlying conditions is `False` then this condition is set to `False` and `Message` on the condition indicates the dependency that was not resolved. |\n\nIf a NodeClass is not ready, NodePools that reference it through their `nodeClassRef` will not be considered for scheduling.\n"
  },
  {
    "path": "website/content/en/v1.9/concepts/nodeoverlays.md",
    "content": "---\ntitle: \"NodeOverlays\"\nlinkTitle: \"NodeOverlays\"\nweight: 40\ndescription: >\n  Understand NodeOverlays and how they enable fine-tuning of Karpenter's scheduling simulation for advanced use cases.\n---\n\n<i class=\"fa-solid fa-circle-info\"></i> <b>Feature State: </b> [Alpha]({{<ref \"../reference/settings#feature-gates\" >}})\n\n\nKarpenter uses NodeOverlays to inject alternative instance type information into the scheduling simulation for more accurate scheduling decisions.\nNodeOverlays enable users to fine-tune instance pricing and add extended resources to instance types that should be considered during Karpenter's decision-making process.\nThey provide a flexible way to account for real-world factors like savings plans, licensing costs, and custom hardware resources that aren't captured in the base instance data from cloud providers.\n\nNodeOverlays work by modifying the instance type information that Karpenter uses during its scheduling simulation.\nWhen Karpenter evaluates which instance types can satisfy pending pod requirements, it applies any matching NodeOverlays to adjust pricing information or add extended resources before making provisioning decisions.\n\n## NodeOverlay Configuration\n\n```yaml\napiVersion: karpenter.sh/v1alpha1\nkind: NodeOverlay\nmetadata:\n  name: example-overlay\nspec:\n  # Optional weight for conflict resolution (higher weight wins)\n  weight: 10\n  \n  # Requirements determine which instance types this overlay applies to\n  requirements:\n    - key: node.kubernetes.io/instance-type\n      operator: In\n      values: [\"m5.large\", \"m5.xlarge\"]\n    - key: karpenter.sh/capacity-type  \n      operator: In\n      values: [\"spot\"]\n    - key: karpenter.k8s.aws/instance-cpu \n      operator: Gte\n      values: [\"32\"]\n  \n  # Price and priceAdjustment are mutually exclusive\n  # Price override (sets absolute price)\n  price: \"5.00\"\n  \n  # Price adjustment (modifies existing price)\n  priceAdjustment: \"+10%\"  # or \"-0.50\" for absolute adjustment\n  \n  # Extended resources to add to matching instance types\n  capacity:\n    hugepages-2Mi: 100Mi\n    hugepages-1Gi: 2Gi\n    custom-device/gpu-slice: 4\n```\n\n## spec.weight\nOptional integer that determines precedence when multiple NodeOverlays match the same instance type. Higher weights take precedence over lower weights. When weights are equal, alphabetical ordering by name is used for conflict resolution. If not specified, the default weight is 0. If there is a conflict between NodeOverlays with the same weight, it will be indicated in the status and the NodeOverlay will not be applied.\n\n## spec.requirements\nArray of requirements that determine which instance types this overlay applies to. Uses the same format as NodePool requirements and supports all standard Kubernetes label selectors. An empty requirements array applies the overlay to all instance types. Kubernetes defines the following [Well-Known Labels](https://kubernetes.io/docs/reference/labels-annotations-taints/), and cloud providers (e.g., AWS) implement them.\n\nCurrently, requirements sets are defined based on the well-known labels that are discovered for instance types. 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).\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nThere is currently a limit of 100 on the total number of requirements on both the NodeOverlay.\n{{% /alert %}}\n\n## spec.price\nAbsolute price override as a string representing the price in your currency. This completely replaces the original instance price reported by the cloud provider. Karpenter is currency-agnostic, so this works with any currency unit.\n\n## spec.priceAdjustment\nPrice modification that can be specified as:\n- **Absolute adjustment**: `\"+5.00\"` (increase by 5.00) or `\"-2.50\"` (decrease by 2.50)\n- **Percentage adjustment**: `\"+15%\"` (increase by 15%) or `\"-10%\"` (decrease by 10%)\n\n## spec.capacity\nMap of extended resources to add to matching instance types. These resources are added to the existing standard capacity and do not replace or modify well-known resources. Only extended resources should be specified here.\n\n```yaml\napiVersion: karpenter.sh/v1alpha1\nkind: NodeOverlay\nmetadata:\n  name: custom-devices\nspec:\n  requirements:\n    - key: node.kubernetes.io/instance-type\n      operator: In\n      values: [\"m5.large\", \"m5.xlarge\", \"m5.2xlarge\"]\n  capacity:\n    smarter-devices/fuse: 1\n    custom-hardware/accelerator: 2\n```\n\n## Conflict Resolution\n\nWhen multiple NodeOverlays match the same instance type, conflicts are resolved using the following rules:\n\n1. **Weight-based precedence**: Higher weight values take precedence over lower weights\n2. **Alphabetical ordering**: When weights are equal, overlays are applied in alphabetical order by name\n3. **Field-level merging**: Higher-weight overlays override specific fields from lower-weight overlays, but capacity fields from different overlays are merged together\n\n### Example Conflict Resolution\n\n```yaml\napiVersion: karpenter.sh/v1alpha1\nkind: NodeOverlay\nmetadata:\n  name: overlay-a\nspec:\n  weight: 5\n  requirements:\n    - key: node.kubernetes.io/instance-type\n      operator: In\n      values: [\"m5.large\"]\n  priceAdjustment: \"-10%\"\n  capacity:\n    hugepages-2Mi: 50Mi\n---\napiVersion: karpenter.sh/v1alpha1\nkind: NodeOverlay\nmetadata:\n  name: overlay-b\nspec:\n  weight: 10  # Higher weight\n  requirements:\n    - key: node.kubernetes.io/instance-type\n      operator: In\n      values: [\"m5.large\"]\n  priceAdjustment: \"-20%\"  # This overrides overlay-a's adjustment\n  capacity:\n    custom-device/gpu: 1   # This is merged with hugepages-2Mi from overlay-a\n```\n\n**Result for m5.large instances:**\n- Price adjustment: `-20%` (from overlay-b, overrides overlay-a)\n- Capacity: `hugepages-2Mi: 50Mi` (from overlay-a) + `custom-device/gpu: 1` (from overlay-b)\n\n## Integration with Consolidation\n\nNodeOverlay modifications are automatically integrated into Karpenter's consolidation process:\n\n* **Price adjustments** affect consolidation decisions by changing the cost calculations used to determine optimal instance selections during replacement operations\n* **Capacity additions** are considered during consolidation when evaluating whether workloads can be moved between nodes\n* Changes take effect through normal consolidation cycles without requiring additional drift detection or forced node replacement\n\nWhen NodeOverlay configurations change, Karpenter incorporates these changes into its next consolidation evaluation, potentially triggering node replacements if the new configurations significantly change the optimal instance selection for existing workloads.\n\n## Status and Observability\n\nNodeOverlays include status conditions to help you understand their current state and troubleshoot configuration issues.\n\n### Common Status Conditions\n\n* **Ready=True**: The overlay is successfully applied to matching instance types\n* **Ready=False**: Configuration conflicts, requirement mismatches, or other errors prevent the overlay from being applied\n\n### Status Messages\n\nWhen `Ready=False`, the status message provides specific information about the issue:\n\n```yaml\nstatus:\n  conditions:\n  - type: ValidationSucceeded\n    status: \"False\"\n    lastTransitionTime: \"2024-07-24T18:30:00Z\"\n    reason: \"Conflict\"\n    message: \"conflict with another overlay\"\n```\n\n## Limitations and Considerations\n\n* **Resource Scope**: NodeOverlays can only add extended resources; they cannot modify or remove standard resources (CPU, memory, storage)\n* **Actual vs. Simulated**: Capacity modifications only affect Karpenter's scheduling simulation; actual node resources must be configured through other means\n* **Pricing vs. Billing**: Price adjustments influence Karpenter's scheduling decisions but don't affect actual cloud provider billing\n* **Alpha Status**: NodeOverlays are currently in alpha (v1alpha1) and the API may change in future versions"
  },
  {
    "path": "website/content/en/v1.9/concepts/nodepools.md",
    "content": "---\ntitle: \"NodePools\"\nlinkTitle: \"NodePools\"\nweight: 10\ndescription: >\n  Configure Karpenter with NodePools\n---\n\nWhen you first installed Karpenter, you set up a default NodePool. The NodePool sets constraints on the nodes that can be created by Karpenter and the pods that can run on those nodes. The NodePool can be set to do things like:\n\n* Define taints to limit the pods that can run on nodes Karpenter creates\n* Define any startup taints to inform Karpenter that it should taint the node initially, but that the taint is temporary.\n* Limit node creation to certain zones, instance types, and computer architectures\n* Set defaults for node expiration\n\nYou can change your NodePool or add other NodePools to Karpenter.\nHere are things you should know about NodePools:\n\n* Karpenter won't do anything if there is not at least one NodePool configured.\n* Each NodePool that is configured is looped through by Karpenter.\n* If Karpenter encounters a taint in the NodePool that is not tolerated by a Pod, Karpenter won't use that NodePool to provision the pod.\n* If Karpenter encounters a startup taint in the NodePool 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.\n* It is recommended to create NodePools that are mutually exclusive. So no Pod should match multiple NodePools. If multiple NodePools are matched, Karpenter will use the NodePool with the highest [weight](#specweight).\n\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nObjects for setting Kubelet features have been moved from the NodePool spec to the EC2NodeClasses spec, to not require other Karpenter providers to support those features.\n{{% /alert %}}\n\nFor some example `NodePool` configurations, see the [examples in the Karpenter GitHub repository](https://github.com/aws/karpenter/blob/main/examples/v1/).\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\nspec:\n  # Template section that describes how to template out NodeClaim resources that Karpenter will provision\n  # Karpenter will consider this template to be the minimum requirements needed to provision a Node using this NodePool\n  # It will overlay this NodePool with Pods that need to schedule to further constrain the NodeClaims\n  # Karpenter will provision to launch new Nodes for the cluster\n  template:\n    metadata:\n      # Labels are arbitrary key-values that are applied to all nodes\n      labels:\n        billing-team: my-team\n\n      # Annotations are arbitrary key-values that are applied to all nodes\n      annotations:\n        example.com/owner: \"my-team\"\n    spec:\n      # References the Cloud Provider's NodeClass resource, see your cloud provider specific documentation\n      nodeClassRef:\n        group: karpenter.k8s.aws  # Updated since only a single version will be served\n        kind: EC2NodeClass\n        name: default\n\n      # Provisioned nodes will have these taints\n      # Taints may prevent pods from scheduling if they are not tolerated by the pod.\n      taints:\n        - key: example.com/special-taint\n          effect: NoSchedule\n\n      # Provisioned nodes will have these taints, but pods do not need to tolerate these taints to be provisioned by this\n      # NodePool. These taints are expected to be temporary and some other entity (e.g. a DaemonSet) is responsible for\n      # removing the taint after it has finished initializing the node.\n      startupTaints:\n        - key: example.com/another-taint\n          effect: NoSchedule\n\n      # The amount of time a Node can live on the cluster before being removed\n      # Avoiding long-running Nodes helps to reduce security vulnerabilities as well as to reduce the chance of issues that can plague Nodes with long uptimes such as file fragmentation or memory leaks from system processes\n      # You can choose to disable expiration entirely by setting the string value 'Never' here\n\n      # Note: changing this value in the nodepool will drift the nodeclaims.\n      expireAfter: 720h | Never\n\n      # The amount of time that a node can be draining before it's forcibly deleted. A node begins draining when a delete call is made against it, starting\n      # its finalization flow. Pods with TerminationGracePeriodSeconds will be deleted preemptively before this terminationGracePeriod ends to give as much time to cleanup as possible.\n      # If your pod's terminationGracePeriodSeconds is larger than this terminationGracePeriod, Karpenter may forcibly delete the pod\n      # before it has its full terminationGracePeriod to cleanup.\n\n      # Note: changing this value in the nodepool will drift the nodeclaims.\n      terminationGracePeriod: 48h\n\n      # Requirements that constrain the parameters of provisioned nodes.\n      # These requirements are combined with pod.spec.topologySpreadConstraints, pod.spec.affinity.nodeAffinity, pod.spec.affinity.podAffinity, and pod.spec.nodeSelector rules.\n      # Operators { In, NotIn, Exists, DoesNotExist, Gt, Lt, Gte, and Lte } are supported.\n      # https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#operators\n      requirements:\n        - key: \"karpenter.k8s.aws/instance-category\"\n          operator: In\n          values: [\"c\", \"m\", \"r\"]\n          # minValues here enforces the scheduler to consider at least that number of unique instance-category to schedule the pods.\n          # This field is ALPHA and can be dropped or replaced at any time\n          minValues: 2\n        - key: \"karpenter.k8s.aws/instance-family\"\n          operator: In\n          values: [\"m5\",\"m5d\",\"c5\",\"c5d\",\"c4\",\"r4\"]\n          minValues: 5\n        - key: \"karpenter.k8s.aws/instance-cpu\"\n          operator: In\n          values: [\"4\", \"8\", \"16\", \"32\"]\n        - key: \"karpenter.k8s.aws/instance-hypervisor\"\n          operator: In\n          values: [\"nitro\"]\n        - key: \"karpenter.k8s.aws/instance-generation\"\n          operator: Gte\n          values: [\"3\"]\n        - key: \"topology.kubernetes.io/zone\"\n          operator: In\n          values: [\"us-west-2a\", \"us-west-2b\"]\n        - key: \"kubernetes.io/arch\"\n          operator: In\n          values: [\"arm64\", \"amd64\"]\n        - key: \"karpenter.sh/capacity-type\"\n          operator: In\n          values: [\"spot\", \"on-demand\", \"reserved\"]\n\n  # Disruption section which describes the ways in which Karpenter can disrupt and replace Nodes\n  # Configuration in this section constrains how aggressive Karpenter can be with performing operations\n  # like rolling Nodes due to them hitting their maximum lifetime (expiry) or scaling down nodes to reduce cluster cost\n  disruption:\n    # Describes which types of Nodes Karpenter should consider for consolidation\n    # If using 'WhenEmptyOrUnderutilized', Karpenter will consider all nodes for consolidation and attempt to remove or replace Nodes when it discovers that the Node is empty or underutilized and could be changed to reduce cost\n    # If using `WhenEmpty`, Karpenter will only consider nodes for consolidation that contain no workload pods\n    consolidationPolicy: WhenEmptyOrUnderutilized | WhenEmpty\n\n    # The amount of time Karpenter should wait to consolidate a node after a pod has been added or removed from the node.\n    # You can choose to disable consolidation entirely by setting the string value 'Never' here\n    consolidateAfter: 1m | Never # Added to allow additional control over consolidation aggressiveness\n\n    # Budgets control the speed Karpenter can scale down nodes.\n    # Karpenter will respect the minimum of the currently active budgets, and will round up\n    # when considering percentages. Duration and Schedule must be set together.\n    budgets:\n    - nodes: 10%\n    # On Weekdays during business hours, don't do any deprovisioning.\n    - schedule: \"0 9 * * mon-fri\"\n      duration: 8h\n      nodes: \"0\"\n\n  # Optional: Number of nodes to maintain for static capacity\n  # When set, NodePool operates in static mode maintaining fixed node count\n  replicas: 5\n\n  # Resource limits constrain the total size of the pool.\n  # Limits prevent Karpenter from creating new instances once the limit is exceeded.\n  limits:\n    cpu: \"1000\"\n    memory: 1000Gi\n    # For static NodePools, limits.nodes constrains maximum node count during scaling/drift\n    # Note : Supported only for static NodePools\n    nodes: 10\n\n  # Priority given to the NodePool when the scheduler considers which NodePool\n  # to select. Higher weights indicate higher priority when comparing NodePools.\n  # Specifying no weight is equivalent to specifying a weight of 0.\n  # Note: weight cannot be set when replicas is specified\n  weight: 10\nstatus:\n  conditions:\n    - type: Initialized\n      status: \"False\"\n      observedGeneration: 1\n      lastTransitionTime: \"2024-02-02T19:54:34Z\"\n      reason: NodeClaimNotLaunched\n      message: \"NodeClaim hasn't succeeded launch\"\n  # Current node count for the NodePool\n  nodes: 5\n  resources:\n    cpu: \"20\"\n    memory: \"8192Mi\"\n    ephemeral-storage: \"100Gi\"\n```\n\n## metadata.name\nThe name of the NodePool.\n\n## spec.template.metadata.labels\nArbitrary key/value pairs to apply to all nodes.\n\n## spec.template.metadata.annotations\nArbitrary key/value pairs to apply to all nodes.\n\n## spec.template.spec.nodeClassRef\n\nThis field points to the Cloud Provider NodeClass resource. See [EC2NodeClasses]({{<ref \"nodeclasses\" >}}) for details.\n\n## spec.template.spec.taints\n\nTaints to add to provisioned nodes. Pods that don't tolerate those taints could be prevented from scheduling.\nSee [Taints and Tolerations](https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/) for details.\n\n## spec.template.spec.startupTaints\n\nTaints that are added to nodes to indicate that a certain condition must be met, such as starting an agent or setting up networking, before the node is can be initialized.\nThese taints must be cleared before pods can be deployed to a node.\n\n## spec.template.spec.expireAfter\n\nThe amount of time a Node can live on the cluster before being deleted by Karpenter. Nodes will begin draining once it's expiration has been hit.\n\n## spec.template.spec.terminationGracePeriod\n\nThe amount of time a Node can be draining before Karpenter forcibly cleans up the node. Pods blocking eviction like PDBs and do-not-disrupt will be respected during draining until the `terminationGracePeriod` is reached, where those pods will be forcibly deleted.\n\n## spec.template.spec.requirements\n\nKubernetes 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 NodePool API.\n\nIn 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).\n\nThese well-known labels may be specified at the NodePool level, or in a workload definition (e.g., nodeSelector on a pod.spec). Nodes are chosen using both the NodePool'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 NodePool's requirements. If a requirement is not defined for a well known label, any value available to the cloud provider may be chosen.\n\nFor example, an instance type may be specified using a nodeSelector in a pod spec. If the instance type requested is not included in the NodePool list and the NodePool has instance type requirements, Karpenter will not create a node or schedule the pod.\n\n**Static NodePool**\n\nThe requirements for static NodePool behaves identically to dynamic pools — it defines the constraints for all NodeClaims launched under that NodePool.\n\nThe NodeClaim requirements are directly derived from the NodeClaimTemplate on the NodePool. These are evaluated once per NodeClaim at creation, meaning the selection is based solely on what the template allows.\nAs a result, NodeClaims created for the same static NodePool could result in different instance types being launched depending on instance availability so long as those instance types are compatible with the NodePool's requirements.\n\n### Well-Known Labels\n\n#### Instance Types\n\n- key: `node.kubernetes.io/instance-type`\n- key: `karpenter.k8s.aws/instance-family`\n- key: `karpenter.k8s.aws/instance-category`\n- key: `karpenter.k8s.aws/instance-generation`\n- key: `karpenter.k8s.aws/instance-capability-flex`\n\nGenerally, 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.\n\nReview [AWS instance types](../../reference/instance-types). Most instance types are supported with the exclusion of [non-HVM](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/virtualization_types.html).\n\n#### Availability Zones\n\n- key: `topology.kubernetes.io/zone`\n- value example: `us-east-1c`\n- value list: `aws ec2 describe-availability-zones --region <region-name>`\n\nKarpenter 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.\n\n[Learn more about Availability Zone\nIDs.](https://docs.aws.amazon.com/ram/latest/userguide/working-with-az-ids.html)\n\n#### Architecture\n\n- key: `kubernetes.io/arch`\n- values\n  - `amd64`\n  - `arm64`\n\nKarpenter supports `amd64` nodes, and `arm64` nodes.\n\n#### Operating System\n - key: `kubernetes.io/os`\n - values\n   - `linux`\n   - `windows`\n\nKarpenter supports `linux` and `windows` operating systems.\n\n#### Capacity Type\n\n- key: `karpenter.sh/capacity-type`\n- values\n  - `spot`\n  - `on-demand`\n  - `reserved`\n\nKarpenter supports specifying capacity type, which is analogous to [EC2 purchase options](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-purchasing-options.html). Note that the `reserved` capacity type refers to [capacity reservations](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/capacity-reservation-overview.html) (on-demand capacity reservations and capacity blocks) not [reserved instances](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-reserved-instances.html) (RIs).\n\nIf a NodePool is compatible with multiple capacity types, Karpenter will prioritize `reserved` capacity, followed by `spot`, then finally `on-demand`.\nIf the provider API (e.g. EC2 Fleet's API) indicates capacity is unavailable, Karpenter caches that result across all attempts to provision EC2 capacity for that instance type and zone for the next 3 minutes.\nIf there are no other possible offerings available for a higher priority capacity type, Karpenter will attempt to fallback to a lower priority capacity type, generally within milliseconds.\n\nKarpenter also allows `karpenter.sh/capacity-type` to be used as a topology key for enforcing topology-spread.\n\n#### Tenancy\n\n- key: `karpenter.k8s.aws/instance-tenancy`\n- values\n    - `default`\n    - `dedicated`\n\nKarpenter supports specifying tenancy type.\n\nIf a NodeClaim requires dedicated tenancy, then it will launch on a [Dedicated Instance](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/dedicated-instance.html).  If the NodeClaim does not specify the label, or if both types are allowed, then it will launch with default tenancy.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nThere is currently a limit of 100 on the total number of requirements on both the NodePool and the NodeClaim. It's important to note that `spec.template.metadata.labels` are also propagated as requirements on the NodeClaim when it's created, meaning that you can't have more than 100 requirements and labels combined set on your NodePool.\n{{% /alert %}}\n\n### Min Values\n\nAlong with the combination of [key,operator,values] in the requirements, Karpenter also supports `minValues` in the NodePool requirements block, allowing the scheduler to be aware of user-specified flexibility minimums while scheduling pods to a cluster. Depending on the policy configured via the flag `--min-values-policy` or environment variable `MIN_VALUES_POLICY`, if Karpenter cannot meet this minimum flexibility for each key when scheduling a pod, it will either fail the scheduling loop for that NodePool, either falling back to another NodePool which meets the pod requirements or failing scheduling the pod altogether (when policy is set to `Strict`) or relax `minValues` until they can be met (when policy is set to `BestEffort`).\n\nFor spot instances, you should specify `karpenter.sh/capacity-type: spot` in your requirements. For example, the below spec will use spot instance type for all provisioned instances and enforces `minValues` to various keys where it is defined\ni.e at least 2 unique instance families from [c,m,r], 5 unique instance families [eg: \"m5\",\"m5d\",\"r4\",\"c5\",\"c5d\",\"c4\" etc], 10 unique instance types [eg: \"c5.2xlarge\",\"c4.xlarge\" etc] is required for scheduling the pods.\n\n```yaml\nspec:\n  template:\n    spec:\n      requirements:\n        - key: kubernetes.io/arch\n          operator: In\n          values: [\"amd64\"]\n        - key: kubernetes.io/os\n          operator: In\n          values: [\"linux\"]\n        - key: karpenter.sh/capacity-type\n          operator: In\n          values: [\"spot\"]\n        - key: karpenter.k8s.aws/instance-category\n          operator: In\n          values: [\"c\", \"m\", \"r\"]\n          minValues: 2\n        - key: karpenter.k8s.aws/instance-family\n          operator: Exists\n          minValues: 5\n        - key: node.kubernetes.io/instance-type\n          operator: Exists\n          minValues: 10\n        - key: karpenter.k8s.aws/instance-generation\n          operator: Gte\n          values: [\"3\"]\n```\n\nNote that `minValues` can be used with multiple operators and multiple requirements. And if the `minValues` are defined with multiple operators for the same requirement key, scheduler considers the max of all the `minValues` for that requirement. For example, the below spec requires scheduler to consider at least 5 instance-family to schedule the pods.\n\n```yaml\nspec:\n  template:\n    spec:\n      requirements:\n        - key: kubernetes.io/arch\n          operator: In\n          values: [\"amd64\"]\n        - key: kubernetes.io/os\n          operator: In\n          values: [\"linux\"]\n        - key: karpenter.k8s.aws/instance-category\n          operator: In\n          values: [\"c\", \"m\", \"r\"]\n          minValues: 2\n        - key: karpenter.k8s.aws/instance-family\n          operator: Exists\n          minValues: 5\n        - key: karpenter.k8s.aws/instance-family\n          operator: In\n          values: [\"m5\",\"m5d\",\"c5\",\"c5d\",\"c4\",\"r4\"]\n          minValues: 3\n        - key: node.kubernetes.io/instance-type\n          operator: Exists\n          minValues: 10\n        - key: karpenter.k8s.aws/instance-generation\n          operator: Gte\n          values: [\"3\"]\n```\n\n{{% alert title=\"Recommended\" color=\"primary\" %}}\nKarpenter allows you to be extremely flexible with your NodePools by only constraining your instance types in ways that are absolutely necessary for your cluster. By default, Karpenter will enforce that you specify the `spec.template.spec.requirements` field, but will not enforce that you specify any requirements within the field. If you choose to specify `requirements: []`, this means that you will completely flexible to _all_ instance types that your cloud provider supports.\n\nThough Karpenter doesn't enforce these defaults, for most use-cases, we recommend that you specify _some_ requirements to avoid odd behavior or exotic instance types. Below, is a high-level recommendation for requirements that should fit the majority of use-cases for generic workloads\n\n```yaml\nspec:\n  template:\n    spec:\n      requirements:\n        - key: kubernetes.io/arch\n          operator: In\n          values: [\"amd64\"]\n        - key: kubernetes.io/os\n          operator: In\n          values: [\"linux\"]\n        - key: karpenter.sh/capacity-type\n          operator: In\n          values: [\"on-demand\"]\n        - key: karpenter.k8s.aws/instance-category\n          operator: In\n          values: [\"c\", \"m\", \"r\"]\n        - key: karpenter.k8s.aws/instance-generation\n          operator: Gte\n          values: [\"3\"]\n```\n\n{{% /alert %}}\n\n\n## spec.disruption\n\nYou can configure Karpenter to disrupt Nodes through your NodePool in multiple ways. You can use `spec.disruption.consolidationPolicy`, `spec.disruption.consolidateAfter`, or `spec.template.spec.expireAfter`.\nYou can also rate limit Karpenter's disruption through the NodePool's `spec.disruption.budgets`.\nRead [Disruption]({{<ref \"disruption\" >}}) for more.\n\n## spec.replicas\n\nOptional field that enables static capacity mode. When specified, the NodePool maintains a fixed number of nodes regardless of pod demand.\n\n**Static NodePool Constraints:**\n- Cannot be removed once set (NodePool cannot switch between static and dynamic modes)\n- Only `limits.nodes` is allowed in limits section\n- `weight` field cannot be set\n- Nodes are not considered for consolidation\n- Scale operations bypass node disruption budgets but respect PodDisruptionBudgets\n\n**Scaling:** Use `kubectl scale nodepool <name> --replicas=<count>` to change replica count.\n\n## spec.limits\n\nThe NodePool spec includes a limits section (`spec.limits`), which constrains the maximum amount of resources that the NodePool can consume.\n\nIf the `NodePool.spec.limits` section is unspecified, it means that there is no default limitation on resource allocation. In this case, the maximum resource consumption is governed by the quotas set by your cloud provider. If a limit has been exceeded, nodes provisioning is prevented until some nodes have been terminated.\n\n**For Static NodePools:** Only `limits.nodes` is supported. This field constrains the maximum number of nodes during scaling operations or drift replacement. Note that `limits.nodes` is support only on static NodePools.\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\nspec:\n  replicas: 10\n  template:\n    spec:\n      requirements:\n        - key: karpenter.sh/capacity-type\n          operator: In\n          values: [\"spot\"]\n  limits:\n    cpu: 1000\n    memory: 1000Gi\n    nvidia.com/gpu: 2\n    # For static NodePools, only nodes limit is allowed\n    nodes: 20\n```\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nKarpenter provisioning is highly parallel. Because of this, limit checking is eventually consistent, which can result in overrun during rapid scale outs.\n{{% /alert %}}\n\nCPU 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.\n\nMemory limits are described with a [`BinarySI` value, such as 1000Gi.](https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/#meaning-of-memory)\n\nYou can view the current consumption of cpu and memory on your cluster by running:\n```\nkubectl get nodepool -o=jsonpath='{.items[0].status}'\n```\n\nReview 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`.\n\n## spec.weight\n\nKarpenter allows you to describe NodePool 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).\n\nFor more information on weighting NodePools, see the [Weighted NodePools section]({{<ref \"scheduling#weighted-nodepools\" >}}) in the scheduling docs.\n\n## status.conditions\n[Conditions](https://github.com/kubernetes/apimachinery/blob/f14778da5523847e4c07346e3161a4b4f6c9186e/pkg/apis/meta/v1/types.go#L1523) objects add observability features to Karpenter.\n* The `status.conditions.type` object reflects node status, such as `Initialized` or `Available`.\n* The status of the condition, `status.conditions.status`, indicates if the condition is `True` or `False`.\n* The `status.conditions.observedGeneration` indicates  if the instance is out of date with the current state of `.metadata.generation`.\n* The `status.conditions.lastTransitionTime` object contains a programatic identifier that indicates the time of the condition's previous transition.\n* The `status.conditions.reason` object indicates the reason for the condition's previous transition.\n* The `status.conditions.message` object provides human-readable details about the condition's previous transition.\n\nNodePools have the following status conditions:\n\n| Condition Type      | Description                                                                                                                                       |\n|---------------------|---------------------------------------------------------------------------------------------------------------------------------------------------|\n| NodeClassReady      | Underlying nodeClass is ready                                                                                                                     |\n| ValidationSucceeded | NodePool CRD validation succeeded                                                                                                                 |\n| Ready               | Top level condition that indicates if the nodePool is ready. This condition will not be true until all the other conditions on nodePool are true. |\n\nIf a NodePool is not ready, it will not be considered for scheduling.\n\n## status.nodes\nThis field shows the current number of nodes managed by the NodePool.\n\n## status.resources\nObjects under `status.resources` provide information about the status of resources such as `cpu`, `memory`, and `ephemeral-storage`.\n\n## Examples\n\n### Isolating Expensive Hardware\n\nA NodePool can be set up to only provision nodes on particular processor types.\nThe following example sets a taint that only allows pods with tolerations for Nvidia GPUs to be scheduled:\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: gpu\nspec:\n  disruption:\n    consolidationPolicy: WhenEmptyOrUnderutilized\n  template:\n    spec:\n      requirements:\n      - key: node.kubernetes.io/instance-type\n        operator: In\n        values: [\"p3.8xlarge\", \"p3.16xlarge\"]\n      taints:\n      - key: nvidia.com/gpu\n        value: \"true\"\n        effect: NoSchedule\n```\nIn order for a pod to run on a node defined in this NodePool, it must tolerate `nvidia.com/gpu` in its pod spec.\n\n### Static NodePool\n\nA NodePool can be configured for static capacity by setting the `replicas` field. This maintains a fixed number of nodes regardless of pod demand.\nUsers who want to spread nodes across zones can do so explicitly by:\n- Creating multiple static NodePools, each pinned to a specific AZ.\n\nThe following example creates a static NodePool with 10 replicas:\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: static-capacity\nspec:\n  replicas: 10\n  template:\n    spec:\n      requirements:\n      - key: node.kubernetes.io/instance-type\n        operator: In\n        values: [\"m5.large\", \"m5.xlarge\"]\n      - key: topology.kubernetes.io/zone\n        operator: In\n        values: [\"us-west-2a\"]  # All replicas will come up in specified zone\n  limits:\n    nodes: 15  # Maximum nodes during scaling/drift\n  disruption:\n    budgets:\n    - nodes: 20%  # Disruption budget for drift replacement\n```\n\n### Cilium Startup Taint\n\nPer the Cilium [docs](https://docs.cilium.io/en/stable/installation/taints/#taint-effects), 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.\n\nFailure to provide accurate `startupTaints` can result in Karpenter continually provisioning new nodes. When the new node joins and the startup taint that Karpenter is unaware of is added, Karpenter now considers the pending pod to be unschedulable to this node. Karpenter will attempt to provision yet another new node to schedule the pending pod.\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: cilium-startup\nspec:\n  disruption:\n    consolidationPolicy: WhenEmptyOrUnderutilized\n  template:\n    spec:\n      startupTaints:\n      - key: node.cilium.io/agent-not-ready\n        value: \"true\"\n        effect: NoExecute\n```\n"
  },
  {
    "path": "website/content/en/v1.9/concepts/scheduling.md",
    "content": "---\ntitle: \"Scheduling\"\nlinkTitle: \"Scheduling\"\nweight: 40\ndescription: >\n  Learn about scheduling workloads with Karpenter\n---\n\nIf 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.\nHowever, 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.\nReasons for constraining where your pods run could include:\n\n* Needing to run in zones where dependent applications or storage are available\n* Requiring certain kinds of processors or other hardware\n* Wanting to use techniques like topology spread to help ensure high availability\n\nYour Cloud Provider defines the first layer of constraints, including all instance types, architectures, zones, and purchase types available to its cloud.\nThe cluster administrator adds the next layer of constraints by creating one or more NodePools.\nThe final layer comes from you adding specifications to your Kubernetes pod deployments.\nPod scheduling constraints must fall within a NodePool's constraints or the pods will not deploy.\nFor example, if the NodePool sets limits that allow only a particular zone to be used, and a pod asks for a different zone, it will not be scheduled.\n\nConstraints you can request include:\n\n* **Resource requests**: Request that certain amount of memory or CPU be available.\n* **Node selection**: Choose to run on a node that is has a particular label (`nodeSelector`).\n* **Node affinity**: Draws a pod to run on nodes with particular attributes (affinity).\n* **Topology spread**: Use topology spread to help ensure availability of the application.\n* **Pod affinity/anti-affinity**: Draws pods towards or away from topology domains based on the scheduling of other pods.\n\nKarpenter supports standard Kubernetes scheduling constraints.\nThis allows you to define a single set of rules that apply to both existing and provisioned capacity.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nKarpenter supports specific [Well-Known Labels, Annotations and Taints](https://kubernetes.io/docs/reference/labels-annotations-taints/) that are useful for scheduling.\n{{% /alert %}}\n\n## Resource requests\n\nWithin a Pod spec, you can both make requests and set limits on resources a pod needs, such as CPU and memory.\nFor example:\n\n```yaml\napiVersion: v1\nkind: Pod\nmetadata:\n  name: myapp\nspec:\n  containers:\n  - name: app\n    image: myimage\n    resources:\n      requests:\n        memory: \"128Mi\"\n        cpu: \"500m\"\n      limits:\n        memory: \"256Mi\"\n        cpu: \"1000m\"\n```\nIn this example, the container is requesting 128MiB of memory and .5 CPU.\nIts limits are set to 256MiB of memory and 1 CPU.\nInstance type selection math only uses `requests`, but `limits` may be configured to enable resource oversubscription.\n\n\nSee [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 [NodePools]({{<ref \"./nodepools\" >}}) for a list of supported resources.\n\n### Accelerators/GPU Resources\n\nAccelerator (e.g., GPU) values include\n- `nvidia.com/gpu`\n- `amd.com/gpu`\n- `aws.amazon.com/neuron`\n- `aws.amazon.com/neuroncore`\n- `habana.ai/gaudi`\n\nKarpenter supports accelerators, such as GPUs.\n\nAdditionally, include a resource requirement in the workload manifest. This will cause the GPU dependent pod to be scheduled onto the appropriate node.\n\nHere is an example of an accelerator resource in a workload manifest (e.g., pod):\n\n```yaml\nspec:\n  template:\n    spec:\n      containers:\n      - resources:\n          limits:\n            nvidia.com/gpu: \"1\"\n```\n{{% alert title=\"Note\" color=\"primary\" %}}\nIf you are provisioning nodes that will utilize accelerators/GPUs, you need to deploy the appropriate device plugin daemonset.\nWithout the respective device plugin daemonset, Karpenter will not see those nodes as initialized.\nRefer 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:\n* `nvidia.com/gpu`: [NVIDIA device plugin for Kubernetes](https://github.com/NVIDIA/k8s-device-plugin)\n* `amd.com/gpu`: [AMD GPU device plugin for Kubernetes](https://github.com/RadeonOpenCompute/k8s-device-plugin)\n* `aws.amazon.com/neuron`/`aws.amazon.com/neuroncore`: [AWS Neuron device plugin for Kubernetes](https://awsdocs-neuron.readthedocs-hosted.com/en/latest/containers/kubernetes-getting-started.html#neuron-device-plugin)\n* `habana.ai/gaudi`: [Habana device plugin for Kubernetes](https://github.com/HabanaAI/habanalabs-k8s-device-plugin)\n  {{% /alert %}}\n\n#### AWS Neuron Resources\n\nThe [Neuron scheduler extension](https://awsdocs-neuron.readthedocs-hosted.com/en/latest/containers/kubernetes-getting-started.html#neuron-scheduler-extension) is required for pods that require more than one Neuron core (`aws.amazon.com/neuroncore`) or device (`aws.amazon.com/neuron`) resource, but less than all available Neuron cores or devices on a node. From the AWS Neuron documentation:\n\n> The Neuron scheduler extension finds sets of directly connected devices with minimal communication latency when scheduling containers. On Inf1 and Inf2 instance types where Neuron devices are connected through a ring topology, the scheduler finds sets of contiguous devices. For example, for a container requesting 3 Neuron devices the scheduler might assign Neuron devices 0,1,2 to the container if they are available but never devices 0,2,4 because those devices are not directly connected. On Trn1.32xlarge and Trn1n.32xlarge instance types where devices are connected through a 2D torus topology, the Neuron scheduler enforces additional constraints that containers request 1, 4, 8, or all 16 devices. If your container requires a different number of devices, such as 2 or 5, we recommend that you use an Inf2 instance instead of Trn1 to benefit from more advanced topology.\n\nHowever, Karpenter is not aware of the decisions made by the Neuron scheduler extension which precludes it from making any optimizations to consolidate and bin pack pods requiring Neuron resources. To ensure Karpenter's bin-packing is consistent with the decisions made by the scheduler extension, containers must have like-sized, power of 2 requests (e.g. 1, 2, 4, etc). Failing to do so may result in permanently pending pods.\n\n### Pod ENI Resources (Security Groups for Pods)\n[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.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nYou 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.\n{{% /alert %}}\n{{% alert title=\"Note\" color=\"primary\" %}}\nIf you've enabled [Security Groups per Pod](https://aws.github.io/aws-eks-best-practices/networking/sgpp/), one of the instance's ENIs is reserved. To avoid discrepancies between the `maxPods` value and the node's supported pod density, you need to set [RESERVED_ENIS]({{<ref \"../reference/settings\" >}})=1.\n{{% /alert %}}\n\nHere is an example of a pod-eni resource defined in a deployment manifest:\n```\nspec:\n  template:\n    spec:\n      containers:\n      - resources:\n          limits:\n            vpc.amazonaws.com/pod-eni: \"1\"\n```\n\n{{% alert title=\"Windows Support Notice\" color=\"warning\" %}}\nSecurity groups for pods are [currently unsupported for Windows nodes](https://docs.aws.amazon.com/eks/latest/userguide/security-groups-for-pods.html)\n{{% /alert %}}\n\n## Selecting nodes\n\nWith `nodeSelector` you can ask for a node that matches selected key-value pairs.\nThis can include well-known labels or custom labels you create yourself.\n\nYou 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.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nKarpenter extends the upstream Kubernetes requirement operators with `Gte` (>=) and `Lte` (<=) for more intuitive numeric comparisons on labels like `karpenter.k8s.aws/instance-cpu` or `karpenter.k8s.aws/instance-memory`.\n{{% /alert %}}\n\n### Labels\nWell-known labels may be specified as NodePool requirements or pod scheduling constraints. You can also define your own custom labels by specifying `requirements` or `labels` on your NodePool and select them using `nodeAffinity` or `nodeSelectors` on your Pods.\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nTake 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.\n{{% /alert %}}\n\n#### Well-Known Labels\n\n| Label                                                          | Example              | Description                                                                                                                                                                                                                               |\n| -------------------------------------------------------------- |----------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| 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))                                                                                               |\n| node.kubernetes.io/instance-type                               | g4dn.8xlarge         | Instance types are defined by your cloud provider ([aws](https://aws.amazon.com/ec2/instance-types/))                                                                                                                                     |\n| node.kubernetes.io/windows-build                               | 10.0.17763           | Windows OS build in the format \"MajorVersion.MinorVersion.BuildNumber\". Can be `10.0.17763` for WS2019, `10.0.20348` for WS2022, or `10.0.26100` for WS2025. ([k8s](https://kubernetes.io/docs/reference/labels-annotations-taints/#nodekubernetesiowindows-build)) |\n| kubernetes.io/os                                               | linux                | Operating systems are defined by [GOOS values](https://github.com/golang/go/blob/master/src/internal/syslist/syslist.go) (`KnownOS`) on the instance                                                                                      |\n| kubernetes.io/arch                                             | amd64                | Architectures are defined by [GOARCH values](https://github.com/golang/go/blob/master/src/internal/syslist/syslist.go) (`KnownArch`) on the instance                                                                                      |\n| karpenter.sh/capacity-type                                     | spot                 | Capacity types include `reserved`, `spot`, and `on-demand`                                                                                                                                                                                |\n| karpenter.sh/nodepool                                          | default              | The name of the nodepool used to provision the node.                                                                                                                                                                                      |\n| karpenter.k8s.aws/capacity-reservation-id                      | cr-56fac701cc1951b03 | [AWS Specific] The capacity reservation ID. Only present on reserved nodes.                                                                                                                                                               |\n| karpenter.k8s.aws/capacity-reservation-type                    | default              | [AWS Specific] The capacity reservation type. Can be `default` or `capacity-block`. Only present on reserved nodes.                                                                                                                       |\n| karpenter.k8s.aws/ec2nodeclass                                 | default              | [AWS Specific] The name of the ec2 nodeclass used to provision the node                                                                                                                                                                   |\n| karpenter.k8s.aws/instance-hypervisor                          | nitro                | [AWS Specific] Instance types that use a specific hypervisor                                                                                                                                                                              |\n| karpenter.k8s.aws/instance-encryption-in-transit-supported     | true                 | [AWS Specific] Instance types that support (or not) in-transit encryption                                                                                                                                                                 |\n| karpenter.k8s.aws/instance-category                            | g                    | [AWS Specific] Instance types of the same category, usually the string before the generation number                                                                                                                                       |\n| karpenter.k8s.aws/instance-generation                          | 4                    | [AWS Specific] Instance type generation number within an instance category                                                                                                                                                                |\n| karpenter.k8s.aws/instance-family                              | g4dn                 | [AWS Specific] Instance types of similar properties but different resource quantities                                                                                                                                                     |\n| karpenter.k8s.aws/instance-size                                | 8xlarge              | [AWS Specific] Instance types of similar resource quantities but different properties                                                                                                                                                     |\n| karpenter.k8s.aws/instance-cpu                                 | 32                   | [AWS Specific] Number of CPUs on the instance                                                                                                                                                                                             |\n| karpenter.k8s.aws/instance-cpu-manufacturer                    | aws                  | [AWS Specific] Name of the CPU manufacturer                                                                                                                                                                                               |\n| karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz       | 3600                 | [AWS Specific] The CPU clock speed, in MHz                                                                                                                                                                                                |\n| karpenter.k8s.aws/instance-memory                              | 131072               | [AWS Specific] Number of mebibytes of memory on the instance                                                                                                                                                                              |\n| karpenter.k8s.aws/instance-ebs-bandwidth                       | 9500                 | [AWS Specific] Number of [maximum megabits](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-optimized.html#ebs-optimization-performance) of EBS available on the instance                                                         |\n| 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                                                                           |\n| karpenter.k8s.aws/instance-pods                                | 110                  | [AWS Specific] Number of pods the instance supports                                                                                                                                                                                       |\n| karpenter.k8s.aws/instance-gpu-name                            | t4                   | [AWS Specific] Name of the GPU on the instance, if available                                                                                                                                                                              |\n| karpenter.k8s.aws/instance-gpu-manufacturer                    | nvidia               | [AWS Specific] Name of the GPU manufacturer                                                                                                                                                                                               |\n| karpenter.k8s.aws/instance-gpu-count                           | 1                    | [AWS Specific] Number of GPUs on the instance                                                                                                                                                                                             |\n| karpenter.k8s.aws/instance-gpu-memory                          | 16384                | [AWS Specific] Number of mebibytes of memory on the GPU                                                                                                                                                                                   |\n| karpenter.k8s.aws/instance-local-nvme                          | 900                  | [AWS Specific] Number of gibibytes of local nvme storage on the instance                                                                                                                                                                  |\n| karpenter.k8s.aws/instance-capability-flex                     | true                 | [AWS Specific] Instance with capacity flex                                                                                                                                                                                                |\n| karpenter.k8s.aws/instance-tenancy                                      | default              | [AWS Specific] Tenancy types include `default`, and `dedicated`                                                                                                                                                                        |\n| topology.k8s.aws/zone-id                                       | use1-az1             | [AWS Specific] Globally consistent [zone id](https://docs.aws.amazon.com/global-infrastructure/latest/regions/az-ids.html)                                                                                                                |\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nKarpenter translates the following deprecated labels to their stable equivalents: `failure-domain.beta.kubernetes.io/zone`, `failure-domain.beta.kubernetes.io/region`, `beta.kubernetes.io/arch`, `beta.kubernetes.io/os`, and `beta.kubernetes.io/instance-type`.\n{{% /alert %}}\n\n#### User-Defined Labels\n\nKarpenter 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 NodePool requirements with the `Exists` operator:\n\n```yaml\nrequirements:\n  - key: user.defined.label/type\n    operator: Exists\n```\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nThere is currently a limit of 100 on the total number of requirements on both the NodePool and the NodeClaim. It's important to note that `spec.template.metadata.labels` are also propagated as requirements on the NodeClaim when it's created, meaning that you can't have more than 100 requirements and labels combined set on your NodePool.\n{{% /alert %}}\n\n#### Node selectors\n\nHere is an example of a `nodeSelector` for selecting nodes:\n\n```yaml\nnodeSelector:\n  topology.kubernetes.io/zone: us-west-2a\n  karpenter.sh/capacity-type: spot\n```\nThis example features a well-known label (`topology.kubernetes.io/zone`) and a label that is well known to Karpenter (`karpenter.sh/capacity-type`).\n\nIf you want to create a custom label, you should do that at the NodePool level.\nThen the pod can declare that custom label.\n\n\nSee [nodeSelector](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#nodeselector) in the Kubernetes documentation for details.\n\n## Preferences\n\nKarpenter is aware of preferences (node affinity, pod affinity, pod anti-affinity, and pod topology) and treats them as requirements in most circumstances. Karpenter uses these preferences when determining if a pod can schedule on a node (absent topology requirements), or when determining if a pod can be shifted to a new node.\n\nKarpenter starts by treating preferred affinities as required affinities when constructing requirements for a pod. When these requirements cannot be met, the pod's preferences are relaxed one-at-a-time by ascending weight (lowest weight is relaxed first), and the remaining requirements are tried again.\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter does not interpret preferred affinities as required when constructing topology requirements for scheduling to a node. If these preferences are necessary, required affinities should be used [as documented in Node Affinity](#node-affinity).\n{{% /alert %}}\n\n### Node affinity\n\nExamples below illustrate how to use Node affinity to include (`In`) and exclude (`NotIn`) objects.\nSee [Node affinity](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#node-affinity) for details.\nWhen setting rules, the following Node affinity types define how hard or soft each rule is:\n\n* **requiredDuringSchedulingIgnoredDuringExecution**: This is a hard rule that must be met.\n* **preferredDuringSchedulingIgnoredDuringExecution**: This is a preference, but the pod can run on a node where it is not guaranteed.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nPreferred affinities on pods can result in more nodes being created than expected because Karpenter will prefer to create new nodes to satisfy preferences, [see the preferences documentation](#preferences) for details.\n{{% /alert %}}\n\nThe `IgnoredDuringExecution` part of each tells the pod to keep running, even if conditions change on the node so the rules no longer matched.\nYou can think of these concepts as `required` and `preferred`, since Kubernetes never implemented other variants of these rules.\n\nAll examples below assume that the NodePool 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.\n\n```yaml\n affinity:\n   nodeAffinity:\n     requiredDuringSchedulingIgnoredDuringExecution:\n       nodeSelectorTerms:\n         - matchExpressions:\n           - key: \"topology.kubernetes.io/zone\"\n             operator: \"In\"\n             values: [\"us-west-2a\", \"us-west-2b\"]\n           - key: \"topology.kubernetes.io/zone\"\n             operator: \"In\"\n             values: [\"us-west-2b\"]\n```\n\nChanging the second operator to `NotIn` would allow the pod to run in `us-west-2a` only:\n\n```yaml\n           - key: \"topology.kubernetes.io/zone\"\n             operator: \"In\"\n             values: [\"us-west-2a\", \"us-west-2b\"]\n           - key: \"topology.kubernetes.io/zone\"\n             operator: \"NotIn\"\n             values: [\"us-west-2b\"]\n```\n\nContinuing to add to the example, `nodeAffinity` lets you define terms so if one term doesn't work it goes to the next one.\nHere, if `us-west-2a` is not available, the second term will cause the pod to run on a spot instance in `us-west-2d`.\n\n\n```yaml\n affinity:\n   nodeAffinity:\n     requiredDuringSchedulingIgnoredDuringExecution:\n       nodeSelectorTerms:\n         - matchExpressions: # OR\n           - key: \"topology.kubernetes.io/zone\" # AND\n             operator: \"In\"\n             values: [\"us-west-2a\", \"us-west-2b\"]\n           - key: \"topology.kubernetes.io/zone\" # AND\n             operator: \"NotIn\"\n             values: [\"us-west-2b\"]\n         - matchExpressions: # OR\n           - key: \"karpenter.sh/capacity-type\" # AND\n             operator: \"In\"\n             values: [\"spot\"]\n           - key: \"topology.kubernetes.io/zone\" # AND\n             operator: \"In\"\n             values: [\"us-west-2d\"]\n```\nIn general, Karpenter will go through each of the `nodeSelectorTerms` in order and take the first one that works.\nHowever, if Karpenter fails to provision on the first `nodeSelectorTerms`, it will try again using the second one.\nIf they all fail, Karpenter will fail to provision the pod.\nKarpenter will backoff and retry over time.\nSo if capacity becomes available, it will schedule the pod without user intervention.\n\n### Taints and tolerations\n\nTaints are the opposite of affinity.\nSetting 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 NodePool that was set up with a taint for only running pods that require a GPU, such as the following:\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: gpu\nspec:\n  template:\n    spec:\n      requirements:\n      - key: karpenter.k8s.aws/instance-family\n        operator: In\n        values:\n          - p3\n      taints:\n      - key: nvidia.com/gpu\n        value: \"true\"\n        effect: \"NoSchedule\"\n```\n\nFor a pod to request to run on a node that has this NodePool, it could set a toleration as follows:\n\n```yaml\napiVersion: v1\nkind: Pod\nmetadata:\n  name: mygpupod\nspec:\n  containers:\n  - name: gpuapp\n    resources:\n      requests:\n        nvidia.com/gpu: 1\n      limits:\n        nvidia.com/gpu: 1\n    image: mygpucontainer\n  tolerations:\n  - key: \"nvidia.com/gpu\"\n    operator: \"Exists\"\n    effect: \"NoSchedule\"\n```\nSee [Taints and Tolerations](https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/) in the Kubernetes documentation for details.\n\n### Topology Spread\n\nBy using the Kubernetes `topologySpreadConstraints` you can ask the NodePool 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.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nPreferred topology spread (`ScheduleAnyway`) can result in more nodes being created than expected because Karpenter will prefer to create new nodes to satisfy spread constraints, [see the preferences documentation](#preferences) for details.\n{{% /alert %}}\n\nFor example:\n\n```yaml\nspec:\n  topologySpreadConstraints:\n    - maxSkew: 1\n      topologyKey: \"topology.kubernetes.io/zone\"\n      whenUnsatisfiable: ScheduleAnyway\n      labelSelector:\n        matchLabels:\n          dev: jjones\n    - maxSkew: 1\n      topologyKey: \"kubernetes.io/hostname\"\n      whenUnsatisfiable: ScheduleAnyway\n      labelSelector:\n        matchLabels:\n          dev: jjones\n    - maxSkew: 1\n      topologyKey: \"karpenter.sh/capacity-type\"\n      whenUnsatisfiable: ScheduleAnyway\n      labelSelector:\n        matchLabels:\n          dev: jjones\n\n```\nAdding this to your podspec would result in:\n\n* Pods being spread across zones, hosts, and capacity-type (`topologyKey`).\n* 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.\n* No more than one pod difference in the number of pods on each host (`maxSkew`).\nFor example, if there were three nodes and five pods the pods could be spread 1, 2, 2 or 2, 1, 2 and so on.\nIf instead the maxSkew were 5, pods could be spread 5, 0, 0 or 3, 2, 0, or 2, 1, 2 and so on.\n\nThe three supported `topologyKey` values that Karpenter supports are:\n- `topology.kubernetes.io/zone`\n- `kubernetes.io/hostname`\n- `karpenter.sh/capacity-type`\n\nSee [Pod Topology Spread Constraints](https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/) for details.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nNodePools do not attempt to balance or rebalance the availability zones for their nodes. Availability zone balancing may be achieved by defining zonal Topology Spread Constraints for Pods that require multi-zone durability, and NodePools will respect these constraints while optimizing for compute costs.\n{{% /alert %}}\n\n### Pod affinity/anti-affinity\n\nBy using the `podAffinity` and `podAntiAffinity` configuration on a pod spec, you can inform the Karpenter scheduler of your desire for pods to schedule together or apart with respect to different topology domains.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nPreferred affinities on pods can result in more nodes being created than expected because Karpenter will prefer to create new nodes to satisfy preferences, [see the preferences documentation](#preferences) for details.\n{{% /alert %}}\n\nFor example:\n\n```yaml\nspec:\n  affinity:\n    podAffinity:\n      requiredDuringSchedulingIgnoredDuringExecution:\n      - labelSelector:\n          matchExpressions:\n          - key: system\n            operator: In\n            values:\n            - backend\n        topologyKey: topology.kubernetes.io/zone\n    podAntiAffinity:\n      requiredDuringSchedulingIgnoredDuringExecution:\n      - labelSelector:\n          matchLabels:\n            app: inflate\n        topologyKey: kubernetes.io/hostname\n```\n\nThe above pod affinity rule would cause the pod to only schedule in zones where a pod with the label `system=backend` is already running.\n\nThe 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.\n\nSee [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.\n\n### Persistent Volume Topology\n\nKarpenter automatically detects storage scheduling requirements and includes them in node launch decisions.\n\nIn 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).\nWhen 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`.\nIt randomly selects `us-west-2a`, provisions a node in that zone, and waits for kube-scheduler to bind the pod to the node.\nThe CSI driver creates a `PersistentVolume` according to the `PersistentVolumeClaim` and gives it a node affinity rule for `us-west-2a`.\n\nLater 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.\n\n```yaml\napiVersion: v1\nkind: Pod\nmetadata:\n  name: app\nspec:\n  containers: ...\n  volumes:\n    - name: storage\n      persistentVolumeClaim:\n        claimName: ebs-claim\n---\nkind: StorageClass\napiVersion: storage.k8s.io/v1\nmetadata:\n  name: ebs\nprovisioner: ebs.csi.aws.com\nvolumeBindingMode: WaitForFirstConsumer\nallowedTopologies:\n- matchLabelExpressions:\n  - key: topology.ebs.csi.aws.com/zone\n    values: [\"us-west-2a\", \"us-west-2b\"]\n---\napiVersion: v1\nkind: PersistentVolumeClaim\nmetadata:\n  name: ebs-claim\nspec:\n  accessModes:\n    - ReadWriteOnce\n  storageClassName: ebs\n  resources:\n    requests:\n      storage: 4Gi\n```\n\n{{% alert title=\"Note\" color=\"primary\" %}}\n☁️ AWS Specific\n\nThe 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`.\n{{% /alert %}}\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nThe 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)\n{{% /alert %}}\n\n## Weighted NodePools\n\nKarpenter allows you to order your NodePools using the `.spec.weight` field so that the Karpenter scheduler will attempt to schedule one NodePool before another.\n\n### Savings Plans and Reserved Instances\n\nIf 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.\n\nTo 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` field on the NodePool to limit the capacity that can be launched by this NodePool. Combined with the `.spec.weight` value, we can tell Karpenter to pull from instance types in the reserved NodePool before defaulting to generic instance types.\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: reserved-instance\nspec:\n  weight: 50\n  limits:\n    cpu: 100\n  template:\n    spec:\n      requirements:\n      - key: \"node.kubernetes.io/instance-type\"\n        operator: In\n        values: [\"c4.large\"]\n---\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\nspec:\n  template:\n    spec:\n      requirements:\n      - key: karpenter.sh/capacity-type\n        operator: In\n        values: [\"spot\", \"on-demand\"]\n      - key: kubernetes.io/arch\n        operator: In\n        values: [\"amd64\"]\n```\n\n### Fallback\n\nPods 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.\n\nBy assigning a higher `.spec.weight` value and restricting a NodePool 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.\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\nspec:\n  weight: 50\n  template:\n    spec:\n      requirements:\n      - key: karpenter.sh/capacity-type\n        operator: In\n        values: [\"spot\", \"on-demand\"]\n      - key: kubernetes.io/arch\n        operator: In\n        values: [\"amd64\"]\n---\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: arm64-specific\nspec:\n  template:\n    spec:\n      requirements:\n      - key: karpenter.sh/capacity-type\n        operator: In\n        values: [\"spot\", \"on-demand\"]\n      - key: kubernetes.io/arch\n        operator: In\n        values: [\"arm64\"]\n      - key: node.kubernetes.io/instance-type\n        operator: In\n        values: [\"a1.large\", \"a1.xlarge\"]\n```\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nBased on the way that Karpenter performs pod batching and bin packing, it is not guaranteed that Karpenter will always choose the highest priority NodePool given specific requirements. For example, if a pod can't be scheduled with the highest priority NodePool, it will force creation of a node using a lower priority NodePool, allowing 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.\n{{% /alert %}}\n\n## Advanced Scheduling Techniques\n\n### Scheduling based on Node Resources\n\nYou may want pods to be able to request resources of nodes that Kubernetes natively does not provide as a schedulable resource or that are aspects of certain nodes like\nHigh Performance Networking or NVME Local Storage. You can use Karpenter's Well-Known Labels to accomplish this.\n\nThese can further be applied at the NodePool or Workload level using Requirements, NodeSelectors or Affinities\n\nPod example of requiring any NVME disk:\n```yaml\n...\n affinity:\n   nodeAffinity:\n     requiredDuringSchedulingIgnoredDuringExecution:\n       nodeSelectorTerms:\n         - matchExpressions:\n           - key: \"karpenter.k8s.aws/instance-local-nvme\"\n             operator: \"Exists\"\n...\n```\n\nNodePool Example:\n```yaml\n...\nrequirement:\n  - key: \"karpenter.k8s.aws/instance-local-nvme\"\n    operator: \"Exists\"\n...\n```\n\nPod example of requiring at least 100GB of NVME disk:\n```yaml\n...\n affinity:\n   nodeAffinity:\n     requiredDuringSchedulingIgnoredDuringExecution:\n       nodeSelectorTerms:\n         - matchExpressions:\n            - key: \"karpenter.k8s.aws/instance-local-nvme\"\n              operator: Gte\n              values: [\"100\"]\n...\n```\n\nNodePool Example:\n```yaml\n...\nrequirement:\n  - key: \"karpenter.k8s.aws/instance-local-nvme\"\n    operator: Gte\n    values: [\"100\"]\n...\n```\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nKarpenter cannot yet take into account ephemeral-storage requests while scheduling pods, we're purely requesting attributes of nodes and getting X amount of resources\nas a side effect. You may need to tweak schedulable resources like CPU or Memory to achieve desired fit, especially if Consolidation is enabled.\n\nYour NodeClass will also need to support automatically formatting and mounting NVME Instance Storage if available.\n{{% /alert %}}\n\nPod example of requiring at least 50 Gbps of network bandwidth:\n```yaml\n...\n affinity:\n   nodeAffinity:\n     requiredDuringSchedulingIgnoredDuringExecution:\n       nodeSelectorTerms:\n         - matchExpressions:\n            - key: \"karpenter.k8s.aws/instance-network-bandwidth\"\n              operator: Gte\n              values: [\"50000\"]\n...\n```\n\nNodePool Example:\n```yaml\n...\nrequirement:\n  - key: \"karpenter.k8s.aws/instance-network-bandwidth\"\n    operator: Gte\n    values: [\"50000\"]\n...\n```\n\n### `Exists` Operator\n\nThe `Exists` operator can be used on a NodePool to provide workload segregation across nodes.\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nspec:\n  template:\n    spec:\n      requirements:\n        - key: company.com/team\n          operator: Exists\n...\n```\n\nWith this requirement on the NodePool, workloads can specify the same key (e.g. `company.com/team`) with custom values (e.g. `team-a`, `team-b`, etc.) as a required `nodeAffinity` or `nodeSelector`. Karpenter will then apply the key/value pair to nodes it launches dynamically based on the pod's node requirements.\n\nIf each set of pods that can schedule with this NodePool specifies this key in its `nodeAffinity` or `nodeSelector`, you can isolate pods onto different nodes based on their values. This provides a way to more dynamically isolate workloads without requiring a unique NodePool for each workload subset.\n\nFor example, providing the following `nodeSelectors` would isolate the pods for each of these deployments on different nodes.\n\n#### Team A Deployment\n\n```yaml\napiVersion: v1\nkind: Deployment\nmetadata:\n  name: team-a-deployment\nspec:\n  replicas: 5\n  template:\n    spec:\n      nodeSelector:\n        company.com/team: team-a\n```\n\n#### Team A Node\n\n```yaml\napiVersion: v1\nkind: Node\nmetadata:\n  labels:\n    company.com/team: team-a\n```\n\n#### Team B Deployment\n\n```yaml\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: team-b-deployment\nspec:\n  replicas: 5\n  template:\n    spec:\n      nodeSelector:\n        company.com/team: team-b\n```\n\n#### Team B Node\n\n```yaml\napiVersion: v1\nkind: Node\nmetadata:\n  labels:\n    company.com/team: team-b\n```\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nIf a workload matches the NodePool but doesn't specify a label, Karpenter will generate a random label for the node.\n{{% /alert %}}\n\n### On-Demand/Spot Ratio Split\n\nTaking 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.\n\nTo do this, we create one NodePool 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 NodePool and one value for the on-demand NodePool.  When we spread across our new label evenly, we'll end up with a ratio of 4:1 spot to on-demand nodes.\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nThis 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.\n{{% /alert %}}\n\n#### NodePools\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: spot\nspec:\n  template:\n    spec:\n      requirements:\n      - key: \"karpenter.sh/capacity-type\"\n        operator: In\n        values: [\"spot\"]\n      - key: capacity-spread\n        operator: In\n        values:\n        - \"2\"\n        - \"3\"\n        - \"4\"\n        - \"5\"\n---\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: on-demand\nspec:\n  template:\n    spec:\n      requirements:\n      - key: \"karpenter.sh/capacity-type\"\n        operator: In\n        values: [\"on-demand\"]\n      - key: capacity-spread\n        operator: In\n        values:\n        - \"1\"\n```\n\n#### Workload Topology Spread Constraint\n\n```yaml\ntopologySpreadConstraints:\n- maxSkew: 1\n  topologyKey: capacity-spread\n  whenUnsatisfiable: DoNotSchedule\n  labelSelector:\n    ...\n```\n"
  },
  {
    "path": "website/content/en/v1.9/contributing/_index.md",
    "content": "---\ntitle: \"Contributing\"\nlinkTitle: \"Contributing\"\nweight: 40\ndescription: >\n  Learn about how to contribute to Karpenter\n---\n"
  },
  {
    "path": "website/content/en/v1.9/contributing/community-meetings.md",
    "content": "---\ntitle: \"Community Meetings\"\nlinkTitle: \"Community Meetings\"\nweight: 10\ndescription: >\n  Join the Karpenter Community Meetings\n---\n\nKarpenter hosts two types of regular community meetings to foster collaboration and maintain project health:\n\nThe **Working Group** meetings focus on project direction, technical discussions, and feature development. These bi-weekly sessions bring together contributors, users, and maintainers to review designs, plan releases, and address architectural decisions that shape Karpenter's future.\n\nThe **Issue Triage** meetings, held weekly, are dedicated to maintaining project health through focused issue management across our repositories. These sessions ensure proper prioritization, assignment coordination, and timely response to community contributions.\n\nMeeting times alternate to accommodate our global community. All interested participants are welcome to join, contribute, and learn more about Karpenter.\n\n### Working Group Meetings\n\nThe Karpenter Working Group meetings serve as a collaborative forum for project development, technical discussions, and community engagement. These sessions bring together contributors, users, and maintainers to shape the project's direction and ensure its continued success. Through these meetings, we align on architectural decisions, review critical features, and address community needs.\n\nKey focus areas include:\n- Review and discussion of design proposals and technical implementations\n- Planning of upcoming releases and feature roadmaps\n- Coordination between contributors and cross-team collaboration\n- Technical deep-dives on specific components and challenges\n- Discussion of user feedback and community requirements\n\nThe working group provides a platform for both synchronous decision-making and asynchronous follow-ups, ensuring the project maintains its technical excellence while growing its community impact.\n\nWorking group meetings will be held every other Thursday, alternating between a 3:00 PM PST (Americas-friendly) and 9:00 AM PST (Europe-friendly) start time.\nPlease refer to our [calendar](https://calendar.google.com/calendar/u/0?cid=N3FmZGVvZjVoZWJkZjZpMnJrMmplZzVqYmtAZ3JvdXAuY2FsZW5kYXIuZ29vZ2xlLmNvbQ) for an up-to-date schedule.\n\n### Issue Triage Meetings\n\nKarpenter is expanding our community meetings to include dedicated Issue Triage sessions alongside our regular Working Group meetings. This addition aims to improve issue management across both kubernetes-sigs/karpenter and karpenter-provider-aws repositories.\n\nThese weekly meetings rotate between repositories and time zones to accommodate our global community. These dedicated triage sessions focus on:\n- Issue prioritization\n- Assignment coordination\n- Discussion of complex issues\n- Maintaining repository health\n\nAn issue triage meeting for each repository will be held monthly, alternating between a 3:00 PM PST (Americas-friendly) and 9:00 AM PST (Europe-friendly) start time.\nPlease refer to our [calendar](https://calendar.google.com/calendar/u/0?cid=N3FmZGVvZjVoZWJkZjZpMnJrMmplZzVqYmtAZ3JvdXAuY2FsZW5kYXIuZ29vZ2xlLmNvbQ) for an up-to-date schedule.\n\n### Getting Involved\nAll community members are welcome to join these meetings. Meeting links and calendar invites are shared through our usual communication channels.\n\n- All invites are managed through our [Calendar](https://calendar.google.com/calendar/u/0?cid=N3FmZGVvZjVoZWJkZjZpMnJrMmplZzVqYmtAZ3JvdXAuY2FsZW5kYXIuZ29vZ2xlLmNvbQ).\n- 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.\n\n{{% alert title=\"Meeting Access\" %}}\nJoin our meetings using the following credentials:\n\n🔗 **Zoom**: [https://zoom.us/j/95618088729](https://zoom.us/j/95618088729)\n🆔 **Meeting ID**: 956 1808 8729\n🔑 **Passcode**: 77777\n\nNeed help? Contact the maintainers on Slack.\n{{% /alert %}}\n\nAdd future questions or read past discussions in our [Working Group Log](https://docs.google.com/document/d/18BT0AIMugpNpiSPJNlcAL2rv69yAE6Z06gUVj7v_clg).\n"
  },
  {
    "path": "website/content/en/v1.9/contributing/design-guide.md",
    "content": "---\ntitle: \"Design Guide\"\nlinkTitle: \"Design Guide\"\nweight: 20\ndescription: >\n  Read this before making large changes to Karpenter\n---\n\nTechnical 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.\n\nDesigns don’t have to be long or formal, and should match the scope of the problem they’re trying to solve.\n\n* Are there multiple potential solutions?\n* Will users need to be aware of the changes?\n* Would it be painful to discard a rejected implementation?\n* When in doubt, write a 1 pager.\n\n## Tell a Story\n\nA 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.\n\nYour story should include,\n\n* [Context] Include some technical background that helps readers think about your idea in context\n* [Problem] Clearly identify the problem to be solved and some guiding principles to help think about the solutions\n* [Solutions] Talk through different potential solutions and their tradeoffs. Include diagrams to clarify concepts\n* [Recommendation] Make a recommendation, but don’t be overly invested in it\n\nThe 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.\n\n## Gather Broad Feedback\n\nThe 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).\n\nThe 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.\n\nIt 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.\n\n## Simple Solutions to Complex Problems\n\nThe 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.\n\n## Common Gotchas\n\n### Does your change introduce new APIs?\n\nAPIs 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.\n\nThink 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.\n\nBuild minimal and maintainable APIs by:\n\n* Push back on requirements that introduces concepts for all users to solve problems for a few.\n* Identify an opinionated default that solves the majority of use cases.\n* Delay introducing a parameter into your API surface until users demand it; you can always add it later.\n* 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.\n* Take advantage of opportunities to refine APIs while the impact of backwards incompatibility is small\n\n### Does your change behave differently with different cloud providers?\n\nKubernetes 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.\n\nAchieving 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.\n\n### Does your change expose details users may rely on?\n\nKubernetes 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?\n\nBe 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.\n\n### Does your change have a risk of breaking an undocumented invariant?\n\nSystems 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.\n\n* Identify the fundamental reason the existing mechanism is insufficient and be able to explain it in plain terms.\n* Separate the new mechanism from the new feature that relies on it.\n* Clean up after yourself and avoid getting stuck halfway between old and new mechanisms.\n\n### Does your change impact performance?\n\nUsers 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.\n\n* Beware code that scales linearly with pods or nodes. Milliseconds in testing turn into seconds at scale.\n* Cloud provider read APIs can have surprisingly high latency and low limits, use caching to minimize calls.\n* Increases to memory and CPU usage increase capex cost for operators. Profile and optimize your implementations.\n"
  },
  {
    "path": "website/content/en/v1.9/contributing/development-guide.md",
    "content": "---\ntitle: \"Development Guide\"\nlinkTitle: \"Development Guide\"\nweight: 80\ndescription: >\n  Set up a Karpenter development environment\n---\n\n## Dependencies\n\nThe following tools are required for contributing to the Karpenter project.\n\n| Package                                                            | Version  | Install                                        |\n| ------------------------------------------------------------------ | -------- | ---------------------------------------------- |\n| [go](https://golang.org/dl/)                                       | v1.19+   | [Instructions](https://golang.org/doc/install) |\n| [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) |          | `brew install kubectl`                         |\n| [helm](https://helm.sh/docs/intro/install/)                        |          | `brew install helm`                            |\n| Other tools                                                        |          | `make toolchain`                               |\n\n## Developing\n\n### Setup / Teardown\n\nBased 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/).\n\n#### Locally\n\nOnce 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`\n\n```bash\nmake run\n```\n\n#### Inside a Kubernetes Cluster\n\nOnce you have your environment set up, to install Karpenter in the Kubernetes cluster specified in your `~/.kube/config`  run the following commands.\n\n```bash\nmake apply # Install Karpenter\nmake delete # Uninstall Karpenter\n```\n\n### Developer Loop\n\n* Make sure dependencies are installed\n    * Run `make codegen` to make sure yaml manifests are generated (requires a working set of AWS credentials, see [Specifying Credentials](https://docs.aws.amazon.com/sdk-for-go/v1/developer-guide/configuring-sdk.html#specifying-credentials))\n    * Run `make toolchain` to install cli tools for building and testing the project\n* You will need a personal development image repository (e.g. ECR)\n    * Make sure you have valid credentials to your development repository.\n    * `$KO_DOCKER_REPO` must point to your development repository\n    * Your cluster must have permissions to read from the repository\n\n### Build and Deploy\n\n*Note: these commands do not rely on each other and may be executed independently*\n\n```bash\nmake apply # quickly deploy changes to your cluster\nmake presubmit # run codegen, lint, and tests\n```\n\nIf you are only interested in building the Karpenter images and not deploying the updated release to your cluster immediately with Helm, you can run the following:\n\n```bash\nmake image # build and push the karpenter images\n```\n\n*Note: that this will produce a build with the version of https://github.com/kubernetes-sigs/karpenter in your local filesystem.\n\nYou can test out changes made in https://github.com/kubernetes-sigs/karpenter by replacing the dependency of https://github.com/aws/karpenter-provider-aws/.\nFor local changes, replace `$PATH_TO_KUBERNETES_SIGS_KARPENTER` with the relative or absolute path and run:\n\n```bash\ngo mod edit -replace sigs.k8s.io/karpenter=$PATH_TO_KUBERNETES_SIGS_KARPENTER\n```\n\nThen you can build your image using the previous steps.\n\n### Publishing Images Only\n\nIf you only need to build and publish an image to a container registry, run the following:\n\n```bash\nmake image # build and push the karpenter images\n```\nYou can test out changes made in https://github.com/kubernetes-sigs/karpenter by replacing the dependency of https://github.com/aws/karpenter-provider-aws/.\nFor local changes, replace `$PATH_TO_KUBERNETES_SIGS_KARPENTER` with the relative or absolute path and run:\n\n```bash\ngo mod edit -replace sigs.k8s.io/karpenter=$PATH_TO_KUBERNETES_SIGS_KARPENTER\n```\n\nThen you can build your image using the previous steps.\n\n*Note: you need to commit the go.mod changes before running `make image` for the changes to be picked up.\n\n### Testing\n\n```bash\nmake test       # E2E correctness tests\n```\n\n### Change Log Level\n\nBy default, `make apply` will set the log level to debug. You can change the log level by setting the log level in your Helm values.\n\n```bash\n--set logLevel=debug\n```\n\n### Debugging Metrics\n\nOSX:\n\n```bash\nopen http://localhost:8080/metrics && kubectl port-forward service/karpenter -n kube-system 8080\n```\n\nLinux:\n\n```bash\ngio open http://localhost:8080/metrics && kubectl port-forward service/karpenter -n karpenter 8080\n```\n\n### Tailing Logs\n\nWhile 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):\n\n```bash\nstern -n karpenter -l app.kubernetes.io/name=karpenter\n```\n\n## Environment specific setup\n\n### AWS\n\nFor local development on Karpenter you will need a Docker repo which can manage your images for Karpenter components.\nYou can use the following command to provision an ECR repository. We recommend using a single \"dev\" repository for \ndevelopment across multiple projects, and to use specific image hashes instead of image tags. \n\n```bash\naws ecr create-repository \\\n    --repository-name dev \\\n    --image-scanning-configuration scanOnPush=true \\\n    --region \"${AWS_DEFAULT_REGION}\"\n```\n\nOnce you have your ECR repository provisioned, configure your Docker daemon to authenticate with your newly created repository.\n\n```bash\nexport KO_DOCKER_REPO=\"${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_DEFAULT_REGION}.amazonaws.com/dev\"\naws ecr get-login-password --region \"${AWS_DEFAULT_REGION}\" | docker login --username AWS --password-stdin \"${KO_DOCKER_REPO}\"\n```\n\n## Profiling\nKarpenter exposes a pprof endpoint on its metrics port when [profiling]({{< relref \"../reference/settings\" >}}) is enabled.\n\nLearn about profiling with pprof: https://jvns.ca/blog/2017/09/24/profiling-go-with-pprof/\n\n### Prerequisites\n```\nbrew install graphviz\ngo install github.com/google/pprof@latest\n```\n\n### Get a profile\n```\n# Connect to the metrics endpoint\nkubectl port-forward service/karpenter -n karpenter 8080\nopen http://localhost:8080/debug/pprof/\n# Visualize the memory\ngo tool pprof -http 0.0.0.0:9000 localhost:8080/debug/pprof/heap\n# Visualize CPU\ngo tool pprof -http 0.0.0.0:9000 \"localhost:8080/debug/pprof/profile?seconds=60\"\n```\n"
  },
  {
    "path": "website/content/en/v1.9/contributing/documentation-updates.md",
    "content": "---\ntitle: \"Documentation Updates\"\nlinkTitle: \"Documentation Updates\"\nweight: 50\ndescription: >\n  Information helpful for contributing simple documentation updates.\n---\n\n- Documentation for https://karpenter.sh/docs/ is built under website/content/en/preview/.\n- Documentation updates should be made to the \"preview\" directory. Your changes will be promoted to website/content/en/docs/ by an automated process after the change has been merged.\n- Previews for your changes are built and available a few minutes after you push. Look for the \"Amplify Preview URL\" link in a comment in your PR.\n- If your update applies to more than just the current version of Karpenter, please backport your changes into all of the versions under website/content/en/ *besides* the /docs/ folder"
  },
  {
    "path": "website/content/en/v1.9/faq.md",
    "content": "---\ntitle: \"FAQs\"\nlinkTitle: \"FAQs\"\nweight: 60\ndescription: >\n  Review Karpenter Frequently Asked Questions\n---\n## General\n\n### Is Karpenter safe for production use?\nKarpenter v1 is the first stable Karpenter API. Any future incompatible API changes will require a v2 version.\n\n### How does a NodePool decide to manage a particular node?\nSee [Configuring NodePools]({{< ref \"./concepts/#configuring-nodepools\" >}}) for information on how Karpenter configures and manages nodes.\n\n### What cloud providers are supported?\nAWS is the first cloud provider supported by Karpenter, although it is designed to be used with other cloud providers as well.\n\n### Can I write my own cloud provider for Karpenter?\nYes, but there is no documentation yet for it. Start with Karpenter's GitHub [cloudprovider](https://github.com/aws/karpenter-provider-aws/tree/v1.9.0/pkg/cloudprovider) documentation to see how the AWS provider is built, but there are other sections of the code that will require changes too.\n\n### What operating system nodes does Karpenter deploy?\nKarpenter uses the OS defined by the [AMI Family in your EC2NodeClass]({{< ref \"./concepts/nodeclasses#specamifamily\" >}}).\n\n### Can I provide my own custom operating system images?\nKarpenter has multiple mechanisms for configuring the [operating system]({{< ref \"./concepts/nodeclasses/#specamiselectorterms\" >}}) for your nodes.\n\n### Can Karpenter deal with workloads for mixed architecture cluster (arm vs. amd)?\nKarpenter is flexible to multi-architecture configurations using [well known labels]({{< ref \"./concepts/scheduling/#supported-labels\">}}).\n\n### What RBAC access is required?\nAll the required RBAC rules can be found in the Helm chart template. See [clusterrole-core.yaml](https://github.com/aws/karpenter/blob/v1.9.0/charts/karpenter/templates/clusterrole-core.yaml), [clusterrole.yaml](https://github.com/aws/karpenter/blob/v1.9.0/charts/karpenter/templates/clusterrole.yaml), [rolebinding.yaml](https://github.com/aws/karpenter/blob/v1.9.0/charts/karpenter/templates/rolebinding.yaml), and [role.yaml](https://github.com/aws/karpenter/blob/v1.9.0/charts/karpenter/templates/role.yaml) files for details.\n\n### Can I run Karpenter outside of a Kubernetes cluster?\nYes, as long as the controller has network and IAM/RBAC access to the Kubernetes API and your provider API.\n\n### What do I do if I encounter a security issue with Karpenter?\nRefer to [Reporting Security Issues](https://github.com/aws/karpenter/security/policy) for information on how to report Karpenter security issues. Do not create a public GitHub issue.\n\n## Compatibility\n\n### Which versions of Kubernetes does Karpenter support?\nSee the [Compatibility Matrix in the Upgrade Section]({{< ref \"./upgrading/compatibility#compatibility-matrix\" >}}) to view the supported Kubernetes versions per Karpenter released version.\n\n### What Kubernetes distributions are supported?\nKarpenter documents integration with a fresh or existing installation of the latest AWS Elastic Kubernetes Service (EKS). Other Kubernetes distributions (KOPs, etc.) can be used, but setting up cloud provider permissions for those distributions has not been documented.\n\n### How does Karpenter interact with AWS node group features?\nNodePools 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 NodePools, 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 NodePool-managed in the long term.\n\n\n### How does Karpenter interact with Kubernetes features?\n* Kubernetes Cluster Autoscaler: Karpenter can work alongside Cluster Autoscaler. See [Kubernetes Cluster Autoscaler]({{< ref \"./concepts/#kubernetes-cluster-autoscaler\" >}}) for details.\n* 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.\n\n## Provisioning\n\n### What features does the Karpenter NodePool support?\nSee the [NodePool API docs]({{< ref \"./concepts/nodepools\" >}}) for NodePool examples and descriptions of features.\n\n### Can I create multiple (team-based) NodePools on a cluster?\nYes, NodePools can identify multiple teams based on labels. See the [NodePool API docs]({{< ref \"./concepts/nodepools\" >}}) for details.\n\n### If multiple NodePools are defined, which will my pod use?\n\nPending pods will be handled by any NodePools that matches the requirements of the pod. There is no ordering guarantee if multiple NodePools match pod requirements. We recommend that NodePools are set-up to be mutually exclusive. To select a specific NodePool, use the node selector `karpenter.sh/nodepool: my-nodepool`.\n\n### How can I configure Karpenter to only provision pods for a particular namespace?\n\nThere 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` using the same mechanisms 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.\n\nWe 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/).\n\n### Can I add SSH keys to a NodePool?\n\nKarpenter does not offer a way to add SSH keys via NodePools or secrets to the nodes it manages.\nHowever, 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.\n\nThough not recommended, if you need to access Karpenter-managed nodes without AWS credentials, you can add SSH keys using EC2NodeClass User Data. See the [User Data section in the EC2NodeClass documentation]({{< ref \"./concepts/nodeclasses/#specuserdata\" >}}) for details.\n\n### Can I set limits of CPU and memory for a NodePool?\nYes. View the [NodePool API docs]({{< ref \"./concepts/nodepools#speclimits\" >}}) for NodePool examples and descriptions of how to configure limits.\n\n### Can I mix spot and on-demand EC2 run types?\nYes, see the [NodePool API docs]({{< ref \"./concepts/nodepools#examples\" >}}) for an example.\n\n### Can I restrict EC2 instance types?\n\n* Attribute-based requests are currently not possible.\n* You can select instances with special hardware, such as gpu.\n\n### Can I use Bare Metal instance types?\n\nYes, Karpenter supports provisioning metal instance types when a NodePool'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.\n\n### How does Karpenter dynamically select instance types?\n\nKarpenter 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. Karpenter [recommends the use of C, M, and R >= Gen 3 instance types]({{< ref \"./concepts/nodepools#spectemplatespecrequirements\" >}}) for most generic workloads, but it can be constrained in the NodePool spec with the [instance-type](https://kubernetes.io/docs/reference/labels-annotations-taints/#nodekubernetesioinstance-type) well-known label in the requirements section.\n\nAfter 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.\n\n\nThe EC2 fleet API attempts to provision the instance type based on the [Price Capacity Optimized allocation strategy](https://aws.amazon.com/blogs/compute/introducing-price-capacity-optimized-allocation-strategy-for-ec2-spot-instances/). For the on-demand capacity type, this is effectively equivalent to the `lowest-price` allocation strategy. For the spot capacity type, Fleet will determine an instance type that has both the lowest price combined with the lowest chance of being interrupted. Note that this may not give you the instance type with the strictly lowest price for spot.\n\n### How does Karpenter calculate the resource usage of Daemonsets when simulating scheduling?\n\nKarpenter currently calculates the applicable daemonsets at the NodePool level with label selectors/taints, etc. It does not look to see if there are requirements on the daemonsets that would exclude it from running on particular instances that the NodePool could or couldn't launch.\nThe recommendation for now is to use multiple NodePools with taints/tolerations or label selectors to limit daemonsets to only nodes launched from specific NodePoools.\n\n### What if there is no Spot capacity?\n\nThe best defense against running out of Spot capacity is to allow Karpenter to provision as many distinct 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.\n\nAllowing 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 instance type diversity will also increase the chances that you’ll be able to continue to launch On-Demand capacity for your workloads.\n\nKarpenter has a concept of an “offering” for each instance type, which is a combination of zone and capacity type. Whenever the Fleet API returns an insufficient capacity error for Spot instances, those particular offerings are temporarily removed from consideration (across the entire NodePool) so that Karpenter can make forward progress with different options.\n\n### Does Karpenter support IPv6?\n\nYes! 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 NodePool to only allow Nitro instance types:\n\n```\napiVersion: karpenter.sh/v1\nkind: NodePool\n...\nspec:\n  template:\n    spec:\n      requirements:\n        - key: karpenter.k8s.aws/instance-hypervisor\n          operator: In\n          values:\n            - nitro\n```\n\nFor more documentation on enabling IPv6 with the Amazon VPC CNI, see the [docs](https://docs.aws.amazon.com/eks/latest/userguide/cni-ipv6.html).\n\n{{% alert title=\"Windows Support Notice\" color=\"warning\" %}}\nWindows nodes do not support IPv6.\n{{% /alert %}}\n\n### Why do I see extra nodes get launched to schedule pending pods that remain empty and are later removed?\n\nYou might have a daemonset, userData configuration, or some other workload that applies a taint after a node is provisioned. After the taint is applied, Karpenter will detect that the pod cannot be scheduled to this new node due to the added taint. As a result, Karpenter will provision yet another node. Typically, the original node has the taint removed and the pod schedules to it, leaving the extra new node unused and reaped by emptiness/consolidation. If the taint is not removed quickly enough, Karpenter may remove the original node before the pod can be scheduled via emptiness consolidation. This could result in an infinite loop of nodes being provisioned and consolidated without the pending pod ever scheduling.\n\nThe solution is to configure [startupTaints]({{<ref \"./concepts/nodepools/#cilium-startup-taint\" >}}) to make Karpenter aware of any temporary taints that are needed to ensure that pods do not schedule on nodes that are not yet ready to receive them.\n\nHere's an example for Cilium's startup taint.\n```\napiVersion: karpenter.sh/v1\nkind: NodePool\n...\nspec:\n  template:\n    spec:\n      startupTaints:\n        - key: node.cilium.io/agent-not-ready\n          effect: NoSchedule\n```\n\n## Scheduling\n\n### When using preferred scheduling constraints, Karpenter launches the correct number of nodes at first.  Why do they then sometimes get consolidated immediately?\n\n`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.\n\nAs 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 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.\n\n### When deploying an additional DaemonSet to my cluster, why does Karpenter not scale-up my nodes to support the extra DaemonSet?\n\nKarpenter will not scale-up more capacity for an additional DaemonSet on its own. This is due to the fact that the only pod that would schedule to that new node would be the DaemonSet pod, which is consuming additional capacity with no benefit. Therefore, Karpenter only considers DaemonSets when doing overhead calculations for scale-ups to workload pods.\n\nTo avoid new DaemonSets failing to schedule to existing Nodes, you should [set a high priority on your DaemonSet pods with a `preemptionPolicy: PreemptLowerPriority`](https://kubernetes.io/docs/concepts/scheduling-eviction/pod-priority-preemption/#example-priorityclass) so that DaemonSet pods will be guaranteed to schedule on all existing and new Nodes. For existing Nodes, this will cause some pods with lower priority to get [preempted](https://kubernetes.io/docs/concepts/scheduling-eviction/pod-priority-preemption/#preemption), replaced by the DaemonSet and re-scheduled onto new capacity that Karpenter will launch in response to the new pending pods.\n\nThe Karpenter maintainer team is also discussing a consolidation mechanism [in this Github issue](https://github.com/aws/karpenter/issues/3256) that would allow existing capacity to be rolled when a new DaemonSet is deployed without having to set [priority or preemption](https://kubernetes.io/docs/concepts/scheduling-eviction/pod-priority-preemption/) on the pods.\n\n\n### Why aren’t my Topology Spread Constraints spreading pods across zones?\n\nKarpenter will provision nodes according to `topologySpreadConstraints`. However, the Kubernetes scheduler may schedule pods to nodes that do not fulfill zonal spread constraints if the `minDomains` field is not set. If Karpenter launches nodes that can handle more than the required number of pods, and the newly launched nodes initialize at different times, then the Kubernetes scheduler may place more than the desired number of pods on the first node that is Ready.\n\nThe preferred solution is to use the [`minDomains` field in `topologySpreadConstraints`](https://kubernetes.io/docs/concepts/scheduling-eviction/topology-spread-constraints/#topologyspreadconstraints-field), which is enabled by default starting in Kubernetes 1.27.\n\nBefore `minDomains` was available, another workaround has been to launch a lower [Priority](https://kubernetes.io/docs/concepts/scheduling-eviction/pod-priority-preemption/) pause container to each zone before launching the pods that you want to spread across the zones. The lower Priority on these pause pods would mean that they would be preempted when your desired pods are scheduled.\n\n## Workloads\n\n### How can someone deploying pods take advantage of Karpenter?\n\nSee [Application developer]({{< ref \"./concepts/#application-developer\" >}}) for descriptions of how Karpenter matches nodes with pod requests.\n\n### Can I use Karpenter with EBS disks per availability zone?\nYes.  See [Persistent Volume Topology]({{< ref \"./concepts/scheduling#persistent-volume-topology\" >}}) for details.\n\n### Can I set `--max-pods` on my nodes?\nYes, see the [KubeletConfiguration Section in the NodePool docs]({{<ref \"./concepts/nodepools#spectemplatespeckubelet\" >}}) to learn more.\n\n### Why do the Windows2019, Windows2022 and Windows2025 AMI families only support Windows Server Core?\nThe difference between the Core and Full variants is that Core is a minimal OS with less components and no graphic user interface (GUI) or desktop experience.\n`Windows2019`, `Windows2022` and `Windows2025` AMI families use the Windows Server Core option for simplicity, but if required, you can specify a custom AMI to run Windows Server Full.\n\nYou can specify the [Amazon EKS optimized AMI](https://docs.aws.amazon.com/eks/latest/userguide/eks-optimized-windows-ami.html) with Windows Server 2022 Full for Kubernetes 1.34 by configuring an `amiSelector` that references the AMI name.\n```yaml\namiSelectorTerms:\n    - name: Windows_Server-2022-English-Full-EKS_Optimized-1.34*\n```\n\n### Can I use Karpenter to scale my workload's pods?\nKarpenter is a node autoscaler which will create new nodes in response to unschedulable pods. Scaling the pods themselves is outside of its scope.\nThis is the realm of pod autoscalers such as the [Vertical Pod Autoscaler](https://github.com/kubernetes/autoscaler/tree/master/vertical-pod-autoscaler) (for scaling an individual pod's resources) or the [Horizontal Pod Autoscaler](https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/) (for scaling replicas).\nWe also recommend taking a look at [Keda](https://keda.sh/) if you're looking for more advanced autoscaling capabilities for pods.\n\n## Deprovisioning\n### How does Karpenter deprovision nodes?\nSee [Deprovisioning nodes]({{< ref \"./concepts/disruption\" >}}) for information on how Karpenter deprovisions nodes.\n\n## Upgrading Karpenter\n\n### How do I upgrade Karpenter?\nKarpenter is a controller that runs in your cluster, but it is not tied to a specific Kubernetes version, as the Cluster Autoscaler is.\nUse your existing upgrade mechanisms to upgrade your core add-ons in Kubernetes and keep Karpenter up to date on bug fixes and new features.\n\nKarpenter requires proper permissions in the `KarpenterNode IAM Role` and the `KarpenterController IAM Role`.\nTo 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-karpenter/cloudformation.yaml`.\nNext, locate `KarpenterController IAM Role` ARN (i.e., ARN of the resource created in [Create the KarpenterController IAM Role](../getting-started/getting-started-with-karpenter/#create-the-karpentercontroller-iam-role)) and pass them to the Helm upgrade command.\n{{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step08-apply-helm-chart.sh\" language=\"bash\"%}}\n\nFor information on upgrading Karpenter, see the [Upgrade Guide]({{< ref \"./upgrading/upgrade-guide/\" >}}).\n\n## Upgrading Kubernetes Cluster\n\n### How do I upgrade an EKS Cluster with Karpenter?\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nKarpenter recommends that you always validate AMIs in your lower environments before using them in production environments. Read [Managing AMIs]({{<ref \"./tasks/managing-amis\" >}}) to understand best practices about upgrading your AMIs.\n\nIf using a custom AMI, you will need to trigger the rollout of new worker node images through the publication of a new AMI with tags matching the [`amiSelector`]({{<ref \"./concepts/nodeclasses#specamiselectorterms\" >}}), or a change to the [`amiSelector`]({{<ref \"./concepts/nodeclasses#specamiselectorterms\" >}}) field.\n{{% /alert %}}\n\nKarpenter's default behavior will upgrade your nodes when you've upgraded your Amazon EKS Cluster. Karpenter will [drift]({{<ref \"./concepts/disruption#drift\" >}}) nodes to stay in-sync with the EKS control plane version. Drift is enabled by default starting in `v0.33`. This means that as soon as your cluster is upgraded, Karpenter will auto-discover the new AMIs for that version.\n\nStart by [upgrading the EKS Cluster control plane](https://docs.aws.amazon.com/eks/latest/userguide/update-cluster.html). After the EKS Cluster upgrade completes, Karpenter will Drift and disrupt the Karpenter-provisioned nodes using EKS Optimized AMIs for the previous cluster version by first spinning up replacement nodes. Karpenter respects [Pod Disruption Budgets](https://kubernetes.io/docs/concepts/workloads/pods/disruptions/) (PDB), and automatically [replaces, cordons, and drains those nodes]({{<ref \"./concepts/disruption#control-flow\" >}}). To best support pods moving to new nodes, follow Kubernetes best practices by setting appropriate pod [Resource Quotas](https://kubernetes.io/docs/concepts/policy/resource-quotas/) and using PDBs.\n\n## Interruption Handling\n\n### Should I use Karpenter interruption handling alongside Node Termination Handler?\nNo. We recommend against using Node Termination Handler alongside Karpenter due to conflicts that could occur from the two components handling the same events.\n\n### Why should I migrate from Node Termination Handler?\nKarpenter's native interruption handling offers two main benefits over the standalone Node Termination Handler component:\n1. You don't have to manage and maintain a separate component to exclusively handle interruption events.\n2. Karpenter's native interruption handling coordinates with other deprovisioning so that consolidation, expiration, etc. can be aware of interruption events and vice-versa.\n\n### Why am I receiving QueueNotFound errors when I set `--interruption-queue`?\nKarpenter requires a queue to exist that receives event messages from EC2 and health services in order to handle interruption messages properly for nodes.\n\nDetails on the types of events that Karpenter handles can be found in the [Interruption Handling Docs]({{< ref \"./concepts/disruption/#interruption\" >}}).\n\nDetails on provisioning the SQS queue and EventBridge rules can be found in the [Getting Started Guide]({{< ref \"./getting-started/getting-started-with-karpenter/#create-the-karpenter-infrastructure-and-iam-roles\" >}}).\n\n## Consolidation\n\n### Why do I sometimes see an extra node get launched when updating a deployment that remains empty and is later removed?\n\nConsolidation 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.\n\n## Logging\n\n### How do I customize or configure the log output?\n\nKarpenter uses [uber-go/zap](https://github.com/uber-go/zap) for logging. You can customize or configure the log messages by editing the [configmap-logging.yaml](https://github.com/aws/karpenter/blob/main/charts/karpenter/templates/configmap-logging.yaml)\n`ConfigMap`'s [data.zap-logger-config](https://github.com/aws/karpenter/blob/main/charts/karpenter/templates/configmap-logging.yaml#L26) field.\nThe available configuration options are specified in the [zap.Config godocs](https://pkg.go.dev/go.uber.org/zap#Config).\n"
  },
  {
    "path": "website/content/en/v1.9/getting-started/_index.md",
    "content": "---\ntitle: \"Getting Started\"\nlinkTitle: \"Getting Started\"\nweight: 10\ndescription: >\n  Choose from different methods to get started with Karpenter\n---\n\n\nTo get started with Karpenter, the [Getting Started with Karpenter]({{< relref \"getting-started-with-karpenter\" >}}) guide provides an end-to-end procedure for creating a cluster (with `eksctl`) and adding Karpenter.\n\nSee the [AKS Node autoprovisioning article](https://learn.microsoft.com/azure/aks/node-autoprovision) on how to use Karpenter on Azure's AKS or go to the [Karpenter provider for Azure open source repository](https://github.com/Azure/karpenter-provider-azure) for self-hosting on Azure and additional information.\n\nSee the [Deploy Karpenter on Alibabacloud's ACK](https://docs.cloudpilot.ai/karpenter/alibabacloud/preview/getting-started/set-up-a-cluster-and-add-karpenter/) to know how to use Karpenter on Alibabacloud's ACK. Or you can go to the [Karpenter-provider-alibabacloud](https://github.com/cloudpilot-ai/karpenter-provider-alibabacloud) for more details.\n\nIf you prefer, the following instructions use Terraform to create a cluster and add Karpenter:\n\n* [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/getting-started/) guide and also add modules and add-ons. This includes a [Karpenter](https://aws-ia.github.io/terraform-aws-eks-blueprints/patterns/karpenter/) add-on that lets you bypass the instructions in this guide for setting up Karpenter.\n\nAlthough not supported, you could also try Karpenter on other Kubernetes distributions running on AWS. For example:\n\n* [kOps](https://kops.sigs.k8s.io/operations/karpenter/): These instructions describe how to create a kOps Kubernetes cluster in AWS that includes Karpenter.\n\nLearn more about Karpenter and how to get started below.\n\n* [Karpenter EKS Best Practices](https://aws.github.io/aws-eks-best-practices/karpenter/) guide\n* [EC2 Spot Workshop for Karpenter](https://ec2spotworkshops.com/karpenter.html)\n* [EKS Karpenter Workshop](https://www.eksworkshop.com/docs/autoscaling/compute/karpenter/)\n* [Advanced EKS Immersion Karpenter Workshop](https://catalog.us-east-1.prod.workshops.aws/workshops/76a5dd80-3249-4101-8726-9be3eeee09b2/en-US/autoscaling/karpenter)\n* [Karpenter Blueprints](https://github.com/aws-samples/karpenter-blueprints)\n* [Tutorial: Run Kubernetes Clusters for Less with Amazon EC2 Spot and Karpenter](https://community.aws/tutorials/run-kubernetes-clusters-for-less-with-amazon-ec2-spot-and-karpenter#step-6-optional-simulate-spot-interruption)\n"
  },
  {
    "path": "website/content/en/v1.9/getting-started/getting-started-with-karpenter/_index.md",
    "content": "\n---\ntitle: \"Getting Started with Karpenter\"\nlinkTitle: \"Getting Started with Karpenter\"\nweight: 10\ndescription: >\n  Set up a cluster and add Karpenter\n---\n\nKarpenter 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.\n\nThis guide shows how to get started with Karpenter by creating a Kubernetes cluster and installing Karpenter.\nTo use Karpenter, you must be running a supported Kubernetes cluster on a supported cloud provider.\n\nThe guide below explains how to utilize the [Karpenter provider for AWS](https://github.com/aws/karpenter-provider-aws) with EKS.\n\nSee the [AKS Node autoprovisioning article](https://learn.microsoft.com/azure/aks/node-autoprovision) on how to use Karpenter on Azure's AKS or go to the [Karpenter provider for Azure open source repository](https://github.com/Azure/karpenter-provider-azure) for self-hosting on Azure and additional information.\n\n## Create a cluster and add Karpenter\n\nThis guide uses `eksctl` to create the cluster.\nIt should take less than 1 hour to complete, and cost less than $0.25.\nFollow the clean-up instructions to reduce any charges.\n\n### 1. Install utilities\n\nKarpenter is installed in clusters with a Helm chart.\n\nKarpenter requires cloud provider permissions to provision nodes, for AWS IAM\nRoles for Service Accounts (IRSA) should be used. IRSA permits Karpenter\n(within the cluster) to make privileged requests to AWS (as the cloud provider)\nvia a ServiceAccount.\n\nInstall these tools before proceeding:\n\n1. [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2-linux.html)\n2. `kubectl` - [the Kubernetes CLI](https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/)\n3. `eksctl` (>= v0.202.0) - [the CLI for AWS EKS](https://eksctl.io/installation)\n4. `helm` - [the package manager for Kubernetes](https://helm.sh/docs/intro/install/)\n\n[Configure the AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html)\nwith a user that has sufficient privileges to create an EKS cluster. Verify that the CLI can\nauthenticate properly by running `aws sts get-caller-identity`.\n\n### 2. Set environment variables\n\nAfter setting up the tools, set the Karpenter and Kubernetes version:\n\n```bash\nexport KARPENTER_NAMESPACE=\"kube-system\"\nexport KARPENTER_VERSION=\"1.9.0\"\nexport K8S_VERSION=\"1.34\"\n```\n\nThen set the following environment variable:\n\n{{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step01-config.sh\" language=\"bash\"%}}\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nIf you open a new shell to run steps in this procedure, you need to set some or all of the environment variables again.\nTo remind yourself of these values, type:\n\n```bash\necho \"${KARPENTER_NAMESPACE}\" \"${KARPENTER_VERSION}\" \"${K8S_VERSION}\" \"${CLUSTER_NAME}\" \"${AWS_DEFAULT_REGION}\" \"${AWS_ACCOUNT_ID}\" \"${TEMPOUT}\" \"${ALIAS_VERSION}\"\n```\n\n{{% /alert %}}\n\n\n### 3. Create a Cluster\n\nCreate a basic cluster with `eksctl`.\nThe following cluster configuration will:\n\n* Use CloudFormation to set up the infrastructure needed by the EKS cluster. See [CloudFormation]({{< relref \"../../reference/cloudformation/\" >}}) for a complete description of what `cloudformation.yaml` does for Karpenter.\n* Create a Kubernetes service account and AWS IAM Role, and associate them using IRSA to let Karpenter launch instances.\n* Add the Karpenter node role to the aws-auth configmap to allow nodes to connect.\n* 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.\n* Set KARPENTER_IAM_ROLE_ARN variables.\n* Create a role to allow spot instances.\n* Run Helm to install Karpenter\n\n{{< tabpane text=true right=false >}}\n  {{% tab header=\"**Create cluster command**:\" disabled=true /%}}\n  {{% tab header=\"Managed NodeGroups\" %}}\n  {{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step02-create-cluster.sh\" language=\"bash\"%}}\n  {{% /tab %}}\n  {{% tab header=\"Fargate\" %}}\n  {{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step02-create-cluster-fargate.sh\" language=\"bash\"%}}\n  {{% /tab %}}\n{{< /tabpane >}}\n\nUnless your AWS account has already onboarded to EC2 Spot, you will need to create the service linked role to\navoid the [`ServiceLinkedRoleCreationNotPermitted` error]({{<ref \"../../troubleshooting/#missing-service-linked-role\" >}}).\n\n{{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step06-add-spot-role.sh\" language=\"bash\"%}}\n\n{{% alert title=\"Windows Support Notice\" color=\"warning\" %}}\nIn order to run Windows workloads, Windows support should be enabled in your EKS Cluster.\nSee [Enabling Windows support](https://docs.aws.amazon.com/eks/latest/userguide/windows-support.html#enable-windows-support) to learn more.\n{{% /alert %}}\n\n### 4. Install Karpenter\n\n{{< tabpane text=true right=false >}}\n  {{% tab header=\"**Karpenter installation command**:\" disabled=true /%}}\n  {{% tab header=\"Managed NodeGroups\" %}}\n  {{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step08-apply-helm-chart.sh\" language=\"bash\"%}}\n  {{% /tab %}}\n  {{% tab header=\"Fargate\" %}}\n  {{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step08-apply-helm-chart-fargate.sh\" language=\"bash\"%}}\n  {{% /tab %}}\n{{< /tabpane >}}\n\nAs the OCI Helm chart is signed by [Cosign](https://github.com/sigstore/cosign) as part of the release process you can verify the chart before installing it by running the following command.\n\n```bash\ncosign verify public.ecr.aws/karpenter/karpenter:1.9.0 \\\n  --certificate-oidc-issuer=https://token.actions.githubusercontent.com \\\n  --certificate-identity-regexp='https://github\\.com/aws/karpenter-provider-aws/\\.github/workflows/release\\.yaml@.+' \\\n  --certificate-github-workflow-repository=aws/karpenter-provider-aws \\\n  --certificate-github-workflow-name=Release \\\n  --certificate-github-workflow-ref=refs/tags/v1.9.0 \\\n  --annotations version=1.9.0\n```\n\n{{% alert title=\"DNS Policy Notice\" color=\"warning\" %}}\nKarpenter uses the `ClusterFirst` pod DNS policy by default. This is the Kubernetes cluster default and this ensures that Karpenter can reach-out to internal Kubernetes services during its lifetime. There may be cases where you do not have the DNS service that you are using on your cluster up-and-running before Karpenter starts up. The most common case of this is you want Karpenter to manage the node capacity where your DNS service pods are running.\n\nIf you need Karpenter to manage the DNS service pods' capacity, this means that DNS won't be running when Karpenter starts-up. In this case, you will need to set the pod DNS policy to `Default` with `--set dnsPolicy=Default`. This will tell Karpenter to use the host's DNS resolution instead of the internal DNS resolution, ensuring that you don't have a dependency on the DNS service pods to run. More details on this issue can be found in the following Github issues: [#2186](https://github.com/aws/karpenter-provider-aws/issues/2186) and [#4947](https://github.com/aws/karpenter-provider-aws/issues/4947).\n{{% /alert %}}\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter creates a mapping between CloudProvider machines and CustomResources in the cluster for capacity tracking. To ensure this mapping is consistent, Karpenter utilizes the following tag keys:\n\n* `karpenter.sh/managed-by`\n* `karpenter.sh/nodepool`\n* `kubernetes.io/cluster/${CLUSTER_NAME}`\n\nBecause Karpenter takes this dependency, any user that has the ability to Create/Delete these tags on CloudProvider machines will have the ability to orchestrate Karpenter to Create/Delete CloudProvider machines as a side effect. We recommend that you [enforce tag-based IAM policies](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html) on these tags against any EC2 instance resource (`i-*`) for any users that might have [CreateTags](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTags.html)/[DeleteTags](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DeleteTags.html) permissions but should not have [RunInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html)/[TerminateInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_TerminateInstances.html) permissions.\n{{% /alert %}}\n\n### 5. Create NodePool\n\nA single Karpenter NodePool 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.\n\nCreate a default NodePool using the command below. This NodePool uses `securityGroupSelectorTerms` and `subnetSelectorTerms` to discover resources used to launch nodes. We applied the tag `karpenter.sh/discovery` in the `eksctl` command above. Depending on how these resources are shared between clusters, you may need to use different tagging schemes.\n\nThe `consolidationPolicy` set to `WhenEmptyOrUnderutilized` in the `disruption` block configures Karpenter to reduce cluster cost by removing and replacing nodes. As a result, consolidation will terminate any empty nodes on the cluster. This behavior can be disabled by setting `consolidateAfter` to `Never`, telling Karpenter that it should never consolidate nodes. Review the [NodePool API docs]({{<ref \"../../concepts/nodepools\" >}}) for more information.\n\nNote: This NodePool will create capacity as long as the sum of all created capacity is less than the specified limit.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step12-add-nodepool.sh\" language=\"bash\"%}}\n\nKarpenter is now active and ready to begin provisioning nodes.\n\n### 6. Scale up deployment\n\nThis deployment uses the [pause image](https://www.ianlewis.org/en/almighty-pause-container) and starts with zero replicas.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step13-automatic-node-provisioning.sh\" language=\"bash\"%}}\n\n### 7. Scale down deployment\n\nNow, delete the deployment. After a short amount of time, Karpenter should terminate the empty nodes due to consolidation.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step14-deprovisioning.sh\" language=\"bash\"%}}\n\n### 8. Delete Karpenter nodes manually\n\nIf you delete a node with kubectl, Karpenter will gracefully cordon, drain,\nand shutdown the corresponding instance. Under the hood, Karpenter adds a\nfinalizer to the node object, which blocks deletion until all pods are\ndrained and the instance is terminated. Keep in mind, this only works for\nnodes provisioned by Karpenter.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step16-delete-node.sh\" language=\"bash\"%}}\n\n### 9. Delete the cluster\nTo avoid additional charges, remove the demo infrastructure from your AWS account.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step17-cleanup.sh\" language=\"bash\"%}}\n\n## Monitoring with Grafana (optional)\n\nThis section describes optional ways to configure Karpenter to enhance its capabilities.\nIn 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.\nThis deployment includes two Karpenter dashboards that are automatically onboarded to Grafana. They provide a variety of visualization examples on Karpenter metrics.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step09-add-prometheus-grafana.sh\" language=\"bash\"%}}\n\nThe Grafana instance may be accessed using port forwarding.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step10-add-grafana-port-forward.sh\" language=\"bash\"%}}\n\nThe new stack has only one user, `admin`, and the password is stored in a secret. The following command will retrieve the password.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step11-grafana-get-password.sh\" language=\"bash\"%}}\n\n## Advanced Installation\n\nThe section below covers advanced installation techniques for installing Karpenter. This includes things such as running Karpenter on a cluster without public internet access or ensuring that Karpenter avoids getting throttled by other components in your cluster.\n\n### Private Clusters\n\nYou can optionally install Karpenter on a [private cluster](https://docs.aws.amazon.com/eks/latest/userguide/private-clusters.html#private-cluster-requirements) using the `eksctl` installation by setting `privateCluster.enabled` to true in your [ClusterConfig](https://eksctl.io/usage/eks-private-cluster/#eks-fully-private-cluster) and by setting `--set settings.isolatedVPC=true` when installing the `karpenter` Helm chart.\n\n```bash\nprivateCluster:\n  enabled: true\n```\n\nPrivate clusters have no outbound access to the internet. This means that in order for Karpenter to reach out to the services that it needs to access, you need to enable specific VPC private endpoints. Below shows the endpoints that you need to enable to successfully run Karpenter in a private cluster:\n\n```text\ncom.amazonaws.<region>.ec2\ncom.amazonaws.<region>.ecr.api\ncom.amazonaws.<region>.ecr.dkr\ncom.amazonaws.<region>.s3 – For pulling container images\ncom.amazonaws.<region>.sts – For IAM roles for service accounts\ncom.amazonaws.<region>.ssm - For resolving default AMIs\ncom.amazonaws.<region>.sqs - For accessing SQS if using interruption handling\ncom.amazonaws.<region>.eks - For Karpenter to discover the cluster endpoint\n```\n\nIf you do not currently have these endpoints surfaced in your VPC, you can add the endpoints by running\n\n```bash\naws ec2 create-vpc-endpoint --vpc-id ${VPC_ID} --service-name ${SERVICE_NAME} --vpc-endpoint-type Interface --subnet-ids ${SUBNET_IDS} --security-group-ids ${SECURITY_GROUP_IDS}\n```\n\n{{% alert title=\"Note\" color=\"primary\" %}}\n\nKarpenter (controller and webhook deployment) container images must be in or copied to Amazon ECR private or to another private registry accessible from inside the VPC. If these are not available from within the VPC, or from networks peered with the VPC, you will get Image pull errors when Kubernetes tries to pull these images from ECR public.\n\n{{% /alert %}}\n\n{{% alert title=\"Note\" color=\"primary\" %}}\n\nThere is currently no VPC private endpoint for the [IAM API](https://docs.aws.amazon.com/IAM/latest/APIReference/welcome.html). As a result, you cannot use the default `spec.role` field in your `EC2NodeClass`. Instead, you need to provision and manage an instance profile manually and then specify Karpenter to use this instance profile through the `spec.instanceProfile` field.\n\nYou can provision an instance profile manually and assign a Node role to it by calling the following command\n\n```bash\naws iam create-instance-profile --instance-profile-name \"KarpenterNodeInstanceProfile-${CLUSTER_NAME}\"\naws iam add-role-to-instance-profile --instance-profile-name \"KarpenterNodeInstanceProfile-${CLUSTER_NAME}\" --role-name \"KarpenterNodeRole-${CLUSTER_NAME}\"\n```\n\n{{% /alert %}}\n\n{{% alert title=\"Note\" color=\"primary\" %}}\n\nThere is currently no VPC private endpoint for the [Price List Query API](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/using-price-list-query-api.html). As a result, pricing data can go stale over time. By default, Karpenter ships a static price list that is updated when each binary is released.\n\nFailed requests for pricing data will result in the following error messages\n\n```bash\nERROR   controller.aws.pricing  updating on-demand pricing, RequestError: send request failed\ncaused by: Post \"https://api.pricing.us-east-1.amazonaws.com/\": dial tcp 52.94.231.236:443: i/o timeout; RequestError: send request failed\ncaused 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\"}\n```\n\n{{% /alert %}}\n\n### Preventing APIServer Request Throttling\n\nKubernetes uses [FlowSchemas](https://kubernetes.io/docs/concepts/cluster-administration/flow-control/#flowschema) and [PriorityLevelConfigurations](https://kubernetes.io/docs/concepts/cluster-administration/flow-control/#prioritylevelconfiguration) to map calls to the API server into buckets which determine each user agent's throttling limits.\n\nBy default, Karpenter is installed into the `kube-system` namespace, which leverages the `system-leader-election` and `kube-system-service-accounts` [FlowSchemas](https://kubernetes.io/docs/concepts/cluster-administration/flow-control/#flowschema) to map calls from the `kube-system` namespace to the `leader-election` and `workload-high` PriorityLevelConfigurations respectively. By putting Karpenter in these PriorityLevelConfigurations, we ensure that Karpenter and other critical cluster components are able to run even if other components on the cluster are throttled in other PriorityLevelConfigurations.\n\nIf you install Karpenter in a different namespace than the default `kube-system` namespace, Karpenter will not be put into these higher-priority FlowSchemas by default. Instead, you will need to create custom FlowSchemas for the namespace and service account where Karpenter is installed to ensure that requests are put into this higher PriorityLevelConfiguration.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/getting-started-with-karpenter/scripts/step15-apply-flowschemas.sh\" language=\"bash\"%}}\n"
  },
  {
    "path": "website/content/en/v1.9/getting-started/getting-started-with-karpenter/cloudformation.yaml",
    "content": "AWSTemplateFormatVersion: \"2010-09-09\"\nDescription: Resources used by https://github.com/aws/karpenter\nParameters:\n  ClusterName:\n    Type: String\n    Description: \"EKS cluster name\"\nResources:\n  KarpenterNodeRole:\n    Type: \"AWS::IAM::Role\"\n    Properties:\n      RoleName: !Sub \"KarpenterNodeRole-${ClusterName}\"\n      Path: /\n      AssumeRolePolicyDocument:\n        Version: \"2012-10-17\"\n        Statement:\n          - Effect: Allow\n            Principal:\n              Service:\n                !Sub \"ec2.${AWS::URLSuffix}\"\n            Action:\n              - \"sts:AssumeRole\"\n      ManagedPolicyArns:\n        - !Sub \"arn:${AWS::Partition}:iam::aws:policy/AmazonEKS_CNI_Policy\"\n        - !Sub \"arn:${AWS::Partition}:iam::aws:policy/AmazonEKSWorkerNodePolicy\"\n        - !Sub \"arn:${AWS::Partition}:iam::aws:policy/AmazonEC2ContainerRegistryPullOnly\"\n        - !Sub \"arn:${AWS::Partition}:iam::aws:policy/AmazonSSMManagedInstanceCore\"\n  NodeLifecyclePolicy:\n    Type: AWS::IAM::ManagedPolicy\n    Properties:\n      ManagedPolicyName: !Sub \"KarpenterControllerNodeLifecyclePolicy-${ClusterName}\"\n      Path: /\n      # The PolicyDocument must be in JSON string format because we use a StringEquals condition that uses an interpolated\n      # value in one of its key parameters which isn't natively supported by CloudFormation\n      PolicyDocument: !Sub |\n        {\n          \"Version\": \"2012-10-17\",\n          \"Statement\": [\n            {\n              \"Sid\": \"AllowScopedEC2InstanceAccessActions\",\n              \"Effect\": \"Allow\",\n              \"Resource\": [\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}::image/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}::snapshot/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:security-group/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:subnet/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:capacity-reservation/*\"\n              ],\n              \"Action\": [\n                \"ec2:RunInstances\",\n                \"ec2:CreateFleet\"\n              ]\n            },\n            {\n              \"Sid\": \"AllowScopedEC2LaunchTemplateAccessActions\",\n              \"Effect\": \"Allow\",\n              \"Resource\": \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:launch-template/*\",\n              \"Action\": [\n                \"ec2:RunInstances\",\n                \"ec2:CreateFleet\"\n              ],\n              \"Condition\": {\n                \"StringEquals\": {\n                  \"aws:ResourceTag/kubernetes.io/cluster/${ClusterName}\": \"owned\"\n                },\n                \"StringLike\": {\n                  \"aws:ResourceTag/karpenter.sh/nodepool\": \"*\"\n                }\n              }\n            },\n            {\n              \"Sid\": \"AllowScopedEC2InstanceActionsWithTags\",\n              \"Effect\": \"Allow\",\n              \"Resource\": [\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:fleet/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:instance/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:volume/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:network-interface/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:launch-template/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:spot-instances-request/*\"\n              ],\n              \"Action\": [\n                \"ec2:RunInstances\",\n                \"ec2:CreateFleet\",\n                \"ec2:CreateLaunchTemplate\"\n              ],\n              \"Condition\": {\n                \"StringEquals\": {\n                  \"aws:RequestTag/kubernetes.io/cluster/${ClusterName}\": \"owned\",\n                  \"aws:RequestTag/eks:eks-cluster-name\": \"${ClusterName}\"\n                },\n                \"StringLike\": {\n                  \"aws:RequestTag/karpenter.sh/nodepool\": \"*\"\n                }\n              }\n            },\n            {\n              \"Sid\": \"AllowScopedResourceCreationTagging\",\n              \"Effect\": \"Allow\",\n              \"Resource\": [\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:fleet/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:instance/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:volume/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:network-interface/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:launch-template/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:spot-instances-request/*\"\n              ],\n              \"Action\": \"ec2:CreateTags\",\n              \"Condition\": {\n                \"StringEquals\": {\n                  \"aws:RequestTag/kubernetes.io/cluster/${ClusterName}\": \"owned\",\n                  \"aws:RequestTag/eks:eks-cluster-name\": \"${ClusterName}\",\n                  \"ec2:CreateAction\": [\n                    \"RunInstances\",\n                    \"CreateFleet\",\n                    \"CreateLaunchTemplate\"\n                  ]\n                },\n                \"StringLike\": {\n                  \"aws:RequestTag/karpenter.sh/nodepool\": \"*\"\n                }\n              }\n            },\n            {\n              \"Sid\": \"AllowScopedResourceTagging\",\n              \"Effect\": \"Allow\",\n              \"Resource\": \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:instance/*\",\n              \"Action\": \"ec2:CreateTags\",\n              \"Condition\": {\n                \"StringEquals\": {\n                  \"aws:ResourceTag/kubernetes.io/cluster/${ClusterName}\": \"owned\"\n                },\n                \"StringLike\": {\n                  \"aws:ResourceTag/karpenter.sh/nodepool\": \"*\"\n                },\n                \"StringEqualsIfExists\": {\n                  \"aws:RequestTag/eks:eks-cluster-name\": \"${ClusterName}\"\n                },\n                \"ForAllValues:StringEquals\": {\n                  \"aws:TagKeys\": [\n                    \"eks:eks-cluster-name\",\n                    \"karpenter.sh/nodeclaim\",\n                    \"Name\"\n                  ]\n                }\n              }\n            },\n            {\n              \"Sid\": \"AllowScopedDeletion\",\n              \"Effect\": \"Allow\",\n              \"Resource\": [\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:instance/*\",\n                \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:launch-template/*\"\n              ],\n              \"Action\": [\n                \"ec2:TerminateInstances\",\n                \"ec2:DeleteLaunchTemplate\"\n              ],\n              \"Condition\": {\n                \"StringEquals\": {\n                  \"aws:ResourceTag/kubernetes.io/cluster/${ClusterName}\": \"owned\"\n                },\n                \"StringLike\": {\n                  \"aws:ResourceTag/karpenter.sh/nodepool\": \"*\"\n                }\n              }\n            }\n          ]\n        }\n  IAMIntegrationPolicy:\n    Type: AWS::IAM::ManagedPolicy\n    Properties:\n      ManagedPolicyName: !Sub \"KarpenterControllerIAMIntegrationPolicy-${ClusterName}\"\n      Path: /\n      # The PolicyDocument must be in JSON string format because we use a StringEquals condition that uses an interpolated\n      # value in one of its key parameters which isn't natively supported by CloudFormation\n      PolicyDocument: !Sub |\n        {\n          \"Version\": \"2012-10-17\",\n          \"Statement\": [\n            {\n              \"Sid\": \"AllowPassingInstanceRole\",\n              \"Effect\": \"Allow\",\n              \"Resource\": \"${KarpenterNodeRole.Arn}\",\n              \"Action\": \"iam:PassRole\",\n              \"Condition\": {\n                \"StringEquals\": {\n                  \"iam:PassedToService\": [\n                    \"ec2.amazonaws.com\",\n                    \"ec2.amazonaws.com.cn\"\n                  ]\n                }\n              }\n            },\n            {\n              \"Sid\": \"AllowScopedInstanceProfileCreationActions\",\n              \"Effect\": \"Allow\",\n              \"Resource\": \"arn:${AWS::Partition}:iam::${AWS::AccountId}:instance-profile/*\",\n              \"Action\": [\n                \"iam:CreateInstanceProfile\"\n              ],\n              \"Condition\": {\n                \"StringEquals\": {\n                  \"aws:RequestTag/kubernetes.io/cluster/${ClusterName}\": \"owned\",\n                  \"aws:RequestTag/eks:eks-cluster-name\": \"${ClusterName}\",\n                  \"aws:RequestTag/topology.kubernetes.io/region\": \"${AWS::Region}\"\n                },\n                \"StringLike\": {\n                  \"aws:RequestTag/karpenter.k8s.aws/ec2nodeclass\": \"*\"\n                }\n              }\n            },\n            {\n              \"Sid\": \"AllowScopedInstanceProfileTagActions\",\n              \"Effect\": \"Allow\",\n              \"Resource\": \"arn:${AWS::Partition}:iam::${AWS::AccountId}:instance-profile/*\",\n              \"Action\": [\n                \"iam:TagInstanceProfile\"\n              ],\n              \"Condition\": {\n                \"StringEquals\": {\n                  \"aws:ResourceTag/kubernetes.io/cluster/${ClusterName}\": \"owned\",\n                  \"aws:ResourceTag/topology.kubernetes.io/region\": \"${AWS::Region}\",\n                  \"aws:RequestTag/kubernetes.io/cluster/${ClusterName}\": \"owned\",\n                  \"aws:RequestTag/eks:eks-cluster-name\": \"${ClusterName}\",\n                  \"aws:RequestTag/topology.kubernetes.io/region\": \"${AWS::Region}\"\n                },\n                \"StringLike\": {\n                  \"aws:ResourceTag/karpenter.k8s.aws/ec2nodeclass\": \"*\",\n                  \"aws:RequestTag/karpenter.k8s.aws/ec2nodeclass\": \"*\"\n                }\n              }\n            },\n            {\n              \"Sid\": \"AllowScopedInstanceProfileActions\",\n              \"Effect\": \"Allow\",\n              \"Resource\": \"arn:${AWS::Partition}:iam::${AWS::AccountId}:instance-profile/*\",\n              \"Action\": [\n                \"iam:AddRoleToInstanceProfile\",\n                \"iam:RemoveRoleFromInstanceProfile\",\n                \"iam:DeleteInstanceProfile\"\n              ],\n              \"Condition\": {\n                \"StringEquals\": {\n                  \"aws:ResourceTag/kubernetes.io/cluster/${ClusterName}\": \"owned\",\n                  \"aws:ResourceTag/topology.kubernetes.io/region\": \"${AWS::Region}\"\n                },\n                \"StringLike\": {\n                  \"aws:ResourceTag/karpenter.k8s.aws/ec2nodeclass\": \"*\"\n                }\n              }\n            }\n          ]\n        }\n  EKSIntegrationPolicy:\n    Type: AWS::IAM::ManagedPolicy\n    Properties:\n      ManagedPolicyName: !Sub \"KarpenterControllerEKSIntegrationPolicy-${ClusterName}\"\n      Path: /\n      # The PolicyDocument must be in JSON string format because we use a StringEquals condition that uses an interpolated\n      # value in one of its key parameters which isn't natively supported by CloudFormation\n      PolicyDocument: !Sub |\n        {\n          \"Version\": \"2012-10-17\",\n          \"Statement\": [\n            {\n              \"Sid\": \"AllowAPIServerEndpointDiscovery\",\n              \"Effect\": \"Allow\",\n              \"Resource\": \"arn:${AWS::Partition}:eks:${AWS::Region}:${AWS::AccountId}:cluster/${ClusterName}\",\n              \"Action\": \"eks:DescribeCluster\"\n            }\n          ]\n        }\n  InterruptionPolicy:\n    Type: AWS::IAM::ManagedPolicy\n    Properties:\n      ManagedPolicyName: !Sub \"KarpenterControllerInterruptionPolicy-${ClusterName}\"\n      Path: /\n      # The PolicyDocument must be in JSON string format because we use a StringEquals condition that uses an interpolated\n      # value in one of its key parameters which isn't natively supported by CloudFormation\n      PolicyDocument: !Sub |\n        {\n          \"Version\": \"2012-10-17\",\n          \"Statement\": [\n            {\n              \"Sid\": \"AllowInterruptionQueueActions\",\n              \"Effect\": \"Allow\",\n              \"Resource\": \"${KarpenterInterruptionQueue.Arn}\",\n              \"Action\": [\n                \"sqs:DeleteMessage\",\n                \"sqs:GetQueueUrl\",\n                \"sqs:ReceiveMessage\"\n              ]\n            }\n          ]\n        }\n  ResourceDiscoveryPolicy:\n    Type: AWS::IAM::ManagedPolicy\n    Properties:\n      ManagedPolicyName: !Sub \"KarpenterControllerResourceDiscoveryPolicy-${ClusterName}\"\n      Path: /\n      # The PolicyDocument must be in JSON string format because we use a StringEquals condition that uses an interpolated\n      # value in one of its key parameters which isn't natively supported by CloudFormation\n      PolicyDocument: !Sub |\n        {\n          \"Version\": \"2012-10-17\",\n          \"Statement\": [\n            {\n              \"Sid\": \"AllowRegionalReadActions\",\n              \"Effect\": \"Allow\",\n              \"Resource\": \"*\",\n              \"Action\": [\n                \"ec2:DescribeCapacityReservations\",\n                \"ec2:DescribeImages\",\n                \"ec2:DescribeInstances\",\n                \"ec2:DescribeInstanceTypeOfferings\",\n                \"ec2:DescribeInstanceTypes\",\n                \"ec2:DescribeLaunchTemplates\",\n                \"ec2:DescribeSecurityGroups\",\n                \"ec2:DescribeSpotPriceHistory\",\n                \"ec2:DescribeSubnets\"\n              ],\n              \"Condition\": {\n                \"StringEquals\": {\n                  \"aws:RequestedRegion\": \"${AWS::Region}\"\n                }\n              }\n            },\n            {\n              \"Sid\": \"AllowSSMReadActions\",\n              \"Effect\": \"Allow\",\n              \"Resource\": \"arn:${AWS::Partition}:ssm:${AWS::Region}::parameter/aws/service/*\",\n              \"Action\": \"ssm:GetParameter\"\n            },\n            {\n              \"Sid\": \"AllowPricingReadActions\",\n              \"Effect\": \"Allow\",\n              \"Resource\": \"*\",\n              \"Action\": \"pricing:GetProducts\"\n            },\n            {\n              \"Sid\": \"AllowUnscopedInstanceProfileListAction\",\n              \"Effect\": \"Allow\",\n              \"Resource\": \"*\",\n              \"Action\": \"iam:ListInstanceProfiles\"\n            },\n            {\n              \"Sid\": \"AllowInstanceProfileReadActions\",\n              \"Effect\": \"Allow\",\n              \"Resource\": \"arn:${AWS::Partition}:iam::${AWS::AccountId}:instance-profile/*\",\n              \"Action\": \"iam:GetInstanceProfile\"\n            }\n          ]\n        }\n  KarpenterInterruptionQueue:\n    Type: AWS::SQS::Queue\n    Properties:\n      QueueName: !Sub \"${ClusterName}\"\n      MessageRetentionPeriod: 300\n      SqsManagedSseEnabled: true\n  KarpenterInterruptionQueuePolicy:\n    Type: AWS::SQS::QueuePolicy\n    Properties:\n      Queues:\n        - !Ref KarpenterInterruptionQueue\n      PolicyDocument:\n        Id: EC2InterruptionPolicy\n        Statement:\n          - Effect: Allow\n            Principal:\n              Service:\n                - events.amazonaws.com\n                - sqs.amazonaws.com\n            Action: sqs:SendMessage\n            Resource: !GetAtt KarpenterInterruptionQueue.Arn\n          - Sid: DenyHTTP\n            Effect: Deny\n            Action: sqs:*\n            Resource: !GetAtt KarpenterInterruptionQueue.Arn\n            Condition:\n              Bool:\n                aws:SecureTransport: false\n            Principal: \"*\"\n  ScheduledChangeRule:\n    Type: 'AWS::Events::Rule'\n    Properties:\n      EventPattern:\n        source:\n          - aws.health\n        detail-type:\n          - AWS Health Event\n      Targets:\n        - Id: KarpenterInterruptionQueueTarget\n          Arn: !GetAtt KarpenterInterruptionQueue.Arn\n  SpotInterruptionRule:\n    Type: 'AWS::Events::Rule'\n    Properties:\n      EventPattern:\n        source:\n          - aws.ec2\n        detail-type:\n          - EC2 Spot Instance Interruption Warning\n      Targets:\n        - Id: KarpenterInterruptionQueueTarget\n          Arn: !GetAtt KarpenterInterruptionQueue.Arn\n  RebalanceRule:\n    Type: 'AWS::Events::Rule'\n    Properties:\n      EventPattern:\n        source:\n          - aws.ec2\n        detail-type:\n          - EC2 Instance Rebalance Recommendation\n      Targets:\n        - Id: KarpenterInterruptionQueueTarget\n          Arn: !GetAtt KarpenterInterruptionQueue.Arn\n  InstanceStateChangeRule:\n    Type: 'AWS::Events::Rule'\n    Properties:\n      EventPattern:\n        source:\n          - aws.ec2\n        detail-type:\n          - EC2 Instance State-change Notification\n      Targets:\n        - Id: KarpenterInterruptionQueueTarget\n          Arn: !GetAtt KarpenterInterruptionQueue.Arn\n"
  },
  {
    "path": "website/content/en/v1.9/getting-started/getting-started-with-karpenter/grafana-values.yaml",
    "content": "datasources:\n  datasources.yaml:\n    apiVersion: 1\n    datasources:\n    - name: Prometheus\n      type: prometheus\n      version: 1\n      url: http://prometheus-server:80\n      access: proxy\ndashboardProviders:\n  dashboardproviders.yaml:\n    apiVersion: 1\n    providers:\n    - name: 'default'\n      orgId: 1\n      folder: ''\n      type: file\n      disableDeletion: false\n      editable: true\n      options:\n        path: /var/lib/grafana/dashboards/default\ndashboards:\n  default:\n    capacity-dashboard:\n      url: https://karpenter.sh/v1.9/getting-started/getting-started-with-karpenter/karpenter-capacity-dashboard.json\n    performance-dashboard:\n      url: https://karpenter.sh/v1.9/getting-started/getting-started-with-karpenter/karpenter-performance-dashboard.json\n"
  },
  {
    "path": "website/content/en/v1.9/getting-started/getting-started-with-karpenter/karpenter-capacity-dashboard.json",
    "content": "{\n    \"annotations\": {\n      \"list\": [\n        {\n          \"builtIn\": 1,\n          \"datasource\": \"-- Grafana --\",\n          \"enable\": true,\n          \"hide\": true,\n          \"iconColor\": \"rgba(0, 211, 255, 1)\",\n          \"name\": \"Annotations & Alerts\",\n          \"target\": {\n            \"limit\": 100,\n            \"matchAny\": false,\n            \"tags\": [],\n            \"type\": \"dashboard\"\n          },\n          \"type\": \"dashboard\"\n        }\n      ]\n    },\n    \"editable\": true,\n    \"fiscalYearStartMonth\": 0,\n    \"graphTooltip\": 0,\n    \"id\": 32,\n    \"links\": [],\n    \"liveNow\": true,\n    \"panels\": [\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"description\": \"\",\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisBorderShow\": false,\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"Nodes rate\",\n              \"axisPlacement\": \"auto\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 10,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"insertNulls\": false,\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"auto\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"none\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"min\": 0,\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            },\n            \"unit\": \"none\"\n          },\n          \"overrides\": [\n            {\n              \"matcher\": {\n                \"id\": \"byFrameRefID\",\n                \"options\": \"B\"\n              },\n              \"properties\": [\n                {\n                  \"id\": \"custom.axisPlacement\",\n                  \"value\": \"right\"\n                },\n                {\n                  \"id\": \"custom.axisLabel\",\n                  \"value\": \"Nodes total\"\n                }\n              ]\n            }\n          ]\n        },\n        \"gridPos\": {\n          \"h\": 5,\n          \"w\": 24,\n          \"x\": 0,\n          \"y\": 0\n        },\n        \"id\": 14,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [\n              \"lastNotNull\"\n            ],\n            \"displayMode\": \"table\",\n            \"placement\": \"right\",\n            \"showLegend\": true\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"sum(rate(karpenter_nodes_created_total{nodepool=~\\\"$nodepool\\\"}[$__rate_interval])) by(cluster,nodepool)\",\n            \"format\": \"time_series\",\n            \"legendFormat\": \"{{cluster}}\",\n            \"range\": true,\n            \"refId\": \"A\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"sum by(cluster,nodepool) (karpenter_nodes_created_total{nodepool=~\\\"$nodepool\\\"})\",\n            \"hide\": false,\n            \"instant\": false,\n            \"legendFormat\": \"__auto\",\n            \"range\": true,\n            \"refId\": \"B\"\n          }\n        ],\n        \"title\": \"Nodes Created by nodepool\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"description\": \"\",\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisBorderShow\": false,\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"Nodes rate\",\n              \"axisPlacement\": \"auto\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 10,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"insertNulls\": false,\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"auto\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"none\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"min\": 0,\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            },\n            \"unit\": \"none\"\n          },\n          \"overrides\": [\n            {\n              \"matcher\": {\n                \"id\": \"byFrameRefID\",\n                \"options\": \"B\"\n              },\n              \"properties\": [\n                {\n                  \"id\": \"custom.axisPlacement\",\n                  \"value\": \"right\"\n                },\n                {\n                  \"id\": \"custom.axisLabel\",\n                  \"value\": \"Nodes total\"\n                }\n              ]\n            }\n          ]\n        },\n        \"gridPos\": {\n          \"h\": 5,\n          \"w\": 24,\n          \"x\": 0,\n          \"y\": 5\n        },\n        \"id\": 15,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [\n              \"lastNotNull\"\n            ],\n            \"displayMode\": \"table\",\n            \"placement\": \"right\",\n            \"showLegend\": true\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"sum(rate(karpenter_nodes_terminated_total{nodepool=~\\\"$nodepool\\\"}[$__rate_interval])) by(cluster,nodepool)\",\n            \"format\": \"time_series\",\n            \"legendFormat\": \"__auto\",\n            \"range\": true,\n            \"refId\": \"A\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"sum by(cluster,nodepool) (karpenter_nodes_terminated_total{nodepool=~\\\"$nodepool\\\"})\",\n            \"hide\": false,\n            \"instant\": false,\n            \"legendFormat\": \"__auto\",\n            \"range\": true,\n            \"refId\": \"B\"\n          }\n        ],\n        \"title\": \"Nodes Terminated by nodepool\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisBorderShow\": false,\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"\",\n              \"axisPlacement\": \"auto\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 10,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"insertNulls\": false,\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"auto\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"none\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            }\n          },\n          \"overrides\": []\n        },\n        \"gridPos\": {\n          \"h\": 6,\n          \"w\": 24,\n          \"x\": 0,\n          \"y\": 10\n        },\n        \"id\": 12,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [\n              \"last\"\n            ],\n            \"displayMode\": \"table\",\n            \"placement\": \"right\",\n            \"showLegend\": true\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"exemplar\": false,\n            \"expr\": \"sum by(reason)(karpenter_voluntary_disruption_eligible_nodes)\",\n            \"legendFormat\": \"reason={{reason}}\",\n            \"range\": true,\n            \"refId\": \"A\"\n          }\n        ],\n        \"title\": \"Nodes Eligible for Disruptions by \\\"reason\\\"\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"description\": \"\",\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisBorderShow\": false,\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"Disruptions rate\",\n              \"axisPlacement\": \"auto\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 10,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"insertNulls\": false,\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"auto\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"normal\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            }\n          },\n          \"overrides\": [\n            {\n              \"matcher\": {\n                \"id\": \"byFrameRefID\",\n                \"options\": \"B\"\n              },\n              \"properties\": [\n                {\n                  \"id\": \"custom.axisPlacement\",\n                  \"value\": \"right\"\n                },\n                {\n                  \"id\": \"custom.axisLabel\",\n                  \"value\": \"Disruptions total\"\n                }\n              ]\n            }\n          ]\n        },\n        \"gridPos\": {\n          \"h\": 6,\n          \"w\": 24,\n          \"x\": 0,\n          \"y\": 16\n        },\n        \"id\": 17,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [\n              \"last\"\n            ],\n            \"displayMode\": \"table\",\n            \"placement\": \"right\",\n            \"showLegend\": true\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"exemplar\": false,\n            \"expr\": \"sum(rate(karpenter_nodeclaims_disrupted_total{nodepool=~\\\"$nodepool\\\"}[$__rate_interval])) by(cluster,nodepool)\",\n            \"legendFormat\": \"{{label_name}}\",\n            \"range\": true,\n            \"refId\": \"A\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"sum by(cluster,nodepool)(karpenter_nodeclaims_disrupted_total{nodepool=~\\\"$nodepool\\\"})\",\n            \"hide\": false,\n            \"instant\": false,\n            \"legendFormat\": \"{{label_name}}\",\n            \"range\": true,\n            \"refId\": \"B\"\n          }\n        ],\n        \"title\": \"Node Disruptions by \\\"$distribution_filter\\\"\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisBorderShow\": false,\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"Disruptions rate\",\n              \"axisPlacement\": \"left\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 10,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"insertNulls\": false,\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"auto\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"normal\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            }\n          },\n          \"overrides\": [\n            {\n              \"matcher\": {\n                \"id\": \"byFrameRefID\",\n                \"options\": \"B\"\n              },\n              \"properties\": [\n                {\n                  \"id\": \"custom.axisPlacement\",\n                  \"value\": \"right\"\n                },\n                {\n                  \"id\": \"custom.axisLabel\",\n                  \"value\": \"Disruptions total\"\n                }\n              ]\n            }\n          ]\n        },\n        \"gridPos\": {\n          \"h\": 6,\n          \"w\": 24,\n          \"x\": 0,\n          \"y\": 22\n        },\n        \"id\": 19,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [\n              \"last\"\n            ],\n            \"displayMode\": \"table\",\n            \"placement\": \"right\",\n            \"showLegend\": true\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"exemplar\": true,\n            \"expr\": \"sum(rate(karpenter_voluntary_disruption_decisions_total[$__rate_interval])) by(cluster,nodepool,consolidation_type,decision)\",\n            \"hide\": false,\n            \"legendFormat\": \"type={{consolidation_type}}, decision={{decision}}\",\n            \"range\": true,\n            \"refId\": \"A\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"sum by(consolidation_type,decision)(karpenter_voluntary_disruption_decisions_total)\",\n            \"hide\": true,\n            \"instant\": false,\n            \"legendFormat\": \"{{label_name}}\",\n            \"range\": true,\n            \"refId\": \"B\"\n          }\n        ],\n        \"title\": \"Disruption Actions performed by \\\"type\\\" and \\\"decision\\\"\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisBorderShow\": false,\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"\",\n              \"axisPlacement\": \"auto\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 10,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"insertNulls\": false,\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"auto\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"normal\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            }\n          },\n          \"overrides\": []\n        },\n        \"gridPos\": {\n          \"h\": 8,\n          \"w\": 24,\n          \"x\": 0,\n          \"y\": 28\n        },\n        \"id\": 6,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [],\n            \"displayMode\": \"table\",\n            \"placement\": \"right\",\n            \"showLegend\": true\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"sum by ($distribution_filter)(\\n    karpenter_pods_state{arch=~\\\"$arch\\\", capacity_type=~\\\"$capacity_type\\\", instance_type=~\\\"$instance_type\\\", nodepool=~\\\"$nodepool\\\"}\\n)\",\n            \"legendFormat\": \"{{label_name}}\",\n            \"range\": true,\n            \"refId\": \"A\"\n          }\n        ],\n        \"title\": \"Pod Distribution by \\\"$distribution_filter\\\"\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisBorderShow\": false,\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"\",\n              \"axisPlacement\": \"auto\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 10,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"insertNulls\": false,\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"auto\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"normal\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            }\n          },\n          \"overrides\": []\n        },\n        \"gridPos\": {\n          \"h\": 6,\n          \"w\": 24,\n          \"x\": 0,\n          \"y\": 36\n        },\n        \"id\": 20,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [\n              \"last\"\n            ],\n            \"displayMode\": \"table\",\n            \"placement\": \"right\",\n            \"showLegend\": true\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"sum by(phase)(karpenter_pods_state)\",\n            \"legendFormat\": \"{{label_name}}\",\n            \"range\": true,\n            \"refId\": \"A\"\n          }\n        ],\n        \"title\": \"Pod Phase\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"continuous-RdYlGr\"\n            },\n            \"custom\": {\n              \"align\": \"left\",\n              \"cellOptions\": {\n                \"type\": \"auto\"\n              },\n              \"inspect\": false\n            },\n            \"mappings\": [],\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            }\n          },\n          \"overrides\": [\n            {\n              \"matcher\": {\n                \"id\": \"byRegexp\",\n                \"options\": \".*Utilization$\"\n              },\n              \"properties\": [\n                {\n                  \"id\": \"custom.cellOptions\",\n                  \"value\": {\n                    \"mode\": \"gradient\",\n                    \"type\": \"gauge\"\n                  }\n                },\n                {\n                  \"id\": \"min\",\n                  \"value\": 0\n                },\n                {\n                  \"id\": \"max\",\n                  \"value\": 1\n                },\n                {\n                  \"id\": \"unit\",\n                  \"value\": \"percentunit\"\n                }\n              ]\n            },\n            {\n              \"matcher\": {\n                \"id\": \"byName\",\n                \"options\": \"Memory Provisioned\"\n              },\n              \"properties\": [\n                {\n                  \"id\": \"unit\",\n                  \"value\": \"bytes\"\n                }\n              ]\n            }\n          ]\n        },\n        \"gridPos\": {\n          \"h\": 11,\n          \"w\": 18,\n          \"x\": 0,\n          \"y\": 42\n        },\n        \"id\": 10,\n        \"options\": {\n          \"cellHeight\": \"sm\",\n          \"footer\": {\n            \"countRows\": false,\n            \"fields\": \"\",\n            \"reducer\": [\n              \"sum\"\n            ],\n            \"show\": false\n          },\n          \"showHeader\": true\n        },\n        \"pluginVersion\": \"11.1.0\",\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"exemplar\": false,\n            \"expr\": \"karpenter_nodepools_usage{resource_type=\\\"cpu\\\"} / karpenter_nodepools_limit{resource_type=\\\"cpu\\\"}\",\n            \"format\": \"table\",\n            \"instant\": true,\n            \"legendFormat\": \"CPU Limit Utilization\",\n            \"range\": false,\n            \"refId\": \"CPU Limit Utilization\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"exemplar\": false,\n            \"expr\": \"count by (nodepool)(karpenter_nodes_allocatable{nodepool!=\\\"N/A\\\",resource_type=\\\"cpu\\\"}) # Selects a single resource type to get node count\",\n            \"format\": \"table\",\n            \"hide\": false,\n            \"instant\": true,\n            \"range\": false,\n            \"refId\": \"Node Count\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"exemplar\": false,\n            \"expr\": \"karpenter_nodepools_usage{resource_type=\\\"memory\\\"} / karpenter_nodepools_limit{resource_type=\\\"memory\\\"}\",\n            \"format\": \"table\",\n            \"hide\": false,\n            \"instant\": true,\n            \"legendFormat\": \"Memory Limit Utilization\",\n            \"range\": false,\n            \"refId\": \"Memory Limit Utilization\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"exemplar\": false,\n            \"expr\": \"sum by (nodepool)(karpenter_nodes_allocatable{nodepool!=\\\"N/A\\\",resource_type=\\\"cpu\\\"})\",\n            \"format\": \"table\",\n            \"hide\": false,\n            \"instant\": true,\n            \"range\": false,\n            \"refId\": \"CPU Capacity\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"exemplar\": false,\n            \"expr\": \"sum by (nodepool)(karpenter_nodes_allocatable{nodepool!=\\\"N/A\\\",resource_type=\\\"memory\\\"})\",\n            \"format\": \"table\",\n            \"hide\": false,\n            \"instant\": true,\n            \"range\": false,\n            \"refId\": \"Memory Capacity\"\n          }\n        ],\n        \"title\": \"Nodepool Summary\",\n        \"transformations\": [\n          {\n            \"id\": \"seriesToColumns\",\n            \"options\": {\n              \"byField\": \"nodepool\"\n            }\n          },\n          {\n            \"id\": \"organize\",\n            \"options\": {\n              \"excludeByName\": {\n                \"Time\": true,\n                \"Time 1\": true,\n                \"Time 2\": true,\n                \"Time 3\": true,\n                \"Time 4\": true,\n                \"Time 5\": true,\n                \"__name__\": true,\n                \"instance\": true,\n                \"instance 1\": true,\n                \"instance 2\": true,\n                \"job\": true,\n                \"job 1\": true,\n                \"job 2\": true,\n                \"resource_type\": true,\n                \"resource_type 1\": true,\n                \"resource_type 2\": true\n              },\n              \"indexByName\": {\n                \"Time 1\": 6,\n                \"Time 2\": 7,\n                \"Time 3\": 11,\n                \"Time 4\": 15,\n                \"Time 5\": 16,\n                \"Value #CPU Capacity\": 2,\n                \"Value #CPU Limit Utilization\": 3,\n                \"Value #Memory Capacity\": 4,\n                \"Value #Memory Limit Utilization\": 5,\n                \"Value #Node Count\": 1,\n                \"instance 1\": 8,\n                \"instance 2\": 12,\n                \"job 1\": 9,\n                \"job 2\": 13,\n                \"nodepool\": 0,\n                \"resource_type 1\": 10,\n                \"resource_type 2\": 14\n              },\n              \"renameByName\": {\n                \"Time 1\": \"\",\n                \"Value\": \"CPU Utilization\",\n                \"Value #CPU Capacity\": \"CPU Provisioned\",\n                \"Value #CPU Limit Utilization\": \"CPU Limit Utilization\",\n                \"Value #CPU Utilization\": \"CPU Limit Utilization\",\n                \"Value #Memory Capacity\": \"Memory Provisioned\",\n                \"Value #Memory Limit Utilization\": \"Memory Limit Utilization\",\n                \"Value #Memory Utilization\": \"Memory Utilization\",\n                \"Value #Node Count\": \"Node Count\",\n                \"instance\": \"\",\n                \"instance 1\": \"\",\n                \"job\": \"\",\n                \"nodepool\": \"Nodepool\"\n              }\n            }\n          }\n        ],\n        \"type\": \"table\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisBorderShow\": false,\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"\",\n              \"axisPlacement\": \"auto\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 0,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"insertNulls\": false,\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"auto\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"none\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"max\": 1,\n            \"min\": 0,\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            },\n            \"unit\": \"percentunit\"\n          },\n          \"overrides\": []\n        },\n        \"gridPos\": {\n          \"h\": 11,\n          \"w\": 6,\n          \"x\": 18,\n          \"y\": 42\n        },\n        \"id\": 8,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [],\n            \"displayMode\": \"list\",\n            \"placement\": \"bottom\",\n            \"showLegend\": false\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"(count(karpenter_nodes_allocatable{arch=~\\\"$arch\\\",capacity_type=\\\"spot\\\",instance_type=~\\\"$instance_type\\\",nodepool=~\\\"$nodepool\\\",zone=~\\\"$zone\\\"}) or vector(0)) / count(karpenter_nodes_allocatable{arch=~\\\"$arch\\\",instance_type=~\\\"$instance_type\\\",nodepool=~\\\"$nodepool\\\",zone=~\\\"$zone\\\"})\",\n            \"legendFormat\": \"Percentage\",\n            \"range\": true,\n            \"refId\": \"A\"\n          }\n        ],\n        \"title\": \"Spot Node Percentage\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"continuous-RdYlGr\"\n            },\n            \"custom\": {\n              \"align\": \"left\",\n              \"cellOptions\": {\n                \"type\": \"auto\"\n              },\n              \"inspect\": false\n            },\n            \"mappings\": [],\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            }\n          },\n          \"overrides\": [\n            {\n              \"matcher\": {\n                \"id\": \"byName\",\n                \"options\": \"node_name\"\n              },\n              \"properties\": [\n                {\n                  \"id\": \"custom.width\",\n                  \"value\": 333\n                }\n              ]\n            },\n            {\n              \"matcher\": {\n                \"id\": \"byRegexp\",\n                \"options\": \".*Utilization\"\n              },\n              \"properties\": [\n                {\n                  \"id\": \"custom.cellOptions\",\n                  \"value\": {\n                    \"mode\": \"gradient\",\n                    \"type\": \"gauge\"\n                  }\n                },\n                {\n                  \"id\": \"unit\",\n                  \"value\": \"percentunit\"\n                },\n                {\n                  \"id\": \"min\",\n                  \"value\": 0\n                },\n                {\n                  \"id\": \"thresholds\",\n                  \"value\": {\n                    \"mode\": \"percentage\",\n                    \"steps\": [\n                      {\n                        \"color\": \"green\",\n                        \"value\": null\n                      },\n                      {\n                        \"color\": \"red\",\n                        \"value\": 75\n                      }\n                    ]\n                  }\n                },\n                {\n                  \"id\": \"max\",\n                  \"value\": 1\n                }\n              ]\n            },\n            {\n              \"matcher\": {\n                \"id\": \"byName\",\n                \"options\": \"Uptime\"\n              },\n              \"properties\": [\n                {\n                  \"id\": \"unit\",\n                  \"value\": \"s\"\n                },\n                {\n                  \"id\": \"decimals\",\n                  \"value\": 0\n                }\n              ]\n            }\n          ]\n        },\n        \"gridPos\": {\n          \"h\": 9,\n          \"w\": 24,\n          \"x\": 0,\n          \"y\": 53\n        },\n        \"id\": 4,\n        \"options\": {\n          \"cellHeight\": \"sm\",\n          \"footer\": {\n            \"countRows\": false,\n            \"fields\": \"\",\n            \"reducer\": [\n              \"sum\"\n            ],\n            \"show\": false\n          },\n          \"showHeader\": true,\n          \"sortBy\": [\n            {\n              \"desc\": true,\n              \"displayName\": \"Uptime\"\n            }\n          ]\n        },\n        \"pluginVersion\": \"11.1.0\",\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"exemplar\": false,\n            \"expr\": \"((karpenter_nodes_total_daemon_requests{resource_type=\\\"cpu\\\",arch=~\\\"$arch\\\",capacity_type=~\\\"$capacity_type\\\",instance_type=~\\\"$instance_type\\\",nodepool=~\\\"$nodepool\\\",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\\\",nodepool=~\\\"$nodepool\\\",zone=~\\\"$zone\\\"} or karpenter_nodes_allocatable*0)) / \\nkarpenter_nodes_allocatable{resource_type=\\\"cpu\\\",arch=~\\\"$arch\\\",capacity_type=~\\\"$capacity_type\\\",instance_type=~\\\"$instance_type\\\",nodepool=~\\\"$nodepool\\\",zone=~\\\"$zone\\\"}\",\n            \"format\": \"table\",\n            \"hide\": false,\n            \"instant\": true,\n            \"legendFormat\": \"CPU Utilization\",\n            \"range\": false,\n            \"refId\": \"CPU Utilization\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"exemplar\": false,\n            \"expr\": \"((karpenter_nodes_total_daemon_requests{resource_type=\\\"memory\\\",arch=~\\\"$arch\\\",capacity_type=~\\\"$capacity_type\\\",instance_type=~\\\"$instance_type\\\",nodepool=~\\\"$nodepool\\\",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\\\",nodepool=~\\\"$nodepool\\\",zone=~\\\"$zone\\\"} or karpenter_nodes_allocatable*0)) / \\nkarpenter_nodes_allocatable{resource_type=\\\"memory\\\",arch=~\\\"$arch\\\",capacity_type=~\\\"$capacity_type\\\",instance_type=~\\\"$instance_type\\\",nodepool=~\\\"$nodepool\\\",zone=~\\\"$zone\\\"}\",\n            \"format\": \"table\",\n            \"hide\": false,\n            \"instant\": true,\n            \"legendFormat\": \"Memory Utilization\",\n            \"range\": false,\n            \"refId\": \"Memory Utilization\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"exemplar\": false,\n            \"expr\": \"karpenter_nodes_total_daemon_requests{resource_type=\\\"pods\\\",arch=~\\\"$arch\\\",capacity_type=~\\\"$capacity_type\\\",instance_type=~\\\"$instance_type\\\",nodepool=~\\\"$nodepool\\\",zone=~\\\"$zone\\\"} + \\nkarpenter_nodes_total_pod_requests{resource_type=\\\"pods\\\",arch=~\\\"$arch\\\",capacity_type=~\\\"$capacity_type\\\",instance_type=~\\\"$instance_type\\\",nodepool=~\\\"$nodepool\\\",zone=~\\\"$zone\\\"}\",\n            \"format\": \"table\",\n            \"hide\": false,\n            \"instant\": true,\n            \"legendFormat\": \"Memory Utilization\",\n            \"range\": false,\n            \"refId\": \"Pod Count\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"exemplar\": false,\n            \"expr\": \"label_replace(\\n    sum by (node)(node_time_seconds) - sum by (node)(node_boot_time_seconds),\\n    \\\"node_name\\\", \\\"$1\\\", \\\"node\\\", \\\"(.+)\\\"\\n)\",\n            \"format\": \"table\",\n            \"hide\": false,\n            \"instant\": true,\n            \"legendFormat\": \"Uptime\",\n            \"range\": false,\n            \"refId\": \"Uptime\"\n          }\n        ],\n        \"title\": \"Node Summary\",\n        \"transformations\": [\n          {\n            \"id\": \"seriesToColumns\",\n            \"options\": {\n              \"byField\": \"node_name\"\n            }\n          },\n          {\n            \"id\": \"organize\",\n            \"options\": {\n              \"excludeByName\": {\n                \"Time\": true,\n                \"Time 1\": true,\n                \"Time 2\": true,\n                \"Time 3\": true,\n                \"Time 4\": true,\n                \"Value\": false,\n                \"Value #Pod Count\": false,\n                \"__name__\": true,\n                \"arch\": true,\n                \"arch 1\": true,\n                \"arch 2\": true,\n                \"arch 3\": true,\n                \"capacity_type 2\": true,\n                \"capacity_type 3\": true,\n                \"instance\": true,\n                \"instance 1\": true,\n                \"instance 2\": true,\n                \"instance 3\": true,\n                \"instance_category 1\": true,\n                \"instance_category 2\": true,\n                \"instance_category 3\": true,\n                \"instance_cpu\": true,\n                \"instance_cpu 1\": true,\n                \"instance_cpu 2\": true,\n                \"instance_cpu 3\": true,\n                \"instance_family\": true,\n                \"instance_family 1\": true,\n                \"instance_family 2\": true,\n                \"instance_family 3\": true,\n                \"instance_generation 1\": true,\n                \"instance_generation 2\": true,\n                \"instance_generation 3\": true,\n                \"instance_gpu_count\": true,\n                \"instance_gpu_count 1\": true,\n                \"instance_gpu_count 2\": true,\n                \"instance_gpu_count 3\": true,\n                \"instance_gpu_manufacturer\": true,\n                \"instance_gpu_manufacturer 1\": true,\n                \"instance_gpu_manufacturer 2\": true,\n                \"instance_gpu_manufacturer 3\": true,\n                \"instance_gpu_memory\": true,\n                \"instance_gpu_memory 1\": true,\n                \"instance_gpu_memory 2\": true,\n                \"instance_gpu_memory 3\": true,\n                \"instance_gpu_name\": true,\n                \"instance_gpu_name 1\": true,\n                \"instance_gpu_name 2\": true,\n                \"instance_gpu_name 3\": true,\n                \"instance_hypervisor\": true,\n                \"instance_hypervisor 1\": true,\n                \"instance_hypervisor 2\": true,\n                \"instance_hypervisor 3\": true,\n                \"instance_local_nvme 1\": true,\n                \"instance_local_nvme 2\": true,\n                \"instance_local_nvme 3\": true,\n                \"instance_memory\": true,\n                \"instance_memory 1\": true,\n                \"instance_memory 2\": true,\n                \"instance_memory 3\": true,\n                \"instance_pods\": true,\n                \"instance_pods 1\": true,\n                \"instance_pods 2\": true,\n                \"instance_pods 3\": true,\n                \"instance_size\": true,\n                \"instance_size 1\": true,\n                \"instance_size 2\": true,\n                \"instance_size 3\": true,\n                \"instance_type 1\": false,\n                \"instance_type 2\": true,\n                \"instance_type 3\": true,\n                \"job\": true,\n                \"job 1\": true,\n                \"job 2\": true,\n                \"job 3\": true,\n                \"node\": true,\n                \"nodepool 1\": false,\n                \"nodepool 2\": true,\n                \"nodepool 3\": true,\n                \"os\": true,\n                \"os 1\": true,\n                \"os 2\": true,\n                \"os 3\": true,\n                \"resource_type\": true,\n                \"resource_type 1\": true,\n                \"resource_type 2\": true,\n                \"resource_type 3\": true,\n                \"zone 1\": false,\n                \"zone 2\": true,\n                \"zone 3\": true\n              },\n              \"indexByName\": {\n                \"Time 1\": 1,\n                \"Time 2\": 25,\n                \"Time 3\": 45,\n                \"Time 4\": 65,\n                \"Value #CPU Utilization\": 10,\n                \"Value #Memory Utilization\": 11,\n                \"Value #Pod Count\": 9,\n                \"Value #Uptime\": 8,\n                \"arch 1\": 5,\n                \"arch 2\": 26,\n                \"arch 3\": 46,\n                \"capacity_type 1\": 6,\n                \"capacity_type 2\": 27,\n                \"capacity_type 3\": 47,\n                \"instance 1\": 4,\n                \"instance 2\": 28,\n                \"instance 3\": 48,\n                \"instance_cpu 1\": 12,\n                \"instance_cpu 2\": 29,\n                \"instance_cpu 3\": 49,\n                \"instance_family 1\": 13,\n                \"instance_family 2\": 30,\n                \"instance_family 3\": 50,\n                \"instance_gpu_count 1\": 14,\n                \"instance_gpu_count 2\": 31,\n                \"instance_gpu_count 3\": 51,\n                \"instance_gpu_manufacturer 1\": 15,\n                \"instance_gpu_manufacturer 2\": 32,\n                \"instance_gpu_manufacturer 3\": 52,\n                \"instance_gpu_memory 1\": 16,\n                \"instance_gpu_memory 2\": 33,\n                \"instance_gpu_memory 3\": 53,\n                \"instance_gpu_name 1\": 17,\n                \"instance_gpu_name 2\": 34,\n                \"instance_gpu_name 3\": 54,\n                \"instance_hypervisor 1\": 18,\n                \"instance_hypervisor 2\": 35,\n                \"instance_hypervisor 3\": 55,\n                \"instance_memory 1\": 19,\n                \"instance_memory 2\": 36,\n                \"instance_memory 3\": 56,\n                \"instance_pods 1\": 20,\n                \"instance_pods 2\": 37,\n                \"instance_pods 3\": 57,\n                \"instance_size 1\": 21,\n                \"instance_size 2\": 38,\n                \"instance_size 3\": 58,\n                \"instance_type 1\": 3,\n                \"instance_type 2\": 39,\n                \"instance_type 3\": 59,\n                \"job 1\": 22,\n                \"job 2\": 40,\n                \"job 3\": 60,\n                \"node\": 66,\n                \"node_name\": 0,\n                \"nodepool 1\": 2,\n                \"nodepool 2\": 42,\n                \"nodepool 3\": 62,\n                \"os 1\": 23,\n                \"os 2\": 41,\n                \"os 3\": 61,\n                \"resource_type 1\": 24,\n                \"resource_type 2\": 43,\n                \"resource_type 3\": 63,\n                \"zone 1\": 7,\n                \"zone 2\": 44,\n                \"zone 3\": 64\n              },\n              \"renameByName\": {\n                \"Time\": \"\",\n                \"Time 1\": \"\",\n                \"Value\": \"CPU Utilization\",\n                \"Value #Allocatable\": \"\",\n                \"Value #CPU Utilization\": \"CPU Utilization\",\n                \"Value #Memory Utilization\": \"Memory Utilization\",\n                \"Value #Pod CPU\": \"\",\n                \"Value #Pod Count\": \"Pods\",\n                \"Value #Uptime\": \"Uptime\",\n                \"arch\": \"Architecture\",\n                \"arch 1\": \"Arch\",\n                \"capacity_type\": \"Capacity Type\",\n                \"capacity_type 1\": \"Capacity Type\",\n                \"instance 1\": \"Instance\",\n                \"instance_cpu 1\": \"vCPU\",\n                \"instance_type\": \"Instance Type\",\n                \"instance_type 1\": \"Instance Type\",\n                \"node_name\": \"Node Name\",\n                \"nodepool 1\": \"Nodepool\",\n                \"zone 1\": \"Zone\"\n              }\n            }\n          }\n        ],\n        \"type\": \"table\"\n      }\n    ],\n    \"refresh\": \"10s\",\n    \"schemaVersion\": 39,\n    \"tags\": [],\n    \"templating\": {\n      \"list\": [\n        {\n          \"current\": {\n            \"selected\": false,\n            \"text\": \"Prometheus\",\n            \"value\": \"prometheus\"\n          },\n          \"hide\": 0,\n          \"includeAll\": false,\n          \"label\": \"Data Source\",\n          \"multi\": false,\n          \"name\": \"datasource\",\n          \"options\": [],\n          \"query\": \"prometheus\",\n          \"refresh\": 1,\n          \"regex\": \"\",\n          \"skipUrlSync\": false,\n          \"type\": \"datasource\"\n        },\n        {\n          \"current\": {\n            \"selected\": true,\n            \"text\": [\n              \"All\"\n            ],\n            \"value\": [\n              \"$__all\"\n            ]\n          },\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"definition\": \"label_values(karpenter_nodes_allocatable, nodepool)\",\n          \"hide\": 0,\n          \"includeAll\": true,\n          \"multi\": true,\n          \"name\": \"nodepool\",\n          \"options\": [],\n          \"query\": {\n            \"query\": \"label_values(karpenter_nodes_allocatable, nodepool)\",\n            \"refId\": \"StandardVariableQuery\"\n          },\n          \"refresh\": 2,\n          \"regex\": \"\",\n          \"skipUrlSync\": false,\n          \"sort\": 1,\n          \"type\": \"query\"\n        },\n        {\n          \"current\": {\n            \"selected\": true,\n            \"text\": [\n              \"All\"\n            ],\n            \"value\": [\n              \"$__all\"\n            ]\n          },\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"definition\": \"label_values(karpenter_nodes_allocatable, zone)\",\n          \"hide\": 0,\n          \"includeAll\": true,\n          \"multi\": true,\n          \"name\": \"zone\",\n          \"options\": [],\n          \"query\": {\n            \"query\": \"label_values(karpenter_nodes_allocatable, zone)\",\n            \"refId\": \"StandardVariableQuery\"\n          },\n          \"refresh\": 2,\n          \"regex\": \"\",\n          \"skipUrlSync\": false,\n          \"sort\": 1,\n          \"type\": \"query\"\n        },\n        {\n          \"current\": {\n            \"selected\": true,\n            \"text\": [\n              \"All\"\n            ],\n            \"value\": [\n              \"$__all\"\n            ]\n          },\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"definition\": \"label_values(karpenter_nodes_allocatable, arch)\",\n          \"hide\": 0,\n          \"includeAll\": true,\n          \"multi\": true,\n          \"name\": \"arch\",\n          \"options\": [],\n          \"query\": {\n            \"query\": \"label_values(karpenter_nodes_allocatable, arch)\",\n            \"refId\": \"StandardVariableQuery\"\n          },\n          \"refresh\": 2,\n          \"regex\": \"\",\n          \"skipUrlSync\": false,\n          \"sort\": 1,\n          \"type\": \"query\"\n        },\n        {\n          \"current\": {\n            \"selected\": true,\n            \"text\": [\n              \"All\"\n            ],\n            \"value\": [\n              \"$__all\"\n            ]\n          },\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"definition\": \"label_values(karpenter_nodes_allocatable, capacity_type)\",\n          \"hide\": 0,\n          \"includeAll\": true,\n          \"multi\": true,\n          \"name\": \"capacity_type\",\n          \"options\": [],\n          \"query\": {\n            \"query\": \"label_values(karpenter_nodes_allocatable, capacity_type)\",\n            \"refId\": \"StandardVariableQuery\"\n          },\n          \"refresh\": 2,\n          \"regex\": \"\",\n          \"skipUrlSync\": false,\n          \"sort\": 1,\n          \"type\": \"query\"\n        },\n        {\n          \"current\": {\n            \"selected\": true,\n            \"text\": [\n              \"All\"\n            ],\n            \"value\": [\n              \"$__all\"\n            ]\n          },\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"definition\": \"label_values(karpenter_nodes_allocatable, instance_type)\",\n          \"hide\": 0,\n          \"includeAll\": true,\n          \"multi\": true,\n          \"name\": \"instance_type\",\n          \"options\": [],\n          \"query\": {\n            \"query\": \"label_values(karpenter_nodes_allocatable, instance_type)\",\n            \"refId\": \"StandardVariableQuery\"\n          },\n          \"refresh\": 2,\n          \"regex\": \"\",\n          \"skipUrlSync\": false,\n          \"sort\": 1,\n          \"type\": \"query\"\n        },\n        {\n          \"current\": {\n            \"selected\": true,\n            \"text\": \"nodepool\",\n            \"value\": \"nodepool\"\n          },\n          \"hide\": 0,\n          \"includeAll\": false,\n          \"multi\": false,\n          \"name\": \"distribution_filter\",\n          \"options\": [\n            {\n              \"selected\": false,\n              \"text\": \"arch\",\n              \"value\": \"arch\"\n            },\n            {\n              \"selected\": false,\n              \"text\": \"capacity_type\",\n              \"value\": \"capacity_type\"\n            },\n            {\n              \"selected\": false,\n              \"text\": \"instance_type\",\n              \"value\": \"instance_type\"\n            },\n            {\n              \"selected\": false,\n              \"text\": \"namespace\",\n              \"value\": \"namespace\"\n            },\n            {\n              \"selected\": false,\n              \"text\": \"node\",\n              \"value\": \"node\"\n            },\n            {\n              \"selected\": true,\n              \"text\": \"nodepool\",\n              \"value\": \"nodepool\"\n            },\n            {\n              \"selected\": false,\n              \"text\": \"zone\",\n              \"value\": \"zone\"\n            }\n          ],\n          \"query\": \"arch,capacity_type,instance_type,namespace,node,nodepool,zone\",\n          \"queryValue\": \"\",\n          \"skipUrlSync\": false,\n          \"type\": \"custom\"\n        }\n      ]\n    },\n    \"time\": {\n      \"from\": \"now-3h\",\n      \"to\": \"now\"\n    },\n    \"timepicker\": {},\n    \"timezone\": \"\",\n    \"title\": \"Karpenter Capacity v1\",\n    \"uid\": \"ta8I9Q67Z\",\n    \"version\": 7,\n    \"weekStart\": \"\"\n  }\n"
  },
  {
    "path": "website/content/en/v1.9/getting-started/getting-started-with-karpenter/karpenter-controllers-allocation.json",
    "content": "{\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": {\n          \"type\": \"datasource\",\n          \"uid\": \"grafana\"\n        },\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"target\": {\n          \"limit\": 100,\n          \"matchAny\": false,\n          \"tags\": [],\n          \"type\": \"dashboard\"\n        },\n        \"type\": \"dashboard\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"gnetId\": null,\n  \"graphTooltip\": 0,\n  \"id\": null,\n  \"iteration\": 1636732403925,\n  \"links\": [],\n  \"panels\": [\n    {\n      \"datasource\": null,\n      \"gridPos\": {\n        \"h\": 4,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"id\": 5,\n      \"options\": {\n        \"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).\",\n        \"mode\": \"markdown\"\n      },\n      \"pluginVersion\": \"8.1.6\",\n      \"targets\": [\n        {\n          \"datasource\": {},\n          \"queryType\": \"randomWalk\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"timeFrom\": null,\n      \"timeShift\": null,\n      \"title\": \"About this dashboard\",\n      \"type\": \"text\"\n    },\n    {\n      \"cards\": {\n        \"cardPadding\": null,\n        \"cardRound\": null\n      },\n      \"color\": {\n        \"cardColor\": \"#b4ff00\",\n        \"colorScale\": \"sqrt\",\n        \"colorScheme\": \"interpolateMagma\",\n        \"exponent\": 0.5,\n        \"min\": null,\n        \"mode\": \"spectrum\"\n      },\n      \"dataFormat\": \"tsbuckets\",\n      \"datasource\": {\n        \"uid\": \"${datasource}\"\n      },\n      \"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.\",\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 4\n      },\n      \"heatmap\": {},\n      \"hideZeroBuckets\": false,\n      \"highlightCards\": true,\n      \"id\": 2,\n      \"legend\": {\n        \"show\": true\n      },\n      \"maxDataPoints\": 25,\n      \"pluginVersion\": \"7.5.0\",\n      \"reverseYBuckets\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"uid\": \"${datasource}\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"sum(increase(karpenter_allocation_controller_bind_duration_seconds_bucket[$__interval])) by (le)\",\n          \"format\": \"heatmap\",\n          \"instant\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{le}}\",\n          \"queryType\": \"randomWalk\",\n          \"refId\": \"All Binds\"\n        }\n      ],\n      \"title\": \"Bind duration\",\n      \"tooltip\": {\n        \"show\": true,\n        \"showHistogram\": false\n      },\n      \"type\": \"heatmap\",\n      \"xAxis\": {\n        \"show\": true\n      },\n      \"xBucketNumber\": null,\n      \"xBucketSize\": null,\n      \"yAxis\": {\n        \"decimals\": 0,\n        \"format\": \"s\",\n        \"logBase\": 1,\n        \"max\": null,\n        \"min\": \"0\",\n        \"show\": true,\n        \"splitFactor\": null\n      },\n      \"yBucketBound\": \"auto\",\n      \"yBucketNumber\": null,\n      \"yBucketSize\": null\n    },\n    {\n      \"cards\": {\n        \"cardPadding\": null,\n        \"cardRound\": null\n      },\n      \"color\": {\n        \"cardColor\": \"#b4ff00\",\n        \"colorScale\": \"sqrt\",\n        \"colorScheme\": \"interpolateMagma\",\n        \"exponent\": 0.5,\n        \"mode\": \"spectrum\"\n      },\n      \"dataFormat\": \"tsbuckets\",\n      \"datasource\": {\n        \"uid\": \"${datasource}\"\n      },\n      \"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.\",\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 12\n      },\n      \"heatmap\": {},\n      \"hideZeroBuckets\": false,\n      \"highlightCards\": true,\n      \"id\": 7,\n      \"legend\": {\n        \"show\": true\n      },\n      \"maxDataPoints\": 25,\n      \"pluginVersion\": \"7.5.0\",\n      \"reverseYBuckets\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"uid\": \"${datasource}\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"sum(increase(karpenter_allocation_controller_binpacking_duration_seconds_bucket[$__interval])) by (le)\",\n          \"format\": \"heatmap\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{le}}\",\n          \"queryType\": \"randomWalk\",\n          \"refId\": \"Binpacking Duration\"\n        }\n      ],\n      \"title\": \"Binpack duration\",\n      \"tooltip\": {\n        \"show\": true,\n        \"showHistogram\": false\n      },\n      \"type\": \"heatmap\",\n      \"xAxis\": {\n        \"show\": true\n      },\n      \"xBucketNumber\": null,\n      \"xBucketSize\": null,\n      \"yAxis\": {\n        \"decimals\": 0,\n        \"format\": \"s\",\n        \"logBase\": 1,\n        \"max\": null,\n        \"min\": \"0\",\n        \"show\": true,\n        \"splitFactor\": null\n      },\n      \"yBucketBound\": \"auto\",\n      \"yBucketNumber\": null,\n      \"yBucketSize\": null\n    },\n    {\n      \"cards\": {\n        \"cardPadding\": null,\n        \"cardRound\": null\n      },\n      \"color\": {\n        \"cardColor\": \"#b4ff00\",\n        \"colorScale\": \"sqrt\",\n        \"colorScheme\": \"interpolateInferno\",\n        \"exponent\": 0.5,\n        \"mode\": \"spectrum\"\n      },\n      \"dataFormat\": \"tsbuckets\",\n      \"datasource\": {\n        \"uid\": \"${datasource}\"\n      },\n      \"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.\",\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 20\n      },\n      \"heatmap\": {},\n      \"hideZeroBuckets\": false,\n      \"highlightCards\": true,\n      \"id\": 9,\n      \"legend\": {\n        \"show\": true\n      },\n      \"maxDataPoints\": 25,\n      \"pluginVersion\": \"7.5.0\",\n      \"reverseYBuckets\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"uid\": \"${datasource}\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"sum(increase(karpenter_allocation_controller_scheduling_duration_seconds_bucket{provisioner=\\\"$provisioner\\\"}[$__interval])) by (le)\",\n          \"format\": \"heatmap\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{le}}\",\n          \"queryType\": \"randomWalk\",\n          \"refId\": \"Scheduling Duration\"\n        }\n      ],\n      \"title\": \"Scheduling duration\",\n      \"tooltip\": {\n        \"show\": true,\n        \"showHistogram\": false\n      },\n      \"type\": \"heatmap\",\n      \"xAxis\": {\n        \"show\": true\n      },\n      \"xBucketNumber\": null,\n      \"xBucketSize\": null,\n      \"yAxis\": {\n        \"decimals\": 0,\n        \"format\": \"s\",\n        \"logBase\": 1,\n        \"max\": null,\n        \"min\": null,\n        \"show\": true,\n        \"splitFactor\": null\n      },\n      \"yBucketBound\": \"auto\",\n      \"yBucketNumber\": null,\n      \"yBucketSize\": null\n    }\n  ],\n  \"refresh\": \"1m\",\n  \"schemaVersion\": 30,\n  \"style\": \"dark\",\n  \"tags\": [],\n  \"templating\": {\n    \"list\": [\n      {\n        \"current\": {\n          \"selected\": false,\n          \"text\": \"Prometheus\",\n          \"value\": \"Prometheus\"\n        },\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Data Source\",\n        \"multi\": false,\n        \"name\": \"datasource\",\n        \"options\": [],\n        \"query\": \"prometheus\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"type\": \"datasource\"\n      },\n      {\n        \"allValue\": null,\n        \"current\": {},\n        \"datasource\": {\n          \"uid\": \"${datasource}\"\n        },\n        \"definition\": \"label_values(karpenter_allocation_controller_scheduling_duration_seconds_bucket, provisioner)\",\n        \"description\": \"Karpenter provisioner\",\n        \"error\": null,\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Provisioner\",\n        \"multi\": false,\n        \"name\": \"provisioner\",\n        \"options\": [],\n        \"query\": {\n          \"query\": \"label_values(karpenter_allocation_controller_scheduling_duration_seconds_bucket, provisioner)\",\n          \"refId\": \"StandardVariableQuery\"\n        },\n        \"refresh\": 2,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"sort\": 1,\n        \"type\": \"query\"\n      }\n    ]\n  },\n  \"time\": {\n    \"from\": \"now-3h\",\n    \"to\": \"now\"\n  },\n  \"timepicker\": {},\n  \"timezone\": \"\",\n  \"title\": \"Controllers / Allocation\",\n  \"uid\": \"fs47R-Dnz\",\n  \"version\": 9\n}\n"
  },
  {
    "path": "website/content/en/v1.9/getting-started/getting-started-with-karpenter/karpenter-controllers.json",
    "content": "{\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": {\n          \"type\": \"datasource\",\n          \"uid\": \"grafana\"\n        },\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"target\": {\n          \"limit\": 100,\n          \"matchAny\": false,\n          \"tags\": [],\n          \"type\": \"dashboard\"\n        },\n        \"type\": \"dashboard\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"gnetId\": null,\n  \"graphTooltip\": 0,\n  \"id\": null,\n  \"iteration\": 1636733515850,\n  \"links\": [],\n  \"panels\": [\n    {\n      \"datasource\": null,\n      \"description\": \"\",\n      \"gridPos\": {\n        \"h\": 4,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"id\": 99,\n      \"options\": {\n        \"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).\",\n        \"mode\": \"markdown\"\n      },\n      \"pluginVersion\": \"8.1.6\",\n      \"title\": \"About this dashboard\",\n      \"type\": \"text\"\n    },\n    {\n      \"aliasColors\": {\n        \"items\": \"light-blue\"\n      },\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": {\n        \"uid\": \"${datasource}\"\n      },\n      \"description\": \"\",\n      \"fill\": 1,\n      \"fillGradient\": 2,\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 8,\n        \"x\": 0,\n        \"y\": 4\n      },\n      \"hiddenSeries\": false,\n      \"id\": 14,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": true,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"options\": {\n        \"alertThreshold\": true\n      },\n      \"percentage\": false,\n      \"pluginVersion\": \"8.1.6\",\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"uid\": \"${datasource}\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"workqueue_depth{name=\\\"$controller\\\"}\",\n          \"interval\": \"\",\n          \"legendFormat\": \"items\",\n          \"queryType\": \"randomWalk\",\n          \"refId\": \"Work Queue Depth\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeFrom\": null,\n      \"timeRegions\": [],\n      \"timeShift\": null,\n      \"title\": \"Items in Work Queue\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"graph\",\n      \"xaxis\": {\n        \"buckets\": null,\n        \"mode\": \"time\",\n        \"name\": null,\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"decimals\": 0,\n          \"format\": \"short\",\n          \"label\": \"\",\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"label\": null,\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": null,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false,\n        \"alignLevel\": null\n      }\n    },\n    {\n      \"aliasColors\": {\n        \"error\": \"red\",\n        \"requeue\": \"orange\",\n        \"requeue_after\": \"semi-dark-purple\",\n        \"success\": \"green\"\n      },\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": {\n        \"uid\": \"${datasource}\"\n      },\n      \"description\": \"The rate of completed reconciliations per minute broken out by result status.\",\n      \"fill\": 1,\n      \"fillGradient\": 1,\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 8,\n        \"x\": 8,\n        \"y\": 4\n      },\n      \"hiddenSeries\": false,\n      \"id\": 76,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": true,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"options\": {\n        \"alertThreshold\": true\n      },\n      \"percentage\": false,\n      \"pluginVersion\": \"8.1.6\",\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"uid\": \"${datasource}\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"rate(controller_runtime_reconcile_total{controller=\\\"$controller\\\"}[$trailing]) * 60\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{result}}\",\n          \"queryType\": \"randomWalk\",\n          \"refId\": \"Reconciliations per minute\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeFrom\": null,\n      \"timeRegions\": [],\n      \"timeShift\": null,\n      \"title\": \"Reconciliations per minute\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"graph\",\n      \"xaxis\": {\n        \"buckets\": null,\n        \"mode\": \"time\",\n        \"name\": null,\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"$$hashKey\": \"object:566\",\n          \"format\": \"short\",\n          \"label\": null,\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": true\n        },\n        {\n          \"$$hashKey\": \"object:567\",\n          \"format\": \"short\",\n          \"label\": null,\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": null,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false,\n        \"alignLevel\": null\n      }\n    },\n    {\n      \"cards\": {\n        \"cardPadding\": null,\n        \"cardRound\": null\n      },\n      \"color\": {\n        \"cardColor\": \"#b4ff00\",\n        \"colorScale\": \"sqrt\",\n        \"colorScheme\": \"interpolateMagma\",\n        \"exponent\": 0.5,\n        \"mode\": \"spectrum\"\n      },\n      \"dataFormat\": \"tsbuckets\",\n      \"datasource\": {\n        \"uid\": \"${datasource}\"\n      },\n      \"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.\",\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 8,\n        \"x\": 16,\n        \"y\": 4\n      },\n      \"heatmap\": {},\n      \"hideZeroBuckets\": false,\n      \"highlightCards\": true,\n      \"id\": 126,\n      \"legend\": {\n        \"show\": true\n      },\n      \"maxDataPoints\": 25,\n      \"pluginVersion\": \"8.1.6\",\n      \"reverseYBuckets\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"uid\": \"${datasource}\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"sum(increase(controller_runtime_reconcile_time_seconds_bucket{controller=\\\"$controller\\\"}[$__interval])) by (le)\",\n          \"format\": \"heatmap\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{le}}\",\n          \"queryType\": \"randomWalk\",\n          \"refId\": \"p100\"\n        }\n      ],\n      \"timeFrom\": null,\n      \"timeShift\": null,\n      \"title\": \"Reconciliation duration\",\n      \"tooltip\": {\n        \"show\": true,\n        \"showHistogram\": false\n      },\n      \"type\": \"heatmap\",\n      \"xAxis\": {\n        \"show\": true\n      },\n      \"xBucketNumber\": null,\n      \"xBucketSize\": null,\n      \"yAxis\": {\n        \"decimals\": 0,\n        \"format\": \"s\",\n        \"logBase\": 1,\n        \"max\": null,\n        \"min\": \"0\",\n        \"show\": true,\n        \"splitFactor\": null\n      },\n      \"yBucketBound\": \"auto\",\n      \"yBucketNumber\": null,\n      \"yBucketSize\": null\n    }\n  ],\n  \"refresh\": \"1m\",\n  \"schemaVersion\": 31,\n  \"style\": \"dark\",\n  \"tags\": [],\n  \"templating\": {\n    \"list\": [\n      {\n        \"current\": {},\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Data Source\",\n        \"multi\": false,\n        \"name\": \"datasource\",\n        \"options\": [],\n        \"query\": \"prometheus\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"type\": \"datasource\"\n      },\n      {\n        \"allValue\": \"\",\n        \"current\": {},\n        \"datasource\": {\n          \"uid\": \"${datasource}\"\n        },\n        \"definition\": \"label_values(controller_runtime_reconcile_errors_total, controller)\",\n        \"description\": \"Kubernetes controller\",\n        \"error\": null,\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Controller\",\n        \"multi\": false,\n        \"name\": \"controller\",\n        \"options\": [],\n        \"query\": {\n          \"query\": \"label_values(controller_runtime_reconcile_errors_total, controller)\",\n          \"refId\": \"StandardVariableQuery\"\n        },\n        \"refresh\": 2,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"selected\": true,\n          \"text\": \"10m\",\n          \"value\": \"10m\"\n        },\n        \"description\": \"Trailing aggregation window\",\n        \"error\": null,\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Trailing\",\n        \"multi\": false,\n        \"name\": \"trailing\",\n        \"options\": [\n          {\n            \"selected\": false,\n            \"text\": \"30s\",\n            \"value\": \"30s\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"1m\",\n            \"value\": \"1m\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"5m\",\n            \"value\": \"5m\"\n          },\n          {\n            \"selected\": true,\n            \"text\": \"10m\",\n            \"value\": \"10m\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"30m\",\n            \"value\": \"30m\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"1h\",\n            \"value\": \"1h\"\n          }\n        ],\n        \"query\": \"30s,1m,5m,10m,30m,1h\",\n        \"queryValue\": \"\",\n        \"skipUrlSync\": false,\n        \"type\": \"custom\"\n      }\n    ]\n  },\n  \"time\": {\n    \"from\": \"now-1h\",\n    \"to\": \"now\"\n  },\n  \"timepicker\": {},\n  \"timezone\": \"\",\n  \"title\": \"Controllers\",\n  \"uid\": \"-Yw9ShDnz\",\n  \"version\": 15\n}\n"
  },
  {
    "path": "website/content/en/v1.9/getting-started/getting-started-with-karpenter/karpenter-performance-dashboard.json",
    "content": "{\n    \"annotations\": {\n      \"list\": [\n        {\n          \"builtIn\": 1,\n          \"datasource\": \"-- Grafana --\",\n          \"enable\": true,\n          \"hide\": true,\n          \"iconColor\": \"rgba(0, 211, 255, 1)\",\n          \"name\": \"Annotations & Alerts\",\n          \"target\": {\n            \"limit\": 100,\n            \"matchAny\": false,\n            \"tags\": [],\n            \"type\": \"dashboard\"\n          },\n          \"type\": \"dashboard\"\n        }\n      ]\n    },\n    \"editable\": true,\n    \"fiscalYearStartMonth\": 0,\n    \"graphTooltip\": 0,\n    \"id\": 33,\n    \"links\": [],\n    \"liveNow\": true,\n    \"panels\": [\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisBorderShow\": false,\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"\",\n              \"axisPlacement\": \"auto\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 0,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"insertNulls\": false,\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"never\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"none\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            },\n            \"unit\": \"s\"\n          },\n          \"overrides\": []\n        },\n        \"gridPos\": {\n          \"h\": 9,\n          \"w\": 24,\n          \"x\": 0,\n          \"y\": 0\n        },\n        \"id\": 4,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [\n              \"max\"\n            ],\n            \"displayMode\": \"table\",\n            \"placement\": \"right\",\n            \"showLegend\": true\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"max(karpenter_nodes_termination_duration_seconds{quantile=\\\"0\\\"})\",\n            \"legendFormat\": \"Min\",\n            \"range\": true,\n            \"refId\": \"A\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"max(karpenter_nodes_termination_duration_seconds{quantile=\\\"0.5\\\"})\",\n            \"hide\": false,\n            \"legendFormat\": \"P50\",\n            \"range\": true,\n            \"refId\": \"B\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"max(karpenter_nodes_termination_duration_seconds{quantile=\\\"0.9\\\"})\",\n            \"hide\": false,\n            \"legendFormat\": \"P90\",\n            \"range\": true,\n            \"refId\": \"C\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"max(karpenter_nodes_termination_duration_seconds{quantile=\\\"0.99\\\"})\",\n            \"hide\": false,\n            \"legendFormat\": \"P99\",\n            \"range\": true,\n            \"refId\": \"D\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"max(karpenter_nodes_termination_duration_seconds{quantile=\\\"1\\\"})\",\n            \"hide\": false,\n            \"legendFormat\": \"Max\",\n            \"range\": true,\n            \"refId\": \"E\"\n          }\n        ],\n        \"title\": \"Node Termination Latency\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisBorderShow\": false,\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"\",\n              \"axisPlacement\": \"auto\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 10,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"insertNulls\": false,\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"never\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"none\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"min\": 0,\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            },\n            \"unit\": \"s\"\n          },\n          \"overrides\": []\n        },\n        \"gridPos\": {\n          \"h\": 8,\n          \"w\": 24,\n          \"x\": 0,\n          \"y\": 9\n        },\n        \"id\": 2,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [\n              \"max\"\n            ],\n            \"displayMode\": \"table\",\n            \"placement\": \"right\",\n            \"showLegend\": true\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"max(karpenter_pods_startup_duration_seconds{quantile=\\\"0\\\"})\",\n            \"format\": \"time_series\",\n            \"legendFormat\": \"Min\",\n            \"range\": true,\n            \"refId\": \"Minimum\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"max(karpenter_pods_startup_duration_seconds{quantile=\\\"0.5\\\"})\",\n            \"hide\": false,\n            \"legendFormat\": \"P50\",\n            \"range\": true,\n            \"refId\": \"Median\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"max(karpenter_pods_startup_duration_seconds{quantile=\\\"0.9\\\"})\",\n            \"hide\": false,\n            \"legendFormat\": \"P90\",\n            \"range\": true,\n            \"refId\": \"P90\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"max(karpenter_pods_startup_duration_seconds{quantile=\\\"0.99\\\"})\",\n            \"hide\": false,\n            \"legendFormat\": \"P99\",\n            \"range\": true,\n            \"refId\": \"P99\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"max(karpenter_pods_startup_duration_seconds{quantile=\\\"1\\\"})\",\n            \"hide\": false,\n            \"legendFormat\": \"Max\",\n            \"range\": true,\n            \"refId\": \"Maximum\"\n          }\n        ],\n        \"title\": \"Pod Startup Latency\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisBorderShow\": false,\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"\",\n              \"axisPlacement\": \"auto\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 10,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"insertNulls\": false,\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"never\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"none\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            },\n            \"unit\": \"s\"\n          },\n          \"overrides\": []\n        },\n        \"gridPos\": {\n          \"h\": 8,\n          \"w\": 13,\n          \"x\": 0,\n          \"y\": 17\n        },\n        \"id\": 6,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [],\n            \"displayMode\": \"list\",\n            \"placement\": \"bottom\",\n            \"showLegend\": true\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"histogram_quantile(0, rate(controller_runtime_reconcile_time_seconds_bucket{controller=\\\"$controller\\\"}[10m]))\",\n            \"hide\": false,\n            \"legendFormat\": \"Min\",\n            \"range\": true,\n            \"refId\": \"Minimum\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"histogram_quantile(0.5, rate(controller_runtime_reconcile_time_seconds_bucket{controller=\\\"$controller\\\"}[10m]))\",\n            \"legendFormat\": \"P50\",\n            \"range\": true,\n            \"refId\": \"Median\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"histogram_quantile(0.9, rate(controller_runtime_reconcile_time_seconds_bucket{controller=\\\"$controller\\\"}[10m]))\",\n            \"hide\": false,\n            \"legendFormat\": \"P90\",\n            \"range\": true,\n            \"refId\": \"P90\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"histogram_quantile(0.99, rate(controller_runtime_reconcile_time_seconds_bucket{controller=\\\"$controller\\\"}[10m]))\",\n            \"hide\": false,\n            \"legendFormat\": \"P99\",\n            \"range\": true,\n            \"refId\": \"P99\"\n          },\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"histogram_quantile(1, rate(controller_runtime_reconcile_time_seconds_bucket{controller=\\\"$controller\\\"}[10m]))\",\n            \"hide\": false,\n            \"legendFormat\": \"Max\",\n            \"range\": true,\n            \"refId\": \"Maximum\"\n          }\n        ],\n        \"title\": \"Controller Reconciliation Latency [$controller]\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"thresholds\"\n            },\n            \"mappings\": [],\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            },\n            \"unit\": \"reqps\"\n          },\n          \"overrides\": []\n        },\n        \"gridPos\": {\n          \"h\": 8,\n          \"w\": 11,\n          \"x\": 13,\n          \"y\": 17\n        },\n        \"id\": 8,\n        \"options\": {\n          \"displayMode\": \"gradient\",\n          \"maxVizHeight\": 300,\n          \"minVizHeight\": 10,\n          \"minVizWidth\": 0,\n          \"namePlacement\": \"auto\",\n          \"orientation\": \"horizontal\",\n          \"reduceOptions\": {\n            \"calcs\": [\n              \"lastNotNull\"\n            ],\n            \"fields\": \"\",\n            \"values\": false\n          },\n          \"showUnfilled\": true,\n          \"sizing\": \"auto\",\n          \"valueMode\": \"color\"\n        },\n        \"pluginVersion\": \"11.1.0\",\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"${datasource}\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"sum(rate(controller_runtime_reconcile_total{job=\\\"karpenter\\\"}[10m])) by (controller)\",\n            \"legendFormat\": \"{{controller}}\",\n            \"range\": true,\n            \"refId\": \"A\"\n          }\n        ],\n        \"title\": \"Controller Reconciliation Rate\",\n        \"type\": \"bargauge\"\n      }\n    ],\n    \"refresh\": \"5s\",\n    \"schemaVersion\": 39,\n    \"tags\": [],\n    \"templating\": {\n      \"list\": [\n        {\n          \"current\": {\n            \"selected\": false,\n            \"text\": \"Prometheus\",\n            \"value\": \"prometheus\"\n          },\n          \"hide\": 0,\n          \"includeAll\": false,\n          \"label\": \"Data Source\",\n          \"multi\": false,\n          \"name\": \"datasource\",\n          \"options\": [],\n          \"query\": \"prometheus\",\n          \"refresh\": 1,\n          \"regex\": \"\",\n          \"skipUrlSync\": false,\n          \"type\": \"datasource\"\n        },\n        {\n          \"current\": {\n            \"selected\": false,\n            \"text\": \"disruption\",\n            \"value\": \"disruption\"\n          },\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"definition\": \"label_values(controller_runtime_reconcile_time_seconds_count{job=\\\"karpenter\\\"}, controller)\",\n          \"hide\": 0,\n          \"includeAll\": false,\n          \"multi\": false,\n          \"name\": \"controller\",\n          \"options\": [],\n          \"query\": {\n            \"query\": \"label_values(controller_runtime_reconcile_time_seconds_count{job=\\\"karpenter\\\"}, controller)\",\n            \"refId\": \"StandardVariableQuery\"\n          },\n          \"refresh\": 2,\n          \"regex\": \"\",\n          \"skipUrlSync\": false,\n          \"sort\": 0,\n          \"type\": \"query\"\n        }\n      ]\n    },\n    \"time\": {\n      \"from\": \"now-3h\",\n      \"to\": \"now\"\n    },\n    \"timepicker\": {},\n    \"timezone\": \"\",\n    \"title\": \"Karpenter Performance v1\",\n    \"uid\": \"fdusq1f2alerke\",\n    \"version\": 3,\n    \"weekStart\": \"\"\n  }\n"
  },
  {
    "path": "website/content/en/v1.9/getting-started/getting-started-with-karpenter/prometheus-values.yaml",
    "content": "alertmanager:\n  persistentVolume:\n    enabled: false\n\nserver:\n  fullnameOverride: prometheus-server\n  persistentVolume:\n    enabled: false\n\nextraScrapeConfigs: |\n    - job_name: karpenter\n      kubernetes_sd_configs:\n      - role: endpoints\n        namespaces:\n          names:\n          - $KARPENTER_NAMESPACE\n      relabel_configs:\n      - source_labels:\n        - __meta_kubernetes_endpoints_name\n        - __meta_kubernetes_endpoint_port_name\n        action: keep\n        regex: karpenter;http-metrics\n"
  },
  {
    "path": "website/content/en/v1.9/getting-started/getting-started-with-karpenter/scripts/step01-config.sh",
    "content": "export AWS_PARTITION=\"aws\" # if you are not using standard partitions, you may need to configure to aws-cn / aws-us-gov\nexport CLUSTER_NAME=\"${USER}-karpenter-demo\"\nexport AWS_DEFAULT_REGION=\"us-west-2\"\nexport AWS_ACCOUNT_ID=\"$(aws sts get-caller-identity --query Account --output text)\"\nexport TEMPOUT=\"$(mktemp)\"\nexport ALIAS_VERSION=\"$(aws ssm get-parameter --name \"/aws/service/eks/optimized-ami/${K8S_VERSION}/amazon-linux-2023/x86_64/standard/recommended/image_id\" --query Parameter.Value | xargs aws ec2 describe-images --query 'Images[0].Name' --image-ids | sed -r 's/^.*(v[[:digit:]]+).*$/\\1/')\"\n"
  },
  {
    "path": "website/content/en/v1.9/getting-started/getting-started-with-karpenter/scripts/step02-create-cluster-fargate.sh",
    "content": "curl -fsSL https://raw.githubusercontent.com/aws/karpenter-provider-aws/v\"${KARPENTER_VERSION}\"/website/content/en/preview/getting-started/getting-started-with-karpenter/cloudformation.yaml  > $TEMPOUT \\\n&& aws cloudformation deploy \\\n  --stack-name \"Karpenter-${CLUSTER_NAME}\" \\\n  --template-file \"${TEMPOUT}\" \\\n  --capabilities CAPABILITY_NAMED_IAM \\\n  --parameter-overrides \"ClusterName=${CLUSTER_NAME}\"\n\neksctl create cluster -f - <<EOF\n---\napiVersion: eksctl.io/v1alpha5\nkind: ClusterConfig\nmetadata:\n  name: ${CLUSTER_NAME}\n  region: ${AWS_DEFAULT_REGION}\n  version: \"${K8S_VERSION}\"\n  tags:\n    karpenter.sh/discovery: ${CLUSTER_NAME}\n\niam:\n  withOIDC: true\n  serviceAccounts:\n  - metadata:\n      name: karpenter\n      namespace: \"${KARPENTER_NAMESPACE}\"\n    roleName: ${CLUSTER_NAME}-karpenter\n    attachPolicyARNs:\n    - arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:policy/KarpenterControllerNodeLifecyclePolicy-${CLUSTER_NAME}\n    - arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:policy/KarpenterControllerIAMIntegrationPolicy-${CLUSTER_NAME}\n    - arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:policy/KarpenterControllerEKSIntegrationPolicy-${CLUSTER_NAME}\n    - arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:policy/KarpenterControllerInterruptionPolicy-${CLUSTER_NAME}\n    - arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:policy/KarpenterControllerResourceDiscoveryPolicy-${CLUSTER_NAME}\n    roleOnly: true\n\niamIdentityMappings:\n- arn: \"arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/KarpenterNodeRole-${CLUSTER_NAME}\"\n  username: system:node:{{EC2PrivateDNSName}}\n  groups:\n  - system:bootstrappers\n  - system:nodes\n  ## If you intend to run Windows workloads, the kube-proxy group should be specified.\n  # For more information, see https://github.com/aws/karpenter/issues/5099.\n  # - eks:kube-proxy-windows\n\nfargateProfiles:\n- name: karpenter\n  selectors:\n  - namespace: \"${KARPENTER_NAMESPACE}\"\nEOF\n\nexport CLUSTER_ENDPOINT=\"$(aws eks describe-cluster --name ${CLUSTER_NAME} --query \"cluster.endpoint\" --output text)\"\nexport KARPENTER_IAM_ROLE_ARN=\"arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/${CLUSTER_NAME}-karpenter\"\n\necho $CLUSTER_ENDPOINT $KARPENTER_IAM_ROLE_ARN\n"
  },
  {
    "path": "website/content/en/v1.9/getting-started/getting-started-with-karpenter/scripts/step02-create-cluster.sh",
    "content": "curl -fsSL https://raw.githubusercontent.com/aws/karpenter-provider-aws/v\"${KARPENTER_VERSION}\"/website/content/en/preview/getting-started/getting-started-with-karpenter/cloudformation.yaml  > \"${TEMPOUT}\" \\\n&& aws cloudformation deploy \\\n  --stack-name \"Karpenter-${CLUSTER_NAME}\" \\\n  --template-file \"${TEMPOUT}\" \\\n  --capabilities CAPABILITY_NAMED_IAM \\\n  --parameter-overrides \"ClusterName=${CLUSTER_NAME}\"\n\neksctl create cluster -f - <<EOF\n---\napiVersion: eksctl.io/v1alpha5\nkind: ClusterConfig\nmetadata:\n  name: ${CLUSTER_NAME}\n  region: ${AWS_DEFAULT_REGION}\n  version: \"${K8S_VERSION}\"\n  tags:\n    karpenter.sh/discovery: ${CLUSTER_NAME}\n\niam:\n  withOIDC: true\n  podIdentityAssociations:\n  - namespace: \"${KARPENTER_NAMESPACE}\"\n    serviceAccountName: karpenter\n    roleName: ${CLUSTER_NAME}-karpenter\n    permissionPolicyARNs:\n    - arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:policy/KarpenterControllerNodeLifecyclePolicy-${CLUSTER_NAME}\n    - arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:policy/KarpenterControllerIAMIntegrationPolicy-${CLUSTER_NAME}\n    - arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:policy/KarpenterControllerEKSIntegrationPolicy-${CLUSTER_NAME}\n    - arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:policy/KarpenterControllerInterruptionPolicy-${CLUSTER_NAME}\n    - arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:policy/KarpenterControllerResourceDiscoveryPolicy-${CLUSTER_NAME}\n\niamIdentityMappings:\n- arn: \"arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/KarpenterNodeRole-${CLUSTER_NAME}\"\n  username: system:node:{{EC2PrivateDNSName}}\n  groups:\n  - system:bootstrappers\n  - system:nodes\n  ## If you intend to run Windows workloads, the kube-proxy group should be specified.\n  # For more information, see https://github.com/aws/karpenter/issues/5099.\n  # - eks:kube-proxy-windows\n\nmanagedNodeGroups:\n- instanceType: m5.large\n  amiFamily: AmazonLinux2023\n  name: ${CLUSTER_NAME}-ng\n  desiredCapacity: 2\n  minSize: 1\n  maxSize: 10\n\naddons:\n- name: eks-pod-identity-agent\nEOF\n\nexport CLUSTER_ENDPOINT=\"$(aws eks describe-cluster --name \"${CLUSTER_NAME}\" --query \"cluster.endpoint\" --output text)\"\nexport KARPENTER_IAM_ROLE_ARN=\"arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/${CLUSTER_NAME}-karpenter\"\n\necho \"${CLUSTER_ENDPOINT} ${KARPENTER_IAM_ROLE_ARN}\"\n"
  },
  {
    "path": "website/content/en/v1.9/getting-started/getting-started-with-karpenter/scripts/step03-iam-cloud-formation.sh",
    "content": "TEMPOUT=\"$(mktemp)\"\n\ncurl -fsSL https://raw.githubusercontent.com/aws/karpenter-provider-aws/v\"${KARPENTER_VERSION}\"/website/content/en/preview/getting-started/getting-started-with-karpenter/cloudformation.yaml  > \"${TEMPOUT}\" \\\n&& aws cloudformation deploy \\\n  --stack-name \"Karpenter-${CLUSTER_NAME}\" \\\n  --template-file \"${TEMPOUT}\" \\\n  --capabilities CAPABILITY_NAMED_IAM \\\n  --parameter-overrides \"ClusterName=${CLUSTER_NAME}\"\n"
  },
  {
    "path": "website/content/en/v1.9/getting-started/getting-started-with-karpenter/scripts/step04-grant-access.sh",
    "content": "eksctl create iamidentitymapping \\\n  --username system:node:{{EC2PrivateDNSName}} \\\n  --cluster \"${CLUSTER_NAME}\" \\\n  --arn \"arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/KarpenterNodeRole-${CLUSTER_NAME}\" \\\n  --group system:bootstrappers \\\n  --group system:nodes\n"
  },
  {
    "path": "website/content/en/v1.9/getting-started/getting-started-with-karpenter/scripts/step05-controller-iam.sh",
    "content": "eksctl create iamserviceaccount \\\n  --cluster \"${CLUSTER_NAME}\" --name karpenter --namespace \"${KARPENTER_NAMESPACE}\" \\\n  --role-name \"${CLUSTER_NAME}-karpenter\" \\\n  --attach-policy-arn \"arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:policy/KarpenterControllerPolicy-${CLUSTER_NAME}\" \\\n  --role-only \\\n  --approve\n\nexport KARPENTER_IAM_ROLE_ARN=\"arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/${CLUSTER_NAME}-karpenter\"\n"
  },
  {
    "path": "website/content/en/v1.9/getting-started/getting-started-with-karpenter/scripts/step06-add-spot-role.sh",
    "content": "aws iam create-service-linked-role --aws-service-name spot.amazonaws.com || true\n# If the role has already been successfully created, you will see:\n# An error occurred (InvalidInput) when calling the CreateServiceLinkedRole operation: Service role name AWSServiceRoleForEC2Spot has been taken in this account, please try a different suffix.\n"
  },
  {
    "path": "website/content/en/v1.9/getting-started/getting-started-with-karpenter/scripts/step08-apply-helm-chart-fargate.sh",
    "content": "# Logout of helm registry to perform an unauthenticated pull against the public ECR\nhelm registry logout public.ecr.aws\n\nhelm upgrade --install karpenter oci://public.ecr.aws/karpenter/karpenter --version \"${KARPENTER_VERSION}\" --namespace \"${KARPENTER_NAMESPACE}\" --create-namespace \\\n  --set \"settings.clusterName=${CLUSTER_NAME}\" \\\n  --set \"settings.interruptionQueue=${CLUSTER_NAME}\" \\\n  --set controller.resources.requests.cpu=1 \\\n  --set controller.resources.requests.memory=1Gi \\\n  --set controller.resources.limits.cpu=1 \\\n  --set controller.resources.limits.memory=1Gi \\\n  --set serviceAccount.annotations.\"eks\\.amazonaws\\.com/role-arn\"=\"arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/${CLUSTER_NAME}-karpenter\" \\\n  --wait\n"
  },
  {
    "path": "website/content/en/v1.9/getting-started/getting-started-with-karpenter/scripts/step08-apply-helm-chart.sh",
    "content": "# Logout of helm registry to perform an unauthenticated pull against the public ECR\nhelm registry logout public.ecr.aws\n\nhelm upgrade --install karpenter oci://public.ecr.aws/karpenter/karpenter --version \"${KARPENTER_VERSION}\" --namespace \"${KARPENTER_NAMESPACE}\" --create-namespace \\\n  --set \"settings.clusterName=${CLUSTER_NAME}\" \\\n  --set \"settings.interruptionQueue=${CLUSTER_NAME}\" \\\n  --set controller.resources.requests.cpu=1 \\\n  --set controller.resources.requests.memory=1Gi \\\n  --set controller.resources.limits.cpu=1 \\\n  --set controller.resources.limits.memory=1Gi \\\n  --wait\n"
  },
  {
    "path": "website/content/en/v1.9/getting-started/getting-started-with-karpenter/scripts/step09-add-prometheus-grafana.sh",
    "content": "helm repo add grafana-charts https://grafana.github.io/helm-charts\nhelm repo add prometheus-community https://prometheus-community.github.io/helm-charts\nhelm repo update\n\nkubectl create namespace monitoring\n\ncurl -fsSL https://raw.githubusercontent.com/aws/karpenter-provider-aws/v\"${KARPENTER_VERSION}\"/website/content/en/preview/getting-started/getting-started-with-karpenter/prometheus-values.yaml | envsubst | tee prometheus-values.yaml\nhelm install --namespace monitoring prometheus prometheus-community/prometheus --values prometheus-values.yaml\n\ncurl -fsSL https://raw.githubusercontent.com/aws/karpenter-provider-aws/v\"${KARPENTER_VERSION}\"/website/content/en/preview/getting-started/getting-started-with-karpenter/grafana-values.yaml | tee grafana-values.yaml\nhelm install --namespace monitoring grafana grafana-charts/grafana --values grafana-values.yaml\n"
  },
  {
    "path": "website/content/en/v1.9/getting-started/getting-started-with-karpenter/scripts/step10-add-grafana-port-forward.sh",
    "content": "kubectl port-forward --namespace monitoring svc/grafana 3000:80\n"
  },
  {
    "path": "website/content/en/v1.9/getting-started/getting-started-with-karpenter/scripts/step11-grafana-get-password.sh",
    "content": "kubectl get secret --namespace monitoring grafana -o jsonpath=\"{.data.admin-password}\" | base64 --decode\n"
  },
  {
    "path": "website/content/en/v1.9/getting-started/getting-started-with-karpenter/scripts/step12-add-nodepool.sh",
    "content": "cat <<EOF | envsubst | kubectl apply -f -\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\nspec:\n  template:\n    spec:\n      requirements:\n        - key: kubernetes.io/arch\n          operator: In\n          values: [\"amd64\"]\n        - key: kubernetes.io/os\n          operator: In\n          values: [\"linux\"]\n        - key: karpenter.sh/capacity-type\n          operator: In\n          values: [\"on-demand\"]\n        - key: karpenter.k8s.aws/instance-category\n          operator: In\n          values: [\"c\", \"m\", \"r\"]\n        - key: karpenter.k8s.aws/instance-generation\n          operator: Gt\n          values: [\"2\"]\n      nodeClassRef:\n        group: karpenter.k8s.aws\n        kind: EC2NodeClass\n        name: default\n      expireAfter: 720h # 30 * 24h = 720h\n  limits:\n    cpu: 1000\n  disruption:\n    consolidationPolicy: WhenEmptyOrUnderutilized\n    consolidateAfter: 1m\n---\napiVersion: karpenter.k8s.aws/v1\nkind: EC2NodeClass\nmetadata:\n  name: default\nspec:\n  role: \"KarpenterNodeRole-${CLUSTER_NAME}\" # replace with your cluster name\n  amiSelectorTerms:\n    - alias: \"al2023@${ALIAS_VERSION}\"\n  subnetSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\" # replace with your cluster name\n  securityGroupSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\" # replace with your cluster name\nEOF\n"
  },
  {
    "path": "website/content/en/v1.9/getting-started/getting-started-with-karpenter/scripts/step13-automatic-node-provisioning.sh",
    "content": "cat <<EOF | kubectl apply -f -\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: inflate\nspec:\n  replicas: 0\n  selector:\n    matchLabels:\n      app: inflate\n  template:\n    metadata:\n      labels:\n        app: inflate\n    spec:\n      terminationGracePeriodSeconds: 0\n      securityContext:\n        runAsUser: 1000\n        runAsGroup: 3000\n        fsGroup: 2000\n      containers:\n      - name: inflate\n        image: public.ecr.aws/eks-distro/kubernetes/pause:3.7\n        resources:\n          requests:\n            cpu: 1\n        securityContext:\n          allowPrivilegeEscalation: false\nEOF\n\nkubectl scale deployment inflate --replicas 5\nkubectl logs -f -n \"${KARPENTER_NAMESPACE}\" -l app.kubernetes.io/name=karpenter -c controller\n"
  },
  {
    "path": "website/content/en/v1.9/getting-started/getting-started-with-karpenter/scripts/step14-deprovisioning.sh",
    "content": "kubectl delete deployment inflate\nkubectl logs -f -n \"${KARPENTER_NAMESPACE}\" -l app.kubernetes.io/name=karpenter -c controller\n"
  },
  {
    "path": "website/content/en/v1.9/getting-started/getting-started-with-karpenter/scripts/step15-apply-flowschemas.sh",
    "content": "cat <<EOF | envsubst | kubectl apply -f -\n---\napiVersion: flowcontrol.apiserver.k8s.io/v1\nkind: FlowSchema\nmetadata:\n  name: karpenter-leader-election\nspec:\n  distinguisherMethod:\n    type: ByUser\n  matchingPrecedence: 200\n  priorityLevelConfiguration:\n    name: leader-election\n  rules:\n  - resourceRules:\n    - apiGroups:\n      - coordination.k8s.io\n      namespaces:\n      - '*'\n      resources:\n      - leases\n      verbs:\n      - get\n      - create\n      - update\n    subjects:\n    - kind: ServiceAccount\n      serviceAccount:\n        name: karpenter\n        namespace: \"${KARPENTER_NAMESPACE}\"\n\n---\napiVersion: flowcontrol.apiserver.k8s.io/v1\nkind: FlowSchema\nmetadata:\n  name: karpenter-workload\nspec:\n  distinguisherMethod:\n    type: ByUser\n  matchingPrecedence: 1000\n  priorityLevelConfiguration:\n    name: workload-high\n  rules:\n  - nonResourceRules:\n    - nonResourceURLs:\n      - '*'\n      verbs:\n      - '*'\n    resourceRules:\n    - apiGroups:\n      - '*'\n      clusterScope: true\n      namespaces:\n      - '*'\n      resources:\n      - '*'\n      verbs:\n      - '*'\n    subjects:\n    - kind: ServiceAccount\n      serviceAccount:\n        name: karpenter\n        namespace: \"${KARPENTER_NAMESPACE}\"\nEOF\n"
  },
  {
    "path": "website/content/en/v1.9/getting-started/getting-started-with-karpenter/scripts/step16-delete-node.sh",
    "content": "kubectl delete node \"${NODE_NAME}\"\n"
  },
  {
    "path": "website/content/en/v1.9/getting-started/getting-started-with-karpenter/scripts/step17-cleanup.sh",
    "content": "helm uninstall karpenter --namespace \"${KARPENTER_NAMESPACE}\"\naws cloudformation delete-stack --stack-name \"Karpenter-${CLUSTER_NAME}\"\naws ec2 describe-launch-templates --filters \"Name=tag:karpenter.k8s.aws/cluster,Values=${CLUSTER_NAME}\" |\n    jq -r \".LaunchTemplates[].LaunchTemplateName\" |\n    xargs -I{} aws ec2 delete-launch-template --launch-template-name {}\neksctl delete cluster --name \"${CLUSTER_NAME}\"\n"
  },
  {
    "path": "website/content/en/v1.9/getting-started/migrating-from-cas/_index.md",
    "content": "---\ntitle: \"Migrating from Cluster Autoscaler\"\nlinkTitle: \"Migrating from Cluster Autoscaler\"\nweight: 10\ndescription: >\n  Migrate to Karpenter from Cluster Autoscaler\n---\n\nThis guide will show you how to switch from the [Kubernetes Cluster Autoscaler](https://github.com/kubernetes/autoscaler) to Karpenter for automatic node provisioning.\nWe will make the following assumptions in this guide\n\n* You will use an existing EKS cluster\n* You will use existing VPC and subnets\n* You will use existing security groups\n* Your nodes are part of one or more node groups\n* Your workloads have pod disruption budgets that adhere to [EKS best practices](https://aws.github.io/aws-eks-best-practices/karpenter/)\n* Your cluster has an [OIDC provider](https://docs.aws.amazon.com/eks/latest/userguide/enable-iam-roles-for-service-accounts.html) for service accounts\n\nThis guide will also assume you have the `aws` CLI installed.\nYou can also perform many of these steps in the console, but we will use the command line for simplicity.\n\nSet a variable for your cluster name.\n\n```bash\nKARPENTER_NAMESPACE=kube-system\nCLUSTER_NAME=<your cluster name>\n```\n\nSet other variables from your cluster configuration.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step01-env.sh\" language=\"bash\" %}}\n\nUse that information to create our IAM roles, inline policy, and trust relationship.\n\n## Create IAM roles\n\nTo get started with our migration we first need to create two new IAM roles for nodes provisioned with Karpenter and the Karpenter controller.\n\nTo create the Karpenter node role we will use the following policy and commands.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step02-node-iam.sh\" language=\"bash\" %}}\n\nNow attach the required policies to the role\n\n{{% script file=\"./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step03-node-policies.sh\" language=\"bash\" %}}\n\nNow we need to create an IAM role that the Karpenter controller will use to provision new instances.\nThe 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.\n\nIf you have another option for using IAM credentials with workloads (e.g. [kube2iam](https://github.com/jtblin/kube2iam)) your steps will be different.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step04-controller-iam.sh\" language=\"bash\" %}}\n\n## Add tags to subnets and security groups\n\nWe need to add tags to our nodegroup subnets so Karpenter will know which subnets to use.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step05-tag-subnets.sh\" language=\"bash\" %}}\n\nAdd tags to our security groups.\nThis command only tags the security groups for the first nodegroup in the cluster.\nIf you have multiple nodegroups or multiple security groups you will need to decide which one Karpenter should use.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step06-tag-security-groups.sh\" language=\"bash\" %}}\n\n## Update aws-auth ConfigMap\n\nWe need to allow nodes that are using the node IAM role we just created to join the cluster.\nTo do that we have to modify the `aws-auth` ConfigMap in the cluster.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step07-edit-aws-auth.sh\" language=\"bash\" %}}\n\nYou will need to add a section to the mapRoles that looks something like this.\nReplace the `${AWS_PARTITION}` variable with the account partition, `${AWS_ACCOUNT_ID}` variable with your account ID, and `${CLUSTER_NAME}` variable with the cluster name, but do not replace the `{{EC2PrivateDNSName}}`.\n\n```yaml\n- groups:\n  - system:bootstrappers\n  - system:nodes\n  ## If you intend to run Windows workloads, the kube-proxy group should be specified.\n  # For more information, see https://github.com/aws/karpenter/issues/5099.\n  # - eks:kube-proxy-windows\n  rolearn: arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/KarpenterNodeRole-${CLUSTER_NAME}\n  username: system:node:{{EC2PrivateDNSName}}\n```\n\nThe full aws-auth configmap should have two groups.\nOne for your Karpenter node role and one for your existing node group.\n\n## Deploy Karpenter\n\nFirst set the Karpenter release you want to deploy.\n\n```bash\nexport KARPENTER_VERSION=\"1.9.0\"\n```\n\nWe can now generate a full Karpenter deployment yaml from the Helm chart.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step08-generate-chart.sh\" language=\"bash\" %}}\n\nModify the following lines in the karpenter.yaml file.\n\n### Set node affinity\n\nEdit the karpenter.yaml file and find the karpenter deployment affinity rules.\nModify the affinity so karpenter will run on one of the existing node group nodes.\n\nThe rules should look something like this.\nModify the value to match your `$NODEGROUP`, one node group per line.\n\n```yaml\naffinity:\n  nodeAffinity:\n    requiredDuringSchedulingIgnoredDuringExecution:\n      nodeSelectorTerms:\n      - matchExpressions:\n        - key: karpenter.sh/nodepool\n          operator: DoesNotExist\n        - key: eks.amazonaws.com/nodegroup\n          operator: In\n          values:\n          - ${NODEGROUP}\n  podAntiAffinity:\n    requiredDuringSchedulingIgnoredDuringExecution:\n      - topologyKey: \"kubernetes.io/hostname\"\n```\n\nNow that our deployment is ready we can create the karpenter namespace, create the NodePool CRD, and then deploy the rest of the karpenter resources.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step09-deploy.sh\" language=\"bash\" %}}\n\n## Create default NodePool\n\nWe need to create a default NodePool so Karpenter knows what types of nodes we want for unscheduled workloads. You can refer to some of the [example NodePool](https://github.com/aws/karpenter/tree/v1.9.0/examples/v1) for specific needs.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step10-create-nodepool.sh\" language=\"bash\" %}}\n\n## Set nodeAffinity for critical workloads (optional)\n\nYou may also want to set a nodeAffinity for other critical cluster workloads.\n\nSome examples are\n\n* coredns\n* metric-server\n\nYou can edit them with `kubectl edit deploy ...` and you should add node affinity for your static node group instances.\nModify the value to match your `$NODEGROUP`, one node group per line.\n\n```yaml\naffinity:\n  nodeAffinity:\n    requiredDuringSchedulingIgnoredDuringExecution:\n      nodeSelectorTerms:\n      - matchExpressions:\n        - key: eks.amazonaws.com/nodegroup\n          operator: In\n          values:\n          - ${NODEGROUP}\n```\n\n## Remove CAS\n\nNow that karpenter is running we can disable the cluster autoscaler.\nTo do that we will scale the number of replicas to zero.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step11-scale-cas.sh\" language=\"bash\" %}}\n\nTo 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.\n\n> 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.**\n\nIf you have a single multi-AZ node group, we suggest a minimum of 2 instances.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step12-scale-single-ng.sh\" language=\"bash\" %}}\n\nOr, if you have multiple single-AZ node groups, we suggest a minimum of 1 instance each.\n\n{{% script file=\"./content/en/{VERSION}/getting-started/migrating-from-cas/scripts/step12-scale-multiple-ng.sh\" language=\"bash\" %}}\n\n{{% alert title=\"Note\" color=\"warning\" %}}\nIf 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.\n{{% /alert %}}\n\n## Verify Karpenter\n\nAs nodegroup nodes are drained you can verify that Karpenter is creating nodes for your workloads.\n\n```bash\nkubectl logs -f -n \"${KARPENTER_NAMESPACE}\" -l app.kubernetes.io/name=karpenter -c controller\n```\n\nYou should also see new nodes created in your cluster as the old nodes are removed\n\n```bash\nkubectl get nodes\n```\n"
  },
  {
    "path": "website/content/en/v1.9/getting-started/migrating-from-cas/scripts/step01-env.sh",
    "content": "AWS_PARTITION=\"aws\" # if you are not using standard partitions, you may need to configure to aws-cn / aws-us-gov\nAWS_REGION=\"$(aws configure list | grep region | tr -s \" \" | cut -d\" \" -f3)\"\nOIDC_ENDPOINT=\"$(aws eks describe-cluster --name \"${CLUSTER_NAME}\" \\\n    --query \"cluster.identity.oidc.issuer\" --output text)\"\nAWS_ACCOUNT_ID=$(aws sts get-caller-identity --query 'Account' \\\n    --output text)\nK8S_VERSION=$(aws eks describe-cluster --name \"${CLUSTER_NAME}\" --query \"cluster.version\" --output text)\nALIAS_VERSION=\"$(aws ssm get-parameter --name \"/aws/service/eks/optimized-ami/${K8S_VERSION}/amazon-linux-2023/x86_64/standard/recommended/image_id\" --query Parameter.Value | xargs aws ec2 describe-images --query 'Images[0].Name' --image-ids | sed -r 's/^.*(v[[:digit:]]+).*$/\\1/')\"\n"
  },
  {
    "path": "website/content/en/v1.9/getting-started/migrating-from-cas/scripts/step02-node-iam.sh",
    "content": "echo '{\n    \"Version\": \"2012-10-17\",\n    \"Statement\": [\n        {\n            \"Effect\": \"Allow\",\n            \"Principal\": {\n                \"Service\": \"ec2.amazonaws.com\"\n            },\n            \"Action\": \"sts:AssumeRole\"\n        }\n    ]\n}' > node-trust-policy.json\n\naws iam create-role --role-name \"KarpenterNodeRole-${CLUSTER_NAME}\" \\\n    --assume-role-policy-document file://node-trust-policy.json\n"
  },
  {
    "path": "website/content/en/v1.9/getting-started/migrating-from-cas/scripts/step03-node-policies.sh",
    "content": "aws iam attach-role-policy --role-name \"KarpenterNodeRole-${CLUSTER_NAME}\" \\\n    --policy-arn \"arn:${AWS_PARTITION}:iam::aws:policy/AmazonEKSWorkerNodePolicy\"\n\naws iam attach-role-policy --role-name \"KarpenterNodeRole-${CLUSTER_NAME}\" \\\n    --policy-arn \"arn:${AWS_PARTITION}:iam::aws:policy/AmazonEKS_CNI_Policy\"\n\naws iam attach-role-policy --role-name \"KarpenterNodeRole-${CLUSTER_NAME}\" \\\n    --policy-arn \"arn:${AWS_PARTITION}:iam::aws:policy/AmazonEC2ContainerRegistryPullOnly\"\n\naws iam attach-role-policy --role-name \"KarpenterNodeRole-${CLUSTER_NAME}\" \\\n    --policy-arn \"arn:${AWS_PARTITION}:iam::aws:policy/AmazonSSMManagedInstanceCore\"\n"
  },
  {
    "path": "website/content/en/v1.9/getting-started/migrating-from-cas/scripts/step04-controller-iam.sh",
    "content": "cat << EOF > controller-trust-policy.json\n{\n    \"Version\": \"2012-10-17\",\n    \"Statement\": [\n        {\n            \"Effect\": \"Allow\",\n            \"Principal\": {\n                \"Federated\": \"arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:oidc-provider/${OIDC_ENDPOINT#*//}\"\n            },\n            \"Action\": \"sts:AssumeRoleWithWebIdentity\",\n            \"Condition\": {\n                \"StringEquals\": {\n                    \"${OIDC_ENDPOINT#*//}:aud\": \"sts.amazonaws.com\",\n                    \"${OIDC_ENDPOINT#*//}:sub\": \"system:serviceaccount:${KARPENTER_NAMESPACE}:karpenter\"\n                }\n            }\n        }\n    ]\n}\nEOF\n\naws iam create-role --role-name \"KarpenterControllerRole-${CLUSTER_NAME}\" \\\n    --assume-role-policy-document file://controller-trust-policy.json\n\ncat << EOF > controller-policy.json\n{\n    \"Statement\": [\n        {\n            \"Action\": [\n                \"ssm:GetParameter\",\n                \"ec2:DescribeImages\",\n                \"ec2:RunInstances\",\n                \"ec2:DescribeSubnets\",\n                \"ec2:DescribeSecurityGroups\",\n                \"ec2:DescribeLaunchTemplates\",\n                \"ec2:DescribeInstances\",\n                \"ec2:DescribeInstanceTypes\",\n                \"ec2:DescribeInstanceTypeOfferings\",\n                \"ec2:DeleteLaunchTemplate\",\n                \"ec2:CreateTags\",\n                \"ec2:CreateLaunchTemplate\",\n                \"ec2:CreateFleet\",\n                \"ec2:DescribeSpotPriceHistory\",\n                \"pricing:GetProducts\"\n            ],\n            \"Effect\": \"Allow\",\n            \"Resource\": \"*\",\n            \"Sid\": \"Karpenter\"\n        },\n        {\n            \"Action\": \"ec2:TerminateInstances\",\n            \"Condition\": {\n                \"StringLike\": {\n                    \"ec2:ResourceTag/karpenter.sh/nodepool\": \"*\"\n                }\n            },\n            \"Effect\": \"Allow\",\n            \"Resource\": \"*\",\n            \"Sid\": \"ConditionalEC2Termination\"\n        },\n        {\n            \"Effect\": \"Allow\",\n            \"Action\": \"iam:PassRole\",\n            \"Resource\": \"arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/KarpenterNodeRole-${CLUSTER_NAME}\",\n            \"Sid\": \"PassNodeIAMRole\"\n        },\n        {\n            \"Effect\": \"Allow\",\n            \"Action\": \"eks:DescribeCluster\",\n            \"Resource\": \"arn:${AWS_PARTITION}:eks:${AWS_REGION}:${AWS_ACCOUNT_ID}:cluster/${CLUSTER_NAME}\",\n            \"Sid\": \"EKSClusterEndpointLookup\"\n        },\n        {\n            \"Sid\": \"AllowScopedInstanceProfileCreationActions\",\n            \"Effect\": \"Allow\",\n            \"Resource\": \"*\",\n            \"Action\": [\n                \"iam:CreateInstanceProfile\"\n            ],\n            \"Condition\": {\n                \"StringEquals\": {\n                    \"aws:RequestTag/kubernetes.io/cluster/${CLUSTER_NAME}\": \"owned\",\n                    \"aws:RequestTag/topology.kubernetes.io/region\": \"${AWS_REGION}\"\n                },\n                \"StringLike\": {\n                    \"aws:RequestTag/karpenter.k8s.aws/ec2nodeclass\": \"*\"\n                }\n            }\n        },\n        {\n            \"Sid\": \"AllowScopedInstanceProfileTagActions\",\n            \"Effect\": \"Allow\",\n            \"Resource\": \"*\",\n            \"Action\": [\n                \"iam:TagInstanceProfile\"\n            ],\n            \"Condition\": {\n                \"StringEquals\": {\n                    \"aws:ResourceTag/kubernetes.io/cluster/${CLUSTER_NAME}\": \"owned\",\n                    \"aws:ResourceTag/topology.kubernetes.io/region\": \"${AWS_REGION}\",\n                    \"aws:RequestTag/kubernetes.io/cluster/${CLUSTER_NAME}\": \"owned\",\n                    \"aws:RequestTag/topology.kubernetes.io/region\": \"${AWS_REGION}\"\n                },\n                \"StringLike\": {\n                    \"aws:ResourceTag/karpenter.k8s.aws/ec2nodeclass\": \"*\",\n                    \"aws:RequestTag/karpenter.k8s.aws/ec2nodeclass\": \"*\"\n                }\n            }\n        },\n        {\n            \"Sid\": \"AllowScopedInstanceProfileActions\",\n            \"Effect\": \"Allow\",\n            \"Resource\": \"*\",\n            \"Action\": [\n                \"iam:AddRoleToInstanceProfile\",\n                \"iam:RemoveRoleFromInstanceProfile\",\n                \"iam:DeleteInstanceProfile\"\n            ],\n            \"Condition\": {\n                \"StringEquals\": {\n                    \"aws:ResourceTag/kubernetes.io/cluster/${CLUSTER_NAME}\": \"owned\",\n                    \"aws:ResourceTag/topology.kubernetes.io/region\": \"${AWS_REGION}\"\n                },\n                \"StringLike\": {\n                    \"aws:ResourceTag/karpenter.k8s.aws/ec2nodeclass\": \"*\"\n                }\n            }\n        },\n        {\n            \"Sid\": \"AllowInstanceProfileReadActions\",\n            \"Effect\": \"Allow\",\n            \"Resource\": \"*\",\n            \"Action\": \"iam:GetInstanceProfile\"\n        },\n        {\n            \"Sid\": \"AllowUnscopedInstanceProfileListAction\",\n            \"Effect\": \"Allow\",\n            \"Resource\": \"*\",\n            \"Action\": \"iam:ListInstanceProfiles\"\n        }\n    ],\n    \"Version\": \"2012-10-17\"\n}\nEOF\n\naws iam put-role-policy --role-name \"KarpenterControllerRole-${CLUSTER_NAME}\" \\\n    --policy-name \"KarpenterControllerPolicy-${CLUSTER_NAME}\" \\\n    --policy-document file://controller-policy.json\n"
  },
  {
    "path": "website/content/en/v1.9/getting-started/migrating-from-cas/scripts/step05-tag-subnets.sh",
    "content": "for NODEGROUP in $(aws eks list-nodegroups --cluster-name \"${CLUSTER_NAME}\" --query 'nodegroups' --output text); do\n    aws ec2 create-tags \\\n        --tags \"Key=karpenter.sh/discovery,Value=${CLUSTER_NAME}\" \\\n        --resources $(aws eks describe-nodegroup --cluster-name \"${CLUSTER_NAME}\" \\\n        --nodegroup-name \"${NODEGROUP}\" --query 'nodegroup.subnets' --output text )\ndone\n"
  },
  {
    "path": "website/content/en/v1.9/getting-started/migrating-from-cas/scripts/step06-tag-security-groups.sh",
    "content": "NODEGROUP=$(aws eks list-nodegroups --cluster-name \"${CLUSTER_NAME}\" \\\n    --query 'nodegroups[0]' --output text)\n\nLAUNCH_TEMPLATE=$(aws eks describe-nodegroup --cluster-name \"${CLUSTER_NAME}\" \\\n    --nodegroup-name \"${NODEGROUP}\" --query 'nodegroup.launchTemplate.{id:id,version:version}' \\\n    --output text | tr -s \"\\t\" \",\")\n\n# If your EKS setup is configured to use only Cluster security group, then please execute -\n\nSECURITY_GROUPS=$(aws eks describe-cluster \\\n    --name \"${CLUSTER_NAME}\" --query \"cluster.resourcesVpcConfig.clusterSecurityGroupId\" --output text)\n\n# If your setup uses the security groups in the Launch template of a managed node group, then :\n\nSECURITY_GROUPS=\"$(aws ec2 describe-launch-template-versions \\\n    --launch-template-id \"${LAUNCH_TEMPLATE%,*}\" --versions \"${LAUNCH_TEMPLATE#*,}\" \\\n    --query 'LaunchTemplateVersions[0].LaunchTemplateData.[NetworkInterfaces[0].Groups||SecurityGroupIds]' \\\n    --output text)\"\n\naws ec2 create-tags \\\n    --tags \"Key=karpenter.sh/discovery,Value=${CLUSTER_NAME}\" \\\n    --resources \"${SECURITY_GROUPS}\"\n"
  },
  {
    "path": "website/content/en/v1.9/getting-started/migrating-from-cas/scripts/step07-edit-aws-auth.sh",
    "content": "kubectl edit configmap aws-auth -n kube-system\n"
  },
  {
    "path": "website/content/en/v1.9/getting-started/migrating-from-cas/scripts/step08-generate-chart.sh",
    "content": "helm template karpenter oci://public.ecr.aws/karpenter/karpenter --version \"${KARPENTER_VERSION}\" --namespace \"${KARPENTER_NAMESPACE}\" \\\n    --set \"settings.clusterName=${CLUSTER_NAME}\" \\\n    --set \"settings.interruptionQueue=${CLUSTER_NAME}\" \\\n    --set \"serviceAccount.annotations.eks\\.amazonaws\\.com/role-arn=arn:${AWS_PARTITION}:iam::${AWS_ACCOUNT_ID}:role/KarpenterControllerRole-${CLUSTER_NAME}\" \\\n    --set controller.resources.requests.cpu=1 \\\n    --set controller.resources.requests.memory=1Gi \\\n    --set controller.resources.limits.cpu=1 \\\n    --set controller.resources.limits.memory=1Gi > karpenter.yaml\n"
  },
  {
    "path": "website/content/en/v1.9/getting-started/migrating-from-cas/scripts/step09-deploy.sh",
    "content": "kubectl create namespace \"${KARPENTER_NAMESPACE}\" || true\nkubectl create -f \\\n    \"https://raw.githubusercontent.com/aws/karpenter-provider-aws/v${KARPENTER_VERSION}/pkg/apis/crds/karpenter.sh_nodepools.yaml\"\nkubectl create -f \\\n    \"https://raw.githubusercontent.com/aws/karpenter-provider-aws/v${KARPENTER_VERSION}/pkg/apis/crds/karpenter.k8s.aws_ec2nodeclasses.yaml\"\nkubectl create -f \\\n    \"https://raw.githubusercontent.com/aws/karpenter-provider-aws/v${KARPENTER_VERSION}/pkg/apis/crds/karpenter.sh_nodeclaims.yaml\"\nkubectl apply -f karpenter.yaml\n"
  },
  {
    "path": "website/content/en/v1.9/getting-started/migrating-from-cas/scripts/step10-create-nodepool.sh",
    "content": "cat <<EOF | envsubst | kubectl apply -f -\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\nspec:\n  template:\n    spec:\n      requirements:\n        - key: kubernetes.io/arch\n          operator: In\n          values: [\"amd64\"]\n        - key: kubernetes.io/os\n          operator: In\n          values: [\"linux\"]\n        - key: karpenter.sh/capacity-type\n          operator: In\n          values: [\"spot\"]\n        - key: karpenter.k8s.aws/instance-category\n          operator: In\n          values: [\"c\", \"m\", \"r\"]\n        - key: karpenter.k8s.aws/instance-generation\n          operator: Gt\n          values: [\"2\"]\n      nodeClassRef:\n        group: karpenter.k8s.aws\n        kind: EC2NodeClass\n        name: default\n      expireAfter: 720h # 30 * 24h = 720h\n  limits:\n    cpu: 1000\n  disruption:\n    consolidationPolicy: WhenEmptyOrUnderutilized\n    consolidateAfter: 1m\n---\napiVersion: karpenter.k8s.aws/v1\nkind: EC2NodeClass\nmetadata:\n  name: default\nspec:\n  role: \"KarpenterNodeRole-${CLUSTER_NAME}\" # replace with your cluster name\n  amiSelectorTerms:\n    - alias: \"al2023@${ALIAS_VERSION}\"\n  subnetSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\" # replace with your cluster name\n  securityGroupSelectorTerms:\n    - tags:\n        karpenter.sh/discovery: \"${CLUSTER_NAME}\" # replace with your cluster name\nEOF\n"
  },
  {
    "path": "website/content/en/v1.9/getting-started/migrating-from-cas/scripts/step11-scale-cas.sh",
    "content": "kubectl scale deploy/cluster-autoscaler -n kube-system --replicas=0\n"
  },
  {
    "path": "website/content/en/v1.9/getting-started/migrating-from-cas/scripts/step12-scale-multiple-ng.sh",
    "content": "for NODEGROUP in $(aws eks list-nodegroups --cluster-name \"${CLUSTER_NAME}\" \\\n    --query 'nodegroups' --output text); do aws eks update-nodegroup-config --cluster-name \"${CLUSTER_NAME}\" \\\n    --nodegroup-name \"${NODEGROUP}\" \\\n    --scaling-config \"minSize=1,maxSize=1,desiredSize=1\"\ndone\n"
  },
  {
    "path": "website/content/en/v1.9/getting-started/migrating-from-cas/scripts/step12-scale-single-ng.sh",
    "content": "aws eks update-nodegroup-config --cluster-name \"${CLUSTER_NAME}\" \\\n    --nodegroup-name \"${NODEGROUP}\" \\\n    --scaling-config \"minSize=2,maxSize=2,desiredSize=2\"\n"
  },
  {
    "path": "website/content/en/v1.9/reference/_index.md",
    "content": "---\ntitle: \"Reference\"\nlinkTitle: \"Reference\"\nweight: 50\ndescription: >\n  Reference documentation for Karpenter\n---"
  },
  {
    "path": "website/content/en/v1.9/reference/cloudformation.md",
    "content": "---\ntitle: \"CloudFormation\"\nlinkTitle: \"CloudFormation\"\nweight: 5\ndescription: >\n  A description of the Getting Started CloudFormation file and permissions\n---\nThe [Getting Started with Karpenter]({{< relref \"../getting-started/getting-started-with-karpenter\" >}}) guide uses CloudFormation to bootstrap the cluster to enable Karpenter to create and manage nodes, as well as to allow Karpenter to respond to interruption events.\nThis document describes the `cloudformation.yaml` file used in that guide.\nThese descriptions should allow you to understand:\n\n* What Karpenter is authorized to do with your EKS cluster and AWS resources when using the `cloudformation.yaml` file\n* What permissions you need to set up if you are adding Karpenter to an existing cluster\n\n## Overview\n\nTo download a particular version of `cloudformation.yaml`, set the version and use `curl` to pull the file to your local system:\n\n```bash\nexport KARPENTER_VERSION=\"1.9.0\"\ncurl https://raw.githubusercontent.com/aws/karpenter-provider-aws/v\"${KARPENTER_VERSION}\"/website/content/en/preview/getting-started/getting-started-with-karpenter/cloudformation.yaml > cloudformation.yaml\n```\n\nFollowing some header information, the rest of the `cloudformation.yaml` file describes the resources that CloudFormation deploys.\nThe sections of that file can be grouped together under the following general headings:\n\n* [**Node Authorization**]({{< relref \"#node-authorization\" >}}): Creates a NodeInstanceProfile, attaches a NodeRole to it, and connects it to an IAM Identity Mapping used to authorize nodes to the cluster. This defines the permissions each node managed by Karpenter has to access EC2 and other AWS resources. This doesn't actually create the IAM Identity Mapping. That part is orchestrated by `eksctl` in the Getting Started guide.\n* [**Controller Authorization**]({{< relref \"#controller-authorization\" >}}):  Creates 5 Karpenter controller policies that are attached to the service account's IAM role.\nAgain, the actual service account creation (`karpenter`), that is combined with these policies, is orchestrated by `eksctl` in the Getting Started guide.\n* [**Interruption Handling**]({{< relref \"#interruption-handling\" >}}): Allows the Karpenter controller to see and respond to interruptions that occur with the nodes that Karpenter is managing. See the [Interruption]({{< relref \"../concepts/disruption#interruption\" >}}) section of the Disruption page for details.\n\nA lot of the object naming that is done by `cloudformation.yaml` is based on the following:\n\n* Cluster name: With a username of `bob` the Getting Started Guide would name your cluster `bob-karpenter-demo`\nThat name would then be appended to any name below where `${ClusterName}` is included.\n\n* Partition: Any time an ARN is used, it includes the [partition name](https://docs.aws.amazon.com/whitepapers/latest/aws-fault-isolation-boundaries/partitions.html) to identify where the object is found. In most cases, that partition name is `aws`. However, it could also be `aws-cn` (for China Regions) or `aws-us-gov` (for AWS GovCloud US Regions).\n\n## Node Authorization\n\nThe following sections of the `cloudformation.yaml` file set up IAM permissions for Kubernetes nodes created by Karpenter.\nIn particular, this involves setting up a node role that can be attached and passed to instance profiles that Karpenter generates at runtime:\n\n* KarpenterNodeRole\n\n### KarpenterNodeRole\n\nThis section of the template defines the IAM role attached to generated instance profiles.\nGiven a cluster name of `bob-karpenter-demo`, this role would end up being named `\"KarpenterNodeRole-bob-karpenter-demo`.\n\n```yaml\nKarpenterNodeRole:\n  Type: \"AWS::IAM::Role\"\n  Properties:\n    RoleName: !Sub \"KarpenterNodeRole-${ClusterName}\"\n    Path: /\n    AssumeRolePolicyDocument:\n      Version: \"2012-10-17\"\n      Statement:\n        - Effect: Allow\n          Principal:\n            Service:\n              !Sub \"ec2.${AWS::URLSuffix}\"\n          Action:\n            - \"sts:AssumeRole\"\n    ManagedPolicyArns:\n      - !Sub \"arn:${AWS::Partition}:iam::aws:policy/AmazonEKS_CNI_Policy\"\n      - !Sub \"arn:${AWS::Partition}:iam::aws:policy/AmazonEKSWorkerNodePolicy\"\n      - !Sub \"arn:${AWS::Partition}:iam::aws:policy/AmazonEC2ContainerRegistryPullOnly\"\n      - !Sub \"arn:${AWS::Partition}:iam::aws:policy/AmazonSSMManagedInstanceCore\"\n```\n\nThe role created here includes several AWS managed policies, which are designed to provide permissions for specific uses needed by the nodes to work with EC2 and other AWS resources. These include:\n\n* [AmazonEKS_CNI_Policy](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonEKS_CNI_Policy.html): Provides the permissions that the Amazon VPC CNI Plugin needs to configure EKS worker nodes.\n* [AmazonEKSWorkerNodePolicy](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonEKSWorkerNodePolicy.html): Lets Amazon EKS worker nodes connect to EKS Clusters.\n* [AmazonEC2ContainerRegistryPullOnly](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonEC2ContainerRegistryPullOnly.html): Allows pulling images from repositories in the Amazon EC2 Container Registry.\n* [AmazonSSMManagedInstanceCore](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonSSMManagedInstanceCore.html): Adds AWS Systems Manager service core functions for Amazon EC2.\n\nIf you were to use a node role from an existing cluster, you could skip this provisioning step and pass this node role to any EC2NodeClasses that you create. Additionally, you would ensure that the [IAM Integration Policy]({{< relref \"#karpentercontrolleriamintegrationpolicy\" >}}) has `iam:PassRole` permission to the role attached to the generated instance profiles.\n\n## Controller Authorization\n\nThis section sets the AWS permissions for the Karpenter Controller. When used in the Getting Started guide, `eksctl` uses these permissions to create a service account (karpenter) whose IAM role has all 5 controller policies attached.\n\nThe controller permissions are split across 5 managed IAM policies:\n\n* [KarpenterControllerNodeLifecyclePolicy]({{< relref \"#karpentercontrollernodelifecyclepolicy\" >}}) - EC2 instance and launch template lifecycle management\n* [KarpenterControllerIAMIntegrationPolicy]({{< relref \"#karpentercontrolleriamintegrationpolicy\" >}}) - IAM instance profile management\n* [KarpenterControllerEKSIntegrationPolicy]({{< relref \"#karpentercontrollereksintegrationpolicy\" >}}) - EKS cluster discovery\n* [KarpenterControllerInterruptionPolicy]({{< relref \"#karpentercontrollerinterruptionpolicy\" >}}) - SQS interruption queue access\n* [KarpenterControllerResourceDiscoveryPolicy]({{< relref \"#karpentercontrollerresourcediscoverypolicy\" >}}) - Read-only resource discovery\n\nSomeone wanting to add Karpenter to an existing cluster, instead of using `cloudformation.yaml`, would need to create these IAM policies directly and assign them to the role leveraged by the service account using IRSA or EKS Pod Identity.\n\n### KarpenterControllerNodeLifecyclePolicy\n\nThe `NodeLifecyclePolicy` manages EC2 instance and launch template lifecycle operations. Given a cluster name of `bob-karpenter-demo`, this policy would be named: `KarpenterControllerNodeLifecyclePolicy-bob-karpenter-demo`\n\n```yaml\nNodeLifecyclePolicy:\n  Type: AWS::IAM::ManagedPolicy\n  Properties:\n    ManagedPolicyName: !Sub \"KarpenterControllerNodeLifecyclePolicy-${ClusterName}\"\n    Path: /\n    PolicyDocument: !Sub |\n      {\n        \"Version\": \"2012-10-17\",\n        \"Statement\": [\n```\n\n#### AllowScopedEC2InstanceAccessActions\n\nThe AllowScopedEC2InstanceAccessActions statement ID (Sid) identifies a set of EC2 resources that are allowed to be accessed with\n[RunInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html) and [CreateFleet](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet.html) actions.\nFor `RunInstances` and `CreateFleet` actions, the Karpenter controller can read (but not create) `image`, `snapshot`, `security-group`, `subnet` and `capacity-reservation` EC2 resources, scoped for the particular AWS partition and region.\n\n```json\n{\n  \"Sid\": \"AllowScopedEC2InstanceAccessActions\",\n  \"Effect\": \"Allow\",\n  \"Resource\": [\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}::image/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}::snapshot/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:security-group/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:subnet/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:capacity-reservation/*\"\n  ],\n  \"Action\": [\n    \"ec2:RunInstances\",\n    \"ec2:CreateFleet\"\n  ]\n}\n```\n\n#### AllowScopedEC2LaunchTemplateAccessActions\n\nThe AllowScopedEC2InstanceAccessActions statement ID (Sid) identifies launch templates that are allowed to be accessed with\n[RunInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html) and [CreateFleet](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet.html) actions.\nFor `RunInstances` and `CreateFleet` actions, the Karpenter controller can read (but not create) `launch-template` EC2 resources that have the `kubernetes.io/cluster/${ClusterName}` tag be set to `owned` and a `karpenter.sh/nodepool` tag, scoped for the particular AWS partition and region. This ensures that an instance launch can't access launch templates that weren't provisioned by Karpenter.\n\n```json\n{\n  \"Sid\": \"AllowScopedEC2LaunchTemplateAccessActions\",\n  \"Effect\": \"Allow\",\n  \"Resource\": \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:launch-template/*\",\n  \"Action\": [\n    \"ec2:RunInstances\",\n    \"ec2:CreateFleet\"\n  ],\n  \"Condition\": {\n    \"StringEquals\": {\n      \"aws:ResourceTag/kubernetes.io/cluster/${ClusterName}\": \"owned\"\n    },\n    \"StringLike\": {\n      \"aws:ResourceTag/karpenter.sh/nodepool\": \"*\"\n    }\n  }\n}\n```\n\n#### AllowScopedEC2InstanceActionsWithTags\n\nThe AllowScopedEC2InstanceActionsWithTags Sid allows the\n[RunInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html), [CreateFleet](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet.html), and [CreateLaunchTemplate](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateLaunchTemplate.html)\nactions requested by the Karpenter controller to create all `fleet`, `instance`, `volume`, `network-interface`, `launch-template` or `spot-instances-request` EC2 resources (for the partition and region). It also requires that the `kubernetes.io/cluster/${ClusterName}` tag be set to `owned`, `aws:RequestTag/eks:eks-cluster-name` be set to `\"${ClusterName}`, and a `karpenter.sh/nodepool` tag be set to any value. This ensures that Karpenter is only allowed to create instances for a single EKS cluster.\n\n```json\n{\n  \"Sid\": \"AllowScopedEC2InstanceActionsWithTags\",\n  \"Effect\": \"Allow\",\n  \"Resource\": [\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:fleet/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:instance/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:volume/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:network-interface/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:launch-template/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:spot-instances-request/*\"\n  ],\n  \"Action\": [\n    \"ec2:RunInstances\",\n    \"ec2:CreateFleet\",\n    \"ec2:CreateLaunchTemplate\"\n  ],\n  \"Condition\": {\n    \"StringEquals\": {\n      \"aws:RequestTag/kubernetes.io/cluster/${ClusterName}\": \"owned\"\n      \"aws:RequestTag/eks:eks-cluster-name\": \"${ClusterName}\"\n    },\n    \"StringLike\": {\n      \"aws:RequestTag/karpenter.sh/nodepool\": \"*\"\n    }\n  }\n}\n```\n\n#### AllowScopedResourceCreationTagging\n\nThe AllowScopedResourceCreationTagging Sid allows EC2 [CreateTags](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTags.html)\nactions on `fleet`, `instance`, `volume`, `network-interface`, `launch-template` and `spot-instances-request` resources, While making `RunInstance`, `CreateFleet`, or `CreateLaunchTemplate` calls. Additionally, this ensures that resources can't be tagged arbitrarily by Karpenter after they are created.\nConditions that must be met include that `aws:RequestTag/kubernetes.io/cluster/${ClusterName}` be set to `owned` and `aws:RequestTag/eks:eks-cluster-name` be set to `${ClusterName}`.\n\n```json\n{\n  \"Sid\": \"AllowScopedResourceCreationTagging\",\n  \"Effect\": \"Allow\",\n  \"Resource\": [\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:fleet/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:instance/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:volume/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:network-interface/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:launch-template/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:spot-instances-request/*\"\n  ],\n  \"Action\": \"ec2:CreateTags\",\n  \"Condition\": {\n    \"StringEquals\": {\n      \"aws:RequestTag/kubernetes.io/cluster/${ClusterName}\": \"owned\",\n      \"aws:RequestTag/eks:eks-cluster-name\": \"${ClusterName}\"\n      \"ec2:CreateAction\": [\n        \"RunInstances\",\n        \"CreateFleet\",\n        \"CreateLaunchTemplate\"\n      ]\n    },\n    \"StringLike\": {\n      \"aws:RequestTag/karpenter.sh/nodepool\": \"*\"\n    }\n  }\n}\n```\n\n#### AllowScopedResourceTagging\n\nThe AllowScopedResourceTagging Sid allows EC2 [CreateTags](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTags.html) actions on all instances created by Karpenter after their creation. It enforces that Karpenter is only able to update the tags on cluster instances it is operating on through the `kubernetes.io/cluster/${ClusterName}`\" and `karpenter.sh/nodepool` tags.\nLikewise, `RequestTag/eks:eks-cluster-name` must be set to `${ClusterName}`, if it exists, and `TagKeys` must equal `eks:eks-cluster-name`, `karpenter.sh/nodeclaim`, and `Name`, for all values.\n```json\n{\n  \"Sid\": \"AllowScopedResourceTagging\",\n  \"Effect\": \"Allow\",\n  \"Resource\": \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:instance/*\",\n  \"Action\": \"ec2:CreateTags\",\n  \"Condition\": {\n    \"StringEquals\": {\n      \"aws:ResourceTag/kubernetes.io/cluster/${ClusterName}\": \"owned\"\n    },\n    \"StringLike\": {\n      \"aws:ResourceTag/karpenter.sh/nodepool\": \"*\"\n    },\n    \"StringEqualsIfExists\": {\n      \"aws:RequestTag/eks:eks-cluster-name\": \"${ClusterName}\"\n    },\n    \"ForAllValues:StringEquals\": {\n      \"aws:TagKeys\": [\n        \"eks:eks-cluster-name\",\n        \"karpenter.sh/nodeclaim\",\n        \"Name\"\n      ]\n    }\n  }\n}\n```\n\n#### AllowScopedDeletion\n\nThe AllowScopedDeletion Sid allows [TerminateInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_TerminateInstances.html) and [DeleteLaunchTemplate](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DeleteLaunchTemplate.html) actions to delete instance and launch-template resources, provided that `karpenter.sh/nodepool` and `kubernetes.io/cluster/${ClusterName}` tags are set. These tags must be present on all resources that Karpenter is going to delete. This ensures that Karpenter can only delete instances and launch templates that are associated with it.\n\n```json\n{\n  \"Sid\": \"AllowScopedDeletion\",\n  \"Effect\": \"Allow\",\n  \"Resource\": [\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:instance/*\",\n    \"arn:${AWS::Partition}:ec2:${AWS::Region}:*:launch-template/*\"\n  ],\n  \"Action\": [\n    \"ec2:TerminateInstances\",\n    \"ec2:DeleteLaunchTemplate\"\n  ],\n  \"Condition\": {\n    \"StringEquals\": {\n      \"aws:ResourceTag/kubernetes.io/cluster/${ClusterName}\": \"owned\"\n    },\n    \"StringLike\": {\n      \"aws:ResourceTag/karpenter.sh/nodepool\": \"*\"\n    }\n  }\n}\n```\n\n### KarpenterControllerIAMIntegrationPolicy\n\nThe `IAMIntegrationPolicy` manages IAM instance profile operations. Given a cluster name of `bob-karpenter-demo`, this policy would be named: `KarpenterControllerIAMIntegrationPolicy-bob-karpenter-demo`\n\n```yaml\nIAMIntegrationPolicy:\n  Type: AWS::IAM::ManagedPolicy\n  Properties:\n    ManagedPolicyName: !Sub \"KarpenterControllerIAMIntegrationPolicy-${ClusterName}\"\n    Path: /\n    PolicyDocument: !Sub |\n      {\n        \"Version\": \"2012-10-17\",\n        \"Statement\": [\n```\n\n#### AllowPassingInstanceRole\n\nThe AllowPassingInstanceRole Sid gives the Karpenter controller permission to pass (`iam:PassRole`) the node role (`KarpenterNodeRole-${ClusterName}`) to generated instance profiles.\nThis gives EC2 permission explicit permission to use the `KarpenterNodeRole-${ClusterName}` when assigning permissions to generated instance profiles while launching nodes.\n\n```json\n{\n  \"Sid\": \"AllowPassingInstanceRole\",\n  \"Effect\": \"Allow\",\n  \"Resource\": \"${KarpenterNodeRole.Arn}\",\n  \"Action\": \"iam:PassRole\",\n  \"Condition\": {\n    \"StringEquals\": {\n      \"iam:PassedToService\": [\n        \"ec2.amazonaws.com\",\n        \"ec2.amazonaws.com.cn\"\n      ]\n    }\n  }\n}\n```\n\n#### AllowScopedInstanceProfileCreationActions\n\nThe AllowScopedInstanceProfileCreationActions Sid gives the Karpenter controller permission to create a new instance profile with [`iam:CreateInstanceProfile`](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateInstanceProfile.html),\nprovided that the request is made to a cluster with `RequestTag` `kubernetes.io/cluster/${ClusterName}` set to `owned`, the `eks:eks-cluster-name` set to `${ClusterName}`, and `topology.kubernetes.io/region` set to the current region.\nAlso, `karpenter.k8s.aws/ec2nodeclass` must be set to some value. This ensures that Karpenter can generate instance profiles on your behalf based on roles specified in your `EC2NodeClasses` that you use to configure Karpenter.\n\n```json\n{\n  \"Sid\": \"AllowScopedInstanceProfileCreationActions\",\n  \"Effect\": \"Allow\",\n  \"Resource\": \"arn:${AWS::Partition}:iam::${AWS::AccountId}:instance-profile/*\",\n  \"Action\": [\n    \"iam:CreateInstanceProfile\"\n  ],\n  \"Condition\": {\n    \"StringEquals\": {\n      \"aws:RequestTag/kubernetes.io/cluster/${ClusterName}\": \"owned\",\n      \"aws:RequestTag/eks:eks-cluster-name\": \"${ClusterName}\",\n      \"aws:RequestTag/topology.kubernetes.io/region\": \"${AWS::Region}\"\n    },\n    \"StringLike\": {\n      \"aws:RequestTag/karpenter.k8s.aws/ec2nodeclass\": \"*\"\n    }\n  }\n}\n```\n\n#### AllowScopedInstanceProfileTagActions\n\nThe AllowScopedInstanceProfileTagActions Sid gives the Karpenter controller permission to tag an instance profile with [`iam:TagInstanceProfile`](https://docs.aws.amazon.com/IAM/latest/APIReference/API_TagInstanceProfile.html), provided that `ResourceTag` attributes `kubernetes.io/cluster/${ClusterName}` is set to `owned` and `topology.kubernetes.io/region` is set to the current region and `RequestTag` attributes `kubernetes.io/cluster/${ClusterName}` is set to `owned`, `eks:eks-cluster-name` is set to `${ClusterName}`, and `topology.kubernetes.io/region` is set to the current region.\nAlso, `ResourceTag/karpenter.k8s.aws/ec2nodeclass` and `RequestTag/karpenter.k8s.aws/ec2nodeclass` must be set to some value. This ensures that Karpenter is only able to act on instance profiles that it provisions for this cluster.\n\n```json\n{\n  \"Sid\": \"AllowScopedInstanceProfileTagActions\",\n  \"Effect\": \"Allow\",\n  \"Resource\": \"arn:${AWS::Partition}:iam::${AWS::AccountId}:instance-profile/*\",\n  \"Action\": [\n    \"iam:TagInstanceProfile\"\n  ],\n  \"Condition\": {\n    \"StringEquals\": {\n      \"aws:ResourceTag/kubernetes.io/cluster/${ClusterName}\": \"owned\",\n      \"aws:ResourceTag/topology.kubernetes.io/region\": \"${AWS::Region}\",\n      \"aws:RequestTag/kubernetes.io/cluster/${ClusterName}\": \"owned\",\n      \"aws:RequestTag/eks:eks-cluster-name\": \"${ClusterName}\",\n      \"aws:RequestTag/topology.kubernetes.io/region\": \"${AWS::Region}\"\n    },\n    \"StringLike\": {\n      \"aws:ResourceTag/karpenter.k8s.aws/ec2nodeclass\": \"*\",\n      \"aws:RequestTag/karpenter.k8s.aws/ec2nodeclass\": \"*\"\n    }\n  }\n}\n```\n\n#### AllowScopedInstanceProfileActions\n\nThe AllowScopedInstanceProfileActions Sid gives the Karpenter controller permission to perform [`iam:AddRoleToInstanceProfile`](https://docs.aws.amazon.com/IAM/latest/APIReference/API_AddRoleToInstanceProfile.html), [`iam:RemoveRoleFromInstanceProfile`](https://docs.aws.amazon.com/IAM/latest/APIReference/API_RemoveRoleFromInstanceProfile.html), and [`iam:DeleteInstanceProfile`](https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeleteInstanceProfile.html) actions,\nprovided that the request is made to a cluster with `kubernetes.io/cluster/${ClusterName}` set to owned and is made in the current region.\nAlso, `karpenter.k8s.aws/ec2nodeclass` must be set to some value. This permission is further enforced by the `iam:PassRole` permission. If Karpenter attempts to add a role to an instance profile that it doesn't have `iam:PassRole` permission on, that call will fail. Therefore, if you configure Karpenter to use a new role through the `EC2NodeClass`, ensure that you also specify that role within your `iam:PassRole` permission.\n\n```json\n{\n  \"Sid\": \"AllowScopedInstanceProfileActions\",\n  \"Effect\": \"Allow\",\n  \"Resource\": \"arn:${AWS::Partition}:iam::${AWS::AccountId}:instance-profile/*\",\n  \"Action\": [\n    \"iam:AddRoleToInstanceProfile\",\n    \"iam:RemoveRoleFromInstanceProfile\",\n    \"iam:DeleteInstanceProfile\"\n  ],\n  \"Condition\": {\n    \"StringEquals\": {\n      \"aws:ResourceTag/kubernetes.io/cluster/${ClusterName}\": \"owned\",\n      \"aws:ResourceTag/topology.kubernetes.io/region\": \"${AWS::Region}\"\n    },\n    \"StringLike\": {\n      \"aws:ResourceTag/karpenter.k8s.aws/ec2nodeclass\": \"*\"\n    }\n  }\n}\n```\n\n### KarpenterControllerEKSIntegrationPolicy\n\nThe `EKSIntegrationPolicy` manages EKS cluster discovery. Given a cluster name of `bob-karpenter-demo`, this policy would be named: `KarpenterControllerEKSIntegrationPolicy-bob-karpenter-demo`\n\n```yaml\nEKSIntegrationPolicy:\n  Type: AWS::IAM::ManagedPolicy\n  Properties:\n    ManagedPolicyName: !Sub \"KarpenterControllerEKSIntegrationPolicy-${ClusterName}\"\n    Path: /\n    PolicyDocument: !Sub |\n      {\n        \"Version\": \"2012-10-17\",\n        \"Statement\": [\n```\n\n#### AllowAPIServerEndpointDiscovery\n\nYou can optionally allow the Karpenter controller to discover the Kubernetes cluster's external API endpoint to enable EC2 nodes to successfully join the EKS cluster.\n\n> **Note**: If you are not using an EKS control plane, you will have to specify this endpoint explicitly. See the description of the `aws.clusterEndpoint` setting in the [ConfigMap](.settings/#configmap) documentation for details.\n\nThe AllowAPIServerEndpointDiscovery Sid allows the Karpenter controller to get that information (`eks:DescribeCluster`) for the cluster (`cluster/${ClusterName}`).\n\n```json\n{\n  \"Sid\": \"AllowAPIServerEndpointDiscovery\",\n  \"Effect\": \"Allow\",\n  \"Resource\": \"arn:${AWS::Partition}:eks:${AWS::Region}:${AWS::AccountId}:cluster/${ClusterName}\",\n  \"Action\": \"eks:DescribeCluster\"\n}\n```\n\n### KarpenterControllerInterruptionPolicy\n\nThe `InterruptionPolicy` manages access to the SQS interruption queue. Given a cluster name of `bob-karpenter-demo`, this policy would be named: `KarpenterControllerInterruptionPolicy-bob-karpenter-demo`\n\n```yaml\nInterruptionPolicy:\n  Type: AWS::IAM::ManagedPolicy\n  Properties:\n    ManagedPolicyName: !Sub \"KarpenterControllerInterruptionPolicy-${ClusterName}\"\n    Path: /\n    PolicyDocument: !Sub |\n      {\n        \"Version\": \"2012-10-17\",\n        \"Statement\": [\n```\n\n#### AllowInterruptionQueueActions\n\nKarpenter supports interruption queues, that you can create as described in the [Interruption]({{< relref \"../concepts/disruption#interruption\" >}}) section of the Disruption page.\nThis section of the cloudformation.yaml template can give Karpenter permission to access those queues by specifying the resource ARN.\nFor the interruption queue you created (`${KarpenterInterruptionQueue.Arn}`), the AllowInterruptionQueueActions Sid lets the Karpenter controller have permission to delete messages ([DeleteMessage](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_DeleteMessage.html)), get queue URL ([GetQueueUrl](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_GetQueueUrl.html)), and receive messages ([ReceiveMessage](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ReceiveMessage.html)).\n\n```json\n{\n  \"Sid\": \"AllowInterruptionQueueActions\",\n  \"Effect\": \"Allow\",\n  \"Resource\": \"${KarpenterInterruptionQueue.Arn}\",\n  \"Action\": [\n    \"sqs:DeleteMessage\",\n    \"sqs:GetQueueUrl\",\n    \"sqs:ReceiveMessage\"\n  ]\n}\n```\n\n### KarpenterControllerResourceDiscoveryPolicy\n\nThe `ResourceDiscoveryPolicy` manages read-only resource discovery operations. Given a cluster name of `bob-karpenter-demo`, this policy would be named: `KarpenterControllerResourceDiscoveryPolicy-bob-karpenter-demo`\n\n```yaml\nResourceDiscoveryPolicy:\n  Type: AWS::IAM::ManagedPolicy\n  Properties:\n    ManagedPolicyName: !Sub \"KarpenterControllerResourceDiscoveryPolicy-${ClusterName}\"\n    Path: /\n    PolicyDocument: !Sub |\n      {\n        \"Version\": \"2012-10-17\",\n        \"Statement\": [\n```\n\n#### AllowRegionalReadActions\n\nThe AllowRegionalReadActions Sid allows [DescribeAvailabilityZones](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeAvailabilityZones.html), [DescribeImages](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeImages.html), [DescribeInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeInstances.html), [DescribeInstanceTypeOfferings](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeInstanceTypeOfferings.html), [DescribeInstanceTypes](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeInstanceTypes.html), [DescribeLaunchTemplates](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeLaunchTemplates.html), [DescribeSecurityGroups](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeSecurityGroups.html), [DescribeSpotPriceHistory](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeSpotPriceHistory.html), and [DescribeSubnets](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeSubnets.html) actions for the current AWS region.\nThis allows the Karpenter controller to do any of those read-only actions across all related resources for that AWS region.\n\n```json\n{\n  \"Sid\": \"AllowRegionalReadActions\",\n  \"Effect\": \"Allow\",\n  \"Resource\": \"*\",\n  \"Action\": [\n    \"ec2:DescribeCapacityReservations\",\n    \"ec2:DescribeImages\",\n    \"ec2:DescribeInstances\",\n    \"ec2:DescribeInstanceTypeOfferings\",\n    \"ec2:DescribeInstanceTypes\",\n    \"ec2:DescribeLaunchTemplates\",\n    \"ec2:DescribeSecurityGroups\",\n    \"ec2:DescribeSpotPriceHistory\",\n    \"ec2:DescribeSubnets\"\n  ],\n  \"Condition\": {\n    \"StringEquals\": {\n      \"aws:RequestedRegion\": \"${AWS::Region}\"\n    }\n  }\n}\n```\n\n#### AllowSSMReadActions\n\nThe AllowSSMReadActions Sid allows the Karpenter controller to get SSM parameters (`ssm:GetParameter`) from the current region for SSM parameters generated by AWS services.\n\n**NOTE**: If potentially sensitive information is stored in SSM parameters, you could consider restricting access to these messages further.\n```json\n{\n  \"Sid\": \"AllowSSMReadActions\",\n  \"Effect\": \"Allow\",\n  \"Resource\": \"arn:${AWS::Partition}:ssm:${AWS::Region}::parameter/aws/service/*\",\n  \"Action\": \"ssm:GetParameter\"\n}\n```\n\n#### AllowPricingReadActions\n\nBecause pricing information does not exist in every region at the moment, the AllowPricingReadActions Sid allows the Karpenter controller to get product pricing information (`pricing:GetProducts`) for all related resources across all regions.\n\n```json\n{\n  \"Sid\": \"AllowPricingReadActions\",\n  \"Effect\": \"Allow\",\n  \"Resource\": \"*\",\n  \"Action\": \"pricing:GetProducts\"\n}\n```\n\n#### AllowUnscopedInstanceProfileListAction\n\nThe AllowUnscopedInstanceProfileListAction Sid gives the Karpenter controller permission to perform [`iam:ListInstanceProfiles`](https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListInstanceProfiles.html) action to list instance profiles.\n\n```json\n{\n  \"Sid\": \"AllowUnscopedInstanceProfileListAction\",\n  \"Effect\": \"Allow\",\n  \"Resource\": \"*\",\n  \"Action\": \"iam:ListInstanceProfiles\"\n}\n```\n\n#### AllowInstanceProfileReadActions\n\nThe AllowInstanceProfileReadActions Sid gives the Karpenter controller permission to perform [`iam:GetInstanceProfile`](https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetInstanceProfile.html) actions to retrieve information about a specified instance profile, including understanding if an instance profile has been provisioned for an `EC2NodeClass` or needs to be re-provisioned.\n\n```json\n{\n  \"Sid\": \"AllowInstanceProfileReadActions\",\n  \"Effect\": \"Allow\",\n  \"Resource\": \"arn:${AWS::Partition}:iam::${AWS::AccountId}:instance-profile/*\",\n  \"Action\": \"iam:GetInstanceProfile\"\n}\n```\n\n## Interruption Handling\n\nSettings in this section allow the Karpenter controller to stand-up an interruption queue to receive notification messages from other AWS services about the health and status of instances. For example, this interruption queue allows Karpenter to be aware of spot instance interruptions that are sent 2 minutes before spot instances are reclaimed by EC2. Adding this queue allows Karpenter to be proactive in migrating workloads to new nodes.\nSee the [Interruption]({{< relref \"../concepts/disruption#interruption\" >}}) section of the Disruption page for details.\n\nDefining the `KarpenterInterruptionQueuePolicy` allows Karpenter to see and respond to the following:\n\n* AWS health events\n* Spot interruptions\n* Spot rebalance recommendations\n* Instance state changes\n\nThe resources defined in this section include:\n\n* KarpenterInterruptionQueue\n* KarpenterInterruptionQueuePolicy\n* ScheduledChangeRule\n* SpotInterruptionRule\n* RebalanceRule\n* InstanceStateChangeRule\n\n### KarpenterInterruptionQueue\n\nThe [AWS::SQS::Queue](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sqs-queue.html) resource is used to create an Amazon SQS standard queue.\nProperties of that resource set the `QueueName` to the name of your cluster, the time for which SQS retains each message (`MessageRetentionPeriod`) to 300 seconds, and enabling serverside-side encryption using SQS owned encryption keys (`SqsManagedSseEnabled`) to `true`.\nSee [SetQueueAttributes](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SetQueueAttributes.html) for descriptions of some of these attributes.\n\n```yaml\nKarpenterInterruptionQueue:\n  Type: AWS::SQS::Queue\n  Properties:\n    QueueName: !Sub \"${ClusterName}\"\n    MessageRetentionPeriod: 300\n    SqsManagedSseEnabled: true\n```\n\n### KarpenterInterruptionQueuePolicy\n\nThe Karpenter interruption queue policy is created to allow AWS services that we want to receive instance notifications from to push notification messages to the queue.\nThe [AWS::SQS::QueuePolicy](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sqs-queuepolicy.html) resource here applies `EC2InterruptionPolicy` to the `KarpenterInterruptionQueue`. The policy allows [sqs:SendMessage](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html) actions to `events.amazonaws.com` and `sqs.amazonaws.com` services. It also allows the `GetAtt` function to get attributes from `KarpenterInterruptionQueue.Arn`.\nAdditionally, it only allows access to the queue using encrypted connections over HTTPS (TLS) to adhere to [Amazon SQS Security Best Practices](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-security-best-practices.html#enforce-encryption-data-in-transit).\n\n```yaml\nKarpenterInterruptionQueuePolicy:\n  Type: AWS::SQS::QueuePolicy\n  Properties:\n    Queues:\n      - !Ref KarpenterInterruptionQueue\n    PolicyDocument:\n      Id: EC2InterruptionPolicy\n      Statement:\n        - Effect: Allow\n          Principal:\n            Service:\n              - events.amazonaws.com\n              - sqs.amazonaws.com\n          Action: sqs:SendMessage\n          Resource: !GetAtt KarpenterInterruptionQueue.Arn\n        - Sid: DenyHTTP\n          Effect: Deny\n          Action: sqs:*\n          Resource: !GetAtt KarpenterInterruptionQueue.Arn\n          Condition:\n            Bool:\n              aws:SecureTransport: false\n          Principal: \"*\"\n```\n\n### Rules\n\nThis section allows Karpenter to gather [AWS Health Events](https://docs.aws.amazon.com/health/latest/ug/cloudwatch-events-health.html#about-public-events) and direct them to a queue where they can be consumed by Karpenter.\nThese rules include:\n\n* ScheduledChangeRule: The [AWS::Events::Rule](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-events-rule.html) creates a rule where the [EventPattern](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-patterns.html) is set to send events from the `aws.health` source to `KarpenterInterruptionQueue`.\n\n  ```yaml\n  ScheduledChangeRule:\n    Type: 'AWS::Events::Rule'\n    Properties:\n     EventPattern:\n       source:\n         - aws.health\n       detail-type:\n         - AWS Health Event\n     Targets:\n       - Id: KarpenterInterruptionQueueTarget\n         Arn: !GetAtt KarpenterInterruptionQueue.Arn\n  ```\n\n* SpotInterruptionRule: An EC2 Spot Instance Interruption warning tells you that AWS is about to reclaim a Spot instance you are using. This rule allows Karpenter to gather [EC2 Spot Instance Interruption Warning](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-interruptions.html) events and direct them to a queue where they can be consumed by Karpenter. In particular, the [AWS::Events::Rule](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-events-rule.html) here creates a rule where the [EventPattern](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-patterns.html) is set to send events from the `aws.ec2` source to `KarpenterInterruptionQueue`.\n\n  ```yaml\n  SpotInterruptionRule:\n    Type: 'AWS::Events::Rule'\n    Properties:\n      EventPattern:\n        source:\n          - aws.ec2\n        detail-type:\n          - EC2 Spot Instance Interruption Warning\n      Targets:\n        - Id: KarpenterInterruptionQueueTarget\n          Arn: !GetAtt KarpenterInterruptionQueue.Arn\n  ```\n\n* RebalanceRule: An EC2 Instance Rebalance Recommendation signal tells you that a Spot instance is at a heightened risk of being interrupted, allowing Karpenter to get new instances or simply rebalance workloads.  This rule allows Karpenter to gather [EC2 Instance Rebalance Recommendation](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/rebalance-recommendations.html) signals and direct them to a queue where they can be consumed by Karpenter. In particular, the [AWS::Events::Rule](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-events-rule.html) here creates a rule where the [EventPattern](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-patterns.html) is set to send events from the `aws.ec2` source to `KarpenterInterruptionQueue`.\n\n  ```yaml\n  RebalanceRule:\n   Type: 'AWS::Events::Rule'\n   Properties:\n     EventPattern:\n       source:\n         - aws.ec2\n       detail-type:\n         - EC2 Instance Rebalance Recommendation\n     Targets:\n       - Id: KarpenterInterruptionQueueTarget\n         Arn: !GetAtt KarpenterInterruptionQueue.Arn\n  ```\n\n* InstanceStateChangeRule: An EC2 Instance State-change Notification signal tells you that the state of an instance has changed to one of the following states: pending, running, stopping, stopped, shutting-down, or terminated. This rule allows Karpenter to gather [EC2 Instance State-change](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/monitoring-instance-state-changes.html) signals and direct them to a queue where they can be consumed by Karpenter. In particular, the [AWS::Events::Rule](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-events-rule.html) here creates a rule where the [EventPattern](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-patterns.html) is set to send events from the `aws.ec2` source to `KarpenterInterruptionQueue`.\n\n  ```yaml\n  InstanceStateChangeRule:\n   Type: 'AWS::Events::Rule'\n   Properties:\n     EventPattern:\n       source:\n         - aws.ec2\n       detail-type:\n         - EC2 Instance State-change Notification\n     Targets:\n       - Id: KarpenterInterruptionQueueTarget\n         Arn: !GetAtt KarpenterInterruptionQueue.Arn\n  ```\n"
  },
  {
    "path": "website/content/en/v1.9/reference/instance-types.md",
    "content": "---\ntitle: \"Instance Types\"\nlinkTitle: \"Instance Types\"\nweight: 100\n\ndescription: >\n  Evaluate Instance Type Resources\n---\n<!-- this document is generated from hack/docs/instancetypes_gen/main.go -->\nAWS instance types offer varying resources and can be selected by labels. The values provided\nbelow are the resources available with some assumptions and after the instance overhead has been subtracted:\n- `blockDeviceMappings` are not configured\n- `amiFamily` is set to `AL2023`\n## a1 Family\n### `a1.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|a|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|a1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|500|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|a1.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|1392Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|10|\n### `a1.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|a|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|a1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|a1.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3055Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `a1.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|a|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|a1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|a1.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6525Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `a1.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|a|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|a1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|a1.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `a1.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|a|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|a1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|a1.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27322Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `a1.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|a|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|a1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|a1.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27322Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n## c1 Family\n### `c1.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|0|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|1740|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c1.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|1122Mi|\n |pods|12|\n### `c1.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|0|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|7168|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c1.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|5637Mi|\n |pods|58|\n## c3 Family\n### `c3.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|3840|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c3.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|2878Mi|\n |pods|29|\n### `c3.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|7680|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c3.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6111Mi|\n |pods|58|\n### `c3.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|15360|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c3.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|13215Mi|\n |pods|58|\n### `c3.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|30720|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c3.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|25487Mi|\n |pods|234|\n### `c3.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|61440|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c3.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|53903Mi|\n |pods|234|\n## c4 Family\n### `c4.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|3840|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c4.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|2878Mi|\n |pods|29|\n### `c4.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|7680|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c4.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6111Mi|\n |pods|58|\n### `c4.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|1000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|15360|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c4.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|13215Mi|\n |pods|58|\n### `c4.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|30720|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c4.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|25487Mi|\n |pods|234|\n### `c4.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|36|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|61440|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c4.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|35840m|\n |ephemeral-storage|17Gi|\n |memory|53903Mi|\n |pods|234|\n## c5 Family\n### `c5.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3114Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c5.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6584Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c5.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c5.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27381Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5.9xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|36|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|73728|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|9xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5.9xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|35840m|\n |ephemeral-storage|17Gi|\n |memory|65269Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|88002Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5.18xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|72|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|147456|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|18xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5.18xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|71750m|\n |ephemeral-storage|17Gi|\n |memory|127934Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c5.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c5.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## c5a Family\n### `c5a.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5a.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3114Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c5a.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5a.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6584Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c5a.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5a.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c5a.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5a.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27381Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5a.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5a.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5a.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5a.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|88002Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5a.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6300|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5a.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112779Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c5a.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5a.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## c5ad Family\n### `c5ad.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|75|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5ad.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3114Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c5ad.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|150|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5ad.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6584Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c5ad.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|300|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5ad.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c5ad.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|600|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5ad.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27381Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5ad.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1200|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5ad.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5ad.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1800|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5ad.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|88002Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5ad.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6300|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2400|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5ad.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112779Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c5ad.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5ad.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## c5d Family\n### `c5d.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|50|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5d.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3114Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c5d.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|100|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5d.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6584Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c5d.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|200|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5d.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c5d.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|400|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5d.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27381Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5d.9xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|36|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|900|\n |karpenter.k8s.aws/instance-memory|73728|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|9xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5d.9xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|35840m|\n |ephemeral-storage|17Gi|\n |memory|65269Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5d.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1800|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5d.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|88002Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5d.18xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|72|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1800|\n |karpenter.k8s.aws/instance-memory|147456|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|18xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5d.18xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|71750m|\n |ephemeral-storage|17Gi|\n |memory|127934Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c5d.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3600|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5d.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c5d.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3600|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5d.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## c5n Family\n### `c5n.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|5376|\n |karpenter.k8s.aws/instance-network-bandwidth|3000|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5n.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|4298Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c5n.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|10752|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5n.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|8952Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c5n.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|21504|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5n.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|18898Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c5n.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|43008|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5n.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|36853Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5n.9xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|36|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|9xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5n.9xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|35840m|\n |ephemeral-storage|17Gi|\n |memory|88002Mi|\n |pods|234|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|54|\n### `c5n.18xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|72|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|18xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5n.18xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|71750m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c5n.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|72|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c5n.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|71750m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## c6a Family\n### `c6a.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6a.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3114Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c6a.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6a.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6584Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c6a.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6a.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c6a.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6a.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27381Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c6a.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6a.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `c6a.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6a.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|88002Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `c6a.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6a.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112779Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6a.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6a.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6a.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6a.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6a.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6a.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6a.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6a.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## c6g Family\n### `c6g.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|500|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6g.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|1392Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `c6g.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6g.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3055Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c6g.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6g.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6525Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c6g.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6g.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c6g.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6g.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27322Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c6g.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6g.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c6g.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14250|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6g.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|87943Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c6g.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6g.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6g.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6g.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## c6gd Family\n### `c6gd.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|59|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|500|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gd.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|1392Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `c6gd.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gd.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3055Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c6gd.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gd.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6525Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c6gd.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gd.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c6gd.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gd.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27322Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c6gd.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gd.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c6gd.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14250|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gd.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|87943Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c6gd.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gd.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6gd.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|c6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gd.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## c6gn Family\n### `c6gn.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6gn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|1600|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gn.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|1392Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `c6gn.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6gn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|3000|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gn.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3055Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c6gn.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6gn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|6300|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gn.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6525Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c6gn.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6gn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gn.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c6gn.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6gn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gn.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27322Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c6gn.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6gn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gn.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c6gn.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|28500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6gn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gn.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|87943Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c6gn.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|38000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6gn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6gn.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## c6i Family\n### `c6i.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6i.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3114Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c6i.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6i.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6584Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c6i.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6i.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c6i.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6i.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27381Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c6i.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6i.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `c6i.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6i.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|88002Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `c6i.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6i.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112779Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6i.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6i.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6i.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6i.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6i.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6i.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## c6id Family\n### `c6id.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6id.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3114Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c6id.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6id.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6584Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c6id.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6id.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c6id.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6id.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27381Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c6id.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6id.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `c6id.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6id.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|88002Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `c6id.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6id.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112779Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6id.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|5700|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6id.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6id.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6id.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6id.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6id.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## c6in Family\n### `c6in.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6in.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3114Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c6in.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6in.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6584Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c6in.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6in.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c6in.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6in.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27381Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c6in.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6in.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `c6in.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|37500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6in.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|88002Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `c6in.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|50000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6in.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112779Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6in.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|75000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|150000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6in.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c6in.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6in.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|237794Mi|\n |pods|394|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|106|\n### `c6in.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c6in.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|237794Mi|\n |pods|394|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|106|\n## c7a Family\n### `c7a.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|390|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7a.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|1451Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `c7a.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7a.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3114Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c7a.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7a.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6584Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c7a.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7a.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c7a.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7a.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27381Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c7a.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7a.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `c7a.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7a.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|88002Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `c7a.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7a.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112779Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c7a.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7a.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c7a.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7a.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c7a.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7a.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c7a.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7a.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## c7g Family\n### `c7g.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|520|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7g.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|1392Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `c7g.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7g.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3055Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c7g.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1876|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7g.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6525Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c7g.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7g.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c7g.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7g.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27322Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c7g.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7g.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c7g.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7g.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|87943Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c7g.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7g.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c7g.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7g.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## c7gd Family\n### `c7gd.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|59|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|520|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gd.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|1392Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `c7gd.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gd.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3055Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c7gd.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1876|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gd.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6525Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c7gd.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gd.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c7gd.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gd.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27322Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c7gd.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gd.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c7gd.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gd.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|87943Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c7gd.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gd.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c7gd.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gd.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## c7gn Family\n### `c7gn.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gn|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gn.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|1392Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `c7gn.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gn|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gn.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3055Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c7gn.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gn|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gn.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6525Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c7gn.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gn|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gn.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c7gn.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gn|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gn.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27322Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c7gn.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gn|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gn.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c7gn.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gn|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|150000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gn.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|87943Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c7gn.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gn|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gn.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c7gn.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7gn|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7gn.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## c7i Family\n### `c7i.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3114Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c7i.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6584Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c7i.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c7i.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27381Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c7i.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `c7i.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|88002Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `c7i.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112779Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c7i.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c7i.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c7i.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c7i.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## c7i-flex Family\n### `c7i-flex.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i-flex|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|390|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i-flex.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3114Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|3|\n### `c7i-flex.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i-flex|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i-flex.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6584Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|8|\n### `c7i-flex.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i-flex|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i-flex.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c7i-flex.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i-flex|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i-flex.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27381Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|34|\n### `c7i-flex.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i-flex|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i-flex.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c7i-flex.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i-flex|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|9375|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i-flex.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|88002Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `c7i-flex.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c7i-flex|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c7i-flex.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112779Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## c8a Family\n### `c8a.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|520|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8a.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|1451Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `c8a.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8a.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|2784Mi|\n |pods|59|\n |vpc.amazonaws.com/pod-eni|9|\n### `c8a.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8a.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6364Mi|\n |pods|78|\n |vpc.amazonaws.com/pod-eni|18|\n### `c8a.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8a.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|13062Mi|\n |pods|158|\n |vpc.amazonaws.com/pod-eni|38|\n### `c8a.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8a.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|26501Mi|\n |pods|314|\n |vpc.amazonaws.com/pod-eni|54|\n### `c8a.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8a.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|55953Mi|\n |pods|392|\n |vpc.amazonaws.com/pod-eni|82|\n### `c8a.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8a.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|82238Mi|\n |pods|758|\n |vpc.amazonaws.com/pod-eni|110|\n### `c8a.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8a.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|109776Mi|\n |pods|1010|\n |vpc.amazonaws.com/pod-eni|106|\n### `c8a.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8a.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|170397Mi|\n |pods|1010|\n |vpc.amazonaws.com/pod-eni|106|\n### `c8a.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8a.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|170397Mi|\n |pods|1010|\n |vpc.amazonaws.com/pod-eni|106|\n### `c8a.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8a.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|346715Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n### `c8a.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8a.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|346715Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n## c8g Family\n### `c8g.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|520|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8g.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|1392Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `c8g.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8g.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3055Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c8g.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8g.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6525Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c8g.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8g.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c8g.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8g.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27322Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c8g.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8g.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c8g.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8g.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|87943Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c8g.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8g.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c8g.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8g.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173341Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c8g.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8g.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173341Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c8g.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8g.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|355203Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c8g.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8g.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|355203Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## c8gb Family\n### `c8gb.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|2083|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gb.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|1392Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `c8gb.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|4166|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gb.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3055Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c8gb.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|8333|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gb.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6525Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c8gb.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|16666|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gb.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c8gb.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|33330|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gb.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27322Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c8gb.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|50000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|66660|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gb.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|56994Mi|\n |pods|292|\n |vpc.amazonaws.com/pod-eni|52|\n### `c8gb.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|75000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gb.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|86667Mi|\n |pods|350|\n |vpc.amazonaws.com/pod-eni|50|\n### `c8gb.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|133330|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gb.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112181Mi|\n |pods|786|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|106|\n### `c8gb.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|150000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gb.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|168490Mi|\n |pods|1178|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n### `c8gb.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|150000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gb.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|168490Mi|\n |pods|1178|\n |vpc.amazonaws.com/efa|1|\n### `c8gb.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|300000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gb.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|356820Mi|\n |pods|590|\n |vpc.amazonaws.com/efa|2|\n### `c8gb.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|300000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gb.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|356820Mi|\n |pods|590|\n |vpc.amazonaws.com/efa|2|\n## c8gd Family\n### `c8gd.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|59|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|520|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gd.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|1392Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `c8gd.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gd.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3055Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c8gd.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gd.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6525Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c8gd.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gd.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c8gd.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gd.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27322Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c8gd.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gd.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c8gd.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gd.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|87943Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c8gd.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gd.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `c8gd.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|5700|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gd.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173341Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c8gd.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|5700|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gd.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173341Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c8gd.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|11400|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gd.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|355203Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `c8gd.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|11400|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gd.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|355203Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## c8gn Family\n### `c8gn.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gn.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|1392Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `c8gn.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gn.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3055Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `c8gn.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gn.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6525Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `c8gn.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gn.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `c8gn.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gn.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27322Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `c8gn.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gn.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|56994Mi|\n |pods|292|\n |vpc.amazonaws.com/pod-eni|52|\n### `c8gn.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|150000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gn.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|86667Mi|\n |pods|350|\n |vpc.amazonaws.com/pod-eni|50|\n### `c8gn.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gn.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112181Mi|\n |pods|786|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|106|\n### `c8gn.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|300000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gn.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|168490Mi|\n |pods|1178|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n### `c8gn.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|300000|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gn.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|168490Mi|\n |pods|1178|\n |vpc.amazonaws.com/efa|1|\n### `c8gn.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|600000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gn.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|356820Mi|\n |pods|590|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|98|\n### `c8gn.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|600000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8gn.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|356820Mi|\n |pods|590|\n |vpc.amazonaws.com/efa|2|\n## c8i Family\n### `c8i.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8i.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|2784Mi|\n |pods|59|\n |vpc.amazonaws.com/pod-eni|9|\n### `c8i.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8i.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|5924Mi|\n |pods|118|\n |vpc.amazonaws.com/pod-eni|18|\n### `c8i.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8i.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|13502Mi|\n |pods|118|\n |vpc.amazonaws.com/pod-eni|38|\n### `c8i.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8i.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|25621Mi|\n |pods|394|\n |vpc.amazonaws.com/pod-eni|54|\n### `c8i.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8i.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|54853Mi|\n |pods|492|\n |vpc.amazonaws.com/pod-eni|82|\n### `c8i.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8i.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|84086Mi|\n |pods|590|\n |vpc.amazonaws.com/pod-eni|110|\n### `c8i.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8i.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|109776Mi|\n |pods|1010|\n |vpc.amazonaws.com/pod-eni|106|\n### `c8i.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8i.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|170397Mi|\n |pods|1010|\n |vpc.amazonaws.com/pod-eni|106|\n### `c8i.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8i.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|225474Mi|\n |pods|1514|\n |vpc.amazonaws.com/pod-eni|98|\n### `c8i.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8i.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|346715Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n### `c8i.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8i.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|346715Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n### `c8i.96xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|384|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|96xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8i.96xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|382970m|\n |ephemeral-storage|17Gi|\n |memory|710440Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n### `c8i.metal-96xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|384|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal-96xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8i.metal-96xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|382970m|\n |ephemeral-storage|17Gi|\n |memory|710440Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n## c8i-flex Family\n### `c8i-flex.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|468|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8i-flex.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|2784Mi|\n |pods|59|\n |vpc.amazonaws.com/pod-eni|3|\n### `c8i-flex.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8i-flex.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|5924Mi|\n |pods|118|\n |vpc.amazonaws.com/pod-eni|8|\n### `c8i-flex.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8i-flex.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|13502Mi|\n |pods|118|\n |vpc.amazonaws.com/pod-eni|18|\n### `c8i-flex.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8i-flex.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|25621Mi|\n |pods|394|\n |vpc.amazonaws.com/pod-eni|34|\n### `c8i-flex.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8i-flex.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|54853Mi|\n |pods|492|\n |vpc.amazonaws.com/pod-eni|52|\n### `c8i-flex.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|11250|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8i-flex.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|84086Mi|\n |pods|590|\n |vpc.amazonaws.com/pod-eni|110|\n### `c8i-flex.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8i-flex.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|109776Mi|\n |pods|1010|\n |vpc.amazonaws.com/pod-eni|106|\n## c8id Family\n### `c8id.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8id.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|2784Mi|\n |pods|59|\n### `c8id.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8id.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|5924Mi|\n |pods|118|\n### `c8id.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8id.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|13502Mi|\n |pods|118|\n### `c8id.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8id.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|25621Mi|\n |pods|394|\n### `c8id.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8id.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|54853Mi|\n |pods|492|\n### `c8id.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8id.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|84086Mi|\n |pods|590|\n### `c8id.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8id.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|109776Mi|\n |pods|1010|\n### `c8id.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|5700|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8id.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|170397Mi|\n |pods|1010|\n### `c8id.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8id.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|225474Mi|\n |pods|1514|\n### `c8id.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|11400|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8id.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|346715Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n### `c8id.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|11400|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8id.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|346715Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n### `c8id.96xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|384|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|22800|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-size|96xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8id.96xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|382970m|\n |ephemeral-storage|17Gi|\n |memory|710440Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n### `c8id.metal-96xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|c|\n |karpenter.k8s.aws/instance-cpu|384|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|c8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|22800|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-size|metal-96xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|c8id.metal-96xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|382970m|\n |ephemeral-storage|17Gi|\n |memory|710440Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n## d2 Family\n### `d2.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|d2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|31232|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d2.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|27896Mi|\n |pods|58|\n### `d2.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|1000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|d2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|62464|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d2.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|56786Mi|\n |pods|58|\n### `d2.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|d2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|124928|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d2.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|112629Mi|\n |pods|234|\n### `d2.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|36|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|d2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|249856|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d2.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|35840m|\n |ephemeral-storage|17Gi|\n |memory|228187Mi|\n |pods|234|\n## d3 Family\n### `d3.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|d3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|5940|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|3000|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d3.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29845Mi|\n |pods|10|\n |vpc.amazonaws.com/pod-eni|42|\n### `d3.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|d3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|11880|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|6000|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d3.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|60067Mi|\n |pods|18|\n |vpc.amazonaws.com/pod-eni|92|\n### `d3.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|d3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|23760|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d3.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|120468Mi|\n |pods|38|\n |vpc.amazonaws.com/pod-eni|118|\n### `d3.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|5000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|d3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|47520|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d3.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|241479Mi|\n |pods|59|\n |vpc.amazonaws.com/pod-eni|119|\n## d3en Family\n### `d3en.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|d3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|27960|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|6000|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d3en.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14690Mi|\n |pods|10|\n |vpc.amazonaws.com/pod-eni|24|\n### `d3en.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|d3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|55920|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d3en.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29757Mi|\n |pods|18|\n |vpc.amazonaws.com/pod-eni|58|\n### `d3en.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|d3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|111840|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d3en.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|59847Mi|\n |pods|38|\n |vpc.amazonaws.com/pod-eni|118|\n### `d3en.6xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|24|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|d3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|167760|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|6xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d3en.6xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|23870m|\n |ephemeral-storage|17Gi|\n |memory|89938Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|118|\n### `d3en.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|5000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|d3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|223680|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d3en.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|120028Mi|\n |pods|78|\n |vpc.amazonaws.com/pod-eni|118|\n### `d3en.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|d|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|7000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|d3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|335520|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|d3en.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|180528Mi|\n |pods|89|\n |vpc.amazonaws.com/pod-eni|119|\n## dl1 Family\n### `dl1.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|dl|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|dl1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-gpu-count|8|\n |karpenter.k8s.aws/instance-gpu-manufacturer|habana|\n |karpenter.k8s.aws/instance-gpu-memory|32768|\n |karpenter.k8s.aws/instance-gpu-name|gaudi-hl-205|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|4000|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|400000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|dl1.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |habana.ai/gaudi|8|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|4|\n |vpc.amazonaws.com/pod-eni|62|\n## dl2q Family\n### `dl2q.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-accelerator-count|8|\n |karpenter.k8s.aws/instance-accelerator-manufacturer|qualcomm|\n |karpenter.k8s.aws/instance-accelerator-name|qualcomm-ai100|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|dl|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|dl2q|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|dl2q.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## f1 Family\n### `f1.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|f|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|1700|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|f1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-local-nvme|470|\n |karpenter.k8s.aws/instance-memory|124928|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|f1.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|114565Mi|\n |pods|58|\n### `f1.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|f|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|f1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-local-nvme|940|\n |karpenter.k8s.aws/instance-memory|249856|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|f1.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|228187Mi|\n |pods|234|\n### `f1.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|f|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|f1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-local-nvme|3760|\n |karpenter.k8s.aws/instance-memory|999424|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|f1.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|919778Mi|\n |pods|394|\n## f2 Family\n### `f2.6xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|f|\n |karpenter.k8s.aws/instance-cpu|24|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|7500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|f2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|940|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|6xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|f2.6xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|23870m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `f2.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|f|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|f2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1880|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|f2.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|482037Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `f2.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|f|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|f2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7520|\n |karpenter.k8s.aws/instance-memory|2097152|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|f2.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1931403Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## g4ad Family\n### `g4ad.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g4ad|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-gpu-memory|8192|\n |karpenter.k8s.aws/instance-gpu-name|radeon-pro-v520|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|150|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2000|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g4ad.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |amd.com/gpu|1|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14712Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|12|\n### `g4ad.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g4ad|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-gpu-memory|8192|\n |karpenter.k8s.aws/instance-gpu-name|radeon-pro-v520|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|300|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|4167|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g4ad.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |amd.com/gpu|1|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29867Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|12|\n### `g4ad.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g4ad|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-gpu-memory|8192|\n |karpenter.k8s.aws/instance-gpu-name|radeon-pro-v520|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|600|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|8333|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g4ad.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |amd.com/gpu|1|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|59946Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|11|\n### `g4ad.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g4ad|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-gpu-count|2|\n |karpenter.k8s.aws/instance-gpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-gpu-memory|8192|\n |karpenter.k8s.aws/instance-gpu-name|radeon-pro-v520|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1200|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g4ad.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |amd.com/gpu|2|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|120248Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|10|\n### `g4ad.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6300|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g4ad|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-gpu-count|4|\n |karpenter.k8s.aws/instance-gpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-gpu-memory|8192|\n |karpenter.k8s.aws/instance-gpu-name|radeon-pro-v520|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2400|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g4ad.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |amd.com/gpu|4|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|6|\n## g4dn Family\n### `g4dn.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g4dn|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|t4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|125|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g4dn.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |nvidia.com/gpu|1|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|39|\n### `g4dn.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g4dn|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|t4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|225|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g4dn.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29636Mi|\n |nvidia.com/gpu|1|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|39|\n### `g4dn.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g4dn|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|t4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|225|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g4dn.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|59946Mi|\n |nvidia.com/gpu|1|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|59|\n### `g4dn.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g4dn|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|t4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|900|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g4dn.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|120248Mi|\n |nvidia.com/gpu|1|\n |pods|58|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|58|\n### `g4dn.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g4dn|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-gpu-count|4|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|t4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|900|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g4dn.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |nvidia.com/gpu|4|\n |pods|234|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|54|\n### `g4dn.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g4dn|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|t4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|900|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g4dn.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|241490Mi|\n |nvidia.com/gpu|1|\n |pods|58|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|118|\n### `g4dn.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g4dn|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-gpu-count|8|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|t4|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|1800|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g4dn.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |nvidia.com/gpu|8|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## g5 Family\n### `g5.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|a10g|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|250|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |nvidia.com/gpu|1|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|4|\n### `g5.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|a10g|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|450|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |nvidia.com/gpu|1|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|17|\n### `g5.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|a10g|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|600|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |nvidia.com/gpu|1|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|34|\n### `g5.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|16000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|a10g|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|900|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |nvidia.com/gpu|1|\n |pods|234|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|84|\n### `g5.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|16000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|4|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|a10g|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |nvidia.com/gpu|4|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `g5.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|16000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|a10g|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |nvidia.com/gpu|1|\n |pods|234|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|114|\n### `g5.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|4|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|a10g|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |nvidia.com/gpu|4|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `g5.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|8|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|a10g|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|723299Mi|\n |nvidia.com/gpu|8|\n |pods|345|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|115|\n## g5g Family\n### `g5g.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|g5g|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|t4g|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5g.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6525Mi|\n |nvidia.com/gpu|1|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `g5g.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|g5g|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|t4g|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5g.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |nvidia.com/gpu|1|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `g5g.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|g5g|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|t4g|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5g.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|27322Mi|\n |nvidia.com/gpu|1|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `g5g.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|g5g|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|t4g|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5g.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |nvidia.com/gpu|1|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `g5g.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|g5g|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|2|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|t4g|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5g.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |nvidia.com/gpu|2|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `g5g.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|g5g|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|2|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|t4g|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g5g.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|112720Mi|\n |nvidia.com/gpu|2|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## g6 Family\n### `g6.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|5000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|250|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |nvidia.com/gpu|1|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `g6.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|5000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|450|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |nvidia.com/gpu|1|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `g6.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|8000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|600|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |nvidia.com/gpu|1|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `g6.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|16000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|900|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |nvidia.com/gpu|1|\n |pods|234|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|84|\n### `g6.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|4|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3760|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |nvidia.com/gpu|4|\n |pods|234|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|114|\n### `g6.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1880|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |nvidia.com/gpu|1|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `g6.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|4|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3760|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |nvidia.com/gpu|4|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `g6.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|8|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7520|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |nvidia.com/gpu|8|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## g6e Family\n### `g6e.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|5000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6e|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|45776|\n |karpenter.k8s.aws/instance-gpu-name|l40s|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|250|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6e.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |nvidia.com/gpu|1|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `g6e.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|5000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6e|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|45776|\n |karpenter.k8s.aws/instance-gpu-name|l40s|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|450|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6e.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |nvidia.com/gpu|1|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `g6e.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|8000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6e|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|45776|\n |karpenter.k8s.aws/instance-gpu-name|l40s|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|600|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6e.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |nvidia.com/gpu|1|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `g6e.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|16000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6e|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|45776|\n |karpenter.k8s.aws/instance-gpu-name|l40s|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|900|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6e.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |nvidia.com/gpu|1|\n |pods|234|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|84|\n### `g6e.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6e|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|4|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|45776|\n |karpenter.k8s.aws/instance-gpu-name|l40s|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6e.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360157Mi|\n |nvidia.com/gpu|4|\n |pods|292|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|112|\n### `g6e.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6e|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|45776|\n |karpenter.k8s.aws/instance-gpu-name|l40s|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|35000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6e.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |nvidia.com/gpu|1|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `g6e.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6e|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|4|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|45776|\n |karpenter.k8s.aws/instance-gpu-name|l40s|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6e.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|721682Mi|\n |nvidia.com/gpu|4|\n |pods|492|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|102|\n### `g6e.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6e|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|8|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|45776|\n |karpenter.k8s.aws/instance-gpu-name|l40s|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|400000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6e.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1449132Mi|\n |nvidia.com/gpu|8|\n |pods|492|\n |vpc.amazonaws.com/efa|4|\n |vpc.amazonaws.com/pod-eni|82|\n## g6f Family\n### `g6f.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|5000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6f|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|0|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|2861|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|100|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|1500|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6f.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|7002Mi|\n |pods|20|\n |vpc.amazonaws.com/pod-eni|10|\n### `g6f.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|5000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6f|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|0|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|2861|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|100|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6f.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `g6f.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|5000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6f|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|0|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|5722|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|200|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6f.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `g6f.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g6f|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|0|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|11444|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|450|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g6f.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n## g7e Family\n### `g7e.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|5000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g7e|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|98304|\n |karpenter.k8s.aws/instance-gpu-name|rtx-pro-server-6000|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g7e.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|57471Mi|\n |nvidia.com/gpu|1|\n |pods|254|\n### `g7e.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|8000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g7e|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|98304|\n |karpenter.k8s.aws/instance-gpu-name|rtx-pro-server-6000|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g7e.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|115320Mi|\n |nvidia.com/gpu|1|\n |pods|506|\n### `g7e.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|16000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g7e|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|98304|\n |karpenter.k8s.aws/instance-gpu-name|rtx-pro-server-6000|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g7e.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|236562Mi|\n |nvidia.com/gpu|1|\n |pods|506|\n |vpc.amazonaws.com/efa|1|\n### `g7e.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g7e|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-gpu-count|2|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|98304|\n |karpenter.k8s.aws/instance-gpu-name|rtx-pro-server-6000|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|400000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g7e.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|477659Mi|\n |nvidia.com/gpu|2|\n |pods|632|\n |vpc.amazonaws.com/efa|1|\n### `g7e.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|50000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g7e|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-gpu-count|4|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|98304|\n |karpenter.k8s.aws/instance-gpu-name|rtx-pro-server-6000|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|800000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g7e.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|962625Mi|\n |nvidia.com/gpu|4|\n |pods|632|\n |vpc.amazonaws.com/efa|2|\n### `g7e.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|g|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|g7e|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-gpu-count|8|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|98304|\n |karpenter.k8s.aws/instance-gpu-name|rtx-pro-server-6000|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|15200|\n |karpenter.k8s.aws/instance-memory|2097152|\n |karpenter.k8s.aws/instance-network-bandwidth|1600000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|g7e.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1932558Mi|\n |nvidia.com/gpu|8|\n |pods|632|\n |vpc.amazonaws.com/efa|4|\n## gr6 Family\n### `gr6.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|gr|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|8000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|gr6|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|600|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|gr6.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |nvidia.com/gpu|1|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `gr6.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|gr|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|16000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|gr6|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|22888|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|900|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|gr6.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |nvidia.com/gpu|1|\n |pods|234|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|84|\n## gr6f Family\n### `gr6f.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|gr|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|8000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|gr6f|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|0|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|11444|\n |karpenter.k8s.aws/instance-gpu-name|l4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|450|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|gr6f.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n## h1 Family\n### `h1.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|h|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|1750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|h1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|h1.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n### `h1.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|h|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|h1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|h1.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n### `h1.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|h|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|7000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|h1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|h1.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n### `h1.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|h|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|h1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|h1.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|237794Mi|\n |pods|394|\n## hpc6a Family\n### `hpc6a.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|hpc|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|hpc6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|hpc6a.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|362269Mi|\n |pods|100|\n |vpc.amazonaws.com/efa|1|\n## hpc6id Family\n### `hpc6id.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|hpc|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|hpc6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|15200|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|hpc6id.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|969016Mi|\n |pods|51|\n |vpc.amazonaws.com/efa|2|\n## hpc7a Family\n### `hpc7a.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|hpc|\n |karpenter.k8s.aws/instance-cpu|24|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|hpc7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|300000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|hpc7a.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|23870m|\n |ephemeral-storage|17Gi|\n |memory|725994Mi|\n |pods|100|\n |vpc.amazonaws.com/efa|2|\n### `hpc7a.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|hpc|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|hpc7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|300000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|hpc7a.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|725994Mi|\n |pods|100|\n |vpc.amazonaws.com/efa|2|\n### `hpc7a.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|hpc|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|hpc7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|300000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|hpc7a.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|725994Mi|\n |pods|100|\n |vpc.amazonaws.com/efa|2|\n### `hpc7a.96xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|hpc|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|hpc7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|300000|\n |karpenter.k8s.aws/instance-size|96xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|hpc7a.96xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|725994Mi|\n |pods|100|\n |vpc.amazonaws.com/efa|2|\n## hpc7g Family\n### `hpc7g.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|hpc|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|hpc7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|hpc7g.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118649Mi|\n |pods|198|\n |vpc.amazonaws.com/efa|1|\n### `hpc7g.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|hpc|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|hpc7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|hpc7g.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118649Mi|\n |pods|198|\n |vpc.amazonaws.com/efa|1|\n### `hpc7g.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|hpc|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|hpc7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|hpc7g.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|118649Mi|\n |pods|198|\n |vpc.amazonaws.com/efa|1|\n## i2 Family\n### `i2.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|i2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|31232|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i2.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|27896Mi|\n |pods|58|\n### `i2.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|i2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|62464|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i2.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|56786Mi|\n |pods|58|\n### `i2.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|i2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|124928|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i2.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|112629Mi|\n |pods|234|\n### `i2.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|i2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|249856|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i2.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|228187Mi|\n |pods|234|\n## i3 Family\n### `i3.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|425|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|i3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-local-nvme|475|\n |karpenter.k8s.aws/instance-memory|15616|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|13770Mi|\n |pods|29|\n### `i3.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|850|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|i3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|31232|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|27896Mi|\n |pods|58|\n### `i3.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|1700|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|i3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|62464|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|56786Mi|\n |pods|58|\n### `i3.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|i3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|124928|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|112629Mi|\n |pods|234|\n### `i3.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|7000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|i3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|249856|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|228187Mi|\n |pods|234|\n### `i3.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|i3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-local-nvme|15200|\n |karpenter.k8s.aws/instance-memory|499712|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|453771Mi|\n |pods|737|\n## i3en Family\n### `i3en.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1250|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2100|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3en.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|5|\n### `i3en.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2500|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|4200|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3en.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|12|\n### `i3en.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|5000|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|8400|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3en.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|28|\n### `i3en.3xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|12|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7500|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|3xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3en.3xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|11900m|\n |ephemeral-storage|17Gi|\n |memory|89938Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `i3en.6xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|24|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|15000|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|6xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3en.6xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|23870m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `i3en.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|30000|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3en.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|54|\n### `i3en.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|60000|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3en.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `i3en.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i3en|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|60000|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i3en.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## i4g Family\n### `i4g.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4g|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|468|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4g.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14422Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `i4g.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4g|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|937|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4g.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `i4g.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4g|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1875|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|4687|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4g.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59568Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `i4g.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4g|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3750|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|9375|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4g.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `i4g.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4g|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7500|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4g.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239495Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `i4g.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4g|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|15000|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4g.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476445Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## i4i Family\n### `i4i.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4i|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|468|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4i.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n### `i4i.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4i|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|937|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4i.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|6|\n### `i4i.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4i|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1875|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|4687|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4i.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|26|\n### `i4i.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4i|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3750|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|9375|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4i.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|52|\n### `i4i.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4i|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7500|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4i.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|112|\n### `i4i.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4i|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|11250|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|28120|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4i.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|112|\n### `i4i.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4i|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|15000|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4i.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|120|\n### `i4i.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4i|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|22500|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|56250|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4i.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|722287Mi|\n |pods|437|\n |vpc.amazonaws.com/pod-eni|105|\n### `i4i.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4i|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|30000|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4i.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|961470Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|120|\n### `i4i.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i4i|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|30000|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i4i.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|961470Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|120|\n## i7i Family\n### `i7i.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|468|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1171|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7i.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `i7i.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|937|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|2343|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7i.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `i7i.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1875|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|4687|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7i.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `i7i.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3750|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|9375|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7i.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `i7i.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7500|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7i.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `i7i.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|11250|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|28120|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7i.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `i7i.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|15000|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7i.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `i7i.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|22500|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|56250|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7i.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `i7i.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|22500|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|56250|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7i.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `i7i.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|45000|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7i.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446437Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `i7i.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|45000|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7i.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446437Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## i7ie Family\n### `i7ie.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7ie|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1250|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2083|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7ie.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|19|\n### `i7ie.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7ie|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2500|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|4166|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7ie.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|27|\n### `i7ie.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7ie|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|5000|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|8333|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7ie.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|27|\n### `i7ie.3xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|12|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7ie|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7500|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|3xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7ie.3xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|11900m|\n |ephemeral-storage|17Gi|\n |memory|89938Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|27|\n### `i7ie.6xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|24|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7ie|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|15000|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|6xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7ie.6xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|23870m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `i7ie.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7ie|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|30000|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7ie.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|359035Mi|\n |pods|394|\n |vpc.amazonaws.com/pod-eni|54|\n### `i7ie.18xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|72|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|22500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7ie|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|45000|\n |karpenter.k8s.aws/instance-memory|589824|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|18xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7ie.18xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|71750m|\n |ephemeral-storage|17Gi|\n |memory|537125Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `i7ie.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7ie|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|60000|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7ie.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `i7ie.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7ie|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|60000|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7ie.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `i7ie.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7ie|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|120000|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7ie.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446437Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `i7ie.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i7ie|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|120000|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i7ie.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446437Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## i8g Family\n### `i8g.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|468|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1172|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8g.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14422Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `i8g.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|937|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|2344|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8g.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `i8g.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1875|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|4688|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8g.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59568Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `i8g.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3750|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|9375|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8g.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `i8g.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7500|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8g.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239495Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `i8g.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|11250|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|28120|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8g.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360736Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `i8g.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|15000|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8g.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476445Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `i8g.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|22500|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|56250|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8g.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718928Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `i8g.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|22500|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|56250|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8g.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718928Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `i8g.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|45000|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8g.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446378Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## i8ge Family\n### `i8ge.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8ge|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1250|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2100|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8ge.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14422Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|19|\n### `i8ge.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8ge|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2500|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|4200|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8ge.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|27|\n### `i8ge.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8ge|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|5000|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|8400|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8ge.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59568Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|27|\n### `i8ge.3xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|12|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8ge|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7500|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|3xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8ge.3xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|11900m|\n |ephemeral-storage|17Gi|\n |memory|88581Mi|\n |pods|176|\n |vpc.amazonaws.com/pod-eni|25|\n### `i8ge.6xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|24|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8ge|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|15000|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|6xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8ge.6xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|23870m|\n |ephemeral-storage|17Gi|\n |memory|178236Mi|\n |pods|292|\n |vpc.amazonaws.com/pod-eni|52|\n### `i8ge.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8ge|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|30000|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8ge.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|359460Mi|\n |pods|350|\n |vpc.amazonaws.com/pod-eni|50|\n### `i8ge.18xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|72|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|22500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8ge|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|45000|\n |karpenter.k8s.aws/instance-memory|589824|\n |karpenter.k8s.aws/instance-network-bandwidth|112500|\n |karpenter.k8s.aws/instance-size|18xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8ge.18xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|71750m|\n |ephemeral-storage|17Gi|\n |memory|536527Mi|\n |pods|786|\n |vpc.amazonaws.com/pod-eni|106|\n### `i8ge.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8ge|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|60000|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|150000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8ge.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718389Mi|\n |pods|786|\n |vpc.amazonaws.com/pod-eni|106|\n### `i8ge.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8ge|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|60000|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|150000|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8ge.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718389Mi|\n |pods|786|\n |vpc.amazonaws.com/pod-eni|106|\n### `i8ge.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8ge|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|120000|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|180000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8ge.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1441527Mi|\n |pods|1178|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n### `i8ge.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|i|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|i8ge|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|120000|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|180000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|i8ge.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1441527Mi|\n |pods|1178|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n## im4gn Family\n### `im4gn.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|im|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|im4gn|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|937|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|im4gn.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6844Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `im4gn.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|im|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|im4gn|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1875|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|im4gn.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `im4gn.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|im|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|im4gn|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3750|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|im4gn.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `im4gn.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|im|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|im4gn|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7500|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|im4gn.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `im4gn.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|im|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|im4gn|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|15000|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|im4gn.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `im4gn.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|im|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|im4gn|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|30000|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|im4gn.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|233962Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## inf1 Family\n### `inf1.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-accelerator-count|1|\n |karpenter.k8s.aws/instance-accelerator-manufacturer|aws|\n |karpenter.k8s.aws/instance-accelerator-name|inferentia|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|inf|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|inf1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|inf1.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |aws.amazon.com/neuron|1|\n |aws.amazon.com/neuroncore|4|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|6804Mi|\n |pods|38|\n |vpc.amazonaws.com/pod-eni|38|\n### `inf1.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-accelerator-count|1|\n |karpenter.k8s.aws/instance-accelerator-manufacturer|aws|\n |karpenter.k8s.aws/instance-accelerator-name|inferentia|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|inf|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|inf1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|inf1.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |aws.amazon.com/neuron|1|\n |aws.amazon.com/neuroncore|4|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|14382Mi|\n |pods|38|\n |vpc.amazonaws.com/pod-eni|38|\n### `inf1.6xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-accelerator-count|4|\n |karpenter.k8s.aws/instance-accelerator-manufacturer|aws|\n |karpenter.k8s.aws/instance-accelerator-name|inferentia|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|inf|\n |karpenter.k8s.aws/instance-cpu|24|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|inf1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|49152|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|6xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|inf1.6xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |aws.amazon.com/neuron|4|\n |aws.amazon.com/neuroncore|16|\n |cpu|23870m|\n |ephemeral-storage|17Gi|\n |memory|42536Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `inf1.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-accelerator-count|16|\n |karpenter.k8s.aws/instance-accelerator-manufacturer|aws|\n |karpenter.k8s.aws/instance-accelerator-name|inferentia|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|inf|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|inf1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|inf1.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |aws.amazon.com/neuron|16|\n |aws.amazon.com/neuroncore|64|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|177976Mi|\n |pods|321|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|111|\n## inf2 Family\n### `inf2.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-accelerator-count|1|\n |karpenter.k8s.aws/instance-accelerator-manufacturer|aws|\n |karpenter.k8s.aws/instance-accelerator-name|inferentia2|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|inf|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|inf2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2083|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|inf2.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |aws.amazon.com/neuron|1|\n |aws.amazon.com/neuroncore|2|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `inf2.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-accelerator-count|1|\n |karpenter.k8s.aws/instance-accelerator-manufacturer|aws|\n |karpenter.k8s.aws/instance-accelerator-name|inferentia2|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|inf|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|inf2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|16667|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|inf2.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |aws.amazon.com/neuron|1|\n |aws.amazon.com/neuroncore|2|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `inf2.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-accelerator-count|6|\n |karpenter.k8s.aws/instance-accelerator-manufacturer|aws|\n |karpenter.k8s.aws/instance-accelerator-name|inferentia2|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|inf|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|inf2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|inf2.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |aws.amazon.com/neuron|6|\n |aws.amazon.com/neuroncore|12|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `inf2.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-accelerator-count|12|\n |karpenter.k8s.aws/instance-accelerator-manufacturer|aws|\n |karpenter.k8s.aws/instance-accelerator-name|inferentia2|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|inf|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|inf2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|inf2.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |aws.amazon.com/neuron|12|\n |aws.amazon.com/neuroncore|24|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## is4gen Family\n### `is4gen.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|is|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|is4gen|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|937|\n |karpenter.k8s.aws/instance-memory|6144|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|is4gen.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|5181Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `is4gen.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|is|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|is4gen|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1875|\n |karpenter.k8s.aws/instance-memory|12288|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|is4gen.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|10633Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `is4gen.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|is|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|is4gen|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3750|\n |karpenter.k8s.aws/instance-memory|24576|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|is4gen.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|21680Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `is4gen.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|is|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|is4gen|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7500|\n |karpenter.k8s.aws/instance-memory|49152|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|is4gen.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|44413Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `is4gen.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|is|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|is4gen|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|15000|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|is4gen.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|87943Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `is4gen.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|is|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|is4gen|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|30000|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|is4gen.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|178874Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n## m1 Family\n### `m1.small`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|0|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|1740|\n |karpenter.k8s.aws/instance-size|small|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m1.small|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|1166Mi|\n |pods|8|\n### `m1.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|0|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|3788|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m1.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|3016Mi|\n |pods|12|\n### `m1.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|0|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|7680|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m1.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6430Mi|\n |pods|29|\n### `m1.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|0|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|15360|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m1.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|13215Mi|\n |pods|58|\n## m2 Family\n### `m2.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|0|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|17510|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m2.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|15203Mi|\n |pods|58|\n### `m2.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|0|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|35020|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m2.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|30740Mi|\n |pods|118|\n### `m2.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|0|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|70041|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m2.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|61858Mi|\n |pods|234|\n## m3 Family\n### `m3.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|3840|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m3.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|3065Mi|\n |pods|12|\n### `m3.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|7680|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m3.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6430Mi|\n |pods|29|\n### `m3.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|15360|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m3.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|13215Mi|\n |pods|58|\n### `m3.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|30720|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m3.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|26763Mi|\n |pods|118|\n## m4 Family\n### `m4.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|450|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m4.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|7002Mi|\n |pods|20|\n### `m4.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m4.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n### `m4.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|1000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m4.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n### `m4.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m4.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n### `m4.10xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|40|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|163840|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|10xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m4.10xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|39830m|\n |ephemeral-storage|17Gi|\n |memory|148623Mi|\n |pods|234|\n### `m4.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m4.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n## m5 Family\n### `m5.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m5.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m5.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m5.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|13600|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m5.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m5.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|120|\n## m5a Family\n### `m5a.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5a.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m5a.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5a.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m5a.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5a.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m5a.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5a.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5a.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5a.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5a.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6780|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5a.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5a.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5a.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m5a.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|13750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5a.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## m5ad Family\n### `m5ad.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|75|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5ad.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m5ad.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|150|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5ad.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m5ad.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|300|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5ad.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m5ad.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|600|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5ad.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5ad.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1200|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5ad.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5ad.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6780|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1800|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5ad.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5ad.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2400|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5ad.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m5ad.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|13750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3600|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5ad.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## m5d Family\n### `m5d.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|75|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5d.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m5d.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|150|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5d.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m5d.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|300|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5d.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m5d.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|600|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5d.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5d.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1200|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5d.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5d.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1800|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5d.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5d.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|13600|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2400|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5d.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m5d.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3600|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5d.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m5d.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3600|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5d.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## m5dn Family\n### `m5dn.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|75|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|2100|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5dn.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m5dn.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|150|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|4100|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5dn.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m5dn.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|300|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|8125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5dn.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m5dn.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|600|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|16250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5dn.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5dn.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1200|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5dn.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5dn.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1800|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5dn.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5dn.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|13600|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2400|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5dn.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m5dn.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3600|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5dn.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m5dn.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3600|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5dn.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## m5n Family\n### `m5n.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|2100|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5n.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m5n.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|4100|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5n.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m5n.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|8125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5n.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m5n.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|16250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5n.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5n.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5n.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5n.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5n.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m5n.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|13600|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5n.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m5n.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5n.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m5n.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5n.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## m5zn Family\n### `m5zn.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5zn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|3000|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5zn.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|13|\n### `m5zn.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5zn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5zn.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|29|\n### `m5zn.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5zn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5zn.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|62|\n### `m5zn.3xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|12|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5zn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|49152|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|3xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5zn.3xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|11900m|\n |ephemeral-storage|17Gi|\n |memory|42536Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|92|\n### `m5zn.6xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|24|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5zn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|6xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5zn.6xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|23870m|\n |ephemeral-storage|17Gi|\n |memory|88002Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `m5zn.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5zn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5zn.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m5zn.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m5zn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m5zn.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## m6a Family\n### `m6a.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6a.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m6a.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6a.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m6a.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6a.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m6a.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6a.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m6a.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6a.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `m6a.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6a.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `m6a.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6a.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6a.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6a.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6a.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6a.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6a.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6a.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6a.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6a.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## m6g Family\n### `m6g.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|500|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6g.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|3286Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `m6g.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6g.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6844Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m6g.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6g.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m6g.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6g.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m6g.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6g.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m6g.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6g.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m6g.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14250|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6g.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178874Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m6g.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6g.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|233962Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6g.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6g.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|233962Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## m6gd Family\n### `m6gd.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|59|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|500|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6gd.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|3286Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `m6gd.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6gd.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6844Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m6gd.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6gd.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m6gd.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6gd.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m6gd.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6gd.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m6gd.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6gd.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m6gd.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14250|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6gd.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178874Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m6gd.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6gd.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|233962Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6gd.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|m6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6gd.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|233962Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## m6i Family\n### `m6i.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6i.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m6i.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6i.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m6i.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6i.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m6i.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6i.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m6i.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6i.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `m6i.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6i.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `m6i.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6i.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6i.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6i.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6i.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6i.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6i.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6i.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## m6id Family\n### `m6id.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6id.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m6id.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6id.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m6id.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6id.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m6id.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6id.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m6id.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6id.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `m6id.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6id.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `m6id.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6id.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6id.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|5700|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6id.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6id.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6id.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6id.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6id.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## m6idn Family\n### `m6idn.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6idn.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m6idn.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6idn.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m6idn.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6idn.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m6idn.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6idn.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m6idn.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6idn.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `m6idn.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|37500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6idn.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `m6idn.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|50000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6idn.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6idn.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|75000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|5700|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|150000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6idn.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6idn.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6idn.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|480277Mi|\n |pods|394|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|106|\n### `m6idn.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6idn.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|480277Mi|\n |pods|394|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|106|\n## m6in Family\n### `m6in.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6in.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m6in.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6in.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m6in.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6in.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m6in.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6in.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m6in.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6in.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `m6in.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|37500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6in.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `m6in.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|50000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6in.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6in.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|75000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|150000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6in.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m6in.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6in.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|480277Mi|\n |pods|394|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|106|\n### `m6in.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m6in.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|480277Mi|\n |pods|394|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|106|\n## m7a Family\n### `m7a.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|390|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7a.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|3345Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `m7a.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7a.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m7a.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7a.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m7a.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7a.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m7a.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7a.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m7a.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7a.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `m7a.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7a.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `m7a.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7a.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m7a.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7a.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m7a.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7a.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m7a.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7a.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m7a.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7a.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## m7g Family\n### `m7g.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|520|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7g.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|3286Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `m7g.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7g.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6844Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m7g.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1876|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7g.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m7g.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7g.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m7g.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7g.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m7g.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7g.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m7g.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7g.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178874Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m7g.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7g.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|233962Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m7g.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7g.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|233962Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## m7gd Family\n### `m7gd.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|59|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|520|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7gd.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|3286Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `m7gd.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7gd.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6844Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m7gd.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1876|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7gd.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m7gd.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7gd.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m7gd.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7gd.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m7gd.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7gd.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m7gd.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7gd.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178874Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m7gd.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7gd.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|233962Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m7gd.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7gd.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|233962Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## m7i Family\n### `m7i.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m7i.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m7i.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m7i.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m7i.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `m7i.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `m7i.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m7i.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m7i.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m7i.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m7i.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## m7i-flex Family\n### `m7i-flex.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i-flex|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|390|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i-flex.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6903Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|3|\n### `m7i-flex.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i-flex|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i-flex.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|8|\n### `m7i-flex.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i-flex|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i-flex.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m7i-flex.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i-flex|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i-flex.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57691Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|34|\n### `m7i-flex.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i-flex|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i-flex.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m7i-flex.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i-flex|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|9375|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i-flex.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `m7i-flex.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m7i-flex|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m7i-flex.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|234021Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## m8a Family\n### `m8a.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|520|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8a.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|3345Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `m8a.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8a.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6573Mi|\n |pods|59|\n |vpc.amazonaws.com/pod-eni|9|\n### `m8a.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8a.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|13942Mi|\n |pods|78|\n |vpc.amazonaws.com/pod-eni|18|\n### `m8a.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8a.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|28217Mi|\n |pods|158|\n |vpc.amazonaws.com/pod-eni|38|\n### `m8a.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8a.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|56811Mi|\n |pods|314|\n |vpc.amazonaws.com/pod-eni|54|\n### `m8a.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8a.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|116574Mi|\n |pods|392|\n |vpc.amazonaws.com/pod-eni|82|\n### `m8a.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8a.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|173169Mi|\n |pods|758|\n |vpc.amazonaws.com/pod-eni|110|\n### `m8a.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8a.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|231018Mi|\n |pods|1010|\n |vpc.amazonaws.com/pod-eni|106|\n### `m8a.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8a.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|352259Mi|\n |pods|1010|\n |vpc.amazonaws.com/pod-eni|106|\n### `m8a.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8a.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|352259Mi|\n |pods|1010|\n |vpc.amazonaws.com/pod-eni|106|\n### `m8a.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8a.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|710440Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n### `m8a.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8a.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|710440Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n## m8g Family\n### `m8g.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|520|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8g.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|3286Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `m8g.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8g.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6844Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m8g.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8g.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m8g.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8g.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m8g.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8g.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m8g.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8g.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m8g.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8g.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178874Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m8g.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8g.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|233962Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m8g.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8g.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355203Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m8g.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8g.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355203Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m8g.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8g.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|718928Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m8g.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8g.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|718928Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## m8gb Family\n### `m8gb.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|2083|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gb.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|3286Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `m8gb.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|4166|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gb.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6844Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m8gb.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|8333|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gb.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m8gb.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|16666|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gb.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m8gb.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|33330|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gb.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m8gb.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|50000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|66660|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gb.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|117615Mi|\n |pods|292|\n |vpc.amazonaws.com/pod-eni|52|\n### `m8gb.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|75000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gb.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|177598Mi|\n |pods|350|\n |vpc.amazonaws.com/pod-eni|50|\n### `m8gb.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|133330|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gb.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|233423Mi|\n |pods|786|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|106|\n### `m8gb.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|150000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gb.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|350352Mi|\n |pods|1178|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n### `m8gb.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|300000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gb.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|720545Mi|\n |pods|590|\n |vpc.amazonaws.com/efa|2|\n## m8gd Family\n### `m8gd.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|59|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|520|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gd.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|3286Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `m8gd.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gd.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6844Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m8gd.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gd.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m8gd.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gd.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m8gd.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gd.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m8gd.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gd.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m8gd.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gd.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|178874Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m8gd.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gd.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|233962Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `m8gd.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|5700|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gd.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355203Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m8gd.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|5700|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gd.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|355203Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m8gd.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|11400|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gd.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|718928Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `m8gd.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|11400|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gd.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|718928Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## m8gn Family\n### `m8gn.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gn.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|3286Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `m8gn.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gn.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6844Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `m8gn.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gn.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `m8gn.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gn.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `m8gn.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gn.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|57632Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `m8gn.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gn.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|117615Mi|\n |pods|292|\n |vpc.amazonaws.com/pod-eni|52|\n### `m8gn.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|150000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gn.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|177598Mi|\n |pods|350|\n |vpc.amazonaws.com/pod-eni|50|\n### `m8gn.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gn.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|233423Mi|\n |pods|786|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|106|\n### `m8gn.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|300000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gn.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|350352Mi|\n |pods|1178|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n### `m8gn.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|600000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8gn.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|720545Mi|\n |pods|590|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|98|\n## m8i Family\n### `m8i.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6573Mi|\n |pods|59|\n |vpc.amazonaws.com/pod-eni|9|\n### `m8i.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|13502Mi|\n |pods|118|\n |vpc.amazonaws.com/pod-eni|18|\n### `m8i.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|28657Mi|\n |pods|118|\n |vpc.amazonaws.com/pod-eni|38|\n### `m8i.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|55931Mi|\n |pods|394|\n |vpc.amazonaws.com/pod-eni|54|\n### `m8i.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|115474Mi|\n |pods|492|\n |vpc.amazonaws.com/pod-eni|82|\n### `m8i.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|175017Mi|\n |pods|590|\n |vpc.amazonaws.com/pod-eni|110|\n### `m8i.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|231018Mi|\n |pods|1010|\n |vpc.amazonaws.com/pod-eni|106|\n### `m8i.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|352259Mi|\n |pods|1010|\n |vpc.amazonaws.com/pod-eni|106|\n### `m8i.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|467957Mi|\n |pods|1514|\n |vpc.amazonaws.com/pod-eni|98|\n### `m8i.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|710440Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n### `m8i.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|710440Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n### `m8i.96xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|384|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|96xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i.96xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|382970m|\n |ephemeral-storage|17Gi|\n |memory|1437890Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n### `m8i.metal-96xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|384|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal-96xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i.metal-96xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|382970m|\n |ephemeral-storage|17Gi|\n |memory|1437890Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n## m8i-flex Family\n### `m8i-flex.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|468|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i-flex.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6573Mi|\n |pods|59|\n |vpc.amazonaws.com/pod-eni|3|\n### `m8i-flex.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i-flex.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|13502Mi|\n |pods|118|\n |vpc.amazonaws.com/pod-eni|8|\n### `m8i-flex.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i-flex.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|28657Mi|\n |pods|118|\n |vpc.amazonaws.com/pod-eni|18|\n### `m8i-flex.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i-flex.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|55931Mi|\n |pods|394|\n |vpc.amazonaws.com/pod-eni|34|\n### `m8i-flex.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i-flex.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|115474Mi|\n |pods|492|\n |vpc.amazonaws.com/pod-eni|52|\n### `m8i-flex.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|11250|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i-flex.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|175017Mi|\n |pods|590|\n |vpc.amazonaws.com/pod-eni|110|\n### `m8i-flex.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8i-flex.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|231018Mi|\n |pods|1010|\n |vpc.amazonaws.com/pod-eni|106|\n## m8id Family\n### `m8id.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8id.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6573Mi|\n |pods|59|\n### `m8id.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8id.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|13502Mi|\n |pods|118|\n### `m8id.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8id.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|28657Mi|\n |pods|118|\n### `m8id.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8id.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|55931Mi|\n |pods|394|\n### `m8id.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8id.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|115474Mi|\n |pods|492|\n### `m8id.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8id.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|175017Mi|\n |pods|590|\n### `m8id.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8id.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|231018Mi|\n |pods|1010|\n### `m8id.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|5700|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8id.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|352259Mi|\n |pods|1010|\n### `m8id.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8id.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|467957Mi|\n |pods|1514|\n### `m8id.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|11400|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8id.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|710440Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n### `m8id.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|11400|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8id.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|710440Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n### `m8id.96xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|384|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|22800|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-size|96xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8id.96xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|382970m|\n |ephemeral-storage|17Gi|\n |memory|1437890Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n### `m8id.metal-96xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|m|\n |karpenter.k8s.aws/instance-cpu|384|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|m8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|22800|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-size|metal-96xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|m8id.metal-96xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|382970m|\n |ephemeral-storage|17Gi|\n |memory|1437890Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n## p3 Family\n### `p3.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|p|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|1750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|p3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|v100|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|62464|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|p3.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|56786Mi|\n |nvidia.com/gpu|1|\n |pods|58|\n### `p3.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|p|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|7000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|p3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-gpu-count|4|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|v100|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|249856|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|p3.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|228187Mi|\n |nvidia.com/gpu|4|\n |pods|234|\n### `p3.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|p|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|p3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-gpu-count|8|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|16384|\n |karpenter.k8s.aws/instance-gpu-name|v100|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|499712|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|p3.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|459304Mi|\n |nvidia.com/gpu|8|\n |pods|234|\n## p3dn Family\n### `p3dn.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|p|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|p3dn|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-gpu-count|8|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|32768|\n |karpenter.k8s.aws/instance-gpu-name|v100|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1800|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|p3dn.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |nvidia.com/gpu|8|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## p4d Family\n### `p4d.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|p|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|p4d|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-gpu-count|8|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|40960|\n |karpenter.k8s.aws/instance-gpu-name|a100|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|8000|\n |karpenter.k8s.aws/instance-memory|1179648|\n |karpenter.k8s.aws/instance-network-bandwidth|400000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|p4d.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|1082712Mi|\n |nvidia.com/gpu|8|\n |pods|737|\n |vpc.amazonaws.com/efa|4|\n |vpc.amazonaws.com/pod-eni|62|\n## p4de Family\n### `p4de.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|p|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|p4de|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-gpu-count|8|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|81920|\n |karpenter.k8s.aws/instance-gpu-name|a100|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|8000|\n |karpenter.k8s.aws/instance-memory|1179648|\n |karpenter.k8s.aws/instance-network-bandwidth|400000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|p4de.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|1082712Mi|\n |nvidia.com/gpu|8|\n |pods|737|\n |vpc.amazonaws.com/efa|4|\n |vpc.amazonaws.com/pod-eni|62|\n## p5 Family\n### `p5.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|p|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|p5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|1|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|81920|\n |karpenter.k8s.aws/instance-gpu-name|h100|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|p5.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|240830Mi|\n |nvidia.com/gpu|1|\n |pods|118|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|58|\n### `p5.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|p|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|p5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|8|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|81920|\n |karpenter.k8s.aws/instance-gpu-name|h100|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|30400|\n |karpenter.k8s.aws/instance-memory|2097152|\n |karpenter.k8s.aws/instance-network-bandwidth|3200000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|p5.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1938410Mi|\n |nvidia.com/gpu|8|\n |pods|100|\n |vpc.amazonaws.com/efa|32|\n |vpc.amazonaws.com/pod-eni|120|\n## p5e Family\n### `p5e.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|p|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|p5e|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|8|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|144384|\n |karpenter.k8s.aws/instance-gpu-name|h200|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|30400|\n |karpenter.k8s.aws/instance-memory|2097152|\n |karpenter.k8s.aws/instance-network-bandwidth|3200000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|p5e.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1938410Mi|\n |nvidia.com/gpu|8|\n |pods|100|\n |vpc.amazonaws.com/efa|32|\n |vpc.amazonaws.com/pod-eni|120|\n## p5en Family\n### `p5en.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|p|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|p5en|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-gpu-count|8|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|144384|\n |karpenter.k8s.aws/instance-gpu-name|h200|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|30400|\n |karpenter.k8s.aws/instance-memory|2097152|\n |karpenter.k8s.aws/instance-network-bandwidth|3200000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|p5en.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1937332Mi|\n |nvidia.com/gpu|8|\n |pods|198|\n |vpc.amazonaws.com/efa|16|\n |vpc.amazonaws.com/pod-eni|120|\n## p6-b200 Family\n### `p6-b200.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|p|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|p6-b200|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|8|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|183359|\n |karpenter.k8s.aws/instance-gpu-name|b200|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|30400|\n |karpenter.k8s.aws/instance-memory|2097152|\n |karpenter.k8s.aws/instance-network-bandwidth|3200000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|p6-b200.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1937332Mi|\n |nvidia.com/gpu|8|\n |pods|198|\n |vpc.amazonaws.com/efa|8|\n |vpc.amazonaws.com/pod-eni|120|\n## p6-b300 Family\n### `p6-b300.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|p|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|p6-b300|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-gpu-count|8|\n |karpenter.k8s.aws/instance-gpu-manufacturer|nvidia|\n |karpenter.k8s.aws/instance-gpu-memory|275040|\n |karpenter.k8s.aws/instance-gpu-name|b300|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|30400|\n |karpenter.k8s.aws/instance-memory|4194304|\n |karpenter.k8s.aws/instance-network-bandwidth|6400000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|p6-b300.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|3877198Mi|\n |nvidia.com/gpu|8|\n |pods|198|\n |vpc.amazonaws.com/efa|16|\n |vpc.amazonaws.com/pod-eni|120|\n## r3 Family\n### `r3.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|15360|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r3.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|13534Mi|\n |pods|29|\n### `r3.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|31232|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r3.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|27896Mi|\n |pods|58|\n### `r3.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|62464|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r3.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|56786Mi|\n |pods|58|\n### `r3.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|124928|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r3.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|112629Mi|\n |pods|234|\n### `r3.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|249856|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r3.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|228187Mi|\n |pods|234|\n## r4 Family\n### `r4.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|425|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|15616|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r4.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|13770Mi|\n |pods|29|\n### `r4.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|850|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|31232|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r4.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|27896Mi|\n |pods|58|\n### `r4.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|1700|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|62464|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r4.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|56786Mi|\n |pods|58|\n### `r4.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|124928|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r4.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|112629Mi|\n |pods|234|\n### `r4.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|7000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|249856|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r4.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|228187Mi|\n |pods|234|\n### `r4.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r4|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|499712|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r4.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|453771Mi|\n |pods|737|\n## r5 Family\n### `r5.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r5.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r5.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r5.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|13600|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r5.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r5.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|120|\n## r5a Family\n### `r5a.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5a.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r5a.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5a.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r5a.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5a.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r5a.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5a.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5a.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5a.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5a.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6780|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5a.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5a.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5a.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r5a.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|13570|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5a|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5a.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## r5ad Family\n### `r5ad.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|75|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5ad.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r5ad.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|150|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5ad.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r5ad.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|300|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5ad.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r5ad.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2880|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|600|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5ad.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5ad.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1200|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5ad.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5ad.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6780|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1800|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5ad.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5ad.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2400|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5ad.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r5ad.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|13570|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5ad|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3600|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5ad.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## r5b Family\n### `r5b.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5b|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5b.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r5b.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5b|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5b.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r5b.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5b|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5b.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r5b.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5b|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5b.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5b.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5b|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5b.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5b.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5b|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5b.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5b.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5b|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5b.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r5b.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5b|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5b.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r5b.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5b|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5b.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## r5d Family\n### `r5d.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|75|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5d.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r5d.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|150|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5d.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r5d.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|300|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5d.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r5d.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|600|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5d.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5d.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1200|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5d.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5d.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1800|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5d.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5d.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|13600|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2400|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5d.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r5d.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3600|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5d.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r5d.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r5d|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3600|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5d.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## r5dn Family\n### `r5dn.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|75|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2100|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5dn.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r5dn.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|150|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|4100|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5dn.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r5dn.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|300|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|8125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5dn.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r5dn.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|600|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|16250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5dn.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5dn.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1200|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5dn.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5dn.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1800|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5dn.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5dn.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|13600|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2400|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5dn.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r5dn.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3600|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5dn.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r5dn.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5dn|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3600|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5dn.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## r5n Family\n### `r5n.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|2100|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5n.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r5n.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|4100|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5n.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r5n.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|8125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5n.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r5n.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|16250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5n.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5n.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|6800|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5n.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5n.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5n.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r5n.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|13600|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5n.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r5n.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5n.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r5n.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r5n|\n |karpenter.k8s.aws/instance-generation|5|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r5n.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## r6a Family\n### `r6a.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6a.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r6a.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6a.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r6a.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6a.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r6a.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6a.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r6a.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6a.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `r6a.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6a.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `r6a.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6a.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6a.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6a.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6a.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6a.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|961470Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6a.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6a.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446437Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6a.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6a|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6a.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446437Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## r6g Family\n### `r6g.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|500|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6g.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|7075Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `r6g.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6g.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14422Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r6g.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6g.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r6g.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6g.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59568Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r6g.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6g.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r6g.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6g.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239495Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r6g.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14250|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6g.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360736Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r6g.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6g.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476445Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6g.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6g|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6g.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476445Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## r6gd Family\n### `r6gd.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|59|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|500|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6gd.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|7075Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `r6gd.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6gd.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14422Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r6gd.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6gd.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r6gd.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6gd.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59568Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r6gd.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6gd.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r6gd.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6gd.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239495Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r6gd.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14250|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6gd.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360736Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r6gd.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6gd.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476445Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6gd.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|r6gd|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6gd.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476445Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## r6i Family\n### `r6i.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6i.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r6i.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6i.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r6i.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6i.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r6i.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6i.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r6i.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6i.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `r6i.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6i.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `r6i.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6i.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6i.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6i.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6i.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6i.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|961470Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6i.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6i|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6i.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|961470Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## r6id Family\n### `r6id.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6id.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r6id.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6id.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r6id.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6id.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r6id.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6id.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r6id.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6id.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `r6id.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6id.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `r6id.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6id.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6id.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|5700|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6id.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6id.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6id.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|961470Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6id.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6id|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6id.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|961470Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## r6idn Family\n### `r6idn.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6idn.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r6idn.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6idn.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r6idn.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6idn.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r6idn.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6idn.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r6idn.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6idn.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `r6idn.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|37500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6idn.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `r6idn.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|50000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6idn.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6idn.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|75000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|5700|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|150000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6idn.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6idn.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6idn.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|965243Mi|\n |pods|394|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|106|\n### `r6idn.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6idn|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6idn.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|965243Mi|\n |pods|394|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|106|\n## r6in Family\n### `r6in.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6in.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r6in.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6in.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r6in.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6in.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r6in.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6in.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r6in.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6in.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `r6in.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|37500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6in.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `r6in.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|50000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6in.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6in.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|75000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|150000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6in.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r6in.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6in.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|965243Mi|\n |pods|394|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|106|\n### `r6in.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r6in|\n |karpenter.k8s.aws/instance-generation|6|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r6in.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|965243Mi|\n |pods|394|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|106|\n## r7a Family\n### `r7a.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|390|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7a.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|7134Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `r7a.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7a.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r7a.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7a.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r7a.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7a.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r7a.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7a.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r7a.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7a.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `r7a.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7a.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `r7a.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7a.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r7a.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7a.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r7a.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7a.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|961470Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r7a.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7a.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446437Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r7a.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7a|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7a.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446437Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## r7g Family\n### `r7g.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|520|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7g.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|7075Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `r7g.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7g.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14422Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r7g.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1876|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7g.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r7g.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7g.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59568Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r7g.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7g.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r7g.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7g.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239495Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r7g.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7g.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360736Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r7g.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7g.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476445Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r7g.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7g|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7g.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476445Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## r7gd Family\n### `r7gd.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|59|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|520|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7gd.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|7075Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `r7gd.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7gd.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14422Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r7gd.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1876|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7gd.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r7gd.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7gd.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59568Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r7gd.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7gd.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r7gd.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7gd.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239495Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r7gd.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7gd.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360736Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r7gd.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7gd.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476445Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r7gd.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2600|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7gd|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7gd.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476445Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## r7i Family\n### `r7i.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7i.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r7i.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7i.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r7i.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7i.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r7i.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7i.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r7i.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7i.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `r7i.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7i.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `r7i.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7i.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r7i.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7i.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r7i.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7i.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718987Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r7i.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7i.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446437Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r7i.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7i|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7i.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446437Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## r7iz Family\n### `r7iz.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7iz|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|781|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7iz.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r7iz.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7iz|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7iz.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r7iz.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7iz|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7iz.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r7iz.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7iz|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7iz.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118312Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r7iz.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7iz|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7iz.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239554Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|84|\n### `r7iz.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7iz|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7iz.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360795Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `r7iz.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7iz|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7iz.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r7iz.metal-16xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7iz|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal-16xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7iz.metal-16xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476504Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r7iz.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7iz|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7iz.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|961470Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r7iz.metal-32xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r7iz|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal-32xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r7iz.metal-32xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|961470Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## r8a Family\n### `r8a.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|520|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8a.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|7134Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `r8a.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8a.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14151Mi|\n |pods|59|\n |vpc.amazonaws.com/pod-eni|9|\n### `r8a.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8a.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29097Mi|\n |pods|78|\n |vpc.amazonaws.com/pod-eni|18|\n### `r8a.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8a.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|58527Mi|\n |pods|158|\n |vpc.amazonaws.com/pod-eni|38|\n### `r8a.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8a.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|117432Mi|\n |pods|314|\n |vpc.amazonaws.com/pod-eni|54|\n### `r8a.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8a.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|237816Mi|\n |pods|392|\n |vpc.amazonaws.com/pod-eni|82|\n### `r8a.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8a.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|355031Mi|\n |pods|758|\n |vpc.amazonaws.com/pod-eni|110|\n### `r8a.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8a.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|473501Mi|\n |pods|1010|\n |vpc.amazonaws.com/pod-eni|106|\n### `r8a.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8a.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|715984Mi|\n |pods|1010|\n |vpc.amazonaws.com/pod-eni|106|\n### `r8a.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8a.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|715984Mi|\n |pods|1010|\n |vpc.amazonaws.com/pod-eni|106|\n### `r8a.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8a.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1437890Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n### `r8a.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8a|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8a.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1437890Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n## r8g Family\n### `r8g.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|520|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8g.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|7075Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `r8g.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8g.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14422Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r8g.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8g.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r8g.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8g.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59568Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r8g.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8g.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r8g.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8g.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239495Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r8g.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8g.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360736Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r8g.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8g.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476445Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r8g.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8g.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718928Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r8g.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8g.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718928Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r8g.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8g.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446378Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r8g.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8g.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446378Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## r8gb Family\n### `r8gb.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|2083|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gb.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|7075Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `r8gb.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|4166|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gb.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14422Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r8gb.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|8333|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gb.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r8gb.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|16666|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gb.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59568Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r8gb.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|25000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|33330|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gb.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r8gb.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|50000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|66660|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gb.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|238857Mi|\n |pods|292|\n |vpc.amazonaws.com/pod-eni|52|\n### `r8gb.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|75000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gb.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|359460Mi|\n |pods|350|\n |vpc.amazonaws.com/pod-eni|50|\n### `r8gb.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|133330|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gb.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|475906Mi|\n |pods|786|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|106|\n### `r8gb.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|150000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gb.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|714077Mi|\n |pods|1178|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n### `r8gb.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|150000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gb.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|714077Mi|\n |pods|1178|\n |vpc.amazonaws.com/efa|1|\n### `r8gb.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|300000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gb.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1447995Mi|\n |pods|590|\n |vpc.amazonaws.com/efa|2|\n### `r8gb.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|300000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gb|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gb.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1447995Mi|\n |pods|590|\n |vpc.amazonaws.com/efa|2|\n## r8gd Family\n### `r8gd.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|59|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|520|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gd.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|7075Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `r8gd.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gd.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14422Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r8gd.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gd.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r8gd.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gd.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59568Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r8gd.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gd.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r8gd.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gd.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|239495Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r8gd.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gd.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|360736Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r8gd.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gd.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|476445Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `r8gd.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|5700|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gd.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718928Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r8gd.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|5700|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gd.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|718928Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r8gd.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|11400|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gd.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446378Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `r8gd.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gd|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|11400|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gd.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1446378Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## r8gn Family\n### `r8gn.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gn.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|7075Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `r8gn.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gn.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14422Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `r8gn.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gn.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `r8gn.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gn.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59568Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `r8gn.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gn.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|118253Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `r8gn.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gn.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|238857Mi|\n |pods|292|\n |vpc.amazonaws.com/pod-eni|52|\n### `r8gn.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|150000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gn.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|359460Mi|\n |pods|350|\n |vpc.amazonaws.com/pod-eni|50|\n### `r8gn.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gn.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|475906Mi|\n |pods|786|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|106|\n### `r8gn.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|300000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gn.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|714077Mi|\n |pods|1178|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n### `r8gn.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|300000|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gn.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|714077Mi|\n |pods|1178|\n |vpc.amazonaws.com/efa|1|\n### `r8gn.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|600000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gn.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1447995Mi|\n |pods|590|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|98|\n### `r8gn.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8gn|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|600000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8gn.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1447995Mi|\n |pods|590|\n |vpc.amazonaws.com/efa|2|\n## r8i Family\n### `r8i.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14151Mi|\n |pods|59|\n |vpc.amazonaws.com/pod-eni|9|\n### `r8i.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|28657Mi|\n |pods|118|\n |vpc.amazonaws.com/pod-eni|18|\n### `r8i.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|58967Mi|\n |pods|118|\n |vpc.amazonaws.com/pod-eni|38|\n### `r8i.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|116552Mi|\n |pods|394|\n |vpc.amazonaws.com/pod-eni|54|\n### `r8i.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|236716Mi|\n |pods|492|\n |vpc.amazonaws.com/pod-eni|82|\n### `r8i.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|356879Mi|\n |pods|590|\n |vpc.amazonaws.com/pod-eni|110|\n### `r8i.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|473501Mi|\n |pods|1010|\n |vpc.amazonaws.com/pod-eni|106|\n### `r8i.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|715984Mi|\n |pods|1010|\n |vpc.amazonaws.com/pod-eni|106|\n### `r8i.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|952923Mi|\n |pods|1514|\n |vpc.amazonaws.com/pod-eni|98|\n### `r8i.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1437890Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n### `r8i.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1437890Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n### `r8i.96xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|384|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|3145728|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|96xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i.96xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|382970m|\n |ephemeral-storage|17Gi|\n |memory|2892789Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n### `r8i.metal-96xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|384|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|3145728|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal-96xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i.metal-96xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|382970m|\n |ephemeral-storage|17Gi|\n |memory|2892789Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|98|\n## r8i-flex Family\n### `r8i-flex.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|468|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i-flex.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14151Mi|\n |pods|59|\n |vpc.amazonaws.com/pod-eni|3|\n### `r8i-flex.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i-flex.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|28657Mi|\n |pods|118|\n |vpc.amazonaws.com/pod-eni|8|\n### `r8i-flex.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i-flex.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|58967Mi|\n |pods|118|\n |vpc.amazonaws.com/pod-eni|18|\n### `r8i-flex.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i-flex.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|116552Mi|\n |pods|394|\n |vpc.amazonaws.com/pod-eni|34|\n### `r8i-flex.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i-flex.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|236716Mi|\n |pods|492|\n |vpc.amazonaws.com/pod-eni|52|\n### `r8i-flex.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|11250|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i-flex.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|356879Mi|\n |pods|590|\n |vpc.amazonaws.com/pod-eni|110|\n### `r8i-flex.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|true|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8i-flex|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8i-flex.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|473501Mi|\n |pods|1010|\n |vpc.amazonaws.com/pod-eni|106|\n## r8id Family\n### `r8id.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8id.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14151Mi|\n |pods|59|\n### `r8id.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8id.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|28657Mi|\n |pods|118|\n### `r8id.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8id.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|58967Mi|\n |pods|118|\n### `r8id.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8id.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|116552Mi|\n |pods|394|\n### `r8id.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8id.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|236716Mi|\n |pods|492|\n### `r8id.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8id.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|356879Mi|\n |pods|590|\n### `r8id.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8id.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|473501Mi|\n |pods|1010|\n### `r8id.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|5700|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8id.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|715984Mi|\n |pods|1010|\n### `r8id.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8id.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|952923Mi|\n |pods|1514|\n### `r8id.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|11400|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8id.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1437890Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n### `r8id.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|11400|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8id.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1437890Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n### `r8id.96xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|384|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|22800|\n |karpenter.k8s.aws/instance-memory|3145728|\n |karpenter.k8s.aws/instance-size|96xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8id.96xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|382970m|\n |ephemeral-storage|17Gi|\n |memory|2892789Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n### `r8id.metal-96xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|r|\n |karpenter.k8s.aws/instance-cpu|384|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|r8id|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|22800|\n |karpenter.k8s.aws/instance-memory|3145728|\n |karpenter.k8s.aws/instance-size|metal-96xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|r8id.metal-96xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|382970m|\n |ephemeral-storage|17Gi|\n |memory|2892789Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n## t1 Family\n### `t1.micro`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|0|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|627|\n |karpenter.k8s.aws/instance-size|micro|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t1.micro|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|180Mi|\n |pods|4|\n## t2 Family\n### `t2.nano`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2400|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|512|\n |karpenter.k8s.aws/instance-size|nano|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t2.nano|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|74Mi|\n |pods|4|\n### `t2.micro`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|1024|\n |karpenter.k8s.aws/instance-size|micro|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t2.micro|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|548Mi|\n |pods|4|\n### `t2.small`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-size|small|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t2.small|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|1418Mi|\n |pods|11|\n### `t2.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t2.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3246Mi|\n |pods|17|\n### `t2.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t2.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6837Mi|\n |pods|35|\n### `t2.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t2.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14316Mi|\n |pods|44|\n### `t2.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t2.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29471Mi|\n |pods|44|\n## t3 Family\n### `t3.nano`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|512|\n |karpenter.k8s.aws/instance-network-bandwidth|32|\n |karpenter.k8s.aws/instance-size|nano|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3.nano|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|74Mi|\n |pods|4|\n### `t3.micro`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1024|\n |karpenter.k8s.aws/instance-network-bandwidth|64|\n |karpenter.k8s.aws/instance-size|micro|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3.micro|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|548Mi|\n |pods|4|\n### `t3.small`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|128|\n |karpenter.k8s.aws/instance-size|small|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3.small|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|1418Mi|\n |pods|11|\n### `t3.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|256|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3246Mi|\n |pods|17|\n### `t3.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2780|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|512|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6837Mi|\n |pods|35|\n### `t3.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2780|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1024|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n### `t3.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2780|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|2048|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n## t3a Family\n### `t3a.nano`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3a|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|512|\n |karpenter.k8s.aws/instance-network-bandwidth|32|\n |karpenter.k8s.aws/instance-size|nano|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3a.nano|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|74Mi|\n |pods|4|\n### `t3a.micro`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3a|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1024|\n |karpenter.k8s.aws/instance-network-bandwidth|64|\n |karpenter.k8s.aws/instance-size|micro|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3a.micro|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|548Mi|\n |pods|4|\n### `t3a.small`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3a|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|128|\n |karpenter.k8s.aws/instance-size|small|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3a.small|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|1451Mi|\n |pods|8|\n### `t3a.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3a|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|256|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3a.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3246Mi|\n |pods|17|\n### `t3a.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2780|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3a|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|512|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3a.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6837Mi|\n |pods|35|\n### `t3a.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2780|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3a|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1024|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3a.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14162Mi|\n |pods|58|\n### `t3a.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2200|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2780|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t3a|\n |karpenter.k8s.aws/instance-generation|3|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|2048|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t3a.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n## t4g Family\n### `t4g.nano`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t4g|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|512|\n |karpenter.k8s.aws/instance-network-bandwidth|32|\n |karpenter.k8s.aws/instance-size|nano|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t4g.nano|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|15Mi|\n |pods|4|\n### `t4g.micro`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t4g|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1024|\n |karpenter.k8s.aws/instance-network-bandwidth|64|\n |karpenter.k8s.aws/instance-size|micro|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t4g.micro|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|489Mi|\n |pods|4|\n### `t4g.small`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t4g|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|2048|\n |karpenter.k8s.aws/instance-network-bandwidth|128|\n |karpenter.k8s.aws/instance-size|small|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t4g.small|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|1359Mi|\n |pods|11|\n### `t4g.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2085|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t4g|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4096|\n |karpenter.k8s.aws/instance-network-bandwidth|256|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t4g.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|3187Mi|\n |pods|17|\n### `t4g.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2780|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t4g|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8192|\n |karpenter.k8s.aws/instance-network-bandwidth|512|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t4g.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|6778Mi|\n |pods|35|\n### `t4g.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2780|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t4g|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|1024|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t4g.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|14103Mi|\n |pods|58|\n### `t4g.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|t|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|2780|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|t4g|\n |karpenter.k8s.aws/instance-generation|4|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|2048|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|t4g.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29258Mi|\n |pods|58|\n## trn1 Family\n### `trn1.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-accelerator-count|1|\n |karpenter.k8s.aws/instance-accelerator-manufacturer|aws|\n |karpenter.k8s.aws/instance-accelerator-name|trainium|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|trn|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|trn1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|474|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|trn1.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |aws.amazon.com/neuron|1|\n |aws.amazon.com/neuroncore|2|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|17|\n### `trn1.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-accelerator-count|16|\n |karpenter.k8s.aws/instance-accelerator-manufacturer|aws|\n |karpenter.k8s.aws/instance-accelerator-name|trainium|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|trn|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|trn1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|800000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|trn1.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |aws.amazon.com/neuron|16|\n |aws.amazon.com/neuroncore|32|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|481894Mi|\n |pods|247|\n |vpc.amazonaws.com/efa|8|\n |vpc.amazonaws.com/pod-eni|82|\n## trn1n Family\n### `trn1n.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-accelerator-count|16|\n |karpenter.k8s.aws/instance-accelerator-manufacturer|aws|\n |karpenter.k8s.aws/instance-accelerator-name|trainium|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|trn|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|trn1n|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|1600000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|trn1n.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |aws.amazon.com/neuron|16|\n |aws.amazon.com/neuroncore|32|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|481894Mi|\n |pods|247|\n |vpc.amazonaws.com/efa|16|\n |vpc.amazonaws.com/pod-eni|120|\n## trn2 Family\n### `trn2.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-accelerator-count|16|\n |karpenter.k8s.aws/instance-accelerator-manufacturer|aws|\n |karpenter.k8s.aws/instance-accelerator-name|trainium2|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|trn|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|trn2|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|2097152|\n |karpenter.k8s.aws/instance-network-bandwidth|3200000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|trn2.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |aws.amazon.com/neuron|16|\n |aws.amazon.com/neuroncore|128|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|1938410Mi|\n |pods|100|\n |vpc.amazonaws.com/efa|16|\n## u-3tb1 Family\n### `u-3tb1.56xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|u|\n |karpenter.k8s.aws/instance-cpu|224|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|u-3tb1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|3145728|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|56xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|u-3tb1.56xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|223370m|\n |ephemeral-storage|17Gi|\n |memory|2906869Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|6|\n## u-6tb1 Family\n### `u-6tb1.56xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|u|\n |karpenter.k8s.aws/instance-cpu|224|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|38000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|u-6tb1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|6291456|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|56xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|u-6tb1.56xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|223370m|\n |ephemeral-storage|17Gi|\n |memory|5811134Mi|\n |pods|737|\n### `u-6tb1.112xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|u|\n |karpenter.k8s.aws/instance-cpu|448|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2100|\n |karpenter.k8s.aws/instance-ebs-bandwidth|38000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|u-6tb1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|6291456|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|112xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|u-6tb1.112xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|446810m|\n |ephemeral-storage|17Gi|\n |memory|5811134Mi|\n |pods|737|\n## u7i-12tb Family\n### `u7i-12tb.224xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|u|\n |karpenter.k8s.aws/instance-cpu|896|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|1900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|u7i-12tb|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|12582912|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|224xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|u7i-12tb.224xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|893690m|\n |ephemeral-storage|17Gi|\n |memory|11630731Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## u7i-6tb Family\n### `u7i-6tb.112xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|u|\n |karpenter.k8s.aws/instance-cpu|448|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|1900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|u7i-6tb|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|6291456|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|112xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|u7i-6tb.112xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|446810m|\n |ephemeral-storage|17Gi|\n |memory|5811134Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## u7i-8tb Family\n### `u7i-8tb.112xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|u|\n |karpenter.k8s.aws/instance-cpu|448|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|1900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|u7i-8tb|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|8388608|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|112xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|u7i-8tb.112xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|446810m|\n |ephemeral-storage|17Gi|\n |memory|7751000Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## u7in-16tb Family\n### `u7in-16tb.224xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|u|\n |karpenter.k8s.aws/instance-cpu|896|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|1900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|u7in-16tb|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16777216|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|224xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|u7in-16tb.224xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|893690m|\n |ephemeral-storage|17Gi|\n |memory|15514235Mi|\n |pods|394|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|106|\n## u7in-24tb Family\n### `u7in-24tb.224xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|u|\n |karpenter.k8s.aws/instance-cpu|896|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|1900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|u7in-24tb|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|25165824|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|224xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|u7in-24tb.224xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|893690m|\n |ephemeral-storage|17Gi|\n |memory|23273698Mi|\n |pods|394|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|106|\n## u7in-32tb Family\n### `u7in-32tb.224xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|u|\n |karpenter.k8s.aws/instance-cpu|896|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|1900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|100000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|u7in-32tb|\n |karpenter.k8s.aws/instance-generation|7|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|33554432|\n |karpenter.k8s.aws/instance-network-bandwidth|200000|\n |karpenter.k8s.aws/instance-size|224xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|u7in-32tb.224xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|893690m|\n |ephemeral-storage|17Gi|\n |memory|31033160Mi|\n |pods|394|\n |vpc.amazonaws.com/efa|2|\n |vpc.amazonaws.com/pod-eni|106|\n## vt1 Family\n### `vt1.3xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|vt|\n |karpenter.k8s.aws/instance-cpu|12|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|vt1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|24576|\n |karpenter.k8s.aws/instance-network-bandwidth|3120|\n |karpenter.k8s.aws/instance-size|3xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|vt1.3xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|11900m|\n |ephemeral-storage|17Gi|\n |memory|21739Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `vt1.6xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|vt|\n |karpenter.k8s.aws/instance-cpu|24|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|vt1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|49152|\n |karpenter.k8s.aws/instance-network-bandwidth|6250|\n |karpenter.k8s.aws/instance-size|6xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|vt1.6xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|23870m|\n |ephemeral-storage|17Gi|\n |memory|42536Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `vt1.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|vt|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|vt1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|vt1.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|173400Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## x1 Family\n### `x1.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|7000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|999424|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x1.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|921538Mi|\n |pods|234|\n### `x1.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x1|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|1998848|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x1.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|1846005Mi|\n |pods|234|\n## x1e Family\n### `x1e.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x1e|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|124928|\n |karpenter.k8s.aws/instance-network-bandwidth|625|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x1e.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|114884Mi|\n |pods|29|\n### `x1e.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|1000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x1e|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|249856|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x1e.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|230123Mi|\n |pods|58|\n### `x1e.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|1750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x1e|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|499712|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x1e.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|461240Mi|\n |pods|58|\n### `x1e.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x1e|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|999424|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x1e.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|923474Mi|\n |pods|58|\n### `x1e.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|7000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x1e|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|1998848|\n |karpenter.k8s.aws/instance-network-bandwidth|10000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x1e.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|1846005Mi|\n |pods|234|\n### `x1e.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2300|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x1e|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|xen|\n |karpenter.k8s.aws/instance-memory|3997696|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x1e.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|3694939Mi|\n |pods|234|\n## x2gd Family\n### `x2gd.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x2gd|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|59|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|500|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2gd.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|14653Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|10|\n### `x2gd.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x2gd|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2gd.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|29577Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `x2gd.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x2gd|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2gd.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|59568Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `x2gd.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x2gd|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|475|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2gd.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|120189Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `x2gd.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x2gd|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2gd.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|239495Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `x2gd.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x2gd|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2gd.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|481978Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `x2gd.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|14250|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x2gd|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|20000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2gd.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|724461Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `x2gd.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x2gd|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2gd.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|961411Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `x2gd.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|x2gd|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2gd.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|961411Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n## x2idn Family\n### `x2idn.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2idn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2idn.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|961470Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `x2idn.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2idn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2idn.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|1446437Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `x2idn.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2idn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|2097152|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2idn.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|1931403Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `x2idn.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2idn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|2097152|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2idn.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|1931403Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## x2iedn Family\n### `x2iedn.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iedn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|118|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iedn.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|120248Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|11|\n### `x2iedn.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iedn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|237|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iedn.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|241490Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|27|\n### `x2iedn.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iedn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|475|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iedn.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|482037Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `x2iedn.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iedn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iedn.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|967003Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `x2iedn.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iedn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|2097152|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iedn.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|1931403Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `x2iedn.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iedn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|2850|\n |karpenter.k8s.aws/instance-memory|3145728|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iedn.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|2901336Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `x2iedn.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iedn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|4194304|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iedn.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|3871269Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `x2iedn.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iedn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|4194304|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iedn.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|3871269Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## x2iezn Family\n### `x2iezn.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iezn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|12500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iezn.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|241490Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|62|\n### `x2iezn.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iezn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iezn.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|482037Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `x2iezn.6xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|24|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iezn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|6xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iezn.6xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|23870m|\n |ephemeral-storage|17Gi|\n |memory|724520Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `x2iezn.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|12000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iezn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iezn.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|967003Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|114|\n### `x2iezn.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iezn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iezn.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|1446437Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `x2iezn.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4500|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x2iezn|\n |karpenter.k8s.aws/instance-generation|2|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x2iezn.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|1446437Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## x8aedz Family\n### `x8aedz.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|5000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8aedz|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|158|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|1562|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8aedz.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|59407Mi|\n |pods|78|\n |vpc.amazonaws.com/pod-eni|8|\n### `x8aedz.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|5000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8aedz|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|316|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|3125|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8aedz.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|120028Mi|\n |pods|78|\n |vpc.amazonaws.com/pod-eni|18|\n### `x8aedz.3xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|12|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|5000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8aedz|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|950|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|9375|\n |karpenter.k8s.aws/instance-size|3xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8aedz.3xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|11900m|\n |ephemeral-storage|17Gi|\n |memory|359915Mi|\n |pods|314|\n |vpc.amazonaws.com/pod-eni|34|\n### `x8aedz.6xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|24|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|5000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8aedz|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1900|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|18750|\n |karpenter.k8s.aws/instance-size|6xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8aedz.6xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|23870m|\n |ephemeral-storage|17Gi|\n |memory|723640Mi|\n |pods|314|\n |vpc.amazonaws.com/pod-eni|54|\n### `x8aedz.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|5000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8aedz|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8aedz.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|1443434Mi|\n |pods|1010|\n |vpc.amazonaws.com/pod-eni|106|\n### `x8aedz.metal-12xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|5000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8aedz|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|3800|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|37500|\n |karpenter.k8s.aws/instance-size|metal-12xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8aedz.metal-12xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|1443434Mi|\n |pods|1010|\n |vpc.amazonaws.com/pod-eni|106|\n### `x8aedz.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|5000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8aedz|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|3145728|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8aedz.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|2898333Mi|\n |pods|1010|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|106|\n### `x8aedz.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|amd|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|5000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8aedz|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|7600|\n |karpenter.k8s.aws/instance-memory|3145728|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8aedz.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|2898333Mi|\n |pods|1010|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|106|\n## x8g Family\n### `x8g.medium`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|1|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|520|\n |karpenter.k8s.aws/instance-size|medium|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8g.medium|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|940m|\n |ephemeral-storage|17Gi|\n |memory|14653Mi|\n |pods|8|\n |vpc.amazonaws.com/pod-eni|4|\n### `x8g.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8g.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|29577Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|9|\n### `x8g.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8g.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|59568Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|18|\n### `x8g.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8g.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|120189Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|38|\n### `x8g.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8g.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|239495Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `x8g.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8g.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|481978Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `x8g.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8g.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|724461Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `x8g.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8g.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|961411Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `x8g.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8g.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|1446378Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `x8g.metal-24xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2800|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|metal-24xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8g.metal-24xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|1446378Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `x8g.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|3145728|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8g.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|2901277Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n### `x8g.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|aws|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|2700|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8g|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|3145728|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|arm64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8g.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|2901277Mi|\n |pods|737|\n |vpc.amazonaws.com/efa|1|\n |vpc.amazonaws.com/pod-eni|107|\n## x8i Family\n### `x8i.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|937|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8i.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|29306Mi|\n |pods|59|\n### `x8i.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|1875|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8i.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|58967Mi|\n |pods|118|\n### `x8i.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|131072|\n |karpenter.k8s.aws/instance-network-bandwidth|3750|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8i.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|119588Mi|\n |pods|118|\n### `x8i.4xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|16|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|262144|\n |karpenter.k8s.aws/instance-network-bandwidth|7500|\n |karpenter.k8s.aws/instance-size|4xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8i.4xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|15890m|\n |ephemeral-storage|17Gi|\n |memory|237794Mi|\n |pods|394|\n### `x8i.8xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|32|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|10000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|524288|\n |karpenter.k8s.aws/instance-network-bandwidth|15000|\n |karpenter.k8s.aws/instance-size|8xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8i.8xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|31850m|\n |ephemeral-storage|17Gi|\n |memory|479199Mi|\n |pods|492|\n### `x8i.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|15000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|786432|\n |karpenter.k8s.aws/instance-network-bandwidth|22500|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8i.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|720604Mi|\n |pods|590|\n### `x8i.16xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|64|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|20000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1048576|\n |karpenter.k8s.aws/instance-network-bandwidth|30000|\n |karpenter.k8s.aws/instance-size|16xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8i.16xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|63770m|\n |ephemeral-storage|17Gi|\n |memory|958467Mi|\n |pods|1010|\n### `x8i.24xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|96|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|30000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|1572864|\n |karpenter.k8s.aws/instance-network-bandwidth|40000|\n |karpenter.k8s.aws/instance-size|24xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8i.24xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|95690m|\n |ephemeral-storage|17Gi|\n |memory|1443434Mi|\n |pods|1010|\n### `x8i.32xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|128|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|40000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|2097152|\n |karpenter.k8s.aws/instance-network-bandwidth|50000|\n |karpenter.k8s.aws/instance-size|32xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8i.32xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|127610m|\n |ephemeral-storage|17Gi|\n |memory|1922856Mi|\n |pods|1514|\n### `x8i.48xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|3145728|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|48xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8i.48xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|2892789Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n### `x8i.metal-48xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|192|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|60000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|3145728|\n |karpenter.k8s.aws/instance-network-bandwidth|75000|\n |karpenter.k8s.aws/instance-size|metal-48xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8i.metal-48xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|191450m|\n |ephemeral-storage|17Gi|\n |memory|2892789Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n### `x8i.64xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|256|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|70000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|4194304|\n |karpenter.k8s.aws/instance-network-bandwidth|80000|\n |karpenter.k8s.aws/instance-size|64xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8i.64xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|255290m|\n |ephemeral-storage|17Gi|\n |memory|3862722Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n### `x8i.96xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|384|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-memory|6291456|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|96xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8i.96xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|382970m|\n |ephemeral-storage|17Gi|\n |memory|5802587Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n### `x8i.metal-96xl`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|x|\n |karpenter.k8s.aws/instance-cpu|384|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|3900|\n |karpenter.k8s.aws/instance-ebs-bandwidth|80000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|true|\n |karpenter.k8s.aws/instance-family|x8i|\n |karpenter.k8s.aws/instance-generation|8|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-memory|6291456|\n |karpenter.k8s.aws/instance-network-bandwidth|100000|\n |karpenter.k8s.aws/instance-size|metal-96xl|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|x8i.metal-96xl|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|382970m|\n |ephemeral-storage|17Gi|\n |memory|5802587Mi|\n |pods|1514|\n |vpc.amazonaws.com/efa|1|\n## z1d Family\n### `z1d.large`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|z|\n |karpenter.k8s.aws/instance-cpu|2|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|z1d|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|75|\n |karpenter.k8s.aws/instance-memory|16384|\n |karpenter.k8s.aws/instance-network-bandwidth|750|\n |karpenter.k8s.aws/instance-size|large|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|z1d.large|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|1930m|\n |ephemeral-storage|17Gi|\n |memory|14481Mi|\n |pods|29|\n |vpc.amazonaws.com/pod-eni|13|\n### `z1d.xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|z|\n |karpenter.k8s.aws/instance-cpu|4|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|z1d|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|150|\n |karpenter.k8s.aws/instance-memory|32768|\n |karpenter.k8s.aws/instance-network-bandwidth|1250|\n |karpenter.k8s.aws/instance-size|xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|z1d.xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|3920m|\n |ephemeral-storage|17Gi|\n |memory|29317Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|28|\n### `z1d.2xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|z|\n |karpenter.k8s.aws/instance-cpu|8|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|3170|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|z1d|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|300|\n |karpenter.k8s.aws/instance-memory|65536|\n |karpenter.k8s.aws/instance-network-bandwidth|2500|\n |karpenter.k8s.aws/instance-size|2xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|z1d.2xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|7910m|\n |ephemeral-storage|17Gi|\n |memory|59627Mi|\n |pods|58|\n |vpc.amazonaws.com/pod-eni|58|\n### `z1d.3xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|z|\n |karpenter.k8s.aws/instance-cpu|12|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|4750|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|z1d|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|450|\n |karpenter.k8s.aws/instance-memory|98304|\n |karpenter.k8s.aws/instance-network-bandwidth|5000|\n |karpenter.k8s.aws/instance-size|3xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|z1d.3xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|11900m|\n |ephemeral-storage|17Gi|\n |memory|88002Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `z1d.6xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|z|\n |karpenter.k8s.aws/instance-cpu|24|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|9500|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|z1d|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|900|\n |karpenter.k8s.aws/instance-memory|196608|\n |karpenter.k8s.aws/instance-network-bandwidth|12000|\n |karpenter.k8s.aws/instance-size|6xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|z1d.6xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|23870m|\n |ephemeral-storage|17Gi|\n |memory|178933Mi|\n |pods|234|\n |vpc.amazonaws.com/pod-eni|54|\n### `z1d.12xlarge`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|z|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|z1d|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor|nitro|\n |karpenter.k8s.aws/instance-local-nvme|1800|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|12xlarge|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|z1d.12xlarge|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n### `z1d.metal`\n#### Labels\n | Label | Value |\n |--|--|\n |karpenter.k8s.aws/instance-capability-flex|false|\n |karpenter.k8s.aws/instance-category|z|\n |karpenter.k8s.aws/instance-cpu|48|\n |karpenter.k8s.aws/instance-cpu-manufacturer|intel|\n |karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz|4000|\n |karpenter.k8s.aws/instance-ebs-bandwidth|19000|\n |karpenter.k8s.aws/instance-encryption-in-transit-supported|false|\n |karpenter.k8s.aws/instance-family|z1d|\n |karpenter.k8s.aws/instance-generation|1|\n |karpenter.k8s.aws/instance-hypervisor||\n |karpenter.k8s.aws/instance-local-nvme|1800|\n |karpenter.k8s.aws/instance-memory|393216|\n |karpenter.k8s.aws/instance-network-bandwidth|25000|\n |karpenter.k8s.aws/instance-size|metal|\n |kubernetes.io/arch|amd64|\n |kubernetes.io/os|linux|\n |node.kubernetes.io/instance-type|z1d.metal|\n#### Resources\n | Resource | Quantity |\n |--|--|\n |cpu|47810m|\n |ephemeral-storage|17Gi|\n |memory|355262Mi|\n |pods|737|\n |vpc.amazonaws.com/pod-eni|107|\n"
  },
  {
    "path": "website/content/en/v1.9/reference/metrics.md",
    "content": "---\ntitle: \"Metrics\"\nlinkTitle: \"Metrics\"\nweight: 7\n\ndescription: >\n  Inspect Karpenter Metrics\n---\n<!-- this document is generated from hack/docs/metrics_gen_docs.go -->\nKarpenter makes several metrics available in Prometheus format to allow monitoring cluster provisioning status. These metrics are available by default at `karpenter.kube-system.svc.cluster.local:8080/metrics` configurable via the `METRICS_PORT` environment variable documented [here](../settings)\n\n### `karpenter_ignored_pod_count`\nNumber of pods ignored during scheduling by Karpenter\n- Stability Level: ALPHA\n\n### `karpenter_build_info`\nA metric with a constant '1' value labeled by version from which karpenter was built.\n- Stability Level: STABLE\n\n## Nodeclaims Metrics\n\n### `karpenter_nodeclaims_termination_duration_seconds`\nDuration of NodeClaim termination in seconds.\n- Stability Level: BETA\n\n### `karpenter_nodeclaims_terminated_total`\nNumber of nodeclaims terminated in total by Karpenter. Labeled by the owning nodepool.\n- Stability Level: STABLE\n\n### `karpenter_nodeclaims_instance_termination_duration_seconds`\nDuration of CloudProvider Instance termination in seconds.\n- Stability Level: BETA\n\n### `karpenter_nodeclaims_disrupted_total`\nNumber of nodeclaims disrupted in total by Karpenter. Labeled by reason the nodeclaim was disrupted and the owning nodepool.\n- Stability Level: ALPHA\n\n### `karpenter_nodeclaims_created_total`\nNumber of nodeclaims created in total by Karpenter. Labeled by reason the nodeclaim was created and the owning nodepool.\n- Stability Level: STABLE\n\n### `operator_nodeclaim_status_condition_transitions_total`\nThe count of transitions of a nodeclaim, type and status. Labeled by the type, reason, and status.\n- Stability Level: BETA\n\n### `operator_nodeclaim_status_condition_transition_seconds`\nThe amount of time a condition was in a given state before transitioning. Labeled by the name of the nodeclaim, and the namespace.\n- Stability Level: BETA\n\n### `operator_nodeclaim_status_condition_current_status_seconds`\nThe current amount of time in seconds that a status condition has been in a specific state. Labeled by the name of the nodelcaim, namespace, type, status, and reason.\n- Stability Level: BETA\n\n### `operator_nodeclaim_status_condition_count`\nThe number of a condition for a nodeclaim, type and status. Labeled by the name, namespace, type, status, and reason.\n- Stability Level: BETA\n\n### `operator_nodeclaim_termination_current_time_seconds`\nThe current amount of time in seconds that a nodeclaim has been in terminating state. Labeled by name, and namespace.\n- Stability Level: BETA\n\n### `operator_nodeclaim_termination_duration_seconds`\nThe amount of time taken by a nodeclaim to terminate completely.\n- Stability Level: BETA\n\n## Nodes Metrics\n\n### `karpenter_nodes_total_pod_requests`\nNode total pod requests are the resources requested by pods bound to nodes, including the DaemonSet pods.\n- Stability Level: BETA\n\n### `karpenter_nodes_total_pod_limits`\nNode total pod limits are the resources specified by pod limits, including the DaemonSet pods.\n- Stability Level: BETA\n\n### `karpenter_nodes_total_daemon_requests`\nNode total daemon requests are the resource requested by DaemonSet pods bound to nodes.\n- Stability Level: BETA\n\n### `karpenter_nodes_total_daemon_limits`\nNode total daemon limits are the resources specified by DaemonSet pod limits.\n- Stability Level: BETA\n\n### `karpenter_nodes_termination_duration_seconds`\nThe time taken between a node's deletion request and the removal of its finalizer\n- Stability Level: BETA\n\n### `karpenter_nodes_terminated_total`\nNumber of nodes terminated in total by Karpenter. Labeled by owning nodepool.\n- Stability Level: STABLE\n\n### `karpenter_nodes_system_overhead`\nNode 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.\n- Stability Level: BETA\n\n### `karpenter_nodes_lifetime_duration_seconds`\nThe lifetime duration of the nodes since creation.\n- Stability Level: ALPHA\n\n### `karpenter_nodes_eviction_requests_total`\nThe total number of eviction requests made by Karpenter\n- Stability Level: ALPHA\n\n### `karpenter_nodes_drained_total`\nThe total number of nodes drained by Karpenter\n- Stability Level: ALPHA\n\n### `karpenter_nodes_current_lifetime_seconds`\nNode age in seconds\n- Stability Level: ALPHA\n\n### `karpenter_nodes_created_total`\nNumber of nodes created in total by Karpenter. Labeled by owning nodepool.\n- Stability Level: STABLE\n\n### `karpenter_nodes_allocatable`\nNode allocatable are the resources allocatable by nodes.\n- Stability Level: BETA\n\n### `operator_node_status_condition_transitions_total`\nThe count of transitions of a node, type and status.\n- Stability Level: BETA\n\n### `operator_node_status_condition_transition_seconds`\nThe amount of time a condition was in a given state before transitioning. Labeled by the name of the nodeclaim, and the namespace.\n- Stability Level: BETA\n\n### `operator_node_status_condition_current_status_seconds`\nThe current amount of time in seconds that a status condition has been in a specific state. Labeled by the name of the nodelcaim, namespace, type, status, and reason.\n- Stability Level: BETA\n\n### `operator_node_status_condition_count`\nThe number of a condition for a node, type and status. Labeled by the name, namespace, type, status, and reason.\n- Stability Level: BETA\n\n### `operator_node_termination_current_time_seconds`\nThe current amount of time in seconds that a node has been in terminating state. Labeled by name, and namespace.\n- Stability Level: BETA\n\n### `operator_node_termination_duration_seconds`\nThe amount of time taken by a node to terminate completely.\n- Stability Level: BETA\n\n### `operator_node_event_count`\nThe number of a events for a node.\n- Stability Level: BETA\n\n## Pods Metrics\n\n### `karpenter_pods_state`\nPod 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, nodepool name, zone, architecture, capacity type, instance type and pod phase.\n- Stability Level: BETA\n\n### `karpenter_pods_startup_duration_seconds`\nThe time from pod creation until the pod is running.\n- Stability Level: STABLE\n\n## Termination Metrics\n\n### `operator_termination_duration_seconds`\nThe amount of time taken by an object to terminate completely.\n- Stability Level: DEPRECATED\n\n### `operator_termination_current_time_seconds`\nThe current amount of time in seconds that an object has been in terminating state.\n- Stability Level: DEPRECATED\n\n## Voluntary Disruption Metrics\n\n### `karpenter_voluntary_disruption_queue_failures_total`\nThe number of times that an enqueued disruption decision failed. Labeled by disruption method.\n- Stability Level: BETA\n\n### `karpenter_voluntary_disruption_eligible_nodes`\nNumber of nodes eligible for disruption by Karpenter. Labeled by disruption reason.\n- Stability Level: BETA\n\n### `karpenter_voluntary_disruption_decisions_total`\nNumber of disruption decisions performed. Labeled by disruption decision, reason, and consolidation type.\n- Stability Level: STABLE\n\n### `karpenter_voluntary_disruption_decision_evaluation_duration_seconds`\nDuration of the disruption decision evaluation process in seconds. Labeled by method and consolidation type.\n- Stability Level: BETA\n\n### `karpenter_voluntary_disruption_consolidation_timeouts_total`\nNumber of times the Consolidation algorithm has reached a timeout. Labeled by consolidation type.\n- Stability Level: BETA\n\n## Scheduler Metrics\n\n### `karpenter_scheduler_scheduling_duration_seconds`\nDuration of scheduling simulations used for deprovisioning and provisioning in seconds.\n- Stability Level: STABLE\n\n### `karpenter_scheduler_queue_depth`\nThe number of pods currently waiting to be scheduled.\n- Stability Level: BETA\n\n## Nodepools Metrics\n\n### `karpenter_nodepools_usage`\nThe amount of resources that have been provisioned for a nodepool. Labeled by nodepool name and resource type.\n- Stability Level: ALPHA\n\n### `karpenter_nodepools_limit`\nLimits specified on the nodepool that restrict the quantity of resources provisioned. Labeled by nodepool name and resource type.\n- Stability Level: ALPHA\n\n### `karpenter_nodepools_allowed_disruptions`\nThe number of nodes for a given NodePool that can be concurrently disrupting at a point in time. Labeled by NodePool. Note that allowed disruptions can change very rapidly, as new nodes may be created and others may be deleted at any point.\n- Stability Level: ALPHA\n\n### `operator_nodepool_status_condition_transitions_total`\nThe count of transitions of a nodepool, type and status. Labeled by the type, reason, and status.\n- Stability Level: BETA\n\n### `operator_nodepool_status_condition_transition_seconds`\nThe amount of time a condition was in a given state before transitioning. Labeled by the name of the nodeclaim, and the namespace.\n- Stability Level: BETA\n\n### `operator_nodepool_status_condition_current_status_seconds`\nThe current amount of time in seconds that a status condition has been in a specific state. Labeled by the name of the nodelcaim, namespace, type, status, and reason.\n- Stability Level: BETA\n\n### `operator_nodepool_status_condition_count`\nThe number of an condition for a nodepool, type and status. Labeled by the name, namespace, type, status, and reason.\n- Stability Level: BETA\n\n### `operator_nodepool_termination_current_time_seconds`\nThe current amount of time in seconds that a nodepool has been in terminating state. Labeled by name, and namespace.\n- Stability Level: BETA\n\n### `operator_nodepool_termination_duration_seconds`\nDuration of NodePool termination in seconds.\n- Stability Level: BETA\n\n## EC2NodeClass Metrics\n\n### `operator_ec2nodeclass_status_condition_transitions_total`\nThe count of transitions of a ec2nodeclass, type and status. Labeled by the type, reason, and status.\n- Stability Level: BETA\n\n### `operator_ec2nodeclass_status_condition_transition_seconds`\nThe amount of time a condition was in a given state before transitioning. Labeled by the name of the nodeclaim, and the namespace.\n- Stability Level: BETA\n\n### `operator_ec2nodeclass_status_condition_current_status_seconds`\nThe current amount of time in seconds that a status condition has been in a specific state. Labeled by the name of the nodelcaim, namespace, type, status, and reason.\n- Stability Level: BETA\n\n### `operator_ec2nodeclass_status_condition_count`\nThe number of an condition for an ec2nodeclass, type and status. Labeled by the name, namespace, type, status, and reason.\n- Stability Level: BETA\n\n### `operator_ec2nodeclass_termination_current_time_seconds`\nThe current amount of time in seconds that an ec2nodeclass has been in terminating state. Labeled by name, and namespace.\n- Stability Level: BETA\n\n### `operator_ec2nodeclass_termination_duration_seconds`\nDuration of ec2nodeclass termination in seconds.\n- Stability Level: BETA\n\n## Interruption Metrics\n\n### `karpenter_interruption_received_messages_total`\nCount of messages received from the SQS queue. Broken down by message type and whether the message was actionable.\n- Stability Level: STABLE\n\n### `karpenter_interruption_message_queue_duration_seconds`\nAmount of time an interruption message is on the queue before it is processed by karpenter.\n- Stability Level: STABLE\n\n### `karpenter_interruption_deleted_messages_total`\nCount of messages deleted from the SQS queue.\n- Stability Level: STABLE\n\n## Cluster Metrics\n\n### `karpenter_cluster_utilization_percent`\nUtilization of allocatable resources by pod requests\n- Stability Level: ALPHA\n\n## Cluster State Metrics\n\n### `karpenter_cluster_state_unsynced_time_seconds`\nThe time for which cluster state is not synced\n- Stability Level: ALPHA\n\n### `karpenter_cluster_state_synced`\nReturns 1 if cluster state is synced and 0 otherwise. Synced checks that nodeclaims and nodes that are stored in the APIServer have the same representation as Karpenter's cluster state\n- Stability Level: STABLE\n\n### `karpenter_cluster_state_node_count`\nCurrent count of nodes in cluster state\n- Stability Level: STABLE\n\n## Cloudprovider Metrics\n\n### `karpenter_cloudprovider_instance_type_offering_price_estimate`\nInstance type offering estimated hourly price used when making informed decisions on node cost calculation, based on instance type, capacity type, and zone.\n- Stability Level: BETA\n\n### `karpenter_cloudprovider_instance_type_offering_available`\nInstance type offering availability, based on instance type, capacity type, and zone\n- Stability Level: BETA\n\n### `karpenter_cloudprovider_instance_type_memory_bytes`\nMemory, in bytes, for a given instance type.\n- Stability Level: BETA\n\n### `karpenter_cloudprovider_instance_type_cpu_cores`\nVCPUs cores for a given instance type.\n- Stability Level: BETA\n\n### `karpenter_cloudprovider_errors_total`\nTotal number of errors returned from CloudProvider calls.\n- Stability Level: BETA\n\n### `karpenter_cloudprovider_duration_seconds`\nDuration of cloud provider method calls. Labeled by the controller, method name and provider.\n- Stability Level: BETA\n\n## Cloudprovider Batcher Metrics\n\n### `karpenter_cloudprovider_batcher_batch_time_seconds`\nDuration of the batching window per batcher\n- Stability Level: BETA\n\n### `karpenter_cloudprovider_batcher_batch_size`\nSize of the request batch per batcher\n- Stability Level: BETA\n\n## Controller Runtime Metrics\n\n### `controller_runtime_terminal_reconcile_errors_total`\nTotal number of terminal reconciliation errors per controller\n- Stability Level: STABLE\n\n### `controller_runtime_reconcile_total`\nTotal number of reconciliations per controller\n- Stability Level: STABLE\n\n### `controller_runtime_reconcile_time_seconds`\nLength of time per reconciliation per controller\n- Stability Level: STABLE\n\n### `controller_runtime_reconcile_panics_total`\nTotal number of reconciliation panics per controller\n- Stability Level: STABLE\n\n### `controller_runtime_reconcile_errors_total`\nTotal number of reconciliation errors per controller\n- Stability Level: STABLE\n\n### `controller_runtime_max_concurrent_reconciles`\nMaximum number of concurrent reconciles per controller\n- Stability Level: STABLE\n\n### `controller_runtime_conversion_webhook_panics_total`\nTotal number of conversion webhook panics\n- Stability Level: STABLE\n\n### `controller_runtime_active_workers`\nNumber of currently used workers per controller\n- Stability Level: STABLE\n\n## Workqueue Metrics\n\n### `workqueue_work_duration_seconds`\nHow long in seconds processing an item from workqueue takes.\n- Stability Level: STABLE\n\n### `workqueue_unfinished_work_seconds`\nHow many seconds of work has been done that is in progress and hasn't been observed by work_duration. Large values indicate stuck threads. One can deduce the number of stuck threads by observing the rate at which this increases.\n- Stability Level: STABLE\n\n### `workqueue_retries_total`\nTotal number of retries handled by workqueue\n- Stability Level: STABLE\n\n### `workqueue_queue_duration_seconds`\nHow long in seconds an item stays in workqueue before being requested\n- Stability Level: STABLE\n\n### `workqueue_longest_running_processor_seconds`\nHow many seconds has the longest running processor for workqueue been running.\n- Stability Level: STABLE\n\n### `workqueue_depth`\nCurrent depth of workqueue by workqueue and priority\n- Stability Level: STABLE\n\n### `workqueue_adds_total`\nTotal number of adds handled by workqueue\n- Stability Level: STABLE\n\n## Status Condition Metrics\n\n### `operator_status_condition_transitions_total`\nThe count of transitions of a given object, type and status.\n- Stability Level: DEPRECATED\n\n### `operator_status_condition_transition_seconds`\nThe amount of time a condition was in a given state before transitioning. e.g. Alarm := P99(Updated=False) > 5 minutes\n- Stability Level: DEPRECATED\n\n### `operator_status_condition_current_status_seconds`\nThe current amount of time in seconds that a status condition has been in a specific state. Alarm := P99(Updated=Unknown) > 5 minutes\n- Stability Level: DEPRECATED\n\n### `operator_status_condition_count`\nThe number of an condition for a given object, type and status. e.g. Alarm := Available=False > 0\n- Stability Level: DEPRECATED\n\n## Client Go Metrics\n\n### `client_go_request_total`\nNumber of HTTP requests, partitioned by status code and method.\n- Stability Level: STABLE\n\n### `client_go_request_duration_seconds`\nRequest latency in seconds. Broken down by verb, group, version, kind, and subresource.\n- Stability Level: STABLE\n\n## AWS SDK Go Metrics\n\n### `aws_sdk_go_request_total`\nThe total number of AWS SDK Go requests\n- Stability Level: STABLE\n\n### `aws_sdk_go_request_retry_count`\nThe total number of AWS SDK Go retry attempts per request\n- Stability Level: STABLE\n\n### `aws_sdk_go_request_duration_seconds`\nLatency of AWS SDK Go requests\n- Stability Level: STABLE\n\n### `aws_sdk_go_request_attempt_total`\nThe total number of AWS SDK Go request attempts\n- Stability Level: STABLE\n\n### `aws_sdk_go_request_attempt_duration_seconds`\nLatency of AWS SDK Go request attempts\n- Stability Level: STABLE\n\n## Leader Election Metrics\n\n### `leader_election_slowpath_total`\nTotal number of slow path exercised in renewing leader leases. 'name' is the string used to identify the lease. Please make sure to group by name.\n- Stability Level: STABLE\n\n### `leader_election_master_status`\nGauge of if the reporting system is master of the relevant lease, 0 indicates backup, 1 indicates master. 'name' is the string used to identify the lease. Please make sure to group by name.\n- Stability Level: STABLE\n"
  },
  {
    "path": "website/content/en/v1.9/reference/settings.md",
    "content": "---\ntitle: \"Settings\"\nlinkTitle: \"Settings\"\nweight: 5\ndescription: >\n  Configure Karpenter\n---\n\nKarpenter surfaces environment variables and CLI parameters to allow you to configure certain global settings on the controllers. These settings are described below.\n\n[comment]: <> (the content below is generated from hack/docs/configuration_gen/main.go)\n\n| Environment Variable | CLI Flag | Description |\n|--|--|--|\n| BATCH_IDLE_DURATION | \\-\\-batch-idle-duration | The maximum amount of time with no new pending 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. (default = 1s)|\n| BATCH_MAX_DURATION | \\-\\-batch-max-duration | 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. (default = 10s)|\n| CLUSTER_CA_BUNDLE | \\-\\-cluster-ca-bundle | Cluster CA bundle for nodes to use for TLS connections with the API server. If not set, this is taken from the controller's TLS configuration.|\n| CLUSTER_ENDPOINT | \\-\\-cluster-endpoint | The external kubernetes cluster endpoint for new nodes to connect with. If not specified, will discover the cluster endpoint using DescribeCluster API.|\n| CLUSTER_NAME | \\-\\-cluster-name | [REQUIRED] The kubernetes cluster name for resource discovery.|\n| CPU_REQUESTS | \\-\\-cpu-requests | CPU requests in millicores on the container running the controller. (default = 1000)|\n| DISABLE_CLUSTER_STATE_OBSERVABILITY | \\-\\-disable-cluster-state-observability | Disable cluster state metrics and events|\n| DISABLE_CONTROLLER_WARMUP | \\-\\-disable-controller-warmup | Disable controller warmup which starts controller sources before leader election is won. Controller warmup pre-populates caches and improves leader failover time.|\n| DISABLE_DRY_RUN | \\-\\-disable-dry-run | If true, then disable dry run validation for EC2NodeClasses.|\n| DISABLE_LEADER_ELECTION | \\-\\-disable-leader-election | Disable the leader election client before executing the main loop. Disable when running replicated components for high availability is not desired.|\n| EKS_CONTROL_PLANE | \\-\\-eks-control-plane | Marking this true means that your cluster is running with an EKS control plane and Karpenter should attempt to discover cluster details from the DescribeCluster API |\n| ENABLE_PROFILING | \\-\\-enable-profiling | Enable the profiling on the metric endpoint|\n| FEATURE_GATES | \\-\\-feature-gates | Optional features can be enabled / disabled using feature gates. Current options are: NodeRepair, ReservedCapacity, SpotToSpotConsolidation, NodeOverlay, and StaticCapacity. (default = NodeRepair=false,ReservedCapacity=true,SpotToSpotConsolidation=false,NodeOverlay=false,StaticCapacity=false)|\n| HEALTH_PROBE_PORT | \\-\\-health-probe-port | The port the health probe endpoint binds to for reporting controller health (default = 8081)|\n| IGNORE_DRA_REQUESTS | \\-\\-ignore-dra-requests | When set, Karpenter will ignore pods' DRA requests during scheduling simulations. NOTE: This flag will be removed once formal DRA support is GA in Karpenter.|\n| INTERRUPTION_QUEUE | \\-\\-interruption-queue | Interruption queue is the name of the SQS queue used for processing interruption events from EC2. Interruption handling is disabled if not specified. Enabling interruption handling may require additional permissions on the controller service account. Additional permissions are outlined in the docs.|\n| ISOLATED_VPC | \\-\\-isolated-vpc | 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 on-demand pricing endpoint.|\n| KARPENTER_SERVICE | \\-\\-karpenter-service | The Karpenter Service name for the dynamic webhook certificate|\n| KUBE_CLIENT_BURST | \\-\\-kube-client-burst | The maximum allowed burst of queries to the kube-apiserver (default = 300)|\n| KUBE_CLIENT_QPS | \\-\\-kube-client-qps | The smoothed rate of qps to kube-apiserver (default = 200)|\n| LEADER_ELECTION_NAME | \\-\\-leader-election-name | Leader election name to create and monitor the lease if running outside the cluster (default = karpenter-leader-election)|\n| LEADER_ELECTION_NAMESPACE | \\-\\-leader-election-namespace | Leader election namespace to create and monitor the lease if running outside the cluster|\n| LOG_ERROR_OUTPUT_PATHS | \\-\\-log-error-output-paths | Optional comma separated paths for logging error output (default = stderr)|\n| LOG_LEVEL | \\-\\-log-level | Log verbosity level. Can be one of 'debug', 'info', or 'error' (default = info)|\n| LOG_OUTPUT_PATHS | \\-\\-log-output-paths | Optional comma separated paths for directing log output (default = stdout)|\n| 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)|\n| METRICS_PORT | \\-\\-metrics-port | The port the metric endpoint binds to for operating metrics about the controller itself (default = 8080)|\n| MIN_VALUES_POLICY | \\-\\-min-values-policy | Min values policy for scheduling. Options include 'Strict' for existing behavior where min values are strictly enforced or 'BestEffort' where Karpenter relaxes min values when it isn't satisfied. (default = Strict)|\n| PREFERENCE_POLICY | \\-\\-preference-policy | How the Karpenter scheduler should treat preferences. Preferences include preferredDuringSchedulingIgnoreDuringExecution node and pod affinities/anti-affinities and ScheduleAnyways topologySpreadConstraints. Can be one of 'Ignore' and 'Respect' (default = Respect)|\n| RESERVED_ENIS | \\-\\-reserved-enis | Reserved ENIs are not included in the calculations for max-pods or kube-reserved. This is most often used in the VPC CNI custom networking setup https://docs.aws.amazon.com/eks/latest/userguide/cni-custom-network.html. (default = 0)|\n| VM_MEMORY_OVERHEAD_PERCENT | \\-\\-vm-memory-overhead-percent | The VM memory overhead as a percent that will be subtracted from the total memory for all instance types when cached information is unavailable. (default = 0.075)|\n\n[comment]: <> (end docs generated content from hack/docs/configuration_gen/main.go)\n\n### Feature Gates\n\nKarpenter uses [feature gates](https://kubernetes.io/docs/reference/command-line-tools-reference/feature-gates/#feature-gates-for-alpha-or-beta-features) You can enable the feature gates through the `--feature-gates` CLI environment variable or the `FEATURE_GATES` environment variable in the Karpenter deployment. For example, you can configure drift, spotToSpotConsolidation by setting the CLI argument: `--feature-gates Drift=true,SpotToSpotConsolidation=true,ReservedCapacity=true`.\n\n| Feature                 | Default | Stage  | Since   | Until   |\n|-------------------------|---------|--------|---------|---------|\n| Drift                   | false   | Alpha  | v0.21.x | v0.32.x |\n| Drift                   | true    | Beta   | v0.33.x | v0.37.x |\n| SpotToSpotConsolidation | false   | Alpha  | v0.34.x |         |\n| NodeRepair              | false   | Alpha  | v1.1.x  |         |\n| ReservedCapacity        | false   | Alpha  | v1.3.x  | v1.5.x  |\n| ReservedCapacity        | true    | Beta   | v1.6.x  |         |\n| NodeOverlay             | false   | Alpha  | v1.7.x  |         |\n| StaticCapacity          | false   | Alpha  | v1.8.x  |         |\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nIn v1, drift has been promoted to stable and the feature gate removed. Users can continue to control drift by using disruption budgets by reason.\nExample:\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\nspec:\n…\n  disruption:\n    budgets:\n    - nodes: 10%\n    # On Weekdays during business hours, don't do any deprovisioning regarding drift.\n    - nodes: \"0\"\n      schedule: \"0 9 * * mon-fri\"\n      duration: 8h\n      reasons:\n      -\tDrifted\n    # during non-business hours do drift for up to 10% of nodes\n    - nodes: \"10%\"\n      reasons:\n      -\tDrifted\n```\n{{% /alert %}}\n\n### Batching Parameters\n\nThe 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.\n\nFor 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.\n\n#### Batch Idle Duration\n\nThe batch idle duration duration 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.\n\nThis 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`.\n\n#### Batch Max Duration\n\nThe batch max duration 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.\n\nThis 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`.\n"
  },
  {
    "path": "website/content/en/v1.9/reference/threat-model.md",
    "content": "---\ntitle: \"Threat Model\"\nlinkTitle: \"Threat Model\"\nweight: 999\n---\n\nKarpenter observes Kubernetes pods and launches nodes in response to those pods’ scheduling constraints. Karpenter does not perform the actual scheduling and instead waits for [kube-scheduler](https://kubernetes.io/docs/concepts/scheduling-eviction/kube-scheduler/) to schedule the pods.\n\nWhen running in AWS, Karpenter is typically installed onto EC2 instances that run in EKS Clusters. Karpenter relies on public facing AWS APIs and standard IAM Permissions. Karpenter uses AWS-SDK-Go v1, and AWS advises that credentials are provided using [IAM Roles for Service Accounts](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html).\n\n\n## Architecture & Actors\n\n1. **Cluster Operator**: An identity that installs and configures Karpenter in a Kubernetes cluster, and configures Karpenter's cloud identity and permissions.\n2. **Cluster Developer**: An identity that can create pods, typically through Deployments, DaemonSets, or other pod-controller types.\n3. **Karpenter Controller:** The Karpenter application pod that operates inside a cluster.\n\n![threat-model](/threat-model.png)\n\n## Capabilities\n\n### Cluster Operator\n\nThe Cluster Operator has full control to install and configure Karpenter including all [`NodePools`]({{<ref \"../concepts/nodepools\" >}}) and [`EC2NodeClasses`]({{<ref \"../concepts/nodeclasses\" >}}). The Cluster Operator has privileges to manage the cloud identities and permissions for Nodes, and the cloud identity and permissions for Karpenter.\n\n### Cluster Developer\n\nA Cluster Developer has the ability to create pods via `Deployments`, `ReplicaSets`, `StatefulSets`, `Jobs`, etc. This assumes that the Cluster Developer cannot modify the Karpenter pod or launch pods using Karpenter’s service account and gain access to Karpenter’s IAM role.\n\n### Karpenter Controller\n\nKarpenter has permissions to create and manage cloud instances. Karpenter has Kubernetes API permissions to create, update, and remove nodes, as well as evict pods. For a full list of the permissions, see the RBAC rules in the helm chart template. Karpenter also has AWS IAM permissions to create instances with IAM roles.\n\n* [aggregate-clusterrole.yaml](https://github.com/aws/karpenter/blob/v1.9.0/charts/karpenter/templates/aggregate-clusterrole.yaml)\n* [clusterrole-core.yaml](https://github.com/aws/karpenter/blob/v1.9.0/charts/karpenter/templates/clusterrole-core.yaml)\n* [clusterrole.yaml](https://github.com/aws/karpenter/blob/v1.9.0/charts/karpenter/templates/clusterrole.yaml)\n* [rolebinding.yaml](https://github.com/aws/karpenter/blob/v1.9.0/charts/karpenter/templates/rolebinding.yaml)\n* [role.yaml](https://github.com/aws/karpenter/blob/v1.9.0/charts/karpenter/templates/role.yaml)\n\n## Assumptions\n\n| Category\t     | Assumption\t                                                                                                                                                                                                            | Comment\t                                                                                                                                                                                                                          |\n|---------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| Generic\t      | The Karpenter pod is operated on a node in the cluster, and uses a Service Account for authentication to the Kubernetes API\t                                                                                           | Cluster Operators may want to isolate the node running the Karpenter pod to a system-pool of nodes to mitigate the possibility of container breakout with Karpenter’s permissions. \t                                              |\n| Generic\t      | Cluster Developer does not have any Kubernetes permissions to manage Karpenter running in the cluster (The deployment, pods, clusterrole, etc)\t                                                                        | \t                                                                                                                                                                                                                                 |\n| Generic\t      | Restrictions on the fields of pods a Cluster Developer can create are out of scope. \t                                                                                                                                  | Cluster Operators can use policy frameworks to enforce restrictions on Pod capabilities\t                                                                                                                                          |\n| Generic\t      | No sensitive data is included in non-Secret resources in the Kubernetes API. The Karpenter controller has the ability to list all pods, nodes, deployments, and many other pod-controller and storage resource types.\t | Karpenter does not have permission to list/watch cluster-wide ConfigMaps or Secrets\t                                                                                                                                              |\n| Generic\t      | Karpenter has permissions to create, modify, and delete nodes from the cluster, and evict any pod. \t                                                                                                                   | Cluster Operators running applications with varying security profiles in the same cluster may want to configure dedicated nodes and scheduling rules for Karpenter to mitigate potential container escapes from other containers\t |\n| AWS-Specific\t | The Karpenter IAM policy is encoded in the GitHub repo. Any additional permissions possibly granted to that role by the administrator are out of scope\t                                                                | \t                                                                                                                                                                                                                                 |\n| AWS-Specific\t | The Karpenter pod uses IRSA for AWS credentials \t                                                                                                                                                                      | Setup of IRSA is out of scope for this document \t                                                                                                                                                                                 |\n\n## Generic Threats and Mitigations\n\n### Threat: Cluster Developer can influence creation of an arbitrary number of nodes\n\n**Background**: Karpenter creates new instances based on the count of pending pods.\n\n**Threat**: A Cluster Developer attempts to have Karpenter create more instances than intended by creating a large number of pods or by using anti-affinity to schedule one pod per node.\n\n**Mitigation**: In addition to [Kubernetes resource limits](https://kubernetes.io/docs/concepts/policy/resource-quotas/#object-count-quota), Cluster Operators can [configure limits on a NodePool]({{< ref \"../concepts/nodepools#spec-limits\" >}}) to limit the total amount of memory, CPU, or other resources provisioned across all nodes.\n\n## Threats\n\n### Threat: Using EC2 CreateTag/DeleteTag Permissions to Orchestrate Instance Creation/Deletion\n\n**Background**: As of `0.28.0`, Karpenter creates a mapping between CloudProvider instances and CustomResources in the cluster for capacity tracking. To ensure this mapping is consistent, Karpenter utilizes the following tag keys:\n\n* `karpenter.sh/managed-by`\n* `karpenter.sh/nodepool`\n* `kubernetes.io/cluster/${CLUSTER_NAME}`\n* `karpenter.sh/provisioner-name` (prior to `0.32.0`)\n\nAny user that has the ability to Create/Delete tags on CloudProvider instances will have the ability to orchestrate Karpenter to Create/Delete CloudProvider instances as a side effect.\n\nIn addition, as of `0.29.0`, Karpenter will Drift on Security Groups and Subnets. If a user has the Create/Delete tags permission for either of resources, they can orchestrate Karpenter to Create/Delete CloudProvider instances as a side effect.\n\n**Threat:** A Cluster Operator attempts to create or delete a tag on a resource discovered by Karpenter. If it has the ability to create a tag it can effectively create or delete CloudProvider instances associated with the tagged resources.\n\n**Mitigation** Cluster Operators should [enforce tag-based IAM policies](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html) on these tags against any EC2 instance resource (`i-*`) for any users that might have [CreateTags](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTags.html)/[DeleteTags](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DeleteTags.html) permissions but should not have [RunInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html)/[TerminateInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_TerminateInstances.html) permissions.\n\n### Threat: Launching EC2 instances with IAM roles not intended for Karpenter nodes\n\n**Background**: Many IAM roles in an AWS account may trust the EC2 service principal. IAM administrators must grant the `iam:PassRole` permission to IAM principals to allow those principals in the account to launch instances with specific roles.\n\n**Threat:** A Cluster Operator attempts to create an `EC2NodeClass` with an IAM role not intended for Karpenter\n\n**Mitigation**: Cluster Operators must enumerate the roles in the resource section of the IAM policy granted to the Karpenter role for the `iam:PassRole` action. Karpenter will fail to generate an instance profile if role that is specified in the `spec.role` section of the `EC2NodeClass` is not enumerated in the `iam:PassRole` permission.\n\n### Threat: Karpenter can orchestrate the creation/deletion of IAM Instance Profiles it doesn't own\n\n**Background**: Karpenter has permission to create/update/delete instance profiles as part of its controller permissions to ensure that it can auto-generate instance profiles when EC2NodeClasses are created.\n\n**Threat**: An actor who obtains control of the Karpenter pod’s IAM role may delete instance profiles not owned by Karpenter, causing workload disruption to other instances using the profile in the account.\n\n**Mitigation**: Karpenter's controller permissions enforce that it creates instance profiles with tags which provide ownership information. These tags include:\n\n* `karpenter.sh/managed-by`\n* `kubernetes.io/cluster/${CLUSTER_NAME}`\n* `karpenter.k8s.aws/ec2nodeclass`\n* `topology.kubernetes.io/region`\n\nThese tags ensure that instance profiles created by Karpenter in the account are unique to that cluster. Karpenter's controller permissions _only_ allow it to act on instance profiles that contain these tags which match the cluster information.\n\n### Threat: Karpenter can be used to create or terminate EC2 instances outside the cluster\n\n**Background**: EC2 instances can exist in an AWS account outside of the Kubernetes cluster.\n\n**Threat**: An actor who obtains control of the Karpenter pod’s IAM role may be able to create or terminate EC2 instances not part of the Kubernetes cluster managed by Karpenter.\n\n**Mitigation**: Karpenter creates instances with tags, several of which are enforced in the IAM policy granted to the Karpenter IAM role that restrict the instances Karpenter can terminate. One tag requires that the instance was provisioned by a Karpenter controller (`karpenter.sh/nodepool`), another tag can include a cluster name to mitigate any termination between two clusters with Karpenter in the same account (`kubernetes.io/cluster/${CLUSTER_NAME}`. Cluster Operators also can restrict the region to prevent two clusters in the same account with the same name in different regions.\n\nAdditionally, Karpenter does not allow tags to be modified on instances unowned by Karpenter after creation, except for the `Name` and `karpenter.sh/nodeclaim` tags. Though these tags can be changed after instance creation, `aws:ResourceTag` conditions enforce that the Karpenter controller is only able to change these tags on instances that it already owns, enforced through the `karpenter.sh/nodepool` and `kubernetes.io/cluster/${CLUSTER_NAME}` tags.\n\n### Threat: Karpenter launches an EC2 instance using an unintended AMI\n\n**Background**: Cluster Developers can create Node Templates that refer to an AMI by metadata, such as a name rather than an AMI resource ID.\n\n**Threat:** A threat actor creates a public AMI with the same name as a customer’s AMI in an attempt to get Karpenter to select the threat actor’s AMI instead of the intended AMI.\n\n**Mitigation**: When selecting AMIs by name or tags, Karpenter defaults to adding an ownership filter of `self,amazon` so AMI images external to the account are not used.\n"
  },
  {
    "path": "website/content/en/v1.9/tasks/_index.md",
    "content": "---\ntitle: \"Tasks\"\nlinkTitle: \"Tasks\"\nweight: 25\ndescription: >\n  Tasks to run with Karpenter\ncascade:\n  type: docs\n---\n\n"
  },
  {
    "path": "website/content/en/v1.9/tasks/managing-amis.md",
    "content": "---\ntitle: \"Managing AMIs\"\nlinkTitle: \"Managing AMIs\"\ndescription: >\n  Task for managing AMIs in Karpenter\n---\n\n{{% alert title=\"Important\" color=\"warning\" %}}\nKarpenter __heavily recommends against__ opting-in to use an `amiSelectorTerm` with `@latest` unless you are doing this in a pre-production environment or are willing to accept the risk that a faulty AMI may cause downtime in your production clusters. In general, if using a publicly released version of a well-known AMI type (like AL2, AL2023, or Bottlerocket), we recommend that you pin to a version of that AMI and deploy newer versions of that AMI type in a staged approach when newer patch versions are available.\n\n```yaml\namiSelectorTerms:\n  - alias: al2023@v20240807\n```\n\nMore details are described in [Controlling AMI Replacement]({{< relref \"#controlling-ami-replacement\" >}}) below.\n{{% /alert %}}\n\nUnderstanding how Karpenter assigns AMIs to nodes can help ensure that your workloads will run successfully on those nodes and continue to run if the nodes are upgraded to newer AMIs.\nBelow we describe how Karpenter assigns AMIs to nodes when they are first deployed and how newer AMIs are assigned later when nodes are spun up to replace old ones.\nLater, it describes the options you have to assert control over how AMIs are used by Karpenter for your clusters.\n\nFeatures for managing AMIs described here should be considered as part of the larger upgrade policies that you have for your clusters.\nSee [How do I upgrade an EKS Cluster with Karpenter]({{< relref \"../faq/#how-do-i-upgrade-an-eks-cluster-with-karpenter\" >}}) for details on this process.\n\n## How Karpenter assigns AMIs to nodes\n\nHere is how Karpenter assigns AMIs nodes:\n\n* When you create an `EC2NodeClass`, you are required to specify [`amiSelectorTerms`]({{< relref \"../concepts/nodeclasses/#specamiselectorterms\" >}}). [`amiSelectorTerms`]({{< relref \"../concepts/nodeclasses/#specamiselectorterms\" >}}) allow you to select on AMIs that can be spun-up by this EC2NodeClass based on tags, id, name, or an alias. Multiple AMIs may be specified, and Karpenter will choose the newest compatible AMI when spinning up new nodes.\n* Some `amiSelectorTerm` types are static and always resolve to the same AMI (e.g. `id`). However, some are dynamic and may resolve to different AMIs over time. Examples of dynamic types include `alias`, `tags`, and `name` (when using a wildcard). For example, if you specify an `amiSelectorTerm` with an `alias` set to `@latest` (e.g. `al2023@latest`, `al2@latest`, or `bottlerocket@latest`), Karpenter will use the _latest_ release for that AMI type when spinning up a new node.\n* When a node is replaced, Karpenter checks to see if a newer AMI is available based on your `amiSelectorTerms`. If a newer AMI is available, Karpenter will automatically use the new AMI to spin up the new node. __In particular, if you are using a dynamic `amiSelectorTerm` type, you may get a new AMI deployed to your environment without having properly tested it.__\n\nWhenever a node is replaced, the replacement node will be launched using the newest AMI based on your `amiSelectorTerms`. Nodes may be replaced due to manual deletion, or any of Karpenter's automated methods:\n- [**Expiration**]({{< relref \"../concepts/disruption/#expiration\" >}}): Automatically initiates replacement at a certain time after the node is created.\n-  [**Consolidation**]({{< relref \"../concepts/disruption/#consolidation\" >}}): If Karpenter detects that a cheaper node can be used to run the same workloads, Karpenter may replace the current node automatically.\n- [**Drift**]({{< relref \"../concepts/disruption/#drift\" >}}): If a node's state no longer matches the desired state dictated by the `NodePool` or `EC2NodeClass`, it will be replaced, including if the node's AMI no longer matches the latest AMI selected by the `amiSelectorTerms`.\n- [**Interruption**]({{< relref \"../concepts/disruption/#interruption\" >}}): Nodes are sometimes involuntarily disrupted by things like Spot interruption, health changes, and instance events, requiring new nodes to be deployed.\n\nSee [**Automated Methods**]({{< relref \"../concepts/disruption/#automated-methods\" >}}) for details on how Karpenter uses these automated actions to replace nodes.\n\nThe most relevant automated disruption method is [**Drift**]({{< relref \"../concepts/disruption/#drift\" >}}), since it is initiated when a new AMI is selected-on by your `amiSelectorTerms`. This could be due to a manual update (e.g. a new `id` term was added), or due to a new AMI being resolved by a dynamic term.\n\nIf you're using an `alias` with the `latest` pin (e.g. `al2023@latest`), Karpenter periodically checks for new AMI releases. Since AMI releases are outside your control, this could result in new AMIs being deployed before they have been properly tested in a lower environment. This is why we **strongly recommend** using version pins in production environments when using an alias (e.g. `al2023@v20240807`).\n\n{{% alert title=\"Important\" color=\"warning\" %}}\nIf you are new to Karpenter, you should know that the behavior described here is different than you get with Managed Node Groups (MNG). MNG will always use the assigned AMI when it creates a new node and will never automatically upgrade to a new AMI when a new node is required. See [Updating a Managed Node Group](https://docs.aws.amazon.com/eks/latest/userguide/update-managed-node-group.html) to see how you would manually update MNG to use new AMIs.\n{{% /alert %}}\n\n## Controlling AMI Replacement\n\nKarpenter's automated node replacement functionality in tandem with the `EC2NodeClass` gives you a lot of flexibility to control the desired state of nodes on your cluster. For example, you can opt-in to AMI auto-upgrades using `alias` set to `@latest`; however, this has to be weighed heavily against the risk of newer versions of an AMI breaking existing applications on your cluster. Alternatively, you can choose to pin your AMIs in your production clusters to avoid the risk of breaking changes; however, this has to be weighed against the management cost of testing new AMIs in pre-production and keeping up with the latest AMI versions.\n\nKarpenter offers you various controls to ensure you don't take on too much risk as you rollout new versions of AMIs to your production clusters. Below shows how you can use these controls:\n\n* [Pinning AMIs]({{< relref \"#pinning-amis\" >}}): If workloads require a particluar AMI, this control ensures that it is the only AMI used by Karpenter. This can be used in combination with [Testing AMIs]({{< relref \"#testing-amis\" >}}) where you lock down the AMI in production, but allow the newest AMIs in a test cluster while you test your workloads before upgrading production.\n* [Testing AMIs]({{< relref \"#testing-amis\" >}}): The safest way for ensuring that a new AMI doesn't break your workloads is to test it before putting it into production. This takes the most effort on your part, but most effectively models how your workloads will run in production, allowing you to catch issues ahead of time. Note that you can sometimes get different results from your test environment when you roll a new AMI into production, since issues like scale and other factors can elevate problems you might not see in test. Combining this with other controls like [Using Disruption Budgets]({{< relref \"#using-disruption-budgets\" >}}) can allow you to catch problems before they impact your whole cluster.\n* [Using Disruption Budgets]({{< relref \"#using-disruption-budgets\" >}}): This option can be used as a way of mitigating the scope of impact if a new AMI causes problems with your workloads. With Disruption budgets you can slow the pace of upgrades to nodes with new AMIs or make sure that upgrades only happen during selected dates and times (using `schedule`). This doesn't prevent a bad AMI from being deployed, but it allows you to control when nodes are upgraded, and gives you more time to respond to rollout issues.\n\n### Pinning AMIs\n\nWhen you configure the [**EC2NodeClass**]({{< relref \"../concepts/nodeclasses\" >}}), you are required to configure which AMIs you want Karpenter to select on using the `amiSelectorTerms` field. When pinning to a specific `id`, `name`, `tags` or an `alias` that contains a fixed version, Karpenter will only select on a single AMI and won't automatically upgrade your nodes to a new version of an AMI. This prevents a new and potentially untested AMI from replacing existing nodes when those nodes are terminated.\n).\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nPinning an AMI to an `alias` type with a fixed version _will_ pin the AMI so long as your K8s control plane version doesn't change. Unlike `id` and `name` types, specifying a version `alias` in your `amiSelectorTerms` will cause Karpenter to consider the K8s control plane version of your cluster when choosing the AMI. If you upgrade your Kubernetes cluster while using this alias type, Karpenter _will_ automatically drift your nodes to a new AMI that still matches the AMI version but also matches your new K8s control plane version.\n{{% /alert %}}\n\nThese examples show three different ways to identify the same AMI:\n\n```yaml\n# Using alias\n# Pinning to this fixed version alias will pull this version of the AMI,\n# matching the K8s control plane version of your cluster\namiSelectorTerms:\n- alias: al2023@v20240219\n```\n\n```yaml\n# Using name\n# This will only ever select the AMI that contains this exact name\namiSelectorTerms:\n- name: al2023-ami-2023.3.20240219.0-kernel-6.1-x86_64\n```\n\n```yaml\n# Using id\n# This will only ever select this specific AMI id\namiSelectorTerms:\n- id: ami-052c9ea013e6e3567\n```\n\n```yaml\n# Using tags\n# You can use a CI/CD system to test newer versions of an AMI\n# and automatically tag them as you validate that they are safe to upgrade to\namiSelectorTerms:\n- tags:\n    karpenter.sh/discovery: \"${CLUSTER_NAME}\"\n    environment: prod\n```\n\nSee the [**spec.amiSelectorTerms**]({{< relref \"../concepts/nodeclasses/#specamiselectorterms\" >}}) section of the NodeClasses page for details.\nKeep in mind, that this could prevent you from getting critical security patches when new AMIs are available, but it does give you control over exactly which AMI is running.\n\n### Testing AMIs\n\nInstead of avoiding AMI upgrades, you can set up test clusters where you can try out new AMI releases before they are put into production. For example, you could have:\n\n* **Test clusters**: On lower environment clusters, you can run the latest AMIs e.g. `al2023@latest`, `al2@latest`, `bottlerocket@latest`, for your workloads in a safe environment. This ensures that you get the latest patches for AMIs where downtime to applications isn't as critical and allows you to validate patches to AMIs before they are deployed to production.\n\n* **Production clusters**: After you've confirmed that the AMI works in your lower environments, you can pin the latest AMIs to be deployed in your production clusters to roll out the AMI. Refer to [Pinning AMIs]({{< relref \"#pinning-amis\" >}}) for how to choose a particular AMI by `alias`, `name` or `id`. Remember that it is still best practice to gradually roll new AMIs into your cluster, even if they have been tested. So consider implementing that for your production clusters as described in [Using Disruption Budgets]({{< relref \"#using-disruption-budgets\" >}}).\n\n### Using Disruption Budgets\n\nTo reduce the risk of entire workloads being immediately degraded when a new AMI is deployed, you can enable Karpenter's [**Node Disruption Budgets**]({{< relref \"#node-disruption-budgets \" >}}) as well as ensure that you have [**Pod Disruption Budgets**]({{< relref \"#pod-disruption-budgets \" >}}) configured for applications on your cluster. Below provides more details on how to configure each.\n\n#### Node Disruption Budgets\n\n[Disruption Budgets]({{< relref \"../concepts/disruption/#disruption-budgets \" >}}) limit when and to what extent nodes can be disrupted. You can prevent disruption based on nodes (a percentage or number of nodes that can be disrupted at a time) and schedule (excluding certain times from disrupting nodes).\nYou can set Disruption Budgets in a `NodePool` spec. Here is an example:\n\n```yaml\ndisruption:\n  budgets:\n  - nodes: 15%\n  - nodes: \"3\"\n  - nodes: \"0\"\n    schedule: \"0 9 * * sat,sun\"\n    duration: 24h\n  - nodes: \"0\"\n    schedule: \"0 17 * * mon-fri\"\n    duration: 16h\n    reasons:\n      - Drifted\n```\n\nSettings for budgets in the above example include the following:\n\n* **Percentage of nodes**: From the first `nodes` setting, only `15%` of the NodePool’s nodes can be disrupted at a time.\n* **Number of nodes**: The second `nodes` setting limits the number of nodes that can be disrupted at a time to `3`.\n* **Schedule**: The third `nodes` setting uses schedule to say that zero disruptions (`0`) are allowed starting at 9am on Saturday and Sunday and continues for 24 (fully blocking disruptions all day).\nThe format of the schedule follows the `crontab` format for identifying dates and times.\nSee the [crontab](https://man7.org/linux/man-pages/man5/crontab.5.html) page for information on the supported values for these fields.\n* **Reasons**: The fourth `nodes` setting uses `reasons` which implies that this budget only applies to the `Drifted` disruption condition. This setting uses schedule to say that zero disruptions (`0`) are allowed starting at 5pm on Monday, Tuesday, Wednesday, Thursday, and Friday and continues for 16h (effectively blocking rolling nodes due to drift outside of working hours).\n\nAs with all disruption settings, keep in mind that avoiding updated AMIs for your nodes can result in not getting fixes for known security risks and bugs.\nYou need to balance that with your desire to not risk breaking the workloads on your cluster.\n\n#### Pod Disruption Budgets\n\n[Pod Disruption Budgets](https://kubernetes.io/docs/tasks/run-application/configure-pdb/#specifying-a-poddisruptionbudget) allow you to describe how much disruption an application can tolerate before it begins to become unhealthy. This is critical to configure for Karpenter, since Karpenter uses this information to determine if it can continue to replace nodes. Specifically, if replacing a node would cause a Pod Disruption Budget to be breached (for graceful forms of disruption e.g. Drift or Consolidation), Karpenter will not replace the node.\n\nIn a scenario where a faulty AMI is rolling out and begins causing downtime to your applications, configuring Pod Disruption Budgets is critical since this will tell Karpenter that it must stop replacing nodes until your applications become healthy again. This prevents Karpenter from deploying the faulty AMI throughout your cluster, reduces the imact the AMI has on your production applications, and gives you manually intervene in the cluster to remediate the issue.\n\n## Follow-up\n\nThe Karpenter project continues to add features to give you greater control over AMI upgrades on your clusters.\nIf you have opinions about features you would like to see to manage AMIs with Karpenter, feel free to enter a Karpenter [New Issue](https://github.com/aws/karpenter-provider-aws/issues/new/choose).\n"
  },
  {
    "path": "website/content/en/v1.9/tasks/odcrs.md",
    "content": "---\ntitle: \"Utilizing On-Demand Capacity Reservations and Capacity Blocks\"\nlinkTitle: \"Utilizing ODCRs and Capacity Blocks\"\n---\n\n<i class=\"fa-solid fa-circle-info\"></i> <b>Feature State: </b> [Beta]({{<ref \"../reference/settings#feature-gates\" >}})\n\nKarpenter introduced native support for [EC2 On-Demand Capacity Reservations](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-capacity-reservations.html)  (ODCRs) in [v1.3](https://github.com/aws/karpenter-provider-aws/releases/tag/v1.3.0), enabling users to select upon and prioritize specific capacity reservations.\nIn [v1.6](https://github.com/aws/karpenter-provider-aws/releases/tag/v1.6.0), this support was expanded to include [EC2 Capacity Blocks for ML](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-capacity-blocks.html).\nTo enable native ODCR support, ensure the [`ReservedCapacity` feature gate]({{< relref \"../reference/settings#feature-gates\" >}}) is enabled.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nIf you were previously utilizing `open` ODCRs using Karpenter, review the [migration section]({{< relref \"#migrating-from-previous-versions\" >}}) of this task before enabling this feature.\n{{% /alert %}}\n\n## Selecting Capacity Reservations\n\nTo configure native ODCR support, you will need to make updates to both your EC2NodeClass and NodePool.\nFirst, you should configure `capacityReservationSelectorTerms` on your EC2NodeClass.\nSimilar to `amiSelectorTerms`, you can specify a number of terms which are ANDed together to select ODCRs in your AWS account.\nThe following example demonstrates how to select all capacity reservations tagged with `application: foobar` in addition to `cr-56fac701cc1951b03`:\n\n```yaml\ncapacityReservationSelectorTerms:\n- tags:\n    application: foobar\n- id: cr-56fac701cc1951b03\n```\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nCapacity blocks are modeled as on-demand capacity reservations in EC2.\nTo select capacity blocks, specify them in your `capacityReservationSelectorTerms` in the same way you would for a default ODCR.\n{{% /alert %}}\n\nFor more information on configuring `capacityReservationSelectorTerms`, see the [NodeClass docs]({{< relref \"../concepts/nodeclasses#speccapacityreservationselectorterms\" >}}).\n\nAdditionally, you will need to update your NodePool to be compatible with ODCRs.\nKarpenter doesn't model ODCRs as standard on-demand capacity, and instead uses a dedicated capacity type: `reserved`.\nFor a NodePool to utilize ODCRs, it must be compatible with `karpenter.sh/capacity-type: reserved`.\nThe following example demonstrates how to configure a NodePool to prioritize ODCRs and fallback to on-demand capacity:\n\n```yaml\nrequirements:\n- key: karpenter.sh/capacity-type\n  operator: In\n  values: ['reserved', 'on-demand']\n```\n\nAdditionaly, Karpenter supports the following scheduling labels:\n\n| Label                                         | Example                       | Description                      |\n| --------------------------------------------- | ----------------------------- | -------------------------------- |\n| `karpenter.k8s.aws/capacity-reservation-id`   | `cr-56fac701cc1951b03`        | The capacity reservation's ID    |\n| `karpenter.k8s.aws/capacity-reservation-type` | `default` or `capacity-block` | The type of capacity reservation |\n\nThese labels will only be present on reserved nodes.\nThey are supported as NodePool requirements and as pod scheduling constaints (e.g. [node affinity](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#node-affinity)).\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter does **not** support open matching for ODCRs.\nThis means that all ODCRs you wish to utilize, even those with `open` instance eligibility, must be included in your NodeClass' `spec.capacityReservationSelectorTerms`.\n{{% /alert %}}\n\n## Prioritization Behavior\n\nNodePools are not limited to a single compatible capacity-type -- they can be compatible with any combination of the available capacity-types (`on-demand`, `spot`, and `reserved`).\nConsider the following NodePool requirements:\n\n```yaml\nrequirements:\n- key: karpenter.sh/capacity-type\n  operator: In\n  values: ['reserved', 'on-demand', 'spot']\n```\n\nIn this example, the NodePool is compatible with all capacity types.\nKarpenter will prioritize ODCRs, but if none are available or none are compatible with the pending workloads it will fallback to spot or on-demand.\nSimilarly, Karpenter will prioritize reserved capacity during consolidation.\nSince ODCRs are pre-paid, Karpenter will model them as free and consolidate spot / on-demand nodes when possible.\n\n## Expiration\n\nAn instance launched into an ODCR is not necessarily in that ODCR indefinitely.\nThe ODCR could expire, be cancelled, or the instance could be manually removed from the ODCR.\nIf any of these occur, and Karpenter detects that the instance no longer belongs to an ODCR, it will update the `karpenter.sh/capacity-type` label to `on-demand`.\n\n### Capacity Blocks\n\nUnlike default ODCRs, Capacity Blocks must have an end time.\nAdditionally, instances launched into a capacity block will be terminated by EC2 ahead of the end time, rather than becoming standard on-demand capacity.\n\nFrom the [AWS docs](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-capacity-blocks.html):\n\n> You can use all the instances you reserved until 30 minutes (for instance types) or 60 minutes (for UltraServer type) before the end time of the Capacity Block.\n> With 30 minutes (for instance types) or 60 minutes (for UltraServer types) left in your Capacity Block reservation, we begin terminating any instances that are running in the Capacity Block.\n> We use this time to clean up your instances before delivering the Capacity Block to the next customer.\n\nKarpenter will preemptively begin draining nodes launched for capacity blocks 10 minutes before EC2 begins termination, ensuring your workloads can gracefully terminate before reclaimation.\n\n## Migrating From Previous Versions\n\nAlthough it was not natively supported, it was possible to utilize ODCRs on previous versions of Karpenter.\nIf a NodeClaim's requirements happened to be compatible with an open ODCR in the target AWS account, it may have launched an instance into that open ODCR.\nThis could be ensured by constraining a NodePool such that it was only compatible with the desired open ODCR, and limits could be used to enable fallback to a different NodePool once the ODCR was exhausted.\nThis behavior is no longer supported when native on-demand capacity support is enabled.\n\nIf you were relying on this behavior, you should configure your `EC2NodeClasses` to select the desired ODCRs **before** enabling the feature gate.\nYou should also ensure any NodePools which you wish to use with ODCRs are compatible with `karpenter.sh/capacity-type: reserved`.\nPerforming these steps before enabling the feature gate will ensure that Karpenter can immediately continue utilizing your reservations, rather than falling back to on-demand.\n"
  },
  {
    "path": "website/content/en/v1.9/troubleshooting.md",
    "content": "---\ntitle: \"Troubleshooting\"\nlinkTitle: \"Troubleshooting\"\nweight: 70\ndescription: >\n  Troubleshoot Karpenter problems\n---\n\n## Controller\n\n### Enable debug logging\n\nThis can be done by updating the env variable `LOG_LEVEL` Karpenter deployment and then restarting the Karpenter deployment.\n\nYou can also enable debug logging during installation with Helm by setting the option `logLevel`.\n\n```\nhelm upgrade --install karpenter oci://public.ecr.aws/karpenter/karpenter \\\n  --set logLevel=debug \\\n  ...\n```\n\n## Installation\n\n### Missing Service Linked Role\n\nUnless your AWS account has already onboarded to EC2 Spot, you will need to create the service linked role to avoid `ServiceLinkedRoleCreationNotPermitted`.\n\n```\nAuthFailure.ServiceLinkedRoleCreationNotPermitted: The provided credentials do not have permission to create the service-linked role for EC2 Spot Instances\n```\n\nThis can be resolved by creating the [Service Linked Role](https://docs.aws.amazon.com/batch/latest/userguide/spot_fleet_IAM_role.html).\n\n```\naws iam create-service-linked-role --aws-service-name spot.amazonaws.com\n```\n\n### Failed Resolving STS Credentials with I/O Timeout\n\n```bash\nChecking EC2 API connectivity, WebIdentityErr: failed to retrieve credentials\\ncaused by: RequestError: send request failed\\ncaused by: Post \\\"https://sts.us-east-1.amazonaws.com/\\\": dial tcp: lookup sts.us-east-1.amazonaws.com: i/o timeout\n```\n\nIf you see the error above when you attempt to install Karpenter, this indicates that Karpenter is unable to reach out to the STS endpoint due to failed DNS resolution. This can happen when Karpenter is running with `dnsPolicy: ClusterFirst` and your in-cluster DNS service is not yet running.\n\nYou have two mitigations to resolve this error:\n1. Let Karpenter manage your in-cluster DNS service - You can let Karpenter manage your DNS application pods' capacity by changing Karpenter's `dnsPolicy` to be `Default` (run `--set dnsPolicy=Default` with a Helm installation). This ensures that Karpenter reaches out to the [VPC DNS service](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-dns.html) when running its controllers, allowing Karpenter to start-up without the DNS application pods running, enabling Karpenter to manage the capacity for these pods.\n2. Let MNG/Fargate manage your in-cluster DNS service - If running a cluster with MNG, ensure that your group has enough capacity to support the DNS application pods and ensure that the application has the correct tolerations to schedule against the capacity. If running a cluster with Fargate, ensure that you have a [fargate profile](https://docs.aws.amazon.com/eks/latest/userguide/fargate-profile.html) that selects against your DNS application pods.\n\n### Karpenter Role names exceeding 64-character limit\n\nIf 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).\n\nNode role names for Karpenter are created in the form `KarpenterNodeRole-${Cluster_Name}` in the [Create the KarpenterNode IAM Role]({{<ref \"./getting-started/getting-started-with-karpenter/#create-the-karpenternode-iam-role\" >}}) section of the getting started guide.\nIf a long cluster name causes the Karpenter node role name to exceed 64 characters, creating that object will fail.\n\nKeep in mind that `KarpenterNodeRole-` is just a recommendation from the getting started guide.\nInstead of using the eksctl role, you can shorten the name to anything you like, as long as it has the right permissions.\n\n### Unknown field in NodePool or EC2NodeClass spec\n\nIf 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:\n\n```\nError from server (BadRequest): error when creating \"STDIN\": NodePool in version \"v1\" cannot be handled as a NodePool: strict decoding error: unknown field \"spec.template.spec.nodeClassRef.foo\"\n```\n\nIf you see this error, you can solve the problem by following the [Custom Resource Definition Upgrade Guidance](../upgrade-guide/#custom-resource-definition-crd-upgrades).\n\nInfo 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)\n\n### Unable to schedule pod due to insufficient node group instances\n\n`0.16.0` changed the default replicas from 1 to 2.\n\nKarpenter won't launch capacity to run itself (log related to the `karpenter.sh/nodepool DoesNotExist requirement`)\nso it can't provision for the second Karpenter pod.\n\nTo 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 to run both pods.\n\nTo do so on AWS increase the `minimum` and `desired` parameters on the node group autoscaling group to launch at lease 2 instances.\n\n### Helm Error When Pulling the Chart\n\nIf Helm is showing an error when trying to install Karpenter Helm charts:\n\n- Ensure you are using a newer Helm version, Helm started supporting OCI images since `3.8.0`.\n- Helm does not have an `helm repo add` concept in OCI, so to install Karpenter you no longer need this.\n- If you get an error like `Error: public.ecr.aws/karpenter/karpenter:0.34.0: not found` make sure you're adding a `v` prefix for Karpenter versions between `0.17.0` & `0.34.x`.\n- Verify that the image you are trying to pull actually exists in [gallery.ecr.aws/karpenter](https://gallery.ecr.aws/karpenter/karpenter)\n- 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\n- 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).\n\n### Helm Error when installing the `karpenter-crd` chart\n\nKarpenter `0.26.1` introduced the `karpenter-crd` Helm chart. When installing this chart on your cluster, if you have previously added the Karpenter CRDs to your cluster through the `karpenter` controller chart or through `kubectl replace`, Helm will reject the install of the chart due to `invalid ownership metadata`.\n\n- In the case of `invalid ownership metadata; label validation error: missing key \"app.kubernetes.io/managed-by\": must be set to \"Helm\"` run:\n\n```shell\nkubectl label crd ec2nodeclasses.karpenter.k8s.aws nodepools.karpenter.sh nodeclaims.karpenter.sh app.kubernetes.io/managed-by=Helm --overwrite\n```\n\n- In the case of `annotation validation error: missing key \"meta.helm.sh/release-namespace\": must be set to \"karpenter\"` run:\n\n```shell\nKARPENTER_NAMESPACE=kube-system\nkubectl annotate crd ec2nodeclasses.karpenter.k8s.aws nodepools.karpenter.sh nodeclaims.karpenter.sh meta.helm.sh/release-name=karpenter-crd --overwrite\nkubectl annotate crd ec2nodeclasses.karpenter.k8s.aws nodepools.karpenter.sh nodeclaims.karpenter.sh meta.helm.sh/release-namespace=\"${KARPENTER_NAMESPACE}\" --overwrite\n```\n\n## Uninstallation\n\n### Unable to delete nodes after uninstalling Karpenter\n\nKarpenter 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.\n\nYou can fix this by patching the node objects:\n\n- `kubectl edit node <node_name>` and remove the line that says `karpenter.sh/termination` in the finalizers field.\n- Run the following script that gets all nodes with the finalizer and removes all the finalizers from those nodes.\n  - NOTE: this will remove ALL finalizers from nodes with the karpenter finalizer.\n\n```bash\nkubectl 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\"}]'\n```\n\n## Provisioning\n\n### Instances with swap volumes fail to register with control plane\n\nSome instance types (c1.medium and m1.small) are given limited amount of memory (see [Instance Store swap volumes](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-store-swap-volumes.html)). They are subsequently configured to use a swap volume, which will cause the kubelet to fail on launch. The following error can be seen in the systemd logs:\n\n```bash\n\"command failed\" err=\"failed to run Kubelet: running with swap on is not supported, please disable swap!...\"\n```\n\n##### Solutions\nDisabling swap will allow kubelet to join the cluster successfully, however users should be mindful of performance, and consider adjusting the NodePool requirements to use larger instance types.\n\n### DaemonSets can result in deployment failures\n\nFor Karpenter versions `0.5.3` and earlier, DaemonSets were not properly considered when provisioning nodes.\nThis sometimes caused nodes to be deployed that could not meet the needs of the requested DaemonSets and workloads.\nThis issue no longer occurs after Karpenter version `0.5.3` (see [PR #1155](https://github.com/aws/karpenter/pull/1155)).\n\nIf you are using a pre `0.5.3` version of Karpenter, one workaround is to set your NodePool to only use larger instance types that you know will be big enough for the DaemonSet and the workload.\nFor more information, see [Issue #1084](https://github.com/aws/karpenter/issues/1084).\nExamples of this behavior are included in [Issue #1180](https://github.com/aws/karpenter/issues/1180).\n\n### Unspecified resource requests cause scheduling/bin-pack failures\n\nNot 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.\nThis can cause issues as Karpenter bin-packs pods based on the resource requests.\n\nIf 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.\nThis behavior is not unique to Karpenter and can also occur with the standard `kube-scheduler` with pods that don't have accurate resource requests.\n\nTo prevent this, you can set LimitRanges on pod deployments on a per-namespace basis.\nSee 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.\n\n### Pods using Security Groups for Pods stuck in \"ContainerCreating\" state for up to 30 minutes before transitioning to \"Running\"\n\nWhen 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\".\nThis 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.\nMore info can be found in [issue #1252](https://github.com/aws/karpenter/issues/1252).\n\nTo workaround this problem, add the `vpc.amazonaws.com/has-trunk-attached: \"false\"` label in your Karpenter NodePool 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).\n\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\nspec:\n  template\n    metadata:\n      labels:\n        vpc.amazonaws.com/has-trunk-attached: \"false\"\n```\n\n### Pods using PVCs can hit volume limits and fail to scale-up\n\nWhen attempting to schedule a large number of pods with PersistentVolumes, it's possible that these pods will co-locate on the same node. Pods will report the following errors in their events using a `kubectl describe pod` call\n\n```bash\nWarning   FailedAttachVolume    pod/example-pod                      AttachVolume.Attach failed for volume \"***\" : rpc error: code = Internal desc = Could not attach volume \"***\" to node \"***\": attachment of disk \"***\" failed, expected device to be attached but was attaching\nWarning   FailedMount           pod/example-pod                      Unable to attach or mount volumes: unmounted volumes=[***], unattached volumes=[***]: timed out waiting for the condition\n```\n\nIn this case, Karpenter may fail to scale-up your nodes due to these pods due to one of the following reasons:\n\n#### Pods were not scheduled but Karpenter couldn't discover limits\n\nKarpenter does not support [in-tree storage plugins](https://kubernetes.io/blog/2021/12/10/storage-in-tree-to-csi-migration-status-update/) to provision PersistentVolumes, since nearly all of the in-tree plugins have been deprecated in upstream Kubernetes. This means that, if you are using a statically-provisioned PersistentVolume that references a volume source like `AWSElasticBlockStore` or a dynamically-provisioned PersistentVolume that references a StorageClass with a in-tree storage plugin provisioner like `kubernetes.io/aws-ebs`, Karpenter will fail to discover the maxiumum volume attachments for the node. Instead, Karpenter may think the node still has more schedulable space due to memory and cpu constraints when there is really no more schedulable space on the node due to volume limits. When Karpenter sees you are using an in-tree storage plugin on your pod volumes, it will print the following error message into the logs. If you see this message, upgrade your StorageClasses and statically-provisioned PersistentVolumes to use the latest CSI drivers for your cloud provider.\n\n```bash\n2023-04-05T23:56:53.363Z        ERROR   controller.node_state   PersistentVolume source 'AWSElasticBlockStore' uses an in-tree storage plugin which is unsupported by Karpenter and is deprecated by Kubernetes. Scale-ups may fail because Karpenter will not discover driver limits. Use a PersistentVolume that references the 'CSI' volume source for Karpenter auto-scaling support.       {\"commit\": \"b2af562\", \"node\": \"ip-192-168-36-137.us-west-2.compute.internal\", \"pod\": \"inflate0-6c4bdb8b75-7qmfd\", \"volume\": \"mypd\", \"persistent-volume\": \"pvc-11db7489-3c6e-46f3-a958-91f9d5009d41\"}\n2023-04-05T23:56:53.464Z        ERROR   controller.node_state   StorageClass .spec.provisioner uses an in-tree storage plugin which is unsupported by Karpenter and is deprecated by Kubernetes. Scale-ups may fail because Karpenter will not discover driver limits. Create a new StorageClass with a .spec.provisioner referencing the CSI driver plugin name 'ebs.csi.aws.com'.     {\"commit\": \"b2af562\", \"node\": \"ip-192-168-36-137.us-west-2.compute.internal\", \"pod\": \"inflate0-6c4bdb8b75-7qmfd\", \"volume\": \"mypd\", \"storage-class\": \"gp2\", \"provisioner\": \"kubernetes.io/aws-ebs\"}\n```\n\n#### Pods were scheduled due to a race condition in Kubernetes\n\nDue to [this race condition in Kubernetes](https://github.com/kubernetes/kubernetes/issues/95911), it's possible that the scheduler and the CSINode can race during node registration such that the scheduler assumes that a node can mount more volumes than the node attachments support. There is currently no universal solve for this problem other than enforcing `topologySpreadConstraints` and `podAntiAffinity` on your workloads that use PVCs such that you attempt to reduce the number of PVCs that schedule to a given node.\n\nThe following is a list of known CSI drivers which support a startupTaint to eliminate this issue:\n- [aws-ebs-csi-driver](https://github.com/kubernetes-sigs/aws-ebs-csi-driver/blob/master/docs/install.md#configure-node-startup-taint)\n- [aws-efs-csi-driver](https://github.com/kubernetes-sigs/aws-efs-csi-driver/tree/master/docs#configure-node-startup-taint)\n\nThese taints should be configured via `startupTaints` on your `NodePool`. For example, to enable this for EBS, add the following to your `NodePool`:\n```yaml\napiVersion: karpenter.sh/v1\nkind: NodePool\nspec:\n  template:\n    spec:\n      startupTaints:\n        - key: ebs.csi.aws.com/agent-not-ready\n          effect: NoExecute\n```\n\n### CNI is unable to allocate IPs to pods\n\n_Note: This troubleshooting guidance is specific to the VPC CNI that is shipped by default with EKS clusters. If you are using a custom CNI, some of this guidance may not apply to your cluster._\n\nWhenever a new pod is assigned to a node, the CNI will assign an IP address to that pod (assuming it isn't using host networking), allowing it to communicate with other pods on the cluster. It's possible for this IP allocation and assignment process to fail for a number of reasons. If this process fails, you may see an error similar to the one below.\n\n```bash\ntime=2023-06-12T19:18:15Z type=Warning reason=FailedCreatePodSandBox from=kubelet message=Failed to create pod sandbox: rpc error: code = Unknown desc = failed to setup network for sandbox \"0f46f3f1289eed7afab81b6945c49336ef556861fe5bb09a902a00772848b7cc\": plugin type=\"aws-cni\" name=\"aws-cni\" failed (add): add cmd: failed to assign an IP address to container\n```\n\n#### `maxPods` is greater than the node's supported pod density\n\nBy 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.\n\nIf the max-pods (configured through your EC2NodeClass [`kubeletConfiguration`]({{<ref \"./concepts/nodeclasses/#speckubelet\" >}})) is greater than the number of supported IPs for a given instance type, the CNI will fail to assign an IP to the pod and your pod will be left in a `ContainerCreating` state.\n\nIf you've enabled [Security Groups per Pod](https://aws.github.io/aws-eks-best-practices/networking/sgpp/), one of the instance's ENIs is reserved as the trunk interface and uses branch interfaces off of that trunk interface to assign different security groups.\nIf you do not have any `SecurityGroupPolicies` configured for your pods, they will be unable to utilize branch interfaces attached to the trunk interface, and IPs will only be available from the non-trunk ENIs.\nThis effectively reduces the max-pods value by the number of IPs that would have been available from the trunk ENI.\nNote that Karpenter is not aware if [Security Groups per Pod](https://aws.github.io/aws-eks-best-practices/networking/sgpp/) is enabled, and will continue to compute max-pods assuming all ENIs on the instance can be utilized.\n\n##### Solutions\n\nTo avoid this discrepancy between `maxPods` and the supported pod density of the EC2 instance based on ENIs and allocatable IPs, you can perform one of the following actions on your cluster:\n\n1. Enable [Prefix Delegation](https://docs.aws.amazon.com/eks/latest/userguide/cni-increase-ip-addresses.html) to increase the number of allocatable IPs for the ENIs on each instance type\n2. Reduce your `maxPods` value to be under the maximum pod density for the instance types assigned to your NodePods\n3. Remove the `maxPods` value from your [`kubeletConfiguration`]({{<ref \"./concepts/nodeclasses#speckubeletconfiguration\" >}}) if you no longer need it and instead rely on the defaulted values from Karpenter and EKS AMIs.\n4. Set [RESERVED_ENIS]({{<ref \"./reference/settings\" >}})=1 in your Karpenter configuration to account for the reserved ENI when using Security Groups for Pods.\n\nFor more information on pod density, view the [Pod Density Section in the NodePools doc]({{<ref \"./concepts/nodeclasses#pod-density\" >}}).\n\n#### IP exhaustion in a subnet\n\nWhen a node is launched by Karpenter, it is assigned to a subnet within your VPC based on the [`subnetSelector`]({{<ref \"./concepts/nodeclasses#specsubnetselector\" >}}) value in your [`EC2NodeClass`]({{<ref \"./concepts/nodeclasses\" >}})). When a subnet becomes IP address constrained, EC2 may think that it can successfully launch an instance in the subnet; however, when the CNI tries to assign IPs to the pods, there are none remaining. In this case, your pod will stay in a `ContainerCreating` state until an IP address is freed in the subnet and the CNI can assign one to the pod.\n\n##### Solutions\n\n1. Use `topologySpreadConstraints` on `topology.kubernetes.io/zone` to spread your pods and nodes more evenly across zones\n2. Increase the IP address space (CIDR) for the subnets selected by your `EC2NodeClass`\n3. Use [custom networking](https://docs.aws.amazon.com/eks/latest/userguide/cni-custom-network.html) to assign separate IP address spaces to your pods and your nodes\n4. [Run your EKS cluster on IPv6](https://aws.github.io/aws-eks-best-practices/networking/ipv6/) (Note: IPv6 clusters have some known limitations which should be well-understood before choosing to use one)\n\nFor more troubleshooting information on why your pod may have a `FailedCreateSandbox` error, view the [EKS CreatePodSandbox Knowledge Center Post](https://repost.aws/knowledge-center/eks-failed-create-pod-sandbox).\n\n### Windows pods are failing with `FailedCreatedPodSandbox`\n\nThe following solution(s) may resolve your issue if you are seeing an error similar to the following when attempting to launch Windows pods. This error typically occurs if you have not enabled Windows support.\n\n```\nFailed to create pod sandbox: rpc error: code = Unknown desc = failed to setup network for sandbox \"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\": plugin type=\"vpc-bridge\" name=\"vpc\" failed (add): failed to parse Kubernetes args: pod does not have label vpc.amazonaws.com/PrivateIPv4Address\n```\n\n#### Solutions\n1. See [Enabling Windows support](https://docs.aws.amazon.com/eks/latest/userguide/windows-support.html#enable-windows-support) for instructions on how to enable Windows support.\n\n### Windows pods fail to launch with image pull error\n\nThe following solution(s) may resolve your issue if you are seeing an error similar to the following when attempting to launch Windows pods.\n\n```\nFailed to pull image \"mcr.microsoft.com/windows/servercore:xxx\": rpc error: code = NotFound desc = failed to pull and unpack image \"mcr.microsoft.com/windows/servercore:xxx\": no match for platform in manifest: not found\n```\n\nThis error typically occurs in a scenario whereby a pod with a given container OS version attempts to be scheduled on an incompatible Windows host OS version.\nWindows requires the host OS version to match the container OS version.\n\n#### Solutions\n\n1. Define your pod's `nodeSelector` to ensure that your containers are scheduled on a compatible OS host version. To learn more, see [Windows container version compatibility](https://learn.microsoft.com/en-us/virtualization/windowscontainers/deploy-containers/version-compatibility).\n\n### Windows pods unable to resolve DNS\nCauses for DNS resolution failure may vary, but in the case where DNS resolution is working for Linux pods but not for Windows pods,\nthen the following solution(s) may resolve your issue.\n\n#### Solution(s)\n1. Verify that the instance role of the Windows node includes the RBAC permission group `eks:kube-proxy-windows` as shown below.\n   This group is required for Windows nodes because in Windows, `kube-proxy` runs as a process on the node, and as such, the node requires the necessary RBAC cluster permissions to allow access to the resources required by `kube-proxy`.\n   For more information, see https://docs.aws.amazon.com/eks/latest/userguide/windows-support.html.\n```yaml\n...\n  username: system:node:{{EC2PrivateDNSName}}\n  groups:\n    - system:bootstrappers\n    - system:nodes\n    - eks:kube-proxy-windows # This is required for Windows DNS resolution to work\n...\n```\n\n### Karpenter incorrectly computes available resources for a node\n\nWhen creating nodes, the allocatable resources Karpenter computed (as seen in logs and `nodeClaim.status.allocatable`) do not always match the allocatable resources on the created node (`node.status.allocatable`) due to some amount of memory being reserved for the hypervisor and underlying OS.\nKarpenter uses the results from `ec2:DescribeInstanceTypes` along with a cache for tracking observed memory capacity to determine the resources available on a node launched with a given instance type.\nThe following computation is used to determine allocatable CPU, memory, and ephemeral storage based on the results returned from `ec2:DescribeInstanceTypes`.\n\n```\n### cpu\nnodeClaim.allocatable.cpu = instance.cpu - kubeReserved.cpu - systemReserved.cpu\n\n### memory\n# If first time launching this instance-type + AMI pair\nnodeClaim.allocatable.memory = (instance.memory  * (1.0 - VM_MEMORY_OVERHEAD_PERCENT)) - kubeReserved.memory - systemReserved.memory - max(evictionSoft.memory.available, evictionHard.memory.available)\n# For subsequent nodes where cached instance-type capacity is available\nnodeClaim.allocatable.memory = ( cached.instance.memory - kubeReserved.memory - systemReserved.memory - max(evictionSoft.memory.available, evictionHard.memory.available)\n\n### ephemeral-storage\nnodeClaim.allocatable.ephemeralStorage = instance.storage - kubeReserved.ephemeralStorage - systemReserved.ephemeralStorage - max(evictionSoft.nodefs.available, evictionHard.nodefs.available)\n```\n\nMost of these factors directly model user configuration (i.e. the KubeletConfiguration options).\nOn the other hand, `VM_MEMORY_OVERHEAD_PERCENT` models an implicit reduction of available memory that varies by instance type and AMI.\nHowever, once a node is created, the actual memory capacity on that node (node.status.capacity.memory) is checked by the controller. The controller caches the observed memory for any subsequent nodes launched with the same AMI and instance type pair, improving accuracy for future nodes.\nFor new combinations of AMI and instance type (i.e., when this pair is launched for the first time), Karpenter will still use the VM_MEMORY_OVERHEAD_PERCENT value as a fallback for estimating allocatable memory.\nThis fallback is necessary because Karpenter can't compute the exact value being modeled ahead of time, so `VM_MEMORY_OVERHEAD_PERCENT` is a [global setting]({{< ref \"./reference/settings.md\" >}}) used across all instance type and AMI combinations.\nThe default value (`7.5%`) has been tuned to closely match reality for the majority of instance types while not overestimating.\nAs a result, Karpenter will typically underestimate the memory available on a node for a given instance type.\nIf you know the real `VM_MEMORY_OVERHEAD_PERCENT` for the specific instances you're provisioning in your cluster, you can tune this value to tighten the bound.\nHowever, this should be done with caution.\nA `VM_MEMORY_OVERHEAD_PERCENT` which results in Karpenter overestimating the memory available on a node can result in Karpenter launching nodes which are too small for your workload.\n\nTo detect instances of Karpenter overestimating resource availability, the following status condition can be monitored:\n\n```bash\n$ kg nodeclaim $NODECLAIM_NAME -o jsonpath='{.status.conditions[?(@.type==\"ConsistentStateFound\")]}'\n```\n\n```json\n{\n    \"type\": \"ConsistentStateFound\",\n    \"status\": \"False\",\n    \"reason\": \"ConsistencyCheckFailed\",\n    \"message\": \"Consistency Check Failed\",\n    \"lastTransitionTime\": \"2024-08-19T20:02:16Z\"\n}\n```\n\nThis can be spot checked like shown above, or monitored via the following metric:\n\n```\noperator_status_condition_count{type=\"ConsistentStateFound\",kind=\"NodeClaim\",status=\"False\"}\n```\n\n### Karpenter Is Unable to Satisfy Topology Spread Constraint\n\nWhen scheduling pods with TopologySpreadConstraints, Karpenter will attempt to spread the pods across all eligible domains.\nEligible domains are determined based on the pod's requirements, e.g. node affinity terms.\nHowever, pod's do not inherit the requirements of compatible NodePools.\n\nFor example, consider the following NodePool and Deployment specs:\n\n```yaml\nappVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: default\nspec:\n  template:\n    spec:\n      requirements:\n      - key: topology.kubernetes.io/zone\n        operator: Exists\n---\nappVersion: karpenter.sh/v1\nkind: NodePool\nmetadata:\n  name: np-zonal-constraint\n  labels:\n    project: zone-specific-project\nspec:\n  template:\n    spec:\n      requirements:\n      - key: topology.kubernetes.io/zone\n        operator: In\n        values: ['us-east-1a', 'us-east-1b']\n      # ...\n---\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: inflate\nspec:\n  replicas: 3\n  selector:\n    matchLabels:\n      app: inflate\n  template:\n    metadata:\n      labels:\n        app: inflate\n    spec:\n      nodeSelector:\n        project: zone-specific-project\n      topologySpreadConstraints:\n        - maxSkew: 1\n          topologyKey: topology.kubernetes.io/zone\n          whenUnsatisfiable: DoNotSchedule\n          labelSelector:\n            matchLabels:\n              app: inflate\n```\n\nThis cluster has subnets in three availability zones: `us-east-1a`, `us-east-1b`, and `us-east-1c`.\nNodePool `default` can launch instance types in all three zones, but `np-zonal-constraint` is constrained to two.\nSince Karpenter uses the pod's requirements to derive eligible domains, and the pod does not have any zonal constraints, all three availability zones are considered eligible domains.\nHowever, the only NodePool compatible with the pod's requirements is `np-zonal-constraints`, which can only create instances in two of the three eligible domains.\nKarpenter will succeed to launch the first two instances, for the first two replicas, but will fail to provision capacity for subsequent replicas since it can't provision capacity in the third domain.\n\nIn order to prevent these scenarios, you should ensure that all eligible domains for a pod can be provisioned by compatible NodePools, or constrain the pod such that it's eligble domains match those of the NodePools.\nTo resolve this specific issue, zonal constraints should be added to the pod spec to match the requirements of `np-zonal-constraint`:\n```yaml\nnodeAffinity:\n  requiredDuringSchedulingIgnoredDuringExecution:\n    nodeSelectorTerms:\n      - matchExpressions:\n          - key: topology.kubernetes.io/zone\n            operator: In\n            values: ['us-east-1a', 'us-east-1b']\n```\n\n### Log message of `no instance type met the scheduling requirements or had a required offering` is reported\n\nThis error suggests that there is no instance type available that meets the pod's scheduling requirements. A pod may have resource requests that necessitate a minimum instance size. If the pod is confined to a Node Pool with a specific instance family and size, it might not find an instance type that aligns with its resource needs. Additionally, resource requests from daemonsets are considered when determining if an instance type is compatible with the pod.\n\n\nThe phrase `had a required offering` pertains to the availability of an instance type in a specific location, such as an availability zone. This error can occur if a pod is restricted to a particular availability zone. For instance, consider a pod in a stateful set that previously had an EBS volume attached. If the subnet where the pod is scheduled changes, the pod might end up in a different availability zone than the EBS volume it needs to attach to. This mismatch in availability zones can lead to an error related to the required offering.\n\n## Deprovisioning\n\n### Nodes not deprovisioned\n\nThere 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.\n\n#### Initialization\n\nKarpenter 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]({{<ref \"#nodes-not-initialized\" >}}).\n\n#### Disruption budgets\n\nKarpenter 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.\nKubernetes PDBs let you specify how much of a Deployment, ReplicationController, ReplicaSet, or StatefulSet must be protected from disruptions when pod eviction requests are made.\n\nPDBs can be used to strike a balance by protecting the application's availability while still allowing a cluster administrator to manage the cluster.\nHere 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.\n\n```yaml\napiVersion: policy/v1\nkind: PodDisruptionBudget\nmetadata:\n  name: myapp-pdb\nspec:\n  minAvailable: 4\n  selector:\n    matchLabels:\n      app: myapp\n```\n\nYou can set `minAvailable` or `maxUnavailable` as integers or as a percentage.\nReview 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/).\n\n#### `karpenter.sh/do-not-disrupt` Annotation\n\nIf a pod exists with the annotation `karpenter.sh/do-not-disrupt: 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-disrupt` 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.\n\nIf you want to terminate a node with a `do-not-disrupt` pod, you can simply remove the annotation and the deprovisioning process will continue.\n\n#### Scheduling Constraints (Consolidation Only)\n\nConsolidation 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.\n\n## Node Launch/Readiness\n\n### Node not created\n\nIn some circumstances, Karpenter controller can fail to start up a node.\nFor 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:\n\n```bash\n2022-01-19T18:22:23.366Z ERROR controller.provisioning Could not launch node, launching instances, with fleet error(s), InvalidBlockDeviceMapping: Invalid device name /dev/xvda; ...\n```\n\nYou can see errors like this by viewing Karpenter controller logs:\n\n```bash\nkubectl get pods -A | grep karpenter\n```\n\n```bash\nkarpenter     karpenter-XXXX   2/2     Running   2          21d\n```\n\n```bash\nkubectl logs karpenter-XXXX -c controller -n karpenter | less\n```\n\n### Nodes not initialized\n\nKarpenter 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.\n\nKarpenter determines node initialization using three factors:\n\n1. Node readiness\n2. Expected resources are registered\n3. NodePool startup taints are removed\n\n#### Node Readiness\n\nKarpenter checks the `Ready` condition type and expects it to be `True`.\n\nTo see troubleshooting around what might be preventing nodes from becoming ready, see [Node NotReady]({{<ref \"#node-notready\" >}})\n\n#### Expected resources are registered\n\nKarpenter 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`.\n\nCommon resources that don't register and leave nodes in a non-initialized state:\n\n1. `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\n2. `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.\n\n#### NodePool startup taints are removed\n\nKarpenter expects all startup taints specified in `.spec.template.spec.startupTaints` of the NodePool to be completely removed from node `.spec.taints` before it will consider the node initialized.\n\n### Node NotReady\n\nThere are cases where the node starts, but fails to join the cluster and is marked \"Node NotReady\".\nReasons that a node can fail to join the cluster include:\n\n- Permissions\n- Security Groups\n- Networking\n\nThe easiest way to start debugging is to connect to the instance and get the Kubelet logs.  For an AL2 based node:\n\n```bash\n# List the nodes managed by Karpenter\nkubectl get node -l karpenter.sh/nodepool\n# Extract the instance ID (replace <node-name> with a node name from the above listing)\nINSTANCE_ID=$(kubectl get node <node-name> -ojson | jq -r \".spec.providerID\" | cut -d \\/ -f5)\n# Connect to the instance\naws ssm start-session --target $INSTANCE_ID\n# Check Kubelet logs\nsudo journalctl -u kubelet\n```\n\nFor Bottlerocket, you'll need to get access to the root filesystem:\n\n```bash\n# List the nodes managed by Karpenter\nkubectl get node -l karpenter.sh/nodepool\n# Extract the instance ID (replace <node-name> with a node name from the above listing)\nINSTANCE_ID=$(kubectl get node <node-name> -ojson | jq -r \".spec.providerID\" | cut -d \\/ -f5)\n# Connect to the instance\naws ssm start-session --target $INSTANCE_ID\n# Enter the admin container\nenter-admin-container\n# Check Kubelet logs\njournalctl -D /.bottlerocket/rootfs/var/log/journal -u kubelet.service\n```\n\nHere are examples of errors from Node NotReady issues that you might see from `journalctl`:\n\n- The runtime network not being ready can reflect a problem with IAM role permissions:\n\n  ```\n  KubeletNotReady runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:Network plugin returns error: cni plugin not initialized\n    ```\n\n  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:\n\n  ```bash\n  kubectl get pods -n kube-system | grep aws-node\n  ```\n\n  ```\n  aws-node-?????             1/1     Running   2          20d\n  ```\n\n  ```bash\n  kubectl logs aws-node-????? -n kube-system\n  ```\n\n- Not being able to register the node with the Kubernetes API server indicates an error condition like the following:\n\n  ```\n  Attempting to register node\" node=\"ip-192-168-67-130.ec2.internal\"\n  Unable to register node with API server\" err=\"Unauthorized\" node=\"ip-192-168-67-130.ec2.internal\"\n  Error getting node\" err=\"node \\\"ip-192-168-67-130.ec2.internal\\\" not found\n  Failed to contact API server when waiting for CSINode publishing: Unauthorized\n  ```\n\n  Check the ConfigMap to check whether or not the correct node role is there. For example:\n\n  ```bash\n  kubectl get configmaps -n kube-system aws-auth -o yaml\n  ```\n\n  ```yaml\n  apiVersion: v1\n  data:\n  mapRoles: |\n     - groups:\n        - system:bootstrappers\n        - system:nodes\n        rolearn: arn:aws:iam::973227887653:role/eksctl-johnw-karpenter-demo-NodeInstanceRole-72CV61KQNOYS\n        username: system:node:{{EC2PrivateDNSName}}\n     - groups:\n        - system:bootstrappers\n        - system:nodes\n        rolearn: arn:aws:iam::973227887653:role/KarpenterNodeRole-johnw-karpenter-demo\n        username: system:node:{{EC2PrivateDNSName}}\n  mapUsers: |\n      []\n  kind: ConfigMap\n  ...\n    ```\n\nIf 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:\n\n- Your UserData (in `/var_log/cloud-init-output.log` and `/var_log/cloud-init.log`)\n- Your kubelets (`/kubelet/kubelet.log`)\n- Your networking pod logs (`/var_log/aws-node`)\n\nReach 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.\n\n### Nodes stuck in pending and not running the kubelet due to outdated CNI\n\nIf 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`:\n\n> No entry for c6i.xlarge in /etc/eks/eni-max-pods.txt\n\nThis 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).\n\n### Node terminates before ready on failed encrypted EBS volume\n\nIf 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.\nThis issue also applies to [Block Device Mappings]({{<ref \"./concepts/nodeclasses/#block-device-mappings\" >}}) specified in the EC2NodeClass.\nIn either case, this results in the node terminating almost immediately upon creation.\n\nKeep in mind that it is possible that EBS Encryption can be enabled without your knowledge.\nEBS encryption could have been enabled by an account administrator or by default on a per region basis.\nSee [Encryption by default](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html#encryption-by-default) for details.\n\nTo 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:\n\n```json\n[\n    {\n        \"Sid\": \"Allow access through EBS for all principals in the account that are authorized to use EBS\",\n        \"Effect\": \"Allow\",\n        \"Principal\": {\n            \"AWS\": \"*\"\n        },\n        \"Action\": [\n            \"kms:Encrypt\",\n            \"kms:Decrypt\",\n            \"kms:ReEncrypt*\",\n            \"kms:GenerateDataKey*\",\n            \"kms:CreateGrant\",\n            \"kms:DescribeKey\"\n        ],\n        \"Resource\": \"*\",\n        \"Condition\": {\n            \"StringEquals\": {\n            \"kms:ViaService\": \"ec2.${AWS_REGION}.amazonaws.com\",\n            \"kms:CallerAccount\": \"${AWS_ACCOUNT_ID}\"\n            }\n        }\n    },\n    {\n        \"Sid\": \"Allow direct access to key metadata to the account\",\n        \"Effect\": \"Allow\",\n        \"Principal\": {\n            \"AWS\": \"arn:aws:iam::${AWS_ACCOUNT_ID}:root\"\n        },\n        \"Action\": [\n            \"kms:Describe*\",\n            \"kms:Get*\",\n            \"kms:List*\",\n            \"kms:RevokeGrant\"\n        ],\n        \"Resource\": \"*\"\n    }\n]\n```\n\n### Node is not deleted, even though `ttlSecondsUntilExpired` is set or the node is empty\n\nThis 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.\n\n### Log message of `inflight check failed for node, Expected resource \"vpc.amazonaws.com/pod-eni\" didn't register on the node` is reported\n\nThis error indicates that the `vpc.amazonaws.com/pod-eni` resource was never reported on the node. 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.\n\n### AWS Node Termination Handler (NTH) interactions\nKarpenter [doesn't currently support draining and terminating on spot rebalance recommendations]({{< ref \"concepts/disruption#interruption\" >}}). Users who want support for both drain and terminate on spot interruption as well as drain and termination on spot rebalance recommendations may install Node Termination Handler (NTH) on their clusters to support this behavior.\n\nThese two components do not share information between each other, meaning if you have drain and terminate functionality enabled on NTH, NTH may remove a node for a spot rebalance recommendation. Karpenter will replace the node to fulfill the pod capacity that was being fulfilled by the old node; however, Karpenter won't be aware of the reason that that node was terminated. This means that Karpenter may launch the same instance type that was just deprovisioned, causing a spot rebalance recommendation to be sent again. This can result in very short-lived instances where NTH continually removes nodes and Karpeneter re-launches the same instance type over and over again.\n\nKarpenter doesn't recommend reacting to spot rebalance recommendations when running Karpenter with spot nodes; however, if you absolutely require this functionality, note that the above scenario is possible.\nSpot instances are time limited and, therefore, interruptible. When a signal is sent by AWS, it triggers actions from NTH and Karpenter, where the former signals a shutdown and the later provisions, creating a recursive situation.\nThis can be mitigated by either completely removing NTH or by setting the following values:\n\n* enableSpotInterruptionDraining: If false, do not drain nodes when the spot interruption termination notice is received. Only used in IMDS mode.\nenableSpotInterruptionDraining: false\n\n* enableRebalanceDrainin: If true, drain nodes when the rebalance recommendation notice is received. Only used in IMDS mode.\nenableRebalanceDraining: false\n\n## EC2NodeClass Validation\n\n### Force Validation Refresh\n\nIf you believe that Karpenter's EC2NodeClass validation cache is stale (e.g., after updating IAM permissions), you can force Karpenter to refresh the cache by adding any annotation on the EC2NodeClass.\n\n## Pricing\n\n### Stale pricing data on isolated subnet\n\nThe following pricing-related error occurs if you are running Karpenter in an isolated private subnet (no Internet egress via IGW or NAT gateways):\n\n```text\nERROR   controller.aws.pricing  updating on-demand pricing, RequestError: send request failed\ncaused by: Post \"https://api.pricing.us-east-1.amazonaws.com/\": dial tcp 52.94.231.236:443: i/o timeout; RequestError: send request failed\ncaused 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\"}\n```\n\nThis 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).\nTo 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.\nTo disable pricing lookups and avoid the error messages, set the `AWS_ISOLATED_VPC` environment variable (or the `--aws-isolated-vpc` option) to true.\nSee [Environment Variables / CLI Flags]({{<ref \"./reference/settings#environment-variables--cli-flags\" >}}) for details.\n"
  },
  {
    "path": "website/content/en/v1.9/upgrading/_index.md",
    "content": "---\ntitle: \"Upgrading\"\nlinkTitle: \"Upgrading\"\nweight: 30\ndescription: >\n  Upgrading Karpenter guide and reference\ncascade:\n  type: docs\n---\n\n"
  },
  {
    "path": "website/content/en/v1.9/upgrading/compatibility.md",
    "content": "---\ntitle: \"Compatibility\"\nlinkTitle: \"Compatibility\"\nweight: 20\ndescription: >\n  Compatibility issues for Karpenter\n---\n\n# Compatibility\n\nTo make upgrading easier we aim to minimize the introduction of breaking changes.\nBefore you begin upgrading Karpenter, consider Karpenter compatibility issues related to Kubernetes and the NodePool API (previously Provisioner).\n\n## Compatibility Matrix\n\n[comment]: <> (the content below is generated from hack/docs/compatibilitymatrix_gen/main.go)\n\n| KUBERNETES |   1.29   |   1.30   |   1.31    |  1.32   |  1.33   |  1.34   | 1.35  |\n|------------|----------|----------|-----------|---------|---------|---------|-------|\n| karpenter  | \\>= 0.34 | \\>= 0.37 | \\>= 1.0.5 | \\>= 1.2 | \\>= 1.5 | \\>= 1.6 | 1.9.x |\n\n[comment]: <> (end docs generated content from hack/docs/compatibilitymatrix_gen/main.go)\n\n## Compatibility issues\n\nWhen we introduce a breaking change, we do so only as described in this document.\n\nKarpenter follows [Semantic Versioning 2.0.0](https://semver.org/) in its stable release versions, while in\nmajor version zero (`0.y.z`) [anything may change at any time](https://semver.org/#spec-item-4).\nHowever, to further protect users during this phase we will only introduce breaking changes in minor releases (releases that increment y in x.y.z).\nNote this does not mean every minor upgrade has a breaking change as we will also increment the\nminor version when we release a new feature.\n\nUsers should therefore check to see if there is a breaking change every time they are upgrading to a new minor version.\n\n### How Do We Break Incompatibility?\n\nWhen there is a breaking change we will:\n\n* Increment the minor version when in major version 0\n* Add a permanent separate section named `upgrading to x.y.z+` under [release upgrade notes](#release-upgrade-notes)\n  clearly explaining the breaking change and what needs to be done on the user side to ensure a safe upgrade\n* 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\n\n### How Do We Find Incompatibilities?\n\nBesides the peer review process for all changes to the code base we also do the followings in order to find\nincompatibilities:\n* (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\n* (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\n\n### Security Patches\n\nWhile we are in major version 0 we will not release security patches to older versions.\nRather we provide the patches in the latest versions.\nWhen at major version 1 we will have an EOL (end of life) policy where we provide security patches\nfor a subset of older versions and deprecate the others.\n\n## Release Types\n\nKarpenter offers three types of releases. This section explains the purpose of each release type and how the images for each release type are tagged in our [public image repository](https://gallery.ecr.aws/karpenter).\n\n### Stable Releases\n\nStable releases are the only recommended versions for production environments. Stable releases are tagged with a semantic version (e.g. `0.35.0`). Note that stable releases prior to `0.35.0` are prefixed with a `v` (e.g. `v0.34.0`).\n\n### Release Candidates\n\nWe consider having release candidates for major and important minor versions. Our release candidates are tagged like `x.y.z-rc.0`, `x.y.z-rc.1`. The release candidate will then graduate to `x.y.z` as a stable release.\nBy 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.\nNote that, like the stable releases, release candidates prior to `0.35.0` are prefixed with a `v`.\n\n### Snapshot Releases\n\nWe release a snapshot release for every commit that gets merged into [`aws/karpenter-provider-aws`](https://www.github.com/aws/karpenter-provider-aws). This enables users to immediately try a new feature or fix right after it's merged rather than waiting days or weeks for release.\n\nSnapshot releases are not made available in the same public ECR repository as other release types, they are instead published to a separate private ECR repository.\nHelm charts are published to `oci://{{< param \"snapshot_repo.account_id\" >}}.dkr.ecr.{{< param \"snapshot_repo.region\" >}}.amazonaws.com/karpenter/snapshot/karpenter` and are tagged with the git commit hash prefixed by the Karpenter major version (e.g. `0-fc17bfc89ebb30a3b102a86012b3e3992ec08adf`).\nAnyone with an AWS account can pull from this repository, but must first authenticate:\n\n```bash\naws ecr get-login-password --region {{< param \"snapshot_repo.region\" >}} | docker login --username AWS --password-stdin {{< param \"snapshot_repo.account_id\" >}}.dkr.ecr.{{< param \"snapshot_repo.region\" >}}.amazonaws.com\n```\n\n{{% alert title=\"Note\" color=\"warning\" %}}\nSnapshot releases are suitable for testing, and troubleshooting but they should not be used in production environments. Snapshot releases are ephemeral and will be removed 90 days after they were published.\n{{% /alert %}}\n"
  },
  {
    "path": "website/content/en/v1.9/upgrading/upgrade-guide.md",
    "content": "---\ntitle: \"Upgrade Guide\"\nlinkTitle: \"Upgrade Guide\"\nweight: 10\ndescription: >\n  Learn about upgrading Karpenter\n---\n\nKarpenter is a controller that runs in your cluster, but it is not tied to a specific Kubernetes version, as the Cluster Autoscaler is.\nUse your existing upgrade mechanisms to upgrade your core add-ons in Kubernetes and keep Karpenter up to date on bug fixes and new features.\nThis guide contains information needed to upgrade to the latest release of Karpenter, along with compatibility issues you need to be aware of when upgrading from earlier Karpenter versions.\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nWith the release of Karpenter v1.0.0, the Karpenter team has dropped support for karpenter versions v0.36 and below. We recommend upgrading to the latest version of Karpenter and keeping Karpenter up-to-date for bug fixes and new features.\n{{% /alert %}}\n\nWhen upgrading Karpenter in production environments, implementing a robust CI/CD pipeline approach is crucial. Improper upgrades can lead to significant disruptions including failed node provisioning, orphaned nodes, interrupted workloads, and potential cost implications from unmanaged scaling. Given Karpenter's critical role in cluster scaling and workload management, untested upgrades could result in production outages or resource allocation issues that directly impact application availability and performance. Therefore, we recommend following these structured steps:\n\n#### Pre-upgrade Validation\n\n- Validate all required IAM permissions (node role, controller role)\n- Check webhook configurations\n- Back up existing NodePool and NodeClass configurations\n- Document current version and settings\n\n#### Staging Environment Setup\n\n- Create or verify staging environment\n- Update version tags in Helm values or manifests\n- Configure automated validation tests\n\n#### Staging Deployment\n\n- Deploy to staging environment\n- Run comprehensive tests including node provisioning\n- Verify controller health\n- Test NodePool and NodeClass functionality\n- Monitor system behavior\n\n#### Production Approval and Deployment\n\n- Require manual approval/review\n- Schedule maintenance window if needed\n- Execute production deployment\n- Monitor deployment progress\n- Verify all components are functioning\n\n#### Post-Deployment\n\n- Monitor system health\n- Verify node provisioning\n- Keep rollback configurations accessible\n- Update documentation\n\nHere are few recommended CI/CD Pipeline Options:\n\n- GitHub Actions - Excellent for GitHub-hosted repositories with built-in Kubernetes support\n- GitLab CI - Strong container-native pipeline with integrated Kubernetes functionality\n- ArgoCD - Specialized for GitOps workflows with Kubernetes\n- AWS CodePipeline - Native integration with EKS and AWS services\n- Flux - Open-source GitOps tool for Kubernetes with automatic deployment capabilities\n\nEach pipeline tool can be configured to handle the Karpenter upgrade workflow, but choose based on your existing infrastructure, team expertise, and specific requirements for automation and integration.\n\n\n### CRD Upgrades\n\nKarpenter ships with a few Custom Resource Definitions (CRDs). These CRDs are published:\n* 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:\n  ```bash\n  KARPENTER_NAMESPACE=kube-system\n  helm upgrade --install karpenter-crd oci://public.ecr.aws/karpenter/karpenter-crd --version x.y.z --namespace \"${KARPENTER_NAMESPACE}\" --create-namespace\n  ```\n* As part of the helm chart [karpenter](https://gallery.ecr.aws/karpenter/karpenter) ([source](https://github.com/aws/karpenter/blob/main/charts/karpenter/crds)).\n  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.\n  Subsequent chart upgrades will not add or remove CRDs, even if the CRDs have changed.\n\nCRDs are coupled to the version of Karpenter, and should be updated along with Karpenter.\nFor this reason, we recommend using the independent `karpenter-crd` chart to manage CRDs.\n\n{{% alert title=\"Note\" color=\"warning\" %}}\nIf you get the error `invalid ownership metadata; label validation error:` while installing the `karpenter-crd` chart from an older version of Karpenter, follow the [Troubleshooting Guide]({{<ref \"../troubleshooting/#helm-error-when-installing-the-karpenter-crd-chart\" >}}) for details on how to resolve these errors.\n{{% /alert %}}\n\n<!--\nWHEN CREATING A NEW SECTION OF THE UPGRADE GUIDANCE FOR NEWER VERSIONS, ENSURE THAT YOU COPY THE BETA API ALERT SECTION FROM THE LAST RELEASE TO PROPERLY WARN USERS OF THE RISK OF UPGRADING WITHOUT GOING TO 0.32.x FIRST\n-->\n\n### Upgrading to `1.9.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter `1.1.0` drops the support for `v1beta1` APIs.\n**Do not** upgrade to `1.1.0`+ without following the [Migration Guide]({{<ref \"../../v1.0/upgrading/v1-migration.md#before-upgrading-to-v110\">}}).\n{{% /alert %}}\n\n* The IAM policy in the getting started guide's cloudformation template has been split into 5 policies (addresses\n  [aws/karpenter-provider-aws#7874](https://github.com/aws/karpenter-provider-aws/issues/7874)). If you've taken a\n  dependency on the policy created by this cloudformation template, you will need to update your IAM role to attach all\n  5 policies. There has not been any change to the permissions granted by the policies since 1.8.\n\nFull Changelog:\n* https://github.com/aws/karpenter-provider-aws/releases/tag/v1.9.0\n* https://github.com/kubernetes-sigs/karpenter/releases/tag/v1.9.0\n\n\n### Upgrading to `1.8.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter `1.1.0` drops the support for `v1beta1` APIs.\n**Do not** upgrade to `1.1.0`+ without following the [Migration Guide]({{<ref \"../../v1.0/upgrading/v1-migration.md#before-upgrading-to-v110\">}}).\n\nKarpenter `v1.8.4` release contains a regression which may prevent Karpenter from scheduling pods with specific TopologySpreadConstraint configurations. Please do not upgrade to this version. For more details, see the following issue: https://github.com/kubernetes-sigs/karpenter/issues/2785\n{{% /alert %}}\n\n* This version adds support for [Static Capacity](https://github.com/kubernetes-sigs/karpenter/pull/2521). Make sure to upgrade your karpenter CRDs to use this feature.\n\nFull Changelog:\n* https://github.com/aws/karpenter-provider-aws/releases/tag/v1.8.0\n* https://github.com/kubernetes-sigs/karpenter/releases/tag/v1.8.0\n\n### Upgrading to `1.7.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter `1.1.0` drops the support for `v1beta1` APIs.\n**Do not** upgrade to `1.1.0`+ without following the [Migration Guide]({{<ref \"../../v1.0/upgrading/v1-migration.md#before-upgrading-to-v110\">}}).\n{{% /alert %}}\n\n* Instance profile path changes:\n  - Karpenter now creates instance profiles with a specific path structure `/karpenter/{region}/{cluster-name}/{nodeclass-uid}/` instead of the generic root path `/`\n  - This change helps with better organization and management of instance profiles\n  - No action is required for existing instance profiles, but new ones will use this path structure\n  - Additional IAM permissions required:\n    - The following new IAM permissions are required for the Karpenter controller role:\n      - `iam:ListInstanceProfiles`: Required for managing instance profiles\n* The `karpenter_pods_pods_drained_total` metric has been renamed to `karpenter_pods_drained_total`\n* The `karpenter_nodeclaims_disrupted_total` metric reason `liveness` has been renamed to `registration_timeout`\n* Pods with `ResourceClaim` requests are explicitly ignored. Older revisions of Karpenter are not aware of the field and would ignore those requests. DRA is not currently supported by Karpenter.\n\nFull Changelog:\n* https://github.com/aws/karpenter-provider-aws/releases/tag/v1.7.0\n* https://github.com/kubernetes-sigs/karpenter/releases/tag/v1.7.0\n\n### Upgrading to `1.6.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter `1.1.0` drops the support for `v1beta1` APIs.\n**Do not** upgrade to `1.1.0`+ without following the [Migration Guide]({{<ref \"../../v1.0/upgrading/v1-migration.md#before-upgrading-to-v110\">}}).\n{{% /alert %}}\n\n* Native ODCR support has graduated to beta and is enabled by default.\n  If you were previously using open ODCRs with Karpenter and have not already migrated to native ODCR support, review the [native ODCR support guide]({{< relref \"../tasks/odcrs\" >}}) before upgrading.\n* Support a new configuration option `MinValuesPolicy` which controls how the Karpenter scheduler treats min values. Options include 'Strict' (fails scheduling when min values can't be met) and 'BestEffort' (relaxes min values when they can't be met). Default is 'Strict' to preserve existing behavior.\n* Support a new configuration option `DisableDryRun` which disables the dry run calls made during EC2NodeClass validation (1.6.2+).\n\nFull Changelog:\n* https://github.com/aws/karpenter-provider-aws/releases/tag/v1.6.0\n* https://github.com/kubernetes-sigs/karpenter/releases/tag/v1.6.0\n\n### Upgrading to `1.5.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter `1.1.0` drops the support for `v1beta1` APIs.\n**Do not** upgrade to `1.1.0`+ without following the [Migration Guide]({{<ref \"../../v1.0/upgrading/v1-migration.md#before-upgrading-to-v110\">}}).\n{{% /alert %}}\n\n* No breaking changes 🎉\n\nFull Changelog:\n* https://github.com/aws/karpenter-provider-aws/releases/tag/v1.5.0\n* https://github.com/kubernetes-sigs/karpenter/releases/tag/v1.5.0\n\n### Upgrading to `1.4.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter `1.1.0` drops the support for `v1beta1` APIs.\n**Do not** upgrade to `1.1.0`+ without following the [Migration Guide]({{<ref \"../../v1.0/upgrading/v1-migration.md#before-upgrading-to-v110\">}}).\n{{% /alert %}}\n\n* No breaking changes 🎉\n\nFull Changelog:\n* https://github.com/aws/karpenter-provider-aws/releases/tag/v1.4.0\n* https://github.com/kubernetes-sigs/karpenter/releases/tag/v1.4.0\n\n### Upgrading to `1.3.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter `1.1.0` drops the support for `v1beta1` APIs.\n**Do not** upgrade to `1.1.0`+ without following the [Migration Guide]({{<ref \"../../v1.0/upgrading/v1-migration.md#before-upgrading-to-v110\">}}).\n{{% /alert %}}\n\n* `karpenter_ignored_pod_count` alpha metric had its name changed to `karpenter_scheduler_ignored_pod_count`\n* With the `ReservedCapacity` feature flag, Karpenter introduces a new `karpenter.sh/capacity-type` value (`reserved`). This means any applications that explicitly select on `on-demand` with a `nodeSelector` and want to utilize ODCR capacity may need to update their requirements to use `nodeAffinity` to opt-in to using both `reserved` and `on-demand` capacity.\n\n### Upgrading to `1.2.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter `1.1.0` drops the support for `v1beta1` APIs.\n**Do not** upgrade to `1.1.0`+ without following the [Migration Guide]({{<ref \"../../v1.0/upgrading/v1-migration.md#before-upgrading-to-v110\">}}).\n{{% /alert %}}\n\n* We have recently updated our labels on `karpenter_voluntary_disruption_queue_failures_total` and `karpenter_nodeclaims_disrupted_total` reason label from camille case to snake case. Therefore these reason labels values on those metrics have now been update as such:\n  - Drifted -> drifted\n  - Empty -> empty\n  - Expired -> expired\n  - Underutilized -> underutilized\n* Nodeclass status and termination controllers have been merged into a single `nodeclass` controller. If you are relying on logs or metrics for `nodeclass.termination` or `nodeclass.status` controllers, please make sure that you update them to reference the new `nodeclass` controller.\n\n### Upgrading to `1.1.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter `1.1.0` drops the support for `v1beta1` APIs.\n**Do not** upgrade to `1.1.0`+ without following the [Migration Guide]({{<ref \"../../v1.0/upgrading/v1-migration.md#before-upgrading-to-v110\">}}).\n{{% /alert %}}\n\n* Support for the `v1beta1` compatiblity annotations have been dropped. Ensure you have completed migration before upgrading to `v1.1.0`. Refer to the [migration guide]({{<ref \"../../v1.0/upgrading/v1-migration.md#kubelet-configuration-migration\">}}) for more details.\n* `nodeClassRef.group` and `nodeClassRef.kind` are strictly required. Ensure these values are set for all `NodePools` / `NodeClaims` before upgrading.\n* Bottlerocket AMIFamily now supports `instanceStorePolicy: RAID0`. This means that Karpenter will auto-generate userData to RAID0 your instance store volumes (similar to AL2 and AL2023) when specifying this value.\n  * Note: This userData configuration is _only_ valid on Bottlerocket v1.22.0+. If you are using an earlier version of a Bottlerocket image (< v1.22.0) with `amiFamily: Bottlerocket` and `instanceStorePolicy: RAID0`, nodes will fail to join the cluster.\n* The AWS Neuron accelerator well known name label (`karpenter.k8s.aws/instance-accelerator-name`) values now reflect their correct names of `trainium`, `inferentia`, and `inferentia2`. Previously, all Neuron accelerators were assigned the label name of `inferentia`.\n* Karpenter drops the internal `karpenter.k8s.aws/cluster` tag used for launch template management in favor of `eks:eks-cluster-name` and consistency with other Karpenter-provisioned resources\n* Generic operator metrics have been have been deprecated and replaced by resource-specific metrics.\n\n### Upgrading to `1.0.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter `1.0.0` introduces the `v1` APIs and uses [conversion webhooks](https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definition-versioning/#webhook-conversion) to support existing `v1beta1` APIs.\n**Do not** upgrade to `1.0.0`+ without following the [`v1` Migration Guide]({{<ref \"../../v1.0/upgrading/v1-migration.md\">}}).\n{{% /alert %}}\n\nRefer to the `v1` Migration Guide for the [full changelog]({{<ref \"../../v1.0/upgrading/v1-migration.md#changelog\">}}).\n\n### Upgrading to `0.37.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\n`0.33.0`+ _only_ supports Karpenter v1beta1 APIs and will not work with existing Provisioner, AWSNodeTemplate or Machine alpha APIs. Do not upgrade to `0.37.0`+ without first [upgrading to `0.32.x`]({{<ref \"#upgrading-to-0320\" >}}). This version supports both the alpha and beta APIs, allowing you to migrate all of your existing APIs to beta APIs without experiencing downtime.\n{{% /alert %}}\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nWebhooks have been re-enabled by default starting in `0.37.3` to faciliate migration to `v1.0`.\nIf your cluster has network policies that block Ingress then ports `8000`, `8001`, `8081`, `8443` will need to be allowlisted.\nYou may still choose to disable webhooks through the helm chart.\n{{% /alert %}}\n\n\n* Karpenter now adds a readiness status condition to the EC2NodeClass. Make sure to upgrade your Custom Resource Definitions before proceeding with the upgrade. Failure to do so will result in Karpenter being unable to provision new nodes.\n* Karpenter no longer updates the logger name when creating controller loggers. We now adhere to the controller-runtime standard, where the logger name will be set as `\"logger\": \"controller\"` always and the controller name will be stored in the structured value `\"controller\"`\n* Karpenter updated the NodeClass controller naming in the following way: `nodeclass` -> `nodeclass.status`, `nodeclass.hash`, `nodeclass.termination`\n* Karpenter's NodeClaim status conditions no longer include the `severity` field\n\n### Upgrading to `0.36.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\n`0.33.0`+ _only_ supports Karpenter v1beta1 APIs and will not work with existing Provisioner, AWSNodeTemplate or Machine alpha APIs. Do not upgrade to `0.36.0`+ without first [upgrading to `0.32.x`]({{<ref \"#upgrading-to-0320\" >}}). This version supports both the alpha and beta APIs, allowing you to migrate all of your existing APIs to beta APIs without experiencing downtime.\n{{% /alert %}}\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nv0.36.x introduces update to drift that restricts rollback. When rolling back from >=v0.36.0, note that v0.32.9+, v0.33.4+, v0.34.5+, v0.35.4+ are the patch versions that support rollback. If Karpenter is rolled back to an older patch version, Karpenter can potentially drift all the nodes in the cluster.\n{{% /alert %}}\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nWebhooks have been re-enabled by default starting in `0.36.5` to faciliate migration to `v1.0`.\nIf your cluster has network policies that block Ingress then ports `8000`, `8001`, `8081`, `8443` will need to be allowlisted.\nYou may still choose to disable webhooks through the helm chart.\n{{% /alert %}}\n\n* Karpenter changed the name of the `karpenter_cloudprovider_instance_type_price_estimate` metric to `karpenter_cloudprovider_instance_type_offering_price_estimate` to align with the new `karpenter_cloudprovider_instance_type_offering_available` metric. The `region` label was also dropped from the metric, since this can be inferred from the environment that Karpenter is running in.\n\n### Upgrading to `0.35.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\n`0.33.0`+ _only_ supports Karpenter v1beta1 APIs and will not work with existing Provisioner, AWSNodeTemplate or Machine alpha APIs. Do not upgrade to `0.35.0`+ without first [upgrading to `0.32.x`]({{<ref \"#upgrading-to-0320\" >}}). This version supports both the alpha and beta APIs, allowing you to migrate all of your existing APIs to beta APIs without experiencing downtime.\n{{% /alert %}}\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nWebhooks have been re-enabled by default starting in `0.35.8` to faciliate migration to `v1.0`.\nIf your cluster has network policies that block Ingress then ports `8000`, `8001`, `8081`, `8443` will need to be allowlisted.\nYou may still choose to disable webhooks through the helm chart.\n{{% /alert %}}\n\n* Karpenter OCI tags and Helm chart version are now valid semantic versions, meaning that the `v` prefix from the git tag has been removed and they now follow the `x.y.z` pattern.\n\n### Upgrading to `0.34.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\n`0.33.0`+ _only_ supports Karpenter v1beta1 APIs and will not work with existing Provisioner, AWSNodeTemplate or Machine alpha APIs. Do not upgrade to `0.34.0`+ without first [upgrading to `0.32.x`]({{<ref \"#upgrading-to-0320\" >}}). This version supports both the alpha and beta APIs, allowing you to migrate all of your existing APIs to beta APIs without experiencing downtime.\n{{% /alert %}}\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nThe Ubuntu EKS optimized AMI has moved from 20.04 to 22.04 for Kubernetes 1.29+. This new AMI version is __not currently__ supported for users relying on AMI auto-discovery with the Ubuntu AMI family. More details can be found in this [GitHub issue](https://github.com/aws/karpenter-provider-aws/issues/5572). Please review this issue before upgrading to Kubernetes 1.29 if you are using the Ubuntu AMI family. Upgrading to 1.29 without making any changes to your EC2NodeClass will result in Karpenter being unable to create new nodes.\n{{% /alert %}}\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nWebhooks have been re-enabled by default starting in `0.34.9` to faciliate migration to `v1.0`.\nIf your cluster has network policies that block Ingress then ports `8000`, `8001`, `8081`, `8443` will need to be allowlisted.\nYou may still choose to disable webhooks through the helm chart.\n{{% /alert %}}\n\n* Karpenter now supports `nodepool.spec.disruption.budgets`, which allows users to control the speed of disruption in the cluster. Since this requires an update to the Custom Resource, before upgrading, you should re-apply the new updates to the CRDs. Check out [Disruption Budgets]({{<ref \"../concepts/disruption#disruption-budgets\" >}}) for more.\n* With Disruption Budgets, Karpenter will disrupt multiple batches of nodes simultaneously, which can result in overall quicker scale-down of your cluster. Before `0.34.0`, Karpenter had a hard-coded parallelism limit for each type of disruption. In `0.34.0`+, Karpenter will now disrupt at most 10% of nodes for a given NodePool. There is no setting that will be perfectly equivalent with the behavior prior to `0.34.0`. When considering how to configure your budgets, please refer to the following limits for versions prior to `0.34.0`:\n  * `Empty Expiration / Empty Drift / Empty Consolidation`: infinite parallelism\n  * `Non-Empty Expiration / Non-Empty Drift / Single-Node Consolidation`: one node at a time\n  * `Multi-Node Consolidation`: max 100 nodes\n* To support Disruption Budgets, `0.34.0`+ includes critical changes to Karpenter's core controllers, which allows Karpenter to consider multiple batches of disrupting nodes simultaneously. This increases Karpenter's performance with the potential downside of higher CPU and memory utilization from the Karpenter pod. While the magnitude of this difference varies on a case-by-case basis, when upgrading to Karpenter `0.34.0`+, please note that you may need to increase the resources allocated to the Karpenter controller pods.\n* Karpenter now adds a default `podSecurityContext` that configures the `fsgroup: 65536` of volumes in the pod. If you are using sidecar containers, you should review if this configuration is compatible for them. You can disable this default `podSecurityContext` through helm by performing `--set podSecurityContext=null` when installing/upgrading the chart.\n* The `dnsPolicy` for the Karpenter controller pod has been changed back to the Kubernetes cluster default of `ClusterFirst`. Setting our `dnsPolicy` to `Default` (confusingly, this is not the Kubernetes cluster default) caused more confusion for any users running IPv6 clusters with dual-stack nodes or anyone running Karpenter with dependencies on cluster services (like clusters running service meshes). This change may be breaking for any users on Fargate or MNG who were allowing Karpenter to manage their in-cluster DNS service (`core-dns` on most clusters). If you still want the old behavior here, you can change the `dnsPolicy` to point to use `Default` by setting the helm value on install/upgrade with `--set dnsPolicy=Default`. More details on this issue can be found in the following Github issues: [#2186](https://github.com/aws/karpenter-provider-aws/issues/2186) and [#4947](https://github.com/aws/karpenter-provider-aws/issues/4947).\n* Karpenter now disallows `nodepool.spec.template.spec.resources` to be set. The webhook validation never allowed `nodepool.spec.template.spec.resources`. We are now ensuring that CEL validation also disallows `nodepool.spec.template.spec.resources` to be set. If you were previously setting the resources field on your NodePool, ensure that you remove this field before upgrading to the newest version of Karpenter or else updates to the resource may fail on the new version.\n\n### Upgrading to `0.33.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\n`0.33.0`+ _only_ supports Karpenter v1beta1 APIs and will not work with existing Provisioner, AWSNodeTemplate or Machine alpha APIs. **Do not** upgrade to `0.33.0`+ without first [upgrading to `0.32.x`]({{<ref \"#upgrading-to-0320\" >}}). This version supports both the alpha and beta APIs, allowing you to migrate all of your existing APIs to beta APIs without experiencing downtime.\n{{% /alert %}}\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nWebhooks have been re-enabled by default starting in `0.33.8` to faciliate migration to `v1.0`.\nIf your cluster has network policies that block Ingress then ports `8000`, `8001`, `8081`, `8443` will need to be allowlisted.\nYou may still choose to disable webhooks through the helm chart.\n{{% /alert %}}\n\n* Karpenter no longer supports using the `karpenter.sh/provisioner-name` label in NodePool labels and requirements or in application node selectors, affinities, or topologySpreadConstraints. If you were previously using this label to target applications to specific Provisioners, you should update your applications to use the `karpenter.sh/nodepool` label instead before upgrading. If you upgrade without changing these labels, you may begin to see pod scheduling failures for these applications.\n* Karpenter now tags `spot-instances-request` with the same tags that it tags instances, volumes, and primary ENIs. This means that you will now need to add `ec2:CreateTags` permission for `spot-instances-request`. You can also further scope your controller policy for the `ec2:RunInstances` action to require that it launches the `spot-instances-request` with these specific tags. You can view an example of scoping these actions in the [Getting Started Guide's default CloudFormation controller policy](https://github.com/aws/karpenter/blob/v0.33.0/website/content/en/preview/getting-started/getting-started-with-karpenter/cloudformation.yaml#L61).\n* We now recommend that you set the installation namespace for your Karpenter controllers to `kube-system` to denote Karpenter as a critical cluster component. This ensures that requests from the Karpenter controllers are treated with higher priority by assigning them to a different [PriorityLevelConfiguration](https://kubernetes.io/docs/concepts/cluster-administration/flow-control/#prioritylevelconfiguration) than generic requests from other namespaces. For more details on API Priority and Fairness, read the [Kubernetes API Priority and Fairness Conceptual Docs](https://kubernetes.io/docs/concepts/cluster-administration/flow-control/). Note: Changing the namespace for your Karpenter release will cause the service account namespace to change. If you are using IRSA for authentication with AWS, you will need to change scoping set in the controller's trust policy from `karpenter:karpenter` to `kube-system:karpenter`.\n* ~~`0.33.0` disables mutating and validating webhooks by default in favor of using [Common Expression Language for CRD validation](https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/#validation). The Common Expression Language Validation Feature [is enabled by default on EKS 1.25](https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/#validation-rules). If you are using Kubernetes version >= 1.25, no further action is required. If you are using a Kubernetes version below 1.25, you now need to set `DISABLE_WEBHOOK=false` in your container environment variables or `--set webhook.enabled=true` if using Helm. View the [Webhook Support Deprecated in Favor of CEL Section of the v1beta1 Migration Guide]({{<ref \"../../v1.0/upgrading/v1beta1-migration#webhook-support-deprecated-in-favor-of-cel\" >}}).~~\n* `0.33.0` drops support for passing settings through the `karpenter-global-settings` ConfigMap. You should pass settings through the container environment variables in the Karpenter deployment manifest. View the [Global Settings Section of the v1beta1 Migration Guide]({{<ref \"../../v1.0/upgrading/v1beta1-migration#global-settings\" >}}) for more details.\n* `0.33.0` enables `Drift=true` by default in the `FEATURE_GATES`. If you previously didn't enable the feature gate, Karpenter will now check if there is a difference between the desired state of your nodes declared in your NodePool and the actual state of your nodes. View the [Drift Section of Disruption Conceptual Docs]({{<ref \"../concepts/disruption#drift\" >}}) for more details.\n* `0.33.0` drops looking up the `zap-logger-config` through ConfigMap discovery. Instead, Karpenter now expects the logging config to be mounted on the filesystem if you are using this to configure Zap logging. This is not enabled by default, but can be enabled through `--set logConfig.enabled=true` in the Helm values. If you are setting any values in the `logConfig` from the `0.32.x` upgrade, such as `logConfig.logEncoding`, note that you will have to explicitly set `logConfig.enabled=true` alongside it. Also, note that setting the Zap logging config is a deprecated feature in beta and is planned to be dropped at v1. View the [Logging Configuration Section of the v1beta1 Migration Guide]({{<ref \"../../v1.0/upgrading/v1beta1-migration#logging-configuration-is-no-longer-dynamic\" >}}) for more details.\n* `0.33.0` change the default `LOG_LEVEL` from `debug` to `info` by default. If you are still enabling logging configuration through the `zap-logger-config`, no action is required.\n* `0.33.0` drops support for comma delimited lists on tags for `SubnetSelectorTerm`, `SecurityGroupsSelectorTerm`, and `AMISelectorTerm`. Karpenter now supports multiple terms for each of the selectors which means that we can specify a more explicit OR-based constraint through separate terms rather than a comma-delimited list of values.\n\n### Upgrading to `0.32.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter `0.32.0` introduces v1beta1 APIs, including _significant_ changes to the API and installation procedures for the Karpenter controllers. **Do not** upgrade to `0.32.0`+ without referencing the [v1beta1 Migration Upgrade Procedure]({{<ref \"../../v1.0/upgrading/v1beta1-migration#upgrade-procedure\" >}}).\n\nThis version includes **dual support** for both alpha and beta APIs to ensure that you can slowly migrate your existing Provisioner, AWSNodeTemplate, and Machine alpha APIs to the newer NodePool, EC2NodeClass, and NodeClaim beta APIs.\n\nNote that if you are rolling back after upgrading to `0.32.0`, note that __only__ versions `0.31.4` support handling rollback after you have deployed the v1beta1 APIs to your cluster.\n{{% /alert %}}\n\n* Karpenter now uses `settings.InterruptionQueue` instead of `settings.aws.InterruptionQueueName` in its helm chart. The CLI argument also changed to `--interruption-queue`.\n* Karpenter now serves the webhook prometheus metrics server on port `8001`. If this port is already in-use on the pod or you are running in `hostNetworking` mode, you may need to change this port value. You can configure this port value through the `WEBHOOK_METRICS_PORT` environment variable or the `webhook.metrics.port` value if installing via Helm.\n* Karpenter now exposes the ability to disable webhooks through the `webhook.enabled=false` value. This value will disable the webhook server and will prevent any permissions, mutating or validating webhook configurations from being deployed to the cluster.\n* Karpenter now moves all logging configuration for the Zap logger into the `logConfig` values block. Configuring Karpenter logging with this mechanism _is_ deprecated and will be dropped at v1. Karpenter now only surfaces logLevel through the `logLevel` helm value. If you need more advanced configuration due to log parsing constraints, we recommend configuring your log parser to handle Karpenter's Zap JSON logging.\n* The default log encoding changed from `console` to `json`. If you were previously not setting the type of log encoding, this default will change with the Helm chart. If you were setting the value through `logEncoding`, this value will continue to work until `0.33.x` but it is deprecated in favor of `logConfig.logEncoding`\n* Karpenter now uses the `karpenter.sh/disruption:NoSchedule=disrupting` taint instead of the upstream `node.kubernetes.io/unschedulable` taint for nodes spawned with a NodePool to prevent pods from scheduling to nodes being disrupted. Pods that previously tolerated the `node.kubernetes.io/unschedulable` taint that previously weren't evicted during termination will now be evicted. This most notably affects DaemonSets, which have the `node.kubernetes.io/unschedulable` toleration by default, where Karpenter will now remove these pods during termination. If you want your specific pods to not be evicted when nodes are scaled down, you should add a toleration to the pods with the following: `Key=karpenter.sh/disruption, Effect=NoSchedule, Operator=Equals, Values=disrupting`.\n  * Note: Karpenter will continue to use the old `node.kubernetes.io/unschedulable` taint for nodes spawned with a Provisioner.\n\n### Upgrading to `0.31.0`+\n\n* Karpenter moved its `securityContext` constraints from pod-wide to only applying to the Karpenter container exclusively. If you were previously relying on the pod-wide `securityContext` for your sidecar containers, you will now need to set these values explicitly in your sidecar container configuration.\n\n### Upgrading to `0.30.0`+\n\n* Karpenter will now [statically drift]({{<ref \"../concepts/disruption#drift\" >}}) on both Provisioner and AWSNodeTemplate Fields. For Provisioner Static Drift, the `karpenter.sh/provisioner-hash` annotation must be present on both the Provisioner and Machine. For AWSNodeTemplate drift, the `karpenter.k8s.aws/nodetemplate-hash` annotation must be present on the AWSNodeTemplate and Machine. Karpenter will not add these annotations to pre-existing nodes, so each of these nodes will need to be recycled one time for the annotations to be added.\n* Karpenter will now fail validation on AWSNodeTemplates and Provisioner `spec.provider` that have `amiSelectors`, `subnetSelectors`, or `securityGroupSelectors` set with a combination of id selectors (`aws-ids`, `aws::ids`) and other selectors.\n* Karpenter now statically sets the `securityContext` at both the pod and container-levels and doesn't allow override values to be passed through the Helm chart. This change was made to adhere to [Restricted Pod Security Standard](https://kubernetes.io/docs/concepts/security/pod-security-standards/#restricted), which follows pod hardening best practices.\n\n{{% alert title=\"Note\" color=\"primary\" %}}\nIf you have sidecar containers configured to run alongside Karpenter that cannot tolerate the [pod-wide `securityContext` constraints](https://github.com/aws/karpenter/blob/v0.30.0/charts/karpenter/templates/deployment.yaml#L40), you will need to specify overrides to the sidecar `securityContext` in your deployment.\n{{% /alert %}}\n\n### Upgrading to `0.29.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter `0.29.1` contains a [file descriptor and memory leak bug](https://github.com/aws/karpenter/issues/4296) that leads to Karpenter getting OOMKilled and restarting at the point that it hits its memory or file descriptor limit. Karpenter `0.29.2`+ fixes this leak.\n{{% /alert %}}\n\n* Karpenter has changed the default metrics service port from 8080 to 8000 and the default webhook service port from 443 to 8443. In `0.28.0`, the Karpenter pod port was changed to 8000, but referenced the service by name, allowing users to scrape the service at port 8080 for metrics. `0.29.0` aligns the two ports so that service and pod metrics ports are the same. These ports are set by the `controller.metrics.port` and `webhook.port` Helm chart values, so if you have previously set these to non-default values, you may need to update your Prometheus scraper to match these new values.\n\n* Karpenter will now reconcile nodes that are drifted due to their Security Groups or their Subnets. If your AWSNodeTemplate's Security Groups differ from the Security Groups used for an instance, Karpenter will consider it drifted. If the Subnet used by an instance is not contained in the allowed list of Subnets for an AWSNodeTemplate, Karpenter will also consider it drifted.\n  * Since Karpenter uses tags for discovery of Subnets and SecurityGroups, check the [Threat Model]({{<ref \"../reference/threat-model.md#threat-using-ec2-createtagdeletetag-permissions-to-orchestrate-machine-creationdeletion\" >}}) to see how to manage this IAM Permission.\n\n### Upgrading to `0.28.0`+\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter `0.28.0` is incompatible with Kubernetes version 1.26+, which can result in additional node scale outs when using `--cloudprovider=external`, which is the default for the EKS Optimized AMI. See: https://github.com/aws/karpenter-core/pull/375. Karpenter `0.28.1`+ fixes this issue and is compatible with Kubernetes version 1.26+.\n{{% /alert %}}\n\n* The `extraObjects` value is now removed from the Helm chart. Having this value in the chart proved to not work in the majority of Karpenter installs and often led to anti-patterns, where the Karpenter resources installed to manage Karpenter's capacity were directly tied to the install of the Karpenter controller deployments. The Karpenter team recommends that, if you want to install Karpenter manifests alongside the Karpenter Helm chart, to do so by creating a separate chart for the manifests, creating a dependency on the controller chart.\n* The `aws.nodeNameConvention` setting is now removed from the [`karpenter-global-settings`]({{<ref \"../reference/settings#configmap\" >}}) ConfigMap. Because Karpenter is now driving its orchestration of capacity through Machines, it no longer needs to know the node name, making this setting obsolete. Karpenter ignores configuration that it doesn't recognize in the [`karpenter-global-settings`]({{<ref \"../reference/settings#configmap\" >}}) ConfigMap, so leaving the `aws.nodeNameConvention` in the ConfigMap will simply cause this setting to be ignored.\n* Karpenter now defines a set of \"restricted tags\" which can't be overridden with custom tagging in the AWSNodeTemplate or in the [`karpenter-global-settings`]({{<ref \"../reference/settings#configmap\" >}}) ConfigMap. If you are currently using any of these tag overrides when tagging your instances, webhook validation will now fail. These tags include:\n\n  * `karpenter.sh/managed-by`\n  * `karpenter.sh/provisioner-name`\n  * `kubernetes.io/cluster/${CLUSTER_NAME}`\n\n* The following metrics changed their meaning, based on the introduction of the Machine resource:\n  * `karpenter_nodes_terminated`: Use `karpenter_machines_terminated` if you are interested in the reason why a Karpenter machine was deleted. `karpenter_nodes_terminated` now only tracks the count of terminated nodes without any additional labels.\n  * `karpenter_nodes_created`: Use `karpenter_machines_created` if you are interested in the reason why a Karpenter machine was created. `karpenter_nodes_created` now only tracks the count of created nodes without any additional labels.\n  * `karpenter_deprovisioning_replacement_node_initialized_seconds`: This metric has been replaced in favor of `karpenter_deprovisioning_replacement_machine_initialized_seconds`.\n* `0.28.0` introduces the Machine CustomResource into the `karpenter.sh` API Group and requires this CustomResourceDefinition to run properly. Karpenter now orchestrates its CloudProvider capacity through these in-cluster Machine CustomResources. When performing a scheduling decision, Karpenter will create a Machine, resulting in launching CloudProvider capacity. The kubelet running on the new capacity will then register the node to the cluster shortly after launch.\n  * If you are using Helm to upgrade between versions of Karpenter, note that [Helm does not automate the process of upgrading or install the new CRDs into your cluster](https://helm.sh/docs/chart_best_practices/custom_resource_definitions/#some-caveats-and-explanations). To install or upgrade the existing CRDs, follow the guidance under the [Custom Resource Definition (CRD) Upgrades]({{< relref \"#custom-resource-definition-crd-upgrades\" >}}) section of the upgrade guide.\n  * Karpenter will hydrate Machines on startup for existing capacity managed by Karpenter into the cluster. Existing capacity launched by an older version of Karpenter is discovered by finding CloudProvider capacity with the `karpenter.sh/provisioner-name` tag or the `karpenter.sh/provisioner-name` label on nodes.\n* The metrics port for the Karpenter deployment was changed from 8080 to 8000. Users who scrape the pod directly for metrics rather than the service will need to adjust the commands they use to reference port 8000. Any users who scrape metrics from the service should be unaffected.\n\n{{% alert title=\"Warning\" color=\"warning\" %}}\nKarpenter creates a mapping between CloudProvider machines and CustomResources in the cluster for capacity tracking. To ensure this mapping is consistent, Karpenter utilizes the following tag keys:\n\n* `karpenter.sh/managed-by`\n* `karpenter.sh/provisioner-name`\n* `kubernetes.io/cluster/${CLUSTER_NAME}`\n\nBecause Karpenter takes this dependency, any user that has the ability to Create/Delete these tags on CloudProvider machines will have the ability to orchestrate Karpenter to Create/Delete CloudProvider machines as a side effect. Check the [Threat Model]({{<ref \"../reference/threat-model.md#threat-using-ec2-createtagdeletetag-permissions-to-orchestrate-machine-creationdeletion\" >}}) to see how this might affect you, and ways to mitigate this.\n{{% /alert %}}\n\n{{% alert title=\"Rolling Back\" color=\"warning\" %}}\nIf, after upgrading to `0.28.0`+, a rollback to an older version of Karpenter needs to be performed, Karpenter will continue to function normally, though you will still have the Machine CustomResources on your cluster. You will need to manually delete the Machines and patch out the finalizers to fully complete the rollback.\n\nKarpenter marks CloudProvider capacity as \"managed by\" a Machine using the `karpenter-sh/managed-by` tag on the CloudProvider machine. It uses this tag to ensure that the Machine CustomResources in the cluster match the CloudProvider capacity managed by Karpenter. If these states don't match, Karpenter will garbage collect the capacity. Because of this, if performing an upgrade, followed by a rollback, followed by another upgrade to `0.28.0`+, ensure you remove the `karpenter.sh/managed-by` tags from existing capacity; otherwise, Karpenter will deprovision the capacity without a Machine CR counterpart.\n{{% /alert %}}\n\n### Upgrading to `0.27.3`+\n\n* The `defaulting.webhook.karpenter.sh` mutating webhook was removed in `0.27.3`. If you are coming from an older version of Karpenter where this webhook existed and the webhook was not managed by Helm, you may need to delete the stale webhook.\n\n```bash\nkubectl delete mutatingwebhookconfigurations defaulting.webhook.karpenter.sh\n```\n\n### Upgrading to `0.27.0`+\n\n* The Karpenter controller pods now deploy with `kubernetes.io/hostname` self anti-affinity by default. If you are running Karpenter in HA (high-availability) mode and you do not have enough nodes to match the number of pod replicas you are deploying with, you will need to scale-out your nodes for Karpenter.\n* The following controller metrics changed and moved under the `controller_runtime` metrics namespace:\n  * `karpenter_metricscraper_...`\n  * `karpenter_deprovisioning_...`\n  * `karpenter_provisioner_...`\n  * `karpenter_interruption_...`\n* The following controller metric names changed, affecting the `controller` label value under `controller_runtime_...` metrics. These metrics include:\n  * `podmetrics` -> `pod_metrics`\n  * `provisionermetrics` -> `provisioner_metrics`\n  * `metricscraper` -> `metric_scraper`\n  * `provisioning` -> `provisioner_trigger`\n  * `node-state` -> `node_state`\n  * `pod-state` -> `pod_state`\n  * `provisioner-state` -> `provisioner_state`\n* The `karpenter_allocation_controller_scheduling_duration_seconds` metric name changed to `karpenter_provisioner_scheduling_duration_seconds`\n\n### Upgrading to `0.26.0`+\n\n* 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]({{<ref \"../concepts/disruption#disabling-deprovisioning\" >}}) for more details.\n* 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.\n* 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.\n\n### Upgrading to `0.25.0`+\n\n* 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.\n\n### Upgrading to `0.24.0`+\n\n* Settings are no longer updated dynamically while Karpenter is running. If you manually make a change to the [`karpenter-global-settings`]({{<ref \"../reference/settings#configmap\" >}}) ConfigMap, you will need to reload the containers by restarting the deployment with `kubectl rollout restart -n karpenter deploy/karpenter`\n* 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]({{<ref \"../concepts/scheduling#selecting-nodes\" >}}). 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.\n* `aws.tags` in [`karpenter-global-settings`]({{<ref \"../reference/settings#configmap\" >}}) 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.<key>: value` in the ConfigMap.\n\n### Upgrading to `0.22.0`+\n\n* 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.\n\n### Upgrading to `0.20.0`+\n\n* Prior to `0.20.0`, Karpenter would prioritize certain instance type categories absent of any requirements in the Provisioner. `0.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.\n\n### Upgrading to `0.19.0`+\n\n* 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.\n* 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/disruption/#interruption\" >}}).\n* 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.\n* Karpenter CRD raw YAML URLs have migrated from `https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.19.3/charts/karpenter/crds/...` to `https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.19.3/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.\n* 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.\n* The following CLI options/environment variables are now removed and replaced in favor of pulling settings dynamically from the [`karpenter-global-settings`]({{<ref \"../reference/settings#configmap\" >}}) ConfigMap. See the [Settings docs]({{<ref \"../reference/settings/#environment-variables--cli-flags\" >}}) for more details on configuring the new values in the ConfigMap.\n\n  * `CLUSTER_NAME` -> `settings.aws.clusterName`\n  * `CLUSTER_ENDPOINT` -> `settings.aws.clusterEndpoint`\n  * `AWS_DEFAULT_INSTANCE_PROFILE` -> `settings.aws.defaultInstanceProfile`\n  * `AWS_ENABLE_POD_ENI` -> `settings.aws.enablePodENI`\n  * `AWS_ENI_LIMITED_POD_DENSITY` -> `settings.aws.enableENILimitedPodDensity`\n  * `AWS_ISOLATED_VPC` -> `settings.aws.isolatedVPC`\n  * `AWS_NODE_NAME_CONVENTION` -> `settings.aws.nodeNameConvention`\n  * `VM_MEMORY_OVERHEAD` -> `settings.aws.vmMemoryOverheadPercent`\n\n### Upgrading to `0.18.0`+\n\n* `0.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]({{<ref \"../reference/metrics\" >}}).\n\n### Upgrading to `0.17.0`+\n\nKarpenter'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/).\nWith 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-karpenter/#install-karpenter-helm-chart\" >}}).\n\nUsers who have scripted the installation or upgrading of Karpenter need to adjust their scripts with the following changes:\n1. There is no longer a need to add the Karpenter Helm repo with `helm repo add`\n2. The full URL of the Helm chart needs to be present when using the `helm` CLI\n3. 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  (i.e `v0.17.0`).\n\n### Upgrading to `0.16.2`+\n\n* `0.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:\n```bash\nkubectl replace -f https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.16.2/charts/karpenter/crds/karpenter.sh_provisioners.yaml\n```\n\n### Upgrading to `0.16.0`+\n\n* `0.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:\n```bash\nkubectl replace -f https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.16.0/charts/karpenter/crds/karpenter.sh_provisioners.yaml\n```\n\n### Upgrading to `0.15.0`+\n\n* `0.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:\n```bash\nkubectl replace -f https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.15.0/charts/karpenter/crds/karpenter.sh_provisioners.yaml\n```\n\n### Upgrading to `0.14.0`+\n\n* `0.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:\n\n```bash\nkubectl replace -f https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.14.0/charts/karpenter/crds/karpenter.sh_provisioners.yaml\n\nkubectl replace -f https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.14.0/charts/karpenter/crds/karpenter.k8s.aws_awsnodetemplates.yaml\n```\n\n* `0.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:\n\n```bash\n## Find launch templates that match the naming pattern and you do not want to keep\naws ec2 describe-launch-templates --filters=\"Name=launch-template-name,Values=Karpenter-${CLUSTER_NAME}-*\"\n\n## Delete launch template(s) that match the name but do not have the \"karpenter.k8s.aws/cluster\" tag\naws ec2 delete-launch-template --launch-template-id <LAUNCH_TEMPLATE_ID>\n```\n\n* `0.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.\n```yaml\n  - key: node.kubernetes.io/instance-type\n    operator: Exists\n```\n\n* `0.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]({{<ref \"../concepts/nodepools#spec-amiselector\" >}}) to get started\n* `0.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`.\n\n* `0.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.\n\n### Upgrading to `0.13.0`+\n\n* `0.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. `0.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.\n\n  If you are upgrading from `0.10.1` - `0.11.1`, a new CRD `awsnodetemplate` was added. In `0.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:\n  1. Make sure any `awsnodetemplate` manifests are saved somewhere so that they can be reapplied to the cluster.\n  2. `kubectl delete crd awsnodetemplate`\n  3. `kubectl apply -f https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.13.2/charts/karpenter/crds/karpenter.k8s.aws_awsnodetemplates.yaml`\n  4. Perform the Karpenter upgrade to `0.13.0`+, which will install the new `awsnodetemplates` CRD.\n  5. Reapply the `awsnodetemplate` manifests you saved from step 1, if applicable.\n* `0.13.0` also adds EC2/spot price fetching to Karpenter to allow making more accurate decisions regarding node deployments.  Our [getting started guide]({{< ref \"../getting-started/getting-started-with-karpenter\" >}}) 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.\n\n### Upgrading to `0.12.0`+\n\n* `0.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.\n* If you are upgrading from `0.10.1` - `0.11.1`, a new CRD `awsnodetemplate` was added. In `0.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:\n  1. Make sure any `awsnodetemplate` manifests are saved somewhere so that they can be reapplied to the cluster.\n  2. `kubectl delete crd awsnodetemplate`\n  3. `kubectl apply -f https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.12.1/charts/karpenter/crds/karpenter.k8s.aws_awsnodetemplates.yaml`\n  4. Perform the Karpenter upgrade to `0.12.0`+, which will install the new `awsnodetemplates` CRD.\n  5. Reapply the `awsnodetemplate` manifests you saved from step 1, if applicable.\n\n### Upgrading to `0.11.0`+\n\n`0.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`.\n\nOther 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.\n\n`0.11.0` adds a `providerRef` field in the Provisioner CRD. To use this new field you will need to replace the Provisioner CRD manually:\n\n```shell\nkubectl replace -f https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.11.0/charts/karpenter/crds/karpenter.sh_provisioners.yaml\n```\n\n### Upgrading to `0.10.0`+\n\n`0.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:\n\n```shell\nkubectl replace -f https://raw.githubusercontent.com/aws/karpenter-provider-aws/v0.10.0/charts/karpenter/crds/karpenter.sh_provisioners.yaml\n```\n\n📝 If you don't perform this manual CRD update, Karpenter will work correctly except for rejecting the creation/update of provisioners that use `startupTaints`.\n\n### Upgrading to `0.6.2`+\n\nIf using Helm, the variable names have changed for the cluster's name and endpoint. You may need to update any configuration\nthat sets the old variable names.\n\n- `controller.clusterName` is now `clusterName`\n- `controller.clusterEndpoint` is now `clusterEndpoint`\n"
  },
  {
    "path": "website/go.mod",
    "content": "module github.com/aws/karpenter-provider-aws/website\n\ngo 1.22\n\nrequire (\n\tgithub.com/google/docsy v0.6.0 // indirect\n\tgithub.com/google/docsy/dependencies v0.6.0 // indirect\n)\n"
  },
  {
    "path": "website/go.sum",
    "content": "github.com/FortAwesome/Font-Awesome v0.0.0-20220831210243-d3a7818c253f/go.mod h1:IUgezN/MFpCDIlFezw3L8j83oeiIuYoj28Miwr/KUYo=\ngithub.com/google/docsy v0.6.0 h1:43bVF18t2JihAamelQjjGzx1vO2ljCilVrBgetCA8oI=\ngithub.com/google/docsy v0.6.0/go.mod h1:VKKLqD8PQ7AglJc98yBorATfW7GrNVsn0kGXVYF6G+M=\ngithub.com/google/docsy/dependencies v0.6.0 h1:BFXDCINbp8ZuUGl/mrHjMfhCg+b1YX+hVLAA5fGW7Pc=\ngithub.com/google/docsy/dependencies v0.6.0/go.mod h1:EDGc2znMbGUw0RW5kWwy2oGgLt0iVXBmoq4UOqstuNE=\ngithub.com/twbs/bootstrap v4.6.2+incompatible/go.mod h1:fZTSrkpSf0/HkL0IIJzvVspTt1r9zuf7XlZau8kpcY0=\n"
  },
  {
    "path": "website/hugo.yaml",
    "content": "module:\n  hugoVersion:\n    extended: true\n    max: \"v0.120.3\"\n    min: \"v0.119.0\"\n  imports:\n    - path: github.com/google/docsy\n    - path: github.com/google/docsy/dependencies\nbaseURL: /\ndisableKinds:\n  - taxonomy\n  - term\nenableRobotsTXT: true\ncontentDir: content/en\ndefaultContentLanguage: en\ndefaultContentLanguageInSubdir: false\nenableMissingTranslationPlaceholders: true\nservices:\n  googleAnalytics:\n    id: G-NT6C9QZZQ0\n    languageCode: en-us\nlanguages:\n  en:\n    params:\n      pygmentsCodeFences: true\n      pygmentsUseClasses: false\n      pygmentsUseClassic: false\n      pygmentsStyle: tango\n      description: Just-in-time Nodes for Any Kubernetes Cluster\n    title: Karpenter\n    languageName: English\n    weight: 1\nblackfriday:\n  plainIDAnchors: true\n  hrefTargetBlank: true\n  angledQuotes: false\n  latexDashes: true\nmarkup:\n  goldmark:\n    renderer:\n      unsafe: true\n  highlight:\n    style: tango\nimaging:\n  resampleFilter: CatmullRom\n  quality: 75\n  anchor: smart\nparams:\n  copyright: \"Amazon.com, Inc. or its affiliates.\"\n  github_repo: \"https://github.com/aws/karpenter-provider-aws\"\n  github_subdir: website\n  github_branch: main\n  images:\n    - banner.png\n  version_menu: Releases\n  archived_version: false\n  offlineSearch: true\n  prism_syntax_highlighting: true\n  ui:\n    sidebar_menu_compact: true\n    sidebar_menu_foldable: true\n    breadcrumb_disable: false\n    sidebar_search_disable: false\n    navbar_logo: true\n    footer_about_disable: true\n  snapshot_repo:\n    account_id: \"021119463062\"\n    region: us-east-1\n  links:\n    developer:\n      - name: GitHub\n        url: \"https://github.com/kubernetes-sigs/karpenter\"\n        icon: fab fa-github\n        desc: Development takes place here!\n      - name: Slack\n        url: \"https://slack.k8s.io/\"\n        icon: fab fa-slack\n        desc: \"Chat with us on Slack in the #aws-provider channel\"\n  latest_release_version: \"1.10.0\"\n  latest_k8s_version: \"1.34\"\n  versions:\n    - v1.9\n    - v1.8\n    - v1.7\n    - v1.0\n    - preview\nmenu:\n  main:\n    - name: GitHub\n      weight: 99\n      url: \"https://github.com/kubernetes-sigs/karpenter\"\n      pre: <i class='fab fa-github'></i>\n    - name: Docs\n      weight: 20\n      url: \"docs\"\n      pre: <i class='fas fa-book'></i>\n"
  },
  {
    "path": "website/layouts/404.html",
    "content": "{{ define \"main\"}}\n<main id=\"main\">\n  <div>\n    <h1 id=\"title\">Not found</h1>\n    <p>Oops! This page doesn't exist. Try going back to our <a href=\"{{ \"/\" | relURL }}\">home page</a>.</p>\n  </div>\n</main>\n{{ end }}\n"
  },
  {
    "path": "website/layouts/partials/favicons.html",
    "content": "<head>\n<link rel=\"icon\" type=\"image/svg+xml\" href=\"/favicon.svg\">\n<link rel=\"alternate icon\" href=\"/favicon.ico\">\n</head>\n"
  },
  {
    "path": "website/layouts/partials/footer.html",
    "content": "{{ $links := .Site.Params.links }}\n<footer class=\"bg-dark py-5 row d-print-none\">\n  <div class=\"container-fluid mx-sm-5\">\n    <div class=\"row\">\n      <p class=\"mx-auto col-sm-3 text-center text-light\">\n        Built with ❤️ at <a class=\"text-light\" href=\"https://aws.amazon.com/\">AWS</a>\n      </p>\n    </div>\n    <div class=\"row\">\n      <div class=\"col-6 col-sm-4 text-xs-center order-sm-2\">\n        {{ with $links }}\n          {{ with index . \"user\"}}\n            {{ template \"footer-links-block\"  . }}\n          {{ end }}\n        {{ end }}\n      </div>\n      <div class=\"col-6 col-sm-4 text-right text-xs-center order-sm-3\">\n        {{ with $links }}\n          {{ with index . \"developer\"}}\n            {{ template \"footer-links-block\"  . }}\n          {{ end }}\n        {{ end }}\n      </div>\n      <div class=\"col-12 col-sm-4 text-center py-2 order-sm-2\">\n        {{ with .Site.Params.copyright }}<small class=\"text-white\">&copy; {{ now.Year}} {{ .}} {{ T \"footer_all_rights_reserved\" }}</small>{{ end }}\n        {{ with .Site.Params.privacy_policy }}<small class=\"ml-1\"><a href=\"{{ . }}\" target=\"_blank\" rel=\"noopener\">{{ T \"footer_privacy_policy\" }}</a></small>{{ end }}\n        {{ if not .Site.Params.ui.footer_about_disable }}\n          {{ with .Site.GetPage \"about\" }}<p class=\"mt-2\"><a href=\"{{ .RelPermalink }}\">{{ .Title }}</a></p>{{ end }}\n        {{ end }}\n      </div>\n    </div>\n  </div>\n</footer>\n{{ define \"footer-links-block\" }}\n  <ul class=\"list-inline mb-0\">\n    {{ range . }}\n      <li class=\"list-inline-item mx-2 h3\" data-toggle=\"tooltip\" data-placement=\"top\" title=\"{{ .name }}\" aria-label=\"{{ .name }}\">\n        <a class=\"text-white\" target=\"_blank\" rel=\"noopener\" href=\"{{ .url }}\" aria-label=\"{{ .name }}\">\n          <i class=\"{{ .icon }}\"></i>\n        </a>\n      </li>\n    {{ end }}\n  </ul>\n{{ end }}\n"
  },
  {
    "path": "website/layouts/partials/navbar-version-selector.html",
    "content": "{{ $pageDir := index (split (path.Dir .Page.RelPermalink) \"/\") 1 }}\n<!-- special treatment for the homepage. we treat it same as latest docs //-->\n{{ if or (eq $pageDir \"docs\") (eq $pageDir \"\") }}\n\t{{ $pageDir = printf \"v%s.%s\" ( index ( split .Site.Params.latest_release_version \".\" ) 0 ) ( index ( split .Site.Params.latest_release_version \".\" ) 1 ) }}\n{{ end }}\n{{ $pagePath := replace .Page.RelPermalink \"docs\" \"\" }}\n{{ $pagePath = replace $pagePath $pageDir \"\" }}\n{{ $pagePath = trim $pagePath \"/\" }}\n\n<a class=\"nav-link dropdown-toggle\" href=\"#\" id=\"navbarDropdown\" role=\"button\" data-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\">\n\t{{ $pageDir }} {{ if eq (index .Site.Params.versions 0) $pageDir }} (latest) {{ end }}\n</a>\n<div class=\"dropdown-menu\" aria-labelledby=\"navbarDropdownMenuLink\" id=\"navbarVersionSelector\">\n\t{{ range $index, $version := .Site.Params.versions }}\n\t<a class=\"dropdown-item\"\n\t\thref='/{{ $version }}{{ if not (hasPrefix $pagePath \"/\") }}{{ \"/\" }}{{ end }}{{ $pagePath }}'\n\t\tdata-docs-version=\"{{ $version }}\">\n\t\t{{ $version }} {{ if eq $index 0 }} (latest) {{ end }}\n\t</a>\n\t{{ end }}\n</div>\n"
  },
  {
    "path": "website/layouts/robots.txt",
    "content": "User-agent: *\n\nDisallow: /v0.4.3-docs/\n\nAllow: /docs/\nAllow: /index.html\n\nSITEMAP: https://karpenter.sh/sitemap.xml\n"
  },
  {
    "path": "website/layouts/shortcodes/blocks/feature.html",
    "content": "{{ $icon := .Get \"icon\" | default \"fa-lightbulb\" }}\n{{ $url_text := .Get \"url_text\" }}\n{{ $feature_class := .Get \"feature_class\" | default \"\" }}\n<div class=\"col-lg mb-5 mb-lg-0 text-center {{ $feature_class }}\">\n  <div class=\"mb-4 h1\">\n    <i class=\"{{ if not (or (hasPrefix $icon \"fas \") (hasPrefix $icon \"fab \")) }}fas {{ end }}{{ $icon }}\"></i>\n  </div>\n  <h4 class=\"h3\">\n  {{ if eq .Page.File.Ext \"md\" }}\n  {{ .Get \"title\" | markdownify }}\n  {{ else }}\n  {{ .Get \"title\" | htmlUnescape | safeHTML }}\n  {{ end }}\n  </h4>\n  <p class=\"mb-0\">\n  {{ if eq .Page.File.Ext \"md\" }}\n  {{ .Inner | markdownify }}\n  {{ else }}\n  {{ .Inner | htmlUnescape | safeHTML }}\n  {{ end }}\n  </p>\n  {{ with .Get \"url\" }}<p><a href=\"{{ . }}\">{{ with $url_text }}{{ $url_text }}{{ else }}{{ T \"ui_read_more\" }}{{ end }} …</a></p>{{ end }}\n</div>\n"
  },
  {
    "path": "website/layouts/shortcodes/github.html",
    "content": "<a id=\"github-counter\" class=\"btn btn-lg btn-dark font-weight-bold\" href=\"https://github.com/aws/karpenter\">\n    <i class=\"fab fa-github\"></i>\n    GitHub\n</a>\n<script>\n  url = \"https://api.github.com/repos/aws/karpenter-provider-aws\"\n  fetch(url).then(function(response) {\n    return response.json();\n  }).then(function(data) {\n    stars = data.stargazers_count;\n    var element = document.getElementById(\"github-counter\");\n    element.innerHTML = `<i class=\"fab fa-github\"></i> Stars on Github: ${stars}`;\n  })\n</script>\n"
  },
  {
    "path": "website/layouts/shortcodes/githubRelRef.html",
    "content": "/{{ replace (chomp (delimit (first 2 (split .Page.RelPermalink \"/\")) \"\" \"\")) \"preview\" .Page.Site.Params.github_branch }}/"
  },
  {
    "path": "website/layouts/shortcodes/script.html",
    "content": "{{ $file := .Get \"file\" }}\n{{ $version := index ( split .Page.Path `/` ) 0 }}\n{{ $fileContents := replace $file `{VERSION}` $version | readFile }}\n{{ $lang := .Get \"language\" }}\n{{ (print \"```\" $lang \"\\n\" $fileContents \"```\") | safeHTML }}\n"
  },
  {
    "path": "website/netlify.toml",
    "content": "[build]\nbase = \"website/\"\npublish = \"public\"\ncommand = \"npm install; hugo --gc --minify\"\n\n[context.production.environment]\nHUGO_VERSION = \"0.120.3\"\nHUGO_ENV = \"production\"\nHUGO_ENABLEGITINFO = \"true\"\n\n[context.split1]\ncommand = \"npm install; hugo --gc --minify --enableGitInfo\"\n\n[context.split1.environment]\nHUGO_VERSION = \"0.120.3\"\nHUGO_ENV = \"production\"\n\n[context.deploy-preview]\ncommand = \"npm install; hugo --gc --minify --buildFuture -b $DEPLOY_PRIME_URL\"\n\n[context.deploy-preview.environment]\nHUGO_VERSION = \"0.120.3\"\n\n[context.branch-deploy]\ncommand = \"npm install; hugo --gc --minify -b $DEPLOY_PRIME_URL\"\n\n[context.branch-deploy.environment]\nHUGO_VERSION = \"0.120.3\"\n\n[context.next.environment]\nHUGO_ENABLEGITINFO = \"true\"\n"
  },
  {
    "path": "website/package.json",
    "content": "{\n  \"name\": \"website\",\n  \"version\": \"1.0.0\",\n  \"devDependencies\": {\n    \"ansi-regex\": \">=6.2.2\",\n    \"autoprefixer\": \"^10.4.23\",\n    \"postcss\": \"^8.5.6\",\n    \"postcss-cli\": \"^11.0.1\",\n    \"hugo-extended\": \"0.154.5\"\n  },\n\n  \"scripts\": {\n    \"clean\": \"rm -rf node_modules\"\n  }\n}\n"
  },
  {
    "path": "website/static/_redirects",
    "content": "# Redirect any v1beta1-migration reference to the v0.32 version\n/*/upgrading/v1beta1-migration /v1.0/upgrading/v1beta1-migration\n\n# Redirect old \"Managing AMIs\" Task path\n/preview/tasks/amitasks /preview/tasks/managing-amis\n/docs/tasks/amitasks /docs/tasks/managing-amis\n/v0.34/tasks/amitasks /v0.34/tasks/managing-amis\n/v0.35/tasks/amitasks /v0.35/tasks/managing-amis\n\n# Redirect old working group page to the new community meetings page\n/preview/contributing/working-group /preview/contributing/community-meetings\n/docs/contributing/working-group /docs/contributing/community-meetings\n/v1.0/contributing/working-group /v1.0/contributing/community-meetings\n/v1.1/contributing/working-group /v1.1/contributing/community-meetings\n/v1.2/contributing/working-group /v1.2/contributing/community-meetings"
  },
  {
    "path": "website/static/favicons/browserconfig.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<browserconfig>\n  <msapplication>\n    <tile>\n    <square70x70logo src=\"/iconx/tile70x70.png\" />\n    <square150x150logo src=\"/iconx/tile150x150.png\" />\n    <wide310x150logo src=\"/iconx/tile310x150.png\" />\n    <square310x310logo src=\"/iconx/tile310x310.png\" />\n    <tilecolor>transparent</tilecolor>\n    </tile>\n  </msapplication>\n</browserconfig>"
  }
]